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