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 (
Loading trip details...
{error}
Back to Dashboard{trip.description}
)} {tripDatesDisplay}