one
Version:
One is a new React Framework that makes Vite serve both native and web.
82 lines (80 loc) • 2.37 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 { devHeadlessNote } from "../headless/devHeadlessNote.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,
NavigationContent
} = useNavigationBuilder(DrawerRouter, {
...rest,
children,
initialRouteName,
defaultStatus,
backBehavior,
screenOptions
});
return /* @__PURE__ */jsx(NavigationContent, {
children: /* @__PURE__ */jsx(DrawerStateProvider, {
state,
descriptors,
navigation,
children: /* @__PURE__ */jsx(HeadlessDrawerView, {
customChildren: headlessChildren
})
})
});
}
function HeadlessDrawerView({
customChildren
}) {
const {
screens,
focused
} = useDrawer();
const visited = useVisitedScreens(focused.key);
devHeadlessNote("Drawer");
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