'use client'; import React, { useState, useEffect, ChangeEvent, FormEvent } from 'react'; import IconTrashLines from '../icon/icon-trash-lines'; import axios from 'axios'; import { useRouter } from 'next/navigation'; interface FormValues { year: string; eventdate: string; eventtitle: string; eventimageurl: File | null; eventdescription: string; } interface FormErrors { [key: string]: string; } interface EditEventFormProps { eventId: string | null; } const EditEventForm: React.FC = ({ eventId }) => { const router = useRouter(); const [formData, setFormData] = useState({ year: '', eventdate: '', eventtitle: '', eventimageurl: null, eventdescription: '', }); const [errors, setErrors] = useState({}); const [previewUrl, setPreviewUrl] = useState(null); const [existingImageUrl, setExistingImageUrl] = useState(null); // Used if no new file uploaded useEffect(() => { if (eventId) { getEvent(); } }, [eventId]); const getEvent = async () => { try { const res = await axios.get(`https://api.tamilculturewaterloo.org/api/events/${eventId}`); const data = res?.data?.data; setFormData({ year: data.year || '', eventdate: data.eventdate || '', eventtitle: data.eventtitle || '', eventimageurl: null, // File only used for uploads eventdescription: data.eventdescription || '', }); if (data.eventimageurl) { setPreviewUrl(data.eventimageurl); setExistingImageUrl(data.eventimageurl); } } catch (error) { console.error('Error loading event:', error); } }; 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(existingImageUrl); } }; const handleImageDelete = () => { setFormData(prev => ({ ...prev, eventimageurl: null, })); setPreviewUrl(null); setExistingImageUrl(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.eventdescription.trim()) newErrors.eventdescription = 'Description is required'; // If no preview or no file selected, show error if (!previewUrl) { newErrors.eventimageurl = 'Please upload an image'; } setErrors(newErrors); return Object.keys(newErrors).length === 0; }; const handleSubmit = async (e: FormEvent) => { e.preventDefault(); if (!validateForm()) return; try { let imageUrl = existingImageUrl; if (formData.eventimageurl && formData.eventimageurl.type.startsWith('image/')) { const imgFormData = new FormData(); imgFormData.append('file', formData.eventimageurl); const uploadRes = await axios.post( 'https://api.tamilculturewaterloo.org/api/upload/single', imgFormData, { headers: { 'Content-Type': 'multipart/form-data' } } ); imageUrl = uploadRes?.data?.data?.fullUrl; } const updatedData = { year: formData.year, eventdate: formData.eventdate, eventtitle: formData.eventtitle, eventdescription: formData.eventdescription, eventimageurl: imageUrl, }; const res = await axios.put(`https://api.tamilculturewaterloo.org/api/events/${eventId}`, updatedData, ); console.log('Event updated:', res.data); router.push('/'); } catch (error) { console.error('Error submitting form:', error); } }; return (

{eventId ? 'Edit Event' : 'Create Event'}

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

{errors.year}

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

{errors.eventdate}

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

{errors.eventtitle}

}
{/* Event Description */}