UNPKG

react-themable-hoc

Version:

React higher-order-components that allow for css-in-js-style themes.

46 lines (38 loc) 1.32 kB
export default class ThemeEvents { static listeners = {}; /** * Subscribe to an event type. * Returns a function that can be used to unsubscribe from this event */ static subscribe(event, listener, options = {}) { if (event && !listener) { // Partial application - returns function that takes a listener and options // for this event type return (l, o) => this.subscribe(event, l, o); } if (!this.listeners[event]) { this.listeners[event] = []; } this.listeners[event].push(listener); return () => this.unsubscribe(event, listener); } /** * Unsubscribe from an event */ static unsubscribe(event, listener) { const listenerIndex = this.listeners[event].indexOf(listener); if (listenerIndex < 0) return; this.listeners[event] = [ ...this.listeners[event].slice(0, listenerIndex), ...this.listeners[event].slice(listenerIndex + 1) ]; } /** * Publish an event - will execute callbacks for all listeners for the specified event type */ static publish(event, payload) { if (this.listeners[event]) { this.listeners[event].forEach(callback => callback(payload)); } } }