Thumbnail: Add a web thumbnail to show in the preview list (#4774)

Co-authored-by: zubiden <19638254+zubiden@users.noreply.github.com>
This commit is contained in:
Alexander Zinchuk 2024-08-06 20:06:00 +02:00
parent d298880c42
commit e45b408f77
2 changed files with 10 additions and 7 deletions

View File

@ -3,6 +3,7 @@ import React, { memo } from '../../../../lib/teact/teact';
import type { ApiWebDocument } from '../../../../api/types'; import type { ApiWebDocument } from '../../../../api/types';
import { getWebDocumentHash } from '../../../../global/helpers';
import { getFirstLetters } from '../../../../util/textFormat'; import { getFirstLetters } from '../../../../util/textFormat';
import renderText from '../../../common/helpers/renderText'; import renderText from '../../../common/helpers/renderText';
import { preventMessageInputBlurWithBubbling } from '../../helpers/preventMessageInputBlur'; import { preventMessageInputBlurWithBubbling } from '../../helpers/preventMessageInputBlur';
@ -34,7 +35,7 @@ const BaseResult: FC<OwnProps> = ({
}) => { }) => {
let content: TeactNode | undefined; let content: TeactNode | undefined;
const thumbnailDataUrl = useMedia(thumbnail ? `webDocument:${thumbnail.url}` : undefined); const thumbnailDataUrl = useMedia(thumbnail ? getWebDocumentHash(thumbnail) : undefined);
thumbUrl = thumbUrl || thumbnailDataUrl; thumbUrl = thumbUrl || thumbnailDataUrl;
if (thumbUrl) { if (thumbUrl) {

View File

@ -5,6 +5,7 @@ import type {
ApiBotInlineMediaResult, ApiBotInlineResult, ApiPhoto, ApiThumbnail, ApiWebDocument, ApiBotInlineMediaResult, ApiBotInlineResult, ApiPhoto, ApiThumbnail, ApiWebDocument,
} from '../../../../api/types'; } from '../../../../api/types';
import { getPhotoMediaHash, getWebDocumentHash } from '../../../../global/helpers';
import buildClassName from '../../../../util/buildClassName'; import buildClassName from '../../../../util/buildClassName';
import useLastCallback from '../../../../hooks/useLastCallback'; import useLastCallback from '../../../../hooks/useLastCallback';
@ -36,13 +37,13 @@ const MediaResult: FC<OwnProps> = ({
if ('thumbnail' in inlineResult) { if ('thumbnail' in inlineResult) {
thumbnail = inlineResult.thumbnail; thumbnail = inlineResult.thumbnail;
} }
if ('webThumbnail' in inlineResult && isForGallery) { if ('webThumbnail' in inlineResult) {
webThumbnail = inlineResult.webThumbnail; webThumbnail = inlineResult.webThumbnail;
} }
const thumbnailDataUrl = useMedia(webThumbnail ? `webDocument:${webThumbnail.url}` : undefined); const thumbnailBlobUrl = useMedia(getWebDocumentHash(webThumbnail));
const mediaBlobUrl = useMedia(photo && `photo${photo.id}?size=m`); const mediaBlobUrl = useMedia(photo && getPhotoMediaHash(photo, 'pictogram'));
const transitionClassNames = useMediaTransition(mediaBlobUrl); const transitionClassNames = useMediaTransition(mediaBlobUrl || thumbnailBlobUrl);
const handleClick = useLastCallback(() => { const handleClick = useLastCallback(() => {
onClick(inlineResult); onClick(inlineResult);
@ -51,7 +52,7 @@ const MediaResult: FC<OwnProps> = ({
if (isForGallery) { if (isForGallery) {
return ( return (
<div className="MediaResult chat-item-clickable" onClick={handleClick}> <div className="MediaResult chat-item-clickable" onClick={handleClick}>
<img src={(photo?.thumbnail?.dataUri) || thumbnailDataUrl} alt="" draggable={false} /> <img src={(photo?.thumbnail?.dataUri) || thumbnailBlobUrl} alt="" draggable={false} />
<img <img
src={mediaBlobUrl} src={mediaBlobUrl}
className={buildClassName('full-media', transitionClassNames)} className={buildClassName('full-media', transitionClassNames)}
@ -67,7 +68,8 @@ const MediaResult: FC<OwnProps> = ({
return ( return (
<BaseResult <BaseResult
focus={focus} focus={focus}
thumbUrl={mediaBlobUrl || (thumbnail?.dataUri || thumbnailDataUrl)} thumbnail={webThumbnail}
thumbUrl={mediaBlobUrl || thumbnail?.dataUri}
transitionClassNames={transitionClassNames} transitionClassNames={transitionClassNames}
title={title} title={title}
description={description} description={description}