/* eslint-disable react-hooks/exhaustive-deps */ 'use client'; import { useProxy } from 'valtio/utils'; import { Box, Button, Group, Image, Paper, Skeleton, Stack, Table, TableTbody, TableTd, TableTh, TableThead, TableTr, Text } from '@mantine/core'; import { IconArrowBack, IconEdit, IconFile, IconTrash } from '@tabler/icons-react'; import { useParams, useRouter } from 'next/navigation'; import { useEffect, useState } from 'react'; import colors from '@/con/colors'; import { ModalKonfirmasiHapus } from '../../../_com/modalKonfirmasiHapus'; import apbdes from '../../../_state/landing-page/apbdes'; import RealisasiManager from './RealisasiManager'; function DetailAPBDes() { const apbdesState = useProxy(apbdes); const [modalHapus, setModalHapus] = useState(false); const [selectedId, setSelectedId] = useState(null); const params = useParams(); const router = useRouter(); useEffect(() => { if (!params?.id) return; apbdesState.findUnique.load(params.id as string); }, [params?.id]); const handleHapus = () => { if (selectedId) { apbdesState.delete.byId(selectedId); setModalHapus(false); setSelectedId(null); router.push('/admin/landing-page/apbdes'); } }; if (!apbdesState.findUnique.data) { return ( ); } const data = apbdesState.findUnique.data; // Helper: indentasi berdasarkan level const getIndent = (level: number) => ({ paddingLeft: `${(level - 1) * 20}px`, }); return ( Detail APBDes {/* Info Header */} Nama APBDes {data.name || `APBDes Tahun ${data.tahun}`} Tahun {data.tahun || '-'} {data.deskripsi && ( Deskripsi {data.deskripsi} )} {data.jumlah && ( Jumlah Total {data.jumlah} )} Gambar {data.image?.link ? ( {data.name ) : ( Tidak ada gambar )} Dokumen {data.file?.link ? ( ) : ( Tidak ada dokumen )} {/* Tabel Items */} {data.items && data.items.length > 0 ? ( Rincian Pendapatan & Belanja ({data.items.length} item) Uraian Anggaran (Rp) Realisasi (Rp) Selisih (Rp) Persentase (%) {[...data.items] .sort((a, b) => a.kode.localeCompare(b.kode)) .map((item) => ( {item.kode} {item.uraian} {item.anggaran.toLocaleString('id-ID')} {item.totalRealisasi.toLocaleString('id-ID')} = 0 ? 'green' : 'red'}> {item.selisih.toLocaleString('id-ID')} {item.persentase.toFixed(2)}% ))}
{/* Realisasi Manager untuk setiap item */} {data.items.map((item) => ( ))}
) : ( Belum ada data item )}
setModalHapus(false)} onConfirm={handleHapus} text="Apakah Anda yakin ingin menghapus APBDes ini?" />
); } export default DetailAPBDes;