import { Unit } from '../datetime'; import ActionTypes from './action-types'; import { BaseEvent } from './event-types'; export type ViewUpdateValues = Unit | 'clock' | 'calendar' | 'all'; export class EventEmitter { private subscribers: ((value?: T) => void)[] = []; subscribe(callback: (value: T) => void) { this.subscribers.push(callback); return this.unsubscribe.bind(this, this.subscribers.length - 1); } unsubscribe(index: number) { this.subscribers.splice(index, 1); } emit(value?: T) { this.subscribers.forEach((callback) => { callback(value); }); } destroy() { this.subscribers = null; this.subscribers = []; } } export class EventEmitters { triggerEvent = new EventEmitter(); viewUpdate = new EventEmitter(); updateDisplay = new EventEmitter(); action = new EventEmitter<{ e: any; action?: ActionTypes }>(); destroy() { this.triggerEvent.destroy(); this.viewUpdate.destroy(); this.updateDisplay.destroy(); this.action.destroy(); } }