diff --git a/web/chat/chat-input-bar.react.js b/web/chat/chat-input-bar.react.js --- a/web/chat/chat-input-bar.react.js +++ b/web/chat/chat-input-bar.react.js @@ -233,8 +233,10 @@ const { pendingUploads, cancelPendingUpload } = this.props.inputState; const multimediaPreviews = pendingUploads.map(pendingUpload => ( supports only unencrypted images and videos', - ); - const pendingUpload = pendingUploads ? pendingUploads.find(upload => upload.localID === singleMedia.id) : null; + let mediaSource; + if (singleMedia.type === 'photo' || singleMedia.type === 'video') { + mediaSource = { + type: singleMedia.type, + uri: singleMedia.uri, + }; + } else { + mediaSource = { + type: singleMedia.type, + holder: singleMedia.holder, + encryptionKey: singleMedia.encryptionKey, + }; + } + multimedia.push( void, +multimediaCSSClass: string, @@ -36,15 +47,23 @@ class Multimedia extends React.PureComponent { componentDidUpdate(prevProps: Props) { - const { uri, pendingUpload } = this.props; - if (uri === prevProps.uri) { + const { mediaSource, pendingUpload } = this.props; + if ( + prevProps.mediaSource.type === 'encrypted_photo' || + prevProps.mediaSource.type === 'encrypted_video' + ) { + return; + } + + const prevUri = prevProps.mediaSource?.uri; + if (!prevUri || mediaSource.uri === prevUri) { return; } if ( (!pendingUpload || pendingUpload.uriIsReal) && (!prevProps.pendingUpload || !prevProps.pendingUpload.uriIsReal) ) { - URL.revokeObjectURL(prevProps.uri); + URL.revokeObjectURL(prevUri); } } @@ -54,8 +73,7 @@ const { pendingUpload, remove, - type, - uri, + mediaSource, multimediaImageCSSClass, multimediaCSSClass, } = this.props; @@ -97,24 +115,42 @@ ]; imageContainerClasses.push(css.clickable); + // Media element is the actual image or video element (or encrypted version) + let mediaElement; + if (mediaSource.type === 'photo') { + mediaElement = ; + } else if (mediaSource.type === 'video') { + mediaElement = ( + + ); + } else if ( + mediaSource.type === 'encrypted_photo' || + mediaSource.type === 'encrypted_video' + ) { + const { ...encryptedMediaProps } = mediaSource; + mediaElement = ; + } + + // Media node is the container for the media element (button if photo) let mediaNode; - if (type === 'photo') { + if ( + mediaSource.type === 'photo' || + mediaSource.type === 'encrypted_photo' + ) { mediaNode = ( ); } else { mediaNode = ( -
- -
+
{mediaElement}
); } @@ -140,9 +176,8 @@ }; onClick: () => void = () => { - const { pushModal, type, uri } = this.props; - const mediaInfo = { type, uri }; - pushModal(); + const { pushModal, mediaSource } = this.props; + pushModal(); }; }