mapcomplete/UI/UIEventSource.js
2020-07-20 15:59:48 +02:00

58 lines
2.1 KiB
JavaScript

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.UIEventSource = void 0;
var UIEventSource = /** @class */ (function () {
function UIEventSource(data) {
this._callbacks = [];
this.data = data;
}
UIEventSource.prototype.addCallback = function (callback) {
this._callbacks.push(callback);
return this;
};
UIEventSource.prototype.setData = function (t) {
if (this.data === t) {
return;
}
this.data = t;
this.ping();
};
UIEventSource.prototype.ping = function () {
for (var _i = 0, _a = this._callbacks; _i < _a.length; _i++) {
var callback = _a[_i];
callback(this.data);
}
};
UIEventSource.flatten = function (source, possibleSources) {
var _a;
var sink = new UIEventSource((_a = source.data) === null || _a === void 0 ? void 0 : _a.data);
source.addCallback(function (latestData) {
sink.setData(latestData === null || latestData === void 0 ? void 0 : latestData.data);
});
for (var _i = 0, possibleSources_1 = possibleSources; _i < possibleSources_1.length; _i++) {
var possibleSource = possibleSources_1[_i];
possibleSource.addCallback(function () {
var _a;
sink.setData((_a = source.data) === null || _a === void 0 ? void 0 : _a.data);
});
}
return sink;
};
UIEventSource.prototype.map = function (f, extraSources) {
if (extraSources === void 0) { extraSources = []; }
var self = this;
var update = function () {
newSource.setData(f(self.data));
newSource.ping();
};
this.addCallback(update);
for (var _i = 0, extraSources_1 = extraSources; _i < extraSources_1.length; _i++) {
var extraSource = extraSources_1[_i];
extraSource.addCallback(update);
}
var newSource = new UIEventSource(f(this.data));
return newSource;
};
return UIEventSource;
}());
exports.UIEventSource = UIEventSource;