From 0714fd0e9d6083634082edd2bc4f4304284dfd47 Mon Sep 17 00:00:00 2001 From: Starstrike Date: Thu, 1 May 2025 15:17:09 -0400 Subject: [PATCH] Add wallpaper upload functionality to Update Info dialog - Added wallpaper preview, upload button, and file handling --- frontend/src/components/EventAdmin.tsx | 79 ++++++++++++++++++++++++-- 1 file changed, 75 insertions(+), 4 deletions(-) diff --git a/frontend/src/components/EventAdmin.tsx b/frontend/src/components/EventAdmin.tsx index 164df17..b562f9c 100644 --- a/frontend/src/components/EventAdmin.tsx +++ b/frontend/src/components/EventAdmin.tsx @@ -87,7 +87,8 @@ const EventAdmin: React.FC = () => { description: '', location: '', date: '', - rsvp_cutoff_date: '' + rsvp_cutoff_date: '', + wallpaper: null as File | null }); useEffect(() => { @@ -378,7 +379,8 @@ const EventAdmin: React.FC = () => { description: event.description, location: event.location, date: event.date.slice(0, 16), // Format date for datetime-local input - rsvp_cutoff_date: event.rsvp_cutoff_date ? event.rsvp_cutoff_date.slice(0, 16) : '' + rsvp_cutoff_date: event.rsvp_cutoff_date ? event.rsvp_cutoff_date.slice(0, 16) : '', + wallpaper: null }); setUpdateInfoDialogOpen(true); }; @@ -387,12 +389,29 @@ const EventAdmin: React.FC = () => { if (!event) return; try { + let updatedWallpaper = event.wallpaper; + + // Handle wallpaper upload if a new file was selected + if (updateForm.wallpaper) { + const formData = new FormData(); + formData.append('wallpaper', updateForm.wallpaper); + + const uploadResponse = await axios.post(`/api/upload/wallpaper`, formData, { + headers: { + 'Content-Type': 'multipart/form-data', + }, + }); + + updatedWallpaper = uploadResponse.data.path; + } + await axios.put(`/api/events/${slug}`, { ...event, description: updateForm.description, location: updateForm.location, date: updateForm.date, - rsvp_cutoff_date: updateForm.rsvp_cutoff_date + rsvp_cutoff_date: updateForm.rsvp_cutoff_date, + wallpaper: updatedWallpaper }); setEvent(prev => prev ? { @@ -400,7 +419,8 @@ const EventAdmin: React.FC = () => { description: updateForm.description, location: updateForm.location, date: updateForm.date, - rsvp_cutoff_date: updateForm.rsvp_cutoff_date + rsvp_cutoff_date: updateForm.rsvp_cutoff_date, + wallpaper: updatedWallpaper } : null); setUpdateInfoDialogOpen(false); @@ -409,6 +429,15 @@ const EventAdmin: React.FC = () => { } }; + const handleWallpaperChange = (e: React.ChangeEvent) => { + if (e.target.files && e.target.files[0]) { + setUpdateForm(prev => ({ + ...prev, + wallpaper: e.target.files![0] + })); + } + }; + if (loading) { return ( @@ -884,6 +913,48 @@ const EventAdmin: React.FC = () => { shrink: true, }} /> + + + Wallpaper + + {event.wallpaper && ( + + + Current wallpaper: + + + + )} + + {updateForm.wallpaper && ( + + Selected file: {updateForm.wallpaper.name} + + )} +