module-data-analyticstracker

Events

This page lists all the events available in the module-data-analyticstracker. More details about the events and their schemas can be found on our Notion page.

Index

Core events

Identify

Identifies the user

When should I call identify?

type Identify = { id: string; type?: 'administrator' | 'assessor' | 'author' | 'editor' | 'instructor' | 'learner' | 'manager' | 'support' | 'user'; organisationId?: string; content?: { packageId?: string; packageTitle?: string; method?: string; methodId?: string; edition?: string; targetYear?: string; businessUnit?: string; productType?: string; grade?: string; schoolType?: string; discipline?: string; semanticVersion?: string; }; };
tracker.identify({ id: 'my-user-id', type: 'instructor', organisationId: 'my-guid', cultureInfo: 'xx-YY', content: { packageId: 'pkg123', packageTitle: 'Math 101', method: 'online', methodId: 'method123', edition: '2nd', targetYear: '2024', businessUnit: 'education', productType: 'course', grade: '10', schoolType: 'high-school', discipline: 'mathematics', semanticVersion: '1.0.0', }, });

Page

Track a page view

type Page = { category: string; subCategory?: string; type: string; id?: string; brand?: { name?: string }; pageName?: string; }; type Referrer = { module?: string; label?: string; itemId?: string; elementId?: string; };
tracker.page({ category: 'content', subCategory: 'learning-content' type: 'quiz', id: 'my-quiz-id', brand: { name: 'nectar' }, pageName : 'my pagename' })

Page type and category must be kebab-case and must on the list of approved page types and categories. Find them here:

If right before the page event a referrer event is tracked, referrer data will be added to the event.

import tracker from '@infinitaslearning/module-data-analyticstracker'; tracker.referrer({ module: 'main-menu', label: 'Do a quiz', itemId: 'quiz', });

For the referrer event it is recommended to use attributes based tracking.

<button title="Take me to the quiz" data-mdat="referrer" data-mdat-module="my-amazing-button" />

Custom events

All custom events have the following fields to specify where they occured in the dom:

type BaseFields = { module?: string; // kebab-case, identifies the section of the page where the event occured itemId?: string; // kebab-case, identifies the item on which the event occured elementId?: string; // kebab-case, identifies the (html) element on which the event occured frameCorrelationId?: string; // kebab-case, identifies the frame in which the event occured };

Link with target outside of the platform

type ExitLink = { url: string; label?: string; };

Available actions:

tracker.exitLinkClicked({ url: 'https://www.infinitaslearning.com', label: 'Go to infinitas', module: 'main-menu', itemId: 'infinitas-link', });

File

Link with target outside of the platform

type File = { name?: string; id?: string; source?: string; extension?: string; url: string; };

Available actions:

tracker.fileDownloaded({ url: 'https://www.infinitaslearning.com', name: 'Answerbook', id: '123abc', source: 'edify', extension: 'pdf', });

It is recommended to use automatic tracking using data attributes for external links.


Form

type FormSubmited = { fornName: string; // Name of the form formId: string; // The ID of the form. Normally this is the formsbuilder ID. product?: ProductEntity; }; type FormClicked = { fornName: string; // Name of the form formId: string; // The ID of the form. Normally this is the formsbuilder ID. clickText: string; // In the context of forms, the term "clickText" could refer to the label or text associated with a clickable element product?: ProductEntity; };

Available actions:

tracker.formSubmitted({ id: 'form-66', name: 'Zichtzending Getal & Ruimte JR', });

Frame

Any type of frame opened on top of the page. Events that occure within the frame can be related to the frame by providing the frame-correlation-id.

type Frame = { type: string; id?: string; frameType: 'widget' | 'confirmation' | 'pop-up'; };

Available actions:

When a frame is opened on a page. Consider using the page event instead if the frame covers the entire page.

const frame = await tracker.frameOpened({ type: 'calculator', id: 'home-page-calulator-widget', frameType: 'widget', });

The frame-opened event generates a new frame-correlation-id, which can be used the correlate all events that happen on the frame. When used with attribute based tracking, it's also possible for the platform to provide the frame-correlation-id. In that case make sure to update the value when the frame is closed, so a next frameOpened and consequetive events inside the frame can be properly correlated.

When a frame is closed

type ClosedFrame = Frame & { result: 'confirmed' | 'rejected' | 'cancelled'; frameCorrelationId: string; // optional for most, but required in this event }; const closedFrame: ClosedFrame = { ...frame!, // Includes the frame-correlation-id result: 'cancelled', }; tracker.frameClosed(closedFrame);

When a frame is moved

type MovedFrame = Frame & { locationX?: number; // int locationY?: number; // int frameCorrelationId: string; // kebab-case optional for most, but required in this event }; const movedFrame: MovedFrame = { ...frame!, // Includes the frame-correlation-id locationX: 400, locationY: 500, tracker.frameMoved(movedFrame); };

Item list

List of items. Often used to for display or filtering/searching

type ItemList = { type: string; count?: number; // int pageSize?: number; // int pageNumber?: number; // int displayMode?: string; order?: { field?: string; direction?: 'asc' | 'desc'; }; };

Available actions:

Use displayed when item list is displayed and filtering and/or searching is not applicable

const itemList: ItemList = { type: 'books', count: 58, pageSize: 20, pageNumber: 3, displayMode: 'grid-view', }; tracker.itemListDisplayed(itemList);

Use filtered when item list is searched and/or filtered

type FilteredItemList = ItemList & { searchTerm?: string; facets?: Record<string, (string | number | boolean | Date)[]>; }; const filteredItemList: FilteredItemList = { type: 'books', count: 58, pageSize: 20, pageNumber: 3, displayMode: 'grid-view', order: { field: 'title', direction: 'asc', }, facets: { subject: ['english', 'biology'], 'target-year': ['1', '2'], }, }; tracker.itemListFiltered(filteredItemList);

Use ordered when item list is ordered

type ItemListOrdered = ItemList & { parentId?: string | undefined; parentDescription?: string | undefined; items: { id: string; description?: string | undefined; sequence?: number | undefined; }[]; }; const orderdedItemList = { type: 'content-manage', parentId: '7a4d1e53-852e-4a7b-9f93-96f3c7e7e1c6', parentDescription: 'The Midnight Serenade', items: [ { id: 'aebab1b3-5c43-47a6-8f25-638eaf2a314f', description: 'The Enigma of Shadows', sequence: 1, }, { id: faker.string.uuid(), description: 'Echoes from the Forgotten Past', sequence: 2, }, ], }; tracker.itemListOrdered(orderdedItemList);

Learning feedback

Feedback from a teacher about the learning result of their student(s)

type LearningFeedback = { id: string; };

Available actions:

type LearningFeedbackCreated = { to: string[]; subject: { type: 'content-unit'; id: string; score?: number; attemptNumber: number; }; }; tracker.learningFeedbackCreated({ id: '123', to: ['stud-1', 'stud-2'], subject: { type: 'content-unit', id: 'abc', score: 55, attemptNumber: 1, }, });
type LearningFeedbackMessageSent = { to: string[]; messageId?: string; subject: { type: 'content-unit'; id: string; score?: number; attemptNumber: number; }; }; tracker.learningFeedbackMessageSent({ id: '123', messageId: '123', to: ['stud-1', 'stud-2'], subject: { type: 'content-unit', id: 'abc', score: 70, attemptNumber: 1, }, });
tracker.learningFeedbackRead({ id: '123' });
tracker.learningFeedbackMessageDeleted({ id: '123', messageId: '123' });

Element

Element. Use whenever there is no better semantic event.

type Element = { type?: string; value?: string; };

Available actions:

Use when the element has been clicked.

tracker.elementClicked({ elementId: 'example-checkbox', type: 'checkbox', value: 'true', module: 'task-planner', itemId: 'add-content-unit', });

Experiment

Experiment. Use whenever there is an A/B test or other experiment running.

type Experiment = { experimentName: string; experimentGroup: 'control' | 'variant'; };

Available actions:

tracker.experimentStarted({ experimentName: 'my-experiment', experimentGroup: 'control', });

Caviat

When you track events with attributes e.g. data-mdat="element-clicked". If you're also navigating you might want to submit the current url to track the right page. You can do that by setting data-mdat-url={window.location.href}. This is not needed if you don't change the url.