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.
260 lines
7.1 KiB
260 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 = 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)
|
|
}
|
|
|
|
}
|