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.
216 lines
7.7 KiB
216 lines
7.7 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
|
|
import Foundation
|
|
|
|
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 ? .theme2E89FF : .theme2E89FF
|
|
}
|
|
}
|
|
|
|
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() {
|
|
|
|
let titleTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.black]
|
|
let titleNotSelectedTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.white]
|
|
nationalitySwitch.setTitleTextAttributes(titleTextAttributes, for: .normal)
|
|
nationalitySwitch.setTitleTextAttributes(titleNotSelectedTextAttributes, for: .selected)
|
|
|
|
//
|
|
// nationalitySwitch.defaultConfiguration()
|
|
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 ?? "")
|
|
}
|
|
}
|
|
|
|
|