Skip to content

Commit 8a659f0

Browse files
authored
Merge pull request #8518 from woocommerce/issue/8511-site-publisher-on-hub-menu
REST API: Update title and URL and hide Switch store button on Hub menu
2 parents 9cfd35f + 41e08af commit 8a659f0

File tree

3 files changed

+70
-22
lines changed

3 files changed

+70
-22
lines changed

WooCommerce/Classes/ViewRelated/Hub Menu/HubMenu.swift

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,8 @@ struct HubMenu: View {
3434
VStack {
3535
TopBar(avatarURL: viewModel.avatarURL,
3636
storeTitle: viewModel.storeTitle,
37-
storeURL: viewModel.storeURL.absoluteString) {
37+
storeURL: viewModel.storeURL.absoluteString,
38+
switchStoreEnabled: viewModel.switchStoreEnabled) {
3839
viewModel.presentSwitchStore()
3940
}
4041
.padding([.leading, .trailing], Constants.padding)
@@ -141,6 +142,7 @@ struct HubMenu: View {
141142
let avatarURL: URL?
142143
let storeTitle: String
143144
let storeURL: String?
145+
let switchStoreEnabled: Bool
144146
var switchStoreHandler: (() -> Void)?
145147

146148
@State private var showSettings = false
@@ -177,6 +179,7 @@ struct HubMenu: View {
177179
}
178180
.linkStyle()
179181
.accessibilityIdentifier("switch-store-button")
182+
.renderedIf(switchStoreEnabled)
180183
}
181184
Spacer()
182185
VStack {

WooCommerce/Classes/ViewRelated/Hub Menu/HubMenuViewModel.swift

Lines changed: 30 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -29,28 +29,20 @@ final class HubMenuViewModel: ObservableObject {
2929
return url
3030
}
3131

32-
var storeTitle: String {
33-
stores.sessionManager.defaultSite?.name ?? Localization.myStore
34-
}
32+
@Published private(set) var storeTitle = Localization.myStore
3533

36-
var storeURL: URL {
37-
guard let urlString = stores.sessionManager.defaultSite?.url, let url = URL(string: urlString) else {
38-
return WooConstants.URLs.blog.asURL()
39-
}
40-
return url
41-
}
42-
var woocommerceAdminURL: URL {
43-
guard let urlString = stores.sessionManager.defaultSite?.adminURL, let url = URL(string: urlString) else {
44-
return stores.sessionManager.defaultSite?.adminURLWithFallback() ??
45-
WooConstants.URLs.blog.asURL()
46-
}
47-
return url
48-
}
34+
@Published private(set) var storeURL = WooConstants.URLs.blog.asURL()
35+
36+
@Published private(set) var woocommerceAdminURL = WooConstants.URLs.blog.asURL()
4937

5038
/// Child items
5139
///
5240
@Published private(set) var menuElements: [HubMenuItem] = []
5341

42+
/// The switch store button should be hidden when logged in with site credentials only.
43+
///
44+
@Published private(set) var switchStoreEnabled = false
45+
5446
@Published var showingReviewDetail = false
5547

5648
private let stores: StoresManager
@@ -61,8 +53,6 @@ final class HubMenuViewModel: ObservableObject {
6153

6254
private var storePickerCoordinator: StorePickerCoordinator?
6355

64-
private var cancellables = Set<AnyCancellable>()
65-
6656
init(siteID: Int64,
6757
navigationController: UINavigationController? = nil,
6858
featureFlagService: FeatureFlagService = ServiceLocator.featureFlagService,
@@ -73,6 +63,7 @@ final class HubMenuViewModel: ObservableObject {
7363
self.stores = stores
7464
self.featureFlagService = featureFlagService
7565
self.generalAppSettings = generalAppSettings
66+
self.switchStoreEnabled = stores.isAuthenticatedWithoutWPCom == false
7667
observeSiteForUIUpdates()
7768
}
7869

@@ -139,9 +130,27 @@ final class HubMenuViewModel: ObservableObject {
139130
}
140131

141132
private func observeSiteForUIUpdates() {
142-
stores.site.sink { site in
143-
// This will be useful in the future for updating some info of the screen depending on the store site info
144-
}.store(in: &cancellables)
133+
stores.site
134+
.compactMap { site -> URL? in
135+
guard let urlString = site?.url, let url = URL(string: urlString) else {
136+
return nil
137+
}
138+
return url
139+
}
140+
.assign(to: &$storeURL)
141+
142+
stores.site
143+
.compactMap { $0?.name }
144+
.assign(to: &$storeTitle)
145+
146+
stores.site
147+
.compactMap { site -> URL? in
148+
guard let urlString = site?.adminURL, let url = URL(string: urlString) else {
149+
return site?.adminURLWithFallback()
150+
}
151+
return url
152+
}
153+
.assign(to: &$woocommerceAdminURL)
145154
}
146155
}
147156

WooCommerce/WooCommerceTests/ViewRelated/HubMenu/HubMenuViewModelTests.swift

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -271,6 +271,42 @@ final class HubMenuViewModelTests: XCTestCase {
271271
XCTAssertNotNil(viewModel.woocommerceAdminURL)
272272
XCTAssertEqual(viewModel.woocommerceAdminURL, try URL(string: expectedAdminURL)?.asURL())
273273
}
274+
275+
func test_switchStoreEnabled_returns_true_when_logged_in_with_wpcom() {
276+
// Given
277+
let sampleStoreURL = "https://testshop.com"
278+
let sampleAdminURL = ""
279+
let expectedAdminURL = "https://testshop.com/wp-admin"
280+
let sessionManager = SessionManager.makeForTesting(authenticated: true, isWPCom: true)
281+
let site = Site.fake().copy(url: sampleStoreURL, adminURL: sampleAdminURL)
282+
sessionManager.defaultSite = site
283+
let stores = MockStoresManager(sessionManager: sessionManager)
284+
285+
// When
286+
let viewModel = HubMenuViewModel(siteID: site.siteID,
287+
stores: stores)
288+
289+
// Then
290+
XCTAssertTrue(viewModel.switchStoreEnabled)
291+
}
292+
293+
func test_switchStoreEnabled_returns_false_when_logged_in_with_wpcom() {
294+
// Given
295+
let sampleStoreURL = "https://testshop.com"
296+
let sampleAdminURL = ""
297+
let expectedAdminURL = "https://testshop.com/wp-admin"
298+
let sessionManager = SessionManager.makeForTesting(authenticated: true, isWPCom: false)
299+
let site = Site.fake().copy(url: sampleStoreURL, adminURL: sampleAdminURL)
300+
sessionManager.defaultSite = site
301+
let stores = MockStoresManager(sessionManager: sessionManager)
302+
303+
// When
304+
let viewModel = HubMenuViewModel(siteID: site.siteID,
305+
stores: stores)
306+
307+
// Then
308+
XCTAssertFalse(viewModel.switchStoreEnabled)
309+
}
274310
}
275311

276312
private extension HubMenuViewModelTests {

0 commit comments

Comments
 (0)