one
Version:
One is a React framework for web, iOS, and Android apps.
53 lines (49 loc) • 2.09 kB
JavaScript
"use client";
import { createNavigatorFactory, useNavigationBuilder } from "@react-navigation/core";
import { DrawerRouter } from "@react-navigation/routers";
import { Children, forwardRef } from "react";
import { getCustomNavigatorChildren, isNavigatorConfigChild } from "../headless/children.mjs";
import { renderKeptMountedScreens, useVisitedScreens } from "../headless/keepMounted.mjs";
import { DrawerStateProvider, useDrawer } from "../headless/useDrawer.mjs";
import { withLayoutContext } from "./withLayoutContext.mjs";
import { Fragment, jsx } from "react/jsx-runtime";
function WebDrawerNavigator({ children, headlessChildren, initialRouteName, defaultStatus, backBehavior, screenOptions, ...rest }) {
const { state, descriptors, navigation, render } = useNavigationBuilder(DrawerRouter, {
...rest,
children,
initialRouteName,
defaultStatus,
backBehavior,
screenOptions
});
return render(/* @__PURE__ */ jsx(DrawerStateProvider, {
state,
descriptors,
navigation,
children: /* @__PURE__ */ jsx(HeadlessDrawerView, { customChildren: headlessChildren })
}));
}
function HeadlessDrawerView({ customChildren }) {
const { screens, focused } = useDrawer();
const visited = useVisitedScreens(focused.key);
if (customChildren?.length) {
return /* @__PURE__ */ jsx(Fragment, { children: customChildren });
}
return renderKeptMountedScreens(screens, visited);
}
const DrawerNavigator = createNavigatorFactory(WebDrawerNavigator)().Navigator;
const RNDrawer = withLayoutContext(DrawerNavigator);
const DrawerWithHeadless = forwardRef((props, ref) => {
const { children, ...rest } = props;
const customChildren = getCustomNavigatorChildren(children);
return /* @__PURE__ */ jsx(RNDrawer, {
...rest,
ref,
headlessChildren: customChildren.length ? customChildren : void 0,
children: Children.toArray(children).filter(isNavigatorConfigChild)
});
});
const Drawer = Object.assign(DrawerWithHeadless, { Screen: RNDrawer.Screen });
var Drawer_web_default = Drawer;
export { Drawer, Drawer_web_default as default };
//# sourceMappingURL=Drawer.mjs.map