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"