import {Autowired, Context} from "../context/context"; import {IMenuFactory} from "../interfaces/iMenuFactory"; import {Column} from "../entities/column"; import {_} from "../utils"; import {SetLeftFeature} from "../rendering/features/setLeftFeature"; import {IFloatingFilterParams, IFloatingFilterComp, FloatingFilterChange} from "./floatingFilter"; import {Component} from "../widgets/component"; import {RefSelector} from "../widgets/componentAnnotations"; import {IAfterGuiAttachedParams, IComponent} from "../interfaces/iComponent"; import {GridOptionsWrapper} from "../gridOptionsWrapper"; import {Beans} from "../rendering/beans"; export interface IFloatingFilterWrapperParams> { column:Column; floatingFilterComp:IFloatingFilterComp; suppressFilterButton: boolean; } export interface IFloatingFilterWrapper { onParentModelChanged(parentModel:M):void; } export interface IFloatingFilterWrapperComp, P extends IFloatingFilterWrapperParams> extends IFloatingFilterWrapper, IComponent { } export abstract class BaseFilterWrapperComp, P extends IFloatingFilterWrapperParams> extends Component implements IFloatingFilterWrapperComp { @Autowired('context') private context: Context; @Autowired('beans') private beans: Beans; column: Column; init (params:P):void{ this.column = params.column; let base:HTMLElement = _.loadTemplate(``); this.enrichBody(base); this.setHtmlElement(base); this.setupWidth(); let setLeftFeature = new SetLeftFeature(this.column, this.getHtmlElement(), this.beans); setLeftFeature.init(); this.addDestroyFunc(setLeftFeature.destroy.bind(setLeftFeature)); } abstract onParentModelChanged(parentModel:M):void; abstract enrichBody(body:HTMLElement):void; private setupWidth(): void { this.addDestroyableEventListener(this.column, Column.EVENT_WIDTH_CHANGED, this.onColumnWidthChanged.bind(this)); this.onColumnWidthChanged(); } private onColumnWidthChanged(): void { this.getHtmlElement().style.width = this.column.getActualWidth() + 'px'; } } export class FloatingFilterWrapperComp, P extends IFloatingFilterWrapperParams> extends BaseFilterWrapperComp { @RefSelector('eButtonShowMainFilter') eButtonShowMainFilter: HTMLInputElement; @Autowired('menuFactory') private menuFactory: IMenuFactory; @Autowired('gridOptionsWrapper') private gridOptionsWrapper: GridOptionsWrapper; floatingFilterComp:IFloatingFilterComp; suppressFilterButton:boolean; init (params:P):void{ this.floatingFilterComp = params.floatingFilterComp; this.suppressFilterButton = params.suppressFilterButton; super.init(params); if (!this.suppressFilterButton){ this.addDestroyableEventListener(this.eButtonShowMainFilter, 'click', this.showParentFilter.bind(this)); } } enrichBody(body:HTMLElement):void{ let floatingFilterBody:HTMLElement = body.querySelector('.ag-floating-filter-body'); let floatingFilterComp = _.ensureElement(this.floatingFilterComp.getGui()); if (this.suppressFilterButton){ floatingFilterBody.appendChild(floatingFilterComp); _.removeCssClass(floatingFilterBody, 'ag-floating-filter-body'); _.addCssClass(floatingFilterBody, 'ag-floating-filter-full-body') } else { floatingFilterBody.appendChild(floatingFilterComp); body.appendChild(_.loadTemplate(``)); let eIcon = _.createIconNoSpan('filter', this.gridOptionsWrapper, this.column); body.querySelector('button').appendChild(eIcon); } if (this.floatingFilterComp.afterGuiAttached){ this.floatingFilterComp.afterGuiAttached({ eComponent: floatingFilterComp }); } } onParentModelChanged(parentModel:M):void{ this.floatingFilterComp.onParentModelChanged(parentModel); } private showParentFilter(){ this.menuFactory.showMenuAfterButtonClick(this.column, this.eButtonShowMainFilter, 'filterMenuTab', ['filterMenuTab']); } } export class EmptyFloatingFilterWrapperComp extends BaseFilterWrapperComp { enrichBody(body:HTMLElement):void{ } onParentModelChanged(parentModel:any):void{ } }