From abc4c063c35c2dd6c3d1425b49711379bf191d40 Mon Sep 17 00:00:00 2001 From: Micha Date: Wed, 25 Jun 2025 13:10:52 +0200 Subject: [PATCH] feat(events): add event list lage --- src/app/events/page.tsx | 61 ++++++++++++++++ src/components/custom-ui/event-list-entry.tsx | 72 +++++++++++++++++++ 2 files changed, 133 insertions(+) create mode 100644 src/app/events/page.tsx create mode 100644 src/components/custom-ui/event-list-entry.tsx diff --git a/src/app/events/page.tsx b/src/app/events/page.tsx new file mode 100644 index 0000000..75c6720 --- /dev/null +++ b/src/app/events/page.tsx @@ -0,0 +1,61 @@ +'use client'; + +import { RedirectButton } from '@/components/buttons/redirect-button'; +import EventListEntry from '@/components/custom-ui/event-list-entry'; +import { ThemePicker } from '@/components/misc/theme-picker'; +import { Label } from '@/components/ui/label'; +import { useGetApiEvent } from '@/generated/api/event/event'; + +export default function Events() { + const { data: eventsData, isLoading, error } = useGetApiEvent(); + + if (isLoading) return
Loading...
; + if (error) + return ( +
Error loading events
+ ); + + const events = eventsData?.data?.events || []; + + return ( +
+
+ +
+ + {/* Heading */} +

+ My Events +

+ + {/* Scrollable event list */} +
+
+ {events.length > 0 ? ( + events.map((event) => ( + + )) + ) : ( +
+ + +
+ )} +
+
+
+ ); +} diff --git a/src/components/custom-ui/event-list-entry.tsx b/src/components/custom-ui/event-list-entry.tsx new file mode 100644 index 0000000..61beb73 --- /dev/null +++ b/src/components/custom-ui/event-list-entry.tsx @@ -0,0 +1,72 @@ +import { Card } from '@/components/ui/card'; +import Logo from '@/components/misc/logo'; +import { Label } from '@/components/ui/label'; +import Link from 'next/link'; + +type EventListEntryProps = { + title: string; + id: string; + start_time: string; + end_time: string; + location: string | null | undefined; +}; + +export default function EventListEntry({ + title, + id, + start_time, + end_time, + location, +}: EventListEntryProps) { + const formatDate = (isoString?: string) => { + if (!isoString) return '-'; + return new Date(isoString).toLocaleDateString(); + }; + const formatTime = (isoString?: string) => { + if (!isoString) return '-'; + return new Date(isoString).toLocaleTimeString([], { + hour: '2-digit', + minute: '2-digit', + }); + }; + return ( + + +
+
+ +
+
+

{title}

+
+
+
+ + +
+
+ + +
+ {location && ( +
+ + +
+ )} +
+
+
+ + ); +}