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.

180 lines
5.0 KiB

  1. //
  2. // CouponBoxViewController.swift
  3. // GME Remit
  4. //
  5. // Created by Jeongbae Kong on 03/12/2019.
  6. //Copyright © 2019 Gobal Money Express Co. Ltd. All rights reserved.
  7. //
  8. import UIKit
  9. import XLPagerTabStrip
  10. protocol CouponBoxDelegate: class {
  11. func couponBoxView(
  12. _ viewController: CouponBoxViewController,
  13. didSelectModel model: CouponBoxModel?
  14. )
  15. }
  16. class CouponBoxViewController: UIViewController {
  17. // MARK: Properties
  18. weak var delegate: CouponBoxDelegate?
  19. private var couponList: [CouponBoxModel]? {
  20. didSet {
  21. let message = "possessed_coupon_number_text".localized().replacingOccurrences(
  22. of: "xxx", with: "\(couponList?.count ?? 0)")
  23. couponCount.text = message
  24. couponCount.font = .sanfrancisco(.regular, size: 15)
  25. if couponList?.count != 0 { // ,
  26. noCouponView.isHidden = true
  27. } else {
  28. noCouponView.isHidden = false
  29. }
  30. tableView.reloadData()
  31. }
  32. }
  33. var presenter: CouponBoxModuleInterface?
  34. private lazy var refreshControl = UIRefreshControl()
  35. // MARK: Computed Properties
  36. // MARK: IBOutlets
  37. @IBOutlet weak var tableView: UITableView!
  38. @IBOutlet weak var noCouponView: UIView!
  39. @IBOutlet weak var couponCount: UILabel!
  40. @IBOutlet weak var couponGuidelineText: UIButton!
  41. @IBOutlet weak var couponCountStackView: UIStackView!
  42. @IBOutlet weak var noCouponMessageLabel: UILabel!
  43. // MARK: VC's Life cycle
  44. override func viewDidLoad() {
  45. super.viewDidLoad()
  46. setup()
  47. setUI()
  48. }
  49. override func viewWillAppear(_ animated: Bool) {
  50. super.viewWillAppear(animated)
  51. presenter?.fetchCouponBox()
  52. }
  53. // MARK: IBActions
  54. @IBAction func couponGuidelineButton(_ sender: UIButton) {
  55. // presenter?.goCouponGuideline()
  56. }
  57. }
  58. // MARK: CouponBoxViewInterface
  59. extension CouponBoxViewController: CouponBoxViewInterface {
  60. func setModel(with model: [CouponBoxModel]?) {
  61. couponList = model
  62. }
  63. func setError(with error: Error) {
  64. alert(message: error.localizedDescription)
  65. }
  66. func startLoading() {
  67. showProgressHud()
  68. }
  69. func endLoading() {
  70. hideProgressHud()
  71. }
  72. }
  73. // MARK: Other Functions
  74. extension CouponBoxViewController {
  75. private func setup() {
  76. initDelegate()
  77. addRefreshControlCollectionView()
  78. noCouponMessageLabel.text = "no_coupon_text".localized()
  79. // all setup should be done here
  80. }
  81. private func initDelegate() {
  82. tableView.dataSource = self
  83. tableView.delegate = self
  84. }
  85. private func setUI() {
  86. couponGuidelineText.setTitle("coupon_guideline_title_text".localized(), for: .normal)
  87. couponGuidelineText.titleLabel?.font = .sanfrancisco(.regular, size: 13)
  88. couponGuidelineText.backgroundColor = .clear
  89. couponCountStackView.backgroundColor = .clear
  90. }
  91. private func addRefreshControlCollectionView() {
  92. let colorOption = [NSAttributedString.Key.foregroundColor : UIColor.themeWhite]
  93. let title = NSAttributedString(string: "pull to refresh", attributes: colorOption)
  94. refreshControl.attributedTitle = title
  95. refreshControl.backgroundColor = .themeBlue
  96. refreshControl.tintColor = .themeWhite
  97. refreshControl.addTarget(self, action: #selector(refresh), for: .valueChanged)
  98. if #available(iOS 10.0, *) {
  99. tableView.refreshControl = refreshControl
  100. } else {
  101. tableView.addSubview(refreshControl)
  102. }
  103. }
  104. @objc
  105. private func refresh() {
  106. self.presenter?.fetchCouponBox()
  107. DispatchQueue.main.asyncAfter(deadline: .now() + 1.0) {[weak self] in
  108. self?.tableView.refreshControl?.endRefreshing()
  109. }
  110. }
  111. }
  112. // MARK: - XLPagerTabStrip'`s IndicatorInfoProvider
  113. extension CouponBoxViewController: IndicatorInfoProvider {
  114. func indicatorInfo(for pagerTabStripController: PagerTabStripViewController) -> IndicatorInfo {
  115. return IndicatorInfo.init(title: "couponbox_title_text".localized())
  116. }
  117. }
  118. // MARK: - UITableViewDataSource
  119. extension CouponBoxViewController: UITableViewDataSource {
  120. func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
  121. return couponList?.count ?? 0
  122. }
  123. func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
  124. guard let cell = tableView.dequeueReusableCell(withIdentifier: "CouponCell") as? CouponCell else {
  125. return CouponBoxTableViewCell()
  126. }
  127. cell.setModel(couponList?[indexPath.row])
  128. return cell
  129. }
  130. }
  131. extension CouponBoxViewController: UITableViewDelegate {
  132. func tableView(_ tableView: UITableView, viewForFooterInSection section: Int) -> UIView? {
  133. let result = UIView()
  134. // recreate insets from existing ones in the table view
  135. let insets = tableView.separatorInset
  136. let width = tableView.bounds.width - insets.left - insets.right
  137. let sepFrame = CGRect(x: insets.left, y: -0.5, width: width, height: 0.5)
  138. // create layer with separator, setting color
  139. let sep = CALayer()
  140. sep.frame = sepFrame
  141. sep.backgroundColor = tableView.separatorColor?.cgColor
  142. result.layer.addSublayer(sep)
  143. return result
  144. }
  145. }