bgio-effects
Version:
📤 Helpers for managing state effects in boardgame.io
41 lines (40 loc) • 1.27 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.Store = void 0;
const mitt_1 = __importDefault(require("mitt"));
/** Simple value store with subscribe method to listen for changes. */
class Store {
constructor(value) {
this.value = value;
this.mitt = (0, mitt_1.default)();
}
get hasSubscribers() {
const subscribers = this.mitt.all.get(Store.Event);
return subscribers !== undefined && subscribers.length > 0;
}
/**
* Subscribe to updates of the store value.
* @returns An unsubscribe function.
*/
subscribe(handler) {
this.mitt.on(Store.Event, handler);
handler(this.value);
return () => this.mitt.off(Store.Event, handler);
}
/** Update the stored value, notifying all subscribers if it changed. */
set(value) {
if (this.value === value)
return;
this.value = value;
this.mitt.emit(Store.Event, value);
}
/** Get the currently stored value. */
get() {
return this.value;
}
}
exports.Store = Store;
Store.Event = 'change';