From c7d2545ec7bbcdba30b775453d53df5a359410bd Mon Sep 17 00:00:00 2001 From: crupest Date: Thu, 21 Sep 2023 15:35:27 +0800 Subject: Revert dialog. --- FrontEnd/src/components/dialog/DialogProvider.tsx | 95 ----------------------- 1 file changed, 95 deletions(-) delete mode 100644 FrontEnd/src/components/dialog/DialogProvider.tsx (limited to 'FrontEnd/src/components/dialog/DialogProvider.tsx') diff --git a/FrontEnd/src/components/dialog/DialogProvider.tsx b/FrontEnd/src/components/dialog/DialogProvider.tsx deleted file mode 100644 index bb85e4cf..00000000 --- a/FrontEnd/src/components/dialog/DialogProvider.tsx +++ /dev/null @@ -1,95 +0,0 @@ -import { useState, useContext, createContext, ReactNode } from "react"; - -import { UiLogicError } from "../common"; - -type DialogMap = { - [K in D]: ReactNode; -}; - -interface DialogController { - currentDialog: D | null; - currentDialogReactNode: ReactNode; - canSwitchDialog: boolean; - switchDialog: (newDialog: D | null) => void; - setCanSwitchDialog: (enable: boolean) => void; - closeDialog: () => void; - forceSwitchDialog: (newDialog: D | null) => void; - forceCloseDialog: () => void; -} - -export function useDialog( - dialogs: DialogMap, - options?: { - initDialog?: D | null; - onClose?: { - [K in D]?: () => void; - }; - }, -): { - controller: DialogController; - switchDialog: (newDialog: D | null) => void; - forceSwitchDialog: (newDialog: D | null) => void; - createDialogSwitch: (newDialog: D | null) => () => void; -} { - const [canSwitchDialog, setCanSwitchDialog] = useState(true); - const [dialog, setDialog] = useState(options?.initDialog ?? null); - - const forceSwitchDialog = (newDialog: D | null) => { - if (dialog != null) { - options?.onClose?.[dialog]?.(); - } - setDialog(newDialog); - setCanSwitchDialog(true); - }; - - const switchDialog = (newDialog: D | null) => { - if (canSwitchDialog) { - forceSwitchDialog(newDialog); - } - }; - - const controller: DialogController = { - currentDialog: dialog, - currentDialogReactNode: dialog == null ? null : dialogs[dialog], - canSwitchDialog, - switchDialog, - setCanSwitchDialog, - closeDialog: () => switchDialog(null), - forceSwitchDialog, - forceCloseDialog: () => forceSwitchDialog(null), - }; - - return { - controller, - switchDialog, - forceSwitchDialog, - createDialogSwitch: (newDialog: D | null) => () => switchDialog(newDialog), - }; -} - -const DialogControllerContext = createContext | null>( - null, -); - -export function useDialogController(): DialogController { - const controller = useContext(DialogControllerContext); - if (controller == null) throw new UiLogicError("not in dialog provider"); - return controller; -} - -export function useCloseDialog(): () => void { - const controller = useDialogController(); - return controller.closeDialog; -} - -export function DialogProvider({ - controller, -}: { - controller: DialogController; -}) { - return ( - - {controller.currentDialogReactNode} - - ); -} -- cgit v1.2.3