xref: /MusicFree/src/components/dialogs/useDialog.ts (revision dffbbaff38e2286fcff2aa36e78044bd4f94a7d1)
1443caf22S猫头猫import {GlobalState} from '@/utils/stateMapper';
2443caf22S猫头猫import {useCallback} from 'react';
3caaa811bS猫头猫import {IDialogKey, IDialogType} from './components';
4bf6e62f2S猫头猫
5443caf22S猫头猫interface IDialogInfo {
6443caf22S猫头猫    name: IDialogKey | null;
7443caf22S猫头猫    payload: any;
8443caf22S猫头猫}
9443caf22S猫头猫
10443caf22S猫头猫export const dialogInfoStore = new GlobalState<IDialogInfo>({
11443caf22S猫头猫    name: null,
12443caf22S猫头猫    payload: null,
13443caf22S猫头猫});
14bf6e62f2S猫头猫
1575d76114S猫头猫export function showDialog<T extends keyof IDialogType>(
1675d76114S猫头猫    name: T,
1775d76114S猫头猫    payload?: Parameters<IDialogType[T]>[0],
1875d76114S猫头猫) {
1975d76114S猫头猫    dialogInfoStore.setValue({
2075d76114S猫头猫        name,
2175d76114S猫头猫        payload,
2275d76114S猫头猫    });
2375d76114S猫头猫}
2475d76114S猫头猫
2575d76114S猫头猫export function hideDialog() {
2675d76114S猫头猫    dialogInfoStore.setValue({
2775d76114S猫头猫        name: null,
2875d76114S猫头猫        payload: null,
2975d76114S猫头猫    });
3075d76114S猫头猫}
3175d76114S猫头猫
32bf6e62f2S猫头猫export default function useDialog() {
33443caf22S猫头猫    const showDialog = useCallback(
34443caf22S猫头猫        <T extends keyof IDialogType>(
35bf6e62f2S猫头猫            name: T,
36443caf22S猫头猫            payload?: Parameters<IDialogType[T]>[0],
37443caf22S猫头猫        ) => {
38443caf22S猫头猫            dialogInfoStore.setValue({
39443caf22S猫头猫                name,
40443caf22S猫头猫                payload,
41443caf22S猫头猫            });
42443caf22S猫头猫        },
43443caf22S猫头猫        [],
44443caf22S猫头猫    );
45bf6e62f2S猫头猫
46443caf22S猫头猫    const hideDialog = useCallback(() => {
47443caf22S猫头猫        dialogInfoStore.setValue({
48443caf22S猫头猫            name: null,
49443caf22S猫头猫            payload: null,
50443caf22S猫头猫        });
51443caf22S猫头猫    }, []);
52bf6e62f2S猫头猫
53443caf22S猫头猫    return {showDialog, hideDialog};
54bf6e62f2S猫头猫}
55*dffbbaffS猫头猫
56*dffbbaffS猫头猫export function getCurrentDialog() {
57*dffbbaffS猫头猫    return dialogInfoStore.getValue();
58*dffbbaffS猫头猫}
59