import React, { useEffect, useState } from "react"; import { Flex, Icon, IconButton, Loader, Text } from "@siteground/styleguide"; import { cn } from "@siteground/styleguide/lib/utils"; import "./styles.scss"; import { FILE_TYPE_MAPPING } from "./types"; import { generateImagePreview, bytesToMegabytes } from "./utils"; interface FileItemProps { file: File; previewUrl?: string; loading: boolean; error?: string; onRemove: () => void; } export const ChatMessageFileItem: React.FC = ({ file, previewUrl, loading, error, onRemove }) => { const [imageSrc, setImageSrc] = useState(previewUrl || null); const isImage = file.type && file.type.startsWith("image/") && !error; useEffect(() => { // Use the previewUrl if provided, otherwise generate it if (previewUrl) { setImageSrc(previewUrl); } else if (isImage) { const loadImagePreview = async () => { const preview = await generateImagePreview(file); setImageSrc(preview); }; loadImagePreview(); } }, [file, previewUrl, isImage]); const imageCardContent = () => { if (loading) { return ; } if (error) { return ( {error} ); } return {file.name}; }; const TextCard = ( {loading ? ( ) : ( )} {file.name} {error ? ( {error} ) : ( {FILE_TYPE_MAPPING[file.type]}  {`${bytesToMegabytes(file?.size)}MB`} )} ); const ImageCard = ( {imageCardContent()} ); return isImage ? ImageCard : TextCard; };