{sub.name}
{val.name}
{val.helperText && ({val.helperText}
)}"use client"; import { TrendingUp, Download, Info, CheckCircle2, AlertTriangle, RefreshCw, } from "lucide-react"; import { useMemo } from "react"; import { useSearchParams } from "next/navigation"; import { useAuth } from "@/components/AuthProvider"; import { useD4Metrics } from "@/hooks/useD4Metrics"; import { toD4UserId } from "@/lib/d4Metrics"; import { buildRuntimeMetrics, getRuntimeMetric, type MetricDataState } from "@/lib/metricRuntime"; export default function MetricsContent({ metricId }: { metricId: string }) { const searchParams = useSearchParams(); const { user } = useAuth(); const normalizedMetricId = metricId.toUpperCase(); const isD4Metric = normalizedMetricId === "D4"; const selectedStudentId = searchParams.get("student") || (user?.role === "stu" ? user.id : null); const selectedD4UserId = toD4UserId(selectedStudentId); const d4Query = useMemo(() => (selectedD4UserId ? { userId: selectedD4UserId } : {}), [selectedD4UserId]); const d4Metrics = useD4Metrics(d4Query, { enabled: isD4Metric }); const runtimeMetrics = useMemo( () => buildRuntimeMetrics({ data: d4Metrics.data, error: d4Metrics.error, isLoading: d4Metrics.isLoading }), [d4Metrics.data, d4Metrics.error, d4Metrics.isLoading], ); const metricObj = getRuntimeMetric(runtimeMetrics, normalizedMetricId); if (!metricObj) { return (
关于 {metricObj.id} 的详细数据维度拆解
{val.name}
{val.helperText && ({val.helperText}
)}