Skip to content

Commit 4da36db

Browse files
authored
Upgrade to react router 7 - lib mode (#227)
* upgrade to react router 7 in lib mode * fix * update react-query-auth
1 parent a55e984 commit 4da36db

File tree

25 files changed

+119
-129
lines changed

25 files changed

+119
-129
lines changed

apps/react-vite/.storybook/preview.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import React from 'react';
2-
import { BrowserRouter as Router } from 'react-router-dom';
2+
import { BrowserRouter as Router } from 'react-router';
33
import '../src/index.css';
44

55
export const parameters = {

apps/react-vite/package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,8 @@
4242
"react-error-boundary": "^4.0.13",
4343
"react-helmet-async": "^2.0.4",
4444
"react-hook-form": "^7.51.3",
45-
"react-query-auth": "^2.3.0",
46-
"react-router-dom": "^6.23.0",
45+
"react-query-auth": "^2.4.3",
46+
"react-router": "^7.0.2",
4747
"tailwind-merge": "^2.3.0",
4848
"tailwindcss-animate": "^1.0.7",
4949
"zod": "^3.23.4",

apps/react-vite/src/app/router.tsx

Lines changed: 32 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,39 @@
11
import { QueryClient, useQueryClient } from '@tanstack/react-query';
22
import { useMemo } from 'react';
3-
import { RouterProvider, createBrowserRouter } from 'react-router-dom';
3+
import { createBrowserRouter } from 'react-router';
4+
import { RouterProvider } from 'react-router/dom';
45

56
import { paths } from '@/config/paths';
67
import { ProtectedRoute } from '@/lib/auth';
78

8-
import { AppRoot, AppRootErrorBoundary } from './routes/app/root';
9+
import {
10+
default as AppRoot,
11+
ErrorBoundary as AppRootErrorBoundary,
12+
} from './routes/app/root';
13+
14+
const convert = (queryClient: QueryClient) => (m: any) => {
15+
const { clientLoader, clientAction, default: Component, ...rest } = m;
16+
return {
17+
...rest,
18+
loader: clientLoader?.(queryClient),
19+
action: clientAction?.(queryClient),
20+
Component,
21+
};
22+
};
923

1024
export const createAppRouter = (queryClient: QueryClient) =>
1125
createBrowserRouter([
1226
{
1327
path: paths.home.path,
14-
lazy: async () => {
15-
const { LandingRoute } = await import('./routes/landing');
16-
return { Component: LandingRoute };
17-
},
28+
lazy: () => import('./routes/landing').then(convert(queryClient)),
1829
},
1930
{
2031
path: paths.auth.register.path,
21-
lazy: async () => {
22-
const { RegisterRoute } = await import('./routes/auth/register');
23-
return { Component: RegisterRoute };
24-
},
32+
lazy: () => import('./routes/auth/register').then(convert(queryClient)),
2533
},
2634
{
2735
path: paths.auth.login.path,
28-
lazy: async () => {
29-
const { LoginRoute } = await import('./routes/auth/login');
30-
return { Component: LoginRoute };
31-
},
36+
lazy: () => import('./routes/auth/login').then(convert(queryClient)),
3237
},
3338
{
3439
path: paths.app.root.path,
@@ -41,74 +46,36 @@ export const createAppRouter = (queryClient: QueryClient) =>
4146
children: [
4247
{
4348
path: paths.app.discussions.path,
44-
lazy: async () => {
45-
const { DiscussionsRoute, discussionsLoader } = await import(
46-
'./routes/app/discussions/discussions'
47-
);
48-
return {
49-
Component: DiscussionsRoute,
50-
loader: discussionsLoader(queryClient),
51-
};
52-
},
53-
ErrorBoundary: AppRootErrorBoundary,
49+
lazy: () =>
50+
import('./routes/app/discussions/discussions').then(
51+
convert(queryClient),
52+
),
5453
},
5554
{
5655
path: paths.app.discussion.path,
57-
lazy: async () => {
58-
const { DiscussionRoute, discussionLoader } = await import(
59-
'./routes/app/discussions/discussion'
60-
);
61-
return {
62-
Component: DiscussionRoute,
63-
loader: discussionLoader(queryClient),
64-
};
65-
},
66-
ErrorBoundary: AppRootErrorBoundary,
56+
lazy: () =>
57+
import('./routes/app/discussions/discussion').then(
58+
convert(queryClient),
59+
),
6760
},
6861
{
6962
path: paths.app.users.path,
70-
lazy: async () => {
71-
const { UsersRoute, usersLoader } = await import(
72-
'./routes/app/users'
73-
);
74-
return {
75-
Component: UsersRoute,
76-
loader: usersLoader(queryClient),
77-
};
78-
},
79-
ErrorBoundary: AppRootErrorBoundary,
63+
lazy: () => import('./routes/app/users').then(convert(queryClient)),
8064
},
8165
{
8266
path: paths.app.profile.path,
83-
lazy: async () => {
84-
const { ProfileRoute } = await import('./routes/app/profile');
85-
return {
86-
Component: ProfileRoute,
87-
};
88-
},
89-
ErrorBoundary: AppRootErrorBoundary,
67+
lazy: () => import('./routes/app/profile').then(convert(queryClient)),
9068
},
9169
{
9270
path: paths.app.dashboard.path,
93-
lazy: async () => {
94-
const { DashboardRoute } = await import('./routes/app/dashboard');
95-
return {
96-
Component: DashboardRoute,
97-
};
98-
},
99-
ErrorBoundary: AppRootErrorBoundary,
71+
lazy: () =>
72+
import('./routes/app/dashboard').then(convert(queryClient)),
10073
},
10174
],
10275
},
10376
{
10477
path: '*',
105-
lazy: async () => {
106-
const { NotFoundRoute } = await import('./routes/not-found');
107-
return {
108-
Component: NotFoundRoute,
109-
};
110-
},
111-
ErrorBoundary: AppRootErrorBoundary,
78+
lazy: () => import('./routes/not-found').then(convert(queryClient)),
11279
},
11380
]);
11481

apps/react-vite/src/app/routes/app/dashboard.tsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { ContentLayout } from '@/components/layouts';
22
import { useUser } from '@/lib/auth';
33
import { ROLES } from '@/lib/authorization';
44

5-
export const DashboardRoute = () => {
5+
const DashboardRoute = () => {
66
const user = useUser();
77
return (
88
<ContentLayout title="Dashboard">
@@ -31,3 +31,5 @@ export const DashboardRoute = () => {
3131
</ContentLayout>
3232
);
3333
};
34+
35+
export default DashboardRoute;

apps/react-vite/src/app/routes/app/discussions/__tests__/discussion.test.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import {
88
within,
99
} from '@/testing/test-utils';
1010

11-
import { DiscussionRoute } from '../discussion';
11+
import { default as DiscussionRoute } from '../discussion';
1212

1313
const renderDiscussion = async () => {
1414
const fakeUser = await createUser();

apps/react-vite/src/app/routes/app/discussions/__tests__/discussions.test.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import {
1010
} from '@/testing/test-utils';
1111
import { formatDate } from '@/utils/format';
1212

13-
import { DiscussionsRoute } from '../discussions';
13+
import { default as DiscussionsRoute } from '../discussions';
1414

1515
beforeAll(() => {
1616
vi.spyOn(console, 'error').mockImplementation(() => {});

apps/react-vite/src/app/routes/app/discussions/discussion.tsx

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { QueryClient } from '@tanstack/react-query';
22
import { ErrorBoundary } from 'react-error-boundary';
3-
import { useParams, LoaderFunctionArgs } from 'react-router-dom';
3+
import { useParams, LoaderFunctionArgs } from 'react-router';
44

55
import { ContentLayout } from '@/components/layouts';
66
import { Spinner } from '@/components/ui/spinner';
@@ -12,7 +12,7 @@ import {
1212
} from '@/features/discussions/api/get-discussion';
1313
import { DiscussionView } from '@/features/discussions/components/discussion-view';
1414

15-
export const discussionLoader =
15+
export const clientLoader =
1616
(queryClient: QueryClient) =>
1717
async ({ params }: LoaderFunctionArgs) => {
1818
const discussionId = params.discussionId as string;
@@ -35,7 +35,7 @@ export const discussionLoader =
3535
};
3636
};
3737

38-
export const DiscussionRoute = () => {
38+
const DiscussionRoute = () => {
3939
const params = useParams();
4040
const discussionId = params.discussionId as string;
4141
const discussionQuery = useDiscussion({
@@ -71,3 +71,5 @@ export const DiscussionRoute = () => {
7171
</>
7272
);
7373
};
74+
75+
export default DiscussionRoute;

apps/react-vite/src/app/routes/app/discussions/discussions.tsx

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
import { QueryClient, useQueryClient } from '@tanstack/react-query';
2-
import { LoaderFunctionArgs } from 'react-router-dom';
2+
import { LoaderFunctionArgs } from 'react-router';
33

44
import { ContentLayout } from '@/components/layouts';
55
import { getInfiniteCommentsQueryOptions } from '@/features/comments/api/get-comments';
66
import { getDiscussionsQueryOptions } from '@/features/discussions/api/get-discussions';
77
import { CreateDiscussion } from '@/features/discussions/components/create-discussion';
88
import { DiscussionsList } from '@/features/discussions/components/discussions-list';
99

10-
export const discussionsLoader =
10+
export const clientLoader =
1111
(queryClient: QueryClient) =>
1212
async ({ request }: LoaderFunctionArgs) => {
1313
const url = new URL(request.url);
@@ -22,7 +22,7 @@ export const discussionsLoader =
2222
);
2323
};
2424

25-
export const DiscussionsRoute = () => {
25+
const DiscussionsRoute = () => {
2626
const queryClient = useQueryClient();
2727
return (
2828
<ContentLayout title="Discussions">
@@ -42,3 +42,5 @@ export const DiscussionsRoute = () => {
4242
</ContentLayout>
4343
);
4444
};
45+
46+
export default DiscussionsRoute;

apps/react-vite/src/app/routes/app/profile.tsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ const Entry = ({ label, value }: EntryProps) => (
1515
</div>
1616
);
1717

18-
export const ProfileRoute = () => {
18+
const ProfileRoute = () => {
1919
const user = useUser();
2020

2121
if (!user.data) return null;
@@ -47,3 +47,5 @@ export const ProfileRoute = () => {
4747
</ContentLayout>
4848
);
4949
};
50+
51+
export default ProfileRoute;
Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,17 @@
1-
import { Outlet } from 'react-router-dom';
1+
import { Outlet } from 'react-router';
22

33
import { DashboardLayout } from '@/components/layouts';
44

5-
export const AppRoot = () => {
5+
export const ErrorBoundary = () => {
6+
return <div>Something went wrong!</div>;
7+
};
8+
9+
const AppRoot = () => {
610
return (
711
<DashboardLayout>
812
<Outlet />
913
</DashboardLayout>
1014
);
1115
};
1216

13-
export const AppRootErrorBoundary = () => {
14-
return <div>Something went wrong!</div>;
15-
};
17+
export default AppRoot;

0 commit comments

Comments
 (0)