@home-app/api.module v2.1.2
Description
This module makes http requests and log every step of it into the store.
It has several statuses: Pending, Success, Error, Cancel. All of it except Pending has some data (result or errors).
Also each unique request has an id that also stored in the store (as a key of data).
A data structure is following:
{
"pathToApiData": {
"rId0": {
"status": "PENDING"
},
"rId1": {
"status": "SUCCESS",
"data": "raw response data"
},
"rId2": {
"status": "ERROR",
"data": "raw error data"
},
"rId3": {
"status": "CANCEL",
"data": "raw cancel data"
}
}
}
First of all
For correct work of the module it have to be done:
- include the
redux-module-creator
into package.json dependencies (https://www.npmjs.com/package/redux-module-creator) - link the store according RMC documentation
Next step - integrating into the store:
Reducer
You should to import the module into a reducer where you wanna store api data:
import { apiModule } from '@home-app/api.module';
And integrate it into reducers tree:
function someReducer(state = initialState, action) {
return {
modulePath: apiModule.integrator('modulePath')(state, action),
};
}
Middleware
Also, you need to inject the middleware into the store handling cycle
import { middleware } from '@home-app/api.module';
Apply the middleware normally.
API reference
.fetch(url [, options][, adapters])
- url: string
- options: object
-- method: method of the request
-- body: data of the request
-- headers: object with headers - adapters: function or array of functions
Returns request id that is a unique string for each unique request (two equal requests will get same id).
.getPromise(requestId)
Returns a promise for an active request.
.cancelRequest(requestId)
Cancel an active request.
.actions.clear(requestId)
Dispatch an action that makes a reducer to clear all data for a specified request id.