/* eslint-disable @typescript-eslint/no-explicit-any */ /* eslint-disable react-hooks/exhaustive-deps */ 'use client' import sdgsDesa from '@/app/admin/(dashboard)/_state/landing-page/sdgs-desa'; import colors from '@/con/colors'; import { BarChart } from '@mantine/charts'; import { Box, Center, Container, Image, LoadingOverlay, Paper, SimpleGrid, Stack, Text, Title } from '@mantine/core'; import { IconMoodSad } from '@tabler/icons-react'; import { useEffect, useMemo, useState } from 'react'; import { useProxy } from 'valtio/utils'; import BackButton from '../../(pages)/desa/layanan/_com/BackButto'; function Page() { type SdgsDesa = { id: string name: string jumlah: number }; const [chartData, setChartData] = useState([]) const [mounted, setMounted] = useState(false); const state = useProxy(sdgsDesa.findManyAll) const [loading, setLoading] = useState(true); // Definisikan urutan goal SDGs Desa (sesuai nomor 1-18) const sdgsOrder = [ "Desa Tanpa Kemiskinan", "Desa Tanpa Kelaparan", "Desa Sehat dan Sejahtera", "Pendidikan Desa Berkualitas", "Keterlibatan Perempuan Desa", "Desa Layak Air Bersih dan Sanitasi", "Desa Berenergi Bersih dan Terbarukan", "Pertumbuhan Ekonomi Desa Merata", "Infrastruktur dan Inovasi Desa Sesuai Kebutuhan", "Desa Tanpa Kesenjangan", "Kawasan Permukiman Desa Aman dan Nyaman", "Konsumsi dan Produksi Desa Sadar Lingkungan", "Desa Tanggap Perubahan Iklim", "Desa Peduli Lingkungan Laut", "Desa Peduli Lingkungan Darat", "Desa Damai Berkeadilan", "Kemitraan untuk Pembangunan Desa", "Kelembagaan Desa Dinamis dan Budaya Desa Adaptif" ]; useEffect(() => { if (state.data) { // Urutkan data sesuai urutan goal 1-18 const sortedData = [...state.data].sort((a, b) => { const indexA = sdgsOrder.indexOf(a.name); const indexB = sdgsOrder.indexOf(b.name); return indexA - indexB; }); setChartData(sortedData.map((item: any) => ({ id: item.id, name: item.name, jumlah: item.jumlah, }))); } }, [state.data]); useEffect(() => { const loadData = async () => { try { setMounted(true); setLoading(true) await state.load() } catch (error) { console.error('Error loading data:', error) } finally { setLoading(false) } } loadData() }, []) const averageScore = useMemo(() => { if (!state.data?.length) return 0; const total = state.data.reduce((sum: number, item: any) => { const val = typeof item.jumlah === 'string' ? parseFloat(item.jumlah.replace(',', '.')) : Number(item.jumlah); return isNaN(val) ? sum : sum + val; }, 0); return parseFloat((total / state.data.length).toFixed(2)); }, [state.data]); return ( SDGs Desa Pembangunan berkelanjutan yang inklusif, adil, dan berdaya saing di tingkat desa SDGs Desa adalah upaya terpadu pemerintah dalam percepatan pencapaian tujuan pembangunan berkelanjutan di tingkat desa. Ini merupakan adaptasi dari SDGs global dalam konteks pembangunan desa di Indonesia, yang bertujuan menciptakan desa inklusif, berkelanjutan, dan tangguh menghadapi tantangan masa depan. Berdasarkan Permendesa Nomor 21 Tahun 2020, SDGs Desa mencakup 18 tujuan yang harus dicapai pada tahun 2030. Tujuan-tujuan tersebut meliputi pengentasan kemiskinan, peningkatan kesehatan dan pendidikan, kesetaraan gender, pertumbuhan ekonomi, pembangunan infrastruktur, hingga pelestarian lingkungan. {!loading && state.data && state.data.length > 0 && (
Rata-Rata SDGs Desa : {averageScore} % Diambil dari rata-rata 18 Goals SDGs Desa dari Desa Darmasaba
)} {!loading && state.data && state.data.length > 0 ? ( {state.data?.map((item) => ( { (e.currentTarget.style.transform = 'translateY(-6px) scale(1.02)'); (e.currentTarget.style.boxShadow = '0 12px 24px rgba(0,0,0,0.08)'); }} onMouseLeave={(e) => { (e.currentTarget.style.transform = 'translateY(0) scale(1)'); (e.currentTarget.style.boxShadow = '0 4px 12px rgba(0,0,0,0.05)'); }} > {item.name} {item.name} {item.jumlah} ))} ) : !loading ? (
Belum ada data SDGs Desa
) : null} {/* Chart */} Grafik SDGs Desa {mounted && chartData.length > 0 ? ( {/* ⭐ batas minimum biar bisa scroll */} value, formatter: (value) => `${value}%`, }} xAxisProps={{ angle: -45, textAnchor: 'end', interval: 0, fontSize: 12, dy: 10, }} yAxisProps={{ domain: [0, 100], tickCount: 6, }} withLegend={false} /> ) : ( Belum ada data untuk ditampilkan dalam grafik )}
); } export default Page;