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