Utility library for the flux entity pattern
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.
With npm
npm install --save flux-entity
With yarn
yarn add flux-entity
// 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)
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',
},
},
}