@aller/blink
Version:
A library for tracking user behaviour.
65 lines • 2.69 kB
JavaScript
;
var __assign = (this && this.__assign) || function () {
__assign = Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.modifyEventArrayWithStickyInfo = void 0;
var sort_1 = require("./sort");
/**
* @function processSticky
* @returns array of videowatch events with filled data
* about player stickiness (if it's minimized or not)
*/
function modifyEventArrayWithStickyInfo(playerId, players, videoWatches) {
var playerEvents = players[playerId] || [];
var stickyEvents = playerEvents
.filter(function (e) { return e.type === 'sticky'; })
.sort(sort_1.byTime);
return videoWatches.map(function (v) {
return modifyEventWithStickyInfo(v, stickyEvents, videoWatches);
});
}
exports.modifyEventArrayWithStickyInfo = modifyEventArrayWithStickyInfo;
function modifyEventWithStickyInfo(currentVideoWatch, stickyEvents, videoWatches) {
var stopEvent = Object.assign({}, currentVideoWatch.stopEvent);
var previousSticky = stickyEvents.filter(function (s) { return s.time.getTime() <= stopEvent.time.getTime(); });
var lastStickyEvent = previousSticky[previousSticky.length - 1];
if (lastStickyEvent) {
stopEvent.sticky = lastStickyEvent.sticky;
if (lastStickyEvent.closed) {
var alreadyBeenStopped = playerAlreadyHasBeenStopped(videoWatches, lastStickyEvent, currentVideoWatch);
if (!alreadyBeenStopped) {
stopEvent.reason = 'stickyClosed';
}
}
}
else {
stopEvent.sticky = false;
}
return __assign(__assign({}, currentVideoWatch), { stopEvent: stopEvent });
}
/**
* @function playerAlreadyHasBeenStopped
* @returns if player already has been stopped previously,
* after firing 'sticky closed' event,
* trying to find video stop event earlier than current event
* but later then last sticky event, because
* we want to send 'stickyClosed' reason only for first stop event
*/
function playerAlreadyHasBeenStopped(videoWatches, lastStickyEvent, v) {
var currentStopTime = v.stopEvent.time.getTime();
var lastStickyEventTime = lastStickyEvent.time.getTime();
return videoWatches.some(function (f) {
return (f.stopEvent.time.getTime() > lastStickyEventTime &&
f.stopEvent.time.getTime() < currentStopTime);
});
}
//# sourceMappingURL=player-sticky.js.map