From daf3238beebb4c42602a8dc5e562c501e629fbca Mon Sep 17 00:00:00 2001 From: PxlLoewe <72106766+PxlLoewe@users.noreply.github.com> Date: Sat, 1 Mar 2025 00:31:03 +0100 Subject: [PATCH] completed Implementation of User Event page --- .../hub/app/(app)/events/_components/item.tsx | 67 ++-------- .../app/(app)/events/_components/modalBtn.tsx | 115 ++++++++++++++---- apps/hub/app/(app)/events/actions.ts | 22 ++-- apps/hub/app/(app)/events/page.tsx | 28 ++--- apps/hub/app/_components/ui/Select.tsx | 25 ++-- packages/database/prisma/schema/event.prisma | 2 +- 6 files changed, 146 insertions(+), 113 deletions(-) diff --git a/apps/hub/app/(app)/events/_components/item.tsx b/apps/hub/app/(app)/events/_components/item.tsx index 7c498355..37ea3d57 100644 --- a/apps/hub/app/(app)/events/_components/item.tsx +++ b/apps/hub/app/(app)/events/_components/item.tsx @@ -22,9 +22,16 @@ export const KursItem = ({

{event.name}

- - Zusatzqualifikation - + {event.type === "COURSE" && ( + + Zusatzqualifikation + + )} + {event.type === "OBLIGATED_COURSE" && ( + + Verpflichtend + + )}
@@ -65,59 +72,7 @@ export const KursItem = ({ event={event} title={event.name} dates={event.appointments} - modalId={`${event.name}_modal.${event.id}`} - /> -
-
-
- - ); -}; - -export const ObligatedEvent = ({ - event, - selectedAppointments, - user, -}: { - event: Event; - user: User; - selectedAppointments: EventAppointment[]; -}) => { - { - /* STATISCH, DA FÜR ALLE NEUEN MITGLIEDER MANDATORY, WIRD AUSGEBLENDET WENN ABSOLVIERT */ - } - return ( -
-
-
-

Einsteigerkurs für Piloten

-
- - Verpflichtend - -
-
-
-

- In diesem Kurs lernen Piloten die Grundlagen der Luftrettung, - Einsatzverfahren, den Umgang mit dem BOS-Funk und einige - medizinische Basics. Der Kurs bietet eine ideale Vorbereitung - für alle Standard Operations bei Virtual Air Rescue. -

-
-
Badge
-
-
-

- Teilnahmevoraussetzungen: Keine -

-
diff --git a/apps/hub/app/(app)/events/_components/modalBtn.tsx b/apps/hub/app/(app)/events/_components/modalBtn.tsx index cd31abe0..8962a574 100644 --- a/apps/hub/app/(app)/events/_components/modalBtn.tsx +++ b/apps/hub/app/(app)/events/_components/modalBtn.tsx @@ -7,9 +7,21 @@ import { } from "@radix-ui/react-icons"; import { Event, EventAppointment, Participant, User } from "@repo/db"; import { cn } from "../../../../helper/cn"; -import { addParticipant, inscribeToMoodleCourse } from "../actions"; +import { inscribeToMoodleCourse, upsertParticipant } from "../actions"; import { useSession } from "next-auth/react"; -import { Cross } from "lucide-react"; +import { Clock10Icon, Cross } from "lucide-react"; +import { useForm } from "react-hook-form"; +import { + EventAppointmentOptionalDefaults, + EventAppointmentSchema, + ParticipantOptionalDefaults, + ParticipantOptionalDefaultsSchema, + ParticipantSchema, +} from "@repo/db/zod"; +import { zodResolver } from "@hookform/resolvers/zod"; +import { Select } from "../../../_components/ui/Select"; +import toast from "react-hot-toast"; +import { useRouter } from "next/navigation"; interface ModalBtnProps { title: string; @@ -45,6 +57,7 @@ const ModalBtn = ({ modal?.removeEventListener("close", handleClose); }; }, [modalId]); + const router = useRouter(); const canSelectDate = event.hasPresenceEvents && @@ -62,7 +75,15 @@ const ModalBtn = ({ document.body.classList.remove("modal-open"); modal?.close(); }; - + const selectAppointmentForm = useForm({ + resolver: zodResolver(ParticipantOptionalDefaultsSchema), + defaultValues: { + eventId: event.id, + userId: user.id, + ...participant, + }, + }); + const selectedAppointment = selectedAppointments[0]; return ( <>