From a791efe76c26744f3988a735820f909d5064f06a Mon Sep 17 00:00:00 2001 From: nico Date: Tue, 3 Mar 2026 16:47:26 +0800 Subject: [PATCH] fix(grafik): sync grafikRealisasi with totalRealisasi field Fix: - Change i.realisasi to i.totalRealisasi in Summary component - Change i.realisasi to i.totalRealisasi in total calculation - Add fragment wrapper <> to fix Box children type error - Reorder Total Keseluruhan section to top (before category breakdown) Now grafik shows correct data from multiple realisasi items. Co-authored-by: Qwen-Coder --- .../main-page/apbdes/lib/grafikRealisasi.tsx | 62 ++++++++++--------- 1 file changed, 32 insertions(+), 30 deletions(-) diff --git a/src/app/darmasaba/_com/main-page/apbdes/lib/grafikRealisasi.tsx b/src/app/darmasaba/_com/main-page/apbdes/lib/grafikRealisasi.tsx index 58f8dca3..81c480ff 100644 --- a/src/app/darmasaba/_com/main-page/apbdes/lib/grafikRealisasi.tsx +++ b/src/app/darmasaba/_com/main-page/apbdes/lib/grafikRealisasi.tsx @@ -5,7 +5,7 @@ function Summary({ title, data }: any) { if (!data || data.length === 0) return null; const totalAnggaran = data.reduce((s: number, i: any) => s + i.anggaran, 0); - const totalRealisasi = data.reduce((s: number, i: any) => s + i.realisasi, 0); + const totalRealisasi = data.reduce((s: number, i: any) => s + i.totalRealisasi, 0); const persen = totalAnggaran > 0 ? (totalRealisasi / totalAnggaran) * 100 : 0; @@ -36,38 +36,38 @@ function Summary({ title, data }: any) { {persen.toFixed(2)}% - + Realisasi: {formatRupiah(totalRealisasi)} / Anggaran: {formatRupiah(totalAnggaran)} - - - + {persen >= 100 && ( ✓ Realisasi mencapai 100% dari anggaran )} - + {persen < 100 && persen >= 80 && ( ⚡ Realisasi baik, mendekati target )} - + {persen < 80 && persen >= 60 && ( ⚠️ Realisasi cukup, perlu ditingkatkan )} - + {persen < 60 && ( ⚠️ Realisasi rendah, perlu perhatian khusus @@ -87,7 +87,7 @@ export default function GrafikRealisasi({ apbdesData }: any) { // Hitung total keseluruhan const totalAnggaranSemua = items.reduce((s: number, i: any) => s + i.anggaran, 0); - const totalRealisasiSemua = items.reduce((s: number, i: any) => s + i.realisasi, 0); + const totalRealisasiSemua = items.reduce((s: number, i: any) => s + i.totalRealisasi, 0); const persenSemua = totalAnggaranSemua > 0 ? (totalRealisasiSemua / totalAnggaranSemua) * 100 : 0; const formatRupiah = (angka: number) => { @@ -105,30 +105,32 @@ export default function GrafikRealisasi({ apbdesData }: any) { GRAFIK REALISASI APBDes {tahun} + {/* Summary Total Keseluruhan */} + + <> + + TOTAL KESELURUHAN + = 100 ? 'teal' : persenSemua >= 80 ? 'blue' : 'red'}> + {persenSemua.toFixed(2)}% + + + + {formatRupiah(totalRealisasiSemua)} / {formatRupiah(totalAnggaranSemua)} + + = 100 ? 'teal' : persenSemua >= 80 ? 'blue' : 'red'} + /> + + + - - {/* Summary Total Keseluruhan */} - - - TOTAL KESELURUHAN - = 100 ? 'teal' : persenSemua >= 80 ? 'blue' : 'red'}> - {persenSemua.toFixed(2)}% - - - - {formatRupiah(totalRealisasiSemua)} / {formatRupiah(totalAnggaranSemua)} - - = 100 ? 'teal' : persenSemua >= 80 ? 'blue' : 'red'} - /> - ); } \ No newline at end of file