// // WalletStatementViewController.swift // GMERemittance // // Created by gme_2 on 03/10/2018. //Copyright © 2018 Gobal Money Express Co. Ltd. All rights reserved. // import UIKit enum WalletStatementType {} class WalletStatementViewController: UIViewController { struct StringConstants { let navigationTitle = "wallet_statement_title_text".localized() let emptyMessage = "no_statement_found_text".localized() } // MARK: IBOutlets @IBOutlet weak var tableView: UITableView! @IBOutlet weak var dateRangeLabelHeightConstraint: NSLayoutConstraint! @IBOutlet weak var fromDateLabel: UILabel! @IBOutlet weak var toDateLabel: UILabel! @IBOutlet weak var emptyLabel: UILabel! // MARK: Properties var presenter: WalletStatementModuleInterface? var from: String? var to: String? var statements: [WalletStatement] = [] { didSet { self.emptyLabel.isHidden = !statements.isEmpty self.tableView.reloadData() guard let fromDate = from, let toDate = to else { self.dateRangeLabelHeightConstraint.constant = 0 return } self.fromDateLabel.text = self.getHUmanReadableDate(date: fromDate) self.toDateLabel.text = self.getHUmanReadableDate(date: toDate) UIView.animate(withDuration: 0.33, animations: { self.dateRangeLabelHeightConstraint.constant = Constant.heightOfDateRangeLabel }) } } struct Constant { static let heightOfDateRangeLabel: CGFloat = 35 } // MARK: VC's Life cycle override func viewDidLoad() { super.viewDidLoad() self.setupNormalNavigation() self.setupDateFilterButton() self.setup() } override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) self.navigationItem.title = StringConstants().navigationTitle } override func viewWillDisappear(_ animated: Bool) { super.viewWillAppear(animated) self.navigationItem.title = "" } // MARK: IBActions @objc func openSearchFilter() { // open search filter guard let viewController = UIStoryboard(name: "TransactionHistoryDatePicker", bundle: nil) .instantiateViewController( withIdentifier: "DatePickerViewController" ) as? DatePickerViewController else { return } viewController.completion = self.selectedDate self.present(viewController, animated: true, completion: nil) } private func selectedDate(from: String?, to: String?) { self.from = from self.to = to guard let fromDate = from, let toDate = to else {return} self.presenter?.fetchWalletSatement(fromDate: fromDate, toDate: toDate) } // MARK: Other Functions private func setup() { // all setup should be done here setupDelegates() setupDateFilterButton() configureViews() configureText() self.presenter?.viewIsReady() } private func configureText() { self.emptyLabel.text = StringConstants().emptyMessage } private func configureViews() { self.dateRangeLabelHeightConstraint.constant = 0 // self.emptyLabel.textColor = AppConstants.themeBlueColor } private func setupDateFilterButton() { let filterItem = UIBarButtonItem( image: #imageLiteral(resourceName: "ic_calender"), style: UIBarButtonItem.Style.plain, target: self, action: #selector(self.openSearchFilter) ) self.navigationItem.rightBarButtonItem = filterItem } private func getHUmanReadableDate(date: String?) -> String? { if let date = DateFormatter.toDate(dateString: date ?? "", format: AppConstants.dateFormat) { let dateString = DateFormatter.toString(date: date, format: AppConstants.humanReadableDateFormat) return dateString } return nil } private func setupDelegates() { self.tableView.delegate = self self.tableView.dataSource = self } } // MARK: WalletStatementViewInterface extension WalletStatementViewController: WalletStatementViewInterface { func showLoading() { self.showProgressHud() } func hideLoading() { self.hideProgressHud() } func show(error: String) { self.alert(type: .error, message: error) } func show(models: [WalletStatement]) { self.statements = models } } // MARK: TableViewDelegate extension WalletStatementViewController: UITableViewDelegate { func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { // self.presenter?.showDetailOf(index: indexPath.row) } } // MARK: TableViewDatasource extension WalletStatementViewController: UITableViewDataSource { func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return statements.count } func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { guard let cell = tableView.dequeueReusableCell( withIdentifier: "WalletStatementTableViewCell" ) as? WalletStatementTableViewCell else { return UITableViewCell() } cell.model = self.statements.elementAt(index: indexPath.row) cell.setup() return cell } }