Improve the load more fetching
This commit is contained in:
@ -46,7 +46,7 @@ import Views
|
||||
}
|
||||
}
|
||||
|
||||
func loadSearchQuery(dataService: DataService, filterState: FetcherFilterState, isRefresh: Bool) async {
|
||||
func loadSearchQuery(dataService: DataService, filterState: FetcherFilterState, isRefresh: Bool, loadCursor: String? = nil) async {
|
||||
let thisSearchIdx = searchIdx
|
||||
searchIdx += 1
|
||||
|
||||
@ -57,7 +57,7 @@ import Views
|
||||
let queryResult = try? await dataService.loadLinkedItems(
|
||||
limit: 10,
|
||||
searchQuery: searchQuery(filterState),
|
||||
cursor: isRefresh ? nil : cursor
|
||||
cursor: isRefresh ? nil : loadCursor ?? cursor
|
||||
)
|
||||
|
||||
if let appliedFilter = filterState.appliedFilter, let queryResult = queryResult {
|
||||
@ -112,9 +112,10 @@ import Views
|
||||
BadgeCountHandler.updateBadgeCount(dataService: dataService)
|
||||
}
|
||||
|
||||
func loadMoreItems(dataService: DataService, filterState: FetcherFilterState, isRefresh: Bool) async {
|
||||
func loadMoreItems(dataService: DataService, filterState: FetcherFilterState) async {
|
||||
if let appliedFilter = filterState.appliedFilter, appliedFilter.shouldRemoteSearch {
|
||||
await loadSearchQuery(dataService: dataService, filterState: filterState, isRefresh: isRefresh)
|
||||
let idx = max(items.count - 1, 0)
|
||||
await loadSearchQuery(dataService: dataService, filterState: filterState, isRefresh: false, loadCursor: idx.description)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -1041,18 +1041,27 @@ struct BottomView: View {
|
||||
@ObservedObject var viewModel: HomeFeedViewModel
|
||||
@EnvironmentObject var dataService: DataService
|
||||
|
||||
@State var autoLoading = false
|
||||
|
||||
var body: some View {
|
||||
if viewModel.fetcher.items.count < 5 {
|
||||
Color.clear
|
||||
.onAppear {
|
||||
Task {
|
||||
await viewModel.loadMore(dataService: dataService)
|
||||
}
|
||||
print("BOTTOM APPEARED")
|
||||
innerBody
|
||||
.onAppear {
|
||||
Task {
|
||||
autoLoading = true
|
||||
await viewModel.loadMore(dataService: dataService)
|
||||
autoLoading = false
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var innerBody: some View {
|
||||
if viewModel.fetcher.items.count < 5 {
|
||||
AnyView(Color.clear)
|
||||
} else {
|
||||
HStack {
|
||||
Text("You are all caught up.")
|
||||
AnyView(HStack {
|
||||
if !autoLoading {
|
||||
Text("You are all caught up.")
|
||||
}
|
||||
Spacer()
|
||||
if viewModel.isLoading {
|
||||
ProgressView()
|
||||
@ -1066,7 +1075,7 @@ struct BottomView: View {
|
||||
})
|
||||
.foregroundColor(Color.blue)
|
||||
}
|
||||
}.padding(10)
|
||||
}.padding(10))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -92,7 +92,10 @@ import Views
|
||||
return
|
||||
}
|
||||
|
||||
await loadMoreItems(dataService: dataService, filterState: filterState, isRefresh: false)
|
||||
isLoading = true
|
||||
await fetcher.loadMoreItems(dataService: dataService, filterState: filterState)
|
||||
isLoading = false
|
||||
|
||||
lastMoreFetched = start
|
||||
}
|
||||
|
||||
@ -140,22 +143,12 @@ import Views
|
||||
showLoadingBar = false
|
||||
}
|
||||
|
||||
func loadMoreItems(dataService: DataService, filterState: FetcherFilterState, isRefresh: Bool) async {
|
||||
isLoading = true
|
||||
|
||||
await fetcher.loadMoreItems(dataService: dataService, filterState: filterState, isRefresh: isRefresh)
|
||||
|
||||
isLoading = false
|
||||
}
|
||||
|
||||
func loadFeatureItems(context: NSManagedObjectContext, predicate: NSPredicate, sort: NSSortDescriptor) async -> [Models.LibraryItem] {
|
||||
let fetchRequest: NSFetchRequest<Models.LibraryItem> = LibraryItem.fetchRequest()
|
||||
fetchRequest.fetchLimit = 25
|
||||
fetchRequest.predicate = predicate
|
||||
fetchRequest.sortDescriptors = [sort]
|
||||
|
||||
print("using predicate to load feature items: ", predicate)
|
||||
|
||||
do {
|
||||
let fetched = try context.fetch(fetchRequest)
|
||||
return fetched
|
||||
|
||||
Reference in New Issue
Block a user