@@ -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
4858final 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
96106final 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