xref: /MusicFree/src/components/panels/index.tsx (revision bf6e62f27bf21a011995d7561e0093fae1a2d72e)
1*bf6e62f2S猫头猫import React, {useEffect, useRef} from 'react';
2*bf6e62f2S猫头猫import {BackHandler, NativeEventSubscription} from 'react-native';
3*bf6e62f2S猫头猫import {Portal} from 'react-native-paper';
4*bf6e62f2S猫头猫import panels from './types';
5*bf6e62f2S猫头猫import {_usePanelShow} from './usePanelShow';
6*bf6e62f2S猫头猫
7*bf6e62f2S猫头猫interface IProps {}
8*bf6e62f2S猫头猫export default function (props: IProps) {
9*bf6e62f2S猫头猫  const {sheetName, payload, closePanel} = _usePanelShow();
10*bf6e62f2S猫头猫  const Component = sheetName ? panels[sheetName] : null;
11*bf6e62f2S猫头猫
12*bf6e62f2S猫头猫  const backHandlerRef = useRef<NativeEventSubscription>();
13*bf6e62f2S猫头猫
14*bf6e62f2S猫头猫  useEffect(() => {
15*bf6e62f2S猫头猫    if (backHandlerRef.current) {
16*bf6e62f2S猫头猫      backHandlerRef.current?.remove();
17*bf6e62f2S猫头猫      backHandlerRef.current = undefined;
18*bf6e62f2S猫头猫    }
19*bf6e62f2S猫头猫    if (sheetName) {
20*bf6e62f2S猫头猫      backHandlerRef.current = BackHandler.addEventListener(
21*bf6e62f2S猫头猫        'hardwareBackPress',
22*bf6e62f2S猫头猫        () => {
23*bf6e62f2S猫头猫          closePanel();
24*bf6e62f2S猫头猫          return true;
25*bf6e62f2S猫头猫        },
26*bf6e62f2S猫头猫      );
27*bf6e62f2S猫头猫    }
28*bf6e62f2S猫头猫    return () => {
29*bf6e62f2S猫头猫      if (backHandlerRef.current) {
30*bf6e62f2S猫头猫        backHandlerRef.current?.remove();
31*bf6e62f2S猫头猫        backHandlerRef.current = undefined;
32*bf6e62f2S猫头猫      }
33*bf6e62f2S猫头猫    };
34*bf6e62f2S猫头猫  }, [sheetName]);
35*bf6e62f2S猫头猫
36*bf6e62f2S猫头猫  return (
37*bf6e62f2S猫头猫    <Portal>
38*bf6e62f2S猫头猫      {Component ? <Component {...(payload ?? {})}></Component> : <></>}
39*bf6e62f2S猫头猫    </Portal>
40*bf6e62f2S猫头猫  );
41*bf6e62f2S猫头猫}
42