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.
This commit is contained in:
2026-08-17 16:30:26 +07:00
parent c61dc6de46
commit 6770f6ba0b

View File

@@ -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) || "—"}
</td>
<td className="py-1.5 text-right whitespace-nowrap">
<span className="text-primary">
@@ -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);