Improve the load more fetching

This commit is contained in:
Jackson Harper
2023-12-21 12:12:19 +08:00
parent 7e7c9e344c
commit fbb39bcd91
3 changed files with 28 additions and 25 deletions

View File

@ -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)
}
}

View File

@ -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))
}
}
}

View File

@ -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