///
import { Cell, Default, handler, lift, recipe, str } from "commontools";
interface SharedAliasArgs {
value: Default;
}
const sharedIncrement = handler(
(
event: { amount?: number } | undefined,
context: { value: Cell },
) => {
const amount = typeof event?.amount === "number" ? event.amount : 1;
const next = (context.value.get() ?? 0) + amount;
context.value.set(next);
},
);
export const counterWithSharedAlias = recipe(
"Counter With Shared Alias",
({ value }) => {
const safeValue = lift((count: number | undefined) =>
typeof count === "number" ? count : 0
)(value);
const label = str`Value ${safeValue}`;
return {
value,
label,
current: safeValue,
mirrors: {
left: safeValue,
right: safeValue,
},
increment: sharedIncrement({ value }),
};
},
);