/* eslint-disable @typescript-eslint/no-explicit-any */ /* eslint-disable react-hooks/exhaustive-deps */ 'use client' import apbdes from '@/app/admin/(dashboard)/_state/landing-page/apbdes' import colors from '@/con/colors' import { BarChart } from '@mantine/charts' import { ActionIcon, BackgroundImage, Box, Button, Center, Flex, Group, Loader, Paper, SimpleGrid, Stack, Text, Title } from '@mantine/core' import { IconDownload } from '@tabler/icons-react' import Link from 'next/link' import { useEffect, useState } from 'react' import { useProxy } from 'valtio/utils' import parseJumlah from './lib/convert' function Apbdes() { type APBDes = { id: string name: string jumlah: number }; const [chartData, setChartData] = useState([]) const [mounted, setMounted] = useState(false); const state = useProxy(apbdes) const [loading, setLoading] = useState(false) const textHeading = { title: 'APBDes', des: 'Transparansi APBDes Darmasaba adalah langkah nyata menuju tata kelola desa yang bersih, terbuka, dan bertanggung jawab.' } useEffect(() => { if (state.findMany.data) { setChartData( state.findMany.data.map((item: any) => ({ id: item.id, name: item.name, jumlah: parseJumlah(item.jumlah), })) ); } }, [state.findMany.data]); useEffect(() => { const loadData = async () => { try { setMounted(true); setLoading(true) await state.findMany.load() } catch (error) { console.error('Error loading data:', error) } finally { setLoading(false) } } loadData() }, []) const data = (state.findMany.data || []).slice(0, 3) return ( {textHeading.title} {textHeading.des} {/* Chart */} Grafik APBDes {mounted && chartData.length > 0 ? ( { if (value >= 1_000_000_000_000) return `Rp ${(value / 1_000_000_000_000).toFixed(1)} T`; if (value >= 1_000_000_000) return `Rp ${(value / 1_000_000_000).toFixed(1)} M`; if (value >= 1_000_000) return `Rp ${(value / 1_000_000).toFixed(1)} JT`; if (value >= 1_000) return `Rp ${(value / 1_000).toFixed(1)} RB`; return `Rp ${value}`; }} series={[ { name: 'jumlah', color: colors['blue-button'], label: 'Jumlah', }, ]} /> ) : ( Belum ada data untuk ditampilkan dalam grafik )} Jumlah {loading ? (
) : data.length === 0 ? (
Belum ada data APBDes yang tersedia Data akan ditampilkan di sini setelah diunggah
) : ( data.map((v, k) => ( {v.name} {v.jumlah} )) )}
) } export default Apbdes