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.
|
|
// // 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
protocol InboundReceiptInterface: class { func redeem(password: String) }
class InboundReceiptPresenter: ViewModelType, InboundReceiptInterface { var interactor: InboundReceiptInteractorInput? var wireframe: InboundReceiptWireframeInput? weak var view: InboundReceiptViewInterface? struct Input { let viewWillAppear: Driver<Void> let register: Driver<Void> let cancel: Driver<Void> } struct Output { let isError: Driver<Error> let isProgress: Driver<Bool> let model: Driver<TransactionModel> let status: Driver<InboundStatus> } private let disposeBag = DisposeBag() private let progressLinker = PublishSubject<Bool>() private let errorLinker = PublishSubject<Error>() private let model = PublishSubject<TransactionModel>() private let status = PublishSubject<InboundStatus>() 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 } }).disposed(by: disposeBag) return Output( isError: errorLinker.asDriverOnErrorJustComplete(), isProgress: progressLinker.asDriverOnErrorJustComplete(), model: model.asDriverOnErrorJustComplete(), status: status.asDriverOnErrorJustComplete() ) } func redeem(password: String) { self.view?.showLoading() self.interactor?.redeem(password: password) } }
// MARK: InboundReceipt interactor output interface extension InboundReceiptPresenter: InboundReceiptInteractorOutput { func success(message: String) { self.view?.hideLoading() self.view?.show(message: message) } func setModel(with model: TransactionModel) { self.view?.hideLoading() self.model.onNext(model) guard let inboundStatus = model.status?.lowercased() else { return } let type = InboundStatus(rawValue: inboundStatus) ?? .processing status.onNext(type) } func setError(with error: Error) { errorLinker.onNext(error) } }
|