typedux
Version:
Slightly adjusted Redux (awesome by default) for TS
92 lines • 3.44 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);
};
(function (factory) {
if (typeof module === "object" && typeof module.exports === "object") {
var v = factory(require, exports);
if (v !== undefined) module.exports = v;
}
else if (typeof define === "function" && define.amd) {
define(["require", "exports", "./ActionTypes", "../util"], factory);
}
})(function (require, exports) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.ActionTracker = void 0;
var ActionTypes_1 = require("./ActionTypes");
var util_1 = require("../util");
/**
* Wraps an action providing tracking events and data
*/
var ActionTracker = /** @class */ (function () {
/**
* Create new action tracker
*
* @param leaf
* @param name
* @param action
* @param id
* @param store
*/
function ActionTracker(id, leaf, name, action, store) {
var _this = this;
this.id = id;
this.leaf = leaf;
this.name = name;
this.action = action;
this.store = store;
/**
* Action Status
*
* @type {ActionStatus}
*/
this.status = ActionTypes_1.ActionStatus.Started;
var InternalActionFactory = require("../internal/InternalActionFactory").InternalActionFactory, internalActions = new InternalActionFactory(store);
this._promise = new util_1.Bluebird(function (resolve, reject) {
Object.assign(_this, {
reject: reject,
resolve: resolve
});
try {
internalActions.setPendingAction(_this);
var dispatch = function (action) { return store === null || store === void 0 ? void 0 : store.dispatch(action); }, getState = function () { return store === null || store === void 0 ? void 0 : store.getState(); }, result = action(dispatch, getState);
// UNWRAP PROMISE
util_1.Bluebird
.resolve(result)
.then(resolve)
.catch(reject);
}
catch (err) {
reject(err);
}
}).finally(function () {
// FINALLY NOTIFY INTERNAL STATE
_this.status = ActionTypes_1.ActionStatus.Finished;
internalActions.setPendingAction(__assign({}, _this));
});
}
Object.defineProperty(ActionTracker.prototype, "promise", {
/**
* Get the underlying promise
*
* @returns {Promise<T>}
*/
get: function () {
return this._promise;
},
enumerable: false,
configurable: true
});
return ActionTracker;
}());
exports.ActionTracker = ActionTracker;
});
//# sourceMappingURL=ActionTracker.js.map