EmbeddedMessage: Display forwards (#3914)
This commit is contained in:
parent
9787a4dead
commit
e898aa01a7
@ -69,13 +69,20 @@
|
|||||||
font-size: calc(var(--message-text-size, 1rem) - 0.125rem);
|
font-size: calc(var(--message-text-size, 1rem) - 0.125rem);
|
||||||
}
|
}
|
||||||
|
|
||||||
.icon {
|
.embedded-more {
|
||||||
font-size: 1.125rem;
|
font-size: 1.125rem;
|
||||||
margin-inline-end: 0.125rem;
|
margin-inline-end: 0.125rem;
|
||||||
line-height: 0.9375rem;
|
line-height: 0.9375rem;
|
||||||
vertical-align: -0.1875rem;
|
vertical-align: -0.1875rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.embedded-origin-icon {
|
||||||
|
display: inline-block;
|
||||||
|
font-size: 0.75rem;
|
||||||
|
margin-inline: 0.125rem;
|
||||||
|
transform: translateY(1px);
|
||||||
|
}
|
||||||
|
|
||||||
.message-text {
|
.message-text {
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
margin-inline-start: 0.5rem;
|
margin-inline-start: 0.5rem;
|
||||||
|
|||||||
@ -28,6 +28,7 @@ import useThumbnail from '../../hooks/useThumbnail';
|
|||||||
import useMessageTranslation from '../middle/message/hooks/useMessageTranslation';
|
import useMessageTranslation from '../middle/message/hooks/useMessageTranslation';
|
||||||
|
|
||||||
import ActionMessage from '../middle/ActionMessage';
|
import ActionMessage from '../middle/ActionMessage';
|
||||||
|
import Icon from './Icon';
|
||||||
import MediaSpoiler from './MediaSpoiler';
|
import MediaSpoiler from './MediaSpoiler';
|
||||||
import MessageSummary from './MessageSummary';
|
import MessageSummary from './MessageSummary';
|
||||||
|
|
||||||
@ -37,6 +38,7 @@ type OwnProps = {
|
|||||||
className?: string;
|
className?: string;
|
||||||
message?: ApiMessage;
|
message?: ApiMessage;
|
||||||
sender?: ApiPeer;
|
sender?: ApiPeer;
|
||||||
|
forwardSender?: ApiPeer;
|
||||||
title?: string;
|
title?: string;
|
||||||
customText?: string;
|
customText?: string;
|
||||||
noUserColors?: boolean;
|
noUserColors?: boolean;
|
||||||
@ -55,6 +57,7 @@ const EmbeddedMessage: FC<OwnProps> = ({
|
|||||||
className,
|
className,
|
||||||
message,
|
message,
|
||||||
sender,
|
sender,
|
||||||
|
forwardSender,
|
||||||
title,
|
title,
|
||||||
customText,
|
customText,
|
||||||
isProtected,
|
isProtected,
|
||||||
@ -83,6 +86,9 @@ const EmbeddedMessage: FC<OwnProps> = ({
|
|||||||
const lang = useLang();
|
const lang = useLang();
|
||||||
|
|
||||||
const senderTitle = sender ? getSenderTitle(lang, sender) : message?.forwardInfo?.hiddenUserName;
|
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);
|
const { handleClick, handleMouseDown } = useFastClick(onClick);
|
||||||
|
|
||||||
@ -120,9 +126,17 @@ const EmbeddedMessage: FC<OwnProps> = ({
|
|||||||
/>
|
/>
|
||||||
)}
|
)}
|
||||||
</p>
|
</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>
|
</div>
|
||||||
{hasContextMenu && <i className="embedded-more icon icon-more" />}
|
{hasContextMenu && <Icon name="more" className="embedded-more" />}
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|||||||
@ -207,6 +207,7 @@ type StateProps = {
|
|||||||
shouldHideReply?: boolean;
|
shouldHideReply?: boolean;
|
||||||
replyMessage?: ApiMessage;
|
replyMessage?: ApiMessage;
|
||||||
replyMessageSender?: ApiPeer;
|
replyMessageSender?: ApiPeer;
|
||||||
|
replyMessageForwardSender?: ApiPeer;
|
||||||
replyStory?: ApiTypeStory;
|
replyStory?: ApiTypeStory;
|
||||||
storySender?: ApiUser;
|
storySender?: ApiUser;
|
||||||
outgoingStatus?: ApiMessageOutgoingStatus;
|
outgoingStatus?: ApiMessageOutgoingStatus;
|
||||||
@ -316,6 +317,7 @@ const Message: FC<OwnProps & StateProps> = ({
|
|||||||
shouldHideReply,
|
shouldHideReply,
|
||||||
replyMessage,
|
replyMessage,
|
||||||
replyMessageSender,
|
replyMessageSender,
|
||||||
|
replyMessageForwardSender,
|
||||||
replyStory,
|
replyStory,
|
||||||
storySender,
|
storySender,
|
||||||
outgoingStatus,
|
outgoingStatus,
|
||||||
@ -943,6 +945,7 @@ const Message: FC<OwnProps & StateProps> = ({
|
|||||||
noUserColors={isOwn || isChannel}
|
noUserColors={isOwn || isChannel}
|
||||||
isProtected={isProtected}
|
isProtected={isProtected}
|
||||||
sender={replyMessageSender}
|
sender={replyMessageSender}
|
||||||
|
forwardSender={replyMessageForwardSender}
|
||||||
chatTranslations={chatTranslations}
|
chatTranslations={chatTranslations}
|
||||||
requestedChatTranslationLanguage={requestedChatTranslationLanguage}
|
requestedChatTranslationLanguage={requestedChatTranslationLanguage}
|
||||||
observeIntersectionForLoading={observeIntersectionForLoading}
|
observeIntersectionForLoading={observeIntersectionForLoading}
|
||||||
@ -1461,6 +1464,7 @@ export default memo(withGlobal<OwnProps>(
|
|||||||
? selectChatMessage(global, isRepliesChat && replyToChatId ? replyToChatId : chatId, replyToMessageId)
|
? selectChatMessage(global, isRepliesChat && replyToChatId ? replyToChatId : chatId, replyToMessageId)
|
||||||
: undefined;
|
: undefined;
|
||||||
const replyMessageSender = replyMessage && selectReplySender(global, replyMessage, Boolean(forwardInfo));
|
const replyMessageSender = replyMessage && selectReplySender(global, replyMessage, Boolean(forwardInfo));
|
||||||
|
const replyMessageForwardSender = replyMessage && selectForwardedSender(global, replyMessage);
|
||||||
const isReplyToTopicStart = replyMessage?.content.action?.type === 'topicCreate';
|
const isReplyToTopicStart = replyMessage?.content.action?.type === 'topicCreate';
|
||||||
const replyStory = replyToStoryId && replyToStoryUserId
|
const replyStory = replyToStoryId && replyToStoryUserId
|
||||||
? selectPeerStory(global, replyToStoryUserId, replyToStoryId)
|
? selectPeerStory(global, replyToStoryUserId, replyToStoryId)
|
||||||
@ -1534,6 +1538,7 @@ export default memo(withGlobal<OwnProps>(
|
|||||||
isThreadTop,
|
isThreadTop,
|
||||||
replyMessage,
|
replyMessage,
|
||||||
replyMessageSender,
|
replyMessageSender,
|
||||||
|
replyMessageForwardSender,
|
||||||
replyStory,
|
replyStory,
|
||||||
storySender,
|
storySender,
|
||||||
isInDocumentGroup,
|
isInDocumentGroup,
|
||||||
|
|||||||
@ -459,7 +459,7 @@ export function selectForwardedSender<T extends GlobalState>(
|
|||||||
if (forwardInfo.isChannelPost && forwardInfo.fromChatId) {
|
if (forwardInfo.isChannelPost && forwardInfo.fromChatId) {
|
||||||
return selectChat(global, forwardInfo.fromChatId);
|
return selectChat(global, forwardInfo.fromChatId);
|
||||||
} else if (forwardInfo.senderUserId) {
|
} else if (forwardInfo.senderUserId) {
|
||||||
return selectUser(global, forwardInfo.senderUserId) || selectChat(global, forwardInfo.senderUserId);
|
return selectPeer(global, forwardInfo.senderUserId);
|
||||||
}
|
}
|
||||||
|
|
||||||
return undefined;
|
return undefined;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user