Skip to content

Commit a50a400

Browse files
committed
Refactor ScanResults component to group findings by description and severity; merge file information for better organization
1 parent 5f74f26 commit a50a400

File tree

1 file changed

+39
-13
lines changed

1 file changed

+39
-13
lines changed

src/components/ScanResults.jsx

Lines changed: 39 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -23,19 +23,45 @@ const ScanResults = ({ results, usedCache, onRefreshRequest, scanning }) => {
2323

2424
const { findings = {}, summary = {} } = results;
2525

26-
// Handle both array and object formats of findings
27-
// Convert findings object to array and sort by severity
28-
const vulnerabilities = Object.entries(findings).map(([type, data]) => ({
29-
type,
30-
...data,
31-
description: data.description || 'No description provided',
32-
severity: data.severity || 'LOW',
33-
// Extract all file paths from allLineNumbers
34-
files: Object.keys(data.allLineNumbers || {}).sort()
35-
})).sort((a, b) => {
36-
const severityOrder = { CRITICAL: 0, HIGH: 1, MEDIUM: 2, LOW: 3 };
37-
return severityOrder[a.severity] - severityOrder[b.severity];
38-
});
26+
// Group findings by description and severity
27+
const groupedFindings = Object.entries(findings).reduce((acc, [type, data]) => {
28+
const description = data.description || 'No description provided';
29+
const severity = data.severity || 'LOW';
30+
const key = `${description}_${severity}`;
31+
32+
if (!acc[key]) {
33+
acc[key] = {
34+
type,
35+
description,
36+
severity,
37+
files: [],
38+
allLineNumbers: {},
39+
...data,
40+
};
41+
} else {
42+
// Merge file information
43+
Object.entries(data.allLineNumbers || {}).forEach(([file, lines]) => {
44+
if (!acc[key].allLineNumbers[file]) {
45+
acc[key].allLineNumbers[file] = lines;
46+
} else {
47+
acc[key].allLineNumbers[file] = [...new Set([...acc[key].allLineNumbers[file], ...lines])].sort((a, b) => a - b);
48+
}
49+
});
50+
}
51+
52+
return acc;
53+
}, {});
54+
55+
// Convert grouped findings to array and sort by severity
56+
const vulnerabilities = Object.values(groupedFindings)
57+
.map(data => ({
58+
...data,
59+
files: Object.keys(data.allLineNumbers || {}).sort()
60+
}))
61+
.sort((a, b) => {
62+
const severityOrder = { CRITICAL: 0, HIGH: 1, MEDIUM: 2, LOW: 3 };
63+
return severityOrder[a.severity] - severityOrder[b.severity];
64+
});
3965

4066
// State for filtering
4167
const [severityFilter, setSeverityFilter] = React.useState('ALL');

0 commit comments

Comments
 (0)