@@ -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
102113private 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
356397private 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