const status = yield* Transition.make(
{
idle: ["loading"],
loading: ["success", "error"],
success: ["idle"],
error: ["idle", "loading"],
},
"idle"
);
yield* status.to("loading"); // works
yield* status.to("success"); // fails - not allowed from idle
// Reactive checks
status.is("idle"); // Readable<boolean>
status.canTransitionTo("error"); // Readable<boolean>
const isOnline = yield* Signal.make(true);
const status = yield* Transition.make(
{
idle: [{ to: "loading", when: isOnline }, "error"],
loading: ["success", "error"],
success: ["idle"],
error: ["idle"],
},
"idle"
);
// canTransitionTo respects guards
status.canTransitionTo("loading"); // true only when isOnline is true
Create a state machine with declarative transitions.