redux-dispatcher
Version:
All-in-one simple solution to manage actions with less code
58 lines (47 loc) • 1.16 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
const injectEvent = action => {
const event = {
done: false,
result: undefined,
listener: undefined
};
const waitResult = listener => {
if (typeof listener === "function") {
event.listener = listener;
const unsubscribe = () => {
event.listener = undefined;
};
unsubscribe.remove = unsubscribe;
return unsubscribe;
} // should check event.done instead event.result
// because we allow result to be dispatched as Falsy value
if (event.done) return event.result;
return new Promise(resolve => {
event.listener = resolve;
});
};
const dispatchResult = data => {
if (event.listener) {
return event.listener(data);
}
event.done = true;
event.result = data;
};
Object.defineProperties(action, {
waitResult: {
value: waitResult,
enumerable: false
},
dispatchResult: {
value: dispatchResult,
enumerable: false
}
});
return action;
};
var _default = injectEvent;
exports.default = _default;