diff --git a/app/dashboard/kelola-data/CetakInstanModal.tsx b/app/dashboard/kelola-data/CetakInstanModal.tsx index cbe6bd3..f195dfc 100644 --- a/app/dashboard/kelola-data/CetakInstanModal.tsx +++ b/app/dashboard/kelola-data/CetakInstanModal.tsx @@ -99,6 +99,7 @@ export function CetakInstanModal() { pengguna: PenggunaData row: HasilItem allHasil: HasilItem[] + idBerkas: number } | null>(null) const templateRef = useRef(null) @@ -176,6 +177,8 @@ export function CetakInstanModal() { folderHandle = await dirHandle.getDirectoryHandle(folderName, { create: true }) } + const currentIdBerkas = Date.now() + // 3. Generation Loop for (let i = 0; i < targets.length; i++) { const b = targets[i] as PenggunaData @@ -190,8 +193,14 @@ export function CetakInstanModal() { setProgress({ current: i + 1, total: targets.length, name: b.nama_anak, mama: b.nama_orang_tua }) + // --- Save to cetak_balita --- + await supabase.from('cetak_balita').insert({ + id_berkas: currentIdBerkas, + nama_balita: b.nama_anak, + }) + // --- Update template and wait for render --- - setActivePrintData({ pengguna: b, row: rowForMonth, allHasil: balitaHasil }) + setActivePrintData({ pengguna: b, row: rowForMonth, allHasil: balitaHasil, idBerkas: currentIdBerkas }) // Give React and Recharts some time to finish rendering the hidden template await new Promise(r => setTimeout(r, 1000)) // 1s buffer for stable DOM & Recharts @@ -395,11 +404,9 @@ export function CetakInstanModal() {

Ibu: {progress.mama}

)} -
-
-

{String(Math.floor(elapsed / 60)).padStart(2, '0')}:{String(elapsed % 60).padStart(2, '0')}

-
-
+
+
+

Estimasi Selesai

{estRemaining !== null ? `${String(Math.floor(estRemaining / 60)).padStart(2, '0')}:${String(estRemaining % 60).padStart(2, '0')}` : '--:--'}

@@ -462,7 +469,7 @@ export function CetakInstanModal() { ['Nama Anak', activePrintData.pengguna.nama_anak], ['Alamat', activePrintData.pengguna.alamat ?? '-'], ['Jenis Kelamin', activePrintData.pengguna.jenis_kelamin ?? '-'], - ['', ''], + ['ID Berkas', String(activePrintData.idBerkas)], ['Tanggal Lahir', tanggalLahir], ].map(([label, value], i) => ( label ? ( @@ -479,9 +486,9 @@ export function CetakInstanModal() {
Grafik Perkembangan Balita (5 Bulan Terakhir)
- {/* Tinggi */} + {/* Panjang */}
-
📏 Tinggi Badan (cm)
+
📏 Panjang Badan (cm)
@@ -542,7 +549,7 @@ export function CetakInstanModal() { - {['Tinggi', 'Berat', 'Z-Score', 'Status Stunting', 'Posyandu', 'Tgl Pemeriksaan'].map(h => ( + {['Panjang', 'Berat', 'Z-Score', 'Status Stunting', 'Posyandu', 'Tgl Pemeriksaan'].map(h => ( ))} @@ -570,17 +577,6 @@ export function CetakInstanModal() { )} - {/* ── WhatsApp Info Box ── */} -
-
📱
-
-
Layanan Informasi WhatsApp
-
- Untuk orang tua yang tidak memiliki akun WhatsApp, yuk segera buat akun karena kami melayani layanan penyampaian informasi hasil stunting dengan menggunakan WhatsApp agar mendapatkan informasi lebih cepat. -
-
-
- {/* ── Portal Access Info Box ── */}
diff --git a/app/dashboard/kelola-data/[id]/CetakPDFButton.tsx b/app/dashboard/kelola-data/[id]/CetakPDFButton.tsx index b54621c..c8523d1 100644 --- a/app/dashboard/kelola-data/[id]/CetakPDFButton.tsx +++ b/app/dashboard/kelola-data/[id]/CetakPDFButton.tsx @@ -8,6 +8,7 @@ import { ResponsiveContainer, } from 'recharts' import { showSwal } from '@/lib/swal' +import { supabase } from '@/lib/supabase' interface HasilItem { id: number @@ -77,6 +78,7 @@ function build5MonthData(allData: HasilItem[], rowDate: Date) { export function CetakPDFButton({ row, allData, pengguna }: Props) { const templateRef = useRef(null) const [loading, setLoading] = useState(false) + const [idBerkas, setIdBerkas] = useState(null) const rowDate = row.tanggal_upload ? new Date(row.tanggal_upload) : new Date() const chartData = useMemo(() => build5MonthData(allData, rowDate), [allData, row.tanggal_upload]) @@ -90,6 +92,17 @@ export function CetakPDFButton({ row, allData, pengguna }: Props) { if (!templateRef.current || loading) return setLoading(true) try { + const currentIdBerkas = Date.now() + setIdBerkas(currentIdBerkas) + + await supabase.from('cetak_balita').insert({ + id_berkas: currentIdBerkas, + nama_balita: pengguna.nama_anak, + }) + + // Tunggu render React selesai (untuk menampilkan ID Berkas) + await new Promise(r => setTimeout(r, 500)) + const { default: html2canvas } = await import('html2canvas') const { default: jsPDF } = await import('jspdf') @@ -176,7 +189,7 @@ export function CetakPDFButton({ row, allData, pengguna }: Props) { ['Nama Anak', pengguna.nama_anak], ['Alamat', pengguna.alamat ?? '-'], ['Jenis Kelamin', pengguna.jenis_kelamin ?? '-'], - ['', ''], + ['ID Berkas', idBerkas ? String(idBerkas) : '-'], ['Tanggal Lahir', tanggalLahir], ].map(([label, value], i) => ( label ? ( @@ -195,9 +208,9 @@ export function CetakPDFButton({ row, allData, pengguna }: Props) { Grafik Perkembangan Balita (5 Bulan Terakhir)
- {/* Tinggi */} + {/* Panjang */}
-
📏 Tinggi Badan (cm)
+
📏 Panjang Badan (cm)
@@ -272,7 +285,7 @@ export function CetakPDFButton({ row, allData, pengguna }: Props) {
{h}
- {['Tinggi', 'Berat', 'Z-Score', 'Status Stunting', 'Posyandu', 'Tgl Pemeriksaan'].map(h => ( + {['Panjang', 'Berat', 'Z-Score', 'Status Stunting', 'Posyandu', 'Tgl Pemeriksaan'].map(h => ( ))} @@ -313,17 +326,6 @@ export function CetakPDFButton({ row, allData, pengguna }: Props) { )} - {/* ── WhatsApp Info Box ── */} -
-
📱
-
-
Layanan Informasi WhatsApp
-
- Untuk orang tua yang tidak memiliki akun WhatsApp, yuk segera buat akun karena kami melayani layanan penyampaian informasi hasil stunting dengan menggunakan WhatsApp agar mendapatkan informasi lebih cepat. -
-
-
- {/* ── Portal Access Info Box ── */}
diff --git a/app/dashboard/kelola-data/[id]/HasilStuntingTable.tsx b/app/dashboard/kelola-data/[id]/HasilStuntingTable.tsx index 93b9fd8..6b79721 100644 --- a/app/dashboard/kelola-data/[id]/HasilStuntingTable.tsx +++ b/app/dashboard/kelola-data/[id]/HasilStuntingTable.tsx @@ -92,7 +92,7 @@ export function HasilStuntingTable({ data, pengguna }: Props) { {/* Header */}
# - Tinggi + Panjang Berat Z-Score Status @@ -121,7 +121,7 @@ export function HasilStuntingTable({ data, pengguna }: Props) { {idx + 1}
- {/* Tinggi Badan */} + {/* Panjang Badan */}
{row.tinggi_badan ?? '-'} {row.tinggi_badan && cm} diff --git a/app/dashboard/kelola-data/[id]/PerkembanganChart.tsx b/app/dashboard/kelola-data/[id]/PerkembanganChart.tsx index 5c4d814..a6cb824 100644 --- a/app/dashboard/kelola-data/[id]/PerkembanganChart.tsx +++ b/app/dashboard/kelola-data/[id]/PerkembanganChart.tsx @@ -107,14 +107,14 @@ export function PerkembanganChart({ data }: Props) { {/* Charts Grid */}
- {/* Tinggi Badan */} + {/* Panjang Badan */}
-

Tinggi Badan

+

Panjang Badan

Dalam satuan cm

diff --git a/app/dashboard/kelola-data/[id]/page.tsx b/app/dashboard/kelola-data/[id]/page.tsx index 3b62225..a29c017 100644 --- a/app/dashboard/kelola-data/[id]/page.tsx +++ b/app/dashboard/kelola-data/[id]/page.tsx @@ -172,7 +172,7 @@ export default async function DetailPenggunaKelolaPage({ params }: Props) {
- {/* Chart Perkembangan Tinggi & Berat */} + {/* Chart Perkembangan Panjang & Berat */} {/* Professional Separator */} diff --git a/app/user-dashboard/perkembangan/ExportPDFButton.tsx b/app/user-dashboard/perkembangan/ExportPDFButton.tsx index c346dcb..b2a4d03 100644 --- a/app/user-dashboard/perkembangan/ExportPDFButton.tsx +++ b/app/user-dashboard/perkembangan/ExportPDFButton.tsx @@ -76,6 +76,7 @@ function build5MonthData(allData: HasilItem[], rowDate: Date) { export function ExportPDFButton({ row, allData, pengguna }: Props) { const templateRef = useRef(null) const [loading, setLoading] = useState(false) + const [idBerkas, setIdBerkas] = useState(null) const rowDate = row.tanggal_upload ? new Date(row.tanggal_upload) : new Date() const chartData = useMemo(() => build5MonthData(allData, rowDate), [allData, row.tanggal_upload]) @@ -89,6 +90,18 @@ export function ExportPDFButton({ row, allData, pengguna }: Props) { if (!templateRef.current || loading) return setLoading(true) try { + const currentIdBerkas = Date.now() + setIdBerkas(currentIdBerkas) + + const { supabase } = await import('@/lib/supabase') + await supabase.from('cetak_balita').insert({ + id_berkas: currentIdBerkas, + nama_balita: pengguna.nama_anak, + }) + + // Tunggu render React selesai (untuk menampilkan ID Berkas) + await new Promise(r => setTimeout(r, 500)) + const { default: html2canvas } = await import('html2canvas') const { default: jsPDF } = await import('jspdf') @@ -174,7 +187,7 @@ export function ExportPDFButton({ row, allData, pengguna }: Props) { ['Nama Anak', pengguna.nama_anak], ['Alamat', pengguna.alamat ?? '-'], ['Jenis Kelamin', pengguna.jenis_kelamin ?? '-'], - ['', ''], + ['ID Berkas', idBerkas ? String(idBerkas) : '-'], ['Tanggal Lahir', tanggalLahir], ].map(([label, value], i) => ( label ? ( @@ -193,9 +206,9 @@ export function ExportPDFButton({ row, allData, pengguna }: Props) { Grafik Pertumbuhan (5 Bulan Terakhir)
- {/* Tinggi */} + {/* Panjang */}
-
📏 Tinggi Badan (cm)
+
📏 Panjang Badan (cm)
@@ -270,7 +283,7 @@ export function ExportPDFButton({ row, allData, pengguna }: Props) {
{h}
- {['Tinggi', 'Berat', 'Z-Score', 'Status Stunting', 'Posyandu', 'Tgl Pemeriksaan'].map(h => ( + {['Panjang', 'Berat', 'Z-Score', 'Status Stunting', 'Posyandu', 'Tgl Pemeriksaan'].map(h => ( ))} @@ -311,17 +324,6 @@ export function ExportPDFButton({ row, allData, pengguna }: Props) { )} - {/* ── WhatsApp Info Box ── */} -
-
📱
-
-
Layanan Informasi WhatsApp
-
- Untuk orang tua yang tidak memiliki akun WhatsApp, yuk segera buat akun karena kami melayani layanan penyampaian informasi hasil stunting dengan menggunakan WhatsApp agar mendapatkan informasi lebih cepat. -
-
-
- {/* ── Portal Access Info Box ── */}
diff --git a/app/user-dashboard/perkembangan/GrowthChart.tsx b/app/user-dashboard/perkembangan/GrowthChart.tsx index 9c8f798..9f64d5a 100644 --- a/app/user-dashboard/perkembangan/GrowthChart.tsx +++ b/app/user-dashboard/perkembangan/GrowthChart.tsx @@ -91,7 +91,7 @@ export function GrowthChart({ data }: Props) { Grafik Pertumbuhan Anak

- Statistik Tinggi, Berat & Z-Score {selectedYear} + Statistik Panjang, Berat & Z-Score {selectedYear}

@@ -120,7 +120,7 @@ export function GrowthChart({ data }: Props) {
-

Tinggi Badan

+

Panjang Badan

Satuan Centimeter (cm)

diff --git a/app/user-dashboard/perkembangan/StuntingTable.tsx b/app/user-dashboard/perkembangan/StuntingTable.tsx index ade1f8d..cab1f9d 100644 --- a/app/user-dashboard/perkembangan/StuntingTable.tsx +++ b/app/user-dashboard/perkembangan/StuntingTable.tsx @@ -90,7 +90,7 @@ export function StuntingTable({ data, pengguna }: Props) {
{/* Header */}
- Tinggi + Panjang Berat Z-Score Status @@ -115,7 +115,7 @@ export function StuntingTable({ data, pengguna }: Props) { key={row.id} className="grid grid-cols-[100px_100px_100px_140px_1fr_160px_160px_120px] items-center px-6 py-6 transition-colors hover:bg-gray-50/50" > - {/* Tinggi Badan */} + {/* Panjang Badan */}
{row.tinggi_badan ?? '-'} {row.tinggi_badan && cm}
{h}