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-state-loader

v0.1.6

Published

A redux middleware to handle loading states triggered through start, success and failure actions.

Downloads

16

Readme

Build Status Package version

Redux State Loader

A redux middleware to handle loading states triggered through start and stop actions.

Why would I need this?

Ever wanted a loading indicator while you are fetching a large amount of data. Ever wanted to block a submit button from being clicked again after you have submitted a form. Then this is the solution for you. Instead of going through the hassle of maintaining loading states for your buttons and containers, redux-state-loader does it for you.

Getting started

The first step is to add redux-state-loader into your project.

npm install --save redux-state-loader

Note: The package itself has no dependencies but would be useless without Redux.

The next step is to register the middleware in the redux store.

//store.js

import { reduxLoaderReducer, reduxLoaderMiddleware } from 'redux-state-loader';
import { applyMiddleware, createStore, compose, combineReducers } from 'redux';

const loaderMiddleware = reduxLoaderMiddleware();
const enhancer = compose(applyMiddleware(loaderMiddleware));

const reducer = combineReducers({
  reduxLoader: reduxLoaderReducer,
  // other reducers
});

const store = createStore(reducer, enhancer);

The reduxLoaderMiddleware function accepts a key that should be the same as the key used to add reduxLoaderReducer into combineReducers.

const loaderMiddleware = reduxLoaderMiddleware('myCustomLoader');
// Uses 'reduxLoader' by default

const reducer = combineReducers({
  myCustomLoader: reduxLoaderReducer,
  // other reducers
});

Usage

Redux loader provides a bunch of actions that can be used to manage the loading states.

STOP_LOADING = '@@RL/STOP_LOADING'
START_LOADING = '@@RL/START_LOADING'
REGISTER_LOADER = '@@RL/REGISTER_LOADER'
UNREGISTER_LOADER = '@@RL/UNREGISTER_LOADER'

You'll only really need REGISTER_LOADER and UNREGISTER_LOADER but other actions can also be used.

Also action creators.

registerLoader({
  id: String,
  stopActions: Array,
  startActions: Array
}): Action

startLoading(id: String): Action

stopLoading(id: String): Action

unregisterLoader(id: String): Action

Start by importing the action creators.

import { reduxLoaderActions } from 'redux-state-loader';

Next register a loader by supplying a unique id, start actions and stop actions.

const registerAction = reduxLoaderActions.registerLoader({
  id: 'myLoader',
  startActions: ['TRIGGER_LOADING_ACTION'],
  stopActions: ['SUCCESS_ACTION', 'FAILURE_ACTION'],
});

const unregisterAction = reduxLoaderActions.unregisterLoader('myLoader');

// Register a loader
store.dispatch(registerAction);

Your redux state will look something like this. Redux Loader State

That's it. Now whenever a start action, eg. TRIGGER_LOADING_ACTION is dispatched, your registered loader, eg. myLoader will be set to true. Similarly, when either SUCCESS_ACTION or FAILURE_ACTION is dispatched, myLoader will be set to false.

You can subscribe to the loader using redux's subscribe method or using react-redux.

import { connect } from 'react-redux';

const Component = ({ myLoader: false }) =>
  <div>
    {/* Other elements */}
    {
      myLoader && <span>Loading...</span>
    }
  </div>;

const mapStateToProps = state => ({
  myLoader: state.reduxLoader.loaders.myLoader,
  // Other props
});

const EnhancedComponent = connect(mapStateToProps)(Component);

You can also manually trigger loading using startLoading and stopLoading actions.

import { reduxLoaderActions } from 'redux-state-loader';

// Trigger loading of myLoader
store.dispatch(reduxLoaderActions.startLoading('myLoader'));

// Stop loading of myLoader
store.dispatch(reduxLoaderActions.stopLoading('myLoader'));

Documentation

Read the docs using this link.

Contributing

To contribute, follow one of the two options:

  • Open an Issue

    Open an issue detailing:

    1. What the issue is
    2. Steps to reproduce
    3. Possible solutions

    Note: These details are recommended but are entirely optional.

  • Send a Pull Request

    Fork this project and send a pull request to the master branch.

License

MIT