ldc-supportweb/resources/ts/back/Components/Layout/Settings/SettingRegistry.tsx
2026-06-05 12:00:58 +02:00

42 lines
1.1 KiB
TypeScript

// * Packages
import { ReactNode } from "react";
// * Other
import { ConfigBackend } from "@/back/types/global";
import { AppEnv } from "@/types/global";
/* eslint-disable no-unused-vars */
type SettingResolver = (
appEnv: AppEnv,
configBackend: ConfigBackend,
) => ReactNode;
/* eslint-enable no-unused-vars */
export default class SettingRegistry {
private static resolvers: SettingResolver[] = [];
static add(resolver: SettingResolver) {
this.resolvers.push(resolver);
}
static getAll(appEnv: AppEnv, configBackend: ConfigBackend): ReactNode[] {
return this.resolvers.map((resolver) => resolver(appEnv, configBackend));
}
}
// Add all sections presents in files to the registry.
// @ts-expect-error Glob error.
const modules = import.meta.glob("./Sections/*.tsx", {
eager: true,
}) as Record<
string,
{
// eslint-disable-next-line no-unused-vars
default: (appEnv: AppEnv, configBackend: ConfigBackend) => ReactNode;
}
>;
Object.entries(modules)
.sort(([pathA], [pathB]) => pathA.localeCompare(pathB))
.forEach(([, module]) => {
SettingRegistry.add(module.default);
});