UNPKG

@dnb/eufemia

Version:

DNB Eufemia Design System UI Library

52 lines (51 loc) 1.81 kB
/** * 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;