Skip to content

Commit 586aaf2

Browse files
authored
feat: add edges selection (#367)
1 parent a51040d commit 586aaf2

File tree

3 files changed

+31
-29
lines changed

3 files changed

+31
-29
lines changed

src/Terrabuild.UI/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
"@mantine/hooks": "^8.0.0",
1717
"@mantine/notifications": "^8.0.0",
1818
"@tabler/icons-react": "^3.19.0",
19-
"dagre": "^0.8.5",
19+
"@dagrejs/dagre": "^1.0.4",
2020
"react": "^18.3.1",
2121
"react-dom": "^18.3.1",
2222
"reactflow": "^11.11.3",

src/Terrabuild.UI/pnpm-lock.yaml

Lines changed: 16 additions & 23 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/Terrabuild.UI/src/App.tsx

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ import {
2020
useNodesState,
2121
} from "reactflow";
2222
import "reactflow/dist/style.css";
23-
import dagre from "dagre";
23+
import dagre from "@dagrejs/dagre";
2424
import { Terminal } from "xterm";
2525
import { FitAddon } from "xterm-addon-fit";
2626
import "xterm/css/xterm.css";
@@ -48,7 +48,7 @@ const nodeHeight = 120;
4848
const layoutGraph = (nodes: Node[], edges: Edge[]) => {
4949
const graph = new dagre.graphlib.Graph();
5050
graph.setDefaultEdgeLabel(() => ({}));
51-
graph.setGraph({ rankdir: "RL", nodesep: 90, ranksep: 140 });
51+
graph.setGraph({ rankdir: "RL", nodesep: 100, ranksep: 200, ranker: "longest-path" });
5252

5353
nodes.forEach((node) => {
5454
graph.setNode(node.id, { width: nodeWidth, height: nodeHeight });
@@ -284,6 +284,13 @@ const App = () => {
284284
setSelectedNodeId(selected ? selected.id : null);
285285
}, [nodes]);
286286

287+
useEffect(() => {
288+
if (selectedNodeId === null) {
289+
setSelectedProject(null);
290+
setSelectedTargetKey(null);
291+
}
292+
}, [selectedNodeId]);
293+
287294
useEffect(() => {
288295
setNodes((current) =>
289296
current.map((node) => ({
@@ -468,8 +475,10 @@ const App = () => {
468475
setEdges((current) =>
469476
current.map((edge) => {
470477
const isConnected =
471-
draggedNodeId !== null &&
472-
(edge.source === draggedNodeId || edge.target === draggedNodeId);
478+
(draggedNodeId !== null &&
479+
(edge.source === draggedNodeId || edge.target === draggedNodeId)) ||
480+
(selectedNodeId !== null &&
481+
(edge.source === selectedNodeId || edge.target === selectedNodeId));
473482
const stroke = isConnected ? highlightStroke : defaultStroke;
474483
return {
475484
...edge,
@@ -487,7 +496,7 @@ const App = () => {
487496
};
488497
})
489498
);
490-
}, [draggedNodeId, effectiveColorScheme, theme, setEdges]);
499+
}, [draggedNodeId, selectedNodeId, effectiveColorScheme, theme, setEdges]);
491500

492501
const nodeCount = graph ? Object.keys(graph.nodes).length : 0;
493502
const rootNodeCount = graph?.rootNodes?.length ?? 0;

0 commit comments

Comments
 (0)