ultisuite-client/components/admin/settings/admin-settings-section-view.tsx
R3D347HR4Y 2a0958b70d
Some checks are pending
E2E / Playwright e2e (push) Waiting to run
feat: update agenda references to use ULTICAL_APP_NAME and enhance AI usage sections
- Replaced hardcoded "Agenda" labels with dynamic ULTICAL_APP_NAME in various components for consistency.
- Introduced new AiUsageSection and CompteAiUsageSection components to track AI usage and costs.
- Updated settings and metadata to reflect changes in AI cost policies and usage limits.
- Enhanced user interface elements for better accessibility and user experience across admin settings.
2026-06-16 10:46:31 +02:00

121 lines
3.5 KiB
TypeScript

"use client"
import dynamic from "next/dynamic"
import type { ComponentType } from "react"
import {
resolveAdminSettingsSection,
type AdminSettingsSectionId,
} from "@/lib/admin-settings/settings-nav"
import { AdminAccessGuard } from "@/components/admin/settings/admin-access-guard"
function loadSection<P = object>(
loader: () => Promise<{ default: ComponentType<P> }>
) {
return dynamic(loader, { ssr: false })
}
const SECTIONS: Record<AdminSettingsSectionId, ComponentType> = {
overview: loadSection(() =>
import("@/components/admin/settings/sections/overview-section").then((m) => ({
default: m.OverviewSection,
}))
),
users: loadSection(() =>
import("@/components/admin/settings/sections/users-section").then((m) => ({
default: m.UsersSection,
}))
),
authentication: loadSection(() =>
import("@/components/admin/settings/sections/authentication-section").then((m) => ({
default: m.AuthenticationSection,
}))
),
security: loadSection(() =>
import("@/components/admin/settings/sections/security-section").then((m) => ({
default: m.SecuritySection,
}))
),
quotas: loadSection(() =>
import("@/components/admin/settings/sections/quotas-section").then((m) => ({
default: m.QuotasSection,
}))
),
"file-policies": loadSection(() =>
import("@/components/admin/settings/sections/file-policies-section").then((m) => ({
default: m.FilePoliciesSection,
}))
),
"public-shares": loadSection(() =>
import("@/components/admin/settings/sections/public-shares-section").then((m) => ({
default: m.PublicSharesSection,
}))
),
llm: loadSection(() =>
import("@/components/admin/settings/sections/ai-assistant-section").then((m) => ({
default: m.AiAssistantSection,
}))
),
search: loadSection(() =>
import("@/components/admin/settings/sections/search-section").then((m) => ({
default: m.SearchSection,
}))
),
plugins: loadSection(() =>
import("@/components/admin/settings/sections/plugins-section").then((m) => ({
default: m.PluginsSection,
}))
),
agenda: loadSection(() =>
import("@/components/admin/settings/sections/agenda-section").then((m) => ({
default: m.AgendaSection,
}))
),
ultimeet: loadSection(() =>
import("@/components/admin/settings/sections/ultimeet-section").then((m) => ({
default: m.UltimeetSection,
}))
),
"mail-domains": loadSection(() =>
import("@/components/admin/settings/sections/mail-domains-section").then((m) => ({
default: m.MailDomainsSection,
}))
),
"ai-assistant": loadSection(() =>
import("@/components/admin/settings/sections/ai-assistant-section").then((m) => ({
default: m.AiAssistantSection,
}))
),
"ai-usage": loadSection(() =>
import("@/components/admin/settings/sections/ai-usage-section").then((m) => ({
default: m.AiUsageSection,
}))
),
audit: loadSection(() =>
import("@/components/admin/settings/sections/audit-section").then((m) => ({
default: m.AuditSection,
}))
),
}
export function AdminSettingsSectionView({
sectionId,
}: {
sectionId: AdminSettingsSectionId
}) {
const Section = SECTIONS[sectionId]
return (
<AdminAccessGuard>
<Section />
</AdminAccessGuard>
)
}
export function AdminSettingsSectionFromSegments({
segments,
}: {
segments?: string[]
}) {
const sectionId = resolveAdminSettingsSection(segments)
return <AdminSettingsSectionView sectionId={sectionId} />
}