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