import React, { useState } from 'react'; import { useTranslation } from 'react-i18next'; import { Truck, Plus, Package, MapPin, Calendar, ArrowRight, Search, Filter, MoreVertical, Clock, CheckCircle, AlertTriangle } from 'lucide-react'; import { Button, StatsGrid, Card, CardContent, CardHeader, CardTitle, Badge, Input } from '../../../../components/ui'; import { PageHeader } from '../../../../components/layout'; import { useTenant } from '../../../../stores/tenant.store'; import { useDistributionOverview } from '../../../../api/hooks/useEnterpriseDashboard'; import DistributionMap from '../../../../components/maps/DistributionMap'; const DistributionPage: React.FC = () => { const { t } = useTranslation(['operations', 'common', 'dashboard']); const { currentTenant: tenant } = useTenant(); const [selectedDate, setSelectedDate] = useState(new Date().toISOString().split('T')[0]); const [activeTab, setActiveTab] = useState<'overview' | 'routes' | 'shipments'>('overview'); // Fetch real distribution data const { data: distributionData, isLoading } = useDistributionOverview( tenant?.id || '', selectedDate, { enabled: !!tenant?.id } ); // Derive stats from real data const stats = [ { title: t('operations:stats.active_routes', 'Rutas Activas'), value: distributionData?.route_sequences?.filter((r: any) => r.status === 'in_progress').length || 0, variant: 'info' as const, icon: Truck, }, { title: t('operations:stats.pending_deliveries', 'Entregas Pendientes'), value: distributionData?.status_counts?.pending || 0, variant: 'warning' as const, icon: Package, }, { title: t('operations:stats.completed_deliveries', 'Entregas Completadas'), value: distributionData?.status_counts?.delivered || 0, variant: 'success' as const, icon: CheckCircle, }, { title: t('operations:stats.total_routes', 'Total Rutas'), value: distributionData?.route_sequences?.length || 0, variant: 'default' as const, icon: MapPin, }, ]; const handleNewRoute = () => { // Navigate to create route page or open modal console.log('New route clicked'); }; if (!tenant) return null; // Prepare shipment status data safely const shipmentStatus = { pending: distributionData?.status_counts?.pending || 0, in_transit: distributionData?.status_counts?.in_transit || 0, delivered: distributionData?.status_counts?.delivered || 0, failed: distributionData?.status_counts?.failed || 0, }; return (
Visualización en tiempo real de la flota
Ruta {route.route_number}
{route.formatted_driver_name || 'Sin conductor asignado'}
| Ruta | Estado | Distancia | Duración Est. | Paradas | Acciones |
|---|---|---|---|---|---|
| {route.route_number} |
|
{route.total_distance_km?.toFixed(1) || '-'} km | {route.estimated_duration_minutes || '-'} min | {route.route_points?.length || 0} | } /> |
No se encontraron rutas para esta fecha.
Funcionalidad de listado detallado de envíos próximamente.