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
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.
|
|
}
|
|
}
|