import React from 'react'; import { CartesianGrid, Line, LineChart, ReferenceDot, ReferenceLine, ResponsiveContainer, Tooltip, XAxis, YAxis, } from 'recharts'; import { CHICKEN_CHILL_FACTOR_POINTS, chickenChillFactorFromAge, formatChillFactor, } from './chillFactor.ts'; const CHILL_FACTOR_BASE_MAX_DAY = CHICKEN_CHILL_FACTOR_POINTS[CHICKEN_CHILL_FACTOR_POINTS.length - 1]!.age; export interface IotPanelChillFactorCardProps { dayAge: number | null | undefined; chillFactor: number | null | undefined; } const IotPanelChillFactorCard: React.FC = ({ dayAge, chillFactor, }) => { const dayAgeValue = dayAge != null && Number.isFinite(Number(dayAge)) ? Math.max(0, Number(dayAge)) : null; const chartMinDay = CHICKEN_CHILL_FACTOR_POINTS[0]!.age; const chartMaxDay = Math.max(CHILL_FACTOR_BASE_MAX_DAY, Math.ceil(dayAgeValue ?? 0)); const chillFactorChartData = Array.from({ length: chartMaxDay - chartMinDay + 1 }, (_, idx) => { const day = chartMinDay + idx; return { day, factor: chickenChillFactorFromAge(day) ?? 0 }; }); const chillFactorXAxisTicks = Array.from(new Set([0, 7, 14, 21, 28, 35, 42, chartMaxDay])).filter( (day) => day <= chartMaxDay ); const currentChillPoint = dayAgeValue !== null && chillFactor != null && Number.isFinite(Number(chillFactor)) ? { day: dayAgeValue, factor: Number(chillFactor) } : null; const chillFactorChartLabel = currentChillPoint ? `Grafik chill factor. Umur ayam hari ${currentChillPoint.day}, chill factor ${formatChillFactor(currentChillPoint.factor)}.` : 'Grafik chill factor belum tersedia karena umur ayam tidak tersedia.'; return (

Grafik Chill Factor

Grafik berdasarkan umur ayam untuk estimasi efek angin pada suhu terasa.

{formatChillFactor(chillFactor)}
`${Number(value)}`} stroke="#64748b" fontSize={11} label={{ value: 'Umur (hari)', position: 'insideBottom', offset: -2, fill: '#64748b', fontSize: 11, }} /> `${Number(value).toString().replace('.', ',')}`} stroke="#64748b" fontSize={11} width={44} /> `Hari ${Number(day).toFixed(0)}`} formatter={(value) => [formatChillFactor(Number(value)), 'Chill factor']} /> {currentChillPoint && ( <> )}
); }; export default IotPanelChillFactorCard;