import { useState, useEffect, useRef } from 'react'; import { useAuth } from '../contexts/AuthContext'; import api from '../utils/api'; import TripList from './TripList'; import TripModal from './TripModal'; import ConfirmDialog from './ConfirmDialog'; const Dashboard = () => { const { user, logout } = useAuth(); const [trips, setTrips] = useState([]); const [isLoading, setIsLoading] = useState(true); const [showTripModal, setShowTripModal] = useState(false); const [selectedTrip, setSelectedTrip] = useState(null); const [showDeleteConfirm, setShowDeleteConfirm] = useState(false); const [tripToDelete, setTripToDelete] = useState(null); const [isSubmitting, setIsSubmitting] = useState(false); const [showUserDropdown, setShowUserDropdown] = useState(false); const userDropdownRef = useRef(null); useEffect(() => { fetchTrips(); }, []); useEffect(() => { const handleClickOutside = (event) => { if (userDropdownRef.current && !userDropdownRef.current.contains(event.target)) { setShowUserDropdown(false); } }; document.addEventListener('mousedown', handleClickOutside); return () => { document.removeEventListener('mousedown', handleClickOutside); }; }, []); const fetchTrips = async () => { try { setIsLoading(true); const response = await api.get('/trips'); setTrips(response.data.data); } catch (error) { console.error('Error fetching trips:', error); } finally { setIsLoading(false); } }; const handleLogout = async () => { await logout(); }; const handleCreateTrip = () => { setSelectedTrip(null); setShowTripModal(true); }; const handleEditTrip = (trip) => { setSelectedTrip(trip); setShowTripModal(true); }; const handleDeleteTrip = (trip) => { setTripToDelete(trip); setShowDeleteConfirm(true); }; const handleTripSubmit = async (tripData) => { setIsSubmitting(true); try { if (selectedTrip) { const response = await api.put(`/trips/${selectedTrip.id}`, tripData); setTrips(trips.map(trip => trip.id === selectedTrip.id ? response.data.data : trip )); } else { const response = await api.post('/trips', tripData); setTrips([response.data.data, ...trips]); } setShowTripModal(false); setSelectedTrip(null); } catch (error) { console.error('Error saving trip:', error); throw error; } finally { setIsSubmitting(false); } }; const confirmDeleteTrip = async () => { try { await api.delete(`/trips/${tripToDelete.id}`); setTrips(trips.filter(trip => trip.id !== tripToDelete.id)); setShowDeleteConfirm(false); setTripToDelete(null); } catch (error) { console.error('Error deleting trip:', error); throw error; } }; return (