"use client"; import { CalendarClock } from "lucide-react"; import type { ReactNode } from "react"; import { useTranslation } from "react-i18next"; import { Badge } from "@/components/ui/badge"; import { Dialog, DialogDescription, DialogHeader, DialogPanel, DialogPopup, DialogTitle, } from "@/components/ui/dialog"; import type { MessageAttachment } from "@/lib/messages"; // The appointment data carried inside a shared-appointment message. It's a // point-in-time snapshot, so it survives the appointment later being edited or // deleted. type AppointmentSnapshot = Extract< MessageAttachment, { kind: "appointment" } >["appointment"]; function Row({ label, value }: { label: string; value: ReactNode }) { if (!value) return null; return (
{label}
{value}
); } // A read-only view of a shared appointment, opened by clicking the card in the // thread. Works the same for the sender and the recipient. export function AppointmentDetailDialog({ appointment, open, onOpenChange, }: { appointment: AppointmentSnapshot; open: boolean; onOpenChange: (open: boolean) => void; }) { const { t } = useTranslation(); const a = appointment; const statusLabel = a.status ? t(`appointments.status.${a.status}`, { defaultValue: a.status }) : null; return ( {t("messages.attach.apptDetailTitle")} {a.name}
{statusLabel} : null } />
); }