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.

193 lines
6.0 KiB

5 years ago
4 years ago
5 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
5 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
  1. //
  2. // NewRegisterViewController.swift
  3. // GME Remit
  4. //
  5. // Created by InKwon James Kim on 2019/12/02.
  6. //Copyright © 2019 Gobal Money Express Co. Ltd. All rights reserved.
  7. //
  8. import UIKit
  9. import RxSwift
  10. import RxCocoa
  11. protocol NewRegisterDelegate: class {
  12. func newRegister(
  13. _ viewController: UIViewController,
  14. currentStep: NewRegisterViewController.Step,
  15. nextStep: NewRegisterViewController.Step)
  16. }
  17. class NewRegisterViewController: UIViewController {
  18. enum Step: Int {
  19. case first
  20. case upload
  21. case terms
  22. case finish
  23. }
  24. // MARK: Properties
  25. var presenter: NewRegisterPresenter!
  26. let moveStep = BehaviorSubject<Step>(value: .first)
  27. private let disposeBag = DisposeBag()
  28. private var stepButtons = [UIButton]()
  29. // MARK: Computed Properties
  30. // MARK: IBOutlets
  31. @IBOutlet private weak var step1Button: UIButton!
  32. @IBOutlet private weak var step2Button: UIButton!
  33. @IBOutlet private weak var step1TitleLabel: UILabel!
  34. @IBOutlet private weak var step2TitleLabel: UILabel!
  35. @IBOutlet weak var step3Button: UIButton!
  36. @IBOutlet weak var step3TitleLabel: UILabel!
  37. @IBOutlet private weak var step1ToStep2Line: UIView!
  38. @IBOutlet weak var containerView: UIView!
  39. // MARK: VC's Life cycle
  40. override func viewDidLoad() {
  41. super.viewDidLoad()
  42. setup()
  43. }
  44. override func viewWillAppear(_ animated: Bool) {
  45. super.viewWillAppear(animated)
  46. title = "new_registration_title_text".localized()
  47. setupNormalNavigation()
  48. //navigationItem.setHidesBackButton(true, animated: true)
  49. if self.presentingViewController != nil {
  50. let closeButton = UIBarButtonItem(
  51. image: UIImage(named: "ic_back_button"),
  52. style: .plain,
  53. target: self,
  54. action: #selector(close)
  55. )
  56. navigationItem.leftBarButtonItem = closeButton
  57. } else {
  58. let closeButton = UIBarButtonItem(
  59. image: UIImage(named: "ic_back_button"),
  60. style: .plain,
  61. target: self,
  62. action: #selector(back)
  63. )
  64. navigationItem.leftBarButtonItem = closeButton
  65. }
  66. let supportButton = UIBarButtonItem(
  67. image: UIImage(named: "contact"),
  68. style: .plain,
  69. target: self,
  70. action: #selector(customerSupport)
  71. )
  72. navigationItem.rightBarButtonItem = supportButton
  73. }
  74. override func viewWillDisappear(_ animated: Bool) {
  75. super.viewWillDisappear(animated)
  76. title = ""
  77. }
  78. @objc func customerSupport(_ sender: Any) {
  79. let actionArray = [ActionSheetElement(title: "Facebook", id: "https://www.facebook.com/", icon: "Facebook"), ActionSheetElement(title: "03-5475-3913", id: "tel://0354753913", icon: "contact")]
  80. ActionSheetHelper.shared.open(parentVc: self, title: "help_you_text".localized(), values: actionArray) { (element) in
  81. UIApplication.tryURL(url: element.id)
  82. }
  83. }
  84. // MARK: IBActions
  85. @IBAction func touchStepButtom(_ sender: UIButton) {
  86. guard let step = Step(rawValue: sender.tag) else {
  87. return
  88. }
  89. moveStep.onNext(step)
  90. }
  91. }
  92. // MARK: Other Functions
  93. extension NewRegisterViewController {
  94. private func setup() {
  95. setUI()
  96. setBinding()
  97. setUIBinding()
  98. }
  99. private func setUI() {
  100. step1Button.rounded()
  101. step2Button.rounded()
  102. step3Button.rounded()
  103. containerView.layer.cornerRadius = 5
  104. stepButtons = [
  105. step1Button,
  106. step2Button,
  107. step3Button
  108. ]
  109. setMultilanguages()
  110. }
  111. private func setUIBinding() {
  112. moveStep.asDriverOnErrorJustComplete()
  113. .map {$0.rawValue}
  114. .drive(onNext: { [weak self] tag in
  115. DispatchQueue.main.async {
  116. self?.stepButtons.enumerated().forEach { (index, button) in
  117. if button.tag == tag || index <= tag {
  118. button.backgroundColor = .themeBlue
  119. button.setTitleColor(.white, for: .normal)
  120. button.layer.borderWidth = 0
  121. button.isEnabled = true
  122. button.titleLabel?.font = .sanfrancisco(.medium, size: 12)
  123. } else {
  124. button.backgroundColor = .white
  125. button.layer.borderColor = UIColor.lightGray.cgColor
  126. button.layer.borderWidth = 1
  127. button.setTitleColor(.black, for: .normal)
  128. button.isEnabled = false
  129. button.titleLabel?.font = .sanfrancisco(.regular, size: 12)
  130. }
  131. }
  132. }
  133. }).disposed(by: disposeBag)
  134. }
  135. private func setBinding() {
  136. let input = NewRegisterPresenter.Input(
  137. moveStep: moveStep.asDriverOnErrorJustComplete()
  138. )
  139. let output = presenter.transform(input: input)
  140. output.isError
  141. .drive(
  142. onNext: { self.alert(type: .error, message: $0.localizedDescription) }
  143. ).disposed(by: disposeBag)
  144. output.isProgress
  145. .drive(
  146. onNext: { $0 ? self.showProgressHud() : self.hideProgressHud() }
  147. ).disposed(by: disposeBag)
  148. }
  149. @objc private func close() {
  150. dismiss(animated: true, completion: nil)
  151. }
  152. @objc private func back() {
  153. self.navigationController?.popToRootViewController(animated: true)
  154. }
  155. func setMultilanguages() {
  156. step1TitleLabel.text = "step1_sub_title_text".localized()
  157. step2TitleLabel.text = "documents_text".localized()
  158. step3TitleLabel.text = "terms_and_condition_title_text1".localized()
  159. }
  160. }