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.
 
 
 
 

261 lines
7.1 KiB

//
// 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 = 5
canceledColorLabel.backgroundColor = .themeRed
}
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 : UIColor.themeWhite];
let title = NSAttributedString(string: "pull to refresh", attributes: colorOption)
refreshControl.attributedTitle = title
refreshControl.backgroundColor = .themeBlue
refreshControl.tintColor = .themeWhite
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)
}
}