@bloc-js/react-bloc
Version:
React components for implementing the BLoC pattern.
68 lines (67 loc) • 2.37 kB
JavaScript
;
var __assign = (this && this.__assign) || function () {
__assign = Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
if (ar || !(i in from)) {
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
ar[i] = from[i];
}
}
return to.concat(ar || Array.prototype.slice.call(from));
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.blocGetter = exports.BlocRegistry = void 0;
var BlocRegistry = /** @class */ (function () {
function BlocRegistry(initialState) {
if (initialState === void 0) { initialState = {}; }
this.blocs = {};
this.initialState = initialState;
}
BlocRegistry.prototype.getState = function () {
var _this = this;
return Object.keys(this.blocs).reduce(function (o, id) {
var _a;
return (__assign(__assign({}, o), (_a = {}, _a[id] = _this.blocs[id].value, _a)));
}, {});
};
BlocRegistry.prototype.register = function (id, factory, args) {
if (this.blocs[id]) {
return this.blocs[id];
}
var state = this.initialState[id];
var bloc = factory.apply(void 0, __spreadArray([this, state], args, false));
this.blocs[id] = bloc;
return bloc;
};
BlocRegistry.prototype.complete = function (id) {
if (!this.blocs[id])
return;
this.blocs[id].complete();
delete this.blocs[id];
};
return BlocRegistry;
}());
exports.BlocRegistry = BlocRegistry;
function blocGetter(id, factory) {
return [
function (registry) {
var args = [];
for (var _i = 1; _i < arguments.length; _i++) {
args[_i - 1] = arguments[_i];
}
return registry.register(id, factory, args);
},
function (registry) { return registry.complete(id); },
];
}
exports.blocGetter = blocGetter;