@aller/blink
Version:
A library for tracking user behaviour.
61 lines (58 loc) • 1.7 kB
text/typescript
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');
}