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'; 5378a6099S猫头猫import {_usePanel} from './usePanel'; 6bf6e62f2S猫头猫 7*c9af9657S猫头猫function Panels() { 86a68ec83S猫头猫 const {panelName, payload, unmountPanel} = _usePanel(); 96a68ec83S猫头猫 const Component = panelName ? panels[panelName] : null; 10bf6e62f2S猫头猫 11bf6e62f2S猫头猫 const backHandlerRef = useRef<NativeEventSubscription>(); 12bf6e62f2S猫头猫 13bf6e62f2S猫头猫 useEffect(() => { 14bf6e62f2S猫头猫 if (backHandlerRef.current) { 15bf6e62f2S猫头猫 backHandlerRef.current?.remove(); 16bf6e62f2S猫头猫 backHandlerRef.current = undefined; 17bf6e62f2S猫头猫 } 186a68ec83S猫头猫 if (panelName) { 19bf6e62f2S猫头猫 backHandlerRef.current = BackHandler.addEventListener( 20bf6e62f2S猫头猫 'hardwareBackPress', 21bf6e62f2S猫头猫 () => { 226a68ec83S猫头猫 unmountPanel(); 23bf6e62f2S猫头猫 return true; 24bf6e62f2S猫头猫 }, 25bf6e62f2S猫头猫 ); 26bf6e62f2S猫头猫 } 27bf6e62f2S猫头猫 return () => { 28bf6e62f2S猫头猫 if (backHandlerRef.current) { 29bf6e62f2S猫头猫 backHandlerRef.current?.remove(); 30bf6e62f2S猫头猫 backHandlerRef.current = undefined; 31bf6e62f2S猫头猫 } 32bf6e62f2S猫头猫 }; 336a68ec83S猫头猫 }, [panelName]); 34bf6e62f2S猫头猫 35bf6e62f2S猫头猫 return ( 36bf6e62f2S猫头猫 <Portal> 374060c00aS猫头猫 {Component ? <Component {...(payload ?? {})} /> : <></>} 38bf6e62f2S猫头猫 </Portal> 39bf6e62f2S猫头猫 ); 40bf6e62f2S猫头猫} 41*c9af9657S猫头猫 42*c9af9657S猫头猫export default React.memo(Panels, () => true); 43