'use client' import { useState, useMemo } from 'react' import { AreaChart, Area, XAxis, YAxis, CartesianGrid, Tooltip, ResponsiveContainer, } from 'recharts' import { Ruler, Weight, ChevronDown, Activity } from 'lucide-react' interface HasilItem { tinggi_badan: number | null berat_badan: number | null z_score: number | null tanggal_upload: string | null } interface Props { data: HasilItem[] } const START_YEAR = 2026 function MiniTooltip({ active, payload, label, unit, color }: any) { if (!active || !payload?.length) return null return (

{label}

{payload[0]?.value ?? '-'} {unit}

) } export function PerkembanganChart({ data }: Props) { const availableYears = useMemo(() => { const currentYear = new Date().getFullYear() const dataYears = Array.from( new Set( data .map(d => d.tanggal_upload ? new Date(d.tanggal_upload).getFullYear() : null) .filter(Boolean) ) ) as number[] const maxYear = Math.max(currentYear, ...dataYears, START_YEAR) return Array.from( new Set([ ...Array.from({ length: maxYear - START_YEAR + 1 }, (_, i) => START_YEAR + i), ...dataYears, ]) ).filter(y => y >= START_YEAR).sort((a, b) => a - b) }, [data]) const [selectedYear, setSelectedYear] = useState(availableYears[0] ?? START_YEAR) const chartData = useMemo(() => { return data .filter(d => { if (!d.tanggal_upload) return false return new Date(d.tanggal_upload).getFullYear() === selectedYear }) .map(d => ({ label: new Date(d.tanggal_upload!).toLocaleDateString('id-ID', { day: 'numeric', month: 'short' }), // Store full date for sorting _date: new Date(d.tanggal_upload!).getTime(), tinggi: d.tinggi_badan, berat: d.berat_badan, zscore: d.z_score, })) .sort((a, b) => a._date - b._date) }, [data, selectedYear]) const hasData = chartData.length > 0 return (
{/* Section header + filter */}

Grafik Perkembangan Balita

Periode:
{/* Charts Grid */}
{/* Tinggi Badan */}

Tinggi Badan

Dalam satuan cm

{!hasData ? (
Tidak ada data untuk tahun {selectedYear}
) : ( } /> )}
{/* Berat Badan */}

Berat Badan

Dalam satuan kg

{!hasData ? (
Tidak ada data untuk tahun {selectedYear}
) : ( } /> )}
{/* Z-Score Chart */}

Z-Score (SD)

Standar Deviasi Pertumbuhan

{!hasData ? (
Tidak ada data untuk tahun {selectedYear}
) : ( } /> )}
) }