UNPKG

@tanstack/solid-router

Version:

Modern and scalable routing for Solid applications

31 lines (30 loc) 1.29 kB
import { useRouter } from "./useRouter.js"; import { nearestMatchContext } from "./matchContext.js"; import { invariant, replaceEqualDeep } from "@tanstack/router-core"; import * as Solid from "solid-js"; //#region src/useMatch.tsx function useMatch(opts) { const router = useRouter(); const nearestMatch = opts.from ? void 0 : Solid.useContext(nearestMatchContext); const match = () => { if (opts.from) return router.stores.getMatchStoreByRouteId(opts.from).state; return nearestMatch?.match(); }; Solid.createEffect(() => { if (match() !== void 0) return; if (!(opts.from ? Boolean(router.stores.pendingRouteIds.state[opts.from]) : nearestMatch?.hasPending() ?? false) && !router.stores.isTransitioning.state && (opts.shouldThrow ?? true)) { if (process.env.NODE_ENV !== "production") throw new Error(`Invariant failed: Could not find ${opts.from ? `an active match from "${opts.from}"` : "a nearest match!"}`); invariant(); } }); return Solid.createMemo((prev) => { const selectedMatch = match(); if (selectedMatch === void 0) return void 0; const res = opts.select ? opts.select(selectedMatch) : selectedMatch; if (prev === void 0) return res; return replaceEqualDeep(prev, res); }); } //#endregion export { useMatch }; //# sourceMappingURL=useMatch.js.map