@dnb/eufemia
Version:
DNB Eufemia Design System UI Library
52 lines (51 loc) • 1.81 kB
TypeScript
/**
* EventEmitter
*
* This is a tiny event emitter meant to be used at several components that relay on each other to sync data in parallel.
*
* - In your class: this._emitterInstance = EventEmitter.createInstance(id) // unique id
* - Listen to changes: this._emitterInstance.listen(function)
* - Set new data: this._emitterInstance.set({...})
* - Update new data: this._emitterInstance.update({...})
* - Get new data: this._emitterInstance.get()
* - Remove it like this: this._emitterInstance.remove()
*
* __EEE__ stands for __EUFEMIA_EVENT_EMITTER__
*/
declare global {
interface Window {
__EEE__?: EventEmitterEEE;
}
}
export type EventEmitterId = string;
export type EventEmitterData = Record<string, unknown>;
export type EventEmitterListener = (data: EventEmitterData) => void;
export type EventEmitterEEE = Record<EventEmitterId, EventEmitterScopeObject>;
export type EventEmitterScope = ({
__EEE__?: EventEmitterEEE;
} & Window) | EventEmitter;
export type EventEmitterScopeInstances = Array<EventEmitter>;
export type EventEmitterScopeObject = {
count: number;
instances: EventEmitterScopeInstances;
data: EventEmitterData;
};
/**
* Deprecated
*
* @deprecated Please use useSharedState instead for new code
*/
declare class EventEmitter {
static createInstance(id: EventEmitterId): EventEmitter;
static __EEE__?: Record<EventEmitterId, EventEmitterScopeObject>;
id: EventEmitterId;
listeners: Array<EventEmitterListener>;
constructor(id: EventEmitterId);
update: (data: EventEmitterData) => void;
set: (data: EventEmitterData) => void;
get: () => EventEmitterData;
listen(fn: EventEmitterListener): this;
unlisten(fn?: EventEmitterListener | undefined): void;
remove(): void;
}
export default EventEmitter;