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} |