@@ -136,6 +136,7 @@ final class MainTabBarController: UITabBarController {
136136 private var hubMenuTabCoordinator : HubMenuCoordinator ?
137137
138138 private var cancellableSiteID : AnyCancellable ?
139+ private var cancellableSite : AnyCancellable ?
139140 private let featureFlagService : FeatureFlagService
140141 private let noticePresenter : NoticePresenter
141142 private let productImageUploader : ProductImageUploaderProtocol
@@ -227,6 +228,7 @@ final class MainTabBarController: UITabBarController {
227228 // POS and Bookings tabs are hidden by default.
228229 updateTabViewControllers ( isPOSTabVisible: false , isBookingsTabVisible: false )
229230 observeSiteIDForViewControllers ( )
231+ observeSiteForConditionalTabs ( )
230232 observeProductImageUploadStatusUpdates ( )
231233
232234 startListeningToHubMenuTabBadgeUpdates ( )
@@ -766,20 +768,51 @@ private extension MainTabBarController {
766768 }
767769 }
768770
771+ func observeSiteForConditionalTabs( ) {
772+ cancellableSite = stores. site
773+ . compactMap { $0 }
774+ . sink { [ weak self] site in
775+ guard let self else {
776+ return
777+ }
778+
779+ observeConditionalTabsAvailabilityWith ( site)
780+ }
781+ }
782+
769783 func observeSiteIDForViewControllers( ) {
770- cancellableSiteID = stores. site . sink { [ weak self] site in
784+ cancellableSiteID = stores. siteID . sink { [ weak self] siteID in
771785 guard let self = self else {
772786 return
773787 }
774- self . updateViewControllers ( site : site )
788+ self . updateViewControllers ( siteID : siteID )
775789 }
776790 }
777791
778- func updateViewControllers( site: Site ? ) {
779- guard let site else {
792+ func observeConditionalTabsAvailabilityWith( _ site: Site ) {
793+ // Configures POS tab coordinator once per logged in site session.
794+ let posEligibilityChecker = posEligibilityCheckerFactory ( site)
795+ self . posEligibilityChecker = posEligibilityChecker
796+ posTabCoordinator = POSTabCoordinator (
797+ siteID: site. siteID,
798+ tabContainerController: posContainerController,
799+ viewControllerToPresent: self ,
800+ storesManager: stores,
801+ eligibilityChecker: posEligibilityChecker
802+ )
803+
804+ observePOSEligibilityForPOSTabVisibility ( siteID: site. siteID)
805+
806+ // Configures Booking tab.
807+ let bookingsViewController = createBookingsViewController ( siteID: site. siteID)
808+ bookingsContainerController. wrappedController = bookingsViewController
809+ observeBookingsEligibilityForBookingsTabVisibility ( site: site)
810+ }
811+
812+ func updateViewControllers( siteID: Int64 ? ) {
813+ guard let siteID else {
780814 return
781815 }
782- let siteID = site. siteID
783816
784817 // Update view model with `siteID` to query correct Orders Status
785818 viewModel. configureOrdersStatusesListener ( for: siteID)
@@ -798,21 +831,6 @@ private extension MainTabBarController {
798831 navigateToContent: { _ in } ) ]
799832 }
800833
801- // Configures Booking tab.
802- let bookingsViewController = createBookingsViewController ( siteID: site. siteID)
803- bookingsContainerController. wrappedController = bookingsViewController
804-
805- // Configures POS tab coordinator once per logged in site session.
806- let posEligibilityChecker = posEligibilityCheckerFactory ( site)
807- self . posEligibilityChecker = posEligibilityChecker
808- posTabCoordinator = POSTabCoordinator (
809- siteID: siteID,
810- tabContainerController: posContainerController,
811- viewControllerToPresent: self ,
812- storesManager: stores,
813- eligibilityChecker: posEligibilityChecker
814- )
815-
816834 // Configure POS catalog sync coordinator for local catalog syncing
817835 // Get POS catalog sync coordinator (will be nil if feature flag disabled or not authenticated)
818836 posCatalogSyncCoordinator = ServiceLocator . posCatalogSyncCoordinator
@@ -826,9 +844,6 @@ private extension MainTabBarController {
826844
827845 // Set dashboard to be the default tab.
828846 selectedIndex = WooTab . myStore. visibleIndex ( isPOSTabVisible: isPOSTabVisible, isBookingsTabVisible: isBookingsTabVisible)
829-
830- observePOSEligibilityForPOSTabVisibility ( siteID: siteID)
831- observeBookingsEligibilityForBookingsTabVisibility ( site: site)
832847 }
833848
834849 func createDashboardViewController( siteID: Int64 ) -> UIViewController {
0 commit comments