"use client" import { Calendar, Clock } from "lucide-react" import { Card, CardContent, CardHeader, CardTitle } from "@/shared/components/ui/card" import { Badge } from "@/shared/components/ui/badge" import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/shared/components/ui/tabs" import type { DashboardData } from "./use-dashboard-data" type Props = { data: DashboardData } const statusBadge: Record = { confirmed: "bg-emerald-100 text-emerald-700 dark:bg-emerald-900 dark:text-emerald-300", pending: "bg-amber-100 text-amber-700 dark:bg-amber-900 dark:text-amber-300", cancelled: "bg-red-100 text-red-700 dark:bg-red-900 dark:text-red-300", } type AppointmentDetail = NonNullable["today"]>["details"]>[number] function AppointmentRow({ appt }: { appt: AppointmentDetail }) { return (

{appt.title}

{appt.notes && (

{appt.notes}

)}
{appt.from_time?.slice(0, 5)} - {appt.to_time?.slice(0, 5)}
{appt.status}
) } function EmptyState() { return (

No appointments

) } export function UpcomingAppointmentsCard({ data }: Props) { const upcoming = data.upcoming_appointments const tabs = [ { key: "today", label: "Today", data: upcoming?.today }, { key: "tomorrow", label: "Tomorrow", data: upcoming?.tomorrow }, { key: "this_week", label: "This Week", data: upcoming?.this_week }, { key: "next_week", label: "Next Week", data: upcoming?.next_week }, ] return ( Upcoming Appointments {tabs.map((tab) => ( {tab.label} {tab.data?.count ?? 0} ))} {tabs.map((tab) => ( {(tab.data?.details as AppointmentDetail[] | undefined)?.length ? ( (tab.data?.details as AppointmentDetail[]).map((appt) => ( )) ) : ( )} ))} ) }