@funnelenvy-npm/fe-dev-utils
Version:
Helper function to build client side A/B tests
66 lines (65 loc) • 2.07 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const cookie_manager_1 = __importDefault(require("../cookie-manager"));
const detectIE_1 = __importDefault(require("./detectIE"));
const exitIntent = ({ callback, cookieExp = 0, delay = 5, showOnDelay = false, }) => {
let shown = false;
const cookieName = 'exitIntent_shown';
const cookieOverride = 'crometrics-debug';
const checkCookie = () => {
if (cookieExp <= 0) {
cookie_manager_1.default.del({ name: cookieName });
return false;
}
if (window.location.search.includes(cookieOverride)) {
return false;
}
if (cookie_manager_1.default.get({ name: cookieName }) === 'true') {
return true;
}
return false;
};
const triggerIntent = () => {
if (shown)
return;
shown = true;
cookie_manager_1.default.set({
name: cookieName,
value: 'true',
optDays: cookieExp,
});
callback();
};
const loadEvents = () => {
const handleMouseOut = (e) => {
e = e || window.event;
if (e.clientY <= 5 || ((0, detectIE_1.default)() && e.clientY <= 50)) {
triggerIntent();
}
};
if (showOnDelay) {
setTimeout(() => {
triggerIntent();
}, delay * 1000);
}
document.addEventListener('mouseout', handleMouseOut, false);
};
const domReady = (callback) => {
if (document.readyState === 'interactive' || document.readyState === 'complete') {
callback();
}
else {
document.addEventListener('DOMContentLoaded', callback);
}
};
domReady(() => {
if (checkCookie()) {
return;
}
loadEvents();
});
};
exports.default = exitIntent;