// // OrderHistoryViewController.swift // GME Remit // // Created by InKwon Devik Kim on 14/05/2019. //Copyright © 2019 Gobal Money Express Co. Ltd. All rights reserved. // import UIKit import XLPagerTabStrip class OrderHistoryViewController: UIViewController { // MARK: Properties var presenter: OrderHistoryModuleInterface? private lazy var refreshControl = UIRefreshControl() private lazy var isSearch = false // MARK: Computed Properties private var orders: [Order]? { didSet { guard let orders = self.orders, orders.count != 0 else { noOrderHistoryLabel.isHidden = false noOrderHistoryLabel.text = isSearch ? "no_search_orders_message_text".localized() : "no_orders_message_text".localized() tableView.reloadData() return } tableView.reloadData() noOrderHistoryLabel.isHidden = true } } // MARK: IBOutlets @IBOutlet private weak var tableView: UITableView! @IBOutlet private weak var searchBar: UISearchBar! @IBOutlet private weak var periodView: UIView! @IBOutlet private weak var perioidContentView: UIView! @IBOutlet private weak var noOrderHistoryLabel: UILabel! @IBOutlet private weak var startDateLabel: UILabel! @IBOutlet private weak var endDateLabel: UILabel! @IBOutlet private weak var orderedColorLabel: UILabel! @IBOutlet private weak var receivedColorLabel: UILabel! @IBOutlet private weak var canceledColorLabel: UILabel! @IBOutlet private weak var periodViewHeightConstraint: NSLayoutConstraint! // MARK: VC's Life cycle override func viewDidLoad() { super.viewDidLoad() setup() } override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) if searchBar.text == "" && startDateLabel.text == ""{ isSearch = false presenter?.fetchOrders(from: "", to: "") } } override func viewWillDisappear(_ animated: Bool) { super.viewWillDisappear(animated) } // MARK: IBActions @IBAction private func touchCalendar(_ sender: UIButton) { presenter?.presentDatePicker{ [weak self] (from, to) in guard let `self` = self else { return } let originDateFormatter = DateFormatter() originDateFormatter.dateFormat = "yyyy-MM-dd" let dateFormatter = DateFormatter() dateFormatter.dateFormat = "MMM d, yyyy" guard let startDate = from, let endDate = to, let changeFormatStartDate = originDateFormatter.date(from: startDate), let changeFormatEndDate = originDateFormatter.date(from: endDate) else { return } self.startDateLabel.text = dateFormatter.string(from: changeFormatStartDate) self.endDateLabel.text = dateFormatter.string(from: changeFormatEndDate) self.setPeriodViewStatus(isHidden: false) self.searchBar.text?.removeAll() self.isSearch = true self.presenter?.fetchOrders(from: startDate, to: endDate) } } @IBAction func touchHidePerioidContentView(_ sender: Any) { startDateLabel.text?.removeAll() endDateLabel.text?.removeAll() refresh() } } // MARK: OrderHistoryViewInterface extension OrderHistoryViewController: OrderHistoryViewInterface { func setOrderHistoryModel(with model: [Order]?) { orders = model } func didFailFetchOrderHistory(with error: Error) { alert(type: .error, message: error.localizedDescription) } func stardLoading() { showProgressHud() } func endLoading() { hideProgressHud() DispatchQueue.main.asyncAfter(deadline: .now()){ [weak self] in guard let `self` = self else { return } if #available(iOS 10.0, *) { self.tableView.refreshControl?.endRefreshing() } else { self.refreshControl.endRefreshing() } } } } // MARK: Other Functions extension OrderHistoryViewController { private func setup() { initDelegate() initUI() setMultiLanguage() orderedColorLabel.layer.cornerRadius = 5 receivedColorLabel.layer.cornerRadius = 5 canceledColorLabel.layer.cornerRadius = 5 perioidContentView.layer.cornerRadius = 10 } private func setMultiLanguage(){ searchBar.placeholder = "search_text".localized() orderedColorLabel.text = "ordered_text".localized() receivedColorLabel.text = "received_text".localized() canceledColorLabel.text = "canceled_text".localized() noOrderHistoryLabel.text = "no_orders_message_text".localized() } private func initDelegate(){ tableView.delegate = self tableView.dataSource = self searchBar.delegate = self } private func initUI(){ searchBar.layer.borderWidth = 1 searchBar.layer.borderColor = UIColor.init(hex: "#F9F9F9").cgColor setPeriodViewStatus(isHidden: true) addRefreshControl() } private func addRefreshControl() { let colorOption = [NSAttributedString.Key.foregroundColor : AppConstants.themWhiteColor]; let title = NSAttributedString(string: "pull to refresh", attributes: colorOption) refreshControl.attributedTitle = title refreshControl.backgroundColor = AppConstants.themeBlueColor refreshControl.tintColor = AppConstants.themWhiteColor refreshControl.addTarget(self, action: #selector(refresh), for: .valueChanged) if #available(iOS 10.0, *) { tableView.refreshControl = refreshControl } else { tableView.addSubview(refreshControl) } } private func setPeriodViewStatus(isHidden: Bool){ periodView.isHidden = isHidden periodViewHeightConstraint.constant = isHidden ? 0.0 : 35.0 } @objc private func refresh() { setPeriodViewStatus(isHidden: true) searchBar.text?.removeAll() isSearch = false presenter?.fetchOrders(from: "", to: "") } } // MARK: - XLPagerTabStrip'`s IndicatorInfoProvider extension OrderHistoryViewController: IndicatorInfoProvider { func indicatorInfo(for pagerTabStripController: PagerTabStripViewController) -> IndicatorInfo { return IndicatorInfo.init(title: "orders_group_title_text".localized()) } } // MARK: - UITableViewDataSource extension OrderHistoryViewController: UITableViewDataSource { func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { guard let orders = self.orders else { return 0 } return orders.count } func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { guard let cell = tableView.dequeueReusableCell(withIdentifier: "OrderCell") as? OrderCell else { return UITableViewCell() } cell.setModel(with: orders?[indexPath.row]) return cell } } // MARK: - UITableViewDelegate extension OrderHistoryViewController: UITableViewDelegate { func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { presenter?.pushDetailOrder(with: orders?[indexPath.row]) } } // MARK: - UISearchBarDelegate extension OrderHistoryViewController: UISearchBarDelegate { func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) { isSearch = true presenter?.fetchFilteredOrders(by: searchText) } }