UNPKG

@carbon/react

Version:

React components for the Carbon Design System

55 lines (50 loc) 1.4 kB
/** * Copyright IBM Corp. 2016, 2023 * * This source code is licensed under the Apache-2.0 license found in the * LICENSE file in the root directory of this source tree. */ 'use strict'; var React = require('react'); const menuDefaultState = { isRoot: true, hasIcons: false, hasSelectableItems: false, size: null, items: [], requestCloseRoot: () => {} }; function menuReducer(state, action) { switch (action.type) { case 'enableIcons': return { ...state, hasIcons: true }; case 'enableSelectableItems': return { ...state, hasSelectableItems: true }; case 'registerItem': { const newItem = action.payload; const items = state.items.filter(item => item.ref.current); const next = newItem.ref.current?.nextElementSibling; const idx = items.findIndex(item => item.ref.current === next); items.splice(idx < 0 ? items.length : idx, 0, newItem); return { ...state, items }; } } } const MenuContext = /*#__PURE__*/React.createContext({ state: menuDefaultState, // 'dispatch' is populated by the root menu // eslint-disable-next-line @typescript-eslint/no-unused-vars -- https://github.com/carbon-design-system/carbon/issues/20452 dispatch: _ => {} }); exports.MenuContext = MenuContext; exports.menuReducer = menuReducer;