import { useState, useEffect, useMemo } from 'react'; import { useParams, useNavigate, Link } from 'react-router-dom'; import { formatDate } from '../utils/dateFormatter'; import { useTrip } from '../hooks/useTrip'; import PlannablesList from './plannables/PlannablesList'; import TripTimeline from './timeline/TripTimeline'; import axios from 'axios'; import './TripDetail.css'; const API_URL = import.meta.env.VITE_API_URL || 'http://localhost:8000'; const TripDetail = () => { const { id } = useParams(); const navigate = useNavigate(); const [trip, setTrip] = useState(null); const [plannableItems, setPlannableItems] = useState([]); const { fetchTrip, loading, error } = useTrip(); useEffect(() => { const loadTrip = async () => { try { const tripData = await fetchTrip(id); setTrip(tripData); } catch (err) { console.error('Error loading trip:', err); } }; loadTrip(); }, [id, fetchTrip]); useEffect(() => { const loadPlannableItems = async () => { try { const token = localStorage.getItem('token'); const response = await axios.get(`${API_URL}/api/trips/${id}/plannables`, { headers: { Authorization: `Bearer ${token}` } }); setPlannableItems(response.data.data || []); } catch (err) { console.error('Error loading plannable items:', err); } }; if (id) { loadPlannableItems(); } }, [id]); // Memoize trip dates display to prevent unnecessary re-renders const tripDatesDisplay = useMemo(() => { if (!trip) return null; return (
Start: {formatDate(trip.start_date)} End: {formatDate(trip.end_date)}
); }, [trip]); if (loading) { return (

Loading trip details...

); } if (error) { return (

Error

{error}

Back to Dashboard
); } if (!trip) { return null; } return (
← Back to Dashboard

{trip.name}

{trip.description && (

{trip.description}

)} {tripDatesDisplay}
setPlannableItems(items)} />
{ // Optional: refresh plannable items if needed }} />
); }; export default TripDetail;