fetch-xl
Version:
Fluent, interceptable (using es6 generators), configurable and loggable fetch wrapper
33 lines (25 loc) • 1.06 kB
JavaScript
import {AWAIT_CALL} from './effectActionTypes';
import action from '../../util/action';
import is from '../../util/is';
import verify from '../../util/verify';
const handleAwaitCall = (payload) => {
if (is.array(payload.funcToCall)) {
const [thisContext, func] = payload.funcToCall;
return func.apply(thisContext, payload.callArgs);
}
return payload.funcToCall(payload.callArgs);
};
const effectHandler = {
[AWAIT_CALL]: handleAwaitCall
};
export const handleEffect = (effectAction) => {
const effectResult = effectHandler[effectAction.type](effectAction.payload);
return Promise.resolve(effectResult);
};
export const effectAction = (type, payload) =>
action(type, payload, ['isEffectAction', true]);
export const addHandler = (effectActionType, payloadHandlerFn) => {
verify(payloadHandlerFn, is.function, `The payloadHandlerFn for the effect action type ${effectActionType} should be a function.`);
effectHandler[effectActionType] = payloadHandlerFn;
};
export default {effectAction, addHandler};