diff --git a/src/components/common/GifButton.tsx b/src/components/common/GifButton.tsx index ea09d4e47..b9325cb46 100644 --- a/src/components/common/GifButton.tsx +++ b/src/components/common/GifButton.tsx @@ -1,6 +1,6 @@ import type { FC } from '../../lib/teact/teact'; import React, { - memo, useCallback, useEffect, useRef, + memo, useCallback, useEffect, useRef, useState, } from '../../lib/teact/teact'; import type { ApiVideo } from '../../api/types'; @@ -51,12 +51,12 @@ const GifButton: FC = ({ const lang = useLang(); - const hasThumbnail = Boolean(gif.thumbnail?.dataUri); const localMediaHash = `gif${gif.id}`; const isIntersecting = useIsIntersecting(ref, observeIntersection); const loadAndPlay = isIntersecting && !isDisabled; const previewBlobUrl = useMedia(`${localMediaHash}?size=m`, !loadAndPlay, ApiMediaFormat.BlobUrl); - const thumbRef = useCanvasBlur(gif.thumbnail?.dataUri, Boolean(previewBlobUrl)); + const [withThumb] = useState(gif.thumbnail?.dataUri && !previewBlobUrl); + const thumbRef = useCanvasBlur(gif.thumbnail?.dataUri, !withThumb); const videoData = useMedia(localMediaHash, !loadAndPlay, ApiMediaFormat.BlobUrl); const shouldRenderVideo = Boolean(loadAndPlay && videoData); const { isBuffered, bufferingHandlers } = useBuffering(true); @@ -157,7 +157,7 @@ const GifButton: FC = ({ )} - {hasThumbnail && ( + {withThumb && ( = ({ /> )} {shouldRenderSpinner && ( - + )} {onClick && contextMenuPosition !== undefined && ( = ({ mediaData, loadProgress, } = useMediaWithLoadProgress(getMessageMediaHash(message, size), !shouldLoad); const fullMediaData = localBlobUrl || mediaData; + + const [withThumb] = useState(!fullMediaData); const thumbRef = useBlurredMediaThumbRef(message, fullMediaData); const { @@ -163,11 +165,13 @@ const Photo: FC = ({ style={style} onClick={isUploading ? undefined : handleClick} > - + {withThumb && ( + + )} = ({ ApiMediaFormat.BlobUrl, lastSyncTime, ); + + const [withThumb] = useState(!mediaData); const thumbRef = useBlurredMediaThumbRef(message, mediaData); const { isBuffered, bufferingHandlers } = useBuffering(); @@ -186,16 +188,17 @@ const RoundVideo: FC = ({ className="RoundVideo media-inner" onClick={handleClick} > -
- -
+ {withThumb && ( +
+ +
+ )} {mediaData && (
- {/* eslint-disable-next-line jsx-a11y/media-has-caption */} = ({ ); const fullMediaData = localBlobUrl || mediaData; const isInline = Boolean(isIntersecting && fullMediaData); - // Thumbnail is always rendered so we can only disable blur if we have preview + + // Thumbnail is always rendered, so we can only disable blur if we have a preview + const [withThumb] = useState(!previewBlobUrl); const thumbRef = useBlurredMediaThumbRef(message, previewBlobUrl); const { loadProgress: downloadProgress } = useMediaWithLoadProgress( @@ -159,18 +161,21 @@ const Video: FC = ({ style={style} onClick={isUploading ? undefined : handleClick} > - - + {withThumb ? ( + + ) : ( + + )} {isInline && (