diff --git a/CHANGELOG.md b/CHANGELOG.md index 70e889612..ca9d0d1d2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). - Add `ColorPalette.navigationBarTitle`, `ColorPalette.navigationBarSubtitle`, `ColorPalette.navigationBarTintColor`, `ColorPalette.navigationBarBackground` [#939](https://github.com/GetStream/stream-chat-swiftui/pull/939) ### 🐞 Fixed - Long message with a link preview was truncated sometimes [#940](https://github.com/GetStream/stream-chat-swiftui/pull/940) +- Fix quoted message shown in the composer when editing a quoting message [#943](https://github.com/GetStream/stream-chat-swiftui/pull/943) # [4.87.0](https://github.com/GetStream/stream-chat-swiftui/releases/tag/4.87.0) _September 01, 2025_ diff --git a/Sources/StreamChatSwiftUI/ChatChannel/Composer/MessageComposerViewModel.swift b/Sources/StreamChatSwiftUI/ChatChannel/Composer/MessageComposerViewModel.swift index 7cdb6395c..203b0ef74 100644 --- a/Sources/StreamChatSwiftUI/ChatChannel/Composer/MessageComposerViewModel.swift +++ b/Sources/StreamChatSwiftUI/ChatChannel/Composer/MessageComposerViewModel.swift @@ -281,7 +281,13 @@ open class MessageComposerViewModel: ObservableObject { return } - fillComposer(with: message) + text = message.text + mentionedUsers = message.mentionedUsers + showReplyInChannel = message.showReplyInChannel + selectedRangeLocation = message.text.count + attachmentsConverter.attachmentsToAssets(message.allAttachments) { [weak self] assets in + self?.updateComposerAssets(assets) + } } /// Populates the draft message in the composer with the current controller's draft information. @@ -290,7 +296,15 @@ open class MessageComposerViewModel: ObservableObject { return } - fillComposer(with: ChatMessage(draft)) + let message = ChatMessage(draft) + text = message.text + mentionedUsers = message.mentionedUsers + quotedMessage?.wrappedValue = message.quotedMessage + showReplyInChannel = message.showReplyInChannel + selectedRangeLocation = message.text.count + attachmentsConverter.attachmentsToAssets(message.allAttachments) { [weak self] assets in + self?.updateComposerAssets(assets) + } } /// Updates the draft message locally and on the server. @@ -642,18 +656,6 @@ open class MessageComposerViewModel: ObservableObject { // MARK: - private - private func fillComposer(with message: ChatMessage) { - text = message.text - mentionedUsers = message.mentionedUsers - quotedMessage?.wrappedValue = message.quotedMessage - showReplyInChannel = message.showReplyInChannel - selectedRangeLocation = message.text.count - - attachmentsConverter.attachmentsToAssets(message.allAttachments) { [weak self] assets in - self?.updateComposerAssets(assets) - } - } - private func updateComposerAssets(_ assets: ComposerAssets) { addedAssets = assets.mediaAssets addedFileURLs = assets.fileAssets.map(\.url) diff --git a/StreamChatSwiftUITests/Tests/ChatChannel/MessageComposerView_Tests.swift b/StreamChatSwiftUITests/Tests/ChatChannel/MessageComposerView_Tests.swift index 2d4a3ba02..ddf3fe295 100644 --- a/StreamChatSwiftUITests/Tests/ChatChannel/MessageComposerView_Tests.swift +++ b/StreamChatSwiftUITests/Tests/ChatChannel/MessageComposerView_Tests.swift @@ -647,6 +647,22 @@ class MessageComposerView_Tests: StreamChatTestCase { AssertSnapshot(view, variants: [.defaultLight], size: size) } + func test_composerView_editingMessageWithQuotedMessage() { + let size = CGSize(width: defaultScreenSize.width, height: 100) + let mockEditedMessage = ChatMessage.mock( + id: .unique, + cid: .unique, + text: "This is a message being edited", + author: .mock(id: .unique), + quotedMessage: .mock(text: "Should not appear") + ) + + let view = makeComposerViewWithEditedMessage(mockEditedMessage) + .frame(width: size.width, height: size.height) + + AssertSnapshot(view, variants: [.defaultLight], size: size) + } + func test_composerView_editingMessageWithImageAttachment() throws { let size = CGSize(width: defaultScreenSize.width, height: 200) let mockEditedMessage = ChatMessage.mock( diff --git a/StreamChatSwiftUITests/Tests/ChatChannel/__Snapshots__/MessageComposerView_Tests/test_composerView_editingMessageWithQuotedMessage.default-light.png b/StreamChatSwiftUITests/Tests/ChatChannel/__Snapshots__/MessageComposerView_Tests/test_composerView_editingMessageWithQuotedMessage.default-light.png new file mode 100644 index 000000000..d7c9666ed Binary files /dev/null and b/StreamChatSwiftUITests/Tests/ChatChannel/__Snapshots__/MessageComposerView_Tests/test_composerView_editingMessageWithQuotedMessage.default-light.png differ