Create new event with emitter object to simplify code

This commit is contained in:
Daniel Imms
2022-10-01 08:45:40 -07:00
parent 969db2bcf9
commit ed15a8e170
33 changed files with 247 additions and 307 deletions
+15 -1
View File
@@ -14,11 +14,13 @@ export interface IEvent<T, U = void> {
}
export interface IEventEmitter<T, U = void> {
event: IEvent<T, U>;
fire(arg1: T, arg2: U): void;
dispose(): void;
}
export interface IEventWithEmitter<T, U = void> extends IEventEmitter<T, U>, IEvent<T, U> {
}
export class EventEmitter<T, U = void> implements IEventEmitter<T, U> {
private _listeners: IListener<T, U>[] = [];
private _event?: IEvent<T, U>;
@@ -64,6 +66,18 @@ export class EventEmitter<T, U = void> implements IEventEmitter<T, U> {
}
}
export function initEvent<T, U = void>(): IEventWithEmitter<T, U> {
const emitter = new EventEmitter<T, U>();
const event = emitter.event;
Object.defineProperty(event, 'fire', {
value: emitter.fire.bind(emitter)
});
Object.defineProperty(event, 'dispose', {
value: emitter.dispose.bind(emitter)
});
return event as any;
}
export function forwardEvent<T>(from: IEvent<T>, to: IEventEmitter<T>): IDisposable {
return from(e => to.fire(e));
}