Refactoring
This commit is contained in:
parent
59b5f64720
commit
1e877172b0
|
@ -24,7 +24,43 @@ public final class AddIdentityViewModel: ObservableObject {
|
||||||
init(allIdentitiesService: AllIdentitiesService, instanceURLService: InstanceURLService) {
|
init(allIdentitiesService: AllIdentitiesService, instanceURLService: InstanceURLService) {
|
||||||
self.allIdentitiesService = allIdentitiesService
|
self.allIdentitiesService = allIdentitiesService
|
||||||
self.instanceURLService = instanceURLService
|
self.instanceURLService = instanceURLService
|
||||||
setupURLObservation()
|
|
||||||
|
let url = $urlFieldText
|
||||||
|
.debounce(for: 0.5, scheduler: DispatchQueue.global())
|
||||||
|
.removeDuplicates()
|
||||||
|
.flatMap {
|
||||||
|
instanceURLService.url(text: $0).publisher
|
||||||
|
.map { $0 as URL? }
|
||||||
|
.replaceError(with: nil)
|
||||||
|
}
|
||||||
|
.share()
|
||||||
|
|
||||||
|
url.receive(on: DispatchQueue.main).assign(to: &$url)
|
||||||
|
|
||||||
|
url.flatMap { url -> AnyPublisher<Instance?, Never> in
|
||||||
|
guard let url = url else {
|
||||||
|
return Just(nil).eraseToAnyPublisher()
|
||||||
|
}
|
||||||
|
|
||||||
|
return instanceURLService.instance(url: url)
|
||||||
|
.map { $0 as Instance? }
|
||||||
|
.replaceError(with: nil)
|
||||||
|
.eraseToAnyPublisher()
|
||||||
|
}
|
||||||
|
.receive(on: DispatchQueue.main)
|
||||||
|
.assign(to: &$instance)
|
||||||
|
|
||||||
|
url.flatMap { url -> AnyPublisher<Bool, Never> in
|
||||||
|
guard let url = url else {
|
||||||
|
return Just(false).eraseToAnyPublisher()
|
||||||
|
}
|
||||||
|
|
||||||
|
return instanceURLService.isPublicTimelineAvailable(url: url)
|
||||||
|
.replaceError(with: false)
|
||||||
|
.eraseToAnyPublisher()
|
||||||
|
}
|
||||||
|
.receive(on: DispatchQueue.main)
|
||||||
|
.assign(to: &$isPublicTimelineAvailable)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -49,50 +85,6 @@ public extension AddIdentityViewModel {
|
||||||
}
|
}
|
||||||
|
|
||||||
private extension AddIdentityViewModel {
|
private extension AddIdentityViewModel {
|
||||||
func setupURLObservation() {
|
|
||||||
let url = $urlFieldText
|
|
||||||
.debounce(for: 0.5, scheduler: DispatchQueue.global())
|
|
||||||
.removeDuplicates()
|
|
||||||
.flatMap { [weak self] text -> AnyPublisher<URL?, Never> in
|
|
||||||
guard let self = self else {
|
|
||||||
return Just(nil).eraseToAnyPublisher()
|
|
||||||
}
|
|
||||||
|
|
||||||
return self.instanceURLService.url(text: text).publisher
|
|
||||||
.map { $0 as URL? }
|
|
||||||
.replaceError(with: nil)
|
|
||||||
.eraseToAnyPublisher()
|
|
||||||
}
|
|
||||||
.share()
|
|
||||||
|
|
||||||
url.receive(on: DispatchQueue.main).assign(to: &$url)
|
|
||||||
|
|
||||||
url.flatMap { [weak self] url -> AnyPublisher<Instance?, Never> in
|
|
||||||
guard let self = self, let url = url else {
|
|
||||||
return Just(nil).eraseToAnyPublisher()
|
|
||||||
}
|
|
||||||
|
|
||||||
return self.instanceURLService.instance(url: url)
|
|
||||||
.map { $0 as Instance? }
|
|
||||||
.replaceError(with: nil)
|
|
||||||
.eraseToAnyPublisher()
|
|
||||||
}
|
|
||||||
.receive(on: DispatchQueue.main)
|
|
||||||
.assign(to: &$instance)
|
|
||||||
|
|
||||||
url.flatMap { [weak self] url -> AnyPublisher<Bool, Never> in
|
|
||||||
guard let self = self, let url = url else {
|
|
||||||
return Just(false).eraseToAnyPublisher()
|
|
||||||
}
|
|
||||||
|
|
||||||
return self.instanceURLService.isPublicTimelineAvailable(url: url)
|
|
||||||
.replaceError(with: false)
|
|
||||||
.eraseToAnyPublisher()
|
|
||||||
}
|
|
||||||
.receive(on: DispatchQueue.main)
|
|
||||||
.assign(to: &$isPublicTimelineAvailable)
|
|
||||||
}
|
|
||||||
|
|
||||||
func addIdentity(kind: AllIdentitiesService.IdentityCreation) {
|
func addIdentity(kind: AllIdentitiesService.IdentityCreation) {
|
||||||
instanceURLService.url(text: urlFieldText).publisher
|
instanceURLService.url(text: urlFieldText).publisher
|
||||||
.map { ($0, kind) }
|
.map { ($0, kind) }
|
||||||
|
|
Loading…
Reference in New Issue