grafana/public/app/core/utils/emitter.ts
Lukas Siatka fd99bfab1d
DevEnv: update frontend dependencies - mixed 2/2 (#22148)
* DevEnv: updates sinon 1.17.6 -> 8.1.1

* DevEnv: updates zone.js 0.7.8 -> 0.10.2

* DevEnv: updates brace 0.10.0 -> 0.11.1

* DevEnv: updates eventemitter3 2.0.3 -> 4.0.0

* DevEnv: updates file-saver 1.3.8 -> 2.0.2

* DevEnv: updates is-hotkey 0.1.4 -> 0.1.6

* DevEnv: updates mousetrap 1.6.3 -> 1.6.5

* DevEnv: updates prismjs 1.16.0 -> 1.19.0

* DevEnv: updates search-query-parser 1.5.2 -> 1.5.4

* DevEnv: updates tether 1.4.5 -> 1.4.7

* DevEnv: updates xss 1.0.3 -> 1.0.6

* Revert "DevEnv: updates zone.js 0.7.8 -> 0.10.2"

* DevEnv: updates sinon 1.17.6 -> 8.1.1 in grafana-data package

* DevEnv: updates @types/sinon 7.0.11 -> 7.5.2 in grafana-data package

* DevEnv: updates eventemitter import

* DevEnv: updates lockfile
2020-03-16 13:14:57 +01:00

92 lines
2.8 KiB
TypeScript

import EventEmitter3, { EventEmitter } from 'eventemitter3';
import { AppEvent } from '@grafana/data';
export class Emitter {
private emitter: EventEmitter3;
constructor() {
this.emitter = new EventEmitter();
}
/**
* DEPRECATED.
*/
emit(name: string, data?: any): void;
/**
* Emits an `event` with `payload`.
*/
emit<T extends undefined>(event: AppEvent<T>): void;
emit<T extends Partial<T> extends T ? Partial<T> : never>(event: AppEvent<T>): void;
emit<T>(event: AppEvent<T>, payload: T): void;
emit<T>(event: AppEvent<T> | string, payload?: T | any): void {
if (typeof event === 'string') {
console.log(`Using strings as events is deprecated and will be removed in a future version. (${event})`);
this.emitter.emit(event, payload);
} else {
this.emitter.emit(event.name, payload);
}
}
/**
* DEPRECATED.
*/
on(name: string, handler: (payload?: any) => void, scope?: any): void;
/**
* Handles `event` with `handler()` when emitted.
*/
on<T extends undefined>(event: AppEvent<T>, handler: () => void, scope?: any): void;
on<T extends Partial<T> extends T ? Partial<T> : never>(event: AppEvent<T>, handler: () => void, scope?: any): void;
on<T>(event: AppEvent<T>, handler: (payload: T) => void, scope?: any): void;
on<T>(event: AppEvent<T> | string, handler: (payload?: T | any) => void, scope?: any) {
if (typeof event === 'string') {
console.log(`Using strings as events is deprecated and will be removed in a future version. (${event})`);
this.emitter.on(event, handler);
if (scope) {
const unbind = scope.$on('$destroy', () => {
this.emitter.off(event, handler);
unbind();
});
}
return;
}
this.emitter.on(event.name, handler);
if (scope) {
const unbind = scope.$on('$destroy', () => {
this.emitter.off(event.name, handler);
unbind();
});
}
}
/**
* DEPRECATED.
*/
off(name: string, handler: (payload?: any) => void): void;
off<T extends undefined>(event: AppEvent<T>, handler: () => void): void;
off<T extends Partial<T> extends T ? Partial<T> : never>(event: AppEvent<T>, handler: () => void, scope?: any): void;
off<T>(event: AppEvent<T>, handler: (payload: T) => void): void;
off<T>(event: AppEvent<T> | string, handler: (payload?: T | any) => void) {
if (typeof event === 'string') {
console.log(`Using strings as events is deprecated and will be removed in a future version. (${event})`);
this.emitter.off(event, handler);
return;
}
this.emitter.off(event.name, handler);
}
removeAllListeners(evt?: string) {
this.emitter.removeAllListeners(evt);
}
getEventCount(): number {
return (this.emitter as any)._eventsCount;
}
}