diff --git a/app/javascript/packages/prompt-on-navigate/index.spec.ts b/app/javascript/packages/prompt-on-navigate/index.spec.ts index bbd4c0bbc48..2571a66b50c 100644 --- a/app/javascript/packages/prompt-on-navigate/index.spec.ts +++ b/app/javascript/packages/prompt-on-navigate/index.spec.ts @@ -35,7 +35,7 @@ describe('promptOnNavigate', () => { window.dispatchEvent(event); - expect(trackEvent).to.have.been.calledOnceWith(PROMPT_EVENT); + expect(trackEvent).to.have.been.calledOnceWith(PROMPT_EVENT, { path: '/' }); trackEvent.resetHistory(); sandbox.clock.tick(2000); @@ -43,6 +43,7 @@ describe('promptOnNavigate', () => { sandbox.clock.tick(3000); expect(trackEvent).to.have.been.calledWith(STILL_ON_PAGE_EVENT, { + path: '/', seconds: 5, }); }); @@ -56,7 +57,7 @@ describe('promptOnNavigate', () => { window.dispatchEvent(event); - expect(trackEvent).to.have.been.calledOnceWith(PROMPT_EVENT); + expect(trackEvent).to.have.been.calledOnceWith(PROMPT_EVENT, { path: '/' }); trackEvent.resetHistory(); sandbox.clock.tick(5000); @@ -65,6 +66,7 @@ describe('promptOnNavigate', () => { sandbox.clock.tick(10000); expect(trackEvent).to.have.been.calledWith(STILL_ON_PAGE_EVENT, { + path: '/', seconds: 15, }); }); @@ -91,6 +93,7 @@ describe('promptOnNavigate', () => { sandbox.clock.tick(15000); expect(trackEvent).to.have.been.calledWith(STILL_ON_PAGE_EVENT, { + path: '/', seconds: 30, }); }); diff --git a/app/javascript/packages/prompt-on-navigate/index.ts b/app/javascript/packages/prompt-on-navigate/index.ts index 60461e35c86..e426eaa45d9 100644 --- a/app/javascript/packages/prompt-on-navigate/index.ts +++ b/app/javascript/packages/prompt-on-navigate/index.ts @@ -25,7 +25,7 @@ export function promptOnNavigate(options: PromptOnNavigateOptions = defaults): ( ev.preventDefault(); ev.returnValue = ''; - trackEvent(PROMPT_EVENT); + trackEvent(PROMPT_EVENT, { path: window.location.pathname }); const stillOnPageIntervalsInSeconds = [...options.stillOnPageIntervalsInSeconds]; let elapsed = 0; @@ -46,6 +46,7 @@ export function promptOnNavigate(options: PromptOnNavigateOptions = defaults): ( stillOnPageTimer = window.setTimeout(() => { trackEvent(STILL_ON_PAGE_EVENT, { + path: window.location.pathname, seconds: elapsed, }); scheduleNextStillOnPagePing(); diff --git a/app/services/analytics_events.rb b/app/services/analytics_events.rb index 3393ced72a5..f446c465dd2 100644 --- a/app/services/analytics_events.rb +++ b/app/services/analytics_events.rb @@ -3581,18 +3581,23 @@ def user_marked_authed(authentication_type:, **extra) # User was shown an "Are you sure you want to navigate away from this page?" message from their # browser (via onbeforeunload). (This is a frontend event.) - def user_prompted_before_navigation + # @param [String] path Path where this event was encountered. + def user_prompted_before_navigation(path:, **extra) track_event( 'User prompted before navigation', + path: path, + **extra, ) end # User was shown an "Are you sure you want to navigate away from this page?" prompt via # onbeforeunload and was still on the page later. (This is a frontend event.) + # @param [String] path Path where this event was encountered. # @param [Integer] seconds Amount of time user has been on page since prompt. - def user_prompted_before_navigation_and_still_on_page(seconds:, **extra) + def user_prompted_before_navigation_and_still_on_page(path:, seconds:, **extra) track_event( 'User prompted before navigation and still on page', + path: path, seconds: seconds, **extra, )