Wire ConsolidationModal into QueuePanel slide-out on Reporting page
The multi-select consolidated Jira ticket feature was built into a standalone page that doesn't exist. This wires it into the actual QueuePanel slide-out where users work. Adds a '+ Jira (N)' button to the footer action bar that opens the ConsolidationModal when 2+ items are selected, or the single-item Jira modal for 1 item.
This commit is contained in:
@@ -8,6 +8,7 @@ import AnomalyBanner from './AnomalyBanner';
|
|||||||
import CveTooltip from '../CveTooltip';
|
import CveTooltip from '../CveTooltip';
|
||||||
import RedirectModal from '../RedirectModal';
|
import RedirectModal from '../RedirectModal';
|
||||||
import AtlasBadge from '../AtlasBadge';
|
import AtlasBadge from '../AtlasBadge';
|
||||||
|
import ConsolidationModal from '../ConsolidationModal';
|
||||||
import AtlasSlideOutPanel from '../AtlasSlideOutPanel';
|
import AtlasSlideOutPanel from '../AtlasSlideOutPanel';
|
||||||
import AtlasIcon from '../AtlasIcon';
|
import AtlasIcon from '../AtlasIcon';
|
||||||
|
|
||||||
@@ -1543,6 +1544,9 @@ function QueuePanel({ open, items, onClose, onUpdate, onDelete, onDeleteMany, on
|
|||||||
const [createJiraSaving, setCreateJiraSaving] = useState(false);
|
const [createJiraSaving, setCreateJiraSaving] = useState(false);
|
||||||
const [createJiraSummaryError, setCreateJiraSummaryError] = useState(null);
|
const [createJiraSummaryError, setCreateJiraSummaryError] = useState(null);
|
||||||
|
|
||||||
|
// Consolidated Jira ticket modal state (multi-item → 1 ticket)
|
||||||
|
const [showConsolidationModal, setShowConsolidationModal] = useState(false);
|
||||||
|
|
||||||
// CARD Asset Search state
|
// CARD Asset Search state
|
||||||
const [assetSearchOpen, setAssetSearchOpen] = useState(false);
|
const [assetSearchOpen, setAssetSearchOpen] = useState(false);
|
||||||
const [assetSearchTeam, setAssetSearchTeam] = useState('');
|
const [assetSearchTeam, setAssetSearchTeam] = useState('');
|
||||||
@@ -2756,6 +2760,37 @@ function QueuePanel({ open, items, onClose, onUpdate, onDelete, onDeleteMany, on
|
|||||||
);
|
);
|
||||||
})()}
|
})()}
|
||||||
{/* Delete selected — only shown when items are selected */}
|
{/* Delete selected — only shown when items are selected */}
|
||||||
|
{selectedIds.size > 0 && (
|
||||||
|
<button
|
||||||
|
onClick={() => {
|
||||||
|
// Get selected pending items for consolidated Jira ticket
|
||||||
|
const selectedPendingItems = items.filter(i => selectedIds.has(i.id) && i.status === 'pending');
|
||||||
|
if (selectedPendingItems.length >= 2) {
|
||||||
|
setShowConsolidationModal(true);
|
||||||
|
} else if (selectedPendingItems.length === 1) {
|
||||||
|
openCreateJiraFromQueue(selectedPendingItems[0]);
|
||||||
|
}
|
||||||
|
}}
|
||||||
|
disabled={(() => {
|
||||||
|
const selectedPendingItems = items.filter(i => selectedIds.has(i.id) && i.status === 'pending');
|
||||||
|
return selectedPendingItems.length === 0;
|
||||||
|
})()}
|
||||||
|
style={{
|
||||||
|
flex: 1, padding: '0.45rem',
|
||||||
|
background: 'rgba(14,165,233,0.1)',
|
||||||
|
border: '1px solid rgba(14,165,233,0.35)',
|
||||||
|
borderRadius: '0.375rem',
|
||||||
|
color: '#0EA5E9',
|
||||||
|
fontFamily: 'monospace', fontSize: '0.72rem', fontWeight: '600',
|
||||||
|
cursor: 'pointer',
|
||||||
|
textTransform: 'uppercase', letterSpacing: '0.05em',
|
||||||
|
transition: 'all 0.12s',
|
||||||
|
}}
|
||||||
|
title={`Create a single Jira ticket from ${selectedIds.size} selected item(s)`}
|
||||||
|
>
|
||||||
|
+ Jira ({items.filter(i => selectedIds.has(i.id) && i.status === 'pending').length})
|
||||||
|
</button>
|
||||||
|
)}
|
||||||
{selectedIds.size > 0 && (
|
{selectedIds.size > 0 && (
|
||||||
<button
|
<button
|
||||||
onClick={handleDeleteSelected}
|
onClick={handleDeleteSelected}
|
||||||
@@ -3018,6 +3053,19 @@ function QueuePanel({ open, items, onClose, onUpdate, onDelete, onDeleteMany, on
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
|
|
||||||
|
{/* Consolidated Jira Ticket modal (multi-item → 1 ticket) */}
|
||||||
|
{showConsolidationModal && (
|
||||||
|
<ConsolidationModal
|
||||||
|
items={items.filter(i => selectedIds.has(i.id) && i.status === 'pending')}
|
||||||
|
onClose={() => setShowConsolidationModal(false)}
|
||||||
|
onSuccess={() => {
|
||||||
|
setShowConsolidationModal(false);
|
||||||
|
setSelectedIds(new Set());
|
||||||
|
if (onQueueRefresh) onQueueRefresh();
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
)}
|
||||||
</>
|
</>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user