@@ -23,7 +23,7 @@ import type { ClickChain } from './clickChain'
2323import { createClickChain } from './clickChain'
2424import { getActionNameFromElement } from './getActionNameFromElement'
2525import { getSelectorsFromElement } from './getSelectorsFromElement'
26- import type { MouseEventOnElement , OnClickContext } from './listenActionEvents'
26+ import type { MouseEventOnElement , GetUserActivity } from './listenActionEvents'
2727import { listenActionEvents } from './listenActionEvents'
2828import { computeFrustration } from './computeFrustration'
2929
@@ -78,16 +78,19 @@ export function trackClickActions(
7878 lifeCycle . subscribe ( LifeCycleEventType . BEFORE_UNLOAD , stopClickChain )
7979 lifeCycle . subscribe ( LifeCycleEventType . VIEW_ENDED , stopClickChain )
8080
81- const { stop : stopActionEventsListener } = listenActionEvents ( {
82- onPointerDown : ( pointerDownEvent ) =>
83- onPointerDown (
81+ const { stop : stopActionEventsListener } = listenActionEvents < ClickActionBase > ( {
82+ onPointerDown : ( pointerDownEvent ) => onPointerDown ( configuration , history , pointerDownEvent ) ,
83+ onClick : ( clickActionBase , clickEvent , getUserActivity ) =>
84+ onClick (
8485 configuration ,
8586 lifeCycle ,
8687 domMutationObservable ,
8788 history ,
8889 stopObservable ,
8990 appendClickToClickChain ,
90- pointerDownEvent
91+ clickActionBase ,
92+ clickEvent ,
93+ getUserActivity
9194 ) ,
9295 } )
9396
@@ -123,11 +126,7 @@ export function trackClickActions(
123126
124127function onPointerDown (
125128 configuration : RumConfiguration ,
126- lifeCycle : LifeCycle ,
127- domMutationObservable : Observable < void > ,
128129 history : ClickActionIdHistory ,
129- stopObservable : Observable < void > ,
130- appendClickToClickChain : ( click : Click ) => void ,
131130 pointerDownEvent : MouseEventOnElement
132131) {
133132 if ( ! configuration . trackFrustrations && history . find ( ) ) {
@@ -143,59 +142,71 @@ function onPointerDown(
143142 return
144143 }
145144
146- return {
147- onClick ( { event : clickEvent , getUserActivity } : OnClickContext ) {
148- const click = newClick ( lifeCycle , history , getUserActivity , clickActionBase , clickEvent )
145+ return clickActionBase
146+ }
149147
150- if ( configuration . trackFrustrations ) {
151- appendClickToClickChain ( click )
152- }
148+ function onClick (
149+ configuration : RumConfiguration ,
150+ lifeCycle : LifeCycle ,
151+ domMutationObservable : Observable < void > ,
152+ history : ClickActionIdHistory ,
153+ stopObservable : Observable < void > ,
154+ appendClickToClickChain : ( click : Click ) => void ,
155+ clickActionBase : ClickActionBase ,
156+ clickEvent : MouseEventOnElement ,
157+ getUserActivity : GetUserActivity
158+ ) {
159+ const click = newClick ( lifeCycle , history , getUserActivity , clickActionBase , clickEvent )
153160
154- const { stop : stopWaitPageActivityEnd } = waitPageActivityEnd (
155- lifeCycle ,
156- domMutationObservable ,
157- configuration ,
158- ( pageActivityEndEvent ) => {
159- if ( pageActivityEndEvent . hadActivity && pageActivityEndEvent . end < click . startClocks . timeStamp ) {
160- // If the clock is looking weird, just discard the click
161+ if ( configuration . trackFrustrations ) {
162+ appendClickToClickChain ( click )
163+ }
164+
165+ const { stop : stopWaitPageActivityEnd } = waitPageActivityEnd (
166+ lifeCycle ,
167+ domMutationObservable ,
168+ configuration ,
169+ ( pageActivityEndEvent ) => {
170+ if ( pageActivityEndEvent . hadActivity && pageActivityEndEvent . end < click . startClocks . timeStamp ) {
171+ // If the clock is looking weird, just discard the click
172+ click . discard ( )
173+ } else {
174+ click . stop ( pageActivityEndEvent . hadActivity ? pageActivityEndEvent . end : undefined )
175+
176+ // Validate or discard the click only if we don't track frustrations. It'll be done when
177+ // the click chain is finalized.
178+ if ( ! configuration . trackFrustrations ) {
179+ if ( ! pageActivityEndEvent . hadActivity ) {
180+ // If we are not tracking frustrations, we should discard the click to keep backward
181+ // compatibility.
161182 click . discard ( )
162183 } else {
163- click . stop ( pageActivityEndEvent . hadActivity ? pageActivityEndEvent . end : undefined )
164-
165- // Validate or discard the click only if we don't track frustrations. It'll be done when
166- // the click chain is finalized.
167- if ( ! configuration . trackFrustrations ) {
168- if ( ! pageActivityEndEvent . hadActivity ) {
169- // If we are not tracking frustrations, we should discard the click to keep backward
170- // compatibility.
171- click . discard ( )
172- } else {
173- click . validate ( )
174- }
175- }
184+ click . validate ( )
176185 }
177- } ,
178- CLICK_ACTION_MAX_DURATION
179- )
186+ }
187+ }
188+ } ,
189+ CLICK_ACTION_MAX_DURATION
190+ )
180191
181- const viewEndedSubscription = lifeCycle . subscribe ( LifeCycleEventType . VIEW_ENDED , ( { endClocks } ) => {
182- click . stop ( endClocks . timeStamp )
183- } )
192+ const viewEndedSubscription = lifeCycle . subscribe ( LifeCycleEventType . VIEW_ENDED , ( { endClocks } ) => {
193+ click . stop ( endClocks . timeStamp )
194+ } )
184195
185- const stopSubscription = stopObservable . subscribe ( ( ) => {
186- click . stop ( )
187- } )
196+ const stopSubscription = stopObservable . subscribe ( ( ) => {
197+ click . stop ( )
198+ } )
188199
189- click . stopObservable . subscribe ( ( ) => {
190- viewEndedSubscription . unsubscribe ( )
191- stopWaitPageActivityEnd ( )
192- stopSubscription . unsubscribe ( )
193- } )
194- } ,
195- }
200+ click . stopObservable . subscribe ( ( ) => {
201+ viewEndedSubscription . unsubscribe ( )
202+ stopWaitPageActivityEnd ( )
203+ stopSubscription . unsubscribe ( )
204+ } )
196205}
197206
198- function computeClickActionBase ( event : MouseEventOnElement , actionNameAttribute ?: string ) {
207+ type ClickActionBase = Pick < ClickAction , 'type' | 'name' | 'target' | 'position' >
208+
209+ function computeClickActionBase ( event : MouseEventOnElement , actionNameAttribute ?: string ) : ClickActionBase {
199210 let target : ClickAction [ 'target' ]
200211 let position : ClickAction [ 'position' ]
201212
@@ -216,7 +227,7 @@ function computeClickActionBase(event: MouseEventOnElement, actionNameAttribute?
216227 }
217228
218229 return {
219- type : 'click' ,
230+ type : ActionType . CLICK ,
220231 target,
221232 position,
222233 name : getActionNameFromElement ( event . target , actionNameAttribute ) ,
@@ -237,8 +248,8 @@ export type Click = ReturnType<typeof newClick>
237248function newClick (
238249 lifeCycle : LifeCycle ,
239250 history : ClickActionIdHistory ,
240- getUserActivity : OnClickContext [ 'getUserActivity' ] ,
241- clickActionBase : Pick < ClickAction , 'name' | 'target' | 'position' > ,
251+ getUserActivity : GetUserActivity ,
252+ clickActionBase : ClickActionBase ,
242253 clickEvent : MouseEventOnElement
243254) {
244255 const id = generateUUID ( )
0 commit comments