@adaptabletools/adaptable
Version:
Powerful data-agnostic HTML5 AG Grid extension which provides advanced, cutting-edge functionality to meet all DataGrid requirements
65 lines (64 loc) • 2.65 kB
JavaScript
export class AgGridOptionsService {
constructor(adaptableInstance) {
this.adaptableInstance = adaptableInstance;
this.gridOptionsPropertyCache = new Map();
this.colDefPropertyCache = new Map();
}
destroy() {
this.gridOptionsPropertyCache.clear();
this.colDefPropertyCache.clear();
this.gridOptionsPropertyCache = null;
this.colDefPropertyCache = null;
this.adaptableInstance = null;
}
setGridOptionsProperty(gridOptions, propertyName, propertyGetter) {
if (this.adaptableInstance.lifecycleState === 'preDestroyed') {
return;
}
const userKey = `user.${propertyName}`;
const adaptableKey = `adaptable.${propertyName}`;
const value = gridOptions[propertyName];
const isUserDefined = value !== this.gridOptionsPropertyCache.get(adaptableKey);
if (isUserDefined) {
this.gridOptionsPropertyCache.set(userKey, value);
}
const userValue = this.gridOptionsPropertyCache.get(userKey);
let adaptableValue = propertyGetter(userValue);
if (typeof adaptableValue === 'function') {
const previousValue = adaptableValue;
// @ts-ignore we know that adaptableValue is a function
adaptableValue = (...args) => {
if (this.adaptableInstance.isDestroyed) {
return;
}
this.agGridAdapter.grabAgGridApiOnTheFly(args);
return previousValue(...args);
};
}
if (adaptableValue != null) {
this.gridOptionsPropertyCache.set(adaptableKey, adaptableValue);
}
gridOptions[propertyName] = adaptableValue ?? userValue;
return gridOptions;
}
getUserGridOptionsProperty(propertyName) {
const userKey = `user.${propertyName}`;
return this.gridOptionsPropertyCache.get(userKey);
}
revertGridOptionsPropertyToUserValue(propertyName) {
const userKey = `user.${propertyName}`;
const userValue = this.gridOptionsPropertyCache.get(userKey);
this.agGridAdapter.setGridOption(propertyName, userValue);
}
revertGridOptionsPropertiesToUserValue(gridOptions, propertyNames) {
for (const propertyName of propertyNames) {
// see this.setGridOptionsProperty(...)
const userKey = `user.${propertyName}`;
const userValue = this.gridOptionsPropertyCache.get(userKey);
gridOptions[propertyName] = userValue;
}
}
get agGridAdapter() {
return this.adaptableInstance.agGridAdapter;
}
}