'use client' import colors from '@/con/colors'; import { Box, Button, Center, Group, Pagination, Paper, Skeleton, Stack, Table, TableTbody, TableTd, TableTh, TableThead, TableTr, Text, Title } from '@mantine/core'; import { useShallowEffect } from '@mantine/hooks'; import { IconEdit, IconPlus, IconSearch, IconTrash } from '@tabler/icons-react'; import { useRouter } from 'next/navigation'; import { useState } from 'react'; import { useProxy } from 'valtio/utils'; import HeaderSearch from '../../../_com/header'; import { ModalKonfirmasiHapus } from '../../../_com/modalKonfirmasiHapus'; import PendapatanAsliDesa from '../../../_state/ekonomi/PADesa'; function Belanja() { const [search, setSearch] = useState(""); return ( } value={search} onChange={(e) => setSearch(e.currentTarget.value)} /> ); } function ListBelanja({ search }: { search: string }) { const belanjaState = useProxy(PendapatanAsliDesa.belanja); const router = useRouter(); const [modalHapus, setModalHapus] = useState(false); const [selectedId, setSelectedId] = useState(null); const { data, loading, load, page, totalPages, } = belanjaState.findMany; const formatRupiah = (value: number) => new Intl.NumberFormat('id-ID', { style: 'currency', currency: 'IDR', minimumFractionDigits: 0, }).format(value); const totalBelanja = data?.reduce((sum, item) => sum + item.value, 0) || 0; const handleDelete = () => { if (selectedId) { belanjaState.delete.byId(selectedId); setModalHapus(false); setSelectedId(null); load(page, 10, search); } }; useShallowEffect(() => { load(page, 10, search); }, [page, search]); const filteredData = data || []; if (loading || !data) { return ( ); } return ( Daftar Belanja Nama Nilai Persentase Aksi {filteredData.length > 0 ? ( <> {filteredData.map((item) => ( {item.name} {formatRupiah(item.value)} {totalBelanja > 0 ? ((item.value / totalBelanja) * 100).toFixed(0) + '%' : '0%'} ))} Total {formatRupiah(totalBelanja)} ) : (
Tidak ada data belanja yang cocok
)}
{/* Pagination */}
{ load(newPage, 10, search); window.scrollTo({ top: 0, behavior: 'smooth' }); }} total={totalPages} mt="md" mb="md" color="blue" radius="md" />
{/* Modal Konfirmasi Hapus */} setModalHapus(false)} onConfirm={handleDelete} text="Apakah anda yakin ingin menghapus belanja ini?" />
); } export default Belanja;