import React, { useState } from 'react'; import classNames from 'classnames'; import { isImageTypeSupported, isVideoTypeSupported } from '../../../util/GoogleChrome'; import { MediaItemType } from '../../LightboxGallery'; import { useEncryptedFileFetch } from '../../../hooks/useEncryptedFileFetch'; import { showLightBox } from '../../../state/ducks/conversations'; import { LightBoxOptions } from '../../session/conversation/SessionConversation'; import { useDisableDrag } from '../../../hooks/useDisableDrag'; type Props = { mediaItem: MediaItemType; mediaItems: Array; }; const MediaGridItemContent = (props: Props) => { const { mediaItem } = props; const i18n = window.i18n; const { attachment, contentType } = mediaItem; const urlToDecrypt = mediaItem.thumbnailObjectUrl || ''; const [imageBroken, setImageBroken] = useState(false); const { loading, urlToLoad } = useEncryptedFileFetch(urlToDecrypt, contentType, false); // data will be url if loading is finished and '' if not const srcData = !loading ? urlToLoad : ''; const disableDrag = useDisableDrag(); const onImageError = () => { // tslint:disable-next-line no-console console.log('MediaGridItem: Image failed to load; failing over to placeholder'); setImageBroken(true); }; if (!attachment) { return null; } if (contentType && isImageTypeSupported(contentType)) { if (imageBroken || !srcData) { return (
); } return ( {i18n('lightboxImageAlt')} ); } else if (contentType && isVideoTypeSupported(contentType)) { if (imageBroken || !srcData) { return (
); } return (
{i18n('lightboxImageAlt')}
); } return (
); }; export const MediaGridItem = (props: Props) => { return (
{ const lightBoxOptions: LightBoxOptions = { media: props.mediaItems, attachment: props.mediaItem.attachment, }; window.inboxStore?.dispatch(showLightBox(lightBoxOptions)); }} >
); };