Dynamically adjusting the visibleRoomsView's timeline limit based on the app state

This commit is contained in:
Stefan Ceriu
2023-01-31 15:43:15 +02:00
committed by Stefan Ceriu
parent a8f154740e
commit 8f3842f74a
9 changed files with 64 additions and 25 deletions
@@ -19,14 +19,10 @@ import SwiftUI
struct HomeScreen: View {
@ObservedObject var context: HomeScreenViewModel.Context
@State private var scrollViewAdapter = ScrollViewAdapter()
@State private var showingLogoutConfirmation = false
@State private var visibleItemIdentifiers = Set<String>() {
didSet {
if visibleItemIdentifiers != oldValue {
updateVisibleRange()
}
}
}
@State private var visibleItemIdentifiers = Set<String>()
@State private var hasTriggeredInitialVisibleItemUpdate = false
var body: some View {
ScrollView {
@@ -65,6 +61,10 @@ struct HomeScreen: View {
.disableAutocorrection(true)
}
}
.introspectScrollView { scrollView in
guard scrollView != scrollViewAdapter.scrollView else { return }
scrollViewAdapter.scrollView = scrollView
}
.scrollDismissesKeyboard(.immediately)
.disabled(context.viewState.roomListMode == .skeletons)
.animation(.elementDefault, value: context.viewState.showSessionVerificationBanner)
@@ -76,6 +76,17 @@ struct HomeScreen: View {
userMenuButton
}
}
.onChange(of: visibleItemIdentifiers) { _ in
if !hasTriggeredInitialVisibleItemUpdate {
updateVisibleRange()
hasTriggeredInitialVisibleItemUpdate = true
}
}
.onReceive(scrollViewAdapter.isScrolling) { isScrolling in
context.isScrolling = isScrolling
updateVisibleRange()
}
.background(Color.element.background)
}