import React from 'react'; import { RoomSkeleton } from '../components/RoomSkeleton'; import { Outlet, Route, createBrowserRouter, createHashRouter, createRoutesFromElements, redirect, } from 'react-router-dom'; import { ClientConfig } from '../hooks/useClientConfig'; const AuthLayout = React.lazy(() => import('./auth').then((m) => ({ default: m.AuthLayout }))); const Login = React.lazy(() => import('./auth').then((m) => ({ default: m.Login }))); const Register = React.lazy(() => import('./auth').then((m) => ({ default: m.Register }))); const ResetPassword = React.lazy(() => import('./auth').then((m) => ({ default: m.ResetPassword })), ); import { DIRECT_PATH, EXPLORE_PATH, HOME_PATH, LOGIN_PATH, INBOX_PATH, REGISTER_PATH, RESET_PASSWORD_PATH, SPACE_PATH, _CREATE_PATH, _FEATURED_PATH, _INVITES_PATH, _JOIN_PATH, _LOBBY_PATH, _NOTIFICATIONS_PATH, _ROOM_PATH, _SEARCH_PATH, _SERVER_PATH, CREATE_PATH, } from './paths'; import { getAppPathFromHref, getExploreFeaturedPath, getHomePath, getInboxNotificationsPath, getLoginPath, getOriginBaseUrl, getSpaceLobbyPath, } from './pathUtils'; import { ClientBindAtoms, ClientLayout, ClientRoot } from './client'; import { Home, HomeRouteRoomProvider, HomeSearch } from './client/home'; import { Direct, DirectCreate, DirectRouteRoomProvider } from './client/direct'; import { RouteSpaceProvider, Space, SpaceRouteRoomProvider, SpaceSearch } from './client/space'; import { setAfterLoginRedirectPath } from './afterLoginRedirectPath'; const Room = React.lazy(() => import('../features/room').then((m) => ({ default: m.Room }))); import { WelcomePage } from './client/WelcomePage'; import { SidebarNav } from './client/SidebarNav'; import { PageRoot } from '../components/page'; import { ScreenSize } from '../hooks/useScreenSize'; import { MobileFriendlyPageNav, MobileFriendlyClientNav } from './MobileFriendly'; import { ClientInitStorageAtom } from './client/ClientInitStorageAtom'; import { ClientNonUIFeatures } from './client/ClientNonUIFeatures'; import { AuthRouteThemeManager, UnAuthRouteThemeManager } from './ThemeManager'; import { ReceiveSelfDeviceVerification } from '../components/DeviceVerification'; import { AutoRestoreBackupOnVerification } from '../components/BackupRestore'; const RoomSettingsRenderer = React.lazy(() => import('../features/room-settings').then((m) => ({ default: m.RoomSettingsRenderer })), ); import { ClientRoomsNotificationPreferences } from './client/ClientRoomsNotificationPreferences'; const SpaceSettingsRenderer = React.lazy(() => import('../features/space-settings').then((m) => ({ default: m.SpaceSettingsRenderer })), ); import { UserRoomProfileRenderer } from '../components/UserRoomProfileRenderer'; const CreateRoomModalRenderer = React.lazy(() => import('../features/create-room').then((m) => ({ default: m.CreateRoomModalRenderer })), ); import { HomeCreateRoom } from './client/home/CreateRoom'; import { Create } from './client/create'; const CreateSpaceModalRenderer = React.lazy(() => import('../features/create-space').then((m) => ({ default: m.CreateSpaceModalRenderer })), ); const SearchModalRenderer = React.lazy(() => import('../features/search').then((m) => ({ default: m.SearchModalRenderer })), ); const Explore = React.lazy(() => import('./client/explore').then((m) => ({ default: m.Explore }))); const FeaturedRooms = React.lazy(() => import('./client/explore').then((m) => ({ default: m.FeaturedRooms })), ); const PublicRooms = React.lazy(() => import('./client/explore').then((m) => ({ default: m.PublicRooms })), ); const Notifications = React.lazy(() => import('./client/inbox').then((m) => ({ default: m.Notifications })), ); const Inbox = React.lazy(() => import('./client/inbox').then((m) => ({ default: m.Inbox }))); const Invites = React.lazy(() => import('./client/inbox').then((m) => ({ default: m.Invites }))); const Lobby = React.lazy(() => import('../features/lobby').then((m) => ({ default: m.Lobby }))); import { getFallbackSession } from '../state/sessions'; import { CallStatusRenderer } from './CallStatusRenderer'; import { CallEmbedProvider } from '../components/CallEmbedProvider'; export const createRouter = (clientConfig: ClientConfig, screenSize: ScreenSize) => { const { hashRouter } = clientConfig; const mobile = screenSize === ScreenSize.Mobile; const routes = createRoutesFromElements( { if (getFallbackSession()) return redirect(getHomePath()); const afterLoginPath = getAppPathFromHref(getOriginBaseUrl(), window.location.href); if (afterLoginPath) setAfterLoginRedirectPath(afterLoginPath); return redirect(getLoginPath()); }} /> { if (getFallbackSession()) { return redirect(getHomePath()); } return null; }} element={ } > } /> } /> } /> { const session = getFallbackSession(); if (!session) { const afterLoginPath = getAppPathFromHref( getOriginBaseUrl(hashRouter), window.location.href, ); if (afterLoginPath) setAfterLoginRedirectPath(afterLoginPath); return redirect(getLoginPath()); } return null; }} element={ } > } > } > } > {mobile ? null : } />} } /> join

} /> } /> }> } /> } > } > {mobile ? null : } />} } /> }> } /> } > } > {mobile ? null : ( { const { spaceIdOrAlias } = params; if (spaceIdOrAlias) { return redirect(getSpaceLobbyPath(spaceIdOrAlias)); } return null; }} element={} /> )} } /> } /> }> } /> } > } > {mobile ? null : ( redirect(getExploreFeaturedPath())} element={} /> )} } /> } /> } /> } > } > {mobile ? null : ( redirect(getInboxNotificationsPath())} element={} /> )} } /> } /> Page not found

} />
, ); if (hashRouter?.enabled) { return createHashRouter(routes, { basename: hashRouter.basename }); } return createBrowserRouter(routes, { basename: import.meta.env.BASE_URL, }); };