Skip to content

Commit 6f92ebc

Browse files
committed
Constructiong URL
1 parent c3f2627 commit 6f92ebc

File tree

1 file changed

+24
-14
lines changed

1 file changed

+24
-14
lines changed

WooCommerce/Classes/Routing/ProductDetailRouter.swift

Lines changed: 24 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,15 @@ final class ProductDetailRouter {
1919
static var shared = ProductDetailRouter(productURLProvider: ProductURLProvider())
2020

2121
private let productURLProvider: ProductURLProvider
22+
private let ciabChecker: CIABEligibilityCheckerProtocol
23+
private let stores: StoresManager
2224

23-
init(productURLProvider: ProductURLProvider) {
25+
init(productURLProvider: ProductURLProvider,
26+
ciabChecker: CIABEligibilityCheckerProtocol = CIABEligibilityChecker(),
27+
stores: StoresManager = ServiceLocator.stores) {
2428
self.productURLProvider = productURLProvider
29+
self.ciabChecker = ciabChecker
30+
self.stores = stores
2531
}
2632

2733
func viewController(product: Product,
@@ -30,35 +36,39 @@ final class ProductDetailRouter {
3036
onDeleteCompletion: (() -> Void)? = nil) -> UIViewController {
3137

3238
let viewController: UIViewController
33-
if product.productType == .booking {
34-
let coordinator = WebViewProductDetailCoordinator(product: product,
35-
productURLProvider: productURLProvider)
36-
viewController = coordinator.viewController()
39+
if shouldOpenInWeb(product: product) {
40+
let coordinator = WebViewProductDetailCoordinator(productURLProvider: productURLProvider)
41+
viewController = coordinator.viewController(product: product,
42+
site: stores.sessionManager.defaultSite!)
3743

3844
} else {
3945
let coordinator = NativeProductDetailCoordinator(product: product)
4046
viewController = coordinator.viewController(presentationStyle: presentationStyle,
41-
forceReadOnly: forceReadOnly)
47+
forceReadOnly: forceReadOnly)
4248
}
4349

4450
return viewController
4551
}
52+
53+
private func shouldOpenInWeb(product: Product) -> Bool {
54+
return ciabChecker.isCurrentSiteCIAB && product.productType == .booking
55+
}
4656
}
4757

4858
final class WebViewProductDetailCoordinator: NSObject {
49-
private let product: Product
5059
private let productURLProvider: ProductURLProvider
5160

5261
private var onDismiss: (() -> Void)?
5362

54-
init(product: Product, productURLProvider: ProductURLProvider) {
55-
self.product = product
63+
init(productURLProvider: ProductURLProvider) {
5664
self.productURLProvider = productURLProvider
5765
}
5866

59-
func viewController(onDeleteCompletion: (() -> Void)? = nil) -> UIViewController {
60-
guard let url = productURLProvider.adminURL(for: product) else {
61-
return UIViewController() // TODO: What do we do in this case?
67+
func viewController(product: Product,
68+
site: Site,
69+
onDeleteCompletion: (() -> Void)? = nil) -> UIViewController {
70+
guard let url = productURLProvider.adminURL(for: product, site: site) else {
71+
return UIViewController()
6272
}
6373

6474
let viewModel = WPAdminWebViewModel(title: product.name, initialURL: url)
@@ -94,7 +104,7 @@ final class NativeProductDetailCoordinator {
94104
}
95105

96106
final class ProductURLProvider {
97-
func adminURL(for product: Product) -> URL? {
98-
return URL(string: "https://wordpress.com")
107+
func adminURL(for product: Product, site: Site) -> URL? {
108+
return site.adminURLWithFallback()?.appendingPathComponent("?page=next-admin&p=/woocommerce/products/edit/\(product.productID)")
99109
}
100110
}

0 commit comments

Comments
 (0)