UNPKG

@aller/blink

Version:

A library for tracking user behaviour.

61 lines (58 loc) 1.7 kB
import { calculateEventTime } from '../utils/event-time'; import generalData from '../utils/general-data'; import { BlinkEvent } from '../types'; import { Page } from '../selectors/get-page-state'; /** * Prepares a raw impression by aggregating its fields so that * it can be sent to the server in the format aas expects. */ export default function prepareArticleImpressionEvent( page: Page, id: string, time?: Date, ): BlinkEvent { const ap = page.state.articlePreview[id] || { id: id || 'error', url: undefined, }; const inscreenTime = id ? calculateEventTime({ times: page.state.inscreen[id], screenEvents: page.state.screen.events, now: time, }) : 0; return { ...generalData(page.state), id: ap.id, context: ap.context || undefined, type: 'impression', inscreenTime, article: { url: ap.url, harvesterId: ap.id }, title: ap.title || undefined, height: ap.height || 0, width: ap.width || 0, personalizationParametersRequested: ap.personalizationParametersRequested || undefined, personalizationSystemUsed: ap.personalizationSystemUsed || undefined, position: ap.position || undefined, }; } export function getAllArticleImpressionEventsPrepared( page: Page, time?: Date, ): BlinkEvent[] { if (!page || !page.state) { return []; } return Object.keys(page.state.articlePreview) .map(articleId => { try { return prepareArticleImpressionEvent(page, articleId, time); } catch (err) { const event: BlinkEvent = { id: '', pageView: '', type: 'error' }; return event; } }) .filter(event => event.type !== 'error'); }