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

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