@@ -5,6 +5,7 @@ import enum WooFoundation.CountryCode
55import enum WooFoundation. CurrencyCode
66import protocol Experiments. FeatureFlagService
77import struct Yosemite. SiteSetting
8+ import struct Yosemite. Site
89import protocol Yosemite. POSEligibilityServiceProtocol
910import protocol Yosemite. StoresManager
1011import class Yosemite. POSEligibilityService
@@ -28,6 +29,7 @@ private enum LegacyPOSIneligibleReason: Equatable {
2829 case unsupportedCountry( supportedCountries: [ CountryCode ] )
2930 case unsupportedCurrency( supportedCurrencies: [ CurrencyCode ] )
3031 case selfDeallocated
32+ case unsupportedInCIABSites
3133}
3234
3335/// Legacy POS eligibility state for i1.
@@ -38,33 +40,36 @@ private enum LegacyPOSEligibilityState: Equatable {
3840
3941/// POS tab eligibility checker for i1. Will be replaced by `POSTabEligibilityCheckerI2` when removing `pointOfSaleAsATabi2` feature flag.
4042final class LegacyPOSTabEligibilityChecker : POSEntryPointEligibilityCheckerProtocol {
41- private let siteID : Int64
43+ private let site : Site
4244 private let userInterfaceIdiom : UIUserInterfaceIdiom
4345 private let siteSettings : SelectedSiteSettingsProtocol
4446 private let pluginsService : PluginsServiceProtocol
4547 private let eligibilityService : POSEligibilityServiceProtocol
4648 private let stores : StoresManager
4749 private let featureFlagService : FeatureFlagService
50+ private let siteCIABEligibilityChecker : CIABEligibilityCheckerProtocol
4851
49- init ( siteID : Int64 ,
52+ init ( site : Site ,
5053 userInterfaceIdiom: UIUserInterfaceIdiom = UIDevice . current. userInterfaceIdiom,
5154 siteSettings: SelectedSiteSettingsProtocol = ServiceLocator . selectedSiteSettings,
5255 pluginsService: PluginsServiceProtocol = PluginsService ( storageManager: ServiceLocator . storageManager) ,
5356 eligibilityService: POSEligibilityServiceProtocol = POSEligibilityService ( ) ,
5457 stores: StoresManager = ServiceLocator . stores,
55- featureFlagService: FeatureFlagService = ServiceLocator . featureFlagService) {
56- self . siteID = siteID
58+ featureFlagService: FeatureFlagService = ServiceLocator . featureFlagService,
59+ siteCIABEligibilityChecker: CIABEligibilityCheckerProtocol = CIABEligibilityChecker ( ) ) {
60+ self . site = site
5761 self . userInterfaceIdiom = userInterfaceIdiom
5862 self . siteSettings = siteSettings
5963 self . pluginsService = pluginsService
6064 self . eligibilityService = eligibilityService
6165 self . stores = stores
6266 self . featureFlagService = featureFlagService
67+ self . siteCIABEligibilityChecker = siteCIABEligibilityChecker
6368 }
6469
6570 /// Checks the initial visibility of the POS tab without dependance on network requests.
6671 func checkInitialVisibility( ) -> Bool {
67- eligibilityService. loadCachedPOSTabVisibility ( siteID: siteID) ?? false
72+ eligibilityService. loadCachedPOSTabVisibility ( siteID: site . siteID) ?? false
6873 }
6974
7075 /// Determines whether the POS entry point can be shown based on the selected store and feature gates.
@@ -73,6 +78,10 @@ final class LegacyPOSTabEligibilityChecker: POSEntryPointEligibilityCheckerProto
7378 }
7479
7580 private func checkI1Eligibility( ) async -> LegacyPOSEligibilityState {
81+ guard siteCIABEligibilityChecker. isFeatureSupported ( . pointOfSale, for: site) else {
82+ return . ineligible( reason: . unsupportedInCIABSites)
83+ }
84+
7685 switch checkDeviceEligibility ( ) {
7786 case . eligible:
7887 break
@@ -139,7 +148,7 @@ private extension LegacyPOSTabEligibilityChecker {
139148
140149private extension LegacyPOSTabEligibilityChecker {
141150 func checkPluginEligibility( ) async -> LegacyPOSEligibilityState {
142- let wcPlugin = await fetchWooCommercePlugin ( siteID: siteID)
151+ let wcPlugin = await fetchWooCommercePlugin ( siteID: site . siteID)
143152
144153 guard VersionHelpers . isVersionSupported ( version: wcPlugin. version,
145154 minimumRequired: Constants . wcPluginMinimumVersion) else {
@@ -155,7 +164,7 @@ private extension LegacyPOSTabEligibilityChecker {
155164 }
156165
157166 // For versions that support the feature switch, checks if the feature switch is enabled.
158- return await checkFeatureSwitchEnabled ( siteID: siteID)
167+ return await checkFeatureSwitchEnabled ( siteID: site . siteID)
159168 }
160169
161170 @MainActor
@@ -201,7 +210,7 @@ private extension LegacyPOSTabEligibilityChecker {
201210
202211 func waitForSiteSettingsRefresh( ) async -> [ SiteSetting ] {
203212 for await siteSettings in siteSettings. settingsStream. values {
204- guard siteSettings. siteID == siteID, siteSettings. settings. isNotEmpty, siteSettings. source != . initialLoad else {
213+ guard siteSettings. siteID == site . siteID, siteSettings. settings. isNotEmpty, siteSettings. source != . initialLoad else {
205214 continue
206215 }
207216 return siteSettings. settings
0 commit comments