@@ -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 {
@@ -91,15 +93,12 @@ struct POSSettingsHardwareDetailView: View {
9193 . posModal ( item: $posModel. cardPresentPaymentOnboardingViewContainer, onDismiss: {
9294 posModel. cancelCardPaymentsOnboarding ( )
9395 } , content: { viewContainer in
94- PointOfSaleCardPresentPaymentOnboardingView (
95- viewModel: . init( onboardingViewContainer: viewContainer,
96- onDismissTap: {
97- posModel. cancelCardPaymentsOnboarding ( )
98- } ) )
99- . onAppear {
100- posModel. trackCardPaymentsOnboardingShown ( )
101- }
96+ paymentsOnboardingView ( from: viewContainer)
10297 } )
98+ . posSheet ( isPresented: $showSupport) {
99+ supportForm
100+ . interactiveDismissDisabled ( true )
101+ }
103102 . posModal ( isPresented: $showBarcodeScanningSetupModal) {
104103 POSBarcodeScannerSetup ( isPresented: $showBarcodeScanningSetupModal, analytics: analytics)
105104 }
@@ -112,6 +111,36 @@ struct POSSettingsHardwareDetailView: View {
112111
113112// MARK: - Views
114113private 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+
115144 var legacyCardReadersView : some View {
116145 VStack ( spacing: POSSpacing . none) {
117146 POSPageHeaderView (
@@ -366,6 +395,10 @@ private extension POSSettingsHardwareDetailView {
366395
367396// MARK: - Constants
368397private extension POSSettingsHardwareDetailView {
398+ enum Constants {
399+ static let supportTag = " origin:point-of-sale "
400+ }
401+
369402 enum Localization {
370403 static let readerModelTitle = NSLocalizedString (
371404 " pointOfSaleSettingsHardwareDetailView.readerModelTitle " ,
@@ -478,6 +511,12 @@ private extension POSSettingsHardwareDetailView {
478511 value: " Connect your card reader and start accepting payments " ,
479512 comment: " Subtitle for card reader connect button when no reader is connected. "
480513 )
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+ )
481520 }
482521}
483522
0 commit comments