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.
 
 
 
 

183 lines
5.0 KiB

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