wrap viewModel async call in Task
This commit is contained in:
@ -22,7 +22,7 @@ struct FeedCardNavigationLink: View {
|
||||
.opacity(0)
|
||||
.buttonStyle(PlainButtonStyle())
|
||||
.onAppear {
|
||||
Task { await viewModel.itemAppeared(item: item, dataService: dataService) }
|
||||
viewModel.itemAppeared(item: item, dataService: dataService)
|
||||
}
|
||||
FeedCard(item: item)
|
||||
}
|
||||
@ -60,7 +60,7 @@ struct GridCardNavigationLink: View {
|
||||
}
|
||||
})
|
||||
.onAppear {
|
||||
Task { await viewModel.itemAppeared(item: item, dataService: dataService) }
|
||||
viewModel.itemAppeared(item: item, dataService: dataService)
|
||||
}
|
||||
}
|
||||
.aspectRatio(1.8, contentMode: .fill)
|
||||
|
||||
@ -19,7 +19,7 @@ import Views
|
||||
viewModel: viewModel
|
||||
)
|
||||
.refreshable {
|
||||
Task { await viewModel.loadItems(dataService: dataService, isRefresh: true) }
|
||||
viewModel.loadItems(dataService: dataService, isRefresh: true)
|
||||
}
|
||||
.searchable(
|
||||
text: $viewModel.searchTerm,
|
||||
@ -35,13 +35,13 @@ import Views
|
||||
.onChange(of: viewModel.searchTerm) { _ in
|
||||
// Maybe we should debounce this, but
|
||||
// it feels like it works ok without
|
||||
Task { await viewModel.loadItems(dataService: dataService, isRefresh: true) }
|
||||
viewModel.loadItems(dataService: dataService, isRefresh: true)
|
||||
}
|
||||
.onChange(of: viewModel.selectedLabels) { _ in
|
||||
Task { await viewModel.loadItems(dataService: dataService, isRefresh: true) }
|
||||
viewModel.loadItems(dataService: dataService, isRefresh: true)
|
||||
}
|
||||
.onSubmit(of: .search) {
|
||||
Task { await viewModel.loadItems(dataService: dataService, isRefresh: true) }
|
||||
viewModel.loadItems(dataService: dataService, isRefresh: true)
|
||||
}
|
||||
.sheet(item: $viewModel.itemUnderLabelEdit) { item in
|
||||
ApplyLabelsView(mode: .item(item)) { labels in
|
||||
@ -54,7 +54,7 @@ import Views
|
||||
.onReceive(NotificationCenter.default.publisher(for: UIApplication.willEnterForegroundNotification)) { _ in
|
||||
// Don't refresh the list if the user is currently reading an article
|
||||
if viewModel.selectedLinkItem == nil {
|
||||
Task { await viewModel.loadItems(dataService: dataService, isRefresh: true) }
|
||||
viewModel.loadItems(dataService: dataService, isRefresh: true)
|
||||
}
|
||||
}
|
||||
.onReceive(NotificationCenter.default.publisher(for: Notification.Name("PushFeedItem"))) { notification in
|
||||
@ -75,7 +75,7 @@ import Views
|
||||
}
|
||||
.onAppear {
|
||||
if viewModel.items.isEmpty {
|
||||
Task { await viewModel.loadItems(dataService: dataService, isRefresh: true) }
|
||||
viewModel.loadItems(dataService: dataService, isRefresh: true)
|
||||
}
|
||||
}
|
||||
.onChange(of: viewModel.selectedLinkItem) { _ in
|
||||
@ -322,7 +322,7 @@ import Views
|
||||
.onPreferenceChange(ScrollViewOffsetPreferenceKey.self) { offset in
|
||||
DispatchQueue.main.async {
|
||||
if !viewModel.isLoading, offset > 240 {
|
||||
Task { await viewModel.loadItems(dataService: dataService, isRefresh: true) }
|
||||
viewModel.loadItems(dataService: dataService, isRefresh: true)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -36,14 +36,14 @@ import Views
|
||||
|
||||
init() {}
|
||||
|
||||
func itemAppeared(item: FeedItem, dataService: DataService) async {
|
||||
func itemAppeared(item: FeedItem, dataService: DataService) {
|
||||
if isLoading { return }
|
||||
let itemIndex = items.firstIndex(where: { $0.id == item.id })
|
||||
let thresholdIndex = items.index(items.endIndex, offsetBy: -5)
|
||||
|
||||
// Check if user has scrolled to the last five items in the list
|
||||
if let itemIndex = itemIndex, itemIndex > thresholdIndex, items.count < thresholdIndex + 10 {
|
||||
await loadItems(dataService: dataService, isRefresh: false)
|
||||
Task { await loadItems(dataService: dataService, isRefresh: false) }
|
||||
}
|
||||
}
|
||||
|
||||
@ -51,7 +51,7 @@ import Views
|
||||
items.insert(item, at: 0)
|
||||
}
|
||||
|
||||
func loadItems(dataService: DataService, isRefresh: Bool) async {
|
||||
func loadItems(dataService: DataService, isRefresh: Bool) {
|
||||
// Clear offline highlights since we'll be populating new FeedItems with the correct highlights set
|
||||
dataService.clearHighlights()
|
||||
|
||||
@ -61,8 +61,9 @@ import Views
|
||||
isLoading = true
|
||||
|
||||
// Cache the viewer
|
||||
|
||||
if dataService.currentViewer == nil {
|
||||
_ = try? await dataService.fetchViewer()
|
||||
Task { _ = try? await dataService.fetchViewer() }
|
||||
}
|
||||
|
||||
dataService.libraryItemsPublisher(
|
||||
|
||||
Reference in New Issue
Block a user