RocketChat/Rocket.Chat

View on GitHub
apps/meteor/client/components/message/content/attachments/file/ImageAttachment.tsx

Summary

Maintainability
A
40 mins
Test Coverage
import type { ImageAttachmentProps } from '@rocket.chat/core-typings';
import { useMediaUrl } from '@rocket.chat/ui-contexts';
import React from 'react';

import MarkdownText from '../../../../MarkdownText';
import MessageCollapsible from '../../../MessageCollapsible';
import MessageContentBody from '../../../MessageContentBody';
import AttachmentImage from '../structure/AttachmentImage';
import { useLoadImage } from './hooks/useLoadImage';

const ImageAttachment = ({
    id,
    title,
    image_url: url,
    image_preview: imagePreview,
    image_size: size,
    image_dimensions: imageDimensions = {
        width: 368,
        height: 368,
    },
    description,
    descriptionMd,
    title_link: link,
    title_link_download: hasDownload,
    collapsed,
}: ImageAttachmentProps) => {
    const [loadImage, setLoadImage] = useLoadImage();
    const getURL = useMediaUrl();

    return (
        <>
            {descriptionMd ? <MessageContentBody md={descriptionMd} /> : <MarkdownText parseEmoji content={description} />}
            <MessageCollapsible title={title} hasDownload={hasDownload} link={getURL(link || url)} size={size} isCollapsed={collapsed}>
                <AttachmentImage
                    {...imageDimensions}
                    loadImage={loadImage}
                    setLoadImage={setLoadImage}
                    dataSrc={getURL(link || url)}
                    src={getURL(url)}
                    previewUrl={`data:image/png;base64,${imagePreview}`}
                    id={id}
                />
            </MessageCollapsible>
        </>
    );
};

export default ImageAttachment;