UNPKG

@tanstack/solid-router

Version:

Modern and scalable routing for Solid applications

79 lines (78 loc) 2.55 kB
const require_runtime = require("./_virtual/_rolldown/runtime.cjs"); const require_useRouter = require("./useRouter.cjs"); let _tanstack_router_core = require("@tanstack/router-core"); let solid_js = require("solid-js"); solid_js = require_runtime.__toESM(solid_js, 1); let _tanstack_router_core_isServer = require("@tanstack/router-core/isServer"); //#region src/Transitioner.tsx function getResolvedLocation(router) { const resolvedLocation = router.stores.resolvedLocation.get(); if (resolvedLocation?.href === router.latestLocation.href && resolvedLocation.state.__TSR_key === router.latestLocation.state.__TSR_key) return resolvedLocation; } function Transitioner() { const router = require_useRouter.useRouter(); if (_tanstack_router_core_isServer.isServer ?? router.isServer) return null; let settleCurrent; router.startTransition = (fn) => { settleCurrent?.(false); return new Promise((resolve, reject) => { const settle = (rendered) => { if (settleCurrent !== settle) return; settleCurrent = void 0; resolve(rendered); }; const fail = (cause) => { if (settleCurrent !== settle) return; settleCurrent = void 0; reject(cause); }; settleCurrent = settle; solid_js.startTransition(() => { if (settleCurrent === settle) try { fn(); } catch (cause) { fail(cause); } }).then(() => settle(true), fail); }); }; solid_js.onCleanup(() => { settleCurrent?.(false); }); solid_js.onMount(() => { solid_js.onCleanup(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, ignoreBlocker: true }); return; } if (!getResolvedLocation(router) && !router._tx) router.load().catch(console.error); }); return null; } function Rendered() { const router = require_useRouter.useRouter(); solid_js.onMount(() => { const resolvedLocation = getResolvedLocation(router); if (resolvedLocation) router.emit({ type: "onRendered", ...(0, _tanstack_router_core.getLocationChangeInfo)(resolvedLocation, resolvedLocation) }); }); return null; } //#endregion exports.Rendered = Rendered; exports.Transitioner = Transitioner; //# sourceMappingURL=Transitioner.cjs.map