create labelsPublisher to fetch existing labels

This commit is contained in:
Satindar Dhillon 2022-03-31 23:03:51 -07:00
parent db11a75107
commit dcc7924531
2 changed files with 59 additions and 10 deletions

View file

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

View file

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