summaryrefslogtreecommitdiff
path: root/src/views/App.js
diff options
context:
space:
mode:
Diffstat (limited to 'src/views/App.js')
-rw-r--r--src/views/App.js42
1 files changed, 42 insertions, 0 deletions
diff --git a/src/views/App.js b/src/views/App.js
new file mode 100644
index 0000000..c5a7f83
--- /dev/null
+++ b/src/views/App.js
@@ -0,0 +1,42 @@
+/**
+ * Main React app logic
+ */
+
+import React, { useState, useEffect, useCallback } from "react";
+
+import Detail from "./Detail.js";
+import buildGraph from "../graph.js";
+
+export default function App() {
+ const [db, setDb] = useState(null);
+ const [node, setNode] = useState(null);
+ const [detailVisible, setDetailVisible] = useState(null);
+
+ useEffect(async () => {
+ const newDb = await loadDB();
+ setDb(newDb);
+ buildGraph(newDb, {
+ click: handleClick,
+ });
+ }, []);
+
+ const handleClick = useCallback((node) => {
+ setNode(node);
+ setDetailVisible(true);
+ });
+
+ const handleClose = useCallback((node) => {
+ setDetailVisible(false);
+ });
+
+ return (
+ <div>
+ <Detail node={node} visible={detailVisible} onClose={handleClose} />
+ </div>
+ );
+}
+
+async function loadDB() {
+ const request = await fetch("/assets/db.json");
+ return await request.json();
+}