UNPKG

@aller/blink

Version:

A library for tracking user behaviour.

65 lines 2.69 kB
"use strict"; 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