diff --git a/src/components/common/Composer.tsx b/src/components/common/Composer.tsx index b85cad9ba..079c16eee 100644 --- a/src/components/common/Composer.tsx +++ b/src/components/common/Composer.tsx @@ -95,6 +95,7 @@ import buildAttachment, { prepareAttachmentsToSend } from '../middle/composer/he import { escapeHtml } from '../middle/composer/helpers/cleanHtml'; import { buildCustomEmojiHtml } from '../middle/composer/helpers/customEmoji'; import { isSelectionInsideInput } from '../middle/composer/helpers/selection'; +import { getPeerColorClass } from './helpers/peerColor'; import renderText from './helpers/renderText'; import { getTextWithEntitiesAsHtml } from './helpers/renderTextWithEntities'; @@ -166,12 +167,12 @@ type OwnProps = { dropAreaState?: string; isReady: boolean; isMobile?: boolean; - onDropHide?: NoneToVoidFunction; inputId: string; editableInputCssSelector: string; editableInputId: string; className?: string; inputPlaceholder?: string; + onDropHide?: NoneToVoidFunction; onForward?: NoneToVoidFunction; onFocus?: NoneToVoidFunction; onBlur?: NoneToVoidFunction; @@ -202,6 +203,7 @@ type StateProps = customEmojiForEmoji?: ApiSticker[]; groupChatMembers?: ApiChatMember[]; currentUserId?: string; + currentUser?: ApiUser; recentEmojis: string[]; contentToBeScheduled?: TabState['contentToBeScheduled']; shouldSuggestStickers?: boolean; @@ -301,6 +303,7 @@ const Composer: FC = ({ groupChatMembers, topInlineBotIds, currentUserId, + currentUser, captionLimit, contentToBeScheduled, shouldSuggestStickers, @@ -1593,7 +1596,7 @@ const Composer: FC = ({ /> )} -
+
{isInMessageList && ( <> {withBotMenuButton && ( @@ -1898,6 +1901,7 @@ export default memo(withGlobal( const botKeyboardMessageId = messageWithActualBotKeyboard ? messageWithActualBotKeyboard.id : undefined; const keyboardMessage = botKeyboardMessageId ? selectChatMessage(global, chatId, botKeyboardMessageId) : undefined; const { currentUserId } = global; + const currentUser = selectUser(global, currentUserId!)!; const defaultSendAsId = chatFullInfo ? chatFullInfo?.sendAsId || currentUserId : undefined; const sendAsId = chat?.sendAsPeerIds && defaultSendAsId && ( chat.sendAsPeerIds.some((peer) => peer.id === defaultSendAsId) @@ -1957,6 +1961,7 @@ export default memo(withGlobal( groupChatMembers: chatFullInfo?.members, topInlineBotIds: global.topInlineBots?.userIds, currentUserId, + currentUser, contentToBeScheduled: tabState.contentToBeScheduled, shouldSuggestStickers, shouldSuggestCustomEmoji, diff --git a/src/components/common/embedded/EmbeddedMessage.scss b/src/components/common/embedded/EmbeddedMessage.scss index a25ff7fdf..bd15a5877 100644 --- a/src/components/common/embedded/EmbeddedMessage.scss +++ b/src/components/common/embedded/EmbeddedMessage.scss @@ -189,8 +189,7 @@ } &.inside-input { - padding-inline-start: 0.5625rem; - width: 100%; + flex-grow: 1; .embedded-thumb { margin-left: 0.125rem; diff --git a/src/components/common/helpers/peerColor.ts b/src/components/common/helpers/peerColor.ts index 8e9c5eefb..fdf995100 100644 --- a/src/components/common/helpers/peerColor.ts +++ b/src/components/common/helpers/peerColor.ts @@ -5,7 +5,7 @@ import { getPeerColorCount, getPeerColorKey } from '../../../global/helpers'; export function getPeerColorClass(peer?: ApiPeer, noUserColors?: boolean, shouldReset?: boolean) { if (!peer) { if (!shouldReset) return undefined; - return noUserColors ? 'peer-color-count-0' : 'peer-color-0'; + return noUserColors ? 'peer-color-count-1' : 'peer-color-0'; } return noUserColors ? `peer-color-count-${getPeerColorCount(peer)}` : `peer-color-${getPeerColorKey(peer)}`; } diff --git a/src/components/common/helpers/renderTextWithEntities.tsx b/src/components/common/helpers/renderTextWithEntities.tsx index a3ff0b43d..901577300 100644 --- a/src/components/common/helpers/renderTextWithEntities.tsx +++ b/src/components/common/helpers/renderTextWithEntities.tsx @@ -392,11 +392,9 @@ function processEntity({ return {renderNestedMessagePart()}; case ApiMessageEntityTypes.Blockquote: return ( -
-
- {renderNestedMessagePart()} -
-
+
+ {renderNestedMessagePart()} +
); case ApiMessageEntityTypes.BotCommand: return ( @@ -574,6 +572,11 @@ function processEntityAsHtml( >${renderedContent}`; case ApiMessageEntityTypes.CustomEmoji: return buildCustomEmojiHtmlFromEntity(rawEntityText, entity); + case ApiMessageEntityTypes.Blockquote: + return `${renderedContent}`; default: return renderedContent; } diff --git a/src/components/middle/composer/ComposerEmbeddedMessage.tsx b/src/components/middle/composer/ComposerEmbeddedMessage.tsx index 166e0e2e8..ff4c3fae1 100644 --- a/src/components/middle/composer/ComposerEmbeddedMessage.tsx +++ b/src/components/middle/composer/ComposerEmbeddedMessage.tsx @@ -347,6 +347,8 @@ export default memo(withGlobal( if (!sender) { sender = selectPeer(global, fromChatId!); } + } else if (editingId) { + sender = selectSender(global, message!); } const forwardsHaveCaptions = forwardedMessages?.some((forward) => ( diff --git a/src/components/middle/message/_message-content.scss b/src/components/middle/message/_message-content.scss index 36f33a116..e8cf5d581 100644 --- a/src/components/middle/message/_message-content.scss +++ b/src/components/middle/message/_message-content.scss @@ -935,7 +935,7 @@ font-size: 0.875rem; } -blockquote { +blockquote, .blockquote { display: inline-block; position: relative; padding-inline: 0.5rem 1rem; @@ -943,6 +943,7 @@ blockquote { border-radius: 0.25rem; overflow: hidden; background-color: var(--accent-background-color); + white-space: pre-wrap; &::before { content: ""; @@ -967,6 +968,12 @@ blockquote { } } +// Input specific styles +.blockquote { + display: block; + width: fit-content; +} + @keyframes text-loading { 0% { background-position-x: 0; diff --git a/src/global/actions/api/messages.ts b/src/global/actions/api/messages.ts index 58c27e0f8..3a631a2b1 100644 --- a/src/global/actions/api/messages.ts +++ b/src/global/actions/api/messages.ts @@ -425,8 +425,10 @@ addActionHandler('clearDraft', (global, actions, payload): ActionReturnType => { return; } - const newDraft: ApiDraft | undefined = shouldKeepReply ? { - replyInfo: currentDraft.replyInfo, + const currentReplyInfo = currentDraft.replyInfo; + + const newDraft: ApiDraft | undefined = shouldKeepReply && currentReplyInfo ? { + replyInfo: currentReplyInfo, } : undefined; if (!isLocalOnly) { diff --git a/src/global/actions/apiUpdaters/messages.ts b/src/global/actions/apiUpdaters/messages.ts index 69b7ab916..b16318f29 100644 --- a/src/global/actions/apiUpdaters/messages.ts +++ b/src/global/actions/apiUpdaters/messages.ts @@ -17,7 +17,7 @@ import { checkIfHasUnreadReactions, getMessageContent, getMessageText, isActionMessage, isMessageLocal, isUserId, } from '../../helpers'; -import { getMessageReplyInfo } from '../../helpers/replies'; +import { getMessageReplyInfo, getStoryReplyInfo } from '../../helpers/replies'; import { addActionHandler, getGlobal, setGlobal } from '../../index'; import { addViewportId, @@ -86,6 +86,7 @@ addActionHandler('apiUpdate', (global, actions, update): ActionReturnType => { const newMessage = selectChatMessage(global, chatId, id)!; const replyInfo = getMessageReplyInfo(newMessage); + const storyReplyInfo = getStoryReplyInfo(newMessage); const chat = selectChat(global, chatId); if (chat?.isForum && replyInfo?.isForumTopic @@ -97,7 +98,7 @@ addActionHandler('apiUpdate', (global, actions, update): ActionReturnType => { Object.values(global.byTabId).forEach(({ id: tabId }) => { const isLocal = isMessageLocal(message as ApiMessage); if (selectIsMessageInCurrentMessageList(global, chatId, message as ApiMessage, tabId)) { - if (isLocal && message.isOutgoing && !(message.content?.action) && !replyInfo?.replyToMsgId + if (isLocal && message.isOutgoing && !(message.content?.action) && !storyReplyInfo?.storyId && !message.content?.storyData) { const currentMessageList = selectCurrentMessageList(global, tabId); if (currentMessageList) { diff --git a/src/global/actions/ui/messages.ts b/src/global/actions/ui/messages.ts index 63dfe54fe..74d4adaa2 100644 --- a/src/global/actions/ui/messages.ts +++ b/src/global/actions/ui/messages.ts @@ -142,7 +142,7 @@ addActionHandler('replyToNextMessage', (global, actions, payload): ActionReturnT let messageId: number | undefined; - if (!isLatest || !replyInfo) { + if (!isLatest || !replyInfo?.replyToMsgId) { if (threadId === MAIN_THREAD_ID) { const chat = selectChat(global, chatId); @@ -154,7 +154,7 @@ addActionHandler('replyToNextMessage', (global, actions, payload): ActionReturnT } } else { const chatMessageKeys = Object.keys(chatMessages); - const indexOfCurrent = chatMessageKeys.indexOf(replyInfo.toString()); + const indexOfCurrent = chatMessageKeys.indexOf(replyInfo.replyToMsgId.toString()); const newIndex = indexOfCurrent + targetIndexDelta; messageId = newIndex <= chatMessageKeys.length + 1 && newIndex >= 0 ? Number(chatMessageKeys[newIndex]) diff --git a/src/styles/_common.scss b/src/styles/_common.scss index 7ce842481..4c068b6d2 100644 --- a/src/styles/_common.scss +++ b/src/styles/_common.scss @@ -218,7 +218,9 @@ } } -.peer-color-count-2, .peer-color-count-3 { +.peer-color-count-1, +.peer-color-count-2, +.peer-color-count-3 { --accent-background-color: var(--hover-color); --accent-background-active-color: var(--active-color); }