Skip to content

Commit c93884f

Browse files
committed
Add tracks events for products build update
1 parent 7008f8a commit c93884f

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 bulkUpdateSelectAll() -> WooAnalyticsEvent {
1850+
WooAnalyticsEvent(statName: .productListBulkUpdateSelectAll, 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 productListBulkUpdateSelectAll = "product_list_bulk_update_select_all"
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.bulkUpdateSelectAll())
350+
349351
viewModel.selectProducts(resultsController.fetchedObjects)
350352
updatedSelectedItems()
351353
tableView.reloadRows(at: tableView.indexPathsForVisibleRows ?? [], with: .none)
@@ -375,6 +377,8 @@ private extension ProductsViewController {
375377
}
376378

377379
func showStatusBulkEditingModal() {
380+
ServiceLocator.analytics.track(event: .ProductsList.bulkUpdateRequested(field: .status, selectedProductsCount: viewModel.selectedProductsCount))
381+
378382
let initialStatus = viewModel.commonStatusForSelectedProducts
379383
let command = ProductStatusSettingListSelectorCommand(selected: initialStatus)
380384
let listSelectorViewController = ListSelectorViewController(command: command) { _ in
@@ -407,6 +411,8 @@ private extension ProductsViewController {
407411
func applyBulkEditingStatus(newStatus: ProductStatus?, modalVC: UIViewController) {
408412
guard let newStatus else { return }
409413

414+
ServiceLocator.analytics.track(event: .ProductsList.bulkUpdateConfirmed(field: .status, selectedProductsCount: viewModel.selectedProductsCount))
415+
410416
displayProductsSavingInProgressView(on: modalVC)
411417
viewModel.updateSelectedProducts(with: newStatus) { [weak self] result in
412418
guard let self else { return }
@@ -416,13 +422,17 @@ private extension ProductsViewController {
416422
case .success:
417423
self.finishBulkEditing()
418424
self.presentNotice(title: Localization.statusUpdatedNotice)
425+
ServiceLocator.analytics.track(event: .ProductsList.bulkUpdateSuccess(field: .status))
419426
case .failure:
420427
self.presentNotice(title: Localization.updateErrorNotice)
428+
ServiceLocator.analytics.track(event: .ProductsList.bulkUpdateFailure(field: .status))
421429
}
422430
}
423431
}
424432

425433
func showPriceBulkEditingModal() {
434+
ServiceLocator.analytics.track(event: .ProductsList.bulkUpdateRequested(field: .price, selectedProductsCount: viewModel.selectedProductsCount))
435+
426436
let priceInputViewModel = PriceInputViewModel(productListViewModel: viewModel)
427437
let priceInputViewController = PriceInputViewController(viewModel: priceInputViewModel)
428438
priceInputViewModel.cancelClosure = { [weak self] in
@@ -437,6 +447,8 @@ private extension ProductsViewController {
437447
func applyBulkEditingPrice(newPrice: String?, modalVC: UIViewController) {
438448
guard let newPrice else { return }
439449

450+
ServiceLocator.analytics.track(event: .ProductsList.bulkUpdateConfirmed(field: .price, selectedProductsCount: viewModel.selectedProductsCount))
451+
440452
displayProductsSavingInProgressView(on: modalVC)
441453
viewModel.updateSelectedProducts(with: newPrice) { [weak self] result in
442454
guard let self else { return }
@@ -446,8 +458,10 @@ private extension ProductsViewController {
446458
case .success:
447459
self.finishBulkEditing()
448460
self.presentNotice(title: Localization.priceUpdatedNotice)
461+
ServiceLocator.analytics.track(event: .ProductsList.bulkUpdateSuccess(field: .price))
449462
case .failure:
450463
self.presentNotice(title: Localization.updateErrorNotice)
464+
ServiceLocator.analytics.track(event: .ProductsList.bulkUpdateFailure(field: .price))
451465
}
452466
}
453467
}

0 commit comments

Comments
 (0)