0.2.4 • Published 4 years ago

path-operation v0.2.4

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

About Path Operation

path-operation is a tool for operating object

Why use Path Operation

path-operation makes complex object easier to operating

Usage

install

npm install path-operation
  • Common Usage
import po from 'path-operation'

const obj = {
  a: {
    b: 2,
    c: {
      d: 4
    }
  }
}

const pathObj = po(obj)

const bPath = pathObj(['a', 'b'])
const cPath = pathObj(['a', 'c'])
const dPath = pathObj(['a', 'c', 'd'])

bPath(v => v + 1) // { a: { b: 3, c: { d: 4 } } }
cPath(v => ({...v, f: 8})) // { a: { b: 3, c: { d: 4, f: 8 } } }
dPath(10) // { a: { b: 3, c: { d: 10, f: 8 } } }
  • Redux Usage
const state = {
  app: {
    name: 'puppy',
    age: 18
  }
}

const pathState(state)
const pathName = pathState(['app', 'name'])
const pathAge = pathState(['app', 'age'])

// reducer
(state, {path, payload}) => path(payload)

dispatch({
  path: pathName,
  payload: 'jack'
})
/**
state = {
  app: {
    name: 'jack',
    age: 18
  } 
}
*/
dispatch({
  path: pathAge,
  payload: pathAge.getValue() + 1
})
/**
state = {
  app: {
    name: 'jack',
    age: 19
  } 
}
*/
dispatch({
  path: pathAge,
  payload: pathAge.getValue() + 1
})
/**
state = {
  app: {
    name: 'jack',
    age: 20
  } 
}
*/

API

// - Config default: {defaultPath: [], mutable: true, pathMap: null}
const state = {
  app: {
    name: 'puppy',
    age: 18
  },
}
const path = Po(state, {defaultPath: ['app'], mutable: false})
// if not set default path, equal path(['app', 'age']) 👇
const pathAge = path(['age'])
// if config mutable is false, inner state is immutable
pathAge(
  pathAge.getValue() + 1 // path can use path.getValue to get path current value
)
// {...xxx, age: 19}
pathAge(pathAge.getValue() + 1) // {...xxx, age: 19}
  • use path map config
const path = Po(state, {
  pathMap: {
    userAge: ['app','age'],
    userName: ['app', 'name'],
  }
})
pathName(['userAge'])('jack') // {...xxx, name: 'jack'}
pathAge(['userAge'])(20) // {...xxx, age: 20}

More Usage

Test Use Case Link

0.2.4

4 years ago

0.2.3

4 years ago

0.2.1

4 years ago

0.2.0

4 years ago

0.2.2

4 years ago

0.1.1

4 years ago

0.1.0

4 years ago

0.0.3

4 years ago

0.0.2

4 years ago

0.0.5

4 years ago

0.0.4

4 years ago

0.0.1

4 years ago