mirror of
https://github.com/langgenius/dify.git
synced 2024-11-16 19:59:50 +08:00
75a6122173
Co-authored-by: StyleZhang <jasonapring2015@outlook.com>
76 lines
1.9 KiB
TypeScript
76 lines
1.9 KiB
TypeScript
'use client'
|
|
import type { FC } from 'react'
|
|
import React from 'react'
|
|
import { useTranslation } from 'react-i18next'
|
|
import { InfoCircle } from '../../base/icons/src/vender/line/general'
|
|
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 htmlContent={<div className='w-[180px]'>
|
|
{tooltip}
|
|
</div>} selector='config-var-tooltip'>
|
|
<InfoCircle className='w-[14px] h-[14px] text-gray-400' />
|
|
</Tooltip>
|
|
)}
|
|
</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)
|