diff --git a/frontend/src/components/RSVPEditForm.tsx b/frontend/src/components/RSVPEditForm.tsx index 6cca686..df40818 100644 --- a/frontend/src/components/RSVPEditForm.tsx +++ b/frontend/src/components/RSVPEditForm.tsx @@ -51,6 +51,7 @@ const RSVPEditForm: React.FC = () => { const navigate = useNavigate(); const [event, setEvent] = useState(null); const [rsvpId, setRsvpId] = useState(null); + const [isEventClosed, setIsEventClosed] = useState(false); // New state to track if event is closed useEffect(() => { const fetchRsvpDetails = async () => { @@ -65,6 +66,21 @@ const RSVPEditForm: React.FC = () => { throw new Error('Failed to fetch data from server'); } + // Check if event is closed for RSVPs + if (eventResponse.data.rsvp_cutoff_date) { + const cutoffDate = new Date(eventResponse.data.rsvp_cutoff_date); + if (new Date() > cutoffDate) { + setIsEventClosed(true); // Set state if closed + } + } + + setEvent(eventResponse.data); + setRsvpId(rsvpResponse.data.id); + + if (!eventResponse.data || !rsvpResponse.data || !rsvpsResponse.data) { + throw new Error('Failed to fetch data from server'); + } + setEvent(eventResponse.data); setRsvpId(rsvpResponse.data.id); @@ -253,6 +269,13 @@ const RSVPEditForm: React.FC = () => { const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); + + // Prevent submission if the event is closed + if (isEventClosed) { + setError('Event registration is closed. Changes are not allowed.'); + return; + } + setIsSubmitting(true); setError(null); @@ -385,6 +408,12 @@ const RSVPEditForm: React.FC = () => { Edit Your RSVP + {isEventClosed && ( + + Event registration is closed. Changes are not allowed. Please contact the event organizer for assistance. + + )} + {error && ( {error} @@ -400,6 +429,7 @@ const RSVPEditForm: React.FC = () => { required fullWidth variant="outlined" + disabled={isEventClosed} // Disable if event is closed /> @@ -534,20 +564,157 @@ const RSVPEditForm: React.FC = () => { )} - + {/* Disable if event is closed */} + Are you attending? + + + + {formData.attending === 'yes' && ( + <> + {/* Disable if event is closed */} + Are you bringing any guests? + + + + {formData.bringing_guests === 'yes' && ( + <> + { + const value = parseInt(e.target.value); + if (isNaN(value)) return; + + const maxGuests = event?.max_guests_per_rsvp; + let newCount = value; + + if (maxGuests !== undefined && maxGuests !== -1 && value > maxGuests) { + newCount = maxGuests; + } + + if (newCount < 1) newCount = 1; + + setFormData(prev => ({ + ...prev, + guest_count: newCount, + guest_names: Array(newCount).fill('').map((_, i) => prev.guest_names[i] || '') + })); + }} + fullWidth + variant="outlined" + required + inputProps={{ + min: 1, + max: event?.max_guests_per_rsvp === -1 ? undefined : event?.max_guests_per_rsvp + }} + error={formData.guest_count < 1} + helperText={ + formData.guest_count < 1 + ? "Number of guests must be at least 1" + : event?.max_guests_per_rsvp === 0 + ? "No additional guests allowed for this event" + : event?.max_guests_per_rsvp === -1 + ? "No limit on number of guests" + : `Maximum ${event?.max_guests_per_rsvp} additional guests allowed` + } + disabled={isEventClosed} // Disable if event is closed + /> + + {Array.from({ length: formData.guest_count }).map((_, index) => ( + + ))} + + )} + + {neededItems.length > 0 && ( + {/* Disable if event is closed */} + What items are you bringing? + + + )} + + + + )} + + {!isEventClosed && ( // Hide submit button if event is closed + + )}