xref: /MusicFree/src/components/dialogs/useDialog.ts (revision bf6e62f27bf21a011995d7561e0093fae1a2d72e)
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