useDialog.ts (4060c00a75883036bbd315fb25c90065209312b3) useDialog.ts (cfa0fc0757dad620cd0b0533a949d86b17086d32)
1import {atom, useAtom} from 'jotai';
2import {IDialogKey, IDialogType} from './components';
3
4type injectedProps = 'visible' | 'hideDialog';
5const dialogNameAtom = atom<IDialogKey | null>(null);
6const payloadAtom = atom<
7 | Omit<Parameters<IDialogType[keyof IDialogType]>[0], injectedProps>
8 | undefined
9>(undefined);
10
1import {atom, useAtom} from 'jotai';
2import {IDialogKey, IDialogType} from './components';
3
4type injectedProps = 'visible' | 'hideDialog';
5const dialogNameAtom = atom<IDialogKey | null>(null);
6const payloadAtom = atom<
7 | Omit<Parameters<IDialogType[keyof IDialogType]>[0], injectedProps>
8 | undefined
9>(undefined);
10
11// type IDialogType = {
12// 'simple-dialog': {
13// title: string;
14// content: string;
15// onOk?: () => void;
16// };
17// };
18
19export default function useDialog() {
20 const [dialogName, setDialogName] = useAtom(dialogNameAtom);
21 const [payload, setPayload] = useAtom(payloadAtom);
22
23 function showDialog<T extends keyof IDialogType>(
24 name: T,
25 payload?: Omit<Parameters<IDialogType[T]>[0], injectedProps>,
26 ) {
27 setDialogName(name);
28 setPayload(payload);
29 }
30
31 function hideDialog() {
32 setDialogName(null);
33 setPayload(undefined);
34 }
35
36 return {dialogName, payload, showDialog, hideDialog};
37}
11export default function useDialog() {
12 const [dialogName, setDialogName] = useAtom(dialogNameAtom);
13 const [payload, setPayload] = useAtom(payloadAtom);
14
15 function showDialog<T extends keyof IDialogType>(
16 name: T,
17 payload?: Omit<Parameters<IDialogType[T]>[0], injectedProps>,
18 ) {
19 setDialogName(name);
20 setPayload(payload);
21 }
22
23 function hideDialog() {
24 setDialogName(null);
25 setPayload(undefined);
26 }
27
28 return {dialogName, payload, showDialog, hideDialog};
29}