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.
 
 
 
 

85 lines
2.3 KiB

//
// 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
class InboundReceiptPresenter: ViewModelType {
var interactor: InboundReceiptInteractorInput?
var wireframe: InboundReceiptWireframeInput?
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 }
self.wireframe?.openAddInboundAccount(with: $0, delegate: self)
}).disposed(by: disposeBag)
return Output(
isError: errorLinker.asDriverOnErrorJustComplete(),
isProgress: progressLinker.asDriverOnErrorJustComplete(),
model: model.asDriverOnErrorJustComplete(),
status: status.asDriverOnErrorJustComplete()
)
}
}
// MARK: InboundReceipt interactor output interface
extension InboundReceiptPresenter: InboundReceiptInteractorOutput {
func setModel(with model: TransactionModel) {
self.model.onNext(model)
guard
let inboundStatus = model.inboundStatus?.lowercased() else {
return
}
let type = InboundStatus(rawValue: inboundStatus) ?? .processing
status.onNext(type)
}
func setError(with error: Error) {
errorLinker.onNext(error)
}
}
// MARK: InboundPennyTestSubmitDelegate
extension InboundReceiptPresenter: InboundPennyTestSubmitDelegate {
func didSuccess(_ viewController: UIViewController) {
wireframe?.pop()
}
func didCancel(_ viewController: UIViewController) {
// if canceled penny test verification.
}
}