@bleedingdev/modern-js-renderer-solid 0.0.0-stage → 3.9.3-ultramodern.2
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/dist/esm/actions.js +283 -0
- package/dist/esm/application-router.js +25 -0
- package/dist/esm/client.js +49 -0
- package/dist/esm/entry-application.js +60 -0
- package/dist/esm/entry-client.js +23 -0
- package/dist/esm/federation-context.js +25 -0
- package/dist/esm/federation-ssr.js +84 -0
- package/dist/esm/federation.js +83 -0
- package/dist/esm/i18n/I18nProvider.js +33 -0
- package/dist/esm/i18n/LocalizedLink.js +74 -0
- package/dist/esm/i18n/context.js +3 -0
- package/dist/esm/i18n/index.js +8 -0
- package/dist/esm/i18n/languageSync.js +50 -0
- package/dist/esm/i18n/types.js +0 -0
- package/dist/esm/i18n/useI18n.js +74 -0
- package/dist/esm/index.js +58 -0
- package/dist/esm/manifest.js +150 -0
- package/dist/esm/route-completion.js +150 -0
- package/dist/esm/route-data-error.js +108 -0
- package/dist/esm/router-binding/Asset.js +201 -0
- package/dist/esm/router-binding/CatchBoundary.js +94 -0
- package/dist/esm/router-binding/ClientOnly.js +26 -0
- package/dist/esm/router-binding/HeadContent.js +8 -0
- package/dist/esm/router-binding/LICENSE +21 -0
- package/dist/esm/router-binding/Match.js +319 -0
- package/dist/esm/router-binding/Matches.js +117 -0
- package/dist/esm/router-binding/PROVENANCE.json +94 -0
- package/dist/esm/router-binding/RouterProvider.js +51 -0
- package/dist/esm/router-binding/SafeFragment.js +5 -0
- package/dist/esm/router-binding/ScriptOnce.js +15 -0
- package/dist/esm/router-binding/Scripts.js +30 -0
- package/dist/esm/router-binding/ScrollRestoration.js +16 -0
- package/dist/esm/router-binding/Transitioner.js +103 -0
- package/dist/esm/router-binding/awaited.js +48 -0
- package/dist/esm/router-binding/fileRoute.js +83 -0
- package/dist/esm/router-binding/flightData.js +23 -0
- package/dist/esm/router-binding/headContentUtils.js +162 -0
- package/dist/esm/router-binding/history.js +0 -0
- package/dist/esm/router-binding/index.js +35 -0
- package/dist/esm/router-binding/lazyRouteComponent.js +30 -0
- package/dist/esm/router-binding/link.js +389 -0
- package/dist/esm/router-binding/matchContext.js +7 -0
- package/dist/esm/router-binding/nonRouteComponentContext.js +13 -0
- package/dist/esm/router-binding/not-found.js +35 -0
- package/dist/esm/router-binding/publicMatchData.js +447 -0
- package/dist/esm/router-binding/registryTransfer.js +210 -0
- package/dist/esm/router-binding/renderRouteNotFound.js +23 -0
- package/dist/esm/router-binding/route.js +143 -0
- package/dist/esm/router-binding/router.js +13 -0
- package/dist/esm/router-binding/routerContext.js +3 -0
- package/dist/esm/router-binding/routerStores.js +50 -0
- package/dist/esm/router-binding/scroll-restoration.js +13 -0
- package/dist/esm/router-binding/typePrimitives.js +0 -0
- package/dist/esm/router-binding/useBlocker.js +152 -0
- package/dist/esm/router-binding/useCanGoBack.js +7 -0
- package/dist/esm/router-binding/useLoaderData.js +9 -0
- package/dist/esm/router-binding/useLoaderDeps.js +8 -0
- package/dist/esm/router-binding/useLocation.js +14 -0
- package/dist/esm/router-binding/useMatch.js +28 -0
- package/dist/esm/router-binding/useNavigate.js +19 -0
- package/dist/esm/router-binding/useParams.js +13 -0
- package/dist/esm/router-binding/useRouteContext.js +8 -0
- package/dist/esm/router-binding/useRouter.js +10 -0
- package/dist/esm/router-binding/useRouterState.js +19 -0
- package/dist/esm/router-binding/useSearch.js +13 -0
- package/dist/esm/router-binding/utils.js +23 -0
- package/dist/esm/router.js +187 -0
- package/dist/esm-node/actions.js +263 -0
- package/dist/esm-node/application-router.js +25 -0
- package/dist/esm-node/client.js +49 -0
- package/dist/esm-node/entry-application.js +110 -0
- package/dist/esm-node/entry-client.js +23 -0
- package/dist/esm-node/entry-server.js +47 -0
- package/dist/esm-node/federation-context.js +25 -0
- package/dist/esm-node/federation-ssr.js +84 -0
- package/dist/esm-node/federation.js +83 -0
- package/dist/esm-node/i18n/I18nProvider.js +42 -0
- package/dist/esm-node/i18n/LocalizedLink.js +142 -0
- package/dist/esm-node/i18n/context.js +3 -0
- package/dist/esm-node/i18n/index.js +8 -0
- package/dist/esm-node/i18n/languageSync.js +50 -0
- package/dist/esm-node/i18n/types.js +1 -0
- package/dist/esm-node/i18n/useI18n.js +74 -0
- package/dist/esm-node/index.js +58 -0
- package/dist/esm-node/manifest.js +150 -0
- package/dist/esm-node/native-promise-serialization.js +113 -0
- package/dist/esm-node/plugin/compiler.js +209 -0
- package/dist/esm-node/plugin/create.js +235 -0
- package/dist/esm-node/plugin/index.js +73 -0
- package/dist/esm-node/plugin/profile.js +52 -0
- package/dist/esm-node/route-completion.js +160 -0
- package/dist/esm-node/route-data-error.js +108 -0
- package/dist/esm-node/router-binding/Asset.js +171 -0
- package/dist/esm-node/router-binding/CatchBoundary.js +136 -0
- package/dist/esm-node/router-binding/ClientOnly.js +46 -0
- package/dist/esm-node/router-binding/HeadContent.js +8 -0
- package/dist/esm-node/router-binding/LICENSE +21 -0
- package/dist/esm-node/router-binding/Match.js +660 -0
- package/dist/esm-node/router-binding/Matches.js +161 -0
- package/dist/esm-node/router-binding/PROVENANCE.json +94 -0
- package/dist/esm-node/router-binding/RouterProvider.js +87 -0
- package/dist/esm-node/router-binding/SafeFragment.js +5 -0
- package/dist/esm-node/router-binding/ScriptOnce.js +16 -0
- package/dist/esm-node/router-binding/Scripts.js +49 -0
- package/dist/esm-node/router-binding/ScrollRestoration.js +16 -0
- package/dist/esm-node/router-binding/Transitioner.js +103 -0
- package/dist/esm-node/router-binding/awaited.js +75 -0
- package/dist/esm-node/router-binding/fileRoute.js +83 -0
- package/dist/esm-node/router-binding/flightData.js +23 -0
- package/dist/esm-node/router-binding/headContentUtils.js +162 -0
- package/dist/esm-node/router-binding/history.js +1 -0
- package/dist/esm-node/router-binding/index.js +35 -0
- package/dist/esm-node/router-binding/lazyRouteComponent.js +30 -0
- package/dist/esm-node/router-binding/link.js +399 -0
- package/dist/esm-node/router-binding/matchContext.js +7 -0
- package/dist/esm-node/router-binding/nonRouteComponentContext.js +22 -0
- package/dist/esm-node/router-binding/not-found.js +49 -0
- package/dist/esm-node/router-binding/publicMatchData.js +447 -0
- package/dist/esm-node/router-binding/registryTransfer.js +210 -0
- package/dist/esm-node/router-binding/renderRouteNotFound.js +22 -0
- package/dist/esm-node/router-binding/route.js +162 -0
- package/dist/esm-node/router-binding/router.js +13 -0
- package/dist/esm-node/router-binding/routerContext.js +3 -0
- package/dist/esm-node/router-binding/routerStores.js +50 -0
- package/dist/esm-node/router-binding/scroll-restoration.js +12 -0
- package/dist/esm-node/router-binding/typePrimitives.js +1 -0
- package/dist/esm-node/router-binding/useBlocker.js +152 -0
- package/dist/esm-node/router-binding/useCanGoBack.js +7 -0
- package/dist/esm-node/router-binding/useLoaderData.js +9 -0
- package/dist/esm-node/router-binding/useLoaderDeps.js +8 -0
- package/dist/esm-node/router-binding/useLocation.js +14 -0
- package/dist/esm-node/router-binding/useMatch.js +28 -0
- package/dist/esm-node/router-binding/useNavigate.js +19 -0
- package/dist/esm-node/router-binding/useParams.js +13 -0
- package/dist/esm-node/router-binding/useRouteContext.js +8 -0
- package/dist/esm-node/router-binding/useRouter.js +10 -0
- package/dist/esm-node/router-binding/useRouterState.js +19 -0
- package/dist/esm-node/router-binding/useSearch.js +13 -0
- package/dist/esm-node/router-binding/utils.js +23 -0
- package/dist/esm-node/router.js +187 -0
- package/dist/esm-node/server.js +396 -0
- package/dist/types/actions.d.ts +45 -0
- package/dist/types/application-router.d.ts +5 -0
- package/dist/types/client.d.ts +23 -0
- package/dist/types/entry-application.d.ts +10 -0
- package/dist/types/entry-client.d.ts +5 -0
- package/dist/types/entry-server.d.ts +5 -0
- package/dist/types/federation-context.d.ts +16 -0
- package/dist/types/federation-ssr.d.ts +21 -0
- package/dist/types/federation.d.ts +30 -0
- package/dist/types/i18n/I18nProvider.d.ts +21 -0
- package/dist/types/i18n/LocalizedLink.d.ts +43 -0
- package/dist/types/i18n/context.d.ts +11 -0
- package/dist/types/i18n/index.d.ts +9 -0
- package/dist/types/i18n/languageSync.d.ts +31 -0
- package/dist/types/i18n/types.d.ts +33 -0
- package/dist/types/i18n/useI18n.d.ts +24 -0
- package/dist/types/index.d.ts +41 -0
- package/dist/types/manifest.d.ts +55 -0
- package/dist/types/native-promise-serialization.d.ts +9 -0
- package/dist/types/plugin/compiler.d.ts +6 -0
- package/dist/types/plugin/create.d.ts +21 -0
- package/dist/types/plugin/index.d.ts +3 -0
- package/dist/types/plugin/lazy-modules.d.cts +15 -0
- package/dist/types/plugin/preserve-import-loader.d.cts +3 -0
- package/dist/types/plugin/profile.d.ts +2 -0
- package/dist/types/plugin/solid-loader.d.cts +2 -0
- package/dist/types/plugin/svg-component-template.d.cts +6 -0
- package/dist/types/route-completion.d.ts +21 -0
- package/dist/types/route-data-error.d.ts +17 -0
- package/dist/types/router-binding/Asset.d.ts +3 -0
- package/dist/types/router-binding/CatchBoundary.d.ts +13 -0
- package/dist/types/router-binding/ClientOnly.d.ts +31 -0
- package/dist/types/router-binding/HeadContent.d.ts +13 -0
- package/dist/types/router-binding/Match.d.ts +6 -0
- package/dist/types/router-binding/Matches.d.ts +26 -0
- package/dist/types/router-binding/RouterProvider.d.ts +10 -0
- package/dist/types/router-binding/SafeFragment.d.ts +2 -0
- package/dist/types/router-binding/ScriptOnce.d.ts +6 -0
- package/dist/types/router-binding/Scripts.d.ts +2 -0
- package/dist/types/router-binding/ScrollRestoration.d.ts +14 -0
- package/dist/types/router-binding/Transitioner.d.ts +2 -0
- package/dist/types/router-binding/awaited.d.ts +11 -0
- package/dist/types/router-binding/fileRoute.d.ts +54 -0
- package/dist/types/router-binding/flightData.d.ts +38 -0
- package/dist/types/router-binding/headContentUtils.d.ts +15 -0
- package/dist/types/router-binding/history.d.ts +8 -0
- package/dist/types/router-binding/index.d.ts +45 -0
- package/dist/types/router-binding/lazyRouteComponent.d.ts +2 -0
- package/dist/types/router-binding/link.d.ts +43 -0
- package/dist/types/router-binding/matchContext.d.ts +7 -0
- package/dist/types/router-binding/nonRouteComponentContext.d.ts +5 -0
- package/dist/types/router-binding/not-found.d.ts +11 -0
- package/dist/types/router-binding/publicMatchData.d.ts +19 -0
- package/dist/types/router-binding/registryTransfer.d.ts +47 -0
- package/dist/types/router-binding/renderRouteNotFound.d.ts +11 -0
- package/dist/types/router-binding/route.d.ts +105 -0
- package/dist/types/router-binding/router.d.ts +70 -0
- package/dist/types/router-binding/routerContext.d.ts +3 -0
- package/dist/types/router-binding/routerStores.d.ts +2 -0
- package/dist/types/router-binding/scroll-restoration.d.ts +2 -0
- package/dist/types/router-binding/typePrimitives.d.ts +10 -0
- package/dist/types/router-binding/useBlocker.d.ts +70 -0
- package/dist/types/router-binding/useCanGoBack.d.ts +2 -0
- package/dist/types/router-binding/useLoaderData.d.ts +8 -0
- package/dist/types/router-binding/useLoaderDeps.d.ts +8 -0
- package/dist/types/router-binding/useLocation.d.ts +7 -0
- package/dist/types/router-binding/useMatch.d.ts +10 -0
- package/dist/types/router-binding/useNavigate.d.ts +5 -0
- package/dist/types/router-binding/useParams.d.ts +9 -0
- package/dist/types/router-binding/useRouteContext.d.ts +4 -0
- package/dist/types/router-binding/useRouter.d.ts +4 -0
- package/dist/types/router-binding/useRouterState.d.ts +8 -0
- package/dist/types/router-binding/useSearch.d.ts +9 -0
- package/dist/types/router-binding/utils.d.ts +25 -0
- package/dist/types/router.d.ts +31 -0
- package/dist/types/server.d.ts +47 -0
- package/package.json +123 -4
- package/src/actions.tsx +437 -0
- package/src/application-router.tsx +41 -0
- package/src/client.ts +106 -0
- package/src/entry-application.tsx +73 -0
- package/src/entry-client.tsx +48 -0
- package/src/entry-server.tsx +85 -0
- package/src/federation-context.ts +47 -0
- package/src/federation-ssr.ts +117 -0
- package/src/federation.tsx +193 -0
- package/src/i18n/I18nProvider.tsx +54 -0
- package/src/i18n/LocalizedLink.tsx +122 -0
- package/src/i18n/context.ts +13 -0
- package/src/i18n/index.ts +35 -0
- package/src/i18n/languageSync.ts +113 -0
- package/src/i18n/types.ts +35 -0
- package/src/i18n/useI18n.ts +121 -0
- package/src/index.ts +41 -0
- package/src/manifest.ts +337 -0
- package/src/native-promise-serialization.ts +167 -0
- package/src/plugin/compiler.ts +320 -0
- package/src/plugin/create.ts +270 -0
- package/src/plugin/index.ts +72 -0
- package/src/plugin/lazy-modules.cjs +146 -0
- package/src/plugin/preserve-import-loader.cjs +46 -0
- package/src/plugin/profile.ts +42 -0
- package/src/plugin/solid-loader.cjs +83 -0
- package/src/plugin/svg-component-template.cjs +19 -0
- package/src/route-completion.tsx +222 -0
- package/src/route-data-error.ts +175 -0
- package/src/router-binding/Asset.tsx +283 -0
- package/src/router-binding/CatchBoundary.tsx +130 -0
- package/src/router-binding/ClientOnly.tsx +76 -0
- package/src/router-binding/HeadContent.tsx +23 -0
- package/src/router-binding/LICENSE +21 -0
- package/src/router-binding/Match.tsx +397 -0
- package/src/router-binding/Matches.tsx +242 -0
- package/src/router-binding/PROVENANCE.json +94 -0
- package/src/router-binding/RouterProvider.tsx +129 -0
- package/src/router-binding/SafeFragment.tsx +5 -0
- package/src/router-binding/ScriptOnce.tsx +23 -0
- package/src/router-binding/Scripts.tsx +44 -0
- package/src/router-binding/ScrollRestoration.tsx +49 -0
- package/src/router-binding/Transitioner.tsx +172 -0
- package/src/router-binding/awaited.tsx +71 -0
- package/src/router-binding/fileRoute.ts +268 -0
- package/src/router-binding/flightData.ts +90 -0
- package/src/router-binding/headContentUtils.tsx +290 -0
- package/src/router-binding/history.ts +9 -0
- package/src/router-binding/index.tsx +318 -0
- package/src/router-binding/lazyRouteComponent.tsx +70 -0
- package/src/router-binding/link.tsx +865 -0
- package/src/router-binding/matchContext.tsx +15 -0
- package/src/router-binding/nonRouteComponentContext.tsx +23 -0
- package/src/router-binding/not-found.tsx +65 -0
- package/src/router-binding/publicMatchData.ts +674 -0
- package/src/router-binding/registryTransfer.ts +383 -0
- package/src/router-binding/renderRouteNotFound.tsx +53 -0
- package/src/router-binding/route.tsx +665 -0
- package/src/router-binding/router.ts +121 -0
- package/src/router-binding/routerContext.tsx +6 -0
- package/src/router-binding/routerStores.ts +85 -0
- package/src/router-binding/scroll-restoration.tsx +15 -0
- package/src/router-binding/typePrimitives.ts +74 -0
- package/src/router-binding/useBlocker.tsx +359 -0
- package/src/router-binding/useCanGoBack.ts +9 -0
- package/src/router-binding/useLoaderData.tsx +50 -0
- package/src/router-binding/useLoaderDeps.tsx +46 -0
- package/src/router-binding/useLocation.tsx +43 -0
- package/src/router-binding/useMatch.tsx +111 -0
- package/src/router-binding/useNavigate.tsx +43 -0
- package/src/router-binding/useParams.tsx +72 -0
- package/src/router-binding/useRouteContext.ts +30 -0
- package/src/router-binding/useRouter.tsx +17 -0
- package/src/router-binding/useRouterState.tsx +50 -0
- package/src/router-binding/useSearch.tsx +72 -0
- package/src/router-binding/utils.ts +59 -0
- package/src/router.ts +376 -0
- package/src/server.ts +645 -0
- package/README.md +0 -3
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import type {
|
|
2
|
+
AnyRouter,
|
|
3
|
+
RegisteredRouter,
|
|
4
|
+
ResolveUseLoaderData,
|
|
5
|
+
StrictOrFrom,
|
|
6
|
+
UseLoaderDataResult,
|
|
7
|
+
} from '@tanstack/router-core';
|
|
8
|
+
import type { Accessor } from 'solid-js';
|
|
9
|
+
import { useMatch } from './useMatch';
|
|
10
|
+
|
|
11
|
+
export interface UseLoaderDataBaseOptions<
|
|
12
|
+
TRouter extends AnyRouter,
|
|
13
|
+
TFrom,
|
|
14
|
+
TStrict extends boolean,
|
|
15
|
+
TSelected,
|
|
16
|
+
> {
|
|
17
|
+
select?: (match: ResolveUseLoaderData<TRouter, TFrom, TStrict>) => TSelected;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export type UseLoaderDataOptions<
|
|
21
|
+
TRouter extends AnyRouter,
|
|
22
|
+
TFrom extends string | undefined,
|
|
23
|
+
TStrict extends boolean,
|
|
24
|
+
TSelected,
|
|
25
|
+
> = StrictOrFrom<TRouter, TFrom, TStrict> &
|
|
26
|
+
UseLoaderDataBaseOptions<TRouter, TFrom, TStrict, TSelected>;
|
|
27
|
+
|
|
28
|
+
export type UseLoaderDataRoute<out TId> = <
|
|
29
|
+
TRouter extends AnyRouter = RegisteredRouter,
|
|
30
|
+
TSelected = unknown,
|
|
31
|
+
>(
|
|
32
|
+
opts?: UseLoaderDataBaseOptions<TRouter, TId, true, TSelected>,
|
|
33
|
+
) => Accessor<UseLoaderDataResult<TRouter, TId, true, TSelected>>;
|
|
34
|
+
|
|
35
|
+
export function useLoaderData<
|
|
36
|
+
TRouter extends AnyRouter = RegisteredRouter,
|
|
37
|
+
const TFrom extends string | undefined = undefined,
|
|
38
|
+
TStrict extends boolean = true,
|
|
39
|
+
TSelected = unknown,
|
|
40
|
+
>(
|
|
41
|
+
opts: UseLoaderDataOptions<TRouter, TFrom, TStrict, TSelected>,
|
|
42
|
+
): Accessor<UseLoaderDataResult<TRouter, TFrom, TStrict, TSelected>> {
|
|
43
|
+
return useMatch({
|
|
44
|
+
from: opts.from!,
|
|
45
|
+
strict: opts.strict,
|
|
46
|
+
select: match => {
|
|
47
|
+
return opts.select ? opts.select(match.loaderData) : match.loaderData;
|
|
48
|
+
},
|
|
49
|
+
}) as any;
|
|
50
|
+
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import type {
|
|
2
|
+
AnyRouter,
|
|
3
|
+
RegisteredRouter,
|
|
4
|
+
ResolveUseLoaderDeps,
|
|
5
|
+
StrictOrFrom,
|
|
6
|
+
UseLoaderDepsResult,
|
|
7
|
+
} from '@tanstack/router-core';
|
|
8
|
+
import type { Accessor } from 'solid-js';
|
|
9
|
+
import { useMatch } from './useMatch';
|
|
10
|
+
|
|
11
|
+
export interface UseLoaderDepsBaseOptions<
|
|
12
|
+
TRouter extends AnyRouter,
|
|
13
|
+
TFrom,
|
|
14
|
+
TSelected,
|
|
15
|
+
> {
|
|
16
|
+
select?: (deps: ResolveUseLoaderDeps<TRouter, TFrom>) => TSelected;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export type UseLoaderDepsOptions<
|
|
20
|
+
TRouter extends AnyRouter,
|
|
21
|
+
TFrom extends string | undefined,
|
|
22
|
+
TSelected,
|
|
23
|
+
> = StrictOrFrom<TRouter, TFrom> &
|
|
24
|
+
UseLoaderDepsBaseOptions<TRouter, TFrom, TSelected>;
|
|
25
|
+
|
|
26
|
+
export type UseLoaderDepsRoute<out TId> = <
|
|
27
|
+
TRouter extends AnyRouter = RegisteredRouter,
|
|
28
|
+
TSelected = unknown,
|
|
29
|
+
>(
|
|
30
|
+
opts?: UseLoaderDepsBaseOptions<TRouter, TId, TSelected>,
|
|
31
|
+
) => Accessor<UseLoaderDepsResult<TRouter, TId, TSelected>>;
|
|
32
|
+
|
|
33
|
+
export function useLoaderDeps<
|
|
34
|
+
TRouter extends AnyRouter = RegisteredRouter,
|
|
35
|
+
const TFrom extends string | undefined = undefined,
|
|
36
|
+
TSelected = unknown,
|
|
37
|
+
>(
|
|
38
|
+
opts: UseLoaderDepsOptions<TRouter, TFrom, TSelected>,
|
|
39
|
+
): Accessor<UseLoaderDepsResult<TRouter, TFrom, TSelected>> {
|
|
40
|
+
return useMatch({
|
|
41
|
+
...opts,
|
|
42
|
+
select: match => {
|
|
43
|
+
return opts.select ? opts.select(match.loaderDeps) : match.loaderDeps;
|
|
44
|
+
},
|
|
45
|
+
}) as Accessor<UseLoaderDepsResult<TRouter, TFrom, TSelected>>;
|
|
46
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import type {
|
|
2
|
+
AnyRouter,
|
|
3
|
+
RegisteredRouter,
|
|
4
|
+
RouterState,
|
|
5
|
+
} from '@tanstack/router-core';
|
|
6
|
+
import { replaceEqualDeep } from '@tanstack/router-core';
|
|
7
|
+
import type { Accessor } from 'solid-js';
|
|
8
|
+
import * as Solid from 'solid-js';
|
|
9
|
+
import { useRouter } from './useRouter';
|
|
10
|
+
|
|
11
|
+
export interface UseLocationBaseOptions<TRouter extends AnyRouter, TSelected> {
|
|
12
|
+
select?: (state: RouterState<TRouter['routeTree']>['location']) => TSelected;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export type UseLocationResult<
|
|
16
|
+
TRouter extends AnyRouter,
|
|
17
|
+
TSelected,
|
|
18
|
+
> = unknown extends TSelected
|
|
19
|
+
? RouterState<TRouter['routeTree']>['location']
|
|
20
|
+
: TSelected;
|
|
21
|
+
|
|
22
|
+
export function useLocation<
|
|
23
|
+
TRouter extends AnyRouter = RegisteredRouter,
|
|
24
|
+
TSelected = unknown,
|
|
25
|
+
>(
|
|
26
|
+
opts?: UseLocationBaseOptions<TRouter, TSelected>,
|
|
27
|
+
): Accessor<UseLocationResult<TRouter, TSelected>> {
|
|
28
|
+
const router = useRouter<TRouter>();
|
|
29
|
+
|
|
30
|
+
if (!opts?.select) {
|
|
31
|
+
return (() => router.stores.location.get()) as Accessor<
|
|
32
|
+
UseLocationResult<TRouter, TSelected>
|
|
33
|
+
>;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
const select = opts.select;
|
|
37
|
+
|
|
38
|
+
return Solid.createMemo((prev: TSelected | undefined) => {
|
|
39
|
+
const res = select(router.stores.location.get());
|
|
40
|
+
if (prev === undefined) return res;
|
|
41
|
+
return replaceEqualDeep(prev, res);
|
|
42
|
+
}) as Accessor<UseLocationResult<TRouter, TSelected>>;
|
|
43
|
+
}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import type {
|
|
2
|
+
AnyRouter,
|
|
3
|
+
MakeRouteMatch,
|
|
4
|
+
MakeRouteMatchUnion,
|
|
5
|
+
RegisteredRouter,
|
|
6
|
+
StrictOrFrom,
|
|
7
|
+
ThrowConstraint,
|
|
8
|
+
ThrowOrOptional,
|
|
9
|
+
} from '@tanstack/router-core';
|
|
10
|
+
import { invariant, replaceEqualDeep } from '@tanstack/router-core';
|
|
11
|
+
import * as Solid from 'solid-js';
|
|
12
|
+
import { nearestMatchContext } from './matchContext';
|
|
13
|
+
import { useRouter } from './useRouter';
|
|
14
|
+
|
|
15
|
+
export interface UseMatchBaseOptions<
|
|
16
|
+
TRouter extends AnyRouter,
|
|
17
|
+
TFrom,
|
|
18
|
+
TStrict extends boolean,
|
|
19
|
+
TThrow extends boolean,
|
|
20
|
+
TSelected,
|
|
21
|
+
> {
|
|
22
|
+
select?: (
|
|
23
|
+
match: MakeRouteMatch<TRouter['routeTree'], TFrom, TStrict>,
|
|
24
|
+
) => TSelected;
|
|
25
|
+
shouldThrow?: TThrow;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export type UseMatchRoute<out TFrom> = <
|
|
29
|
+
TRouter extends AnyRouter = RegisteredRouter,
|
|
30
|
+
TSelected = unknown,
|
|
31
|
+
>(
|
|
32
|
+
opts?: UseMatchBaseOptions<TRouter, TFrom, true, true, TSelected>,
|
|
33
|
+
) => Solid.Accessor<UseMatchResult<TRouter, TFrom, true, TSelected>>;
|
|
34
|
+
|
|
35
|
+
export type UseMatchOptions<
|
|
36
|
+
TRouter extends AnyRouter,
|
|
37
|
+
TFrom extends string | undefined,
|
|
38
|
+
TStrict extends boolean,
|
|
39
|
+
TThrow extends boolean,
|
|
40
|
+
TSelected,
|
|
41
|
+
> = StrictOrFrom<TRouter, TFrom, TStrict> &
|
|
42
|
+
UseMatchBaseOptions<TRouter, TFrom, TStrict, TThrow, TSelected>;
|
|
43
|
+
|
|
44
|
+
export type UseMatchResult<
|
|
45
|
+
TRouter extends AnyRouter,
|
|
46
|
+
TFrom,
|
|
47
|
+
TStrict extends boolean,
|
|
48
|
+
TSelected,
|
|
49
|
+
> = unknown extends TSelected
|
|
50
|
+
? TStrict extends true
|
|
51
|
+
? MakeRouteMatch<TRouter['routeTree'], TFrom, TStrict>
|
|
52
|
+
: MakeRouteMatchUnion<TRouter>
|
|
53
|
+
: TSelected;
|
|
54
|
+
|
|
55
|
+
export function useMatch<
|
|
56
|
+
TRouter extends AnyRouter = RegisteredRouter,
|
|
57
|
+
const TFrom extends string | undefined = undefined,
|
|
58
|
+
TStrict extends boolean = true,
|
|
59
|
+
TThrow extends boolean = true,
|
|
60
|
+
TSelected = unknown,
|
|
61
|
+
>(
|
|
62
|
+
opts: UseMatchOptions<
|
|
63
|
+
TRouter,
|
|
64
|
+
TFrom,
|
|
65
|
+
TStrict,
|
|
66
|
+
ThrowConstraint<TStrict, TThrow>,
|
|
67
|
+
TSelected
|
|
68
|
+
>,
|
|
69
|
+
): Solid.Accessor<
|
|
70
|
+
ThrowOrOptional<UseMatchResult<TRouter, TFrom, TStrict, TSelected>, TThrow>
|
|
71
|
+
> {
|
|
72
|
+
const router = useRouter<TRouter>();
|
|
73
|
+
const contextMatch = Solid.useContext(nearestMatchContext);
|
|
74
|
+
const nearestMatch = opts.from ? undefined : contextMatch;
|
|
75
|
+
|
|
76
|
+
const match = () => {
|
|
77
|
+
if (opts.from) {
|
|
78
|
+
return router.stores.getMatchStore(opts.from).get();
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
return nearestMatch?.[1 /* match */]();
|
|
82
|
+
};
|
|
83
|
+
|
|
84
|
+
Solid.createEffect(match, selectedMatch => {
|
|
85
|
+
if (selectedMatch !== undefined) {
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
if (opts.shouldThrow ?? true) {
|
|
90
|
+
if (process.env.NODE_ENV !== 'production') {
|
|
91
|
+
throw new Error(
|
|
92
|
+
`Invariant failed: Could not find ${opts.from ? `an active match from "${opts.from}"` : 'a nearest match!'}`,
|
|
93
|
+
);
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
invariant();
|
|
97
|
+
}
|
|
98
|
+
});
|
|
99
|
+
|
|
100
|
+
return Solid.createMemo((prev: TSelected | undefined) => {
|
|
101
|
+
const selectedMatch = match();
|
|
102
|
+
|
|
103
|
+
if (selectedMatch === undefined) {
|
|
104
|
+
return undefined;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
const res = opts.select ? opts.select(selectedMatch) : selectedMatch;
|
|
108
|
+
if (prev === undefined) return res as TSelected;
|
|
109
|
+
return replaceEqualDeep(prev, res) as TSelected;
|
|
110
|
+
}) as any;
|
|
111
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import type {
|
|
2
|
+
AnyRouter,
|
|
3
|
+
FromPathOption,
|
|
4
|
+
NavigateOptions,
|
|
5
|
+
RegisteredRouter,
|
|
6
|
+
UseNavigateResult,
|
|
7
|
+
} from '@tanstack/router-core';
|
|
8
|
+
import * as Solid from 'solid-js';
|
|
9
|
+
import { useRouter } from './useRouter';
|
|
10
|
+
|
|
11
|
+
export function useNavigate<
|
|
12
|
+
TRouter extends AnyRouter = RegisteredRouter,
|
|
13
|
+
TDefaultFrom extends string = string,
|
|
14
|
+
>(_defaultOpts?: {
|
|
15
|
+
from?: FromPathOption<TRouter, TDefaultFrom>;
|
|
16
|
+
}): UseNavigateResult<TDefaultFrom> {
|
|
17
|
+
const router = useRouter();
|
|
18
|
+
|
|
19
|
+
return ((options: NavigateOptions) => {
|
|
20
|
+
return router.navigate({
|
|
21
|
+
...options,
|
|
22
|
+
from: options.from ?? _defaultOpts?.from,
|
|
23
|
+
});
|
|
24
|
+
}) as UseNavigateResult<TDefaultFrom>;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
export function Navigate<
|
|
28
|
+
TRouter extends AnyRouter = RegisteredRouter,
|
|
29
|
+
const TFrom extends string = string,
|
|
30
|
+
const TTo extends string | undefined = undefined,
|
|
31
|
+
const TMaskFrom extends string = TFrom,
|
|
32
|
+
const TMaskTo extends string = '',
|
|
33
|
+
>(props: NavigateOptions<TRouter, TFrom, TTo, TMaskFrom, TMaskTo>): null {
|
|
34
|
+
const { navigate } = useRouter();
|
|
35
|
+
|
|
36
|
+
Solid.onSettled(() => {
|
|
37
|
+
navigate({
|
|
38
|
+
...props,
|
|
39
|
+
});
|
|
40
|
+
});
|
|
41
|
+
|
|
42
|
+
return null;
|
|
43
|
+
}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import type {
|
|
2
|
+
AnyRouter,
|
|
3
|
+
RegisteredRouter,
|
|
4
|
+
ResolveUseParams,
|
|
5
|
+
StrictOrFrom,
|
|
6
|
+
ThrowConstraint,
|
|
7
|
+
ThrowOrOptional,
|
|
8
|
+
UseParamsResult,
|
|
9
|
+
} from '@tanstack/router-core';
|
|
10
|
+
import type { Accessor } from 'solid-js';
|
|
11
|
+
import { useMatch } from './useMatch';
|
|
12
|
+
|
|
13
|
+
export interface UseParamsBaseOptions<
|
|
14
|
+
TRouter extends AnyRouter,
|
|
15
|
+
TFrom,
|
|
16
|
+
TStrict extends boolean,
|
|
17
|
+
TThrow extends boolean,
|
|
18
|
+
TSelected,
|
|
19
|
+
> {
|
|
20
|
+
select?: (params: ResolveUseParams<TRouter, TFrom, TStrict>) => TSelected;
|
|
21
|
+
shouldThrow?: TThrow;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export type UseParamsOptions<
|
|
25
|
+
TRouter extends AnyRouter,
|
|
26
|
+
TFrom extends string | undefined,
|
|
27
|
+
TStrict extends boolean,
|
|
28
|
+
TThrow extends boolean,
|
|
29
|
+
TSelected,
|
|
30
|
+
> = StrictOrFrom<TRouter, TFrom, TStrict> &
|
|
31
|
+
UseParamsBaseOptions<TRouter, TFrom, TStrict, TThrow, TSelected>;
|
|
32
|
+
|
|
33
|
+
export type UseParamsRoute<out TFrom> = <
|
|
34
|
+
TRouter extends AnyRouter = RegisteredRouter,
|
|
35
|
+
TSelected = unknown,
|
|
36
|
+
>(
|
|
37
|
+
opts?: UseParamsBaseOptions<
|
|
38
|
+
TRouter,
|
|
39
|
+
TFrom,
|
|
40
|
+
/* TStrict */ true,
|
|
41
|
+
/* TThrow */ true,
|
|
42
|
+
TSelected
|
|
43
|
+
>,
|
|
44
|
+
) => Accessor<UseParamsResult<TRouter, TFrom, true, TSelected>>;
|
|
45
|
+
|
|
46
|
+
export function useParams<
|
|
47
|
+
TRouter extends AnyRouter = RegisteredRouter,
|
|
48
|
+
const TFrom extends string | undefined = undefined,
|
|
49
|
+
TStrict extends boolean = true,
|
|
50
|
+
TThrow extends boolean = true,
|
|
51
|
+
TSelected = unknown,
|
|
52
|
+
>(
|
|
53
|
+
opts: UseParamsOptions<
|
|
54
|
+
TRouter,
|
|
55
|
+
TFrom,
|
|
56
|
+
TStrict,
|
|
57
|
+
ThrowConstraint<TStrict, TThrow>,
|
|
58
|
+
TSelected
|
|
59
|
+
>,
|
|
60
|
+
): Accessor<
|
|
61
|
+
ThrowOrOptional<UseParamsResult<TRouter, TFrom, TStrict, TSelected>, TThrow>
|
|
62
|
+
> {
|
|
63
|
+
return useMatch({
|
|
64
|
+
from: opts.from!,
|
|
65
|
+
strict: opts.strict,
|
|
66
|
+
shouldThrow: opts.shouldThrow,
|
|
67
|
+
select: match => {
|
|
68
|
+
const params = opts.strict === false ? match.params : match._strictParams;
|
|
69
|
+
return opts.select ? opts.select(params) : params;
|
|
70
|
+
},
|
|
71
|
+
}) as Accessor<any>;
|
|
72
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type {
|
|
2
|
+
AnyRouter,
|
|
3
|
+
RegisteredRouter,
|
|
4
|
+
UseRouteContextBaseOptions,
|
|
5
|
+
UseRouteContextOptions,
|
|
6
|
+
UseRouteContextResult,
|
|
7
|
+
} from '@tanstack/router-core';
|
|
8
|
+
import type { Accessor } from 'solid-js';
|
|
9
|
+
import { useMatch } from './useMatch';
|
|
10
|
+
|
|
11
|
+
export type UseRouteContextRoute<out TFrom> = <
|
|
12
|
+
TRouter extends AnyRouter = RegisteredRouter,
|
|
13
|
+
TSelected = unknown,
|
|
14
|
+
>(
|
|
15
|
+
opts?: UseRouteContextBaseOptions<TRouter, TFrom, true, TSelected>,
|
|
16
|
+
) => Accessor<UseRouteContextResult<TRouter, TFrom, true, TSelected>>;
|
|
17
|
+
|
|
18
|
+
export function useRouteContext<
|
|
19
|
+
TRouter extends AnyRouter = RegisteredRouter,
|
|
20
|
+
const TFrom extends string | undefined = undefined,
|
|
21
|
+
TStrict extends boolean = true,
|
|
22
|
+
TSelected = unknown,
|
|
23
|
+
>(
|
|
24
|
+
opts: UseRouteContextOptions<TRouter, TFrom, TStrict, TSelected>,
|
|
25
|
+
): Accessor<UseRouteContextResult<TRouter, TFrom, TStrict, TSelected>> {
|
|
26
|
+
return useMatch({
|
|
27
|
+
...opts,
|
|
28
|
+
select: match => (opts.select ? opts.select(match.context) : match.context),
|
|
29
|
+
}) as any;
|
|
30
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { AnyRouter, RegisteredRouter } from '@tanstack/router-core';
|
|
2
|
+
import * as Solid from 'solid-js';
|
|
3
|
+
import { routerContext } from './routerContext';
|
|
4
|
+
|
|
5
|
+
export function useRouter<TRouter extends AnyRouter = RegisteredRouter>(opts?: {
|
|
6
|
+
warn?: boolean;
|
|
7
|
+
}): TRouter {
|
|
8
|
+
const value = Solid.useContext(routerContext);
|
|
9
|
+
if (process.env.NODE_ENV !== 'production') {
|
|
10
|
+
if ((opts?.warn ?? true) && !value) {
|
|
11
|
+
console.warn(
|
|
12
|
+
'Warning: useRouter must be used inside a <RouterProvider> component!',
|
|
13
|
+
);
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
return value as TRouter;
|
|
17
|
+
}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import type {
|
|
2
|
+
AnyRouter,
|
|
3
|
+
RegisteredRouter,
|
|
4
|
+
RouterState,
|
|
5
|
+
} from '@tanstack/router-core';
|
|
6
|
+
import { replaceEqualDeep } from '@tanstack/router-core';
|
|
7
|
+
import type { Accessor } from 'solid-js';
|
|
8
|
+
import * as Solid from 'solid-js';
|
|
9
|
+
import { useRouter } from './useRouter';
|
|
10
|
+
|
|
11
|
+
export type UseRouterStateOptions<TRouter extends AnyRouter, TSelected> = {
|
|
12
|
+
router?: TRouter;
|
|
13
|
+
select?: (state: RouterState<TRouter['routeTree']>) => TSelected;
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
export type UseRouterStateResult<
|
|
17
|
+
TRouter extends AnyRouter,
|
|
18
|
+
TSelected,
|
|
19
|
+
> = unknown extends TSelected ? RouterState<TRouter['routeTree']> : TSelected;
|
|
20
|
+
|
|
21
|
+
export function useRouterState<
|
|
22
|
+
TRouter extends AnyRouter = RegisteredRouter,
|
|
23
|
+
TSelected = unknown,
|
|
24
|
+
>(
|
|
25
|
+
opts?: UseRouterStateOptions<TRouter, TSelected>,
|
|
26
|
+
): Accessor<UseRouterStateResult<TRouter, TSelected>> {
|
|
27
|
+
const contextRouter = useRouter<TRouter>({
|
|
28
|
+
warn: opts?.router === undefined,
|
|
29
|
+
});
|
|
30
|
+
const router = opts?.router || contextRouter;
|
|
31
|
+
|
|
32
|
+
if (!opts?.select) {
|
|
33
|
+
return (() => router.stores.__store.get()) as Accessor<
|
|
34
|
+
UseRouterStateResult<TRouter, TSelected>
|
|
35
|
+
>;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
const select = opts.select;
|
|
39
|
+
|
|
40
|
+
return Solid.createMemo(
|
|
41
|
+
(prev: TSelected | undefined) => {
|
|
42
|
+
const res = select(router.stores.__store.get());
|
|
43
|
+
if (prev === undefined) return res;
|
|
44
|
+
return replaceEqualDeep(prev, res);
|
|
45
|
+
},
|
|
46
|
+
{ transparent: true } as Solid.MemoOptions<TSelected> & {
|
|
47
|
+
ssrSource?: 'server' | 'hybrid';
|
|
48
|
+
},
|
|
49
|
+
) as Accessor<UseRouterStateResult<TRouter, TSelected>>;
|
|
50
|
+
}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import type {
|
|
2
|
+
AnyRouter,
|
|
3
|
+
RegisteredRouter,
|
|
4
|
+
ResolveUseSearch,
|
|
5
|
+
StrictOrFrom,
|
|
6
|
+
ThrowConstraint,
|
|
7
|
+
ThrowOrOptional,
|
|
8
|
+
UseSearchResult,
|
|
9
|
+
} from '@tanstack/router-core';
|
|
10
|
+
import type { Accessor } from 'solid-js';
|
|
11
|
+
import { useMatch } from './useMatch';
|
|
12
|
+
|
|
13
|
+
export interface UseSearchBaseOptions<
|
|
14
|
+
TRouter extends AnyRouter,
|
|
15
|
+
TFrom,
|
|
16
|
+
TStrict extends boolean,
|
|
17
|
+
TThrow extends boolean,
|
|
18
|
+
TSelected,
|
|
19
|
+
> {
|
|
20
|
+
select?: (state: ResolveUseSearch<TRouter, TFrom, TStrict>) => TSelected;
|
|
21
|
+
shouldThrow?: TThrow;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export type UseSearchOptions<
|
|
25
|
+
TRouter extends AnyRouter,
|
|
26
|
+
TFrom,
|
|
27
|
+
TStrict extends boolean,
|
|
28
|
+
TThrow extends boolean,
|
|
29
|
+
TSelected,
|
|
30
|
+
> = StrictOrFrom<TRouter, TFrom, TStrict> &
|
|
31
|
+
UseSearchBaseOptions<TRouter, TFrom, TStrict, TThrow, TSelected>;
|
|
32
|
+
|
|
33
|
+
export type UseSearchRoute<out TFrom> = <
|
|
34
|
+
TRouter extends AnyRouter = RegisteredRouter,
|
|
35
|
+
TSelected = unknown,
|
|
36
|
+
>(
|
|
37
|
+
opts?: UseSearchBaseOptions<
|
|
38
|
+
TRouter,
|
|
39
|
+
TFrom,
|
|
40
|
+
/* TStrict */ true,
|
|
41
|
+
/* TThrow */ true,
|
|
42
|
+
TSelected
|
|
43
|
+
>,
|
|
44
|
+
) => Accessor<UseSearchResult<TRouter, TFrom, true, TSelected>>;
|
|
45
|
+
|
|
46
|
+
export function useSearch<
|
|
47
|
+
TRouter extends AnyRouter = RegisteredRouter,
|
|
48
|
+
const TFrom extends string | undefined = undefined,
|
|
49
|
+
TStrict extends boolean = true,
|
|
50
|
+
TThrow extends boolean = true,
|
|
51
|
+
TSelected = unknown,
|
|
52
|
+
>(
|
|
53
|
+
opts: UseSearchOptions<
|
|
54
|
+
TRouter,
|
|
55
|
+
TFrom,
|
|
56
|
+
TStrict,
|
|
57
|
+
ThrowConstraint<TStrict, TThrow>,
|
|
58
|
+
TSelected
|
|
59
|
+
>,
|
|
60
|
+
): Accessor<
|
|
61
|
+
ThrowOrOptional<UseSearchResult<TRouter, TFrom, TStrict, TSelected>, TThrow>
|
|
62
|
+
> {
|
|
63
|
+
return useMatch({
|
|
64
|
+
from: opts.from!,
|
|
65
|
+
strict: opts.strict,
|
|
66
|
+
shouldThrow: opts.shouldThrow,
|
|
67
|
+
select: match => {
|
|
68
|
+
const search = match.search;
|
|
69
|
+
return opts.select ? opts.select(search) : search;
|
|
70
|
+
},
|
|
71
|
+
}) as any;
|
|
72
|
+
}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import * as Solid from 'solid-js';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* React hook to wrap `IntersectionObserver`.
|
|
5
|
+
*
|
|
6
|
+
* This hook will create an `IntersectionObserver` and observe the ref passed to it.
|
|
7
|
+
*
|
|
8
|
+
* When the intersection changes, the callback will be called with the `IntersectionObserverEntry`.
|
|
9
|
+
*
|
|
10
|
+
* @param ref - The ref to observe
|
|
11
|
+
* @param callback - The callback to call when the intersection changes
|
|
12
|
+
* @param disabled - Whether observation is disabled
|
|
13
|
+
* @returns The IntersectionObserver instance
|
|
14
|
+
* @example
|
|
15
|
+
* ```tsx
|
|
16
|
+
* const MyComponent = () => {
|
|
17
|
+
* const ref = React.useRef<HTMLDivElement>(null)
|
|
18
|
+
* useIntersectionObserver(
|
|
19
|
+
* ref,
|
|
20
|
+
* (entry) => { doSomething(entry) },
|
|
21
|
+
* false
|
|
22
|
+
* )
|
|
23
|
+
* return <div ref={ref} />
|
|
24
|
+
* ```
|
|
25
|
+
*/
|
|
26
|
+
export function useIntersectionObserver<T extends Element>(
|
|
27
|
+
ref: Solid.Accessor<T | null>,
|
|
28
|
+
callback: (entry?: IntersectionObserverEntry) => void,
|
|
29
|
+
disabled: Solid.Accessor<boolean>,
|
|
30
|
+
): Solid.Accessor<IntersectionObserver | null> {
|
|
31
|
+
const isIntersectionObserverAvailable =
|
|
32
|
+
typeof IntersectionObserver === 'function';
|
|
33
|
+
let observerRef: IntersectionObserver | null = null;
|
|
34
|
+
|
|
35
|
+
Solid.createEffect(
|
|
36
|
+
() => [ref(), disabled()] as const,
|
|
37
|
+
([r, isDisabled]) => {
|
|
38
|
+
if (isDisabled || !r || !isIntersectionObserverAvailable) {
|
|
39
|
+
return () => callback();
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
observerRef = new IntersectionObserver(
|
|
43
|
+
entries => {
|
|
44
|
+
callback(entries.pop());
|
|
45
|
+
},
|
|
46
|
+
{ rootMargin: '100px' },
|
|
47
|
+
);
|
|
48
|
+
|
|
49
|
+
observerRef.observe(r);
|
|
50
|
+
|
|
51
|
+
return () => {
|
|
52
|
+
observerRef?.disconnect();
|
|
53
|
+
callback();
|
|
54
|
+
};
|
|
55
|
+
},
|
|
56
|
+
);
|
|
57
|
+
|
|
58
|
+
return () => observerRef;
|
|
59
|
+
}
|