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.

179 lines
4.5 KiB

  1. //
  2. // SelectPaymentViewController.swift
  3. // GME Remit
  4. //
  5. // Created by InKwon Devik Kim on 30/04/2019.
  6. //Copyright © 2019 Gobal Money Express Co. Ltd. All rights reserved.
  7. //
  8. import UIKit
  9. import PanModal
  10. protocol SelectPaymentDelegate: class {
  11. func selectPayment(_ viewController: SelectPaymentViewController, selectedAccount: Account)
  12. func selectPayment(_ viewController: SelectPaymentViewController, error: Error)
  13. }
  14. class SelectPaymentViewController: UIViewController {
  15. // MARK: Properties
  16. var presenter: SelectPaymentModuleInterface?
  17. weak var delegate: SelectPaymentDelegate?
  18. private var accounts: [Account]? {
  19. didSet {
  20. self.wallet = self.accounts?.filter {$0.type == "wallet"}.first
  21. self.autoDebits = self.accounts?.filter {$0.type == "autodebit"}
  22. self.tableView.reloadData()
  23. }
  24. }
  25. private var wallet: Account?
  26. private var autoDebits: [Account]?
  27. private enum Section: Int {
  28. case wallet = 0
  29. case autoDebit
  30. }
  31. private struct StringConstants {
  32. let closeText = "penny_test_close_text".localized()
  33. }
  34. // MARK: IBOutlets
  35. @IBOutlet weak var tableView: UITableView!
  36. // MARK: VC's Life cycle
  37. override func viewDidLoad() {
  38. super.viewDidLoad()
  39. self.setup()
  40. self.setLargeTitle()
  41. }
  42. override func viewWillAppear(_ animated: Bool) {
  43. super.viewWillAppear(animated)
  44. self.title = "Select Payment"
  45. }
  46. override func viewWillDisappear(_ animated: Bool) {
  47. super.viewWillDisappear(animated)
  48. self.title = ""
  49. }
  50. // MARK: IBActions
  51. // MARK: Other Functions
  52. private func setup() {
  53. // all setup should be done here
  54. self.tableView.delegate = self
  55. self.tableView.dataSource = self
  56. self.presenter?.viewIsReady()
  57. }
  58. }
  59. // MARK: SelectPaymentViewInterface
  60. extension SelectPaymentViewController: SelectPaymentViewInterface {
  61. func setAccountModels(with models: [Account]?) {
  62. self.accounts = models
  63. }
  64. }
  65. extension SelectPaymentViewController: UITableViewDataSource {
  66. func numberOfSections(in tableView: UITableView) -> Int {
  67. return 2
  68. }
  69. func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
  70. guard let sectionType = Section(rawValue: section) else {return 0}
  71. switch sectionType {
  72. case .wallet:
  73. return self.wallet != nil ? 1 : 0
  74. case .autoDebit:
  75. return self.autoDebits?.count ?? 0
  76. }
  77. }
  78. func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
  79. guard let cell = tableView.dequeueReusableCell(withIdentifier: "PaymentCell") as? PaymentCell else {
  80. return UITableViewCell()
  81. }
  82. guard let sectionType = Section(rawValue: indexPath.section) else {return UITableViewCell()}
  83. switch sectionType {
  84. case .wallet:
  85. cell.setModel(with: self.wallet)
  86. return cell
  87. case .autoDebit:
  88. cell.setModel(with: self.autoDebits?[indexPath.row])
  89. return cell
  90. }
  91. }
  92. }
  93. extension SelectPaymentViewController: UITableViewDelegate {
  94. func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
  95. guard let sectionType = Section(rawValue: section) else {return ""}
  96. switch sectionType {
  97. case .wallet: return "GME WALLET"
  98. case .autoDebit: return "AUTO DEBIT"
  99. }
  100. }
  101. func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
  102. return 70.0
  103. }
  104. func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
  105. guard let sectionType = Section(rawValue: indexPath.section) else {
  106. return
  107. }
  108. let account: Account?
  109. switch sectionType {
  110. case .wallet:
  111. account = self.wallet
  112. case .autoDebit:
  113. account = self.autoDebits?[indexPath.row]
  114. }
  115. guard let selectedAccount = account else {
  116. let error = NSError(
  117. domain: "Error",
  118. code: 0,
  119. userInfo: [NSLocalizedDescriptionKey : "Raised something error"]
  120. )
  121. self.delegate?.selectPayment(self, error: error)
  122. return
  123. }
  124. self.delegate?.selectPayment(self, selectedAccount: selectedAccount)
  125. }
  126. }
  127. extension SelectPaymentViewController: PanModalPresentable {
  128. var panScrollable: UIScrollView? {
  129. return self.tableView
  130. }
  131. var shortFormHeight: PanModalHeight {
  132. let height: CGFloat = CGFloat(self.accounts?.count ?? 0) * 70.0 + (tableView.sectionHeaderHeight * 2)
  133. return .contentHeight(height)
  134. }
  135. var longFormHeight: PanModalHeight {
  136. return .maxHeight
  137. }
  138. }