Skip to content

Commit 40f5b87

Browse files
committed
Show Skip button in Link signup pane instead of close
1 parent d2593cf commit 40f5b87

File tree

2 files changed

+69
-11
lines changed

2 files changed

+69
-11
lines changed

StripeFinancialConnections/StripeFinancialConnections/Source/Common/FinancialConnectionsNavigationController.swift

+2-2
Original file line numberDiff line numberDiff line change
@@ -146,7 +146,7 @@ extension FinancialConnectionsNavigationController {
146146

147147
static func configureNavigationItemForNative(
148148
_ navigationItem: UINavigationItem?,
149-
closeItem: UIBarButtonItem,
149+
trailingItem: UIBarButtonItem,
150150
shouldHideLogo: Bool,
151151
theme: FinancialConnectionsTheme,
152152
isTestMode: Bool
@@ -212,6 +212,6 @@ extension FinancialConnectionsNavigationController {
212212

213213
navigationItem?.titleView = stackView
214214
navigationItem?.backButtonTitle = ""
215-
navigationItem?.rightBarButtonItem = closeItem
215+
navigationItem?.rightBarButtonItem = trailingItem
216216
}
217217
}

StripeFinancialConnections/StripeFinancialConnections/Source/Native/NativeFlowController.swift

+67-9
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,21 @@ class NativeFlowController {
4040
return item
4141
}()
4242

43+
private lazy var navigationBarSkipBarButtonItem: UIBarButtonItem = {
44+
let item = UIBarButtonItem(
45+
title: STPLocalizedString("Skip", "Title of a button that allows users to skip the current screen."),
46+
style: .plain,
47+
target: self,
48+
action: #selector(didSelectNavigationBarSkipButton)
49+
)
50+
let attributes: [NSAttributedString.Key: Any] = [
51+
.font: FinancialConnectionsFont.label(.large).uiFont,
52+
.foregroundColor: UIColor.textDefault,
53+
]
54+
item.setTitleTextAttributes(attributes, for: .normal)
55+
return item
56+
}()
57+
4358
init(
4459
dataManager: NativeFlowDataManager,
4560
navigationController: FinancialConnectionsNavigationController
@@ -82,7 +97,11 @@ class NativeFlowController {
8297
// then also handle "custom manual entry mode"
8398
closeAuthFlow(customManualEntry: true)
8499
} else {
85-
setNavigationControllerViewControllers([viewController], animated: false)
100+
setNavigationControllerViewControllers(
101+
[viewController],
102+
pane: pane,
103+
animated: false
104+
)
86105
}
87106
}
88107

@@ -116,6 +135,16 @@ class NativeFlowController {
116135
finishClosingAuthFlow()
117136
}
118137
}
138+
139+
@objc private func didSelectNavigationBarSkipButton() {
140+
FeedbackGeneratorAdapter.buttonTapped()
141+
dataManager.analyticsClient.log(
142+
eventName: "click.nav_bar.skip",
143+
pane: FinancialConnectionsAnalyticsClient
144+
.paneFromViewController(navigationController.topViewController)
145+
)
146+
pushPane(.success, animated: true)
147+
}
119148

120149
@objc private func applicationWillEnterForeground() {
121150
dataManager
@@ -136,6 +165,13 @@ class NativeFlowController {
136165
.paneFromViewController(navigationController.topViewController)
137166
)
138167
}
168+
169+
private func trailingItem(forPane pane: FinancialConnectionsSessionManifest.NextPane) -> UIBarButtonItem {
170+
switch pane {
171+
case .networkingLinkSignupPane: navigationBarSkipBarButtonItem
172+
default: navigationBarCloseBarButtonItem
173+
}
174+
}
139175
}
140176

141177
// MARK: - Core Navigation Helpers
@@ -144,14 +180,15 @@ extension NativeFlowController {
144180

145181
private func setNavigationControllerViewControllers(
146182
_ viewControllers: [UIViewController],
183+
pane: FinancialConnectionsSessionManifest.NextPane,
147184
animated: Bool = true
148185
) {
149186
dismissVisibleSheetsIfNeeded { [weak self] in
150187
guard let self else { return }
151188
viewControllers.forEach { viewController in
152189
FinancialConnectionsNavigationController.configureNavigationItemForNative(
153190
viewController.navigationItem,
154-
closeItem: self.navigationBarCloseBarButtonItem,
191+
trailingItem: self.trailingItem(forPane: pane),
155192
shouldHideLogo: ShouldHideLogoInNavigationBar(
156193
forViewController: viewController,
157194
reducedBranding: self.dataManager.reducedBranding,
@@ -187,20 +224,32 @@ extension NativeFlowController {
187224
dataManager: dataManager
188225
)
189226
if clearNavigationStack, let paneViewController = paneViewController {
190-
setNavigationControllerViewControllers([paneViewController], animated: animated)
227+
setNavigationControllerViewControllers(
228+
[paneViewController],
229+
pane: pane,
230+
animated: animated
231+
)
191232
} else {
192-
pushViewController(paneViewController, animated: animated)
233+
pushViewController(
234+
paneViewController,
235+
pane: pane,
236+
animated: animated
237+
)
193238
}
194239
}
195240
}
196241

197-
private func pushViewController(_ viewController: UIViewController?, animated: Bool) {
242+
private func pushViewController(
243+
_ viewController: UIViewController?,
244+
pane: FinancialConnectionsSessionManifest.NextPane,
245+
animated: Bool
246+
) {
198247
dismissVisibleSheetsIfNeeded { [weak self] in
199248
guard let self else { return }
200249
if let viewController = viewController {
201250
FinancialConnectionsNavigationController.configureNavigationItemForNative(
202251
viewController.navigationItem,
203-
closeItem: self.navigationBarCloseBarButtonItem,
252+
trailingItem: self.trailingItem(forPane: pane),
204253
shouldHideLogo: ShouldHideLogoInNavigationBar(
205254
forViewController: viewController,
206255
reducedBranding: self.dataManager.reducedBranding,
@@ -283,9 +332,10 @@ extension NativeFlowController {
283332
}
284333

285334
private func startResetFlow() {
335+
let pane: FinancialConnectionsSessionManifest.NextPane = .resetFlow
286336
guard
287337
let resetFlowViewController = CreatePaneViewController(
288-
pane: .resetFlow,
338+
pane: pane,
289339
nativeFlowController: self,
290340
dataManager: dataManager
291341
)
@@ -303,7 +353,11 @@ extension NativeFlowController {
303353
}
304354
viewControllers.append(resetFlowViewController)
305355

306-
setNavigationControllerViewControllers(viewControllers, animated: true)
356+
setNavigationControllerViewControllers(
357+
viewControllers,
358+
pane: pane,
359+
animated: true
360+
)
307361
}
308362

309363
private func showTerminalError(_ error: Error? = nil) {
@@ -331,7 +385,11 @@ extension NativeFlowController {
331385
closeAuthFlow(error: terminalError)
332386
return
333387
}
334-
setNavigationControllerViewControllers([terminalErrorViewController], animated: false)
388+
setNavigationControllerViewControllers(
389+
[terminalErrorViewController],
390+
pane: .terminalError,
391+
animated: false
392+
)
335393
}
336394

337395
// There's at least four types of close cases:

0 commit comments

Comments
 (0)