Convert js files in `client/src` to Typescript
Gitlab: #30
Change-Id: I679b8b0f30445a872d152ae93ecad5ff6c9a259f
diff --git a/client/src/App.tsx b/client/src/App.tsx
new file mode 100644
index 0000000..0893dbd
--- /dev/null
+++ b/client/src/App.tsx
@@ -0,0 +1,87 @@
+/*
+ Company: Savoir-faire Linux
+ Author: Larbi Gharib <larbi.gharib@savoirfairelinux.com>
+ License: AGPL-3
+*/
+import { ThemeProvider } from '@mui/material/styles';
+import { useEffect, useState } from 'react';
+import { Navigate, Route, Routes } from 'react-router-dom';
+
+import authManager from './AuthManager';
+import WelcomeAnimation from './components/welcome';
+import NotFoundPage from './pages/404.jsx';
+import AccountCreationDialog from './pages/accountCreation.jsx';
+import AccountSelection from './pages/accountSelection.jsx';
+import AccountSettings from './pages/accountSettings.jsx';
+import JamiAccountDialog from './pages/jamiAccountCreation.jsx';
+import JamiMessenger from './pages/JamiMessenger.jsx';
+import SignInPage from './pages/loginDialog.jsx';
+import ServerSetup from './pages/serverSetup.jsx';
+import defaultTheme from './themes/default';
+import { ThemeDemonstrator } from './themes/ThemeDemonstrator';
+
+// import { useSelector, useDispatch } from 'react-redux'
+// import { useAppSelector, useAppDispatch } from '../redux/hooks'
+
+const Home = () => {
+ return <Navigate to="/account" />;
+};
+
+const App = () => {
+ // const count = useSelector(state => state.counter.value)
+ // const dispatch = useDispatch();
+ // const count = useAppSelector((state) => state.counter.value);
+ // const dispatch = useAppDispatch();
+
+ const [state, setState] = useState({
+ loaded: false,
+ auth: authManager.getState(),
+ });
+ const [displayWelcome, setDisplayWelcome] = useState(true);
+
+ useEffect(() => {
+ authManager.init((auth) => {
+ setState({ loaded: false, auth });
+ });
+ return () => authManager.deinit();
+ }, []);
+
+ console.log('App render');
+
+ if (displayWelcome) {
+ return <WelcomeAnimation showSetup={!state.auth.setupComplete} onComplete={() => setDisplayWelcome(false)} />;
+ } else if (!state.auth.setupComplete) {
+ return (
+ <Routes>
+ <Route path="/setup" element={<ServerSetup />} />
+ <Route path="/" element={<Navigate to="/setup" replace />} />
+ <Route path="*" element={<Navigate to="/setup" replace />} />
+ </Routes>
+ );
+ }
+
+ return (
+ <ThemeProvider theme={defaultTheme}>
+ <Routes>
+ <Route path="/account">
+ <Route index element={<AccountSelection />} />
+ <Route path=":accountId">
+ <Route path="*" element={<JamiMessenger />} />
+ <Route path="settings" element={<AccountSettings />} />
+ </Route>
+ </Route>
+ <Route path="/newAccount" element={<AccountCreationDialog />}>
+ <Route path="jami" element={<JamiAccountDialog />} />
+ </Route>
+ {/* <Route path="/Contacts" element={<ContactList />} /> */}
+ <Route path="/Theme" element={<ThemeDemonstrator />} />
+ <Route path="/setup" element={<ServerSetup />} />
+ <Route path="/" element={<Home />} />
+ <Route path="*" element={<NotFoundPage />} />
+ </Routes>
+ {!state.auth.authenticated && <SignInPage key="signin" open={!state.auth.authenticated} />}
+ </ThemeProvider>
+ );
+};
+
+export default App;