1.0.0 • Published 5 years ago

normalized-data-state v1.0.0

Weekly downloads
23
License
MIT
Repository
github
Last release
5 years ago

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:

nametypeexampleisRequireddefaultdescription
isMergingArrayboolSee testnontruedecide if nextState. will be a merge of previous and next data or just a replace with the new array
isMergingDatumboolSee testnonfalsedecide if nextState.<arrayName>[...<datum>] will be a merge from previous and next datum or just a replace with next datum
isMutatingArrayboolSee testnontruedecide if nextState. will be a concat or a merge from previous array
isMutatingDatumboolSee testnonfalsedecide if nextState.<arrayName>[...<datum>] will be a clone or a merge into the previous datum
normalizerobjetSee testnonnulla nested object giving relationships between datumKeys and entities to be store at stateKeys