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.
 
 
 
 

171 lines
4.8 KiB

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