JSPM

  • Created
  • Published
  • Downloads 118
  • Score
    100M100P100Q67101F
  • License MIT

Package Exports

  • fetch-normalize-data

This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (fetch-normalize-data) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

Readme

fetch-normalize-data

A library to obtain a state of normalized data. Special fetch and reducer helpers are also provided in the export.

CircleCI npm version

Basic Usage

Merge

If you want to merge patched data into an already existing state:

import { getNormalizedMergedState } from 'fetch-normalize-data'

const state = {
  authors: [{ id: 0, name: "John Marxou" }],
  books: [{ authorId: 0, id: 0, text: "my foo" }]
}

const patch = {
  books: [
    {
      author: { id: 1, name: "Edmond Frostan" },
      id: 1,
      text: "you foo"
    }
  ]
}

const config = {
  normalizer: {
    books: {
      normalizer: {
        // short syntax here: <datumKey>: <stateKey>
        author: "authors"
      },
      stateKey: "books"
    }
  }
}

const nextState = getNormalizedMergedState(state, patch, config)

console.log(nextState)

We have:

{
  authors: [
    { id: 0, name: "John Marxou" },
    { id: 1, name: "Edmond Frostan" }
  ],
  books: [
    { authorId: 0, id: 0, text: "my foo" },
    {
      authorId: 1,
      id: 1,
      text: "you foo"
    }
  ]
}

Delete

import { getNormalizedDeletedState } from 'fetch-normalize-data'

const state = {
  authors: [{ id: 0, name: "John Marxou" }],
  books: [{ authorId: 0, id: 0, text: "my foo" }]
}

const patch = {
  books: [{ id: 1 }]
}

const nextState = getNormalizedDeletedState(state, patch, config)

console.log(nextState)

We have:

{
  authors: [
    { id: 0, name: "John Marxou" }
  ],
  books: []
}

Usage with config

Merge

config of getNormalizedMergedState can have:

name type example isRequired default description
isMergingArray bool See test non true decide if nextState. will be a merge of previous and next data or just a replace with the new array
isMergingDatum bool See test non false decide if nextState.<arrayName>[...<datum>] will be a merge from previous and next datum or just a replace with next datum
isMutatingArray bool See test non true decide if nextState. will be a concat or a merge from previous array
isMutatingDatum bool See test non false decide if nextState.<arrayName>[...<datum>] will be a clone or a merge into the previous datum
normalizer objet See test non null a nested object giving relationships between datumKeys and entities to be store at stateKeys

Fetch usage

Reducer usage