CRUD Saga Helper
function
crudSaga(options, extend) โ 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
Param | Type | Required | Description |
---|---|---|---|
options | object | Yes | Options to pass to saga helper |
options.name | string | Yes | REST resource name |
options.sagaApi | string | Yes | A sagaApi instance |
extend | function | No | A 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 Type | Method | Path | Success | Fail | Done |
---|---|---|---|---|---|
readAll | GET | /todos | readAllSuccess | readAllFail | readAllDone |
readOne | GET | /todos/{id} | readOneSuccess | readOneFail | readOneDone |
create | POST | /todos | createSuccess | createFail | createDone |
update | PUT | /todos/{id} | updateSuccess | updateFail | updateDone |
patch | PATCH | /todos/{id} | patchSuccess | patchFail | patchDone |
delete | DELETE | /todos/{id} | deleteSuccess | deleteFail | deleteDone |