chore (SW-834): Upgrade to Next 15 * wip: apply codemod and upgrade swc plugin * wip: design-system to react 19, fix issues from async (search)params * wip: fix remaining issues from codemod serverClient is now async because context use headers() getLang is now async because it uses headers() * Minor cleanup * Inline react-material-symbols package Package is seemingly not maintained any more and doesn't support React 19. This copies the package source into `design-system`, makes the necessary changes for 19 and export it for others to use. * Fix missing awaits * Disable modal exit animations Enabling modal exit animations via isExiting prop is causing modals to be rendered in "hidden" state and never unmount. Seems to be an issue with react-aria-components, see https://github.com/adobe/react-spectrum/issues/7563. Can probably be fixed by rewriting to a solution similar to https://react-spectrum.adobe.com/react-aria/examples/framer-modal-sheet.html * Remove unstable cache implementation and use in memory cache locally * Fix ref type in SelectFilter * Use cloneElement to add key prop to element Approved-by: Linus Flood
55 lines
1.4 KiB
TypeScript
55 lines
1.4 KiB
TypeScript
import { notFound } from "next/navigation"
|
|
|
|
import { env } from "@/env/server"
|
|
|
|
import { getSitemapDataById } from "@/utils/sitemap"
|
|
|
|
import type { NextRequest } from "next/server"
|
|
|
|
export const dynamic = "force-dynamic"
|
|
|
|
export async function GET(
|
|
_request: NextRequest,
|
|
context: { params: Promise<{ sitemapId: string }> }
|
|
) {
|
|
if (env.NEW_SITE_LIVE_STATUS !== "ALL_LANGUAGES_LIVE") {
|
|
return notFound()
|
|
}
|
|
|
|
const params = await context.params
|
|
const sitemapId = params.sitemapId
|
|
|
|
console.log("[SITEMAP] Fetching sitemap by ID", sitemapId)
|
|
|
|
if (!sitemapId) {
|
|
return notFound()
|
|
}
|
|
|
|
const sitemapData = await getSitemapDataById(Number(sitemapId))
|
|
if (!sitemapData.length) {
|
|
return notFound()
|
|
}
|
|
|
|
const entries = sitemapData.map((entry) => {
|
|
const alternates = Object.entries(entry.alternates).map(
|
|
([lang, url]) =>
|
|
`<xhtml:link rel="alternate" hreflang="${lang}" href="${url}" />`
|
|
)
|
|
|
|
return `
|
|
<url>
|
|
<loc>${entry.url}</loc>
|
|
<lastmod>${entry.lastModified}</lastmod>
|
|
<changefreq>${entry.changeFrequency}</changefreq>
|
|
<priority>${entry.priority}</priority>
|
|
${alternates.join("")}
|
|
</url>`
|
|
})
|
|
|
|
const sitemapXML = `<?xml version="1.0" encoding="UTF-8"?>\n<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:xhtml="http://www.w3.org/1999/xhtml">${entries.join("")}\n</urlset>`
|
|
|
|
return new Response(sitemapXML, {
|
|
headers: { "Content-Type": "text/xml" },
|
|
})
|
|
}
|