@tanstack/solid-router
Version:
Modern and scalable routing for Solid applications
79 lines (78 loc) • 2.55 kB
JavaScript
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