import { useState } from 'react'; import { useTranslation } from 'react-i18next'; import { Card } from '@/components/ui/Card'; import { formatTokensInMillions, formatUsd, type ApiStats } from '@/utils/usage'; import styles from '@/pages/UsagePage.module.scss'; export interface ApiDetailsCardProps { apiStats: ApiStats[]; loading: boolean; hasPrices: boolean; } export function ApiDetailsCard({ apiStats, loading, hasPrices }: ApiDetailsCardProps) { const { t } = useTranslation(); const [expandedApis, setExpandedApis] = useState>(new Set()); const toggleExpand = (endpoint: string) => { setExpandedApis((prev) => { const newSet = new Set(prev); if (newSet.has(endpoint)) { newSet.delete(endpoint); } else { newSet.add(endpoint); } return newSet; }); }; return ( {loading ? (
{t('common.loading')}
) : apiStats.length > 0 ? (
{apiStats.map((api) => (
toggleExpand(api.endpoint)}>
{api.endpoint}
{t('usage_stats.requests_count')}: {api.totalRequests} Tokens: {formatTokensInMillions(api.totalTokens)} {hasPrices && api.totalCost > 0 && ( {t('usage_stats.total_cost')}: {formatUsd(api.totalCost)} )}
{expandedApis.has(api.endpoint) ? '▼' : '▶'}
{expandedApis.has(api.endpoint) && (
{Object.entries(api.models).map(([model, stats]) => (
{model} {stats.requests} {t('usage_stats.requests_count')} {formatTokensInMillions(stats.tokens)}
))}
)}
))}
) : (
{t('usage_stats.no_data')}
)}
); }