/** * Transport Analytics Page * Carbon footprint and food miles analysis */ import { useState, useEffect } from 'react'; import Link from 'next/link'; import { KPICard, DateRangePicker, LineChart, BarChart, PieChart, AreaChart, Gauge, DataTable, } from '../../components/analytics'; import { TimeRange, TransportAnalytics } from '../../lib/analytics/types'; export default function TransportAnalyticsPage() { const [timeRange, setTimeRange] = useState('30d'); const [loading, setLoading] = useState(true); const [data, setData] = useState(null); useEffect(() => { fetchData(); }, [timeRange]); const fetchData = async () => { setLoading(true); try { const response = await fetch(`/api/analytics/transport?timeRange=${timeRange}`); const result = await response.json(); setData(result.data); } catch (error) { console.error('Failed to fetch transport analytics:', error); } finally { setLoading(false); } }; const methodColumns = [ { key: 'method', header: 'Method' }, { key: 'count', header: 'Events', align: 'right' as const }, { key: 'distanceKm', header: 'Distance (km)', align: 'right' as const, render: (v: number) => v.toLocaleString() }, { key: 'carbonKg', header: 'Carbon (kg)', align: 'right' as const, render: (v: number) => v.toFixed(2) }, { key: 'efficiency', header: 'Efficiency', align: 'right' as const, render: (v: number) => ( = 80 ? 'text-green-600' : v >= 50 ? 'text-yellow-600' : 'text-red-600'}`}> {v}% ), }, ]; const routeColumns = [ { key: 'from', header: 'From' }, { key: 'to', header: 'To' }, { key: 'method', header: 'Method' }, { key: 'distanceKm', header: 'Distance', align: 'right' as const, render: (v: number) => `${v} km` }, { key: 'frequency', header: 'Frequency', align: 'right' as const }, ]; return (
{/* Header */}

Transport Analytics

Carbon footprint and food miles analysis

{/* Time Range Selector */}
{/* Navigation Tabs */}
Overview Plants Transport Farms Sustainability
{/* KPI Cards */}
{/* Gauges */}
m.efficiency >= 80).length ? (data.eventsByMethod.filter(m => m.efficiency >= 80).reduce((s, m) => s + m.count, 0) / data.totalEvents) * 100 : 0} title="Green Transport" unit="%" />
{/* Charts */}
{data?.carbonTrend && ( )} {data?.eventsByMethod && ( )}
{/* Event Types Pie Chart */} {data?.eventsByType && (
)} {/* Tables */}
{data?.eventsByMethod && ( )} {data?.mostEfficientRoutes && ( )}
); }