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

  1. //
  2. // RechargeHistoryViewController.swift
  3. // GME Remit
  4. //
  5. // Created by InKwon James Kim on 2019/11/04.
  6. //Copyright © 2019 Gobal Money Express Co. Ltd. All rights reserved.
  7. //
  8. import UIKit
  9. import RxSwift
  10. import RxCocoa
  11. class RechargeHistoryViewController: UIViewController {
  12. // MARK: Properties
  13. var presenter: RechargeHistoryPresenter!
  14. private let disposeBag = DisposeBag()
  15. private let refreshControl = UIRefreshControl()
  16. // MARK: Computed Properties
  17. // MARK: IBOutlets
  18. @IBOutlet private weak var searchBar: UISearchBar!
  19. @IBOutlet private weak var calandarButton: UIButton!
  20. @IBOutlet private weak var periodView: UIView!
  21. @IBOutlet private weak var periodViewCloseButton: UIButton!
  22. @IBOutlet private weak var errorLabel: UILabel!
  23. @IBOutlet private weak var fromLabel: UILabel!
  24. @IBOutlet private weak var toLabel: UILabel!
  25. @IBOutlet private weak var tableView: UITableView!
  26. @IBOutlet private weak var waitingInfoLabel: UILabel!
  27. @IBOutlet private weak var rechargedInfoLabel: UILabel!
  28. @IBOutlet private weak var canceledInfoLabel: UILabel!
  29. // MARK: VC's Life cycle
  30. override func viewDidLoad() {
  31. super.viewDidLoad()
  32. setup()
  33. }
  34. override func viewWillAppear(_ animated: Bool) {
  35. super.viewWillAppear(animated)
  36. setupNormalNavigation()
  37. title = "recharge_history_text".localized()
  38. if self.presentingViewController == nil {
  39. self.navigationItem.leftBarButtonItem = nil
  40. }
  41. }
  42. override func viewWillDisappear(_ animated: Bool) {
  43. super.viewWillDisappear(animated)
  44. }
  45. // MARK: IBActions
  46. @IBAction func touchCloseButton(_ sender: UIBarButtonItem) {
  47. dismiss(animated: true)
  48. }
  49. }
  50. // MARK: Other Functions
  51. extension RechargeHistoryViewController {
  52. private func setup() {
  53. setUI()
  54. setBinding()
  55. setUIBinding()
  56. }
  57. private func setUI() {
  58. periodView.isHidden = true
  59. waitingInfoLabel.layer.cornerRadius = 5
  60. rechargedInfoLabel.layer.cornerRadius = 5
  61. canceledInfoLabel.layer.cornerRadius = 5
  62. searchBar.placeholder = "search_text".localized()
  63. waitingInfoLabel.text = "waiting_uppercase_text".localized()
  64. rechargedInfoLabel.text = "success_uppercase_text".localized()
  65. canceledInfoLabel.text = "failure_uppercase_text".localized()
  66. let colorOption = [NSAttributedString.Key.foregroundColor : UIColor.themeWhite]
  67. let title = NSAttributedString(string: "pull to refresh", attributes: colorOption)
  68. tableView.refreshControl = refreshControl
  69. refreshControl.attributedTitle = title
  70. refreshControl.backgroundColor = .themeBlue
  71. refreshControl.tintColor = .themeWhite
  72. }
  73. private func setUIBinding() {
  74. periodViewCloseButton.rx.tap.asDriver()
  75. .map {true}.drive(periodView.rx.isAnimateHidden).disposed(by: disposeBag)
  76. tableView.rx.setDelegate(self).disposed(by: disposeBag)
  77. }
  78. private func setBinding() {
  79. let viewWillAppear = rx.sentMessage(#selector(UIViewController.viewWillAppear(_:)))
  80. .mapToVoid()
  81. .asDriverOnErrorJustComplete()
  82. let input = RechargeHistoryPresenter.Input(
  83. viewWillAppear: viewWillAppear,
  84. searchText: searchBar.rx.text.orEmpty.asDriver(),
  85. calandarTap: calandarButton.rx.tap.asDriverOnErrorJustComplete(),
  86. periodCloseTap: periodViewCloseButton.rx.tap.asDriverOnErrorJustComplete(),
  87. refresh: refreshControl.rx.controlEvent(.valueChanged).asDriverOnErrorJustComplete()
  88. )
  89. let output = presenter.transform(input: input)
  90. output.isError
  91. .drive(
  92. onNext: { self.alert(type: .error, message: $0.localizedDescription) }
  93. ).disposed(by: disposeBag)
  94. output.isProgress
  95. .drive(
  96. onNext: { $0 ? self.showProgressHud() : self.hideProgressHud() }
  97. ).disposed(by: disposeBag)
  98. output.histories
  99. .drive(
  100. tableView.rx.items(cellIdentifier: "RechargeHistoryCell")
  101. ) { (_, element: RechargeHistory, cell: RechargeHistoryCell) in
  102. DispatchQueue.main.async {
  103. cell.setModel(with: element)
  104. }
  105. }.disposed(by: disposeBag)
  106. output.histories.map {$0.count != 0}
  107. .drive(errorLabel.rx.isHidden)
  108. .disposed(by: disposeBag)
  109. output.histories.map {_ in false}.drive(refreshControl.rx.isRefreshing).disposed(by: disposeBag)
  110. output.fromTo.map {$0?.0}.drive(fromLabel.rx.text).disposed(by: disposeBag)
  111. output.fromTo.map {$0?.1}.drive(toLabel.rx.text).disposed(by: disposeBag)
  112. output.fromTo.map {$0 == nil }.drive(periodView.rx.isAnimateHidden).disposed(by: disposeBag)
  113. }
  114. }
  115. extension RechargeHistoryViewController: UITableViewDelegate {
  116. func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
  117. return 150
  118. }
  119. }