diff --git a/CHANGELOG.md b/CHANGELOG.md index 5512f5ba..ef1cf933 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,7 +3,8 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). # Upcoming -### 🔄 Changed +### 🐞 Fixed +- Fix composer deleting newly entered text after deleting draft text [#1030](https://github.com/GetStream/stream-chat-swiftui/pull/1030) # [4.91.0](https://github.com/GetStream/stream-chat-swiftui/releases/tag/4.91.0) _October 22, 2025_ diff --git a/Sources/StreamChatSwiftUI/ChatChannel/Composer/MessageComposerViewModel.swift b/Sources/StreamChatSwiftUI/ChatChannel/Composer/MessageComposerViewModel.swift index 48e1b105..545b5a57 100644 --- a/Sources/StreamChatSwiftUI/ChatChannel/Composer/MessageComposerViewModel.swift +++ b/Sources/StreamChatSwiftUI/ChatChannel/Composer/MessageComposerViewModel.swift @@ -908,14 +908,6 @@ extension MessageComposerViewModel: EventsControllerDelegate { fillDraftMessage() } } - - if let event = event as? DraftDeletedEvent { - let isFromSameThread = messageController?.messageId == event.threadId - let isFromSameChannel = channelController.cid == event.cid && messageController == nil - if isFromSameThread || isFromSameChannel { - clearInputData() - } - } } } diff --git a/StreamChatSwiftUITests/Tests/ChatChannel/MessageComposerViewModel_Tests.swift b/StreamChatSwiftUITests/Tests/ChatChannel/MessageComposerViewModel_Tests.swift index 17623396..6c9dd520 100644 --- a/StreamChatSwiftUITests/Tests/ChatChannel/MessageComposerViewModel_Tests.swift +++ b/StreamChatSwiftUITests/Tests/ChatChannel/MessageComposerViewModel_Tests.swift @@ -1109,74 +1109,6 @@ class MessageComposerViewModel_Tests: StreamChatTestCase { XCTAssertEqual(viewModel.text, "Draft") } - func test_messageComposerVM_draftMessageDeletedEvent() throws { - // Given - let channelController = makeChannelController() - channelController.channel_mock = .mock(cid: .unique, draftMessage: .mock(text: "Draft")) - let viewModel = makeComposerDraftsViewModel( - channelController: channelController, - messageController: nil - ) - - // When - channelController.channel_mock = .mock(cid: .unique, draftMessage: nil) - let cid = try XCTUnwrap(channelController.cid) - let event = DraftDeletedEvent(cid: cid, threadId: nil, createdAt: .unique) - viewModel.eventsController(viewModel.eventsController, didReceiveEvent: event) - - // Then - XCTAssertEqual(viewModel.text, "") - } - - func test_messageComposerVM_draftReplyDeletedEvent() throws { - // Given - let channelController = makeChannelController() - let messageController = ChatMessageControllerSUI_Mock.mock( - chatClient: chatClient, - cid: channelController.cid!, - messageId: .unique - ) - messageController.message_mock = .mock(draftReply: .mock(text: "Draft")) - let viewModel = makeComposerDraftsViewModel( - channelController: channelController, - messageController: messageController - ) - - // When - messageController.message_mock = .mock(draftReply: nil) - let cid = try XCTUnwrap(channelController.cid) - let event = DraftDeletedEvent(cid: cid, threadId: messageController.messageId, createdAt: .unique) - viewModel.eventsController(viewModel.eventsController, didReceiveEvent: event) - - // Then - XCTAssertEqual(viewModel.text, "") - } - - func test_messageComposerVM_draftReplyDeletedEventFromOtherThread_shouldNotUpdate() throws { - // Given - let channelController = makeChannelController() - let messageController = ChatMessageControllerSUI_Mock.mock( - chatClient: chatClient, - cid: channelController.cid!, - messageId: .unique - ) - messageController.message_mock = .mock(draftReply: .mock(text: "Draft")) - let viewModel = makeComposerDraftsViewModel( - channelController: channelController, - messageController: messageController - ) - viewModel.fillDraftMessage() - - // When - messageController.message_mock = .mock(draftReply: nil) - let cid = try XCTUnwrap(channelController.cid) - let event = DraftDeletedEvent(cid: cid, threadId: .unique, createdAt: .unique) - viewModel.eventsController(viewModel.eventsController, didReceiveEvent: event) - - // Then - XCTAssertEqual(viewModel.text, "Draft") - } - func test_messageComposerVM_whenLastAssetRemoved_shouldDeleteDraft() { // Given let channelController = makeChannelController()