[Framework] loading indicator for the Feed list (#14)

This PR contains the work done to integrate a loading indicator to the `FeedListViewController` view controller.

Reviewed-on: rock-n-code/app-reviews#14
Co-authored-by: Javier Cicchelli <javier@rock-n-code.com>
Co-committed-by: Javier Cicchelli <javier@rock-n-code.com>
This commit was merged in pull request #14.
This commit is contained in:
2024-03-21 10:31:48 +00:00
committed by javier
parent 0b5ca9ef9f
commit 394245dd29
2 changed files with 32 additions and 2 deletions
@@ -22,6 +22,14 @@ public class FeedListViewController: UITableViewController {
private var cancellables: Set<AnyCancellable> = []
// MARK: Outlets
private lazy var activityIndicator = {
let indicator = UIActivityIndicatorView()
indicator.translatesAutoresizingMaskIntoConstraints = false
return indicator
}()
private lazy var filterButton = {
UIBarButtonItem(
title: NSLocalizedString(
@@ -92,6 +100,7 @@ public class FeedListViewController: UITableViewController {
setNavigationBar()
setView()
setLayout()
registerTableCells()
bindViewModel()
@@ -163,11 +172,20 @@ private extension FeedListViewController {
}
.store(in: &cancellables)
viewModel.$isLoading
.filter { $0 == true }
.receive(on: RunLoop.main)
.sink { [weak self] _ in
self?.activityIndicator.startAnimating()
}
.store(in: &cancellables)
viewModel.$isLoading
.dropFirst()
.filter { $0 == false }
.receive(on: RunLoop.main)
.sink { [weak self] _ in
self?.activityIndicator.stopAnimating()
self?.pullControl.endRefreshing()
self?.tableView.reloadData()
self?.tableView.scrollToRow(
@@ -232,6 +250,13 @@ private extension FeedListViewController {
TopWordsCell.register(in: tableView)
}
func setLayout() {
NSLayoutConstraint.activate([
activityIndicator.centerXAnchor.constraint(equalTo: view.centerXAnchor),
activityIndicator.centerYAnchor.constraint(equalTo: view.safeAreaLayoutGuide.centerYAnchor),
])
}
func setNavigationBar() {
navigationController?.navigationBar.prefersLargeTitles = true
navigationController?.navigationBar.isTranslucent = true
@@ -246,6 +271,11 @@ private extension FeedListViewController {
func setView() {
tableView.refreshControl = pullControl
view.addSubview(activityIndicator)
view.bringSubviewToFront(activityIndicator)
activityIndicator.startAnimating()
}
func updateFilterMenu(_ option: FilterOption) {