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

//
// ManageAgreementViewController.swift
// GME Remit
//
// Created by InKwon James Kim on 2019/12/23.
//Copyright © 2019 Gobal Money Express Co. Ltd. All rights reserved.
//
import UIKit
import RxSwift
import RxCocoa
class ManageAgreementViewController: UIViewController {
// MARK: Properties
var presenter: ManageAgreementPresenter!
private let disposeBag = DisposeBag()
private var isFirst = true
private var documents: [AgreePDFDocument]?
private var titleLabels: [UILabel]?
// MARK: Computed Properties
// MARK: IBOutlets
@IBOutlet private weak var agreeButton: UIButton!
@IBOutlet private weak var checkBox: CheckBox!
@IBOutlet private weak var checkBox2: CheckBox!
@IBOutlet private weak var checkBox3: CheckBox!
@IBOutlet private weak var checkBox4: CheckBox!
@IBOutlet private weak var checkBox5: CheckBox!
@IBOutlet private weak var checkBox6: CheckBox!
@IBOutlet private weak var titleLabel: UILabel!
@IBOutlet private weak var infoLabel: UILabel!
@IBOutlet private weak var documentTitleLabel1: UILabel!
@IBOutlet private weak var documentTitleLabel2: UILabel!
@IBOutlet private weak var documentTitleLabel3: UILabel!
@IBOutlet private weak var documentTitleLabel4: UILabel!
@IBOutlet private weak var documentTitleLabel5: UILabel!
@IBOutlet private weak var documentTitleLabel6: UILabel!
// MARK: VC's Life cycle
override func viewDidLoad() {
super.viewDidLoad()
setup()
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
title = "terms_and_conditions_text".localized()
setupNormalNavigation()
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
if isFirst {
checkBox.isSelected = true
checkBox2.isSelected = true
checkBox3.isSelected = true
checkBox4.isSelected = true
checkBox5.isSelected = true
checkBox6.isSelected = true
isFirst = false
}
}
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
title = ""
}
// MARK: IBActions
@IBAction func touchDetail(_ sender: UIButton) {
guard
let doc = documents?.first(where: {$0.id == "\(sender.tag)"}),
let url = doc.url,
let titleLabel = titleLabels?.first(where: {$0.tag == sender.tag}),
let title = titleLabel.text
else {
alert(type: .error, message: "PDF URL is wrong.")
return
}
let detailVC = PDFViewController(nibName: "PDFViewController", bundle: nil)
let configure = PDFConfiguration(
title: title,
url: url
)
detailVC.showAsPush(self, configure: configure)
}
}
// MARK: Other Functions
extension ManageAgreementViewController {
private func setup() {
setUI()
setBinding()
setUIBinding()
}
private func setUI() {
agreeButton.layer.cornerRadius = 5
infoLabel.setLineSpacing(lineSpacing: 5)
if self.presentingViewController == nil {
navigationItem.hidesBackButton = true
let newBackButton = UIBarButtonItem(
image: UIImage(named: "backIconBlack"),
style: .plain,
target: self,
action: #selector(back(sender:))
)
navigationItem.leftBarButtonItem = newBackButton
} else {
let closeButton = UIBarButtonItem(
image: UIImage(named: "ic_cancel"),
style: .plain,
target: self,
action: #selector(close)
)
navigationItem.leftBarButtonItem = closeButton
}
titleLabels = [
documentTitleLabel1, documentTitleLabel2, documentTitleLabel3,
documentTitleLabel4, documentTitleLabel5, documentTitleLabel6
]
setMultiLanguages()
}
private func setUIBinding() {
Observable.combineLatest([
checkBox.rx.isSelected,
checkBox2.rx.isSelected,
checkBox3.rx.isSelected,
checkBox4.rx.isSelected,
checkBox5.rx.isSelected,
checkBox6.rx.isSelected
]).map { $0.allSatisfy { $0 } }
.asDriverOnErrorJustComplete().drive(onNext: {[weak self] isEnable in
self?.agreeButton.isEnabled = isEnable
self?.agreeButton.backgroundColor = isEnable ? .themeRed : .lightGray
}).disposed(by: disposeBag)
}
private func setBinding() {
let agreement = Observable.combineLatest([
checkBox.rx.isSelected,
checkBox2.rx.isSelected,
checkBox3.rx.isSelected,
checkBox4.rx.isSelected,
checkBox5.rx.isSelected,
checkBox6.rx.isSelected
]).map {$0.allSatisfy {$0}}
let viewWillAppear = rx.sentMessage(#selector(UIViewController.viewWillAppear(_:))).mapToVoid()
let input = ManageAgreementPresenter.Input(
viewWillAppear: viewWillAppear,
agreement: agreement,
submit: agreeButton.rx.tap.mapToVoid()
)
let output = presenter.transform(input: input)
output.isError
.drive(
onNext: { self.alert(type: .error, message: $0.localizedDescription) }
).disposed(by: disposeBag)
output.isProgress
.drive(
onNext: { $0 ? self.showProgressHud() : self.hideProgressHud() }
).disposed(by: disposeBag)
output.documents.subscribe(onNext: {[weak self] in
self?.documents = $0
}).disposed(by: disposeBag)
}
@objc private func back(sender: UIBarButtonItem) {
navigationController?.popToRootViewController(animated: true)
}
@objc private func close() {
dismiss(animated: true, completion: nil)
}
private func setMultiLanguages() {
titleLabel.text = "terms_and_conditions_title_text".localized()
infoLabel.text = "terms_and_conditions_content_text".localized()
documentTitleLabel1.text = "personal_info_treatment_policy_text".localized()
documentTitleLabel2.text = "personal_info_usesage_text".localized()
documentTitleLabel3.text = "agreement_legal_text".localized()
documentTitleLabel4.text = "small_scale_amount_text".localized()
documentTitleLabel5.text = "openbanking_service_text".localized()
documentTitleLabel6.text = "eletronic_finance_text".localized()
agreeButton.setTitle("agree_text".localized(), for: .normal)
}
}
// MARK: CheckBoxDelegate
extension ManageAgreementViewController: CheckBoxDelegate {
func checkBox(_ checkBox: CheckBox, isSelected: Bool) {
}
}