Skip to content

Commit 18ab5c9

Browse files
authored
Merge pull request #8701 from woocommerce/issue/8522-tracks
Bulk Editing: Tracks
2 parents 1f20ff6 + 6fec85d commit 18ab5c9

File tree

3 files changed

+60
-0
lines changed

3 files changed

+60
-0
lines changed

WooCommerce/Classes/Analytics/WooAnalyticsEvent.swift

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1814,6 +1814,44 @@ extension WooAnalyticsEvent {
18141814
}
18151815
}
18161816

1817+
// MARK: - Products List
1818+
//
1819+
extension WooAnalyticsEvent {
1820+
enum ProductsList {
1821+
enum Keys: String {
1822+
case property
1823+
case selectedProductsCount = "selected_products_count"
1824+
}
1825+
1826+
enum BulkUpdateField: String {
1827+
case price
1828+
case status
1829+
}
1830+
1831+
static func bulkUpdateRequested(field: BulkUpdateField, selectedProductsCount: Int) -> WooAnalyticsEvent {
1832+
WooAnalyticsEvent(statName: .productListBulkUpdateRequested, properties: [Keys.property.rawValue: field.rawValue,
1833+
Keys.selectedProductsCount.rawValue: Int64(selectedProductsCount)])
1834+
}
1835+
1836+
static func bulkUpdateConfirmed(field: BulkUpdateField, selectedProductsCount: Int) -> WooAnalyticsEvent {
1837+
WooAnalyticsEvent(statName: .productListBulkUpdateConfirmed, properties: [Keys.property.rawValue: field.rawValue,
1838+
Keys.selectedProductsCount.rawValue: Int64(selectedProductsCount)])
1839+
}
1840+
1841+
static func bulkUpdateSuccess(field: BulkUpdateField) -> WooAnalyticsEvent {
1842+
WooAnalyticsEvent(statName: .productListBulkUpdateSuccess, properties: [Keys.property.rawValue: field.rawValue])
1843+
}
1844+
1845+
static func bulkUpdateFailure(field: BulkUpdateField) -> WooAnalyticsEvent {
1846+
WooAnalyticsEvent(statName: .productListBulkUpdateFailure, properties: [Keys.property.rawValue: field.rawValue])
1847+
}
1848+
1849+
static func bulkUpdateSelectAllTapped() -> WooAnalyticsEvent {
1850+
WooAnalyticsEvent(statName: .productListBulkUpdateSelectAllTapped, properties: [:])
1851+
}
1852+
}
1853+
}
1854+
18171855
// MARK: - Analytics Hub
18181856
//
18191857
extension WooAnalyticsEvent {

WooCommerce/Classes/Analytics/WooAnalyticsStat.swift

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -474,6 +474,14 @@ public enum WooAnalyticsStat: String {
474474
case productListAddProductTapped = "product_list_add_product_button_tapped"
475475
case productListClearFiltersTapped = "product_list_clear_filters_button_tapped"
476476

477+
// MARK: Product List Bulk Editing Events
478+
//
479+
case productListBulkUpdateRequested = "product_list_bulk_update_requested"
480+
case productListBulkUpdateConfirmed = "product_list_bulk_update_confirmed"
481+
case productListBulkUpdateSuccess = "product_list_bulk_update_success"
482+
case productListBulkUpdateFailure = "product_list_bulk_update_failure"
483+
case productListBulkUpdateSelectAllTapped = "product_list_bulk_update_select_all_tapped"
484+
477485
// MARK: Add Product Events
478486
//
479487
case addProductCreationTypeSelected = "add_product_creation_type_selected"

WooCommerce/Classes/ViewRelated/Products/ProductsViewController.swift

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -346,6 +346,8 @@ private extension ProductsViewController {
346346
}
347347

348348
@objc func selectAllProducts() {
349+
ServiceLocator.analytics.track(event: .ProductsList.bulkUpdateSelectAllTapped())
350+
349351
viewModel.selectProducts(resultsController.fetchedObjects)
350352
updatedSelectedItems()
351353
tableView.reloadRows(at: tableView.indexPathsForVisibleRows ?? [], with: .none)
@@ -377,6 +379,8 @@ private extension ProductsViewController {
377379
}
378380

379381
func showStatusBulkEditingModal() {
382+
ServiceLocator.analytics.track(event: .ProductsList.bulkUpdateRequested(field: .status, selectedProductsCount: viewModel.selectedProductsCount))
383+
380384
let initialStatus = viewModel.commonStatusForSelectedProducts
381385
let command = ProductStatusSettingListSelectorCommand(selected: initialStatus)
382386
let listSelectorViewController = ListSelectorViewController(command: command) { _ in
@@ -409,6 +413,8 @@ private extension ProductsViewController {
409413
func applyBulkEditingStatus(newStatus: ProductStatus?, modalVC: UIViewController) {
410414
guard let newStatus else { return }
411415

416+
ServiceLocator.analytics.track(event: .ProductsList.bulkUpdateConfirmed(field: .status, selectedProductsCount: viewModel.selectedProductsCount))
417+
412418
displayProductsSavingInProgressView(on: modalVC)
413419
viewModel.updateSelectedProducts(with: newStatus) { [weak self] result in
414420
guard let self else { return }
@@ -418,13 +424,17 @@ private extension ProductsViewController {
418424
case .success:
419425
self.finishBulkEditing()
420426
self.presentNotice(title: Localization.statusUpdatedNotice)
427+
ServiceLocator.analytics.track(event: .ProductsList.bulkUpdateSuccess(field: .status))
421428
case .failure:
422429
self.presentNotice(title: Localization.updateErrorNotice)
430+
ServiceLocator.analytics.track(event: .ProductsList.bulkUpdateFailure(field: .status))
423431
}
424432
}
425433
}
426434

427435
func showPriceBulkEditingModal() {
436+
ServiceLocator.analytics.track(event: .ProductsList.bulkUpdateRequested(field: .price, selectedProductsCount: viewModel.selectedProductsCount))
437+
428438
let priceInputViewModel = PriceInputViewModel(productListViewModel: viewModel)
429439
let priceInputViewController = PriceInputViewController(viewModel: priceInputViewModel)
430440
priceInputViewModel.cancelClosure = { [weak self] in
@@ -439,6 +449,8 @@ private extension ProductsViewController {
439449
func applyBulkEditingPrice(newPrice: String?, modalVC: UIViewController) {
440450
guard let newPrice else { return }
441451

452+
ServiceLocator.analytics.track(event: .ProductsList.bulkUpdateConfirmed(field: .price, selectedProductsCount: viewModel.selectedProductsCount))
453+
442454
displayProductsSavingInProgressView(on: modalVC)
443455
viewModel.updateSelectedProducts(with: newPrice) { [weak self] result in
444456
guard let self else { return }
@@ -448,8 +460,10 @@ private extension ProductsViewController {
448460
case .success:
449461
self.finishBulkEditing()
450462
self.presentNotice(title: Localization.priceUpdatedNotice)
463+
ServiceLocator.analytics.track(event: .ProductsList.bulkUpdateSuccess(field: .price))
451464
case .failure:
452465
self.presentNotice(title: Localization.updateErrorNotice)
466+
ServiceLocator.analytics.track(event: .ProductsList.bulkUpdateFailure(field: .price))
453467
}
454468
}
455469
}

0 commit comments

Comments
 (0)