feat: increase upload limit to 50 and add svg support with error handling

This commit is contained in:
Ravindranbit 2026-04-28 17:14:25 +05:30
parent 4b9797e368
commit 83b891d8d8

View File

@ -17,10 +17,18 @@ const CreateEventGalleryForm: React.FC<EditEventFormProps> = ({ eventId }) => {
const [selectedImages, setSelectedImages] = useState<File[]>([]); const [selectedImages, setSelectedImages] = useState<File[]>([]);
const [previewUrls, setPreviewUrls] = useState<string[]>([]); const [previewUrls, setPreviewUrls] = useState<string[]>([]);
const [loading, setLoading] = useState(false);
const [errors, setErrors] = useState<FormErrors>({}); const [errors, setErrors] = useState<FormErrors>({});
const handleFileChange = (e: ChangeEvent<HTMLInputElement>) => { const handleFileChange = (e: ChangeEvent<HTMLInputElement>) => {
const files = Array.from(e.target.files || []); 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 validImages: File[] = [];
const previews: string[] = []; const previews: string[] = [];
@ -33,6 +41,7 @@ const CreateEventGalleryForm: React.FC<EditEventFormProps> = ({ eventId }) => {
setSelectedImages(prev => [...prev, ...validImages]); setSelectedImages(prev => [...prev, ...validImages]);
setPreviewUrls(prev => [...prev, ...previews]); setPreviewUrls(prev => [...prev, ...previews]);
setErrors(prev => ({ ...prev, images: '' })); // clear error if valid
}; };
const handleImageDelete = (index: number) => { const handleImageDelete = (index: number) => {
@ -45,6 +54,8 @@ const CreateEventGalleryForm: React.FC<EditEventFormProps> = ({ eventId }) => {
if (selectedImages.length === 0) { if (selectedImages.length === 0) {
newErrors.images = 'Please upload at least one image'; 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); setErrors(newErrors);
@ -55,6 +66,7 @@ const CreateEventGalleryForm: React.FC<EditEventFormProps> = ({ eventId }) => {
e.preventDefault(); e.preventDefault();
if (!validateForm()) return; if (!validateForm()) return;
setLoading(true);
try { try {
const formData = new FormData(); const formData = new FormData();
@ -66,10 +78,10 @@ const CreateEventGalleryForm: React.FC<EditEventFormProps> = ({ eventId }) => {
console.log("uploadres", uploadRes) console.log("uploadres", uploadRes)
const uploadedUrls = uploadRes?.data?.data?.map((image: any) => image?.fullUrl) || []; const uploadedUrls = uploadRes?.data?.data?.map((image: any) => image?.fullUrl) || [];
// Step 2: Prepare correct body for bulk save // Step 2: Prepare body for bulk save
const body = { const body = {
eventid: Number(eventId), // ensure number eventid: Number(eventId),
imageurl: uploadedUrls // API may expect 'imageurls' not 'imageurl' imageurl: uploadedUrls
}; };
console.log("Sending body:", body); console.log("Sending body:", body);
@ -81,8 +93,13 @@ const CreateEventGalleryForm: React.FC<EditEventFormProps> = ({ eventId }) => {
); );
router.push(`/event-gallery?eventid=${eventId}`); router.push(`/event-gallery?eventid=${eventId}`);
} catch (error) { } catch (error: any) {
console.error('Upload failed:', error); 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);
} }
}; };
@ -130,9 +147,10 @@ const CreateEventGalleryForm: React.FC<EditEventFormProps> = ({ eventId }) => {
<div className="mt-6"> <div className="mt-6">
<button <button
type="submit" type="submit"
className="bg-blue-600 text-white px-6 py-2 rounded hover:bg-blue-700" disabled={loading}
className={`bg-blue-600 text-white px-6 py-2 rounded hover:bg-blue-700 ${loading ? 'opacity-50 cursor-not-allowed' : ''}`}
> >
Submit {loading ? 'Uploading...' : 'Submit'}
</button> </button>
</div> </div>
</form> </form>