ag-grid
Version:
Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
57 lines (50 loc) • 2.55 kB
text/typescript
import {CellClassParams, ColDef} from "../entities/colDef";
import {Autowired, Bean} from "../context/context";
import {ExpressionService} from "../valueService/expressionService";
('stylingService')
export class StylingService {
('expressionService') private expressionService: ExpressionService;
public processAllCellClasses(colDef: ColDef, params: any, onApplicableClass: (className: string)=>void, onNotApplicableClass?: (className: string)=>void) {
this.processClassRules(colDef.cellClassRules, params, onApplicableClass, onNotApplicableClass);
this.processStaticCellClasses(colDef, params, onApplicableClass);
}
public processClassRules(classRules: { [cssClassName: string]: (Function | string) }, params: CellClassParams, onApplicableClass: (className: string)=>void, onNotApplicableClass?: (className: string)=>void) {
if (typeof classRules === 'object' && classRules !== null) {
let classNames = Object.keys(classRules);
for (let i = 0; i < classNames.length; i++) {
let className = classNames[i];
let rule = classRules[className];
let resultOfRule: any;
if (typeof rule === 'string') {
resultOfRule = this.expressionService.evaluate(rule, params);
} else if (typeof rule === 'function') {
resultOfRule = rule(params);
}
if (resultOfRule) {
onApplicableClass(className);
} else if (onNotApplicableClass) {
onNotApplicableClass(className);
}
}
}
}
public processStaticCellClasses(colDef: ColDef, params: CellClassParams, onApplicableClass: (className: string)=>void) {
let cellClass = colDef.cellClass;
if (cellClass) {
let classOrClasses: any;
if (typeof colDef.cellClass === 'function') {
let cellClassFunc = <(cellClassParams: any) => string|string[]> colDef.cellClass;
classOrClasses = cellClassFunc(params);
} else {
classOrClasses = colDef.cellClass;
}
if (typeof classOrClasses === 'string') {
onApplicableClass(classOrClasses);
} else if (Array.isArray(classOrClasses)) {
classOrClasses.forEach( (cssClassItem: string)=> {
onApplicableClass(cssClassItem);
});
}
}
}
}