| | |
| | | let tmp_preview_url = url || base64Url |
| | | if (!tmp_preview_url && file?.originalFile) |
| | | tmp_preview_url = URL.createObjectURL(file.originalFile.slice()).toString() |
| | | const download_url = url ? `${url}&as_attachment=true` : base64Url |
| | | |
| | | return ( |
| | | <> |
| | | <div |
| | | className={cn( |
| | | 'group/file-item relative h-[68px] w-[144px] rounded-lg border-[0.5px] border-components-panel-border bg-components-card-bg p-2 shadow-xs', |
| | | 'group/file-item relative p-2 w-[144px] h-[68px] rounded-lg border-[0.5px] border-components-panel-border bg-components-card-bg shadow-xs', |
| | | !uploadError && 'hover:bg-components-card-bg-alt', |
| | | uploadError && 'border border-state-destructive-border bg-state-destructive-hover', |
| | | uploadError && 'bg-state-destructive-hover-alt hover:border-[0.5px] hover:border-state-destructive-border', |
| | | uploadError && 'hover:border-[0.5px] hover:border-state-destructive-border bg-state-destructive-hover-alt', |
| | | )} |
| | | > |
| | | { |
| | | showDeleteAction && ( |
| | | <Button |
| | | className='absolute -right-1.5 -top-1.5 z-[11] hidden h-5 w-5 rounded-full p-0 group-hover/file-item:flex' |
| | | className='hidden group-hover/file-item:flex absolute -right-1.5 -top-1.5 p-0 w-5 h-5 rounded-full z-[11]' |
| | | onClick={() => onRemove?.(id)} |
| | | > |
| | | <RiCloseLine className='h-4 w-4 text-components-button-secondary-text' /> |
| | | <RiCloseLine className='w-4 h-4 text-components-button-secondary-text' /> |
| | | </Button> |
| | | ) |
| | | } |
| | | <div |
| | | className='system-xs-medium mb-1 line-clamp-2 h-8 cursor-pointer break-all text-text-tertiary' |
| | | className='mb-1 h-8 line-clamp-2 system-xs-medium text-text-tertiary break-all cursor-pointer' |
| | | title={name} |
| | | onClick={() => canPreview && setPreviewUrl(tmp_preview_url || '')} |
| | | > |
| | | {name} |
| | | </div> |
| | | <div className='relative flex items-center justify-between'> |
| | | <div className='system-2xs-medium-uppercase flex items-center text-text-tertiary'> |
| | | <div className='flex items-center system-2xs-medium-uppercase text-text-tertiary'> |
| | | <FileTypeIcon |
| | | size='sm' |
| | | type={getFileAppearanceType(name, type)} |
| | |
| | | } |
| | | </div> |
| | | { |
| | | showDownloadAction && download_url && ( |
| | | showDownloadAction && tmp_preview_url && ( |
| | | <ActionButton |
| | | size='m' |
| | | className='absolute -right-1 -top-1 hidden group-hover/file-item:flex' |
| | | className='hidden group-hover/file-item:flex absolute -right-1 -top-1' |
| | | onClick={(e) => { |
| | | e.stopPropagation() |
| | | downloadFile(download_url || '', name) |
| | | downloadFile(tmp_preview_url || '', name) |
| | | }} |
| | | > |
| | | <RiDownloadLine className='h-3.5 w-3.5 text-text-tertiary' /> |
| | | <RiDownloadLine className='w-3.5 h-3.5 text-text-tertiary' /> |
| | | </ActionButton> |
| | | ) |
| | | } |
| | |
| | | { |
| | | uploadError && ( |
| | | <ReplayLine |
| | | className='h-4 w-4 text-text-tertiary' |
| | | className='w-4 h-4 text-text-tertiary' |
| | | onClick={() => onReUpload?.(id)} |
| | | /> |
| | | ) |