Advertisement
Guest User

Untitled

a guest
Feb 21st, 2019
59
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.82 KB | None | 0 0
  1. // Components/Categories/CategoriesComponent.swift
  2.  
  3. final class CategoriesComponent: UIViewController, Component {
  4.  
  5. // Props
  6.  
  7. private let connector: CategoriesConnector!
  8. var props: CategoriesProps! {
  9. didSet {
  10. guard props != oldValue else {
  11. return
  12. }
  13. render()
  14. }
  15. }
  16. private var categories: [CategoriesProps.CategoryInfo] = []
  17.  
  18.  
  19. // UI Props
  20.  
  21. @IBOutlet weak var collectionView: UICollectionView!
  22. @IBOutlet weak var activityIndicator: UIActivityIndicatorView!
  23.  
  24.  
  25. // MARK: - Initializator
  26.  
  27. init(connector: CategoriesConnector) {
  28. self.connector = connector
  29. super.init(nibName: nil, bundle: nil)
  30. }
  31.  
  32. required init?(coder aDecoder: NSCoder) {
  33. fatalError("init(coder:) has not been implemented")
  34. }
  35.  
  36.  
  37. // MARK: - UIKit lifecycle
  38.  
  39. override func viewDidLoad() {
  40. super.viewDidLoad()
  41.  
  42. setup()
  43. connector.connect(to: self)
  44.  
  45. props.loadCategoriesList.execute()
  46. }
  47.  
  48.  
  49. // MARK: - Component lifecycle
  50.  
  51. func setup() {
  52. collectionView.register(CategoryCell.nib, forCellWithReuseIdentifier: CategoryCell.nibIdentifier)
  53. collectionView.delegate = self
  54. collectionView.dataSource = self
  55. }
  56.  
  57. func render() {
  58. switch props.state {
  59. case let .idle(categories: newCategories):
  60. collectionView.isHidden = false
  61. activityIndicator.isHidden = true
  62.  
  63. let changes = diff(old: categories, new: newCategories)
  64. collectionView.reload(changes: changes, updateData: { [weak self] in
  65. self?.categories = newCategories
  66. })
  67.  
  68. case .loading:
  69. collectionView.isHidden = true
  70. activityIndicator.isHidden = false
  71. activityIndicator.startAnimating()
  72. }
  73. }
  74.  
  75. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement