fix: isolate board editing context from global menus
This commit is contained in:
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";
|
||||
|
||||
Reference in new issue
Block a user