flux-entity
TypeScript icon, indicating that this package has built-in type declarations

1.4.0 • Public • Published

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{
      id0,
      name'Jane',
    },
  },
}

Package Sidebar

Install

npm i flux-entity

Weekly Downloads

17

Version

1.4.0

License

MIT

Unpacked Size

15.4 kB

Total Files

9

Last publish

Collaborators

  • glinkis