one
Version:
One is a React framework for web, iOS, and Android apps.
49 lines (46 loc) • 1.29 kB
JavaScript
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