Files
member-console/internal/server/shell_forms.go
T

48 lines
2.1 KiB
Go

// SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Commercial
// SPDX-FileCopyrightText: 2025-2026 Christian Galo
package server
import (
"git.coopcloud.tech/wiki-cafe/member-console/internal/forms"
)
// shell.confirm (design D4, D12; docs/design-system.md "Confirm modal";
// task 5.6). The one shared confirmation dialog every destructive action on
// both surfaces opens through (shell_confirm_modal.html, driven by
// static/confirm-action-modal.js): one dialog, reused by every trigger, its
// title, body text, hidden fields, endpoint and commit class all
// reassigned by the script from the trigger's own data-action-*
// attributes at the moment it opens (design-system.md's trigger-contract
// table).
//
// Because one dialog serves many different mutations, this declaration
// carries no Fields of its own; CheckInvariants exempts the Confirm kind
// from the "declares no fields" rule for exactly this reason (a Field
// would have to belong to one trigger's shape, and every trigger's shape
// differs). The hidden fields a trigger needs are appended straight into
// the rendered <form> by the script itself, from data-action-fields; the
// body text is written into the form's Message region, which the Confirm
// kind renders unconditionally, empty at rest, so the script always has
// somewhere to write it (forms.FormView.MessageID's doc; app.css collapses
// it while empty).
//
// Method and Path below are never dispatched: the script rewrites
// hx-post/hx-delete, hx-target and hx-swap on every open, from the
// trigger's own attributes, before any submission can reach the network.
// They exist only because the invariants require a route-shaped value;
// "/partials/confirm" names no real handler and no route registers it.
//
// Nothing in this package reads the returned spec: internal/web's
// shellConfirmForm template function looks it up by name, because
// internal/web cannot import this package.
var _ = forms.Register(forms.FormSpec{
Name: "shell.confirm",
Kind: forms.KindConfirm,
Family: forms.Stacked,
Method: "POST",
Path: "/partials/confirm",
Commit: "Confirm",
WayOut: forms.DismissModal("Cancel"),
})