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-make-communication

v2.0.0

Published

Make communication actions and reducers for redux

Downloads

60

Readme

redux-make-communication

Make communication actions and reducers for redux

Motivation

This library provides tools for creating and managing actions and reducers to manage your state when accessing a third-party server or a backend server. The created state provides a flag for processing the status of the request, showing its error if there is one. Based on this state, you can display the process of client communication with the server.

How it looks like without a library

Action creators

const fetchDeposit = (data) => {
  type: 'FETCH_DEPOSIT',
  payload: { data },
}
const fetchDepositSuccess = (data) => {
  type: 'FETCH_DEPOSIT_SUCCESS',
  payload: { data },
}
const fetchDepositFail = (error) => {
  type: 'FETCH_DEPOSIT_FAIL',
  payload: { error },
}
...
// We use redux-thunk for example
export const getDeposit = id => {
  store.dispatch(fetchDeposit());
  return function(dispatch, getState) {
    return fetch(`https://deposits.com/${id}`)
      .then(data => data.json())
      .then(data => {
        if (data.message === 'Not Found') {
          throw new Error('No such deposit found!');
        }
        dispatch(fetchDepositSuccess(data));
      })
      .catch(error => dispatch(fetchDepositFail(error)));
  };
};

Reducers

const depositReducer = (state, action) => {
  return (state = initial, action) => {
    switch (action.type) {
      case 'FETCH_DEPOSIT_SUCCESS':
        return { state: actions.payload };
      case 'FETCH_DEPOSIT_FAIL':
        return { state: actions.error };
      default: return state;
    }
  };
}

Go to usage to see an example of our solution

Installation

npm install redux-make-communication --save
yarn add redux-make-communication

API

The library allows you to formalize and typify the management of your actions, encapsulating the logic of creating actions and reducers. makeCommunicationActionCreators(string, string, string) - a function that takes action(execute, success, fail) types and returns communication action creators (executeAction, successAction, failAction).

makeCommunicationReducer('' | { string, boolean }) - a function that takes action types(execute, success, fail) and an initial state for the reducer

Usage

Create action creators with makeCommunicationActionCreators

import { makeCommunicationActionCreators } from 'redux-make-communication';
import * as NS from './namespace';

export const { execute: fetchDeposit, success: fetchDepositSuccess, fail: fetchDepositFail } =
  makeCommunicationActionCreators<NS.IFetchDeposit, NS.IFetchDepositSuccess, NS.IFetchDepositFail>(
    'FETCH_DEPOSIT', 'FETCH_DEPOSIT_SUCCESS', 'FETCH_DEPOSIT_FAIL',
  );

each action creator accepts an optional argument payload that can be typed using the types in the library

IPlainAction<T>     // T - action type
IAction<T, P>       // T - action type, P - payload
IPlainFailAction<T, E = string>   // T - action type, E - error
IFailAction<T, P, E = string>     // T - action type, E - error, P - payload

type IFetchDeposit = IPlainAction<'FETCH_DEPOSIT'>;
type IFetchDepositSuccess = IAction<'FETCH_DEPOSIT_SUCCESS', IDeposit>;
type IFetchDepositFail = IPlainFailAction<'FETCH_DEPOSIT_FAIL'>;

Create redux state with makeCommunicationReducer

import { makeCommunicationReducer } from 'redux-make-communication';
import initial from './initial';
import * as NS from './namespace';

export const depositReducer = {
  depositFetching: makeCommunicationReducer<NS.IFetchDeposit, NS.IFetchDepositSuccess, NS.IFetchDepositFail>(
    'FETCH_DEPOSIT',
    'FETCH_DEPOSIT_SUCCESS',
    'FETCH_DEPOSIT_FAIL',
    initial.depositFetching,
  ),
}

the created state branch looks like

ICommunication {
  isRequesting: boolean;
  error: string;
}