// // RewardViewController.swift // GME Remit // // Created by InKwon Devik Kim on 11/04/2019. //Copyright © 2019 Gobal Money Express Co. Ltd. All rights reserved. // import UIKit class RewardViewController: UIViewController { // MARK: Properties var presenter: RewardModuleInterface? private var models: [RewardProduct]? { didSet { self.collectionView.reloadData() } } private var rewardPoint: String? { didSet { self.rewardPointLabel.text = self.rewardPoint } } private lazy var refreshControl = UIRefreshControl() // MARK: IBOutlets @IBOutlet weak var collectionView: UICollectionView! @IBOutlet weak var rewardPointLabel: UILabel! // MARK: VC's Life cycle override func viewDidLoad() { super.viewDidLoad() self.setup() } override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) self.navigationItem.title = "Reward" self.presenter?.viewIsReady() self.rewardPoint = UserDefaults.standard.string(forKey: UserKeys.rewardPoint) } override func viewWillDisappear(_ animated: Bool) { super.viewWillDisappear(animated) self.navigationItem.title = "" } // MARK: IBActions @IBAction func closeButtonTouch(_ sender: UIBarButtonItem) { self.dismiss(animated: true, completion: nil) } // MARK: Other Functions private func setup() { // all setup should be done here self.setDelegate() self.setCollectionViewLayout() self.addRefreshControlCollectionView() } private func setDelegate(){ self.collectionView.delegate = self self.collectionView.dataSource = self } private func setCollectionViewLayout() { let cellSize = CGSize( width: (self.view.frame.width - 20) / 2 - 3.5, height: (self.view.frame.width - 20) / 2 - 3.5 ) let layout = UICollectionViewFlowLayout() layout.scrollDirection = .vertical layout.itemSize = cellSize layout.sectionInset = UIEdgeInsets(top: 1, left: 1, bottom: 1, right: 1) layout.minimumLineSpacing = 5.0 layout.minimumInteritemSpacing = 5.0 self.collectionView.setCollectionViewLayout(layout, animated: true) self.collectionView.reloadData() } private func addRefreshControlCollectionView() { let colorOption = [NSAttributedStringKey.foregroundColor : AppConstants.themWhiteColor]; let title = NSAttributedString(string: "pull to refresh", attributes: colorOption) self.refreshControl.attributedTitle = title self.refreshControl.backgroundColor = AppConstants.themeBlueColor self.refreshControl.tintColor = AppConstants.themWhiteColor self.refreshControl.addTarget(self, action: #selector(self.refresh), for: .valueChanged) if #available(iOS 10.0, *) { self.collectionView.refreshControl = self.refreshControl } else { self.collectionView.addSubview(self.refreshControl) } } @objc private func refresh() { self.presenter?.viewIsReady() DispatchQueue.main.asyncAfter(deadline: .now() + 1.0){ if #available(iOS 10.0, *) { self.collectionView.refreshControl?.endRefreshing() } else { self.refreshControl.endRefreshing() } } } } // MARK: RewardViewInterface extension RewardViewController: RewardViewInterface { func setRewardProducts(models: [RewardProduct]?) { self.models = models } func failure(error: Error) { self.alertWithOk(message: error.localizedDescription) } func goRedeemViewController(with model: RewardProduct?) { self.presenter?.goRedeemViewController(with: model) } func startLoading() { self.showProgressHud() } func endLoading() { self.hideProgressHud() } } extension RewardViewController: UICollectionViewDelegate { } extension RewardViewController: UICollectionViewDataSource { func collectionView( _ collectionView: UICollectionView, numberOfItemsInSection section: Int ) -> Int { return self.models?.count ?? 0 } func collectionView( _ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath ) -> UICollectionViewCell { let cell = collectionView.dequeueReusableCell( withReuseIdentifier: "RewardItemCollectionViewCell", for: indexPath ) as! RewardItemCollectionViewCell cell.setModel(with: self.models?[indexPath.row], delegate: self) return cell } }