xref: /MusicFree/src/components/panels/index.tsx (revision 7b28964f7c9c61e9bd9809aaf993681743945398)
1bf6e62f2S猫头猫import React, {useEffect, useRef} from 'react';
2bf6e62f2S猫头猫import {BackHandler, NativeEventSubscription} from 'react-native';
3bf6e62f2S猫头猫import panels from './types';
491c81973S猫头猫import usePanel, {panelInfoStore} from './usePanel';
5bf6e62f2S猫头猫
6c9af9657S猫头猫function Panels() {
791c81973S猫头猫    const {unmountPanel} = usePanel();
891c81973S猫头猫    const panelInfoState = panelInfoStore.useValue();
991c81973S猫头猫
1091c81973S猫头猫    const Component = panelInfoState.name ? panels[panelInfoState.name] : null;
11bf6e62f2S猫头猫
12bf6e62f2S猫头猫    const backHandlerRef = useRef<NativeEventSubscription>();
13bf6e62f2S猫头猫
14bf6e62f2S猫头猫    useEffect(() => {
15bf6e62f2S猫头猫        if (backHandlerRef.current) {
16bf6e62f2S猫头猫            backHandlerRef.current?.remove();
17bf6e62f2S猫头猫            backHandlerRef.current = undefined;
18bf6e62f2S猫头猫        }
1991c81973S猫头猫        if (panelInfoState.name) {
20bf6e62f2S猫头猫            backHandlerRef.current = BackHandler.addEventListener(
21bf6e62f2S猫头猫                'hardwareBackPress',
22bf6e62f2S猫头猫                () => {
236a68ec83S猫头猫                    unmountPanel();
24bf6e62f2S猫头猫                    return true;
25bf6e62f2S猫头猫                },
26bf6e62f2S猫头猫            );
27bf6e62f2S猫头猫        }
28bf6e62f2S猫头猫        return () => {
29bf6e62f2S猫头猫            if (backHandlerRef.current) {
30bf6e62f2S猫头猫                backHandlerRef.current?.remove();
31bf6e62f2S猫头猫                backHandlerRef.current = undefined;
32bf6e62f2S猫头猫            }
33bf6e62f2S猫头猫        };
3491c81973S猫头猫    }, [panelInfoState]);
35bf6e62f2S猫头猫
36*7b28964fS猫头猫    return Component ? <Component {...(panelInfoState.payload ?? {})} /> : null;
37bf6e62f2S猫头猫}
38c9af9657S猫头猫
39c9af9657S猫头猫export default React.memo(Panels, () => true);
40