@adaptabletools/adaptable
Version:
Powerful AG Grid extension which provides advanced, cutting-edge functionality to meet all DataGrid requirements
239 lines (238 loc) • 10 kB
JavaScript
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;
}
}