Skip to content

Instantly share code, notes, and snippets.

@vzaidman
Last active December 8, 2017 12:30
Show Gist options
  • Save vzaidman/066b0de31095b2d1ceb4904ce02f47ad to your computer and use it in GitHub Desktop.
Save vzaidman/066b0de31095b2d1ceb4904ce02f47ad to your computer and use it in GitHub Desktop.
import { makeThunkActionCreator } from 'redux-toobelt-thunk'
export const fetchOrders = makeThunkActionCreator(‘fetchOrders’, () => api.fetchOrders()))
export const addOrder = makeThunkActionCreator(‘addOrder’, order => api.addOrder(order))
export const updateOrder = makeThunkActionCreator(‘updateOrder’, order => api.updateOrder(order))
export const fetchProfile = makeThunkActionCreator(‘removeOrder’, id => api.removeOrder(id).then(() => id))
import { makeAsyncReducer } from 'redux-toobelt'
import { fetchOrders, addOrder, updateOrder, fetchProfile } from './actions'
const upsertOrder = (state, { payload }) => upsertItemById(state.data, payload.id, payload)
const removeOrder = (state, { payload: id }) => removeItemById(state.data, id)
export const ordersReducer = composeReducers(
makeAsyncReducer(fetchOrders, { defaultData: [] }),
makeAsyncReducer(addOrder, { dataGetter: upsertOrder }),
makeAsyncReducer(updateOrder, { dataGetter: upsertOrder }),
makeAsyncReducer(removeOrder, { dataGetter: removeOrder }),
makeAsyncReducer(logout, { shouldDestroyData: false }),
)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment