@tanstack/react-router 1.20.1 → 1.20.3-alpha.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +31 -0
- package/dist/cjs/Asset.cjs +41 -0
- package/dist/cjs/Asset.cjs.map +1 -0
- package/dist/cjs/Asset.d.cts +2 -0
- package/dist/cjs/CatchBoundary.cjs +16 -12
- package/dist/cjs/CatchBoundary.cjs.map +1 -1
- package/dist/cjs/CatchBoundary.d.cts +8 -32
- package/dist/cjs/ClientOnly.cjs +20 -0
- package/dist/cjs/ClientOnly.cjs.map +1 -0
- package/dist/cjs/ClientOnly.d.cts +29 -0
- package/dist/cjs/HeadContent.cjs +155 -0
- package/dist/cjs/HeadContent.cjs.map +1 -0
- package/dist/cjs/HeadContent.d.cts +7 -0
- package/dist/cjs/Match.cjs +252 -0
- package/dist/cjs/Match.cjs.map +1 -0
- package/dist/cjs/Match.d.cts +8 -0
- package/dist/cjs/Matches.cjs +39 -287
- package/dist/cjs/Matches.cjs.map +1 -1
- package/dist/cjs/Matches.d.cts +23 -83
- package/dist/cjs/RouterProvider.cjs +17 -140
- package/dist/cjs/RouterProvider.cjs.map +1 -1
- package/dist/cjs/RouterProvider.d.cts +8 -27
- package/dist/cjs/SafeFragment.cjs +8 -0
- package/dist/cjs/SafeFragment.cjs.map +1 -0
- package/dist/cjs/SafeFragment.d.cts +1 -0
- package/dist/cjs/ScriptOnce.cjs +28 -0
- package/dist/cjs/ScriptOnce.cjs.map +1 -0
- package/dist/cjs/ScriptOnce.d.cts +5 -0
- package/dist/cjs/Scripts.cjs +51 -0
- package/dist/cjs/Scripts.cjs.map +1 -0
- package/dist/cjs/Scripts.d.cts +1 -0
- package/dist/cjs/ScrollRestoration.cjs +39 -0
- package/dist/cjs/ScrollRestoration.cjs.map +1 -0
- package/dist/cjs/ScrollRestoration.d.cts +14 -0
- package/dist/cjs/Transitioner.cjs +115 -0
- package/dist/cjs/Transitioner.cjs.map +1 -0
- package/dist/cjs/Transitioner.d.cts +1 -0
- package/dist/cjs/awaited.cjs +12 -65
- package/dist/cjs/awaited.cjs.map +1 -1
- package/dist/cjs/awaited.d.cts +4 -4
- package/dist/cjs/fileRoute.cjs +41 -15
- package/dist/cjs/fileRoute.cjs.map +1 -1
- package/dist/cjs/fileRoute.d.cts +33 -108
- package/dist/cjs/history.d.cts +1 -0
- package/dist/cjs/index.cjs +216 -73
- package/dist/cjs/index.cjs.map +1 -1
- package/dist/cjs/index.d.cts +52 -29
- package/dist/cjs/lazyRouteComponent.cjs +40 -29
- package/dist/cjs/lazyRouteComponent.cjs.map +1 -1
- package/dist/cjs/lazyRouteComponent.d.cts +1 -1
- package/dist/cjs/link.cjs +212 -106
- package/dist/cjs/link.cjs.map +1 -1
- package/dist/cjs/link.d.cts +41 -86
- package/dist/cjs/matchContext.cjs +27 -0
- package/dist/cjs/matchContext.cjs.map +1 -0
- package/dist/cjs/matchContext.d.cts +3 -0
- package/dist/cjs/not-found.cjs +9 -15
- package/dist/cjs/not-found.cjs.map +1 -1
- package/dist/cjs/not-found.d.cts +5 -22
- package/dist/cjs/renderRouteNotFound.cjs +22 -0
- package/dist/cjs/renderRouteNotFound.cjs.map +1 -0
- package/dist/cjs/renderRouteNotFound.d.cts +2 -0
- package/dist/cjs/route.cjs +110 -79
- package/dist/cjs/route.cjs.map +1 -1
- package/dist/cjs/route.d.cts +64 -361
- package/dist/cjs/router.cjs +12 -1237
- package/dist/cjs/router.cjs.map +1 -1
- package/dist/cjs/router.d.cts +69 -237
- package/dist/cjs/routerContext.cjs +1 -1
- package/dist/cjs/routerContext.cjs.map +1 -1
- package/dist/cjs/routerContext.d.cts +7 -2
- package/dist/cjs/scroll-restoration.cjs +16 -177
- package/dist/cjs/scroll-restoration.cjs.map +1 -1
- package/dist/cjs/scroll-restoration.d.cts +1 -18
- package/dist/cjs/serializer.d.cts +6 -0
- package/dist/cjs/structuralSharing.d.cts +8 -0
- package/dist/cjs/typePrimitives.d.cts +16 -0
- package/dist/cjs/useBlocker.cjs +138 -9
- package/dist/cjs/useBlocker.cjs.map +1 -1
- package/dist/cjs/useBlocker.d.cts +64 -7
- package/dist/cjs/useCanGoBack.cjs +8 -0
- package/dist/cjs/useCanGoBack.cjs.map +1 -0
- package/dist/cjs/useCanGoBack.d.cts +1 -0
- package/dist/cjs/useLoaderData.cjs +15 -0
- package/dist/cjs/useLoaderData.cjs.map +1 -0
- package/dist/cjs/useLoaderData.d.cts +8 -0
- package/dist/cjs/useLoaderDeps.cjs +14 -0
- package/dist/cjs/useLoaderDeps.cjs.map +1 -0
- package/dist/cjs/useLoaderDeps.d.cts +8 -0
- package/dist/cjs/useLocation.cjs +10 -0
- package/dist/cjs/useLocation.cjs.map +1 -0
- package/dist/cjs/useLocation.d.cts +7 -0
- package/dist/cjs/useMatch.cjs +47 -0
- package/dist/cjs/useMatch.cjs.map +1 -0
- package/dist/cjs/useMatch.d.cts +10 -0
- package/dist/cjs/useNavigate.cjs +18 -19
- package/dist/cjs/useNavigate.cjs.map +1 -1
- package/dist/cjs/useNavigate.d.cts +4 -8
- package/dist/cjs/useParams.cjs +8 -8
- package/dist/cjs/useParams.cjs.map +1 -1
- package/dist/cjs/useParams.d.cts +9 -8
- package/dist/cjs/useRouteContext.cjs +3 -3
- package/dist/cjs/useRouteContext.cjs.map +1 -1
- package/dist/cjs/useRouteContext.d.cts +3 -7
- package/dist/cjs/useRouter.cjs.map +1 -1
- package/dist/cjs/useRouter.d.cts +3 -4
- package/dist/cjs/useRouterState.cjs +18 -1
- package/dist/cjs/useRouterState.cjs.map +1 -1
- package/dist/cjs/useRouterState.d.cts +8 -6
- package/dist/cjs/useSearch.cjs +7 -4
- package/dist/cjs/useSearch.cjs.map +1 -1
- package/dist/cjs/useSearch.d.cts +9 -7
- package/dist/cjs/utils.cjs +40 -122
- package/dist/cjs/utils.cjs.map +1 -1
- package/dist/cjs/utils.d.cts +46 -50
- package/dist/esm/Asset.d.ts +2 -0
- package/dist/esm/Asset.js +41 -0
- package/dist/esm/Asset.js.map +1 -0
- package/dist/esm/CatchBoundary.d.ts +8 -32
- package/dist/esm/CatchBoundary.js +16 -12
- package/dist/esm/CatchBoundary.js.map +1 -1
- package/dist/esm/ClientOnly.d.ts +29 -0
- package/dist/esm/ClientOnly.js +20 -0
- package/dist/esm/ClientOnly.js.map +1 -0
- package/dist/esm/HeadContent.d.ts +7 -0
- package/dist/esm/HeadContent.js +139 -0
- package/dist/esm/HeadContent.js.map +1 -0
- package/dist/esm/Match.d.ts +8 -0
- package/dist/esm/Match.js +235 -0
- package/dist/esm/Match.js.map +1 -0
- package/dist/esm/Matches.d.ts +23 -83
- package/dist/esm/Matches.js +36 -284
- package/dist/esm/Matches.js.map +1 -1
- package/dist/esm/RouterProvider.d.ts +8 -27
- package/dist/esm/RouterProvider.js +20 -126
- package/dist/esm/RouterProvider.js.map +1 -1
- package/dist/esm/SafeFragment.d.ts +1 -0
- package/dist/esm/SafeFragment.js +8 -0
- package/dist/esm/SafeFragment.js.map +1 -0
- package/dist/esm/ScriptOnce.d.ts +5 -0
- package/dist/esm/ScriptOnce.js +28 -0
- package/dist/esm/ScriptOnce.js.map +1 -0
- package/dist/esm/Scripts.d.ts +1 -0
- package/dist/esm/Scripts.js +51 -0
- package/dist/esm/Scripts.js.map +1 -0
- package/dist/esm/ScrollRestoration.d.ts +14 -0
- package/dist/esm/ScrollRestoration.js +39 -0
- package/dist/esm/ScrollRestoration.js.map +1 -0
- package/dist/esm/Transitioner.d.ts +1 -0
- package/dist/esm/Transitioner.js +98 -0
- package/dist/esm/Transitioner.js.map +1 -0
- package/dist/esm/awaited.d.ts +4 -4
- package/dist/esm/awaited.js +12 -65
- package/dist/esm/awaited.js.map +1 -1
- package/dist/esm/fileRoute.d.ts +33 -108
- package/dist/esm/fileRoute.js +38 -12
- package/dist/esm/fileRoute.js.map +1 -1
- package/dist/esm/history.d.ts +1 -0
- package/dist/esm/index.d.ts +52 -29
- package/dist/esm/index.js +41 -29
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/lazyRouteComponent.d.ts +1 -1
- package/dist/esm/lazyRouteComponent.js +40 -29
- package/dist/esm/lazyRouteComponent.js.map +1 -1
- package/dist/esm/link.d.ts +41 -86
- package/dist/esm/link.js +212 -106
- package/dist/esm/link.js.map +1 -1
- package/dist/esm/matchContext.d.ts +3 -0
- package/dist/esm/matchContext.js +10 -0
- package/dist/esm/matchContext.js.map +1 -0
- package/dist/esm/not-found.d.ts +5 -22
- package/dist/esm/not-found.js +9 -15
- package/dist/esm/not-found.js.map +1 -1
- package/dist/esm/renderRouteNotFound.d.ts +2 -0
- package/dist/esm/renderRouteNotFound.js +22 -0
- package/dist/esm/renderRouteNotFound.js.map +1 -0
- package/dist/esm/route.d.ts +64 -361
- package/dist/esm/route.js +103 -72
- package/dist/esm/route.js.map +1 -1
- package/dist/esm/router.d.ts +69 -237
- package/dist/esm/router.js +13 -1238
- package/dist/esm/router.js.map +1 -1
- package/dist/esm/routerContext.d.ts +7 -2
- package/dist/esm/routerContext.js +1 -1
- package/dist/esm/routerContext.js.map +1 -1
- package/dist/esm/scroll-restoration.d.ts +1 -18
- package/dist/esm/scroll-restoration.js +17 -161
- package/dist/esm/scroll-restoration.js.map +1 -1
- package/dist/esm/serializer.d.ts +6 -0
- package/dist/esm/structuralSharing.d.ts +8 -0
- package/dist/esm/typePrimitives.d.ts +16 -0
- package/dist/esm/useBlocker.d.ts +64 -7
- package/dist/esm/useBlocker.js +138 -9
- package/dist/esm/useBlocker.js.map +1 -1
- package/dist/esm/useCanGoBack.d.ts +1 -0
- package/dist/esm/useCanGoBack.js +8 -0
- package/dist/esm/useCanGoBack.js.map +1 -0
- package/dist/esm/useLoaderData.d.ts +8 -0
- package/dist/esm/useLoaderData.js +15 -0
- package/dist/esm/useLoaderData.js.map +1 -0
- package/dist/esm/useLoaderDeps.d.ts +8 -0
- package/dist/esm/useLoaderDeps.js +14 -0
- package/dist/esm/useLoaderDeps.js.map +1 -0
- package/dist/esm/useLocation.d.ts +7 -0
- package/dist/esm/useLocation.js +10 -0
- package/dist/esm/useLocation.js.map +1 -0
- package/dist/esm/useMatch.d.ts +10 -0
- package/dist/esm/useMatch.js +30 -0
- package/dist/esm/useMatch.js.map +1 -0
- package/dist/esm/useNavigate.d.ts +4 -8
- package/dist/esm/useNavigate.js +18 -19
- package/dist/esm/useNavigate.js.map +1 -1
- package/dist/esm/useParams.d.ts +9 -8
- package/dist/esm/useParams.js +8 -8
- package/dist/esm/useParams.js.map +1 -1
- package/dist/esm/useRouteContext.d.ts +3 -7
- package/dist/esm/useRouteContext.js +2 -2
- package/dist/esm/useRouteContext.js.map +1 -1
- package/dist/esm/useRouter.d.ts +3 -4
- package/dist/esm/useRouter.js.map +1 -1
- package/dist/esm/useRouterState.d.ts +8 -6
- package/dist/esm/useRouterState.js +18 -1
- package/dist/esm/useRouterState.js.map +1 -1
- package/dist/esm/useSearch.d.ts +9 -7
- package/dist/esm/useSearch.js +6 -3
- package/dist/esm/useSearch.js.map +1 -1
- package/dist/esm/utils.d.ts +46 -50
- package/dist/esm/utils.js +41 -123
- package/dist/esm/utils.js.map +1 -1
- package/package.json +30 -31
- package/src/Asset.tsx +40 -0
- package/src/CatchBoundary.tsx +35 -19
- package/src/ClientOnly.tsx +68 -0
- package/src/HeadContent.tsx +174 -0
- package/src/Match.tsx +330 -0
- package/src/Matches.tsx +149 -558
- package/src/RouterProvider.tsx +58 -212
- package/src/SafeFragment.tsx +5 -0
- package/src/ScriptOnce.tsx +32 -0
- package/src/Scripts.tsx +65 -0
- package/src/ScrollRestoration.tsx +69 -0
- package/src/Transitioner.tsx +130 -0
- package/src/awaited.tsx +16 -87
- package/src/fileRoute.ts +145 -248
- package/src/history.ts +2 -1
- package/src/index.tsx +368 -30
- package/src/lazyRouteComponent.tsx +68 -54
- package/src/link.tsx +397 -522
- package/src/matchContext.tsx +8 -0
- package/src/not-found.tsx +13 -34
- package/src/renderRouteNotFound.tsx +27 -0
- package/src/route.tsx +572 -0
- package/src/router.ts +99 -2067
- package/src/routerContext.tsx +8 -2
- package/src/scroll-restoration.tsx +23 -224
- package/src/serializer.ts +7 -0
- package/src/structuralSharing.ts +47 -0
- package/src/typePrimitives.ts +84 -0
- package/src/useBlocker.tsx +297 -15
- package/src/useCanGoBack.ts +5 -0
- package/src/useLoaderData.tsx +80 -0
- package/src/useLoaderDeps.tsx +58 -0
- package/src/useLocation.tsx +41 -0
- package/src/useMatch.tsx +119 -0
- package/src/useNavigate.tsx +41 -61
- package/src/useParams.tsx +88 -23
- package/src/useRouteContext.ts +24 -18
- package/src/useRouter.tsx +4 -5
- package/src/useRouterState.tsx +52 -10
- package/src/useSearch.tsx +87 -24
- package/src/utils.ts +97 -312
- package/dist/cjs/createServerFn.cjs +0 -40
- package/dist/cjs/createServerFn.cjs.map +0 -1
- package/dist/cjs/createServerFn.d.cts +0 -44
- package/dist/cjs/defer.cjs +0 -30
- package/dist/cjs/defer.cjs.map +0 -1
- package/dist/cjs/defer.d.cts +0 -25
- package/dist/cjs/location.d.cts +0 -12
- package/dist/cjs/path.cjs +0 -213
- package/dist/cjs/path.cjs.map +0 -1
- package/dist/cjs/path.d.cts +0 -24
- package/dist/cjs/qss.cjs +0 -45
- package/dist/cjs/qss.cjs.map +0 -1
- package/dist/cjs/qss.d.cts +0 -2
- package/dist/cjs/redirects.cjs +0 -16
- package/dist/cjs/redirects.cjs.map +0 -1
- package/dist/cjs/redirects.d.cts +0 -18
- package/dist/cjs/routeInfo.d.cts +0 -31
- package/dist/cjs/searchParams.cjs +0 -63
- package/dist/cjs/searchParams.cjs.map +0 -1
- package/dist/cjs/searchParams.d.cts +0 -7
- package/dist/esm/createServerFn.d.ts +0 -44
- package/dist/esm/createServerFn.js +0 -40
- package/dist/esm/createServerFn.js.map +0 -1
- package/dist/esm/defer.d.ts +0 -25
- package/dist/esm/defer.js +0 -30
- package/dist/esm/defer.js.map +0 -1
- package/dist/esm/location.d.ts +0 -12
- package/dist/esm/path.d.ts +0 -24
- package/dist/esm/path.js +0 -213
- package/dist/esm/path.js.map +0 -1
- package/dist/esm/qss.d.ts +0 -2
- package/dist/esm/qss.js +0 -45
- package/dist/esm/qss.js.map +0 -1
- package/dist/esm/redirects.d.ts +0 -18
- package/dist/esm/redirects.js +0 -16
- package/dist/esm/redirects.js.map +0 -1
- package/dist/esm/routeInfo.d.ts +0 -31
- package/dist/esm/searchParams.d.ts +0 -7
- package/dist/esm/searchParams.js +0 -63
- package/dist/esm/searchParams.js.map +0 -1
- package/src/createServerFn.ts +0 -107
- package/src/defer.ts +0 -70
- package/src/location.ts +0 -13
- package/src/path.ts +0 -280
- package/src/qss.ts +0 -53
- package/src/redirects.ts +0 -56
- package/src/route.ts +0 -1356
- package/src/routeInfo.ts +0 -63
- package/src/searchParams.ts +0 -79
package/src/useNavigate.tsx
CHANGED
|
@@ -1,75 +1,55 @@
|
|
|
1
1
|
import * as React from 'react'
|
|
2
|
-
import { useMatch } from './Matches'
|
|
3
2
|
import { useRouter } from './useRouter'
|
|
4
|
-
import {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
TRouteTree extends AnyRoute = RegisteredRouter['routeTree'],
|
|
12
|
-
TFrom extends RoutePaths<TRouteTree> | string = TDefaultFrom,
|
|
13
|
-
TMaskFrom extends RoutePaths<TRouteTree> | string = TFrom,
|
|
14
|
-
TMaskTo extends string = '',
|
|
15
|
-
>({
|
|
16
|
-
from,
|
|
17
|
-
...rest
|
|
18
|
-
}: NavigateOptions<TRouteTree, TFrom, TTo, TMaskFrom, TMaskTo>) => Promise<void>
|
|
3
|
+
import type {
|
|
4
|
+
AnyRouter,
|
|
5
|
+
FromPathOption,
|
|
6
|
+
NavigateOptions,
|
|
7
|
+
RegisteredRouter,
|
|
8
|
+
UseNavigateResult,
|
|
9
|
+
} from '@tanstack/router-core'
|
|
19
10
|
|
|
20
11
|
export function useNavigate<
|
|
12
|
+
TRouter extends AnyRouter = RegisteredRouter,
|
|
21
13
|
TDefaultFrom extends string = string,
|
|
22
14
|
>(_defaultOpts?: {
|
|
23
|
-
from?:
|
|
24
|
-
}) {
|
|
15
|
+
from?: FromPathOption<TRouter, TDefaultFrom>
|
|
16
|
+
}): UseNavigateResult<TDefaultFrom> {
|
|
25
17
|
const { navigate } = useRouter()
|
|
26
18
|
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
})
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
return React.useCallback(result, [])
|
|
19
|
+
return React.useCallback(
|
|
20
|
+
(options: NavigateOptions) => {
|
|
21
|
+
return navigate({
|
|
22
|
+
from: _defaultOpts?.from,
|
|
23
|
+
...options,
|
|
24
|
+
})
|
|
25
|
+
},
|
|
26
|
+
[_defaultOpts?.from, navigate],
|
|
27
|
+
) as UseNavigateResult<TDefaultFrom>
|
|
40
28
|
}
|
|
41
29
|
|
|
42
|
-
// NOTE: I don't know of anyone using this. It's undocumented, so let's wait until someone needs it
|
|
43
|
-
// export function typedNavigate<
|
|
44
|
-
// TRouteTree extends AnyRoute = RegisteredRouter['routeTree'],
|
|
45
|
-
// TDefaultFrom extends RoutePaths<TRouteTree> = '/',
|
|
46
|
-
// >(navigate: (opts: NavigateOptions<any>) => Promise<void>) {
|
|
47
|
-
// return navigate as <
|
|
48
|
-
// TFrom extends RoutePaths<TRouteTree> = TDefaultFrom,
|
|
49
|
-
// TTo extends string = '',
|
|
50
|
-
// TMaskFrom extends RoutePaths<TRouteTree> = '/',
|
|
51
|
-
// TMaskTo extends string = '',
|
|
52
|
-
// >(
|
|
53
|
-
// opts?: NavigateOptions<TRouteTree, TFrom, TTo, TMaskFrom, TMaskTo>,
|
|
54
|
-
// ) => Promise<void>
|
|
55
|
-
// } //
|
|
56
|
-
|
|
57
30
|
export function Navigate<
|
|
58
|
-
|
|
59
|
-
TFrom extends
|
|
60
|
-
TTo extends string =
|
|
61
|
-
TMaskFrom extends
|
|
62
|
-
TMaskTo extends string = '',
|
|
63
|
-
>(props: NavigateOptions<
|
|
64
|
-
const
|
|
65
|
-
|
|
66
|
-
|
|
31
|
+
TRouter extends AnyRouter = RegisteredRouter,
|
|
32
|
+
const TFrom extends string = string,
|
|
33
|
+
const TTo extends string | undefined = undefined,
|
|
34
|
+
const TMaskFrom extends string = TFrom,
|
|
35
|
+
const TMaskTo extends string = '',
|
|
36
|
+
>(props: NavigateOptions<TRouter, TFrom, TTo, TMaskFrom, TMaskTo>): null {
|
|
37
|
+
const router = useRouter()
|
|
38
|
+
|
|
39
|
+
const previousPropsRef = React.useRef<NavigateOptions<
|
|
40
|
+
TRouter,
|
|
41
|
+
TFrom,
|
|
42
|
+
TTo,
|
|
43
|
+
TMaskFrom,
|
|
44
|
+
TMaskTo
|
|
45
|
+
> | null>(null)
|
|
67
46
|
React.useEffect(() => {
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
47
|
+
if (previousPropsRef.current !== props) {
|
|
48
|
+
router.navigate({
|
|
49
|
+
...props,
|
|
50
|
+
})
|
|
51
|
+
previousPropsRef.current = props
|
|
52
|
+
}
|
|
53
|
+
}, [router, props])
|
|
74
54
|
return null
|
|
75
55
|
}
|
package/src/useParams.tsx
CHANGED
|
@@ -1,28 +1,93 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
import {
|
|
7
|
-
|
|
1
|
+
import { useMatch } from './useMatch'
|
|
2
|
+
import type {
|
|
3
|
+
StructuralSharingOption,
|
|
4
|
+
ValidateSelected,
|
|
5
|
+
} from './structuralSharing'
|
|
6
|
+
import type {
|
|
7
|
+
AnyRouter,
|
|
8
|
+
RegisteredRouter,
|
|
9
|
+
ResolveUseParams,
|
|
10
|
+
StrictOrFrom,
|
|
11
|
+
ThrowConstraint,
|
|
12
|
+
ThrowOrOptional,
|
|
13
|
+
UseParamsResult,
|
|
14
|
+
} from '@tanstack/router-core'
|
|
15
|
+
|
|
16
|
+
export interface UseParamsBaseOptions<
|
|
17
|
+
TRouter extends AnyRouter,
|
|
18
|
+
TFrom,
|
|
19
|
+
TStrict extends boolean,
|
|
20
|
+
TThrow extends boolean,
|
|
21
|
+
TSelected,
|
|
22
|
+
TStructuralSharing,
|
|
23
|
+
> {
|
|
24
|
+
select?: (
|
|
25
|
+
params: ResolveUseParams<TRouter, TFrom, TStrict>,
|
|
26
|
+
) => ValidateSelected<TRouter, TSelected, TStructuralSharing>
|
|
27
|
+
shouldThrow?: TThrow
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export type UseParamsOptions<
|
|
31
|
+
TRouter extends AnyRouter,
|
|
32
|
+
TFrom extends string | undefined,
|
|
33
|
+
TStrict extends boolean,
|
|
34
|
+
TThrow extends boolean,
|
|
35
|
+
TSelected,
|
|
36
|
+
TStructuralSharing,
|
|
37
|
+
> = StrictOrFrom<TRouter, TFrom, TStrict> &
|
|
38
|
+
UseParamsBaseOptions<
|
|
39
|
+
TRouter,
|
|
40
|
+
TFrom,
|
|
41
|
+
TStrict,
|
|
42
|
+
TThrow,
|
|
43
|
+
TSelected,
|
|
44
|
+
TStructuralSharing
|
|
45
|
+
> &
|
|
46
|
+
StructuralSharingOption<TRouter, TSelected, TStructuralSharing>
|
|
47
|
+
|
|
48
|
+
export type UseParamsRoute<out TFrom> = <
|
|
49
|
+
TRouter extends AnyRouter = RegisteredRouter,
|
|
50
|
+
TSelected = unknown,
|
|
51
|
+
TStructuralSharing extends boolean = boolean,
|
|
52
|
+
>(
|
|
53
|
+
opts?: UseParamsBaseOptions<
|
|
54
|
+
TRouter,
|
|
55
|
+
TFrom,
|
|
56
|
+
/* TStrict */ true,
|
|
57
|
+
/* TThrow */ true,
|
|
58
|
+
TSelected,
|
|
59
|
+
TStructuralSharing
|
|
60
|
+
> &
|
|
61
|
+
StructuralSharingOption<TRouter, TSelected, TStructuralSharing>,
|
|
62
|
+
) => UseParamsResult<TRouter, TFrom, true, TSelected>
|
|
8
63
|
|
|
9
64
|
export function useParams<
|
|
10
|
-
|
|
11
|
-
TFrom extends
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
TSelected = TParams,
|
|
65
|
+
TRouter extends AnyRouter = RegisteredRouter,
|
|
66
|
+
const TFrom extends string | undefined = undefined,
|
|
67
|
+
TStrict extends boolean = true,
|
|
68
|
+
TThrow extends boolean = true,
|
|
69
|
+
TSelected = unknown,
|
|
70
|
+
TStructuralSharing extends boolean = boolean,
|
|
17
71
|
>(
|
|
18
|
-
opts:
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
72
|
+
opts: UseParamsOptions<
|
|
73
|
+
TRouter,
|
|
74
|
+
TFrom,
|
|
75
|
+
TStrict,
|
|
76
|
+
ThrowConstraint<TStrict, TThrow>,
|
|
77
|
+
TSelected,
|
|
78
|
+
TStructuralSharing
|
|
79
|
+
>,
|
|
80
|
+
): ThrowOrOptional<
|
|
81
|
+
UseParamsResult<TRouter, TFrom, TStrict, TSelected>,
|
|
82
|
+
TThrow
|
|
83
|
+
> {
|
|
84
|
+
return useMatch({
|
|
85
|
+
from: opts.from!,
|
|
86
|
+
strict: opts.strict,
|
|
87
|
+
shouldThrow: opts.shouldThrow,
|
|
88
|
+
structuralSharing: opts.structuralSharing,
|
|
89
|
+
select: (match: any) => {
|
|
90
|
+
return opts.select ? opts.select(match.params) : match.params
|
|
26
91
|
},
|
|
27
|
-
})
|
|
92
|
+
}) as any
|
|
28
93
|
}
|
package/src/useRouteContext.ts
CHANGED
|
@@ -1,24 +1,30 @@
|
|
|
1
|
-
import { useMatch
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
import { useMatch } from './useMatch'
|
|
2
|
+
import type {
|
|
3
|
+
AnyRouter,
|
|
4
|
+
RegisteredRouter,
|
|
5
|
+
UseRouteContextBaseOptions,
|
|
6
|
+
UseRouteContextOptions,
|
|
7
|
+
UseRouteContextResult,
|
|
8
|
+
} from '@tanstack/router-core'
|
|
9
|
+
|
|
10
|
+
export type UseRouteContextRoute<out TFrom> = <
|
|
11
|
+
TRouter extends AnyRouter = RegisteredRouter,
|
|
12
|
+
TSelected = unknown,
|
|
13
|
+
>(
|
|
14
|
+
opts?: UseRouteContextBaseOptions<TRouter, TFrom, true, TSelected>,
|
|
15
|
+
) => UseRouteContextResult<TRouter, TFrom, true, TSelected>
|
|
6
16
|
|
|
7
17
|
export function useRouteContext<
|
|
8
|
-
|
|
9
|
-
TFrom extends
|
|
10
|
-
|
|
11
|
-
TSelected =
|
|
18
|
+
TRouter extends AnyRouter = RegisteredRouter,
|
|
19
|
+
const TFrom extends string | undefined = undefined,
|
|
20
|
+
TStrict extends boolean = true,
|
|
21
|
+
TSelected = unknown,
|
|
12
22
|
>(
|
|
13
|
-
opts:
|
|
14
|
-
|
|
15
|
-
},
|
|
16
|
-
): TSelected {
|
|
23
|
+
opts: UseRouteContextOptions<TRouter, TFrom, TStrict, TSelected>,
|
|
24
|
+
): UseRouteContextResult<TRouter, TFrom, TStrict, TSelected> {
|
|
17
25
|
return useMatch({
|
|
18
26
|
...(opts as any),
|
|
19
|
-
select: (match
|
|
20
|
-
opts
|
|
21
|
-
|
|
22
|
-
: match.context,
|
|
23
|
-
})
|
|
27
|
+
select: (match) =>
|
|
28
|
+
opts.select ? opts.select(match.context) : match.context,
|
|
29
|
+
}) as UseRouteContextResult<TRouter, TFrom, TStrict, TSelected>
|
|
24
30
|
}
|
package/src/useRouter.tsx
CHANGED
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
import * as React from 'react'
|
|
2
2
|
import warning from 'tiny-warning'
|
|
3
|
-
import { AnyRoute } from './route'
|
|
4
|
-
import { RegisteredRouter, Router } from './router'
|
|
5
3
|
import { getRouterContext } from './routerContext'
|
|
4
|
+
import type { AnyRouter, RegisteredRouter } from '@tanstack/router-core'
|
|
6
5
|
|
|
7
|
-
export function useRouter<
|
|
8
|
-
|
|
9
|
-
|
|
6
|
+
export function useRouter<TRouter extends AnyRouter = RegisteredRouter>(opts?: {
|
|
7
|
+
warn?: boolean
|
|
8
|
+
}): TRouter {
|
|
10
9
|
const value = React.useContext(getRouterContext())
|
|
11
10
|
warning(
|
|
12
11
|
!((opts?.warn ?? true) && !value),
|
package/src/useRouterState.tsx
CHANGED
|
@@ -1,17 +1,59 @@
|
|
|
1
1
|
import { useStore } from '@tanstack/react-store'
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
2
|
+
import { useRef } from 'react'
|
|
3
|
+
import { replaceEqualDeep } from '@tanstack/router-core'
|
|
4
4
|
import { useRouter } from './useRouter'
|
|
5
|
+
import type {
|
|
6
|
+
AnyRouter,
|
|
7
|
+
RegisteredRouter,
|
|
8
|
+
RouterState,
|
|
9
|
+
} from '@tanstack/router-core'
|
|
10
|
+
import type {
|
|
11
|
+
StructuralSharingOption,
|
|
12
|
+
ValidateSelected,
|
|
13
|
+
} from './structuralSharing'
|
|
14
|
+
|
|
15
|
+
export type UseRouterStateOptions<
|
|
16
|
+
TRouter extends AnyRouter,
|
|
17
|
+
TSelected,
|
|
18
|
+
TStructuralSharing,
|
|
19
|
+
> = {
|
|
20
|
+
router?: TRouter
|
|
21
|
+
select?: (
|
|
22
|
+
state: RouterState<TRouter['routeTree']>,
|
|
23
|
+
) => ValidateSelected<TRouter, TSelected, TStructuralSharing>
|
|
24
|
+
} & StructuralSharingOption<TRouter, TSelected, TStructuralSharing>
|
|
25
|
+
|
|
26
|
+
export type UseRouterStateResult<
|
|
27
|
+
TRouter extends AnyRouter,
|
|
28
|
+
TSelected,
|
|
29
|
+
> = unknown extends TSelected ? RouterState<TRouter['routeTree']> : TSelected
|
|
5
30
|
|
|
6
31
|
export function useRouterState<
|
|
7
|
-
|
|
8
|
-
TSelected =
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
const contextRouter = useRouter<
|
|
32
|
+
TRouter extends AnyRouter = RegisteredRouter,
|
|
33
|
+
TSelected = unknown,
|
|
34
|
+
TStructuralSharing extends boolean = boolean,
|
|
35
|
+
>(
|
|
36
|
+
opts?: UseRouterStateOptions<TRouter, TSelected, TStructuralSharing>,
|
|
37
|
+
): UseRouterStateResult<TRouter, TSelected> {
|
|
38
|
+
const contextRouter = useRouter<TRouter>({
|
|
14
39
|
warn: opts?.router === undefined,
|
|
15
40
|
})
|
|
16
|
-
|
|
41
|
+
const router = opts?.router || contextRouter
|
|
42
|
+
const previousResult =
|
|
43
|
+
useRef<ValidateSelected<TRouter, TSelected, TStructuralSharing>>(undefined)
|
|
44
|
+
|
|
45
|
+
return useStore(router.__store, (state) => {
|
|
46
|
+
if (opts?.select) {
|
|
47
|
+
if (opts.structuralSharing ?? router.options.defaultStructuralSharing) {
|
|
48
|
+
const newSlice = replaceEqualDeep(
|
|
49
|
+
previousResult.current,
|
|
50
|
+
opts.select(state),
|
|
51
|
+
)
|
|
52
|
+
previousResult.current = newSlice
|
|
53
|
+
return newSlice
|
|
54
|
+
}
|
|
55
|
+
return opts.select(state)
|
|
56
|
+
}
|
|
57
|
+
return state
|
|
58
|
+
}) as UseRouterStateResult<TRouter, TSelected>
|
|
17
59
|
}
|
package/src/useSearch.tsx
CHANGED
|
@@ -1,30 +1,93 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
import {
|
|
1
|
+
import { useMatch } from './useMatch'
|
|
2
|
+
import type {
|
|
3
|
+
StructuralSharingOption,
|
|
4
|
+
ValidateSelected,
|
|
5
|
+
} from './structuralSharing'
|
|
6
|
+
import type {
|
|
7
|
+
AnyRouter,
|
|
8
|
+
RegisteredRouter,
|
|
9
|
+
ResolveUseSearch,
|
|
10
|
+
StrictOrFrom,
|
|
11
|
+
ThrowConstraint,
|
|
12
|
+
ThrowOrOptional,
|
|
13
|
+
UseSearchResult,
|
|
14
|
+
} from '@tanstack/router-core'
|
|
15
|
+
|
|
16
|
+
export interface UseSearchBaseOptions<
|
|
17
|
+
TRouter extends AnyRouter,
|
|
18
|
+
TFrom,
|
|
19
|
+
TStrict extends boolean,
|
|
20
|
+
TThrow extends boolean,
|
|
21
|
+
TSelected,
|
|
22
|
+
TStructuralSharing,
|
|
23
|
+
> {
|
|
24
|
+
select?: (
|
|
25
|
+
state: ResolveUseSearch<TRouter, TFrom, TStrict>,
|
|
26
|
+
) => ValidateSelected<TRouter, TSelected, TStructuralSharing>
|
|
27
|
+
shouldThrow?: TThrow
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export type UseSearchOptions<
|
|
31
|
+
TRouter extends AnyRouter,
|
|
32
|
+
TFrom,
|
|
33
|
+
TStrict extends boolean,
|
|
34
|
+
TThrow extends boolean,
|
|
35
|
+
TSelected,
|
|
36
|
+
TStructuralSharing,
|
|
37
|
+
> = StrictOrFrom<TRouter, TFrom, TStrict> &
|
|
38
|
+
UseSearchBaseOptions<
|
|
39
|
+
TRouter,
|
|
40
|
+
TFrom,
|
|
41
|
+
TStrict,
|
|
42
|
+
TThrow,
|
|
43
|
+
TSelected,
|
|
44
|
+
TStructuralSharing
|
|
45
|
+
> &
|
|
46
|
+
StructuralSharingOption<TRouter, TSelected, TStructuralSharing>
|
|
47
|
+
|
|
48
|
+
export type UseSearchRoute<out TFrom> = <
|
|
49
|
+
TRouter extends AnyRouter = RegisteredRouter,
|
|
50
|
+
TSelected = unknown,
|
|
51
|
+
TStructuralSharing extends boolean = boolean,
|
|
52
|
+
>(
|
|
53
|
+
opts?: UseSearchBaseOptions<
|
|
54
|
+
TRouter,
|
|
55
|
+
TFrom,
|
|
56
|
+
/* TStrict */ true,
|
|
57
|
+
/* TThrow */ true,
|
|
58
|
+
TSelected,
|
|
59
|
+
TStructuralSharing
|
|
60
|
+
> &
|
|
61
|
+
StructuralSharingOption<TRouter, TSelected, TStructuralSharing>,
|
|
62
|
+
) => UseSearchResult<TRouter, TFrom, true, TSelected>
|
|
7
63
|
|
|
8
64
|
export function useSearch<
|
|
9
|
-
|
|
10
|
-
TFrom extends
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
RootSearchSchema
|
|
16
|
-
>
|
|
17
|
-
: Partial<Omit<FullSearchSchema<TRouteTree>, keyof RootSearchSchema>>,
|
|
18
|
-
TSelected = TSearch,
|
|
65
|
+
TRouter extends AnyRouter = RegisteredRouter,
|
|
66
|
+
const TFrom extends string | undefined = undefined,
|
|
67
|
+
TStrict extends boolean = true,
|
|
68
|
+
TThrow extends boolean = true,
|
|
69
|
+
TSelected = unknown,
|
|
70
|
+
TStructuralSharing extends boolean = boolean,
|
|
19
71
|
>(
|
|
20
|
-
opts:
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
72
|
+
opts: UseSearchOptions<
|
|
73
|
+
TRouter,
|
|
74
|
+
TFrom,
|
|
75
|
+
TStrict,
|
|
76
|
+
ThrowConstraint<TStrict, TThrow>,
|
|
77
|
+
TSelected,
|
|
78
|
+
TStructuralSharing
|
|
79
|
+
>,
|
|
80
|
+
): ThrowOrOptional<
|
|
81
|
+
UseSearchResult<TRouter, TFrom, TStrict, TSelected>,
|
|
82
|
+
TThrow
|
|
83
|
+
> {
|
|
24
84
|
return useMatch({
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
85
|
+
from: opts.from!,
|
|
86
|
+
strict: opts.strict,
|
|
87
|
+
shouldThrow: opts.shouldThrow,
|
|
88
|
+
structuralSharing: opts.structuralSharing,
|
|
89
|
+
select: (match: any) => {
|
|
90
|
+
return opts.select ? opts.select(match.search) : match.search
|
|
28
91
|
},
|
|
29
|
-
})
|
|
92
|
+
}) as any
|
|
30
93
|
}
|