UNPKG

@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
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." })) })); };