import { useState, useEffect } from 'react'; import DaySection from './DaySection'; import axios from 'axios'; const API_URL = import.meta.env.VITE_API_URL || 'http://localhost:8000'; function TripTimeline({ trip, plannableItems, onScheduleSuccess }) { const [calendarSlots, setCalendarSlots] = useState([]); const [loading, setLoading] = useState(true); useEffect(() => { fetchCalendarSlots(); }, [trip.id]); const fetchCalendarSlots = async () => { try { const token = localStorage.getItem('token'); const response = await axios.get(`${API_URL}/api/trips/${trip.id}/calendar-slots`, { headers: { Authorization: `Bearer ${token}` } }); setCalendarSlots(response.data.data || []); } catch (error) { console.error('Error fetching calendar slots:', error); } finally { setLoading(false); } }; const handleScheduleItem = async (plannableItemId, startDatetime, endDatetime) => { try { const token = localStorage.getItem('token'); await axios.post( `${API_URL}/api/planned-items`, { plannable_item_id: plannableItemId, trip_id: trip.id, start_datetime: startDatetime, end_datetime: endDatetime, }, { headers: { Authorization: `Bearer ${token}` } } ); await fetchCalendarSlots(); if (onScheduleSuccess) { onScheduleSuccess(); } } catch (error) { console.error('Error scheduling item:', error); throw error; } }; const generateDays = () => { const days = []; const start = new Date(trip.start_date); const end = new Date(trip.end_date); for (let d = new Date(start); d <= end; d.setDate(d.getDate() + 1)) { days.push(new Date(d)); } return days; }; const getSlotsForDay = (date) => { const dateString = date.toISOString().split('T')[0]; return calendarSlots.filter(slot => slot.slot_date === dateString); }; if (loading) { return
Loading timeline...
; } const days = generateDays(); return (

Trip Timeline

{days.map((day, index) => ( ))}
); } export default TripTimeline;