@@ -42,6 +42,8 @@ final class POSTabCoordinator {
4242 private let pushNotesManager : PushNotesManager
4343 private let eligibilityChecker : POSEntryPointEligibilityCheckerProtocol
4444
45+ private lazy var posSyncDispatcher = ForegroundPOSCatalogSyncDispatcher ( )
46+
4547 /// Local catalog eligibility service - created asynchronously during init
4648 private( set) var localCatalogEligibilityService : POSLocalCatalogEligibilityServiceProtocol ?
4749
@@ -134,18 +136,27 @@ final class POSTabCoordinator {
134136 /// Only checks eligibility if the POS tab is visible
135137 func updatePOSEligibility( isPOSTabVisible: Bool ) {
136138 Task { @MainActor [ weak self] in
137- guard let self, let service = self . localCatalogEligibilityService else { return }
139+ guard let self, let catalogEligibilityService = self . localCatalogEligibilityService else { return }
138140
139141 // If POS tab is not visible, mark as ineligible
140142 guard isPOSTabVisible else {
141- try await service. updatePOSEligibility ( isEligible: false , for: siteID)
143+ try await catalogEligibilityService. updatePOSEligibility ( isEligible: false ,
144+ for: siteID)
145+ await posSyncDispatcher. stop ( )
142146 return
143147 }
144148
145149 // Check actual POS eligibility using the eligibility checker
146150 let eligibilityState = await eligibilityChecker. checkEligibility ( )
147151 let isPOSEligible = eligibilityState == . eligible
148- try await service. updatePOSEligibility ( isEligible: isPOSEligible, for: siteID)
152+ do {
153+ try await catalogEligibilityService. updatePOSEligibility ( isEligible: isPOSEligible,
154+ for: siteID)
155+ // Only start syncs after we've updated the catalog eligibility.
156+ await isPOSEligible ? posSyncDispatcher. start ( ) : posSyncDispatcher. stop ( )
157+ } catch {
158+ await posSyncDispatcher. stop ( )
159+ }
149160 }
150161 }
151162
0 commit comments