import {
locateNode
}
from "./node_explorer.js";
export function buildDependencyGraph(
dependencyData
)
{
const wrapper =
document.createElement(
"div"
);
wrapper.style.padding =
"10px";
const maxDependencies =
dependencyData?.max_dependencies ??
0;
const maxDependents =
dependencyData?.max_dependents ??
0;
const isolatedNodeCount =
dependencyData?.isolated_node_count ??
0;
const dependencyComplexity =
dependencyData?.dependency_complexity ??
"Unknown";
const dependencyScore =
dependencyData?.dependency_score ??
0;
let complexityColor =
"#00cc66";
if (
dependencyComplexity ===
"Medium"
)
{
complexityColor =
"#ffaa00";
}
if (
dependencyComplexity ===
"High"
)
{
complexityColor =
"#ff4444";
}
wrapper.innerHTML =
`
Dependency Graph
Max Dependencies
${maxDependencies}
Max Dependents
${maxDependents}
Isolated Nodes
${isolatedNodeCount}
Dependency Complexity
${dependencyComplexity}
Score:
${dependencyScore}
`;
const mostDependent =
dependencyData?.most_dependent_node;
const mostConnected =
dependencyData?.most_connected_node;
const createNodeCard =
(
title,
node,
type
) =>
{
const section =
document.createElement(
"div"
);
section.style.background =
"#252526";
section.style.border =
"1px solid #444";
section.style.borderRadius =
"10px";
section.style.padding =
"15px";
section.style.marginBottom =
"20px";
section.innerHTML =
`
${title}
`;
if (!node)
{
section.innerHTML +=
`
No data available.
`;
return section;
}
const card =
document.createElement(
"div"
);
card.style.border =
"1px solid #555";
card.style.borderRadius =
"8px";
card.style.padding =
"10px";
card.innerHTML =
`
${node.node_type}
Node ID:
${node.node_id}
${
type === "dependency"
?
`Dependencies: ${node.dependency_count}`
:
`Dependents: ${node.dependent_count}`
}
`;
const button =
document.createElement(
"button"
);
button.innerText =
"Locate Node";
button.style.marginTop =
"10px";
button.onclick =
() =>
{
locateNode(
node.node_id
);
};
card.appendChild(
button
);
section.appendChild(
card
);
return section;
};
wrapper.appendChild(
createNodeCard(
"Most Dependent Node",
mostDependent,
"dependency"
)
);
wrapper.appendChild(
createNodeCard(
"Most Connected Node",
mostConnected,
"dependent"
)
);
const isolatedSection =
document.createElement(
"div"
);
isolatedSection.style.background =
"#252526";
isolatedSection.style.border =
"1px solid #444";
isolatedSection.style.borderRadius =
"10px";
isolatedSection.style.padding =
"15px";
isolatedSection.style.marginBottom =
"20px";
isolatedSection.innerHTML =
`
Isolated Nodes
`;
const isolatedNodes =
dependencyData?.isolated_nodes ??
[];
if (
isolatedNodes.length === 0
)
{
isolatedSection.innerHTML +=
`
No isolated nodes detected.
`;
}
else
{
isolatedNodes.forEach(
node =>
{
const card =
document.createElement(
"div"
);
card.style.border =
"1px solid #555";
card.style.borderRadius =
"8px";
card.style.padding =
"10px";
card.style.marginBottom =
"10px";
card.innerHTML =
`
${node.node_type}
Node ID:
${node.node_id}
`;
const button =
document.createElement(
"button"
);
button.innerText =
"Locate Node";
button.style.marginTop =
"10px";
button.onclick =
() =>
{
locateNode(
node.node_id
);
};
card.appendChild(
button
);
isolatedSection.appendChild(
card
);
}
);
}
wrapper.appendChild(
isolatedSection
);
const insightsSection =
document.createElement(
"div"
);
insightsSection.style.background =
"#252526";
insightsSection.style.border =
"1px solid #444";
insightsSection.style.borderRadius =
"10px";
insightsSection.style.padding =
"15px";
insightsSection.innerHTML =
`
Dependency Insights
`;
const list =
document.createElement(
"ul"
);
const insights =
dependencyData?.insights ??
[];
insights.forEach(
insight =>
{
const item =
document.createElement(
"li"
);
item.innerText =
insight;
list.appendChild(
item
);
}
);
insightsSection.appendChild(
list
);
wrapper.appendChild(
insightsSection
);
return wrapper;
}