state-monitor.ts 650 字节
Newer Older
Huan (李卓桓)'s avatar
Huan (李卓桓) 已提交
1 2
/**
 * Wechaty
3
 *
Huan (李卓桓)'s avatar
Huan (李卓桓) 已提交
4 5 6 7 8 9 10 11
 * Helper Class for Manage State Change
 */

/**
 * A - State A
 * B - State B
 */
class StateMonitor <A, B>{
Huan (李卓桓)'s avatar
linting  
Huan (李卓桓) 已提交
12 13
  private _targetState:   A|B
  private _currentState:  [A|B, boolean]
Huan (李卓桓)'s avatar
Huan (李卓桓) 已提交
14

Huan (李卓桓)'s avatar
linting  
Huan (李卓桓) 已提交
15
  constructor(initState: A|B) {
Huan (李卓桓)'s avatar
Huan (李卓桓) 已提交
16 17 18 19
    this.targetState(initState)
    this.currentState(initState)
  }

Huan (李卓桓)'s avatar
linting  
Huan (李卓桓) 已提交
20
  public targetState(newState: A|B): A|B {
Huan (李卓桓)'s avatar
Huan (李卓桓) 已提交
21 22 23 24 25 26
    if (newState) {
      this._targetState = newState
    }
    return this._targetState
  }

Huan (李卓桓)'s avatar
linting  
Huan (李卓桓) 已提交
27
  public currentState(newState: A|B, pending = false): [A|B, boolean] {
Huan (李卓桓)'s avatar
Huan (李卓桓) 已提交
28 29 30 31 32
    if (newState) {
      this._currentState = [newState, pending]
    }
    return this._currentState
  }
Huan (李卓桓)'s avatar
linting  
Huan (李卓桓) 已提交
33
}
34 35

export default StateMonitor