@tanstack/react-router
Version:
Modern and scalable routing for React applications
55 lines (54 loc) • 1.61 kB
JavaScript
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