diff --git a/apple/OmnivoreKit/Sources/App/Views/Home/Components/LibraryItemFetcher.swift b/apple/OmnivoreKit/Sources/App/Views/Home/Components/LibraryItemFetcher.swift index 60be5b5e0..ebe8626cf 100644 --- a/apple/OmnivoreKit/Sources/App/Views/Home/Components/LibraryItemFetcher.swift +++ b/apple/OmnivoreKit/Sources/App/Views/Home/Components/LibraryItemFetcher.swift @@ -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) } } diff --git a/apple/OmnivoreKit/Sources/App/Views/Home/HomeFeedViewIOS.swift b/apple/OmnivoreKit/Sources/App/Views/Home/HomeFeedViewIOS.swift index 542376b8c..06192da7b 100644 --- a/apple/OmnivoreKit/Sources/App/Views/Home/HomeFeedViewIOS.swift +++ b/apple/OmnivoreKit/Sources/App/Views/Home/HomeFeedViewIOS.swift @@ -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)) } } } diff --git a/apple/OmnivoreKit/Sources/App/Views/Home/HomeFeedViewModel.swift b/apple/OmnivoreKit/Sources/App/Views/Home/HomeFeedViewModel.swift index c02e72978..062eb00c6 100644 --- a/apple/OmnivoreKit/Sources/App/Views/Home/HomeFeedViewModel.swift +++ b/apple/OmnivoreKit/Sources/App/Views/Home/HomeFeedViewModel.swift @@ -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 = 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