diff --git a/apps/hub/app/(app)/events/_components/modalBtn.tsx b/apps/hub/app/(app)/events/_components/modalBtn.tsx index e9831129..f4104792 100644 --- a/apps/hub/app/(app)/events/_components/modalBtn.tsx +++ b/apps/hub/app/(app)/events/_components/modalBtn.tsx @@ -1,18 +1,20 @@ "use client"; -import { use, useEffect } from "react"; -import { CheckCircledIcon, CalendarIcon, EnterIcon } from "@radix-ui/react-icons"; +import { useEffect } from "react"; +import { CheckCircledIcon, EnterIcon, DrawingPinFilledIcon } from "@radix-ui/react-icons"; import { Event, EventAppointment, Participant, User } from "@repo/db"; import { cn } from "@repo/shared-components"; import { inscribeToMoodleCourse, upsertParticipant } from "../actions"; -import { Check, Clock10Icon, EyeIcon, TriangleAlert } from "lucide-react"; +import { Check, Clock10Icon, ExternalLink, EyeIcon, TriangleAlert } from "lucide-react"; import { useForm } from "react-hook-form"; import { ParticipantOptionalDefaults, ParticipantOptionalDefaultsSchema } 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"; import { handleParticipantEnrolled } from "../../../../helper/events"; import { eventCompleted } from "@repo/shared-components"; +import MDEditor from "@uiw/react-md-editor"; +import { DayPicker } from "react-day-picker"; +import toast from "react-hot-toast"; interface ModalBtnProps { title: string; @@ -57,13 +59,11 @@ const ModalBtn = ({ const openModal = () => { const modal = document.getElementById(modalId) as HTMLDialogElement; - document.body.classList.add("modal-open"); modal?.showModal(); }; const closeModal = () => { const modal = document.getElementById(modalId) as HTMLDialogElement; - document.body.classList.remove("modal-open"); modal?.close(); }; const selectAppointmentForm = useForm({ @@ -126,132 +126,187 @@ const ModalBtn = ({ )} -
-

{title}

- {event.hasPresenceEvents && ( -
- {canSelectDate && ( -
- - {!!dates.length && ( - ({ + label: `${new Date(date.appointmentDate).toLocaleString("de-DE", { + year: "numeric", + month: "2-digit", + day: "2-digit", + hour: "2-digit", + minute: "2-digit", + })} - (${(date as any).Participants.length}/${event.maxParticipants})`, + value: date.id, + }))} + name="eventAppointmentId" + label={""} + placeholder="Wähle einen Termin" + className="min-w-[250px]" + /> + + )} + {!dates.length && ( +

Aktuell sind keine Termine verfügbar

+ )} +
+ )} + {!canSelectDate && participant?.attended && ( +

+ + Du hast an dem Presenztermin teilgenommen

)} - {selectedAppointment && !participant?.appointmentCancelled && ( - <> -
-

Dein Ausgewähler Termin

- -

{new Date(selectedAppointment.appointmentDate).toLocaleString()}

- + + Dieser Termin ist ausgebucht, wahrscheinlich wirst du nicht teilnehmen können. + (Listenplatz: {ownPlaceInParticipantList} , max. {event.maxParticipants}) +

+ )} + {selectedAppointment && !participant?.appointmentCancelled && ( +
+ Dein ausgewählter Termin (Deutsche Zeit) +
+ +
+ +
+
+ Bitte erscheine pünktlich im Discord.
+ )} +
+ )} + {event.finisherMoodleCourseId && ( +
+ +
+ )} +
-

- Bitte finde dich an diesem Termin in unserem Discord ein. -

- +
+
+

+ Teilnahmevoraussetzungen: + {!event.requiredBadges.length && "Keine"} +

+
+
+ {!!canSelectDate && ( + + )} + {selectedAppointment && !participant?.appointmentCancelled && ( + )}
- )} - {event.finisherMoodleCourseId && ( - - )} -
- - {!!canSelectDate && ( - - )}
-

+
); };