diff options
Diffstat (limited to 'src/views/App.js')
| -rw-r--r-- | src/views/App.js | 42 |
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(); +} |
