import { Box, VStack, HStack, Text, Badge, Icon, Divider, } from "@chakra-ui/react"; import { FaCalendarAlt, FaUsers, FaClock, FaInfoCircle } from "react-icons/fa"; import { Meeting } from "../api"; interface MeetingInfoProps { meeting: Meeting; isOwner: boolean; } export default function MeetingInfo({ meeting, isOwner }: MeetingInfoProps) { const formatDuration = (start: string | Date, end: string | Date) => { const startDate = new Date(start); const endDate = new Date(end); const now = new Date(); // If meeting hasn't started yet if (startDate > now) { return `Scheduled for ${startDate.toLocaleTimeString()}`; } // Calculate duration const durationMs = now.getTime() - startDate.getTime(); const hours = Math.floor(durationMs / (1000 * 60 * 60)); const minutes = Math.floor((durationMs % (1000 * 60 * 60)) / (1000 * 60)); if (hours > 0) { return `${hours}h ${minutes}m`; } return `${minutes} minutes`; }; const isCalendarMeeting = !!meeting.calendar_event_id; const metadata = meeting.calendar_metadata; return ( {/* Meeting Title */} {metadata?.title || (isCalendarMeeting ? "Calendar Meeting" : "Unscheduled Meeting")} {/* Meeting Status */} {meeting.is_active && ( Active )} {isCalendarMeeting && ( Calendar )} {meeting.is_locked && ( Locked )} {/* Meeting Details */} {/* Participants */} {meeting.num_clients}{" "} {meeting.num_clients === 1 ? "participant" : "participants"} {/* Duration */} Duration: {formatDuration(meeting.start_date, meeting.end_date)} {/* Calendar Description (Owner only) */} {isOwner && metadata?.description && ( <> Description {metadata.description} )} {/* Attendees (Owner only) */} {isOwner && metadata?.attendees && metadata.attendees.length > 0 && ( <> Invited Attendees ({metadata.attendees.length}) {metadata.attendees .slice(0, 5) .map((attendee: any, idx: number) => ( {attendee.status?.charAt(0) || "?"} {attendee.name || attendee.email} ))} {metadata.attendees.length > 5 && ( +{metadata.attendees.length - 5} more )} )} {/* Recording Info */} {meeting.recording_type !== "none" && ( <> Recording {meeting.recording_type === "cloud" ? "Cloud" : "Local"} {meeting.recording_trigger !== "none" && ` (${meeting.recording_trigger})`} )} {/* Meeting Times */} Start: {new Date(meeting.start_date).toLocaleString()} End: {new Date(meeting.end_date).toLocaleString()} ); }