1.0.0-beta3 • Published 7 years ago
immutable-state-creator v1.0.0-beta3
Create Immutable State Easily 
An utility to easily create immutable state for Redux
Usage
Primitive types
- Define the State
import { createState, StateObject } from 'immutable-state-creator'
const State = createState({
name: 'User',
fields: {
name: 'my name',
age: 10
}
})- Create initial state
const initState = State.create()- Use
getterto select value
expect(State.age.getter(initState)).toBe(10)
expect(State.name.getter(initState)).toBe('my name')- Use
setterto update a value
const newState = State.age.setter(20)(initState)
expect(State.age.getter(newState)).toBe(20)Immutable List
const State = createState({
name: 'State',
fields: {
pets: List(['dog', 'cat']),
}
})Update a List by using push pop shift unshift
{
// use push to update a list
const initState = State.create()
const newState = State.pets.push('rabbit')(initState)
expect(State.pets.getter(newState).size).toBe(3)
expect(State.pets.getter(newState).toJS()).toEqual(['dog', 'cat', 'rabbit'])
}
{
// use unshift to update a list
const initState = State.create()
const newState = State.pets.unshift('rabbit')(initState)
expect(State.pets.getter(newState).size).toBe(3)
expect(State.pets.getter(newState).toJS()).toEqual(['rabbit', 'dog', 'cat'])
}
{
// use pop to update a list
const initState = State.create()
const newState = State.pets.pop(initState)
expect(State.pets.getter(newState).size).toBe(1)
expect(State.pets.getter(newState).toJS()).toEqual(['dog'])
}
{
// use shift to update a list
const initState = State.create()
const newState = State.pets.shift(initState)
expect(State.pets.getter(newState).size).toBe(1)
expect(State.pets.getter(newState).toJS()).toEqual(['cat'])
}Immutable Map
const State = createState({
name: 'State',
fields: {
job: Map({ title: 'my job', description: 'this is my first job' }),
}
})Use delete and set to update a Map
{
const initState = State.create()
const newState = State.job.delete('title')(initState)
expect(State.job.getter(newState).size).toBe(1)
expect(State.job.get('title')(newState)).toBeUndefined()
expect(State.job.get('description')(newState)).toBe('this is my first job')
}
{
const initState = State.create()
const newState = State.job.set('salary', 100)(initState)
expect(State.job.get('salary')(newState)).toBe(100)
}Immutable Set
const State = createState({
name: 'State',
fields: {
languages: Set(['PHP', 'Java']),
}
})Use delete and add to update a Set
{
const initState = State.create()
const newState = State.languages.delete('PHP')(initState)
expect(State.languages.getter(newState).toJS()).toEqual(['Java'])
}
{
const initState = State.create()
const newState = State.languages.add('JavaScript')(initState)
expect(State.languages.getter(newState).size).toBe(3)
expect(State.languages.getter(newState).toJS()).toEqual(expect.arrayContaining(['PHP', 'Java', 'JavaScript']))
}1.2.4
6 years ago
2.0.0-beta.2
6 years ago
2.0.0-beta.1
6 years ago
1.2.3
6 years ago
1.2.2
6 years ago
1.2.1
6 years ago
1.2.0
6 years ago
1.1.1
6 years ago
1.1.0
7 years ago
1.0.2
7 years ago
1.0.1
7 years ago
1.0.0
7 years ago
1.0.0-beta6
7 years ago
1.0.0-beta5
7 years ago
1.0.0-beta4
7 years ago
1.0.0-beta3
7 years ago
1.0.0-beta2
7 years ago
1.0.0-beta1
7 years ago
0.2.2
8 years ago
0.2.1
8 years ago
0.1.1
8 years ago
0.1.0
8 years ago