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