View no shows in booking panel

This commit is contained in:
Jose Selesan
2026-05-06 17:10:23 -03:00
parent 7be776f189
commit 1059d767d5
2 changed files with 19 additions and 6 deletions

View File

@@ -112,7 +112,9 @@ function makeTimelineHours(range: BookingTimeRange) {
}
function isActiveBooking(booking: AdminBooking) {
return booking.status === 'CONFIRMED' || booking.status === 'COMPLETED';
return (
booking.status === 'CONFIRMED' || booking.status === 'COMPLETED' || booking.status === 'NOSHOW'
);
}
function getCourtBookings(court: Court, bookings: AdminBooking[], selectedDate: string) {

View File

@@ -1,6 +1,6 @@
import { Button } from '@/components/ui/button';
import { cn } from '@/lib/utils';
import { ChevronLeft, ChevronRight, Dumbbell, Plus, Users } from 'lucide-react';
import { ChevronLeft, ChevronRight, Dumbbell, Plus, UserX, Users } from 'lucide-react';
import { useBooking } from '../booking-provider';
import type { BookingCourtSchedule, BookingTimelineSegment } from '../booking.types';
import { timeToMinutes } from '../lib/booking-time';
@@ -227,7 +227,9 @@ function BookingSlotBlock({ segment, schedule, rangeStart, totalMinutes }: Booki
segment.status === 'maintenance' &&
'border-maintenance/80 bg-maintenance/75 text-maintenance-foreground',
segment.booking?.status === 'COMPLETED' &&
'border-reserved/70 bg-reserved/25 dark:text-reserved-foreground text-gray-600 line-through'
'border-reserved/70 bg-reserved/25 dark:text-reserved-foreground text-gray-600 line-through',
segment.booking?.status === 'NOSHOW' &&
'border-amber-500/60 bg-amber-500/50 text-amber-950 dark:text-amber-200'
)}
style={{
left: `calc(${left}% + 4px)`,
@@ -240,6 +242,8 @@ function BookingSlotBlock({ segment, schedule, rangeStart, totalMinutes }: Booki
startTime: segment.startTime,
sportId: schedule.court.sportId,
});
} else if (segment.booking?.status === 'NOSHOW') {
return;
} else {
if (event.shiftKey && segment.booking?.status === 'CONFIRMED') {
updateBookingStatus(segment.booking.id, 'COMPLETED');
@@ -261,9 +265,16 @@ function BookingSlotBlock({ segment, schedule, rangeStart, totalMinutes }: Booki
</span>
) : (
<>
<span className="truncate text-sm font-medium">
{segment.startTime} - {segment.endTime}
</span>
<div className="flex items-center justify-between">
<span className="truncate text-sm font-medium">
{segment.startTime} - {segment.endTime}
</span>
{segment.booking?.status === 'NOSHOW' && (
<span title="No Show - El cliente no se presentó">
<UserX className="size-3 shrink-0" />
</span>
)}
</div>
<span className="mt-1 flex items-center gap-1 truncate opacity-90">
<Users className="size-3" />
{segment.booking?.customerName ?? 'Mantenimiento'}