@adaptabletools/adaptable
Version:
Powerful data-agnostic HTML5 AG Grid extension which provides advanced, cutting-edge functionality to meet all DataGrid requirements
84 lines (83 loc) • 3.51 kB
JavaScript
import { AdaptableLogger } from '.';
import { AllEnterpriseModule } from 'ag-grid-enterprise';
export const AG_GRID_VERSION = AllEnterpriseModule.version;
export class AgGridModulesAdapter {
constructor(adaptableInstance) {
this.adaptableInstance = adaptableInstance;
this.allAgGridModules = new Set();
this.allAgGridModules = this.extractAgGridModuleNames(AllEnterpriseModule);
}
destroy() {
this.adaptableInstance = null;
this.allAgGridModules.clear();
this.allAgGridModules = null;
}
get agGridApi() {
return this.adaptableInstance.agGridAdapter.getAgGridApi();
}
isAgGridModuleRegistered(moduleName) {
let isModuleRegistered = this.agGridApi.isModuleRegistered(moduleName);
if (!isModuleRegistered) {
// SSRM module comes with its own implementations of Pivot, MasterDetail and TreeData
// #ssrm_pivot_module
const serverSideDependencies = [
'PivotModule',
'MasterDetailModule',
'TreeDataModule',
];
if (serverSideDependencies.includes(moduleName)) {
isModuleRegistered = this.agGridApi.isModuleRegistered('ServerSideRowModelModule');
}
}
return isModuleRegistered;
}
getAgGridRegisteredModules() {
const registeredModules = [];
this.allAgGridModules.forEach((module) => {
const agModuleName = `${module.moduleName}Module`;
if (this.isAgGridModuleRegistered(agModuleName)) {
registeredModules.push(module);
}
});
return registeredModules;
}
getAgGridRegisteredModuleNames() {
return this.getAgGridRegisteredModules().map((module) => {
const agModuleName = `${module.moduleName}Module`;
return agModuleName;
});
}
getMandatoryAgGridModuleNames() {
const mandatoryModules = [];
const rowModelType = this.agGridApi.getGridOption('rowModelType');
switch (rowModelType) {
case 'serverSide':
mandatoryModules.push('ServerSideRowModelModule');
mandatoryModules.push('ServerSideRowModelApiModule');
break;
case 'infinite':
AdaptableLogger.consoleErrorBase("AdapTable does not support AG Grid's Infinite Row Model");
break;
case 'viewport':
mandatoryModules.push('ViewportRowModelModule');
break;
default:
mandatoryModules.push('ClientSideRowModelModule');
mandatoryModules.push('ClientSideRowModelApiModule');
}
mandatoryModules.push('CellApiModule', 'CellStyleModule', 'ColumnApiModule', 'ColumnMenuModule', 'ContextMenuModule', 'CustomFilterModule', 'EventApiModule', 'ExternalFilterModule', 'GridStateModule', 'GroupFilterModule', 'RenderApiModule', 'RowApiModule', 'RowGroupingModule', 'RowStyleModule', 'ScrollApiModule');
return mandatoryModules;
}
extractAgGridModuleNames(module, collectedModules = new Set()) {
if (!module || !module.moduleName) {
return collectedModules;
}
collectedModules.add(module);
if (module.dependsOn) {
module.dependsOn.forEach((dep) => {
this.extractAgGridModuleNames(dep, collectedModules);
});
}
return collectedModules;
}
}