-
Notifications
You must be signed in to change notification settings - Fork 13
/
Copy pathApp.tsx
121 lines (112 loc) · 4.46 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
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
import './App.scss';
import { useContext, useEffect } from 'react';
import { Navigate, Outlet, RouterProvider, createBrowserRouter } from 'react-router-dom';
import Container from 'react-bootstrap/Container';
import useHttp from '../../hooks/use-http';
import useBreakpoint from '../../hooks/use-breakpoint';
import { AppContext } from '../../store/AppContext';
import { ApplicationModes } from '../../utilities/constants';
import ToastMessage from '../shared/ToastMessage/ToastMessage';
import Header from '../ui/Header/Header';
import NodeInfo from '../modals/NodeInfo/NodeInfo';
import ConnectWallet from '../modals/ConnectWallet/ConnectWallet';
import LoginComponent from '../modals/Login/Login';
import LogoutComponent from '../modals/Logout/Logout';
import SetPasswordComponent from '../modals/SetPassword/SetPassword';
import logger from '../../services/logger.service';
import { AuthResponse } from '../../types/app-config.type';
import Bookkeeper from '../bookkeeper/BkprRoot/BkprRoot';
import CLNHome from '../cln/CLNHome/CLNHome';
import BalanceSheetRoot from '../bookkeeper/BalanceSheet/BalanceSheetRoot';
import SatsFlowRoot from '../bookkeeper/SatsFlow/SatsFlowRoot';
import VolumeRoot from '../bookkeeper/Volume/VolumeRoot';
import Terminal from '../bookkeeper/Terminal/TerminalRoot';
export const rootRouteConfig = [
{
path: "/", Component: Root,
children: [
{ path: "/", Component: () => <Navigate to="/home" replace /> },
{ path: "home", Component: CLNHome },
{ path: "bookkeeper", Component: Bookkeeper },
{ path: "bookkeeper/balancesheet", Component: BalanceSheetRoot },
{ path: "bookkeeper/satsflow", Component: SatsFlowRoot },
{ path: "bookkeeper/volume", Component: VolumeRoot },
{ path: "bookkeeper/terminal", Component: Terminal }
]
},
];
const rootRouter = createBrowserRouter(rootRouteConfig);
function Root() {
const appCtx = useContext(AppContext);
const currentScreenSize = useBreakpoint();
const { setCSRFToken, getAppConfigurations, getAuthStatus, initiateDataLoading } = useHttp();
const bodyHTML = document.getElementsByTagName('body')[0];
const htmlAttributes = bodyHTML.attributes;
const theme = document.createAttribute('data-bs-theme');
theme.value = appCtx.appConfig.appMode?.toLowerCase() || 'dark';
bodyHTML.style.backgroundColor =
appCtx.appConfig.appMode === ApplicationModes.LIGHT ? '#EBEFF9' : '#0C0C0F';
const screensize = document.createAttribute('data-screensize');
screensize.value = currentScreenSize;
htmlAttributes.setNamedItem(theme);
htmlAttributes.setNamedItem(screensize);
useEffect(() => {
Promise.all([
setCSRFToken(),
getAppConfigurations()
])
.then(([isCsrfSet, config]: [any, any]) => {
if (isCsrfSet) {
getAuthStatus().then((authStatus: AuthResponse) => {
if (!authStatus.isAuthenticated) {
if (authStatus.isValidPassword) {
appCtx.setShowModals({ ...appCtx.showModals, loginModal: true });
} else {
appCtx.setShowModals({ ...appCtx.showModals, setPasswordModal: true });
}
} else {
if (authStatus.isValidPassword) {
initiateDataLoading();
} else {
logger.error(authStatus);
appCtx.setNodeInfo({ isLoading: false, error: JSON.stringify(authStatus) });
}
}
});
} else {
logger.error(isCsrfSet);
appCtx.setNodeInfo({ isLoading: false, error: typeof isCsrfSet === 'object' ? JSON.stringify(isCsrfSet) : isCsrfSet });
}
}).catch(err => {
logger.error(err);
if (err.response && err.response.data) {
appCtx.setNodeInfo({ isLoading: false, error: err.response.data });
} else if (!err.response && err.message) {
appCtx.setNodeInfo({ isLoading: false, error: err.message })
} else {
appCtx.setNodeInfo({ isLoading: false, error: JSON.stringify(err)});
}
});
// eslint-disable-next-line react-hooks/exhaustive-deps
}, []);
return (
<>
<Container className={appCtx.authStatus.isAuthenticated ? 'py-4' : 'py-4 blurred-container'} id='root-container' data-testid='container'>
<Header />
<Outlet />
</Container>
<ToastMessage />
<NodeInfo />
<ConnectWallet />
<LoginComponent />
<LogoutComponent />
<SetPasswordComponent />
</>
);
}
const App = () => {
return (
<RouterProvider router={rootRouter} />
);
};
export default App;