disable drag on images

pull/1823/head
audric 4 years ago
parent 5d6c2d94ff
commit 1fb3f74f6e

@ -1,4 +1,4 @@
import React, { useState } from 'react'; import React, { useCallback, useState } from 'react';
import classNames from 'classnames'; import classNames from 'classnames';
import { AvatarPlaceHolder, ClosedGroupAvatar } from './AvatarPlaceHolder'; import { AvatarPlaceHolder, ClosedGroupAvatar } from './AvatarPlaceHolder';
@ -71,6 +71,11 @@ const AvatarImage = (props: {
}) => { }) => {
const { avatarPath, base64Data, name, imageBroken, handleImageError } = props; const { avatarPath, base64Data, name, imageBroken, handleImageError } = props;
const onDragStart = useCallback((e: any) => {
e.preventDefault();
return false;
}, []);
if ((!avatarPath && !base64Data) || imageBroken) { if ((!avatarPath && !base64Data) || imageBroken) {
return null; return null;
} }
@ -79,6 +84,7 @@ const AvatarImage = (props: {
return ( return (
<img <img
onError={handleImageError} onError={handleImageError}
onDragStart={onDragStart}
alt={window.i18n('contactAvatarAlt', [name])} alt={window.i18n('contactAvatarAlt', [name])}
src={dataToDisplay} src={dataToDisplay}
/> />

@ -1,6 +1,6 @@
// tslint:disable:react-a11y-anchors // tslint:disable:react-a11y-anchors
import React, { useEffect, useRef } from 'react'; import React, { useCallback, useEffect, useRef } from 'react';
import is from '@sindresorhus/is'; import is from '@sindresorhus/is';
@ -211,6 +211,10 @@ export const LightboxObject = ({
const isImageTypeSupported = GoogleChrome.isImageTypeSupported(contentType); const isImageTypeSupported = GoogleChrome.isImageTypeSupported(contentType);
const onDragStart = useCallback((e:any) => {
e.preventDefault();
return false; }, []);
const playVideo = () => { const playVideo = () => {
if (!videoRef) { if (!videoRef) {
return; return;
@ -246,7 +250,12 @@ export const LightboxObject = ({
if (isImageTypeSupported) { if (isImageTypeSupported) {
return ( return (
<img style={styles.object as any} alt={window.i18n('lightboxImageAlt')} src={urlToLoad} /> <img
style={styles.object as any}
onDragStart={onDragStart}
alt={window.i18n('lightboxImageAlt')}
src={urlToLoad}
/>
); );
} }

@ -219,6 +219,8 @@ export type ConversationHeaderTitleProps = {
const ConversationHeaderTitle = () => { const ConversationHeaderTitle = () => {
const headerTitleProps = useSelector(getConversationHeaderTitleProps); const headerTitleProps = useSelector(getConversationHeaderTitleProps);
const notificationSetting = useSelector(getCurrentNotificationSettingText);
const marginXS = useTheme().common.margins.xs;
if (!headerTitleProps) { if (!headerTitleProps) {
return null; return null;
} }
@ -256,12 +258,10 @@ const ConversationHeaderTitle = () => {
memberCountText = i18n('members', [count]); memberCountText = i18n('members', [count]);
} }
const notificationSetting = useSelector(getCurrentNotificationSettingText);
const notificationSubtitle = notificationSetting const notificationSubtitle = notificationSetting
? window.i18n('notificationSubtitle', notificationSetting) ? window.i18n('notificationSubtitle', notificationSetting)
: null; : null;
const title = profileName || name || phoneNumber; const title = profileName || name || phoneNumber;
const marginXS = useTheme().common.margins.xs;
return ( return (
<div className="module-conversation-header__title"> <div className="module-conversation-header__title">

@ -1,4 +1,4 @@
import React from 'react'; import React, { useCallback } from 'react';
import classNames from 'classnames'; import classNames from 'classnames';
import { Spinner } from '../basic/Spinner'; import { Spinner } from '../basic/Spinner';
@ -57,6 +57,11 @@ export const Image = (props: Props) => {
width, width,
} = props; } = props;
const onDragStart = useCallback((e: any) => {
e.preventDefault();
return false;
}, []);
const { caption, pending } = attachment || { caption: null, pending: true }; const { caption, pending } = attachment || { caption: null, pending: true };
const canClick = onClick && !pending; const canClick = onClick && !pending;
const role = canClick ? 'button' : undefined; const role = canClick ? 'button' : undefined;
@ -106,6 +111,7 @@ export const Image = (props: Props) => {
height={height} height={height}
width={width} width={width}
src={srcData} src={srcData}
onDragStart={onDragStart}
/> />
)} )}
{caption ? ( {caption ? (
@ -113,6 +119,7 @@ export const Image = (props: Props) => {
className="module-image__caption-icon" className="module-image__caption-icon"
src="images/caption-shadow.svg" src="images/caption-shadow.svg"
alt={window.i18n('imageCaptionIconAlt')} alt={window.i18n('imageCaptionIconAlt')}
onDragStart={onDragStart}
/> />
) : null} ) : null}
<div <div

@ -1,6 +1,6 @@
// tslint:disable:react-this-binding-issue // tslint:disable:react-this-binding-issue
import React, { useState } from 'react'; import React, { useCallback, useState } from 'react';
import classNames from 'classnames'; import classNames from 'classnames';
import * as MIME from '../../../ts/types/MIME'; import * as MIME from '../../../ts/types/MIME';
@ -113,6 +113,11 @@ export const QuoteImage = (props: any) => {
const { loading, urlToLoad } = useEncryptedFileFetch(url, contentType); const { loading, urlToLoad } = useEncryptedFileFetch(url, contentType);
const srcData = !loading ? urlToLoad : ''; const srcData = !loading ? urlToLoad : '';
const onDragStart = useCallback((e:any) => {
e.preventDefault();
return false;
}, []);
const iconElement = icon ? ( const iconElement = icon ? (
<div className="module-quote__icon-container__inner"> <div className="module-quote__icon-container__inner">
<div className="module-quote__icon-container__circle-background"> <div className="module-quote__icon-container__circle-background">
@ -128,7 +133,12 @@ export const QuoteImage = (props: any) => {
return ( return (
<div className="module-quote__icon-container"> <div className="module-quote__icon-container">
<img src={srcData} alt={window.i18n('quoteThumbnailAlt')} onError={handleImageErrorBound} /> <img
src={srcData}
alt={window.i18n('quoteThumbnailAlt')}
onDragStart={onDragStart}
onError={handleImageErrorBound}
/>
{iconElement} {iconElement}
</div> </div>
); );

@ -1,4 +1,4 @@
import React, { useState } from 'react'; import React, { useCallback, useState } from 'react';
import classNames from 'classnames'; import classNames from 'classnames';
import { isImageTypeSupported, isVideoTypeSupported } from '../../../util/GoogleChrome'; import { isImageTypeSupported, isVideoTypeSupported } from '../../../util/GoogleChrome';
@ -21,6 +21,11 @@ const MediaGridItemContent = (props: Props) => {
const [imageBroken, setImageBroken] = useState(false); const [imageBroken, setImageBroken] = useState(false);
const { loading, urlToLoad } = useEncryptedFileFetch(urlToDecrypt, contentType); const { loading, urlToLoad } = useEncryptedFileFetch(urlToDecrypt, contentType);
const onDragStart = useCallback((e: any) => {
e.preventDefault();
return false;
}, []);
// data will be url if loading is finished and '' if not // data will be url if loading is finished and '' if not
const srcData = !loading ? urlToLoad : ''; const srcData = !loading ? urlToLoad : '';
@ -52,6 +57,7 @@ const MediaGridItemContent = (props: Props) => {
className="module-media-grid-item__image" className="module-media-grid-item__image"
src={srcData} src={srcData}
onError={onImageError} onError={onImageError}
onDragStart={onDragStart}
/> />
); );
} else if (contentType && isVideoTypeSupported(contentType)) { } else if (contentType && isVideoTypeSupported(contentType)) {
@ -73,6 +79,7 @@ const MediaGridItemContent = (props: Props) => {
className="module-media-grid-item__image" className="module-media-grid-item__image"
src={srcData} src={srcData}
onError={onImageError} onError={onImageError}
onDragStart={onDragStart}
/> />
<div className="module-media-grid-item__circle-overlay"> <div className="module-media-grid-item__circle-overlay">
<div className="module-media-grid-item__play-overlay" /> <div className="module-media-grid-item__play-overlay" />

Loading…
Cancel
Save