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