import { useState, useEffect } from 'react' import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogFooter } from '@/components/ui/dialog' import { Button } from '@/components/ui/button' import { Input } from '@/components/ui/input' import { Label } from '@/components/ui/label' import { Textarea } from '@/components/ui/textarea' import { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/popover' import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '@/components/ui/tooltip' import { SmilePlus, Info } from 'lucide-react' import data from '@emoji-mart/data' import Picker from '@emoji-mart/react' import { WishlistItemType } from '@/lib/types' interface AddEditWishlistItemModalProps { isOpen: boolean onClose: () => void onSave: (item: Omit) => void item?: WishlistItemType | null } export default function AddEditWishlistItemModal({ isOpen, onClose, onSave, item }: AddEditWishlistItemModalProps) { const [name, setName] = useState(item?.name || '') const [description, setDescription] = useState(item?.description || '') const [coinCost, setCoinCost] = useState(item?.coinCost || 1) const [targetCompletions, setTargetCompletions] = useState(item?.targetCompletions) const [errors, setErrors] = useState<{ [key: string]: string }>({}) useEffect(() => { if (item) { setName(item.name) setDescription(item.description) setCoinCost(item.coinCost) setTargetCompletions(item.targetCompletions) } else { setName('') setDescription('') setCoinCost(1) setTargetCompletions(undefined) } setErrors({}) }, [item]) const validate = () => { const newErrors: { [key: string]: string } = {} if (!name.trim()) { newErrors.name = 'Name is required' } if (coinCost < 1) { newErrors.coinCost = 'Coin cost must be at least 1' } if (targetCompletions !== undefined && targetCompletions < 1) { newErrors.targetCompletions = 'Target completions must be at least 1' } setErrors(newErrors) return Object.keys(newErrors).length === 0 } const handleSubmit = (e: React.FormEvent) => { e.preventDefault() if (!validate()) return onSave({ name, description, coinCost, targetCompletions: targetCompletions || undefined }) } return ( {item ? 'Edit Reward' : 'Add New Reward'}
setName(e.target.value)} className="flex-1" required /> { setName(prev => `${prev}${emoji.native}`) // Focus back on input after selection const input = document.getElementById('name') as HTMLInputElement input?.focus() }} />