UNPKG

@tanstack/react-router

Version:

Modern and scalable routing for React applications

55 lines (54 loc) 1.61 kB
import { jsx, Fragment } from "react/jsx-runtime"; import { createElement } from "react"; import { Asset } from "./Asset.js"; import { useRouterState } from "./useRouterState.js"; import { useRouter } from "./useRouter.js"; const Scripts = () => { const router = useRouter(); const assetScripts = useRouterState({ select: (state) => { const assetScripts2 = []; const manifest = router.ssr?.manifest; if (!manifest) { return []; } state.matches.map((match) => router.looseRoutesById[match.routeId]).forEach( (route) => manifest.routes[route.id]?.assets?.filter((d) => d.tag === "script").forEach((asset) => { assetScripts2.push({ tag: "script", attrs: asset.attrs, children: asset.children }); }) ); return assetScripts2; }, structuralSharing: true }); const { scripts } = useRouterState({ select: (state) => ({ scripts: state.matches.map((match) => match.scripts).flat(1).filter(Boolean).map(({ children, ...script }) => ({ tag: "script", attrs: { ...script, suppressHydrationWarning: true }, children })) }), structuralSharing: true }); const allScripts = [...scripts, ...assetScripts]; return /* @__PURE__ */ jsx(Fragment, { children: allScripts.map((asset, i) => /* @__PURE__ */ createElement( Asset, { ...asset, key: `tsr-scripts-${asset.tag}-${i}`, nonce: router.options.ssr?.nonce } )) }); }; export { Scripts }; //# sourceMappingURL=Scripts.js.map