diff --git a/src/components/providers/OpenAISection/OpenAISection.tsx b/src/components/providers/OpenAISection/OpenAISection.tsx index 43e20ec..1782c72 100644 --- a/src/components/providers/OpenAISection/OpenAISection.tsx +++ b/src/components/providers/OpenAISection/OpenAISection.tsx @@ -57,7 +57,7 @@ export function OpenAISection({ }); const filteredDetails = sourceIds.size - ? collectUsageDetailsForCandidates(usageDetailsBySource, Array.from(sourceIds)) + ? collectUsageDetailsForCandidates(usageDetailsBySource, sourceIds) : []; cache.set(provider.name, calculateStatusBarData(filteredDetails)); }); diff --git a/src/utils/usageIndex.ts b/src/utils/usageIndex.ts index b027c2e..34ebb9d 100644 --- a/src/utils/usageIndex.ts +++ b/src/utils/usageIndex.ts @@ -24,12 +24,10 @@ export function indexUsageDetailsBySource(usageDetails: UsageDetail[]): UsageDet export function collectUsageDetailsForCandidates( usageDetailsBySource: UsageDetailsBySource, - candidates: readonly string[] + candidates: Iterable ): UsageDetail[] { - if (!candidates.length) return EMPTY_USAGE_DETAILS; - let firstDetails: UsageDetail[] | null = null; - let hasMultiple = false; + let merged: UsageDetail[] | null = null; for (const candidate of candidates) { const details = usageDetailsBySource.get(candidate); @@ -40,22 +38,11 @@ export function collectUsageDetailsForCandidates( continue; } - hasMultiple = true; - break; - } - - if (!hasMultiple) { - return firstDetails ?? EMPTY_USAGE_DETAILS; - } - - const merged: UsageDetail[] = []; - for (const candidate of candidates) { - const details = usageDetailsBySource.get(candidate); - if (!details || details.length === 0) continue; - + if (!merged) { + merged = [...firstDetails]; + } details.forEach((detail) => merged.push(detail)); } - return merged; + return merged ?? firstDetails ?? EMPTY_USAGE_DETAILS; } -