Skip to content

Commit bf55b57

Browse files
authored
[Woo POS][Barcodes] Analytics for setup flow (#15907)
2 parents a1128f3 + 20bee21 commit bf55b57

19 files changed

+547
-119
lines changed

WooCommerce/Classes/Analytics/TracksProvider.swift

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,16 @@ private extension TracksProvider {
153153
WooAnalyticsStat.pointOfSaleBarcodeScannerSetupFlowShown,
154154
WooAnalyticsStat.pointOfSaleBarcodeScanningSuccess,
155155
WooAnalyticsStat.pointOfSaleBarcodeScanningFailed,
156+
WooAnalyticsStat.pointOfSaleBarcodeScannerSetupScannerSelected,
157+
WooAnalyticsStat.pointOfSaleBarcodeScannerSetupNextTapped,
158+
WooAnalyticsStat.pointOfSaleBarcodeScannerSetupBackTapped,
159+
WooAnalyticsStat.pointOfSaleBarcodeScannerSetupOpenSystemSettingsTapped,
160+
WooAnalyticsStat.pointOfSaleBarcodeScannerSetupTestScanSuccess,
161+
WooAnalyticsStat.pointOfSaleBarcodeScannerSetupTestScanFailed,
162+
WooAnalyticsStat.pointOfSaleBarcodeScannerSetupTestScanTimedOut,
163+
WooAnalyticsStat.pointOfSaleBarcodeScannerSetupDismissed,
164+
WooAnalyticsStat.pointOfSaleBarcodeScannerSetupRetryTapped,
165+
WooAnalyticsStat.pointOfSaleBarcodeScannerSetupScannerConnected,
156166

157167
// Order
158168
WooAnalyticsStat.orderCreationSuccess,

WooCommerce/Classes/Analytics/WooAnalyticsStat.swift

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1308,6 +1308,16 @@ enum WooAnalyticsStat: String {
13081308
case pointOfSaleBarcodeScannerSetupFlowShown = "barcode_scanner_setup_flow_shown"
13091309
case pointOfSaleBarcodeScanningSuccess = "barcode_scanned"
13101310
case pointOfSaleBarcodeScanningFailed = "barcode_scanning_failed"
1311+
case pointOfSaleBarcodeScannerSetupScannerSelected = "barcode_scanner_setup_scanner_selected"
1312+
case pointOfSaleBarcodeScannerSetupNextTapped = "barcode_scanner_setup_next_tapped"
1313+
case pointOfSaleBarcodeScannerSetupBackTapped = "barcode_scanner_setup_back_tapped"
1314+
case pointOfSaleBarcodeScannerSetupOpenSystemSettingsTapped = "barcode_scanner_setup_open_system_settings_tapped"
1315+
case pointOfSaleBarcodeScannerSetupTestScanSuccess = "barcode_scanner_setup_test_scan_success"
1316+
case pointOfSaleBarcodeScannerSetupTestScanFailed = "barcode_scanner_setup_test_scan_failed"
1317+
case pointOfSaleBarcodeScannerSetupTestScanTimedOut = "barcode_scanner_setup_test_scan_timed_out"
1318+
case pointOfSaleBarcodeScannerSetupDismissed = "barcode_scanner_setup_dismissed"
1319+
case pointOfSaleBarcodeScannerSetupRetryTapped = "barcode_scanner_setup_retry_tapped"
1320+
case pointOfSaleBarcodeScannerSetupScannerConnected = "barcode_scanner_setup_scanner_connected"
13111321

13121322
// MARK: Custom Fields events
13131323
case productDetailCustomFieldsTapped = "product_detail_custom_fields_tapped"

WooCommerce/Classes/POS/Analytics/WooAnalyticsEvent+PointOfSale.swift

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,9 @@ extension WooAnalyticsEvent {
3434
static let scanDurationMs = "scan_duration_ms"
3535
static let barcodeLength = "barcode_length"
3636
static let failReason = "fail_reason"
37+
static let scanner = "scanner"
38+
static let step = "step"
39+
static let scanValue = "scan_value"
3740
}
3841

3942
static func paymentsOnboardingShown() -> WooAnalyticsEvent {
@@ -214,6 +217,72 @@ extension WooAnalyticsEvent {
214217
Key.failReason: failReason
215218
])
216219
}
220+
221+
static func barcodeScannerSetupScannerSelected(scanner: PointOfSaleBarcodeScannerType) -> WooAnalyticsEvent {
222+
WooAnalyticsEvent(statName: .pointOfSaleBarcodeScannerSetupScannerSelected,
223+
properties: [Key.scanner: scanner.analyticsName])
224+
}
225+
226+
static func barcodeScannerSetupNextTapped(scanner: PointOfSaleBarcodeScannerType, step: String) -> WooAnalyticsEvent {
227+
WooAnalyticsEvent(statName: .pointOfSaleBarcodeScannerSetupNextTapped,
228+
properties: [
229+
Key.scanner: scanner.analyticsName,
230+
Key.step: step
231+
])
232+
}
233+
234+
static func barcodeScannerSetupBackTapped(scanner: PointOfSaleBarcodeScannerType, step: String) -> WooAnalyticsEvent {
235+
WooAnalyticsEvent(statName: .pointOfSaleBarcodeScannerSetupBackTapped,
236+
properties: [
237+
Key.scanner: scanner.analyticsName,
238+
Key.step: step
239+
])
240+
}
241+
242+
static func barcodeScannerSetupOpenSystemSettingsTapped(scanner: PointOfSaleBarcodeScannerType) -> WooAnalyticsEvent {
243+
WooAnalyticsEvent(statName: .pointOfSaleBarcodeScannerSetupOpenSystemSettingsTapped,
244+
properties: [Key.scanner: scanner.analyticsName])
245+
}
246+
247+
static func barcodeScannerSetupTestScanSuccess(scanner: PointOfSaleBarcodeScannerType) -> WooAnalyticsEvent {
248+
WooAnalyticsEvent(statName: .pointOfSaleBarcodeScannerSetupTestScanSuccess,
249+
properties: [Key.scanner: scanner.analyticsName])
250+
}
251+
252+
static func barcodeScannerSetupTestScanFailed(scanner: PointOfSaleBarcodeScannerType, scanValue: String) -> WooAnalyticsEvent {
253+
WooAnalyticsEvent(statName: .pointOfSaleBarcodeScannerSetupTestScanFailed,
254+
properties: [
255+
Key.scanner: scanner.analyticsName,
256+
Key.scanValue: scanValue
257+
])
258+
}
259+
260+
static func barcodeScannerSetupTestScanTimedOut(scanner: PointOfSaleBarcodeScannerType) -> WooAnalyticsEvent {
261+
WooAnalyticsEvent(statName: .pointOfSaleBarcodeScannerSetupTestScanTimedOut,
262+
properties: [Key.scanner: scanner.analyticsName])
263+
}
264+
265+
static func barcodeScannerSetupDismissed(scanner: PointOfSaleBarcodeScannerType? = nil, step: String? = nil) -> WooAnalyticsEvent {
266+
var properties: [String: String] = [:]
267+
if let scanner {
268+
properties[Key.scanner] = scanner.analyticsName
269+
}
270+
if let step {
271+
properties[Key.step] = step
272+
}
273+
return WooAnalyticsEvent(statName: .pointOfSaleBarcodeScannerSetupDismissed,
274+
properties: properties)
275+
}
276+
277+
static func barcodeScannerSetupRetryTapped(scanner: PointOfSaleBarcodeScannerType) -> WooAnalyticsEvent {
278+
WooAnalyticsEvent(statName: .pointOfSaleBarcodeScannerSetupRetryTapped,
279+
properties: [Key.scanner: scanner.analyticsName])
280+
}
281+
282+
static func barcodeScannerSetupScannerConnected(scanner: PointOfSaleBarcodeScannerType, step: String) -> WooAnalyticsEvent {
283+
WooAnalyticsEvent(statName: .pointOfSaleBarcodeScannerSetupScannerConnected,
284+
properties: [Key.scanner: scanner.analyticsName])
285+
}
217286
}
218287
}
219288

WooCommerce/Classes/POS/Models/PointOfSaleAggregateModel.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ protocol PointOfSaleAggregateModelProtocol {
3434
var couponsSearchController: PointOfSaleSearchingItemsControllerProtocol { get }
3535

3636
var cart: Cart { get }
37-
func barcodeScanned(_ result: Result<String, Error>)
37+
func barcodeScanned(_ result: Result<String, HIDBarcodeParserError>)
3838
func addToCart(_ item: POSItem)
3939
func remove(cartItem: CartItem)
4040
func removeAllItemsFromCart(types: [CartItemType])
@@ -185,7 +185,7 @@ extension PointOfSaleAggregateModel {
185185
// MARK: - Barcode Scanning
186186
@available(iOS 17.0, *)
187187
extension PointOfSaleAggregateModel {
188-
func barcodeScanned(_ result: Result<String, Error>) {
188+
func barcodeScanned(_ result: Result<String, HIDBarcodeParserError>) {
189189
Task { @MainActor [weak self] in
190190
guard let self else { return }
191191
switch result {

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,9 @@ struct PointOfSaleBarcodeScannerSetup: View {
3535
.onAppear {
3636
ServiceLocator.analytics.track(.pointOfSaleBarcodeScannerSetupFlowShown)
3737
}
38+
.onDisappear {
39+
flowManager.onDisappear()
40+
}
3841
}
3942

4043
// MARK: - Computed Properties

0 commit comments

Comments
 (0)