mirror of
https://github.com/MHSanaei/3x-ui.git
synced 2026-10-20 21:05:02 +03:00
edb487a005
react-router-dom 7 is superseded by react-router 8, which folds the DOM bindings back into the core package. RouterProvider now comes from `react-router/dom`, while the hooks and `createBrowserRouter` move to `react-router`. Updates the nine importing modules and the router line in docs/architecture.md to match. Also refreshes antd, react-i18next, storybook, eslint, lint-staged and playwright to current patch/minor releases, and restores alphabetical order in devDependencies for the @vitest/browser-playwright and playwright entries. Bumps brace-expansion to 5.0.8, the only release outside the affected range of GHSA-mh99-v99m-4gvg (unbounded expansion length causing an OOM crash). `npm audit fix` could not apply this on its own: the lockfile pinned 5.0.7 and npm will not re-resolve a transitive-only dependency in place, so the entry was updated directly and reinstalled.
49 lines
1.9 KiB
TypeScript
49 lines
1.9 KiB
TypeScript
import { lazy, Suspense } from 'react';
|
|
import { createBrowserRouter, type RouteObject } from 'react-router';
|
|
|
|
import PanelLayout from '@/layouts/PanelLayout';
|
|
|
|
const IndexPage = lazy(() => import('@/pages/index/IndexPage'));
|
|
const InboundsPage = lazy(() => import('@/pages/inbounds/InboundsPage'));
|
|
const ClientsPage = lazy(() => import('@/pages/clients/ClientsPage'));
|
|
const GroupsPage = lazy(() => import('@/pages/groups/GroupsPage'));
|
|
const NodesPage = lazy(() => import('@/pages/nodes/NodesPage'));
|
|
const HostsPage = lazy(() => import('@/pages/hosts/HostsPage'));
|
|
const SettingsPage = lazy(() => import('@/pages/settings/SettingsPage'));
|
|
const XrayPage = lazy(() => import('@/pages/xray/XrayPage'));
|
|
const ApiDocsPage = lazy(() => import('@/pages/api-docs/ApiDocsPage'));
|
|
|
|
function withSuspense(node: React.ReactNode) {
|
|
return <Suspense fallback={null}>{node}</Suspense>;
|
|
}
|
|
|
|
const routes: RouteObject[] = [
|
|
{
|
|
path: '/',
|
|
element: <PanelLayout />,
|
|
children: [
|
|
{ index: true, element: withSuspense(<IndexPage />) },
|
|
{ path: 'inbounds', element: withSuspense(<InboundsPage />) },
|
|
{ path: 'clients', element: withSuspense(<ClientsPage />) },
|
|
{ path: 'groups', element: withSuspense(<GroupsPage />) },
|
|
{ path: 'nodes', element: withSuspense(<NodesPage />) },
|
|
{ path: 'hosts', element: withSuspense(<HostsPage />) },
|
|
{ path: 'settings', element: withSuspense(<SettingsPage />) },
|
|
{ path: 'xray', element: withSuspense(<XrayPage />) },
|
|
{ path: 'outbound', element: withSuspense(<XrayPage />) },
|
|
{ path: 'routing', element: withSuspense(<XrayPage />) },
|
|
{ path: 'api-docs', element: withSuspense(<ApiDocsPage />) },
|
|
],
|
|
},
|
|
];
|
|
|
|
function computeBasename() {
|
|
const raw = (typeof window !== 'undefined' && window.X_UI_BASE_PATH) || '/';
|
|
const trimmed = raw.replace(/\/+$/, '');
|
|
return `${trimmed}/panel`;
|
|
}
|
|
|
|
export const router = createBrowserRouter(routes, {
|
|
basename: computeBasename(),
|
|
});
|