import { useState } from 'react'; import { Pencil, Trash2, ChevronDown, ChevronUp, Plus, CreditCard } from 'lucide-react'; import { fmt, estimatedPayoff, today, parseAmount } from '../utils.js'; import Modal from './Modal.jsx'; function PaymentForm({ loan, onSave, onClose }) { const [amount, setAmount] = useState(loan.monthly_payment ?? ''); const [date, setDate] = useState(today()); const [notes, setNotes] = useState(''); function submit(e) { e.preventDefault(); if (isNaN(parseAmount(amount))) return; onSave({ amount: parseAmount(amount), payment_date: date, notes: notes.trim() || null }); onClose(); } return (
setAmount(e.target.value)} required autoFocus />
setDate(e.target.value)} />
setNotes(e.target.value)} placeholder="Valfri notering" />
); } export default function LoanCard({ loan, payments = [], onPayment, onEdit, onDelete }) { const [expanded, setExpanded] = useState(false); const [payModal, setPayModal] = useState(false); const progress = loan.original_amount > 0 ? Math.min(100, Math.round(((loan.original_amount - loan.current_balance) / loan.original_amount) * 100)) : 0; const payoff = estimatedPayoff(loan.current_balance, loan.monthly_payment, loan.interest_rate); const isPaidOff = loan.current_balance <= 0; return (

{loan.name}

{loan.notes &&

{loan.notes}

}
{loan.is_active && ( )}
{isPaidOff ? 'Betalt!' : `Saldo: ${fmt(loan.current_balance)}`} {progress}% avbetalt
75 ? '#22C55E' : progress > 40 ? '#3B82F6' : '#6366F1', }} />

Ursprung

{fmt(loan.original_amount)}

Månadsbet.

{fmt(loan.monthly_payment)}

Klar ca

{payoff ?? '–'}

{loan.interest_rate > 0 && (

Ränta: {loan.interest_rate}%

)}
{payments.length > 0 && ( <> {expanded && (
{payments.map(p => (
{p.payment_date} {p.notes && {p.notes}} −{fmt(p.amount)}
))}
)} )} {payModal && ( setPayModal(false)}> { onPayment(loan.id, data); setPayModal(false); }} onClose={() => setPayModal(false)} /> )}
); }