From 51f606760c0819d98abbac9b7b02b9b5c0b0fa80 Mon Sep 17 00:00:00 2001 From: Alexander Zinchuk Date: Sun, 12 Nov 2023 12:49:10 +0400 Subject: [PATCH] Various fixes for quotes and giveaways (#3964) --- src/api/gramjs/apiBuilders/messages.ts | 3 +++ src/api/types/messages.ts | 1 + .../common/embedded/EmbeddedMessage.tsx | 23 ++++++++----------- .../common/helpers/renderTextWithEntities.tsx | 8 ++++--- src/components/middle/ActionMessage.tsx | 8 ++++--- .../middle/message/Giveaway.module.scss | 1 + src/components/middle/message/Message.tsx | 1 + .../middle/message/hooks/useInnerHandlers.ts | 5 ++-- src/global/selectors/messages.ts | 3 +++ src/lib/gramjs/tl/apiTl.js | 1 + src/lib/gramjs/tl/static/api.json | 1 + 11 files changed, 34 insertions(+), 21 deletions(-) diff --git a/src/api/gramjs/apiBuilders/messages.ts b/src/api/gramjs/apiBuilders/messages.ts index f7598719c..82df7d544 100644 --- a/src/api/gramjs/apiBuilders/messages.ts +++ b/src/api/gramjs/apiBuilders/messages.ts @@ -338,6 +338,7 @@ function buildAction( let isTopicAction: boolean | undefined; let slug: string | undefined; let isGiveaway: boolean | undefined; + let isUnclaimed: boolean | undefined; const targetUserIds = 'users' in action ? action.users && action.users.map((id) => buildApiPeerId(id, 'user')) @@ -533,6 +534,7 @@ function buildAction( slug = action.slug; months = action.months; isGiveaway = Boolean(action.viaGiveaway); + isUnclaimed = Boolean(action.unclaimed); if (action.boostPeer) { targetChatId = getApiChatIdFromMtpPeer(action.boostPeer); } @@ -563,6 +565,7 @@ function buildAction( months, topicEmojiIconId, isTopicAction, + isUnclaimed, }; } diff --git a/src/api/types/messages.ts b/src/api/types/messages.ts index 7885c5c0b..1496634f4 100644 --- a/src/api/types/messages.ts +++ b/src/api/types/messages.ts @@ -292,6 +292,7 @@ export interface ApiAction { isTopicAction?: boolean; slug?: string; isGiveaway?: boolean; + isUnclaimed?: boolean; } export interface ApiWebPage { diff --git a/src/components/common/embedded/EmbeddedMessage.tsx b/src/components/common/embedded/EmbeddedMessage.tsx index 77ae482d9..5745cdfa3 100644 --- a/src/components/common/embedded/EmbeddedMessage.tsx +++ b/src/components/common/embedded/EmbeddedMessage.tsx @@ -148,15 +148,6 @@ const EmbeddedMessage: FC = ({ } function renderSender() { - if (forwardSenderTitle && !areSendersSame) { - return ( - <> - - {renderText(forwardSenderTitle)} - - ); - } - if (title) { return renderText(title); } @@ -165,11 +156,9 @@ const EmbeddedMessage: FC = ({ return NBSP; } - let shouldIgnoreSender = false; let icon: IconName | undefined; if (senderChat) { if (isChatChannel(senderChat)) { - shouldIgnoreSender = true; icon = 'channel-filled'; } @@ -178,11 +167,13 @@ const EmbeddedMessage: FC = ({ } } + const isChatSender = senderChat?.id === sender?.id; + return ( <> - {!shouldIgnoreSender && {renderText(senderTitle)}} + {!isChatSender && {renderText(senderTitle)}} {icon && } - {senderChatTitle && renderText(senderChatTitle)} + {icon && senderChatTitle && renderText(senderChatTitle)} ); } @@ -211,6 +202,12 @@ const EmbeddedMessage: FC = ({

{renderSender()} + {forwardSenderTitle && !areSendersSame && ( + <> + + {renderText(forwardSenderTitle)} + + )}
diff --git a/src/components/common/helpers/renderTextWithEntities.tsx b/src/components/common/helpers/renderTextWithEntities.tsx index 901577300..6c318d201 100644 --- a/src/components/common/helpers/renderTextWithEntities.tsx +++ b/src/components/common/helpers/renderTextWithEntities.tsx @@ -392,9 +392,11 @@ function processEntity({ return {renderNestedMessagePart()}; case ApiMessageEntityTypes.Blockquote: return ( -
- {renderNestedMessagePart()} -
+
+
+ {renderNestedMessagePart()} +
+
); case ApiMessageEntityTypes.BotCommand: return ( diff --git a/src/components/middle/ActionMessage.tsx b/src/components/middle/ActionMessage.tsx index 8e10cb684..eefee13e6 100644 --- a/src/components/middle/ActionMessage.tsx +++ b/src/components/middle/ActionMessage.tsx @@ -236,6 +236,7 @@ const ActionMessage: FC = ({ function renderGiftCode() { const isFromGiveaway = message.content.action?.isGiveaway; + const isUnclaimed = message.content.action?.isUnclaimed; return ( = ({ noLoop nonInteractive /> - {lang('BoostingUnclaimedPrize')} + {lang(isUnclaimed ? 'BoostingUnclaimedPrize' : 'BoostingCongratulations')} - {renderText(lang(isFromGiveaway ? 'BoostingReceivedGiftFrom' : 'BoostingYouHaveUnclaimedPrize', - getChatTitle(lang, targetChat!)), + {renderText(lang(isFromGiveaway ? 'BoostingReceivedGiftFrom' : isUnclaimed + ? 'BoostingReceivedPrizeFrom' : 'BoostingYouHaveUnclaimedPrize', + getChatTitle(lang, targetChat!)), ['simple_markdown'])} diff --git a/src/components/middle/message/Giveaway.module.scss b/src/components/middle/message/Giveaway.module.scss index 14876ba31..6a14a8d1a 100644 --- a/src/components/middle/message/Giveaway.module.scss +++ b/src/components/middle/message/Giveaway.module.scss @@ -11,6 +11,7 @@ .gift { position: relative; + margin-top: -3rem; } .count { diff --git a/src/components/middle/message/Message.tsx b/src/components/middle/message/Message.tsx index 2b867a2bb..6aaafefcd 100644 --- a/src/components/middle/message/Message.tsx +++ b/src/components/middle/message/Message.tsx @@ -585,6 +585,7 @@ const Message: FC = ({ Boolean(requestedChatTranslationLanguage), replyStory && 'content' in replyStory ? replyStory : undefined, isReplyPrivate, + isRepliesChat, ); useEffect(() => { diff --git a/src/components/middle/message/hooks/useInnerHandlers.ts b/src/components/middle/message/hooks/useInnerHandlers.ts index cfe3f2736..e2db9d54d 100644 --- a/src/components/middle/message/hooks/useInnerHandlers.ts +++ b/src/components/middle/message/hooks/useInnerHandlers.ts @@ -30,6 +30,7 @@ export default function useInnerHandlers( isTranslatingChat?: boolean, story?: ApiStory, isReplyPrivate?: boolean, + isRepliesChat?: boolean, ) { const { openChat, showNotification, focusMessage, openMediaViewer, openAudioPlayer, @@ -85,10 +86,10 @@ export default function useInnerHandlers( focusMessage({ chatId: replyToPeerId || chatId, - threadId: replyToTopId || threadId, + threadId: isRepliesChat ? replyToTopId : threadId, // Open comments from Replies bot, otherwise, keep current thread messageId: replyToMsgId, replyMessageId: replyToPeerId ? undefined : messageId, - noForumTopicPanel: !replyToPeerId ? true : undefined, // Open topic panel for cross-chat replies + noForumTopicPanel: !replyToPeerId, // Open topic panel for cross-chat replies }); }); diff --git a/src/global/selectors/messages.ts b/src/global/selectors/messages.ts index 76216eefe..8fdbba0f2 100644 --- a/src/global/selectors/messages.ts +++ b/src/global/selectors/messages.ts @@ -421,6 +421,9 @@ export function selectSender(global: T, message: ApiMessa return undefined; } + const chat = selectChat(global, message.chatId); + if (chat && isChatChannel(chat)) return chat; + return selectPeer(global, senderId); } diff --git a/src/lib/gramjs/tl/apiTl.js b/src/lib/gramjs/tl/apiTl.js index a679cdbf1..e49b0772f 100644 --- a/src/lib/gramjs/tl/apiTl.js +++ b/src/lib/gramjs/tl/apiTl.js @@ -1489,6 +1489,7 @@ stories.sendReaction#7fd736b2 flags:# add_to_recent:flags.0?true peer:InputPeer stories.getPeerStories#2c4ada50 peer:InputPeer = stories.PeerStories; stories.getPeerMaxIDs#535983c3 id:Vector = Vector; stories.togglePeerStoriesHidden#bd0415c4 peer:InputPeer hidden:Bool = Bool; +premium.getBoostsList#60f67660 flags:# gifts:flags.0?true peer:InputPeer offset:string limit:int = premium.BoostsList; premium.getMyBoosts#be77b4a = premium.MyBoosts; premium.applyBoost#6b7da746 flags:# slots:flags.0?Vector peer:InputPeer = premium.MyBoosts; premium.getBoostsStatus#42f1f61 peer:InputPeer = premium.BoostsStatus;`; \ No newline at end of file diff --git a/src/lib/gramjs/tl/static/api.json b/src/lib/gramjs/tl/static/api.json index dbb2d69a8..5e43631cb 100644 --- a/src/lib/gramjs/tl/static/api.json +++ b/src/lib/gramjs/tl/static/api.json @@ -319,6 +319,7 @@ "premium.getBoostersList", "premium.applyBoost", "premium.getMyBoosts", + "premium.getBoostsList", "payments.checkGiftCode", "payments.applyGiftCode", "payments.getGiveawayInfo"