Watch
0
0
Fork
You've already forked hyperhive
0

swarm-ui: a todo switched from clear to upsert drops its prefix flag

This commit is contained in:
iris 2026-10-24 14:05:02 +02:00 • committed by mara
commit fb8aa23e66
5 changed files with 34 additions and 12 deletions

View file

@ -200,6 +200,20 @@ export function reparent(
};
}
// A todo with its op switched. A clear carries no text, and only a clear may
// be a prefix, so each is reset where the new op has no place for it.
export function withOp(
node: Extract<FlowNode, { kind: "todo" }>,
op: "upsert" | "clear",
): Extract<FlowNode, { kind: "todo" }> {
return {
...node,
op,
text: op === "clear" ? "" : node.text,
prefix: op === "clear" ? node.prefix : false,
};
}
// The node with `next.id` swapped for `next`. A node keeps its place and its
// kind-class: the source stays the source, and nothing with children becomes
// a todo.

View file

@ -185,7 +185,7 @@ export function FlowEditorPage({
reload and drop my edits
</Button>
<Button onClick={() => void load(true)}>
keep my edits on top of the latest
keep my edits (replaces this flow's latest version)
</Button>
</div>
) : null}

View file

@ -16,6 +16,7 @@ import {
replaceNode,
type Edit,
type Limits,
withOp,
} from "./FlowDraft.js";
import {
kindValues,
@ -237,14 +238,7 @@ function TodoFields({
label="op"
value={node.op}
options={opList}
onChange={(op) =>
onChange({
...node,
op: op as TodoNode["op"],
// A clear carries no text.
text: op === "clear" ? "" : node.text,
})
}
onChange={(op) => onChange(withOp(node, op as TodoNode["op"]))}
/>
<SelectField
id={`${keyPrefix}-to-kind`}