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;