use ESM, add server setup, cleanup
Change-Id: Iafac35c2082523ae98c31017d9bad5c4d6e18ef3
diff --git a/client/src/App.js b/client/src/App.js
index 10db90a..cc1b5bf 100644
--- a/client/src/App.js
+++ b/client/src/App.js
@@ -3,52 +3,59 @@
Author: Larbi Gharib <larbi.gharib@savoirfairelinux.com>
License: AGPL-3
*/
-
-import React from 'react';
-import CssBaseline from '@material-ui/core/CssBaseline';
+import React, { useState, useEffect } from 'react'
+import { Route, Switch, Redirect, useHistory, useLocation } from 'react-router-dom'
+import { CircularProgress, Container, CssBaseline } from '@material-ui/core'
import authManager from './AuthManager'
-//import logo from './logo.svg';
-import './App.scss';
-
-import { BrowserRouter as Router, Route, Switch, Link, Redirect } from 'react-router-dom';
+//import logo from './logo.svg'
+import './App.scss'
import SignInPage from "./pages/loginDialog.jsx"
import JamiMessenger from "./pages/messenger.jsx"
import AccountSettings from "./pages/accountSettings.jsx"
import AccountSelection from "./pages/accountSelection.jsx"
-import AddContactPage from "./pages/addContactPage.jsx"
-
+import ServerSetup from "./pages/serverSetup.jsx"
import NotFoundPage from "./pages/404.jsx"
-class App extends React.Component {
- constructor(props) {
- super(props);
- this.state = {
- authenticated: authManager.isAuthenticated(),
- };
- authManager.setOnAuthChanged(authenticated => this.setState({authenticated}))
- }
+const App = (props) => {
+ const history = useHistory()
+ const { location } = useLocation()
+ const [state, setState] = useState({
+ loaded: false,
+ auth: authManager.getState()
+ })
+ useEffect(() => {
+ authManager.init(auth => {
+ setState({ loaded: true, auth })
+ })
+ return () => authManager.deinit()
+ }, []);
- render() {
console.log("App render")
- console.log(this.props)
+ console.log(state)
+ console.log(location)
- return <React.Fragment>
- <CssBaseline />
- <Router>
- <Switch>
- <Route exact path="/"><Redirect to="/account" /></Route>
- <Route path="/account/:accountId/settings" component={AccountSettings} />
- <Route path="/account/:accountId/addContact/:contactId" component={JamiMessenger} />
- <Route path="/account/:accountId/conversation/:conversationId" component={JamiMessenger} />
- <Route path="/account/:accountId" component={JamiMessenger} />
- <Route path="/account" component={AccountSelection} />
- <Route component={NotFoundPage} />
- </Switch>
- </Router>
- {!this.state.authenticated && <SignInPage open={!this.state.authenticated}/>}
- </React.Fragment>
- }
+ if (!state.loaded) {
+ return <Container><CircularProgress /></Container>
+ } else if (!state.auth.setupComplete) {
+ return <Switch>
+ <Route path="/setup" component={ServerSetup} />
+ <Route><Redirect to="/setup" /></Route>
+ </Switch>
+ }
+ return <React.Fragment>
+ <CssBaseline />
+ <Switch>
+ <Route exact path="/"><Redirect to="/account" /></Route>
+ <Route path="/account/:accountId/settings" component={AccountSettings} />
+ <Route path="/account/:accountId/addContact/:contactId" component={JamiMessenger} />
+ <Route path="/account/:accountId/conversation/:conversationId" component={JamiMessenger} />
+ <Route path="/account/:accountId" component={JamiMessenger} />
+ <Route path="/account" component={AccountSelection} />
+ <Route component={NotFoundPage} />
+ </Switch>
+ {!state.auth.authenticated && <SignInPage open={!state.auth.authenticated}/>}
+ </React.Fragment>
}
-export default App
\ No newline at end of file
+export default App