Skip to content

Commit f731d3c

Browse files
committed
Define scanner options to start the flows from
1 parent ce6e749 commit f731d3c

File tree

1 file changed

+68
-37
lines changed

1 file changed

+68
-37
lines changed

WooCommerce/Classes/POS/Presentation/PointOfSaleBarcodeScannerSetUpFlow.swift

Lines changed: 68 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,20 @@
11
import 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, *)
419
struct 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

3676
struct 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

87118
struct ScannerOptionView: View {

0 commit comments

Comments
 (0)