UNPKG

create-async-saga

Version:

Like readux-toolkit's createAsyncThunk, but for saga

22 lines (21 loc) 1.15 kB
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); }), }; } ;