The f-trak module is used for pushing analytics data to a third party service – in our case, Google Tag Manager (GTM).
The module aims to provide a consistent interface for binding analytics events to components and interactions.
To setup f-trak
, you first need to install the module using Yarn or NPM.
yarn add @justeat/f-trak
Then within your JavaScript, import the module:
import Trak from '@justeat/f-trak';
Once imported there are two ways of defining your analytics events.
data-trak
attributesThe first way to define events is by specifying them in your markup as attributes that f-trak
can hook onto.
You can specify a data-trak
attribute on any element in your markup like so:
<button data-trak='{
"trakEvent": "click",
"event": "My Event Descriptor"
"category": "My Category Descriptor",
"action": "My Action Descriptor",
"label": "My Label Descriptor"
'>Submit</button>
The above attribute tells f-trak
to fire a tracking event when the button is clicked, with the values specified. For a full list of available parameter values that you can pass (including how to define custom values), then see the trak parameters section below.
Once you have defined all of your data-trak
attributes, you need to initialise the f-trak
module in your JavaScript. To do this, simply call Trak.start()
, which will then set up the analytics events specified by the data-trak attributes.
Trak.event
Data attributes are useful for handling events linked to actions, but sometimes we need to fire off events from within our JavaScript as well – for example, as a result of an API call.
To do this, use the Trak.event
method to fire off analytics events as you need to.
import Trak from '@justeat/f-trak';
const errorEvent = () => {
Trak.event({
event: 'javascriptError',
custom: {
errorData: { errorLine, errorMsg, errorUrl }
}
});
}
The above example shows how this may be used within a function that is used to handle errors. The Trak.event
call is populated with the analytics data you would like to send to the dataLayer.
data-trak
callIt is possible to use data-trak
attributes to define your analytics data, while triggering the actual event within your JavaScript. This is useful if we want to attach some data from the server, without having to define that data as global JS variables so our JavaScript can access it.
To do this, use the Trak.trigger()
method, which takes a single parameter – the element on which the data-trak
attribute has been defined. For example:
<button data-trak='{
"category": "My test category",
"action": "My test action",
"label": "My test label"
}'>My Test Button</button>```
Trak.start();
const button = document.querySelector('button');
Trak.trigger(button);
The above code will trigger an analytics event with the data specified inside the data-trak attribute.
There are several different parameters that you can define when sending an analytics event using f-trak
. These are:
The trakEvent
parameter is used when adding an event via the data-attribute method. This indicates when you would like the analytics event to be invoked.
For example, a specifying a value of click
for our trakEvent
parameter will fire a trak event when that element is clicked. Likewise, specifying submit
– for example on a form element – will fire the trak event when the form is submitted.
For a full list of the values that trakEvent
has available, check out the trakEvent Hooks section of this documentation.
The event
, category
, action
, label
and nonInteraction
parameters are all commonly used values used for analytics. You can specify one or more of these parameters when sending a trak
event and this value will then be passed onto the dataLayer.
By using the custom
parameter, you can define any number of custom attributes to be passed onto the dataLayer. This is useful for more custom analytics scenarios – for example, passing an orderID and any associated details.
You can define custom parameters like so:
<button data-trak='{
"event": "trackEvent",
"category": "My test category",
"action": "My test action",
"label": "My test label",
"value": "My test value",
"nonInteraction": true,
"custom": {
"key1": "additional value 1",
"key2": "additional value 2"
}
}'>My Test Button</button>
The trakEvent
parameter accepts a variety of different values to hook into a number of different DOM events. The full list of these values is as follows:
[
'focus', 'blur', // focus Events
'animationstart', 'animationend', 'animationiteration', // CSS Animation Events
'transitionstart', 'transitioncancel', 'transitionend', 'transitionrun', // CSS Transition Events
'reset', 'submit', // Form Events
'keydown', 'keypress', 'keyup', // Keyboard Events
'click', 'mouseenter', 'mouseover', 'mouseleave', 'mouseout', 'mousedown', 'mouseup', 'contextmenu', // Mouse Events
'load', 'error', // Resource Events
'resize', 'scroll' // View Events
]