import { StateMachine } from '@ellementul/state-machine'
const stateMachine = new StateMachine() // without options
Recommendation: use constants for names of actions and states, methods to call actions will make automatically by them names!
const FIRST_STATE_NAME = "Uniq State Name"
const SECOND_STATE_NAME = "Second State Uniq Name"
const FIRST_ACTION_NAME = "Action Uniq Name"
const SECOND_ACTION_NAME = "Second Action Uniq Name"
stateMachine.addAction(
FIRST_ACTION_NAME, // States will be defined by Uniq name automatically if one of them is not exist yet.
FIRST_STATE_NAME,
SECOND_STATE_NAME
)
.addAction( //chaining calling
SECOND_ACTION_NAME, // States will be find automatically for new action
SECOND_STATE_NAME,
FIRST_STATE_NAME,
() => {} // optionally set callback on action
)
stateMachine.addAction(StateMachine.INIT_ACTION_NAME, FIRST_STATE_NAME)//Second argument optionaly
// default it is
stateMachine.addAction(StateMachine.INIT_ACTION_NAME, StateMachine.INIT_STATE_NAME)
//or just run state machine
stateMachine.start()
stateMachine.start(FIRST_STATE_NAME) //Optionally first argument it need if you didn't set init Action yet, then init action will be create automatically
const callback = (actionName, prevState, nextState) => {}
stateMachine.on(FIRST_ACTION_NAME, callback)
NOTE: Old callback will be rewrite!
stateMachine.off(FIRST_ACTION_NAME)
const result = stateMachine.call(FIRST_ACTION_NAME)
const result = stateMachine.call(StateMachine.INIT_ACTION_NAME)
Method return true
if it is successfully
Find action to exit current state and to enter next state If so action don't exist, then call Exeption
stateMachine.setState(FIRST_STATE_NAME)
Find chain of actions to enter needed state
stateMachine.findActionsToEnter(FIRST_STATE_NAME)