@aller/blink
Version:
A library for tracking user behaviour.
61 lines (57 loc) • 1.53 kB
text/typescript
import generalData from '../utils/general-data';
import { calculateEventTime } from '../utils/event-time';
import { BlinkEvent } from '../types';
import { Page } from '../selectors/get-page-state';
export interface PrepareActiveTimeProps {
page: Page;
id: string;
utils: {
getPersistedState: (key: string) => any;
};
time?: Date;
}
/**
* Prepares a active time data selecting the right
* fields to send to the server
*/
export default function prepareActiveTimeForSending({
page,
id,
utils,
time,
}: PrepareActiveTimeProps): BlinkEvent {
const activeTime = page.state.activeTime[id];
const pap = utils.getPersistedState(`${page.id}::impression::${id}`) || null;
return {
...generalData(page.state),
type: 'activeTime',
id,
article: { harvesterId: activeTime.id, url: activeTime.url },
previousArticlePreview: pap
? {
inscreenTime: pap.inscreenTime,
title: pap.title,
clicked:
utils.getPersistedState(`${page.id}::clicked::${id}`) || false,
}
: undefined,
activeTime: calculateEventTime({
times: activeTime.activity,
screenEvents: page.state.screen.events,
now: time,
}),
maxScroll: 0,
};
}
export function getAllActiveTimeEventsPrepared(
page: any,
utils: any,
time: Date,
): BlinkEvent[] {
if (!page || !page.state) {
return [];
}
return Object.keys(page.state.activeTime).map(articleId =>
prepareActiveTimeForSending({ page, id: articleId, time, utils }),
);
}