// // 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 let agreement: Observable let submit: Observable } struct Output { let isError: Driver let isProgress: Driver let documents: Observable<[AgreePDFDocument]> } private let disposeBag = DisposeBag() private let progressLinker = PublishSubject() private let errorLinker = PublishSubject() 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) } }