+
{
- if (!isLoading) toggleModal();
+ if (!isLoading) onClose();
}}
>
- {/*
*/}
- {successCb && (
+ {onSuccess && (
{successBtnText}
)}
- {deleteCb && (
+ {onDelete && (
{deleteBtnText}
@@ -199,7 +173,7 @@ const Modal = ({
Close
@@ -210,7 +184,8 @@ const Modal = ({
- >
+ >,
+ document.body
);
};
diff --git a/src/components/Modal/useDisclosure.ts b/src/components/Modal/useDisclosure.ts
new file mode 100644
index 00000000..d6fbc0a9
--- /dev/null
+++ b/src/components/Modal/useDisclosure.ts
@@ -0,0 +1,61 @@
+import { useCallback, useState } from "preact/hooks";
+
+export interface UseDisclosureProps {
+ open?: boolean;
+ defaultOpen?: boolean;
+ id?: string;
+
+ onClose?(): void;
+
+ onOpen?(): void;
+}
+
+/**
+ * `useDisclosure` is a custom hook used to help handle common open, close, or toggle scenarios.
+ * It can be used to control feedback component such as `Modal`, `AlertDialog`, `Drawer`, etc.
+ *
+ * @see Docs https://chakra-ui.com/docs/hooks/use-disclosure
+ */
+export function useDisclosure(props: UseDisclosureProps = {}) {
+ const { onClose: onCloseProp, onOpen: onOpenProp, open: openProp } = props;
+
+ const handleOpen = useCallback(onOpenProp, []);
+ const handleClose = useCallback(onCloseProp, []);
+
+ const [openState, setopen] = useState(props.defaultOpen || false);
+
+ const open = openProp !== undefined ? openProp : openState;
+
+ const isControlled = openProp !== undefined;
+
+ const onClose = useCallback(() => {
+ if (!isControlled) {
+ setopen(false);
+ }
+ handleClose?.();
+ }, [isControlled, handleClose]);
+
+ const onOpen = useCallback(() => {
+ if (!isControlled) {
+ setopen(true);
+ }
+ handleOpen?.();
+ }, [isControlled, handleOpen]);
+
+ const onToggle = useCallback(() => {
+ if (open) {
+ onClose();
+ } else {
+ onOpen();
+ }
+ }, [open, onOpen, onClose]);
+
+ return {
+ open,
+ onOpen,
+ onClose,
+ onToggle,
+ };
+}
+
+export type UseDisclosureReturn = ReturnType
;
diff --git a/src/components/app.tsx b/src/components/app.tsx
index a45d4bbc..3ac12c60 100644
--- a/src/components/app.tsx
+++ b/src/components/app.tsx
@@ -6,7 +6,6 @@ import Router from "preact-router";
import { useEffect } from "preact/hooks";
import { Provider } from "react-redux";
-import { UseModalProvider } from "components/Modal/Modal";
import { ToastProvider } from "components/toast/toastProvider";
import { Menu } from "containers/Menu";
@@ -112,11 +111,9 @@ const AppDefault = () => {
-
-
-
-
-
+
+
+