UNPKG

@adaptabletools/adaptable

Version:

Powerful AG Grid extension which provides advanced, cutting-edge functionality to meet all DataGrid requirements

50 lines (49 loc) 2.55 kB
import * as React from 'react'; import { useSelector } from 'react-redux'; import { useAdaptable } from '../../../AdaptableContext'; import * as PopupRedux from '../../../../Redux/ActionsReducers/PopupRedux'; import { STANDALONE_MODULE_POPUPS } from '../../../../Utilities/Constants/GeneralConstants'; import { resolveSettingsPanelNavigation } from '../../../../Utilities/Helpers/SettingsPanelHelper'; import { isSettingsPanelNavigationItem, } from './settingsPanelNavigationTypes'; export const useMenuItems = () => { const adaptable = useAdaptable(); const settingsPanelOptions = adaptable.adaptableOptions.settingsPanelOptions; const allMenuItems = useSelector((state) => state?.Internal?.SettingsPanelModuleEntries); return React.useMemo(() => { const navigation = resolveSettingsPanelNavigation(adaptable.api, settingsPanelOptions); const visibleItems = allMenuItems.filter((item) => item.category !== 'General' && item.category !== 'CustomSettingsPanel' && item.category !== 'Group' && !STANDALONE_MODULE_POPUPS.includes(item.category) && item.isVisible); const resolveNavigationItem = (moduleName) => { const customSettingsPanel = settingsPanelOptions?.customSettingsPanels?.find?.((panel) => panel.name === moduleName); if (customSettingsPanel) { return { category: 'CustomSettingsPanel', label: customSettingsPanel.name, isVisible: true, reduxAction: PopupRedux.PopupShowScreen(null, customSettingsPanel.name), }; } return visibleItems.find((item) => item.category === moduleName) ?? null; }; const entries = []; for (const group of navigation.groups) { const groupMenuItems = group.items .map((moduleName) => resolveNavigationItem(moduleName)) .filter(Boolean); if (!groupMenuItems.length) { continue; } if (group.label) { entries.push({ type: 'header', label: group.label }); } for (const menuItem of groupMenuItems) { entries.push({ type: 'item', menuItem }); } } return entries; }, [allMenuItems, adaptable.api, settingsPanelOptions]); }; export const getSettingsPanelNavigationItems = (entries) => entries.filter(isSettingsPanelNavigationItem).map((entry) => entry.menuItem);