import { InfoIcon, LoaderCircleIcon } from 'lucide-react' import { useTranslation } from 'react-i18next' import type { IPicGoCloudBillingOverview, IPicGoCloudUsage } from '#/types/cloud' import { Button } from '@/components/ui/button' import { Skeleton } from '@/components/ui/skeleton' import { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip' import { cn } from '@/lib/utils' import { capitalizePlanCode, isQuotaDowngraded } from '@/utils/plan' import { computePercent, formatCountDimension, formatStorageDimension, isOverQuota } from './cloud-plan-usage-helpers' interface UsageBodyProps { data: IPicGoCloudUsage | null billing: IPicGoCloudBillingOverview | null isLoading: boolean isError: boolean isFetching: boolean onRetry: () => void } export function UsageBody ({ data, billing, isLoading, isError, isFetching, onRetry }: UsageBodyProps) { const { t } = useTranslation() const storageLabel = t('PICGO_CLOUD_STORAGE_LABEL') const filesLabel = t('PICGO_CLOUD_FILES_LABEL') if (isLoading) { return (
) } if (isError || !data) { return } const unlimitedLabel = t('PICGO_CLOUD_USAGE_UNLIMITED') const renderProgressTemplate = (used: string, total: string) => t('PICGO_CLOUD_USAGE_PROGRESS', { used, total }) const effective = data.effectiveQuotaPlan ?? null const downgraded = isQuotaDowngraded(billing?.plan?.paid ?? data.plan ?? null, effective) const downgradeTooltip = downgraded ? t('PICGO_CLOUD_QUOTA_DOWNGRADED', { plan: capitalizePlanCode(effective) }) : undefined return (
) } interface UsageProgressRowProps { label: string value: string percent: number overQuota: boolean tooltipMessage?: string } function UsageProgressRow ({ label, value, percent, overQuota, tooltipMessage }: UsageProgressRowProps) { return (
{label}
{value} {tooltipMessage ? ( {tooltipMessage} ) : null}
) } function UsageProgressSkeleton ({ label }: { label: string }) { return (
{label}
) } function UsageErrorState ({ isFetching, onRetry }: { isFetching: boolean, onRetry: () => void }) { const { t } = useTranslation() return (

{t('PICGO_CLOUD_USAGE_LOAD_FAILED')}

) }