Skip to content

Utility library for the flux entity pattern

License

Notifications You must be signed in to change notification settings

Glinkis/flux-entity

Repository files navigation

flux-entity

Utility library for the flux entity pattern

CircleCI npm version npm downloads code style: prettier


Motivation

A common pattern when working with a flux-based system such as Redux is to use a normalized registry of objects, keyed by some unique value.

Installation

With npm

npm install --save flux-entity

With yarn

yarn add flux-entity

API

// Returns a function for creating entities
createEntityFactory()

// Inserts values into an array
insertIntoArray(array, ...values)

// Removes values from an array
removeFromArray(array, ...values)

// Removes all values from an entity
clearEntity(entity)

// Returns a copy of the entity with all values
copyEntity(entity)

// Inserts values into an entity
insertIntoEntity(entity, ...values)

// Removes values from an entity
removeFromEntity(entity, ...values)

// Removes values from an entity by their id
removeFromEntityById(entity, ...ids)

Examples

Say we have an object type Person.

interface Person {
  id: number
  name: string
}

Create an entity factory for type Person. By supplying Person, we can get excellent type safety with Typescript.

const createEntity = createEntityFactory<Person>()

Create an entity, keyed by id. This will now mean that each Person is indexed with their id as the uniqueness qualifier.

const entity = createEntity('id')

We now have an empty entity.

{
  key: 'id', // Unique key
  ids: [], // Ordered array of all ids
  all: {}, // Dictionary with all objects
}

Insert a value into the entity.

insertIntoEntity(entity, {
  id: 0,
  name: 'Jane',
})

The resulting entity state now looks like this.

{
  key: 'id',
  ids: [0],
  all: {
    0: {
      id: 0,
      name: 'Jane',
    },
  },
}

About

Utility library for the flux entity pattern

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors 3

  •  
  •  
  •