launch.io
Version:
Launch.IO is an Ultra Hip, Simple, and Fast, Time Traveling React State Management Library
41 lines (40 loc) • 1.7 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);
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.initializeLaunch = void 0;
var bindActions_1 = require("./bindActions");
var context_1 = require("./context");
var createServiceApi_1 = require("./createServiceApi");
/**
* Initialize a React application with Launch.IO.
*
* @param {Array} services An `array` of application services. Each service object will consist of `name` (`string`), `initialState` (`object`), and `actions` (object of functions) properties.
* @param {Object} options A `Launch.IO` `LaunchOptions` object.
* */
exports.initializeLaunch = function (services, options) {
if (options === void 0) { options = { enableTimeTravel: false }; }
var serviceApi = createServiceApi_1.default(services, options);
var launcher = function (action) {
var prevCtx = context_1.default.snapshot();
var newState = serviceApi.createReducer(launcher)(prevCtx.state, action);
if (newState !== prevCtx.state) {
context_1.default.update(__assign(__assign({}, prevCtx), { state: newState }));
}
};
var contextValue = {
state: serviceApi.initialState,
actions: bindActions_1.default(serviceApi.actions, launcher),
launcher: launcher,
};
context_1.default.update(contextValue);
};