|
|
@ -9,402 +9,412 @@ |
|
|
|
import UIKit |
|
|
|
|
|
|
|
class EditReciepientViewController: UIViewController { |
|
|
|
|
|
|
|
struct StringConstants { |
|
|
|
let headerText = "who_to_send_text".localized() |
|
|
|
let firstNameText = "first_name_text".localized() |
|
|
|
let middleNameText = "enter_receiver_middlename_text".localized() |
|
|
|
let lastNameText = "last_name_text".localized() |
|
|
|
let countryNameText = "country_text".localized() |
|
|
|
let stateText = "state_text".localized() |
|
|
|
let districtText = "district_text".localized() |
|
|
|
let addressText = "address_text".localized() |
|
|
|
let relationText = "relation_text".localized() |
|
|
|
let mobileText = "mobile_number_text".localized() |
|
|
|
let transferText = "transfer_reason_text".localized() |
|
|
|
let saveText = "save_text".localized() |
|
|
|
// placeholder |
|
|
|
let firstnamePlaceholder = "placeholder_enter_receiver_firstname_text".localized() |
|
|
|
let lastnamePlaceholder = "placeholder_enter_receiver_middle_text".localized() |
|
|
|
let middlenamePlaceholder = "placeholder_enter_receiver_lastname_text".localized() |
|
|
|
let countryPlaceholder = "placeholder_select_country_text".localized() |
|
|
|
let statePlaceholder = "state_placeholder_text".localized() |
|
|
|
let districtPlaceholder = "district_placeholder_text".localized() |
|
|
|
let addressPlaceholder = "placeholder_enter_receiver_address_text".localized() |
|
|
|
let relationPlaceholder = "placeholder_select_relation_text".localized() |
|
|
|
let mobilePlaceholder = "placeholder_enter_reciever_mobile_number_text".localized() |
|
|
|
let transferPlaceholder = "placeholder_select_transfer_reason_text".localized() |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
// MARK: IBOutlets |
|
|
|
@IBOutlet weak var firstNameTextField: UITextField! |
|
|
|
@IBOutlet weak var middleNameTextField: UITextField! |
|
|
|
@IBOutlet weak var lastNameTextField: UITextField! |
|
|
|
@IBOutlet weak var countryTextField: UITextField! |
|
|
|
@IBOutlet weak var stateProvinceTextField: UITextField! |
|
|
|
@IBOutlet weak var districtTextField: UITextField! |
|
|
|
@IBOutlet weak var addressTextField: UITextField! |
|
|
|
@IBOutlet weak var relationTextField: UITextField! |
|
|
|
@IBOutlet weak var mobileTextField: UITextField! |
|
|
|
@IBOutlet weak var emailTextField: UITextField! |
|
|
|
@IBOutlet weak var transferReasonTextField: UITextField! |
|
|
|
@IBOutlet weak var saveButton: UIButton! |
|
|
|
@IBOutlet weak var provienceStackView: UIStackView! |
|
|
|
@IBOutlet weak var districtStackView: UIStackView! |
|
|
|
|
|
|
|
|
|
|
|
// titles |
|
|
|
@IBOutlet weak var headerTItleLabel: UILabel! |
|
|
|
@IBOutlet weak var firstNameTitleLabel: UILabel! |
|
|
|
@IBOutlet weak var middleNameTitleLabel: UILabel! |
|
|
|
@IBOutlet weak var lastNametitleLabel: UILabel! |
|
|
|
@IBOutlet weak var countryNameTitleLabel: UILabel! |
|
|
|
@IBOutlet weak var stateTitleLabel: UILabel! |
|
|
|
@IBOutlet weak var districtTitleLabel: UILabel! |
|
|
|
@IBOutlet weak var addressTitleLabel: UILabel! |
|
|
|
@IBOutlet weak var relationTitleLabel: UILabel! |
|
|
|
@IBOutlet weak var mobileTitleLabel: UILabel! |
|
|
|
@IBOutlet weak var transferTitleLabel: UILabel! |
|
|
|
|
|
|
|
|
|
|
|
// MARK: Properties |
|
|
|
|
|
|
|
var presenter: EditReciepientModuleInterface? |
|
|
|
var countries: [SendMoneyCountryViewModel]? |
|
|
|
var transferReasons: [SendMoneyTransferReasonViewModel]? |
|
|
|
var relations: [SendMoneyRelationViewModel]? |
|
|
|
var reciepient: EditRecipientRecipientViewModel? { |
|
|
|
didSet { |
|
|
|
self.populateInformations() |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
var selectedCountry: SendMoneyCountryViewModel? { |
|
|
|
didSet { |
|
|
|
self.countryTextField.text = selectedCountry?.name |
|
|
|
let shouldShowProvienceField = (selectedCountry?.proviencesRequired ?? "" ) == "true" |
|
|
|
|
|
|
|
self.configureView(isHidden: !shouldShowProvienceField) |
|
|
|
|
|
|
|
self.reciepient?.countryId = self.selectedCountry?.id |
|
|
|
self.reciepient?.country = self.selectedCountry?.name |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
var selectedProvience: SendMoneyProvienceViewModel? { |
|
|
|
didSet { |
|
|
|
self.stateProvinceTextField.text = selectedProvience?.name |
|
|
|
self.reciepient?.stateId = self.selectedProvience?.id |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
var selectedDistrict: SendMoneyDistrictViewModel? { |
|
|
|
didSet { |
|
|
|
self.districtTextField.text = selectedDistrict?.name |
|
|
|
self.reciepient?.districtId = self.selectedDistrict?.id |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
var selectedRelation: SendMoneyRelationViewModel? { |
|
|
|
didSet { |
|
|
|
self.relationTextField.text = selectedRelation?.title |
|
|
|
self.reciepient?.relationId = self.selectedRelation?.id |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
var selectedTransferReason: SendMoneyTransferReasonViewModel? { |
|
|
|
didSet { |
|
|
|
self.transferReasonTextField.text = selectedTransferReason?.title |
|
|
|
self.reciepient?.reasonId = selectedTransferReason?.id |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
// MARK: VC's Life cycle |
|
|
|
|
|
|
|
override func viewDidLoad() { |
|
|
|
super.viewDidLoad() |
|
|
|
self.setup() |
|
|
|
self.setupDelegates() |
|
|
|
self.setupTargets() |
|
|
|
self.presenter?.viewIsReady() |
|
|
|
} |
|
|
|
|
|
|
|
override func viewWillAppear(_ animated: Bool) { |
|
|
|
super.viewWillAppear(animated) |
|
|
|
self.navigationItem.title = "Edit Receipient" |
|
|
|
} |
|
|
|
|
|
|
|
// MARK: IBActions |
|
|
|
@IBAction func save(_ sender: UIButton) { |
|
|
|
self.view.endEditing(true) |
|
|
|
if let reciepient = self.reciepient { |
|
|
|
self.presenter?.save(model: reciepient) |
|
|
|
} |
|
|
|
} |
|
|
|
// MARK: Other Functions |
|
|
|
|
|
|
|
|
|
|
|
private func setup() { |
|
|
|
// all setup should be done here |
|
|
|
self.setupNavigation() |
|
|
|
self.configureView(isHidden: true) |
|
|
|
self.configureLanguage() |
|
|
|
} |
|
|
|
|
|
|
|
private func configureLanguage() { |
|
|
|
self.headerTItleLabel.text = StringConstants().headerText |
|
|
|
self.firstNameTitleLabel.text = StringConstants().firstNameText |
|
|
|
self.middleNameTitleLabel.text = StringConstants().middleNameText |
|
|
|
self.lastNametitleLabel.text = StringConstants().lastNameText |
|
|
|
self.countryNameTitleLabel.text = StringConstants().countryNameText |
|
|
|
self.stateTitleLabel.text = StringConstants().stateText |
|
|
|
self.districtTitleLabel.text = StringConstants().districtText |
|
|
|
self.addressTitleLabel.text = StringConstants().addressText |
|
|
|
self.relationTitleLabel.text = StringConstants().relationText |
|
|
|
self.mobileTitleLabel.text = StringConstants().mobileText |
|
|
|
self.transferTitleLabel.text = StringConstants().transferText |
|
|
|
saveButton.setTitle(StringConstants().saveText, for: .normal) |
|
|
|
|
|
|
|
// placeholders |
|
|
|
|
|
|
|
self.firstNameTextField.placeholder = StringConstants().firstnamePlaceholder |
|
|
|
self.middleNameTextField.placeholder = StringConstants().middlenamePlaceholder |
|
|
|
self.lastNameTextField.placeholder = StringConstants().lastnamePlaceholder |
|
|
|
self.countryTextField.placeholder = StringConstants().countryPlaceholder |
|
|
|
self.stateProvinceTextField.placeholder = StringConstants().statePlaceholder |
|
|
|
self.districtTextField.placeholder = StringConstants().districtPlaceholder |
|
|
|
self.addressTextField.placeholder = StringConstants().addressPlaceholder |
|
|
|
self.relationTextField.placeholder = StringConstants().relationPlaceholder |
|
|
|
self.mobileTextField.placeholder = StringConstants().mobilePlaceholder |
|
|
|
self.transferReasonTextField.placeholder = StringConstants().transferPlaceholder |
|
|
|
} |
|
|
|
|
|
|
|
private func configureView(isHidden: Bool) { |
|
|
|
self.provienceStackView.isHidden = isHidden |
|
|
|
self.districtStackView.isHidden = isHidden |
|
|
|
} |
|
|
|
|
|
|
|
private func setupDelegates() { |
|
|
|
self.countryTextField.delegate = self |
|
|
|
self.stateProvinceTextField.delegate = self |
|
|
|
self.districtTextField.delegate = self |
|
|
|
self.relationTextField.delegate = self |
|
|
|
self.transferReasonTextField.delegate = self |
|
|
|
} |
|
|
|
|
|
|
|
private func setupTargets() { |
|
|
|
[firstNameTextField, middleNameTextField, lastNameTextField, countryTextField, stateProvinceTextField, districtTextField, addressTextField, relationTextField, mobileTextField, emailTextField, transferReasonTextField].forEach({ |
|
|
|
$0?.addTarget(self, action: #selector(self.textFieldChanged(sender:)), for: UIControlEvents.editingChanged) |
|
|
|
}) |
|
|
|
} |
|
|
|
|
|
|
|
@objc private func textFieldChanged(sender: UITextField) { |
|
|
|
switch sender { |
|
|
|
case firstNameTextField: |
|
|
|
self.reciepient?.firstName = firstNameTextField.text! |
|
|
|
case middleNameTextField: |
|
|
|
self.reciepient?.middleName = middleNameTextField.text! |
|
|
|
case lastNameTextField: |
|
|
|
self.reciepient?.lastName = lastNameTextField.text! |
|
|
|
case addressTextField: |
|
|
|
self.reciepient?.address = addressTextField.text! |
|
|
|
case mobileTextField: |
|
|
|
self.reciepient?.mobileNumber = mobileTextField.text! |
|
|
|
case emailTextField: |
|
|
|
self.reciepient?.email = emailTextField.text! |
|
|
|
default: |
|
|
|
break |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
private func populateInformations() { |
|
|
|
self.firstNameTextField.text = self.reciepient?.firstName |
|
|
|
self.middleNameTextField.text = self.reciepient?.middleName |
|
|
|
self.lastNameTextField.text = self.reciepient?.lastName |
|
|
|
|
|
|
|
let relation = self.relations?.filter({ |
|
|
|
$0.title == self.reciepient?.relation |
|
|
|
}).first?.title |
|
|
|
|
|
|
|
self.relationTextField.text = relation |
|
|
|
self.mobileTextField.text = self.reciepient?.mobileNumber |
|
|
|
self.emailTextField.text = self.reciepient?.email |
|
|
|
|
|
|
|
let transferReason = self.transferReasons?.filter({ |
|
|
|
$0.title == self.reciepient?.reason |
|
|
|
}).first?.title |
|
|
|
|
|
|
|
self.transferReasonTextField.text = transferReason |
|
|
|
|
|
|
|
self.addressTextField.text = reciepient?.address |
|
|
|
|
|
|
|
|
|
|
|
// For sync country in reciepient model |
|
|
|
self.selectedCountry = self.countries?.filter{ |
|
|
|
$0.name == self.reciepient?.country |
|
|
|
}.first |
|
|
|
|
|
|
|
// For sync provience in reciepient model |
|
|
|
self.selectedProvience = self.selectedCountry?.proviences?.filter{ |
|
|
|
$0.id == self.reciepient?.stateId |
|
|
|
}.first |
|
|
|
|
|
|
|
// For sync district in reciepient model |
|
|
|
self.selectedDistrict = self.selectedProvience?.districts?.filter{ |
|
|
|
$0.id == self.reciepient?.districtId |
|
|
|
}.first |
|
|
|
} |
|
|
|
|
|
|
|
private func setupNavigation() { |
|
|
|
self.navigationItem.backBarButtonItem?.image = |
|
|
|
#imageLiteral(resourceName: "backIconBlack") |
|
|
|
self.navigationController?.navigationBar.tintColor = UIColor.black |
|
|
|
} |
|
|
|
|
|
|
|
private func showCountryPickerview() { |
|
|
|
let viewcontroller = UIStoryboard.init(name: "CountryPicker", bundle: nil).instantiateViewController(withIdentifier: "CountryPickerViewController") as! CountryPickerViewController |
|
|
|
viewcontroller.data = self.countries ?? [] |
|
|
|
viewcontroller.doneAction = self.countrySelected |
|
|
|
viewcontroller.defaultSelectedData = [self.selectedCountry] |
|
|
|
viewcontroller.type = PickerTitle.country |
|
|
|
self.present(viewcontroller, animated: true, completion: nil) |
|
|
|
} |
|
|
|
|
|
|
|
private func getPickerViewController()-> ItemsPickerViewController { |
|
|
|
return UIStoryboard.init(name: "ItemsPicker", bundle: nil).instantiateViewController(withIdentifier: "ItemsPickerViewController") as! ItemsPickerViewController |
|
|
|
} |
|
|
|
|
|
|
|
private func showProviencePickerview() { |
|
|
|
let viewcontroller = self.getPickerViewController() |
|
|
|
let proviences = self.selectedCountry?.proviences ?? [] |
|
|
|
let names = proviences.compactMap({$0.name}) |
|
|
|
viewcontroller.data = names |
|
|
|
viewcontroller.type = PickerTitle.state |
|
|
|
viewcontroller.doneAction = self.provienceSelected |
|
|
|
viewcontroller.defaultSelectedData = [self.selectedProvience?.name ?? ""] |
|
|
|
self.present(viewcontroller, animated: true, completion: nil) |
|
|
|
} |
|
|
|
|
|
|
|
private func showDistrictPickerview() { |
|
|
|
let viewcontroller = self.getPickerViewController() |
|
|
|
let districts = self.selectedProvience?.districts ?? [] |
|
|
|
let names = districts.compactMap({$0.name}) |
|
|
|
viewcontroller.data = names |
|
|
|
viewcontroller.type = PickerTitle.district |
|
|
|
viewcontroller.doneAction = self.districtSelected |
|
|
|
viewcontroller.defaultSelectedData = [self.selectedDistrict?.name ?? ""] |
|
|
|
self.present(viewcontroller, animated: true, completion: nil) |
|
|
|
} |
|
|
|
|
|
|
|
private func showRelationPickerView() { |
|
|
|
let viewcontroller = self.getPickerViewController() |
|
|
|
let relations = self.relations ?? [] |
|
|
|
let names = relations.compactMap({$0.title}) |
|
|
|
viewcontroller.data = names |
|
|
|
viewcontroller.type = PickerTitle.relation |
|
|
|
viewcontroller.doneAction = self.relationSelected |
|
|
|
viewcontroller.defaultSelectedData = [self.selectedRelation?.title ?? ""] |
|
|
|
self.present(viewcontroller, animated: true, completion: nil) |
|
|
|
} |
|
|
|
|
|
|
|
private func showTransferReasonPickerView() { |
|
|
|
let viewcontroller = self.getPickerViewController() |
|
|
|
let transferReasons = self.transferReasons ?? [] |
|
|
|
let names = transferReasons.compactMap({$0.title}) |
|
|
|
viewcontroller.data = names |
|
|
|
viewcontroller.type = PickerTitle.transferReasons |
|
|
|
viewcontroller.doneAction = self.transferReasonSelected |
|
|
|
viewcontroller.defaultSelectedData = [self.selectedTransferReason?.title ?? ""] |
|
|
|
self.present(viewcontroller, animated: true, completion: nil) |
|
|
|
} |
|
|
|
|
|
|
|
func transferReasonSelected(reasons: [String]) { |
|
|
|
let _reason = self.transferReasons?.filter({($0.title ?? "") == (reasons.first ?? "") }).first |
|
|
|
self.selectedTransferReason = _reason |
|
|
|
} |
|
|
|
|
|
|
|
func relationSelected(relations: [String]) { |
|
|
|
let _relations = self.relations?.filter({($0.title ?? "") == (relations.first ?? "") }).first |
|
|
|
self.selectedRelation = _relations |
|
|
|
} |
|
|
|
|
|
|
|
func districtSelected(district: [String]) { |
|
|
|
let _district = (self.selectedProvience?.districts ?? []).filter({ |
|
|
|
( $0.name ?? "" ) == ( district.first ?? "" ) |
|
|
|
}).first |
|
|
|
self.selectedDistrict = _district |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
func provienceSelected(provience: [String]) { |
|
|
|
let _provience = (self.selectedCountry?.proviences ?? []).filter({ |
|
|
|
($0.name ?? "") == (provience.first ?? "") |
|
|
|
}) |
|
|
|
self.selectedProvience = _provience.first |
|
|
|
// according to selected province, clear district |
|
|
|
self.selectedDistrict = nil |
|
|
|
} |
|
|
|
|
|
|
|
func countrySelected(models: [SendMoneyCountryViewModel]) { |
|
|
|
self.selectedCountry = models.first |
|
|
|
} |
|
|
|
|
|
|
|
func showLoading() { |
|
|
|
self.showProgressHud() |
|
|
|
} |
|
|
|
|
|
|
|
func hideLoading() { |
|
|
|
self.hideProgressHud() |
|
|
|
} |
|
|
|
|
|
|
|
func show(error: String) { |
|
|
|
self.alert(message: error) |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
struct StringConstants { |
|
|
|
let headerText = "who_to_send_text".localized() |
|
|
|
let firstNameText = "first_name_text".localized() |
|
|
|
let middleNameText = "enter_receiver_middlename_text".localized() |
|
|
|
let lastNameText = "last_name_text".localized() |
|
|
|
let countryNameText = "country_text".localized() |
|
|
|
let stateText = "state_text".localized() |
|
|
|
let districtText = "district_text".localized() |
|
|
|
let addressText = "address_text".localized() |
|
|
|
let relationText = "relation_text".localized() |
|
|
|
let mobileText = "mobile_number_text".localized() |
|
|
|
let transferText = "transfer_reason_text".localized() |
|
|
|
let cityText = "city_text".localized() |
|
|
|
let saveText = "save_text".localized() |
|
|
|
// placeholder |
|
|
|
let firstnamePlaceholder = "placeholder_enter_receiver_firstname_text".localized() |
|
|
|
let lastnamePlaceholder = "placeholder_enter_receiver_middle_text".localized() |
|
|
|
let middlenamePlaceholder = "placeholder_enter_receiver_lastname_text".localized() |
|
|
|
let countryPlaceholder = "placeholder_select_country_text".localized() |
|
|
|
let statePlaceholder = "state_placeholder_text".localized() |
|
|
|
let districtPlaceholder = "district_placeholder_text".localized() |
|
|
|
let addressPlaceholder = "placeholder_enter_receiver_address_text".localized() |
|
|
|
let relationPlaceholder = "placeholder_select_relation_text".localized() |
|
|
|
let mobilePlaceholder = "placeholder_enter_reciever_mobile_number_text".localized() |
|
|
|
let transferPlaceholder = "placeholder_select_transfer_reason_text".localized() |
|
|
|
let cityPlaceholder = "placeholder_enter_city_text".localized() |
|
|
|
} |
|
|
|
|
|
|
|
// MARK: IBOutlets |
|
|
|
@IBOutlet weak var firstNameTextField: UITextField! |
|
|
|
@IBOutlet weak var middleNameTextField: UITextField! |
|
|
|
@IBOutlet weak var lastNameTextField: UITextField! |
|
|
|
@IBOutlet weak var countryTextField: UITextField! |
|
|
|
@IBOutlet weak var stateProvinceTextField: UITextField! |
|
|
|
@IBOutlet weak var districtTextField: UITextField! |
|
|
|
@IBOutlet weak var addressTextField: UITextField! |
|
|
|
@IBOutlet weak var relationTextField: UITextField! |
|
|
|
@IBOutlet weak var mobileTextField: UITextField! |
|
|
|
@IBOutlet weak var emailTextField: UITextField! |
|
|
|
@IBOutlet weak var transferReasonTextField: UITextField! |
|
|
|
@IBOutlet weak var cityTextField: UITextField! |
|
|
|
|
|
|
|
@IBOutlet weak var saveButton: UIButton! |
|
|
|
|
|
|
|
@IBOutlet weak var provienceStackView: UIStackView! |
|
|
|
@IBOutlet weak var districtStackView: UIStackView! |
|
|
|
|
|
|
|
|
|
|
|
// titles |
|
|
|
@IBOutlet weak var headerTItleLabel: UILabel! |
|
|
|
@IBOutlet weak var firstNameTitleLabel: UILabel! |
|
|
|
@IBOutlet weak var middleNameTitleLabel: UILabel! |
|
|
|
@IBOutlet weak var lastNametitleLabel: UILabel! |
|
|
|
@IBOutlet weak var countryNameTitleLabel: UILabel! |
|
|
|
@IBOutlet weak var stateTitleLabel: UILabel! |
|
|
|
@IBOutlet weak var districtTitleLabel: UILabel! |
|
|
|
@IBOutlet weak var addressTitleLabel: UILabel! |
|
|
|
@IBOutlet weak var relationTitleLabel: UILabel! |
|
|
|
@IBOutlet weak var mobileTitleLabel: UILabel! |
|
|
|
@IBOutlet weak var transferTitleLabel: UILabel! |
|
|
|
@IBOutlet weak var cityTitleLabel: UILabel! |
|
|
|
|
|
|
|
|
|
|
|
// MARK: Properties |
|
|
|
|
|
|
|
var presenter: EditReciepientModuleInterface? |
|
|
|
var countries: [SendMoneyCountryViewModel]? |
|
|
|
var transferReasons: [SendMoneyTransferReasonViewModel]? |
|
|
|
var relations: [SendMoneyRelationViewModel]? |
|
|
|
var reciepient: EditRecipientRecipientViewModel? { |
|
|
|
didSet { |
|
|
|
self.populateInformations() |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
var selectedCountry: SendMoneyCountryViewModel? { |
|
|
|
didSet { |
|
|
|
self.countryTextField.text = selectedCountry?.name |
|
|
|
let shouldShowProvienceField = (selectedCountry?.proviencesRequired ?? "" ) == "true" |
|
|
|
|
|
|
|
self.configureView(isHidden: !shouldShowProvienceField) |
|
|
|
|
|
|
|
self.reciepient?.countryId = self.selectedCountry?.id |
|
|
|
self.reciepient?.country = self.selectedCountry?.name |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
var selectedProvience: SendMoneyProvienceViewModel? { |
|
|
|
didSet { |
|
|
|
self.stateProvinceTextField.text = selectedProvience?.name |
|
|
|
self.reciepient?.stateId = self.selectedProvience?.id |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
var selectedDistrict: SendMoneyDistrictViewModel? { |
|
|
|
didSet { |
|
|
|
self.districtTextField.text = selectedDistrict?.name |
|
|
|
self.reciepient?.districtId = self.selectedDistrict?.id |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
var selectedRelation: SendMoneyRelationViewModel? { |
|
|
|
didSet { |
|
|
|
self.relationTextField.text = selectedRelation?.title |
|
|
|
self.reciepient?.relationId = self.selectedRelation?.id |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
var selectedTransferReason: SendMoneyTransferReasonViewModel? { |
|
|
|
didSet { |
|
|
|
self.transferReasonTextField.text = selectedTransferReason?.title |
|
|
|
self.reciepient?.reasonId = selectedTransferReason?.id |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
// MARK: VC's Life cycle |
|
|
|
|
|
|
|
override func viewDidLoad() { |
|
|
|
super.viewDidLoad() |
|
|
|
self.setup() |
|
|
|
self.setupDelegates() |
|
|
|
self.setupTargets() |
|
|
|
self.presenter?.viewIsReady() |
|
|
|
} |
|
|
|
|
|
|
|
override func viewWillAppear(_ animated: Bool) { |
|
|
|
super.viewWillAppear(animated) |
|
|
|
self.navigationItem.title = "Edit Receipient" |
|
|
|
} |
|
|
|
|
|
|
|
// MARK: IBActions |
|
|
|
@IBAction func save(_ sender: UIButton) { |
|
|
|
self.view.endEditing(true) |
|
|
|
if let reciepient = self.reciepient { |
|
|
|
self.presenter?.save(model: reciepient) |
|
|
|
} |
|
|
|
} |
|
|
|
// MARK: Other Functions |
|
|
|
|
|
|
|
|
|
|
|
private func setup() { |
|
|
|
// all setup should be done here |
|
|
|
self.setupNavigation() |
|
|
|
self.configureView(isHidden: true) |
|
|
|
self.configureLanguage() |
|
|
|
} |
|
|
|
|
|
|
|
private func configureLanguage() { |
|
|
|
self.headerTItleLabel.text = StringConstants().headerText |
|
|
|
self.firstNameTitleLabel.text = StringConstants().firstNameText |
|
|
|
self.middleNameTitleLabel.text = StringConstants().middleNameText |
|
|
|
self.lastNametitleLabel.text = StringConstants().lastNameText |
|
|
|
self.countryNameTitleLabel.text = StringConstants().countryNameText |
|
|
|
self.stateTitleLabel.text = StringConstants().stateText |
|
|
|
self.districtTitleLabel.text = StringConstants().districtText |
|
|
|
self.addressTitleLabel.text = StringConstants().addressText |
|
|
|
self.relationTitleLabel.text = StringConstants().relationText |
|
|
|
self.mobileTitleLabel.text = StringConstants().mobileText |
|
|
|
self.transferTitleLabel.text = StringConstants().transferText |
|
|
|
cityTitleLabel.text = StringConstants().cityText |
|
|
|
saveButton.setTitle(StringConstants().saveText, for: .normal) |
|
|
|
|
|
|
|
// placeholders |
|
|
|
|
|
|
|
self.firstNameTextField.placeholder = StringConstants().firstnamePlaceholder |
|
|
|
self.middleNameTextField.placeholder = StringConstants().middlenamePlaceholder |
|
|
|
self.lastNameTextField.placeholder = StringConstants().lastnamePlaceholder |
|
|
|
self.countryTextField.placeholder = StringConstants().countryPlaceholder |
|
|
|
self.stateProvinceTextField.placeholder = StringConstants().statePlaceholder |
|
|
|
self.districtTextField.placeholder = StringConstants().districtPlaceholder |
|
|
|
self.addressTextField.placeholder = StringConstants().addressPlaceholder |
|
|
|
self.relationTextField.placeholder = StringConstants().relationPlaceholder |
|
|
|
self.mobileTextField.placeholder = StringConstants().mobilePlaceholder |
|
|
|
self.transferReasonTextField.placeholder = StringConstants().transferPlaceholder |
|
|
|
cityTextField.placeholder = StringConstants().cityPlaceholder |
|
|
|
} |
|
|
|
|
|
|
|
private func configureView(isHidden: Bool) { |
|
|
|
self.provienceStackView.isHidden = isHidden |
|
|
|
self.districtStackView.isHidden = isHidden |
|
|
|
} |
|
|
|
|
|
|
|
private func setupDelegates() { |
|
|
|
self.countryTextField.delegate = self |
|
|
|
self.stateProvinceTextField.delegate = self |
|
|
|
self.districtTextField.delegate = self |
|
|
|
self.relationTextField.delegate = self |
|
|
|
self.transferReasonTextField.delegate = self |
|
|
|
} |
|
|
|
|
|
|
|
private func setupTargets() { |
|
|
|
[firstNameTextField, middleNameTextField, lastNameTextField, countryTextField, stateProvinceTextField, districtTextField, addressTextField, relationTextField, mobileTextField, emailTextField, transferReasonTextField, cityTextField].forEach({ |
|
|
|
$0?.addTarget(self, action: #selector(self.textFieldChanged(sender:)), for: UIControlEvents.editingChanged) |
|
|
|
}) |
|
|
|
} |
|
|
|
|
|
|
|
@objc private func textFieldChanged(sender: UITextField) { |
|
|
|
switch sender { |
|
|
|
case firstNameTextField: |
|
|
|
self.reciepient?.firstName = firstNameTextField.text! |
|
|
|
case middleNameTextField: |
|
|
|
self.reciepient?.middleName = middleNameTextField.text! |
|
|
|
case lastNameTextField: |
|
|
|
self.reciepient?.lastName = lastNameTextField.text! |
|
|
|
case cityTextField: |
|
|
|
self.reciepient?.city = cityTextField.text! |
|
|
|
case addressTextField: |
|
|
|
self.reciepient?.address = addressTextField.text! |
|
|
|
case mobileTextField: |
|
|
|
self.reciepient?.mobileNumber = mobileTextField.text! |
|
|
|
case emailTextField: |
|
|
|
self.reciepient?.email = emailTextField.text! |
|
|
|
default: |
|
|
|
break |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
private func populateInformations() { |
|
|
|
self.firstNameTextField.text = self.reciepient?.firstName |
|
|
|
self.middleNameTextField.text = self.reciepient?.middleName |
|
|
|
self.lastNameTextField.text = self.reciepient?.lastName |
|
|
|
|
|
|
|
let relation = self.relations?.filter({ |
|
|
|
$0.title == self.reciepient?.relation |
|
|
|
}).first?.title |
|
|
|
|
|
|
|
self.relationTextField.text = relation |
|
|
|
self.mobileTextField.text = self.reciepient?.mobileNumber |
|
|
|
self.emailTextField.text = self.reciepient?.email |
|
|
|
|
|
|
|
let transferReason = self.transferReasons?.filter({ |
|
|
|
$0.title == self.reciepient?.reason |
|
|
|
}).first?.title |
|
|
|
|
|
|
|
self.transferReasonTextField.text = transferReason |
|
|
|
|
|
|
|
self.cityTextField.text = reciepient?.city |
|
|
|
self.addressTextField.text = reciepient?.address |
|
|
|
|
|
|
|
|
|
|
|
// For sync country in reciepient model |
|
|
|
self.selectedCountry = self.countries?.filter{ |
|
|
|
$0.name == self.reciepient?.country |
|
|
|
}.first |
|
|
|
|
|
|
|
// For sync provience in reciepient model |
|
|
|
self.selectedProvience = self.selectedCountry?.proviences?.filter{ |
|
|
|
$0.id == self.reciepient?.stateId |
|
|
|
}.first |
|
|
|
|
|
|
|
// For sync district in reciepient model |
|
|
|
self.selectedDistrict = self.selectedProvience?.districts?.filter{ |
|
|
|
$0.id == self.reciepient?.districtId |
|
|
|
}.first |
|
|
|
} |
|
|
|
|
|
|
|
private func setupNavigation() { |
|
|
|
self.navigationItem.backBarButtonItem?.image = |
|
|
|
#imageLiteral(resourceName: "backIconBlack") |
|
|
|
self.navigationController?.navigationBar.tintColor = UIColor.black |
|
|
|
} |
|
|
|
|
|
|
|
private func showCountryPickerview() { |
|
|
|
let viewcontroller = UIStoryboard.init(name: "CountryPicker", bundle: nil).instantiateViewController(withIdentifier: "CountryPickerViewController") as! CountryPickerViewController |
|
|
|
viewcontroller.data = self.countries ?? [] |
|
|
|
viewcontroller.doneAction = self.countrySelected |
|
|
|
viewcontroller.defaultSelectedData = [self.selectedCountry] |
|
|
|
viewcontroller.type = PickerTitle.country |
|
|
|
self.present(viewcontroller, animated: true, completion: nil) |
|
|
|
} |
|
|
|
|
|
|
|
private func getPickerViewController()-> ItemsPickerViewController { |
|
|
|
return UIStoryboard.init(name: "ItemsPicker", bundle: nil).instantiateViewController(withIdentifier: "ItemsPickerViewController") as! ItemsPickerViewController |
|
|
|
} |
|
|
|
|
|
|
|
private func showProviencePickerview() { |
|
|
|
let viewcontroller = self.getPickerViewController() |
|
|
|
let proviences = self.selectedCountry?.proviences ?? [] |
|
|
|
let names = proviences.compactMap({$0.name}) |
|
|
|
viewcontroller.data = names |
|
|
|
viewcontroller.type = PickerTitle.state |
|
|
|
viewcontroller.doneAction = self.provienceSelected |
|
|
|
viewcontroller.defaultSelectedData = [self.selectedProvience?.name ?? ""] |
|
|
|
self.present(viewcontroller, animated: true, completion: nil) |
|
|
|
} |
|
|
|
|
|
|
|
private func showDistrictPickerview() { |
|
|
|
let viewcontroller = self.getPickerViewController() |
|
|
|
let districts = self.selectedProvience?.districts ?? [] |
|
|
|
let names = districts.compactMap({$0.name}) |
|
|
|
viewcontroller.data = names |
|
|
|
viewcontroller.type = PickerTitle.district |
|
|
|
viewcontroller.doneAction = self.districtSelected |
|
|
|
viewcontroller.defaultSelectedData = [self.selectedDistrict?.name ?? ""] |
|
|
|
self.present(viewcontroller, animated: true, completion: nil) |
|
|
|
} |
|
|
|
|
|
|
|
private func showRelationPickerView() { |
|
|
|
let viewcontroller = self.getPickerViewController() |
|
|
|
let relations = self.relations ?? [] |
|
|
|
let names = relations.compactMap({$0.title}) |
|
|
|
viewcontroller.data = names |
|
|
|
viewcontroller.type = PickerTitle.relation |
|
|
|
viewcontroller.doneAction = self.relationSelected |
|
|
|
viewcontroller.defaultSelectedData = [self.selectedRelation?.title ?? ""] |
|
|
|
self.present(viewcontroller, animated: true, completion: nil) |
|
|
|
} |
|
|
|
|
|
|
|
private func showTransferReasonPickerView() { |
|
|
|
let viewcontroller = self.getPickerViewController() |
|
|
|
let transferReasons = self.transferReasons ?? [] |
|
|
|
let names = transferReasons.compactMap({$0.title}) |
|
|
|
viewcontroller.data = names |
|
|
|
viewcontroller.type = PickerTitle.transferReasons |
|
|
|
viewcontroller.doneAction = self.transferReasonSelected |
|
|
|
viewcontroller.defaultSelectedData = [self.selectedTransferReason?.title ?? ""] |
|
|
|
self.present(viewcontroller, animated: true, completion: nil) |
|
|
|
} |
|
|
|
|
|
|
|
func transferReasonSelected(reasons: [String]) { |
|
|
|
let _reason = self.transferReasons?.filter({($0.title ?? "") == (reasons.first ?? "") }).first |
|
|
|
self.selectedTransferReason = _reason |
|
|
|
} |
|
|
|
|
|
|
|
func relationSelected(relations: [String]) { |
|
|
|
let _relations = self.relations?.filter({($0.title ?? "") == (relations.first ?? "") }).first |
|
|
|
self.selectedRelation = _relations |
|
|
|
} |
|
|
|
|
|
|
|
func districtSelected(district: [String]) { |
|
|
|
let _district = (self.selectedProvience?.districts ?? []).filter({ |
|
|
|
( $0.name ?? "" ) == ( district.first ?? "" ) |
|
|
|
}).first |
|
|
|
self.selectedDistrict = _district |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
func provienceSelected(provience: [String]) { |
|
|
|
let _provience = (self.selectedCountry?.proviences ?? []).filter({ |
|
|
|
($0.name ?? "") == (provience.first ?? "") |
|
|
|
}) |
|
|
|
self.selectedProvience = _provience.first |
|
|
|
// according to selected province, clear district |
|
|
|
self.selectedDistrict = nil |
|
|
|
} |
|
|
|
|
|
|
|
func countrySelected(models: [SendMoneyCountryViewModel]) { |
|
|
|
self.selectedCountry = models.first |
|
|
|
} |
|
|
|
|
|
|
|
func showLoading() { |
|
|
|
self.showProgressHud() |
|
|
|
} |
|
|
|
|
|
|
|
func hideLoading() { |
|
|
|
self.hideProgressHud() |
|
|
|
} |
|
|
|
|
|
|
|
func show(error: String) { |
|
|
|
self.alert(message: error) |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
// MARK: EditReciepientViewInterface |
|
|
|
extension EditReciepientViewController: EditReciepientViewInterface { |
|
|
|
func show(countries: [SendMoneyCountryViewModel]) { |
|
|
|
self.countries = countries |
|
|
|
} |
|
|
|
|
|
|
|
func show(transferReasons: [SendMoneyTransferReasonViewModel]) { |
|
|
|
self.transferReasons = transferReasons |
|
|
|
} |
|
|
|
|
|
|
|
func show(relations: [SendMoneyRelationViewModel]) { |
|
|
|
self.relations = relations |
|
|
|
} |
|
|
|
|
|
|
|
func show(recipient: EditRecipientRecipientViewModel) { |
|
|
|
self.reciepient = recipient |
|
|
|
} |
|
|
|
func show(countries: [SendMoneyCountryViewModel]) { |
|
|
|
self.countries = countries |
|
|
|
} |
|
|
|
|
|
|
|
func show(transferReasons: [SendMoneyTransferReasonViewModel]) { |
|
|
|
self.transferReasons = transferReasons |
|
|
|
} |
|
|
|
|
|
|
|
func show(relations: [SendMoneyRelationViewModel]) { |
|
|
|
self.relations = relations |
|
|
|
} |
|
|
|
|
|
|
|
func show(recipient: EditRecipientRecipientViewModel) { |
|
|
|
self.reciepient = recipient |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
extension EditReciepientViewController: UITextFieldDelegate { |
|
|
|
func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool { |
|
|
|
switch textField { |
|
|
|
case countryTextField: |
|
|
|
showCountryPickerview() |
|
|
|
return false |
|
|
|
case stateProvinceTextField: |
|
|
|
self.showProviencePickerview() |
|
|
|
return false |
|
|
|
case districtTextField: |
|
|
|
self.showDistrictPickerview() |
|
|
|
return false |
|
|
|
case relationTextField: |
|
|
|
self.showRelationPickerView() |
|
|
|
return false |
|
|
|
case transferReasonTextField: |
|
|
|
self.showTransferReasonPickerView() |
|
|
|
return false |
|
|
|
default: |
|
|
|
return true |
|
|
|
} |
|
|
|
} |
|
|
|
func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool { |
|
|
|
switch textField { |
|
|
|
case countryTextField: |
|
|
|
showCountryPickerview() |
|
|
|
return false |
|
|
|
case stateProvinceTextField: |
|
|
|
self.showProviencePickerview() |
|
|
|
return false |
|
|
|
case districtTextField: |
|
|
|
self.showDistrictPickerview() |
|
|
|
return false |
|
|
|
case relationTextField: |
|
|
|
self.showRelationPickerView() |
|
|
|
return false |
|
|
|
case transferReasonTextField: |
|
|
|
self.showTransferReasonPickerView() |
|
|
|
return false |
|
|
|
default: |
|
|
|
return true |
|
|
|
} |
|
|
|
} |
|
|
|
} |