Fix: Remove items from RSVPs when removed from needed items list

This commit is contained in:
2025-05-01 10:10:04 -04:00
parent cf4161ca6e
commit fb24d900a4

View File

@@ -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<string>();
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');
}