blob: 680aa065c4c305a81609ea2ad2889a0ccaaac6f1 [file] [log] [blame]
simon3f5f3e72022-11-08 21:01:57 -05001/*
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 */
18import { createBrowserRouter, createRoutesFromElements, Outlet, Route } from 'react-router-dom';
19
Michelle Sepkap Sime6967fb92022-11-08 08:39:36 -050020import App, { appLoader } from './App';
simon3f5f3e72022-11-08 21:01:57 -050021import ContactList from './components/ContactList';
simonf929a362022-11-18 16:53:45 -050022import ConversationView from './components/ConversationView';
simon3f5f3e72022-11-08 21:01:57 -050023import AuthProvider from './contexts/AuthProvider';
simone35acc22022-12-02 16:51:12 -050024import CallManagerProvider from './contexts/CallManagerProvider';
simonf929a362022-11-18 16:53:45 -050025import ConversationProvider from './contexts/ConversationProvider';
simon21f7d9f2022-11-28 14:21:54 -050026import MessengerProvider from './contexts/MessengerProvider';
idillon27dab022023-02-02 17:55:47 -050027import UserMediaProvider from './contexts/UserMediaProvider';
simon3f5f3e72022-11-08 21:01:57 -050028import WebSocketProvider from './contexts/WebSocketProvider';
simonf929a362022-11-18 16:53:45 -050029import { RouteParams } from './hooks/useUrlParams';
simon3f5f3e72022-11-08 21:01:57 -050030import AccountSettings from './pages/AccountSettings';
idillon3470d072022-11-22 15:22:34 -050031import GeneralSettings from './pages/GeneralSettings';
Ziwei Wang3ce1ac02023-02-03 11:59:03 -050032import Login from './pages/Login';
simon3f5f3e72022-11-08 21:01:57 -050033import Messenger from './pages/Messenger';
Ziwei Wang3ce1ac02023-02-03 11:59:03 -050034import Registration from './pages/Registration';
Michelle Sepkap Sime6967fb92022-11-08 08:39:36 -050035import Setup from './pages/Setup';
36import SetupLogin from './pages/SetupLogin';
simon21f7d9f2022-11-28 14:21:54 -050037export type ConversationRouteParams = RouteParams<{ conversationId?: string }, Record<string, never>>;
simonf929a362022-11-18 16:53:45 -050038
simon3f5f3e72022-11-08 21:01:57 -050039export const router = createBrowserRouter(
40 createRoutesFromElements(
Michelle Sepkap Sime6967fb92022-11-08 08:39:36 -050041 <Route path="/" element={<App />} loader={appLoader}>
Ziwei Wang3ce1ac02023-02-03 11:59:03 -050042 <Route path="login" element={<Login />} />
43 <Route path="register" element={<Registration />} />
Michelle Sepkap Sime6967fb92022-11-08 08:39:36 -050044 <Route path="setup/login" element={<SetupLogin />} />
45 <Route path="setup" element={<Setup />} />
simon3f5f3e72022-11-08 21:01:57 -050046 <Route
47 element={
48 <AuthProvider>
49 <WebSocketProvider>
idillon27dab022023-02-02 17:55:47 -050050 <UserMediaProvider>
51 <CallManagerProvider>
52 <Outlet />
53 </CallManagerProvider>
54 </UserMediaProvider>
simon3f5f3e72022-11-08 21:01:57 -050055 </WebSocketProvider>
56 </AuthProvider>
57 }
58 >
simon21f7d9f2022-11-28 14:21:54 -050059 <Route
60 element={
61 <MessengerProvider>
62 <Outlet />
63 </MessengerProvider>
64 }
65 >
66 <Route index element={<Messenger />} />
67 <Route path="conversation" element={<Messenger />} />
simonf929a362022-11-18 16:53:45 -050068 <Route
simon21f7d9f2022-11-28 14:21:54 -050069 path="conversation/:conversationId"
simonf929a362022-11-18 16:53:45 -050070 element={
simon641b2622022-12-02 14:38:35 -050071 <Messenger>
72 <ConversationProvider>
simone35acc22022-12-02 16:51:12 -050073 <ConversationView />
simon641b2622022-12-02 14:38:35 -050074 </ConversationProvider>
75 </Messenger>
simonf929a362022-11-18 16:53:45 -050076 }
simone35acc22022-12-02 16:51:12 -050077 />
simonf929a362022-11-18 16:53:45 -050078 </Route>
idillon3470d072022-11-22 15:22:34 -050079 <Route path="settings-account" element={<AccountSettings />} />
80 <Route path="settings-general" element={<GeneralSettings />} />
simon3f5f3e72022-11-08 21:01:57 -050081 <Route path="contacts" element={<ContactList />} />
simon3f5f3e72022-11-08 21:01:57 -050082 </Route>
simon3f5f3e72022-11-08 21:01:57 -050083 </Route>
84 )
85);