UNPKG

one

Version:

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

76 lines (72 loc) • 2.08 kB
"use client"; import { createNavigatorFactory, useNavigationBuilder } from "@react-navigation/core"; import { CommonActions, StackActions, StackRouter } from "@react-navigation/routers"; import { useEffect } from "react"; import { findLastNonOverlayIndex } from "./stackStateUtils.mjs"; import { WebStackView } from "./WebStackView.mjs"; import { jsx } from "react/jsx-runtime"; function WebStackNavigator({ initialRouteName, children, screenOptions, headlessChildren, ...rest }) { const { state, navigation, descriptors, render } = useNavigationBuilder(StackRouter, { ...rest, children, screenOptions, initialRouteName }); useEffect(() => { if (!initialRouteName) return; if (!state.routeNames.includes(initialRouteName)) return; if (findLastNonOverlayIndex(state, descriptors) !== -1) return; const timer = setTimeout(() => { const current = navigation.getState(); if (findLastNonOverlayIndex(current, descriptors) !== -1) return; navigation.dispatch({ ...CommonActions.reset({ stale: true, routes: [{ name: initialRouteName, params: void 0 }, ...current.routes.map(({ key, name, params, path }) => ({ key, name, params, path }))], index: current.routes.length }), target: current.key }); }, 0); return () => clearTimeout(timer); }, [ initialRouteName, state, descriptors, navigation ]); useEffect(() => { return navigation?.addListener?.("tabPress", (e) => { const isFocused = navigation.isFocused(); requestAnimationFrame(() => { if (state.index > 0 && isFocused && !e.defaultPrevented) { navigation.dispatch({ ...StackActions.popToTop(), target: state.key }); } }); }); }, [ navigation, state.index, state.key ]); return render(/* @__PURE__ */ jsx(WebStackView, { state, navigation, descriptors, customChildren: headlessChildren })); } const createWebStackNavigator = createNavigatorFactory(WebStackNavigator); export { createWebStackNavigator }; //# sourceMappingURL=WebStackNavigator.mjs.map