Optimistic Delete + Confirm
Each row's Delete opens a themed ConfirmAction modal; on confirm the list swaps to the shorter authoritative list.
Live
trigger, modal := ui.ConfirmAction(ui.ConfirmActionConfig{
Name: "opt-delete-" + item.ID,
RPCPath: "/__site/optimistic/delete?id=" + item.ID,
})
widget.Mount(app.Router(), modal.Build()) // once, at startupShip the optimistic-ui cookbook
Document the mutation lifecycle
Pair ConfirmAction with delete
Confirm → POST → on 2xx the response replaces the list region with the authoritative shorter list. On failure (4xx) the runtime skips the swap (html-mode + non-string value = no-op), so the row stays put; try “Delete n1 (will fail)” to see it. Pair with an Undo window for a true optimistic-remove pattern (Recipe 4).