Skip to content

Commit 3e3424a

Browse files
committed
DI tracker into aggregate model from shared instance
1 parent 94eae8e commit 3e3424a

18 files changed

+72
-26
lines changed

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

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,10 @@ extension WooAnalyticsEvent {
3232
properties: [Key.itemsInCart: itemsInCart])
3333
}
3434

35-
static func cardPresentCollectPaymentSuccess() -> WooAnalyticsEvent {
36-
WooAnalyticsEvent(statName: .collectPaymentSuccess, properties: [:])
35+
static func cardPresentCollectPaymentSuccess(millisecondsSinceCustomerIteractionStated: Double) -> WooAnalyticsEvent {
36+
WooAnalyticsEvent(statName: .collectPaymentSuccess, properties: [
37+
"milliseconds_since_customer_interaction_started" : "\(millisecondsSinceCustomerIteractionStated)"]
38+
)
3739
}
3840
}
3941
}

WooCommerce/Classes/POS/Models/PointOfSaleAggregateModel.swift

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ protocol PointOfSaleAggregateModelProtocol {
6262
private let cardPresentPaymentService: CardPresentPaymentFacade
6363
private let orderController: PointOfSaleOrderControllerProtocol
6464
private let analytics: Analytics
65+
private let collectOrderPaymentAnalyticsTracker: CollectOrderPaymentAnalyticsTracking
6566

6667
private var startPaymentOnCardReaderConnection: AnyCancellable?
6768
private var cardReaderDisconnection: AnyCancellable?
@@ -72,11 +73,13 @@ protocol PointOfSaleAggregateModelProtocol {
7273
cardPresentPaymentService: CardPresentPaymentFacade,
7374
orderController: PointOfSaleOrderControllerProtocol,
7475
analytics: Analytics = ServiceLocator.analytics,
76+
collectOrderPaymentAnalyticsTracker: CollectOrderPaymentAnalyticsTracking,
7577
paymentState: PointOfSalePaymentState = .card(.idle)) {
7678
self.itemsController = itemsController
7779
self.cardPresentPaymentService = cardPresentPaymentService
7880
self.orderController = orderController
7981
self.analytics = analytics
82+
self.collectOrderPaymentAnalyticsTracker = collectOrderPaymentAnalyticsTracker
8083
self.paymentState = paymentState
8184
publishCardReaderConnectionStatus()
8285
publishPaymentMessages()
@@ -121,6 +124,7 @@ private extension POSItem {
121124
@available(iOS 17.0, *)
122125
extension PointOfSaleAggregateModel {
123126
func addToCart(_ item: POSItem) {
127+
trackCustomerInteractionStarted()
124128
guard let cartItem = item.cartItem else { return }
125129
cart.insert(cartItem, at: cart.startIndex)
126130
}
@@ -149,6 +153,11 @@ extension PointOfSaleAggregateModel {
149153
paymentState = .card(.idle)
150154
cardPresentPaymentInlineMessage = nil
151155
}
156+
157+
private func trackCustomerInteractionStarted() {
158+
// TODO: Only track if no cart items yet
159+
collectOrderPaymentAnalyticsTracker.trackCustomerInteractionStarted()
160+
}
152161
}
153162

154163
// MARK: - Card payments

WooCommerce/Classes/POS/Presentation/CardReaderConnection/CardReaderConnectionStatusView.swift

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -166,7 +166,8 @@ private extension CardReaderConnectionStatusView {
166166
let posModel = PointOfSaleAggregateModel(
167167
itemsController: PointOfSalePreviewItemsController(),
168168
cardPresentPaymentService: CardPresentPaymentPreviewService(),
169-
orderController: PointOfSalePreviewOrderController()
169+
orderController: PointOfSalePreviewOrderController(),
170+
collectOrderPaymentAnalyticsTracker: POSCollectOrderPaymentAnalytics()
170171
)
171172
VStack {
172173
CardReaderConnectionStatusView()

WooCommerce/Classes/POS/Presentation/CardReaderConnection/UI States/Reader Messages/PointOfSalePaymentSuccessView.swift

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,8 @@ private extension PointOfSalePaymentSuccessView {
112112
let posModel = PointOfSaleAggregateModel(
113113
itemsController: PointOfSalePreviewItemsController(),
114114
cardPresentPaymentService: CardPresentPaymentPreviewService(),
115-
orderController: PointOfSalePreviewOrderController())
115+
orderController: PointOfSalePreviewOrderController(),
116+
collectOrderPaymentAnalyticsTracker: POSCollectOrderPaymentAnalytics())
116117
return PointOfSalePaymentSuccessView(
117118
viewModel: PointOfSalePaymentSuccessViewModel(formattedOrderTotal: "$3.00",
118119
paymentMethod: .card)

WooCommerce/Classes/POS/Presentation/CartView.swift

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -302,7 +302,8 @@ private extension CartView {
302302
let posModel = PointOfSaleAggregateModel(
303303
itemsController: PointOfSalePreviewItemsController(),
304304
cardPresentPaymentService: CardPresentPaymentPreviewService(),
305-
orderController: PointOfSalePreviewOrderController())
305+
orderController: PointOfSalePreviewOrderController(),
306+
collectOrderPaymentAnalyticsTracker: POSCollectOrderPaymentAnalytics())
306307
return CartView()
307308
.environment(posModel)
308309
}
@@ -312,7 +313,8 @@ private extension CartView {
312313
let posModel = PointOfSaleAggregateModel(
313314
itemsController: PointOfSalePreviewItemsController(),
314315
cardPresentPaymentService: CardPresentPaymentPreviewService(),
315-
orderController: PointOfSalePreviewOrderController())
316+
orderController: PointOfSalePreviewOrderController(),
317+
collectOrderPaymentAnalyticsTracker: POSCollectOrderPaymentAnalytics())
316318
posModel.addToCart(.simpleProduct(.init(id: UUID(),
317319
name: "Sample Product",
318320
formattedPrice: "$10.00",

WooCommerce/Classes/POS/Presentation/Item Selector/ChildItemList.swift

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -164,7 +164,8 @@ private extension ChildItemList {
164164
let posModel = PointOfSaleAggregateModel(
165165
itemsController: itemsController,
166166
cardPresentPaymentService: CardPresentPaymentPreviewService(),
167-
orderController: PointOfSalePreviewOrderController())
167+
orderController: PointOfSalePreviewOrderController(),
168+
collectOrderPaymentAnalyticsTracker: POSCollectOrderPaymentAnalytics())
168169
return ChildItemList(parentItem: parentItem, title: parentProduct.name)
169170
.environment(posModel)
170171
}
@@ -188,7 +189,8 @@ private extension ChildItemList {
188189
let posModel = PointOfSaleAggregateModel(
189190
itemsController: itemsController,
190191
cardPresentPaymentService: CardPresentPaymentPreviewService(),
191-
orderController: PointOfSalePreviewOrderController())
192+
orderController: PointOfSalePreviewOrderController(),
193+
collectOrderPaymentAnalyticsTracker: POSCollectOrderPaymentAnalytics())
192194
return ChildItemList(parentItem: parentItem, title: parentProduct.name)
193195
.environment(posModel)
194196
}

WooCommerce/Classes/POS/Presentation/Item Selector/ItemList.swift

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -154,7 +154,8 @@ private extension ItemListRow {
154154
let posModel = PointOfSaleAggregateModel(
155155
itemsController: PointOfSalePreviewItemsController(),
156156
cardPresentPaymentService: CardPresentPaymentPreviewService(),
157-
orderController: PointOfSalePreviewOrderController())
157+
orderController: PointOfSalePreviewOrderController(),
158+
collectOrderPaymentAnalyticsTracker: POSCollectOrderPaymentAnalytics())
158159
ItemList(state: .loading([]))
159160
.environment(posModel)
160161
}

WooCommerce/Classes/POS/Presentation/ItemListView.swift

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -296,7 +296,8 @@ private extension ItemListView {
296296
let posModel = PointOfSaleAggregateModel(
297297
itemsController: itemsController,
298298
cardPresentPaymentService: CardPresentPaymentPreviewService(),
299-
orderController: PointOfSalePreviewOrderController())
299+
orderController: PointOfSalePreviewOrderController(),
300+
collectOrderPaymentAnalyticsTracker: POSCollectOrderPaymentAnalytics())
300301
return ItemListView()
301302
.environment(posModel)
302303
}
@@ -306,7 +307,8 @@ private extension ItemListView {
306307
let posModel = PointOfSaleAggregateModel(
307308
itemsController: PointOfSalePreviewItemsController(),
308309
cardPresentPaymentService: CardPresentPaymentPreviewService(),
309-
orderController: PointOfSalePreviewOrderController())
310+
orderController: PointOfSalePreviewOrderController(),
311+
collectOrderPaymentAnalyticsTracker: POSCollectOrderPaymentAnalytics())
310312
return ItemListView()
311313
.environment(posModel)
312314
}

WooCommerce/Classes/POS/Presentation/POSFloatingControlView.swift

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,8 @@ private extension POSFloatingControlView {
132132
let posModel = PointOfSaleAggregateModel(
133133
itemsController: PointOfSalePreviewItemsController(),
134134
cardPresentPaymentService: CardPresentPaymentPreviewService(),
135-
orderController: PointOfSalePreviewOrderController())
135+
orderController: PointOfSalePreviewOrderController(),
136+
collectOrderPaymentAnalyticsTracker: POSCollectOrderPaymentAnalytics())
136137

137138
POSFloatingControlView(showExitPOSModal: .constant(false),
138139
showSupport: .constant(false),

WooCommerce/Classes/POS/Presentation/PaymentButtons.swift

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,8 @@ private extension PaymentsActionButtons {
9696
let posModel = PointOfSaleAggregateModel(
9797
itemsController: PointOfSalePreviewItemsController(),
9898
cardPresentPaymentService: CardPresentPaymentPreviewService(),
99-
orderController: PointOfSalePreviewOrderController())
99+
orderController: PointOfSalePreviewOrderController(),
100+
collectOrderPaymentAnalyticsTracker: POSCollectOrderPaymentAnalytics())
100101
PaymentsActionButtons(isShowingSendReceiptView: .constant(false), isShowingReceiptNotEligibleBanner: .constant(true))
101102
.environment(posModel)
102103
}

0 commit comments

Comments
 (0)