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