npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

redux-popsicle

v0.2.1

Published

Manage HTTP requests in redux actions with simple, testable object configs

Downloads

8

Readme

Redux middleware for making HTTP requests via the Popsicle library. The emphasis is on keeping actions creators as pure functions that return simple objects (as opposed to promises, functions, thunks, iterators) to simplify unit testing on your end.

Installation

npm i --save redux-popsicle
import reduxPopsicle from 'redux-popsicle'

// when you create your store
const store = createStore(reducer, initialState, applyMiddleware([reduxPopsicle, ...otherMiddleware]))

How it works

Any action that contains a popsicle property will be handled by the middleware. The contents of that property (usually an object) will be passed to Popsicle to create the request. For example, if your action creator is:

const weatherRequest = location => {
    return {
        type: 'WEATHER_REQUEST',
        popsicle: {
            method: 'GET',
            url: `https://api.weatherservice.com/${location}`
        }
    }
}

See the Popsicle README for the full lowdown on the popsicle API.

Note that the action is still passed to the reducer. You can use that to indicate within the store that the request has been made.

Alternatively, the popsicle property may be a function. This function receives the full store state, after processing the current action, as an argument, and should return a object similar to the example above.

Responses

In the example above, redux-popsicle will dispatch a default action once the response arrives ({type: '@@redux-popsicle/RESPONSE'}). In most cases, however, you will want to do something with the data. You can include a response property in the action, which is itself an action creator that describes what to do with the response body:

const weatherRequest = location => {
    return {
        type: 'WEATHER_REQUEST',
        popsicle: {
            method: 'GET',
            url: `https://api.weatherservice.com/${location}`
        },
        response: body => ({type: 'WEATHER_RESPONSE', data: body.data})
    }
}

where body represents the (JSON-parsed) request body, assuming the request is successful.

Note that response can also contain a simple action object, instead of an action creator.

Errors

Responses with 4xx and 5xx status codes will not trigger the response action creator. In the example above, they would dispatch a default error action ({type: '@@redux-popsicle/ERROR'}). You can include an error property that can be an action:

const weatherRequest = location => {
    return {
        type: 'WEATHER_REQUEST',
        popsicle: {
            method: 'GET',
            url: `https://api.weatherservice.com/${location}`
        },
        response: body => ({type: 'WEATHER_RESPONSE', data: body.data}),
        error: {type: 'WEATHER_ERROR'}
    }
}

or an action creator:

const weatherRequest = location => {
    return {
        type: 'WEATHER_REQUEST',
        popsicle: {
            method: 'GET',
            url: `https://api.weatherservice.com/${location}`
        },
        response: body => ({type: 'WEATHER_RESPONSE', data: body.data}),
        error: (statusCode, body) => ({type: 'WEATHER_ERROR', statusCode, body})
    }
}