fix: isolate board editing context from global menus

This commit is contained in:
ajnart committed 2026-09-09 12:04:18 +02:00
1 parent bed69c7a92
commit 9256a432f9
6 files changed
+15 -7

No files matched your search

@@ -1,7 +1,7 @@
"use client";
import type { PropsWithChildren } from "react";
import { createContext, useContext, useCallback, useEffect, useRef, useState } from "react";
import { useCallback, useEffect, useRef, useState } from "react";
import { useRouter, useSearchParams } from "next/navigation";
import { useHotkeys } from "@mantine/hooks";
import { notifications } from "@mantine/notifications";
@@ -18,6 +18,7 @@ import { useI18n } from "@homarr/translation/client";
import { useBoardPermissions } from "~/components/board/permissions/client";
import { loadGridEditorAsync, scheduleGridEditorWarmup } from "~/components/board/sections/grid/grid-editor-loader";
import type * as EditActionsModule from "./_edit-actions";
import { BoardEditingContext } from "~/components/board/board-editing-context";
let editActionsModulePromise: Promise<typeof EditActionsModule> | undefined;
const loadEditActionsAsync = () => {
@@ -35,8 +36,7 @@ const loadBoardEditorAsync = async () =>
import("~/components/board/sections/container/container-menu"),
]);
const BoardEditingContext = createContext<ReturnType<typeof useBoardEditingController> | null>(null);
export const useOptionalBoardEditing = () => useContext(BoardEditingContext);
export type BoardEditingControls = ReturnType<typeof useBoardEditingController>;
export const BoardEditingProvider = ({
children,
@@ -5,7 +5,7 @@ import { useRequiredBoard } from "@homarr/boards/context";
import { useEditMode } from "@homarr/boards/edit-mode";
import { useI18n } from "@homarr/translation/client";
import { useBoardPermissions } from "~/components/board/permissions/client";
import { useOptionalBoardEditing } from "./_editing-provider";
import { useOptionalBoardEditing } from "~/components/board/board-editing-context";
import { HeaderButton } from "~/components/layout/header/button";
import { TourTarget } from "~/components/layout/header/tour-target";
const BoardEditActions = dynamic(() => import("./_edit-actions"), { ssr: false });
@@ -4,7 +4,7 @@ import { Menu } from "@mantine/core";
import { IconBox, IconLayoutGridAdd, IconPlug, IconResize } from "@tabler/icons-react";
import { useI18n } from "@homarr/translation/client";
import { useBoardAddActions } from "./use-board-add-actions";
import { useOptionalBoardEditing } from "~/app/[locale]/boards/(content)/_editing-provider";
import { useOptionalBoardEditing } from "./board-editing-context";
export const BoardAddMenuItems = () => {
const editing = useOptionalBoardEditing();
@@ -4,7 +4,7 @@ import type { PropsWithChildren, MouseEvent } from "react";
import { useEffect, useState } from "react";
import { Box, Menu } from "@mantine/core";
import dynamic from "next/dynamic";
import { useOptionalBoardEditing } from "~/app/[locale]/boards/(content)/_editing-provider";
import { useOptionalBoardEditing } from "./board-editing-context";
const BoardAddMenuItems = dynamic(() => import("./board-add-menu-items").then((module) => module.BoardAddMenuItems));
const occupiedSpaceSelector =
@@ -0,0 +1,8 @@
"use client";
import { createContext, useContext } from "react";
import type { BoardEditingControls } from "~/app/[locale]/boards/(content)/_editing-provider";
export const BoardEditingContext = createContext<BoardEditingControls | null>(null);
export const useOptionalBoardEditing = () => useContext(BoardEditingContext);
@@ -27,7 +27,7 @@ import { useI18n } from "@homarr/translation/client";
import { Link } from "@homarr/ui";
import { useAuthContext } from "~/app/[locale]/_client-providers/session";
import { useOptionalBoardEditing } from "~/app/[locale]/boards/(content)/_editing-provider";
import { useOptionalBoardEditing } from "./board/board-editing-context";
import { useOptionalHomarrAssistant } from "./assistant/assistant-context";
import type { BoardSwitcherControls } from "./board/board-switcher";
import { CurrentColorSchemeCombobox } from "./color-scheme/current-color-scheme-combobox";