1
+ import { Suspense , lazy } from "react" ;
1
2
import { createBrowserRouter } from "react-router-dom" ;
2
3
import App from "@/App" ;
3
4
import HomeLayout from "@/layouts/HomeLayout" ;
4
5
import RootLayout from "@/layouts/RootLayout" ;
5
- import About from "@/pages/About" ;
6
- import AdminSignIn from "@/pages/AdminSignIn" ;
7
- import Archived from "@/pages/Archived" ;
8
- import AuthCallback from "@/pages/AuthCallback" ;
9
- import Explore from "@/pages/Explore" ;
10
6
import Home from "@/pages/Home" ;
11
- import Inboxes from "@/pages/Inboxes" ;
12
- import MemoDetail from "@/pages/MemoDetail" ;
13
- import NotFound from "@/pages/NotFound" ;
14
- import PermissionDenied from "@/pages/PermissionDenied" ;
15
- import Resources from "@/pages/Resources" ;
16
- import Setting from "@/pages/Setting" ;
17
- import SignIn from "@/pages/SignIn" ;
18
- import SignUp from "@/pages/SignUp" ;
19
- import UserProfile from "@/pages/UserProfile" ;
20
- import MemoDetailRedirect from "./MemoDetailRedirect" ;
7
+ import Loading from "@/pages/Loading" ;
8
+
9
+ const About = lazy ( ( ) => import ( "@/pages/About" ) ) ;
10
+ const AdminSignIn = lazy ( ( ) => import ( "@/pages/AdminSignIn" ) ) ;
11
+ const Archived = lazy ( ( ) => import ( "@/pages/Archived" ) ) ;
12
+ const AuthCallback = lazy ( ( ) => import ( "@/pages/AuthCallback" ) ) ;
13
+ const Explore = lazy ( ( ) => import ( "@/pages/Explore" ) ) ;
14
+ const Inboxes = lazy ( ( ) => import ( "@/pages/Inboxes" ) ) ;
15
+ const MemoDetail = lazy ( ( ) => import ( "@/pages/MemoDetail" ) ) ;
16
+ const NotFound = lazy ( ( ) => import ( "@/pages/NotFound" ) ) ;
17
+ const PermissionDenied = lazy ( ( ) => import ( "@/pages/PermissionDenied" ) ) ;
18
+ const Resources = lazy ( ( ) => import ( "@/pages/Resources" ) ) ;
19
+ const Setting = lazy ( ( ) => import ( "@/pages/Setting" ) ) ;
20
+ const SignIn = lazy ( ( ) => import ( "@/pages/SignIn" ) ) ;
21
+ const SignUp = lazy ( ( ) => import ( "@/pages/SignUp" ) ) ;
22
+ const UserProfile = lazy ( ( ) => import ( "@/pages/UserProfile" ) ) ;
23
+ const MemoDetailRedirect = lazy ( ( ) => import ( "./MemoDetailRedirect" ) ) ;
21
24
22
25
export enum Routes {
23
26
ROOT = "/" ,
@@ -40,19 +43,35 @@ const router = createBrowserRouter([
40
43
children : [
41
44
{
42
45
path : "" ,
43
- element : < SignIn /> ,
46
+ element : (
47
+ < Suspense fallback = { < Loading /> } >
48
+ < SignIn />
49
+ </ Suspense >
50
+ ) ,
44
51
} ,
45
52
{
46
53
path : "admin" ,
47
- element : < AdminSignIn /> ,
54
+ element : (
55
+ < Suspense fallback = { < Loading /> } >
56
+ < AdminSignIn />
57
+ </ Suspense >
58
+ ) ,
48
59
} ,
49
60
{
50
61
path : "signup" ,
51
- element : < SignUp /> ,
62
+ element : (
63
+ < Suspense fallback = { < Loading /> } >
64
+ < SignUp />
65
+ </ Suspense >
66
+ ) ,
52
67
} ,
53
68
{
54
69
path : "callback" ,
55
- element : < AuthCallback /> ,
70
+ element : (
71
+ < Suspense fallback = { < Loading /> } >
72
+ < AuthCallback />
73
+ </ Suspense >
74
+ ) ,
56
75
} ,
57
76
] ,
58
77
} ,
@@ -69,54 +88,102 @@ const router = createBrowserRouter([
69
88
} ,
70
89
{
71
90
path : Routes . EXPLORE ,
72
- element : < Explore /> ,
91
+ element : (
92
+ < Suspense fallback = { < Loading /> } >
93
+ < Explore />
94
+ </ Suspense >
95
+ ) ,
73
96
} ,
74
97
{
75
98
path : Routes . ARCHIVED ,
76
- element : < Archived /> ,
99
+ element : (
100
+ < Suspense fallback = { < Loading /> } >
101
+ < Archived />
102
+ </ Suspense >
103
+ ) ,
77
104
} ,
78
105
{
79
106
path : "u/:username" ,
80
- element : < UserProfile /> ,
107
+ element : (
108
+ < Suspense fallback = { < Loading /> } >
109
+ < UserProfile />
110
+ </ Suspense >
111
+ ) ,
81
112
} ,
82
113
] ,
83
114
} ,
84
115
{
85
116
path : Routes . RESOURCES ,
86
- element : < Resources /> ,
117
+ element : (
118
+ < Suspense fallback = { < Loading /> } >
119
+ < Resources />
120
+ </ Suspense >
121
+ ) ,
87
122
} ,
88
123
{
89
124
path : Routes . INBOX ,
90
- element : < Inboxes /> ,
125
+ element : (
126
+ < Suspense fallback = { < Loading /> } >
127
+ < Inboxes />
128
+ </ Suspense >
129
+ ) ,
91
130
} ,
92
131
{
93
132
path : Routes . SETTING ,
94
- element : < Setting /> ,
133
+ element : (
134
+ < Suspense fallback = { < Loading /> } >
135
+ < Setting />
136
+ </ Suspense >
137
+ ) ,
95
138
} ,
96
139
{
97
140
path : "memos/:uid" ,
98
- element : < MemoDetail /> ,
141
+ element : (
142
+ < Suspense fallback = { < Loading /> } >
143
+ < MemoDetail />
144
+ </ Suspense >
145
+ ) ,
99
146
} ,
100
147
{
101
148
path : Routes . ABOUT ,
102
- element : < About /> ,
149
+ element : (
150
+ < Suspense fallback = { < Loading /> } >
151
+ < About />
152
+ </ Suspense >
153
+ ) ,
103
154
} ,
104
155
// Redirect old path to new path.
105
156
{
106
157
path : "m/:uid" ,
107
- element : < MemoDetailRedirect /> ,
158
+ element : (
159
+ < Suspense fallback = { < Loading /> } >
160
+ < MemoDetailRedirect />
161
+ </ Suspense >
162
+ ) ,
108
163
} ,
109
164
{
110
165
path : "403" ,
111
- element : < PermissionDenied /> ,
166
+ element : (
167
+ < Suspense fallback = { < Loading /> } >
168
+ < PermissionDenied />
169
+ </ Suspense >
170
+ ) ,
112
171
} ,
113
172
{
114
173
path : "404" ,
115
- element : < NotFound /> ,
174
+ element : (
175
+ < Suspense fallback = { < Loading /> } >
176
+ < NotFound />
177
+ </ Suspense >
178
+ ) ,
116
179
} ,
117
180
{
118
181
path : "*" ,
119
- element : < NotFound /> ,
182
+ element : (
183
+ < Suspense fallback = { < Loading /> } >
184
+ < NotFound />
185
+ </ Suspense >
186
+ ) ,
120
187
} ,
121
188
] ,
122
189
} ,
0 commit comments