UNPKG

@xo-union/tk-component-header-nav

Version:
56 lines 1.94 kB
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;