blob: e68c3fe4f52f3543af13db496d7c777002d79717 [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 */
idillone1889e02023-07-30 16:22:07 -040018
19import { Stack } from '@mui/material';
simon3f5f3e72022-11-08 21:01:57 -050020import { createBrowserRouter, createRoutesFromElements, Outlet, Route } from 'react-router-dom';
21
Michelle Sepkap Sime6967fb92022-11-08 08:39:36 -050022import App, { appLoader } from './App';
Ziwei Wangcffda382023-03-16 15:24:52 -040023import CustomizeProfile from './components/AccountSettings/CustomizeProfile';
24import LinkedDevices from './components/AccountSettings/LinkedDevices';
25import ManageAccount from './components/AccountSettings/ManageAccount';
simon3f5f3e72022-11-08 21:01:57 -050026import ContactList from './components/ContactList';
simonf929a362022-11-18 16:53:45 -050027import ConversationView from './components/ConversationView';
Ziwei Wang05b71422023-03-20 13:23:40 -040028import Appearance from './components/GeneralSettings/Appearance';
29import System from './components/GeneralSettings/System';
Ziwei Wangb35d3892023-02-17 14:19:08 -050030import Header from './components/Header';
Ziwei Wangcffda382023-03-16 15:24:52 -040031import SettingSidebar from './components/SettingSidebar';
simon3f5f3e72022-11-08 21:01:57 -050032import AuthProvider from './contexts/AuthProvider';
simone35acc22022-12-02 16:51:12 -050033import CallManagerProvider from './contexts/CallManagerProvider';
simonf929a362022-11-18 16:53:45 -050034import ConversationProvider from './contexts/ConversationProvider';
simon21f7d9f2022-11-28 14:21:54 -050035import MessengerProvider from './contexts/MessengerProvider';
idillon27dab022023-02-02 17:55:47 -050036import UserMediaProvider from './contexts/UserMediaProvider';
simon3f5f3e72022-11-08 21:01:57 -050037import WebSocketProvider from './contexts/WebSocketProvider';
simonf929a362022-11-18 16:53:45 -050038import { RouteParams } from './hooks/useUrlParams';
simon3f5f3e72022-11-08 21:01:57 -050039import AccountSettings from './pages/AccountSettings';
Ziwei Wang5d25d112023-02-21 12:41:04 -050040import AdminLogin from './pages/AdminLogin';
41import AdminPanel from './pages/AdminPanel';
Ziwei Wang3d633dd2023-02-21 16:57:48 -050042import AdminSetup from './pages/AdminSetup';
idillon3470d072022-11-22 15:22:34 -050043import GeneralSettings from './pages/GeneralSettings';
Ziwei Wang3ce1ac02023-02-03 11:59:03 -050044import Login from './pages/Login';
simon3f5f3e72022-11-08 21:01:57 -050045import Messenger from './pages/Messenger';
Ziwei Wang3ce1ac02023-02-03 11:59:03 -050046import Registration from './pages/Registration';
simon21f7d9f2022-11-28 14:21:54 -050047export type ConversationRouteParams = RouteParams<{ conversationId?: string }, Record<string, never>>;
simonf929a362022-11-18 16:53:45 -050048
simon3f5f3e72022-11-08 21:01:57 -050049export const router = createBrowserRouter(
50 createRoutesFromElements(
Michelle Sepkap Sime6967fb92022-11-08 08:39:36 -050051 <Route path="/" element={<App />} loader={appLoader}>
Ziwei Wang3ce1ac02023-02-03 11:59:03 -050052 <Route path="login" element={<Login />} />
53 <Route path="register" element={<Registration />} />
Ziwei Wang5d25d112023-02-21 12:41:04 -050054 <Route path="admin" element={<AdminPanel />} />
55 <Route path="admin/login" element={<AdminLogin />} />
Ziwei Wang3d633dd2023-02-21 16:57:48 -050056 <Route path="admin/setup" element={<AdminSetup />} />
simon3f5f3e72022-11-08 21:01:57 -050057 <Route
58 element={
59 <AuthProvider>
60 <WebSocketProvider>
idillon27dab022023-02-02 17:55:47 -050061 <UserMediaProvider>
62 <CallManagerProvider>
63 <Outlet />
64 </CallManagerProvider>
65 </UserMediaProvider>
simon3f5f3e72022-11-08 21:01:57 -050066 </WebSocketProvider>
67 </AuthProvider>
68 }
69 >
simon21f7d9f2022-11-28 14:21:54 -050070 <Route
71 element={
72 <MessengerProvider>
73 <Outlet />
74 </MessengerProvider>
75 }
76 >
77 <Route index element={<Messenger />} />
78 <Route path="conversation" element={<Messenger />} />
simonf929a362022-11-18 16:53:45 -050079 <Route
simon21f7d9f2022-11-28 14:21:54 -050080 path="conversation/:conversationId"
simonf929a362022-11-18 16:53:45 -050081 element={
simon641b2622022-12-02 14:38:35 -050082 <Messenger>
83 <ConversationProvider>
simone35acc22022-12-02 16:51:12 -050084 <ConversationView />
simon641b2622022-12-02 14:38:35 -050085 </ConversationProvider>
86 </Messenger>
simonf929a362022-11-18 16:53:45 -050087 }
simone35acc22022-12-02 16:51:12 -050088 />
simonf929a362022-11-18 16:53:45 -050089 </Route>
idillone1889e02023-07-30 16:22:07 -040090 <Route
91 element={
92 <Stack>
93 <Header />
94 <SettingSidebar />
95 </Stack>
96 }
97 >
Ziwei Wangcffda382023-03-16 15:24:52 -040098 <Route path="settings/account/manage-account" element={<ManageAccount />} />
99 <Route path="settings/account/customize-profile" element={<CustomizeProfile />} />
100 <Route path="settings/account/linked-devices" element={<LinkedDevices />} />
Ziwei Wang05b71422023-03-20 13:23:40 -0400101 <Route path="settings/general/system" element={<System />} />
102 <Route path="settings/general/appearance" element={<Appearance />} />
Ziwei Wangcffda382023-03-16 15:24:52 -0400103
104 <Route path="settings-account" element={<AccountSettings />} />
105 <Route path="settings-general" element={<GeneralSettings />} />
106 </Route>
simon3f5f3e72022-11-08 21:01:57 -0500107 <Route path="contacts" element={<ContactList />} />
simon3f5f3e72022-11-08 21:01:57 -0500108 </Route>
simon3f5f3e72022-11-08 21:01:57 -0500109 </Route>
110 )
111);