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;
|
if (!event) return;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
// Update event's needed_items
|
||||||
const updatedItems = Array.isArray(event.needed_items)
|
const updatedItems = Array.isArray(event.needed_items)
|
||||||
? event.needed_items.filter(item => item !== itemToRemove)
|
? event.needed_items.filter(item => item !== itemToRemove)
|
||||||
: [];
|
: [];
|
||||||
@@ -316,9 +317,47 @@ const EventAdmin: React.FC = () => {
|
|||||||
...event,
|
...event,
|
||||||
needed_items: updatedItems
|
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);
|
setEvent(prev => prev ? { ...prev, needed_items: updatedItems } : null);
|
||||||
setNeededItems(prev => prev.filter(item => item !== itemToRemove));
|
setNeededItems(prev => prev.filter(item => item !== itemToRemove));
|
||||||
|
setRsvps(updatedRsvps);
|
||||||
|
setClaimedItems(Array.from(claimed));
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
setError('Failed to remove item');
|
setError('Failed to remove item');
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user