import {useState, useEffect} from 'react'; import {Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle} from '@/components/ui/dialog'; import {Select, SelectContent, SelectItem, SelectTrigger, SelectValue} from '@/components/ui/select'; import {Button} from '@/components/ui/button'; import {Input} from '@/components/ui/input'; import {Label} from '@/components/ui/label'; import {useAppDispatch, updateLiability, deleteLiability, type Liability} from '@/store'; import {validatePositiveNumber, validateRequired} from '@/lib/validation'; interface Props { open: boolean; onOpenChange: (open: boolean) => void; liability: Liability | null; } const liabilityTypes = ['credit_card', 'loan', 'mortgage', 'other'] as const; export default function EditLiabilityDialog({open, onOpenChange, liability}: Props) { const dispatch = useAppDispatch(); const [form, setForm] = useState({name: '', type: '', balance: ''}); const [errors, setErrors] = useState({name: '', balance: ''}); useEffect(() => { if (liability) { setForm({ name: liability.name, type: liability.type, balance: liability.balance.toString() }); setErrors({name: '', balance: ''}); } }, [liability]); const validate = (): boolean => { const newErrors = {name: '', balance: ''}; let isValid = true; if (!validateRequired(form.name)) { newErrors.name = 'Name is required'; isValid = false; } const balanceNum = validatePositiveNumber(form.balance); if (balanceNum === null) { newErrors.balance = 'Please enter a valid positive number'; isValid = false; } setErrors(newErrors); return isValid; }; const handleSubmit = (e: React.FormEvent) => { e.preventDefault(); if (!liability || !validate()) return; const balanceNum = validatePositiveNumber(form.balance); if (balanceNum === null) return; dispatch( updateLiability({ id: liability.id, data: { name: form.name.trim(), type: form.type.toUpperCase() as 'CREDIT_CARD' | 'LOAN' | 'MORTGAGE' | 'OTHER', currentBalance: balanceNum, } }) ); onOpenChange(false); }; const handleDelete = () => { if (!liability) return; if (confirm(`Are you sure you want to delete "${liability.name}"?`)) { dispatch(deleteLiability(liability.id)); onOpenChange(false); } }; if (!liability) return null; return ( Edit Liability Update liability details or delete this liability
setForm({...form, name: e.target.value})} className="input-depth" required /> {errors.name &&

{errors.name}

}
setForm({...form, balance: e.target.value})} className="input-depth" required /> {errors.balance &&

{errors.balance}

}
); }