1.4.0 • Published 4 years ago

flux-entity v1.4.0

Weekly downloads
26
License
MIT
Repository
github
Last release
4 years ago

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',
    },
  },
}
1.4.0

4 years ago

1.3.8

4 years ago

1.3.7

4 years ago

1.3.6

5 years ago

1.3.5

5 years ago

1.3.4

5 years ago

1.3.3

5 years ago

1.3.2

5 years ago

1.3.1

5 years ago

1.3.0

5 years ago

1.2.4

5 years ago

1.2.3

5 years ago

1.2.2

5 years ago

1.2.1

5 years ago

1.2.0

5 years ago

1.1.0

5 years ago

1.0.0

5 years ago