|
@ -11,6 +11,12 @@ import RxSwift |
|
|
import RxCocoa |
|
|
import RxCocoa |
|
|
|
|
|
|
|
|
import SwiftyBootpay |
|
|
import SwiftyBootpay |
|
|
|
|
|
import IQKeyboardManagerSwift |
|
|
|
|
|
|
|
|
|
|
|
enum RechargePaymentMode { |
|
|
|
|
|
case card |
|
|
|
|
|
case wallet |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
protocol RechargePayementDelegate: class { |
|
|
protocol RechargePayementDelegate: class { |
|
|
func rechargePayment(_ viewController: RechargePaymentViewController, didComplete data: CreditCardReceipt) |
|
|
func rechargePayment(_ viewController: RechargePaymentViewController, didComplete data: CreditCardReceipt) |
|
@ -27,7 +33,7 @@ class RechargePaymentViewController: UIViewController { |
|
|
private lazy var bootpayController = BootpayController() |
|
|
private lazy var bootpayController = BootpayController() |
|
|
private lazy var availableBalance = BehaviorSubject<String>(value: "0") |
|
|
private lazy var availableBalance = BehaviorSubject<String>(value: "0") |
|
|
private lazy var rechargeSuccess = PublishSubject<CreditCardReceipt>() |
|
|
private lazy var rechargeSuccess = PublishSubject<CreditCardReceipt>() |
|
|
|
|
|
|
|
|
|
|
|
private lazy var selectedPaymentMode = PublishSubject<RechargePaymentMode>() |
|
|
private var isFirst = true |
|
|
private var isFirst = true |
|
|
// MARK: Computed Properties |
|
|
// MARK: Computed Properties |
|
|
|
|
|
|
|
@ -39,35 +45,47 @@ class RechargePaymentViewController: UIViewController { |
|
|
@IBOutlet private weak var useBalanceTextField: UITextField! |
|
|
@IBOutlet private weak var useBalanceTextField: UITextField! |
|
|
@IBOutlet private weak var finalPaymentLabel: UILabel! |
|
|
@IBOutlet private weak var finalPaymentLabel: UILabel! |
|
|
|
|
|
|
|
|
@IBOutlet private weak var rechargeCardContainerView: UIView! |
|
|
|
|
|
@IBOutlet private weak var rechargeCardButton: UIButton! |
|
|
|
|
|
|
|
|
|
|
|
@IBOutlet private weak var rechargeButtonContainerView: UIView! |
|
|
@IBOutlet private weak var rechargeButtonContainerView: UIView! |
|
|
@IBOutlet private weak var rechargeButton: UIButton! |
|
|
@IBOutlet private weak var rechargeButton: UIButton! |
|
|
|
|
|
@IBOutlet private weak var keybardHeight: NSLayoutConstraint! |
|
|
|
|
|
|
|
|
// MARK: VC's Life cycle |
|
|
// MARK: VC's Life cycle |
|
|
override func viewDidLoad() { |
|
|
override func viewDidLoad() { |
|
|
super.viewDidLoad() |
|
|
super.viewDidLoad() |
|
|
setup() |
|
|
setup() |
|
|
|
|
|
|
|
|
|
|
|
IQKeyboardManager.shared.enable = false |
|
|
|
|
|
IQKeyboardManager.shared.shouldResignOnTouchOutside = false |
|
|
|
|
|
useBalanceTextField.keyboardToolbar.isHidden = true |
|
|
|
|
|
|
|
|
|
|
|
NotificationCenter.default.addObserver( |
|
|
|
|
|
self, |
|
|
|
|
|
selector: #selector(keyboardWillShow), |
|
|
|
|
|
name: UIResponder.keyboardWillShowNotification, |
|
|
|
|
|
object: nil |
|
|
|
|
|
) |
|
|
|
|
|
|
|
|
|
|
|
NotificationCenter.default.addObserver( |
|
|
|
|
|
self, |
|
|
|
|
|
selector: #selector(keyboardWillHide), |
|
|
|
|
|
name: UIResponder.keyboardWillHideNotification, |
|
|
|
|
|
object: nil |
|
|
|
|
|
) |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
override func viewWillAppear(_ animated: Bool) { |
|
|
override func viewWillAppear(_ animated: Bool) { |
|
|
super.viewWillAppear(animated) |
|
|
super.viewWillAppear(animated) |
|
|
self.title = "Recharge Payment" |
|
|
self.title = "Recharge Payment" |
|
|
|
|
|
|
|
|
mainView.bottomToOrigin { [weak self] in |
|
|
|
|
|
guard let `self` = self else { return } |
|
|
|
|
|
|
|
|
|
|
|
if self.rechargeButtonContainerView.isHidden && self.rechargeCardContainerView.isHidden { |
|
|
|
|
|
self.useBalanceTextField.becomeFirstResponder() |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
mainView.bottomToOrigin() |
|
|
|
|
|
useBalanceTextField.becomeFirstResponder() |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
override func viewWillDisappear(_ animated: Bool) { |
|
|
override func viewWillDisappear(_ animated: Bool) { |
|
|
super.viewWillDisappear(animated) |
|
|
super.viewWillDisappear(animated) |
|
|
self.title = "" |
|
|
self.title = "" |
|
|
view.endEditing(true) |
|
|
view.endEditing(true) |
|
|
|
|
|
IQKeyboardManager.shared.enable = true |
|
|
|
|
|
IQKeyboardManager.shared.shouldResignOnTouchOutside = true |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
override func viewDidAppear(_ animated: Bool) { |
|
|
override func viewDidAppear(_ animated: Bool) { |
|
@ -94,11 +112,7 @@ extension RechargePaymentViewController { |
|
|
mainView.layer.cornerRadius = 5 |
|
|
mainView.layer.cornerRadius = 5 |
|
|
|
|
|
|
|
|
availableBalance.onNext(GMEDB.shared.user.string(.availableBalance) ?? "0") |
|
|
availableBalance.onNext(GMEDB.shared.user.string(.availableBalance) ?? "0") |
|
|
self.rechargeButtonContainerView.isHidden = true |
|
|
|
|
|
self.rechargeCardContainerView.isHidden = true |
|
|
|
|
|
|
|
|
|
|
|
rechargeButton.layer.cornerRadius = 5 |
|
|
rechargeButton.layer.cornerRadius = 5 |
|
|
rechargeCardButton.layer.cornerRadius = 5 |
|
|
|
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
private func setBinding() { |
|
|
private func setBinding() { |
|
@ -133,8 +147,14 @@ extension RechargePaymentViewController { |
|
|
.disposed(by: disposeBag) |
|
|
.disposed(by: disposeBag) |
|
|
|
|
|
|
|
|
output.finalPaymentAmount |
|
|
output.finalPaymentAmount |
|
|
.map { "Pay by debit/credit card ₩ \(Utility.getCommaSeperatedString(numberString: $0) ?? "")" } |
|
|
|
|
|
.drive(rechargeCardButton.rx.title(for: .normal)) |
|
|
|
|
|
|
|
|
.map { |
|
|
|
|
|
if $0 == "0" { |
|
|
|
|
|
return "Recharge" |
|
|
|
|
|
} else { |
|
|
|
|
|
return "Pay ₩ \(Utility.getCommaSeperatedString(numberString: $0) ?? "")" |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
.drive(rechargeButton.rx.title(for: .normal)) |
|
|
.disposed(by: disposeBag) |
|
|
.disposed(by: disposeBag) |
|
|
|
|
|
|
|
|
output.isAvailableUseBalance |
|
|
output.isAvailableUseBalance |
|
@ -145,16 +165,13 @@ extension RechargePaymentViewController { |
|
|
}) |
|
|
}) |
|
|
.disposed(by: disposeBag) |
|
|
.disposed(by: disposeBag) |
|
|
|
|
|
|
|
|
rechargeCardButton.rx.tap.bind { [weak self] in |
|
|
|
|
|
|
|
|
rechargeButton.rx.tap.bind { [weak self] in |
|
|
|
|
|
//TODO: Biometric & Secure Keypad |
|
|
guard let `self` = self else {return} |
|
|
guard let `self` = self else {return} |
|
|
let vc = BootPayViewController(dataSource: self, delegate: self) |
|
|
let vc = BootPayViewController(dataSource: self, delegate: self) |
|
|
self.present(vc, animated: true) |
|
|
self.present(vc, animated: true) |
|
|
}.disposed(by: disposeBag) |
|
|
}.disposed(by: disposeBag) |
|
|
|
|
|
|
|
|
rechargeButton.rx.tap.bind { [weak self] in |
|
|
|
|
|
//TODO: Biometric & Secure Keypad |
|
|
|
|
|
}.disposed(by: disposeBag) |
|
|
|
|
|
|
|
|
|
|
|
availableBalance.asDriverOnErrorJustComplete() |
|
|
availableBalance.asDriverOnErrorJustComplete() |
|
|
.drive(balanceLabel.rx.text) |
|
|
.drive(balanceLabel.rx.text) |
|
|
.disposed(by: disposeBag) |
|
|
.disposed(by: disposeBag) |
|
@ -172,32 +189,38 @@ extension RechargePaymentViewController { |
|
|
guard let `self` = self else { return } |
|
|
guard let `self` = self else { return } |
|
|
self.useBalanceTextField.text = "0" |
|
|
self.useBalanceTextField.text = "0" |
|
|
self.useBalanceTextField.sendActions(for: .editingChanged) |
|
|
self.useBalanceTextField.sendActions(for: .editingChanged) |
|
|
self.rechargeButtonContainerView.animateHidden(isHidden: true) { |
|
|
|
|
|
self.rechargeCardContainerView.animateHidden(isHidden: true) |
|
|
|
|
|
} |
|
|
|
|
|
}.disposed(by: disposeBag) |
|
|
|
|
|
|
|
|
|
|
|
useBalanceTextField.rx.controlEvent(.editingDidEnd) |
|
|
|
|
|
.bind { [weak self] in |
|
|
|
|
|
guard let `self` = self else { return } |
|
|
|
|
|
|
|
|
|
|
|
if self.finalPaymentLabel.text != "0" { |
|
|
|
|
|
self.rechargeCardContainerView.animateHidden(isHidden: false) |
|
|
|
|
|
} else { |
|
|
|
|
|
self.rechargeButtonContainerView.animateHidden(isHidden: false) |
|
|
|
|
|
} |
|
|
|
|
|
}.disposed(by: disposeBag) |
|
|
}.disposed(by: disposeBag) |
|
|
|
|
|
|
|
|
let tapGestureRecognizer = UITapGestureRecognizer() |
|
|
let tapGestureRecognizer = UITapGestureRecognizer() |
|
|
tapGestureRecognizer.delegate = self |
|
|
tapGestureRecognizer.delegate = self |
|
|
tapGestureRecognizer.rx.event.asDriver() |
|
|
tapGestureRecognizer.rx.event.asDriver() |
|
|
.drive(onNext: {[weak self] _ in |
|
|
.drive(onNext: {[weak self] _ in |
|
|
self?.dismiss(animated: true) |
|
|
|
|
|
|
|
|
self?.touchClose(UIButton()) |
|
|
}) |
|
|
}) |
|
|
.disposed(by: disposeBag) |
|
|
.disposed(by: disposeBag) |
|
|
|
|
|
|
|
|
self.view.addGestureRecognizer(tapGestureRecognizer) |
|
|
self.view.addGestureRecognizer(tapGestureRecognizer) |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@objc func keyboardWillShow(_ notification: Notification) { |
|
|
|
|
|
if let keyboardFrame = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue { |
|
|
|
|
|
let keyboardRectangle = keyboardFrame.cgRectValue |
|
|
|
|
|
let keyboardHeight = keyboardRectangle.height |
|
|
|
|
|
|
|
|
|
|
|
print("keyboardRectangle: \(keyboardRectangle)") |
|
|
|
|
|
print("keyboardHeight: \(keyboardHeight)") |
|
|
|
|
|
|
|
|
|
|
|
UIView.animate(withDuration: 0.5) { [weak self] in |
|
|
|
|
|
self?.keybardHeight.constant = keyboardHeight |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@objc func keyboardWillHide(_ notification: NSNotification) { |
|
|
|
|
|
UIView.animate(withDuration: 0.5) { [weak self] in |
|
|
|
|
|
self?.keybardHeight.constant = 10 |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
// MARK: BootPayDataSource |
|
|
// MARK: BootPayDataSource |
|
|