// // VerifyIDNumberViewController.swift // GME Remit // // Created by Shiran on 8/4/20. //Copyright © 2020 Gobal Money Express Co. Ltd. All rights reserved. // import UIKit import RxSwift import RxCocoa class VerifyIDNumberViewController: UIViewController { struct StringConstants { let residenceIdTitle = "residence_id_placeholder".localized() let residenceIdPlaceholder = "residence_id_placeholder".localized() let residenceIdError = "residence_id_error".localized() let headerTitle = "register_title_text".localized() let verifyBtnTitle = "verify_text".localized() let fullNameText = "full_name_text".localized() let fullNameTextPlaceholder = "full_name_placeholder_text".localized() let dobText = "dob_text".localized() } // MARK: Properties var presenter: VerifyIDNumberModuleInterface? var customerType: String = "FOREIGNER" var idType: String = "RESIDENCE" private var isValid = false { didSet { // verifyBttn.isEnabled = isValid // verifyBttn.backgroundColor = isValid ? .themeRed : .themeText verifyBttn.isEnabled = true verifyBttn.backgroundColor = isValid ? .themeRed : .themeRed } } private var validDic = [ "id": false, "dob": false ] // MARK: IBOutlets @IBOutlet weak var idNumberTxtField: ValidationTextField! @IBOutlet weak var verifyBttn: UIButton! @IBOutlet weak var backButton: UIImageView! { didSet { let tapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(tappedView)) backButton.addGestureRecognizer(tapGestureRecognizer) backButton.isUserInteractionEnabled = true } } @IBOutlet weak var headerTitle: UILabel! @IBOutlet weak var dobTxtField: ValidationTextField! @IBOutlet weak var fullNameTxtField: ValidationTextField! @IBOutlet weak var nationalitySwitch: UISegmentedControl! private let disposeBag = DisposeBag() // MARK: VC's Life cycle override func viewDidLoad() { super.viewDidLoad() self.setup() } override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) } override func viewWillDisappear(_ animated: Bool) { super.viewWillDisappear(animated) } // MARK: IBActions @IBAction func verifyBttnClicked(_ sender: UIButton) { let idNumber = self.idNumberTxtField.text ?? "" let fullName = self.fullNameTxtField.text ?? "" let dob = self.dobTxtField.text ?? "" self.presenter?.verifyIdNumber(id: idNumber, type: self.idType, fullName: fullName, dob: dob) } // MARK: Other Functions private func setup() { configureLanguage() verifyBttn.layer.cornerRadius = 6 idNumberTxtField.addTarget(self, action: #selector(editingChanged(_:)), for: .editingChanged) dobTxtField.useAsDropDown(items: nil) setDatePicker(textField: dobTxtField, useMaximum: true) dobTxtField.validCondition = { $0.count > 0} dobTxtField.addTarget(self, action: #selector(editingChanged(_:)), for: .editingChanged) } private func setDatePicker(textField: UITextField, useMaximum: Bool = false, useMinimum: Bool = false) { let datePicker = UIDatePicker() datePicker.datePickerMode = .date if #available(iOS 13.4, *) { datePicker.preferredDatePickerStyle = .wheels } if useMaximum { datePicker.maximumDate = Date() } if useMinimum { datePicker.minimumDate = Date() } textField.inputView = datePicker datePicker.rx.controlEvent(.valueChanged).withLatestFrom(datePicker.rx.date) {$1} .asDriverOnErrorJustComplete() .drive(onNext: { let dateFormatter = DateFormatter() dateFormatter.dateFormat = "yyyy-MM-dd" textField.text = dateFormatter.string(from: $0) textField.sendActions(for: .editingChanged) }).disposed(by: disposeBag) } @objc private func editingChanged(_ textField: ValidationTextField) { switch textField { case idNumberTxtField: textField.removeNonASCII() idNumberTxtField.filterForUserIDFormat() validDic["id"] = idNumberTxtField.isValid case dobTxtField: validDic["dob"] = dobTxtField.isValid dobTxtField.errorMessage = "empty_field_error_text".localized() default: () } isValid = validDic.allSatisfy { $0.value } } @objc func tappedView() { self.navigationController?.popViewController(animated: true) } func configureLanguage() { idNumberTxtField.titleText = StringConstants().residenceIdTitle idNumberTxtField.placeholder = StringConstants().residenceIdPlaceholder idNumberTxtField.errorMessage = StringConstants().residenceIdError idNumberTxtField.validCondition = { !$0.isEmpty} dobTxtField.placeholder = StringConstants().dobText dobTxtField.titleText = StringConstants().dobText fullNameTxtField.placeholder = StringConstants().fullNameTextPlaceholder fullNameTxtField.titleText = StringConstants().fullNameText headerTitle.text = StringConstants().headerTitle verifyBttn.setTitle(StringConstants().verifyBtnTitle, for: .normal) } @IBAction func nationalitySwitchButtonClicked(_ sender: UISegmentedControl) { switch nationalitySwitch.selectedSegmentIndex { case 0: idNumberTxtField.titleText = StringConstants().residenceIdTitle idNumberTxtField.placeholder = StringConstants().residenceIdPlaceholder idNumberTxtField.errorMessage = StringConstants().residenceIdError self.customerType = "FOREIGNER" self.idType = "RESIDENCE" case 1: idNumberTxtField.titleText = "scan_driver_license_text".localized() idNumberTxtField.placeholder = "driver_license_hint_text".localized() idNumberTxtField.errorMessage = "invalid_driver_license_text".localized() self.customerType = "RESIDENT" self.idType = "DRIVING_LICENCE" default: idNumberTxtField.titleText = StringConstants().residenceIdTitle idNumberTxtField.placeholder = StringConstants().residenceIdPlaceholder idNumberTxtField.errorMessage = StringConstants().residenceIdError self.customerType = "FOREIGNER" self.idType = "RESIDENCE" } } } // MARK: VerifyIDNumberViewInterface extension VerifyIDNumberViewController: VerifyIDNumberViewInterface { func showLoading() { self.showProgressHud() } func hideLoading() { self.hideProgressHud() } func show(error: String) { self.alert(type: .error, message: error) } func show(message: String) { guard let id = self.idNumberTxtField.text else { return } GMEDB.shared.user.set(id, .userId) self.presenter?.newUserRegister(customerType: self.customerType, fullName: self.fullNameTxtField.text ?? "", Dob: self.dobTxtField.text ?? "") } }