import React, { useMemo } from 'react'; import type { Karung } from '../../types/api.ts'; import { formatNumber } from '../../utils/format.ts'; interface FeedSaldoCardProps { latest: Karung | null; feedInitialBalance: number; cycleStartDate: string; displayDate: string; } const FeedSaldoCard: React.FC = ({ latest, feedInitialBalance, cycleStartDate, displayDate, }) => { const saldoData = useMemo(() => { const inbound = (latest?.in_total ?? 0) + feedInitialBalance; const feedUse = latest?.feed_use_total ?? 0; const keluar = latest?.out_total ?? 0; const saldo = inbound - feedUse - keluar; return { inbound, feedUse, keluar, saldo }; }, [latest, feedInitialBalance]); const formatDateRange = useMemo(() => { const formatDate = (iso: string) => new Intl.DateTimeFormat('id-ID', { day: 'numeric', month: 'long', year: 'numeric', }).format(new Date(`${iso}T00:00:00`)); return `${formatDate(cycleStartDate)} - ${formatDate(displayDate)}`; }, [cycleStartDate, displayDate]); const getSaldoStatusColor = (saldo: number) => { if (saldo > 0) return 'text-green-600'; if (saldo < 0) return 'text-red-600'; return 'text-gray-600'; }; return (

Saldo Karung IOT

{formatDateRange}

{/* Saldo Display */}
{/* Karung Masuk */}

Karung Masuk

{formatNumber(saldoData.inbound)}

karung

{/* Karung Dituang (feed use) */}

Karung Dituang

{formatNumber(saldoData.feedUse)}

karung

{/* Karung Keluar */}

Karung Keluar

{formatNumber(saldoData.keluar)}

karung

{/* Saldo */}

Saldo

{formatNumber(saldoData.saldo)}

karung

Saldo = karung masuk − karung dituang − karung keluar.

{/* Warning for negative saldo */} {saldoData.saldo < 0 && (

Peringatan: Saldo negatif menunjukkan karung dituang lebih banyak dari karung masuk. Periksa kembali data sinkronisasi karung-web-admin.

)}
); }; export default FeedSaldoCard;