'use client' import type { FC } from 'react' import React from 'react' import { useTranslation } from 'react-i18next' import ProgressBar from '../progress-bar' import { NUM_INFINITE } from '../config' import Tooltip from '@/app/components/base/tooltip' import cn from '@/utils/classnames' type Props = { className?: string Icon: any name: string tooltip?: string usage: number total: number unit?: string unitPosition?: 'inline' | 'suffix' resetHint?: string resetInDays?: number hideIcon?: boolean } const WARNING_THRESHOLD = 80 const UsageInfo: FC = ({ className, Icon, name, tooltip, usage, total, unit, unitPosition = 'suffix', resetHint, resetInDays, hideIcon = false, }) => { const { t } = useTranslation() const percent = usage / total * 100 const color = percent >= 100 ? 'bg-components-progress-error-progress' : (percent >= WARNING_THRESHOLD ? 'bg-components-progress-warning-progress' : 'bg-components-progress-bar-progress-solid') const isUnlimited = total === NUM_INFINITE let totalDisplay: string | number = isUnlimited ? t('billing.plansCommon.unlimited') : total if (!isUnlimited && unit && unitPosition === 'inline') totalDisplay = `${total}${unit}` const showUnit = !!unit && !isUnlimited && unitPosition === 'suffix' const resetText = resetHint ?? (typeof resetInDays === 'number' ? t('billing.usagePage.resetsIn', { count: resetInDays }) : undefined) const rightInfo = resetText ? (
{resetText}
) : (showUnit && (
{unit}
)) return (
{!hideIcon && Icon && ( )}
{name}
{tooltip && ( {tooltip}
} /> )}
{usage}
/
{totalDisplay}
{rightInfo}
) } export default React.memo(UsageInfo)