"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/common'
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
)}
))}
)}
)
}