crudSaga
crudSaga(options, extend) ⇒ function
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
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
}, (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
Last updated
Was this helpful?