You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
// // ManageAgreementPresenter.swift // GME Remit // // Created by InKwon James Kim on 2019/12/23. //Copyright © 2019 Gobal Money Express Co. Ltd. All rights reserved. //
import RxSwift import RxCocoa
class ManageAgreementPresenter: ViewModelType { var interactor: ManageAgreementInteractorInput? var wireframe: ManageAgreementWireframeInput? struct Input { let viewWillAppear: Observable<Void> let agreement: Observable<Bool> let submit: Observable<Void> } struct Output { let isError: Driver<Error> let isProgress: Driver<Bool> let documents: Observable<[AgreePDFDocument]> }
private let disposeBag = DisposeBag() private let progressLinker = PublishSubject<Bool>() private let errorLinker = PublishSubject<Error>() private let documents = PublishSubject<[AgreePDFDocument]>()
func transform(input: Input) -> Output { input.viewWillAppear.subscribe( onNext: {[weak self] in self?.progressLinker.onNext(true) self?.interactor?.fetchDocuments() }, onError: {[weak self] in self?.errorLinker.onNext($0)} ).disposed(by: disposeBag) input.submit.withLatestFrom(input.agreement) {$1} .asObservable().subscribe(onNext: {[weak self] in self?.progressLinker.onNext(true) self?.interactor?.agreement($0) }).disposed(by: disposeBag) return Output( isError: errorLinker.asDriverOnErrorJustComplete(), isProgress: progressLinker.asDriverOnErrorJustComplete(), documents: documents.asObservable() ) } }
// MARK: ManageAgreement interactor output interface extension ManageAgreementPresenter: ManageAgreementInteractorOutput { func setDocuments(with documents: [AgreePDFDocument]) { progressLinker.onNext(false) self.documents.onNext(documents) } func resultAgreement() { progressLinker.onNext(false) wireframe?.goNewRegistration() } func setError(with error: Error) { progressLinker.onNext(false) errorLinker.onNext(error) } }
|