A redux-middleware for redux-offline, inspired by redux-thunk.
redux-offline-chain allows you to chain offline actions. It looks for action.meta.then functions and invokes them in a redux-thunk like manner. The then callback gets the payload from the effect reconciler and optionally redux"s dispatch and getState functions.
Caveat: Please note that the functions cannot be persisted and therefore only work within the same session.
$ npm install --save redux-offline-chain
import { applyMiddleware, compose, createStore, Store } from "redux"
import { offline } from "redux-offline"
import offlineConfig from "redux-offline/lib/defaults"
import offlineChain from "redux-offline-chain"
const store = offline(offlineConfig)(createStore)(
rootReducer,
compose(applyMiddleware(offlineChain))
)
type OfflineAction = {
type: string,
payload: any,
meta: {
offline: {
effect: any,
rollback: Action
commit: {
type: string,
meta: {
+ then: Function,
},
},
},
}
}
export const actionCreator = payload => ({
type: "SOME_ACTION,"
payload,
meta: {
offline: {
effect: { path: "/some/endpoint" },
rollback: { type: "SOME_ACTION_ROLLBACK" },
commit: {
type: "SOME_ACTION_COMMIT",
meta: {
then: payload => ({
type: "ANOTHER_ACTION",
payload,
meta: {
offline: {
effect: { path: "/another/endpoint", method: "POST" },
rollback: { type: "ANOTHER_ACTION_ROLLBACK" },
commit: {
type: "ANOTHER_ACTION_COMMIT",
meta: {
then: payload => (dispatch, getState) => {
// ....
},
}
},
},
},
}),
},
},
},
},
})