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