import { useEffect, useMemo, useState } from 'preact/hooks'; import ModalShell from '../ui/ModalShell'; const EMPTY_ROW = { naziv: '', broj_racuna: '', ukupan_iznos: '', prilog: '', source_invoice_id: '', }; function parseAmount(value) { const normalized = String(value || '').trim().replace('€', '').replace(/\s+/g, '').replace(',', '.'); const parsed = Number(normalized); return Number.isFinite(parsed) ? parsed : 0; } export default function WorkOrderAdditionalCostsModal({ open, workOrder, tableData, saving = false, onClose, onSave, }) { const [rows, setRows] = useState([]); useEffect(() => { if (!open) { setRows([]); return; } const incoming = Array.isArray(tableData?.data?.rows) ? tableData.data.rows : []; setRows(incoming.length > 0 ? incoming.map((row) => ({ ...EMPTY_ROW, ...(row || {}) })) : [{ ...EMPTY_ROW }]); }, [open, tableData]); const total = useMemo(() => { const value = rows.reduce((sum, row) => sum + parseAmount(row.ukupan_iznos), 0); return value.toFixed(2); }, [rows]); if (!open) return null; const updateRowField = (index, field, value) => { setRows((prev) => prev.map((row, i) => (i === index ? { ...row, [field]: value } : row))); }; const addRow = () => setRows((prev) => [...prev, { ...EMPTY_ROW }]); const removeRow = (index) => setRows((prev) => prev.filter((_, i) => i !== index)); const handleSave = async () => { const payloadRows = rows.map((row) => ({ naziv: String(row.naziv || '').trim(), broj_racuna: String(row.broj_racuna || '').trim(), ukupan_iznos: String(row.ukupan_iznos || '').trim(), prilog: String(row.prilog || '').trim(), source_invoice_id: String(row.source_invoice_id || '').trim(), })); await onSave?.({ rows: payloadRows }); }; return (

DODATNI TROŠKOVI

{workOrder?.display_code || workOrder?.id || '-'}

{rows.map((row, index) => ( ))}
# NAZIV Broj računa Ukupan iznos Prilog Akcija
{index + 1} updateRowField(index, 'naziv', event.currentTarget.value)} className="block w-full rounded-lg border border-gray-300 bg-gray-50 px-2.5 py-2 text-xs text-gray-900" /> updateRowField(index, 'broj_racuna', event.currentTarget.value)} className="block w-full rounded-lg border border-gray-300 bg-gray-50 px-2.5 py-2 text-xs text-gray-900" /> updateRowField(index, 'ukupan_iznos', event.currentTarget.value)} className="block w-full rounded-lg border border-gray-300 bg-gray-50 px-2.5 py-2 text-xs text-gray-900" /> updateRowField(index, 'prilog', event.currentTarget.value)} className="block w-full rounded-lg border border-gray-300 bg-gray-50 px-2.5 py-2 text-xs text-gray-900" />
UKUPNO ZA ISPLATU {total} €
); }