blob: b37209986abc0ed333349c86daf3ae2edc81b4f1 [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';
22import AuthProvider from './contexts/AuthProvider';
23import WebSocketProvider from './contexts/WebSocketProvider';
24import AccountSettings from './pages/AccountSettings';
25import CallInterface from './pages/CallInterface';
26import Messenger from './pages/Messenger';
Michelle Sepkap Sime6967fb92022-11-08 08:39:36 -050027import Setup from './pages/Setup';
28import SetupLogin from './pages/SetupLogin';
simon3f5f3e72022-11-08 21:01:57 -050029import Welcome from './pages/Welcome';
30import { ThemeDemonstrator } from './themes/ThemeDemonstrator';
31import { RouteParams } from './utils/hooks';
32
33export type MessengerRouteParams = RouteParams<{ conversationId?: string; contactId?: string }, Record<string, never>>;
34export type CallRouteParams = RouteParams<{ conversationId: string }, { video?: 'true' }>;
35
36export const router = createBrowserRouter(
37 createRoutesFromElements(
Michelle Sepkap Sime6967fb92022-11-08 08:39:36 -050038 <Route path="/" element={<App />} loader={appLoader}>
simon3f5f3e72022-11-08 21:01:57 -050039 <Route path="login" element={<Welcome />} />
Michelle Sepkap Sime6967fb92022-11-08 08:39:36 -050040 <Route path="setup/login" element={<SetupLogin />} />
41 <Route path="setup" element={<Setup />} />
simon3f5f3e72022-11-08 21:01:57 -050042 <Route path="theme" element={<ThemeDemonstrator />} />
43 <Route
44 element={
45 <AuthProvider>
46 <WebSocketProvider>
47 <Outlet />
48 </WebSocketProvider>
49 </AuthProvider>
50 }
51 >
simon2d3b6532022-11-08 21:01:57 -050052 <Route path="add-contact/:contactId" element={<Messenger />} />
simon3f5f3e72022-11-08 21:01:57 -050053 <Route path="conversation/:conversationId" element={<Messenger />} />
54 <Route path="call/:conversationId" element={<CallInterface />} />
55 <Route path="settings" element={<AccountSettings />} />
56 <Route path="contacts" element={<ContactList />} />
57 <Route index element={<Messenger />} />
58 </Route>
simon3f5f3e72022-11-08 21:01:57 -050059 </Route>
60 )
61);