EmbeddedMessage: Display forwards (#3914)

This commit is contained in:
Alexander Zinchuk 2023-10-27 12:49:46 +02:00
parent 9787a4dead
commit e898aa01a7
4 changed files with 30 additions and 4 deletions

View File

@ -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;

View File

@ -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<OwnProps> = ({
className,
message,
sender,
forwardSender,
title,
customText,
isProtected,
@ -83,6 +86,9 @@ const EmbeddedMessage: FC<OwnProps> = ({
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<OwnProps> = ({
/>
)}
</p>
<div className="message-title" dir="auto">{renderText(senderTitle || title || NBSP)}</div>
<div className="message-title" dir="auto">
{renderText(senderTitle || title || NBSP)}
{forwardSenderTitle && !areSendersSame && (
<>
<Icon name={forwardSender ? 'share-filled' : 'forward'} className="embedded-origin-icon" />
{renderText(forwardSenderTitle)}
</>
)}
</div>
</div>
{hasContextMenu && <i className="embedded-more icon icon-more" />}
{hasContextMenu && <Icon name="more" className="embedded-more" />}
</div>
);
};

View File

@ -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<OwnProps & StateProps> = ({
shouldHideReply,
replyMessage,
replyMessageSender,
replyMessageForwardSender,
replyStory,
storySender,
outgoingStatus,
@ -943,6 +945,7 @@ const Message: FC<OwnProps & StateProps> = ({
noUserColors={isOwn || isChannel}
isProtected={isProtected}
sender={replyMessageSender}
forwardSender={replyMessageForwardSender}
chatTranslations={chatTranslations}
requestedChatTranslationLanguage={requestedChatTranslationLanguage}
observeIntersectionForLoading={observeIntersectionForLoading}
@ -1461,6 +1464,7 @@ export default memo(withGlobal<OwnProps>(
? 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<OwnProps>(
isThreadTop,
replyMessage,
replyMessageSender,
replyMessageForwardSender,
replyStory,
storySender,
isInDocumentGroup,

View File

@ -459,7 +459,7 @@ export function selectForwardedSender<T extends GlobalState>(
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;