diff --git a/sigap-website/app/(pages)/(admin)/dashboard/crime-management/crime-overview/_hooks/use-crime-analytics.ts b/sigap-website/app/(pages)/(admin)/dashboard/crime-management/crime-overview/_hooks/use-crime-analytics.ts index 01cd61c..7bdbe3b 100644 --- a/sigap-website/app/(pages)/(admin)/dashboard/crime-management/crime-overview/_hooks/use-crime-analytics.ts +++ b/sigap-website/app/(pages)/(admin)/dashboard/crime-management/crime-overview/_hooks/use-crime-analytics.ts @@ -30,9 +30,8 @@ export function useCrimeAnalytics(crimes: ICrimes[]) { availableMonths: [] as string[], }; - let filteredCrimes = [...crimes]; - - const crimeIncidents = filteredCrimes.flatMap((crime: ICrimes) => + // Use the already filtered crimes directly, don't filter them again + const crimeIncidents = crimes.flatMap((crime: ICrimes) => crime.crime_incidents.map((incident) => ({ id: incident.id, timestamp: incident.timestamp, @@ -43,6 +42,8 @@ export function useCrimeAnalytics(crimes: ICrimes[]) { address: incident.locations.address, latitude: incident.locations.latitude, longitude: incident.locations.longitude, + district_id: crime.district_id, + district_name: crime.districts?.name || 'Unknown' })) ); @@ -86,11 +87,12 @@ export function useCrimeAnalytics(crimes: ICrimes[]) { {} as Record ); - const districts = filteredCrimes.reduce( - (acc: Record, crime: ICrimes) => { - const districtName = crime.districts.name || 'Unknown'; - acc[districtName] = - (acc[districtName] || 0) + (crime.number_of_crime || 0); + // Count by district name from the incidents, not from crimes anymore + // since crimes are already filtered + const districts = crimeIncidents.reduce( + (acc: Record, incident) => { + const districtName = incident.district_name || 'Unknown'; + acc[districtName] = (acc[districtName] || 0) + 1; return acc; }, {} as Record diff --git a/sigap-website/app/_components/map/controls/left/sidebar/map-sidebar.tsx b/sigap-website/app/_components/map/controls/left/sidebar/map-sidebar.tsx index de7e337..8ec1d5c 100644 --- a/sigap-website/app/_components/map/controls/left/sidebar/map-sidebar.tsx +++ b/sigap-website/app/_components/map/controls/left/sidebar/map-sidebar.tsx @@ -1,6 +1,6 @@ "use client"; -import React, { useEffect, useState } from "react"; +import React, { useEffect, useMemo, useState } from "react"; import { AlertTriangle, Calendar, diff --git a/sigap-website/app/_components/map/crime-map.tsx b/sigap-website/app/_components/map/crime-map.tsx index 4e7aee4..70e1b03 100644 --- a/sigap-website/app/_components/map/crime-map.tsx +++ b/sigap-website/app/_components/map/crime-map.tsx @@ -151,7 +151,7 @@ export default function CrimeMap() { }, [crimes, selectedSourceType]); const filteredByYearAndMonth = useMemo(() => { - if (!crimesBySourceType) return []; + if (!crimesBySourceType || crimesBySourceType.length === 0) return []; if (useAllYears) { if (useAllMonths) { @@ -183,7 +183,8 @@ export default function CrimeMap() { ]); const filteredCrimes = useMemo(() => { - if (!filteredByYearAndMonth) return []; + if (!filteredByYearAndMonth || filteredByYearAndMonth.length === 0) + return []; if (selectedCategory === "all") return filteredByYearAndMonth; return filteredByYearAndMonth.map((crime) => { @@ -345,7 +346,16 @@ export default function CrimeMap() { setShowEWS(true); }; - // const showTimelineLayer = activeControl === "timeline"; + useEffect(() => { + console.log(`Current source type: ${selectedSourceType}`); + console.log(`Total crimes before filtering: ${crimes?.length || 0}`); + console.log( + `Total crimes after source type filtering: ${crimesBySourceType.length}`, + ); + console.log( + `Total crimes after all filtering: ${filteredCrimes.length}`, + ); + }, [crimes, crimesBySourceType, filteredCrimes, selectedSourceType]); return ( @@ -475,7 +485,7 @@ export default function CrimeMap() { selectedCategory={selectedCategory} selectedYear={selectedYear} selectedMonth={selectedMonth} - sourceType={selectedSourceType} // Pass the sourceType + sourceType={selectedSourceType} />