File tree 13 files changed +122
-0
lines changed
13 files changed +122
-0
lines changed Original file line number Diff line number Diff line change
1
+ import { testLoader } from 'e2e-shared/specs/loader.cy'
2
+
3
+ testLoader ( { path : '/app/loader' , nextJsRouter : 'app' } )
4
+
5
+ testLoader ( { path : '/pages/loader' , nextJsRouter : 'pages' } )
Original file line number Diff line number Diff line change
1
+ import { LoaderRenderer , loadSearchParams } from 'e2e-shared/specs/loader'
2
+ import type { SearchParams } from 'nuqs/server'
3
+
4
+ type PageProps = {
5
+ searchParams : Promise < SearchParams >
6
+ }
7
+
8
+ export default async function Page ( { searchParams } : PageProps ) {
9
+ const serverValues = await loadSearchParams ( searchParams )
10
+ return < LoaderRenderer serverValues = { serverValues } />
11
+ }
Original file line number Diff line number Diff line change
1
+ import {
2
+ type SearchParams ,
3
+ LoaderRenderer ,
4
+ loadSearchParams
5
+ } from 'e2e-shared/specs/loader'
6
+ import { GetServerSidePropsContext } from 'next'
7
+
8
+ type PageProps = {
9
+ serverValues : SearchParams
10
+ }
11
+
12
+ export default function Page ( { serverValues } : PageProps ) {
13
+ return < LoaderRenderer serverValues = { serverValues } />
14
+ }
15
+
16
+ export async function getServerSideProps ( { query } : GetServerSidePropsContext ) {
17
+ return {
18
+ props : {
19
+ serverValues : loadSearchParams ( query )
20
+ }
21
+ }
22
+ }
Original file line number Diff line number Diff line change
1
+ import { testLoader } from 'e2e-shared/specs/loader.cy'
2
+
3
+ testLoader ( { path : '/loader' } )
Original file line number Diff line number Diff line change @@ -37,6 +37,7 @@ const router = createBrowserRouter(
37
37
< Route path = "routing/useQueryStates/other" lazy = { load ( import ( './routes/routing.useQueryStates.other' ) ) } />
38
38
< Route path = 'shallow/useQueryState' lazy = { load ( import ( './routes/shallow.useQueryState' ) ) } />
39
39
< Route path = 'shallow/useQueryStates' lazy = { load ( import ( './routes/shallow.useQueryStates' ) ) } />
40
+ < Route path = 'loader' lazy = { load ( import ( './routes/loader' ) ) } />
40
41
</ Route >
41
42
) )
42
43
Original file line number Diff line number Diff line change
1
+ import { LoaderRenderer , loadSearchParams } from 'e2e-shared/specs/loader'
2
+ import { useLoaderData , type LoaderFunctionArgs } from 'react-router-dom'
3
+
4
+ export function loader ( { request } : LoaderFunctionArgs ) {
5
+ return loadSearchParams ( request )
6
+ }
7
+
8
+ export default function Page ( ) {
9
+ const serverValues = useLoaderData ( ) as Awaited < ReturnType < typeof loader > >
10
+ return < LoaderRenderer serverValues = { serverValues } />
11
+ }
Original file line number Diff line number Diff line change @@ -18,5 +18,6 @@ export default [
18
18
route ( '/routing/useQueryStates/other' , './routes/routing.useQueryStates.other.tsx' ) ,
19
19
route ( '/shallow/useQueryState' , './routes/shallow.useQueryState.tsx' ) ,
20
20
route ( '/shallow/useQueryStates' , './routes/shallow.useQueryStates.tsx' ) ,
21
+ route ( '/loader' , './routes/loader.tsx' )
21
22
] )
22
23
] satisfies RouteConfig
Original file line number Diff line number Diff line change
1
+ import { LoaderRenderer , loadSearchParams } from 'e2e-shared/specs/loader'
2
+ import type { LoaderFunctionArgs } from 'react-router'
3
+ import type { Route } from './+types/loader'
4
+
5
+ export function loader ( { request } : LoaderFunctionArgs ) {
6
+ return loadSearchParams ( request )
7
+ }
8
+
9
+ export default function Page ( {
10
+ loaderData : serverValues
11
+ } : Route . ComponentProps ) {
12
+ return < LoaderRenderer serverValues = { serverValues } />
13
+ }
Original file line number Diff line number Diff line change
1
+ import { testLoader } from 'e2e-shared/specs/loader.cy'
2
+
3
+ testLoader ( { path : '/loader' } )
Original file line number Diff line number Diff line change
1
+ import type { LoaderFunctionArgs } from '@remix-run/node'
2
+ import { useLoaderData } from '@remix-run/react'
3
+ import { LoaderRenderer , loadSearchParams } from 'e2e-shared/specs/loader'
4
+
5
+ export function loader ( { request } : LoaderFunctionArgs ) {
6
+ return loadSearchParams ( request )
7
+ }
8
+
9
+ export default function Page ( ) {
10
+ const serverValues = useLoaderData < typeof loader > ( )
11
+ return < LoaderRenderer serverValues = { serverValues } />
12
+ }
Original file line number Diff line number Diff line change
1
+ import { testLoader } from 'e2e-shared/specs/loader.cy'
2
+
3
+ testLoader ( { path : '/loader' } )
Original file line number Diff line number Diff line change
1
+ import { createTest } from '../create-test'
2
+
3
+ export const testLoader = createTest ( 'Loader' , ( { path } ) => {
4
+ it ( 'loads state from the URL' , ( ) => {
5
+ cy . visit ( path + '?test=pass&int=42' )
6
+ cy . contains ( '#hydration-marker' , 'hydrated' ) . should ( 'be.hidden' )
7
+ cy . get ( '#test' ) . should ( 'have.text' , 'pass' )
8
+ cy . get ( '#int' ) . should ( 'have.text' , '42' )
9
+ } )
10
+ } )
Original file line number Diff line number Diff line change
1
+ import {
2
+ createLoader ,
3
+ type inferParserType ,
4
+ parseAsInteger ,
5
+ parseAsString
6
+ } from 'nuqs/server'
7
+
8
+ const searchParams = {
9
+ test : parseAsString ,
10
+ int : parseAsInteger
11
+ }
12
+
13
+ export type SearchParams = inferParserType < typeof searchParams >
14
+ export const loadSearchParams = createLoader ( searchParams )
15
+
16
+ type LoaderRendererProps = {
17
+ serverValues : inferParserType < typeof searchParams >
18
+ }
19
+
20
+ export function LoaderRenderer ( { serverValues } : LoaderRendererProps ) {
21
+ return (
22
+ < >
23
+ < pre id = "test" > { serverValues . test } </ pre >
24
+ < pre id = "int" > { serverValues . int } </ pre >
25
+ </ >
26
+ )
27
+ }
You can’t perform that action at this time.
0 commit comments