appolo-state

0.0.6 • Public • Published

Appolo State

Build Status Dependencies status NPM version npm Downloads Known Vulnerabilities

simple state manager for nodejs built with typescript

Installation

npm install appolo-state --save

Usage

Store(initialState: T = {},options = {maxStates: 1})

initialState - any object options: - maxStates - max number of history states to hold default 1

import {Store} from "appolo-store"
 
let store = new Store<{ counter: number }>({counter: 0}, {maxStates: 10});
 

setState(value: Partial<T>,options={arrayMerge:"extend"})

change the current to new state event stateChanged if fired on state changed

import {Store} from "appolo-store"
 
let store = new Store<{ counter: number }>({counter: 0});
 
store.setState({counter: 1});
 

state():T

return copy of the current state

import {Store} from "appolo-store"
 
    let store = new Store<{ counter: number }>({counter: 0});
 
    store.setState({counter: 1});
 
    let state = store.state()
 
 

stateAt(index: number): T

return state copy at given index

import {Store} from "appolo-store"
 
let store = new Store<{ counter: number }>({counter: 0},{maxStates:10});
 
store.setState({counter: 1});
store.setState({counter: 2});
 
store.stateAt(1).counter; // 1
 
 

get prevState():T

return the previous state

get nextState():T

return the next state

goToState(index: number)

index - the state index to change to

import {Store} from "appolo-store"
 
let store = new Store<{ counter: number }>({counter: 0},{maxStates:10});
 
store.setState({counter: 1});
store.setState({counter: 2});
store.goToState(1);
 
store.state().counter // 1
 

goToPrevState()

go to previous state

goToNextState()

go to next state

Events

store extends appolo-event-dispatcher every to time the state is changed the stateChanged if fired

import {Store} from "appolo-store"
 
let store = new Store<{ counter: number }>({counter: 0});
 
 
store.on("stateChanged",(state)=>{
    console.log(state.counter) // 1
})
 
store.setState({counter: 1});
 

Actions

you can use the action decorator to define custom action events the store will fire event with the action name when the action is finished

import {Store,action} from "appolo-store"
 
class MyStore extend Store<{ counter: number }>{
    super({counter: 0})
 
    @action()
    set myCounter(value){
        this.setState({counter:value})
    }
 
    @action()
    async updateMyCounter(value){
        await doSomeThingAsync()
        this.setState({counter:value})
    }
}
 
(async function (){
 
let store = new MyStore<>();
 
 
store.on("myCounter",(state)=>{
    console.log(state.counter) // 1
})
 
store.myCounter = 1;
 
store.updateMyCounter(2);
 
let state = await store.once("updateMyCounter")
console.log(state.counter) // 2
 
 
})()

Iterator

you can loop over all the states from the beginning iterator

import {Store} from "appolo-store"
 
let store = new Store<{ counter: number }>({counter: 0});
 
store.setState({counter: 1});
store.setState({counter: 2});
 
for (let state of  store.states()) {
    console.log(state.counter) // 0 ,1 ,2
}
 

reset

import {Store} from "appolo-store"
 
let store = new Store<{ counter: number }>({counter: 0});
 
store.setState({counter: 1});
store.setState({counter: 2});
 
store.reset()
 
store.state().counter // 0
 

Tests

 npm run test

License

MIT

Package Sidebar

Install

npm i appolo-state

Weekly Downloads

0

Version

0.0.6

License

MIT

Unpacked Size

18.7 kB

Total Files

14

Last publish

Collaborators

  • shmoop207