checkData(data = null, flags = null, row = null) {
    data = data || this.rootValue;
    flags = flags || {};
    row = row || this.data;

    if (flags.noCheck) {
      return true;
    }

    // Some components (for legacy reasons) have calls to "checkData" in inappropriate places such
    // as setValue. Historically, this was bypassed by a series of cached states around the data model
    // which caused its own problems. We need to ensure that premium and custom components do not fall into
    // an infinite loop by only checking this component once.
    if (this.checkingData) {
      return;
    }
    this.checkingData = true;

    // Needs for Nextgen Rules Engine
    this.resetCaches();

    // Do not trigger refresh if change was triggered on blur event since components with Refresh on Blur have their own listeners
    if (!flags.fromBlur) {
      this.checkRefreshOn(flags.changes, flags);
    }

    this.checkComponentConditions(data, flags, row);

    if (this.id !== flags.triggeredComponentId) {
      this.calculateComponentValue(data, flags, row);
    }

    // We are done checking data.
    this.checkingData = false;
  }
Check the conditions, calculations, and validity of a single component and triggers an update if
something changed.
@param {*} data - The root data of the change event.
@param {*} flags - The flags from this change event.
@param {*} row - The contextual row data for this component.
@returns {void|boolean} - TRUE if no check should be performed on the component.