ldc-laravel-base-project/resources/ts/back/Components/Layout/Sidebar/SidebarRegistry.tsx
2026-07-09 17:32:17 +02:00

46 lines
1.2 KiB
TypeScript

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);
});