Files
fefan/next/app/sitemap.js
2026-01-19 11:43:59 +01:00

75 lines
2.1 KiB
JavaScript

import getData from "@/api";
export default async function sitemap() {
// Main page information
const site = await getData("site", {
fields: ["updatedAt"],
populate: {
edition: {
fields: ["id", "updatedAt", "publishedAt"],
populate: {
programs: true,
fields: ["type", "updatedAt", "publishedAt"],
},
},
},
});
const edition = site.data?.attributes.edition.data;
const siteLastModified =
site && edition
? new Date(
Math.max(
new Date(site.data?.attributes.updatedAt),
new Date(edition.attributes.updatedAt)
)
)
: new Date();
// Programs information
const programs = (edition?.attributes.programs.data ?? []).filter(
(p) => p.attributes.publishedAt !== null
);
// Editions information
const editions = await getData("editions", { fields: ["id", "updatedAt"] });
const previousEditions = editions.data?.filter(
(e) => e.id !== edition.id && e.attributes.publishedAt !== null
);
const editionsLastModifiedTimestamp = Math.max(
...(previousEditions ?? []).map((e) => new Date(e.attributes.updatedAt))
);
const editionsLastModified =
editionsLastModifiedTimestamp === -Infinity
? siteLastModified
: new Date(editionsLastModifiedTimestamp);
return [
{
url: `${process.env.NEXT_PUBLIC_ORIGIN}`,
lastModified: siteLastModified,
changeFrequency: "yearly",
prority: 1,
},
...(programs ?? []).map((p) => ({
url: `${process.env.NEXT_PUBLIC_ORIGIN}/prog/${p.attributes.type}`,
lastModified: new Date(p.attributes.updatedAt),
changeFrequency: "yearly",
priority: 0.8,
})),
{
url: `${process.env.NEXT_PUBLIC_ORIGIN}/editions`,
lastModified: editionsLastModified,
changeFrequency: "yearly",
priority: 0.6,
},
...(previousEditions ?? []).map((e) => ({
url: `${process.env.NEXT_PUBLIC_ORIGIN}/editions/${e.id}`,
lastModified: new Date(e.attributes.updatedAt),
changeFrequency: "yearly",
priority: 0.5,
})),
];
}