xref: /MusicFree/src/components/panels/index.tsx (revision c9af9657d3a0536104c5305e90c801db5d9cac39)
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';
5378a6099S猫头猫import {_usePanel} from './usePanel';
6bf6e62f2S猫头猫
7*c9af9657S猫头猫function Panels() {
86a68ec83S猫头猫    const {panelName, payload, unmountPanel} = _usePanel();
96a68ec83S猫头猫    const Component = panelName ? panels[panelName] : null;
10bf6e62f2S猫头猫
11bf6e62f2S猫头猫    const backHandlerRef = useRef<NativeEventSubscription>();
12bf6e62f2S猫头猫
13bf6e62f2S猫头猫    useEffect(() => {
14bf6e62f2S猫头猫        if (backHandlerRef.current) {
15bf6e62f2S猫头猫            backHandlerRef.current?.remove();
16bf6e62f2S猫头猫            backHandlerRef.current = undefined;
17bf6e62f2S猫头猫        }
186a68ec83S猫头猫        if (panelName) {
19bf6e62f2S猫头猫            backHandlerRef.current = BackHandler.addEventListener(
20bf6e62f2S猫头猫                'hardwareBackPress',
21bf6e62f2S猫头猫                () => {
226a68ec83S猫头猫                    unmountPanel();
23bf6e62f2S猫头猫                    return true;
24bf6e62f2S猫头猫                },
25bf6e62f2S猫头猫            );
26bf6e62f2S猫头猫        }
27bf6e62f2S猫头猫        return () => {
28bf6e62f2S猫头猫            if (backHandlerRef.current) {
29bf6e62f2S猫头猫                backHandlerRef.current?.remove();
30bf6e62f2S猫头猫                backHandlerRef.current = undefined;
31bf6e62f2S猫头猫            }
32bf6e62f2S猫头猫        };
336a68ec83S猫头猫    }, [panelName]);
34bf6e62f2S猫头猫
35bf6e62f2S猫头猫    return (
36bf6e62f2S猫头猫        <Portal>
374060c00aS猫头猫            {Component ? <Component {...(payload ?? {})} /> : <></>}
38bf6e62f2S猫头猫        </Portal>
39bf6e62f2S猫头猫    );
40bf6e62f2S猫头猫}
41*c9af9657S猫头猫
42*c9af9657S猫头猫export default React.memo(Panels, () => true);
43