diff --git a/src/pages/ResourceCalendar.tsx b/src/pages/ResourceCalendar.tsx index cc24227..771c97a 100644 --- a/src/pages/ResourceCalendar.tsx +++ b/src/pages/ResourceCalendar.tsx @@ -11,6 +11,18 @@ const ResourceCalendar: React.FC = () => { const [currentWeek, setCurrentWeek] = useState(new Date()); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); + + // Mobile detection + const [isMobile, setIsMobile] = useState(window.innerWidth < 768); + + useEffect(() => { + const handleResize = () => { + setIsMobile(window.innerWidth < 768); + }; + + window.addEventListener('resize', handleResize); + return () => window.removeEventListener('resize', handleResize); + }, []); useEffect(() => { if (!id) return; @@ -20,17 +32,13 @@ const ResourceCalendar: React.FC = () => { const loadData = async () => { try { setLoading(true); - console.log('Loading calendar for resource ID:', id); const [resourceData, reservationsData] = await Promise.all([ api.getResource(id), api.getReservations(id) ]); - console.log('Resource data:', resourceData); - console.log('Reservations data:', reservationsData); setResource(resourceData); setReservations(reservationsData); } catch (err) { - console.log('Error loading calendar:', err); setError(err instanceof Error ? err.message : 'Failed to load data'); } finally { setLoading(false); @@ -43,8 +51,6 @@ const ResourceCalendar: React.FC = () => { const weekStart = startOfWeek(currentWeek, { weekStartsOn: 1 }); const weekDays = Array.from({ length: 7 }, (_, i) => addDays(weekStart, i)); - - // Generate time slots from 8 AM to 8 PM const timeSlots = Array.from({ length: 13 }, (_, i) => { const hour = i + 8; // Start at 8 AM @@ -69,7 +75,8 @@ const ResourceCalendar: React.FC = () => { }; const navigateWeek = (direction: 'prev' | 'next') => { - setCurrentWeek(prev => addDays(prev, direction === 'next' ? 7 : -7)); + const days = direction === 'next' ? 7 : -7; + setCurrentWeek(addDays(currentWeek, days)); }; if (loading) { @@ -100,105 +107,132 @@ const ResourceCalendar: React.FC = () => { } return ( -
-
-
-

{resource.name} - Calendar

- {resource.description && ( -

{resource.description}

- )} -
+
+ {/* Header - Mobile Optimized */} +
+

{resource.name}

+ {resource.description && ( +

{resource.description}

+ )} Book This Resource
- {/* Week Navigation */} -
- -

+ {/* Week Navigation - Mobile Optimized */} +
+
+ + +
+

{format(weekStart, 'MMM d')} - {format(addDays(weekStart, 6), 'MMM d, yyyy')}

-
- {/* Calendar Grid */} + {/* Calendar Grid - Mobile Responsive */}
- {/* Header Row */} -
-
+ {/* Header Row - Mobile Responsive */} +
+
Time
{weekDays.map((day, index) => (
-
{format(day, 'EEEE')}
-
- {format(day, 'MMM d')} +
{format(day, 'EEE')}
+
+ {format(day, 'M/d')}
))}
- - {/* Time Slots */} + + {/* Time Slots - Mobile Responsive */} {timeSlots.map((timeSlot, timeIndex) => ( -
+
{/* Time Column */}
{format(timeSlot, 'h a')}
@@ -215,27 +249,46 @@ const ResourceCalendar: React.FC = () => { borderRight: dayIndex < 6 ? '1px solid #ddd' : 'none', borderBottom: '1px solid #ddd', backgroundColor: reservation - ? reservation.status === 'confirmed' ? '#d4edda' - : reservation.status === 'cancelled' ? '#f8d7da' - : '#fff3cd' + ? '#d4edda' : isToday(day) ? '#f8f9fa' : 'white', - fontSize: '0.75rem', - minHeight: '40px', + fontSize: '0.7rem', + minHeight: '35px', display: 'flex', alignItems: 'center', - justifyContent: 'center' + justifyContent: 'center', + position: 'relative' }} > {reservation && (
-
{reservation.title}
-
- {format(new Date(reservation.startDate), 'h:mm')} - {format(new Date(reservation.endDate), 'h:mm')} +
+ {reservation.title} +
+
+ {format(new Date(reservation.startDate), 'h:mm')}
)}