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