diff --git a/src/app/admin/(dashboard)/ppid/ikm-desa-darmasaba/indeks-kepuasan-masyarakat/page.tsx b/src/app/admin/(dashboard)/ppid/ikm-desa-darmasaba/indeks-kepuasan-masyarakat/page.tsx index 29055b11..6ab35792 100644 --- a/src/app/admin/(dashboard)/ppid/ikm-desa-darmasaba/indeks-kepuasan-masyarakat/page.tsx +++ b/src/app/admin/(dashboard)/ppid/ikm-desa-darmasaba/indeks-kepuasan-masyarakat/page.tsx @@ -1,10 +1,20 @@ /* eslint-disable @typescript-eslint/no-explicit-any */ -'use client' -import React, { useEffect, useState } from 'react'; -import { Box, Center, Flex, Paper, Skeleton, Stack, Text, Title } from '@mantine/core'; +'use client'; import colors from '@/con/colors'; -import { PieChart, Pie, Cell } from 'recharts'; +import { PieChart } from '@mantine/charts'; // ✅ Ganti recharts dengan Mantine +import { + Box, + Center, + Flex, + Paper, + SimpleGrid, + Skeleton, + Stack, + Text, + Title, +} from '@mantine/core'; import { useShallowEffect } from '@mantine/hooks'; +import { useState } from 'react'; import { useProxy } from 'valtio/utils'; import indeksKepuasanState from '../../../_state/landing-page/indeks-kepuasan'; @@ -21,13 +31,8 @@ function Page() { const [donutDataJenisKelamin, setDonutDataJenisKelamin] = useState([]); const [donutDataRating, setDonutDataRating] = useState([]); const [donutDataKelompokUmur, setDonutDataKelompokUmur] = useState([]); - const [mounted, setMounted] = useState(false); useShallowEffect(() => { - setMounted(true); - }, []); - - useEffect(() => { if (data) { // Hitung total berdasarkan jenis kelamin const totalLaki = data.filter((item: any) => item.jenisKelamin?.name?.toLowerCase() === 'laki-laki').length; @@ -43,28 +48,29 @@ function Page() { const totalMuda = data.filter((item: any) => item.kelompokUmur?.name?.toLowerCase() === 'muda').length; const totalDewasa = data.filter((item: any) => item.kelompokUmur?.name?.toLowerCase() === 'dewasa').length; const totalLansia = data.filter((item: any) => item.kelompokUmur?.name?.toLowerCase() === 'lansia').length; + // Update gender chart data setDonutDataJenisKelamin([ - { name: 'laki', value: totalLaki, color: colors['blue-button'], label: 'Laki-laki' }, - { name: 'perempuan', value: totalPerempuan, color: '#10A85AFF', label: 'Perempuan' } + { name: 'Laki-laki', value: totalLaki, color: colors['blue-button'] }, + { name: 'Perempuan', value: totalPerempuan, color: '#10A85AFF' }, ]); // Update rating chart data setDonutDataRating([ - { name: 'sangat_baik', value: totalSangatBaik, color: colors['blue-button'], label: 'Sangat Baik' }, - { name: 'baik', value: totalBaik, color: '#10A85AFF', label: 'Baik' }, - { name: 'kurang_baik', value: totalKurangBaik, color: '#FFA500', label: 'Kurang Baik' }, - { name: 'sangat_kurang_baik', value: totalSangatKurangBaik, color: '#FF4500', label: 'Sangat Kurang Baik' } + { name: 'Sangat Baik', value: totalSangatBaik, color: colors['blue-button'] }, + { name: 'Baik', value: totalBaik, color: '#10A85AFF' }, + { name: 'Kurang Baik', value: totalKurangBaik, color: '#FFA500' }, + { name: 'Sangat Kurang Baik', value: totalSangatKurangBaik, color: '#FF4500' }, ]); // Update age group chart data setDonutDataKelompokUmur([ - { name: 'muda', value: totalMuda, color: colors['blue-button'], label: 'Muda' }, - { name: 'dewasa', value: totalDewasa, color: '#10A85AFF', label: 'Dewasa' }, - { name: 'lansia', value: totalLansia, color: '#FFA500', label: 'Lansia' } + { name: 'Muda', value: totalMuda, color: colors['blue-button'] }, + { name: 'Dewasa', value: totalDewasa, color: '#10A85AFF' }, + { name: 'Lansia', value: totalLansia, color: '#FFA500' }, ]); } - }, [data]) + }, [data]); if (loading || !data) { return ( @@ -77,139 +83,117 @@ function Page() { if (data.length === 0) { return ( - Belum ada data untuk ditampilkan + + Belum ada data untuk ditampilkan + - ) + ); } return ( - - {/* Chart */} - - - - Grafik Berdasarkan Jenis Kelamin Responden - {mounted && donutDataJenisKelamin.length === 0 ? ( - Belum ada data untuk ditampilkan dalam grafik - ) : ( - -
- - `${(percent * 100).toFixed(0)}%`} - labelLine={false} - > - {donutDataJenisKelamin.map((entry, index) => ( - - ))} - - -
- - {donutDataJenisKelamin.map((entry) => ( - - - {entry.label}: {entry.value || 0} - - ))} - -
- )} -
-
-
- - {/* Rating Chart */} - - - Grafik Berdasarkan Rating Responden - {mounted && donutDataRating.length === 0 ? ( - Belum ada data untuk ditampilkan dalam grafik - ) : ( - -
- - `${(percent * 100).toFixed(0)}%`} - labelLine={false} - > - {donutDataRating.map((entry, index) => ( - - ))} - - -
- - {donutDataRating.map((entry) => ( - - - {entry.label}: {entry.value || 0} - - ))} - -
- )} -
-
-
+ - {/* Age Group Chart */} - - - - Grafik Berdasarkan Kelompok Umur - {mounted && donutDataKelompokUmur.length === 0 ? ( - Belum ada data untuk ditampilkan dalam grafik - ) : ( - -
- - `${(percent * 100).toFixed(0)}%`} - labelLine={false} - > - {donutDataKelompokUmur.map((entry, index) => ( - - ))} - - -
- - {donutDataKelompokUmur.map((entry) => ( - - - {entry.label}: {entry.value || 0} - - ))} - -
- )} -
-
-
+ + + + {/* Chart Jenis Kelamin */} + + + Jenis Kelamin + {donutDataJenisKelamin.every(item => item.value === 0) ? ( + + Belum ada data untuk ditampilkan dalam grafik + + ) : ( + +
+ +
+ + {donutDataJenisKelamin.map((entry) => ( + + + {entry.name}: {entry.value} + + ))} + +
+ )} +
+
+ + {/* Chart Rating */} + + + Pilihan + {donutDataRating.every(item => item.value === 0) ? ( + + Belum ada data untuk ditampilkan dalam grafik + + ) : ( + +
+ +
+ + {donutDataRating.map((entry) => ( + + + {entry.name}: {entry.value} + + ))} + +
+ )} +
+
+ + {/* Chart Kelompok Umur */} + + + Umur + {donutDataKelompokUmur.every(item => item.value === 0) ? ( + + Belum ada data untuk ditampilkan dalam grafik + + ) : ( + +
+ +
+ + {donutDataKelompokUmur.map((entry) => ( + + + {entry.name}: {entry.value} + + ))} + +
+ )} +
+
+
); } -export default Page; +export default Page; \ No newline at end of file