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.
 
 
 
 

73 lines
2.0 KiB

//
// 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)
}
}