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'; 5*91c81973S猫头猫import usePanel, {panelInfoStore} from './usePanel'; 6bf6e62f2S猫头猫 7c9af9657S猫头猫function Panels() { 8*91c81973S猫头猫 const {unmountPanel} = usePanel(); 9*91c81973S猫头猫 const panelInfoState = panelInfoStore.useValue(); 10*91c81973S猫头猫 11*91c81973S猫头猫 const Component = panelInfoState.name ? panels[panelInfoState.name] : null; 12bf6e62f2S猫头猫 13bf6e62f2S猫头猫 const backHandlerRef = useRef<NativeEventSubscription>(); 14bf6e62f2S猫头猫 15bf6e62f2S猫头猫 useEffect(() => { 16bf6e62f2S猫头猫 if (backHandlerRef.current) { 17bf6e62f2S猫头猫 backHandlerRef.current?.remove(); 18bf6e62f2S猫头猫 backHandlerRef.current = undefined; 19bf6e62f2S猫头猫 } 20*91c81973S猫头猫 if (panelInfoState.name) { 21bf6e62f2S猫头猫 backHandlerRef.current = BackHandler.addEventListener( 22bf6e62f2S猫头猫 'hardwareBackPress', 23bf6e62f2S猫头猫 () => { 246a68ec83S猫头猫 unmountPanel(); 25bf6e62f2S猫头猫 return true; 26bf6e62f2S猫头猫 }, 27bf6e62f2S猫头猫 ); 28bf6e62f2S猫头猫 } 29bf6e62f2S猫头猫 return () => { 30bf6e62f2S猫头猫 if (backHandlerRef.current) { 31bf6e62f2S猫头猫 backHandlerRef.current?.remove(); 32bf6e62f2S猫头猫 backHandlerRef.current = undefined; 33bf6e62f2S猫头猫 } 34bf6e62f2S猫头猫 }; 35*91c81973S猫头猫 }, [panelInfoState]); 36bf6e62f2S猫头猫 37bf6e62f2S猫头猫 return ( 38bf6e62f2S猫头猫 <Portal> 39*91c81973S猫头猫 {Component ? ( 40*91c81973S猫头猫 <Component {...(panelInfoState.payload ?? {})} /> 41*91c81973S猫头猫 ) : ( 42*91c81973S猫头猫 <></> 43*91c81973S猫头猫 )} 44bf6e62f2S猫头猫 </Portal> 45bf6e62f2S猫头猫 ); 46bf6e62f2S猫头猫} 47c9af9657S猫头猫 48c9af9657S猫头猫export default React.memo(Panels, () => true); 49