import { useState, useCallback, lazy, Suspense } from 'react' import { getRouteApi } from '@tanstack/react-router' import { useTranslation } from 'react-i18next' import { Skeleton } from '@/components/ui/skeleton' import { SectionPageLayout } from '@/components/layout' import { CardStaggerContainer, CardStaggerItem, FadeIn, } from '@/components/page-transition' import { ModelsFilter } from './components/models/models-filter-dialog' import { AnnouncementsPanel } from './components/overview/announcements-panel' import { ApiInfoPanel } from './components/overview/api-info-panel' import { FAQPanel } from './components/overview/faq-panel' import { SummaryCards } from './components/overview/summary-cards' import { UptimePanel } from './components/overview/uptime-panel' import { DEFAULT_TIME_GRANULARITY } from './constants' import { type DashboardSectionId, DASHBOARD_DEFAULT_SECTION, } from './section-registry' import { type DashboardFilters, type QuotaDataItem } from './types' const route = getRouteApi('/_authenticated/dashboard/$section') const LazyLogStatCards = lazy(() => import('./components/models/log-stat-cards').then((m) => ({ default: m.LogStatCards, })) ) const LazyModelCharts = lazy(() => import('./components/models/model-charts').then((m) => ({ default: m.ModelCharts, })) ) const LazyConsumptionDistributionChart = lazy(() => import('./components/models/consumption-distribution-chart').then((m) => ({ default: m.ConsumptionDistributionChart, })) ) const LazyUserCharts = lazy(() => import('./components/users/user-charts').then((m) => ({ default: m.UserCharts, })) ) function LogStatCardsFallback() { return (
{Array.from({ length: 5 }).map((_, i) => (
))}
) } function ModelChartsFallback() { return (
) } const SECTION_META: Record< DashboardSectionId, { titleKey: string; descriptionKey: string } > = { overview: { titleKey: 'Overview', descriptionKey: 'View dashboard overview and statistics', }, models: { titleKey: 'Model Call Analytics', descriptionKey: 'View model call count analytics and charts', }, users: { titleKey: 'User Analytics', descriptionKey: 'View user consumption statistics and charts', }, } export function Dashboard() { const { t } = useTranslation() const params = route.useParams() const activeSection = (params.section ?? DASHBOARD_DEFAULT_SECTION) as DashboardSectionId const [modelFilters, setModelFilters] = useState({}) const [modelData, setModelData] = useState([]) const [dataLoading, setDataLoading] = useState(false) const handleFilterChange = useCallback((filters: DashboardFilters) => { setModelFilters(filters) }, []) const handleResetFilters = useCallback(() => { setModelFilters({}) }, []) const handleDataUpdate = useCallback( (data: QuotaDataItem[], loading: boolean) => { setModelData(data) setDataLoading(loading) }, [] ) const meta = SECTION_META[activeSection] ?? SECTION_META.overview return ( {t(meta.titleKey)} {t(meta.descriptionKey)} {activeSection === 'models' && ( )}
{activeSection === 'overview' && ( <> )} {activeSection === 'models' && ( <> }> }> }> )} {activeSection === 'users' && ( }> )}
) }