'use client'; import React, { useState, ChangeEvent, FormEvent } from 'react'; import IconTrashLines from '../icon/icon-trash-lines'; import axios from 'axios'; import { useRouter } from 'next/navigation'; import { showMessage } from '@/utils/CommonFunction.utils'; interface FormValues { year: string; eventdate: string; eventtitle: string; eventimageurl: File | null; eventdescription: string; } interface FormErrors { [key: string]: string; } const CreateEventForm: React.FC = () => { const router = useRouter() const [formData, setFormData] = useState({ year: '', eventdate: '', eventtitle: '', eventimageurl: null, eventdescription: '', }); const [errors, setErrors] = useState({}); const [previewUrl, setPreviewUrl] = useState(null); const handleChange = (e: ChangeEvent) => { const { name, value } = e.target; setFormData(prev => ({ ...prev, [name]: value, })); }; const handleFileChange = (e: ChangeEvent) => { const file = e.target.files?.[0] || null; setFormData(prev => ({ ...prev, eventimageurl: file, })); if (file) { const url = URL.createObjectURL(file); setPreviewUrl(url); } else { setPreviewUrl(null); } }; const validateForm = (): boolean => { const newErrors: FormErrors = {}; if (!formData.year.trim()) newErrors.year = 'Year is required'; if (!formData.eventdate.trim()) newErrors.eventdate = 'Event date is required'; if (!formData.eventtitle.trim()) newErrors.eventtitle = 'Event title is required'; if (!formData.eventimageurl) { newErrors.eventimageurl = 'Please upload an image'; } else if (!formData.eventimageurl.type.startsWith('image/')) { newErrors.eventimageurl = 'Only image files are allowed'; } if (!formData.eventdescription.trim()) newErrors.eventdescription = 'Description is required'; setErrors(newErrors); return Object.keys(newErrors).length === 0; }; const handleSubmit = async (e: FormEvent) => { e.preventDefault(); if (!validateForm()) return; console.log("formData", formData) const data = new FormData(); if (formData.eventimageurl && formData.eventimageurl.type.startsWith("image/")) { data.append("file", formData.eventimageurl); // ✅ Use correct field name } try { const ImageUpload = await axios.post(`https://api.tamilculturewaterloo.org/api/upload/single`, data, { headers: { "Content-Type": "multipart/form-data", // important for file upload }, }) console.log("ImageUpload", ImageUpload) const createData = { year: formData.year, eventdate: formData.eventdate, eventtitle: formData.eventtitle, eventdescription: formData.eventdescription, eventimageurl: ImageUpload?.data?.data?.fullUrl } const res = await axios.post(`https://api.tamilculturewaterloo.org/api/events`, createData) console.log("res", res) showMessage("Event Created Successfully", "success") router?.push(`/`) } catch (error: any) { showMessage(`${error?.response?.data?.message ? error?.response?.data?.message : "error"}`) } }; const handleImageDelete = () => { setFormData(prev => ({ ...prev, eventimageurl: null, })); setPreviewUrl(null); }; return (

Create Event

{/* Year */}
{errors.year &&

{errors.year}

}
{/* Event Date */}
{errors.eventdate &&

{errors.eventdate}

}
{/* Event Title */}
{errors.eventtitle &&

{errors.eventtitle}

}
{/* Event Description */}