5.0.0 • Published 3 years ago

cool-store v5.0.0

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

CoolStore

CoolStore is an immutable state store built on top of ImmerJS and RxJS.

Hit the Star button if you love this project ⭐️

Installation

npm install --save cool-store rxjs

Usage

Examples

How to use CoolStore?

1. Create Store

import { CoolStore } from 'cool-store';

interface User {
  name: string;
  email: string;
}

const initialState: User = {
  name: null,
  email: null,
};

const store = new CoolStore(initialState);

2. Set State

store.set(state => {
  state.name = 'Vien Dinh';
  state.email = 'vien@test.com';
});

3. Get State

const state = store.get();
console.log({ user: state });

4. Subscribe State with store.getChanges() observable.

store.getChanges().subscribe(state => {
  console.log({ user: state });
});

5. Reset State

store.reset();

# Advanced store.set() method.

# Set Entire State

store.set({
  name: 'Vien Dinh',
  email: 'vien@test.com',
});
store.set(() => ({
  name: 'Vien Dinh',
  email: 'vien@test.com',
}));

# Set State Properties

store.set(state => {
  state.name = 'Vien Dinh';
});

How to use AsyncCoolStore?

1. Create Store

import { AsyncCoolStore, AsyncCoolState } from 'cool-store';

interface User {
  name: string;
  email: string;
}

const initialState: AsyncCoolState<User, Error> = {
  loading: false,
  data: null,
  error: null,
};

const store = new AsyncCoolStore(initialState);

2. Set State

function getUser(id: number) {
  store.setLoading();

  fetch('https://jsonplaceholder.typicode.com/users/' + id)
    .then(res => res.json())
    .then(data => store.setData(data))
    .catch(error => store.setError(error));
}

getUser(1); // execute the function

3. Subscribe State with store.getChanges() observable.

store.getChanges().subscribe(({ loading, data, error }) => {
  console.log({ loading, data, error });
});

You can also use store.get(), store.set(), store.reset() methods with AsyncCoolStore.

# Advanced store.setData() method.

# Set Entire Data

store.setData({
  name: 'Vien Dinh',
  email: 'vien@test.com',
});
store.setData(() => ({
  name: 'Vien Dinh',
  email: 'vien@test.com',
}));

# Set Data Properties

store.setData(state => {
  state.name = 'Vien Dinh';
});
5.0.0

3 years ago

4.0.1

3 years ago

4.0.0

3 years ago

3.0.3

4 years ago

3.0.2

4 years ago

3.0.1

4 years ago

3.0.0

4 years ago

2.2.20

4 years ago

2.2.19

4 years ago

2.2.18

4 years ago

2.2.17

4 years ago

2.2.15

4 years ago

2.2.16

4 years ago

2.2.13

4 years ago

2.2.5

4 years ago

2.2.14

4 years ago

2.2.11

4 years ago

2.2.7

4 years ago

2.2.12

4 years ago

2.2.6

4 years ago

2.2.10

4 years ago

2.2.9

4 years ago

2.2.8

4 years ago

2.2.4

4 years ago

2.2.3

4 years ago

2.2.1

4 years ago

2.2.2

4 years ago

2.2.0

4 years ago

2.0.2

4 years ago

2.0.1

4 years ago

2.0.0

4 years ago

1.4.4

4 years ago

1.4.3

4 years ago

1.4.2

4 years ago

1.4.1

4 years ago

1.4.0

4 years ago

1.3.3

4 years ago

1.3.2

4 years ago

1.3.1

4 years ago

1.3.0

4 years ago

1.2.0

4 years ago

1.1.7

4 years ago

1.1.6

4 years ago

1.1.5

4 years ago

1.1.4

4 years ago

1.1.3

4 years ago

1.1.2

4 years ago

1.1.1

4 years ago

1.1.0

4 years ago

1.0.0

4 years ago