From 1dd7b1a6b97f75bca0d1a5c0dbb4254aa4bbd418 Mon Sep 17 00:00:00 2001 From: Jack Weller Date: Tue, 25 Mar 2025 07:06:50 +1000 Subject: [PATCH] feat: add title to dynamic section (#2614) * feat: add title to dynamic section * fix: formatting * feat: use badge rather than text * fix: use board radius * fix: use shared.ts validation --------- Co-authored-by: Meier Lukas --- .../test/mocks/dynamic-section-mock.ts | 1 + .../board/sections/dynamic-section.tsx | 27 ++++++++++++++++--- .../dynamic/actions/add-dynamic-section.ts | 1 + .../sections/dynamic/dynamic-edit-modal.tsx | 3 ++- packages/translation/src/lang/en.json | 3 +++ packages/validation/src/shared.ts | 1 + 6 files changed, 31 insertions(+), 5 deletions(-) diff --git a/apps/nextjs/src/components/board/items/actions/test/mocks/dynamic-section-mock.ts b/apps/nextjs/src/components/board/items/actions/test/mocks/dynamic-section-mock.ts index 7de8db63c..553deda9e 100644 --- a/apps/nextjs/src/components/board/items/actions/test/mocks/dynamic-section-mock.ts +++ b/apps/nextjs/src/components/board/items/actions/test/mocks/dynamic-section-mock.ts @@ -10,6 +10,7 @@ export class DynamicSectionMockBuilder { id: createId(), kind: "dynamic", options: { + title: "", borderColor: "", }, layouts: [], diff --git a/apps/nextjs/src/components/board/sections/dynamic-section.tsx b/apps/nextjs/src/components/board/sections/dynamic-section.tsx index 90525715a..3b5493366 100644 --- a/apps/nextjs/src/components/board/sections/dynamic-section.tsx +++ b/apps/nextjs/src/components/board/sections/dynamic-section.tsx @@ -1,4 +1,4 @@ -import { Box, Card } from "@mantine/core"; +import { Badge, Box, Card } from "@mantine/core"; import { useCurrentLayout, useRequiredBoard } from "@homarr/boards/context"; @@ -17,7 +17,12 @@ export const BoardDynamicSection = ({ section }: Props) => { const options = section.options; return ( - + { withBorder styles={{ root: { + overflow: "visible", "--opacity": board.opacity / 100, - overflow: "hidden", - "--border-color": options.borderColor !== "" ? options.borderColor : undefined, + "--border-color": options.borderColor || undefined, }, }} radius={board.itemRadius} p={0} > + {options.title && ( + + {options.title} + + )} {/* Use unique key by layout to reinitialize gridstack */} diff --git a/apps/nextjs/src/components/board/sections/dynamic/actions/add-dynamic-section.ts b/apps/nextjs/src/components/board/sections/dynamic/actions/add-dynamic-section.ts index 415d80572..c33507a73 100644 --- a/apps/nextjs/src/components/board/sections/dynamic/actions/add-dynamic-section.ts +++ b/apps/nextjs/src/components/board/sections/dynamic/actions/add-dynamic-section.ts @@ -17,6 +17,7 @@ export const addDynamicSectionCallback = () => (board: Board) => { id: createId(), kind: "dynamic", options: { + title: "", borderColor: "", }, layouts: createDynamicSectionLayouts(board, firstSection), diff --git a/apps/nextjs/src/components/board/sections/dynamic/dynamic-edit-modal.tsx b/apps/nextjs/src/components/board/sections/dynamic/dynamic-edit-modal.tsx index 001af145a..85ffc7e79 100644 --- a/apps/nextjs/src/components/board/sections/dynamic/dynamic-edit-modal.tsx +++ b/apps/nextjs/src/components/board/sections/dynamic/dynamic-edit-modal.tsx @@ -1,6 +1,6 @@ "use client"; -import { Button, CloseButton, ColorInput, Group, Stack, useMantineTheme } from "@mantine/core"; +import { Button, CloseButton, ColorInput, Group, Stack, TextInput, useMantineTheme } from "@mantine/core"; import type { z } from "zod"; import { useZodForm } from "@homarr/form"; @@ -30,6 +30,7 @@ export const DynamicSectionEditModal = createModal(({ actions, inner })} > +