'use client'; import { useState, useRef, useMemo, useEffect } from 'react'; import { useForm } from 'react-hook-form'; import { zodResolver } from '@hookform/resolvers/zod'; import { formAdtCreateSchema, type TFormAdtCreateValues } from './schemas'; import Image from 'next/image'; import { Category, Country, City } from '@prisma/client'; import { useRouter } from 'next/navigation'; import toast from 'react-hot-toast'; interface CreateAdtFormProps { categories: Category[]; countries: Country[]; cities: City[]; } export default function AdtCreateForm({ categories, countries, cities }: CreateAdtFormProps) { const [isSubmitting, setIsSubmitting] = useState(false); const [preview, setPreview] = useState(null); const fileInputRef = useRef(null); const router = useRouter(); const { register, handleSubmit, formState: { errors }, reset, setValue, watch } = useForm({ resolver: zodResolver(formAdtCreateSchema), defaultValues: { categoryId: '', } }); const selectedCategory = watch('categoryId'); const [selectedCountry, setSelectedCountry] = useState(null); const [filteredCities, setFilteredCities] = useState([]); const [selectedParentCategory, setSelectedParentCategory] = useState(null); const [filteredSubCategories, setFilteredSubCategories] = useState([]); const parentCategories = useMemo(() => { return categories.filter(cat => !cat.parentId); }, [categories]); useEffect(() => { if (selectedCountry) { const countryCities = cities.filter(city => city.countryId === selectedCountry); setFilteredCities(countryCities); setValue('cityId', ''); } }, [selectedCountry, cities]); useEffect(() => { if (selectedParentCategory) { const subCategories = categories.filter(cat => cat.parentId === selectedParentCategory); setFilteredSubCategories(subCategories); setValue('categoryId', ''); } }, [selectedParentCategory, categories]); const handleImageChange = (e: React.ChangeEvent) => { const file = e.target.files?.[0]; if (file) { const reader = new FileReader(); reader.onloadend = () => { setPreview(reader.result as string); setValue('image', reader.result as string); }; reader.readAsDataURL(file); } }; const onSubmit = async (data: TFormAdtCreateValues) => { try { setIsSubmitting(true); const response = await fetch('/api/adt', { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify(data), }); if (!response.ok) { const err = await response.text() toast.error("Error creating adt: " + err) throw new Error('Error creating adt'); } reset(); setPreview(null); if (fileInputRef.current) { fileInputRef.current.value = ''; } toast.success("Adt created successfully") const data_f = await response.json(); router.push(`/adt/${data_f.id}`); } catch (error) { console.error('Error:', error); } finally { setIsSubmitting(false); } }; const handleCountryChange = (countryId: string) => { setSelectedCountry(countryId); setValue('countryId', countryId); }; const handleCategoryParentChange = (categoryId: string) => { setSelectedParentCategory(categoryId); }; return (
{errors.title && (

{errors.title.message}

)}