Skip to content

Commit 78892de

Browse files
authored
fix(solid-start): redirect from server function (#5637)
* fix(solid-start): redirect from server function test * test for react * set data-only
1 parent 0bda974 commit 78892de

File tree

8 files changed

+189
-0
lines changed

8 files changed

+189
-0
lines changed

e2e/react-start/server-functions/src/routeTree.gen.ts

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,11 +22,13 @@ import { Route as DeadCodePreserveRouteImport } from './routes/dead-code-preserv
2222
import { Route as ConsistentRouteImport } from './routes/consistent'
2323
import { Route as AbortSignalRouteImport } from './routes/abort-signal'
2424
import { Route as IndexRouteImport } from './routes/index'
25+
import { Route as RedirectTestIndexRouteImport } from './routes/redirect-test/index'
2526
import { Route as PrimitivesIndexRouteImport } from './routes/primitives/index'
2627
import { Route as MiddlewareIndexRouteImport } from './routes/middleware/index'
2728
import { Route as FormdataRedirectIndexRouteImport } from './routes/formdata-redirect/index'
2829
import { Route as FactoryIndexRouteImport } from './routes/factory/index'
2930
import { Route as CookiesIndexRouteImport } from './routes/cookies/index'
31+
import { Route as RedirectTestTargetRouteImport } from './routes/redirect-test/target'
3032
import { Route as MiddlewareSendServerFnRouteImport } from './routes/middleware/send-serverFn'
3133
import { Route as MiddlewareRequestMiddlewareRouteImport } from './routes/middleware/request-middleware'
3234
import { Route as MiddlewareClientMiddlewareRouterRouteImport } from './routes/middleware/client-middleware-router'
@@ -98,6 +100,11 @@ const IndexRoute = IndexRouteImport.update({
98100
path: '/',
99101
getParentRoute: () => rootRouteImport,
100102
} as any)
103+
const RedirectTestIndexRoute = RedirectTestIndexRouteImport.update({
104+
id: '/redirect-test/',
105+
path: '/redirect-test/',
106+
getParentRoute: () => rootRouteImport,
107+
} as any)
101108
const PrimitivesIndexRoute = PrimitivesIndexRouteImport.update({
102109
id: '/primitives/',
103110
path: '/primitives/',
@@ -123,6 +130,11 @@ const CookiesIndexRoute = CookiesIndexRouteImport.update({
123130
path: '/cookies/',
124131
getParentRoute: () => rootRouteImport,
125132
} as any)
133+
const RedirectTestTargetRoute = RedirectTestTargetRouteImport.update({
134+
id: '/redirect-test/target',
135+
path: '/redirect-test/target',
136+
getParentRoute: () => rootRouteImport,
137+
} as any)
126138
const MiddlewareSendServerFnRoute = MiddlewareSendServerFnRouteImport.update({
127139
id: '/middleware/send-serverFn',
128140
path: '/middleware/send-serverFn',
@@ -170,11 +182,13 @@ export interface FileRoutesByFullPath {
170182
'/middleware/client-middleware-router': typeof MiddlewareClientMiddlewareRouterRoute
171183
'/middleware/request-middleware': typeof MiddlewareRequestMiddlewareRoute
172184
'/middleware/send-serverFn': typeof MiddlewareSendServerFnRoute
185+
'/redirect-test/target': typeof RedirectTestTargetRoute
173186
'/cookies': typeof CookiesIndexRoute
174187
'/factory': typeof FactoryIndexRoute
175188
'/formdata-redirect': typeof FormdataRedirectIndexRoute
176189
'/middleware': typeof MiddlewareIndexRoute
177190
'/primitives': typeof PrimitivesIndexRoute
191+
'/redirect-test': typeof RedirectTestIndexRoute
178192
'/formdata-redirect/target/$name': typeof FormdataRedirectTargetNameRoute
179193
}
180194
export interface FileRoutesByTo {
@@ -195,11 +209,13 @@ export interface FileRoutesByTo {
195209
'/middleware/client-middleware-router': typeof MiddlewareClientMiddlewareRouterRoute
196210
'/middleware/request-middleware': typeof MiddlewareRequestMiddlewareRoute
197211
'/middleware/send-serverFn': typeof MiddlewareSendServerFnRoute
212+
'/redirect-test/target': typeof RedirectTestTargetRoute
198213
'/cookies': typeof CookiesIndexRoute
199214
'/factory': typeof FactoryIndexRoute
200215
'/formdata-redirect': typeof FormdataRedirectIndexRoute
201216
'/middleware': typeof MiddlewareIndexRoute
202217
'/primitives': typeof PrimitivesIndexRoute
218+
'/redirect-test': typeof RedirectTestIndexRoute
203219
'/formdata-redirect/target/$name': typeof FormdataRedirectTargetNameRoute
204220
}
205221
export interface FileRoutesById {
@@ -221,11 +237,13 @@ export interface FileRoutesById {
221237
'/middleware/client-middleware-router': typeof MiddlewareClientMiddlewareRouterRoute
222238
'/middleware/request-middleware': typeof MiddlewareRequestMiddlewareRoute
223239
'/middleware/send-serverFn': typeof MiddlewareSendServerFnRoute
240+
'/redirect-test/target': typeof RedirectTestTargetRoute
224241
'/cookies/': typeof CookiesIndexRoute
225242
'/factory/': typeof FactoryIndexRoute
226243
'/formdata-redirect/': typeof FormdataRedirectIndexRoute
227244
'/middleware/': typeof MiddlewareIndexRoute
228245
'/primitives/': typeof PrimitivesIndexRoute
246+
'/redirect-test/': typeof RedirectTestIndexRoute
229247
'/formdata-redirect/target/$name': typeof FormdataRedirectTargetNameRoute
230248
}
231249
export interface FileRouteTypes {
@@ -248,11 +266,13 @@ export interface FileRouteTypes {
248266
| '/middleware/client-middleware-router'
249267
| '/middleware/request-middleware'
250268
| '/middleware/send-serverFn'
269+
| '/redirect-test/target'
251270
| '/cookies'
252271
| '/factory'
253272
| '/formdata-redirect'
254273
| '/middleware'
255274
| '/primitives'
275+
| '/redirect-test'
256276
| '/formdata-redirect/target/$name'
257277
fileRoutesByTo: FileRoutesByTo
258278
to:
@@ -273,11 +293,13 @@ export interface FileRouteTypes {
273293
| '/middleware/client-middleware-router'
274294
| '/middleware/request-middleware'
275295
| '/middleware/send-serverFn'
296+
| '/redirect-test/target'
276297
| '/cookies'
277298
| '/factory'
278299
| '/formdata-redirect'
279300
| '/middleware'
280301
| '/primitives'
302+
| '/redirect-test'
281303
| '/formdata-redirect/target/$name'
282304
id:
283305
| '__root__'
@@ -298,11 +320,13 @@ export interface FileRouteTypes {
298320
| '/middleware/client-middleware-router'
299321
| '/middleware/request-middleware'
300322
| '/middleware/send-serverFn'
323+
| '/redirect-test/target'
301324
| '/cookies/'
302325
| '/factory/'
303326
| '/formdata-redirect/'
304327
| '/middleware/'
305328
| '/primitives/'
329+
| '/redirect-test/'
306330
| '/formdata-redirect/target/$name'
307331
fileRoutesById: FileRoutesById
308332
}
@@ -324,11 +348,13 @@ export interface RootRouteChildren {
324348
MiddlewareClientMiddlewareRouterRoute: typeof MiddlewareClientMiddlewareRouterRoute
325349
MiddlewareRequestMiddlewareRoute: typeof MiddlewareRequestMiddlewareRoute
326350
MiddlewareSendServerFnRoute: typeof MiddlewareSendServerFnRoute
351+
RedirectTestTargetRoute: typeof RedirectTestTargetRoute
327352
CookiesIndexRoute: typeof CookiesIndexRoute
328353
FactoryIndexRoute: typeof FactoryIndexRoute
329354
FormdataRedirectIndexRoute: typeof FormdataRedirectIndexRoute
330355
MiddlewareIndexRoute: typeof MiddlewareIndexRoute
331356
PrimitivesIndexRoute: typeof PrimitivesIndexRoute
357+
RedirectTestIndexRoute: typeof RedirectTestIndexRoute
332358
FormdataRedirectTargetNameRoute: typeof FormdataRedirectTargetNameRoute
333359
}
334360

@@ -425,6 +451,13 @@ declare module '@tanstack/react-router' {
425451
preLoaderRoute: typeof IndexRouteImport
426452
parentRoute: typeof rootRouteImport
427453
}
454+
'/redirect-test/': {
455+
id: '/redirect-test/'
456+
path: '/redirect-test'
457+
fullPath: '/redirect-test'
458+
preLoaderRoute: typeof RedirectTestIndexRouteImport
459+
parentRoute: typeof rootRouteImport
460+
}
428461
'/primitives/': {
429462
id: '/primitives/'
430463
path: '/primitives'
@@ -460,6 +493,13 @@ declare module '@tanstack/react-router' {
460493
preLoaderRoute: typeof CookiesIndexRouteImport
461494
parentRoute: typeof rootRouteImport
462495
}
496+
'/redirect-test/target': {
497+
id: '/redirect-test/target'
498+
path: '/redirect-test/target'
499+
fullPath: '/redirect-test/target'
500+
preLoaderRoute: typeof RedirectTestTargetRouteImport
501+
parentRoute: typeof rootRouteImport
502+
}
463503
'/middleware/send-serverFn': {
464504
id: '/middleware/send-serverFn'
465505
path: '/middleware/send-serverFn'
@@ -516,11 +556,13 @@ const rootRouteChildren: RootRouteChildren = {
516556
MiddlewareClientMiddlewareRouterRoute: MiddlewareClientMiddlewareRouterRoute,
517557
MiddlewareRequestMiddlewareRoute: MiddlewareRequestMiddlewareRoute,
518558
MiddlewareSendServerFnRoute: MiddlewareSendServerFnRoute,
559+
RedirectTestTargetRoute: RedirectTestTargetRoute,
519560
CookiesIndexRoute: CookiesIndexRoute,
520561
FactoryIndexRoute: FactoryIndexRoute,
521562
FormdataRedirectIndexRoute: FormdataRedirectIndexRoute,
522563
MiddlewareIndexRoute: MiddlewareIndexRoute,
523564
PrimitivesIndexRoute: PrimitivesIndexRoute,
565+
RedirectTestIndexRoute: RedirectTestIndexRoute,
524566
FormdataRedirectTargetNameRoute: FormdataRedirectTargetNameRoute,
525567
}
526568
export const routeTree = rootRouteImport
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
import { useQuery } from '@tanstack/react-query'
2+
import { createFileRoute, redirect } from '@tanstack/react-router'
3+
import { createServerFn, useServerFn } from '@tanstack/react-start'
4+
import { Suspense } from 'react'
5+
6+
const $redirectServerFn = createServerFn({ method: 'GET' }).handler(async () => {
7+
throw redirect({ to: '/redirect-test/target' })
8+
})
9+
10+
export const Route = createFileRoute('/redirect-test/')({
11+
component: RouteComponent,
12+
})
13+
14+
function RouteComponent() {
15+
const redirectFn = useServerFn($redirectServerFn)
16+
const query = useQuery({
17+
queryKey: ['redirect-test'],
18+
queryFn: () => redirectFn(),
19+
})
20+
21+
return (
22+
<div>
23+
<h1 data-testid="redirect-source">Redirect Source</h1>
24+
<Suspense>
25+
<div>{JSON.stringify(query.data)}</div>
26+
</Suspense>
27+
</div>
28+
)
29+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
import { createFileRoute } from '@tanstack/react-router'
2+
3+
export const Route = createFileRoute('/redirect-test/target')({
4+
component: RouteComponent,
5+
})
6+
7+
function RouteComponent() {
8+
return (
9+
<div>
10+
<h1 data-testid="redirect-target">Redirect Target</h1>
11+
<p>Successfully redirected!</p>
12+
</div>
13+
)
14+
}

e2e/react-start/server-functions/tests/server-functions.spec.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -468,3 +468,12 @@ test('primitives', async ({ page }) => {
468468
await expect(page.getByTestId(`result-${suffix}`)).toContainText(expected)
469469
}
470470
})
471+
472+
test('redirect in server function on direct navigation', async ({ page }) => {
473+
// Test direct navigation to a route with a server function that redirects
474+
await page.goto('/redirect-test')
475+
476+
// Should redirect to target page
477+
await expect(page.getByTestId('redirect-target')).toBeVisible()
478+
expect(page.url()).toContain('/redirect-test/target')
479+
})

0 commit comments

Comments
 (0)