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

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