Skip to content

Commit cdf7c8e

Browse files
authored
Merge pull request #6189 from woocommerce/issue/6188-tracks-m1
Coupons: Add tracks for Milestone 1
2 parents 817631e + 59b1710 commit cdf7c8e

File tree

5 files changed

+19
-6
lines changed

5 files changed

+19
-6
lines changed

WooCommerce/Classes/Analytics/WooAnalyticsStat.swift

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -565,6 +565,12 @@ public enum WooAnalyticsStat: String {
565565
case hubMenuSwitchStoreTapped = "hub_menu_switch_store_tapped"
566566
case hubMenuOptionTapped = "hub_menu_option_tapped"
567567
case hubMenuSettingsTapped = "hub_menu_settings_tapped"
568+
569+
// MARK: Coupons
570+
case couponsLoaded = "coupons_loaded"
571+
case couponsLoadedFailed = "coupons_loaded_failed"
572+
case couponsListSearchTapped = "coupons_list_search_tapped"
573+
case couponDetails = "coupon_details"
568574
}
569575

570576
public extension WooAnalyticsStat {

WooCommerce/Classes/ViewRelated/Coupons/CouponDetails/CouponDetails.swift

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,8 @@ struct CouponDetails: View {
3434
self.noticePresenter = DefaultNoticePresenter()
3535
viewModel.syncCoupon()
3636
viewModel.loadCouponReport()
37+
38+
ServiceLocator.analytics.track(.couponDetails, withProperties: ["action": "loaded"])
3739
}
3840

3941
private var detailRows: [DetailRow] {
@@ -60,9 +62,11 @@ struct CouponDetails: View {
6062
UIPasteboard.general.string = viewModel.couponCode
6163
let notice = Notice(title: Localization.couponCopied, feedbackType: .success)
6264
noticePresenter.enqueue(notice: notice)
65+
ServiceLocator.analytics.track(.couponDetails, withProperties: ["action": "copied_code"])
6366
}),
6467
.default(Text(Localization.shareCoupon), action: {
6568
showingShareSheet = true
69+
ServiceLocator.analytics.track(.couponDetails, withProperties: ["action": "shared_code"])
6670
}),
6771
.cancel()
6872
]

WooCommerce/Classes/ViewRelated/Coupons/CouponListViewController.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -167,7 +167,7 @@ private extension CouponListViewController {
167167
/// Shows `SearchViewController`.
168168
///
169169
@objc private func displaySearchCoupons() {
170-
// TODO: add analytics
170+
ServiceLocator.analytics.track(.couponsListSearchTapped)
171171
let searchViewController = SearchViewController<TitleAndSubtitleAndStatusTableViewCell, CouponSearchUICommand>(
172172
storeID: siteID,
173173
command: CouponSearchUICommand(),

WooCommerce/Classes/ViewRelated/Coupons/CouponListViewModel.swift

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -151,20 +151,23 @@ extension CouponListViewModel: SyncingCoordinatorDelegate {
151151
pageNumber: pageNumber,
152152
pageSize: pageSize) { [weak self] result in
153153
guard let self = self else { return }
154-
self.handleCouponSyncResult(result: result)
154+
self.handleCouponSyncResult(result: result, pageNumber: pageNumber)
155155
onCompletion?(result.isSuccess)
156156
}
157157

158158
storesManager.dispatch(action)
159159
}
160160

161-
func handleCouponSyncResult(result: Result<Bool, Error>) {
161+
func handleCouponSyncResult(result: Result<Bool, Error>, pageNumber: Int) {
162162
switch result {
163163
case .success:
164164
DDLogInfo("Synchronized coupons")
165+
ServiceLocator.analytics.track(.couponsLoaded,
166+
withProperties: ["is_loading_more": pageNumber != SyncingCoordinator.Defaults.pageFirstIndex])
165167

166168
case .failure(let error):
167169
DDLogError("⛔️ Error synchronizing coupons: \(error)")
170+
ServiceLocator.analytics.track(.couponsLoadedFailed, withError: error)
168171
}
169172

170173
self.transitionToResultsUpdatedState(hasData: couponViewModels.isNotEmpty)

WooCommerce/WooCommerceTests/ViewRelated/Coupons/CouponListViewModelTests.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ final class CouponListViewModelTests: XCTestCase {
9797
setUpWithCouponFetched()
9898

9999
// When
100-
sut.handleCouponSyncResult(result: .success(false))
100+
sut.handleCouponSyncResult(result: .success(false), pageNumber: 1)
101101

102102
// Then
103103
XCTAssertEqual(sut.state, .coupons)
@@ -106,7 +106,7 @@ final class CouponListViewModelTests: XCTestCase {
106106

107107
func test_handleCouponSyncResult_shows_empty_when_no_coupons_present() {
108108
// When
109-
sut.handleCouponSyncResult(result: .success(false))
109+
sut.handleCouponSyncResult(result: .success(false), pageNumber: 1)
110110

111111
// Then
112112
XCTAssertEqual(sut.state, .empty)
@@ -140,7 +140,7 @@ final class CouponListViewModelTests: XCTestCase {
140140
sut.refreshCoupons()
141141

142142
// When
143-
sut.handleCouponSyncResult(result: .success(false))
143+
sut.handleCouponSyncResult(result: .success(false), pageNumber: 1)
144144

145145
// Then
146146
XCTAssertEqual(sut.state, .coupons)

0 commit comments

Comments
 (0)