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.
96 lines
2.9 KiB
96 lines
2.9 KiB
//
|
|
// RechargeHistoryPresenter.swift
|
|
// GME Remit
|
|
//
|
|
// Created by InKwon James Kim on 2019/11/04.
|
|
//Copyright © 2019 Gobal Money Express Co. Ltd. All rights reserved.
|
|
//
|
|
|
|
import RxSwift
|
|
import RxCocoa
|
|
|
|
class RechargeHistoryPresenter: ViewModelType {
|
|
var interactor: RechargeHistoryInteractorInput?
|
|
var wireframe: RechargeHistoryWireframeInput?
|
|
|
|
struct Input {
|
|
let viewWillAppear: Driver<Void>
|
|
let searchText: Driver<String>
|
|
let calandarTap: Driver<Void>
|
|
let periodCloseTap: Driver<Void>
|
|
let refresh: Driver<Void>
|
|
}
|
|
|
|
struct Output {
|
|
let isError: Driver<Error>
|
|
let isProgress: Driver<Bool>
|
|
let histories: Driver<[RechargeHistory]>
|
|
let fromTo: Driver<(String, String)?>
|
|
}
|
|
|
|
private let disposeBag = DisposeBag()
|
|
|
|
private let progressLinker = PublishSubject<Bool>()
|
|
private let errorLinker = PublishSubject<Error>()
|
|
|
|
private let histories = PublishSubject<[RechargeHistory]>()
|
|
|
|
func transform(input: Input) -> Output {
|
|
input.viewWillAppear
|
|
.drive(onNext: {[weak self] in
|
|
self?.progressLinker.onNext(true)
|
|
self?.interactor?.fetchHistory(from: "", to: "")
|
|
}).disposed(by: disposeBag)
|
|
|
|
input.periodCloseTap
|
|
.drive(onNext: {[weak self] in
|
|
self?.progressLinker.onNext(true)
|
|
self?.interactor?.fetchHistory(from: "", to: "")
|
|
}).disposed(by: disposeBag)
|
|
|
|
input.searchText.distinctUntilChanged().drive(onNext: { [weak self] in
|
|
self?.progressLinker.onNext(true)
|
|
self?.interactor?.fetchFilteredHistory(search: $0)
|
|
}).disposed(by: disposeBag)
|
|
|
|
let fromTo = BehaviorSubject<(String, String)?>(value: nil)
|
|
input.calandarTap.drive(onNext: { [weak self] in
|
|
self?.wireframe?.view.presentDatePicker { (from, to) in
|
|
guard
|
|
let startDate = from,
|
|
let endDate = to else { return }
|
|
|
|
self?.progressLinker.onNext(true)
|
|
self?.interactor?.fetchHistory(from: startDate, to: endDate)
|
|
|
|
fromTo.onNext((startDate, endDate))
|
|
}
|
|
}).disposed(by: disposeBag)
|
|
|
|
input.refresh.withLatestFrom(fromTo.asDriverOnErrorJustComplete()) {$1}
|
|
.drive(onNext: {[weak self] in
|
|
self?.progressLinker.onNext(true)
|
|
self?.interactor?.fetchHistory(from: $0?.0 ?? "", to: $0?.1 ?? "")
|
|
}).disposed(by: disposeBag)
|
|
|
|
return Output(
|
|
isError: errorLinker.asDriverOnErrorJustComplete(),
|
|
isProgress: progressLinker.asDriverOnErrorJustComplete(),
|
|
histories: histories.asDriverOnErrorJustComplete(),
|
|
fromTo: fromTo.asDriverOnErrorJustComplete()
|
|
)
|
|
}
|
|
}
|
|
|
|
// MARK: RechargeHistory interactor output interface
|
|
extension RechargeHistoryPresenter: RechargeHistoryInteractorOutput {
|
|
func setModel(with model: [RechargeHistory]) {
|
|
progressLinker.onNext(false)
|
|
histories.onNext(model)
|
|
}
|
|
|
|
func setError(with error: Error) {
|
|
progressLinker.onNext(false)
|
|
errorLinker.onNext(error)
|
|
}
|
|
}
|