From bafaf0f0ee9a0e14bfdd9ca20e08bd1fab99db2e Mon Sep 17 00:00:00 2001 From: Diogo Date: Tue, 22 Oct 2024 15:13:34 +0100 Subject: [PATCH] better request management --- apps/ios/Shared/Views/Chat/ReverseList.swift | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/apps/ios/Shared/Views/Chat/ReverseList.swift b/apps/ios/Shared/Views/Chat/ReverseList.swift index 06a842a4a4..92704c4fb0 100644 --- a/apps/ios/Shared/Views/Chat/ReverseList.swift +++ b/apps/ios/Shared/Views/Chat/ReverseList.swift @@ -63,6 +63,7 @@ struct ReverseList: UIViewControllerRepresentable { private var bag = Set() private var lastContentOffset: CGFloat = 0 private var scrollDirection: ChatScrollDirection = .none + private var requestedRange = false init(representer: ReverseList) { self.representer = representer @@ -91,13 +92,15 @@ struct ReverseList: UIViewControllerRepresentable { self.dataSource = UITableViewDiffableDataSource( tableView: tableView ) { (tableView, indexPath, item) -> UITableViewCell? in - if let section = self.dataSource.sectionIdentifier(for: indexPath.section), self.representer.scrollState == .atDestination { - let itemCount = self.getTotalItemsInItemSection(indexPath: indexPath) + if let section = self.dataSource.sectionIdentifier(for: indexPath.section), self.representer.scrollState == .atDestination, !self.requestedRange { if self.representer.sectionModel.activeSection == section { + let itemCount = self.getTotalItemsInItemSection(indexPath: indexPath) if self.scrollDirection == .toOldest, indexPath.item > itemCount - 8 { let lastItem = self.getLastItemInItemSection(indexPath: indexPath) + self.requestedRange = !self.representer.sectionModel.boundaries.oldest self.representer.loadPage(.toOldest, section, lastItem) } else if self.scrollDirection == .toLatest, indexPath.item < 8 { + self.requestedRange = !self.representer.sectionModel.boundaries.latest let firstItem = self.getFirstItemInItemSection(indexPath: indexPath) self.representer.loadPage(.toLatest, section, firstItem) } @@ -230,6 +233,7 @@ struct ReverseList: UIViewControllerRepresentable { } func update(items: [ChatItem]) { + requestedRange = false var snapshot = NSDiffableDataSourceSnapshot() let sections = self.representer.sectionModel.getSectionsOrdered() let itemsBySection = self.itemsBySection(items: items)