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