import React, { useMemo } from 'react'; import { BarChart, Bar, XAxis, YAxis, CartesianGrid, Tooltip, Legend, ResponsiveContainer, } from 'recharts'; import { FeedSackLogEntry, FeedSackColumnConfig } from '../../types/counting.ts'; interface FeedTrendChartProps { data: FeedSackLogEntry[]; cycleStartDate: Date; currentDay: number; columnConfig: FeedSackColumnConfig[]; } const FeedTrendChart: React.FC = ({ data, cycleStartDate, currentDay, columnConfig, }) => { const cameraNames = useMemo(() => columnConfig.map((c) => c.cameraName), [columnConfig]); const chartData = useMemo(() => { const cycleStart = new Date(cycleStartDate); cycleStart.setHours(0, 0, 0, 0); const cycleEnd = new Date(cycleStart); cycleEnd.setDate(cycleStart.getDate() + currentDay); cycleEnd.setHours(23, 59, 59, 999); // Initialize daily buckets const dailyData: { [key: number]: Record } = {}; for (let d = 0; d <= currentDay; d++) { const date = new Date(cycleStart); date.setDate(cycleStart.getDate() + d); const formattedDate = date.toLocaleDateString('id-ID', { day: '2-digit', month: 'short' }); const entry: Record = { day: `H${d}`, date: formattedDate }; cameraNames.forEach((name) => { entry[name] = 0; }); dailyData[d] = entry; } // Aggregate data by day data.forEach((log) => { if (log.timestamp >= cycleStart && log.timestamp <= cycleEnd) { const diffTime = log.timestamp.getTime() - cycleStart.getTime(); const dayNumber = Math.floor(diffTime / (1000 * 60 * 60 * 24)); if (dayNumber >= 0 && dayNumber <= currentDay && dailyData[dayNumber]) { if (log.cameraName && cameraNames.includes(log.cameraName)) { dailyData[dayNumber][log.cameraName] += log.count; } } } }); return Object.values(dailyData); }, [data, cycleStartDate, currentDay, cameraNames]); return (

Tren Harian Karung Pakan

[`${value} karung`]} labelFormatter={(label) => `Tanggal: ${label}`} /> {columnConfig.map((col) => ( ))}
); }; export default FeedTrendChart;