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.

219 lines
6.2 KiB

5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
  1. //
  2. // ManageAgreementViewController.swift
  3. // GME Remit
  4. //
  5. // Created by InKwon James Kim on 2019/12/23.
  6. //Copyright © 2019 Gobal Money Express Co. Ltd. All rights reserved.
  7. //
  8. import UIKit
  9. import RxSwift
  10. import RxCocoa
  11. class ManageAgreementViewController: UIViewController {
  12. // MARK: Properties
  13. var presenter: ManageAgreementPresenter!
  14. private let disposeBag = DisposeBag()
  15. private var isFirst = true
  16. private var documents: [AgreePDFDocument]?
  17. private var titleLabels: [UILabel]?
  18. // MARK: Computed Properties
  19. // MARK: IBOutlets
  20. @IBOutlet private weak var agreeButton: UIButton!
  21. @IBOutlet private weak var checkBox: CheckBox!
  22. @IBOutlet private weak var checkBox2: CheckBox!
  23. @IBOutlet private weak var checkBox3: CheckBox!
  24. @IBOutlet private weak var checkBox4: CheckBox!
  25. @IBOutlet private weak var checkBox5: CheckBox!
  26. @IBOutlet private weak var checkBox6: CheckBox!
  27. @IBOutlet private weak var titleLabel: UILabel!
  28. @IBOutlet private weak var infoLabel: UILabel!
  29. @IBOutlet private weak var documentTitleLabel1: UILabel!
  30. @IBOutlet private weak var documentTitleLabel2: UILabel!
  31. @IBOutlet private weak var documentTitleLabel3: UILabel!
  32. @IBOutlet private weak var documentTitleLabel4: UILabel!
  33. @IBOutlet private weak var documentTitleLabel5: UILabel!
  34. @IBOutlet private weak var documentTitleLabel6: UILabel!
  35. // MARK: VC's Life cycle
  36. override func viewDidLoad() {
  37. super.viewDidLoad()
  38. setup()
  39. }
  40. override func viewWillAppear(_ animated: Bool) {
  41. super.viewWillAppear(animated)
  42. title = "terms_and_conditions_text".localized()
  43. setupNormalNavigation()
  44. }
  45. override func viewDidAppear(_ animated: Bool) {
  46. super.viewDidAppear(animated)
  47. if isFirst {
  48. checkBox.isSelected = true
  49. checkBox2.isSelected = true
  50. checkBox3.isSelected = true
  51. checkBox4.isSelected = true
  52. checkBox5.isSelected = true
  53. checkBox6.isSelected = true
  54. isFirst = false
  55. }
  56. }
  57. override func viewWillDisappear(_ animated: Bool) {
  58. super.viewWillDisappear(animated)
  59. title = ""
  60. }
  61. // MARK: IBActions
  62. @IBAction func touchDetail(_ sender: UIButton) {
  63. guard
  64. let doc = documents?.first(where: {$0.id == "\(sender.tag)"}),
  65. let url = doc.url,
  66. let titleLabel = titleLabels?.first(where: {$0.tag == sender.tag}),
  67. let title = titleLabel.text
  68. else {
  69. alert(type: .error, message: "PDF URL is wrong.")
  70. return
  71. }
  72. let detailVC = PDFViewController(nibName: "PDFViewController", bundle: nil)
  73. let configure = PDFConfiguration(
  74. title: title,
  75. url: url
  76. )
  77. detailVC.showAsPush(self, configure: configure)
  78. }
  79. }
  80. // MARK: Other Functions
  81. extension ManageAgreementViewController {
  82. private func setup() {
  83. setUI()
  84. setBinding()
  85. setUIBinding()
  86. }
  87. private func setUI() {
  88. agreeButton.layer.cornerRadius = 5
  89. infoLabel.setLineSpacing(lineSpacing: 5)
  90. if self.presentingViewController == nil {
  91. navigationItem.hidesBackButton = true
  92. let newBackButton = UIBarButtonItem(
  93. image: UIImage(named: "backIconBlack"),
  94. style: .plain,
  95. target: self,
  96. action: #selector(back(sender:))
  97. )
  98. navigationItem.leftBarButtonItem = newBackButton
  99. } else {
  100. let closeButton = UIBarButtonItem(
  101. image: UIImage(named: "ic_cancel"),
  102. style: .plain,
  103. target: self,
  104. action: #selector(close)
  105. )
  106. navigationItem.leftBarButtonItem = closeButton
  107. }
  108. titleLabels = [
  109. documentTitleLabel1, documentTitleLabel2, documentTitleLabel3,
  110. documentTitleLabel4, documentTitleLabel5, documentTitleLabel6
  111. ]
  112. setMultiLanguages()
  113. }
  114. private func setUIBinding() {
  115. Observable.combineLatest([
  116. checkBox.rx.isSelected,
  117. checkBox2.rx.isSelected,
  118. checkBox3.rx.isSelected,
  119. checkBox4.rx.isSelected,
  120. checkBox5.rx.isSelected,
  121. checkBox6.rx.isSelected
  122. ]).map { $0.allSatisfy { $0 } }
  123. .asDriverOnErrorJustComplete().drive(onNext: {[weak self] isEnable in
  124. self?.agreeButton.isEnabled = isEnable
  125. self?.agreeButton.backgroundColor = isEnable ? .themeRed : .lightGray
  126. }).disposed(by: disposeBag)
  127. }
  128. private func setBinding() {
  129. let agreement = Observable.combineLatest([
  130. checkBox.rx.isSelected,
  131. checkBox2.rx.isSelected,
  132. checkBox3.rx.isSelected,
  133. checkBox4.rx.isSelected,
  134. checkBox5.rx.isSelected,
  135. checkBox6.rx.isSelected
  136. ]).map {$0.allSatisfy {$0}}
  137. let viewWillAppear = rx.sentMessage(#selector(UIViewController.viewWillAppear(_:))).mapToVoid()
  138. let input = ManageAgreementPresenter.Input(
  139. viewWillAppear: viewWillAppear,
  140. agreement: agreement,
  141. submit: agreeButton.rx.tap.mapToVoid()
  142. )
  143. let output = presenter.transform(input: input)
  144. output.isError
  145. .drive(
  146. onNext: { self.alert(type: .error, message: $0.localizedDescription) }
  147. ).disposed(by: disposeBag)
  148. output.isProgress
  149. .drive(
  150. onNext: { $0 ? self.showProgressHud() : self.hideProgressHud() }
  151. ).disposed(by: disposeBag)
  152. output.documents.subscribe(onNext: {[weak self] in
  153. self?.documents = $0
  154. }).disposed(by: disposeBag)
  155. }
  156. @objc private func back(sender: UIBarButtonItem) {
  157. navigationController?.popToRootViewController(animated: true)
  158. }
  159. @objc private func close() {
  160. dismiss(animated: true, completion: nil)
  161. }
  162. private func setMultiLanguages() {
  163. titleLabel.text = "terms_and_conditions_title_text".localized()
  164. infoLabel.text = "terms_and_conditions_content_text".localized()
  165. documentTitleLabel1.text = "personal_info_treatment_policy_text".localized()
  166. documentTitleLabel2.text = "personal_info_usesage_text".localized()
  167. documentTitleLabel3.text = "agreement_legal_text".localized()
  168. documentTitleLabel4.text = "small_scale_amount_text".localized()
  169. documentTitleLabel5.text = "openbanking_service_text".localized()
  170. documentTitleLabel6.text = "eletronic_finance_text".localized()
  171. agreeButton.setTitle("agree_text".localized(), for: .normal)
  172. }
  173. }
  174. // MARK: CheckBoxDelegate
  175. extension ManageAgreementViewController: CheckBoxDelegate {
  176. func checkBox(_ checkBox: CheckBox, isSelected: Bool) {
  177. }
  178. }