diff --git a/frontend/src/components/pages/ReportingPage.js b/frontend/src/components/pages/ReportingPage.js
index 1d3b95c..bfd12c7 100644
--- a/frontend/src/components/pages/ReportingPage.js
+++ b/frontend/src/components/pages/ReportingPage.js
@@ -1241,10 +1241,35 @@ function AddToQueuePopover({ finding, anchorRect, queueForm, setQueueForm, onAdd
// ---------------------------------------------------------------------------
// QueuePanel — fixed slide-out panel showing the user's Ivanti queue
// ---------------------------------------------------------------------------
-function QueuePanel({ open, items, onClose, onUpdate, onDelete, onClearCompleted }) {
+function QueuePanel({ open, items, onClose, onUpdate, onDelete, onDeleteMany, onClearCompleted }) {
const pendingCount = items.filter((i) => i.status === 'pending').length;
const completedCount = items.filter((i) => i.status === 'complete').length;
+ const [selectedIds, setSelectedIds] = useState(new Set());
+
+ // Drop any selected IDs that no longer exist in items
+ useEffect(() => {
+ setSelectedIds((prev) => {
+ if (prev.size === 0) return prev;
+ const valid = new Set(items.map((i) => i.id));
+ const next = new Set([...prev].filter((id) => valid.has(id)));
+ return next.size === prev.size ? prev : next;
+ });
+ }, [items]);
+
+ const toggleSelect = (id) => {
+ setSelectedIds((prev) => {
+ const next = new Set(prev);
+ if (next.has(id)) next.delete(id); else next.add(id);
+ return next;
+ });
+ };
+
+ const handleDeleteSelected = () => {
+ onDeleteMany([...selectedIds]);
+ setSelectedIds(new Set());
+ };
+
// CARD items are their own top section; everything else groups by vendor
const grouped = useMemo(() => {
const cardItems = items.filter((i) => i.workflow_type === 'CARD');
@@ -1376,6 +1401,15 @@ function QueuePanel({ open, items, onClose, onUpdate, onDelete, onClearCompleted
transition: 'opacity 0.15s',
}}
>
+ {/* Selection checkbox — for bulk delete */}
+ toggleSelect(item.id)}
+ style={{ accentColor: '#EF4444', width: '12px', height: '12px', flexShrink: 0, marginTop: '3px', cursor: 'pointer', opacity: selectedIds.has(item.id) ? 1 : 0.35 }}
+ title="Select for deletion"
+ />
+
{/* Complete checkbox */}
+ {/* Delete selected — only shown when items are selected */}
+ {selectedIds.size > 0 && (
+
+ )}