diff --git a/apple/OmnivoreKit/Sources/App/Views/Labels/LabelsViewModel.swift b/apple/OmnivoreKit/Sources/App/Views/Labels/LabelsViewModel.swift index 3dc74d69d..3ee32d76c 100644 --- a/apple/OmnivoreKit/Sources/App/Views/Labels/LabelsViewModel.swift +++ b/apple/OmnivoreKit/Sources/App/Views/Labels/LabelsViewModel.swift @@ -43,8 +43,24 @@ import Views try? fetchRequest.execute() } - labels = fetchedLabels ?? [] - unselectedLabels = fetchedLabels ?? [] + if fetchedLabels?.count == 0 { + await fetchLabelsFromNetwork(dataService: dataService) + } else { + labels = fetchedLabels ?? [] + unselectedLabels = fetchedLabels ?? [] + } + } + + func fetchLabelsFromNetwork(dataService: DataService) async { + let labelIDs = try? await dataService.labels() + guard let labelIDs = labelIDs else { return } + + let fetchedLabels = await dataService.viewContext.perform { + labelIDs.compactMap { dataService.viewContext.object(with: $0) as? LinkedItemLabel } + } + + labels = fetchedLabels + unselectedLabels = fetchedLabels } func createLabel(dataService: DataService, name: String, color: Color, description: String?) { diff --git a/apple/OmnivoreKit/Sources/Services/InternalModels/InternalLinkedItem.swift b/apple/OmnivoreKit/Sources/Services/InternalModels/InternalLinkedItem.swift index 97ccfa07a..f39daf4b6 100644 --- a/apple/OmnivoreKit/Sources/Services/InternalModels/InternalLinkedItem.swift +++ b/apple/OmnivoreKit/Sources/Services/InternalModels/InternalLinkedItem.swift @@ -65,7 +65,7 @@ struct InternalLinkedItem { if let existingLabels = linkedItem.labels { linkedItem.removeFromLabels(existingLabels) } - + for label in labels { linkedItem.addToLabels(label.asManagedObject(inContext: context)) }