37 lines
933 B
TypeScript
37 lines
933 B
TypeScript
// * Packages
|
|
import { ReactNode } from "react";
|
|
// * Other
|
|
import { AppEnv } from "@/types/global";
|
|
|
|
// eslint-disable-next-line no-unused-vars
|
|
type SettingResolver = (appEnv: AppEnv) => ReactNode;
|
|
|
|
export default class SettingRegistry {
|
|
private static resolvers: SettingResolver[] = [];
|
|
|
|
static add(resolver: SettingResolver) {
|
|
this.resolvers.push(resolver);
|
|
}
|
|
|
|
static getAll(appEnv: AppEnv): ReactNode[] {
|
|
return this.resolvers.map((resolver) => resolver(appEnv));
|
|
}
|
|
}
|
|
|
|
// 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) => ReactNode;
|
|
}
|
|
>;
|
|
|
|
Object.entries(modules)
|
|
.sort(([pathA], [pathB]) => pathA.localeCompare(pathB))
|
|
.forEach(([, module]) => {
|
|
SettingRegistry.add(module.default);
|
|
});
|