Skip to content

Commit b87be79

Browse files
committed
Add product setup info screen
1 parent 8ada400 commit b87be79

File tree

6 files changed

+96
-10
lines changed

6 files changed

+96
-10
lines changed

WooCommerce/Classes/POS/Presentation/Barcode Scanner Setup/PointOfSaleBarcodeScannerSetupFlow.swift

Lines changed: 38 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -148,8 +148,9 @@ class PointOfSaleBarcodeScannerSetupFlow {
148148
content: {
149149
PointOfSaleBarcodeScannerSetupCompleteView()
150150
},
151+
buttonCustomization: PointOfSaleBarcodeScannerOptionalScannerInformationButtonCustomization(),
151152
transitions: [
152-
.back: .test
153+
.optionalNext: .information,
153154
]),
154155
.testFailed: PointOfSaleBarcodeScannerSetupStep(
155156
content: {
@@ -160,8 +161,11 @@ class PointOfSaleBarcodeScannerSetupFlow {
160161
.retry: .start,
161162
.back: .test
162163
]
164+
),
165+
.information: PointOfSaleBarcodeScannerSetupStep(
166+
content: { ProductBarcodeSetupInformation() },
167+
buttonCustomization: PointOfSaleBarcodeScannerNoButtonsButtonCustomization()
163168
)
164-
// TODO: add product barcode setup info step WOOMOB-696
165169
]
166170
case .tbcScanner:
167171
return [
@@ -171,9 +175,14 @@ class PointOfSaleBarcodeScannerSetupFlow {
171175
case .other:
172176
return [
173177
.start: PointOfSaleBarcodeScannerSetupStep(
174-
content: { BarcodeScannerInformation() }
178+
content: { BarcodeScannerInformation() },
179+
transitions: [.next: .information]
180+
),
181+
.information: PointOfSaleBarcodeScannerSetupStep(
182+
content: { ProductBarcodeSetupInformation() },
183+
buttonCustomization: PointOfSaleBarcodeScannerBackOnlyButtonCustomization(),
184+
transitions: [.back: .start]
175185
)
176-
// TODO: Add product barcode setup info step
177186
]
178187
}
179188
}
@@ -237,6 +246,31 @@ struct PointOfSaleBarcodeScannerErrorButtonCustomization: PointOfSaleBarcodeScan
237246
}
238247
}
239248

249+
@available(iOS 17.0, *)
250+
struct PointOfSaleBarcodeScannerOptionalScannerInformationButtonCustomization: PointOfSaleBarcodeScannerButtonCustomization {
251+
func customizeButtons(for flow: PointOfSaleBarcodeScannerSetupFlow) -> PointOfSaleFlowButtonConfiguration {
252+
return PointOfSaleFlowButtonConfiguration(
253+
primaryButton: nil,
254+
secondaryButton: PointOfSaleFlowButtonConfiguration.ButtonConfig(
255+
title: Localization.informationButtonTitle,
256+
action: { flow.transition(to: .optionalNext) }
257+
)
258+
)
259+
}
260+
261+
private enum Localization {
262+
static let informationButtonTitle = "How to set up barcodes on products"
263+
}
264+
}
265+
266+
@available(iOS 17.0, *)
267+
struct PointOfSaleBarcodeScannerNoButtonsButtonCustomization: PointOfSaleBarcodeScannerButtonCustomization {
268+
func customizeButtons(for flow: PointOfSaleBarcodeScannerSetupFlow) -> PointOfSaleFlowButtonConfiguration {
269+
return PointOfSaleFlowButtonConfiguration.noButtons()
270+
}
271+
}
272+
273+
240274
// MARK: - Private Localization Extension
241275
@available(iOS 17.0, *)
242276
private extension PointOfSaleBarcodeScannerSetupFlow {

WooCommerce/Classes/POS/Presentation/Barcode Scanner Setup/PointOfSaleBarcodeScannerSetupModels.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ protocol PointOfSaleBarcodeScannerButtonCustomization {
6464
// MARK: - Transition Types
6565
enum PointOfSaleBarcodeScannerTransitionType: Hashable {
6666
case next
67+
case optionalNext
6768
case error
6869
case retry
6970
case back

WooCommerce/Classes/POS/Presentation/PointOfSaleAssets.swift

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ enum PointOfSaleAssets: CaseIterable {
1515
case successCheck
1616
case coupons
1717
case gears
18+
case barcodeFieldScreenshot
1819
//TODO: WOOMOB-793 Update the imagesets for these barcodes to vector/dark mode friendly images
1920
case starBsh20SetupBarcode
2021
case testEan13Barcode
@@ -49,6 +50,8 @@ enum PointOfSaleAssets: CaseIterable {
4950
"coupons"
5051
case .gears:
5152
"pos-gears"
53+
case .barcodeFieldScreenshot:
54+
"barcode-field-screenshot"
5255
case .starBsh20SetupBarcode:
5356
"star-bsh20-setup-barcode"
5457
case .testEan13Barcode:

WooCommerce/Classes/POS/Presentation/PointOfSaleBarcodeScannerInformationModal.swift

Lines changed: 42 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ struct LegacyBarcodeScannerInformationContent: View {
6060

6161
struct BarcodeScannerInformation: View {
6262
var body: some View {
63-
VStack(spacing: POSSpacing.xxLarge){
63+
VStack(spacing: POSSpacing.xxLarge) {
6464
Text(Localization.scannerInfoHeading)
6565
.font(.posHeadingBold)
6666
.accessibilityAddTraits(.isHeader)
@@ -91,6 +91,45 @@ struct BarcodeScannerInformation: View {
9191
}
9292
}
9393

94+
@available(iOS 17.0, *)
95+
struct ProductBarcodeSetupInformation: View {
96+
var body: some View {
97+
VStack(spacing: POSSpacing.xxLarge) {
98+
Text(Localization.productBarcodeInfoHeading)
99+
.font(.posHeadingBold)
100+
.accessibilityAddTraits(.isHeader)
101+
102+
VStack(spacing: POSSpacing.medium) {
103+
PointOfSaleInformationModalParagraphView {
104+
Text(bulletPointWithLink)
105+
.accessibilityLabel(bulletPointWithLinkAccessibilityLabel)
106+
}
107+
}
108+
109+
Image(decorative: PointOfSaleAssets.barcodeFieldScreenshot.imageName)
110+
.resizable()
111+
.aspectRatio(contentMode: .fit)
112+
}
113+
.onAppear(perform: {
114+
ServiceLocator.analytics.track(.pointOfSaleBarcodeScanningExplanationDialogShown)
115+
})
116+
}
117+
118+
private var bulletPointWithLink: AttributedString {
119+
var secondary = AttributedString(Localization.barcodeInfoPrimaryMessage + " ")
120+
var moreDetails = AttributedString(Localization.barcodeInfoMoreDetailsLink)
121+
moreDetails.link = Constants.detailsLink
122+
moreDetails.foregroundColor = .posPrimary
123+
moreDetails.underlineStyle = .single
124+
secondary.append(moreDetails)
125+
return secondary
126+
}
127+
128+
private var bulletPointWithLinkAccessibilityLabel: String {
129+
return Localization.barcodeInfoPrimaryMessageAccessible + " " + Localization.barcodeInfoMoreDetailsLinkAccessible
130+
}
131+
}
132+
94133
private enum Constants {
95134
static let detailsLink = URL(string: "https://woocommerce.com/document/barcode-and-qr-code-scanner/")
96135
}
@@ -102,11 +141,8 @@ private enum Localization {
102141
comment: "Heading for the barcode info modal in POS, introducing barcode scanning feature"
103142
)
104143

105-
static let scannerInfoHeading = NSLocalizedString(
106-
"pos.scannerInfoModal.heading",
107-
value: "Scanner set up",
108-
comment: "Heading for the barcode info modal in POS, introducing barcode scanning feature"
109-
)
144+
static let scannerInfoHeading = "Scanner set up"
145+
static let productBarcodeInfoHeading = "How to set up barcodes on products"
110146

111147
static let barcodeInfoIntroMessage = NSLocalizedString(
112148
"pos.barcodeInfoModal.introMessage",
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
{
2+
"images" : [
3+
{
4+
"filename" : "barcode-field-screenshot.pdf",
5+
"idiom" : "universal"
6+
}
7+
],
8+
"info" : {
9+
"author" : "xcode",
10+
"version" : 1
11+
}
12+
}

0 commit comments

Comments
 (0)