studiocms
Version:
Astro Native CMS for AstroDB. Built from the ground up by the Astro community.
94 lines (93 loc) • 3.01 kB
JavaScript
import { makeDashboardRoute, StudioCMSRoutes } from "studiocms:lib";
import logger from "studiocms:logger";
import { getPluginDashboardPages } from "studiocms:plugin-helpers";
import { defaultLang } from "../../../virtuals/i18n/config.js";
const loggerMessage = (title, slug, admin) => `Plugin page ${title} (${slug}) is not an ${admin ? "admin" : "user"} page but is part of the ${admin ? "adminPages" : "userPages"} array, this page will not be shown in the sidebar.`;
function filterAndProcessPages(pages, admin, permission, lang) {
const filteredPages = [];
for (const { title: t, icon: ico, slug, requiredPermissions } of pages) {
const href = makeDashboardRoute(slug);
const icon = ico || "heroicons:cube-transparent";
const title = t[lang] || t[defaultLang];
if (admin) {
if (requiredPermissions === void 0) {
logger.warn(loggerMessage(title, slug, admin));
continue;
}
if (requiredPermissions === "none") {
logger.warn(loggerMessage(title, slug, admin));
continue;
}
if (requiredPermissions === "visitor") {
filteredPages.push({ title, icon, href });
continue;
}
if (requiredPermissions === "editor") {
filteredPages.push({ title, icon, href });
continue;
}
} else {
if (requiredPermissions === "admin") {
logger.warn(loggerMessage(title, slug, admin));
continue;
}
if (requiredPermissions === "owner") {
logger.warn(loggerMessage(title, slug, admin));
continue;
}
}
if (permission?.includes(requiredPermissions || "none")) {
filteredPages.push({ title, icon, href });
}
}
return filteredPages;
}
function getSidebarLinks(lang) {
const { adminPages, userPages } = getPluginDashboardPages();
const baseLinks = [
{
key: "dashboard-link-label",
icon: "heroicons:home",
href: StudioCMSRoutes.mainLinks.dashboardIndex
},
...filterAndProcessPages(userPages, false, ["none", "visitor"], lang)
];
const editorLinks = [
{
key: "content-management-label",
icon: "heroicons:pencil-square",
href: StudioCMSRoutes.mainLinks.contentManagement
},
...filterAndProcessPages(userPages, false, ["editor"], lang)
];
const adminLinks = [
{
key: "user-management-label",
icon: "heroicons:user-group",
href: StudioCMSRoutes.mainLinks.userManagement
},
...filterAndProcessPages(adminPages, true, ["admin"], lang)
];
const ownerLinks = [
{
key: "site-configuration-label",
icon: "heroicons:cog-6-tooth",
href: StudioCMSRoutes.mainLinks.siteConfiguration
},
{
key: "mailer-configuration-label",
icon: "heroicons:inbox",
href: StudioCMSRoutes.mainLinks.smtpConfiguration
},
...filterAndProcessPages(adminPages, true, ["owner"], lang)
];
return {
baseLinks,
editorLinks,
adminLinks,
ownerLinks
};
}
export {
getSidebarLinks
};