Adds all message actions to context menu

This commit is contained in:
Josh Perez 2021-12-06 16:52:47 -05:00 committed by GitHub
parent b71122c7f9
commit 4c85c04d45
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 18 additions and 7 deletions

View file

@ -18,7 +18,10 @@ import type {
import { ReadStatus } from '../../messages/MessageReadStatus';
import { Avatar } from '../Avatar';
import { Spinner } from '../Spinner';
import { MessageBodyReadMore } from './MessageBodyReadMore';
import {
doesMessageBodyOverflow,
MessageBodyReadMore,
} from './MessageBodyReadMore';
import { MessageMetadata } from './MessageMetadata';
import { ImageGrid } from './ImageGrid';
import { GIF } from './GIF';
@ -1367,7 +1370,7 @@ export class Message extends React.PureComponent<Props, State> {
{({ ref: popperRef }) => {
// Only attach the popper reference to the reaction button if it is
// visible (it is hidden when the timeline is narrow)
const maybePopperRef = this.shouldShowAdditionalMenuButtons()
const maybePopperRef = this.isWindowWidthNotNarrow()
? popperRef
: undefined;
@ -1421,7 +1424,7 @@ export class Message extends React.PureComponent<Props, State> {
{({ ref: popperRef }) => {
// Only attach the popper reference to the collapsed menu button if the reaction
// button is not visible (it is hidden when the timeline is narrow)
const maybePopperRef = !this.shouldShowAdditionalMenuButtons()
const maybePopperRef = !this.isWindowWidthNotNarrow()
? popperRef
: undefined;
@ -1459,7 +1462,7 @@ export class Message extends React.PureComponent<Props, State> {
`module-message__buttons--${direction}`
)}
>
{this.shouldShowAdditionalMenuButtons() && (
{this.isWindowWidthNotNarrow() && (
<>
{canReply ? reactButton : null}
{canDownload ? downloadButton : null}
@ -1520,6 +1523,7 @@ export class Message extends React.PureComponent<Props, State> {
showForwardMessageModal,
showMessageDetail,
status,
text,
} = this.props;
const canForward = !isTapToView && !deletedForEveryone;
@ -1531,10 +1535,13 @@ export class Message extends React.PureComponent<Props, State> {
direction === 'outgoing';
const multipleAttachments = attachments && attachments.length > 1;
const shouldShowAdditional =
doesMessageBodyOverflow(text || '') || !this.isWindowWidthNotNarrow();
const menu = (
<ContextMenu id={triggerId}>
{canDownload &&
!this.shouldShowAdditionalMenuButtons() &&
shouldShowAdditional &&
!isSticker &&
!multipleAttachments &&
!isTapToView &&
@ -1550,7 +1557,7 @@ export class Message extends React.PureComponent<Props, State> {
{i18n('downloadAttachment')}
</MenuItem>
) : null}
{canReply && !this.shouldShowAdditionalMenuButtons() ? (
{canReply && shouldShowAdditional ? (
<>
<MenuItem
attributes={{
@ -1664,7 +1671,7 @@ export class Message extends React.PureComponent<Props, State> {
return ReactDOM.createPortal(menu, document.body);
}
private shouldShowAdditionalMenuButtons(): boolean {
private isWindowWidthNotNarrow(): boolean {
const { containerWidthBreakpoint } = this.props;
return containerWidthBreakpoint !== WidthBreakpoint.Narrow;
}

View file

@ -27,6 +27,10 @@ const INITIAL_LENGTH = 800;
const INCREMENT_COUNT = 3000;
const BUFFER = 100;
export function doesMessageBodyOverflow(str: string): boolean {
return str.length > INITIAL_LENGTH + BUFFER;
}
function graphemeAwareSlice(
str: string,
length: number