From 171abb31615484d77cf95a99cb5634afa0160adc Mon Sep 17 00:00:00 2001 From: Paul Nothaft Date: Fri, 6 Feb 2026 18:38:12 +0100 Subject: [PATCH] fix: improve password validation errors and event list UX (#170, #171) - Show specific failing password requirement instead of generic error when password validation fails on AcceptInvitePage (#170) - Add inline Edit and View Gallery buttons to events table (#171) - Make event table rows clickable to navigate to details (#171) - Keep context menu for less common actions (Archive, Delete) - Add responsive design: inline buttons hidden on mobile --- frontend/src/pages/admin/EventsListPage.tsx | 278 ++++++++++-------- .../src/pages/public/AcceptInvitePage.tsx | 7 +- 2 files changed, 158 insertions(+), 127 deletions(-) diff --git a/frontend/src/pages/admin/EventsListPage.tsx b/frontend/src/pages/admin/EventsListPage.tsx index d48a072b..61cf4ce3 100644 --- a/frontend/src/pages/admin/EventsListPage.tsx +++ b/frontend/src/pages/admin/EventsListPage.tsx @@ -190,14 +190,14 @@ export const EventsListPage: React.FC = () => { }; const getEventStatus = (event: Event) => { - if (event.is_archived) return { label: t('events.archived'), color: 'text-neutral-500 bg-neutral-100' }; - if (!event.is_active) return { label: t('events.inactive'), color: 'text-red-600 bg-red-100' }; - + if (event.is_archived) return { label: t('events.archived'), color: 'text-neutral-500 dark:text-neutral-400 bg-neutral-100 dark:bg-neutral-700' }; + if (!event.is_active) return { label: t('events.inactive'), color: 'text-red-600 dark:text-red-400 bg-red-100 dark:bg-red-900/40' }; + const days = event.expires_at ? differenceInDays(parseISO(event.expires_at), new Date()) : 0; - if (days <= 0) return { label: t('events.expired'), color: 'text-red-600 bg-red-100' }; - if (days <= 7) return { label: t('events.daysLeft', { count: days }), color: 'text-orange-600 bg-orange-100' }; - - return { label: t('events.active'), color: 'text-green-600 bg-green-100' }; + if (days <= 0) return { label: t('events.expired'), color: 'text-red-600 dark:text-red-400 bg-red-100 dark:bg-red-900/40' }; + if (days <= 7) return { label: t('events.daysLeft', { count: days }), color: 'text-orange-600 dark:text-orange-400 bg-orange-100 dark:bg-orange-900/40' }; + + return { label: t('events.active'), color: 'text-green-600 dark:text-green-400 bg-green-100 dark:bg-green-900/40' }; }; if (isLoading) { @@ -205,8 +205,8 @@ export const EventsListPage: React.FC = () => {
-

{t('events.title')}

-

{t('events.subtitle')}

+

{t('events.title')}

+

{t('events.subtitle')}

@@ -231,8 +231,8 @@ export const EventsListPage: React.FC = () => { {/* Page Header */}
-

{t('events.title')}

-

{t('events.subtitle')}

+

{t('events.title')}

+

{t('events.subtitle')}