|
import React, { useState } from 'react' |
|
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: FileEntity[] |
|
} |
|
|
|
const FileListInLog = ({ fileList }: Props) => { |
|
const [expanded, setExpanded] = useState(false) |
|
|
|
if (!fileList.length) |
|
return null |
|
return ( |
|
<div className={cn('border-t border-divider-subtle px-3 py-2', expanded && 'py-3')}> |
|
<div className='flex justify-between gap-1'> |
|
{expanded && ( |
|
<div></div> |
|
)} |
|
{!expanded && ( |
|
<div className='flex'> |
|
{fileList.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'>DETAIL</div>} |
|
<RiArrowRightSLine className={cn('w-4 h-4 text-text-tertiary', expanded && 'rotate-90')} /> |
|
</div> |
|
</div> |
|
{expanded && ( |
|
<div className='flex flex-col gap-1'> |
|
{fileList.map(file => ( |
|
<FileItem |
|
key={file.id} |
|
file={file} |
|
showDeleteAction={false} |
|
showDownloadAction |
|
/> |
|
))} |
|
</div> |
|
)} |
|
</div> |
|
) |
|
} |
|
|
|
export default FileListInLog |
|
|