@@ -4,38 +4,38 @@ import Yosemite
44/// Configuration and actions for an ULErrorViewController,
55/// modelling an error when WooCommerce is not installed or activated.
66final class NoWooErrorViewModel : ULErrorViewModel {
7- private let siteURL : String
7+ private let site : Site
88 private let showsConnectedStores : Bool
9- private let showsInstallButton : Bool
109 private let analytics : Analytics
1110 private let stores : StoresManager
1211 private let setupCompletionHandler : ( Int64 ) -> Void
1312
1413 private var storePickerCoordinator : StorePickerCoordinator ?
1514
16- init ( siteURL : String ? ,
15+ init ( site : Site ,
1716 showsConnectedStores: Bool ,
18- showsInstallButton: Bool ,
1917 analytics: Analytics = ServiceLocator . analytics,
2018 stores: StoresManager = ServiceLocator . stores,
2119 onSetupCompletion: @escaping ( Int64 ) -> Void ) {
22- self . siteURL = siteURL ?? Localization . yourSite
20+ self . site = site
21+ self . title = site. name
2322 self . showsConnectedStores = showsConnectedStores
24- self . showsInstallButton = showsInstallButton
2523 self . analytics = analytics
2624 self . stores = stores
2725 self . setupCompletionHandler = onSetupCompletion
2826 }
2927
3028 // MARK: - Data and configuration
29+ let title : String ?
30+
3131 let image : UIImage = . noStoreImage
3232
3333 var text : NSAttributedString {
3434 let font : UIFont = . body
3535 let boldFont : UIFont = font. bold
3636
37- let boldSiteAddress = NSAttributedString ( string: siteURL . trimHTTPScheme ( ) ,
38- attributes: [ . font: boldFont] )
37+ let boldSiteAddress = NSAttributedString ( string: site . url . trimHTTPScheme ( ) ,
38+ attributes: [ . font: boldFont] )
3939 let message = NSMutableAttributedString ( string: Localization . errorMessage)
4040
4141 message. replaceFirstOccurrence ( of: " %@ " , with: boldSiteAddress)
@@ -49,7 +49,10 @@ final class NoWooErrorViewModel: ULErrorViewModel {
4949
5050 let primaryButtonTitle = Localization . primaryButtonTitle
5151
52- var isPrimaryButtonHidden : Bool { !showsInstallButton }
52+ var isPrimaryButtonHidden : Bool {
53+ // Exclude simple sites and JCP sites - the web installation flow doesn't look great on these.
54+ !site. isJetpackConnected || !site. isJetpackThePluginInstalled
55+ }
5356
5457 let secondaryButtonTitle = Localization . secondaryButtonTitle
5558
@@ -59,10 +62,13 @@ final class NoWooErrorViewModel: ULErrorViewModel {
5962 guard let viewController = viewController else {
6063 return
6164 }
62- let viewModel = WooSetupWebViewModel ( siteURL: siteURL , onCompletion: { [ weak self] in
65+ let viewModel = WooSetupWebViewModel ( siteURL: site . url , onCompletion: { [ weak self] in
6366 guard let self = self else { return }
6467 viewController. navigationController? . popViewController ( animated: true )
68+ self . showInProgressView ( in: viewController)
6569 self . handleSetupCompletion ( in: viewController)
70+ } , onDismiss: {
71+ viewController. navigationController? . popViewController ( animated: true )
6672 } )
6773 let setupViewController = PluginSetupWebViewController ( viewModel: viewModel)
6874 viewController. navigationController? . show ( setupViewController, sender: nil )
@@ -91,24 +97,29 @@ final class NoWooErrorViewModel: ULErrorViewModel {
9197// MARK: - Private helpers
9298private extension NoWooErrorViewModel {
9399 func handleSetupCompletion( in viewController: UIViewController , retryCount: Int = 0 ) {
94- showInProgressView ( in: viewController)
95-
96- ServiceLocator . stores. synchronizeEntities { [ weak self] in
100+ let action = AccountAction . synchronizeSites ( selectedSiteID: site. siteID, isJetpackConnectionPackageSupported: true ) { [ weak self] _ in
97101 guard let self = self else { return }
98- // dismisses the in-progress view
99- viewController. navigationController? . dismiss ( animated: true )
100102
101103 let matcher = ULAccountMatcher ( )
102104 matcher. refreshStoredSites ( )
103- guard let site = matcher. matchedSite ( originalURL: self . siteURL ) ,
105+ guard let site = matcher. matchedSite ( originalURL: self . site . url ) ,
104106 site. isWooCommerceActive else {
105107 if retryCount < 2 {
106- return self . handleSetupCompletion ( in: viewController, retryCount: retryCount + 1 )
108+ // delays for 2 seconds to buy some time for the data to be synced
109+ DispatchQueue . main. asyncAfter ( deadline: . now( ) + 2 ) { [ weak self] in
110+ self ? . handleSetupCompletion ( in: viewController, retryCount: retryCount + 1 )
111+ }
112+ return
107113 }
114+ // dismisses the in-progress view
115+ viewController. navigationController? . dismiss ( animated: true )
108116 return self . showSetupErrorNotice ( in: viewController)
109117 }
118+ // dismisses the in-progress view
119+ viewController. navigationController? . dismiss ( animated: true )
110120 self . setupCompletionHandler ( site. siteID)
111121 }
122+ stores. dispatch ( action)
112123 }
113124
114125 func showInProgressView( in viewController: UIViewController ) {
@@ -147,10 +158,6 @@ private extension NoWooErrorViewModel {
147158 comment: " Action button that will restart the login flow. "
148159 + " Presented when logging in with a site address that does not have WooCommerce " )
149160
150- static let yourSite = NSLocalizedString ( " your site " ,
151- comment: " Placeholder for site url, if the url is unknown. "
152- + " Presented when logging in with a site address that does not have WooCommerce. "
153- + " The error would read: to use this app for your site you'll need... " )
154161 static let verifyingInstallation = NSLocalizedString ( " Verifying installation... " ,
155162 comment: " Message displayed when checking whether a site has successfully installed WooCommerce " )
156163 static let setupErrorMessage = NSLocalizedString ( " Cannot verify your site's WooCommerce installation. " ,
0 commit comments