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.

183 lines
5.0 KiB

5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
  1. //
  2. // WalletStatementViewController.swift
  3. // GMERemittance
  4. //
  5. // Created by gme_2 on 03/10/2018.
  6. //Copyright © 2018 Gobal Money Express Co. Ltd. All rights reserved.
  7. //
  8. import UIKit
  9. enum WalletStatementType {}
  10. class WalletStatementViewController: UIViewController {
  11. struct StringConstants {
  12. let navigationTitle = "wallet_statement_title_text".localized()
  13. let emptyMessage = "no_statement_found_text".localized()
  14. }
  15. // MARK: IBOutlets
  16. @IBOutlet weak var tableView: UITableView!
  17. @IBOutlet weak var dateRangeLabelHeightConstraint: NSLayoutConstraint!
  18. @IBOutlet weak var fromDateLabel: UILabel!
  19. @IBOutlet weak var toDateLabel: UILabel!
  20. @IBOutlet weak var emptyLabel: UILabel!
  21. // MARK: Properties
  22. var presenter: WalletStatementModuleInterface?
  23. var from: String?
  24. var to: String?
  25. var statements: [WalletStatement] = [] {
  26. didSet {
  27. self.emptyLabel.isHidden = !statements.isEmpty
  28. self.tableView.reloadData()
  29. guard let fromDate = from, let toDate = to else {
  30. self.dateRangeLabelHeightConstraint.constant = 0
  31. return
  32. }
  33. self.fromDateLabel.text = self.getHUmanReadableDate(date: fromDate)
  34. self.toDateLabel.text = self.getHUmanReadableDate(date: toDate)
  35. UIView.animate(withDuration: 0.33, animations: {
  36. self.dateRangeLabelHeightConstraint.constant = Constant.heightOfDateRangeLabel
  37. })
  38. }
  39. }
  40. struct Constant {
  41. static let heightOfDateRangeLabel: CGFloat = 35
  42. }
  43. // MARK: VC's Life cycle
  44. override func viewDidLoad() {
  45. super.viewDidLoad()
  46. self.setupNormalNavigation()
  47. self.setupDateFilterButton()
  48. self.setup()
  49. }
  50. override func viewWillAppear(_ animated: Bool) {
  51. super.viewWillAppear(animated)
  52. self.navigationItem.title = StringConstants().navigationTitle
  53. }
  54. override func viewWillDisappear(_ animated: Bool) {
  55. super.viewWillAppear(animated)
  56. self.navigationItem.title = ""
  57. }
  58. // MARK: IBActions
  59. @objc func openSearchFilter() {
  60. // open search filter
  61. guard let viewController = UIStoryboard(name: "TransactionHistoryDatePicker", bundle: nil)
  62. .instantiateViewController(
  63. withIdentifier: "DatePickerViewController"
  64. ) as? DatePickerViewController else {
  65. return
  66. }
  67. viewController.completion = self.selectedDate
  68. self.present(viewController, animated: true, completion: nil)
  69. }
  70. private func selectedDate(from: String?, to: String?) {
  71. self.from = from
  72. self.to = to
  73. guard let fromDate = from, let toDate = to else {return}
  74. self.presenter?.fetchWalletSatement(fromDate: fromDate, toDate: toDate)
  75. }
  76. // MARK: Other Functions
  77. private func setup() {
  78. // all setup should be done here
  79. setupDelegates()
  80. setupDateFilterButton()
  81. configureViews()
  82. configureText()
  83. self.presenter?.viewIsReady()
  84. }
  85. private func configureText() {
  86. self.emptyLabel.text = StringConstants().emptyMessage
  87. }
  88. private func configureViews() {
  89. self.dateRangeLabelHeightConstraint.constant = 0
  90. // self.emptyLabel.textColor = AppConstants.themeBlueColor
  91. }
  92. private func setupDateFilterButton() {
  93. let filterItem = UIBarButtonItem(
  94. image: #imageLiteral(resourceName: "ic_calender"),
  95. style: UIBarButtonItem.Style.plain,
  96. target: self,
  97. action: #selector(self.openSearchFilter)
  98. )
  99. self.navigationItem.rightBarButtonItem = filterItem
  100. }
  101. private func getHUmanReadableDate(date: String?) -> String? {
  102. if let date = DateFormatter.toDate(dateString: date ?? "", format: AppConstants.dateFormat) {
  103. let dateString = DateFormatter.toString(date: date, format: AppConstants.humanReadableDateFormat)
  104. return dateString
  105. }
  106. return nil
  107. }
  108. private func setupDelegates() {
  109. self.tableView.delegate = self
  110. self.tableView.dataSource = self
  111. }
  112. }
  113. // MARK: WalletStatementViewInterface
  114. extension WalletStatementViewController: WalletStatementViewInterface {
  115. func showLoading() {
  116. self.showProgressHud()
  117. }
  118. func hideLoading() {
  119. self.hideProgressHud()
  120. }
  121. func show(error: String) {
  122. self.alert(type: .error, message: error)
  123. }
  124. func show(models: [WalletStatement]) {
  125. self.statements = models
  126. }
  127. }
  128. // MARK: TableViewDelegate
  129. extension WalletStatementViewController: UITableViewDelegate {
  130. func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
  131. // self.presenter?.showDetailOf(index: indexPath.row)
  132. }
  133. }
  134. // MARK: TableViewDatasource
  135. extension WalletStatementViewController: UITableViewDataSource {
  136. func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
  137. return statements.count
  138. }
  139. func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
  140. guard let cell = tableView.dequeueReusableCell(
  141. withIdentifier: "WalletStatementTableViewCell"
  142. ) as? WalletStatementTableViewCell else {
  143. return UITableViewCell()
  144. }
  145. cell.model = self.statements.elementAt(index: indexPath.row)
  146. cell.setup()
  147. return cell
  148. }
  149. }