in src/pro-src/rules.js [409:477]
verifyConditions(rules, boolMode, tooltipSelector = false, removeViz = () => {}) {
const trigger = rules.trigger || {};
const payload = {
intent: rules.payload,
text: rules.text,
entities: []
};
let ruleTriggeredIndex = -1;
if (trigger && (trigger.when === 'limited' || trigger.timeLimit)) {
ruleTriggeredIndex = this.history.rulesTriggered.findIndex(
rule => rule.hash === rules.hash
);
}
const mobileCondition = this.verifyMobile(trigger);
const urlCondition = this.verifyUrl(trigger);
const triggerLimitCondition =
!(trigger.triggerLimit && trigger.when === 'limited') ||
this.history.rulesTriggered[ruleTriggeredIndex].triggered <
this.history.rulesTriggered[ruleTriggeredIndex].triggerLimit;
const timeLimitCondition = this.verifyTimeLimit(trigger, ruleTriggeredIndex);
const numberOfPageVisitsCondition =
!trigger.numberOfPageVisits ||
(this.history.timePerPage[this.url] &&
this.history.timePerPage[this.url] >= parseInt(trigger.numberOfPageVisits, 10));
const queryString = window.location.search;
const queryStringCondition =
!trigger.queryString ||
trigger.queryString.every(queryObject =>
this.verifyQueryStringAndAddEntities(queryString, queryObject, payload)
);
if (
urlCondition &&
mobileCondition &&
numberOfPageVisitsCondition &&
triggerLimitCondition &&
queryStringCondition &&
timeLimitCondition &&
(!trigger.numberOfVisits ||
parseInt(trigger.numberOfVisits, 10) === parseInt(this.history.timesInDomain, 10))
) {
if (boolMode) {
return true;
}
this.sendMessage(payload, rules.trigger.when, tooltipSelector);
if (ruleTriggeredIndex !== -1) {
const triggered = this.history.rulesTriggered[ruleTriggeredIndex].triggered;
this.history.rulesTriggered[ruleTriggeredIndex] = {
...this.history.rulesTriggered[ruleTriggeredIndex],
triggered: triggered + 1,
lastTimeTriggered: new Date()
};
if (triggered + 1 === trigger.triggerLimit) {
removeViz();
}
this.storeHistory();
}
} else if (boolMode) {
return false;
}
}