@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
JavaScript
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);