diff options
| author | Jules Laplace <julescarbon@gmail.com> | 2021-09-27 15:38:49 +0200 |
|---|---|---|
| committer | Jules Laplace <julescarbon@gmail.com> | 2021-09-27 15:38:49 +0200 |
| commit | 8c14599404e3905ebfedb148f9d23d09f26331e3 (patch) | |
| tree | 1952dd070e4d74445838c1d864d824c9e083a46c /src/views/App.js | |
| parent | 64408333a8b5378564911766f6e40add0862e28f (diff) | |
graph, intro
Diffstat (limited to 'src/views/App.js')
| -rw-r--r-- | src/views/App.js | 70 |
1 files changed, 12 insertions, 58 deletions
diff --git a/src/views/App.js b/src/views/App.js index 8c8722b..74f479f 100644 --- a/src/views/App.js +++ b/src/views/App.js @@ -1,79 +1,33 @@ /** - * Main React app logic + * Application */ -import React, { useState, useEffect, useCallback } from "react"; +import React, { useState, useEffect } from "react"; import * as THREE from "three"; import { MTLLoader, OBJLoader } from "@hbis/three-obj-mtl-loader"; -import Detail from "./Detail.js"; -import Legend from "./Legend.js"; -import Quote from "./Quote.js"; -import Credits from "./Credits.js"; -import Title from "./Title.js"; -import buildGraph from "../graph.js"; +import Graph from "./Graph.js"; +import Intro from "./Intro.js"; export default function App() { const [db, setDb] = useState(null); - const [node, setNode] = useState(null); - const [graph, setGraph] = useState(null); - const [selectedCategory, setSelectedCategory] = useState(null); - const [detailVisible, setDetailVisible] = useState(null); - const [creditsVisible, setCreditsVisible] = useState(true); + const [intro, setIntro] = useState(true); - /** Load the database */ useEffect(async () => { const newDb = await loadDB(); await loadObjects(newDb); setDb(newDb); - setGraph( - buildGraph({ - db: newDb, - handlers: { - click: handleClick, - }, - }) - ); }, []); - /** Click to open a node */ - const handleClick = useCallback((node) => { - setNode(node); - setDetailVisible(true); - }); - - /** Click to close the media modal */ - const handleClose = useCallback((node) => { - setDetailVisible(false); - }); - - /** Select or clear the category */ - const handleSelect = useCallback((category) => { - if (category === selectedCategory) { - setSelectedCategory(null); - graph.onSelect(null); - } else { - setSelectedCategory(category); - graph.onSelect(category); - } - }); + const closeIntro = () => { + setIntro(false); + }; return ( - <div> - <Detail node={node} visible={detailVisible} onClose={handleClose} /> - <Legend - visible={!detailVisible && !creditsVisible} - selected={selectedCategory} - onSelect={handleSelect} - /> - <Quote visible={!detailVisible && !creditsVisible} /> - <Credits - onToggle={setCreditsVisible} - visible={!detailVisible} - open={creditsVisible} - /> - <Title visible={!detailVisible && !creditsVisible} /> - </div> + <> + {intro && <Intro onComplete={closeIntro} />} + {!intro && db && <Graph db={db} />} + </> ); } |
