diff --git a/ts/components/conversation/TimerNotification.tsx b/ts/components/conversation/TimerNotification.tsx index f5ab091d8..4eef19309 100644 --- a/ts/components/conversation/TimerNotification.tsx +++ b/ts/components/conversation/TimerNotification.tsx @@ -49,8 +49,6 @@ export const TimerNotification = (props: PropsForExpirationTimer) => { diff --git a/ts/components/conversation/message/message-content/MessageContentWithStatus.tsx b/ts/components/conversation/message/message-content/MessageContentWithStatus.tsx index a7e2c2593..7ffb99e8a 100644 --- a/ts/components/conversation/message/message-content/MessageContentWithStatus.tsx +++ b/ts/components/conversation/message/message-content/MessageContentWithStatus.tsx @@ -17,6 +17,7 @@ import { MessageContent } from './MessageContent'; import { MessageContextMenu } from './MessageContextMenu'; import { MessageReactions, StyledMessageReactions } from './MessageReactions'; import { MessageStatus } from './MessageStatus'; +import { ExpirableReadableMessage } from '../message-item/ExpirableReadableMessage'; export type MessageContentWithStatusSelectorProps = Pick< MessageRenderingProps, @@ -115,9 +116,10 @@ export const MessageContentWithStatuses = (props: Props) => { setPopupReaction(''); }} > -
{ enableReactions={enableReactions} /> )} -
+
{enableReactions && ( + { messageId: string; isCentered?: boolean; - marginInlineStart?: string; - marginInlineEnd?: string; } export const ExpirableReadableMessage = (props: ExpirableReadableMessageProps) => { const selected = useMessageExpirationPropsById(props.messageId); - const { isCentered, marginInlineStart = '6px', marginInlineEnd = '6px', dataTestId } = props; + const { isCentered, onClick, onDoubleClickCapture, role, dataTestId } = props; const { isExpired } = useIsExpired({ convoId: selected?.convoId, @@ -122,6 +120,9 @@ export const ExpirableReadableMessage = (props: ExpirableReadableMessageProps) = receivedAt={receivedAt} isUnread={!!isUnread} isIncoming={isIncoming} + onClick={onClick} + onDoubleClickCapture={onDoubleClickCapture} + role={role} key={`readable-message-${messageId}`} dataTestId={dataTestId} > @@ -132,7 +133,6 @@ export const ExpirableReadableMessage = (props: ExpirableReadableMessageProps) = style={{ display: !isCentered && isIncoming ? 'none' : 'block', visibility: !isIncoming ? 'visible' : 'hidden', - marginInlineStart, }} /> )} @@ -144,7 +144,6 @@ export const ExpirableReadableMessage = (props: ExpirableReadableMessageProps) = style={{ display: !isCentered && !isIncoming ? 'none' : 'block', visibility: isIncoming ? 'visible' : 'hidden', - marginInlineEnd, }} /> )} diff --git a/ts/components/conversation/message/message-item/GenericReadableMessage.tsx b/ts/components/conversation/message/message-item/GenericReadableMessage.tsx index d81ed65e2..5553158e4 100644 --- a/ts/components/conversation/message/message-item/GenericReadableMessage.tsx +++ b/ts/components/conversation/message/message-item/GenericReadableMessage.tsx @@ -12,9 +12,7 @@ import { isMessageSelectionMode, } from '../../../../state/selectors/conversations'; import { MessageContentWithStatuses } from '../message-content/MessageContentWithStatus'; -import { ReadableMessage } from './ReadableMessage'; import { isOpenOrClosedGroup } from '../../../../models/conversationAttributes'; -import { ExpirableReadableMessage } from './ExpirableReadableMessage'; import { StyledMessageReactionsContainer } from '../message-content/MessageReactions'; export type GenericReadableMessageSelectorProps = Pick< @@ -40,7 +38,7 @@ const highlightedMessageAnimation = keyframes` } `; -const StyledReadableMessage = styled(ReadableMessage)<{ +const StyledReadableMessage = styled.div<{ selected: boolean; isRightClicked: boolean; }>` @@ -148,14 +146,13 @@ export const GenericReadableMessage = (props: Props) => { if (!msgProps) { return null; } - const { conversationType, receivedAt, isUnread } = msgProps; + const { conversationType } = msgProps; const selected = isMessageSelected || false; const isGroup = isOpenOrClosedGroup(conversationType); return ( { isGroup && 'public-chat-message-wrapper' )} onContextMenu={handleContextMenu} - receivedAt={receivedAt} - isUnread={!!isUnread} key={`readable-message-${messageId}`} > - - - + ); }; diff --git a/ts/components/conversation/message/message-item/ReadableMessage.tsx b/ts/components/conversation/message/message-item/ReadableMessage.tsx index 79e7cdd37..78d793c39 100644 --- a/ts/components/conversation/message/message-item/ReadableMessage.tsx +++ b/ts/components/conversation/message/message-item/ReadableMessage.tsx @@ -1,5 +1,12 @@ import { debounce, noop } from 'lodash'; -import React, { useCallback, useContext, useLayoutEffect, useState } from 'react'; +import React, { + AriaRole, + MouseEventHandler, + useCallback, + useContext, + useLayoutEffect, + useState, +} from 'react'; import { InView } from 'react-intersection-observer'; import { useDispatch, useSelector } from 'react-redux'; import { Data } from '../../../../data/data'; @@ -29,6 +36,9 @@ export type ReadableMessageProps = { className?: string; receivedAt: number | undefined; isUnread: boolean; + onClick?: MouseEventHandler; + onDoubleClickCapture?: MouseEventHandler; + role?: AriaRole; dataTestId?: string; onContextMenu?: (e: React.MouseEvent) => void; }; @@ -58,7 +68,17 @@ const debouncedTriggerLoadMoreBottom = debounce( ); export const ReadableMessage = (props: ReadableMessageProps) => { - const { messageId, onContextMenu, className, receivedAt, isUnread, dataTestId } = props; + const { + messageId, + onContextMenu, + className, + receivedAt, + isUnread, + onClick, + onDoubleClickCapture, + role, + dataTestId, + } = props; const isAppFocused = useSelector(getIsAppFocused); const dispatch = useDispatch(); @@ -183,6 +203,9 @@ export const ReadableMessage = (props: ReadableMessageProps) => { onChange={isAppFocused ? onVisible : noop} triggerOnce={false} trackVisibility={true} + onClick={onClick} + onDoubleClickCapture={onDoubleClickCapture} + role={role} key={`inview-msg-${messageId}`} // TODO We will need to update the integration tests to use that new value, or update the values given in the `dataTestId` props to match what they expect data-testid={dataTestId || 'readable-message'} diff --git a/ts/themes/globals.tsx b/ts/themes/globals.tsx index b886c9973..a5d1d1339 100644 --- a/ts/themes/globals.tsx +++ b/ts/themes/globals.tsx @@ -25,8 +25,6 @@ export type ThemeGlobals = { '--margins-xl': string; /* Padding */ - '--padding-message-content-x': string; - '--padding-message-content-y': string; '--padding-message-content': string; '--padding-link-preview': string; @@ -108,9 +106,7 @@ export const THEME_GLOBALS: ThemeGlobals = { '--margins-lg': '20px', '--margins-xl': '25px', - '--padding-message-content-x': '13px', - '--padding-message-content-y': '7px', - '--padding-message-content': 'var(--padding-message-content-y) var(--padding-message-content-x)', + '--padding-message-content': '7px 13px', '--padding-link-preview': '-7px -13px 7px -13px', // bottom has positive value because a link preview has always a body below '--border-radius': '5px',