verifyConditions()

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;
    }
  }