blob: 725cda0e1a2dc934bea37e9604b6f36c0cab89ba [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 -040011//import logo from './logo.svg'
12import './App.scss'
Larbi Gharibe9af9732021-03-31 15:08:01 +010013
Adrien Béraud35e7d7c2021-04-13 03:28:39 -040014import SignInPage from "./pages/loginDialog.jsx"
Adrien Béraud6c934962021-06-07 10:13:26 -040015import JamiMessenger from "./pages/JamiMessenger.jsx"
Adrien Béraud6ecaa402021-04-06 17:37:25 -040016import AccountSettings from "./pages/accountSettings.jsx"
17import AccountSelection from "./pages/accountSelection.jsx"
Adrien Béraude74741b2021-04-19 13:22:54 -040018import ServerSetup from "./pages/serverSetup.jsx"
Adrien Béraud88a52442021-04-26 12:11:41 -040019import AccountCreationDialog from "./pages/accountCreation.jsx"
Larbi Gharibe9af9732021-03-31 15:08:01 +010020import NotFoundPage from "./pages/404.jsx"
Adrien Béraud150b4782021-04-21 19:40:59 -040021import LoadingPage from './components/loading'
Adrien Béraud88a52442021-04-26 12:11:41 -040022import JamiAccountDialog from './pages/jamiAccountCreation.jsx'
Adrien Béraud6c934962021-06-07 10:13:26 -040023import { AnimatePresence } from 'framer-motion'
Adrien Béraud34995902021-06-07 10:12:00 -040024import WelcomeAnimation from './components/welcome'
Larbi Gharibe9af9732021-03-31 15:08:01 +010025
Adrien Béraudab519ff2022-05-03 15:34:48 -040026const theme = createTheme();
27const useStyles = makeStyles((theme) => {
28 root: {
29 // some CSS that access to theme
30 }
31})
32
33const Home = (props) => {
34 console.log(`home ${props}`)
35 //const navigate = useNavigate()
36 const [state, setState] = useState({
37 auth: authManager.getState()
38 })
39
40 return <Navigate to="/account" />
41}
42
Adrien Béraude74741b2021-04-19 13:22:54 -040043const App = (props) => {
Adrien Béraude74741b2021-04-19 13:22:54 -040044 const [state, setState] = useState({
45 loaded: false,
46 auth: authManager.getState()
47 })
Adrien Béraud34995902021-06-07 10:12:00 -040048 const [displayWelcome, setDisplayWelcome] = useState(true)
49
Adrien Béraude74741b2021-04-19 13:22:54 -040050 useEffect(() => {
51 authManager.init(auth => {
Adrien Béraud6c934962021-06-07 10:13:26 -040052 setState({ loaded: false, auth })
Adrien Béraude74741b2021-04-19 13:22:54 -040053 })
54 return () => authManager.deinit()
55 }, []);
Larbi Gharibe9af9732021-03-31 15:08:01 +010056
Adrien Béraud34995902021-06-07 10:12:00 -040057 console.log("App render")
58 if (displayWelcome) {
59 return <WelcomeAnimation showSetup={!state.auth.setupComplete} onComplete={() => setDisplayWelcome(false)} />
Adrien Béraude74741b2021-04-19 13:22:54 -040060 } else if (!state.auth.setupComplete) {
Adrien Béraudab519ff2022-05-03 15:34:48 -040061 return <Routes>
62 <Route path="/setup" element={<ServerSetup />} />
63 <Route path="/" element={<Navigate to="/setup" replace />} />
64 <Route index path="*" element={<Navigate to="/setup" replace />} />
65 </Routes>
Adrien Béraude74741b2021-04-19 13:22:54 -040066 }
Adrien Béraud6c934962021-06-07 10:13:26 -040067
Adrien Béraudab519ff2022-05-03 15:34:48 -040068 return <ThemeProvider theme={theme}>
69 <Routes>
70 <Route path="/account">
71 <Route index element={<AccountSelection />} />
72 <Route path=":accountId">
73 <Route index path="*" element={<JamiMessenger />} />
74 <Route path="settings" element={<AccountSettings />} />
75 </Route>
76 </Route>
77 <Route path="/newAccount" element={<AccountCreationDialog />}>
78 <Route path="jami" element={<JamiAccountDialog />} />
79 </Route>
80 <Route path="/setup" element={<ServerSetup />} />
81 <Route path="/" index element={<Home />} />
82 <Route path="*" element={<NotFoundPage />} />
83 </Routes>
84 {!state.auth.authenticated && <SignInPage key="signin" open={!state.auth.authenticated}/>}
85 </ThemeProvider>
Larbi Gharibe9af9732021-03-31 15:08:01 +010086}
87
Adrien Béraude74741b2021-04-19 13:22:54 -040088export default App