From 299766a7582da391b5104ff02e37ddfaeec3c420 Mon Sep 17 00:00:00 2001 From: Levitating Pineapple Date: Fri, 16 Aug 2024 21:21:34 +0300 Subject: [PATCH] handle retained items --- apps/ios/Shared/Views/Chat/ChatView.swift | 16 ++++++++-------- apps/ios/Shared/Views/Chat/ReverseList.swift | 14 +++++++++++--- 2 files changed, 19 insertions(+), 11 deletions(-) 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) } } } }