diff --git a/src/app/(dashboard)/dashboard/usage/components/ProviderLimits/QuotaCard.tsx b/src/app/(dashboard)/dashboard/usage/components/ProviderLimits/QuotaCard.tsx index 1f790cb920..37eb1eb122 100644 --- a/src/app/(dashboard)/dashboard/usage/components/ProviderLimits/QuotaCard.tsx +++ b/src/app/(dashboard)/dashboard/usage/components/ProviderLimits/QuotaCard.tsx @@ -9,6 +9,9 @@ import { worstStatus, filterQuotasByVisibility, getHiddenQuotaRows, + computeCanEditCutoff, + computeCanRedeemResetCredit, + hasQuotaCutoffOverrides, type CardStatus, } from "./utils"; import QuotaCardHeader from "./parts/QuotaCardHeader"; @@ -104,14 +107,11 @@ export default function QuotaCard({ [connection, emailsVisible] ); - const overrides = (connection.quotaWindowThresholds as Record | null) || null; - const hasOverrides = !!overrides && Object.keys(overrides).length > 0; + const hasOverrides = hasQuotaCutoffOverrides(connection); const hasStaleData = !!quota?.stale; const displayRefreshedAt = quota?.stale?.since || refreshedAt; - const canEditCutoff = quotas.some((q: any) => q && typeof q.name === "string" && !q.isCredits); - const canRedeemResetCredit = - connection.provider === "codex" && - quotas.some((q: any) => q?.isResetCredits && Number(q.creditCount ?? q.remaining ?? 0) > 0); + const canEditCutoff = computeCanEditCutoff(quotas); + const canRedeemResetCredit = computeCanRedeemResetCredit(connection.provider, quotas); return ( (r.ok ? r.json() : {})) - .then((s) => { + .then((s: { quotaVisibility?: QuotaVisibilityMap }) => { if (alive) setQuotaVisibility(s?.quotaVisibility || {}); }) .catch(() => {}); diff --git a/src/app/(dashboard)/dashboard/usage/components/ProviderLimits/utils.tsx b/src/app/(dashboard)/dashboard/usage/components/ProviderLimits/utils.tsx index be1b7a451b..eb0dd17a97 100644 --- a/src/app/(dashboard)/dashboard/usage/components/ProviderLimits/utils.tsx +++ b/src/app/(dashboard)/dashboard/usage/components/ProviderLimits/utils.tsx @@ -304,6 +304,25 @@ export function normalizePlanTier(plan) { // === Card Grid Helpers (T7) ================================================= +// Card action-availability derivations. Extracted from QuotaCard so its +// `.some(...)` predicate branches don't count against the component's +// cyclomatic-complexity budget. +export function computeCanEditCutoff(quotas: any[]): boolean { + return quotas.some((q: any) => q && typeof q.name === "string" && !q.isCredits); +} + +export function computeCanRedeemResetCredit(provider: string, quotas: any[]): boolean { + return ( + provider === "codex" && + quotas.some((q: any) => q?.isResetCredits && Number(q.creditCount ?? q.remaining ?? 0) > 0) + ); +} + +export function hasQuotaCutoffOverrides(connection: any): boolean { + const overrides = (connection.quotaWindowThresholds as Record | null) || null; + return !!overrides && Object.keys(overrides).length > 0; +} + export const STATUS_EMOJI = { critical: "🔴", alert: "🟡",