create-async-saga
Version:
Like readux-toolkit's createAsyncThunk, but for saga
22 lines (21 loc) • 1.15 kB
JavaScript
import { createAction, nanoid } from "@reduxjs/toolkit";
import { ConditionError } from "./error";
export function createAsyncSagaActions(typePrefix) {
const getStdMeta = (arg, requestId) => ({ meta: { arg, requestId } });
return {
action: createAction(typePrefix, (arg) => ({
payload: arg,
meta: {
requestId: nanoid()
}
})),
pending: createAction(`${typePrefix}/pending`, (arg, requestId) => (Object.assign({ payload: undefined }, getStdMeta(arg, requestId)))),
fulfilled: createAction(`${typePrefix}/fulfilled`, (arg, requestId, result) => (Object.assign({ payload: result }, getStdMeta(arg, requestId)))),
rejected: createAction(`${typePrefix}/rejected`, (arg, requestId, error) => {
const metaData = getStdMeta(arg, requestId);
const rejectedMetaData = Object.assign(Object.assign({}, metaData), { meta: Object.assign(Object.assign({}, metaData.meta), { condition: error instanceof ConditionError }) });
return Object.assign({ payload: error }, rejectedMetaData);
}),
};
}
;