import React from 'react'; import { formatNumber } from '../../utils/format.ts'; import { formatChillFactor, type ExperienceCalc } from './chillFactor.ts'; const DEGREE_C = '\u00B0C'; const oneDecimal = (value: number | null): string => value === null ? '--' : formatNumber(value, 1); const formatSigned = (value: number | null): string => { if (value === null) return '--'; const sign = value > 0 ? '+' : ''; return `${sign}${oneDecimal(value)} ${DEGREE_C}`; }; export interface IotPanelExperienceTempCardProps { calc: ExperienceCalc; apiExperienceTemp: number | null | undefined; } const IotPanelExperienceTempCard: React.FC = ({ calc, apiExperienceTemp, }) => { const calculationRows = [ { label: 'Kecepatan angin', value: calc.windSpeed === null ? '--' : `${oneDecimal(calc.windSpeed)} m/s`, note: 'Dari sensor angin kandang', }, { label: 'Chill factor', value: formatChillFactor(calc.chillFactor), note: 'Berdasarkan grafik chill factor', }, { label: 'Koreksi RH', value: formatSigned(calc.humidityAdjustment), note: '(RH - 70) / 5', }, { label: 'Suhu rata-rata', value: calc.averageTemp === null ? '--' : `${oneDecimal(calc.averageTemp)} ${DEGREE_C}`, note: 'Suhu rata-rata dari Panel', }, { label: 'Chill effect', value: formatSigned(calc.chillEffect), note: '(Angin x chill factor) - koreksi RH', }, ]; const apiDiffers = apiExperienceTemp != null && calc.experienceTemp != null && Math.abs(apiExperienceTemp - calc.experienceTemp) > 0.05; return (

Experience Suhu

Suhu yang dirasakan oleh ayam.

{calc.experienceTemp === null ? 'N/A' : `${oneDecimal(calc.experienceTemp)} ${DEGREE_C}`}

{calculationRows.map((item) => (
{item.label} {item.value}

{item.note}

))}
Experience suhu = Suhu rata-rata - chill effect. {apiDiffers && apiExperienceTemp != null && ( Nilai tercatat Panel: {oneDecimal(apiExperienceTemp)} {DEGREE_C}. )}
); }; export default IotPanelExperienceTempCard;