From 5556e88fbf189b0407266d5a37c0c384c1349603 Mon Sep 17 00:00:00 2001 From: iamkiddy Date: Thu, 27 Nov 2025 19:33:54 +0000 Subject: [PATCH] Refactor Booking and AppointmentDetail components to improve handling of preferred dates and time slots. Enhance type safety by ensuring preferred_dates and preferred_time_slots are validated as arrays. Update rendering logic to handle different data formats for better user experience and consistency. --- app/(admin)/admin/booking/[id]/page.tsx | 48 ++++++++++++++++--------- app/(admin)/admin/booking/page.tsx | 24 ++++++++----- app/(admin)/admin/dashboard/page.tsx | 10 +++--- hooks/useAppointments.ts | 11 ++++-- 4 files changed, 60 insertions(+), 33 deletions(-) diff --git a/app/(admin)/admin/booking/[id]/page.tsx b/app/(admin)/admin/booking/[id]/page.tsx index 47b134e..eda1ac4 100644 --- a/app/(admin)/admin/booking/[id]/page.tsx +++ b/app/(admin)/admin/booking/[id]/page.tsx @@ -368,7 +368,7 @@ export default function AppointmentDetailPage() { )} {/* Preferred Dates & Times */} - {(appointment.preferred_dates?.length > 0 || appointment.preferred_time_slots?.length > 0) && ( + {((appointment.preferred_dates && appointment.preferred_dates.length > 0) || (appointment.preferred_time_slots && appointment.preferred_time_slots.length > 0)) && (

@@ -376,37 +376,53 @@ export default function AppointmentDetailPage() {

- {appointment.preferred_dates && appointment.preferred_dates.length > 0 && ( + {appointment.preferred_dates && (

Preferred Dates

- {appointment.preferred_dates.map((date, idx) => ( + {Array.isArray(appointment.preferred_dates) ? ( + (appointment.preferred_dates as string[]).map((date, idx) => ( {formatShortDate(date)} - ))} + )) + ) : ( + + {appointment.preferred_dates_display || appointment.preferred_dates || 'N/A'} + + )}
)} - {appointment.preferred_time_slots && appointment.preferred_time_slots.length > 0 && ( + {appointment.preferred_time_slots && (

Preferred Time Slots

- {appointment.preferred_time_slots.map((slot, idx) => ( + {Array.isArray(appointment.preferred_time_slots) ? ( + (appointment.preferred_time_slots as string[]).map((slot, idx) => ( {slot} - ))} + )) + ) : ( + + {appointment.preferred_time_slots_display || appointment.preferred_time_slots || 'N/A'} + + )}
)} @@ -635,15 +651,15 @@ export default function AppointmentDetailPage() {
{appointment.can_join_meeting ? ( - - + + ) : (
); diff --git a/hooks/useAppointments.ts b/hooks/useAppointments.ts index da49cba..0ab8800 100644 --- a/hooks/useAppointments.ts +++ b/hooks/useAppointments.ts @@ -138,11 +138,16 @@ export function useAppointments(options?: { staleTime: 1 * 60 * 1000, // 1 minute }); - // Get user appointment stats query + // Get user appointment stats query - disabled because it requires email parameter + // Use getUserAppointmentStats(email) directly where email is available const userAppointmentStatsQuery = useQuery({ queryKey: ["appointments", "user", "stats"], - queryFn: () => getUserAppointmentStats(), - enabled: enableStats, + queryFn: async () => { + // This query is disabled - getUserAppointmentStats requires email parameter + // Use getUserAppointmentStats(email) directly in components where email is available + return {} as UserAppointmentStats; + }, + enabled: false, // Disabled - requires email parameter which hook doesn't have access to staleTime: 1 * 60 * 1000, // 1 minute });