ag-grid-enterprise
Version:
ag-Grid Enterprise Features
115 lines (92 loc) • 3.56 kB
text/typescript
import {
_,
AgEvent,
Autowired,
CellRendererService,
Column,
Component,
GridOptionsWrapper,
ICellRendererComp,
PostConstruct,
Promise,
ValueFormatterService
} from "ag-grid-community";
export interface SelectedEvent extends AgEvent {
}
export class SetFilterListItem extends Component {
public static EVENT_SELECTED = 'selected';
private gridOptionsWrapper: GridOptionsWrapper;
private cellRendererService: CellRendererService;
private valueFormatterService: ValueFormatterService;
private static TEMPLATE =
`<label class="ag-set-filter-item">
<div class="ag-filter-checkbox"></div>
<span class="ag-filter-value"></span>
</label>`;
private eCheckbox: HTMLElement;
private eClickableArea: HTMLElement;
private selected: boolean = true;
private value: any;
private column: Column;
private eCheckedIcon: HTMLElement;
private eUncheckedIcon: HTMLElement;
constructor(value: any, column: Column) {
super(SetFilterListItem.TEMPLATE);
this.value = value;
this.column = column;
}
private init(): void {
this.eCheckedIcon = _.createIconNoSpan('checkboxChecked', this.gridOptionsWrapper, this.column);
this.eUncheckedIcon = _.createIconNoSpan('checkboxUnchecked', this.gridOptionsWrapper, this.column);
this.eCheckbox = this.queryForHtmlElement(".ag-filter-checkbox");
this.eClickableArea = this.getGui();
this.updateCheckboxIcon();
this.render();
let listener = (mouseEvent: MouseEvent) => {
_.addAgGridEventPath(mouseEvent);
this.selected = !this.selected;
this.updateCheckboxIcon();
let event: SelectedEvent = {
type: SetFilterListItem.EVENT_SELECTED
};
return this.dispatchEvent(event);
};
this.addDestroyableEventListener(this.eClickableArea, 'click', listener);
}
public isSelected(): boolean {
return this.selected;
}
public setSelected(selected: boolean): void {
this.selected = selected;
this.updateCheckboxIcon();
}
private updateCheckboxIcon() {
if (this.eCheckbox.children) {
for (let i = 0; i < this.eCheckbox.children.length; i++) {
const node = this.eCheckbox.children.item(i);
if (node) {
this.eCheckbox.removeChild(node);
}
}
}
if (this.isSelected()) {
this.eCheckbox.appendChild(this.eCheckedIcon);
} else {
this.eCheckbox.appendChild(this.eUncheckedIcon);
}
}
public render(): void {
let valueElement = this.queryForHtmlElement(".ag-filter-value");
let valueFormatted = this.valueFormatterService.formatValue(this.column, null, null, this.value);
let colDef = this.column.getColDef();
let valueObj = {value: this.value, valueFormatted: valueFormatted};
let componentPromise: Promise<ICellRendererComp> = this.cellRendererService.useFilterCellRenderer(colDef, valueElement, valueObj);
if (!componentPromise) return;
componentPromise.then(component => {
if (component && component.destroy) {
this.addDestroyFunc(component.destroy.bind(component));
}
});
}
}