@@ -85,11 +85,13 @@ final class HubMenuViewModel: ObservableObject {
8585 private let inboxEligibilityChecker : InboxEligibilityChecker
8686 private let blazeEligibilityChecker : BlazeEligibilityCheckerProtocol
8787 private let googleAdsEligibilityChecker : GoogleAdsEligibilityChecker
88+ private let siteCIABEligibilityChecker : CIABEligibilityCheckerProtocol
8889
8990 private( set) lazy var inboxViewModel = InboxViewModel ( siteID: siteID)
9091
9192 @Published private( set) var shouldShowNewFeatureBadgeOnPayments : Bool = false
9293
94+ @Published private var isSiteEligibleForPayments = false
9395 @Published private var isSiteEligibleForBlaze = false
9496 @Published private var isSiteEligibleForGoogleAds = false
9597 @Published private var isSiteEligibleForInbox = false
@@ -125,6 +127,7 @@ final class HubMenuViewModel: ObservableObject {
125127 inboxEligibilityChecker: InboxEligibilityChecker = InboxEligibilityUseCase ( ) ,
126128 blazeEligibilityChecker: BlazeEligibilityCheckerProtocol = BlazeEligibilityChecker ( ) ,
127129 googleAdsEligibilityChecker: GoogleAdsEligibilityChecker = DefaultGoogleAdsEligibilityChecker ( ) ,
130+ siteCIABEligibilityChecker: CIABEligibilityCheckerProtocol = CIABEligibilityChecker ( ) ,
128131 analytics: Analytics = ServiceLocator . analytics) {
129132 self . siteID = siteID
130133 self . credentials = stores. sessionManager. defaultCredentials
@@ -136,6 +139,7 @@ final class HubMenuViewModel: ObservableObject {
136139 self . inboxEligibilityChecker = inboxEligibilityChecker
137140 self . blazeEligibilityChecker = blazeEligibilityChecker
138141 self . googleAdsEligibilityChecker = googleAdsEligibilityChecker
142+ self . siteCIABEligibilityChecker = siteCIABEligibilityChecker
139143 self . cardPresentPaymentsOnboarding = CardPresentPaymentsOnboardingUseCase ( )
140144 self . analytics = analytics
141145 observeSiteForUIUpdates ( )
@@ -251,30 +255,55 @@ private extension HubMenuViewModel {
251255 }
252256
253257 func setupGeneralElements( ) {
254- $shouldShowNewFeatureBadgeOnPayments
255- . combineLatest ( $isSiteEligibleForInbox,
256- $isSiteEligibleForBlaze,
257- $isSiteEligibleForGoogleAds)
258- . map { [ weak self] combinedResult -> [ HubMenuItem ] in
259- guard let self else { return [ ] }
260- let ( shouldShowBadgeOnPayments, eligibleForInbox, eligibleForBlaze, eligibleForGoogleAds) = combinedResult
261- return createGeneralElements (
262- shouldShowBadgeOnPayments: shouldShowBadgeOnPayments,
263- eligibleForGoogleAds: eligibleForGoogleAds,
264- eligibleForBlaze: eligibleForBlaze,
265- eligibleForInbox: eligibleForInbox
266- )
267- }
268- . assign ( to: & $generalElements)
258+ Publishers . CombineLatest (
259+ $shouldShowNewFeatureBadgeOnPayments,
260+ $isSiteEligibleForPayments
261+ )
262+ . combineLatest (
263+ Publishers . CombineLatest3 (
264+ $isSiteEligibleForInbox,
265+ $isSiteEligibleForBlaze,
266+ $isSiteEligibleForGoogleAds
267+ )
268+ )
269+ . map { [ weak self] combinedResults -> [ HubMenuItem ] in
270+ guard let self else { return [ ] }
271+
272+ let ( ( shouldShowBadgeOnPayments, eligibleForPayments) , ( eligibleForInbox, eligibleForBlaze, eligibleForGoogleAds) ) = combinedResults
273+
274+ let paymentsEligibility : PaymentsFeatureEligibility = eligibleForPayments ?
275+ . eligible( shouldShowBadgeOnPayments: shouldShowBadgeOnPayments) :
276+ . ineligible
277+
278+ return createGeneralElements (
279+ paymentsEligibility: paymentsEligibility,
280+ eligibleForGoogleAds: eligibleForGoogleAds,
281+ eligibleForBlaze: eligibleForBlaze,
282+ eligibleForInbox: eligibleForInbox
283+ )
284+ }
285+ . assign ( to: & $generalElements)
286+ }
287+
288+ enum PaymentsFeatureEligibility {
289+ case ineligible
290+ case eligible( shouldShowBadgeOnPayments: Bool )
269291 }
270292
271- func createGeneralElements( shouldShowBadgeOnPayments : Bool ,
293+ func createGeneralElements( paymentsEligibility : PaymentsFeatureEligibility ,
272294 eligibleForGoogleAds: Bool ,
273295 eligibleForBlaze: Bool ,
274296 eligibleForInbox: Bool ) -> [ HubMenuItem ] {
275- var items : [ HubMenuItem ] = [
276- Payments ( iconBadge: shouldShowBadgeOnPayments ? . dot : nil )
277- ]
297+ var items : [ HubMenuItem ] = [ ]
298+
299+ switch paymentsEligibility {
300+ case . ineligible:
301+ break
302+ case . eligible( let shouldShowBadgeOnPayments) :
303+ items. append (
304+ Payments ( iconBadge: shouldShowBadgeOnPayments ? . dot : nil )
305+ )
306+ }
278307
279308 if shouldShowAISettings {
280309 items. append ( AISettings ( ) )
@@ -354,7 +383,7 @@ private extension HubMenuViewModel {
354383 }
355384
356385 func updateMenuItemEligibility( with site: Yosemite . Site ) {
357-
386+ isSiteEligibleForPayments = siteCIABEligibilityChecker . isFeatureSupportedForCurrentSite ( . payments )
358387 isSiteEligibleForInbox = inboxEligibilityChecker. isEligibleForInbox ( siteID: site. siteID)
359388
360389 Task { @MainActor in
0 commit comments