1bf6e62f2S猫头猫import React, {useEffect, useRef} from 'react'; 2bf6e62f2S猫头猫import {BackHandler, NativeEventSubscription} from 'react-native'; 3bf6e62f2S猫头猫import panels from './types'; 491c81973S猫头猫import usePanel, {panelInfoStore} from './usePanel'; 5bf6e62f2S猫头猫 6c9af9657S猫头猫function Panels() { 791c81973S猫头猫 const {unmountPanel} = usePanel(); 891c81973S猫头猫 const panelInfoState = panelInfoStore.useValue(); 991c81973S猫头猫 1091c81973S猫头猫 const Component = panelInfoState.name ? panels[panelInfoState.name] : null; 11bf6e62f2S猫头猫 12bf6e62f2S猫头猫 const backHandlerRef = useRef<NativeEventSubscription>(); 13bf6e62f2S猫头猫 14bf6e62f2S猫头猫 useEffect(() => { 15bf6e62f2S猫头猫 if (backHandlerRef.current) { 16bf6e62f2S猫头猫 backHandlerRef.current?.remove(); 17bf6e62f2S猫头猫 backHandlerRef.current = undefined; 18bf6e62f2S猫头猫 } 1991c81973S猫头猫 if (panelInfoState.name) { 20bf6e62f2S猫头猫 backHandlerRef.current = BackHandler.addEventListener( 21bf6e62f2S猫头猫 'hardwareBackPress', 22bf6e62f2S猫头猫 () => { 236a68ec83S猫头猫 unmountPanel(); 24bf6e62f2S猫头猫 return true; 25bf6e62f2S猫头猫 }, 26bf6e62f2S猫头猫 ); 27bf6e62f2S猫头猫 } 28bf6e62f2S猫头猫 return () => { 29bf6e62f2S猫头猫 if (backHandlerRef.current) { 30bf6e62f2S猫头猫 backHandlerRef.current?.remove(); 31bf6e62f2S猫头猫 backHandlerRef.current = undefined; 32bf6e62f2S猫头猫 } 33bf6e62f2S猫头猫 }; 3491c81973S猫头猫 }, [panelInfoState]); 35bf6e62f2S猫头猫 36*7b28964fS猫头猫 return Component ? <Component {...(panelInfoState.payload ?? {})} /> : null; 37bf6e62f2S猫头猫} 38c9af9657S猫头猫 39c9af9657S猫头猫export default React.memo(Panels, () => true); 40