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> | undefined 8>(undefined); 9 10// type IDialogType = { 11// 'simple-dialog': { 12// title: string; 13// content: string; 14// onOk?: () => void; 15// }; 16// }; 17 18export default function useDialog() { 19 const [dialogName, setDialogName] = useAtom(dialogNameAtom); 20 const [payload, setPayload] = useAtom(payloadAtom); 21 22 function showDialog<T extends keyof IDialogType>( 23 name: T, 24 payload?: Omit<Parameters<IDialogType[T]>[0], injectedProps>, 25 ) { 26 setDialogName(name); 27 setPayload(payload); 28 } 29 30 function hideDialog() { 31 setDialogName(null); 32 setPayload(undefined); 33 } 34 35 return {dialogName, payload, showDialog, hideDialog}; 36} 37