@tanstack/solid-router 1.108.0
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 +59 -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/HeadContent.cjs +129 -0
- package/dist/cjs/HeadContent.cjs.map +1 -0
- package/dist/cjs/HeadContent.d.cts +8 -0
- package/dist/cjs/Match.cjs +340 -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 +69 -0
- package/dist/cjs/RouterProvider.cjs +45 -0
- package/dist/cjs/RouterProvider.cjs.map +1 -0
- package/dist/cjs/RouterProvider.d.cts +35 -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 +15 -0
- package/dist/cjs/Transitioner.cjs +132 -0
- package/dist/cjs/Transitioner.cjs.map +1 -0
- package/dist/cjs/Transitioner.d.cts +1 -0
- package/dist/cjs/awaited.cjs +53 -0
- package/dist/cjs/awaited.cjs.map +1 -0
- package/dist/cjs/awaited.d.cts +11 -0
- package/dist/cjs/fileRoute.cjs +90 -0
- package/dist/cjs/fileRoute.cjs.map +1 -0
- package/dist/cjs/fileRoute.d.cts +58 -0
- package/dist/cjs/history.d.cts +8 -0
- package/dist/cjs/index.cjs +260 -0
- package/dist/cjs/index.cjs.map +1 -0
- package/dist/cjs/index.d.cts +53 -0
- package/dist/cjs/lazyRouteComponent.cjs +74 -0
- package/dist/cjs/lazyRouteComponent.cjs.map +1 -0
- package/dist/cjs/lazyRouteComponent.d.cts +7 -0
- package/dist/cjs/link.cjs +279 -0
- package/dist/cjs/link.cjs.map +1 -0
- package/dist/cjs/link.d.cts +113 -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 +51 -0
- package/dist/cjs/not-found.cjs.map +1 -0
- package/dist/cjs/not-found.d.cts +27 -0
- package/dist/cjs/redirects.cjs +29 -0
- package/dist/cjs/redirects.cjs.map +1 -0
- package/dist/cjs/redirects.d.cts +21 -0
- package/dist/cjs/renderRouteNotFound.cjs +23 -0
- package/dist/cjs/renderRouteNotFound.cjs.map +1 -0
- package/dist/cjs/renderRouteNotFound.d.cts +3 -0
- package/dist/cjs/route.cjs +233 -0
- package/dist/cjs/route.cjs.map +1 -0
- package/dist/cjs/route.d.cts +297 -0
- package/dist/cjs/routeInfo.d.cts +53 -0
- package/dist/cjs/router.cjs +1687 -0
- package/dist/cjs/router.cjs.map +1 -0
- package/dist/cjs/router.d.cts +555 -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 +183 -0
- package/dist/cjs/scroll-restoration.cjs.map +1 -0
- package/dist/cjs/scroll-restoration.d.cts +29 -0
- package/dist/cjs/typePrimitives.d.cts +66 -0
- package/dist/cjs/useBlocker.cjs +165 -0
- package/dist/cjs/useBlocker.cjs.map +1 -0
- package/dist/cjs/useBlocker.d.cts +68 -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 +13 -0
- package/dist/cjs/useLoaderDeps.cjs +17 -0
- package/dist/cjs/useLoaderDeps.cjs.map +1 -0
- package/dist/cjs/useLoaderDeps.d.cts +12 -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 +14 -0
- package/dist/cjs/useNavigate.cjs +45 -0
- package/dist/cjs/useNavigate.cjs.map +1 -0
- package/dist/cjs/useNavigate.d.cts +7 -0
- package/dist/cjs/useParams.cjs +15 -0
- package/dist/cjs/useParams.cjs.map +1 -0
- package/dist/cjs/useParams.d.cts +15 -0
- package/dist/cjs/useRouteContext.cjs +11 -0
- package/dist/cjs/useRouteContext.cjs.map +1 -0
- package/dist/cjs/useRouteContext.d.cts +13 -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 +15 -0
- package/dist/cjs/utils.cjs +58 -0
- package/dist/cjs/utils.cjs.map +1 -0
- package/dist/cjs/utils.d.cts +44 -0
- package/dist/esm/Asset.d.ts +2 -0
- package/dist/esm/Asset.js +59 -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/HeadContent.d.ts +8 -0
- package/dist/esm/HeadContent.js +112 -0
- package/dist/esm/HeadContent.js.map +1 -0
- package/dist/esm/Match.d.ts +8 -0
- package/dist/esm/Match.js +323 -0
- package/dist/esm/Match.js.map +1 -0
- package/dist/esm/Matches.d.ts +69 -0
- package/dist/esm/Matches.js +134 -0
- package/dist/esm/Matches.js.map +1 -0
- package/dist/esm/RouterProvider.d.ts +35 -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 +15 -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 +115 -0
- package/dist/esm/Transitioner.js.map +1 -0
- package/dist/esm/awaited.d.ts +11 -0
- package/dist/esm/awaited.js +36 -0
- package/dist/esm/awaited.js.map +1 -0
- package/dist/esm/fileRoute.d.ts +58 -0
- package/dist/esm/fileRoute.js +90 -0
- package/dist/esm/fileRoute.js.map +1 -0
- package/dist/esm/history.d.ts +8 -0
- package/dist/esm/index.d.ts +53 -0
- package/dist/esm/index.js +149 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/lazyRouteComponent.d.ts +7 -0
- package/dist/esm/lazyRouteComponent.js +74 -0
- package/dist/esm/lazyRouteComponent.js.map +1 -0
- package/dist/esm/link.d.ts +113 -0
- package/dist/esm/link.js +262 -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 +27 -0
- package/dist/esm/not-found.js +51 -0
- package/dist/esm/not-found.js.map +1 -0
- package/dist/esm/redirects.d.ts +21 -0
- package/dist/esm/redirects.js +29 -0
- package/dist/esm/redirects.js.map +1 -0
- package/dist/esm/renderRouteNotFound.d.ts +3 -0
- package/dist/esm/renderRouteNotFound.js +23 -0
- package/dist/esm/renderRouteNotFound.js.map +1 -0
- package/dist/esm/route.d.ts +297 -0
- package/dist/esm/route.js +233 -0
- package/dist/esm/route.js.map +1 -0
- package/dist/esm/routeInfo.d.ts +53 -0
- package/dist/esm/router.d.ts +555 -0
- package/dist/esm/router.js +1687 -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 +29 -0
- package/dist/esm/scroll-restoration.js +183 -0
- package/dist/esm/scroll-restoration.js.map +1 -0
- package/dist/esm/typePrimitives.d.ts +66 -0
- package/dist/esm/useBlocker.d.ts +68 -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 +13 -0
- package/dist/esm/useLoaderData.js +14 -0
- package/dist/esm/useLoaderData.js.map +1 -0
- package/dist/esm/useLoaderDeps.d.ts +12 -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 +14 -0
- package/dist/esm/useMatch.js +22 -0
- package/dist/esm/useMatch.js.map +1 -0
- package/dist/esm/useNavigate.d.ts +7 -0
- package/dist/esm/useNavigate.js +28 -0
- package/dist/esm/useNavigate.js.map +1 -0
- package/dist/esm/useParams.d.ts +15 -0
- package/dist/esm/useParams.js +15 -0
- package/dist/esm/useParams.js.map +1 -0
- package/dist/esm/useRouteContext.d.ts +13 -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 +15 -0
- package/dist/esm/useSearch.js +15 -0
- package/dist/esm/useSearch.js.map +1 -0
- package/dist/esm/utils.d.ts +44 -0
- package/dist/esm/utils.js +41 -0
- package/dist/esm/utils.js.map +1 -0
- package/package.json +75 -0
- package/src/Asset.tsx +23 -0
- package/src/CatchBoundary.tsx +78 -0
- package/src/HeadContent.tsx +146 -0
- package/src/Match.tsx +356 -0
- package/src/Matches.tsx +348 -0
- package/src/RouterProvider.tsx +130 -0
- package/src/SafeFragment.tsx +3 -0
- package/src/ScriptOnce.tsx +30 -0
- package/src/Scripts.tsx +65 -0
- package/src/ScrollRestoration.tsx +65 -0
- package/src/Transitioner.tsx +152 -0
- package/src/awaited.tsx +49 -0
- package/src/fileRoute.ts +274 -0
- package/src/history.ts +9 -0
- package/src/index.tsx +359 -0
- package/src/lazyRouteComponent.tsx +114 -0
- package/src/link.tsx +1002 -0
- package/src/matchContext.tsx +10 -0
- package/src/not-found.tsx +69 -0
- package/src/redirects.ts +71 -0
- package/src/renderRouteNotFound.tsx +27 -0
- package/src/route.ts +1477 -0
- package/src/routeInfo.ts +239 -0
- package/src/router.ts +3066 -0
- package/src/routerContext.tsx +26 -0
- package/src/scroll-restoration.tsx +337 -0
- package/src/typePrimitives.ts +195 -0
- package/src/useBlocker.tsx +298 -0
- package/src/useCanGoBack.ts +5 -0
- package/src/useLoaderData.tsx +64 -0
- package/src/useLoaderDeps.tsx +52 -0
- package/src/useLocation.tsx +26 -0
- package/src/useMatch.tsx +96 -0
- package/src/useNavigate.tsx +61 -0
- package/src/useParams.tsx +83 -0
- package/src/useRouteContext.ts +62 -0
- package/src/useRouter.tsx +15 -0
- package/src/useRouterState.tsx +32 -0
- package/src/useSearch.tsx +84 -0
- package/src/utils.ts +96 -0
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { useMatch } from './useMatch'
|
|
2
|
+
import type { Accessor } from 'solid-js'
|
|
3
|
+
import type { AllContext, RouteById } from './routeInfo'
|
|
4
|
+
import type { AnyRouter, RegisteredRouter } from './router'
|
|
5
|
+
import type { StrictOrFrom } from './utils'
|
|
6
|
+
import type { Expand } from '@tanstack/router-core'
|
|
7
|
+
|
|
8
|
+
export interface UseRouteContextBaseOptions<
|
|
9
|
+
TRouter extends AnyRouter,
|
|
10
|
+
TFrom,
|
|
11
|
+
TStrict extends boolean,
|
|
12
|
+
TSelected,
|
|
13
|
+
> {
|
|
14
|
+
select?: (search: ResolveRouteContext<TRouter, TFrom, TStrict>) => TSelected
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export type UseRouteContextOptions<
|
|
18
|
+
TRouter extends AnyRouter,
|
|
19
|
+
TFrom extends string | undefined,
|
|
20
|
+
TStrict extends boolean,
|
|
21
|
+
TSelected,
|
|
22
|
+
> = StrictOrFrom<TRouter, TFrom, TStrict> &
|
|
23
|
+
UseRouteContextBaseOptions<TRouter, TFrom, TStrict, TSelected>
|
|
24
|
+
|
|
25
|
+
export type ResolveRouteContext<
|
|
26
|
+
TRouter extends AnyRouter,
|
|
27
|
+
TFrom,
|
|
28
|
+
TStrict extends boolean,
|
|
29
|
+
> = TStrict extends false
|
|
30
|
+
? AllContext<TRouter['routeTree']>
|
|
31
|
+
: Expand<RouteById<TRouter['routeTree'], TFrom>['types']['allContext']>
|
|
32
|
+
|
|
33
|
+
export type UseRouteContextResult<
|
|
34
|
+
TRouter extends AnyRouter,
|
|
35
|
+
TFrom,
|
|
36
|
+
TStrict extends boolean,
|
|
37
|
+
TSelected,
|
|
38
|
+
> = unknown extends TSelected
|
|
39
|
+
? ResolveRouteContext<TRouter, TFrom, TStrict>
|
|
40
|
+
: TSelected
|
|
41
|
+
|
|
42
|
+
export type UseRouteContextRoute<out TFrom> = <
|
|
43
|
+
TRouter extends AnyRouter = RegisteredRouter,
|
|
44
|
+
TSelected = unknown,
|
|
45
|
+
>(
|
|
46
|
+
opts?: UseRouteContextBaseOptions<TRouter, TFrom, true, TSelected>,
|
|
47
|
+
) => Accessor<UseRouteContextResult<TRouter, TFrom, true, TSelected>>
|
|
48
|
+
|
|
49
|
+
export function useRouteContext<
|
|
50
|
+
TRouter extends AnyRouter = RegisteredRouter,
|
|
51
|
+
const TFrom extends string | undefined = undefined,
|
|
52
|
+
TStrict extends boolean = true,
|
|
53
|
+
TSelected = unknown,
|
|
54
|
+
>(
|
|
55
|
+
opts: UseRouteContextOptions<TRouter, TFrom, TStrict, TSelected>,
|
|
56
|
+
): Accessor<UseRouteContextResult<TRouter, TFrom, TStrict, TSelected>> {
|
|
57
|
+
return useMatch({
|
|
58
|
+
...(opts as any),
|
|
59
|
+
select: (match) =>
|
|
60
|
+
opts.select ? opts.select(match.context) : match.context,
|
|
61
|
+
}) as any
|
|
62
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import * as Solid from 'solid-js'
|
|
2
|
+
import warning from 'tiny-warning'
|
|
3
|
+
import { getRouterContext } from './routerContext'
|
|
4
|
+
import type { AnyRouter, RegisteredRouter } from './router'
|
|
5
|
+
|
|
6
|
+
export function useRouter<TRouter extends AnyRouter = RegisteredRouter>(opts?: {
|
|
7
|
+
warn?: boolean
|
|
8
|
+
}): TRouter {
|
|
9
|
+
const value = Solid.useContext(getRouterContext() as any)
|
|
10
|
+
warning(
|
|
11
|
+
!((opts?.warn ?? true) && !value),
|
|
12
|
+
'useRouter must be used inside a <RouterProvider> component!',
|
|
13
|
+
)
|
|
14
|
+
return value as any
|
|
15
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { useStore } from '@tanstack/solid-store'
|
|
2
|
+
import { useRouter } from './useRouter'
|
|
3
|
+
import type { AnyRouter, RegisteredRouter, RouterState } from './router'
|
|
4
|
+
import type { Accessor } from 'solid-js'
|
|
5
|
+
|
|
6
|
+
export type UseRouterStateOptions<TRouter extends AnyRouter, TSelected> = {
|
|
7
|
+
router?: TRouter
|
|
8
|
+
select?: (state: RouterState<TRouter['routeTree']>) => TSelected
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export type UseRouterStateResult<
|
|
12
|
+
TRouter extends AnyRouter,
|
|
13
|
+
TSelected,
|
|
14
|
+
> = unknown extends TSelected ? RouterState<TRouter['routeTree']> : TSelected
|
|
15
|
+
|
|
16
|
+
export function useRouterState<
|
|
17
|
+
TRouter extends AnyRouter = RegisteredRouter,
|
|
18
|
+
TSelected = unknown,
|
|
19
|
+
>(
|
|
20
|
+
opts?: UseRouterStateOptions<TRouter, TSelected>,
|
|
21
|
+
): Accessor<UseRouterStateResult<TRouter, TSelected>> {
|
|
22
|
+
const contextRouter = useRouter<TRouter>({
|
|
23
|
+
warn: opts?.router === undefined,
|
|
24
|
+
})
|
|
25
|
+
const router = opts?.router || contextRouter
|
|
26
|
+
|
|
27
|
+
return useStore(router.__store, (state) => {
|
|
28
|
+
if (opts?.select) return opts.select(state)
|
|
29
|
+
|
|
30
|
+
return state
|
|
31
|
+
}) as Accessor<UseRouterStateResult<TRouter, TSelected>>
|
|
32
|
+
}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { useMatch } from './useMatch'
|
|
2
|
+
import type { ThrowConstraint } from './useMatch'
|
|
3
|
+
import type { Accessor } from 'solid-js'
|
|
4
|
+
import type { FullSearchSchema, RouteById } from './routeInfo'
|
|
5
|
+
import type { AnyRouter, RegisteredRouter } from './router'
|
|
6
|
+
import type { StrictOrFrom } from './utils'
|
|
7
|
+
import type { Expand, ThrowOrOptional } from '@tanstack/router-core'
|
|
8
|
+
|
|
9
|
+
export interface UseSearchBaseOptions<
|
|
10
|
+
TRouter extends AnyRouter,
|
|
11
|
+
TFrom,
|
|
12
|
+
TStrict extends boolean,
|
|
13
|
+
TThrow extends boolean,
|
|
14
|
+
TSelected,
|
|
15
|
+
> {
|
|
16
|
+
select?: (state: ResolveSearch<TRouter, TFrom, TStrict>) => TSelected
|
|
17
|
+
shouldThrow?: TThrow
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export type UseSearchOptions<
|
|
21
|
+
TRouter extends AnyRouter,
|
|
22
|
+
TFrom,
|
|
23
|
+
TStrict extends boolean,
|
|
24
|
+
TThrow extends boolean,
|
|
25
|
+
TSelected,
|
|
26
|
+
> = StrictOrFrom<TRouter, TFrom, TStrict> &
|
|
27
|
+
UseSearchBaseOptions<TRouter, TFrom, TStrict, TThrow, TSelected>
|
|
28
|
+
|
|
29
|
+
export type UseSearchResult<
|
|
30
|
+
TRouter extends AnyRouter,
|
|
31
|
+
TFrom,
|
|
32
|
+
TStrict extends boolean,
|
|
33
|
+
TSelected,
|
|
34
|
+
> = unknown extends TSelected
|
|
35
|
+
? ResolveSearch<TRouter, TFrom, TStrict>
|
|
36
|
+
: TSelected
|
|
37
|
+
|
|
38
|
+
export type ResolveSearch<
|
|
39
|
+
TRouter extends AnyRouter,
|
|
40
|
+
TFrom,
|
|
41
|
+
TStrict extends boolean,
|
|
42
|
+
> = TStrict extends false
|
|
43
|
+
? FullSearchSchema<TRouter['routeTree']>
|
|
44
|
+
: Expand<RouteById<TRouter['routeTree'], TFrom>['types']['fullSearchSchema']>
|
|
45
|
+
|
|
46
|
+
export type UseSearchRoute<out TFrom> = <
|
|
47
|
+
TRouter extends AnyRouter = RegisteredRouter,
|
|
48
|
+
TSelected = unknown,
|
|
49
|
+
>(
|
|
50
|
+
opts?: UseSearchBaseOptions<
|
|
51
|
+
TRouter,
|
|
52
|
+
TFrom,
|
|
53
|
+
/* TStrict */ true,
|
|
54
|
+
/* TThrow */ true,
|
|
55
|
+
TSelected
|
|
56
|
+
>,
|
|
57
|
+
) => Accessor<UseSearchResult<TRouter, TFrom, true, TSelected>>
|
|
58
|
+
|
|
59
|
+
export function useSearch<
|
|
60
|
+
TRouter extends AnyRouter = RegisteredRouter,
|
|
61
|
+
const TFrom extends string | undefined = undefined,
|
|
62
|
+
TStrict extends boolean = true,
|
|
63
|
+
TThrow extends boolean = true,
|
|
64
|
+
TSelected = unknown,
|
|
65
|
+
>(
|
|
66
|
+
opts: UseSearchOptions<
|
|
67
|
+
TRouter,
|
|
68
|
+
TFrom,
|
|
69
|
+
TStrict,
|
|
70
|
+
ThrowConstraint<TStrict, TThrow>,
|
|
71
|
+
TSelected
|
|
72
|
+
>,
|
|
73
|
+
): Accessor<
|
|
74
|
+
ThrowOrOptional<UseSearchResult<TRouter, TFrom, TStrict, TSelected>, TThrow>
|
|
75
|
+
> {
|
|
76
|
+
return useMatch({
|
|
77
|
+
from: opts.from!,
|
|
78
|
+
strict: opts.strict,
|
|
79
|
+
shouldThrow: opts.shouldThrow,
|
|
80
|
+
select: (match: any) => {
|
|
81
|
+
return opts.select ? opts.select(match.search) : match.search
|
|
82
|
+
},
|
|
83
|
+
}) as any
|
|
84
|
+
}
|
package/src/utils.ts
ADDED
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import * as Solid from 'solid-js'
|
|
2
|
+
import type { RouteIds } from './routeInfo'
|
|
3
|
+
import type { AnyRouter } from './router'
|
|
4
|
+
import type { ConstrainLiteral } from '@tanstack/router-core'
|
|
5
|
+
|
|
6
|
+
export type StrictOrFrom<
|
|
7
|
+
TRouter extends AnyRouter,
|
|
8
|
+
TFrom,
|
|
9
|
+
TStrict extends boolean = true,
|
|
10
|
+
> = TStrict extends false
|
|
11
|
+
? {
|
|
12
|
+
from?: never
|
|
13
|
+
strict: TStrict
|
|
14
|
+
}
|
|
15
|
+
: {
|
|
16
|
+
from: ConstrainLiteral<TFrom, RouteIds<TRouter['routeTree']>>
|
|
17
|
+
strict?: TStrict
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export const useLayoutEffect =
|
|
21
|
+
typeof window !== 'undefined' ? Solid.createRenderEffect : Solid.createEffect
|
|
22
|
+
|
|
23
|
+
export const usePrevious = (fn: () => boolean) => {
|
|
24
|
+
return Solid.createMemo(
|
|
25
|
+
(
|
|
26
|
+
prev: { current: boolean | null; previous: boolean | null } = {
|
|
27
|
+
current: null,
|
|
28
|
+
previous: null,
|
|
29
|
+
},
|
|
30
|
+
) => {
|
|
31
|
+
const current = fn()
|
|
32
|
+
|
|
33
|
+
if (prev.current !== current) {
|
|
34
|
+
prev.previous = prev.current
|
|
35
|
+
prev.current = current
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
return prev
|
|
39
|
+
},
|
|
40
|
+
)
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* React hook to wrap `IntersectionObserver`.
|
|
45
|
+
*
|
|
46
|
+
* This hook will create an `IntersectionObserver` and observe the ref passed to it.
|
|
47
|
+
*
|
|
48
|
+
* When the intersection changes, the callback will be called with the `IntersectionObserverEntry`.
|
|
49
|
+
*
|
|
50
|
+
* @param ref - The ref to observe
|
|
51
|
+
* @param intersectionObserverOptions - The options to pass to the IntersectionObserver
|
|
52
|
+
* @param options - The options to pass to the hook
|
|
53
|
+
* @param callback - The callback to call when the intersection changes
|
|
54
|
+
* @returns The IntersectionObserver instance
|
|
55
|
+
* @example
|
|
56
|
+
* ```tsx
|
|
57
|
+
* const MyComponent = () => {
|
|
58
|
+
* const ref = React.useRef<HTMLDivElement>(null)
|
|
59
|
+
* useIntersectionObserver(
|
|
60
|
+
* ref,
|
|
61
|
+
* (entry) => { doSomething(entry) },
|
|
62
|
+
* { rootMargin: '10px' },
|
|
63
|
+
* { disabled: false }
|
|
64
|
+
* )
|
|
65
|
+
* return <div ref={ref} />
|
|
66
|
+
* ```
|
|
67
|
+
*/
|
|
68
|
+
export function useIntersectionObserver<T extends Element>(
|
|
69
|
+
ref: Solid.Accessor<T | null>,
|
|
70
|
+
callback: (entry: IntersectionObserverEntry | undefined) => void,
|
|
71
|
+
intersectionObserverOptions: IntersectionObserverInit = {},
|
|
72
|
+
options: { disabled?: boolean } = {},
|
|
73
|
+
): Solid.Accessor<IntersectionObserver | null> {
|
|
74
|
+
const isIntersectionObserverAvailable =
|
|
75
|
+
typeof IntersectionObserver === 'function'
|
|
76
|
+
let observerRef: IntersectionObserver | null = null
|
|
77
|
+
|
|
78
|
+
Solid.createEffect(() => {
|
|
79
|
+
const r = ref()
|
|
80
|
+
if (!r || !isIntersectionObserverAvailable || options.disabled) {
|
|
81
|
+
return
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
observerRef = new IntersectionObserver(([entry]) => {
|
|
85
|
+
callback(entry)
|
|
86
|
+
}, intersectionObserverOptions)
|
|
87
|
+
|
|
88
|
+
observerRef.observe(r)
|
|
89
|
+
|
|
90
|
+
Solid.onCleanup(() => {
|
|
91
|
+
observerRef?.disconnect()
|
|
92
|
+
})
|
|
93
|
+
})
|
|
94
|
+
|
|
95
|
+
return () => observerRef
|
|
96
|
+
}
|