diff --git a/native/input/input-state-container.react.js b/native/input/input-state-container.react.js --- a/native/input/input-state-container.react.js +++ b/native/input/input-state-container.react.js @@ -651,7 +651,10 @@ const { hasWiFi } = this.props; const uploadStart = Date.now(); - let uploadExceptionMessage, uploadResult, mediaMissionResult; + let uploadExceptionMessage, + uploadResult, + uploadThumbnailResult, + mediaMissionResult; try { const uploadPromises = []; uploadPromises.push( @@ -695,7 +698,7 @@ ), ); } - [uploadResult] = await Promise.all(uploadPromises); + [uploadResult, uploadThumbnailResult] = await Promise.all(uploadPromises); mediaMissionResult = { success: true }; } catch (e) { uploadExceptionMessage = getMessageForException(e); @@ -707,27 +710,47 @@ }; } - if (uploadResult) { + if ( + (processedMedia.mediaType === 'photo' && uploadResult) || + (processedMedia.mediaType === 'video' && + uploadResult && + uploadThumbnailResult) + ) { const { id, uri, dimensions, loop } = uploadResult; serverID = id; + + let updateMediaPayload = { + messageID: localMessageID, + currentMediaID: localMediaID, + mediaUpdate: { + id, + type: uploadResult.mediaType, + uri, + dimensions, + localMediaSelection: undefined, + loop: uploadResult.mediaType === 'video' ? loop : undefined, + }, + }; + + if (processedMedia.mediaType === 'video') { + invariant(uploadThumbnailResult, 'uploadThumbnailResult exists'); + const { uri: thumbnailURI } = uploadThumbnailResult; + updateMediaPayload = { + ...updateMediaPayload, + mediaUpdate: { + ...updateMediaPayload.mediaUpdate, + thumbnailURI, + }, + }; + } + // When we dispatch this action, it updates Redux and triggers the // componentDidUpdate in this class. componentDidUpdate will handle // calling dispatchMultimediaMessageAction once all the uploads are // complete, and does not wait until this function concludes. this.props.dispatch({ type: updateMultimediaMessageMediaActionType, - payload: { - messageID: localMessageID, - currentMediaID: localMediaID, - mediaUpdate: { - id, - type: uploadResult.mediaType, - uri, - dimensions, - localMediaSelection: undefined, - loop: uploadResult.mediaType === 'video' ? loop : undefined, - }, - }, + payload: updateMediaPayload, }); userTime = Date.now() - start; }