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