Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
56 changes: 56 additions & 0 deletions e2e/react-router/basic-file-based/src/routeTree.gen.ts
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ import { Route as anotherGroupOnlyrouteinsideRouteImport } from './routes/(anoth
import { Route as RelativeUseNavigateRouteRouteImport } from './routes/relative/useNavigate/route'
import { Route as RelativeLinkRouteRouteImport } from './routes/relative/link/route'
import { Route as PathlessLayoutLayoutRouteRouteImport } from './routes/pathless-layout/_layout/route'
import { Route as ParamsPsStrictFalseRouteRouteImport } from './routes/params-ps/strict-false/route'
import { Route as ParamsPsNonNestedRouteRouteImport } from './routes/params-ps/non-nested/route'
import { Route as NonNestedSuffixRouteRouteImport } from './routes/non-nested/suffix/route'
import { Route as NonNestedPrefixRouteRouteImport } from './routes/non-nested/prefix/route'
Expand Down Expand Up @@ -78,6 +79,7 @@ import { Route as LayoutLayout2LayoutBRouteImport } from './routes/_layout/_layo
import { Route as LayoutLayout2LayoutARouteImport } from './routes/_layout/_layout-2/layout-a'
import { Route as groupSubfolderInsideRouteImport } from './routes/(group)/subfolder/inside'
import { Route as groupLayoutInsidelayoutRouteImport } from './routes/(group)/_layout.insidelayout'
import { Route as ParamsPsStrictFalseVersionRouteRouteImport } from './routes/params-ps/strict-false/$version.route'
import { Route as ParamsPsNonNestedFooRouteRouteImport } from './routes/params-ps/non-nested/$foo_/route'
import { Route as ParamsPsNamedFooRouteRouteImport } from './routes/params-ps/named/$foo/route'
import { Route as NonNestedSuffixChar123bazChar125suffixRouteRouteImport } from './routes/non-nested/suffix/{$baz}suffix.route'
Expand Down Expand Up @@ -281,6 +283,12 @@ const PathlessLayoutLayoutRouteRoute =
id: '/_layout',
getParentRoute: () => PathlessLayoutRouteRoute,
} as any)
const ParamsPsStrictFalseRouteRoute =
ParamsPsStrictFalseRouteRouteImport.update({
id: '/params-ps/strict-false',
path: '/params-ps/strict-false',
getParentRoute: () => rootRouteImport,
} as any)
const ParamsPsNonNestedRouteRoute = ParamsPsNonNestedRouteRouteImport.update({
id: '/params-ps/non-nested',
path: '/params-ps/non-nested',
Expand Down Expand Up @@ -481,6 +489,12 @@ const groupLayoutInsidelayoutRoute = groupLayoutInsidelayoutRouteImport.update({
path: '/insidelayout',
getParentRoute: () => groupLayoutRoute,
} as any)
const ParamsPsStrictFalseVersionRouteRoute =
ParamsPsStrictFalseVersionRouteRouteImport.update({
id: '/$version',
path: '/$version',
getParentRoute: () => ParamsPsStrictFalseRouteRoute,
} as any)
const ParamsPsNonNestedFooRouteRoute =
ParamsPsNonNestedFooRouteRouteImport.update({
id: '/$foo_',
Expand Down Expand Up @@ -721,6 +735,7 @@ export interface FileRoutesByFullPath {
'/non-nested/prefix': typeof NonNestedPrefixRouteRouteWithChildren
'/non-nested/suffix': typeof NonNestedSuffixRouteRouteWithChildren
'/params-ps/non-nested': typeof ParamsPsNonNestedRouteRouteWithChildren
'/params-ps/strict-false': typeof ParamsPsStrictFalseRouteRouteWithChildren
'/relative/link': typeof RelativeLinkRouteRouteWithChildren
'/relative/useNavigate': typeof RelativeUseNavigateRouteRouteWithChildren
'/onlyrouteinside': typeof anotherGroupOnlyrouteinsideRoute
Expand All @@ -742,6 +757,7 @@ export interface FileRoutesByFullPath {
'/non-nested/suffix/{$baz}suffix': typeof NonNestedSuffixChar123bazChar125suffixRouteRouteWithChildren
'/params-ps/named/$foo': typeof ParamsPsNamedFooRouteRouteWithChildren
'/params-ps/non-nested/$foo': typeof ParamsPsNonNestedFooRouteRouteWithChildren
'/params-ps/strict-false/$version': typeof ParamsPsStrictFalseVersionRouteRoute
'/insidelayout': typeof groupLayoutInsidelayoutRoute
'/subfolder/inside': typeof groupSubfolderInsideRoute
'/layout-a': typeof LayoutLayout2LayoutARoute
Expand Down Expand Up @@ -825,6 +841,7 @@ export interface FileRoutesByTo {
'/non-nested/prefix': typeof NonNestedPrefixRouteRouteWithChildren
'/non-nested/suffix': typeof NonNestedSuffixRouteRouteWithChildren
'/params-ps/non-nested': typeof ParamsPsNonNestedRouteRouteWithChildren
'/params-ps/strict-false': typeof ParamsPsStrictFalseRouteRouteWithChildren
'/relative/link': typeof RelativeLinkRouteRouteWithChildren
'/relative/useNavigate': typeof RelativeUseNavigateRouteRouteWithChildren
'/onlyrouteinside': typeof anotherGroupOnlyrouteinsideRoute
Expand All @@ -840,6 +857,7 @@ export interface FileRoutesByTo {
'/search-params': typeof SearchParamsIndexRoute
'/params-ps/named/$foo': typeof ParamsPsNamedFooRouteRouteWithChildren
'/params-ps/non-nested/$foo': typeof ParamsPsNonNestedFooRouteRouteWithChildren
'/params-ps/strict-false/$version': typeof ParamsPsStrictFalseVersionRouteRoute
'/insidelayout': typeof groupLayoutInsidelayoutRoute
'/subfolder/inside': typeof groupSubfolderInsideRoute
'/layout-a': typeof LayoutLayout2LayoutARoute
Expand Down Expand Up @@ -924,6 +942,7 @@ export interface FileRoutesById {
'/non-nested/prefix': typeof NonNestedPrefixRouteRouteWithChildren
'/non-nested/suffix': typeof NonNestedSuffixRouteRouteWithChildren
'/params-ps/non-nested': typeof ParamsPsNonNestedRouteRouteWithChildren
'/params-ps/strict-false': typeof ParamsPsStrictFalseRouteRouteWithChildren
'/pathless-layout/_layout': typeof PathlessLayoutLayoutRouteRouteWithChildren
'/relative/link': typeof RelativeLinkRouteRouteWithChildren
'/relative/useNavigate': typeof RelativeUseNavigateRouteRouteWithChildren
Expand All @@ -948,6 +967,7 @@ export interface FileRoutesById {
'/non-nested/suffix/{$baz}suffix': typeof NonNestedSuffixChar123bazChar125suffixRouteRouteWithChildren
'/params-ps/named/$foo': typeof ParamsPsNamedFooRouteRouteWithChildren
'/params-ps/non-nested/$foo_': typeof ParamsPsNonNestedFooRouteRouteWithChildren
'/params-ps/strict-false/$version': typeof ParamsPsStrictFalseVersionRouteRoute
'/(group)/_layout/insidelayout': typeof groupLayoutInsidelayoutRoute
'/(group)/subfolder/inside': typeof groupSubfolderInsideRoute
'/_layout/_layout-2/layout-a': typeof LayoutLayout2LayoutARoute
Expand Down Expand Up @@ -1035,6 +1055,7 @@ export interface FileRouteTypes {
| '/non-nested/prefix'
| '/non-nested/suffix'
| '/params-ps/non-nested'
| '/params-ps/strict-false'
| '/relative/link'
| '/relative/useNavigate'
| '/onlyrouteinside'
Expand All @@ -1056,6 +1077,7 @@ export interface FileRouteTypes {
| '/non-nested/suffix/{$baz}suffix'
| '/params-ps/named/$foo'
| '/params-ps/non-nested/$foo'
| '/params-ps/strict-false/$version'
| '/insidelayout'
| '/subfolder/inside'
| '/layout-a'
Expand Down Expand Up @@ -1139,6 +1161,7 @@ export interface FileRouteTypes {
| '/non-nested/prefix'
| '/non-nested/suffix'
| '/params-ps/non-nested'
| '/params-ps/strict-false'
| '/relative/link'
| '/relative/useNavigate'
| '/onlyrouteinside'
Expand All @@ -1154,6 +1177,7 @@ export interface FileRouteTypes {
| '/search-params'
| '/params-ps/named/$foo'
| '/params-ps/non-nested/$foo'
| '/params-ps/strict-false/$version'
| '/insidelayout'
| '/subfolder/inside'
| '/layout-a'
Expand Down Expand Up @@ -1237,6 +1261,7 @@ export interface FileRouteTypes {
| '/non-nested/prefix'
| '/non-nested/suffix'
| '/params-ps/non-nested'
| '/params-ps/strict-false'
| '/pathless-layout/_layout'
| '/relative/link'
| '/relative/useNavigate'
Expand All @@ -1261,6 +1286,7 @@ export interface FileRouteTypes {
| '/non-nested/suffix/{$baz}suffix'
| '/params-ps/named/$foo'
| '/params-ps/non-nested/$foo_'
| '/params-ps/strict-false/$version'
| '/(group)/_layout/insidelayout'
| '/(group)/subfolder/inside'
| '/_layout/_layout-2/layout-a'
Expand Down Expand Up @@ -1343,6 +1369,7 @@ export interface RootRouteChildren {
PostsRoute: typeof PostsRouteWithChildren
RemountDepsRoute: typeof RemountDepsRoute
ParamsPsNonNestedRouteRoute: typeof ParamsPsNonNestedRouteRouteWithChildren
ParamsPsStrictFalseRouteRoute: typeof ParamsPsStrictFalseRouteRouteWithChildren
RelativeLinkRouteRoute: typeof RelativeLinkRouteRouteWithChildren
RelativeUseNavigateRouteRoute: typeof RelativeUseNavigateRouteRouteWithChildren
anotherGroupOnlyrouteinsideRoute: typeof anotherGroupOnlyrouteinsideRoute
Expand Down Expand Up @@ -1598,6 +1625,13 @@ declare module '@tanstack/react-router' {
preLoaderRoute: typeof PathlessLayoutLayoutRouteRouteImport
parentRoute: typeof PathlessLayoutRouteRoute
}
'/params-ps/strict-false': {
id: '/params-ps/strict-false'
path: '/params-ps/strict-false'
fullPath: '/params-ps/strict-false'
preLoaderRoute: typeof ParamsPsStrictFalseRouteRouteImport
parentRoute: typeof rootRouteImport
}
'/params-ps/non-nested': {
id: '/params-ps/non-nested'
path: '/params-ps/non-nested'
Expand Down Expand Up @@ -1857,6 +1891,13 @@ declare module '@tanstack/react-router' {
preLoaderRoute: typeof groupLayoutInsidelayoutRouteImport
parentRoute: typeof groupLayoutRoute
}
'/params-ps/strict-false/$version': {
id: '/params-ps/strict-false/$version'
path: '/$version'
fullPath: '/params-ps/strict-false/$version'
preLoaderRoute: typeof ParamsPsStrictFalseVersionRouteRouteImport
parentRoute: typeof ParamsPsStrictFalseRouteRoute
}
'/params-ps/non-nested/$foo_': {
id: '/params-ps/non-nested/$foo_'
path: '/$foo'
Expand Down Expand Up @@ -2472,6 +2513,20 @@ const ParamsPsNonNestedRouteRouteWithChildren =
ParamsPsNonNestedRouteRouteChildren,
)

interface ParamsPsStrictFalseRouteRouteChildren {
ParamsPsStrictFalseVersionRouteRoute: typeof ParamsPsStrictFalseVersionRouteRoute
}

const ParamsPsStrictFalseRouteRouteChildren: ParamsPsStrictFalseRouteRouteChildren =
{
ParamsPsStrictFalseVersionRouteRoute: ParamsPsStrictFalseVersionRouteRoute,
}

const ParamsPsStrictFalseRouteRouteWithChildren =
ParamsPsStrictFalseRouteRoute._addFileChildren(
ParamsPsStrictFalseRouteRouteChildren,
)

interface RelativeLinkRouteRouteChildren {
RelativeLinkRelativeLinkARoute: typeof RelativeLinkRelativeLinkARoute
RelativeLinkRelativeLinkBRoute: typeof RelativeLinkRelativeLinkBRoute
Expand Down Expand Up @@ -2599,6 +2654,7 @@ const rootRouteChildren: RootRouteChildren = {
PostsRoute: PostsRouteWithChildren,
RemountDepsRoute: RemountDepsRoute,
ParamsPsNonNestedRouteRoute: ParamsPsNonNestedRouteRouteWithChildren,
ParamsPsStrictFalseRouteRoute: ParamsPsStrictFalseRouteRouteWithChildren,
RelativeLinkRouteRoute: RelativeLinkRouteRouteWithChildren,
RelativeUseNavigateRouteRoute: RelativeUseNavigateRouteRouteWithChildren,
anotherGroupOnlyrouteinsideRoute: anotherGroupOnlyrouteinsideRoute,
Expand Down
22 changes: 22 additions & 0 deletions e2e/react-router/basic-file-based/src/routes/params-ps/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -122,6 +122,28 @@ function RouteComponent() {
</Link>
</li>
</ul>
<hr />
<h3 className="pb-2">Parsed params with strict false</h3>
<ul className="grid mb-2">
<li>
<Link
data-testid="strict-false-version-1"
to="/params-ps/strict-false/$version"
params={{ version: 1 }}
>
/params-ps/strict-false/$version (1)
</Link>
</li>
<li>
<Link
data-testid="strict-false-version-2"
to="/params-ps/strict-false/$version"
params={{ version: 2 }}
>
/params-ps/strict-false/$version (2)
</Link>
</li>
</ul>
</div>
)
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
import { createFileRoute, useParams } from '@tanstack/react-router'

export const Route = createFileRoute('/params-ps/strict-false/$version')({
params: {
parse: (params) => ({
...params,
version: parseInt(params.version),
}),
stringify: (params) => ({
...params,
version: `${params.version}`,
}),
},
component: RouteComponent,
})

function RouteComponent() {
const { version } = useParams({ strict: false })

return <div data-testid="strict-false-child-version">{String(version)}</div>
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
import {
Link,
Outlet,
createFileRoute,
useParams,
} from '@tanstack/react-router'

export const Route = createFileRoute('/params-ps/strict-false')({
component: RouteComponent,
})

function RouteComponent() {
const { version } = useParams({ strict: false })
return (
<div>
<h3>ParamsStrictFalseParse</h3>
<div>
Type:{' '}
<span data-testid="strict-false-version-type">{typeof version}</span>
</div>
<div>
Value:{' '}
<span data-testid="strict-false-version-value">{String(version)}</span>
</div>
<Link
data-testid="strict-false-version-1"
from={Route.fullPath}
to="./$version"
params={{ version: 1 }}
>
Version 1
</Link>
<Link
data-testid="strict-false-version-2"
from={Route.fullPath}
to="./$version"
params={{ version: 2 }}
>
Version 2
</Link>
<Outlet />
</div>
)
}
26 changes: 26 additions & 0 deletions e2e/react-router/basic-file-based/tests/params.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -492,3 +492,29 @@ test.describe('Unicode params', () => {
})
})
})

test.describe('useParams strict false uses parsed child params', () => {
test.beforeEach(async ({ page }) => {
await page.goto('/params-ps')
})

test('parent receives parsed values after child navigation', async ({
page,
}) => {
await page.getByTestId('strict-false-version-1').click()
await page.waitForURL('/params-ps/strict-false/1')

await expect(page.getByTestId('strict-false-version-type')).toHaveText(
'number',
)
await expect(page.getByTestId('strict-false-version-value')).toHaveText('1')

await page.getByTestId('strict-false-version-2').click()
await page.waitForURL('/params-ps/strict-false/2')

await expect(page.getByTestId('strict-false-version-type')).toHaveText(
'number',
)
await expect(page.getByTestId('strict-false-version-value')).toHaveText('2')
})
})
Loading
Loading