Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Components/Categories/CategoriesComponent.swift
- final class CategoriesComponent: UIViewController, Component {
- // Props
- private let connector: CategoriesConnector!
- var props: CategoriesProps! {
- didSet {
- guard props != oldValue else {
- return
- }
- render()
- }
- }
- private var categories: [CategoriesProps.CategoryInfo] = []
- // UI Props
- @IBOutlet weak var collectionView: UICollectionView!
- @IBOutlet weak var activityIndicator: UIActivityIndicatorView!
- // MARK: - Initializator
- init(connector: CategoriesConnector) {
- self.connector = connector
- super.init(nibName: nil, bundle: nil)
- }
- required init?(coder aDecoder: NSCoder) {
- fatalError("init(coder:) has not been implemented")
- }
- // MARK: - UIKit lifecycle
- override func viewDidLoad() {
- super.viewDidLoad()
- setup()
- connector.connect(to: self)
- props.loadCategoriesList.execute()
- }
- // MARK: - Component lifecycle
- func setup() {
- collectionView.register(CategoryCell.nib, forCellWithReuseIdentifier: CategoryCell.nibIdentifier)
- collectionView.delegate = self
- collectionView.dataSource = self
- }
- func render() {
- switch props.state {
- case let .idle(categories: newCategories):
- collectionView.isHidden = false
- activityIndicator.isHidden = true
- let changes = diff(old: categories, new: newCategories)
- collectionView.reload(changes: changes, updateData: { [weak self] in
- self?.categories = newCategories
- })
- case .loading:
- collectionView.isHidden = true
- activityIndicator.isHidden = false
- activityIndicator.startAnimating()
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement