|
'use client' |
|
import type { FC } from 'react' |
|
import { useTranslation } from 'react-i18next' |
|
import { ImageIndentLeft } from '@/app/components/base/icons/src/vender/line/editor' |
|
import { Markdown } from '@/app/components/base/markdown' |
|
import LoadingAnim from '@/app/components/base/chat/chat/loading-anim' |
|
import StatusContainer from '@/app/components/workflow/run/status-container' |
|
import { FileList } from '@/app/components/base/file-uploader' |
|
import type { FileEntity } from '@/app/components/base/file-uploader/types' |
|
|
|
type ResultTextProps = { |
|
isRunning?: boolean |
|
outputs?: any |
|
error?: string |
|
onClick?: () => void |
|
allFiles?: FileEntity[] |
|
} |
|
|
|
const ResultText: FC<ResultTextProps> = ({ |
|
isRunning, |
|
outputs, |
|
error, |
|
onClick, |
|
allFiles, |
|
}) => { |
|
const { t } = useTranslation() |
|
return ( |
|
<div className='bg-background-section-burn py-2'> |
|
{isRunning && !outputs && ( |
|
<div className='pt-4 pl-[26px]'> |
|
<LoadingAnim type='text' /> |
|
</div> |
|
)} |
|
{!isRunning && error && ( |
|
<div className='px-4'> |
|
<StatusContainer status='failed'> |
|
{error} |
|
</StatusContainer> |
|
</div> |
|
)} |
|
{!isRunning && !outputs && !error && ( |
|
<div className='mt-[120px] px-4 py-2 flex flex-col items-center text-[13px] leading-[18px] text-gray-500'> |
|
<ImageIndentLeft className='w-6 h-6 text-gray-400' /> |
|
<div className='mr-2'>{t('runLog.resultEmpty.title')}</div> |
|
<div> |
|
{t('runLog.resultEmpty.tipLeft')} |
|
<span onClick={onClick} className='cursor-pointer text-primary-600'>{t('runLog.resultEmpty.link')}</span> |
|
{t('runLog.resultEmpty.tipRight')} |
|
</div> |
|
</div> |
|
)} |
|
{outputs && ( |
|
<div className='px-4 py-2'> |
|
<Markdown content={outputs} /> |
|
{!!allFiles?.length && ( |
|
<FileList |
|
files={allFiles} |
|
showDeleteAction={false} |
|
showDownloadAction |
|
canPreview |
|
/> |
|
)} |
|
</div> |
|
)} |
|
</div> |
|
) |
|
} |
|
|
|
export default ResultText |
|
|