diff --git a/frontend/src/components/EventAdmin.tsx b/frontend/src/components/EventAdmin.tsx index 9f4b994..729218a 100644 --- a/frontend/src/components/EventAdmin.tsx +++ b/frontend/src/components/EventAdmin.tsx @@ -308,6 +308,7 @@ const EventAdmin: React.FC = () => { if (!event) return; try { + // Update event's needed_items const updatedItems = Array.isArray(event.needed_items) ? event.needed_items.filter(item => item !== itemToRemove) : []; @@ -316,9 +317,47 @@ const EventAdmin: React.FC = () => { ...event, needed_items: updatedItems }); + + // Update RSVPs to remove the item from any that had claimed it + const updatedRsvps = rsvps.map(rsvp => { + let currentItems = Array.isArray(rsvp.items_bringing) + ? rsvp.items_bringing + : typeof rsvp.items_bringing === 'string' + ? JSON.parse(rsvp.items_bringing) + : []; + + // Remove the item if it exists in this RSVP + if (currentItems.includes(itemToRemove)) { + const updatedRsvpItems = currentItems.filter(item => item !== itemToRemove); + // Update the RSVP in the database + axios.put(`/api/events/${slug}/rsvps/${rsvp.id}`, { + ...rsvp, + items_bringing: JSON.stringify(updatedRsvpItems) + }); + return { + ...rsvp, + items_bringing: updatedRsvpItems + }; + } + return rsvp; + }); + + // Recalculate claimed items + const claimed = new Set(); + updatedRsvps.forEach(rsvp => { + let rsvpItems = Array.isArray(rsvp.items_bringing) + ? rsvp.items_bringing + : typeof rsvp.items_bringing === 'string' + ? JSON.parse(rsvp.items_bringing) + : []; + rsvpItems.forEach(item => claimed.add(item)); + }); + // Update all state setEvent(prev => prev ? { ...prev, needed_items: updatedItems } : null); setNeededItems(prev => prev.filter(item => item !== itemToRemove)); + setRsvps(updatedRsvps); + setClaimedItems(Array.from(claimed)); } catch (error) { setError('Failed to remove item'); }