@xo-union/tk-component-header-nav
Version:
56 lines • 1.94 kB
JavaScript
import React from "react";
import { useClickTracker } from "@xo-union/tk-component-analytics";
import { CookieStorage } from "cookie-storage";
const vendorCategoryCodeTrackableSelector = '[data-trackable-vendor-category-code]';
const getSection = (el, contextProperties) => {
if (el.getAttribute('data-trackable-section')) {
return el.getAttribute('data-trackable-section');
}
if (contextProperties.section) {
return contextProperties.section;
}
return 'non-featured';
};
const vendorEventDataFormatter = (el, contextProperties) => {
const data = {};
const cookieStorage = new CookieStorage();
const vendorCategoryCode = el.getAttribute('data-trackable-vendor-category-code');
const visitId = cookieStorage.getItem('visit_id');
const visitorId = cookieStorage.getItem('visitor_id');
data.sourceContent = 'universal navigation';
if (vendorCategoryCode) {
data.vendorCategoryCode = vendorCategoryCode;
}
if (visitId) {
data.visitId = visitId;
}
if (visitorId) {
data.visitorId = visitorId;
}
data.section = getSection(el, contextProperties);
return data;
};
const basicEventDataFormatter = (el, contextProperties) => {
const data = {};
data.section = getSection(el, contextProperties);
return data;
};
const useHeaderClickTracker = analyticsProps => {
const vendorClickThroughTracker = useClickTracker({
trackableSelector: vendorCategoryCodeTrackableSelector,
eventName: 'Click-through to Vendor Category',
eventData: vendorEventDataFormatter,
...analyticsProps,
followStrategy: null
});
const menuInteractionTracker = useClickTracker({
eventName: 'Menu Interaction',
eventData: basicEventDataFormatter,
...analyticsProps
});
return React.useCallback(event => {
vendorClickThroughTracker(event);
menuInteractionTracker(event);
}, [menuInteractionTracker, vendorClickThroughTracker]);
};
export default useHeaderClickTracker;