first-party-breadcrumbs
Version:
BreadCrumbs is an npm library designed to enhance user experience by efficiently managing query parameters and form fields through first-party cookies. This library simplifies data handling by automatically storing query parameters in cookies and allows f
67 lines (56 loc) • 1.71 kB
JavaScript
import breadcrumbs from './breadcrumbs';
const getParameter = require('get-parameter');
const baseConfig = {
path: '/',
cookieName: '_hansel',
formfill: false,
watching: [
'utm_term',
'utm_source',
'utm_campaign',
'utm_content',
'utm_medium',
'email',
'gclid',
],
overwrite: [
'utm_term',
'utm_source',
'utm_campaign',
'utm_content',
'utm_medium',
'email',
'gclid',
]
};
const Stack = {
breadcrumbs: null,
init: function(options) {
const config = options || {};
this.breadcrumbs = new breadcrumbs({...baseConfig, ...config});
this.stage();
const event = new CustomEvent('breadcrumbs.initialized', {detail: this.breadcrumbs});
document.dispatchEvent(event);
return this.breadcrumbs;
},
visitor: function() {
const timestamp = Date.now().toString(36); // Convert timestamp to a base-36 string
const randomNum = Math.random().toString(36).substr(2, 9); // Generate a random base-36 string
const visitorID = `${timestamp}-${randomNum}`; // Combine timestamp and random string
return visitorID;
},
stage: function() {
const event = new CustomEvent('breadcrumbs.before_init', {detail: this.breadcrumbs});
document.dispatchEvent(event);
const _this = this;
const visitorId = this.breadcrumbs.get('vid') || this.visitor();
this.breadcrumbs.upsert('vid', visitorId);
this.breadcrumbs.config.watching.forEach((item, index) => {
const paramValue = getParameter(item);
if (paramValue) _this.breadcrumbs.upsert(item, paramValue, _this.breadcrumbs.config.overwrite.indexOf(item) >= 0);
});
if (this.breadcrumbs.config.formfill) this.breadcrumbs.formfill();
}
};
const BreadCrumbs = Stack.init();
export default BreadCrumbs;