'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 { buildApiUrl } from '@/utils/BaseUrl.utils'; interface FormErrors { [key: string]: string; } interface EditEventFormProps { eventId: string | null; } const CreateEventGalleryForm: React.FC = ({ eventId }) => { const router = useRouter(); const [selectedImages, setSelectedImages] = useState([]); const [previewUrls, setPreviewUrls] = useState([]); const [loading, setLoading] = useState(false); const [errors, setErrors] = useState({}); const handleFileChange = (e: ChangeEvent) => { const files = Array.from(e.target.files || []); if (selectedImages.length + files.length > 50) { setErrors({ images: 'You can only upload up to 50 images at a time' }); alert('You can only upload up to 50 images at a time'); return; } const validImages: File[] = []; const previews: string[] = []; files.forEach((file) => { if (file.type.startsWith('image/')) { validImages.push(file); previews.push(URL.createObjectURL(file)); } }); setSelectedImages(prev => [...prev, ...validImages]); setPreviewUrls(prev => [...prev, ...previews]); setErrors(prev => ({ ...prev, images: '' })); // clear error if valid }; const handleImageDelete = (index: number) => { setSelectedImages(prev => prev.filter((_, i) => i !== index)); setPreviewUrls(prev => prev.filter((_, i) => i !== index)); }; const validateForm = (): boolean => { const newErrors: FormErrors = {}; if (selectedImages.length === 0) { newErrors.images = 'Please upload at least one image'; } else if (selectedImages.length > 50) { newErrors.images = 'Only 50 images can be uploaded at a time'; } setErrors(newErrors); return Object.keys(newErrors).length === 0; }; const handleSubmit = async (e: FormEvent) => { e.preventDefault(); if (!validateForm()) return; setLoading(true); try { const formData = new FormData(); selectedImages.forEach((file, index) => { formData.append(`files`, file); }); const uploadRes = await axios.post(buildApiUrl('upload/multiple'), formData) console.log("uploadres", uploadRes) const uploadedUrls = uploadRes?.data?.data?.map((image: any) => image?.fullUrl) || []; // Step 2: Prepare body for bulk save const body = { eventid: Number(eventId), imageurl: uploadedUrls }; console.log("Sending body:", body); // Step 3: Call bulk API await axios.post( buildApiUrl('event-images/bulk'), body ); router.push(`/event-gallery?eventid=${eventId}`); } catch (error: any) { console.error('Upload failed:', error); const message = error.response?.data?.message || 'Failed to upload images. Please try again.'; setErrors({ submit: message }); alert(message); } finally { setLoading(false); } }; return (

Upload Gallery Images

{/* File Input */}
{errors.images &&

{errors.images}

}
{/* Previews */} {previewUrls.length > 0 && (
{previewUrls.map((url, index) => (
{`Preview
))}
)} {/* Submit */}
); }; export default CreateEventGalleryForm;