/* eslint-disable react-hooks/exhaustive-deps */ 'use client' import grafikkepuasan from "@/app/admin/(dashboard)/_state/kesehatan/data_kesehatan_warga/grafikKepuasan"; import colors from "@/con/colors"; import { Box, Center, Paper, Skeleton, Stack, Text, Title } from "@mantine/core"; import { useMediaQuery, useShallowEffect } from "@mantine/hooks"; import { useEffect, useState } from "react"; import { Bar, BarChart, Legend, Tooltip, XAxis, YAxis } from "recharts"; import { useProxy } from "valtio/utils"; function GrafikPenyakit() { type PDKMGRAFIK = { id: string; nama: string; tanggal: string | Date; // Allow both string and Date types jenisKelamin: string; alamat: string; penyakit: string; createdAt?: Date; // Add optional fields that might come from the API updatedAt?: Date; deletedAt?: Date | null; } const statePenyakit = useProxy(grafikkepuasan) const [chartData, setChartData] = useState([]) const [mounted, setMounted] = useState(false) const isTablet = useMediaQuery('(max-width: 1024px)') const isMobile = useMediaQuery('(max-width: 768px)') const { data, page, loading, load, } = statePenyakit.findMany useShallowEffect(() => { setMounted(true) load(page, 10) }, [page]) useEffect(() => { setMounted(true) if (data) { setChartData(data.map((item) => ({ id: item.id, nama: item.nama, tanggal: item.tanggal instanceof Date ? item.tanggal.toISOString() : item.tanggal, jenisKelamin: item.jenisKelamin, alamat: item.alamat, penyakit: item.penyakit, }))) } }, [data]) const processDiseaseData = (data: PDKMGRAFIK[]) => { const diseaseCount: Record = {}; data.forEach(item => { const penyakit = item.penyakit.trim(); if (penyakit) { diseaseCount[penyakit] = (diseaseCount[penyakit] || 0) + 1; } }); return Object.entries(diseaseCount).map(([name, count]) => ({ name, count })); }; // Add this state to store the processed chart data const [diseaseChartData, setDiseaseChartData] = useState<{ name: string, count: number }[]>([]); // Update the chart data when data changes useEffect(() => { if (data && data.length > 0) { setDiseaseChartData(processDiseaseData(data)); } }, [data]); if (loading || !data) { return ( ) } return ( {!mounted && !chartData ? (
Grafik Hasil Kepuasan Masyarakat Belum ada data untuk ditampilkan dalam grafik
) : ( Grafik Hasil Kepuasan Masyarakat {mounted && diseaseChartData.length > 0 && (
)}
)}
); } export default GrafikPenyakit;