/** * Per-type content-tab descriptors for the service page skeleton. * * Each entry names a tab and its component. The service page renders * `[Overview, ...contentTabs(type), Widgets, Config]`. */ import type { ComponentType } from "react"; import type { ServiceInstance } from "../../types"; import { ActionsTab, AlertsTab, FilesTab, JobsTab, LinksTab, MediaTab, MessagingTab, MetricsTab, OverviewTab, RequestsTab, UsersTab, } from "./stubs"; export type ServiceTabComponent = ComponentType<{ instance: ServiceInstance }>; export interface ContentTab { label: string; Component: ServiceTabComponent; } /** Overview tab (shared across all service types). */ export const OVERVIEW_TAB: ContentTab = { label: "Overview", Component: OverviewTab, }; /** * Returns the type-specific content tabs for a service type. * Types with no operational content return `[]` (only Overview + Widgets + Config). */ export function serviceContentTabs(serviceType: string): ContentTab[] { switch (serviceType) { case "jellyfin": return [ { label: "Media", Component: MediaTab }, { label: "Requests", Component: RequestsTab }, ]; case "ssh_tasks": return [ { label: "Files", Component: FilesTab }, { label: "Actions", Component: ActionsTab }, ]; case "backups": return [{ label: "Jobs", Component: JobsTab }]; case "authentik": return [ { label: "Users", Component: UsersTab }, { label: "Messaging", Component: MessagingTab }, ]; case "alertmanager": return [{ label: "Alerts", Component: AlertsTab }]; case "grafana": return [{ label: "Links", Component: LinksTab }]; case "prometheus": return [{ label: "Metrics", Component: MetricsTab }]; default: return []; } }