redux-saga-helpers

    0.1.2 • Public • Published

    redux-saga-helpers

    Error-handling for redux-saga

    This library provides a selection of small utilities to better handle sagas.

    Why?

    Install

    npm install --save redux-saga-helpers

    Examples

    toResult

    import { call, put } from 'redux-saga/effects'
    import { toResult } from 'redux-saga-helpers'
    import { fetchProductSuccess, fetchProductError } from './actions'
     
    function fetchProduct (id) {
      return fetch(`/products/${id}`)
    }
     
    export function * loadProduct () {
      const [ product, error ] = yield call(toResult(fetchProduct), 1)
      if (!error) {
        yield put(fetchProductSuccess(product))
      } else {
        yield put(fetchProductError(error))
      }
    }

    emitActions

    import { createAction } from 'redux-actions'
    import { call } from 'redux-saga/effects'
    import { emitActions } from 'redux-saga-helpers'
     
    function fetchProduct (id) {
      return fetch(`/products/${id}`)
    }
     
    export function * loadProduct () {
      // `emitActions(fetchProduct)` automatically generates a
      // `FETCH_PRODUCT_SUCCESS` or `FETCH_PRODUCT_ERROR` action.
      yield call(emitActions(fetchProduct), 1)
    }

    createEmitActions

    import { createAction } from 'redux-actions'
    import { call } from 'redux-saga/effects'
    import { createEmitActions } from 'redux-saga-helpers'
     
    function fetchProduct (id) {
      return fetch(`/products/${id}`)
    }
     
    export function * loadProduct () {
      const successAction = createAction('PRODUCT_REQUEST_RECEIVED')
      const errorAction = createAction('PRODUCT_REQUEST_FAILED')
      const emitProductActions = createEmitActions(successAction, errorAction)
      yield call(emitProductActions(fetchProduct), 1)
    }

    createBooleanCallHandler

    import { createAction } from 'redux-actions'
    import { call } from 'redux-saga/effects'
    import { createBooleanCallHandler, toActionPutter } from 'redux-saga-helpers'
     
    function fetchProduct (id) {
      return fetch(`/products/${id}`)
    }
     
    export function * loadProduct () {
      const successHandler = toActionPutter(createAction('PRODUCT_REQUEST_RECEIVED'))
      const errorHandler = toActionPutter(createAction('PRODUCT_REQUEST_FAILED'))
      const booleanCallHandler = createBooleanCallHandler(successHandler, errorHandler)
      yield call(booleanCallHandler(fetchProduct), 1)
    }

    createMatchAsCallHandler

    import { call } from 'redux-saga/effects'
    import { createMatchAsCallHandler } from 'redux-saga-helpers'
     
    function fetchProduct (id) {
      return fetch(`/products/${id}`)
    }
     
    export function * loadProduct () {
      const okHandler = (value) => `${value} ${value}`
      const errHandler = (err) => err
      const authErrorHandler = (err) => `handle authentication errors: ${err}`
      const matchAsCallHandler = createMatchAsCallHandler({
        Ok: okHandler,
        Err: errHandler,
        AuthError: authErrorHandler
      })
      yield call(matchAsCallHandler(fetchProduct), 1)
    }

    match

    import { call } from 'redux-saga/effects'
    import { toResult, match } from 'redux-saga-helpers'
     
    function fetchProduct (id) {
      return fetch(`/products/${id}`)
    }
     
    export function * testMatch () {
      const log = console.log.bind(console)
      const fetchProductAsResult = toResult(fetchProduct)
      const result = yield fetchProductAsResult(1)
      return yield match(result).as({
        Ok: (value) => call(log, `${value} ${value}`),
        Err: (err) => call(log, err),
      })
    }

    Install

    npm i redux-saga-helpers

    DownloadsWeekly Downloads

    221

    Version

    0.1.2

    License

    Unlicense

    Last publish

    Collaborators

    • sebinsua