import SceneContextScene, { SceneSession, SceneSessionData } from '../context' import Context from '../../context' import { Middleware } from '../../middleware' import { SessionContext } from '../../session' export interface WizardContext extends Context { session: WizardSession scene: SceneContextScene, D> wizard: WizardContextWizard> } export interface WizardSessionData extends SceneSessionData { cursor: number } export interface WizardSession extends SceneSession {} export default class WizardContextWizard< C extends SessionContext & { scene: SceneContextScene } > { readonly state: object constructor( private readonly ctx: C, private readonly steps: ReadonlyArray> ) { this.state = ctx.scene.state this.cursor = ctx.scene.session.cursor ?? 0 } get step() { return this.steps[this.cursor] } get cursor() { return this.ctx.scene.session.cursor } set cursor(cursor: number) { this.ctx.scene.session.cursor = cursor } selectStep(index: number) { this.cursor = index return this } next() { return this.selectStep(this.cursor + 1) } back() { return this.selectStep(this.cursor - 1) } }