xref: /MusicFree/src/components/panels/index.tsx (revision 91c8197380501f56579772c90297157d6f3c3aab)
1bf6e62f2S猫头猫import React, {useEffect, useRef} from 'react';
2bf6e62f2S猫头猫import {BackHandler, NativeEventSubscription} from 'react-native';
3bf6e62f2S猫头猫import {Portal} from 'react-native-paper';
4bf6e62f2S猫头猫import panels from './types';
5*91c81973S猫头猫import usePanel, {panelInfoStore} from './usePanel';
6bf6e62f2S猫头猫
7c9af9657S猫头猫function Panels() {
8*91c81973S猫头猫    const {unmountPanel} = usePanel();
9*91c81973S猫头猫    const panelInfoState = panelInfoStore.useValue();
10*91c81973S猫头猫
11*91c81973S猫头猫    const Component = panelInfoState.name ? panels[panelInfoState.name] : null;
12bf6e62f2S猫头猫
13bf6e62f2S猫头猫    const backHandlerRef = useRef<NativeEventSubscription>();
14bf6e62f2S猫头猫
15bf6e62f2S猫头猫    useEffect(() => {
16bf6e62f2S猫头猫        if (backHandlerRef.current) {
17bf6e62f2S猫头猫            backHandlerRef.current?.remove();
18bf6e62f2S猫头猫            backHandlerRef.current = undefined;
19bf6e62f2S猫头猫        }
20*91c81973S猫头猫        if (panelInfoState.name) {
21bf6e62f2S猫头猫            backHandlerRef.current = BackHandler.addEventListener(
22bf6e62f2S猫头猫                'hardwareBackPress',
23bf6e62f2S猫头猫                () => {
246a68ec83S猫头猫                    unmountPanel();
25bf6e62f2S猫头猫                    return true;
26bf6e62f2S猫头猫                },
27bf6e62f2S猫头猫            );
28bf6e62f2S猫头猫        }
29bf6e62f2S猫头猫        return () => {
30bf6e62f2S猫头猫            if (backHandlerRef.current) {
31bf6e62f2S猫头猫                backHandlerRef.current?.remove();
32bf6e62f2S猫头猫                backHandlerRef.current = undefined;
33bf6e62f2S猫头猫            }
34bf6e62f2S猫头猫        };
35*91c81973S猫头猫    }, [panelInfoState]);
36bf6e62f2S猫头猫
37bf6e62f2S猫头猫    return (
38bf6e62f2S猫头猫        <Portal>
39*91c81973S猫头猫            {Component ? (
40*91c81973S猫头猫                <Component {...(panelInfoState.payload ?? {})} />
41*91c81973S猫头猫            ) : (
42*91c81973S猫头猫                <></>
43*91c81973S猫头猫            )}
44bf6e62f2S猫头猫        </Portal>
45bf6e62f2S猫头猫    );
46bf6e62f2S猫头猫}
47c9af9657S猫头猫
48c9af9657S猫头猫export default React.memo(Panels, () => true);
49