xref: /MusicFree/src/components/panels/index.tsx (revision 6a68ec8324c235807d18136b208fd62d5a24e4de)
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';
508a8e62cS猫头猫import {_usePanel} from './usePanelShow';
6bf6e62f2S猫头猫
7bf6e62f2S猫头猫interface IProps {}
8bf6e62f2S猫头猫export default function (props: IProps) {
9*6a68ec83S猫头猫  const {panelName, payload, unmountPanel} = _usePanel();
10*6a68ec83S猫头猫  const Component = panelName ? panels[panelName] : null;
11bf6e62f2S猫头猫
12bf6e62f2S猫头猫  const backHandlerRef = useRef<NativeEventSubscription>();
13bf6e62f2S猫头猫
14bf6e62f2S猫头猫  useEffect(() => {
15bf6e62f2S猫头猫    if (backHandlerRef.current) {
16bf6e62f2S猫头猫      backHandlerRef.current?.remove();
17bf6e62f2S猫头猫      backHandlerRef.current = undefined;
18bf6e62f2S猫头猫    }
19*6a68ec83S猫头猫    if (panelName) {
20bf6e62f2S猫头猫      backHandlerRef.current = BackHandler.addEventListener(
21bf6e62f2S猫头猫        'hardwareBackPress',
22bf6e62f2S猫头猫        () => {
23*6a68ec83S猫头猫          unmountPanel();
24bf6e62f2S猫头猫          return true;
25bf6e62f2S猫头猫        },
26bf6e62f2S猫头猫      );
27bf6e62f2S猫头猫    }
28bf6e62f2S猫头猫    return () => {
29bf6e62f2S猫头猫      if (backHandlerRef.current) {
30bf6e62f2S猫头猫        backHandlerRef.current?.remove();
31bf6e62f2S猫头猫        backHandlerRef.current = undefined;
32bf6e62f2S猫头猫      }
33bf6e62f2S猫头猫    };
34*6a68ec83S猫头猫  }, [panelName]);
35bf6e62f2S猫头猫
36bf6e62f2S猫头猫  return (
37bf6e62f2S猫头猫    <Portal>
38bf6e62f2S猫头猫      {Component ? <Component {...(payload ?? {})}></Component> : <></>}
39bf6e62f2S猫头猫    </Portal>
40bf6e62f2S猫头猫  );
41bf6e62f2S猫头猫}
42