| '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) | |