@tanstack/solid-router
Version:
Modern and scalable routing for Solid applications
134 lines (133 loc) • 5.42 kB
JavaScript
const require_runtime = require("./_virtual/_rolldown/runtime.cjs");
const require_CatchBoundary = require("./CatchBoundary.cjs");
const require_useRouter = require("./useRouter.cjs");
const require_matchContext = require("./matchContext.cjs");
const require_Transitioner = require("./Transitioner.cjs");
const require_SafeFragment = require("./SafeFragment.cjs");
const require_Match = require("./Match.cjs");
let _tanstack_router_core = require("@tanstack/router-core");
let _solidjs_web = require("@solidjs/web");
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/Matches.tsx
var NearestMatchContext = require_matchContext.nearestMatchContext;
function Matches() {
const router = require_useRouter.useRouter();
const ResolvedSuspense = router.options.disableGlobalCatchBoundary || (_tanstack_router_core_isServer.isServer ?? router.isServer) || typeof document !== "undefined" && router.ssr ? require_SafeFragment.SafeFragment : solid_js.Loading;
const rootRoute = () => router.routesById[_tanstack_router_core.rootRouteId];
const PendingComponent = rootRoute().options.pendingComponent ?? router.options.defaultPendingComponent;
return (0, _solidjs_web.createComponent)(router.options.InnerWrap || require_SafeFragment.SafeFragment, { get children() {
return (0, _solidjs_web.createComponent)(ResolvedSuspense, {
get fallback() {
return PendingComponent ? (0, _solidjs_web.createComponent)(PendingComponent, {}) : null;
},
get children() {
return [(0, _solidjs_web.createComponent)(require_Transitioner.Transitioner, {}), (0, _solidjs_web.createComponent)(MatchesInner, {})];
}
});
} });
}
function MatchesInner() {
const router = require_useRouter.useRouter();
const matchId = () => router.stores.firstMatchId.state;
const routeId = () => matchId() ? _tanstack_router_core.rootRouteId : void 0;
const match = () => routeId() ? router.stores.getMatchStoreByRouteId(_tanstack_router_core.rootRouteId).state : void 0;
const hasPendingMatch = () => routeId() ? Boolean(router.stores.pendingRouteIds.state[_tanstack_router_core.rootRouteId]) : false;
const resetKey = () => router.stores.loadedAt.state;
const nearestMatch = {
matchId,
routeId,
match,
hasPending: hasPendingMatch
};
const matchContent = () => (0, _solidjs_web.createComponent)(solid_js.Show, {
get when() {
return matchId();
},
get children() {
return (0, _solidjs_web.createComponent)(require_Match.Match, { get matchId() {
return matchId();
} });
}
});
if (router.options.disableGlobalCatchBoundary) return (0, _solidjs_web.createComponent)(NearestMatchContext, {
value: nearestMatch,
get children() {
return matchContent();
}
});
return (0, _solidjs_web.createComponent)(NearestMatchContext, {
value: nearestMatch,
get children() {
return (0, _solidjs_web.createComponent)(require_CatchBoundary.CatchBoundary, {
getResetKey: () => resetKey(),
errorComponent: require_CatchBoundary.ErrorComponent,
get onCatch() {
return process.env.NODE_ENV !== "production" ? (error) => {
console.warn(`Warning: The following error wasn't caught by any route! At the very least, consider setting an 'errorComponent' in your RootRoute!`);
console.warn(`Warning: ${error.message || error.toString()}`);
} : void 0;
},
get children() {
return matchContent();
}
});
}
});
}
function useMatchRoute() {
const router = require_useRouter.useRouter();
return (opts) => {
return solid_js.createMemo(() => {
const { pending, caseSensitive, fuzzy, includeSearch, ...rest } = opts;
router.stores.matchRouteReactivity.state;
return router.matchRoute(rest, {
pending,
caseSensitive,
fuzzy,
includeSearch
});
});
};
}
function MatchRoute(props) {
const params = useMatchRoute()(props);
return (0, _solidjs_web.memo)(solid_js.createMemo(() => {
const matchedParams = params();
const child = props.children;
if (typeof child === "function") return child(matchedParams);
return matchedParams ? child : null;
}));
}
function useMatches(opts) {
const router = require_useRouter.useRouter();
return solid_js.createMemo((prev) => {
const matches = router.stores.activeMatchesSnapshot.state;
const res = opts?.select ? opts.select(matches) : matches;
if (prev === void 0) return res;
return (0, _tanstack_router_core.replaceEqualDeep)(prev, res);
});
}
function useParentMatches(opts) {
const contextMatchId = solid_js.useContext(require_matchContext.nearestMatchContext).matchId;
return useMatches({ select: (matches) => {
matches = matches.slice(0, matches.findIndex((d) => d.id === contextMatchId()));
return opts?.select ? opts.select(matches) : matches;
} });
}
function useChildMatches(opts) {
const contextMatchId = solid_js.useContext(require_matchContext.nearestMatchContext).matchId;
return useMatches({ select: (matches) => {
matches = matches.slice(matches.findIndex((d) => d.id === contextMatchId()) + 1);
return opts?.select ? opts.select(matches) : matches;
} });
}
//#endregion
exports.MatchRoute = MatchRoute;
exports.Matches = Matches;
exports.useChildMatches = useChildMatches;
exports.useMatchRoute = useMatchRoute;
exports.useMatches = useMatches;
exports.useParentMatches = useParentMatches;
//# sourceMappingURL=Matches.cjs.map