import React, { useState } from 'react'; import { CycleFeedInitialBalance } from '../../types/counting.ts'; import { formatNumber } from '../../utils/formatters.ts'; interface InitialBalanceCardProps { cycleId: string; initialBalance: CycleFeedInitialBalance | null; onSave: (saldoAwal: number) => Promise; } const InitialBalanceCard: React.FC = ({ cycleId: _cycleId, initialBalance, onSave, }) => { const [isEditing, setIsEditing] = useState(false); const [editValue, setEditValue] = useState(initialBalance?.saldoAwal || 0); const [validationError, setValidationError] = useState(''); const [isSaving, setIsSaving] = useState(false); const handleEdit = () => { setEditValue(initialBalance?.saldoAwal || 0); setValidationError(''); setIsEditing(true); }; const handleCancel = () => { setIsEditing(false); setEditValue(initialBalance?.saldoAwal || 0); setValidationError(''); }; const handleSave = async () => { // Validation if (editValue < 0) { setValidationError('Saldo awal tidak boleh negatif'); return; } if (!Number.isInteger(editValue)) { setValidationError('Saldo awal harus bilangan bulat'); return; } setIsSaving(true); try { await onSave(editValue); setIsEditing(false); setValidationError(''); } catch (error) { console.error('Failed to save initial balance:', error); setValidationError('Gagal menyimpan. Coba lagi.'); } finally { setIsSaving(false); } }; const formatLastUpdate = () => { if (!initialBalance) return null; const date = new Date(initialBalance.updatedAt); // Check if date is valid if (isNaN(date.getTime())) { return null; // Return null if date is invalid, won't show the update info } const formattedDate = date.toLocaleDateString('id-ID', { day: 'numeric', month: 'short', year: 'numeric', }); const formattedTime = date.toLocaleTimeString('id-ID', { hour: '2-digit', minute: '2-digit', }); return `${formattedDate} ${formattedTime}${initialBalance.createdBy ? ` oleh ${initialBalance.createdBy}` : ''}`; }; return (

Saldo Karung Awal

Stok awal karung pakan untuk siklus ini

{!isEditing && ( )}
{isEditing ? (
setEditValue(parseInt(e.target.value) || 0)} className="flex-1 px-4 py-3 border-2 border-blue-300 rounded-lg text-2xl font-bold text-gray-800 focus:outline-none focus:border-blue-500" placeholder="0" min="0" step="1" /> karung
{validationError && (

{validationError}

)}
) : (
{initialBalance && initialBalance.saldoAwal > 0 ? ( <>

{formatNumber(initialBalance.saldoAwal)}

karung

{formatLastUpdate() && (

Terakhir diperbarui: {formatLastUpdate()}

)} ) : (

Saldo karung awal belum diatur

Klik Edit untuk menambahkan

)}
)}
); }; export default InitialBalanceCard;