'use client' /* eslint-disable @typescript-eslint/no-explicit-any */ import colors from '@/con/colors'; import { BarChart as MantineBarChart } from '@mantine/charts'; import { Box, Center, ColorSwatch, Flex, Paper, SimpleGrid, Skeleton, Stack, Text, Title } from '@mantine/core'; import { useEffect, useState } from 'react'; import BackButton from '../../desa/layanan/_com/BackButto'; // import { useRouter } from 'next/navigation'; import { useMediaQuery, useShallowEffect } from '@mantine/hooks'; import persentasekelahiran from '@/app/admin/(dashboard)/_state/kesehatan/data_kesehatan_warga/persentaseKelahiran'; import { useProxy } from 'valtio/utils'; import FasilitasKesehatan from './fasilitas-kesehatan-page/page'; import GrafikPenyakit from './grafik-penyakit/page'; import JadwalKegiatan from './jadwal-kegiatan-page/page'; import ArtikelKesehatanPage from './artikel-kesehatan-page/page'; function Page() { type DataTahunan = { tahun: string; totalKelahiran: number; totalKematian: number; data: Array<{ id: string; bulan: string; kelahiran: number; kematian: number; }>; }; // Count occurrences per year const countByYear = (data: any[], dateField: string) => { const counts: Record = {}; data?.forEach(item => { const year = new Date(item[dateField]).getFullYear().toString(); counts[year] = (counts[year] || 0) + 1; }); return counts; }; const statePersentase = useProxy(persentasekelahiran); const [chartData, setChartData] = useState([]); const isTablet = useMediaQuery('(max-width: 1024px)'); const isMobile = useMediaQuery('(max-width: 768px)'); useShallowEffect(() => { statePersentase.kelahiran.findMany.load(1, 1000); // Load all kelahiran data statePersentase.kematian.findMany.load(1, 1000); // Load all kematian data }, []); useEffect(() => { if (statePersentase.kelahiran.findMany.data && statePersentase.kematian.findMany.data) { // Count kelahiran and kematian by year const kelahiranByYear = countByYear(statePersentase.kelahiran.findMany.data, 'tanggal'); const kematianByYear = countByYear(statePersentase.kematian.findMany.data, 'tanggal'); // Get all unique years const allYears = new Set([ ...Object.keys(kelahiranByYear), ...Object.keys(kematianByYear) ]); // Create data structure for the chart const dataByYear = Array.from(allYears).reduce>((acc, year) => { acc[year] = { tahun: year, totalKelahiran: kelahiranByYear[year] || 0, totalKematian: kematianByYear[year] || 0, data: [] }; return acc; }, {}); const sortedData = Object.values(dataByYear).sort((a, b) => parseInt(a.tahun) - parseInt(b.tahun) ); setChartData(sortedData); } }, [ statePersentase.kelahiran.findMany.data, statePersentase.kematian.findMany.data, ]); if (!statePersentase.kelahiran.findMany.data || !statePersentase.kematian.findMany.data) { return ( ); } return ( Data Kesehatan Masyarakat Puskesmas Darmasaba {/* Bar Chart Kematian Kelahiran */} Data Kematian dan Kelahiran {chartData.length === 0 ? ( Belum ada data yang tersedia untuk ditampilkan ) : ( <> {/* Main Chart */}
)} Angka Kematian Angka Kelahiran
{/* Artikel Kesehatan */} {/* Fasilitas Kesehatan */} {/* Jadwal Kegiatan */} {/* Artikel Kesehatan */}
); } export default Page;