UNPKG

next-start-cli

Version:

This is a CLI tool to create a nextjs project and add the necessary dependencies and configurations

205 lines (196 loc) 4.3 kB
import { UserRoles } from "@/enum/user"; import { getAvailableRoutesForRole } from "@/lib/role/functions"; import { TlinkTarget } from "@/types/components-props"; import { type LucideIcon as TLucideIcon, SquareTerminal, HistoryIcon, ListStartIcon, BookOpen, Frame, Folder, Forward, Trash2, PieChart, LayoutDashboard, Users, } from "lucide-react"; export interface IBaseMenuItem { title: string; url: string; linkTarget?: TlinkTarget; icon?: TLucideIcon; onlyForRoles?: UserRoles[]; } interface ISubMenuItem extends IBaseMenuItem { seperator?: boolean; } export interface IMenueItem extends IBaseMenuItem { items?: ISubMenuItem[]; } /** * An array of routes showing in sidebar as collapsible menu */ const navMain: IMenueItem[] = [ { title: "Dashboard", url: "/admin/dashboard", icon: LayoutDashboard, items: [ { title: "Overview", url: "/admin/dashboard/overview", icon: HistoryIcon, }, { title: "Activity", url: "/admin/dashboard/activity", icon: ListStartIcon, }, { title: "Settings", url: "/admin/dashboard/settings", }, ], }, { title: "Playground", url: "/admin/playground", icon: SquareTerminal, onlyForRoles: [UserRoles.ADMIN], items: [ { title: "History", url: "/admin/playground/history", icon: HistoryIcon, }, { title: "Starred", url: "/admin/playground/starred", icon: ListStartIcon, }, { title: "Settings", url: "/admin/playground/settings", }, ], }, { title: "Documentation", url: "/admin/docs", icon: BookOpen, items: [ { title: "Introduction", url: "/admin/docs/introduction", onlyForRoles: [UserRoles.OPERATOR], }, { title: "Get Started", url: "/admin/docs/get-started", onlyForRoles: [UserRoles.SCANNER], }, { title: "Tutorials", url: "/admin/docs/tutorials", onlyForRoles: [UserRoles.ADMIN], }, { title: "Changelog", url: "/admin/docs/changelog", }, ], }, { title: "Users", url: "/admin/users", icon: Users, }, ]; /** * An array of routes showing in admin sidebar as Dropdown menu */ const projects: IMenueItem[] = [ { title: "Design Engineering", url: "/design", icon: Frame, items: [ { title: "View Project", url: "/design/view", icon: Folder, }, { title: "Share Project", url: "/design/share", icon: Forward, seperator: true, }, { title: "Delete Project", url: "/design/delete", icon: Trash2, }, ], }, { title: "Sales & Marketing", url: "/sales", icon: PieChart, items: [ { title: "View Project", url: "/sales/view", icon: Folder, }, { title: "Share Project", url: "/sales/share", icon: Forward, }, { title: "Delete Project", url: "/sales/delete", icon: Trash2, }, ], }, { title: "Sales & Marketing 2", url: "/sales2", icon: PieChart, items: [ { title: "View Project 2", url: "/sales2/view", icon: Folder, }, { title: "Share Project 2", url: "/sales2/share", icon: Forward, }, { title: "Delete Project 2", url: "/sales2/delete", icon: Trash2, }, ], }, ]; export function availableNavMainRoutes(role: UserRoles | undefined) { return getAvailableRoutesForRole({ role, routes: navMain, }); } export function availableProjectsRoutes(role: UserRoles | undefined) { return getAvailableRoutesForRole({ role, routes: projects, }); } export function getAllAvailableRoutes(role: UserRoles | undefined) { return [...availableNavMainRoutes(role), ...availableProjectsRoutes(role)]; }