From fb61fc3ffb51a52d9015d0f11956358cc0603bc8 Mon Sep 17 00:00:00 2001 From: Your Name Date: Tue, 29 Apr 2025 18:13:11 -0400 Subject: [PATCH] Fix TypeScript errors in EventAdmin component by splitting change handlers --- Dockerfile | 4 ++-- frontend/src/components/EventAdmin.tsx | 31 +++++++++++++++++--------- 2 files changed, 22 insertions(+), 13 deletions(-) diff --git a/Dockerfile b/Dockerfile index f235c49..0428c9a 100644 --- a/Dockerfile +++ b/Dockerfile @@ -10,8 +10,8 @@ COPY frontend/package*.json ./frontend/ COPY backend/package*.json ./backend/ # Install dependencies -RUN cd backend && npm install && \ - cd ../frontend && npm install +RUN npm install +RUN cd frontend && npm install --save-dev @types/react @types/react-dom @types/react-router-dom @types/axios # Copy source files COPY . . diff --git a/frontend/src/components/EventAdmin.tsx b/frontend/src/components/EventAdmin.tsx index 0679101..8fd7144 100644 --- a/frontend/src/components/EventAdmin.tsx +++ b/frontend/src/components/EventAdmin.tsx @@ -24,6 +24,7 @@ import { MenuItem, FormControlLabel, Switch, + SelectChangeEvent, } from '@mui/material'; import DeleteIcon from '@mui/icons-material/Delete'; import EditIcon from '@mui/icons-material/Edit'; @@ -97,7 +98,7 @@ const EventAdmin: React.FC = () => { try { await axios.delete(`/api/events/${slug}/rsvps/${rsvpToDelete.id}`); - setRsvps(rsvps.filter(r => r.id !== rsvpToDelete.id)); + setRsvps(rsvps.filter((r: RSVP) => r.id !== rsvpToDelete.id)); setDeleteDialogOpen(false); setRsvpToDelete(null); } catch (error) { @@ -118,9 +119,17 @@ const EventAdmin: React.FC = () => { setEditDialogOpen(true); }; - const handleEditFormChange = (e: React.ChangeEvent) => { + const handleTextInputChange = (e: React.ChangeEvent) => { const { name, value } = e.target; - setEditForm(prev => ({ + setEditForm((prev: typeof editForm) => ({ + ...prev, + [name]: value, + })); + }; + + const handleSelectChange = (e: SelectChangeEvent) => { + const { name, value } = e.target; + setEditForm((prev: typeof editForm) => ({ ...prev, [name as string]: value, })); @@ -131,7 +140,7 @@ const EventAdmin: React.FC = () => { try { await axios.put(`/api/events/${slug}/rsvps/${rsvpToEdit.id}`, editForm); - setRsvps(rsvps.map(r => r.id === rsvpToEdit.id ? { ...r, ...editForm } : r)); + setRsvps(rsvps.map((r: RSVP) => r.id === rsvpToEdit.id ? { ...r, ...editForm } : r)); setEditDialogOpen(false); setRsvpToEdit(null); } catch (error) { @@ -186,7 +195,7 @@ const EventAdmin: React.FC = () => { - {rsvps.map((rsvp) => ( + {rsvps.map((rsvp: RSVP) => ( {rsvp.name} {rsvp.attending} @@ -249,7 +258,7 @@ const EventAdmin: React.FC = () => { label="Name" name="name" value={editForm.name} - onChange={handleEditFormChange} + onChange={handleTextInputChange} fullWidth /> @@ -257,7 +266,7 @@ const EventAdmin: React.FC = () => { Yes @@ -284,14 +293,14 @@ const EventAdmin: React.FC = () => { name="guest_count" type="number" value={editForm.guest_count} - onChange={handleEditFormChange} + onChange={handleTextInputChange} fullWidth /> { label="Items Bringing" name="items_bringing" value={editForm.items_bringing} - onChange={handleEditFormChange} + onChange={handleTextInputChange} fullWidth multiline rows={2}