Skip to content

Commit 0839e2a

Browse files
authored
[Woo POS][Settings] i2: Payments onboarding flow through POS settings (#16293)
2 parents 62d085a + de39d34 commit 0839e2a

File tree

1 file changed

+51
-0
lines changed

1 file changed

+51
-0
lines changed

Modules/Sources/PointOfSale/Presentation/Settings/POSSettingsHardwareDetailView.swift

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,15 @@ struct POSSettingsHardwareDetailView: View {
66
@Environment(\.posFeatureFlags) private var featureFlags
77
@Environment(\.dynamicTypeSize) private var dynamicTypeSize
88
@Environment(\.posAnalytics) private var analytics
9+
@Environment(\.posExternalViews) private var externalViews
910

1011
let settingsController: POSSettingsControllerProtocol
1112

1213
@State private var navigationPath: [NavigationDestination] = []
1314
@State private var showBarcodeScanningSetupModal: Bool = false
1415
@State private var showBarcodeScanningDocumentationModal: Bool = false
1516
@State private var showCardReaderDocumentationModal: Bool = false
17+
@State private var showSupport: Bool = false
1618

1719
private var cardReaderName: String {
1820
if let cardReaderName = settingsController.connectedCardReader?.name {
@@ -88,6 +90,15 @@ struct POSSettingsHardwareDetailView: View {
8890
PointOfSaleCardPresentPaymentAlert(alertType: alertType)
8991
.posInteractiveDismissDisabled(alertType.isDismissDisabled)
9092
})
93+
.posModal(item: $posModel.cardPresentPaymentOnboardingViewContainer, onDismiss: {
94+
posModel.cancelCardPaymentsOnboarding()
95+
}, content: { viewContainer in
96+
paymentsOnboardingView(from: viewContainer)
97+
})
98+
.posSheet(isPresented: $showSupport) {
99+
supportForm
100+
.interactiveDismissDisabled(true)
101+
}
91102
.posModal(isPresented: $showBarcodeScanningSetupModal) {
92103
POSBarcodeScannerSetup(isPresented: $showBarcodeScanningSetupModal, analytics: analytics)
93104
}
@@ -100,6 +111,36 @@ struct POSSettingsHardwareDetailView: View {
100111

101112
// MARK: - Views
102113
private extension POSSettingsHardwareDetailView {
114+
func paymentsOnboardingView(from onboardingViewContainer: CardPresentPaymentOnboardingViewContainer) -> some View {
115+
onboardingViewContainer.configuration.showSupport = {
116+
posModel.cancelCardPaymentsOnboarding()
117+
showSupport = true
118+
}
119+
120+
return PointOfSaleCardPresentPaymentOnboardingView(
121+
viewModel: .init(onboardingViewContainer: onboardingViewContainer,
122+
onDismissTap: {
123+
posModel.cancelCardPaymentsOnboarding()
124+
}))
125+
.onAppear {
126+
posModel.trackCardPaymentsOnboardingShown()
127+
}
128+
}
129+
130+
var supportForm: some View {
131+
NavigationView {
132+
externalViews.createSupportFormView(isPresented: $showSupport, sourceTag: Constants.supportTag)
133+
.toolbar {
134+
ToolbarItem(placement: .cancellationAction) {
135+
Button(Localization.supportCancel) {
136+
showSupport = false
137+
}
138+
}
139+
}
140+
}
141+
.navigationViewStyle(.stack)
142+
}
143+
103144
var legacyCardReadersView: some View {
104145
VStack(spacing: POSSpacing.none) {
105146
POSPageHeaderView(
@@ -354,6 +395,10 @@ private extension POSSettingsHardwareDetailView {
354395

355396
// MARK: - Constants
356397
private extension POSSettingsHardwareDetailView {
398+
enum Constants {
399+
static let supportTag = "origin:point-of-sale"
400+
}
401+
357402
enum Localization {
358403
static let readerModelTitle = NSLocalizedString(
359404
"pointOfSaleSettingsHardwareDetailView.readerModelTitle",
@@ -466,6 +511,12 @@ private extension POSSettingsHardwareDetailView {
466511
value: "Connect your card reader and start accepting payments",
467512
comment: "Subtitle for card reader connect button when no reader is connected."
468513
)
514+
515+
static let supportCancel = NSLocalizedString(
516+
"pointOfSaleSettingsHardwareDetailView.help.support.cancel",
517+
value: "Cancel",
518+
comment: "Button to dismiss the support form from POS settings."
519+
)
469520
}
470521
}
471522

0 commit comments

Comments
 (0)