import {IEventEmitter} from "../interfaces/iEventEmitter"; import {EventService} from "../eventService"; import {GridOptionsWrapper} from "../gridOptionsWrapper"; import {_} from "../utils"; import {AgEvent} from "../events"; export class BeanStub implements IEventEmitter { private localEventService: EventService; private destroyFunctions: (()=>void)[] = []; public destroy(): void { this.destroyFunctions.forEach( func => func() ); this.destroyFunctions.length = 0; } public addEventListener(eventType: string, listener: Function): void { if (!this.localEventService) { this.localEventService = new EventService(); } this.localEventService.addEventListener(eventType, listener); } public removeEventListener(eventType: string, listener: Function): void { if (this.localEventService) { this.localEventService.removeEventListener(eventType, listener); } } public dispatchEventAsync(event: AgEvent): void { setTimeout( ()=> this.dispatchEvent(event), 0); } public dispatchEvent(event: AgEvent): void { if (this.localEventService) { this.localEventService.dispatchEvent(event); } } public addDestroyableEventListener(eElement: HTMLElement|IEventEmitter|GridOptionsWrapper, event: string, listener: (event?: any)=>void): void { if (eElement instanceof HTMLElement) { _.addSafePassiveEventListener((eElement), event, listener) } else if (eElement instanceof GridOptionsWrapper) { (eElement).addEventListener(event, listener); } else { (eElement).addEventListener(event, listener); } this.destroyFunctions.push( ()=> { if (eElement instanceof HTMLElement) { (eElement).removeEventListener(event, listener); } else if (eElement instanceof GridOptionsWrapper) { (eElement).removeEventListener(event, listener); } else { (eElement).removeEventListener(event, listener); } }); } public addDestroyFunc(func: ()=>void ): void { this.destroyFunctions.push(func); } }