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.

233 lines
7.6 KiB

6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
  1. //
  2. // SendMoneyParentViewController.swift
  3. // GMERemittance
  4. //
  5. // Created by gme_2 on 28/08/2018.
  6. //Copyright © 2018 Gobal Money Express Co. Ltd. All rights reserved.
  7. //
  8. import UIKit
  9. protocol HUDStatusDelegate {
  10. func showLoading()
  11. func hideLoading()
  12. }
  13. protocol SendMoneyPaymentModeActionDelegate {
  14. func continueToExchangeAction()
  15. }
  16. protocol SendMoneyExchangeRateActionDelegate {
  17. func continueToVerificationAction()
  18. }
  19. class SendMoneyParentViewController: UIViewController {
  20. enum StateButtons: Int {
  21. case paymentMode = 1
  22. case exchange = 2
  23. case verification = 3
  24. }
  25. struct Constants {
  26. static let stateRedColor = UIColor.init(hex: "#EC1C24")
  27. static let stateGreenColor = UIColor.init(hex: "8CC241")
  28. }
  29. // MARK: IBOutlets
  30. @IBOutlet weak var containerView: UIView!
  31. @IBOutlet weak var paymentModeButton: UIButton!
  32. @IBOutlet weak var exchangeRateButton: UIButton!
  33. @IBOutlet weak var verificationButton: UIButton!
  34. // MARK: Properties
  35. var paymentModeViewController: UIViewController?
  36. var exchangeViewController: UIViewController?
  37. var verificationViewController: UIViewController?
  38. var presenter: SendMoneyParentModuleInterface?
  39. var stateButtons: [UIButton] = []
  40. var state: StateButtons = .paymentMode {
  41. didSet {
  42. self.updateState(state: state)
  43. }
  44. }
  45. var receipient: Recipient? {
  46. didSet {
  47. print( self.receipient?.firstName)
  48. }
  49. }
  50. // MARK: VC's Life cycle
  51. override func viewDidLoad() {
  52. super.viewDidLoad()
  53. self.setup()
  54. self.presenter?.viewIsReady()
  55. self.setupViewControllers()
  56. self.addPaymentModeViewController()
  57. }
  58. override func viewWillAppear(_ animated: Bool) {
  59. super.viewWillAppear(animated)
  60. }
  61. // MARK: IBActions
  62. @IBAction func paymentMode(_ sender: UIButton) {
  63. self.addPaymentModeViewController()
  64. self.state = StateButtons.paymentMode
  65. }
  66. @IBAction func exchangeRate(_ sender: UIButton) {
  67. self.addExchangeViewController()
  68. self.state = StateButtons.exchange
  69. }
  70. @IBAction func verification(_ sender: UIButton) {
  71. self.addVerificationViewController()
  72. self.state = StateButtons.verification
  73. }
  74. // MARK: Other Functions
  75. private func setup() {
  76. // all setup should be done here
  77. self.setTitle(title: "Send Money")
  78. self.state = StateButtons.paymentMode
  79. self.configureViews()
  80. }
  81. private func setupNavigationBar() {
  82. }
  83. private func setTitle(title: String) {
  84. self.navigationItem.title = title
  85. }
  86. private func setupViewControllers() {
  87. let paymentModelWireframe = SendMoneyPaymentModeWireframe()
  88. let pvc = paymentModelWireframe.getMainView() as! SendMoneyPaymentModeViewController
  89. pvc.recipient = self.receipient
  90. pvc.hudDelegate = self
  91. pvc.actionDelegate = self
  92. self.paymentModeViewController = pvc
  93. let exchangeViewWireframe = SendMoneyExchangeRateWireframe()
  94. let evc = exchangeViewWireframe.getMainView() as! SendMoneyExchangeRateViewController
  95. evc.reciepient = self.receipient
  96. evc.actionDelegate = self
  97. evc.hudDelegate = self
  98. self.exchangeViewController = evc
  99. let verificationWireframe = SendMoneyVerificationWireframe()
  100. let vvc = verificationWireframe.getMainView() as! SendMoneyVerificationViewController
  101. vvc.reciepient = self.receipient
  102. vvc.hudDelegate = self
  103. self.verificationViewController = vvc
  104. }
  105. private func configureViews() {
  106. self.paymentModeButton.tag = 1
  107. self.exchangeRateButton.tag = 2
  108. self.verificationButton.tag = 3
  109. self.stateButtons = [paymentModeButton,exchangeRateButton, verificationButton ]
  110. [paymentModeButton, exchangeRateButton, verificationButton].forEach({
  111. $0?.rounded()
  112. })
  113. }
  114. func updateState(state: StateButtons) {
  115. switch state {
  116. case .paymentMode:
  117. self.paymentModeButton.backgroundColor = Constants.stateGreenColor
  118. self.exchangeRateButton.backgroundColor = Constants.stateRedColor
  119. self.verificationButton.backgroundColor = Constants.stateRedColor
  120. case .exchange:
  121. self.paymentModeButton.backgroundColor = Constants.stateGreenColor
  122. self.exchangeRateButton.backgroundColor = Constants.stateGreenColor
  123. self.verificationButton.backgroundColor = Constants.stateRedColor
  124. case .verification:
  125. self.paymentModeButton.backgroundColor = Constants.stateGreenColor
  126. self.exchangeRateButton.backgroundColor = Constants.stateGreenColor
  127. self.verificationButton.backgroundColor = Constants.stateGreenColor
  128. }
  129. }
  130. func addPaymentModeViewController() {
  131. guard let paymentModeViewController = self.paymentModeViewController else {return}
  132. self.addChildViewController(paymentModeViewController)
  133. UIView.transition(with: self.containerView, duration: 0.33, options: .transitionCrossDissolve, animations: {
  134. self.containerView.addSubview(paymentModeViewController.view)
  135. }, completion: nil)
  136. paymentModeViewController.view.frame = containerView.bounds
  137. paymentModeViewController.view.autoresizingMask = [.flexibleWidth, .flexibleHeight]
  138. paymentModeViewController.didMove(toParentViewController: self)
  139. }
  140. func addExchangeViewController() {
  141. guard let exchangeViewController = self.exchangeViewController else {return}
  142. self.addChildViewController(exchangeViewController)
  143. UIView.transition(with: self.containerView, duration: 0.33, options: .transitionCrossDissolve, animations: {
  144. self.containerView.addSubview(exchangeViewController.view)
  145. }, completion: nil)
  146. exchangeViewController.view.frame = containerView.bounds
  147. exchangeViewController.view.autoresizingMask = [.flexibleWidth, .flexibleHeight]
  148. exchangeViewController.didMove(toParentViewController: self)
  149. }
  150. func addVerificationViewController() {
  151. guard let verificationViewController = self.verificationViewController else {return}
  152. self.addChildViewController(verificationViewController)
  153. UIView.transition(with: self.containerView, duration: 0.33, options: .transitionCrossDissolve, animations: {
  154. self.containerView.addSubview(verificationViewController.view)
  155. }, completion: nil)
  156. verificationViewController.view.frame = containerView.bounds
  157. verificationViewController.view.autoresizingMask = [.flexibleWidth, .flexibleHeight]
  158. verificationViewController.didMove(toParentViewController: self)
  159. }
  160. }
  161. // MARK: SendMoneyParentViewInterface
  162. extension SendMoneyParentViewController: SendMoneyParentViewInterface {
  163. func show(model: Recipient) {
  164. self.receipient = model
  165. }
  166. }
  167. extension SendMoneyParentViewController: HUDStatusDelegate {
  168. func showLoading() {
  169. self.showProgressHud()
  170. }
  171. func hideLoading() {
  172. self.hideProgressHud()
  173. }
  174. }
  175. extension SendMoneyParentViewController: SendMoneyPaymentModeActionDelegate {
  176. func continueToExchangeAction() {
  177. self.addExchangeViewController()
  178. self.state = StateButtons.exchange
  179. }
  180. }
  181. extension SendMoneyParentViewController: SendMoneyExchangeRateActionDelegate {
  182. func continueToVerificationAction() {
  183. self.addVerificationViewController()
  184. self.state = StateButtons.verification
  185. }
  186. }