import React, { useMemo } from 'react';
import type { Karung, ManualInput } from '../../types/api.ts';
import { formatNumber } from '../../utils/format.ts';
const StatItem: React.FC<{
icon: React.ReactNode;
label: string;
value: number | null;
colorOverride?: string;
}> = ({ icon, label, value, colorOverride }) => (
{value == null ? formatNumber(0) : formatNumber(value)}
karung
);
interface FeedStatsProps {
latest: Karung | null;
latestManual: ManualInput | null;
cycleStartDate: string;
displayDate: string;
}
const FeedStats: React.FC = ({
latest,
latestManual,
cycleStartDate,
displayDate,
}) => {
const formatDisplayDate = (iso: string) =>
new Intl.DateTimeFormat('id-ID', {
day: 'numeric',
month: 'long',
year: 'numeric',
}).format(new Date(`${iso}T00:00:00`));
const todayLabel = useMemo(() => formatDisplayDate(displayDate), [displayDate]);
const totalCycleLabel = useMemo(() => {
const start = new Intl.DateTimeFormat('id-ID', {
day: 'numeric',
month: 'short',
}).format(new Date(`${cycleStartDate}T00:00:00`));
const end = new Intl.DateTimeFormat('id-ID', {
day: 'numeric',
month: 'short',
}).format(new Date(`${displayDate}T00:00:00`));
return `Total (${start} - ${end})`;
}, [cycleStartDate, displayDate]);
const columns = useMemo(
() => [
{
key: 'masuk',
title: 'Karung Masuk',
color: '#2563eb',
icon: ,
iotToday: latest?.in_today ?? 0,
iotTotal: latest?.in_total ?? 0,
manualToday: latestManual?.feed_in_manual ?? 0,
manualTotal: latestManual?.feed_in_manual_total ?? 0,
},
{
key: 'dituang',
title: 'Karung Dituang',
color: '#ea580c',
icon: ,
iotToday: latest?.feed_use_today ?? 0,
iotTotal: latest?.feed_use_total ?? 0,
manualToday: latestManual?.feed_use_manual ?? 0,
manualTotal: latestManual?.feed_use_manual_total ?? 0,
},
{
key: 'keluar',
title: 'Karung Keluar',
color: '#dc2626',
icon: ,
iotToday: latest?.out_today ?? 0,
iotTotal: latest?.out_total ?? 0,
manualToday: latestManual?.feed_out_manual ?? 0,
manualTotal: latestManual?.feed_out_manual_total ?? 0,
},
],
[latest, latestManual]
);
return (
{columns.map((col) => (
{col.title}
}
label={`IOT · ${todayLabel}`}
value={col.iotToday}
colorOverride={col.color}
/>
}
label={`IOT · ${totalCycleLabel}`}
value={col.iotTotal}
colorOverride={col.color}
/>
}
label={`Manual · ${todayLabel}`}
value={col.manualToday}
colorOverride="#6b7280"
/>
}
label={`Manual · ${totalCycleLabel}`}
value={col.manualTotal}
colorOverride="#6b7280"
/>
))}
);
};
export default FeedStats;