studiocms
Version:
Astro Native CMS for AstroDB. Built from the ground up by the Astro community.
40 lines (39 loc) • 1.34 kB
JavaScript
import { pathWithBase, StudioCMSRoutes } from "studiocms:lib";
import plugins from "studiocms:plugins";
import { runSDK, SDKCoreJs } from "studiocms:sdk";
async function frontendNavigation(basePackage) {
const searchPackage = basePackage || "studiocms/markdown";
const fullPageList = await runSDK(SDKCoreJs.GET.pages());
const pageListData = fullPageList.map(({ data }) => data);
const links = [];
const navPagesList = pageListData.filter((page) => page.showOnNav === true && page.package === searchPackage).sort((a, b) => Date.parse(b.publishedAt.toString()) - Date.parse(a.publishedAt.toString()));
const indexPage = navPagesList.find((page) => page.slug === "index");
if (indexPage) {
links.push({
text: indexPage.title || "Home",
href: StudioCMSRoutes.mainLinks.baseSiteURL
});
}
const restOfPages = navPagesList.filter((page) => page.slug !== "index");
for (const page of restOfPages) {
links.push({
text: page.title,
href: pathWithBase(page.slug)
});
}
for (const { frontendNavigationLinks } of plugins) {
if (!frontendNavigationLinks) {
continue;
}
for (const link of frontendNavigationLinks) {
links.push({
text: link.label,
href: pathWithBase(link.href)
});
}
}
return links;
}
export {
frontendNavigation
};