diff --git a/CHANGELOG.md b/CHANGELOG.md index 46c06107253..71edc697435 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,7 +3,9 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). # Upcoming -### 🔄 Changed +## StreamChatUI +### 🐞 Fixed +- Fix composer deleting newly entered text after deleting draft text [#3854](https://github.com/GetStream/stream-chat-swift/pull/3854) # [4.91.0](https://github.com/GetStream/stream-chat-swift/releases/tag/4.91.0) _October 22, 2025_ diff --git a/Sources/StreamChatUI/ChatChannel/ChatChannelVC.swift b/Sources/StreamChatUI/ChatChannel/ChatChannelVC.swift index c2a8f97fc15..3a7336dcc64 100644 --- a/Sources/StreamChatUI/ChatChannel/ChatChannelVC.swift +++ b/Sources/StreamChatUI/ChatChannel/ChatChannelVC.swift @@ -586,11 +586,6 @@ open class ChatChannelVC: _ViewController, draftUpdatedEvent.cid == channelController.cid, draftUpdatedEvent.draftMessage.threadId == nil { messageComposerVC.content.draftMessage(draft) } - - if let draftDeletedEvent = event as? DraftDeletedEvent, - draftDeletedEvent.cid == channelController.cid, draftDeletedEvent.threadId == nil { - messageComposerVC.content.clear() - } } // MARK: - AudioQueuePlayerDatasource diff --git a/Sources/StreamChatUI/ChatThread/ChatThreadVC.swift b/Sources/StreamChatUI/ChatThread/ChatThreadVC.swift index f3affa2d4bd..f76727b92ac 100644 --- a/Sources/StreamChatUI/ChatThread/ChatThreadVC.swift +++ b/Sources/StreamChatUI/ChatThread/ChatThreadVC.swift @@ -493,8 +493,6 @@ open class ChatThreadVC: _ViewController, if let draft = messageController.message?.draftReply { messageComposerVC.content.draftMessage(draft) } - case let event as DraftDeletedEvent where event.threadId == messageController.messageId: - messageComposerVC.content.clear() default: break } diff --git a/Tests/StreamChatUITests/SnapshotTests/ChatChannel/ChatChannelVC_Tests.swift b/Tests/StreamChatUITests/SnapshotTests/ChatChannel/ChatChannelVC_Tests.swift index 3e856b29b8a..183950bafe0 100644 --- a/Tests/StreamChatUITests/SnapshotTests/ChatChannel/ChatChannelVC_Tests.swift +++ b/Tests/StreamChatUITests/SnapshotTests/ChatChannel/ChatChannelVC_Tests.swift @@ -1636,20 +1636,6 @@ final class ChatChannelVC_Tests: XCTestCase { AssertSnapshot(vc, variants: [.defaultLight]) } - - func test_channelWithDraftMessage_whenDraftIsDeletedFromEvent_updatesDraftInComposer() { - let channel = ChatChannel.mock(cid: .unique, draftMessage: nil) - channelControllerMock.channel_mock = channel - - vc.messageComposerVC.content.draftMessage(.mock(text: "Draft Message")) - XCTAssertFalse(vc.messageComposerVC.content.text.isEmpty) - - channelControllerMock.mockCid = channel.cid - let event = DraftDeletedEvent(cid: channel.cid, threadId: nil, createdAt: .unique) - vc.eventsController(vc.eventsController, didReceiveEvent: event) - - XCTAssertTrue(vc.messageComposerVC.content.text.isEmpty) - } } private extension ChatChannelVC_Tests { diff --git a/Tests/StreamChatUITests/SnapshotTests/ChatThread/ChatThreadVC_Tests.swift b/Tests/StreamChatUITests/SnapshotTests/ChatThread/ChatThreadVC_Tests.swift index 21cca01db2d..4709faecf7c 100644 --- a/Tests/StreamChatUITests/SnapshotTests/ChatThread/ChatThreadVC_Tests.swift +++ b/Tests/StreamChatUITests/SnapshotTests/ChatThread/ChatThreadVC_Tests.swift @@ -360,25 +360,6 @@ final class ChatThreadVC_Tests: XCTestCase { AssertSnapshot(vc, variants: [.defaultLight]) } - func test_threadWithDraftReply_whenDraftIsDeletedFromEvent_removesDraftFromComposer() { - let cid = ChannelId.unique - let parentMessage = ChatMessage.mock( - id: messageControllerMock.messageId, - cid: cid, - text: "Parent message", - author: .mock(id: .unique), - draftReply: .mock(text: "Draft Message") - ) - vc.messageComposerVC.content.draftMessage(.mock(text: "Draft")) - - XCTAssertFalse(vc.messageComposerVC.content.text.isEmpty) - - let updateDraftEvent = DraftDeletedEvent(cid: cid, threadId: messageControllerMock.messageId, createdAt: .unique) - vc.eventsController(vc.eventsController, didReceiveEvent: updateDraftEvent) - - XCTAssertTrue(vc.messageComposerVC.content.text.isEmpty) - } - // MARK: - audioQueuePlayerNextAssetURL func test_audioQueuePlayerNextAssetURL_callsNextAvailableVoiceRecordingProvideWithExpectedInputAndReturnsValue() throws {