From e898aa01a7f66d28f27dbec06d5197115d10315a Mon Sep 17 00:00:00 2001 From: Alexander Zinchuk Date: Fri, 27 Oct 2023 12:49:46 +0200 Subject: [PATCH] EmbeddedMessage: Display forwards (#3914) --- src/components/common/EmbeddedMessage.scss | 9 ++++++++- src/components/common/EmbeddedMessage.tsx | 18 ++++++++++++++++-- src/components/middle/message/Message.tsx | 5 +++++ src/global/selectors/messages.ts | 2 +- 4 files changed, 30 insertions(+), 4 deletions(-) diff --git a/src/components/common/EmbeddedMessage.scss b/src/components/common/EmbeddedMessage.scss index d95e3bf02..a8e20827b 100644 --- a/src/components/common/EmbeddedMessage.scss +++ b/src/components/common/EmbeddedMessage.scss @@ -69,13 +69,20 @@ font-size: calc(var(--message-text-size, 1rem) - 0.125rem); } - .icon { + .embedded-more { font-size: 1.125rem; margin-inline-end: 0.125rem; line-height: 0.9375rem; vertical-align: -0.1875rem; } + .embedded-origin-icon { + display: inline-block; + font-size: 0.75rem; + margin-inline: 0.125rem; + transform: translateY(1px); + } + .message-text { overflow: hidden; margin-inline-start: 0.5rem; diff --git a/src/components/common/EmbeddedMessage.tsx b/src/components/common/EmbeddedMessage.tsx index 68a34faa2..b56bf5f06 100644 --- a/src/components/common/EmbeddedMessage.tsx +++ b/src/components/common/EmbeddedMessage.tsx @@ -28,6 +28,7 @@ import useThumbnail from '../../hooks/useThumbnail'; import useMessageTranslation from '../middle/message/hooks/useMessageTranslation'; import ActionMessage from '../middle/ActionMessage'; +import Icon from './Icon'; import MediaSpoiler from './MediaSpoiler'; import MessageSummary from './MessageSummary'; @@ -37,6 +38,7 @@ type OwnProps = { className?: string; message?: ApiMessage; sender?: ApiPeer; + forwardSender?: ApiPeer; title?: string; customText?: string; noUserColors?: boolean; @@ -55,6 +57,7 @@ const EmbeddedMessage: FC = ({ className, message, sender, + forwardSender, title, customText, isProtected, @@ -83,6 +86,9 @@ const EmbeddedMessage: FC = ({ const lang = useLang(); const senderTitle = sender ? getSenderTitle(lang, sender) : message?.forwardInfo?.hiddenUserName; + const forwardSenderTitle = forwardSender ? getSenderTitle(lang, forwardSender) + : message?.forwardInfo?.hiddenUserName; + const areSendersSame = sender?.id === forwardSender?.id; const { handleClick, handleMouseDown } = useFastClick(onClick); @@ -120,9 +126,17 @@ const EmbeddedMessage: FC = ({ /> )}

-
{renderText(senderTitle || title || NBSP)}
+
+ {renderText(senderTitle || title || NBSP)} + {forwardSenderTitle && !areSendersSame && ( + <> + + {renderText(forwardSenderTitle)} + + )} +
- {hasContextMenu && } + {hasContextMenu && } ); }; diff --git a/src/components/middle/message/Message.tsx b/src/components/middle/message/Message.tsx index cb4db987e..1106f923c 100644 --- a/src/components/middle/message/Message.tsx +++ b/src/components/middle/message/Message.tsx @@ -207,6 +207,7 @@ type StateProps = { shouldHideReply?: boolean; replyMessage?: ApiMessage; replyMessageSender?: ApiPeer; + replyMessageForwardSender?: ApiPeer; replyStory?: ApiTypeStory; storySender?: ApiUser; outgoingStatus?: ApiMessageOutgoingStatus; @@ -316,6 +317,7 @@ const Message: FC = ({ shouldHideReply, replyMessage, replyMessageSender, + replyMessageForwardSender, replyStory, storySender, outgoingStatus, @@ -943,6 +945,7 @@ const Message: FC = ({ noUserColors={isOwn || isChannel} isProtected={isProtected} sender={replyMessageSender} + forwardSender={replyMessageForwardSender} chatTranslations={chatTranslations} requestedChatTranslationLanguage={requestedChatTranslationLanguage} observeIntersectionForLoading={observeIntersectionForLoading} @@ -1461,6 +1464,7 @@ export default memo(withGlobal( ? selectChatMessage(global, isRepliesChat && replyToChatId ? replyToChatId : chatId, replyToMessageId) : undefined; const replyMessageSender = replyMessage && selectReplySender(global, replyMessage, Boolean(forwardInfo)); + const replyMessageForwardSender = replyMessage && selectForwardedSender(global, replyMessage); const isReplyToTopicStart = replyMessage?.content.action?.type === 'topicCreate'; const replyStory = replyToStoryId && replyToStoryUserId ? selectPeerStory(global, replyToStoryUserId, replyToStoryId) @@ -1534,6 +1538,7 @@ export default memo(withGlobal( isThreadTop, replyMessage, replyMessageSender, + replyMessageForwardSender, replyStory, storySender, isInDocumentGroup, diff --git a/src/global/selectors/messages.ts b/src/global/selectors/messages.ts index 4b35461ed..75f83ca23 100644 --- a/src/global/selectors/messages.ts +++ b/src/global/selectors/messages.ts @@ -459,7 +459,7 @@ export function selectForwardedSender( if (forwardInfo.isChannelPost && forwardInfo.fromChatId) { return selectChat(global, forwardInfo.fromChatId); } else if (forwardInfo.senderUserId) { - return selectUser(global, forwardInfo.senderUserId) || selectChat(global, forwardInfo.senderUserId); + return selectPeer(global, forwardInfo.senderUserId); } return undefined;