@adaptabletools/adaptable
Version:
Powerful data-agnostic HTML5 AG Grid extension which provides advanced, cutting-edge functionality to meet all DataGrid requirements
53 lines (52 loc) • 2.5 kB
JavaScript
import * as React from 'react';
import { useSelector } from 'react-redux';
import { DEFAULT_SETTINGS_PANEL_NAVIGATION_ITEMS } from '../../../../Utilities/Defaults/DefaultSettingsPanel';
import { useAdaptable } from '../../../AdaptableContext';
import * as PopupRedux from '../../../../Redux/ActionsReducers/PopupRedux';
import { STANDALONE_MODULE_POPUPS } from '../../../../Utilities/Constants/GeneralConstants';
export const useMenuItems = () => {
const adaptable = useAdaptable();
const settingsPanelOptions = adaptable.adaptableOptions.settingsPanelOptions;
const allMenuItems = useSelector((state) => state?.Internal?.SettingsPanelModuleEntries);
return React.useMemo(() => {
let navigationItems = settingsPanelOptions?.navigation?.items;
if (!navigationItems) {
navigationItems = [...DEFAULT_SETTINGS_PANEL_NAVIGATION_ITEMS];
if (settingsPanelOptions.customSettingsPanels) {
navigationItems.push(...settingsPanelOptions.customSettingsPanels.map((panel) => panel.name));
}
}
const visibleItems = allMenuItems.filter((item) => item.category !== 'General' &&
item.category !== 'CustomSettingsPanel' &&
item.category !== 'Group' &&
!STANDALONE_MODULE_POPUPS.includes(item.category) &&
item.isVisible);
let navItems = navigationItems
.map((moduleName) => {
if (moduleName === '-') {
return moduleName;
}
const customSettingsPanel = settingsPanelOptions?.customSettingsPanels?.find?.((panel) => panel.name === moduleName);
let customPanelMenuItem = null;
if (customSettingsPanel) {
// @ts-ignore
customPanelMenuItem = {
category: 'CustomSettingsPanel',
label: customSettingsPanel.name,
isVisible: true,
reduxAction: PopupRedux.PopupShowScreen(null, customSettingsPanel.name),
};
}
return customPanelMenuItem || visibleItems.find((item) => item.category === moduleName);
})
.filter(Boolean);
// remove sequential '-' items
navItems = navItems.filter((item, index) => {
if (item === '-' && navItems[index - 1] === '-') {
return false;
}
return true;
});
return navItems;
}, [allMenuItems]);
};