From c832f9b290349288f17f0ed3df640460658057dd Mon Sep 17 00:00:00 2001 From: Diogo Date: Thu, 7 Nov 2024 21:42:45 +0000 Subject: [PATCH] clean gap on multi jump --- .../Views/Chat/ChatItem/FramedItemView.swift | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/apps/ios/Shared/Views/Chat/ChatItem/FramedItemView.swift b/apps/ios/Shared/Views/Chat/ChatItem/FramedItemView.swift index 074d8b122b..82367a21b2 100644 --- a/apps/ios/Shared/Views/Chat/ChatItem/FramedItemView.swift +++ b/apps/ios/Shared/Views/Chat/ChatItem/FramedItemView.swift @@ -359,7 +359,12 @@ struct FramedItemView: View { let dedupedChatItems = chatItems.filter { !im.chatItemIds.contains($0.id) } reversedPage.append(contentsOf: dedupedChatItems.reversed()) + var itemsToDrop = Set() await MainActor.run { + if let g = im.gap { + itemsToDrop = Set(im.reversedChatItems.suffix(g.size).map { $0.id }) + } + let itemCount = im.reversedChatItems.count if let size = gap, size - itemCount > 0 { im.gap = ChatGap(index: itemCount, size: size - itemCount) @@ -367,6 +372,17 @@ struct FramedItemView: View { im.reversedChatItems.append(contentsOf: reversedPage) } + if (itemsToDrop.count > 0) { + DispatchQueue.main.asyncAfter(deadline: .now() + 1) { + Task { + if let g = im.gap { + im.gap = ChatGap(index: g.index - itemsToDrop.count, size: g.size + itemsToDrop.count) + } + im.reversedChatItems.removeAll(where: { itemsToDrop.contains($0.id) }) + } + } + } + return reversedPage } catch let error { logger.error("apiGetChat error: \(responseError(error))")