blob: 8e531884b6a5b64fe0f7a2b93bf84cdc6a61a5fd [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';
simonf929a362022-11-18 16:53:45 -050024import CallProvider, { CallRole } from './contexts/CallProvider';
25import ConversationProvider from './contexts/ConversationProvider';
Misha Krieger-Raynauld20cf1c82022-11-23 20:26:50 -050026import WebRtcProvider from './contexts/WebRtcProvider';
simon3f5f3e72022-11-08 21:01:57 -050027import WebSocketProvider from './contexts/WebSocketProvider';
simonf929a362022-11-18 16:53:45 -050028import { RouteParams } from './hooks/useUrlParams';
29import NotificationManager from './managers/NotificationManager';
simon3f5f3e72022-11-08 21:01:57 -050030import AccountSettings from './pages/AccountSettings';
31import CallInterface from './pages/CallInterface';
idillon3470d072022-11-22 15:22:34 -050032import GeneralSettings from './pages/GeneralSettings';
simon3f5f3e72022-11-08 21:01:57 -050033import Messenger from './pages/Messenger';
Michelle Sepkap Sime6967fb92022-11-08 08:39:36 -050034import Setup from './pages/Setup';
35import SetupLogin from './pages/SetupLogin';
simon3f5f3e72022-11-08 21:01:57 -050036import Welcome from './pages/Welcome';
37import { ThemeDemonstrator } from './themes/ThemeDemonstrator';
simon3f5f3e72022-11-08 21:01:57 -050038
simonf929a362022-11-18 16:53:45 -050039export type ConversationRouteParams = RouteParams<{ conversationId: string }, Record<string, never>>;
40export type AddContactRouteParams = RouteParams<{ contactId: string }, Record<string, never>>;
41
42/**
43 * Route parameters for the call routes.
44 */
45export type CallRouteParams = RouteParams<{ conversationId: string }, { role?: CallRole }>;
simon3f5f3e72022-11-08 21:01:57 -050046
47export const router = createBrowserRouter(
48 createRoutesFromElements(
Michelle Sepkap Sime6967fb92022-11-08 08:39:36 -050049 <Route path="/" element={<App />} loader={appLoader}>
simon3f5f3e72022-11-08 21:01:57 -050050 <Route path="login" element={<Welcome />} />
Michelle Sepkap Sime6967fb92022-11-08 08:39:36 -050051 <Route path="setup/login" element={<SetupLogin />} />
52 <Route path="setup" element={<Setup />} />
simon3f5f3e72022-11-08 21:01:57 -050053 <Route path="theme" element={<ThemeDemonstrator />} />
54 <Route
55 element={
56 <AuthProvider>
57 <WebSocketProvider>
simonf929a362022-11-18 16:53:45 -050058 <NotificationManager>
59 <Outlet />
60 </NotificationManager>
simon3f5f3e72022-11-08 21:01:57 -050061 </WebSocketProvider>
62 </AuthProvider>
63 }
64 >
simonf929a362022-11-18 16:53:45 -050065 <Route index element={<Messenger />} />
66 <Route path="conversation" element={<Messenger />}>
67 <Route path="add-contact/:contactId" />
68 <Route
69 path=":conversationId"
70 element={
71 <ConversationProvider>
72 <Outlet />
73 </ConversationProvider>
74 }
75 >
76 <Route index element={<ConversationView />} />
77 <Route
78 path="call"
79 element={
Misha Krieger-Raynauld20cf1c82022-11-23 20:26:50 -050080 <WebRtcProvider>
simonf929a362022-11-18 16:53:45 -050081 <CallProvider>
82 <CallInterface />
83 </CallProvider>
Misha Krieger-Raynauld20cf1c82022-11-23 20:26:50 -050084 </WebRtcProvider>
simonf929a362022-11-18 16:53:45 -050085 }
86 />
87 </Route>
88 </Route>
idillon3470d072022-11-22 15:22:34 -050089 <Route path="settings-account" element={<AccountSettings />} />
90 <Route path="settings-general" element={<GeneralSettings />} />
simon3f5f3e72022-11-08 21:01:57 -050091 <Route path="contacts" element={<ContactList />} />
simon3f5f3e72022-11-08 21:01:57 -050092 </Route>
simon3f5f3e72022-11-08 21:01:57 -050093 </Route>
94 )
95);