'use client'; import { FC, useState, useEffect } from 'react'; import { Modal } from '@/components/atoms/Modal'; import { Button } from '@/components/atoms/Button'; import { formatStatus } from '@/helpers/formatStatus'; type Props = { isOpen: boolean; onClose: () => void; gift?: Gift; yearId: string; personId?: string; onSave: (data: { title: string; description: string; link: string; cost: number; imageUrl: string; status: 'planned' | 'decided' | 'bought' | 'wrapped'; year: string; person: string; }) => Promise; }; export const GiftModal: FC = ({ isOpen, onClose, gift, yearId, personId, onSave }) => { const [title, setTitle] = useState(gift?.title || ''); const [description, setDescription] = useState(gift?.description || ''); const [link, setLink] = useState(gift?.link || ''); const [cost, setCost] = useState(gift?.cost || 0); const [imageUrl, setImageUrl] = useState(gift?.imageUrl || ''); const [status, setStatus] = useState(gift?.status || 'planned'); const [selectedPersonId, setSelectedPersonId] = useState(personId || ''); const [isLoading, setIsLoading] = useState(false); useEffect(() => { if (gift) { setTitle(gift.title); setDescription(gift.description || ''); setLink(gift.link || ''); setCost(gift.cost); setImageUrl(gift.imageUrl || ''); setStatus(gift.status); setSelectedPersonId(gift.person); } else { setTitle(''); setDescription(''); setLink(''); setCost(0); setImageUrl(''); setStatus('planned'); setSelectedPersonId(personId || ''); } }, [gift, personId, isOpen]); const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); setIsLoading(true); try { await onSave({ title, description, link, cost, imageUrl, status, year: yearId, person: selectedPersonId, }); onClose(); } catch (error) { console.error('Error saving gift:', error); } finally { setIsLoading(false); } }; return ( }>
setTitle(e.target.value)} className='w-full px-4 py-2 border border-gray-300 rounded-xl focus:ring-2 focus:ring-blue-500 focus:border-transparent outline-none transition-all' required disabled={isLoading} />