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.
287 lines
7.8 KiB
287 lines
7.8 KiB
//
|
|
// AutoDebitViewController.swift
|
|
// GME Remit
|
|
//
|
|
// Created by Mac on 12/19/18.
|
|
//Copyright © 2018 Gobal Money Express Co. Ltd. All rights reserved.
|
|
//
|
|
|
|
import UIKit
|
|
import IQKeyboardManagerSwift
|
|
|
|
class AutoDebitViewController: UIViewController {
|
|
|
|
struct MultiLanguages {
|
|
let navigationTitle = "auto_debit_title_text".localized()
|
|
let languageUnavailableError = "no_lanugages_available_text".localized()
|
|
let pickerTitle = "select_language_text".localized()
|
|
let cancelText = "cancel_text".localized()
|
|
let deleteTitleText = "auto_debit_delete_confirm_description".localized()
|
|
let confirmationText = "are_you_sure_text".localized()
|
|
let deleteText = "delete_text".localized()
|
|
let editText = "Edit".localized()
|
|
let tokenRenewalText = "token_renewal_text".localized()
|
|
let swipeInfoText = "swift_to_delete_account_text".localized()
|
|
}
|
|
|
|
// MARK: IBOutlets
|
|
@IBOutlet private weak var tableView: UITableView!
|
|
@IBOutlet private weak var viewAddAccount: UIView!
|
|
@IBOutlet private weak var labelSwipeInfo: UILabel!
|
|
@IBOutlet private weak var tokenRenewalLabel: UILabel!
|
|
|
|
// MARK: properties
|
|
var presenter: AutoDebitModuleInterface?
|
|
|
|
var languages: [String] = ["--- Select Language ---"]
|
|
lazy var languageTextField = UITextField(frame: .zero)
|
|
|
|
var selectedLanguage: KftcLanguage?
|
|
|
|
private lazy var refreshControl = UIRefreshControl()
|
|
|
|
private var kftcDetail: KFTCModel? {
|
|
didSet {
|
|
accounts = kftcDetail?.model
|
|
tableView.reloadData()
|
|
|
|
if languages.count < 2 {
|
|
let originalLanguages = kftcDetail?.languages?.map { $0.value ?? ""}
|
|
languages.append(contentsOf: originalLanguages ?? [])
|
|
}
|
|
}
|
|
}
|
|
|
|
private var accounts: [Account]? {
|
|
didSet {
|
|
guard
|
|
let account = accounts,
|
|
!account.isEmpty
|
|
else {
|
|
labelSwipeInfo.isHidden = true
|
|
viewAddAccount.isHidden = true
|
|
return
|
|
}
|
|
|
|
tableView.isHidden = false
|
|
labelSwipeInfo.isHidden = false
|
|
|
|
labelSwipeInfo.isHidden = false
|
|
viewAddAccount.isHidden = false
|
|
}
|
|
}
|
|
|
|
private let multiLanguages = MultiLanguages()
|
|
|
|
// MARK: Life Cycle
|
|
|
|
override func viewWillAppear(_ animated: Bool) {
|
|
super.viewWillAppear(animated)
|
|
|
|
setupNormalNavigation()
|
|
navigationItem.title = multiLanguages.navigationTitle
|
|
|
|
presenter?.fetchKFTCBankAccountList()
|
|
}
|
|
|
|
override func viewDidLoad() {
|
|
super.viewDidLoad()
|
|
|
|
setupDelegates()
|
|
|
|
viewAddAccount.layer.cornerRadius = 5
|
|
|
|
if self.presentingViewController == nil {
|
|
self.navigationItem.leftBarButtonItem = nil
|
|
}
|
|
}
|
|
|
|
override func viewWillDisappear(_ animated: Bool) {
|
|
super.viewWillDisappear(animated)
|
|
navigationItem.title = ""
|
|
|
|
view.endEditing(true)
|
|
}
|
|
|
|
// MARK: IBAction
|
|
@IBAction func touchAddAccountCellButton(_ sender: UIButton) {
|
|
presenter?.goAddAccount(model: kftcDetail)
|
|
}
|
|
|
|
private func refreshAccount() {
|
|
alertWithOkCancel(
|
|
type: .normal,
|
|
message: "token_renewal_confirm_text".localized(),
|
|
title: "token_renewal_text".localized(),
|
|
okTitle: "yes_text".localized(),
|
|
cancelTitle: "no_text".localized(),
|
|
okAction: {
|
|
let languagePickerView = UIPickerView()
|
|
languagePickerView.delegate = self
|
|
languagePickerView.dataSource = self
|
|
languagePickerView.backgroundColor = .white
|
|
|
|
self.languageTextField.inputView = languagePickerView
|
|
self.languageTextField.placeholder = "token_renewal_placeholder_text".localized()
|
|
self.languageTextField.becomeFirstResponder()
|
|
|
|
self.languageTextField
|
|
.keyboardToolbar
|
|
.doneBarButton
|
|
.setTarget(self, action: #selector(self.editingDidEnd(_:)))
|
|
},
|
|
cancelAction: nil
|
|
)
|
|
}
|
|
|
|
@IBAction func touchClose(_ sender: UIBarButtonItem) {
|
|
// GMEDB.shared.user.set("", .redirectTo)
|
|
dismiss(animated: true, completion: nil)
|
|
}
|
|
|
|
@objc func editingDidEnd(_ textField: UITextField) {
|
|
presenter?.goRefreshToken(selectedLanguage: selectedLanguage)
|
|
}
|
|
|
|
@IBAction
|
|
private func addNewAccount(_ sender: UITapGestureRecognizer) {
|
|
refreshAccount()
|
|
}
|
|
|
|
// MARK: other functions
|
|
|
|
private func setupDelegates() {
|
|
tableView.delegate = self
|
|
tableView.dataSource = self
|
|
|
|
configureText()
|
|
view.addSubview(languageTextField)
|
|
}
|
|
|
|
private func configureText() {
|
|
tokenRenewalLabel.text = multiLanguages.tokenRenewalText
|
|
labelSwipeInfo.text = multiLanguages.swipeInfoText
|
|
}
|
|
}
|
|
|
|
// MARK: - UITableViewDataSource
|
|
extension AutoDebitViewController: UITableViewDataSource {
|
|
func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat {
|
|
return 82
|
|
}
|
|
|
|
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
|
|
return accounts?.count ?? 0
|
|
}
|
|
|
|
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
|
|
guard let cell = tableView.dequeueReusableCell(
|
|
withIdentifier: "AutoDebitTableViewCell",
|
|
for: indexPath
|
|
) as? AutoDebitTableViewCell else { return UITableViewCell() }
|
|
|
|
cell.setup(with: accounts?.elementAt(index: indexPath.row))
|
|
|
|
return cell
|
|
}
|
|
}
|
|
|
|
// MARK: - UITableViewDelegate
|
|
|
|
extension AutoDebitViewController: UITableViewDelegate {
|
|
func tableView(
|
|
_ tableView: UITableView,
|
|
editActionsForRowAt indexPath: IndexPath
|
|
) -> [UITableViewRowAction]? {
|
|
let delete = UITableViewRowAction(
|
|
style: .destructive,
|
|
title: multiLanguages.deleteText
|
|
) { [weak self] (_, indexPath) in
|
|
guard let `self` = self else { return }
|
|
|
|
self.alertWithOkCancel(
|
|
message: self.multiLanguages.deleteTitleText,
|
|
title: self.multiLanguages.confirmationText,
|
|
okTitle: self.multiLanguages.deleteText,
|
|
okAction: { [weak self] in
|
|
guard let `self` = self else { return }
|
|
|
|
let email = GMEDB.shared.user.string(.userId) ?? ""
|
|
|
|
guard let account = self.accounts?.elementAt(index: indexPath.row) else { return }
|
|
|
|
self.presenter?.deleteKFTCBankAccount(of: email, with: account)
|
|
}
|
|
)
|
|
}
|
|
|
|
delete.backgroundColor = UIColor.init(hex: "DE333C")
|
|
return [delete]
|
|
}
|
|
}
|
|
|
|
// MARK: - AutoDebitViewInterface
|
|
|
|
extension AutoDebitViewController: AutoDebitViewInterface {
|
|
func didFailRefreshToken(with error: Error) {
|
|
alert(type: .error, message: error.localizedDescription)
|
|
}
|
|
|
|
func didDeleteAccount() {
|
|
presenter?.fetchKFTCBankAccountList()
|
|
}
|
|
|
|
func didFailDeleteAccount(with error: Error) {
|
|
alert(
|
|
type: .error,
|
|
message: error.localizedDescription,
|
|
title: "Failed Delete",
|
|
okAction: nil
|
|
)
|
|
}
|
|
|
|
func startLoading() {
|
|
showProgressHud()
|
|
}
|
|
|
|
func endLoading() {
|
|
hideProgressHud()
|
|
}
|
|
|
|
func setModel(with model: KFTCModel?) {
|
|
kftcDetail = model
|
|
}
|
|
|
|
func didFailSetModel(with error: Error) {
|
|
alert(
|
|
type: .error,
|
|
message: error.localizedDescription,
|
|
title: "Failed Fetch KFTC Account List",
|
|
okAction: nil
|
|
)
|
|
}
|
|
}
|
|
|
|
// MARK: - UIPickerViewDelegate
|
|
extension AutoDebitViewController: UIPickerViewDelegate {
|
|
func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
|
|
return languages[row]
|
|
}
|
|
|
|
func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
|
|
if row > 0 {
|
|
selectedLanguage = kftcDetail?.languages?[row - 1]
|
|
}
|
|
}
|
|
}
|
|
|
|
// MARK: - UIPickerViewDataSource
|
|
extension AutoDebitViewController: UIPickerViewDataSource {
|
|
func numberOfComponents(in pickerView: UIPickerView) -> Int {
|
|
return 1
|
|
}
|
|
|
|
func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
|
|
return languages.count
|
|
}
|
|
}
|