diff options
| author | Yuren Hao <97327730+YurenHao0426@users.noreply.github.com> | 2025-08-06 02:11:57 -0700 |
|---|---|---|
| committer | Yuren Hao <97327730+YurenHao0426@users.noreply.github.com> | 2025-08-06 02:11:57 -0700 |
| commit | ecfbb5c0ff41333363c7615d4a51acecc06c72a3 (patch) | |
| tree | e6cf818423afd2c9b6ae168f3150c7d36021ecdf /src/components/Graph.tsx | |
| parent | 79ec5fd1f0188a88f937737185c542e644cf98e4 (diff) | |
fix: handle namespace and add proxy support32yry8-codex/test-uiuc-api-cors-response
Diffstat (limited to 'src/components/Graph.tsx')
| -rw-r--r-- | src/components/Graph.tsx | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/src/components/Graph.tsx b/src/components/Graph.tsx new file mode 100644 index 0000000..5e81b38 --- /dev/null +++ b/src/components/Graph.tsx @@ -0,0 +1,49 @@ +import CytoscapeComponent from "react-cytoscapejs"; +import cytoscape from "cytoscape"; +import dagre from "cytoscape-dagre"; +import { useMemo } from "react"; + +cytoscape.use(dagre); + +type Catalog = Record<string, string[]>; + +export default function Graph({ catalog }: { catalog: Catalog }) { + const elements = useMemo(() => { + const els: any[] = []; + Object.keys(catalog).forEach(id => { + els.push({ data: { id } }); + catalog[id].forEach(p => + els.push({ + data: { id: `${p}->${id}`, source: p, target: id } + }) + ); + }); + return els; + }, [catalog]); + + return ( + <CytoscapeComponent + elements={elements} + stylesheet={[ + { + selector: "node", + style: { + "background-color": "#3182bd", + label: "data(id)", + color: "#fff" + } + }, + { + selector: "edge", + style: { + width: 2, + "target-arrow-shape": "triangle", + "curve-style": "bezier" + } + } + ]} + layout={{ name: "dagre", rankDir: "TB", nodeSep: 30, rankSep: 50 }} + style={{ width: "100%", height: "90vh" }} + /> + ); +} |
