UNPKG

rsuite

Version:

A suite of react components

90 lines (89 loc) 3.23 kB
'use client'; import _extends from "@babel/runtime/helpers/esm/extends"; import React, { useContext, useReducer } from 'react'; import NavDropdown from "./NavDropdown.js"; import NavDropdownMenu from "./NavDropdownMenu.js"; import { SidenavContext } from "../Sidenav/Sidenav.js"; import SidenavDropdown from "../Sidenav/SidenavDropdown.js"; import { NavbarContext } from "../Navbar/index.js"; import NavbarDropdown from "../Navbar/NavbarDropdown.js"; import NavbarDropdownMenu from "../Navbar/NavbarDropdownMenu.js"; import SidenavDropdownMenu from "../Sidenav/SidenavDropdownMenu.js"; export var NavMenuContext = /*#__PURE__*/React.createContext(null); NavMenuContext.displayName = 'NavMenu.Context'; export var NavMenuActionType = /*#__PURE__*/function (NavMenuActionType) { NavMenuActionType[NavMenuActionType["RegisterItem"] = 0] = "RegisterItem"; NavMenuActionType[NavMenuActionType["UnregisterItem"] = 1] = "UnregisterItem"; return NavMenuActionType; }({}); var initilNavMenuState = { items: [] }; var reducer = function reducer(state, action) { switch (action.type) { case NavMenuActionType.RegisterItem: return _extends({}, state, { items: [].concat(state.items.filter(function (item) { return item._id !== action.payload._id; }), [action.payload]) }); case NavMenuActionType.UnregisterItem: return _extends({}, state, { items: state.items.filter(function (item) { return item._id !== action.payload._id; }) }); default: throw new Error('Unrecognizable action type: ' + action.type); } }; /** * The `Nav.Menu` component is used to create navigation menus. * * - When used as direct child of `<Nav>`, render the NavDropdown * - When used within another `<Nav.Menu>`, render the NavDropdownMenu * * @see https://rsuitejs.com/components/nav */ var NavMenu = /*#__PURE__*/React.forwardRef(function (props, ref) { var parentNavMenu = useContext(NavMenuContext); var navMenuContext = useReducer(reducer, initilNavMenuState); var navbar = useContext(NavbarContext); var sidenav = useContext(SidenavContext); if (!parentNavMenu) { if (navbar) { return /*#__PURE__*/React.createElement(NavMenuContext.Provider, { value: navMenuContext }, /*#__PURE__*/React.createElement(NavbarDropdown, _extends({ ref: ref }, props))); } if (sidenav) { return /*#__PURE__*/React.createElement(NavMenuContext.Provider, { value: navMenuContext }, /*#__PURE__*/React.createElement(SidenavDropdown, _extends({ ref: ref }, props))); } return /*#__PURE__*/React.createElement(NavMenuContext.Provider, { value: navMenuContext }, /*#__PURE__*/React.createElement(NavDropdown, _extends({ ref: ref }, props))); } if (navbar) { return /*#__PURE__*/React.createElement(NavbarDropdownMenu, _extends({ ref: ref }, props)); } if (sidenav) { return /*#__PURE__*/React.createElement(SidenavDropdownMenu, _extends({ ref: ref }, props)); } return /*#__PURE__*/React.createElement(NavDropdownMenu, _extends({ ref: ref }, props)); }); NavMenu.displayName = 'Nav.Menu'; export default NavMenu;