import classNames from 'classnames'; import React from 'react'; import { isImageAttachment } from '../../../../types/Attachment'; import { Image } from '../../Image'; import { MessageRenderingProps } from '../../../../models/messageType'; import { useDispatch, useSelector } from 'react-redux'; import { getIsMessageSelectionMode } from '../../../../state/selectors/conversations'; import { SessionIcon } from '../../../icon'; import { showLinkVisitWarningDialog } from '../../../dialog/SessionConfirm'; import { useMessageAttachments, useMessageDirection, useMessageLinkPreview, } from '../../../../state/selectors'; export type MessageLinkPreviewSelectorProps = Pick< MessageRenderingProps, 'direction' | 'attachments' | 'previews' >; type Props = { handleImageError: () => void; messageId: string; }; const linkPreviewsImageSize = 100; export const MessageLinkPreview = (props: Props) => { const dispatch = useDispatch(); const direction = useMessageDirection(props.messageId); const attachments = useMessageAttachments(props.messageId); const previews = useMessageLinkPreview(props.messageId); const isMessageSelectionMode = useSelector(getIsMessageSelectionMode); if (!props.messageId) { return null; } // Attachments take precedence over Link Previews if (attachments && attachments.length) { return null; } if (!previews || previews.length < 1) { return null; } const first = previews[0]; if (!first) { return null; } const previewHasImage = first.image && isImageAttachment(first.image); function openLinkFromPreview() { if (isMessageSelectionMode) { return; } if (previews?.length && previews[0].url) { showLinkVisitWarningDialog(previews[0].url, dispatch); } } return (