"use client" import { useCallback, useEffect, useState } from "react" import { RefreshCwIcon } from "lucide-react" import { toast } from "sonner" import { Button } from "@/components/ui/button" import { Skeleton } from "@/components/ui/skeleton" import { Card, CardContent } from "@/components/ui/card" import { useI18n } from "@/i18n/provider" import { fetchDashboardOverview, type DashboardOverview, type DashboardRange, } from "@/lib/api/dashboard" import { SummaryCards } from "./summary-cards" import { TrendPanel } from "./trend-panel" import { TeamLoadPanel } from "./team-load-panel" import { AlertList } from "./alert-list" function LoadingCards() { return (
{Array.from({ length: 6 }).map((_, index) => ( ))}
) } export function DashboardHome() { const t = useI18n() const [range, setRange] = useState("7d") const [data, setData] = useState(null) const [loading, setLoading] = useState(true) const [refreshing, setRefreshing] = useState(false) const loadData = useCallback( async (nextRange: DashboardRange, showRefreshing = false) => { if (showRefreshing) { setRefreshing(true) } else { setLoading(true) } try { const result = await fetchDashboardOverview(nextRange) setData(result) } catch (error) { toast.error(error instanceof Error ? error.message : t("dashboardHome.loadFailed")) } finally { setLoading(false) setRefreshing(false) } }, [t] ) useEffect(() => { void loadData(range) }, [loadData, range]) const rangeOptions: Array<{ value: DashboardRange; label: string }> = [ { value: "today", label: t("dashboardHome.rangeToday") }, { value: "7d", label: t("dashboardHome.range7d") }, { value: "30d", label: t("dashboardHome.range30d") }, ] return (
{rangeOptions.map((item) => ( ))}
{loading && !data ? ( ) : data ? ( <>
{t("dashboardHome.enabledAiAgents")}
{data.aiStats.enabledAiAgents}
{t("dashboardHome.enabledChannels")}
{data.aiStats.enabledChannels}
{t("dashboardHome.todayKnowledgeRetrieves")}
{data.aiStats.todayKnowledgeRetrieves}
{t("dashboardHome.todayKnowledgeRetrieveFailRate")}
{data.aiStats.todayKnowledgeRetrieveFailRate.toFixed(1)}%
{t("dashboardHome.todayAgentRunFailCount")}
{data.aiStats.todayAgentRunFailCount}
{t("dashboardHome.todayAiHandoffCount")}
{data.aiStats.todayAiHandoffCount}
) : ( {t("dashboardHome.empty")} )}
) }