| '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' |
|
|
| type Props = { |
| className?: string |
| Icon: any |
| name: string |
| tooltip?: string |
| usage: number |
| total: number |
| unit?: string |
| } |
|
|
| const LOW = 50 |
| const MIDDLE = 80 |
|
|
| const UsageInfo: FC<Props> = ({ |
| className, |
| Icon, |
| name, |
| tooltip, |
| usage, |
| total, |
| unit = '', |
| }) => { |
| const { t } = useTranslation() |
|
|
| const percent = usage / total * 100 |
| const color = (() => { |
| if (percent < LOW) |
| return '#155EEF' |
|
|
| if (percent < MIDDLE) |
| return '#F79009' |
|
|
| return '#F04438' |
| })() |
| return ( |
| <div className={className}> |
| <div className='flex justify-between h-5 items-center'> |
| <div className='flex items-center'> |
| <Icon className='w-4 h-4 text-gray-700' /> |
| <div className='mx-1 leading-5 text-sm font-medium text-gray-700'>{name}</div> |
| {tooltip && ( |
| <Tooltip |
| popupContent={ |
| <div className='w-[180px]'> |
| {tooltip} |
| </div> |
| } |
| /> |
| )} |
| </div> |
| <div className='flex items-center leading-[18px] text-[13px] font-normal'> |
| <div style={{ |
| color: percent < LOW ? '#344054' : color, |
| }}>{usage}{unit}</div> |
| <div className='mx-1 text-gray-300'>/</div> |
| <div className='text-gray-500'>{total === NUM_INFINITE ? t('billing.plansCommon.unlimited') : `${total}${unit}`}</div> |
| </div> |
| </div> |
| <div className='mt-2'> |
| <ProgressBar |
| percent={percent} |
| color={color} |
| /> |
| </div> |
| </div> |
| ) |
| } |
| export default React.memo(UsageInfo) |
|
|