import React, { useMemo } from 'react'; import { BarChart, Bar, XAxis, YAxis, CartesianGrid, Tooltip, Legend, ResponsiveContainer, } from 'recharts'; import type { Karung } from '../../types/api.ts'; interface FeedTrendChartProps { rows: Karung[]; cycleStartDate: string; currentDay: number; } const FeedTrendChart: React.FC = ({ rows, cycleStartDate, currentDay }) => { const chartData = useMemo(() => { const cycleStart = new Date(`${cycleStartDate}T00:00:00`); const dailyData: { label: string; masuk: number; dituang: number; keluar: number }[] = []; for (let d = 0; d <= currentDay; d++) { const date = new Date(cycleStart); date.setDate(cycleStart.getDate() + d); dailyData.push({ label: date.toLocaleDateString('id-ID', { day: '2-digit', month: 'short' }), masuk: 0, dituang: 0, keluar: 0, }); } const byKey = new Map(); for (const row of rows) { const bucket = byKey.get(row.date) ?? { masuk: 0, dituang: 0, keluar: 0 }; bucket.masuk += row.in_today; bucket.dituang += row.feed_use_today ?? 0; bucket.keluar += row.out_today ?? 0; byKey.set(row.date, bucket); } for (let d = 0; d <= currentDay; d++) { const date = new Date(cycleStart); date.setDate(cycleStart.getDate() + d); const key = `${date.getFullYear()}-${String(date.getMonth() + 1).padStart(2, '0')}-${String( date.getDate() ).padStart(2, '0')}`; const bucket = byKey.get(key); const entry = dailyData[d]; if (bucket && entry) { entry.masuk = bucket.masuk; entry.dituang = bucket.dituang; entry.keluar = bucket.keluar; } } return dailyData; }, [rows, cycleStartDate, currentDay]); const seriesLabel = (name: string) => { if (name === 'masuk') return 'Karung Masuk'; if (name === 'dituang') return 'Karung Dituang'; return 'Karung Keluar'; }; return (

Tren Harian Karung IOT

[ `${Number(value ?? 0)} karung`, seriesLabel(String(name)), ]} labelFormatter={(label) => `Tanggal: ${label}`} /> seriesLabel(String(value))} />
); }; export default FeedTrendChart;