import _ from 'lodash'; export class StatusManager { constructor() { this.statuses = []; this.observers = []; } statusFromString(string) { return {string: string}; } replaceStatusWithString(status, string) { this.removeStatus(status); return this.addStatusFromString(string); } addStatusFromString(string) { return this.addStatus(this.statusFromString(string)); } addStatus(status) { if(typeof status !== "object") { console.error("Attempting to set non-object status", status); return; } this.statuses.push(status); this.notifyObservers(); return status; } removeStatus(status) { _.pull(this.statuses, status); this.notifyObservers(); return null; } getStatusString() { let result = ""; this.statuses.forEach((status, index) => { if(index > 0) { result += " "; } result += status.string; }); return result; } notifyObservers() { for(const observer of this.observers) { observer(this.getStatusString()); } } addStatusObserver(callback) { this.observers.push(callback); } removeStatusObserver(callback) { _.pull(this.statuses, callback); } }