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.
155 lines
4.7 KiB
155 lines
4.7 KiB
//
|
|
// RechargeHistoryViewController.swift
|
|
// GME Remit
|
|
//
|
|
// Created by InKwon James Kim on 2019/11/04.
|
|
//Copyright © 2019 Gobal Money Express Co. Ltd. All rights reserved.
|
|
//
|
|
|
|
import UIKit
|
|
import RxSwift
|
|
import RxCocoa
|
|
|
|
class RechargeHistoryViewController: UIViewController {
|
|
|
|
// MARK: Properties
|
|
var presenter: RechargeHistoryPresenter!
|
|
|
|
private let disposeBag = DisposeBag()
|
|
|
|
private let refreshControl = UIRefreshControl()
|
|
|
|
// MARK: Computed Properties
|
|
|
|
// MARK: IBOutlets
|
|
@IBOutlet private weak var searchBar: UISearchBar!
|
|
@IBOutlet private weak var calandarButton: UIButton!
|
|
@IBOutlet private weak var periodView: UIView!
|
|
@IBOutlet private weak var periodViewCloseButton: UIButton!
|
|
@IBOutlet private weak var errorLabel: UILabel!
|
|
|
|
@IBOutlet private weak var fromLabel: UILabel!
|
|
@IBOutlet private weak var toLabel: UILabel!
|
|
|
|
@IBOutlet private weak var tableView: UITableView!
|
|
|
|
@IBOutlet private weak var waitingInfoLabel: UILabel!
|
|
@IBOutlet private weak var rechargedInfoLabel: UILabel!
|
|
@IBOutlet private weak var canceledInfoLabel: UILabel!
|
|
|
|
// MARK: VC's Life cycle
|
|
override func viewDidLoad() {
|
|
super.viewDidLoad()
|
|
setup()
|
|
}
|
|
|
|
override func viewWillAppear(_ animated: Bool) {
|
|
super.viewWillAppear(animated)
|
|
setupNormalNavigation()
|
|
|
|
title = "recharge_history_text".localized()
|
|
|
|
if self.presentingViewController == nil {
|
|
self.navigationItem.leftBarButtonItem = nil
|
|
}
|
|
|
|
}
|
|
|
|
override func viewWillDisappear(_ animated: Bool) {
|
|
super.viewWillDisappear(animated)
|
|
}
|
|
|
|
// MARK: IBActions
|
|
|
|
@IBAction func touchCloseButton(_ sender: UIBarButtonItem) {
|
|
dismiss(animated: true)
|
|
}
|
|
}
|
|
|
|
// MARK: Other Functions
|
|
extension RechargeHistoryViewController {
|
|
|
|
private func setup() {
|
|
setUI()
|
|
setBinding()
|
|
setUIBinding()
|
|
}
|
|
|
|
private func setUI() {
|
|
periodView.isHidden = true
|
|
|
|
waitingInfoLabel.layer.cornerRadius = 5
|
|
rechargedInfoLabel.layer.cornerRadius = 5
|
|
canceledInfoLabel.layer.cornerRadius = 5
|
|
|
|
searchBar.placeholder = "search_text".localized()
|
|
waitingInfoLabel.text = "waiting_uppercase_text".localized()
|
|
rechargedInfoLabel.text = "success_uppercase_text".localized()
|
|
canceledInfoLabel.text = "failure_uppercase_text".localized()
|
|
|
|
let colorOption = [NSAttributedString.Key.foregroundColor : UIColor.themeWhite]
|
|
let title = NSAttributedString(string: "pull to refresh", attributes: colorOption)
|
|
tableView.refreshControl = refreshControl
|
|
refreshControl.attributedTitle = title
|
|
refreshControl.backgroundColor = .themeBlue
|
|
refreshControl.tintColor = .themeWhite
|
|
}
|
|
|
|
private func setUIBinding() {
|
|
periodViewCloseButton.rx.tap.asDriver()
|
|
.map {true}.drive(periodView.rx.isAnimateHidden).disposed(by: disposeBag)
|
|
|
|
tableView.rx.setDelegate(self).disposed(by: disposeBag)
|
|
}
|
|
|
|
private func setBinding() {
|
|
let viewWillAppear = rx.sentMessage(#selector(UIViewController.viewWillAppear(_:)))
|
|
.mapToVoid()
|
|
.asDriverOnErrorJustComplete()
|
|
|
|
let input = RechargeHistoryPresenter.Input(
|
|
viewWillAppear: viewWillAppear,
|
|
searchText: searchBar.rx.text.orEmpty.asDriver(),
|
|
calandarTap: calandarButton.rx.tap.asDriverOnErrorJustComplete(),
|
|
periodCloseTap: periodViewCloseButton.rx.tap.asDriverOnErrorJustComplete(),
|
|
refresh: refreshControl.rx.controlEvent(.valueChanged).asDriverOnErrorJustComplete()
|
|
)
|
|
|
|
let output = presenter.transform(input: input)
|
|
|
|
output.isError
|
|
.drive(
|
|
onNext: { self.alert(type: .error, message: $0.localizedDescription) }
|
|
).disposed(by: disposeBag)
|
|
|
|
output.isProgress
|
|
.drive(
|
|
onNext: { $0 ? self.showProgressHud() : self.hideProgressHud() }
|
|
).disposed(by: disposeBag)
|
|
|
|
output.histories
|
|
.drive(
|
|
tableView.rx.items(cellIdentifier: "RechargeHistoryCell")
|
|
) { (_, element: RechargeHistory, cell: RechargeHistoryCell) in
|
|
DispatchQueue.main.async {
|
|
cell.setModel(with: element)
|
|
}
|
|
}.disposed(by: disposeBag)
|
|
|
|
output.histories.map {$0.count != 0}
|
|
.drive(errorLabel.rx.isHidden)
|
|
.disposed(by: disposeBag)
|
|
|
|
output.histories.map {_ in false}.drive(refreshControl.rx.isRefreshing).disposed(by: disposeBag)
|
|
|
|
output.fromTo.map {$0?.0}.drive(fromLabel.rx.text).disposed(by: disposeBag)
|
|
output.fromTo.map {$0?.1}.drive(toLabel.rx.text).disposed(by: disposeBag)
|
|
output.fromTo.map {$0 == nil }.drive(periodView.rx.isAnimateHidden).disposed(by: disposeBag)
|
|
}
|
|
}
|
|
|
|
extension RechargeHistoryViewController: UITableViewDelegate {
|
|
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
|
|
return 150
|
|
}
|
|
}
|