@tanstack/solid-router 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/LICENSE +21 -0
- package/README.md +29 -0
- package/dist/cjs/Asset.cjs +49 -0
- package/dist/cjs/Asset.cjs.map +1 -0
- package/dist/cjs/Asset.d.cts +2 -0
- package/dist/cjs/CatchBoundary.cjs +92 -0
- package/dist/cjs/CatchBoundary.cjs.map +1 -0
- package/dist/cjs/CatchBoundary.d.cts +11 -0
- package/dist/cjs/ClientOnly.cjs +36 -0
- package/dist/cjs/ClientOnly.cjs.map +1 -0
- package/dist/cjs/ClientOnly.d.cts +49 -0
- package/dist/cjs/HeadContent.cjs +146 -0
- package/dist/cjs/HeadContent.cjs.map +1 -0
- package/dist/cjs/HeadContent.d.cts +8 -0
- package/dist/cjs/Match.cjs +339 -0
- package/dist/cjs/Match.cjs.map +1 -0
- package/dist/cjs/Match.d.cts +8 -0
- package/dist/cjs/Matches.cjs +151 -0
- package/dist/cjs/Matches.cjs.map +1 -0
- package/dist/cjs/Matches.d.cts +24 -0
- package/dist/cjs/RouterProvider.cjs +45 -0
- package/dist/cjs/RouterProvider.cjs.map +1 -0
- package/dist/cjs/RouterProvider.d.cts +10 -0
- 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 +23 -0
- package/dist/cjs/ScriptOnce.cjs.map +1 -0
- package/dist/cjs/ScriptOnce.d.cts +5 -0
- package/dist/cjs/Scripts.cjs +48 -0
- package/dist/cjs/Scripts.cjs.map +1 -0
- package/dist/cjs/Scripts.d.cts +1 -0
- package/dist/cjs/ScrollRestoration.cjs +37 -0
- package/dist/cjs/ScrollRestoration.cjs.map +1 -0
- package/dist/cjs/ScrollRestoration.d.cts +14 -0
- package/dist/cjs/Transitioner.cjs +124 -0
- package/dist/cjs/Transitioner.cjs.map +1 -0
- package/dist/cjs/Transitioner.d.cts +1 -0
- package/dist/cjs/awaited.cjs +49 -0
- package/dist/cjs/awaited.cjs.map +1 -0
- package/dist/cjs/awaited.d.cts +11 -0
- package/dist/cjs/fileRoute.cjs +103 -0
- package/dist/cjs/fileRoute.cjs.map +1 -0
- package/dist/cjs/fileRoute.d.cts +54 -0
- package/dist/cjs/history.d.cts +8 -0
- package/dist/cjs/index.cjs +289 -0
- package/dist/cjs/index.cjs.map +1 -0
- package/dist/cjs/index.d.cts +52 -0
- package/dist/cjs/lazyRouteComponent.cjs +73 -0
- package/dist/cjs/lazyRouteComponent.cjs.map +1 -0
- package/dist/cjs/lazyRouteComponent.d.cts +2 -0
- package/dist/cjs/link.cjs +278 -0
- package/dist/cjs/link.cjs.map +1 -0
- package/dist/cjs/link.d.cts +44 -0
- package/dist/cjs/matchContext.cjs +25 -0
- package/dist/cjs/matchContext.cjs.map +1 -0
- package/dist/cjs/matchContext.d.cts +3 -0
- package/dist/cjs/not-found.cjs +42 -0
- package/dist/cjs/not-found.cjs.map +1 -0
- package/dist/cjs/not-found.d.cts +8 -0
- package/dist/cjs/renderRouteNotFound.cjs +23 -0
- package/dist/cjs/renderRouteNotFound.cjs.map +1 -0
- package/dist/cjs/renderRouteNotFound.d.cts +2 -0
- package/dist/cjs/route.cjs +236 -0
- package/dist/cjs/route.cjs.map +1 -0
- package/dist/cjs/route.d.cts +95 -0
- package/dist/cjs/router.cjs +22 -0
- package/dist/cjs/router.cjs.map +1 -0
- package/dist/cjs/router.d.cts +69 -0
- package/dist/cjs/routerContext.cjs +33 -0
- package/dist/cjs/routerContext.cjs.map +1 -0
- package/dist/cjs/routerContext.d.cts +8 -0
- package/dist/cjs/scroll-restoration.cjs +23 -0
- package/dist/cjs/scroll-restoration.cjs.map +1 -0
- package/dist/cjs/scroll-restoration.d.cts +1 -0
- package/dist/cjs/typePrimitives.d.cts +10 -0
- package/dist/cjs/useBlocker.cjs +165 -0
- package/dist/cjs/useBlocker.cjs.map +1 -0
- package/dist/cjs/useBlocker.d.cts +67 -0
- 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 +14 -0
- package/dist/cjs/useLoaderData.cjs.map +1 -0
- package/dist/cjs/useLoaderData.d.cts +8 -0
- package/dist/cjs/useLoaderDeps.cjs +17 -0
- package/dist/cjs/useLoaderDeps.cjs.map +1 -0
- package/dist/cjs/useLoaderDeps.d.cts +7 -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 +39 -0
- package/dist/cjs/useMatch.cjs.map +1 -0
- package/dist/cjs/useMatch.d.cts +10 -0
- package/dist/cjs/useNavigate.cjs +46 -0
- package/dist/cjs/useNavigate.cjs.map +1 -0
- package/dist/cjs/useNavigate.d.cts +5 -0
- package/dist/cjs/useParams.cjs +15 -0
- package/dist/cjs/useParams.cjs.map +1 -0
- package/dist/cjs/useParams.d.cts +9 -0
- package/dist/cjs/useRouteContext.cjs +11 -0
- package/dist/cjs/useRouteContext.cjs.map +1 -0
- package/dist/cjs/useRouteContext.d.cts +4 -0
- package/dist/cjs/useRouter.cjs +29 -0
- package/dist/cjs/useRouter.cjs.map +1 -0
- package/dist/cjs/useRouter.d.cts +4 -0
- package/dist/cjs/useRouterState.cjs +16 -0
- package/dist/cjs/useRouterState.cjs.map +1 -0
- package/dist/cjs/useRouterState.d.cts +8 -0
- package/dist/cjs/useSearch.cjs +15 -0
- package/dist/cjs/useSearch.cjs.map +1 -0
- package/dist/cjs/useSearch.d.cts +9 -0
- package/dist/cjs/utils.cjs +58 -0
- package/dist/cjs/utils.cjs.map +1 -0
- package/dist/cjs/utils.d.cts +34 -0
- package/dist/esm/Asset.d.ts +2 -0
- package/dist/esm/Asset.js +49 -0
- package/dist/esm/Asset.js.map +1 -0
- package/dist/esm/CatchBoundary.d.ts +11 -0
- package/dist/esm/CatchBoundary.js +75 -0
- package/dist/esm/CatchBoundary.js.map +1 -0
- package/dist/esm/ClientOnly.d.ts +49 -0
- package/dist/esm/ClientOnly.js +19 -0
- package/dist/esm/ClientOnly.js.map +1 -0
- package/dist/esm/HeadContent.d.ts +8 -0
- package/dist/esm/HeadContent.js +129 -0
- package/dist/esm/HeadContent.js.map +1 -0
- package/dist/esm/Match.d.ts +8 -0
- package/dist/esm/Match.js +322 -0
- package/dist/esm/Match.js.map +1 -0
- package/dist/esm/Matches.d.ts +24 -0
- package/dist/esm/Matches.js +134 -0
- package/dist/esm/Matches.js.map +1 -0
- package/dist/esm/RouterProvider.d.ts +10 -0
- package/dist/esm/RouterProvider.js +45 -0
- package/dist/esm/RouterProvider.js.map +1 -0
- 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 +23 -0
- package/dist/esm/ScriptOnce.js.map +1 -0
- package/dist/esm/Scripts.d.ts +1 -0
- package/dist/esm/Scripts.js +48 -0
- package/dist/esm/Scripts.js.map +1 -0
- package/dist/esm/ScrollRestoration.d.ts +14 -0
- package/dist/esm/ScrollRestoration.js +37 -0
- package/dist/esm/ScrollRestoration.js.map +1 -0
- package/dist/esm/Transitioner.d.ts +1 -0
- package/dist/esm/Transitioner.js +107 -0
- package/dist/esm/Transitioner.js.map +1 -0
- package/dist/esm/awaited.d.ts +11 -0
- package/dist/esm/awaited.js +32 -0
- package/dist/esm/awaited.js.map +1 -0
- package/dist/esm/fileRoute.d.ts +54 -0
- package/dist/esm/fileRoute.js +103 -0
- package/dist/esm/fileRoute.js.map +1 -0
- package/dist/esm/history.d.ts +8 -0
- package/dist/esm/index.d.ts +52 -0
- package/dist/esm/index.js +151 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/lazyRouteComponent.d.ts +2 -0
- package/dist/esm/lazyRouteComponent.js +73 -0
- package/dist/esm/lazyRouteComponent.js.map +1 -0
- package/dist/esm/link.d.ts +44 -0
- package/dist/esm/link.js +261 -0
- package/dist/esm/link.js.map +1 -0
- package/dist/esm/matchContext.d.ts +3 -0
- package/dist/esm/matchContext.js +8 -0
- package/dist/esm/matchContext.js.map +1 -0
- package/dist/esm/not-found.d.ts +8 -0
- package/dist/esm/not-found.js +42 -0
- package/dist/esm/not-found.js.map +1 -0
- package/dist/esm/renderRouteNotFound.d.ts +2 -0
- package/dist/esm/renderRouteNotFound.js +23 -0
- package/dist/esm/renderRouteNotFound.js.map +1 -0
- package/dist/esm/route.d.ts +95 -0
- package/dist/esm/route.js +236 -0
- package/dist/esm/route.js.map +1 -0
- package/dist/esm/router.d.ts +69 -0
- package/dist/esm/router.js +22 -0
- package/dist/esm/router.js.map +1 -0
- package/dist/esm/routerContext.d.ts +8 -0
- package/dist/esm/routerContext.js +16 -0
- package/dist/esm/routerContext.js.map +1 -0
- package/dist/esm/scroll-restoration.d.ts +1 -0
- package/dist/esm/scroll-restoration.js +23 -0
- package/dist/esm/scroll-restoration.js.map +1 -0
- package/dist/esm/typePrimitives.d.ts +10 -0
- package/dist/esm/useBlocker.d.ts +67 -0
- package/dist/esm/useBlocker.js +148 -0
- package/dist/esm/useBlocker.js.map +1 -0
- 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 +14 -0
- package/dist/esm/useLoaderData.js.map +1 -0
- package/dist/esm/useLoaderDeps.d.ts +7 -0
- package/dist/esm/useLoaderDeps.js +17 -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 +22 -0
- package/dist/esm/useMatch.js.map +1 -0
- package/dist/esm/useNavigate.d.ts +5 -0
- package/dist/esm/useNavigate.js +29 -0
- package/dist/esm/useNavigate.js.map +1 -0
- package/dist/esm/useParams.d.ts +9 -0
- package/dist/esm/useParams.js +15 -0
- package/dist/esm/useParams.js.map +1 -0
- package/dist/esm/useRouteContext.d.ts +4 -0
- package/dist/esm/useRouteContext.js +11 -0
- package/dist/esm/useRouteContext.js.map +1 -0
- package/dist/esm/useRouter.d.ts +4 -0
- package/dist/esm/useRouter.js +12 -0
- package/dist/esm/useRouter.js.map +1 -0
- package/dist/esm/useRouterState.d.ts +8 -0
- package/dist/esm/useRouterState.js +16 -0
- package/dist/esm/useRouterState.js.map +1 -0
- package/dist/esm/useSearch.d.ts +9 -0
- package/dist/esm/useSearch.js +15 -0
- package/dist/esm/useSearch.js.map +1 -0
- package/dist/esm/utils.d.ts +34 -0
- package/dist/esm/utils.js +41 -0
- package/dist/esm/utils.js.map +1 -0
- package/dist/source/Asset.d.ts +2 -0
- package/dist/source/Asset.jsx +23 -0
- package/dist/source/Asset.jsx.map +1 -0
- package/dist/source/CatchBoundary.d.ts +11 -0
- package/dist/source/CatchBoundary.jsx +43 -0
- package/dist/source/CatchBoundary.jsx.map +1 -0
- package/dist/source/ClientOnly.d.ts +49 -0
- package/dist/source/ClientOnly.jsx +51 -0
- package/dist/source/ClientOnly.jsx.map +1 -0
- package/dist/source/HeadContent.d.ts +8 -0
- package/dist/source/HeadContent.jsx +143 -0
- package/dist/source/HeadContent.jsx.map +1 -0
- package/dist/source/Match.d.ts +8 -0
- package/dist/source/Match.jsx +255 -0
- package/dist/source/Match.jsx.map +1 -0
- package/dist/source/Matches.d.ts +24 -0
- package/dist/source/Matches.jsx +103 -0
- package/dist/source/Matches.jsx.map +1 -0
- package/dist/source/RouterProvider.d.ts +10 -0
- package/dist/source/RouterProvider.jsx +27 -0
- package/dist/source/RouterProvider.jsx.map +1 -0
- package/dist/source/SafeFragment.d.ts +1 -0
- package/dist/source/SafeFragment.jsx +4 -0
- package/dist/source/SafeFragment.jsx.map +1 -0
- package/dist/source/ScriptOnce.d.ts +5 -0
- package/dist/source/ScriptOnce.jsx +17 -0
- package/dist/source/ScriptOnce.jsx.map +1 -0
- package/dist/source/Scripts.d.ts +1 -0
- package/dist/source/Scripts.jsx +49 -0
- package/dist/source/Scripts.jsx.map +1 -0
- package/dist/source/ScrollRestoration.d.ts +14 -0
- package/dist/source/ScrollRestoration.jsx +37 -0
- package/dist/source/ScrollRestoration.jsx.map +1 -0
- package/dist/source/Transitioner.d.ts +1 -0
- package/dist/source/Transitioner.jsx +102 -0
- package/dist/source/Transitioner.jsx.map +1 -0
- package/dist/source/awaited.d.ts +11 -0
- package/dist/source/awaited.jsx +19 -0
- package/dist/source/awaited.jsx.map +1 -0
- package/dist/source/fileRoute.d.ts +54 -0
- package/dist/source/fileRoute.js +98 -0
- package/dist/source/fileRoute.js.map +1 -0
- package/dist/source/history.d.ts +8 -0
- package/dist/source/history.js +2 -0
- package/dist/source/history.js.map +1 -0
- package/dist/source/index.d.ts +52 -0
- package/dist/source/index.jsx +43 -0
- package/dist/source/index.jsx.map +1 -0
- package/dist/source/lazyRouteComponent.d.ts +2 -0
- package/dist/source/lazyRouteComponent.jsx +83 -0
- package/dist/source/lazyRouteComponent.jsx.map +1 -0
- package/dist/source/link.d.ts +44 -0
- package/dist/source/link.jsx +335 -0
- package/dist/source/link.jsx.map +1 -0
- package/dist/source/matchContext.d.ts +3 -0
- package/dist/source/matchContext.jsx +5 -0
- package/dist/source/matchContext.jsx.map +1 -0
- package/dist/source/not-found.d.ts +8 -0
- package/dist/source/not-found.jsx +30 -0
- package/dist/source/not-found.jsx.map +1 -0
- package/dist/source/renderRouteNotFound.d.ts +2 -0
- package/dist/source/renderRouteNotFound.jsx +15 -0
- package/dist/source/renderRouteNotFound.jsx.map +1 -0
- package/dist/source/route.d.ts +96 -0
- package/dist/source/route.jsx +179 -0
- package/dist/source/route.jsx.map +1 -0
- package/dist/source/router.d.ts +70 -0
- package/dist/source/router.js +21 -0
- package/dist/source/router.js.map +1 -0
- package/dist/source/routerContext.d.ts +8 -0
- package/dist/source/routerContext.jsx +13 -0
- package/dist/source/routerContext.jsx.map +1 -0
- package/dist/source/scroll-restoration.d.ts +1 -0
- package/dist/source/scroll-restoration.jsx +16 -0
- package/dist/source/scroll-restoration.jsx.map +1 -0
- package/dist/source/typePrimitives.d.ts +10 -0
- package/dist/source/typePrimitives.js +2 -0
- package/dist/source/typePrimitives.js.map +1 -0
- package/dist/source/useBlocker.d.ts +67 -0
- package/dist/source/useBlocker.jsx +136 -0
- package/dist/source/useBlocker.jsx.map +1 -0
- package/dist/source/useCanGoBack.d.ts +1 -0
- package/dist/source/useCanGoBack.js +5 -0
- package/dist/source/useCanGoBack.js.map +1 -0
- package/dist/source/useLoaderData.d.ts +8 -0
- package/dist/source/useLoaderData.jsx +11 -0
- package/dist/source/useLoaderData.jsx.map +1 -0
- package/dist/source/useLoaderDeps.d.ts +7 -0
- package/dist/source/useLoaderDeps.jsx +11 -0
- package/dist/source/useLoaderDeps.jsx.map +1 -0
- package/dist/source/useLocation.d.ts +7 -0
- package/dist/source/useLocation.jsx +7 -0
- package/dist/source/useLocation.jsx.map +1 -0
- package/dist/source/useMatch.d.ts +10 -0
- package/dist/source/useMatch.jsx +19 -0
- package/dist/source/useMatch.jsx.map +1 -0
- package/dist/source/useNavigate.d.ts +5 -0
- package/dist/source/useNavigate.jsx +18 -0
- package/dist/source/useNavigate.jsx.map +1 -0
- package/dist/source/useParams.d.ts +9 -0
- package/dist/source/useParams.jsx +12 -0
- package/dist/source/useParams.jsx.map +1 -0
- package/dist/source/useRouteContext.d.ts +4 -0
- package/dist/source/useRouteContext.js +8 -0
- package/dist/source/useRouteContext.js.map +1 -0
- package/dist/source/useRouter.d.ts +4 -0
- package/dist/source/useRouter.jsx +9 -0
- package/dist/source/useRouter.jsx.map +1 -0
- package/dist/source/useRouterState.d.ts +8 -0
- package/dist/source/useRouterState.jsx +14 -0
- package/dist/source/useRouterState.jsx.map +1 -0
- package/dist/source/useSearch.d.ts +9 -0
- package/dist/source/useSearch.jsx +12 -0
- package/dist/source/useSearch.jsx.map +1 -0
- package/dist/source/utils.d.ts +34 -0
- package/dist/source/utils.js +59 -0
- package/dist/source/utils.js.map +1 -0
- package/package.json +80 -0
- package/src/Asset.tsx +24 -0
- package/src/CatchBoundary.tsx +78 -0
- package/src/ClientOnly.tsx +65 -0
- package/src/HeadContent.tsx +174 -0
- package/src/Match.tsx +357 -0
- package/src/Matches.tsx +243 -0
- package/src/RouterProvider.tsx +79 -0
- package/src/SafeFragment.tsx +3 -0
- package/src/ScriptOnce.tsx +30 -0
- package/src/Scripts.tsx +65 -0
- package/src/ScrollRestoration.tsx +69 -0
- package/src/Transitioner.tsx +140 -0
- package/src/awaited.tsx +40 -0
- package/src/fileRoute.ts +256 -0
- package/src/history.ts +9 -0
- package/src/index.tsx +374 -0
- package/src/lazyRouteComponent.tsx +110 -0
- package/src/link.tsx +597 -0
- package/src/matchContext.tsx +10 -0
- package/src/not-found.tsx +42 -0
- package/src/renderRouteNotFound.tsx +26 -0
- package/src/route.tsx +550 -0
- package/src/router.ts +112 -0
- package/src/routerContext.tsx +26 -0
- package/src/scroll-restoration.tsx +29 -0
- package/src/typePrimitives.ts +74 -0
- package/src/useBlocker.tsx +305 -0
- package/src/useCanGoBack.ts +5 -0
- package/src/useLoaderData.tsx +50 -0
- package/src/useLoaderDeps.tsx +46 -0
- package/src/useLocation.tsx +30 -0
- package/src/useMatch.tsx +96 -0
- package/src/useNavigate.tsx +40 -0
- package/src/useParams.tsx +71 -0
- package/src/useRouteContext.ts +31 -0
- package/src/useRouter.tsx +15 -0
- package/src/useRouterState.tsx +36 -0
- package/src/useSearch.tsx +71 -0
- package/src/utils.ts +79 -0
package/src/Matches.tsx
ADDED
|
@@ -0,0 +1,243 @@
|
|
|
1
|
+
import * as Solid from 'solid-js'
|
|
2
|
+
import warning from 'tiny-warning'
|
|
3
|
+
import { CatchBoundary, ErrorComponent } from './CatchBoundary'
|
|
4
|
+
import { useRouterState } from './useRouterState'
|
|
5
|
+
import { useRouter } from './useRouter'
|
|
6
|
+
import { Transitioner } from './Transitioner'
|
|
7
|
+
import { matchContext } from './matchContext'
|
|
8
|
+
import { Match } from './Match'
|
|
9
|
+
import { SafeFragment } from './SafeFragment'
|
|
10
|
+
import type {
|
|
11
|
+
AnyRouter,
|
|
12
|
+
DeepPartial,
|
|
13
|
+
MakeOptionalPathParams,
|
|
14
|
+
MakeOptionalSearchParams,
|
|
15
|
+
MakeRouteMatchUnion,
|
|
16
|
+
MaskOptions,
|
|
17
|
+
MatchRouteOptions,
|
|
18
|
+
NoInfer,
|
|
19
|
+
RegisteredRouter,
|
|
20
|
+
ResolveRelativePath,
|
|
21
|
+
ResolveRoute,
|
|
22
|
+
RouteByPath,
|
|
23
|
+
RouterState,
|
|
24
|
+
ToSubOptionsProps,
|
|
25
|
+
} from '@tanstack/router-core'
|
|
26
|
+
|
|
27
|
+
declare module '@tanstack/router-core' {
|
|
28
|
+
export interface RouteMatchExtensions {
|
|
29
|
+
meta?: Array<Solid.JSX.IntrinsicElements['meta'] | undefined>
|
|
30
|
+
links?: Array<Solid.JSX.IntrinsicElements['link'] | undefined>
|
|
31
|
+
scripts?: Array<Solid.JSX.IntrinsicElements['script'] | undefined>
|
|
32
|
+
headScripts?: Array<Solid.JSX.IntrinsicElements['script'] | undefined>
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
export function Matches() {
|
|
37
|
+
const router = useRouter()
|
|
38
|
+
|
|
39
|
+
const pendingElement = router.options.defaultPendingComponent ? (
|
|
40
|
+
<router.options.defaultPendingComponent />
|
|
41
|
+
) : null
|
|
42
|
+
|
|
43
|
+
// Do not render a root Suspense during SSR or hydrating from SSR
|
|
44
|
+
const ResolvedSuspense =
|
|
45
|
+
router.isServer || (typeof document !== 'undefined' && router.clientSsr)
|
|
46
|
+
? SafeFragment
|
|
47
|
+
: Solid.Suspense
|
|
48
|
+
|
|
49
|
+
const inner = (
|
|
50
|
+
<ResolvedSuspense fallback={pendingElement}>
|
|
51
|
+
<Transitioner />
|
|
52
|
+
<MatchesInner />
|
|
53
|
+
</ResolvedSuspense>
|
|
54
|
+
)
|
|
55
|
+
|
|
56
|
+
return router.options.InnerWrap ? (
|
|
57
|
+
<router.options.InnerWrap>{inner}</router.options.InnerWrap>
|
|
58
|
+
) : (
|
|
59
|
+
inner
|
|
60
|
+
)
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
function MatchesInner() {
|
|
64
|
+
const matchId = useRouterState({
|
|
65
|
+
select: (s) => {
|
|
66
|
+
return s.matches[0]?.id
|
|
67
|
+
},
|
|
68
|
+
})
|
|
69
|
+
|
|
70
|
+
const resetKey = useRouterState({
|
|
71
|
+
select: (s) => s.loadedAt,
|
|
72
|
+
})
|
|
73
|
+
|
|
74
|
+
return (
|
|
75
|
+
<matchContext.Provider value={matchId}>
|
|
76
|
+
<CatchBoundary
|
|
77
|
+
getResetKey={() => resetKey()}
|
|
78
|
+
errorComponent={ErrorComponent}
|
|
79
|
+
onCatch={(error) => {
|
|
80
|
+
warning(
|
|
81
|
+
false,
|
|
82
|
+
`The following error wasn't caught by any route! At the very least, consider setting an 'errorComponent' in your RootRoute!`,
|
|
83
|
+
)
|
|
84
|
+
warning(false, error.message || error.toString())
|
|
85
|
+
}}
|
|
86
|
+
>
|
|
87
|
+
{matchId() ? <Match matchId={matchId()!} /> : null}
|
|
88
|
+
</CatchBoundary>
|
|
89
|
+
</matchContext.Provider>
|
|
90
|
+
)
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
export type UseMatchRouteOptions<
|
|
94
|
+
TRouter extends AnyRouter = RegisteredRouter,
|
|
95
|
+
TFrom extends string = string,
|
|
96
|
+
TTo extends string | undefined = undefined,
|
|
97
|
+
TMaskFrom extends string = TFrom,
|
|
98
|
+
TMaskTo extends string = '',
|
|
99
|
+
> = ToSubOptionsProps<TRouter, TFrom, TTo> &
|
|
100
|
+
DeepPartial<MakeOptionalSearchParams<TRouter, TFrom, TTo>> &
|
|
101
|
+
DeepPartial<MakeOptionalPathParams<TRouter, TFrom, TTo>> &
|
|
102
|
+
MaskOptions<TRouter, TMaskFrom, TMaskTo> &
|
|
103
|
+
MatchRouteOptions
|
|
104
|
+
|
|
105
|
+
export function useMatchRoute<TRouter extends AnyRouter = RegisteredRouter>() {
|
|
106
|
+
const router = useRouter()
|
|
107
|
+
|
|
108
|
+
const status = useRouterState({
|
|
109
|
+
select: (s) => s.status,
|
|
110
|
+
})
|
|
111
|
+
|
|
112
|
+
return <
|
|
113
|
+
const TFrom extends string = string,
|
|
114
|
+
const TTo extends string | undefined = undefined,
|
|
115
|
+
const TMaskFrom extends string = TFrom,
|
|
116
|
+
const TMaskTo extends string = '',
|
|
117
|
+
>(
|
|
118
|
+
opts: UseMatchRouteOptions<TRouter, TFrom, TTo, TMaskFrom, TMaskTo>,
|
|
119
|
+
): Solid.Accessor<
|
|
120
|
+
false | ResolveRoute<TRouter, TFrom, TTo>['types']['allParams']
|
|
121
|
+
> => {
|
|
122
|
+
const { pending, caseSensitive, fuzzy, includeSearch, ...rest } = opts
|
|
123
|
+
|
|
124
|
+
const matchRoute = Solid.createMemo(() => {
|
|
125
|
+
status()
|
|
126
|
+
return router.matchRoute(rest as any, {
|
|
127
|
+
pending,
|
|
128
|
+
caseSensitive,
|
|
129
|
+
fuzzy,
|
|
130
|
+
includeSearch,
|
|
131
|
+
})
|
|
132
|
+
})
|
|
133
|
+
|
|
134
|
+
return matchRoute
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
export type MakeMatchRouteOptions<
|
|
139
|
+
TRouter extends AnyRouter = RegisteredRouter,
|
|
140
|
+
TFrom extends string = string,
|
|
141
|
+
TTo extends string | undefined = undefined,
|
|
142
|
+
TMaskFrom extends string = TFrom,
|
|
143
|
+
TMaskTo extends string = '',
|
|
144
|
+
> = UseMatchRouteOptions<TRouter, TFrom, TTo, TMaskFrom, TMaskTo> & {
|
|
145
|
+
// If a function is passed as a child, it will be given the `isActive` boolean to aid in further styling on the element it returns
|
|
146
|
+
children?:
|
|
147
|
+
| ((
|
|
148
|
+
params?: RouteByPath<
|
|
149
|
+
TRouter['routeTree'],
|
|
150
|
+
ResolveRelativePath<TFrom, NoInfer<TTo>>
|
|
151
|
+
>['types']['allParams'],
|
|
152
|
+
) => Solid.JSX.Element)
|
|
153
|
+
| Solid.JSX.Element
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
export function MatchRoute<
|
|
157
|
+
TRouter extends AnyRouter = RegisteredRouter,
|
|
158
|
+
const TFrom extends string = string,
|
|
159
|
+
const TTo extends string | undefined = undefined,
|
|
160
|
+
const TMaskFrom extends string = TFrom,
|
|
161
|
+
const TMaskTo extends string = '',
|
|
162
|
+
>(props: MakeMatchRouteOptions<TRouter, TFrom, TTo, TMaskFrom, TMaskTo>): any {
|
|
163
|
+
const status = useRouterState({
|
|
164
|
+
select: (s) => s.status,
|
|
165
|
+
})
|
|
166
|
+
|
|
167
|
+
return (
|
|
168
|
+
<Solid.Show when={status()} keyed>
|
|
169
|
+
{(_) => {
|
|
170
|
+
const matchRoute = useMatchRoute()
|
|
171
|
+
const params = matchRoute(props as any)() as boolean
|
|
172
|
+
|
|
173
|
+
if (typeof props.children === 'function') {
|
|
174
|
+
return (props.children as any)(params)
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
return params ? props.children : null
|
|
178
|
+
}}
|
|
179
|
+
</Solid.Show>
|
|
180
|
+
)
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
export interface UseMatchesBaseOptions<TRouter extends AnyRouter, TSelected> {
|
|
184
|
+
select?: (matches: Array<MakeRouteMatchUnion<TRouter>>) => TSelected
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
export type UseMatchesResult<
|
|
188
|
+
TRouter extends AnyRouter,
|
|
189
|
+
TSelected,
|
|
190
|
+
> = unknown extends TSelected ? Array<MakeRouteMatchUnion<TRouter>> : TSelected
|
|
191
|
+
|
|
192
|
+
export function useMatches<
|
|
193
|
+
TRouter extends AnyRouter = RegisteredRouter,
|
|
194
|
+
TSelected = unknown,
|
|
195
|
+
>(
|
|
196
|
+
opts?: UseMatchesBaseOptions<TRouter, TSelected>,
|
|
197
|
+
): Solid.Accessor<UseMatchesResult<TRouter, TSelected>> {
|
|
198
|
+
return useRouterState({
|
|
199
|
+
select: (state: RouterState<TRouter['routeTree']>) => {
|
|
200
|
+
const matches = state.matches
|
|
201
|
+
return opts?.select
|
|
202
|
+
? opts.select(matches as Array<MakeRouteMatchUnion<TRouter>>)
|
|
203
|
+
: matches
|
|
204
|
+
},
|
|
205
|
+
} as any) as Solid.Accessor<UseMatchesResult<TRouter, TSelected>>
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
export function useParentMatches<
|
|
209
|
+
TRouter extends AnyRouter = RegisteredRouter,
|
|
210
|
+
TSelected = unknown,
|
|
211
|
+
>(
|
|
212
|
+
opts?: UseMatchesBaseOptions<TRouter, TSelected>,
|
|
213
|
+
): Solid.Accessor<UseMatchesResult<TRouter, TSelected>> {
|
|
214
|
+
const contextMatchId = Solid.useContext(matchContext)
|
|
215
|
+
|
|
216
|
+
return useMatches({
|
|
217
|
+
select: (matches: Array<MakeRouteMatchUnion<TRouter>>) => {
|
|
218
|
+
matches = matches.slice(
|
|
219
|
+
0,
|
|
220
|
+
matches.findIndex((d) => d.id === contextMatchId()),
|
|
221
|
+
)
|
|
222
|
+
return opts?.select ? opts.select(matches) : matches
|
|
223
|
+
},
|
|
224
|
+
} as any)
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
export function useChildMatches<
|
|
228
|
+
TRouter extends AnyRouter = RegisteredRouter,
|
|
229
|
+
TSelected = unknown,
|
|
230
|
+
>(
|
|
231
|
+
opts?: UseMatchesBaseOptions<TRouter, TSelected>,
|
|
232
|
+
): Solid.Accessor<UseMatchesResult<TRouter, TSelected>> {
|
|
233
|
+
const contextMatchId = Solid.useContext(matchContext)
|
|
234
|
+
|
|
235
|
+
return useMatches({
|
|
236
|
+
select: (matches: Array<MakeRouteMatchUnion<TRouter>>) => {
|
|
237
|
+
matches = matches.slice(
|
|
238
|
+
matches.findIndex((d) => d.id === contextMatchId()) + 1,
|
|
239
|
+
)
|
|
240
|
+
return opts?.select ? opts.select(matches) : matches
|
|
241
|
+
},
|
|
242
|
+
} as any)
|
|
243
|
+
}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { Matches } from './Matches'
|
|
2
|
+
import { getRouterContext } from './routerContext'
|
|
3
|
+
import type * as Solid from 'solid-js'
|
|
4
|
+
import type {
|
|
5
|
+
AnyRouter,
|
|
6
|
+
RegisteredRouter,
|
|
7
|
+
RouterOptions,
|
|
8
|
+
} from '@tanstack/router-core'
|
|
9
|
+
|
|
10
|
+
export function RouterContextProvider<
|
|
11
|
+
TRouter extends AnyRouter = RegisteredRouter,
|
|
12
|
+
TDehydrated extends Record<string, any> = Record<string, any>,
|
|
13
|
+
>({
|
|
14
|
+
router,
|
|
15
|
+
children,
|
|
16
|
+
...rest
|
|
17
|
+
}: RouterProps<TRouter, TDehydrated> & {
|
|
18
|
+
children: () => Solid.JSX.Element
|
|
19
|
+
}) {
|
|
20
|
+
// Allow the router to update options on the router instance
|
|
21
|
+
router.update({
|
|
22
|
+
...router.options,
|
|
23
|
+
...rest,
|
|
24
|
+
context: {
|
|
25
|
+
...router.options.context,
|
|
26
|
+
...rest.context,
|
|
27
|
+
},
|
|
28
|
+
} as any)
|
|
29
|
+
|
|
30
|
+
const routerContext = getRouterContext()
|
|
31
|
+
|
|
32
|
+
const provider = (
|
|
33
|
+
<routerContext.Provider value={router as AnyRouter}>
|
|
34
|
+
{children()}
|
|
35
|
+
</routerContext.Provider>
|
|
36
|
+
)
|
|
37
|
+
|
|
38
|
+
if (router.options.Wrap) {
|
|
39
|
+
return <router.options.Wrap>{provider}</router.options.Wrap>
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
return provider
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
export function RouterProvider<
|
|
46
|
+
TRouter extends AnyRouter = RegisteredRouter,
|
|
47
|
+
TDehydrated extends Record<string, any> = Record<string, any>,
|
|
48
|
+
>({ router, ...rest }: RouterProps<TRouter, TDehydrated>) {
|
|
49
|
+
return (
|
|
50
|
+
<RouterContextProvider router={router} {...rest}>
|
|
51
|
+
{() => <Matches />}
|
|
52
|
+
</RouterContextProvider>
|
|
53
|
+
)
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
export type RouterProps<
|
|
57
|
+
TRouter extends AnyRouter = RegisteredRouter,
|
|
58
|
+
TDehydrated extends Record<string, any> = Record<string, any>,
|
|
59
|
+
> = Omit<
|
|
60
|
+
RouterOptions<
|
|
61
|
+
TRouter['routeTree'],
|
|
62
|
+
NonNullable<TRouter['options']['trailingSlash']>,
|
|
63
|
+
false,
|
|
64
|
+
TRouter['history'],
|
|
65
|
+
TDehydrated
|
|
66
|
+
>,
|
|
67
|
+
'context'
|
|
68
|
+
> & {
|
|
69
|
+
router: TRouter
|
|
70
|
+
context?: Partial<
|
|
71
|
+
RouterOptions<
|
|
72
|
+
TRouter['routeTree'],
|
|
73
|
+
NonNullable<TRouter['options']['trailingSlash']>,
|
|
74
|
+
false,
|
|
75
|
+
TRouter['history'],
|
|
76
|
+
TDehydrated
|
|
77
|
+
>['context']
|
|
78
|
+
>
|
|
79
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import jsesc from 'jsesc'
|
|
2
|
+
|
|
3
|
+
export function ScriptOnce({
|
|
4
|
+
children,
|
|
5
|
+
log,
|
|
6
|
+
}: {
|
|
7
|
+
children: string
|
|
8
|
+
log?: boolean
|
|
9
|
+
sync?: boolean
|
|
10
|
+
}) {
|
|
11
|
+
if (typeof document !== 'undefined') {
|
|
12
|
+
return null
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
return (
|
|
16
|
+
<script
|
|
17
|
+
class="tsr-once"
|
|
18
|
+
innerHTML={[
|
|
19
|
+
children,
|
|
20
|
+
(log ?? true) && process.env.NODE_ENV === 'development'
|
|
21
|
+
? `console.info(\`Injected From Server:
|
|
22
|
+
${jsesc(children.toString(), { quotes: 'backtick' })}\`)`
|
|
23
|
+
: '',
|
|
24
|
+
'if (typeof __TSR_SSR__ !== "undefined") __TSR_SSR__.cleanScripts()',
|
|
25
|
+
]
|
|
26
|
+
.filter(Boolean)
|
|
27
|
+
.join('\n')}
|
|
28
|
+
/>
|
|
29
|
+
)
|
|
30
|
+
}
|
package/src/Scripts.tsx
ADDED
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { Asset } from './Asset'
|
|
2
|
+
import { useRouterState } from './useRouterState'
|
|
3
|
+
import { useRouter } from './useRouter'
|
|
4
|
+
import type { RouterManagedTag } from '@tanstack/router-core'
|
|
5
|
+
|
|
6
|
+
export const Scripts = () => {
|
|
7
|
+
const router = useRouter()
|
|
8
|
+
|
|
9
|
+
const assetScripts = useRouterState({
|
|
10
|
+
select: (state) => {
|
|
11
|
+
const assetScripts: Array<RouterManagedTag> = []
|
|
12
|
+
const manifest = router.ssr?.manifest
|
|
13
|
+
|
|
14
|
+
if (!manifest) {
|
|
15
|
+
return []
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
state.matches
|
|
19
|
+
.map((match) => router.looseRoutesById[match.routeId]!)
|
|
20
|
+
.forEach((route) =>
|
|
21
|
+
manifest.routes[route.id]?.assets
|
|
22
|
+
?.filter((d) => d.tag === 'script')
|
|
23
|
+
.forEach((asset) => {
|
|
24
|
+
assetScripts.push({
|
|
25
|
+
tag: 'script',
|
|
26
|
+
attrs: asset.attrs,
|
|
27
|
+
children: asset.children,
|
|
28
|
+
} as any)
|
|
29
|
+
}),
|
|
30
|
+
)
|
|
31
|
+
|
|
32
|
+
return assetScripts
|
|
33
|
+
},
|
|
34
|
+
})
|
|
35
|
+
|
|
36
|
+
const scripts = useRouterState({
|
|
37
|
+
select: (state) => ({
|
|
38
|
+
scripts: (
|
|
39
|
+
state.matches
|
|
40
|
+
.map((match) => match.scripts!)
|
|
41
|
+
.flat(1)
|
|
42
|
+
.filter(Boolean) as Array<RouterManagedTag>
|
|
43
|
+
).map(({ children, ...script }) => ({
|
|
44
|
+
tag: 'script',
|
|
45
|
+
attrs: {
|
|
46
|
+
...script,
|
|
47
|
+
},
|
|
48
|
+
children,
|
|
49
|
+
})),
|
|
50
|
+
}),
|
|
51
|
+
})
|
|
52
|
+
|
|
53
|
+
const allScripts = [
|
|
54
|
+
...scripts().scripts,
|
|
55
|
+
...assetScripts(),
|
|
56
|
+
] as Array<RouterManagedTag>
|
|
57
|
+
|
|
58
|
+
return (
|
|
59
|
+
<>
|
|
60
|
+
{allScripts.map((asset, i) => (
|
|
61
|
+
<Asset {...asset} />
|
|
62
|
+
))}
|
|
63
|
+
</>
|
|
64
|
+
)
|
|
65
|
+
}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import {
|
|
2
|
+
defaultGetScrollRestorationKey,
|
|
3
|
+
getCssSelector,
|
|
4
|
+
scrollRestorationCache,
|
|
5
|
+
setupScrollRestoration,
|
|
6
|
+
} from '@tanstack/router-core'
|
|
7
|
+
import { useRouter } from './useRouter'
|
|
8
|
+
import type {
|
|
9
|
+
ParsedLocation,
|
|
10
|
+
ScrollRestorationEntry,
|
|
11
|
+
ScrollRestorationOptions,
|
|
12
|
+
} from '@tanstack/router-core'
|
|
13
|
+
|
|
14
|
+
function useScrollRestoration() {
|
|
15
|
+
const router = useRouter()
|
|
16
|
+
setupScrollRestoration(router, true)
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* @deprecated use createRouter's `scrollRestoration` option instead
|
|
21
|
+
*/
|
|
22
|
+
export function ScrollRestoration(_props: ScrollRestorationOptions) {
|
|
23
|
+
useScrollRestoration()
|
|
24
|
+
|
|
25
|
+
if (process.env.NODE_ENV === 'development') {
|
|
26
|
+
console.warn(
|
|
27
|
+
"The ScrollRestoration component is deprecated. Use createRouter's `scrollRestoration` option instead.",
|
|
28
|
+
)
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
return null
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
export function useElementScrollRestoration(
|
|
35
|
+
options: (
|
|
36
|
+
| {
|
|
37
|
+
id: string
|
|
38
|
+
getElement?: () => Window | Element | undefined | null
|
|
39
|
+
}
|
|
40
|
+
| {
|
|
41
|
+
id?: string
|
|
42
|
+
getElement: () => Window | Element | undefined | null
|
|
43
|
+
}
|
|
44
|
+
) & {
|
|
45
|
+
getKey?: (location: ParsedLocation) => string
|
|
46
|
+
},
|
|
47
|
+
): ScrollRestorationEntry | undefined {
|
|
48
|
+
useScrollRestoration()
|
|
49
|
+
|
|
50
|
+
const router = useRouter()
|
|
51
|
+
const getKey = options.getKey || defaultGetScrollRestorationKey
|
|
52
|
+
|
|
53
|
+
let elementSelector = ''
|
|
54
|
+
|
|
55
|
+
if (options.id) {
|
|
56
|
+
elementSelector = `[data-scroll-restoration-id="${options.id}"]`
|
|
57
|
+
} else {
|
|
58
|
+
const element = options.getElement?.()
|
|
59
|
+
if (!element) {
|
|
60
|
+
return
|
|
61
|
+
}
|
|
62
|
+
elementSelector =
|
|
63
|
+
element instanceof Window ? 'window' : getCssSelector(element)
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
const restoreKey = getKey(router.latestLocation)
|
|
67
|
+
const byKey = scrollRestorationCache.state[restoreKey]
|
|
68
|
+
return byKey?.[elementSelector]
|
|
69
|
+
}
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
import * as Solid from 'solid-js'
|
|
2
|
+
import {
|
|
3
|
+
getLocationChangeInfo,
|
|
4
|
+
handleHashScroll,
|
|
5
|
+
trimPathRight,
|
|
6
|
+
} from '@tanstack/router-core'
|
|
7
|
+
import { useRouter } from './useRouter'
|
|
8
|
+
import { useRouterState } from './useRouterState'
|
|
9
|
+
import { usePrevious } from './utils'
|
|
10
|
+
|
|
11
|
+
export function Transitioner() {
|
|
12
|
+
const router = useRouter()
|
|
13
|
+
let mountLoadForRouter = { router, mounted: false }
|
|
14
|
+
const isLoading = useRouterState({
|
|
15
|
+
select: ({ isLoading }) => isLoading,
|
|
16
|
+
})
|
|
17
|
+
|
|
18
|
+
const [isTransitioning, setIsTransitioning] = Solid.createSignal(false)
|
|
19
|
+
// Track pending state changes
|
|
20
|
+
const hasPendingMatches = useRouterState({
|
|
21
|
+
select: (s) => s.matches.some((d) => d.status === 'pending'),
|
|
22
|
+
})
|
|
23
|
+
|
|
24
|
+
const previousIsLoading = usePrevious(isLoading)
|
|
25
|
+
|
|
26
|
+
const isAnyPending = () =>
|
|
27
|
+
isLoading() || isTransitioning() || hasPendingMatches()
|
|
28
|
+
const previousIsAnyPending = usePrevious(isAnyPending)
|
|
29
|
+
|
|
30
|
+
const isPagePending = () => isLoading() || hasPendingMatches()
|
|
31
|
+
const previousIsPagePending = usePrevious(isPagePending)
|
|
32
|
+
|
|
33
|
+
if (!router.isServer) {
|
|
34
|
+
router.startTransition = async (fn: () => void | Promise<void>) => {
|
|
35
|
+
setIsTransitioning(true)
|
|
36
|
+
await fn()
|
|
37
|
+
setIsTransitioning(false)
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
// Subscribe to location changes
|
|
42
|
+
// and try to load the new location
|
|
43
|
+
Solid.onMount(() => {
|
|
44
|
+
const unsub = router.history.subscribe(router.load)
|
|
45
|
+
|
|
46
|
+
const nextLocation = router.buildLocation({
|
|
47
|
+
to: router.latestLocation.pathname,
|
|
48
|
+
search: true,
|
|
49
|
+
params: true,
|
|
50
|
+
hash: true,
|
|
51
|
+
state: true,
|
|
52
|
+
_includeValidateSearch: true,
|
|
53
|
+
})
|
|
54
|
+
|
|
55
|
+
if (
|
|
56
|
+
trimPathRight(router.latestLocation.href) !==
|
|
57
|
+
trimPathRight(nextLocation.href)
|
|
58
|
+
) {
|
|
59
|
+
router.commitLocation({ ...nextLocation, replace: true })
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
Solid.onCleanup(() => {
|
|
63
|
+
unsub()
|
|
64
|
+
})
|
|
65
|
+
})
|
|
66
|
+
|
|
67
|
+
// Try to load the initial location
|
|
68
|
+
Solid.createRenderEffect(() => {
|
|
69
|
+
Solid.untrack(() => {
|
|
70
|
+
if (
|
|
71
|
+
(typeof window !== 'undefined' && router.clientSsr) ||
|
|
72
|
+
(mountLoadForRouter.router === router && mountLoadForRouter.mounted)
|
|
73
|
+
) {
|
|
74
|
+
return
|
|
75
|
+
}
|
|
76
|
+
mountLoadForRouter = { router, mounted: true }
|
|
77
|
+
const tryLoad = async () => {
|
|
78
|
+
try {
|
|
79
|
+
await router.load()
|
|
80
|
+
} catch (err) {
|
|
81
|
+
console.error(err)
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
tryLoad()
|
|
85
|
+
})
|
|
86
|
+
})
|
|
87
|
+
|
|
88
|
+
Solid.createRenderEffect(
|
|
89
|
+
Solid.on(
|
|
90
|
+
[previousIsLoading, isLoading],
|
|
91
|
+
([previousIsLoading, isLoading]) => {
|
|
92
|
+
if (previousIsLoading.previous && !isLoading) {
|
|
93
|
+
router.emit({
|
|
94
|
+
type: 'onLoad',
|
|
95
|
+
...getLocationChangeInfo(router.state),
|
|
96
|
+
})
|
|
97
|
+
}
|
|
98
|
+
},
|
|
99
|
+
),
|
|
100
|
+
)
|
|
101
|
+
Solid.createRenderEffect(
|
|
102
|
+
Solid.on(
|
|
103
|
+
[isPagePending, previousIsPagePending],
|
|
104
|
+
([isPagePending, previousIsPagePending]) => {
|
|
105
|
+
// emit onBeforeRouteMount
|
|
106
|
+
if (previousIsPagePending.previous && !isPagePending) {
|
|
107
|
+
router.emit({
|
|
108
|
+
type: 'onBeforeRouteMount',
|
|
109
|
+
...getLocationChangeInfo(router.state),
|
|
110
|
+
})
|
|
111
|
+
}
|
|
112
|
+
},
|
|
113
|
+
),
|
|
114
|
+
)
|
|
115
|
+
|
|
116
|
+
Solid.createRenderEffect(
|
|
117
|
+
Solid.on(
|
|
118
|
+
[isAnyPending, previousIsAnyPending],
|
|
119
|
+
([isAnyPending, previousIsAnyPending]) => {
|
|
120
|
+
// The router was pending and now it's not
|
|
121
|
+
if (previousIsAnyPending.previous && !isAnyPending) {
|
|
122
|
+
router.emit({
|
|
123
|
+
type: 'onResolved',
|
|
124
|
+
...getLocationChangeInfo(router.state),
|
|
125
|
+
})
|
|
126
|
+
|
|
127
|
+
router.__store.setState((s) => ({
|
|
128
|
+
...s,
|
|
129
|
+
status: 'idle',
|
|
130
|
+
resolvedLocation: s.location,
|
|
131
|
+
}))
|
|
132
|
+
|
|
133
|
+
handleHashScroll(router)
|
|
134
|
+
}
|
|
135
|
+
},
|
|
136
|
+
),
|
|
137
|
+
)
|
|
138
|
+
|
|
139
|
+
return null
|
|
140
|
+
}
|
package/src/awaited.tsx
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import * as Solid from 'solid-js'
|
|
2
|
+
|
|
3
|
+
import { TSR_DEFERRED_PROMISE, defer } from '@tanstack/router-core'
|
|
4
|
+
import type { DeferredPromise } from '@tanstack/router-core'
|
|
5
|
+
import type { SolidNode } from './route'
|
|
6
|
+
|
|
7
|
+
export type AwaitOptions<T> = {
|
|
8
|
+
promise: Promise<T>
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export function useAwaited<T>({
|
|
12
|
+
promise: _promise,
|
|
13
|
+
}: AwaitOptions<T>): [T, DeferredPromise<T>] {
|
|
14
|
+
const promise = defer(_promise)
|
|
15
|
+
|
|
16
|
+
if (promise[TSR_DEFERRED_PROMISE].status === 'pending') {
|
|
17
|
+
throw promise
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
if (promise[TSR_DEFERRED_PROMISE].status === 'error') {
|
|
21
|
+
throw promise[TSR_DEFERRED_PROMISE].error
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
return [promise[TSR_DEFERRED_PROMISE].data, promise]
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
export function Await<T>(
|
|
28
|
+
props: AwaitOptions<T> & {
|
|
29
|
+
fallback?: SolidNode
|
|
30
|
+
children: (result: T) => SolidNode
|
|
31
|
+
},
|
|
32
|
+
) {
|
|
33
|
+
const [resource] = Solid.createResource(() => props.promise)
|
|
34
|
+
|
|
35
|
+
return (
|
|
36
|
+
<Solid.Show fallback={props.fallback} when={resource()}>
|
|
37
|
+
{(data) => props.children(data())}
|
|
38
|
+
</Solid.Show>
|
|
39
|
+
)
|
|
40
|
+
}
|