UNPKG

one

Version:

One is a React framework for web, iOS, and Android apps.

49 lines (46 loc) • 1.29 kB
import { useNavigation } from "@react-navigation/native"; import { useCallback, useEffect, useRef, useState } from "react"; import { useOneRouter } from "../router/router.mjs"; function useLoadedNavigation() { const { navigationRef } = useOneRouter(); const navigation = useNavigation(); const isMounted = useRef(true); const pending = useRef([]); useEffect(() => { isMounted.current = true; return () => { isMounted.current = false; }; }, []); const flush = useCallback(() => { if (isMounted.current) { const pendingCallbacks = pending.current; pending.current = []; pendingCallbacks.forEach((callback) => { callback(navigation); }); } }, [navigation]); useEffect(() => { if (navigationRef.current) { flush(); } }, [flush, navigationRef]); const push = useCallback((fn) => { pending.current.push(fn); if (navigationRef.current) { flush(); } }, [flush, navigationRef]); return push; } function useOptionalNavigation() { const [navigation, setNavigation] = useState(null); const loadNavigation = useLoadedNavigation(); useEffect(() => { loadNavigation((nav) => setNavigation(nav)); }, [loadNavigation]); return navigation; } export { useLoadedNavigation, useOptionalNavigation }; //# sourceMappingURL=useLoadedNavigation.mjs.map