import { useState } from 'react'; import { useTrips } from '@/hooks/useTrips'; import { TripStatus } from '@/services/tripsApi'; import { Plane, Plus, Trash2, Edit2, Eye, Calendar, Users, DollarSign, MapPin, RefreshCw, Search, MoreVertical, Clock, CheckCircle, XCircle, PlayCircle, PauseCircle, } from 'lucide-react'; import { Button } from '@/components/ui/button'; import { Badge } from '@/components/ui/badge'; import { Input } from '@/components/ui/input'; import { Card, CardContent, CardHeader, CardTitle, CardDescription } from '@/components/ui/card'; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from '@/components/ui/select'; import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, DialogTrigger, } from '@/components/ui/dialog'; import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger, } from '@/components/ui/dropdown-menu'; import { AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogTitle, } from '@/components/ui/alert-dialog'; import { Label } from '@/components/ui/label'; import { Textarea } from '@/components/ui/textarea'; const statusConfig: Record = { planning: { label: 'Planificando', icon: Clock, color: 'bg-yellow-500' }, upcoming: { label: 'Próximo', icon: Calendar, color: 'bg-blue-500' }, in_progress: { label: 'En progreso', icon: PlayCircle, color: 'bg-green-500' }, completed: { label: 'Completado', icon: CheckCircle, color: 'bg-gray-500' }, cancelled: { label: 'Cancelado', icon: XCircle, color: 'bg-red-500' }, }; const Trips = () => { const { trips, stats, loading, error, selectedStatus, loadTrips, createTrip, updateTrip, deleteTrip, getTripById, selectedTrip, setSelectedTrip, changeStatus, } = useTrips(); const [searchTerm, setSearchTerm] = useState(''); const [isCreateDialogOpen, setIsCreateDialogOpen] = useState(false); const [isEditDialogOpen, setIsEditDialogOpen] = useState(false); const [isDeleteDialogOpen, setIsDeleteDialogOpen] = useState(false); const [tripToDelete, setTripToDelete] = useState(null); // Form state const [formData, setFormData] = useState({ name: '', description: '', destination: '', startDate: '', endDate: '', travelersCount: 1, estimatedBudget: 0, currency: 'USD', isPublic: false, }); const filteredTrips = trips.filter(trip => trip.name.toLowerCase().includes(searchTerm.toLowerCase()) || trip.destination?.toLowerCase().includes(searchTerm.toLowerCase()) || trip.description?.toLowerCase().includes(searchTerm.toLowerCase()) ); const handleRefresh = async () => { await loadTrips(); }; const handleCreate = async () => { const result = await createTrip(formData); if (result) { setIsCreateDialogOpen(false); resetForm(); } }; const handleEdit = async () => { if (!selectedTrip) return; const success = await updateTrip(selectedTrip.id, formData); if (success) { setIsEditDialogOpen(false); resetForm(); } }; const handleDelete = async () => { if (!tripToDelete) return; const success = await deleteTrip(tripToDelete); if (success) { setIsDeleteDialogOpen(false); setTripToDelete(null); } }; const openEditDialog = async (tripId: string) => { const trip = await getTripById(tripId); if (trip) { setFormData({ name: trip.name, description: trip.description || '', destination: trip.destination || '', startDate: trip.startDate || '', endDate: trip.endDate || '', travelersCount: trip.travelersCount || 1, estimatedBudget: trip.estimatedBudget || 0, currency: trip.currency || 'USD', isPublic: trip.isPublic, }); setIsEditDialogOpen(true); } }; const openDeleteDialog = (tripId: string) => { setTripToDelete(tripId); setIsDeleteDialogOpen(true); }; const resetForm = () => { setFormData({ name: '', description: '', destination: '', startDate: '', endDate: '', travelersCount: 1, estimatedBudget: 0, currency: 'USD', isPublic: false, }); setSelectedTrip(null); }; const formatDate = (date: string | undefined) => { if (!date) return '-'; return new Date(date).toLocaleDateString('es-ES', { day: 'numeric', month: 'short', year: 'numeric', }); }; if (loading && trips.length === 0) { return (

Cargando viajes...

); } return (
{/* Header */}

Gestión de Viajes

Administra los itinerarios de viaje de los usuarios

Crear Viaje Crea un nuevo itinerario de viaje.
setFormData({ ...formData, name: e.target.value })} placeholder="Mi viaje a..." />
setFormData({ ...formData, destination: e.target.value })} placeholder="Punta Cana, RD" />