// // 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]? private var csManager: CSManagement? // 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 ] csManager = CSManagement(self) csManager?.setNavigationRightBarbutton(type: .call) 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) { } }