Files
firewallissues/web/script.js
T
2026-03-16 09:16:34 -05:00

95 lines
2.8 KiB
JavaScript

import { loadIssuesForCheckedPaths } from './js/issues.js';
import { getCheckedFileRefs, initializeTree, renderProductTree } from './js/tree.js';
import { applyIssueSearchFilter, getIssueTypeFilters, initializeUI } from './js/ui.js';
document.addEventListener('DOMContentLoaded', () => {
initializeUI({ onSelectionChange: refreshIssuesForCurrentSelection });
initializeTree('product-tree', refreshIssuesForCurrentSelection);
loadProductTree();
});
let productsData = {};
function refreshIssuesForCurrentSelection() {
loadIssuesForCheckedPaths({
issueTypeFilters: getIssueTypeFilters(),
checkedFileRefs: getCheckedFileRefs(),
applyIssueSearchFilter
});
}
function loadProductTree() {
fetch('products.json')
.then(response => response.json())
.then(data => {
productsData = expandFilePrefixLevel(data);
renderProductTree(productsData);
})
.catch(error => console.error('Error loading products:', error));
}
function expandFilePrefixLevel(root) {
if (!root || typeof root !== 'object') {
return root;
}
return transformNode(root);
}
function transformNode(node) {
if (!node || typeof node !== 'object' || Array.isArray(node)) {
return node;
}
const hasIssueArrays = Object.prototype.hasOwnProperty.call(node, 'addressed') ||
Object.prototype.hasOwnProperty.call(node, 'known');
if (hasIssueArrays) {
const addressed = Array.isArray(node.addressed) ? node.addressed : [];
const known = Array.isArray(node.known) ? node.known : [];
const allFiles = [...addressed, ...known];
if (allFiles.length === 0) {
return {
addressed: [],
known: []
};
}
const grouped = {};
addressed.forEach(fileName => {
const prefix = getFilePrefix(fileName);
if (!grouped[prefix]) {
grouped[prefix] = { addressed: [], known: [] };
}
grouped[prefix].addressed.push(fileName);
});
known.forEach(fileName => {
const prefix = getFilePrefix(fileName);
if (!grouped[prefix]) {
grouped[prefix] = { addressed: [], known: [] };
}
grouped[prefix].known.push(fileName);
});
return grouped;
}
const transformed = {};
Object.keys(node).forEach(key => {
transformed[key] = transformNode(node[key]);
});
return transformed;
}
function getFilePrefix(fileName) {
const baseName = String(fileName || '');
const underscoreIndex = baseName.indexOf('_');
if (underscoreIndex <= 0) {
return baseName.replace(/\.json$/i, '') || 'unknown';
}
return baseName.slice(0, underscoreIndex);
}