diff --git a/Frameworks/Feed/Bundle/Sources/Logic/View Models/FeedListViewModel.swift b/Frameworks/Feed/Bundle/Sources/Logic/View Models/FeedListViewModel.swift index 059a3fa..5fd5a99 100644 --- a/Frameworks/Feed/Bundle/Sources/Logic/View Models/FeedListViewModel.swift +++ b/Frameworks/Feed/Bundle/Sources/Logic/View Models/FeedListViewModel.swift @@ -47,8 +47,8 @@ extension FeedListViewController { // MARK: Computed var itemsCount: Int { isWordsShowing - ? items.count - : items.count + 1 + ? items.count + 1 + : items.count } var isWordsShowing: Bool { diff --git a/Frameworks/Feed/Bundle/Sources/UI/View Controllers/FeedListViewController.swift b/Frameworks/Feed/Bundle/Sources/UI/View Controllers/FeedListViewController.swift index 6717ea6..78cfe49 100644 --- a/Frameworks/Feed/Bundle/Sources/UI/View Controllers/FeedListViewController.swift +++ b/Frameworks/Feed/Bundle/Sources/UI/View Controllers/FeedListViewController.swift @@ -22,6 +22,14 @@ public class FeedListViewController: UITableViewController { private var cancellables: Set = [] // 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) {