From f10a34c5058c74a3493eb5f69040bfbca3577f6c Mon Sep 17 00:00:00 2001 From: Zaid Marzguioui Date: Thu, 2 Apr 2026 22:59:42 +0200 Subject: [PATCH] =?UTF-8?q?fix:=20comprehensive=20CMS=20QA=20fixes=20?= =?UTF-8?q?=E2=80=94=20i18n,=20UI=20labels,=20breadcrumbs?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Fix i18n dotted permission keys causing INVALID_KEY console spam (en/de cms.json) - Fix member detail breadcrumb showing UUID instead of member name - Fix bookings stats card showing 'of' instead of 'Total' - Fix events/registrations table 'status' column header resolving to object - Fix finance search placeholder showing 'Show All' instead of search text - Fix finance status filter default showing 'No data' instead of 'All' - Fix applications page German pluralization 'Antrage' → 'Anträge' - Add breadcrumbValues prop to CmsPageShell for UUID→name overrides --- .../[locale]/home/[account]/bookings/page.tsx | 2 +- .../[locale]/home/[account]/events/page.tsx | 2 +- .../[account]/events/registrations/page.tsx | 2 +- .../[locale]/home/[account]/finance/page.tsx | 4 +- .../[account]/members-cms/[memberId]/page.tsx | 5 +- apps/web/components/cms-page-shell.tsx | 9 ++- apps/web/i18n/messages/de/cms.json | 78 ++++++++++++------- apps/web/i18n/messages/de/finance.json | 6 +- apps/web/i18n/messages/en/cms.json | 56 ++++++++----- apps/web/i18n/messages/en/finance.json | 6 +- .../src/components/application-workflow.tsx | 3 +- 11 files changed, 111 insertions(+), 62 deletions(-) diff --git a/apps/web/app/[locale]/home/[account]/bookings/page.tsx b/apps/web/app/[locale]/home/[account]/bookings/page.tsx index 5acea6ee0..026d99a8c 100644 --- a/apps/web/app/[locale]/home/[account]/bookings/page.tsx +++ b/apps/web/app/[locale]/home/[account]/bookings/page.tsx @@ -126,7 +126,7 @@ export default async function BookingsPage({ icon={} /> } /> diff --git a/apps/web/app/[locale]/home/[account]/events/page.tsx b/apps/web/app/[locale]/home/[account]/events/page.tsx index d9b22abe2..bc680e686 100644 --- a/apps/web/app/[locale]/home/[account]/events/page.tsx +++ b/apps/web/app/[locale]/home/[account]/events/page.tsx @@ -138,7 +138,7 @@ export default async function EventsPage({ params, searchParams }: PageProps) { {t('capacity')} - {t('status')} + {t('statusLabel')} {t('registrations')} diff --git a/apps/web/app/[locale]/home/[account]/events/registrations/page.tsx b/apps/web/app/[locale]/home/[account]/events/registrations/page.tsx index e9c7d3968..55a419d83 100644 --- a/apps/web/app/[locale]/home/[account]/events/registrations/page.tsx +++ b/apps/web/app/[locale]/home/[account]/events/registrations/page.tsx @@ -116,7 +116,7 @@ export default async function EventRegistrationsPage({ params }: PageProps) { {t('eventDate')} - {t('status')} + {t('statusLabel')} {t('capacity')} diff --git a/apps/web/app/[locale]/home/[account]/finance/page.tsx b/apps/web/app/[locale]/home/[account]/finance/page.tsx index 3f2a186e8..65bc92d14 100644 --- a/apps/web/app/[locale]/home/[account]/finance/page.tsx +++ b/apps/web/app/[locale]/home/[account]/finance/page.tsx @@ -144,13 +144,13 @@ export default async function FinancePage({ params, searchParams }: PageProps) { {/* Toolbar */} ; children: ReactNode; } @@ -20,6 +22,7 @@ export function CmsPageShell({ account, title, description, + breadcrumbValues, children, }: CmsPageShellProps) { return ( @@ -28,7 +31,11 @@ export function CmsPageShell({ account={account} title={title} description={ - description !== undefined ? description : + description !== undefined ? ( + description + ) : ( + + ) } /> diff --git a/apps/web/i18n/messages/de/cms.json b/apps/web/i18n/messages/de/cms.json index 732b48f91..41acb62b7 100644 --- a/apps/web/i18n/messages/de/cms.json +++ b/apps/web/i18n/messages/de/cms.json @@ -304,34 +304,54 @@ "paginationNext": "Weiter →" }, "permissions": { - "modules.read": "Module lesen", - "modules.write": "Module bearbeiten", - "modules.delete": "Module löschen", - "modules.insert": "Datensätze erstellen", - "modules.lock": "Datensätze sperren", - "modules.import": "Daten importieren", - "modules.export": "Daten exportieren", - "modules.print": "Drucken", - "modules.manage": "Module verwalten", - "members.read": "Mitglieder lesen", - "members.write": "Mitglieder bearbeiten", - "courses.read": "Kurse lesen", - "courses.write": "Kurse bearbeiten", - "bookings.read": "Buchungen lesen", - "bookings.write": "Buchungen bearbeiten", - "finance.read": "Finanzen lesen", - "finance.write": "Finanzen bearbeiten", - "finance.sepa": "SEPA-Einzüge ausführen", - "documents.generate": "Dokumente generieren", - "newsletter.send": "Newsletter versenden", - "fischerei.read": "Fischerei lesen", - "fischerei.write": "Fischerei bearbeiten", - "meetings.read": "Sitzungsprotokolle lesen", - "meetings.write": "Sitzungsprotokolle bearbeiten", - "meetings.delete": "Sitzungsprotokolle löschen", - "verband.read": "Verbandsverwaltung lesen", - "verband.write": "Verbandsverwaltung bearbeiten", - "verband.delete": "Verbandsverwaltung löschen" + "modules": { + "read": "Module lesen", + "write": "Module bearbeiten", + "delete": "Module löschen", + "insert": "Datensätze erstellen", + "lock": "Datensätze sperren", + "import": "Daten importieren", + "export": "Daten exportieren", + "print": "Drucken", + "manage": "Module verwalten" + }, + "members": { + "read": "Mitglieder lesen", + "write": "Mitglieder bearbeiten" + }, + "courses": { + "read": "Kurse lesen", + "write": "Kurse bearbeiten" + }, + "bookings": { + "read": "Buchungen lesen", + "write": "Buchungen bearbeiten" + }, + "finance": { + "read": "Finanzen lesen", + "write": "Finanzen bearbeiten", + "sepa": "SEPA-Einzüge ausführen" + }, + "documents": { + "generate": "Dokumente generieren" + }, + "newsletter": { + "send": "Newsletter versenden" + }, + "fischerei": { + "read": "Fischerei lesen", + "write": "Fischerei bearbeiten" + }, + "meetings": { + "read": "Sitzungsprotokolle lesen", + "write": "Sitzungsprotokolle bearbeiten", + "delete": "Sitzungsprotokolle löschen" + }, + "verband": { + "read": "Verbandsverwaltung lesen", + "write": "Verbandsverwaltung bearbeiten", + "delete": "Verbandsverwaltung löschen" + } }, "status": { "active": "Aktiv", @@ -812,4 +832,4 @@ "formatExcel": "Excel" } } -} +} \ No newline at end of file diff --git a/apps/web/i18n/messages/de/finance.json b/apps/web/i18n/messages/de/finance.json index 02e8003b0..914bbf19a 100644 --- a/apps/web/i18n/messages/de/finance.json +++ b/apps/web/i18n/messages/de/finance.json @@ -146,7 +146,9 @@ "next": "Weiter", "type": "Typ", "date": "Datum", - "description": "Beschreibung" + "description": "Beschreibung", + "searchPlaceholder": "Rechnung suchen...", + "all": "Alle" }, "status": { "draft": "Entwurf", @@ -160,4 +162,4 @@ "completed": "Abgeschlossen", "failed": "Fehlgeschlagen" } -} +} \ No newline at end of file diff --git a/apps/web/i18n/messages/en/cms.json b/apps/web/i18n/messages/en/cms.json index 027c53567..b45a2c202 100644 --- a/apps/web/i18n/messages/en/cms.json +++ b/apps/web/i18n/messages/en/cms.json @@ -295,26 +295,40 @@ "paginationNext": "Next →" }, "permissions": { - "modules.read": "Read Modules", - "modules.write": "Edit Modules", - "modules.delete": "Delete Modules", - "modules.insert": "Create Records", - "modules.lock": "Lock Records", - "modules.import": "Import Data", - "modules.export": "Export Data", - "modules.print": "Print", - "modules.manage": "Manage Modules", - "members.read": "Read Members", - "members.write": "Edit Members", - "courses.read": "Read Courses", - "courses.write": "Edit Courses", - "bookings.read": "Read Bookings", - "bookings.write": "Edit Bookings", - "finance.read": "Read Finance", - "finance.write": "Edit Finance", - "finance.sepa": "Execute SEPA Collections", - "documents.generate": "Generate Documents", - "newsletter.send": "Send Newsletter", + "modules": { + "read": "Read Modules", + "write": "Edit Modules", + "delete": "Delete Modules", + "insert": "Create Records", + "lock": "Lock Records", + "import": "Import Data", + "export": "Export Data", + "print": "Print", + "manage": "Manage Modules" + }, + "members": { + "read": "Read Members", + "write": "Edit Members" + }, + "courses": { + "read": "Read Courses", + "write": "Edit Courses" + }, + "bookings": { + "read": "Read Bookings", + "write": "Edit Bookings" + }, + "finance": { + "read": "Read Finance", + "write": "Edit Finance", + "sepa": "Execute SEPA Collections" + }, + "documents": { + "generate": "Generate Documents" + }, + "newsletter": { + "send": "Send Newsletter" + }, "verband": { "delete": "Delete Association Data" } @@ -338,4 +352,4 @@ } } } -} +} \ No newline at end of file diff --git a/apps/web/i18n/messages/en/finance.json b/apps/web/i18n/messages/en/finance.json index 88593b0d6..669a5dded 100644 --- a/apps/web/i18n/messages/en/finance.json +++ b/apps/web/i18n/messages/en/finance.json @@ -146,7 +146,9 @@ "next": "Next", "type": "Type", "date": "Date", - "description": "Description" + "description": "Description", + "searchPlaceholder": "Search invoices...", + "all": "All" }, "status": { "draft": "Draft", @@ -160,4 +162,4 @@ "completed": "Completed", "failed": "Failed" } -} +} \ No newline at end of file diff --git a/packages/features/member-management/src/components/application-workflow.tsx b/packages/features/member-management/src/components/application-workflow.tsx index 3a599be5a..40e47cf7d 100644 --- a/packages/features/member-management/src/components/application-workflow.tsx +++ b/packages/features/member-management/src/components/application-workflow.tsx @@ -95,7 +95,8 @@ export function ApplicationWorkflow({

Aufnahmeanträge

- {applications.length} Antrag{applications.length !== 1 ? 'e' : ''} + {applications.length}{' '} + {applications.length === 1 ? 'Antrag' : 'Anträge'}