import {BottomSheetMethods} from '@gorhom/bottom-sheet/lib/typescript/types'; import {atom, useAtom} from 'jotai'; import {MutableRefObject, useEffect, useRef} from 'react'; import {BackHandler, NativeEventSubscription} from 'react-native'; import panels from './types'; type IPanel = typeof panels; type IPanelkeys = keyof IPanel; const panelNameAtom = atom(null); const payloadAtom = atom(null); export function _usePanel( ref?: MutableRefObject, ) { const [panelName, setPanelName] = useAtom(panelNameAtom); const [payload, setPayload] = useAtom(payloadAtom); const backHandlerRef = useRef(); function showPanel( name: T, payload?: Parameters[0], ) { setPanelName(name); setPayload(payload); } useEffect(() => { if (backHandlerRef.current) { backHandlerRef.current?.remove(); backHandlerRef.current = undefined; } if (ref) { backHandlerRef.current = BackHandler.addEventListener( 'hardwareBackPress', () => { ref.current?.close(); return true; }, ); } return () => { if (backHandlerRef.current) { backHandlerRef.current?.remove(); backHandlerRef.current = undefined; } }; }, []); function unmountPanel() { setPanelName(null); setPayload(null); } return {payload, panelName, showPanel, unmountPanel}; } export default function usePanel() { const {showPanel, unmountPanel} = _usePanel(); return {showPanel, unmountPanel}; }