mirror of
https://github.com/toeverything/AFFiNE.git
synced 2026-09-01 14:19:40 +08:00
cc5a6e6d40
packages/frontend/web -> packages/frontend/apps/web packages/frontend/mobile -> packages/frontend/apps/mobile packages/frontend/electron -> packages/frontend/apps/electron
160 lines
4.0 KiB
TypeScript
160 lines
4.0 KiB
TypeScript
import { NavigateContext } from '@affine/core/hooks/use-navigate-helper';
|
|
import { wrapCreateBrowserRouter } from '@sentry/react';
|
|
import { useEffect, useState } from 'react';
|
|
import type { RouteObject } from 'react-router-dom';
|
|
import {
|
|
createBrowserRouter as reactRouterCreateBrowserRouter,
|
|
Outlet,
|
|
redirect,
|
|
// eslint-disable-next-line @typescript-eslint/no-restricted-imports
|
|
useNavigate,
|
|
} from 'react-router-dom';
|
|
|
|
import { Component as All } from './pages/workspace/all';
|
|
import { Component as Collection } from './pages/workspace/collection';
|
|
import { Component as CollectionDetail } from './pages/workspace/collection/detail';
|
|
import { Component as Home } from './pages/workspace/home';
|
|
import { Component as Search } from './pages/workspace/search';
|
|
import { Component as Tag } from './pages/workspace/tag';
|
|
import { Component as TagDetail } from './pages/workspace/tag/detail';
|
|
import { AllWorkspaceModals } from './provider/model-provider';
|
|
|
|
function RootRouter() {
|
|
const navigate = useNavigate();
|
|
const [ready, setReady] = useState(false);
|
|
useEffect(() => {
|
|
// a hack to make sure router is ready
|
|
setReady(true);
|
|
}, []);
|
|
|
|
return (
|
|
ready && (
|
|
<NavigateContext.Provider value={navigate}>
|
|
<AllWorkspaceModals />
|
|
<Outlet />
|
|
</NavigateContext.Provider>
|
|
)
|
|
);
|
|
}
|
|
|
|
export const topLevelRoutes = [
|
|
{
|
|
element: <RootRouter />,
|
|
children: [
|
|
{
|
|
path: '/',
|
|
lazy: () => import('./pages/index'),
|
|
},
|
|
{
|
|
path: '/workspace/:workspaceId/*',
|
|
lazy: () => import('./pages/workspace/index'),
|
|
},
|
|
{
|
|
path: '/share/:workspaceId/:pageId',
|
|
loader: ({ params }) => {
|
|
return redirect(`/workspace/${params.workspaceId}/${params.pageId}`);
|
|
},
|
|
},
|
|
{
|
|
path: '/404',
|
|
lazy: () => import('./pages/404'),
|
|
},
|
|
{
|
|
path: '/auth/:authType',
|
|
lazy: () => import('./pages/auth'),
|
|
},
|
|
{
|
|
path: '/sign-in',
|
|
lazy: () => import('./pages/sign-in'),
|
|
},
|
|
{
|
|
path: '/magic-link',
|
|
lazy: () =>
|
|
import(
|
|
/* webpackChunkName: "auth" */ '@affine/core/pages/auth/magic-link'
|
|
),
|
|
},
|
|
{
|
|
path: '/oauth/login',
|
|
lazy: () =>
|
|
import(
|
|
/* webpackChunkName: "auth" */ '@affine/core/pages/auth/oauth-login'
|
|
),
|
|
},
|
|
{
|
|
path: '/oauth/callback',
|
|
lazy: () =>
|
|
import(
|
|
/* webpackChunkName: "auth" */ '@affine/core/pages/auth/oauth-callback'
|
|
),
|
|
},
|
|
{
|
|
path: '/redirect-proxy',
|
|
lazy: () => import('@affine/core/pages/redirect'),
|
|
},
|
|
{
|
|
path: '*',
|
|
lazy: () => import('./pages/404'),
|
|
},
|
|
],
|
|
},
|
|
] satisfies [RouteObject, ...RouteObject[]];
|
|
|
|
export const viewRoutes = [
|
|
{
|
|
path: '/home',
|
|
Component: Home,
|
|
},
|
|
{
|
|
path: '/search',
|
|
Component: Search,
|
|
},
|
|
{
|
|
path: '/all',
|
|
Component: All,
|
|
},
|
|
{
|
|
path: '/collection',
|
|
// lazy: () => import('./pages/workspace/collection/index'),
|
|
Component: Collection,
|
|
},
|
|
{
|
|
path: '/collection/:collectionId',
|
|
// lazy: () => import('./pages/workspace/collection/detail'),
|
|
Component: CollectionDetail,
|
|
},
|
|
{
|
|
path: '/tag',
|
|
// lazy: () => import('./pages/workspace/tag/index'),
|
|
Component: Tag,
|
|
},
|
|
{
|
|
path: '/tag/:tagId',
|
|
// lazy: () => import('./pages/workspace/tag/detail'),
|
|
Component: TagDetail,
|
|
},
|
|
{
|
|
path: '/trash',
|
|
lazy: () => import('./pages/workspace/trash'),
|
|
},
|
|
{
|
|
path: '/:pageId',
|
|
lazy: () => import('./pages/workspace/detail/mobile-detail-page'),
|
|
},
|
|
{
|
|
path: '*',
|
|
lazy: () => import('./pages/404'),
|
|
},
|
|
] satisfies [RouteObject, ...RouteObject[]];
|
|
|
|
const createBrowserRouter = wrapCreateBrowserRouter(
|
|
reactRouterCreateBrowserRouter
|
|
);
|
|
export const router = (
|
|
window.SENTRY_RELEASE ? createBrowserRouter : reactRouterCreateBrowserRouter
|
|
)(topLevelRoutes, {
|
|
future: {
|
|
v7_normalizeFormMethod: true,
|
|
},
|
|
});
|