Files
medreport_mrb2b/app/home/(user)/_components/booking/booking-calendar.tsx
2025-09-18 16:40:25 +03:00

41 lines
1.1 KiB
TypeScript

'use client';
import { isBefore, isSameDay } from 'date-fns';
import { uniq } from 'lodash';
import { Calendar } from '@kit/ui/shadcn/calendar';
import { Card } from '@kit/ui/shadcn/card';
import { cn } from '@kit/ui/utils';
import { useBooking } from './booking.provider';
export default function BookingCalendar() {
const { selectedDate, setSelectedDate, isLoadingTimeSlots, timeSlots } =
useBooking();
const availableDates = uniq(timeSlots?.map((timeSlot) => timeSlot.StartTime));
return (
<Card className="mb-4">
<Calendar
mode="single"
selected={selectedDate}
onSelect={setSelectedDate}
disabled={(date) => {
const today = new Date();
today.setHours(0, 0, 0, 0);
return (
isBefore(date, today) ||
!availableDates.some((dateWithBooking) =>
isSameDay(date, dateWithBooking),
)
);
}}
className={cn('rounded-md border', {
'pointer-events-none rounded-md border opacity-50':
isLoadingTimeSlots,
})}
/>
</Card>
);
}