From 6770f6ba0b232efa0ce6641bbff258437dcb56db Mon Sep 17 00:00:00 2001 From: luulam Date: Mon, 17 Aug 2026 16:30:26 +0700 Subject: [PATCH] fix(dashboard): ReferenceError getProviderLabel in RecentRequests getProviderLabel was a useCallback inside the UsageStats component, but RecentRequests (a sibling module-level component) called it too, causing "getProviderLabel is not defined" at runtime. Extract a module-level resolveProviderLabel() (registry lookup by id/alias/display prefix) used by RecentRequests; keep the component-scoped getProviderLabel (which adds connected-provider nodeName/name lookup) for the main table render paths. --- src/shared/components/UsageStats.js | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/src/shared/components/UsageStats.js b/src/shared/components/UsageStats.js index b5b75062..e29c5ca3 100644 --- a/src/shared/components/UsageStats.js +++ b/src/shared/components/UsageStats.js @@ -4,11 +4,19 @@ import { useState, useEffect, useMemo, useCallback, useRef } from "react"; import { useSearchParams, useRouter } from "next/navigation"; import { FREE_PROVIDERS, AI_PROVIDERS, getProviderByAlias } from "@/shared/constants/providers"; +// Resolve a provider key (built-in id, alias, or custom node id like +// "openai-compatible-chat-096baf9a-...") to a human-friendly name. +// Module-level so standalone components (RecentRequests) can use it too. +function resolveProviderLabel(providerId) { + if (!providerId) return "Unknown Provider"; + const known = getProviderByAlias(providerId) || AI_PROVIDERS[providerId] || FREE_PROVIDERS[providerId]; + return known?.name || known?.uiAlias || known?.alias || providerId; +} + // Keep providers without serviceKinds (default LLM) or with "llm" in serviceKinds function isLLMProvider(id) { const p = AI_PROVIDERS[id]; - if (!p?.serviceKinds) return true; - return p.serviceKinds.includes("llm"); + if (!p?.serviceKinds) return true; return p.serviceKinds.includes("llm"); } import Badge from "./Badge"; import Card from "./Card"; @@ -104,7 +112,7 @@ function RecentRequests({ requests = [] }) { className="py-1.5 font-mono truncate max-w-[80px] text-text-muted" title={r.provider} > - {getProviderLabel(r.provider) || "—"} + {resolveProviderLabel(r.provider) || "—"} @@ -313,13 +321,13 @@ export default function UsageStats({ // Resolve a provider key (built-in id, alias, or custom node id like // "openai-compatible-chat-096baf9a-...") to a human-friendly name. + // Prefers the connected-providers state (nodeName > connection name) + // and falls back to the module-level registry lookup. const getProviderLabel = useCallback((providerId) => { if (!providerId) return "Unknown Provider"; const match = providers.find((p) => p.provider === providerId || p.id === providerId); if (match) return match.nodeName || match.name || providerId; - // Fallback: known built-in provider (by id, alias, or display prefix) - const known = getProviderByAlias(providerId) || AI_PROVIDERS[providerId] || FREE_PROVIDERS[providerId]; - return known?.name || known?.uiAlias || known?.alias || providerId; + return resolveProviderLabel(providerId); }, [providers]); const [periodLocal, setPeriodLocal] = useState("today"); const isInitialLoad = useRef(true);