/*
Copyright (C) 2023-2026 QuantumNous
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see .
For commercial licensing, please contact support@quantumnous.com
*/
import type { ContentSettings } from '../types'
import { createSectionRegistry } from '../utils/section-registry'
import { AnnouncementsSection } from './announcements-section'
import { ApiInfoSection } from './api-info-section'
import { ChatSettingsSection } from './chat-settings-section'
import { DashboardSection } from './dashboard-section'
import { DrawingSettingsSection } from './drawing-settings-section'
import { FAQSection } from './faq-section'
import { UptimeKumaSection } from './uptime-kuma-section'
/**
* Validate and coerce DataExportDefaultTime to a safe value
*/
function validateDataExportDefaultTime(value: string): 'week' | 'hour' | 'day' {
if (value === 'week' || value === 'hour' || value === 'day') {
return value
}
// Default to 'hour' if value is unexpected
return 'hour'
}
const CONTENT_SECTIONS = [
{
id: 'dashboard',
titleKey: 'Data Dashboard',
build: (settings: ContentSettings) => (
),
},
{
id: 'announcements',
titleKey: 'Announcements',
build: (settings: ContentSettings) => (
),
},
{
id: 'api-info',
titleKey: 'API Addresses',
build: (settings: ContentSettings) => (
),
},
{
id: 'faq',
titleKey: 'FAQ',
build: (settings: ContentSettings) => (
),
},
{
id: 'uptime-kuma',
titleKey: 'Uptime Kuma',
build: (settings: ContentSettings) => (
),
},
{
id: 'chat',
titleKey: 'Chat Presets',
build: (settings: ContentSettings) => (
),
},
{
id: 'drawing',
titleKey: 'Drawing',
build: (settings: ContentSettings) => (
),
},
] as const
export type ContentSectionId = (typeof CONTENT_SECTIONS)[number]['id']
const contentRegistry = createSectionRegistry<
ContentSectionId,
ContentSettings
>({
sections: CONTENT_SECTIONS,
defaultSection: 'dashboard',
basePath: '/system-settings/content',
urlStyle: 'path',
})
export const CONTENT_SECTION_IDS = contentRegistry.sectionIds
export const CONTENT_DEFAULT_SECTION = contentRegistry.defaultSection
export const getContentSectionNavItems = contentRegistry.getSectionNavItems
export const getContentSectionContent = contentRegistry.getSectionContent
export const getContentSectionMeta = contentRegistry.getSectionMeta