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