CRUD Saga Helper

crudSaga(options, extend) โ‡’ function

This helper implements an entire REST sagas flow based on minimal configuration. As long as your endpoint follows standard REST, this helper can establish a basic starting point for CRUD functionality. It is extensible, and its defaults can be overwritten. The only requirements are a name and a sagaApi.

Returns: function - Function that accepts redux actions object

ParamTypeRequiredDescription
optionsobjectYesOptions to pass to saga helper
options.namestringYesREST resource name
options.sagaApistringYesA sagaApi instance
extendfunctionNoA function to pass actions and add extra sagas

Simple Example:

const { createModule } from 'saga-slice';
const { crudInitialState, crudReducers } from 'saga-slice-helpers';
const { sagaApi } from './myApiFile';
const name = 'todos'; // should be rest api endpoint name
const initialState = crudInitialState();
const reducers = crudReducers();
const sagas = crudSaga({ name, sagaApi });
const { actions } = createModule({ name, initialState, reducers, sagas });

Extended Example:

const { takeLatest } from 'redux-sagas/effects';
const { createModule } from 'saga-slice';
const { crudInitialState, crudReducers, lifecycleReducers } from 'saga-slice-helpers';
const { sagaApi } from './myApiFile';
const { history } from './utils';
const name = 'todos'; // should be rest api endpoint name
const initialState = crudInitialState();
const reducers = crudReducers({
...lifecycleReducers('associateUser')
});
const sagas = crudSaga({
name,
sagaApi,
reducers
}, (A) => ({
[A.deleteDone]: function* () {
yield history.push('/todos');
},
[A.associateUser]: function* ({ payload }) {
const { userId, todoId } = payload;
yield sagaApi.put(
`/todos/${todoId}/user/${userId}`,
A.associateUserSuccess,
A.associateUserFail
)
}
}));
const { actions } = createModule({ name, initialState, reducers, sagas });

REST implementation

crudSaga will implement the following based on name: 'todos':

Action TypeMethodPathSuccessFailDone
readAllGET/todosreadAllSuccessreadAllFailreadAllDone
readOneGET/todos/{id}readOneSuccessreadOneFailreadOneDone
createPOST/todoscreateSuccesscreateFailcreateDone
updatePUT/todos/{id}updateSuccessupdateFailupdateDone
patchPATCH/todos/{id}patchSuccesspatchFailpatchDone
deleteDELETE/todos/{id}deleteSuccessdeleteFaildeleteDone