@aller/blink
Version:
A library for tracking user behaviour.
47 lines (44 loc) • 1.28 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 prepareBoxEvent(
page: Page,
id: string,
time?: Date,
): BlinkEvent {
const box = page.state.box[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: box.id,
boxId: box.id,
type: 'box',
inscreenTime,
title: box.title || undefined,
height: box.height || 0,
width: box.width || 0,
};
}
export function getAllBoxEventsPrepared(page: Page, time?: Date): BlinkEvent[] {
return Object.keys(page.state.box)
.map(articleId => {
try {
return prepareBoxEvent(page, articleId, time);
} catch (err) {
const event: BlinkEvent = { id: '', pageView: '', type: 'error' };
return event;
}
})
.filter(event => event.type !== 'error');
}