-
Notifications
You must be signed in to change notification settings - Fork 3
/
App.js
82 lines (73 loc) · 2.22 KB
/
App.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
import React, { useEffect } from "react";
import { Route, Switch } from "react-router-dom";
import "carbon-components/css/carbon-components.min.css";
import "./App.css";
import { Loading } from "carbon-components-react";
import { HqPageAll, HqPageTag, HqPageDoc } from "./pages";
import { HqFooter, HqHeader, HqTagList } from "./components";
import { useInterval } from "./utils/useInterval";
import Headroom from "react-headroom";
import apiData from "./test/mock-api-data";
function App() {
const [isLoading, setIsLoading] = React.useState(true);
const [data, setData] = React.useState({});
const [savedSourceTimestamp, setSavedSourceTimestamp] =
React.useState("1970-01-01");
const makeRequest = () => {
if (process.env.REACT_APP_DEMO !== "true") {
fetch("/todos/filelastupdated")
.then((res) => res.json())
.then((currentSourceTimestamp) => {
if (savedSourceTimestamp < currentSourceTimestamp) {
fetch("/api")
.then((res) => res.json())
.then((data) => {
data.jsonchartdata = JSON.parse(data.jsonchartdata);
data.jsonsupportdata = JSON.parse(data.jsonsupportdata);
setData(data);
setSavedSourceTimestamp(currentSourceTimestamp);
setIsLoading(false);
});
}
});
}
};
useEffect(() => {
if (process.env.REACT_APP_DEMO === "true") {
setData(apiData);
setIsLoading(false);
}
}, []);
useInterval(async () => {
makeRequest();
}, 40000);
if (isLoading) {
return <Loading />;
}
return (
<div>
<Headroom>
<HqHeader userName={data.whoami} />
<HqTagList tags={data.tags} />
</Headroom>
<Switch>
<Route path="/" exact>
<HqPageAll data={data} />
</Route>
<Route path="/tags/:tag">
<HqPageTag data={data} />
</Route>
<Route path="/doc">
<HqPageDoc />
</Route>
</Switch>
<HqFooter
pageUpdated={
process.env.REACT_APP_DEMO !== "true" ? data.pageupdated : new Date().toISOString()
}
fileUpdated={data.fileupdated}
/>
</div>
);
}
export default App;