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, updateAsset, removeAsset, type Asset} from '@/store'; import {validatePositiveNumber, validateRequired} from '@/lib/validation'; interface Props { open: boolean; onOpenChange: (open: boolean) => void; asset: Asset | null; } const assetTypes = ['cash', 'investment', 'property', 'vehicle', 'other'] as const; export default function EditAssetDialog({open, onOpenChange, asset}: Props) { const dispatch = useAppDispatch(); const [form, setForm] = useState({name: '', type: '', value: ''}); const [errors, setErrors] = useState({name: '', value: ''}); useEffect(() => { if (asset) { setForm({ name: asset.name, type: asset.type, value: asset.value.toString() }); setErrors({name: '', value: ''}); } }, [asset]); const validate = (): boolean => { const newErrors = {name: '', value: ''}; let isValid = true; if (!validateRequired(form.name)) { newErrors.name = 'Name is required'; isValid = false; } const valueNum = validatePositiveNumber(form.value); if (valueNum === null) { newErrors.value = 'Please enter a valid positive number'; isValid = false; } setErrors(newErrors); return isValid; }; const handleSubmit = (e: React.FormEvent) => { e.preventDefault(); if (!asset || !validate()) return; const valueNum = validatePositiveNumber(form.value); if (valueNum === null) return; dispatch( updateAsset({ id: asset.id, name: form.name.trim(), type: form.type as (typeof assetTypes)[number], value: valueNum, updatedAt: new Date().toISOString() }) ); onOpenChange(false); }; const handleDelete = () => { if (!asset) return; if (confirm(`Are you sure you want to delete "${asset.name}"?`)) { dispatch(removeAsset(asset.id)); onOpenChange(false); } }; if (!asset) return null; return ( Edit Asset Update asset details or delete this asset
setForm({...form, name: e.target.value})} className="input-depth" required /> {errors.name &&

{errors.name}

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

{errors.value}

}
); }