// // P2PControllerCard.swift // Wallet // // Created by Igor on 15.12.2020. // Copyright © 2020 AM. All rights reserved. // import UIKit class CardsControllerCard: UIViewController { @IBOutlet private weak var numberTxtFld: CommonTextField! @IBOutlet private weak var countryView: CardView! @IBOutlet private weak var bankView: CardView! @IBOutlet private weak var defaultSwitch: UISwitch! @IBOutlet private weak var submitBtn: UIButton! var service = Cards.Service.Card() var completion: ((Cards.Model) -> Void)? override func viewDidLoad() { super.viewDidLoad() title = service.number.isEmpty ? L10n.Cards.Card.New.title : L10n.Cards.Card.Edit.title navigationItem.leftBarButtonItem = .pop(self) submitBtn.lzTitle = service.number.isEmpty ? L10n.Cards.Card.New.submit : L10n.Cards.Card.Edit.submit numberTxtFld.value = service.number numberTxtFld.keyboardType = .numberPad countryView.imageView.image = Asset.p2pCountry.image countryView.action = { [weak self] in guard let service = self?.service else { return } self?.view.endEditing(true) let vc = FilterSelectViewController() vc.selectionType = .radio vc.title = L10n.P2p.Order.Country.topTitle vc.modelsArray = service.countries .map({ FilterItem(id: $0.id, title: $0.name, subtitle: nil) }) service.country.flatMap { vc.selectedModels.insert(FilterItem(id: $0.id, title: $0.title)) } vc.applyButtonAction = { service.country = $0.map({ (id: $0.id, title: $0.title) }).first self?.navigationController?.popViewController(animated: true) } self?.navigationController?.pushViewController(vc, animated: true) } bankView.imageView.image = Asset.p2pBank.image bankView.action = { [weak self] in guard let service = self?.service else { return } self?.view.endEditing(true) let vc = FilterSelectViewController() vc.selectionType = .radio vc.title = L10n.P2p.Order.Bank.topTitle vc.modelsArray = service.banks .map({ FilterItem(id: $0.id, title: $0.name, subtitle: nil) }) service.bank.flatMap { vc.selectedModels.insert(FilterItem(id: $0.id, title: $0.title)) } vc.applyButtonAction = { service.bank = $0.map({ (id: $0.id, title: $0.title) }).first self?.navigationController?.popViewController(animated: true) } self?.navigationController?.pushViewController(vc, animated: true) } defaultSwitch.isOn = service.isDefault defaultSwitch.isEnabled = service.isDefaultEditable service.didUpdate = { [weak self] in self?.update() } service.willReload = { [weak self] in self?.numberTxtFld.isLoading = true } service.didReload = { [weak self] in self?.numberTxtFld.isLoading = false } update() } override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) Accounts().isLocked = true } override func viewWillDisappear(_ animated: Bool) { super.viewWillDisappear(animated) Accounts().isLocked = false } override func viewDidLayoutSubviews() { super.viewDidLayoutSubviews() update() } private func update() { for view in [countryView, bankView] { view?.makeShadowStyle() } numberTxtFld.value = service.number countryView.isUserInteractionEnabled = service.canEditCountry countryView.rightImageView.image = service.canEditCountry ? Asset.commonMenuHorizontal.image : UIImage() if let country = service.country { countryView.descriptionLabel.isHidden = false countryView.titleLabel.lzText = L10n.P2p.Order.Country.topTitle countryView.descriptionLabel.lzText = country.title } else { countryView.titleLabel.lzText = L10n.P2p.Order.Country.placeholder countryView.descriptionLabel.isHidden = true } bankView.isUserInteractionEnabled = service.canEditBank bankView.rightImageView.image = service.canEditBank ? Asset.commonMenuHorizontal.image : UIImage() if let bank = service.bank { bankView.descriptionLabel.isHidden = false bankView.titleLabel.lzText = L10n.P2p.Order.Bank.topTitle bankView.descriptionLabel.lzText = bank.title } else { bankView.titleLabel.lzText = L10n.P2p.Order.Bank.placeholder bankView.descriptionLabel.isHidden = true } submitBtn.isEnabled = service.isValid } @IBAction func onSumbit(_: AnyObject?) { service.isDefault = defaultSwitch.isOn service.submit() completion?(service.card) navigationController?.popViewController(animated: true) } @IBAction func onScanCard(_: AnyObject?) { let ctrl = StoryboardScene.Cards.scanCard.instantiate() ctrl.navigationItem.leftBarButtonItem = .back { [weak self] in DispatchQueue.main.async { self?.dismiss(animated: true) } } ctrl.navigationItem.title = L10n.Cards.Card.recognize ctrl.delegate = self let navCtrl = UINavigationController(rootViewController: ctrl) navCtrl.modalPresentationStyle = .fullScreen present(navCtrl, animated: true) } } extension CardsControllerCard: CommonTextFieldDelegate { func textFieldDidChange(_ textField: CommonTextField) { switch textField { case numberTxtFld: service.update(number: textField.value) default: break } } } extension CardsControllerCard: CardsScanViewControllerDelegate { func creditCardScannerViewController(_ viewController: CardsScanViewController, didErrorWith error: CreditCardScannerError) { } func creditCardScannerViewController(_ viewController: CardsScanViewController, didFinishWith card: CreditCard) { if let number = card.number { service.update(number: number) } } }