| /** | |
| * @classdesc UI state manager. | |
| */ | |
| export default class PubSub { | |
| /** | |
| * @constructor | |
| */ | |
| constructor() { | |
| this.events = {}; | |
| } | |
| /** | |
| * Adds the given callback function to the given event and adds the event to the handled events if it is not in it yet. | |
| * @param event {string} | |
| * @param callback {function} | |
| * @return {number} | |
| */ | |
| subscribe(event, callback) { | |
| if (!this.events.hasOwnProperty(event)) { | |
| this.events[event] = []; | |
| } | |
| return this.events[event].push(callback); | |
| } | |
| /** | |
| * Triggers all the callback functions for the given event. | |
| * @param event {string} | |
| * @param data | |
| * @return {*[]|*} | |
| */ | |
| publish(event, data = {}) { | |
| if (!this.events.hasOwnProperty(event)) { | |
| return []; | |
| } | |
| return this.events[event].map(callback => callback(data)); | |
| } | |
| } |