| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107 | import React, { useMemo, useState } from 'react'import { useTranslation } from 'react-i18next'import { RiArrowRightSLine } from '@remixicon/react'import FileImageRender from './file-image-render'import FileTypeIcon from './file-type-icon'import FileItem from './file-uploader-in-attachment/file-item'import type { FileEntity } from './types'import {  getFileAppearanceType,} from './utils'import Tooltip from '@/app/components/base/tooltip'import { SupportUploadFileTypes } from '@/app/components/workflow/types'import cn from '@/utils/classnames'type Props = {  fileList: {    varName: string    list: FileEntity[]  }[]  isExpanded?: boolean  noBorder?: boolean  noPadding?: boolean}const FileListInLog = ({ fileList, isExpanded = false, noBorder = false, noPadding = false }: Props) => {  const { t } = useTranslation()  const [expanded, setExpanded] = useState(isExpanded)  const fullList = useMemo(() => {    return fileList.reduce((acc: FileEntity[], { list }) => {      return [...acc, ...list]    }, [])  }, [fileList])  if (!fileList.length)    return null  return (    <div className={cn('px-3 py-2', expanded && 'py-3', !noBorder && 'border-t border-divider-subtle', noPadding && '!p-0')}>      <div className='flex justify-between gap-1'>        {expanded && (          <div className='grow py-1 text-text-secondary system-xs-semibold-uppercase cursor-pointer' onClick={() => setExpanded(!expanded)}>{t('appLog.runDetail.fileListLabel')}</div>        )}        {!expanded && (          <div className='flex gap-1'>            {fullList.map((file) => {              const { id, name, type, supportFileType, base64Url, url } = file              const isImageFile = supportFileType === SupportUploadFileTypes.image              return (                <>                  {isImageFile && (                    <Tooltip                      popupContent={name}                    >                      <div key={id}>                        <FileImageRender                          className='w-8 h-8'                          imageUrl={base64Url || url || ''}                        />                      </div>                    </Tooltip>                  )}                  {!isImageFile && (                    <Tooltip                      popupContent={name}                    >                      <div key={id} className='p-1.5 rounded-md bg-components-panel-on-panel-item-bg border-[0.5px] border-components-panel-border shadow-xs'>                        <FileTypeIcon                          type={getFileAppearanceType(name, type)}                          size='md'                        />                      </div>                    </Tooltip>                  )}                </>              )            })}          </div>        )}        <div className='flex items-center gap-1 cursor-pointer' onClick={() => setExpanded(!expanded)}>          {!expanded && <div className='text-text-tertiary system-xs-medium-uppercase'>{t('appLog.runDetail.fileListDetail')}</div>}          <RiArrowRightSLine className={cn('w-4 h-4 text-text-tertiary', expanded && 'rotate-90')} />        </div>      </div>      {expanded && (        <div className='flex flex-col gap-3'>          {fileList.map(item => (            <div key={item.varName} className='flex flex-col gap-1 system-xs-regular'>              <div className='py-1 text-text-tertiary '>{item.varName}</div>              {item.list.map(file => (                <FileItem                  key={file.id}                  file={file}                  showDeleteAction={false}                  showDownloadAction                  canPreview                />              ))}            </div>          ))}        </div>      )}    </div>  )}export default FileListInLog
 |