Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -293,10 +293,13 @@ private extension DashboardViewController {
}

private func openWebView(viewModel: WebViewSheetViewModel) {
let cardReaderWebview = WebViewSheet(viewModel: viewModel) { [weak self] in
self?.dismiss(animated: true)
let webViewSheet = WebViewSheet(viewModel: viewModel) { [weak self] in
guard let self = self else { return }
self.dismiss(animated: true)
self.viewModel.syncAnnouncements(for: self.siteID)
}
let hostingController = UIHostingController(rootView: cardReaderWebview)
let hostingController = UIHostingController(rootView: webViewSheet)
hostingController.presentationController?.delegate = self
present(hostingController, animated: true, completion: nil)
}

Expand Down Expand Up @@ -383,12 +386,21 @@ private extension DashboardViewController {
}
}

// MARK: - Delegate conformance
extension DashboardViewController: DashboardUIScrollDelegate {
func dashboardUIScrollViewDidScroll(_ scrollView: UIScrollView) {
hiddenScrollView.updateFromScrollViewDidScrollEventForLargeTitleWorkaround(scrollView)
}
}

extension DashboardViewController: UIAdaptivePresentationControllerDelegate {
func presentationControllerDidDismiss(_ presentationController: UIPresentationController) {
if presentationController.presentedViewController is UIHostingController<WebViewSheet> {
viewModel.syncAnnouncements(for: siteID)
}
}
}

// MARK: - Updates
//
private extension DashboardViewController {
Expand Down Expand Up @@ -497,6 +509,7 @@ private extension DashboardViewController {

func pullToRefresh() async {
ServiceLocator.analytics.track(.dashboardPulledToRefresh)
viewModel.syncAnnouncements(for: siteID)
await reloadDashboardUIStatsVersion(forced: true)
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -110,11 +110,7 @@ final class DashboardViewModel {
///
func syncAnnouncements(for siteID: Int64) {
syncProductsOnboarding(for: siteID) { [weak self] in
// For now, products onboarding takes precedence over Just In Time Messages, so we can stop if there is an onboarding announcement to display.
// This should be revisited when either onboarding or JITMs are expanded. See: pe5pgL-11B-p2
guard let self, self.announcementViewModel == nil else { return }

self.syncJustInTimeMessages(for: siteID)
self?.syncJustInTimeMessages(for: siteID)
}
}

Expand All @@ -133,6 +129,11 @@ final class DashboardViewModel {
MainTabBarController.presentAddProductFlow()
})
self?.announcementViewModel = viewModel
// For now, products onboarding takes precedence over Just In Time Messages,
// so we can stop if there is an onboarding announcement to display.
// This should be revisited when either onboarding or JITMs are expanded. See:
// pe5pgL-11B-p2
return
}
}
onCompletion()
Expand All @@ -159,6 +160,7 @@ final class DashboardViewModel {
switch result {
case let .success(messages):
guard let message = messages.first else {
self.announcementViewModel = nil
return
}
self.analytics.track(event:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -262,4 +262,21 @@ final class DashboardViewModelTests: XCTestCase {
assertEqual("Networking.DotcomError", properties["error_domain"] as? String)
assertEqual("Dotcom Invalid REST Route", properties["error_description"] as? String)
}

func test_when_no_messages_are_received_existing_messages_are_removed() {
// Given
prepareStoresToShowJustInTimeMessage(.success([]))

let viewModel = DashboardViewModel(stores: stores, analytics: analytics)
viewModel.announcementViewModel = JustInTimeMessageAnnouncementCardViewModel(
justInTimeMessage: .fake(),
screenName: "my_store",
siteID: sampleSiteID)

// When
viewModel.syncAnnouncements(for: sampleSiteID)

// Then
XCTAssertNil(viewModel.announcementViewModel)
}
}