Skip to content

Commit 8b32ea3

Browse files
committed
Observe both site and siteID for separate concerns
1 parent baa8837 commit 8b32ea3

File tree

1 file changed

+33
-18
lines changed

1 file changed

+33
-18
lines changed

WooCommerce/Classes/ViewRelated/MainTabBarController.swift

Lines changed: 33 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)