bingo-silver / src /components /chat-attachments.tsx
SilverStarShadow's picture
Duplicate from hf4all/bingo
15bfa8d
import Image from 'next/image'
import ClearIcon from '@/assets/images/clear.svg'
import RefreshIcon from '@/assets/images/refresh.svg'
import { FileItem } from '@/lib/bots/bing/types'
import { cn } from '@/lib/utils'
import { useBing } from '@/lib/hooks/use-bing'
type ChatAttachmentsProps = Pick<ReturnType<typeof useBing>, 'attachmentList' | 'setAttachmentList' | 'uploadImage'>
export function ChatAttachments({ attachmentList = [], setAttachmentList, uploadImage }: ChatAttachmentsProps) {
return attachmentList.length ? (
<div className="attachment-list">
{attachmentList.map(file => (
<div className="file-item" key={file.url}>
{file.status === 'loading' && (
<div className="loading">
<div className="bar" />
</div>)
}
{file.status !== 'error' && (
<div className="thumbnail">
<img draggable="false" src={file.url} />
</div>)
}
{file.status === 'error' && (
<div className="error">
<Image alt="refresh" src={RefreshIcon} width={18} onClick={() => uploadImage(file.url)} />
</div>
)}
<button className={cn('dismiss', { 'no-file': file.status === 'error' })} type="button">
<Image alt="clear" src={ClearIcon} width={16} onClick={() => setAttachmentList([])} />
</button>
</div>
))}
</div>
) : null
}