UNPKG

@atlaskit/editor-common

Version:

A package that contains common classes and components for editor and renderer

51 lines (50 loc) 1.26 kB
import _defineProperty from "@babel/runtime/helpers/defineProperty"; export class EventDispatcher { constructor() { _defineProperty(this, "listeners", {}); } on(event, cb) { if (!this.listeners[event]) { this.listeners[event] = new Set(); } this.listeners[event].add(cb); } has(event, cb) { if (!this.listeners[event]) { return false; } return this.listeners[event].has(cb); } off(event, cb) { if (!this.listeners[event]) { return; } if (this.listeners[event].has(cb)) { this.listeners[event].delete(cb); } } emit(event, data) { if (!this.listeners[event]) { return; } this.listeners[event].forEach(cb => cb(data)); } destroy() { this.listeners = {}; } } function getEventFromEventName(eventName) { return typeof eventName === 'string' ? eventName : eventName.key; } /** * Creates a dispatch function that can be called inside ProseMirror Plugin * to notify listeners about that plugin's state change. */ export function createDispatch(eventDispatcher) { return (eventName, data) => { if (!eventName) { throw new Error('event name is required!'); } eventDispatcher.emit(getEventFromEventName(eventName), data); }; }