// // InternationalTopupPresenter.swift // GME Remit // // Created by InKwon James Kim on 2019/10/30. //Copyright © 2019 Gobal Money Express Co. Ltd. All rights reserved. // import RxSwift import RxCocoa class InternationalTopupPresenter: ViewModelType { var interactor: InternationalTopupInteractorInput? var wireframe: InternationalTopupWireframeInput? struct Input { let viewWillAppear: Driver let walletBalance: Driver let selectCellPhoneNumber: Driver let selectedCallingCard: Driver let selectedAmount: Driver } struct Output { let isError: Driver let isProgress: Driver let isHiddenStep2ContainerView: Driver let isEnableNext: Driver let model: Driver } private let disposeBag = DisposeBag() private let progressLinker = PublishSubject() private let errorLinker = PublishSubject() private let model = PublishSubject() func transform(input: Input) -> Output { let isHiddenStep2ContainerView = PublishSubject() Driver.combineLatest(input.viewWillAppear, input.selectCellPhoneNumber) .drive( onNext: {[weak self] (_, cellPhone) in self?.interactor?.fetchCardList(type: "2", mobile: cellPhone) } ).disposed(by: disposeBag) input.selectedCallingCard.drive( onNext: { $0 != nil ? isHiddenStep2ContainerView.onNext(false) : isHiddenStep2ContainerView.onNext(true) } ).disposed(by: disposeBag) let merged = Driver.combineLatest( input.walletBalance.map {Int($0) ?? 0}, input.selectCellPhoneNumber, input.selectedCallingCard, input.selectedAmount ) let isEnableNext = merged.map { (balance, _, cardModel, amountModel) -> Bool in guard cardModel != nil, let price = amountModel?.price, let amount = Int(price) else { return false } return balance - amount > 0 } // model // .map {models in // models.countryPriceCode?.filter{ // $0.countryCode // } // } return Output( isError: errorLinker.asDriverOnErrorJustComplete(), isProgress: progressLinker.asDriverOnErrorJustComplete(), isHiddenStep2ContainerView: isHiddenStep2ContainerView.asDriverOnErrorJustComplete(), isEnableNext: isEnableNext, model: model.asDriverOnErrorJustComplete() ) } } // MARK: InternationalTopup interactor output interface extension InternationalTopupPresenter: InternationalTopupInteractorOutput { func setModel(with model: CardList) { self.model.onNext(model) } func setError(with error: Error) { } }