mirror of
https://github.com/grafana/grafana.git
synced 2025-02-20 11:48:34 -06:00
* 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
92 lines
2.8 KiB
TypeScript
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;
|
|
}
|
|
}
|