blob: 968e62bdaea21e0c6baa81b80e3ae683b5bfa1c2 [file] [log] [blame]
simon26e79f72022-10-05 22:16:08 -04001/*
2 * Copyright (C) 2022 Savoir-faire Linux Inc.
3 *
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU Affero General Public License as
6 * published by the Free Software Foundation; either version 3 of the
7 * License, or (at your option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU Affero General Public License for more details.
13 *
14 * You should have received a copy of the GNU Affero General Public
15 * License along with this program. If not, see
16 * <https://www.gnu.org/licenses/>.
17 */
simond47ef9e2022-09-28 22:24:28 -040018'use strict';
19import './index.scss';
idillon5815c732022-09-16 13:54:45 -040020import './i18n';
Larbi Gharibe9af9732021-03-31 15:08:01 +010021
Michelle Sepkap Sime51c00452022-10-31 21:26:38 -040022import { ThemeProvider } from '@mui/material/styles';
idillon08f77172022-09-13 19:14:17 -040023import { QueryClient, QueryClientProvider } from '@tanstack/react-query';
simon07b4eb02022-09-29 17:50:26 -040024import { StrictMode } from 'react';
25import { createRoot } from 'react-dom/client';
26import { Provider } from 'react-redux';
Michelle Sepkap Sime51c00452022-10-31 21:26:38 -040027import { createBrowserRouter, createRoutesFromElements, Route, RouterProvider } from 'react-router-dom';
idillon322e4ac2022-09-14 12:48:43 -040028import socketio from 'socket.io-client';
simon07b4eb02022-09-29 17:50:26 -040029
simon218d3d12022-10-01 17:27:01 -040030import App from './App';
Michelle Sepkap Sime51c00452022-10-31 21:26:38 -040031import ContactList from './components/ContactList';
simon416d0792022-11-03 02:46:18 -040032import AuthProvider from './contexts/AuthProvider';
simon35378692022-10-02 23:25:57 -040033import { SocketProvider } from './contexts/Socket';
Michelle Sepkap Simeb3dd3122022-11-03 02:12:39 -040034import AccountSelection from './pages/AccountSelection';
Michelle Sepkap Sime51c00452022-10-31 21:26:38 -040035import AccountSettings from './pages/AccountSettings';
Michelle Sepkap Simeb3dd3122022-11-03 02:12:39 -040036import CallInterface from './pages/CallInterface';
37import DeprecatedAccountSettings from './pages/DeprecatedAccountSettings';
Michelle Sepkap Sime51c00452022-10-31 21:26:38 -040038import JamiMessenger from './pages/JamiMessenger';
Michelle Sepkap Simeb3dd3122022-11-03 02:12:39 -040039import Messenger from './pages/Messenger';
Michelle Sepkap Sime51c00452022-10-31 21:26:38 -040040import ServerSetup from './pages/ServerSetup';
simon416d0792022-11-03 02:46:18 -040041import Welcome from './pages/Welcome';
simond8ca2f22022-10-11 23:30:55 -040042import { store } from './redux/store';
Michelle Sepkap Sime51c00452022-10-31 21:26:38 -040043import defaultTheme from './themes/Default';
44import { ThemeDemonstrator } from './themes/ThemeDemonstrator';
idillon08f77172022-09-13 19:14:17 -040045
46const queryClient = new QueryClient({
47 defaultOptions: {
48 queries: {
49 cacheTime: Infinity, // websocket is responsible to tell when data needs to be updated
50 },
51 },
simond47ef9e2022-09-28 22:24:28 -040052});
idillon5e897432022-09-16 13:28:09 -040053
simond47ef9e2022-09-28 22:24:28 -040054const socket = socketio();
idillon322e4ac2022-09-14 12:48:43 -040055
Michelle Sepkap Sime51c00452022-10-31 21:26:38 -040056const router = createBrowserRouter(
57 createRoutesFromElements(
58 <Route path="/" element={<App />}>
simon416d0792022-11-03 02:46:18 -040059 <Route index element={<Welcome />} />
Michelle Sepkap Sime51c00452022-10-31 21:26:38 -040060 <Route path="theme" element={<ThemeDemonstrator />} />
simon416d0792022-11-03 02:46:18 -040061 <Route element={<AuthProvider />}>
62 <Route path="account" element={<JamiMessenger />} />
63 <Route path="settings" element={<AccountSettings />} />
64 <Route path="contacts" element={<ContactList />} />
65 </Route>
Michelle Sepkap Sime51c00452022-10-31 21:26:38 -040066 <Route path="setup" element={<ServerSetup />} />
Michelle Sepkap Simeb3dd3122022-11-03 02:12:39 -040067 {/* TODO: Remove this block after migration to new server*/}
68 <Route path="deprecated-account" element={<AccountSelection />} />
69 <Route path="deprecated-account/:accountId" element={<Messenger />}>
70 <Route path="addContact/:contactId" element={<Messenger />} />
71 <Route path="conversation/:conversationId" element={<Messenger />} />
72 <Route path="call/:conversationId" element={<CallInterface />} />
73 </Route>
74 <Route path="deprecated-account/:accountId/settings" element={<DeprecatedAccountSettings />} />
Michelle Sepkap Sime51c00452022-10-31 21:26:38 -040075 </Route>
76 )
77);
78
simond47ef9e2022-09-28 22:24:28 -040079const container = document.getElementById('root');
simon218d3d12022-10-01 17:27:01 -040080if (!container) {
81 throw new Error('Failed to get the root element');
82}
idillon169f64f2022-09-16 14:01:22 -040083const root = createRoot(container);
84root.render(
85 <Provider store={store}>
Adrien Béraud023f7cf2022-09-18 14:57:53 -040086 <StrictMode>
idillon08f77172022-09-13 19:14:17 -040087 <QueryClientProvider client={queryClient}>
idillon322e4ac2022-09-14 12:48:43 -040088 <SocketProvider socket={socket}>
Michelle Sepkap Sime51c00452022-10-31 21:26:38 -040089 <ThemeProvider theme={defaultTheme}>
90 <RouterProvider router={router} />
91 </ThemeProvider>
idillon322e4ac2022-09-14 12:48:43 -040092 </SocketProvider>
idillon08f77172022-09-13 19:14:17 -040093 </QueryClientProvider>
Adrien Béraud023f7cf2022-09-18 14:57:53 -040094 </StrictMode>
idillon169f64f2022-09-16 14:01:22 -040095 </Provider>
96);