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.
 
 
 
 

205 lines
7.2 KiB

//
// 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 ?? "")
}
}