UNPKG

@adaptabletools/adaptable

Version:

Powerful AG Grid extension which provides advanced, cutting-edge functionality to meet all DataGrid requirements

239 lines (238 loc) 10 kB
import { MenuItemShowPopup, MenuItemDoReduxAction, MenuItemDoClickFunction, } from '../AdaptableState/Common/MenuItem'; import ArrayExtensions from '../Utilities/Extensions/ArrayExtensions'; import { ACCESS_LEVEL_FULL, ACCESS_LEVEL_HIDDEN, ACCESS_LEVEL_READ_ONLY, } from '../Utilities/Constants/GeneralConstants'; export class AdaptableModuleBase { api; moduleInfo; AccessLevel; agGridModuleDepsInfo = { hasRequiredAgGridModuleDependencies: true, }; constructor(module, friendlyName, glyph, popup, description, api) { this.api = api; this.moduleInfo = { ModuleName: module, FriendlyName: this.getFriendlyName(module, friendlyName), Description: description, HelpPage: this.api.internalApi.getModuleService().getModuleDocumentationPageByModule(module), Glyph: glyph, Popup: popup, }; this.api = api; this.api.eventApi.on('AdaptableReady', () => { this.onAdaptableReady(); this.api.stateApi.dispatchStateReadyAction(this.moduleInfo.ModuleName); }); this.api.eventApi.on('AdaptableStateReloaded', (adaptableStateReloadedInfo) => { this.onAdaptableStateReloaded(adaptableStateReloadedInfo); }); } getViewAccessLevel() { return ACCESS_LEVEL_READ_ONLY; } getEditAccessLevel() { return ACCESS_LEVEL_FULL; } getAgGridModuleDependencies() { return []; } isModuleEnabled() { return true; } isModuleAvailable() { return this.agGridModuleDepsInfo?.hasRequiredAgGridModuleDependencies; } isModuleVisible() { return (this.isModuleEnabled() && this.isModuleAvailable() && this.hasRequiredAccessLevel(this.getViewAccessLevel())); } isModuleEditable() { return (this.isModuleEnabled() && this.isModuleAvailable() && this.hasRequiredAccessLevel(this.getEditAccessLevel())); } setAgGridDepsInfo() { const agGridModulesAdapter = this.api.internalApi.getAgGridModulesAdapter(); const missingAgGridModuleDependencies = this.getAgGridModuleDependencies().filter((agGridModule) => !agGridModulesAdapter.isAgGridModuleRegistered(agGridModule)); this.agGridModuleDepsInfo = { hasRequiredAgGridModuleDependencies: missingAgGridModuleDependencies.length === 0, missingAgGridModuleDependencies, }; } getModuleUnavailableMessage() { if (!this.agGridModuleDepsInfo.hasRequiredAgGridModuleDependencies) { return `missing required AG Grid modules: ${this.agGridModuleDepsInfo.missingAgGridModuleDependencies.join(', ')}`; } return undefined; } logMissingAgGridDepsInfos() { if (this.isModuleEnabled() && this.hasRequiredAccessLevel(this.getViewAccessLevel()) && !this.isModuleAvailable()) { const reason = this.getModuleUnavailableMessage() ?? 'unknown reason'; this.api.logWarn(`Module '${this.moduleInfo.ModuleName}' is not available - ${reason}`); } } isModuleObjectsShareable() { return true; } getModuleAdaptableObjects() { return []; } getExplicitlyReferencedColumnIds(adaptableObject) { return []; } getReferencedNamedQueryNames(adaptableObject) { return []; } hasNamedQueryReferences() { return true; } onAdaptableReady() { } onAdaptableStateReloaded(adaptableStateReloadedInfo) { } setModuleEntitlement() { this.AccessLevel = this.api.entitlementApi.getEntitlementAccessLevelForModule(this.moduleInfo.ModuleName); } createModuleMenuItem(source) { if (this.isModuleVisible() && this.moduleInfo.Popup) { const moduleParams = { source: source, maxWidth: this.getPopupMaxWidth(), }; return this.createMainMenuItemShowPopup({ Name: '_navbar', Label: this.moduleInfo.FriendlyName, ComponentName: this.moduleInfo.Popup, Icon: this.moduleInfo.Glyph, PopupParams: moduleParams, }); } } createColumnMenuItems(column) { return undefined; } createContextMenuItems(menuContext) { return undefined; } createMainMenuItemShowPopup({ Name, Label, ComponentName, Icon, PopupParams, }) { return new MenuItemShowPopup(Name, Label, this.moduleInfo.ModuleName, ComponentName, Icon, true, PopupParams); } createMenuItemClickFunction(Name, Label, Icon, ClickFunction) { return new MenuItemDoClickFunction(Name, Label, this.moduleInfo.ModuleName, ClickFunction, Icon, true); } createMenuItemReduxAction(Name, Label, Icon, Action) { return new MenuItemDoReduxAction(Name, Label, this.moduleInfo.ModuleName, Action, Icon, true); } createMenuItemShowPopup(Name, Label, ComponentName, Icon, PopupParams) { return new MenuItemShowPopup(Name, Label, this.moduleInfo.ModuleName, ComponentName, Icon, true, PopupParams); } getTeamSharingAction() { return undefined; } getModuleNamedQueryReferences() { if (!this.hasNamedQueryReferences()) { return []; } const references = []; this.getModuleAdaptableObjects().forEach((adaptableObject) => references.push(...this.getReferencedNamedQueryNames(adaptableObject))); return references; } getModuleCalculatedColumnReferences() { const references = []; const allCalculatedColumns = this.api.calculatedColumnApi.getCalculatedColumns(); this.getModuleAdaptableObjects().forEach((adaptableObject) => { const referencedColumnIds = this.getExplicitlyReferencedColumnIds(adaptableObject); referencedColumnIds.forEach((referencedColumnId) => { const referencedCalculatedColumn = allCalculatedColumns.find((calculatedColumn) => calculatedColumn.ColumnId === referencedColumnId); if (referencedCalculatedColumn) { references.push(referencedCalculatedColumn); } }); }); return references; } getModuleFreeTextColumnReferences() { const references = []; const allFreeTextColumns = this.api.freeTextColumnApi.getFreeTextColumns(); this.getModuleAdaptableObjects().forEach((adaptableObject) => { const referencedColumnIds = this.getExplicitlyReferencedColumnIds(adaptableObject); referencedColumnIds.forEach((referencedColumnId) => { const referencedFreeTextColumn = allFreeTextColumns.find((freeTextColumn) => freeTextColumn.ColumnId === referencedColumnId); if (referencedFreeTextColumn) { references.push(referencedFreeTextColumn); } }); }); return references; } getTeamSharingReferences(adaptableObject) { const result = []; const referencedColumnIds = this.getExplicitlyReferencedColumnIds(adaptableObject); if (referencedColumnIds.length) { const allCalculatedColumns = this.api.calculatedColumnApi.getCalculatedColumns(); const allFreeTextColumns = this.api.freeTextColumnApi.getFreeTextColumns(); referencedColumnIds.forEach((referencedColumnId) => { const referencedCalculatedColumn = allCalculatedColumns.find((calculatedColumn) => calculatedColumn.ColumnId === referencedColumnId); if (referencedCalculatedColumn) { result.push({ Module: 'CalculatedColumn', Reference: referencedCalculatedColumn, }); } const referencedFreeTextColumn = !referencedCalculatedColumn && allFreeTextColumns.find((freeTextColumn) => freeTextColumn.ColumnId === referencedColumnId); if (referencedFreeTextColumn) { result.push({ Module: 'FreeTextColumn', Reference: referencedFreeTextColumn, }); } }); } const referencedNamedQueries = this.getReferencedNamedQueryNames(adaptableObject).map((namedQueryName) => this.api.namedQueryApi.getNamedQueryByName(namedQueryName)); referencedNamedQueries.forEach((referencedNamedQuery) => { result.push({ Module: 'NamedQuery', Reference: referencedNamedQuery, }); }); return result; } getPopupMaxWidth() { return undefined; } containsLayoutExtensions() { return false; } showLayoutNonExtendedObjects() { return this.api.layoutApi.internalApi.showLayoutNonExtendedObjects(); } getFriendlyName(module, friendlyName) { let returnValue = friendlyName; let userInterfaceOptions = this.api.optionsApi.getUserInterfaceOptions(); if (userInterfaceOptions && ArrayExtensions.IsNotNullOrEmpty(userInterfaceOptions.alternativeModuleNames)) { userInterfaceOptions.alternativeModuleNames.forEach((af) => { if (module == af.adaptableModule) { returnValue = af.newName; } }); } return returnValue; } hasRequiredAccessLevel(requiredAccessLevel) { if (this.AccessLevel === ACCESS_LEVEL_HIDDEN) { return false; } if (requiredAccessLevel === ACCESS_LEVEL_READ_ONLY) { return (this.AccessLevel === ACCESS_LEVEL_READ_ONLY || this.AccessLevel === ACCESS_LEVEL_FULL); } if (requiredAccessLevel === ACCESS_LEVEL_FULL) { return this.AccessLevel === ACCESS_LEVEL_FULL; } return false; } }