diff --git a/apps/nextjs/src/app/[locale]/boards/(content)/_header-actions.tsx b/apps/nextjs/src/app/[locale]/boards/(content)/_header-actions.tsx index 9ee773d16..01aa1bb11 100644 --- a/apps/nextjs/src/app/[locale]/boards/(content)/_header-actions.tsx +++ b/apps/nextjs/src/app/[locale]/boards/(content)/_header-actions.tsx @@ -16,6 +16,7 @@ import { IconResize, IconSettings, } from "@tabler/icons-react"; +import { applyAutoLayoutToBoard } from "node_modules/@homarr/api/src/router/board/board-layout"; import { clientApi } from "@homarr/api/client"; import { useSession } from "@homarr/auth/client"; @@ -165,7 +166,7 @@ const EditModeMenu = () => { }); const toggle = useCallback(() => { - if (isEditMode) return saveBoard(board); + if (isEditMode) return saveBoard(applyAutoLayoutToBoard(board)); open(); }, [board, isEditMode, saveBoard, open]); diff --git a/apps/nextjs/src/app/[locale]/boards/[name]/settings/_layout.tsx b/apps/nextjs/src/app/[locale]/boards/[name]/settings/_layout.tsx index 97a576a30..baba4ad19 100644 --- a/apps/nextjs/src/app/[locale]/boards/[name]/settings/_layout.tsx +++ b/apps/nextjs/src/app/[locale]/boards/[name]/settings/_layout.tsx @@ -1,11 +1,29 @@ "use client"; -import { Button, Fieldset, Grid, Group, Input, NumberInput, Slider, Stack, Text, TextInput } from "@mantine/core"; +import { + Button, + Chip, + ChipGroup, + Fieldset, + Grid, + Group, + Input, + InputWrapper, + NumberInput, + RadioGroup, + SimpleGrid, + Slider, + Stack, + Text, + TextInput, +} from "@mantine/core"; import { clientApi } from "@homarr/api/client"; import { createId } from "@homarr/common"; +import { boardLayoutModes } from "@homarr/definitions"; import { useZodForm } from "@homarr/form"; import { useI18n } from "@homarr/translation/client"; +import { CustomRadioCard } from "@homarr/ui"; import { boardSaveLayoutsSchema } from "@homarr/validation/board"; import type { Board } from "../../_types"; @@ -25,6 +43,8 @@ export const LayoutSettingsContent = ({ board }: Props) => { const form = useZodForm(boardSaveLayoutsSchema.omit({ id: true }).required(), { initialValues: { layouts: board.layouts, + layoutMode: board.layoutMode, + baseLayoutId: board.baseLayoutId, }, }); @@ -38,6 +58,47 @@ export const LayoutSettingsContent = ({ board }: Props) => { })} > + + + {boardLayoutModes.values.map((layoutMode) => ( + + ))} + + + + {form.values.layoutMode === "auto" && ( + + + + {form.values.layouts.map((layout) => ( + + {layout.name} + + ))} + + + + )} + {t("board.setting.section.layout.responsive.title")} @@ -82,18 +143,21 @@ export const LayoutSettingsContent = ({ board }: Props) => { /> - {form.values.layouts.length >= 2 && ( + {form.values.layouts.length >= 2 && form.values.baseLayoutId !== layout.id && (