diff --git a/src/app/events/[eventID]/page.tsx b/src/app/events/[eventID]/page.tsx index 4248d7a..fb0c5ae 100644 --- a/src/app/events/[eventID]/page.tsx +++ b/src/app/events/[eventID]/page.tsx @@ -1,7 +1,6 @@ 'use client'; import React from 'react'; -import { usePathname } from 'next/navigation'; import Logo from '@/components/misc/logo'; import { ThemePicker } from '@/components/misc/theme-picker'; import { Card, CardContent, CardHeader } from '@/components/ui/card'; @@ -12,12 +11,10 @@ import { RedirectButton } from '@/components/buttons/redirect-button'; import { useSession } from 'next-auth/react'; import ParticipantListEntry from '@/components/custom-ui/participant-list-entry'; -export default function ShowEvent() { +export default function ShowEvent({ params }: { params: { eventId: string } }) { const session = useSession(); - const pathname = usePathname(); - // Extract eventId from URL like /events/[eventId] - const eventId = pathname.split('/').pop() || ''; + const eventId = params.eventId; // Fetch event data const { data: eventData, isLoading, error } = useGetApiEventEventID(eventId); @@ -145,11 +142,7 @@ export default function ShowEvent() { {' '}
{event.participants?.map((user) => ( - + ))}
diff --git a/src/app/events/page.tsx b/src/app/events/page.tsx index 75c6720..b5c295d 100644 --- a/src/app/events/page.tsx +++ b/src/app/events/page.tsx @@ -35,11 +35,9 @@ export default function Events() { events.map((event) => ( )) ) : ( diff --git a/src/components/custom-ui/event-list-entry.tsx b/src/components/custom-ui/event-list-entry.tsx index 61beb73..197649b 100644 --- a/src/components/custom-ui/event-list-entry.tsx +++ b/src/components/custom-ui/event-list-entry.tsx @@ -2,14 +2,10 @@ import { Card } from '@/components/ui/card'; import Logo from '@/components/misc/logo'; import { Label } from '@/components/ui/label'; import Link from 'next/link'; +import zod from 'zod/v4'; +import { EventSchema } from '@/app/api/event/validation'; -type EventListEntryProps = { - title: string; - id: string; - start_time: string; - end_time: string; - location: string | null | undefined; -}; +type EventListEntryProps = zod.output; export default function EventListEntry({ title, diff --git a/src/components/custom-ui/participant-list-entry.tsx b/src/components/custom-ui/participant-list-entry.tsx index 292a28b..27827cf 100644 --- a/src/components/custom-ui/participant-list-entry.tsx +++ b/src/components/custom-ui/participant-list-entry.tsx @@ -3,26 +3,24 @@ import Image from 'next/image'; import { user_default_dark } from '@/assets/usericon/default/defaultusericon-export'; import { user_default_light } from '@/assets/usericon/default/defaultusericon-export'; import { useTheme } from 'next-themes'; +import zod from 'zod/v4'; +import { ParticipantSchema } from '@/app/api/event/[eventID]/participant/validation'; -type ParticipantListEntryProps = { - participant: string; - imageSrc?: string | null; -}; +type ParticipantListEntryProps = zod.output; export default function ParticipantListEntry({ - participant, - imageSrc, + user, }: ParticipantListEntryProps) { const { resolvedTheme } = useTheme(); const defaultImage = resolvedTheme === 'dark' ? user_default_dark : user_default_light; - const finalImageSrc = imageSrc ?? defaultImage; + const finalImageSrc = user.image ?? defaultImage; return (
Avatar - {participant} + {user.name}
); } diff --git a/src/components/forms/event-form.tsx b/src/components/forms/event-form.tsx index d89988a..22d83a1 100644 --- a/src/components/forms/event-form.tsx +++ b/src/components/forms/event-form.tsx @@ -19,10 +19,10 @@ import ParticipantListEntry from '../custom-ui/participant-list-entry'; import { useSearchParams } from 'next/navigation'; -interface User { - id: string; - name: string; -} +import zod from 'zod/v4'; +import { PublicUserSchema } from '@/app/api/user/validation'; + +type User = zod.output; interface EventFormProps { type: 'create' | 'edit'; @@ -305,7 +305,11 @@ const EventForm: React.FC = (props) => { />
{selectedParticipants.map((user) => ( - + ))}