Fix: Remove items from RSVPs when removed from needed items list
This commit is contained in:
@@ -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)
|
||||
: [];
|
||||
@@ -317,8 +318,46 @@ const EventAdmin: React.FC = () => {
|
||||
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');
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user