fix(account): stop calling a delete with a grace window permanent

With the deletion grace window on, the confirm dialog still asked to
delete the account permanently and its button said so, while the body
promised fourteen days and an admin undo. The title and the button now
match the window, and the success message that names the erase date stays
long enough to read before the sign-in page.
This commit is contained in:
Marc-André Bombeck committed 2026-10-25 20:48:30 +01:00
1 parent 789beff176
commit c4b300ad78
10 files changed
+36 -5

No files matched your search

+2
View File
@@ -6928,10 +6928,12 @@
"deleteAccountCardDescription": "Löscht dein Konto inklusive Passkeys, Audit-Log und Sessions.",
"deleteAccountCta": "Konto löschen",
"deleteAccountConfirmTitle": "Konto endgültig löschen?",
"deleteAccountConfirmTitleGrace": "Konto löschen?",
"deleteAccountConfirmDescription": "Dein Konto, alle Gesundheitsdaten, Passkeys, Sessions und Audit-Einträge werden unwiderruflich gelöscht. Du wirst danach automatisch abgemeldet. Kopien in den Sicherungen dieses Servers verfallen nach ihrer Aufbewahrungsfrist.",
"deleteAccountSuccess": "Konto wurde gelöscht. Du wirst abgemeldet.",
"deleteAccountFailed": "Konto konnte nicht gelöscht werden",
"deleteAccountFinal": "Endgültig löschen",
"deleteAccountFinalGrace": "Konto löschen",
"saved": "Gespeichert",
"savingError": "Fehler beim Speichern",
"about": {
+2
View File
@@ -6928,10 +6928,12 @@
"deleteAccountCardDescription": "Deletes your account along with passkeys, audit log, and sessions.",
"deleteAccountCta": "Delete account",
"deleteAccountConfirmTitle": "Delete account permanently?",
"deleteAccountConfirmTitleGrace": "Delete your account?",
"deleteAccountConfirmDescription": "Your account, all health data, passkeys, sessions, and audit entries will be permanently deleted. You will be signed out immediately after. Copies in this server's backups age out after their retention period.",
"deleteAccountSuccess": "Account deleted. Signing you out.",
"deleteAccountFailed": "Account could not be deleted",
"deleteAccountFinal": "Delete permanently",
"deleteAccountFinalGrace": "Delete account",
"saved": "Saved",
"savingError": "Error saving",
"about": {
+2
View File
@@ -6928,10 +6928,12 @@
"deleteAccountCardDescription": "Elimina tu cuenta junto con las claves de acceso, el registro de auditoría y las sesiones.",
"deleteAccountCta": "Eliminar cuenta",
"deleteAccountConfirmTitle": "¿Eliminar la cuenta de forma permanente?",
"deleteAccountConfirmTitleGrace": "¿Eliminar tu cuenta?",
"deleteAccountConfirmDescription": "Tu cuenta, todos los datos de salud, las claves de acceso, las sesiones y las entradas de auditoría se eliminarán de forma permanente. Se cerrará tu sesión inmediatamente después. Las copias en las copias de seguridad de este servidor caducan al terminar su periodo de conservación.",
"deleteAccountSuccess": "Cuenta eliminada. Cerrando tu sesión.",
"deleteAccountFailed": "No se pudo eliminar la cuenta",
"deleteAccountFinal": "Eliminar permanentemente",
"deleteAccountFinalGrace": "Eliminar cuenta",
"saved": "Guardado",
"savingError": "Error al guardar",
"about": {
+2
View File
@@ -6928,10 +6928,12 @@
"deleteAccountCardDescription": "Supprime votre compte ainsi que les clés d’accès, le journal d’audit et les sessions.",
"deleteAccountCta": "Supprimer le compte",
"deleteAccountConfirmTitle": "Supprimer définitivement le compte ?",
"deleteAccountConfirmTitleGrace": "Supprimer votre compte ?",
"deleteAccountConfirmDescription": "Votre compte, toutes vos données de santé, vos clés d’accès, vos sessions et vos entrées d’audit seront définitivement supprimés. Vous serez déconnecté immédiatement après. Les copies dans les sauvegardes de ce serveur expirent à la fin de leur durée de conservation.",
"deleteAccountSuccess": "Compte supprimé, déconnexion en cours.",
"deleteAccountFailed": "Le compte n’a pas pu être supprimé",
"deleteAccountFinal": "Supprimer définitivement",
"deleteAccountFinalGrace": "Supprimer le compte",
"saved": "Enregistré",
"savingError": "Erreur lors de l’enregistrement",
"about": {
+2
View File
@@ -6928,10 +6928,12 @@
"deleteAccountCardDescription": "Elimina il tuo account insieme a passkey, registro di controllo e sessioni.",
"deleteAccountCta": "Elimina account",
"deleteAccountConfirmTitle": "Eliminare definitivamente l’account?",
"deleteAccountConfirmTitleGrace": "Eliminare il tuo account?",
"deleteAccountConfirmDescription": "Il tuo account, tutti i dati sanitari, le passkey, le sessioni e le voci di audit verranno eliminati definitivamente. Verrai disconnesso subito dopo. Le copie nei backup di questo server scadono al termine del loro periodo di conservazione.",
"deleteAccountSuccess": "Account eliminato, disconnessione in corso.",
"deleteAccountFailed": "Impossibile eliminare l’account",
"deleteAccountFinal": "Elimina definitivamente",
"deleteAccountFinalGrace": "Elimina account",
"saved": "Salvato",
"savingError": "Errore durante il salvataggio",
"about": {
+2
View File
@@ -6928,10 +6928,12 @@
"deleteAccountCardDescription": "패스키, 감사 로그, 세션까지 함께 계정을 삭제해요.",
"deleteAccountCta": "계정 삭제",
"deleteAccountConfirmTitle": "계정을 영구히 삭제할까요?",
"deleteAccountConfirmTitleGrace": "계정을 삭제할까요?",
"deleteAccountConfirmDescription": "계정과 모든 건강 데이터, 패스키, 세션, 감사 기록이 영구히 삭제돼요. 삭제 직후 로그아웃돼요. 이 서버 백업에 남은 사본은 보관 기간이 지나면 사라져요.",
"deleteAccountSuccess": "계정을 삭제했어요. 로그아웃할게요.",
"deleteAccountFailed": "계정을 삭제하지 못했어요",
"deleteAccountFinal": "영구 삭제",
"deleteAccountFinalGrace": "계정 삭제",
"saved": "저장됨",
"savingError": "저장 중 오류",
"about": {
+2
View File
@@ -6928,10 +6928,12 @@
"deleteAccountCardDescription": "Verwijdert je account samen met passkeys, auditlogboek en sessies.",
"deleteAccountCta": "Account verwijderen",
"deleteAccountConfirmTitle": "Account definitief verwijderen?",
"deleteAccountConfirmTitleGrace": "Je account verwijderen?",
"deleteAccountConfirmDescription": "Je account, alle gezondheidsgegevens, passkeys, sessies en auditregistraties worden definitief verwijderd. Je wordt daarna direct uitgelogd. Kopieën in de back-ups van deze server verlopen na hun bewaartermijn.",
"deleteAccountSuccess": "Account verwijderd. Je wordt uitgelogd.",
"deleteAccountFailed": "Account kon niet worden verwijderd",
"deleteAccountFinal": "Definitief verwijderen",
"deleteAccountFinalGrace": "Account verwijderen",
"saved": "Opgeslagen",
"savingError": "Fout bij opslaan",
"about": {
+2
View File
@@ -6928,10 +6928,12 @@
"deleteAccountCardDescription": "Usuwa Twoje konto wraz z kluczami dostępu, dziennikiem audytu i sesjami.",
"deleteAccountCta": "Usuń konto",
"deleteAccountConfirmTitle": "Trwale usunąć konto?",
"deleteAccountConfirmTitleGrace": "Usunąć konto?",
"deleteAccountConfirmDescription": "Twoje konto, wszystkie dane zdrowotne, klucze dostępu, sesje i wpisy audytu zostaną trwale usunięte. Zostaniesz wylogowany natychmiast po tym. Kopie w kopiach zapasowych tego serwera wygasają po upływie okresu przechowywania.",
"deleteAccountSuccess": "Konto usunięte, trwa wylogowywanie.",
"deleteAccountFailed": "Nie udało się usunąć konta",
"deleteAccountFinal": "Usuń trwale",
"deleteAccountFinalGrace": "Usuń konto",
"saved": "Zapisano",
"savingError": "Błąd podczas zapisywania",
"about": {
+2
View File
@@ -6928,10 +6928,12 @@
"deleteAccountCardDescription": "Exclui sua conta junto com chaves de acesso, log de auditoria e sessões.",
"deleteAccountCta": "Excluir conta",
"deleteAccountConfirmTitle": "Excluir conta permanentemente?",
"deleteAccountConfirmTitleGrace": "Excluir sua conta?",
"deleteAccountConfirmDescription": "Sua conta, todos os dados de saúde, chaves de acesso, sessões e registros de auditoria serão excluídos permanentemente. Você será desconectado imediatamente depois. As cópias nos backups deste servidor expiram depois do período de retenção.",
"deleteAccountSuccess": "Conta excluída. Desconectando você.",
"deleteAccountFailed": "Não foi possível excluir a conta",
"deleteAccountFinal": "Excluir permanentemente",
"deleteAccountFinalGrace": "Excluir conta",
"saved": "Salvo",
"savingError": "Erro ao salvar",
"about": {
+18 -5
View File
@@ -267,9 +267,14 @@ function AccountDeleteCard() {
// deleted the row); give the toast a beat to paint, then bounce to the
// login page. Leave `deleting` set so the confirm button keeps its
// pending state through the redirect: only an admin can undo it now.
setTimeout(() => {
loadDocument("/auth/login");
}, 1_500);
// With a grace window the message names the erase date, so it stays
// long enough to read.
setTimeout(
() => {
loadDocument("/auth/login");
},
typeof scheduledPurgeAt === "string" ? 5_000 : 1_500,
);
} catch (err) {
setDeleting(false);
const message = recentProofErrorMessage(
@@ -330,7 +335,11 @@ function AccountDeleteCard() {
if (deleting) return;
setConfirmOpen(open);
}}
title={t("settings.deleteAccountConfirmTitle")}
title={
graceDays > 0
? t("settings.deleteAccountConfirmTitleGrace")
: t("settings.deleteAccountConfirmTitle")
}
body={
graceDays > 0
? t("settings.deleteAccountConfirmDescriptionGrace", {
@@ -338,7 +347,11 @@ function AccountDeleteCard() {
})
: t("settings.deleteAccountConfirmDescription")
}
confirmLabel={t("settings.deleteAccountFinal")}
confirmLabel={
graceDays > 0
? t("settings.deleteAccountFinalGrace")
: t("settings.deleteAccountFinal")
}
onConfirm={() => void handleDeleteAccount()}
pending={deleting}
slot="settings-account-delete"