Skip to content

Commit

Permalink
Fix thread root message not being updated
Browse files Browse the repository at this point in the history
  • Loading branch information
nuno-vieira committed Aug 17, 2022
1 parent 6492e7d commit eba3eae
Showing 1 changed file with 16 additions and 8 deletions.
24 changes: 16 additions & 8 deletions Sources/StreamChatUI/ChatThread/ChatThreadVC.swift
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,8 @@ open class ChatThreadVC: _ViewController,

private var isLoadingPreviousMessages: Bool = false

private var currentlyTypingUsers: Set<ChatUser> = []

override open func setUp() {
super.setUp()

Expand Down Expand Up @@ -266,7 +268,11 @@ open class ChatThreadVC: _ViewController,
_ controller: ChatMessageController,
didChangeMessage change: EntityChange<ChatMessage>
) {
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<ChatMessage>
switch change {
Expand All @@ -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<ChatMessage>]
) {
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<ChatUser> = []

open func eventsController(_ controller: EventsController, didReceiveEvent event: Event) {
switch event {
case let event as TypingEvent:
Expand Down Expand Up @@ -322,6 +323,13 @@ open class ChatThreadVC: _ViewController,
messageListVC.dataSource = self
}

private func updateMessages(with changes: [ListChange<ChatMessage>]) {
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 {
Expand Down

0 comments on commit eba3eae

Please sign in to comment.