From c90d28e59766a3b8ac721f7412c548d16f67c77e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc-Andr=C3=A9=20Bombeck?= Date: Thu, 8 Oct 2026 20:35:56 +0200 Subject: [PATCH] Name the admin account and invite cards apart from their pages The users page card is now "Accounts" and the invites card "Invite links", so neither repeats the page title above it, and the token overview reads "API tokens" in sentence case. The role filter pills stay neutral when selected, and the three icon tools on a phone row wrap as one group instead of leaving the sign-out icon on its own line. --- messages/de.json | 8 +- messages/en.json | 10 +-- messages/es.json | 8 +- messages/fr.json | 8 +- messages/it.json | 8 +- messages/ko.json | 8 +- messages/pl.json | 8 +- .../admin/__tests__/sections.test.tsx | 4 +- .../admin/user-management-section.tsx | 87 ++++++++++--------- 9 files changed, 78 insertions(+), 71 deletions(-) diff --git a/messages/de.json b/messages/de.json index 656959442..cfadbd90c 100644 --- a/messages/de.json +++ b/messages/de.json @@ -7377,8 +7377,8 @@ "coachFollowsSwitch": "Folgt dem Coach-Schalter im Bereich Coach." }, "invites": { - "title": "Einladungen", - "description": "Einladungslinks für die Registrierung — funktionieren auch bei geschlossener Registrierung.", + "title": "Einladungslinks", + "description": "Jeder Link lässt eine Registrierung zu, auch wenn sie geschlossen ist.", "create": "Einladung erstellen", "createTitle": "Einladung erstellen", "createDescription": "Der Link erlaubt eine Registrierung auch bei geschlossener Registrierung.", @@ -7424,8 +7424,8 @@ "revokedToast": "Einladung widerrufen.", "revokeError": "Einladung konnte nicht widerrufen werden." }, - "userManagement": "Nutzerverwaltung", - "userManagementDescription": "Konten verwalten: Rollen, Passwort-Resets und erzwungene Abmeldungen.", + "userManagement": "Konten", + "userManagementDescription": "Rollen, Passwort-Resets und erzwungene Abmeldungen für jedes Konto.", "userName": "Name", "userEmail": "E-Mail", "userRole": "Rolle", diff --git a/messages/en.json b/messages/en.json index c97071d00..03ea6e8c7 100644 --- a/messages/en.json +++ b/messages/en.json @@ -7377,8 +7377,8 @@ "coachFollowsSwitch": "Follows the Coach switch in the Coach section." }, "invites": { - "title": "Invites", - "description": "Registration invite links — they work even while registration is closed.", + "title": "Invite links", + "description": "Each link admits a signup even while registration is closed.", "create": "Create invite", "createTitle": "Create invite", "createDescription": "The link admits a signup even while registration is closed.", @@ -7424,8 +7424,8 @@ "revokedToast": "Invite revoked.", "revokeError": "Could not revoke the invite." }, - "userManagement": "User Management", - "userManagementDescription": "Manage accounts: roles, password resets, and forced logouts.", + "userManagement": "Accounts", + "userManagementDescription": "Roles, password resets and forced logouts for every account.", "userName": "Name", "userEmail": "Email", "userRole": "Role", @@ -7446,7 +7446,7 @@ "passwordReset": "Password has been reset", "reset": "Reset", "loadingUsers": "Loading users…", - "apiTokens": "API Tokens", + "apiTokens": "API tokens", "apiTokensDescription": "All active and revoked API tokens across all accounts.", "tokenUser": "User", "tokenName": "Name", diff --git a/messages/es.json b/messages/es.json index 02d1d2fca..207e50d34 100644 --- a/messages/es.json +++ b/messages/es.json @@ -7377,8 +7377,8 @@ "coachFollowsSwitch": "Sigue el interruptor del Coach en la sección Coach." }, "invites": { - "title": "Invitaciones", - "description": "Enlaces de invitación para el registro: funcionan incluso con el registro cerrado.", + "title": "Enlaces de invitación", + "description": "Cada enlace permite un registro aunque el registro esté cerrado.", "create": "Crear invitación", "createTitle": "Crear invitación", "createDescription": "El enlace permite registrarse incluso con el registro cerrado.", @@ -7424,8 +7424,8 @@ "revokedToast": "Invitación revocada.", "revokeError": "No se pudo revocar la invitación." }, - "userManagement": "Gestión de usuarios", - "userManagementDescription": "Gestiona las cuentas: roles, restablecimientos de contraseña y cierres de sesión forzados.", + "userManagement": "Cuentas", + "userManagementDescription": "Roles, restablecimientos de contraseña y cierres de sesión forzados de cada cuenta.", "userName": "Nombre", "userEmail": "Correo electrónico", "userRole": "Rol", diff --git a/messages/fr.json b/messages/fr.json index 0d6b487d1..0f3cd67f7 100644 --- a/messages/fr.json +++ b/messages/fr.json @@ -7377,8 +7377,8 @@ "coachFollowsSwitch": "Suit l'interrupteur Coach de la section Coach." }, "invites": { - "title": "Invitations", - "description": "Liens d'invitation pour l'inscription — ils fonctionnent même lorsque les inscriptions sont fermées.", + "title": "Liens d'invitation", + "description": "Chaque lien permet une inscription même lorsque les inscriptions sont fermées.", "create": "Créer une invitation", "createTitle": "Créer une invitation", "createDescription": "Le lien permet une inscription même lorsque les inscriptions sont fermées.", @@ -7424,8 +7424,8 @@ "revokedToast": "Invitation révoquée.", "revokeError": "Impossible de révoquer l'invitation." }, - "userManagement": "Gestion des utilisateurs", - "userManagementDescription": "Gérez les comptes : rôles, réinitialisations de mot de passe et déconnexions forcées.", + "userManagement": "Comptes", + "userManagementDescription": "Rôles, réinitialisations de mot de passe et déconnexions forcées pour chaque compte.", "userName": "Nom", "userEmail": "E-mail", "userRole": "Rôle", diff --git a/messages/it.json b/messages/it.json index 7a091f12f..2ae1490d2 100644 --- a/messages/it.json +++ b/messages/it.json @@ -7377,8 +7377,8 @@ "coachFollowsSwitch": "Segue l'interruttore Coach nella sezione Coach." }, "invites": { - "title": "Inviti", - "description": "Link di invito per la registrazione: funzionano anche quando la registrazione è chiusa.", + "title": "Link di invito", + "description": "Ogni link consente una registrazione anche quando la registrazione è chiusa.", "create": "Crea invito", "createTitle": "Crea invito", "createDescription": "Il link consente una registrazione anche quando la registrazione è chiusa.", @@ -7424,8 +7424,8 @@ "revokedToast": "Invito revocato.", "revokeError": "Impossibile revocare l'invito." }, - "userManagement": "Gestione utenti", - "userManagementDescription": "Gestisci gli account: ruoli, reset delle password e disconnessioni forzate.", + "userManagement": "Account", + "userManagementDescription": "Ruoli, reset delle password e disconnessioni forzate per ogni account.", "userName": "Nome", "userEmail": "E-mail", "userRole": "Ruolo", diff --git a/messages/ko.json b/messages/ko.json index 5f1896298..21cffb63a 100644 --- a/messages/ko.json +++ b/messages/ko.json @@ -7353,8 +7353,8 @@ "coachFollowsSwitch": "코치 섹션의 코치 스위치를 따라요." }, "invites": { - "title": "초대", - "description": "가입 초대 링크 — 회원가입이 닫혀 있어도 동작해요.", + "title": "초대 링크", + "description": "링크마다 회원가입이 닫혀 있어도 가입할 수 있어요.", "create": "초대 만들기", "createTitle": "초대 만들기", "createDescription": "회원가입이 닫혀 있어도 이 링크로는 가입할 수 있어요.", @@ -7400,8 +7400,8 @@ "revokedToast": "초대를 취소했어요.", "revokeError": "초대를 취소하지 못했어요." }, - "userManagement": "사용자 관리", - "userManagementDescription": "계정 관리: 역할, 비밀번호 재설정, 강제 로그아웃.", + "userManagement": "계정", + "userManagementDescription": "계정마다 역할, 비밀번호 재설정, 강제 로그아웃을 관리해요.", "userName": "이름", "userEmail": "이메일", "userRole": "역할", diff --git a/messages/pl.json b/messages/pl.json index 9dd315df2..53ba3023f 100644 --- a/messages/pl.json +++ b/messages/pl.json @@ -7377,8 +7377,8 @@ "coachFollowsSwitch": "Podlega przełącznikowi Coach w sekcji Coach." }, "invites": { - "title": "Zaproszenia", - "description": "Linki z zaproszeniem do rejestracji — działają nawet przy zamkniętej rejestracji.", + "title": "Linki z zaproszeniem", + "description": "Każdy link pozwala na rejestrację nawet przy zamkniętej rejestracji.", "create": "Utwórz zaproszenie", "createTitle": "Utwórz zaproszenie", "createDescription": "Link umożliwia rejestrację nawet przy zamkniętej rejestracji.", @@ -7424,8 +7424,8 @@ "revokedToast": "Zaproszenie unieważnione.", "revokeError": "Nie udało się unieważnić zaproszenia." }, - "userManagement": "Zarządzanie użytkownikami", - "userManagementDescription": "Zarządzaj kontami: role, resety haseł i wymuszone wylogowania.", + "userManagement": "Konta", + "userManagementDescription": "Role, resety haseł i wymuszone wylogowania dla każdego konta.", "userName": "Nazwa", "userEmail": "E-mail", "userRole": "Rola", diff --git a/src/components/admin/__tests__/sections.test.tsx b/src/components/admin/__tests__/sections.test.tsx index bc6ee08a0..3d3449673 100644 --- a/src/components/admin/__tests__/sections.test.tsx +++ b/src/components/admin/__tests__/sections.test.tsx @@ -102,7 +102,7 @@ describe("admin sections — SSR smoke", () => { it(" renders with filter pills", () => { const html = render(); - expect(html).toContain("User Management"); + expect(html).toContain("Accounts"); // Filter pills painted from i18n expect(html).toContain("All"); expect(html).toContain("Admins"); @@ -110,7 +110,7 @@ describe("admin sections — SSR smoke", () => { it(" renders", () => { const html = render(); - expect(html).toContain("API Tokens"); + expect(html).toContain("API tokens"); }); it(" renders", () => { diff --git a/src/components/admin/user-management-section.tsx b/src/components/admin/user-management-section.tsx index 8c2f746c0..e6b0ff13a 100644 --- a/src/components/admin/user-management-section.tsx +++ b/src/components/admin/user-management-section.tsx @@ -231,45 +231,50 @@ export function UserManagementSection() {