Ignore message metadata on triple click

Fixes #6428
This commit is contained in:
Nick Rayburn 2023-06-30 17:11:09 -05:00
parent 35d1451e42
commit 3026c2ff56
3 changed files with 234 additions and 198 deletions

View file

@ -193,6 +193,7 @@ export enum GiftBadgeStates {
Opened = 'Opened',
Redeemed = 'Redeemed',
}
export type GiftBadgeType = {
expiration: number;
id: string | undefined;
@ -390,6 +391,8 @@ export class Message extends React.PureComponent<Props, State> {
current: false,
};
private metadataRef: React.RefObject<HTMLDivElement> = React.createRef();
public reactionsContainerRefMerger = createRefMerger();
public expirationCheckInterval: NodeJS.Timeout | undefined;
@ -823,6 +826,7 @@ export class Message extends React.PureComponent<Props, State> {
isTapToViewExpired={isTapToViewExpired}
onWidthMeasured={isInline ? this.updateMetadataWidth : undefined}
pushPanelForConversation={pushPanelForConversation}
ref={this.metadataRef}
retryMessageSend={retryMessageSend}
showEditHistoryModal={showEditHistoryModal}
status={status}
@ -1779,7 +1783,7 @@ export class Message extends React.PureComponent<Props, State> {
}
return (
<div
<div // eslint-disable-line jsx-a11y/click-events-have-key-events,jsx-a11y/no-static-element-interactions
className={classNames(
'module-message__text',
`module-message__text--${direction}`,
@ -1790,6 +1794,18 @@ export class Message extends React.PureComponent<Props, State> {
? 'module-message__text--delete-for-everyone'
: null
)}
onClick={e => {
// Prevent metadata from being selected on triple clicks.
const clickCount = e.detail;
const range = window.getSelection()?.getRangeAt(0);
if (
clickCount === 3 &&
this.metadataRef.current &&
range?.intersectsNode(this.metadataRef.current)
) {
range.setEndBefore(this.metadataRef.current);
}
}}
onDoubleClick={(event: React.MouseEvent) => {
// Prevent double-click interefering with interactions _inside_
// the bubble.