normalized-data-state

1.0.0 • Public • Published

normalized-data-state

A simple lib to obtain a state of normalized data.

CircleCI npm version

Basic Usage

Merge

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

import { getNormalizedMergedState } from 'normalized-data-state'
 
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 'normalized-data-state'

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

Readme

Keywords

Package Sidebar

Install

npm i normalized-data-state

Weekly Downloads

1

Version

1.0.0

License

MIT

Unpacked Size

270 kB

Total Files

18

Last publish

Collaborators

  • ledoux