Message List: Fix focusing with no animations

This commit is contained in:
Alexander Zinchuk 2021-07-14 18:08:28 +03:00
parent dc5b003aae
commit eb03d502a2
4 changed files with 19 additions and 11 deletions

View File

@ -1,7 +1,14 @@
import { ApiMediaFormat, ApiMessage } from '../../../../api/types'; import { ApiMediaFormat, ApiMessage } from '../../../../api/types';
import * as mediaLoader from '../../../../util/mediaLoader'; import * as mediaLoader from '../../../../util/mediaLoader';
import { getMessageMediaHash, getMessagePhoto, getMessageText } from '../../../../modules/helpers'; import {
getMessageMediaHash,
getMessagePhoto,
getMessageText,
getMessageWebPagePhoto,
getMessageWebPageVideo,
hasMessageLocalBlobUrl,
} from '../../../../modules/helpers';
import { CLIPBOARD_ITEM_SUPPORTED, copyImageToClipboard, copyTextToClipboard } from '../../../../util/clipboard'; import { CLIPBOARD_ITEM_SUPPORTED, copyImageToClipboard, copyTextToClipboard } from '../../../../util/clipboard';
type ICopyOptions = { type ICopyOptions = {
@ -14,16 +21,18 @@ export function getMessageCopyOptions(
): ICopyOptions { ): ICopyOptions {
const options: ICopyOptions = []; const options: ICopyOptions = [];
const text = getMessageText(message); const text = getMessageText(message);
const photo = getMessagePhoto(message); const photo = getMessagePhoto(message)
const mediaHash = getMessageMediaHash(message, 'inline')!; || (!getMessageWebPageVideo(message) ? getMessageWebPagePhoto(message) : undefined);
const canImageBeCopied = photo && mediaHash && CLIPBOARD_ITEM_SUPPORTED; const mediaHash = getMessageMediaHash(message, 'inline');
const canImageBeCopied = photo && (mediaHash || hasMessageLocalBlobUrl(message)) && CLIPBOARD_ITEM_SUPPORTED;
const selection = window.getSelection(); const selection = window.getSelection();
if (canImageBeCopied) { if (canImageBeCopied) {
options.push({ options.push({
label: 'lng_context_copy_image', label: 'lng_context_copy_image',
handler: () => { handler: () => {
mediaLoader.fetch(mediaHash, ApiMediaFormat.BlobUrl).then(copyImageToClipboard); Promise.resolve(mediaHash ? mediaLoader.fetch(mediaHash, ApiMediaFormat.BlobUrl) : photo!.blobUrl)
.then(copyImageToClipboard);
if (afterEffect) { if (afterEffect) {
afterEffect(); afterEffect();

View File

@ -171,11 +171,7 @@ export function getMessageMediaHash(
case 'pictogram': case 'pictogram':
return `${base}?size=m`; return `${base}?size=m`;
case 'inline': case 'inline':
if (hasMessageLocalBlobUrl(message)) { return !hasMessageLocalBlobUrl(message) ? `${base}?size=x` : undefined;
return undefined;
}
return `${base}?size=x`;
case 'viewerPreview': case 'viewerPreview':
return `${base}?size=x`; return `${base}?size=x`;
case 'viewerFull': case 'viewerFull':

View File

@ -27,7 +27,8 @@ export const copyTextToClipboard = (str: string): void => {
document.body.removeChild(textCopyEl); document.body.removeChild(textCopyEl);
}; };
export const copyImageToClipboard = (imageUrl: string) => { export const copyImageToClipboard = (imageUrl?: string) => {
if (!imageUrl) return;
const canvas = document.createElement('canvas'); const canvas = document.createElement('canvas');
const ctx = canvas.getContext('2d'); const ctx = canvas.getContext('2d');
const imageEl = new Image(); const imageEl = new Image();

View File

@ -113,6 +113,8 @@ function scrollWithJs(
if (forceDuration === 0) { if (forceDuration === 0) {
container.scrollTop = target; container.scrollTop = target;
isAnimating = false;
return; return;
} }