Skip to content

Commit 2ea41c3

Browse files
committed
Refactor to simplify experiment branching code
This refactors the implementation of the ExPlat experiment to land in the editor so that the logic in the consumer can be close to the original implementation.
1 parent 2d38fe3 commit 2ea41c3

3 files changed

Lines changed: 36 additions & 76 deletions

File tree

Lines changed: 8 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -1,57 +1,33 @@
11
typealias HomepageEditorCompletion = () -> Void
22

33
class SiteAssemblyCompletionHelper {
4-
static func completeSiteCreation(for blog: Blog, quickStartSettings: QuickStartSettings) {
5-
// branch here for explat variation
6-
if ABTest.landInTheEditorPhase1.variation == .control {
7-
showMySitesScreen(for: blog, quickStartSettings: quickStartSettings)
8-
} else {
9-
landInTheEditor(for: blog, quickStartSettings: quickStartSettings)
10-
}
11-
}
12-
13-
static func completeSiteCreationFromAuthenticationScreen(for blog: Blog, quickStartSettings: QuickStartSettings, navigationController: UINavigationController, completion: @escaping HomepageEditorCompletion) {
4+
/// Land in the editor, or continue as usual for the control group - Used to branch on the ExPlat experiment for landing in the editor from the site creation flow
5+
/// - Parameter blog: Blog (which was just created) for which to show the home page editor
6+
/// - Parameter navigationController: UINavigationController used to present the home page editor
7+
/// - Parameter completion: HomepageEditorCompletion callback to be invoked after the user finishes editing the home page, or immediately in the control group case
8+
static func landInTheEditorOrContinue(for blog: Blog, navigationController: UINavigationController, completion: @escaping HomepageEditorCompletion) {
149
// branch here for explat variation
1510
if ABTest.landInTheEditorPhase1.variation == .control {
1611
completion()
1712
} else {
18-
landInTheEditor(for: blog, quickStartSettings: quickStartSettings, navigationController: navigationController, completion: completion)
13+
landInTheEditor(for: blog, navigationController: navigationController, completion: completion)
1914
}
20-
21-
}
22-
23-
private static func landInTheEditor(for blog: Blog, quickStartSettings: QuickStartSettings) {
24-
fetchAllPages(for: blog, success: { _ in
25-
DispatchQueue.main.async {
26-
WPTabBarController.sharedInstance()?.showHomePageEditor(forBlog: blog) {
27-
showMySitesScreen(for: blog, quickStartSettings: quickStartSettings)
28-
}
29-
}
30-
WPAnalytics.track(.landingEditorShown)
31-
}, failure: { _ in
32-
NSLog("Fetching all pages failed after site creation!")
33-
})
3415
}
3516

36-
private static func landInTheEditor(for blog: Blog, quickStartSettings: QuickStartSettings, navigationController: UINavigationController, completion: @escaping HomepageEditorCompletion) {
17+
private static func landInTheEditor(for blog: Blog, navigationController: UINavigationController, completion: @escaping HomepageEditorCompletion) {
3718
fetchAllPages(for: blog, success: { _ in
3819
DispatchQueue.main.async {
3920
if let homepage = blog.homepage {
4021
let editorViewController = EditPageViewController(homepage: homepage, completion: completion)
4122
navigationController.present(editorViewController, animated: false)
23+
WPAnalytics.track(.landingEditorShown)
4224
}
43-
WPAnalytics.track(.landingEditorShown)
4425
}
4526
}, failure: { _ in
4627
NSLog("Fetching all pages failed after site creation!")
4728
})
4829
}
4930

50-
private static func showMySitesScreen(for blog: Blog, quickStartSettings: QuickStartSettings) {
51-
WPTabBarController.sharedInstance()?.mySitesCoordinator.showBlogDetails(for: blog)
52-
showQuickStartPrompt(for: blog, quickStartSettings: quickStartSettings)
53-
}
54-
5531
// This seems to be necessary before casting `AbstractPost` to `Page`.
5632
private static func fetchAllPages(for blog: Blog, success: @escaping PostServiceSyncSuccess, failure: @escaping PostServiceSyncFailure) {
5733
let options = PostServiceSyncOptions()
@@ -60,22 +36,4 @@ class SiteAssemblyCompletionHelper {
6036
let postService = PostService(managedObjectContext: context)
6137
postService.syncPosts(ofType: .page, with: options, for: blog, success: success, failure: failure)
6238
}
63-
64-
private static func showQuickStartPrompt(for blog: Blog, quickStartSettings: QuickStartSettings) {
65-
guard !quickStartSettings.promptWasDismissed(for: blog) else {
66-
return
67-
}
68-
69-
guard let tabBar = WPTabBarController.sharedInstance() else {
70-
return
71-
}
72-
73-
let quickstartPrompt = QuickStartPromptViewController(blog: blog)
74-
quickstartPrompt.onDismiss = { blog, showQuickStart in
75-
if showQuickStart {
76-
QuickStartTourGuide.shared.setupWithDelay(for: blog)
77-
}
78-
}
79-
tabBar.present(quickstartPrompt, animated: true)
80-
}
8139
}

WordPress/Classes/ViewRelated/Site Creation/FinalAssembly/SiteAssemblyWizardContent.swift

Lines changed: 28 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -230,27 +230,45 @@ extension SiteAssemblyWizardContent: NUXButtonViewControllerDelegate {
230230
func primaryButtonPressed() {
231231
SiteCreationAnalyticsHelper.trackSiteCreationSuccessPreviewOkButtonTapped()
232232

233-
guard let blog = createdBlog else {
233+
guard let blog = createdBlog, let navigationController = navigationController else {
234234
return
235235
}
236236

237-
guard let navigationController = navigationController else {
238-
return
239-
}
237+
SiteAssemblyCompletionHelper.landInTheEditorOrContinue(for: blog, navigationController: navigationController) { [weak self] in
238+
239+
guard let self = self else {
240+
return
241+
}
240242

241-
if let onDismiss = onDismiss {
242-
SiteAssemblyCompletionHelper.completeSiteCreationFromAuthenticationScreen(for: blog, quickStartSettings: quickStartSettings, navigationController: navigationController) { [weak self, blog] in
243+
if let onDismiss = self.onDismiss {
243244
let quickstartPrompt = QuickStartPromptViewController(blog: blog)
244245
quickstartPrompt.onDismiss = onDismiss
245-
self?.navigationController?.pushViewController(quickstartPrompt, animated: true)
246+
navigationController.pushViewController(quickstartPrompt, animated: true)
247+
return
246248
}
249+
250+
self.dismissTapped(viaDone: true) { [blog, weak self] in
251+
WPTabBarController.sharedInstance()?.mySitesCoordinator.showBlogDetails(for: blog)
252+
self?.showQuickStartPrompt(for: blog)
253+
}
254+
}
255+
}
256+
257+
private func showQuickStartPrompt(for blog: Blog) {
258+
guard !quickStartSettings.promptWasDismissed(for: blog) else {
259+
return
260+
}
261+
262+
guard let tabBar = WPTabBarController.sharedInstance() else {
247263
return
248264
}
249265

250-
dismissTapped(viaDone: true) { [weak self, blog] in
251-
if let strongSelf = self {
252-
SiteAssemblyCompletionHelper.completeSiteCreation(for: blog, quickStartSettings: strongSelf.quickStartSettings)
266+
let quickstartPrompt = QuickStartPromptViewController(blog: blog)
267+
quickstartPrompt.onDismiss = { blog, showQuickStart in
268+
if showQuickStart {
269+
QuickStartTourGuide.shared.setupWithDelay(for: blog)
253270
}
254271
}
272+
tabBar.present(quickstartPrompt, animated: true)
255273
}
256274
}

WordPress/Classes/ViewRelated/System/WPTabBarController+ShowTab.swift

Lines changed: 0 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -13,22 +13,6 @@ extension WPTabBarController {
1313
showStoryEditor(blog: forBlog)
1414
}
1515

16-
/// Show the home page editor - Used just after site creation
17-
/// - Parameter blog: Blog (which was just created) for which to show the home page editor
18-
func showHomePageEditor(forBlog blog: Blog, completion: @escaping HomepageEditorCompletion) {
19-
guard presentedViewController == nil else {
20-
dismiss(animated: true) { [weak self] in
21-
self?.showHomePageEditor(forBlog: blog, completion: completion)
22-
}
23-
return
24-
}
25-
if let homepage = blog.homepage {
26-
let editorViewController = EditPageViewController(homepage: homepage, completion: completion)
27-
present(editorViewController, animated: false)
28-
}
29-
}
30-
31-
/// Show the page tab
3216
/// - Parameter blog: Blog to a add a page to. Uses the current or last blog if not provided
3317
func showPageEditor(blog inBlog: Blog? = nil, title: String? = nil, content: String? = nil, source: String = "create_button") {
3418

0 commit comments

Comments
 (0)