diff --git a/src/App.css b/src/App.css
index 7ae39f7..ed1b8c0 100644
--- a/src/App.css
+++ b/src/App.css
@@ -23,6 +23,77 @@ footer {
font-size: x-small;
}
+.controls {
+ z-index: 9;
+ position: absolute;
+ top: 24;
+ left: 24;
+ padding: 16px;
+
+ .control {
+ display: flex;
+ flex-direction: row;
+
+ * {
+ margin: 0 4px;
+ }
+ }
+}
+
+/* The switch - the box around the slider */
+.switch {
+ position: relative;
+ width: 68px;
+ height: 34px;
+}
+
+/* Hide default HTML checkbox */
+.switch input {
+ opacity: 0;
+ width: 0;
+ height: 0;
+}
+
+/* The slider */
+.slider {
+ position: absolute;
+ cursor: pointer;
+ top: 0;
+ left: 0;
+ right: 0;
+ bottom: 0;
+ background-color: #ccc;
+ border-radius: 34px;
+ -webkit-transition: .4s;
+ transition: .4s;
+}
+
+.slider:before {
+ position: absolute;
+ content: "";
+ height: 26px;
+ width: 26px;
+ left: 4px;
+ bottom: 4px;
+ background-color: white;
+ border-radius: 50%;
+ -webkit-transition: .4s;
+ transition: .4s;
+}
+
+input:checked+.slider {
+ background-color: #2196F3;
+}
+
+input:focus+.slider {
+ box-shadow: 0 0 1px #2196F3;
+}
+
+input:checked+.slider:before {
+ -webkit-transform: translateX(26px);
+ -ms-transform: translateX(26px);
+ transform: translateX(26px);
+}
.grey {
color: #444;
diff --git a/src/Network.tsx b/src/Network.tsx
index 972a3ec..e51f1da 100644
--- a/src/Network.tsx
+++ b/src/Network.tsx
@@ -1,6 +1,7 @@
-import { useEffect, useRef, useState } from "react";
+import { ChangeEvent, useEffect, useRef, useState } from "react";
import { apiAuth } from "./api";
-import { GraphCanvas, GraphCanvasRef, GraphEdge, GraphNode, useSelection } from "reagraph";
+import { GraphCanvas, GraphCanvasRef, GraphEdge, GraphNode, recommendLayout, useSelection } from "reagraph";
+import { customTheme } from "./NetworkTheme";
interface NetworkData {
nodes: GraphNode[],
@@ -10,6 +11,7 @@ interface NetworkData {
export const GraphComponent = () => {
const [data, setData] = useState({ nodes: [], edges: [] } as NetworkData);
const [loading, setLoading] = useState(true);
+ const [threed, setThreed] = useState(false);
async function loadData() {
setLoading(true);
@@ -26,20 +28,46 @@ export const GraphComponent = () => {
ref: graphRef,
nodes: data.nodes,
edges: data.edges,
- pathSelectionType: 'out'
+ pathSelectionType: 'out',
});
+ function handleThreed() {
+ setThreed(!threed)
+ graphRef.current?.fitNodesInView();
+ graphRef.current?.centerGraph();
+ graphRef.current?.resetControls();
+ }
+
return (
-