@@ -118,6 +118,7 @@ final class MainTabBarController: UITabBarController {
118118 private var hubMenuTabCoordinator : HubMenuCoordinator ?
119119
120120 private var cancellableSiteID : AnyCancellable ?
121+ private var cancellableSite : AnyCancellable ?
121122 private let featureFlagService : FeatureFlagService
122123 private let noticePresenter : NoticePresenter
123124 private let productImageUploader : ProductImageUploaderProtocol
@@ -195,6 +196,7 @@ final class MainTabBarController: UITabBarController {
195196 // POS tab is hidden by default.
196197 updateTabViewControllers ( isPOSTabVisible: false )
197198 observeSiteIDForViewControllers ( )
199+ observeSiteForConditionalTabs ( )
198200 observeProductImageUploadStatusUpdates ( )
199201
200202 startListeningToHubMenuTabBadgeUpdates ( )
@@ -725,20 +727,46 @@ private extension MainTabBarController {
725727 }
726728 }
727729
730+ func observeSiteForConditionalTabs( ) {
731+ cancellableSite = stores. site
732+ . compactMap { $0 }
733+ . sink { [ weak self] site in
734+ guard let self else {
735+ return
736+ }
737+
738+ observeConditionalTabsAvailabilityWith ( site)
739+ }
740+ }
741+
728742 func observeSiteIDForViewControllers( ) {
729- cancellableSiteID = stores. site . sink { [ weak self] site in
743+ cancellableSiteID = stores. siteID . sink { [ weak self] siteID in
730744 guard let self = self else {
731745 return
732746 }
733- self . updateViewControllers ( site : site )
747+ self . updateViewControllers ( siteID : siteID )
734748 }
735749 }
736750
737- func updateViewControllers( site: Site ? ) {
738- guard let site else {
751+ func observeConditionalTabsAvailabilityWith( _ site: Site ) {
752+ // Configures POS tab coordinator once per logged in site session.
753+ let posEligibilityChecker = posEligibilityCheckerFactory ( site)
754+ self . posEligibilityChecker = posEligibilityChecker
755+ posTabCoordinator = POSTabCoordinator (
756+ siteID: site. siteID,
757+ tabContainerController: posContainerController,
758+ viewControllerToPresent: self ,
759+ storesManager: stores,
760+ eligibilityChecker: posEligibilityChecker
761+ )
762+
763+ observePOSEligibilityForPOSTabVisibility ( siteID: site. siteID)
764+ }
765+
766+ func updateViewControllers( siteID: Int64 ? ) {
767+ guard let siteID else {
739768 return
740769 }
741- let siteID = site. siteID
742770
743771 // Update view model with `siteID` to query correct Orders Status
744772 viewModel. configureOrdersStatusesListener ( for: siteID)
@@ -757,17 +785,6 @@ private extension MainTabBarController {
757785 navigateToContent: { _ in } ) ]
758786 }
759787
760- // Configures POS tab coordinator once per logged in site session.
761- let posEligibilityChecker = posEligibilityCheckerFactory ( site)
762- self . posEligibilityChecker = posEligibilityChecker
763- posTabCoordinator = POSTabCoordinator (
764- siteID: siteID,
765- tabContainerController: posContainerController,
766- viewControllerToPresent: self ,
767- storesManager: stores,
768- eligibilityChecker: posEligibilityChecker
769- )
770-
771788 // Configure POS catalog sync coordinator for local catalog syncing
772789 // Get POS catalog sync coordinator (will be nil if feature flag disabled or not authenticated)
773790 posCatalogSyncCoordinator = ServiceLocator . posCatalogSyncCoordinator
@@ -781,8 +798,6 @@ private extension MainTabBarController {
781798
782799 // Set dashboard to be the default tab.
783800 selectedIndex = WooTab . myStore. visibleIndex ( isPOSTabVisible: isPOSTabVisible)
784-
785- observePOSEligibilityForPOSTabVisibility ( siteID: siteID)
786801 }
787802
788803 func createDashboardViewController( siteID: Int64 ) -> UIViewController {
0 commit comments