@adaptabletools/adaptable
Version:
Powerful AG Grid extension which provides advanced, cutting-edge functionality to meet all DataGrid requirements
98 lines (97 loc) • 3.31 kB
JavaScript
export const DEFAULT_SETTINGS_PANEL_NAVIGATION_GROUPS = [
{
label: 'Grid & UI',
items: ['GridInfo', 'ColumnInfo', 'Dashboard', 'ToolPanel', 'StatusBar', 'Theme'],
},
{
label: 'Layout',
items: ['Layout', 'CalculatedColumn', 'CustomSort', 'Charting'],
},
{
label: 'Formatting',
items: ['FormatColumn', 'StyledColumn', 'FlashingCell'],
},
{
label: 'Filtering & Search',
items: ['QuickSearch', 'GridFilter', 'ColumnFilter', 'DataSet', 'NamedQuery'],
},
{
label: 'Notes & Annotations',
items: ['Alert', 'Note', 'Comment', 'FreeTextColumn', 'SystemStatus'],
},
{
label: 'Export & Import',
items: ['Export', 'DataImport'],
},
{
label: 'Editing',
items: ['PlusMinus', 'Shortcut', 'DataChangeHistory'],
},
{
label: 'Administration',
items: ['TeamSharing', 'StateManagement'],
},
];
export const buildDefaultSettingsPanelNavigation = (customPanelNames = []) => {
const groups = DEFAULT_SETTINGS_PANEL_NAVIGATION_GROUPS.map((group) => ({
label: group.label,
items: [...group.items],
}));
if (customPanelNames.length) {
groups.push({
label: 'Custom Panels',
items: [...customPanelNames],
});
}
return { groups };
};
const cloneSettingsPanelNavigation = (navigation) => ({
groups: navigation.groups.map((group) => ({
label: group.label,
items: [...group.items],
})),
});
const convertLegacyFlatNavigationToGrouped = (legacy) => {
const items = legacy.items ?? [];
const groups = [];
let current = [];
for (const item of items) {
if (item === '-') {
if (current.length) {
groups.push({ label: '', items: current });
current = [];
}
}
else {
current.push(item);
}
}
if (current.length) {
groups.push({ label: '', items: current });
}
return { groups };
};
let didWarnLegacyNavigation = false;
const warnLegacyNavigationOnce = (api) => {
if (didWarnLegacyNavigation) {
return;
}
didWarnLegacyNavigation = true;
api.internalApi
.getAdaptableInstance()
.logger.consoleWarn("SettingsPanelOptions.navigation is using the legacy v22 `{ items: [...] }` shape — this is deprecated and will be removed in the next major release. Use a SettingsPanelNavigationConfigurer function: `(context, defaultNavigation) => SettingsPanelNavigation`.");
};
const isNavigationConfigurer = (navigation) => typeof navigation === 'function';
export const resolveSettingsPanelNavigation = (api, settingsPanelOptions) => {
const defaultNavigation = buildDefaultSettingsPanelNavigation(settingsPanelOptions.customSettingsPanels?.map((panel) => panel.name) ?? []);
const navigation = settingsPanelOptions.navigation;
if (!navigation) {
return defaultNavigation;
}
if (isNavigationConfigurer(navigation)) {
const context = api.internalApi.buildBaseContext();
return navigation(context, cloneSettingsPanelNavigation(defaultNavigation));
}
warnLegacyNavigationOnce(api);
return convertLegacyFlatNavigationToGrouped(navigation);
};