11import SwiftUI
22
3+ // MARK: - Data Models
4+ struct ScannerOption : Identifiable {
5+ let id = UUID ( )
6+ let title : String
7+ let subtitle : String
8+ let destination : SetupDestination
9+ }
10+
11+ enum SetupDestination {
12+ case socketS720
13+ case starBSH20B
14+ case tbcScanner
15+ case other
16+ }
17+
318@available ( iOS 17 . 0 , * )
419struct PointOfSaleBarcodeScannerSetUpFlow : View {
520 @Binding var isPresented : Bool
@@ -15,14 +30,14 @@ struct PointOfSaleBarcodeScannerSetUpFlow: View {
1530 title: . constant( AttributedString ( Localization . setupHeading) ) )
1631
1732 VStack {
18- ScannerSelectionView ( isPresented: $isPresented)
33+ ScannerSelectionView ( options : scannerOptions , isPresented: $isPresented)
1934 Spacer ( )
2035 }
2136 . scrollVerticallyIfNeeded ( )
2237 }
2338 . toolbar ( . hidden, for: . navigationBar)
39+ . padding ( POSPadding . xxLarge)
2440 }
25- . padding ( POSPadding . xxLarge)
2641 . background ( Color . posSurfaceBright)
2742 . containerRelativeFrame ( [ . horizontal, . vertical] ) { length, _ in
2843 max ( length * 0.75 , Constants . modalFrameMaxSmallDimension)
@@ -31,57 +46,73 @@ struct PointOfSaleBarcodeScannerSetUpFlow: View {
3146 ServiceLocator . analytics. track ( . pointOfSaleBarcodeScannerSetupFlowShown)
3247 }
3348 }
49+
50+ private var scannerOptions : [ ScannerOption ] {
51+ [
52+ ScannerOption (
53+ title: Localization . socketS720Title,
54+ subtitle: Localization . socketS720Subtitle,
55+ destination: . socketS720
56+ ) ,
57+ ScannerOption (
58+ title: Localization . starBSH20BTitle,
59+ subtitle: Localization . starBSH20BSubtitle,
60+ destination: . starBSH20B
61+ ) ,
62+ ScannerOption (
63+ title: Localization . tbcScannerTitle,
64+ subtitle: Localization . tbcScannerSubtitle,
65+ destination: . tbcScanner
66+ ) ,
67+ ScannerOption (
68+ title: Localization . otherTitle,
69+ subtitle: Localization . otherSubtitle,
70+ destination: . other
71+ )
72+ ]
73+ }
3474}
3575
3676struct ScannerSelectionView : View {
77+ let options : [ ScannerOption ]
3778 @Binding var isPresented : Bool
79+
3880 var body : some View {
39- VStack ( spacing: POSSpacing . medium) {
81+ VStack ( alignment : . leading , spacing: POSSpacing . medium) {
4082 Text ( Localization . setupIntroMessage)
4183 . font ( . posBodyLargeRegular( ) )
4284 . foregroundStyle ( Color . posOnSurface)
4385 . multilineTextAlignment ( . leading)
4486 . fixedSize ( horizontal: false , vertical: true )
4587
4688 VStack ( spacing: POSSpacing . small) {
47- // Socket S720
48- NavigationLink ( destination: EmptyView ( ) ) {
49- ScannerOptionView (
50- title: Localization . socketS720Title,
51- subtitle: Localization . socketS720Subtitle
52- )
53- }
54- . buttonStyle ( PlainButtonStyle ( ) )
55-
56- // Star BSH-20B
57- NavigationLink ( destination: EmptyView ( ) ) {
58- ScannerOptionView (
59- title: Localization . starBSH20BTitle,
60- subtitle: Localization . starBSH20BSubtitle
61- )
62- }
63- . buttonStyle ( PlainButtonStyle ( ) )
64-
65- // TBC Scanner
66- NavigationLink ( destination: EmptyView ( ) ) {
67- ScannerOptionView (
68- title: Localization . tbcScannerTitle,
69- subtitle: Localization . tbcScannerSubtitle
70- )
71- }
72- . buttonStyle ( PlainButtonStyle ( ) )
73-
74- // Other
75- NavigationLink ( destination: BarcodeScannerInformationView ( isPresented: $isPresented) ) {
76- ScannerOptionView (
77- title: Localization . otherTitle,
78- subtitle: Localization . otherSubtitle
79- )
89+ ForEach ( options) { option in
90+ NavigationLink ( destination: destinationView ( for: option. destination) ) {
91+ ScannerOptionView (
92+ title: option. title,
93+ subtitle: option. subtitle
94+ )
95+ }
96+ . buttonStyle ( PlainButtonStyle ( ) )
8097 }
81- . buttonStyle ( PlainButtonStyle ( ) )
8298 }
8399 }
84100 }
101+
102+ @ViewBuilder
103+ private func destinationView( for destination: SetupDestination ) -> some View {
104+ switch destination {
105+ case . socketS720:
106+ EmptyView ( ) // TODO: Implement Socket S720 setup flow WOOMOB-698
107+ case . starBSH20B:
108+ EmptyView ( ) // TODO: Implement Star BSH-20B setup flow WOOMOB-696
109+ case . tbcScanner:
110+ EmptyView ( ) // TODO: Implement TBC scanner setup flow WOOMOB-699
111+ case . other:
112+ BarcodeScannerInformationView ( isPresented: $isPresented)
113+ . padding ( POSPadding . xxLarge)
114+ }
115+ }
85116}
86117
87118struct ScannerOptionView : View {
0 commit comments