diff --git a/apps/ios/Shared/Views/Chat/ChatView.swift b/apps/ios/Shared/Views/Chat/ChatView.swift index 655dd8aaed..7f07b94427 100644 --- a/apps/ios/Shared/Views/Chat/ChatView.swift +++ b/apps/ios/Shared/Views/Chat/ChatView.swift @@ -432,14 +432,14 @@ struct ChatView: View { .onChange(of: im.reversedChatItems) { _ in floatingButtonModel.chatItemsChanged() } - .onChange(of: im.itemAdded) { added in - if added { - im.itemAdded = false - if floatingButtonModel.unreadChatItemCounts.isReallyNearBottom { - scrollModel.scrollToBottom() - } - } - } +// .onChange(of: im.itemAdded) { added in +// if added { +// im.itemAdded = false +// if floatingButtonModel.unreadChatItemCounts.isReallyNearBottom { +// scrollModel.scrollToBottom() +// } +// } +// } } } diff --git a/apps/ios/Shared/Views/Chat/ReverseList.swift b/apps/ios/Shared/Views/Chat/ReverseList.swift index 9a2ca4f19c..7758622c8b 100644 --- a/apps/ios/Shared/Views/Chat/ReverseList.swift +++ b/apps/ios/Shared/Views/Chat/ReverseList.swift @@ -171,19 +171,27 @@ struct ReverseList: UIV Task { representer.scrollState = .atDestination } } - var updateInProgress = false var itemId: Item.ID? + var retainedItems: [Item]? + var updateInProgress = false func update(items: [Item]) { - if updateInProgress { return } - if let itemId, + if updateInProgress { + retainedItems = items + return + } + if let itemId, let i = items.firstIndex(where: { $0.id == itemId }), i > 0 { updateInProgress = true + // Update existing items without animation _update(items: Array(items[i...]), animated: false) { DispatchQueue.main.async { + // Added items animated by sliding from bottom (.top) self._update(items: items, animated: true) { self.updateInProgress = false + // Process update, which might have arrived before completion + if let items = self.retainedItems { self.update(items: items) } } } }