UNPKG

@tanstack/solid-router

Version:

Modern and scalable routing for Solid applications

97 lines (96 loc) 3.65 kB
const require_runtime = require("./_virtual/_rolldown/runtime.cjs"); const require_useRouter = require("./useRouter.cjs"); const require_useRouterState = require("./useRouterState.cjs"); const require_utils = require("./utils.cjs"); let _tanstack_router_core = require("@tanstack/router-core"); let solid_js = require("solid-js"); solid_js = require_runtime.__toESM(solid_js); let _tanstack_router_core_isServer = require("@tanstack/router-core/isServer"); //#region src/Transitioner.tsx function Transitioner() { const router = require_useRouter.useRouter(); let mountLoadForRouter = { router, mounted: false }; const isLoading = require_useRouterState.useRouterState({ select: ({ isLoading }) => isLoading }); if (_tanstack_router_core_isServer.isServer ?? router.isServer) return null; const [isSolidTransitioning, startSolidTransition] = solid_js.useTransition(); const hasPendingMatches = require_useRouterState.useRouterState({ select: (s) => s.matches.some((d) => d.status === "pending") }); const previousIsLoading = require_utils.usePrevious(isLoading); const isAnyPending = () => isLoading() || isSolidTransitioning() || hasPendingMatches(); const previousIsAnyPending = require_utils.usePrevious(isAnyPending); const isPagePending = () => isLoading() || hasPendingMatches(); const previousIsPagePending = require_utils.usePrevious(isPagePending); router.startTransition = (fn) => { solid_js.startTransition(() => { startSolidTransition(fn); }); }; solid_js.onMount(() => { const unsub = router.history.subscribe(router.load); const nextLocation = router.buildLocation({ to: router.latestLocation.pathname, search: true, params: true, hash: true, state: true, _includeValidateSearch: true }); if ((0, _tanstack_router_core.trimPathRight)(router.latestLocation.publicHref) !== (0, _tanstack_router_core.trimPathRight)(nextLocation.publicHref)) router.commitLocation({ ...nextLocation, replace: true }); solid_js.onCleanup(() => { unsub(); }); }); solid_js.createRenderEffect(() => { solid_js.untrack(() => { if (typeof window !== "undefined" && router.ssr || mountLoadForRouter.router === router && mountLoadForRouter.mounted) return; mountLoadForRouter = { router, mounted: true }; const tryLoad = async () => { try { await router.load(); } catch (err) { console.error(err); } }; tryLoad(); }); }); solid_js.createRenderEffect(solid_js.on([previousIsLoading, isLoading], ([previousIsLoading, isLoading]) => { if (previousIsLoading.previous && !isLoading) router.emit({ type: "onLoad", ...(0, _tanstack_router_core.getLocationChangeInfo)(router.state) }); })); solid_js.createComputed(solid_js.on([isPagePending, previousIsPagePending], ([isPagePending, previousIsPagePending]) => { if (previousIsPagePending.previous && !isPagePending) router.emit({ type: "onBeforeRouteMount", ...(0, _tanstack_router_core.getLocationChangeInfo)(router.state) }); })); solid_js.createRenderEffect(solid_js.on([isAnyPending, previousIsAnyPending], ([isAnyPending, previousIsAnyPending]) => { if (previousIsAnyPending.previous && !isAnyPending) { const changeInfo = (0, _tanstack_router_core.getLocationChangeInfo)(router.state); router.emit({ type: "onResolved", ...changeInfo }); router.__store.setState((s) => ({ ...s, status: "idle", resolvedLocation: s.location })); if (changeInfo.hrefChanged) (0, _tanstack_router_core.handleHashScroll)(router); } })); return null; } //#endregion exports.Transitioner = Transitioner; //# sourceMappingURL=Transitioner.cjs.map