mirror of
https://github.com/omnivore-app/omnivore.git
synced 2026-03-11 08:54:26 +00:00
create labelsPublisher to fetch existing labels
This commit is contained in:
parent
db11a75107
commit
dcc7924531
2 changed files with 59 additions and 10 deletions
|
|
@ -11,18 +11,18 @@ final class LabelsViewModel: ObservableObject {
|
|||
|
||||
var subscriptions = Set<AnyCancellable>()
|
||||
|
||||
func loadLabels(dataService _: DataService) {
|
||||
func loadLabels(dataService: DataService) {
|
||||
isLoading = true
|
||||
|
||||
// dataService.newsletterEmailsPublisher().sink(
|
||||
// receiveCompletion: { _ in },
|
||||
// receiveValue: { [weak self] result in
|
||||
// self?.isLoading = false
|
||||
// self?.emails = result
|
||||
// self?.hasLoadedInitialLabels = true
|
||||
// }
|
||||
// )
|
||||
// .store(in: &subscriptions)
|
||||
dataService.labelsPublisher().sink(
|
||||
receiveCompletion: { _ in },
|
||||
receiveValue: { [weak self] result in
|
||||
self?.isLoading = false
|
||||
self?.labels = result
|
||||
self?.hasLoadedInitialLabels = true
|
||||
}
|
||||
)
|
||||
.store(in: &subscriptions)
|
||||
}
|
||||
|
||||
func createLabel(dataService _: DataService) {
|
||||
|
|
|
|||
|
|
@ -0,0 +1,49 @@
|
|||
import Combine
|
||||
import Foundation
|
||||
import Models
|
||||
import SwiftGraphQL
|
||||
|
||||
public extension DataService {
|
||||
func labelsPublisher() -> AnyPublisher<[FeedItemLabel], ServerError> {
|
||||
enum QueryResult {
|
||||
case success(result: [FeedItemLabel])
|
||||
case error(error: String)
|
||||
}
|
||||
|
||||
let selection = Selection<QueryResult, Unions.LabelsResult> {
|
||||
try $0.on(labelsSuccess: .init {
|
||||
QueryResult.success(result: try $0.labels(selection: feedItemLabelSelection.list))
|
||||
},
|
||||
labelsError: .init {
|
||||
QueryResult.error(error: try $0.errorCodes().description)
|
||||
})
|
||||
}
|
||||
|
||||
let query = Selection.Query {
|
||||
try $0.labels(selection: selection)
|
||||
}
|
||||
|
||||
let path = appEnvironment.graphqlPath
|
||||
let headers = networker.defaultHeaders
|
||||
|
||||
return Deferred {
|
||||
Future { promise in
|
||||
send(query, to: path, headers: headers) { result in
|
||||
switch result {
|
||||
case let .success(payload):
|
||||
switch payload.data {
|
||||
case let .success(result: result):
|
||||
promise(.success(result))
|
||||
case .error:
|
||||
promise(.failure(.unknown))
|
||||
}
|
||||
case .failure:
|
||||
promise(.failure(.unknown))
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
.receive(on: DispatchQueue.main)
|
||||
.eraseToAnyPublisher()
|
||||
}
|
||||
}
|
||||
Loading…
Reference in a new issue