1.0.0-beta3 • Published 7 years ago

immutable-state-creator v1.0.0-beta3

Weekly downloads
5
License
MIT
Repository
github
Last release
7 years ago

Create Immutable State Easily travis-ci

An utility to easily create immutable state for Redux

Usage

Primitive types

  1. Define the State
import { createState, StateObject } from 'immutable-state-creator'

const State = createState({
  name: 'User',
  fields: {
    name: 'my name',
    age: 10
  }
})
  1. Create initial state
const initState = State.create()
  1. Use getter to select value
expect(State.age.getter(initState)).toBe(10)
expect(State.name.getter(initState)).toBe('my name')
  1. Use setter to 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