metatext/Shared/View Models/AddIdentityViewModel.swift

34 lines
1.2 KiB
Swift
Raw Normal View History

// Copyright © 2020 Metabolist. All rights reserved.
import Foundation
import Combine
class AddIdentityViewModel: ObservableObject {
@Published var urlFieldText = ""
@Published var alertItem: AlertItem?
@Published private(set) var loading = false
let addedIdentityID: AnyPublisher<UUID, Never>
2020-08-09 05:37:04 +00:00
private let authenticationService: AuthenticationService
private let addedIdentityIDInput = PassthroughSubject<UUID, Never>()
2020-08-03 15:20:51 +00:00
private var cancellables = Set<AnyCancellable>()
2020-08-09 05:37:04 +00:00
init(authenticationService: AuthenticationService) {
self.authenticationService = authenticationService
2020-08-03 15:20:51 +00:00
addedIdentityID = addedIdentityIDInput.eraseToAnyPublisher()
}
func goTapped() {
2020-08-09 05:37:04 +00:00
Just(urlFieldText)
.tryMap { try $0.url() }
.flatMap(authenticationService.authenticate(instanceURL:))
.assignErrorsToAlertItem(to: \.alertItem, on: self)
2020-08-02 07:02:03 +00:00
.receive(on: RunLoop.main)
.handleEvents(
receiveSubscription: { [weak self] _ in self?.loading = true },
receiveCompletion: { [weak self] _ in self?.loading = false })
2020-08-03 15:20:51 +00:00
.sink(receiveValue: addedIdentityIDInput.send)
.store(in: &cancellables)
}
}