Artifact Content
Not logged in

Artifact d06e3ca58b5c9a08b72c81499d6212dfb3c6f0d8:


export default function clientMiddleware (client) {
  return ({dispatch, getState}) => {
    return next => action => {
      if (typeof action === 'function') {
        return action(dispatch, getState)
      }

      const { promise, types, ...rest } = action // eslint-disable-line no-redeclare
      if (!promise) {
        return next(action)
      }

      const [REQUEST, SUCCESS, FAILURE] = types
      next({...rest, type: REQUEST})
      const actionPromise = promise(client)
      actionPromise.then(
        result => next({...rest, result, type: SUCCESS}),
        error => next({...rest, error, type: FAILURE})
      ).catch(error => {
        console.error('MIDDLEWARE ERROR:', error)
        next({...rest, error, type: FAILURE})
      })

      return actionPromise
    }
  }
}