@adaptabletools/adaptable
Version:
Powerful AG Grid extension which provides advanced, cutting-edge functionality to meet all DataGrid requirements
75 lines (74 loc) • 3.82 kB
JavaScript
import { jsx as _jsx } from "react/jsx-runtime";
import * as React from 'react';
import { useSelector } from 'react-redux';
import { ModuleManager } from '../../components/DragAndDropContext/ModuleManager';
import EmptyContent from '../../components/EmptyContent';
import { ALL_STATUS_SUB_PANELS } from '../../AdaptableState/Common/Types';
import { getStatusPanelsSelector } from '../../Redux/ActionsReducers/StatusBarRedux';
import { useAdaptable } from '../AdaptableContext';
import { PopupPanel } from '../Components/Popups/AdaptablePopup/PopupPanel';
import { ACCESS_LEVEL_READ_ONLY } from '../../Utilities/Constants/GeneralConstants';
import { isRichStatusBarPanel } from './statusBarPanelHelpers';
export const StatusBarPopup = (props) => {
const statusPanels = useSelector(getStatusPanelsSelector);
const adaptable = useAdaptable();
const tabs = React.useMemo(() => statusPanels.map((statusPanel) => {
return {
Name: statusPanel.Key,
Items: statusPanel.StatusBarPanels,
};
}), [statusPanels]);
const handleTabChange = React.useCallback((tabs) => {
const newStatusPanels = tabs.map((tab) => {
const statusPanel = statusPanels.find((sp) => sp.Key === tab.Name);
return {
...statusPanel,
StatusBarPanels: tab.Items,
};
});
adaptable.api.statusBarApi.setStatusBarPanels(newStatusPanels);
}, [statusPanels, adaptable.api.statusBarApi]);
const availableItems = React.useMemo(() => ALL_STATUS_SUB_PANELS.filter((panel) => {
const module = adaptable.ModuleService.getModuleById(panel);
return module?.isModuleVisible();
}).map((panel) => {
const module = adaptable.ModuleService.getModuleById(panel);
return { Id: panel, Title: module.moduleInfo.FriendlyName };
}), [adaptable]);
const unusedItemGroups = React.useMemo(() => {
const statusPanelIds = [];
const moduleShortcutIds = [];
availableItems.forEach((item) => {
const module = adaptable.ModuleService.getModuleById(item.Id);
if (isRichStatusBarPanel(module)) {
statusPanelIds.push(item.Id);
}
else {
moduleShortcutIds.push(item.Id);
}
});
return [
{
listId: 'UNUSED-PANELS',
title: 'Status Panels',
help: 'Fully featured actionable controls',
items: statusPanelIds,
flex: 40,
},
{
listId: 'UNUSED-SHORTCUTS',
title: 'Module Shortcuts',
help: 'Buttons to open Module Status Panel',
items: moduleShortcutIds,
flex: 60,
},
];
}, [availableItems, adaptable]);
const disabled = props.accessLevel === ACCESS_LEVEL_READ_ONLY;
return (_jsx(PopupPanel, { headerText: props.moduleInfo.FriendlyName, glyphicon: props.moduleInfo.Glyph, infoLink: props.moduleInfo.HelpPage, infoLinkDisabled: !props.api.internalApi.isDocumentationLinksDisplayed(), children: statusPanels.length ? (_jsx(ModuleManager, { dragScope: "status-bar", layout: "rows", permittedActions: {
createTab: false,
dragAndDropTab: false,
deleteTab: false,
editTabName: false,
}, onTabsChange: handleTabChange, disabled: disabled, tabs: tabs, availableItems: availableItems, unusedItemGroups: unusedItemGroups, dragItemText: "Drag items from either panel above into a Status Bar Panel below", tabsTitle: "AdapTable Status Bar Panels" })) : (_jsx(EmptyContent, { children: "To enable this feature add to Grid Options statusPanels the Adaptable Status Panel." })) }));
};