'use client'; import { useLocale, useTranslations } from 'next-intl'; import { CalendarDays } from 'lucide-react'; import { Card } from '@/components/ui/shared/Card'; import { ScheduleDayPicker } from '@/components/ui/shared/ScheduleDayPicker'; import { startOfLocalDay } from '@/components/appointments/appointmentTime'; import { treatmentTypeBannerStyle, treatmentTypeLabelFromCatalog, } from '@/components/shared/treatmentTypeDisplay'; import type { TreatmentCatalogEntry } from '@/types/treatment-catalog'; import type { TreatmentAppointment } from '@/types/treatment'; import { APP_DATE, formatAppTimeRange } from '@/lib/i18n/format'; interface AppointmentsStripProps { stripHidden: boolean; onToggleStripHidden: () => void; selectedDay: Date; onSelectDay: (day: Date) => void; appointments: TreatmentAppointment[]; selectedAppointmentId: string | null; onSelectAppointment: (id: string) => void; treatmentCatalog: TreatmentCatalogEntry[]; loading?: boolean; } export function AppointmentsStrip({ stripHidden, onToggleStripHidden, selectedDay, onSelectDay, appointments, selectedAppointmentId, onSelectAppointment, treatmentCatalog, loading = false, }: AppointmentsStripProps) { const locale = useLocale(); const t = useTranslations('treatment'); if (stripHidden) { return (

{t('hiddenMessage')}

); } return (

{t('appointmentsTitle')}

onSelectDay(startOfLocalDay(d))} /> {loading && (

{t('loadingAppointments')}

)}
{appointments.length === 0 && (

{t('emptyDay')}

)} {appointments.map((a) => { const sel = a.id === selectedAppointmentId; const timeLabel = formatAppTimeRange(a.startAt, a.endAt, locale); const purposeLabel = treatmentTypeLabelFromCatalog(a.purpose, treatmentCatalog); const purposeIndex = treatmentCatalog.findIndex((e) => e.code === a.purpose); return ( onSelectAppointment(a.id)} padding="none" style={treatmentTypeBannerStyle(a.purpose, purposeIndex < 0 ? 0 : purposeIndex)} className={` text-start rounded-[var(--radius-sm)] px-3 py-2 w-full sm:w-auto sm:min-w-[200px] sm:max-w-[280px] transition-shadow min-h-[52px] focus:outline-none focus-visible:ring-2 focus-visible:ring-primary/45 ${sel ? 'ring-2 ring-primary ring-offset-2 ring-offset-background-secondary shadow-[inset_0_1px_0_rgba(255,255,255,0.06)]' : 'hover:brightness-110'} `} >

{timeLabel}

{a.patientFirstName} {a.patientLastName}

{purposeLabel}

); })}
); }