diff --git a/src/views/DeckView.tsx b/src/views/DeckView.tsx index 9fc272b..e4a107a 100644 --- a/src/views/DeckView.tsx +++ b/src/views/DeckView.tsx @@ -738,10 +738,26 @@ export function DeckView({ refreshSignal }: { refreshSignal?: number }) { ); } + /** Remove every selected card outright. Unlike stepping one card down to 0, + * this is a deliberate action, so there's no grace period to linger in. */ async function bulkRemoveFromDeck() { + if (selected === null) return; + const ids = new Set(selectedCards); setBulkBusy(true); try { - await Promise.all([...selectedCards].map((id) => setQty(id, 0))); + await Promise.all( + [...ids].map((id) => { + const e = contents.find((c) => c.oracle_id === id); + return api.setDeckCard(selected, id, 0, e?.is_commander ?? false, e?.is_maybeboard ?? false); + }), + ); + for (const id of ids) { + const timer = removalTimers.current.get(id); + if (timer) clearTimeout(timer); + removalTimers.current.delete(id); + } + setPendingRemoval((p) => new Set([...p].filter((id) => !ids.has(id)))); + setContents((cs) => cs.filter((e) => !ids.has(e.oracle_id))); } finally { setBulkBusy(false); }