UNPKG

studiocms

Version:

Astro Native CMS for AstroDB. Built from the ground up by the Astro community.

94 lines (93 loc) 3.01 kB
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 };