123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 |
- 'use client'
- import type { FC } from 'react'
- import { useTranslation } from 'react-i18next'
- import cn from '@/utils/classnames'
- import Indicator from '@/app/components/header/indicator'
- type ResultProps = {
- status: string
- time?: number
- tokens?: number
- error?: string
- }
- const StatusPanel: FC<ResultProps> = ({
- status,
- time,
- tokens,
- error,
- }) => {
- const { t } = useTranslation()
- return (
- <div
- className={cn(
- 'px-3 py-[10px] rounded-lg border-[0.5px] border-[rbga(0,0,0,0.05)] shadow-xs',
- status === 'running' && '!bg-primary-50',
- status === 'succeeded' && '!bg-[#ecfdf3]',
- status === 'failed' && '!bg-[#fef3f2]',
- status === 'stopped' && '!bg-[#fffaeb]',
- )}
- >
- <div className='flex'>
- <div className='flex-[33%] max-w-[120px]'>
- <div className='text-xs leading-[18px] font-medium text-gray-400'>{t('runLog.resultPanel.status')}</div>
- <div
- className={cn(
- 'flex items-center gap-1 h-[18px] text-xs leading-3 font-semibold',
- status === 'running' && '!text-primary-600',
- status === 'succeeded' && '!text-[#039855]',
- status === 'failed' && '!text-[#d92d20]',
- status === 'stopped' && '!text-[#f79009]',
- )}
- >
- {status === 'running' && (
- <span>Running</span>
- )}
- {status === 'succeeded' && (
- <>
- <Indicator color={'green'} />
- <span>SUCCESS</span>
- </>
- )}
- {status === 'failed' && (
- <>
- <Indicator color={'red'} />
- <span>FAIL</span>
- </>
- )}
- {status === 'stopped' && (
- <>
- <Indicator color={'yellow'} />
- <span>STOP</span>
- </>
- )}
- </div>
- </div>
- <div className='flex-[33%] max-w-[152px]'>
- <div className='text-xs leading-[18px] font-medium text-gray-400'>{t('runLog.resultPanel.time')}</div>
- <div className='flex items-center gap-1 h-[18px] text-gray-700 text-xs leading-3 font-semibold'>
- {status === 'running' && (
- <div className='w-16 h-2 rounded-sm bg-[rgba(0,0,0,0.05)]' />
- )}
- {status !== 'running' && (
- <span>{`${time?.toFixed(3)}s`}</span>
- )}
- </div>
- </div>
- <div className='flex-[33%]'>
- <div className='text-xs leading-[18px] font-medium text-gray-400'>{t('runLog.resultPanel.tokens')}</div>
- <div className='flex items-center gap-1 h-[18px] text-gray-700 text-xs leading-3 font-semibold'>
- {status === 'running' && (
- <div className='w-20 h-2 rounded-sm bg-[rgba(0,0,0,0.05)]' />
- )}
- {status !== 'running' && (
- <span>{`${tokens || 0} Tokens`}</span>
- )}
- </div>
- </div>
- </div>
- {status === 'failed' && error && (
- <>
- <div className='my-2 h-[0.5px] bg-black opacity-5' />
- <div className='text-xs leading-[18px] text-[#d92d20]'>{error}</div>
- </>
- )}
- </div>
- )
- }
- export default StatusPanel
|