rvikmanis/redux-kefir

View on GitHub
src/observableMiddleware.js

Summary

Maintainability
A
0 mins
Test Coverage
import { isFSA, isObservable } from './utils'

export default function observableMiddleware({dispatch}) {
  return next => action => {
    if (!isFSA(action)) {
      return isObservable(action)
        ? action.onValue(dispatch)
        : next(action)
    }

    if (isObservable(action.payload)) {
      return action.payload.onValue(value => {
        dispatch(Object.assign({}, action, {payload: value}))
      }).onError(error => {
        dispatch(Object.assign({}, action, {payload: error, error: true}))
      })
    }

    return next(action)
  }
}