'use client'; import { useState, useEffect } from 'react'; import { Product, CreateProductData, UpdateProductData, PRODUCT_TYPES } from '@/types/product'; import { PlusIcon, XMarkIcon } from '@heroicons/react/24/outline'; interface ProductFormProps { product?: Product | null; packageName: string; onSubmit: (data: CreateProductData | UpdateProductData) => Promise; onCancel: () => void; isLoading: boolean; } export default function ProductForm({ product, packageName, onSubmit, onCancel, isLoading }: ProductFormProps) { const [formData, setFormData] = useState({ title: '', price: 0, type: 4, discounted_price: '', daily_price: '', discount: '', is_best_seller: false, sort_order: 0, }); const [descriptions, setDescriptions] = useState([]); const [newDescription, setNewDescription] = useState(''); useEffect(() => { if (product) { setFormData({ title: product.title || '', price: product.price || 0, type: product.type || 4, discounted_price: product.discounted_price || '', daily_price: product.daily_price || '', discount: product.discount || '', is_best_seller: product.is_best_seller || false, sort_order: product.sort_order || 0, }); setDescriptions(product.descriptions || []); } }, [product]); const handleInputChange = (e: React.ChangeEvent) => { const { name, value, type } = e.target; if (type === 'checkbox') { const { checked } = e.target as HTMLInputElement; setFormData(prev => ({ ...prev, [name]: checked })); return; } setFormData(prev => ({ ...prev, [name]: name === 'price' || name === 'sort_order' ? parseInt(value) || 0 : value, })); }; const handleAddDescription = () => { if (newDescription.trim()) { setDescriptions([...descriptions, newDescription.trim()]); setNewDescription(''); } }; const handleRemoveDescription = (index: number) => { setDescriptions(descriptions.filter((_, i) => i !== index)); }; const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); const submitData = { ...formData, ...(descriptions.length > 0 && { descriptions }), }; await onSubmit(submitData); }; const inputClass = 'block w-full px-4 py-2.5 text-sm text-gray-900 dark:text-gray-100 border border-gray-200 dark:border-gray-700 rounded-xl bg-gray-50 dark:bg-gray-800/60 placeholder-gray-400 dark:placeholder-gray-500 focus:ring-2 focus:ring-indigo-500/20 focus:border-indigo-500 dark:focus:border-indigo-400 transition-colors'; const labelClass = 'block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1.5'; return (

{product ? 'ویرایش محصول' : 'ایجاد محصول جدید'} برای پکیج {packageName}

setNewDescription(e.target.value)} className={`flex-1 ${inputClass}`} placeholder="ویژگی جدید را وارد کنید" onKeyDown={(e) => { if (e.key === 'Enter') { e.preventDefault(); handleAddDescription(); } }} />
{descriptions.length > 0 && (
    {descriptions.map((desc, index) => (
  • {desc}
  • ))}
)}
); }