import React, { useState, useEffect } from 'react'; import { Balance, Operation, OperationType } from '../types'; interface AddOperationModalProps { isOpen: boolean; onClose: () => void; onAddOperation: (operation: Omit) => void; onUpdateOperation?: (operation: Operation) => void; operationToEdit?: Operation | null; balances: Balance[]; } const AddOperationModal: React.FC = ({ isOpen, onClose, onAddOperation, onUpdateOperation, operationToEdit, balances }) => { const [name, setName] = useState(''); const [description, setDescription] = useState(''); const [group, setGroup] = useState(''); const [amount, setAmount] = useState(''); const [type, setType] = useState(OperationType.EXPENSE); const [date, setDate] = useState(new Date().toISOString().split('T')[0]); const [balanceId, setBalanceId] = useState(''); const [invoice, setInvoice] = useState(null); useEffect(() => { if (operationToEdit) { setName(operationToEdit.name); setDescription(operationToEdit.description); setGroup(operationToEdit.group); setAmount(operationToEdit.amount.toString()); setType(operationToEdit.type); setDate(new Date(operationToEdit.date).toISOString().split('T')[0]); setBalanceId(operationToEdit.balanceId); } else if (balances.length > 0) { setBalanceId(balances[0].id); resetFormFields(); } }, [balances, operationToEdit, isOpen]); const resetFormFields = () => { setName(''); setDescription(''); setGroup(''); setAmount(''); setType(OperationType.EXPENSE); setDate(new Date().toISOString().split('T')[0]); if (balances.length > 0) setBalanceId(balances[0].id); setInvoice(null); }; const handleSubmit = (e: React.FormEvent) => { e.preventDefault(); if (!name || !amount || !balanceId || !group) { alert('Please fill all required fields.'); return; } const operationData = { balanceId, name, description, group, amount: parseFloat(amount), type, date: new Date(date).toISOString(), invoice: invoice ? invoice.name : (operationToEdit?.invoice) }; if (operationToEdit && onUpdateOperation) { onUpdateOperation({ ...operationData, id: operationToEdit.id }); } else { onAddOperation(operationData); } resetForm(); }; const resetForm = () => { resetFormFields(); onClose(); }; if (!isOpen) return null; return (

{operationToEdit ? 'Edit Operation' : 'Add New Operation'}

setName(e.target.value)} className="w-full mt-1 px-3 py-2 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-gray-800 transition" />
setGroup(e.target.value)} className="w-full mt-1 px-3 py-2 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-gray-800 transition" />
setAmount(e.target.value)} className="w-full mt-1 px-3 py-2 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-gray-800 transition" />
setDate(e.target.value)} className="w-full mt-1 px-3 py-2 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-gray-800 transition" />
{type === OperationType.EXPENSE && (
setInvoice(e.target.files ? e.target.files[0] : null)} className="w-full mt-1 text-sm text-gray-500 file:mr-4 file:py-2 file:px-4 file:rounded-full file:border-0 file:text-sm file:font-semibold file:bg-gray-100 file:text-gray-700 hover:file:bg-gray-200" />
)}
); }; export default AddOperationModal;