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