From eba3eae2fca07503623e5951d0f47f6d954d85a7 Mon Sep 17 00:00:00 2001 From: Nuno Vieira Date: Wed, 17 Aug 2022 14:57:22 +0100 Subject: [PATCH] Fix thread root message not being updated --- .../ChatThread/ChatThreadVC.swift | 24 ++++++++++++------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/Sources/StreamChatUI/ChatThread/ChatThreadVC.swift b/Sources/StreamChatUI/ChatThread/ChatThreadVC.swift index ef277d0db85..eded2a4d93c 100644 --- a/Sources/StreamChatUI/ChatThread/ChatThreadVC.swift +++ b/Sources/StreamChatUI/ChatThread/ChatThreadVC.swift @@ -55,6 +55,8 @@ open class ChatThreadVC: _ViewController, private var isLoadingPreviousMessages: Bool = false + private var currentlyTypingUsers: Set = [] + override open func setUp() { super.setUp() @@ -266,7 +268,11 @@ open class ChatThreadVC: _ViewController, _ controller: ChatMessageController, didChangeMessage change: EntityChange ) { - let indexPath = IndexPath(row: messages.count, section: 0) + guard !messages.isEmpty else { + return + } + + let indexPath = IndexPath(row: messages.count - 1, section: 0) let listChange: ListChange switch change { @@ -278,23 +284,18 @@ open class ChatThreadVC: _ViewController, listChange = .remove(item, index: indexPath) } - messageListVC.updateMessages(with: [listChange]) + updateMessages(with: [listChange]) } open func messageController( _ controller: ChatMessageController, didChangeReplies changes: [ListChange] ) { - messageListVC.setPreviousMessagesSnapshot(self.messages) - let messages = getRepliesWithThreadRootMessage(from: controller) - messageListVC.setNewMessagesSnapshot(messages) - messageListVC.updateMessages(with: changes) + updateMessages(with: changes) } // MARK: - EventsControllerDelegate - private var currentlyTypingUsers: Set = [] - open func eventsController(_ controller: EventsController, didReceiveEvent event: Event) { switch event { case let event as TypingEvent: @@ -322,6 +323,13 @@ open class ChatThreadVC: _ViewController, messageListVC.dataSource = self } + private func updateMessages(with changes: [ListChange]) { + messageListVC.setPreviousMessagesSnapshot(self.messages) + let messages = getRepliesWithThreadRootMessage(from: messageController) + messageListVC.setNewMessagesSnapshot(messages) + messageListVC.updateMessages(with: changes) + } + private func getRepliesWithThreadRootMessage(from messageController: ChatMessageController) -> [ChatMessage] { var messages = Array(messageController.replies) if let threadRootMessage = messageController.message {