// // TransactionHistoryViewController.swift // GMERemittance // // Created by gme_2 on 28/09/2018. //Copyright © 2018 Gobal Money Express Co. Ltd. All rights reserved. // import UIKit enum TransactionModelType: String { case paid = "Paid" case all = "all" case received = "received" } class TransactionHistoryViewController: UIViewController { enum SegmentIndex: Int { case all = 0 case sent case delivered } struct Constant { static let heightOfDateRangeLabel: CGFloat = 35 } @IBOutlet weak var fromDateLabel: UILabel! @IBOutlet weak var toDateLabel: UILabel! // MARK: IBOutlets @IBOutlet weak var tableView: UITableView! @IBOutlet weak var segmentedControl: UISegmentedControl! @IBOutlet weak var dateRangeLabelHeightConstraint: NSLayoutConstraint! @IBOutlet weak var emptyLabel: UILabel! @IBOutlet weak var searchTextField: UITextField! // MARK: Properties var from: String? var to: String? var transactions: [TransactionModel] = [] { didSet { self.emptyLabel.isHidden = !transactions.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 }) } } var transactionType: TransactionModelType? { didSet { // filter for transaction type if self.transactionType != oldValue { guard let type = self.transactionType else {return} self.presenter?.filterTransaction(type: type) } } } var presenter: TransactionHistoryModuleInterface? // MARK: VC's Life cycle override func viewDidLoad() { super.viewDidLoad() self.setupNormalNavigation() self.setup() presenter?.viewIsReady() } override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) self.navigationItem.title = "Transaction Report" } override func viewWillDisappear(_ animated: Bool) { super.viewWillAppear(animated) self.navigationItem.title = "" } // MARK: IBActions @IBAction func openSearchFilter(_ sender: UIButton) { // open search filter let viewController = UIStoryboard.init(name: "TransactionHistoryDatePicker", bundle: nil).instantiateViewController(withIdentifier: "DatePickerViewController") as! DatePickerViewController viewController.completion = self.selectedDate self.present(viewController, animated: true, completion: nil) } @IBAction func segmentChanged(_ sender: UISegmentedControl) { self.searchTextField.text = "" guard let index = SegmentIndex(rawValue: sender.selectedSegmentIndex) else {return} switch index { case .all: self.transactionType = .all case .sent: self.transactionType = .received case .delivered: self.transactionType = .paid } } // MARK: Other Functions private func selectedDate(from: String?, to: String?) { self.from = from self.to = to guard let fromDate = from, let toDate = to else {return} self.presenter?.fetchTransactionHistories(fromDate: fromDate, toDate: toDate) } 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 setup() { // all setup should be done here setupSearchTextField() setupDelegates() self.transactionType = .all self.dateRangeLabelHeightConstraint.constant = 0 } private func setupSearchTextField() { let imageview = UIImageView(image: #imageLiteral(resourceName: "ic_search")) self.searchTextField.leftView = imageview self.searchTextField.leftViewMode = .always self.searchTextField.addTarget(self, action: #selector(search(sender:)), for: UIControlEvents.editingChanged) } @objc func search(sender: UITextField) { let searchText = sender.text! self.presenter?.search(text: searchText) } private func setupDelegates() { self.tableView.delegate = self self.tableView.dataSource = self } } // MARK: TransactionHistoryViewInterface extension TransactionHistoryViewController: TransactionHistoryViewInterface { func showLoading() { self.showProgressHud() } func hideLoading() { self.hideProgressHud() } func show(error: String) { self.alert(message: error) } func show(models: [TransactionModel]) { self.transactions = models } } // MARK: TableViewDelegate extension TransactionHistoryViewController: UITableViewDelegate { func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { self.presenter?.showDetailOf(index: indexPath.row) } } // MARK: TableViewDatasource extension TransactionHistoryViewController: UITableViewDataSource { func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return transactions.count } func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCell(withIdentifier: "TransactionHistoryTableViewCell") as! TransactionHistoryTableViewCell cell.model = self.transactions.elementAt(index: indexPath.row) cell.setup() return cell } }