feat(persons): add confirm dialog to provisional confirm action

Confirming a provisional person was a one-click write — easy to fat-finger
on a touchscreen and irreversible (the person disappears from the review
list, with no obvious undo path). Mirror the destructive-delete pattern
with a non-destructive confirm dialog (destructive: false) so the action
requires a second deliberate click.

New i18n keys (persons_review_confirm_confirm_title/text/button) added
to all three locales (de, en, es).

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
Marcel
2026-05-28 10:36:38 +02:00
parent a9cac08f3c
commit a670ba014c
4 changed files with 22 additions and 1 deletions

View File

@@ -155,6 +155,9 @@
"persons_review_delete_confirm_title": "Person löschen", "persons_review_delete_confirm_title": "Person löschen",
"persons_review_delete_confirm_text": "Diese Person wird endgültig gelöscht. Dokumentverweise bleiben erhalten, verlieren aber diese Person.", "persons_review_delete_confirm_text": "Diese Person wird endgültig gelöscht. Dokumentverweise bleiben erhalten, verlieren aber diese Person.",
"persons_review_delete_confirm_button": "Person löschen", "persons_review_delete_confirm_button": "Person löschen",
"persons_review_confirm_confirm_title": "Person bestätigen",
"persons_review_confirm_confirm_text": "Diese Person wird als bestätigt markiert und erscheint nicht mehr in der Prüfliste.",
"persons_review_confirm_confirm_button": "Bestätigen",
"persons_review_merge_label": "Mit welcher Person zusammenführen?", "persons_review_merge_label": "Mit welcher Person zusammenführen?",
"persons_field_first_name": "Vorname", "persons_field_first_name": "Vorname",
"persons_field_last_name": "Nachname", "persons_field_last_name": "Nachname",

View File

@@ -155,6 +155,9 @@
"persons_review_delete_confirm_title": "Delete person", "persons_review_delete_confirm_title": "Delete person",
"persons_review_delete_confirm_text": "This person will be permanently deleted. Document references are kept but lose this person.", "persons_review_delete_confirm_text": "This person will be permanently deleted. Document references are kept but lose this person.",
"persons_review_delete_confirm_button": "Delete person", "persons_review_delete_confirm_button": "Delete person",
"persons_review_confirm_confirm_title": "Confirm person",
"persons_review_confirm_confirm_text": "This person will be marked as confirmed and will no longer appear in the review list.",
"persons_review_confirm_confirm_button": "Confirm",
"persons_review_merge_label": "Merge into which person?", "persons_review_merge_label": "Merge into which person?",
"persons_field_first_name": "First name", "persons_field_first_name": "First name",
"persons_field_last_name": "Last name", "persons_field_last_name": "Last name",

View File

@@ -155,6 +155,9 @@
"persons_review_delete_confirm_title": "Eliminar persona", "persons_review_delete_confirm_title": "Eliminar persona",
"persons_review_delete_confirm_text": "Esta persona se eliminará de forma permanente. Las referencias de documentos se conservan pero pierden a esta persona.", "persons_review_delete_confirm_text": "Esta persona se eliminará de forma permanente. Las referencias de documentos se conservan pero pierden a esta persona.",
"persons_review_delete_confirm_button": "Eliminar persona", "persons_review_delete_confirm_button": "Eliminar persona",
"persons_review_confirm_confirm_title": "Confirmar persona",
"persons_review_confirm_confirm_text": "Esta persona se marcará como confirmada y dejará de aparecer en la lista de revisión.",
"persons_review_confirm_confirm_button": "Confirmar",
"persons_review_merge_label": "¿Fusionar con qué persona?", "persons_review_merge_label": "¿Fusionar con qué persona?",
"persons_field_first_name": "Nombre", "persons_field_first_name": "Nombre",
"persons_field_last_name": "Apellido", "persons_field_last_name": "Apellido",

View File

@@ -62,7 +62,19 @@ const deleteBtn =
> >
{m.persons_review_action_rename()} {m.persons_review_action_rename()}
</button> </button>
<form method="POST" action="?/confirm" use:enhance> <form
method="POST"
action="?/confirm"
use:enhance={async ({ cancel }) => {
const ok = await confirm({
title: m.persons_review_confirm_confirm_title(),
body: m.persons_review_confirm_confirm_text(),
confirmLabel: m.persons_review_confirm_confirm_button(),
destructive: false
});
if (!ok) cancel();
}}
>
<input type="hidden" name="id" value={person.id} /> <input type="hidden" name="id" value={person.id} />
<button type="submit" class={actionBtn}>{m.persons_review_action_confirm()}</button> <button type="submit" class={actionBtn}>{m.persons_review_action_confirm()}</button>
</form> </form>