blob: 0b10e3105509cacd01ec670513036d34e66453d4 [file] [log] [blame]
Larbi Gharibe9af9732021-03-31 15:08:01 +01001/*
2 Company: Savoir-faire Linux
3 Author: Larbi Gharib <larbi.gharib@savoirfairelinux.com>
Larbi Gharibe9af9732021-03-31 15:08:01 +01004 License: AGPL-3
5*/
Adrien Béraudab519ff2022-05-03 15:34:48 -04006import { ThemeProvider, StyledEngineProvider, createTheme } from '@mui/material/styles';
7import makeStyles from '@mui/styles/makeStyles';
Adrien Béraude74741b2021-04-19 13:22:54 -04008import React, { useState, useEffect } from 'react'
Adrien Béraudab519ff2022-05-03 15:34:48 -04009import { Route, Routes, Navigate, PageLayout, useNavigate } from 'react-router-dom'
Adrien Béraud6ecaa402021-04-06 17:37:25 -040010import authManager from './AuthManager'
Adrien Béraude74741b2021-04-19 13:22:54 -040011import './App.scss'
Larbi Gharibe9af9732021-03-31 15:08:01 +010012
Adrien Béraud35e7d7c2021-04-13 03:28:39 -040013import SignInPage from "./pages/loginDialog.jsx"
Adrien Béraud6c934962021-06-07 10:13:26 -040014import JamiMessenger from "./pages/JamiMessenger.jsx"
Adrien Béraud6ecaa402021-04-06 17:37:25 -040015import AccountSettings from "./pages/accountSettings.jsx"
16import AccountSelection from "./pages/accountSelection.jsx"
Adrien Béraude74741b2021-04-19 13:22:54 -040017import ServerSetup from "./pages/serverSetup.jsx"
Adrien Béraud88a52442021-04-26 12:11:41 -040018import AccountCreationDialog from "./pages/accountCreation.jsx"
Larbi Gharibe9af9732021-03-31 15:08:01 +010019import NotFoundPage from "./pages/404.jsx"
Adrien Béraud150b4782021-04-21 19:40:59 -040020import LoadingPage from './components/loading'
Adrien Béraud88a52442021-04-26 12:11:41 -040021import JamiAccountDialog from './pages/jamiAccountCreation.jsx'
Adrien Béraud6c934962021-06-07 10:13:26 -040022import { AnimatePresence } from 'framer-motion'
Adrien Béraud34995902021-06-07 10:12:00 -040023import WelcomeAnimation from './components/welcome'
Larbi Gharibe9af9732021-03-31 15:08:01 +010024
Adrien Béraudab519ff2022-05-03 15:34:48 -040025const theme = createTheme();
26const useStyles = makeStyles((theme) => {
27 root: {
28 // some CSS that access to theme
29 }
30})
31
32const Home = (props) => {
33 console.log(`home ${props}`)
34 //const navigate = useNavigate()
35 const [state, setState] = useState({
36 auth: authManager.getState()
37 })
38
39 return <Navigate to="/account" />
40}
41
Adrien Béraude74741b2021-04-19 13:22:54 -040042const App = (props) => {
Adrien Béraude74741b2021-04-19 13:22:54 -040043 const [state, setState] = useState({
44 loaded: false,
45 auth: authManager.getState()
46 })
Adrien Béraud34995902021-06-07 10:12:00 -040047 const [displayWelcome, setDisplayWelcome] = useState(true)
48
Adrien Béraude74741b2021-04-19 13:22:54 -040049 useEffect(() => {
50 authManager.init(auth => {
Adrien Béraud6c934962021-06-07 10:13:26 -040051 setState({ loaded: false, auth })
Adrien Béraude74741b2021-04-19 13:22:54 -040052 })
53 return () => authManager.deinit()
54 }, []);
Larbi Gharibe9af9732021-03-31 15:08:01 +010055
Adrien Béraud34995902021-06-07 10:12:00 -040056 console.log("App render")
57 if (displayWelcome) {
58 return <WelcomeAnimation showSetup={!state.auth.setupComplete} onComplete={() => setDisplayWelcome(false)} />
Adrien Béraude74741b2021-04-19 13:22:54 -040059 } else if (!state.auth.setupComplete) {
Adrien Béraudab519ff2022-05-03 15:34:48 -040060 return <Routes>
61 <Route path="/setup" element={<ServerSetup />} />
62 <Route path="/" element={<Navigate to="/setup" replace />} />
63 <Route index path="*" element={<Navigate to="/setup" replace />} />
64 </Routes>
Adrien Béraude74741b2021-04-19 13:22:54 -040065 }
Adrien Béraud6c934962021-06-07 10:13:26 -040066
Adrien Béraudab519ff2022-05-03 15:34:48 -040067 return <ThemeProvider theme={theme}>
68 <Routes>
69 <Route path="/account">
70 <Route index element={<AccountSelection />} />
71 <Route path=":accountId">
72 <Route index path="*" element={<JamiMessenger />} />
73 <Route path="settings" element={<AccountSettings />} />
74 </Route>
75 </Route>
76 <Route path="/newAccount" element={<AccountCreationDialog />}>
77 <Route path="jami" element={<JamiAccountDialog />} />
78 </Route>
79 <Route path="/setup" element={<ServerSetup />} />
80 <Route path="/" index element={<Home />} />
81 <Route path="*" element={<NotFoundPage />} />
82 </Routes>
83 {!state.auth.authenticated && <SignInPage key="signin" open={!state.auth.authenticated}/>}
84 </ThemeProvider>
Larbi Gharibe9af9732021-03-31 15:08:01 +010085}
86
Adrien Béraude74741b2021-04-19 13:22:54 -040087export default App