From b6d886aeef79c767b7133792753a2ccf2a8461cf Mon Sep 17 00:00:00 2001 From: jakubroch Date: Sun, 2 Jun 2024 12:11:05 +0200 Subject: [PATCH] fix: add video url to VIEW_END event --- src/cloudinary-analytics.js | 4 ++-- src/default-data-collector.js | 4 ++-- src/utils/base-events.js | 7 ++++--- src/utils/prepare-events.js | 8 +++++--- 4 files changed, 13 insertions(+), 10 deletions(-) diff --git a/src/cloudinary-analytics.js b/src/cloudinary-analytics.js index 316b2f3..bc1a927 100644 --- a/src/cloudinary-analytics.js +++ b/src/cloudinary-analytics.js @@ -47,7 +47,7 @@ export const connectCloudinaryAnalytics = (videoElement) => { const dataCollectorRemoval = setupDefaultDataCollector({ userId: getUserId(), viewId, - }, videoViewEventCollector.flushEvents, sendData, isMobileDetected); + }, videoViewEventCollector.flushEvents, sendData, videoElement, isMobileDetected); videoTrackingSession = { viewId, @@ -82,7 +82,7 @@ export const connectCloudinaryAnalytics = (videoElement) => { const dataCollectorRemoval = setupDefaultDataCollector({ userId: getUserId(), viewId, - }, videoViewEventCollector.flushEvents, sendData, isMobileDetected); + }, videoViewEventCollector.flushEvents, sendData, videoElement, isMobileDetected); videoTrackingSession = { viewId, diff --git a/src/default-data-collector.js b/src/default-data-collector.js index c87e167..39a6a4d 100644 --- a/src/default-data-collector.js +++ b/src/default-data-collector.js @@ -1,13 +1,13 @@ import { prepareEvents } from './utils/prepare-events'; -export const setupDefaultDataCollector = (data, flushEvents, sendData, isMobile) => { +export const setupDefaultDataCollector = (data, flushEvents, sendData, videoElement, isMobile) => { const sendVideoData = () => { const collectedEvents = flushEvents(); // multiple events can be triggered one by one for specific browsers but we don't have guarantee which ones // in this case send data for first event and for rest just skip it to avoid empty payload if (collectedEvents.length > 0) { - const events = prepareEvents(collectedEvents); + const events = prepareEvents(collectedEvents, videoElement); sendData({ ...data, events, diff --git a/src/utils/base-events.js b/src/utils/base-events.js index 2a848c3..3c54e09 100644 --- a/src/utils/base-events.js +++ b/src/utils/base-events.js @@ -9,7 +9,6 @@ export const createViewStartEvent = (sourceUrl, baseData, customerOptions) => { const customerVideoDataFromFallback = customerOptions?.customVideoUrlFallback ? useCustomerVideoDataFallback(sourceUrl, customerOptions.customVideoUrlFallback) : null; const customerVideoData = parseCustomerVideoData(customerVideoDataFromFallback); return createEvent(VIEW_EVENT.START, { - videoUrl: sourceUrl, analyticsModuleVersion: ANALYTICS_VERSION, videoPlayer: { type: getVideoPlayerType(customerOptions?.videoPlayerType), @@ -23,6 +22,8 @@ export const createViewStartEvent = (sourceUrl, baseData, customerOptions) => { }); }; -export const createViewEndEvent = () => { - return createEvent(VIEW_EVENT.END, {}); +export const createViewEndEvent = (sourceUrl) => { + return createEvent(VIEW_EVENT.END, { + videoUrl: sourceUrl, + }); }; diff --git a/src/utils/prepare-events.js b/src/utils/prepare-events.js index 803eb81..7dec9a1 100644 --- a/src/utils/prepare-events.js +++ b/src/utils/prepare-events.js @@ -1,7 +1,9 @@ import { createViewEndEvent } from './base-events'; +import { getVideoSource } from './video-source'; -export const prepareEvents = (collectedEvents) => { - const events = [...collectedEvents]; - events.push(createViewEndEvent()); +export const prepareEvents = (collectedEvents, videoElement) => { + const sourceUrl = getVideoSource(videoElement); + const viewEndEvent = createViewEndEvent(sourceUrl); + const events = [...collectedEvents, viewEndEvent]; return JSON.stringify(events); };