'use client'; import { useState, useEffect } from 'react'; import { PackageName, CreatePackageData, UpdatePackageData } from '@/types/package'; import { XMarkIcon, PhotoIcon, DocumentTextIcon } from '@heroicons/react/24/outline'; interface PackageFormProps { package?: PackageName | null; onSubmit: (data: CreatePackageData | UpdatePackageData) => Promise; onCancel: () => void; isLoading: boolean; } export default function PackageForm({ package: pkg, onSubmit, onCancel, isLoading }: PackageFormProps) { const [formData, setFormData] = useState({ name: '', title: '', v1_identifier: '', myket_access_token: '', cafe_config_id: null, web_app_url: '', tries: 0, }); const [avatarFile, setAvatarFile] = useState(null); const [firebaseFile, setFirebaseFile] = useState(null); const [avatarPreview, setAvatarPreview] = useState(null); useEffect(() => { if (pkg) { setFormData({ name: pkg.name || '', title: pkg.title || '', v1_identifier: pkg.v1_identifier || '', myket_access_token: pkg.myket_access_token || '', cafe_config_id: pkg.cafe_config_id, web_app_url: pkg.web_app_url || '', tries: pkg.tries || 0, }); if (pkg.image && typeof pkg.image === 'string') { setAvatarPreview(pkg.image); } } }, [pkg]); const handleInputChange = (e: React.ChangeEvent) => { const { name, value } = e.target; setFormData(prev => ({ ...prev, [name]: value === '' ? null : value })); }; const handleNumberChange = (e: React.ChangeEvent) => { const { name, value } = e.target; setFormData(prev => ({ ...prev, [name]: value === '' ? null : parseInt(value, 10) })); }; const handleAvatarChange = (e: React.ChangeEvent) => { const file = e.target.files?.[0]; if (file) { setAvatarFile(file); setFormData(prev => ({ ...prev, avatar: file })); const reader = new FileReader(); reader.onloadend = () => setAvatarPreview(reader.result as string); reader.readAsDataURL(file); } }; const handleFirebaseChange = (e: React.ChangeEvent) => { const file = e.target.files?.[0]; if (file) { setFirebaseFile(file); setFormData(prev => ({ ...prev, firebase_json: file })); } }; const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); await onSubmit(formData); }; const removeAvatar = () => { setAvatarFile(null); setAvatarPreview(null); setFormData(prev => ({ ...prev, avatar: null })); }; 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 (

{pkg ? 'ویرایش پکیج' : 'ایجاد پکیج جدید'}

{avatarPreview && ( )}
{avatarPreview && (
Preview
)}
{firebaseFile && (

{firebaseFile.name}

)}
); }