// // InboundReceiptPresenter.swift // GME Remit // // Created by InKwon James Kim on 2019/11/14. //Copyright © 2019 Gobal Money Express Co. Ltd. All rights reserved. // import RxSwift import RxCocoa class InboundReceiptPresenter: ViewModelType { var interactor: InboundReceiptInteractorInput? var wireframe: InboundReceiptWireframeInput? struct Input { let viewWillAppear: Driver let register: Driver let cancel: Driver } struct Output { let isError: Driver let isProgress: Driver let model: Driver let status: Driver } private let disposeBag = DisposeBag() private let progressLinker = PublishSubject() private let errorLinker = PublishSubject() private let model = PublishSubject() private let status = PublishSubject() func transform(input: Input) -> Output { input.viewWillAppear.drive(onNext: {[weak self] in self?.interactor?.fetch() }).disposed(by: disposeBag) input.register.withLatestFrom(model.asDriverOnErrorJustComplete()) {$1} .drive(onNext: {[weak self] in guard let `self` = self else { return } self.wireframe?.openAddInboundAccount(with: $0, delegate: self) }).disposed(by: disposeBag) return Output( isError: errorLinker.asDriverOnErrorJustComplete(), isProgress: progressLinker.asDriverOnErrorJustComplete(), model: model.asDriverOnErrorJustComplete(), status: status.asDriverOnErrorJustComplete() ) } } // MARK: InboundReceipt interactor output interface extension InboundReceiptPresenter: InboundReceiptInteractorOutput { func setModel(with model: TransactionModel) { self.model.onNext(model) guard let inboundStatus = model.inboundStatus?.lowercased() else { return } let type = InboundStatus(rawValue: inboundStatus) ?? .processing status.onNext(type) } func setError(with error: Error) { errorLinker.onNext(error) } } // MARK: InboundPennyTestSubmitDelegate extension InboundReceiptPresenter: InboundPennyTestSubmitDelegate { func didSuccess(_ viewController: UIViewController) { wireframe?.pop() } func didCancel(_ viewController: UIViewController) { // if canceled penny test verification. } }