"use client"; import { Suspense } from "react"; import dayjs from "@calcom/dayjs"; import { Dialog } from "@calcom/features/components/controlled-dialog"; import { useLocale } from "@calcom/lib/hooks/useLocale"; import type { RouterOutputs } from "@calcom/trpc/react"; import { trpc } from "@calcom/trpc/react"; import type { PartialReference } from "@calcom/types/EventManager"; import { DialogContent, DialogFooter, DialogHeader, DialogClose } from "@calcom/ui/components/dialog"; import { SkeletonText } from "@calcom/ui/components/skeleton"; type BookingItem = RouterOutputs["viewer"]["bookings"]["get"]["bookings"][number]; type Session = RouterOutputs["viewer"]["calVideo"]["getMeetingInformation"]["data"][number]; type Participant = Session["participants"][number]; interface IMeetingSessionDetailsDialog { booking?: BookingItem; isOpenDialog: boolean; setIsOpenDialog: React.Dispatch>; timeFormat: number | null; } const MeetingSessionDetailsSkeleton = () => { return (
{[...Array(2)].map((_, index) => (
{[...Array(4)].map((_, i) => (
))}
{[...Array(2)].map((_, i) => (
))}
))}
); }; const MeetingSessionDetailsList = ({ roomName }: { roomName: string }) => { const { t } = useLocale(); const { data: meetingInfo, isLoading } = trpc.viewer.calVideo.getMeetingInformation.useQuery( { roomName }, { suspense: true, } ); if (isLoading) { return ; } if (!meetingInfo || !meetingInfo.data || meetingInfo.data.length === 0) { return

{t("no_meeting_sessions_found")}

; } const formatDuration = (totalSeconds: number) => { if (!totalSeconds) { return t("ongoing"); } const minutes = Math.floor(totalSeconds / 60); const seconds = totalSeconds % 60; const parts = []; if (minutes > 0) { parts.push(`${minutes} ${t("minutes")}`); } if (seconds > 0) { parts.push(`${seconds} ${t("seconds")}`); } return parts.join(" "); }; return (
{meetingInfo.data.map((session: Session, index: number) => (

{t("meeting_session")} {index + 1}

{t("session_id")}: {session.id}

{t("start_time")}:

{session.start_time ? dayjs(session.start_time * 1000).format("MMM D, YYYY h:mm A") : t("not_available")}

{t("duration")}:

{session.duration ? formatDuration(session.duration) : t("ongoing")}

{t("max_participants")}:

{session.max_participants || t("unlimited")}

{t("status")}:

{session.ongoing ? t("ongoing") : t("ended")}

{session.participants && session.participants.length > 0 && (

{t("participants")}:

{session.participants.map((participant: Participant) => (
{participant.user_name || t("anonymous_user")} {participant.join_time ? dayjs(participant.join_time * 1000).format("h:mm A") : ""}

{t("user_id")}: {participant.user_id || t("not_available")}

{t("participant_id")}: {participant.participant_id}

{participant.duration && (

{t("session_duration")}: {formatDuration(participant.duration)}

)}
))}
)}
))}
); }; export const MeetingSessionDetailsDialog = (props: IMeetingSessionDetailsDialog) => { const { t, i18n } = useLocale(); const { isOpenDialog, setIsOpenDialog, booking, timeFormat } = props; const roomName = booking?.references?.find((reference: PartialReference) => reference.type === "daily_video")?.meetingId ?? undefined; const subtitle = `${booking?.title} - ${dayjs(booking?.startTime).format("ddd")} ${dayjs( booking?.startTime ).format("D")}, ${dayjs(booking?.startTime).format("MMM")}`; return ( {roomName ? ( }> ) : (

{t("no_meeting_sessions_found")}

)}
); };