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