xref: /MusicFree/src/components/panels/usePanel.ts (revision c15039e228b46df3f5b7c5a9eb747a6097ad7be8)
191c81973S猫头猫import {GlobalState} from '@/utils/stateMapper';
2ec4205c4S猫头猫import {DeviceEventEmitter} from 'react-native';
3378a6099S猫头猫import panels from './types';
4378a6099S猫头猫
5378a6099S猫头猫type IPanel = typeof panels;
6378a6099S猫头猫type IPanelkeys = keyof IPanel;
7378a6099S猫头猫
891c81973S猫头猫interface IPanelInfo {
991c81973S猫头猫    name: IPanelkeys | null;
1091c81973S猫头猫    payload: any;
1191c81973S猫头猫}
12378a6099S猫头猫
1391c81973S猫头猫/** 浮层信息 */
1491c81973S猫头猫export const panelInfoStore = new GlobalState<IPanelInfo>({
1591c81973S猫头猫    name: null,
1691c81973S猫头猫    payload: null,
1791c81973S猫头猫});
18378a6099S猫头猫
19*c15039e2S猫头猫export function showPanel<T extends IPanelkeys>(
20378a6099S猫头猫    name: T,
21378a6099S猫头猫    payload?: Parameters<IPanel[T]>[0],
22378a6099S猫头猫) {
23ec4205c4S猫头猫    if (panelInfoStore.getValue().name) {
24ec4205c4S猫头猫        DeviceEventEmitter.emit('hidePanel', () => {
2591c81973S猫头猫            panelInfoStore.setValue({
2691c81973S猫头猫                name,
2791c81973S猫头猫                payload,
2891c81973S猫头猫            });
29ec4205c4S猫头猫        });
30ec4205c4S猫头猫    } else {
31ec4205c4S猫头猫        panelInfoStore.setValue({
32ec4205c4S猫头猫            name,
33ec4205c4S猫头猫            payload,
34ec4205c4S猫头猫        });
35ec4205c4S猫头猫    }
36*c15039e2S猫头猫}
37378a6099S猫头猫
38*c15039e2S猫头猫export function hidePanel() {
39ec4205c4S猫头猫    DeviceEventEmitter.emit('hidePanel');
40378a6099S猫头猫}
41