redux-dispatcher
Version:
All-in-one simple solution to manage actions with less code
44 lines (34 loc) • 1.06 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.withResult = exports.injectResult = void 0;
const withResult = dispatcher => {
return (...args) => {
const action = typeof dispatcher === "function" ? dispatcher(...args) : dispatcher || {};
return injectResult(action);
};
};
exports.withResult = withResult;
const injectResult = action => {
let callback;
const $result = () => {
const promise = new Promise(resolve => callback = resolve);
/**
* provide an alternative way to set result when action is destructured:
* const { $result } = withResult(...)(...)
* $result.value = something
*/
Object.defineProperty(promise, "value", {
set: setResult
});
return promise;
}; // `callback` is actually `resolve` (from Promise) at the time setter is called
const setResult = data => callback(data);
Object.defineProperty(action, "$result", {
get: $result,
set: setResult
});
return action;
};
exports.injectResult = injectResult;