@adaptabletools/adaptable
Version:
Powerful AG Grid extension which provides advanced, cutting-edge functionality to meet all DataGrid requirements
73 lines (72 loc) • 5.07 kB
JavaScript
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
import * as GeneralConstants from '../../../../Utilities/Constants/GeneralConstants';
import TopBar from './TopBar';
import join from '../../../../components/utils/join';
import { cn } from '../../../../lib/utils';
import { Navigation } from './Navigation';
import PopupContext from './PopupContext';
import { AdaptablePopupBody } from './AdaptablePopupBody';
import { useAdaptable } from '../../../AdaptableContext';
import { CustomSettingsPanelView } from './CustomSettingsPanelView';
import { useMenuItems } from './useMenuItems';
import { isSettingsPanelNavigationItem } from './settingsPanelNavigationTypes';
import { resolveContainerElement } from '../../../../Utilities/resolveContainerElement';
import { AdaptablePopupDialog } from './AdaptablePopupDialog';
import { Box } from '../../../../components/Flex';
export const AdaptablePopup = (props) => {
const adaptable = useAdaptable();
const settingsPanelOptions = adaptable.adaptableOptions.settingsPanelOptions;
const wizardOptions = adaptable.adaptableOptions.wizardOptions;
const settingsPanelTitle = adaptable.ModuleService.getModuleFriendlyName('SettingsPanel');
const menuItems = useMenuItems();
const modalContainer = resolveContainerElement(adaptable.adaptableOptions?.containerOptions?.modalContainer, props.api.internalApi.buildBaseContext());
let friendlyName = null;
let isStandalone = false;
let moduleViewContent = null;
let activeItem = null;
let accessLevel = GeneralConstants.ACCESS_LEVEL_FULL;
const firstMenuItem = menuItems.find(isSettingsPanelNavigationItem)?.menuItem;
const firstMenuModule = firstMenuItem?.category;
let componentModule = props.componentModule;
let componentName = props.componentName;
const useFirstItem = !props.componentName;
if (useFirstItem &&
firstMenuModule !== 'General' &&
firstMenuModule !== 'CustomSettingsPanel' &&
firstMenuModule !== 'Group') {
componentModule = firstMenuModule;
}
const customSettingsPanel = settingsPanelOptions?.customSettingsPanels?.find((customPanel) => useFirstItem ? customPanel.name === firstMenuItem.label : customPanel.name === componentName);
if (customSettingsPanel) {
friendlyName = customSettingsPanel.name;
activeItem = customSettingsPanel.name;
moduleViewContent = _jsx(CustomSettingsPanelView, { settingsPanel: customSettingsPanel });
}
else {
const module = props.api.internalApi.getModuleService().getModuleById(componentModule);
const moduleInfo = module?.moduleInfo;
accessLevel = props.api.entitlementApi.getEntitlementAccessLevelForModule(componentModule);
friendlyName = moduleInfo.FriendlyName;
isStandalone =
moduleInfo &&
(GeneralConstants.STANDALONE_MODULE_POPUPS.includes(moduleInfo?.ModuleName) ||
(props.componentName && props.componentName !== moduleInfo?.Popup));
activeItem = moduleInfo.ModuleName;
moduleViewContent = (_jsx(AdaptablePopupBody, { api: props.api, module: module, componentName: props.componentName, moduleParams: props.moduleParams, onClearParams: props.onClearParams, onHide: props.onHide }));
}
const effectivePopupType = isStandalone
? wizardOptions?.popupType ?? settingsPanelOptions.popupType
: settingsPanelOptions.popupType;
const isWindowModal = effectivePopupType === 'window';
const baseClassName = 'ab-Adaptable-Popup';
const className = join(baseClassName, `${baseClassName}--${isWindowModal ? 'window' : 'modal'}`, isStandalone ? `${baseClassName}--action-popup` : `${baseClassName}--settings-popup`);
return (_jsx(PopupContext.Provider, { value: {
hidePopup: () => {
if (props.onHide) {
props.onHide();
}
},
}, children: _jsxs(AdaptablePopupDialog, { dataName: componentModule, baseClassName: baseClassName, className: className, friendlyName: friendlyName, isActionModule: isStandalone, isWindowModal: isWindowModal, onHide: props.onHide, modalContainer: modalContainer, children: [!isStandalone && _jsx(TopBar, { icon: settingsPanelOptions.icon, children: settingsPanelTitle }), _jsxs(Box, { className: cn('twa:flex twa:flex-row twa:flex-1 twa:min-h-0', 'twa:bg-background twa:text-foreground', 'twa:rounded-bl-standard twa:rounded-br-standard', accessLevel == GeneralConstants.ACCESS_LEVEL_READ_ONLY
? GeneralConstants.READ_ONLY_STYLE
: ''), children: [!isStandalone && (_jsx(Navigation, { menuItems: menuItems, api: props.api, activeItem: activeItem, customSettingsPanels: settingsPanelOptions.customSettingsPanels })), _jsx(Box, { className: cn('ab-Adaptable-Popup__Body', 'twa:bg-primarylight twa:text-primarylight-foreground', 'twa:flex twa:flex-1 twa:min-w-0 twa:overflow-auto', 'twa:rounded-br-standard', !isStandalone && 'twa:*:p-3'), children: moduleViewContent })] })] }) }));
};