Files

172 lines
6.2 KiB
Swift

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