Skip to content

Batch Creation

states() and events() create many refs in one call, returning a typed record keyed by name.

import { states } from "@mantaq/sugar";
const { basicInfo, shippingAddress, payment, submitting, success, error } = states(
"basicInfo",
"shippingAddress",
"payment",
"submitting",
{ name: "success", final: true },
"error",
);

Finality declared at creation via { name: "<id>", final: true }. No .final() call.

import { events } from "@mantaq/sugar";
const {
submitBasicInfo,
submitShipping,
submitPayment,
back,
paymentOk,
paymentFail,
submittingDone,
} = events(
"submitBasicInfo",
"submitShipping",
"submitPayment",
"back",
"paymentOk",
"paymentFail",
"submittingDone",
);

states() returns { [K in T]: StateRef<K> }. Dot or bracket access:

const s = states("basicInfo", "payment");
s.basicInfo; // StateRef<"basicInfo">
s["payment"]; // StateRef<"payment">

Destructure or keep the record:

const { basicInfo, payment } = states("basicInfo", "payment");
const { basicInfo, payment, success } = states("basicInfo", "payment", {
name: "success",
final: true,
});
const { submitBasicInfo, submitPayment } = events("submitBasicInfo", "submitPayment");
const checkout = new Actor({
inputs: [submitBasicInfo, submitPayment],
states: [basicInfo, payment, success],
initial: basicInfo,
setup: (m) => {
m.on(basicInfo, submitBasicInfo, () => ({ state: payment }));
m.on(payment, submitPayment, () => ({ state: success }));
},
});

Many states/events: two calls replace thirteen. Few refs: the plain state("basicInfo")() form stays clearer.