Skip to content

Commit 97b5f1d

Browse files
committed
Hide Payments menu option for CIAB sites
1 parent 7a6a825 commit 97b5f1d

File tree

1 file changed

+49
-20
lines changed

1 file changed

+49
-20
lines changed

WooCommerce/Classes/ViewRelated/Hub Menu/HubMenuViewModel.swift

Lines changed: 49 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -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.isFeatureSupported(.payments, for: site)
358387
isSiteEligibleForInbox = inboxEligibilityChecker.isEligibleForInbox(siteID: site.siteID)
359388

360389
Task { @MainActor in

0 commit comments

Comments
 (0)