hexa-viewer-communicator
Version:
A simple API for <hexa-viewer>
32 lines (26 loc) • 907 B
text/typescript
import { EventObservableTypes, IEventObservable } from './interfaces/event-observable.interface';
export class EventObservable implements IEventObservable {
private _stack: { [id: number]: Array<Function> };
constructor() {
this._stack = {};
}
private initStock(id: EventObservableTypes) {
this._stack[id] = [];
}
add(id: EventObservableTypes, fu: Function) {
if (!this._stack[id])
this.initStock(id);
this._stack[id].push(fu);
}
invoke(id: EventObservableTypes, discharge: boolean, params?: Array<any>) {
if (!this._stack[id])
this.initStock(id);
if (params) this._stack[id].forEach((f) => f(...params));
else this._stack[id].forEach((f) => f());
if (discharge)
this.initStock(id);
}
destroy() {
this._stack = {};
}
}