From 5eaf563b96f4661f66847b143c82e81273171b66 Mon Sep 17 00:00:00 2001 From: Diogo Date: Wed, 6 Nov 2024 11:15:51 +0000 Subject: [PATCH] jump to bottom --- apps/ios/Shared/Model/SimpleXAPI.swift | 1 + apps/ios/Shared/Views/Chat/ChatView.swift | 16 +++++++++++++--- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/apps/ios/Shared/Model/SimpleXAPI.swift b/apps/ios/Shared/Model/SimpleXAPI.swift index a442089ca9..45ac944e3d 100644 --- a/apps/ios/Shared/Model/SimpleXAPI.swift +++ b/apps/ios/Shared/Model/SimpleXAPI.swift @@ -320,6 +320,7 @@ private func apiChatsResponse(_ r: ChatResponse) throws -> [ChatData] { let loadItemsPerPage = 50 let preloadItem = 8 +let idealChatListSize = 500 func apiGetChat(type: ChatType, id: Int64, search: String = "") async throws -> (Chat, Int?) { let r = await chatSendCmd(.apiGetChat(type: type, id: id, pagination: .initial(count: loadItemsPerPage), search: search)) diff --git a/apps/ios/Shared/Views/Chat/ChatView.swift b/apps/ios/Shared/Views/Chat/ChatView.swift index 5f06a28452..8e3d41ae10 100644 --- a/apps/ios/Shared/Views/Chat/ChatView.swift +++ b/apps/ios/Shared/Views/Chat/ChatView.swift @@ -75,7 +75,7 @@ struct ChatView: View { VStack(spacing: 0) { ZStack(alignment: .bottomTrailing) { chatItemsList() - FloatingButtons(theme: theme, scrollModel: scrollModel, chat: chat) + FloatingButtons(theme: theme, scrollModel: scrollModel, chat: chat, onScrollToBottom: onScrollToBottom) } connectingText() if selectedChatItems == nil { @@ -476,6 +476,15 @@ struct ChatView: View { } } + private func onScrollToBottom() { + scrollModel.scrollToBottom() + if let g = im.gap { + let sliceSize = min(g.index, idealChatListSize) + im.gap = nil + im.reversedChatItems = Array(im.reversedChatItems[.. ChatItem? { logger.error("[scrolling] \(im.reversedChatItems.count)") @@ -571,6 +580,7 @@ struct ChatView: View { let theme: AppTheme let scrollModel: ReverseListScrollModel let chat: Chat + let onScrollToBottom: () -> Void @ObservedObject var model = FloatingButtonModel.shared var body: some View { @@ -611,14 +621,14 @@ struct ChatView: View { .foregroundColor(theme.colors.primary) } .onTapGesture { - scrollModel.scrollToBottom() + onScrollToBottom() } } else if !model.isNearBottom { circleButton { Image(systemName: "chevron.down") .foregroundColor(theme.colors.primary) } - .onTapGesture { scrollModel.scrollToBottom() } + .onTapGesture { onScrollToBottom() } } } .padding()