Skip to content

Latest commit

 

History

History
122 lines (106 loc) · 2.85 KB

initializeNetworkHelpers.md

File metadata and controls

122 lines (106 loc) · 2.85 KB

initializeNetworkHelpers(networkHelpers)

Overrides the built-in defaults for network handling.

Arguments

  1. (networkHelpers): An object with the following properties, all optional:
  • getToken
  • requestGET
  • requestPATCH
  • requestPUT
  • requestPOST
  • requestDELETE
  • handleStatusCode
  • handleError

Example

import { initializeNetworkHelpers } from '@brigad/redux-rest-easy';

const networkHelpers = {
  // Mandatory if you don't override the others
  getToken: () => localStorage.getItem('token'),

  // Override to add custom headers
  requestGET() {
    return {
      method: 'GET',
      headers: {
        Accept: 'application/json',
        Authorization: `Bearer ${this.getToken()}`,
      },
    };
  },
  requestPATCH(body) {
    return {
      method: 'PATCH',
      headers: {
        Accept: 'application/json',
        Authorization: `Bearer ${this.getToken()}`,
        'Content-Type': 'application/json',
      },
      body,
    };
  },
  requestPUT(body) {
    return {
      method: 'PUT',
      headers: {
        Accept: 'application/json',
        Authorization: `Bearer ${this.getToken()}`,
        'Content-Type': 'application/json',
      },
      body,
    };
  },
  requestPOST(body) {
    return {
      method: 'POST',
      headers: {
        Accept: 'application/json',
        Authorization: `Bearer ${this.getToken()}`,
        'Content-Type': 'application/json',
      },
      body,
    };
  },
  requestDELETE() {
    return {
      method: 'DELETE',
      headers: {
        Accept: 'application/json',
        Authorization: `Bearer ${this.getToken()}`,
      },
    };
  },

  // Override to change status code handling / error handling
  handleStatusCode: response => {
    if (response) {
      if (response.status >= 200 && response.status < 300) {
        return response;
      }

      const error = new Error(response.statusText);
      error.response = response;
      throw error;
    }

    return null;
  },
  // eslint-disable-next-line no-unused-vars
  handleError: async (err, dispatch) => {
    try {
      if (err && err.response) {
        const error = await err.response.json();

        // dispatch some action to warn the user about the error

        // eslint-disable-next-line no-console
        console.error(error);
      } else {
        // eslint-disable-next-line no-console
        console.error(err);
      }
    } catch (e) {
      // eslint-disable-next-line no-console
      console.error(e);
    }
  },
};

initializeNetworkHelpers(networkHelpers);

Tips

  • You should do this before any network request performs (usually at the entry point of your app)
  • Only specifying getToken is often enough to make your app work. Use the other options if you need custom headers or handlers!
  • To provide helpers on a per-action basis, use the actions configuration