import { StatePart } from './smartstate.classes.statepart.js'; /** * Context object passed to action definitions, enabling safe nested dispatch. * Use `context.dispatch()` to dispatch sub-actions inline (bypasses the mutation queue). * Direct `statePart.dispatchAction()` from within an action will deadlock. */ export interface IActionContext { dispatch(action: StateAction, payload: T): Promise; } export interface IActionDef { (stateArg: StatePart, actionPayload: TActionPayloadType, context?: IActionContext): Promise; } /** * an actionmodifier for the state */ export class StateAction { constructor( public statePartRef: StatePart, public actionDef: IActionDef ) {} public trigger(payload: TActionPayloadType): Promise { return this.statePartRef.dispatchAction(this, payload); } }