blob: e68c3fe4f52f3543af13db496d7c777002d79717 [file] [log] [blame]
/*
* Copyright (C) 2022 Savoir-faire Linux Inc.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation; either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public
* License along with this program. If not, see
* <https://www.gnu.org/licenses/>.
*/
import { Stack } from '@mui/material';
import { createBrowserRouter, createRoutesFromElements, Outlet, Route } from 'react-router-dom';
import App, { appLoader } from './App';
import CustomizeProfile from './components/AccountSettings/CustomizeProfile';
import LinkedDevices from './components/AccountSettings/LinkedDevices';
import ManageAccount from './components/AccountSettings/ManageAccount';
import ContactList from './components/ContactList';
import ConversationView from './components/ConversationView';
import Appearance from './components/GeneralSettings/Appearance';
import System from './components/GeneralSettings/System';
import Header from './components/Header';
import SettingSidebar from './components/SettingSidebar';
import AuthProvider from './contexts/AuthProvider';
import CallManagerProvider from './contexts/CallManagerProvider';
import ConversationProvider from './contexts/ConversationProvider';
import MessengerProvider from './contexts/MessengerProvider';
import UserMediaProvider from './contexts/UserMediaProvider';
import WebSocketProvider from './contexts/WebSocketProvider';
import { RouteParams } from './hooks/useUrlParams';
import AccountSettings from './pages/AccountSettings';
import AdminLogin from './pages/AdminLogin';
import AdminPanel from './pages/AdminPanel';
import AdminSetup from './pages/AdminSetup';
import GeneralSettings from './pages/GeneralSettings';
import Login from './pages/Login';
import Messenger from './pages/Messenger';
import Registration from './pages/Registration';
export type ConversationRouteParams = RouteParams<{ conversationId?: string }, Record<string, never>>;
export const router = createBrowserRouter(
createRoutesFromElements(
<Route path="/" element={<App />} loader={appLoader}>
<Route path="login" element={<Login />} />
<Route path="register" element={<Registration />} />
<Route path="admin" element={<AdminPanel />} />
<Route path="admin/login" element={<AdminLogin />} />
<Route path="admin/setup" element={<AdminSetup />} />
<Route
element={
<AuthProvider>
<WebSocketProvider>
<UserMediaProvider>
<CallManagerProvider>
<Outlet />
</CallManagerProvider>
</UserMediaProvider>
</WebSocketProvider>
</AuthProvider>
}
>
<Route
element={
<MessengerProvider>
<Outlet />
</MessengerProvider>
}
>
<Route index element={<Messenger />} />
<Route path="conversation" element={<Messenger />} />
<Route
path="conversation/:conversationId"
element={
<Messenger>
<ConversationProvider>
<ConversationView />
</ConversationProvider>
</Messenger>
}
/>
</Route>
<Route
element={
<Stack>
<Header />
<SettingSidebar />
</Stack>
}
>
<Route path="settings/account/manage-account" element={<ManageAccount />} />
<Route path="settings/account/customize-profile" element={<CustomizeProfile />} />
<Route path="settings/account/linked-devices" element={<LinkedDevices />} />
<Route path="settings/general/system" element={<System />} />
<Route path="settings/general/appearance" element={<Appearance />} />
<Route path="settings-account" element={<AccountSettings />} />
<Route path="settings-general" element={<GeneralSettings />} />
</Route>
<Route path="contacts" element={<ContactList />} />
</Route>
</Route>
)
);