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