All files / src/utils eventDispatcher.ts

40% Statements 8/20
0% Branches 0/4
14.29% Functions 1/7
40% Lines 8/20

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 381x 1x   1x                   1x               1x                   1x     1x   1x  
class EventDispatcher {
  private readonly handlerMap = new Map();
 
  public on<T = {}>(name: string, handler: (data?: T) => void): void {
    if (this.handlerMap.has(name)) {
      const handlers = this.handlerMap.get(name);
 
      handlers.push(handler);
    } else {
      this.handlerMap.set(name, [handler]);
    }
  }
 
  public off<T = {}>(name: string, handler?: (data?: T) => void): void {
    const handlers: Array<(data?: T) => void> = this.handlerMap
      .get(name)
      .filter((h: (data?: T) => void) => h !== handler);
 
    this.handlerMap.set(name, handlers);
  }
 
  public trigger<T = {}>(name: string, data?: T): void {
    const handlers = this.handlerMap.get(name);
 
    if (handlers) {
      handlers.forEach((handler: (data?: T) => void) => {
        handler(data);
      });
    }
  }
 
  public tearDown(): void {
    this.handlerMap.clear();
  }
}
 
export const eventDispatcher = new EventDispatcher();