From 2f9b9a22e52a49e191228af747843692abf2886b Mon Sep 17 00:00:00 2001 From: Tony Li Date: Thu, 3 Oct 2024 19:19:24 +1300 Subject: [PATCH] Refresh stats after switching back to the app (#23643) * Stats: Refresh current tab when view controller is not updated Relates to #23604. * Move adding observer code to viewWillAppear to match the removing code Relates to #23604. --- .../SiteStatsInsightsTableViewController.swift | 2 +- .../SiteStatsPeriodTableViewController.swift | 18 +++++++++--------- .../PostStatsTableViewController.swift | 2 +- .../SiteStatsDetailTableViewController.swift | 4 ++++ ...atsInsightsDetailsTableViewController.swift | 4 ++++ .../SiteStatsDashboardViewController.swift | 8 +++++++- .../StatsSubscribersViewController.swift | 2 +- 7 files changed, 27 insertions(+), 13 deletions(-) diff --git a/WordPress/Classes/ViewRelated/Stats/Insights/SiteStatsInsightsTableViewController.swift b/WordPress/Classes/ViewRelated/Stats/Insights/SiteStatsInsightsTableViewController.swift index c6fc250f1afb..a784b001654a 100644 --- a/WordPress/Classes/ViewRelated/Stats/Insights/SiteStatsInsightsTableViewController.swift +++ b/WordPress/Classes/ViewRelated/Stats/Insights/SiteStatsInsightsTableViewController.swift @@ -86,7 +86,7 @@ class SiteStatsInsightsTableViewController: SiteStatsBaseTableViewController, St viewModel?.removeListeners() } - private func refreshInsights(forceRefresh: Bool = false) { + func refreshInsights(forceRefresh: Bool = false) { viewModel?.refreshInsights(forceRefresh: forceRefresh) } diff --git a/WordPress/Classes/ViewRelated/Stats/Period Stats/SiteStatsPeriodTableViewController.swift b/WordPress/Classes/ViewRelated/Stats/Period Stats/SiteStatsPeriodTableViewController.swift index b515f630c67c..cd0a8c9b9a1c 100644 --- a/WordPress/Classes/ViewRelated/Stats/Period Stats/SiteStatsPeriodTableViewController.swift +++ b/WordPress/Classes/ViewRelated/Stats/Period Stats/SiteStatsPeriodTableViewController.swift @@ -135,6 +135,15 @@ final class SiteStatsPeriodTableViewController: SiteStatsBaseTableViewController } } + func refreshData() { + guard viewIsVisible() else { + refreshControl.endRefreshing() + return + } + addViewModelListeners() + viewModel.refreshTrafficOverviewData(withDate: datePickerViewModel.date, forPeriod: datePickerViewModel.period) + } + } // MARK: - Private Extension @@ -190,15 +199,6 @@ private extension SiteStatsPeriodTableViewController { refreshData() } - func refreshData() { - guard viewIsVisible() else { - refreshControl.endRefreshing() - return - } - addViewModelListeners() - viewModel.refreshTrafficOverviewData(withDate: datePickerViewModel.date, forPeriod: datePickerViewModel.period) - } - func applyTableUpdates() { tableHandler.diffableDataSource.apply(viewModel.tableViewSnapshot(), animatingDifferences: false) } diff --git a/WordPress/Classes/ViewRelated/Stats/Shared Views/Post Stats/PostStatsTableViewController.swift b/WordPress/Classes/ViewRelated/Stats/Shared Views/Post Stats/PostStatsTableViewController.swift index 5ed824af78c3..840a4b0b84a2 100644 --- a/WordPress/Classes/ViewRelated/Stats/Shared Views/Post Stats/PostStatsTableViewController.swift +++ b/WordPress/Classes/ViewRelated/Stats/Shared Views/Post Stats/PostStatsTableViewController.swift @@ -44,11 +44,11 @@ class PostStatsTableViewController: UITableViewController, StoryboardLoadable { ImmuTable.registerRows(tableRowTypes(), tableView: tableView) initViewModel() trackAccessEvent() - addWillEnterForegroundObserver() } override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) + addWillEnterForegroundObserver() JetpackFeaturesRemovalCoordinator.presentOverlayIfNeeded(in: self, source: .stats) } diff --git a/WordPress/Classes/ViewRelated/Stats/Shared Views/Stats Detail/SiteStatsDetailTableViewController.swift b/WordPress/Classes/ViewRelated/Stats/Shared Views/Stats Detail/SiteStatsDetailTableViewController.swift index ab58938c1b34..71ca99e2e549 100644 --- a/WordPress/Classes/ViewRelated/Stats/Shared Views/Stats Detail/SiteStatsDetailTableViewController.swift +++ b/WordPress/Classes/ViewRelated/Stats/Shared Views/Stats Detail/SiteStatsDetailTableViewController.swift @@ -52,6 +52,10 @@ class SiteStatsDetailTableViewController: UITableViewController, StoryboardLoada ImmuTable.registerRows(tableRowTypes(), tableView: tableView) tableView.register(SiteStatsTableHeaderView.defaultNib, forHeaderFooterViewReuseIdentifier: SiteStatsTableHeaderView.defaultNibName) + } + + override func viewWillAppear(_ animated: Bool) { + super.viewWillAppear(animated) addWillEnterForegroundObserver() } diff --git a/WordPress/Classes/ViewRelated/Stats/Shared Views/Stats Detail/SiteStatsInsightsDetailsTableViewController.swift b/WordPress/Classes/ViewRelated/Stats/Shared Views/Stats Detail/SiteStatsInsightsDetailsTableViewController.swift index f3a739be6b8d..5cfe7bbf89ac 100644 --- a/WordPress/Classes/ViewRelated/Stats/Shared Views/Stats Detail/SiteStatsInsightsDetailsTableViewController.swift +++ b/WordPress/Classes/ViewRelated/Stats/Shared Views/Stats Detail/SiteStatsInsightsDetailsTableViewController.swift @@ -34,6 +34,10 @@ class SiteStatsInsightsDetailsTableViewController: SiteStatsBaseTableViewControl refreshControl.addTarget(self, action: #selector(refreshData), for: .valueChanged) tableView.estimatedSectionHeaderHeight = SiteStatsTableHeaderView.estimatedHeight ImmuTable.registerRows(tableRowTypes(), tableView: tableView) + } + + override func viewWillAppear(_ animated: Bool) { + super.viewWillAppear(animated) addWillEnterForegroundObserver() } diff --git a/WordPress/Classes/ViewRelated/Stats/SiteStatsDashboardViewController.swift b/WordPress/Classes/ViewRelated/Stats/SiteStatsDashboardViewController.swift index c09d98e23db5..8fb2c45974b4 100644 --- a/WordPress/Classes/ViewRelated/Stats/SiteStatsDashboardViewController.swift +++ b/WordPress/Classes/ViewRelated/Stats/SiteStatsDashboardViewController.swift @@ -104,13 +104,13 @@ class SiteStatsDashboardViewController: UIViewController { setupFilterBar() restoreSelectedDateFromUserDefaults() restoreSelectedTabFromUserDefaults() - addWillEnterForegroundObserver() configureNavBar() view.accessibilityIdentifier = "stats-dashboard" } override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) + addWillEnterForegroundObserver() JetpackFeaturesRemovalCoordinator.presentOverlayIfNeeded(in: self, source: .stats) } @@ -244,18 +244,24 @@ private extension SiteStatsDashboardViewController { pageViewController?.setViewControllers([insightsTableViewController], direction: .forward, animated: false) + } else { + insightsTableViewController.refreshInsights() } case .traffic: if oldSelectedTab != .traffic || pageViewControllerIsEmpty { pageViewController?.setViewControllers([trafficTableViewController], direction: .forward, animated: false) + } else { + trafficTableViewController.refreshData() } case .subscribers: if oldSelectedTab != .subscribers || pageViewControllerIsEmpty { pageViewController?.setViewControllers([subscribersViewController], direction: .forward, animated: false) + } else { + subscribersViewController.refreshData() } } } diff --git a/WordPress/Classes/ViewRelated/Stats/Subscribers/StatsSubscribersViewController.swift b/WordPress/Classes/ViewRelated/Stats/Subscribers/StatsSubscribersViewController.swift index 4e2e8bc4d307..7ec437c37f12 100644 --- a/WordPress/Classes/ViewRelated/Stats/Subscribers/StatsSubscribersViewController.swift +++ b/WordPress/Classes/ViewRelated/Stats/Subscribers/StatsSubscribersViewController.swift @@ -58,7 +58,7 @@ final class StatsSubscribersViewController: SiteStatsBaseTableViewController { cancellables = [] } - @objc private func refreshData() { + @objc func refreshData() { viewModel.refreshData() DispatchQueue.main.asyncAfter(deadline: .now() + 0.3) {