diff --git a/packages/web/src/components/chat/AttachmentRenderer.tsx b/packages/web/src/components/chat/AttachmentRenderer.tsx new file mode 100644 index 00000000..b1cb7de6 --- /dev/null +++ b/packages/web/src/components/chat/AttachmentRenderer.tsx @@ -0,0 +1,110 @@ +import React from 'react'; +import type { Attachment } from '@backspace/shared'; +import { useUIStore } from '../../stores/uiStore'; + +interface AttachmentRendererProps { + attachment: Attachment; +} + +function formatFileSize(bytes: number): string { + if (bytes < 1024) return `${bytes} B`; + if (bytes < 1048576) return `${(bytes / 1024).toFixed(1)} KB`; + return `${(bytes / 1048576).toFixed(1)} MB`; +} + +export function AttachmentRenderer({ attachment }: AttachmentRendererProps) { + const openImagePreview = useUIStore((s) => s.openImagePreview); + + const attUrl = + attachment.filename.startsWith('http') || attachment.filename.startsWith('/') + ? attachment.filename + : `/api/uploads/${attachment.filename}`; + + const thumbUrl = attachment.thumbnailFilename + ? attachment.thumbnailFilename.startsWith('http') || attachment.thumbnailFilename.startsWith('/') + ? attachment.thumbnailFilename + : `/api/uploads/${attachment.thumbnailFilename}` + : null; + + const { mimetype, originalName, size } = attachment; + + if (mimetype.startsWith('image/')) { + return ( +
{originalName}
+{formatFileSize(size)}
+{originalName}
+{formatFileSize(size)}
+