/**
* Sorts an array of violation objects based on a specified column and direction.
* @param {any[]} violations - The array of violations to sort.
* @param {{column: string, direction: 'asc' | 'desc'}} sortConfig - The sorting configuration.
* @returns {any[]} A new array with the sorted violations.
*/
export const sortViolations = (violations, sortConfig) => {
const { column, direction } = sortConfig;
const multiplier = direction === 'asc' ? 1 : -1;
const impactOrder = { critical: 4, serious: 3, moderate: 2, minor: 1 };
return [...violations].sort((a, b) => {
const valA = column === 'impact' ? impactOrder[a.impact] : a[column];
const valB = column === 'impact' ? impactOrder[b.impact] : b[column];
if (valA < valB) return -1 * multiplier;
if (valA > valB) return 1 * multiplier;
return 0;
});
};
/**
* Filters an array of violation objects based on selected criticality levels.
* @param {any[]} violations - The array of violations to filter.
* @param {string[]} selectedCriticalities - An array of criticality strings to include. If it contains 'all', all violations are returned.
* @returns {any[]} A new array with the filtered violations.
*/
export const filterViolations = (violations, selectedCriticalities) => {
if (selectedCriticalities.includes('all')) {
return [...violations];
}
return violations.filter(v => selectedCriticalities.includes(v.impact));
};
/**
* Parses a failure summary string into a structured HTML list.
* @param {string} summary - The failure summary text.
* @returns {string} An HTML string with a heading and an unordered list of suggestions.
*/
export function parseFailureSummary(summary) {
if (!summary) return 'No suggestions available.';
const lines = summary.split('\n').map(line => line.trim()).filter(line => line.length > 0);
const heading = lines.shift() || 'Suggested Actions';
const uniqueSuggestions = [...new Set(lines)];
let summaryHtml = `<h6>${heading}</h6>`;
if (uniqueSuggestions.length > 0) {
summaryHtml += '<ul>';
uniqueSuggestions.forEach(line => {
const cleanLine = line.replace(/^[\s*-]+/, '');
summaryHtml += `<li>${cleanLine}</li>`;
});
summaryHtml += '</ul>';
}
return summaryHtml;
}
/**
* Escapes HTML special characters in a string.
* @param {string} str - The string to escape.
* @returns {string} The escaped string.
*/
export function escapeHtml(str) {
if (typeof str !== 'string') return '';
return str.replace(/</g, "<").replace(/>/g, ">");
}