1.2.1 • Published 4 years ago

simple-immutable-storage v1.2.1

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

TBD

Usage

create

import createSIS from 'simple-immutable-storage';

const store = createSIS({
  user: {
    name: 'Yevhenii',
    skills: ['HTML', 'JS'],
    family: {
      mother: 'mom',
      father: 'dad'
    }
  }
});

console.log(store) /*
{
  user: {
    name: 'Yevhenii',
    skills: ['HTML', 'JS'],
    family: {
      mother: 'mom',
      father: 'dad'
    }
  }
}
*/

set

import createSIS from 'simple-immutable-storage';

const store = createSIS(); // {}

const nextStore = store.set('key', { value: 3 }); // { key: { value: 3 } }

store === nextStore // false

const store2 = createSIS();
const nextStore2 = store2
  .set('key', 1) // { ley: 1 }
  .set('key2', 2) // { ley: 1, key2: 2 }
  .set('key3', 3); // { ley: 1, key2: 2, key3: 3 }

setIn

import createSIS from 'simple-immutable-storage';

const store = createSIS(); // {}

/*
String or array could be used as a path.
All numbers in path will be interpreted as a array indexes.
*/

const pathAsAString = 'some.like.string';
const nextStore = store.setIn(pathAsAString, 1); // { some: { like: { string: 1 } } }

const pathAsArray = ['some', 'like', 'string'];
const nextStore2 = store.setIn(pathAsArray, 1); // { some: { like: { string: 1 } } }

const pathWithNumbers = ['some', 1, 'string'];
const nextStore3 = store.setIn(pathWithNumbers, 1); // { some: [undefined, { string: 1 }] }

const pathWithNumbers2 = 'some.0.string';
const nextStore3 = store.setIn(pathWithNumbers2, 1); // { some: [{ string: 1 }] }

get / getInOr

import createSIS from 'simple-immutable-storage';

const store = createSIS(); // {}

const nextStore = store
  .setIn('user.name', 'Yevhenii')
  .setIn('user.age', 26)
  .setIn('user.skills.0', 'HTML'); // { user: { name: 'Yevhenii', age: 26, skills: ['HTML'] } }

const user = nextStore.get('user'); // { name: 'Yevhenii', age: 26, skills: ['HTML'] }

/*
String or array could be used as a path.
All numbers in path will be interpreted as a array indexes.
*/

// you can use either string or array as a path
const name = nextStore.getInOr('user.name'); // Yevhenii
const name2 = nextStore.getInOr(['user', 'name']); // Yevhenii

// return either undefined or default value 
const surname = nextStore.getInOr(['user', 'surname']); // undefined
const surnameWithDefault = nextStore.getInOr(['user', 'surname'], 'Hurynets'); // Hurynets

// getting value from array by index
const firstSkill = nextStore.getInOr('user.skills.0'); // HTML

merge

import createSIS from 'simple-immutable-storage';

const store = createSIS({ surname: 'Hurynets' }); // { surname: 'Hurynets' }
const data = {
    user: {
         name: 'Yevhenii',
         skills: ['HTML', 'JS']
    }
}

const nextStore = store.merge(data)

console.log(nextStore) /*
{
  surname: 'Hurynets',
  user: {
    name: 'Yevhenii',
    skills: ['HTML', 'JS']
  }
}
*/


const store2 = createSIS({
  user: {
    name: 'Yevhenii',
    skills: ['HTML', 'JS'],
    family: {
      mother: 'mom',
      father: 'dad'
    }
  }
});

// recursively merge same properties
const nextStore2 = merge(store2, {
  user: {
    name: 'Yevhenii Hurynets',
    skills: ['CSS'],
    family: {
      brother: 'bro'
    }
  }
});

console.log(nextStore2) /*
{
  user: {
    name: 'Yevhenii Hurynets',
    skills: ['HTML', 'JS', 'CSS'],
    family: {
      mother: 'mom',
      father: 'dad',
      brother: 'bro'
    }
  }
}
*/