"use client" import { calculateDistances } from '@/app/(pages)/(admin)/dashboard/crime-management/crime-overview/action' import { useState, useEffect } from 'react' import { Skeleton } from '../../ui/skeleton' import { formatDistance } from '@/app/_utils/map' import { useQuery } from '@tanstack/react-query' interface DistanceInfoProps { unitId?: string districtId?: string className?: string } export default function DistanceInfo({ unitId, districtId, className = '' }: DistanceInfoProps) { const { data, isLoading } = useQuery({ queryKey: ['calculate-distances', unitId, districtId], queryFn: () => calculateDistances(unitId, districtId), }) if (isLoading) { return (

Distance Information

) } if (!data) { return (

Distance Information

No distance data available

) } if (!data.length) { return (

Distance Information

No distance data available

) } // Group by unit if we're showing multiple units const unitGroups = !unitId ? data.reduce((acc, item) => { if (!acc[item.unit_code]) { acc[item.unit_code] = { name: item.unit_name, incidents: [] } } acc[item.unit_code].incidents.push(item) return acc }, {} as Record) : null return (

Distance Information

{unitId ? ( // Single unit view

{data[0]?.unit_name || 'Selected Unit'}

    {data.map(item => (
  • {item.category_name} {formatDistance(item.distance_meters)}
  • ))}
) : ( // Multi-unit view (grouped)
{unitGroups && Object.entries(unitGroups).map(([code, unit]) => (

{unit.name}

    {unit.incidents.slice(0, 3).map(item => (
  • {item.category_name} {formatDistance(item.distance_meters)}
  • ))} {unit.incidents.length > 3 && (
  • + {unit.incidents.length - 3} more incidents
  • )}
))}
)}
) }