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.
|
|
// // 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<Void> let walletBalance: Driver<String> let selectCellPhoneNumber: Driver<String> let selectedCallingCard: Driver<MainCardInformation?> let selectedAmount: Driver<PriceModel?> } struct Output { let isError: Driver<Error> let isProgress: Driver<Bool> let isHiddenStep2ContainerView: Driver<Bool> let isEnableNext: Driver<Bool> let model: Driver<CardList> }
private let disposeBag = DisposeBag() private let progressLinker = PublishSubject<Bool>() private let errorLinker = PublishSubject<Error>() private let model = PublishSubject<CardList>() func transform(input: Input) -> Output { let isHiddenStep2ContainerView = PublishSubject<Bool>() 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) { } }
|