mirror of
https://github.com/outline/outline.git
synced 2026-06-13 03:14:59 +03:00
f9a2cbc1b3
* chore: resolve remaining unbound-method lint warnings Apply targeted fixes per call pattern: arrow wrappers when passing a method as a callback, arrow-function class fields when the method doesn't depend on `this`, and `.bind()` when capturing for later invocation. Also replaces the rfc6902 hasOwnProperty re-export with a small wrapper function so callers don't reference an unbound prototype method. * chore: memoize history.goBack callbacks Stable identity prevents Button re-renders and avoids re-subscribing the global keydown handler in RegisterKeyDown when the parent renders.
33 lines
903 B
TypeScript
33 lines
903 B
TypeScript
/**
|
|
* A tiny EventEmitter implementation for the browser.
|
|
*/
|
|
export default class EventEmitter {
|
|
private listeners: { [name: string]: ((data: unknown) => unknown)[] } = {};
|
|
|
|
public addListener(name: string, callback: (data: unknown) => unknown) {
|
|
if (!this.listeners[name]) {
|
|
this.listeners[name] = [];
|
|
}
|
|
|
|
this.listeners[name].push(callback);
|
|
}
|
|
|
|
public removeListener(name: string, callback: (data: unknown) => unknown) {
|
|
this.listeners[name] = this.listeners[name]?.filter(
|
|
(cb) => cb !== callback
|
|
);
|
|
}
|
|
|
|
public on = (name: string, callback: (data: unknown) => unknown) =>
|
|
this.addListener(name, callback);
|
|
|
|
public off = (name: string, callback: (data: unknown) => unknown) =>
|
|
this.removeListener(name, callback);
|
|
|
|
public emit(name: string, data?: unknown) {
|
|
this.listeners[name]?.forEach((callback) => {
|
|
callback(data);
|
|
});
|
|
}
|
|
}
|