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.
 
 
 
 

98 lines
2.7 KiB

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