diff --git a/stylesheets/_session.scss b/stylesheets/_session.scss
index 91720b9ab..ec5a9788c 100644
--- a/stylesheets/_session.scss
+++ b/stylesheets/_session.scss
@@ -129,13 +129,6 @@ textarea {
font-style: normal;
}
-.module-message__author-avatar {
- position: relative;
- margin-inline-end: 20px;
- padding-top: 5px;
- padding-inline-end: 4px;
-}
-
.module-message--incoming {
margin-inline-start: 0;
margin-inline-end: auto;
diff --git a/stylesheets/_session_theme.scss b/stylesheets/_session_theme.scss
index e92583af2..d71bd26e7 100644
--- a/stylesheets/_session_theme.scss
+++ b/stylesheets/_session_theme.scss
@@ -25,7 +25,7 @@
position: relative;
display: inline-flex;
flex-direction: row;
- align-items: center;
+ align-items: flex-end;
max-width: 95%;
@media (min-width: 1200px) {
diff --git a/ts/components/conversation/message/message-content/MessageAvatar.tsx b/ts/components/conversation/message/message-content/MessageAvatar.tsx
index a2b1a878d..71310d77f 100644
--- a/ts/components/conversation/message/message-content/MessageAvatar.tsx
+++ b/ts/components/conversation/message/message-content/MessageAvatar.tsx
@@ -1,5 +1,6 @@
import React, { useCallback } from 'react';
import { useDispatch, useSelector } from 'react-redux';
+import styled from 'styled-components';
import { OpenGroupData } from '../../../../data/opengroups';
import { MessageRenderingProps } from '../../../../models/messageType';
import { findCachedBlindedMatchOrLookItUp } from '../../../../session/apis/open_group_api/sogsv3/knownBlindedkeys';
@@ -16,6 +17,13 @@ import {
import { Avatar, AvatarSize, CrownIcon } from '../../../avatar/Avatar';
// tslint:disable: use-simple-attributes
+const StyledAvatar = styled.div`
+ position: relative;
+ margin-inline-end: 20px;
+ padding-top: 5px;
+ padding-inline-end: 4px;
+`;
+
export type MessageAvatarSelectorProps = Pick<
MessageRenderingProps,
| 'authorAvatarPath'
@@ -23,16 +31,14 @@ export type MessageAvatarSelectorProps = Pick<
| 'sender'
| 'authorProfileName'
| 'isSenderAdmin'
- | 'conversationType'
- | 'direction'
| 'isPublic'
| 'lastMessageOfSeries'
>;
-type Props = { messageId: string };
+type Props = { messageId: string; noAvatar: boolean };
export const MessageAvatar = (props: Props) => {
- const { messageId } = props;
+ const { messageId, noAvatar } = props;
const dispatch = useDispatch();
const avatarProps = useSelector(state => getMessageAvatarProps(state as any, messageId));
@@ -43,21 +49,21 @@ export const MessageAvatar = (props: Props) => {
if (!avatarProps) {
return null;
}
+
const {
authorAvatarPath,
authorName,
sender,
authorProfileName,
- conversationType,
- direction,
isSenderAdmin,
lastMessageOfSeries,
isPublic,
} = avatarProps;
- if (conversationType !== 'group' || direction === 'outgoing') {
+ if (noAvatar) {
return null;
}
+
const userName = authorName || authorProfileName || sender;
const onMessageAvatarClick = useCallback(async () => {
@@ -122,9 +128,9 @@ export const MessageAvatar = (props: Props) => {
}
return (
-
+
);
};
diff --git a/ts/components/conversation/message/message-content/MessageContentWithStatus.tsx b/ts/components/conversation/message/message-content/MessageContentWithStatus.tsx
index aa4bbcef5..d4ee14025 100644
--- a/ts/components/conversation/message/message-content/MessageContentWithStatus.tsx
+++ b/ts/components/conversation/message/message-content/MessageContentWithStatus.tsx
@@ -11,7 +11,7 @@ import {
isMessageSelectionMode,
} from '../../../../state/selectors/conversations';
import { Reactions } from '../../../../util/reactions';
-
+import { MessageAvatar } from '../message-content/MessageAvatar';
import { MessageAuthorText } from './MessageAuthorText';
import { MessageContent } from './MessageContent';
import { MessageContextMenu } from './MessageContextMenu';
@@ -20,7 +20,7 @@ import { MessageStatus } from './MessageStatus';
export type MessageContentWithStatusSelectorProps = Pick<
MessageRenderingProps,
- 'direction' | 'isDeleted'
+ 'conversationType' | 'direction' | 'isDeleted'
>;
type Props = {
@@ -40,7 +40,7 @@ const StyledMessageContentContainer = styled.div<{ direction: 'left' | 'right' }
width: 100%;
${StyledMessageReactions} {
- margin-right: var(--margins-sm);
+ margin-right: var(--margins-md);
}
`;
@@ -88,11 +88,13 @@ export const MessageContentWithStatuses = (props: Props) => {
};
const { messageId, ctxMenuID, isDetailView, dataTestId, enableReactions } = props;
+
if (!contentProps) {
return null;
}
- const { direction, isDeleted } = contentProps;
+ const { conversationType, direction, isDeleted } = contentProps;
const isIncoming = direction === 'incoming';
+ const noAvatar = conversationType !== 'group' || direction === 'outgoing';
const [popupReaction, setPopupReaction] = useState('');
@@ -118,6 +120,7 @@ export const MessageContentWithStatuses = (props: Props) => {
onDoubleClickCapture={onDoubleClickReplyToMessage}
data-testid={dataTestId}
>
+
{
/>
-
{
popupReaction={popupReaction}
setPopupReaction={setPopupReaction}
onPopupClick={handlePopupClick}
+ noAvatar={noAvatar}
/>
)}
diff --git a/ts/components/conversation/message/message-content/MessageReactions.tsx b/ts/components/conversation/message/message-content/MessageReactions.tsx
index 9f7cf3299..8f60ea091 100644
--- a/ts/components/conversation/message/message-content/MessageReactions.tsx
+++ b/ts/components/conversation/message/message-content/MessageReactions.tsx
@@ -15,12 +15,15 @@ import { useSelector } from 'react-redux';
export const popupXDefault = -81;
export const popupYDefault = -90;
-const StyledMessageReactionsContainer = styled(Flex)<{ x: number; y: number }>`
+const StyledMessageReactionsContainer = styled(Flex)<{ x: number; y: number; noAvatar: boolean }>`
${StyledPopupContainer} {
position: absolute;
top: ${props => `${props.y}px;`};
left: ${props => `${props.x}px;`};
}
+
+ // MessageAvatar width + margin-inline-end
+ ${props => !props.noAvatar && 'margin-inline-start: calc(36px + 20px);'}
`;
export const StyledMessageReactions = styled(Flex)<{ fullWidth: boolean }>`
@@ -115,13 +118,13 @@ const CompressedReactions = (props: ExpandReactionsProps): ReactElement => {
const ExpandedReactions = (props: ExpandReactionsProps): ReactElement => {
const { handleExpand } = props;
return (
- <>
+
{window.i18n('expandedReactionsText')}
- >
+
);
};
@@ -139,6 +142,7 @@ type Props = {
onPopupClick?: () => void;
inModal?: boolean;
onSelected?: (emoji: string) => boolean;
+ noAvatar: boolean;
};
export const MessageReactions = (props: Props): ReactElement => {
@@ -151,6 +155,7 @@ export const MessageReactions = (props: Props): ReactElement => {
onPopupClick,
inModal = false,
onSelected,
+ noAvatar,
} = props;
const [reactions, setReactions] = useState([]);
@@ -208,6 +213,7 @@ export const MessageReactions = (props: Props): ReactElement => {
alignItems={inModal ? 'flex-start' : 'center'}
x={popupX}
y={popupY}
+ noAvatar={noAvatar}
>
{sortedReacts &&
sortedReacts?.length !== 0 &&
diff --git a/ts/components/conversation/message/message-item/GenericReadableMessage.tsx b/ts/components/conversation/message/message-item/GenericReadableMessage.tsx
index 1f49a35ae..e3d521496 100644
--- a/ts/components/conversation/message/message-item/GenericReadableMessage.tsx
+++ b/ts/components/conversation/message/message-item/GenericReadableMessage.tsx
@@ -16,7 +16,7 @@ import {
} from '../../../../state/selectors/conversations';
import { getIncrement } from '../../../../util/timer';
import { ExpireTimer } from '../../ExpireTimer';
-import { MessageAvatar } from '../message-content/MessageAvatar';
+
import { MessageContentWithStatuses } from '../message-content/MessageContentWithStatus';
import { ReadableMessage } from './ReadableMessage';
import styled, { keyframes } from 'styled-components';
@@ -238,7 +238,6 @@ export const GenericReadableMessage = (props: Props) => {
isUnread={!!isUnread}
key={`readable-message-${messageId}`}
>
-
{expirationLength && expirationTimestamp && (
{
inModal={true}
onSelected={handleSelectedReaction}
onClick={handleReactionClick}
+ noAvatar={true}
/>
{reactionsMap && currentReact && (
diff --git a/ts/state/selectors/conversations.ts b/ts/state/selectors/conversations.ts
index 563db45f8..499dd450d 100644
--- a/ts/state/selectors/conversations.ts
+++ b/ts/state/selectors/conversations.ts
@@ -1129,7 +1129,7 @@ export const getMessageContentWithStatusesSelectorProps = createSelector(
}
const msgProps: MessageContentWithStatusSelectorProps = {
- ...pick(props.propsForMessage, ['direction', 'isDeleted']),
+ ...pick(props.propsForMessage, ['conversationType', 'direction', 'isDeleted']),
};
return msgProps;