UNPKG

@workday/canvas-kit-react

Version:

The parent module that contains all Workday Canvas Kit React components

36 lines (35 loc) 1.51 kB
import { createModelHook } from '@workday/canvas-kit-react/common'; import { useAlwaysCloseOnOutsideClick, useCloseOnEscape, usePopupModel, } from '@workday/canvas-kit-react/popup'; import { multiSelectionManager, singleSelectionManager, useListModel, } from '@workday/canvas-kit-react/collection'; export const useMenuModel = createModelHook({ defaultConfig: { ...useListModel.defaultConfig, ...usePopupModel.defaultConfig, /** Determines the default selection manager used as well as if the menu closes when an item is selected */ mode: 'single', // don't virtualize menus by default to avoid oddities with card width shouldVirtualize: false, }, requiredConfig: { ...useListModel.requiredConfig, ...usePopupModel.requiredConfig, }, })(config => { const list = useListModel(useListModel.mergeConfig(config, { selection: config.mode === 'single' ? singleSelectionManager : multiSelectionManager, })); const popup = usePopupModel(usePopupModel.mergeConfig(config, { onHide() { // reset the index ref to 0 again so registration doesn't start where it left off list.state.indexRef.current = 0; }, })); useAlwaysCloseOnOutsideClick(popup); useCloseOnEscape(popup); const state = { mode: config.mode, ...list.state, ...popup.state }; const events = { ...list.events, ...popup.events, }; return { ...list, ...popup, state, events }; });