import { type NavListLinksProps } from "@/back/Components/Layout/Sidebar/AppSidebar"; import type { AuthProp, ConfigBackend } from "@/back/types/global"; export type SidebarGroupType = "pages" | "admin" | "modules"; export interface SidebarGroupLink { link: NavListLinksProps; group: SidebarGroupType; } export type LinkResolver = ( auth: AuthProp, configBackend: ConfigBackend, ) => SidebarGroupLink; const resolvers: LinkResolver[] = []; export const SidebarRegistry = { add(resolver: LinkResolver) { resolvers.push(resolver); }, getAll( auth: AuthProp, configBackend: ConfigBackend, group: SidebarGroupType, ): NavListLinksProps[] { return resolvers .map((resolver) => resolver(auth, configBackend)) .filter((sidebarGroupLink) => sidebarGroupLink.group === group) .sort((a, b) => a.link.title.localeCompare(b.link.title, undefined, { sensitivity: "base", }), ) .map((sidebarGroupLink) => sidebarGroupLink.link); }, }; // Add all links presents in files to the registry. const modules = import.meta.glob<{ default: LinkResolver }>("./Links/*.tsx", { eager: true, }); Object.values(modules).forEach((module) => { SidebarRegistry.add(module.default); });