/
App.tsx
executable file
·82 lines (74 loc) · 2.21 KB
/
App.tsx
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, { useState, useEffect, useMemo } from 'react';
import { ThemeProvider } from '@material-ui/styles';
import { createMuiTheme } from '@material-ui/core/styles';
import { CssBaseline } from '@material-ui/core';
import Fathom from 'fathom-client';
import { Login } from './components/Login';
import { Home } from './components/Home';
import { Loader } from './components/Loader';
import { ThemeContext, themeStorageKey } from './context/ThemeContext';
import { FileContextProvider } from './context/FileContext';
import { userSession } from './utils/blockstack';
import { config } from './config';
// Track when page is loaded
const FathomTrack = () => {
useEffect(() => {
if (config.fathomSiteId) {
Fathom.load();
Fathom.setSiteId(config.fathomSiteId);
Fathom.trackPageview();
}
}, []);
return <React.Fragment />;
};
const App = () => {
const localTheme = localStorage.getItem('theme');
const [theme, setTheme] = useState<'light' | 'dark'>(
localTheme === 'dark' ? 'dark' : 'light'
);
const [loggedIn, setLoggedIn] = useState(!!userSession.isUserSignedIn());
const [loggingIn, setLoggingIn] = useState(!!userSession.isSignInPending());
const muiTheme = useMemo(
() =>
createMuiTheme({
palette: {
type: theme,
},
}),
[theme]
);
const handleChangeTheme = (data: 'light' | 'dark') => {
setTheme(data);
localStorage.setItem(themeStorageKey, data);
};
useEffect(() => {
if (userSession.isSignInPending()) {
userSession
.handlePendingSignIn()
.then(() => {
setLoggingIn(false);
setLoggedIn(true);
})
.catch((error: any) => {
setLoggingIn(false);
alert(error.message);
});
}
}, []);
return (
<ThemeProvider theme={muiTheme}>
<ThemeContext.Provider value={theme}>
<CssBaseline />
<FathomTrack />
{!loggingIn && !loggedIn && <Login />}
{!loggingIn && loggedIn && (
<FileContextProvider>
<Home setTheme={handleChangeTheme} />
</FileContextProvider>
)}
{loggingIn && <Loader />}
</ThemeContext.Provider>
</ThemeProvider>
);
};
export default App;