@syncfusion/ej2-querybuilder 20.3.59 → 20.4.38

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -337,7 +337,7 @@ let QueryBuilder = class QueryBuilder extends Component {
337
337
  if (sqlIdx > -1) {
338
338
  const operator = column.operators[j];
339
339
  const operColl = Object.keys(operator);
340
- const values = operColl.map((key) => operator[key]).join(',').split(',');
340
+ const values = operColl.map((key) => operator[`${key}`]).join(',').split(',');
341
341
  const valueIdx = operColl.indexOf('value');
342
342
  this.operators[values[valueIdx]] = values[sqlIdx];
343
343
  }
@@ -728,6 +728,7 @@ let QueryBuilder = class QueryBuilder extends Component {
728
728
  const tooltip = new Tooltip({ content: this.l10n.getConstant('ValidationMessage'),
729
729
  position: 'BottomCenter', cssClass: 'e-querybuilder-error' });
730
730
  tooltip.appendTo(element);
731
+ // eslint-disable-next-line
731
732
  tooltip.open(element);
732
733
  }
733
734
  /**
@@ -785,8 +786,9 @@ let QueryBuilder = class QueryBuilder extends Component {
785
786
  if (rule.rules[index].value instanceof Array) {
786
787
  valArray = rule.rules[index].value;
787
788
  }
788
- if (excludeOprs.indexOf(rule.rules[index].operator) < 0 && (isNullOrUndefined(rule.rules[index].value) &&
789
- rule.rules[index].type !== 'date') || rule.rules[index].value === '' ||
789
+ if (excludeOprs.indexOf(rule.rules[index].operator) < 0 &&
790
+ (isNullOrUndefined(rule.rules[index].value) &&
791
+ rule.rules[index].type !== 'date') || rule.rules[index].value === '' ||
790
792
  (rule.rules[index].value instanceof Array && valArray.length < 1)) {
791
793
  const valElem = tempElem.querySelectorAll('.e-rule-value .e-control');
792
794
  isValid = false;
@@ -864,7 +866,7 @@ let QueryBuilder = class QueryBuilder extends Component {
864
866
  groupElem.appendChild(grpBodyElem);
865
867
  // create button group in OR and AND process
866
868
  if (!this.headerTemplate) {
867
- glueElem = this.createElement('div', { attrs: { class: 'e-lib e-btn-group' } });
869
+ glueElem = this.createElement('div', { attrs: { class: 'e-lib e-btn-group', role: 'group' } });
868
870
  if (this.enableNotCondition) {
869
871
  inputElem = this.createElement('button', { attrs: { type: 'button', class: 'e-qb-toggle' } });
870
872
  glueElem.appendChild(inputElem);
@@ -1743,29 +1745,29 @@ let QueryBuilder = class QueryBuilder extends Component {
1743
1745
  for (let j = 0, jLen = fieldColl.length; j < jLen; j++) {
1744
1746
  fieldStr = fieldColl[j];
1745
1747
  if (fieldColl.length === (j + 1)) {
1746
- value = dataObj[fieldStr];
1747
- if (Number(dataObj[fieldStr]) === dataObj[fieldStr] && dataObj[fieldStr] % 1 !== 0) {
1748
- value = dataObj[fieldStr].toString();
1748
+ value = dataObj[`${fieldStr}`];
1749
+ if (Number(dataObj[`${fieldStr}`]) === dataObj[`${fieldStr}`] && dataObj[`${fieldStr}`] % 1 !== 0) {
1750
+ value = dataObj[`${fieldStr}`].toString();
1749
1751
  }
1750
1752
  }
1751
1753
  else {
1752
- dataObj = dataObj[fieldStr];
1754
+ dataObj = dataObj[`${fieldStr}`];
1753
1755
  }
1754
1756
  }
1755
1757
  }
1756
1758
  else {
1757
- value = dataSource[i][field];
1758
- if (Number(dataSource[i][field]) === dataSource[i][field] && dataSource[i][field] % 1 !== 0) {
1759
- value = dataSource[i][field].toString();
1759
+ value = dataSource[i][`${field}`];
1760
+ if (Number(dataSource[i][`${field}`]) === dataSource[i][`${field}`] && dataSource[i][`${field}`] % 1 !== 0) {
1761
+ value = dataSource[i][`${field}`].toString();
1760
1762
  }
1761
1763
  }
1762
1764
  if (!(value in original)) {
1763
- original[value] = 1;
1765
+ original[`${value}`] = 1;
1764
1766
  if (fieldColl.length > 1) {
1765
1767
  this.createNestedObject(data, fieldColl, value);
1766
1768
  }
1767
1769
  else {
1768
- data[field] = value;
1770
+ data[`${field}`] = value;
1769
1771
  }
1770
1772
  result.push(data);
1771
1773
  }
@@ -1779,9 +1781,9 @@ let QueryBuilder = class QueryBuilder extends Component {
1779
1781
  for (let k = 0; k < lastIndex; ++k) {
1780
1782
  key = fieldColl[k];
1781
1783
  if (!(key in obj)) {
1782
- obj[key] = {};
1784
+ obj[`${key}`] = {};
1783
1785
  }
1784
- obj = obj[key];
1786
+ obj = obj[`${key}`];
1785
1787
  }
1786
1788
  obj[fieldColl[lastIndex]] = value;
1787
1789
  }
@@ -1793,28 +1795,28 @@ let QueryBuilder = class QueryBuilder extends Component {
1793
1795
  const isNested = field.indexOf(this.separator);
1794
1796
  for (let i = 0, iLen = dataSource.length; i < iLen; i++) {
1795
1797
  if (isNested === 0) {
1796
- value = dataSource[i][field];
1798
+ value = dataSource[i][`${field}`];
1797
1799
  }
1798
1800
  else {
1799
1801
  nest = field.split(this.separator);
1800
1802
  // eslint-disable-next-line @typescript-eslint/tslint/config
1801
1803
  nest.forEach(element => {
1802
1804
  if (value) {
1803
- value = value[element];
1805
+ value = value[`${element}`];
1804
1806
  }
1805
1807
  else {
1806
- value = dataSource[i][element];
1808
+ value = dataSource[i][`${element}`];
1807
1809
  }
1808
1810
  });
1809
1811
  }
1810
- if (Number(dataSource[i][field]) === dataSource[i][field] && dataSource[i][field] % 1 !== 0) {
1811
- value = dataSource[i][field].toString();
1812
+ if (Number(dataSource[i][`${field}`]) === dataSource[i][`${field}`] && dataSource[i][`${field}`] % 1 !== 0) {
1813
+ value = dataSource[i][`${field}`].toString();
1812
1814
  }
1813
1815
  const data = {};
1814
1816
  if (!(value in original)) {
1815
- original[value] = 1;
1817
+ original[`${value}`] = 1;
1816
1818
  if (isNested === 0) {
1817
- data[field] = value;
1819
+ data[`${field}`] = value;
1818
1820
  }
1819
1821
  else {
1820
1822
  data[nest[nest.length - 1]] = value;
@@ -2556,7 +2558,8 @@ let QueryBuilder = class QueryBuilder extends Component {
2556
2558
  const column = this.fieldMode === 'DropdownTree' ? this.getColumn(dropDownObj.value[0])
2557
2559
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
2558
2560
  : this.getColumn(dropDownObj.value);
2559
- if (!this.isImportRules && rule.rules[index].field && rule.rules[index].field.toLowerCase() !== column.field.toLowerCase()) {
2561
+ if (!this.isImportRules && rule.rules[index].field &&
2562
+ rule.rules[index].field.toLowerCase() !== column.field.toLowerCase()) {
2560
2563
  if (!(ruleElem.querySelectorAll('.e-template')) && !(operator.indexOf('null') > -1)
2561
2564
  || (operator.indexOf('empty') > -1)) {
2562
2565
  rule.rules[index].value = '';
@@ -3349,7 +3352,7 @@ let QueryBuilder = class QueryBuilder extends Component {
3349
3352
  EventHandler.remove(this.element, 'keydown', this.keyBoardHandler);
3350
3353
  }
3351
3354
  getParentGroup(target, isParent) {
3352
- const groupLevel = (target instanceof Element) ? this.levelColl[target.id] : this.levelColl[target];
3355
+ const groupLevel = (target instanceof Element) ? this.levelColl[target.id] : this.levelColl[`${target}`];
3353
3356
  const len = isParent ? groupLevel.length - 1 : groupLevel.length;
3354
3357
  let rule = this.rule;
3355
3358
  for (let i = 0; i < len; i++) {
@@ -3509,6 +3512,7 @@ let QueryBuilder = class QueryBuilder extends Component {
3509
3512
  err = [];
3510
3513
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
3511
3514
  const error = 'error';
3515
+ // eslint-disable-next-line
3512
3516
  err[error] = error;
3513
3517
  }
3514
3518
  // eslint-enable
@@ -3670,6 +3674,9 @@ let QueryBuilder = class QueryBuilder extends Component {
3670
3674
  else {
3671
3675
  rule = { 'condition': rule.condition, 'rules': rule.rules };
3672
3676
  }
3677
+ if (rule.rules.length === 0) {
3678
+ rule = {};
3679
+ }
3673
3680
  }
3674
3681
  }
3675
3682
  return rule;
@@ -3878,7 +3885,8 @@ let QueryBuilder = class QueryBuilder extends Component {
3878
3885
  if (i === 0) {
3879
3886
  if (isDateFilter || (oper.indexOf('in') > -1 || oper.indexOf('between') > -1 || oper.indexOf('null') > -1 ||
3880
3887
  oper.indexOf('empty') > -1) && oper.indexOf('contains') < 0) {
3881
- pred = isDateFilter ? this.datePredicate(ruleColl[i], ruleValue) : this.arrayPredicate(ruleColl[i]);
3888
+ pred = isDateFilter ? this.datePredicate(ruleColl[i], ruleValue) :
3889
+ this.arrayPredicate(ruleColl[i]);
3882
3890
  }
3883
3891
  else {
3884
3892
  const value = ruleValue;
@@ -4361,89 +4369,90 @@ let QueryBuilder = class QueryBuilder extends Component {
4361
4369
  queryStr += rulesNotCondition;
4362
4370
  }
4363
4371
  }
4364
- for (let j = 0, jLen = rules.rules.length; j < jLen; j++) {
4365
- if (rules.rules[j].rules) {
4366
- queryStr = this.getSqlString(rules.rules[j], enableEscape, queryStr, sqlLocale);
4367
- }
4368
- else {
4369
- const rule = rules.rules[j];
4370
- let valueStr = '';
4371
- let ruleOpertor;
4372
- ruleOpertor = sqlLocale ? this.sqlOperators[rule.operator] : this.operators[rule.operator];
4373
- if (rule.value instanceof Array) {
4374
- if (rule.operator.toString().indexOf('between') > -1) {
4375
- let ruleCondition = sqlLocale ? ' ' + this.l10n.getConstant('AND').toUpperCase() + ' ' : ' ' + 'AND' + ' ';
4376
- if (rule.type === 'date' && !this.isDateFunction(rule.value[0])) {
4377
- valueStr += '"' + rule.value[0] + '"' + ruleCondition + '"' + rule.value[1] + '"';
4372
+ if (rules.rules) {
4373
+ for (let j = 0, jLen = rules.rules.length; j < jLen; j++) {
4374
+ if (rules.rules[j].rules) {
4375
+ queryStr = this.getSqlString(rules.rules[j], enableEscape, queryStr, sqlLocale);
4376
+ }
4377
+ else {
4378
+ const rule = rules.rules[j];
4379
+ let valueStr = '';
4380
+ const ruleOpertor = sqlLocale ? this.sqlOperators[rule.operator] : this.operators[rule.operator];
4381
+ if (rule.value instanceof Array) {
4382
+ if (rule.operator.toString().indexOf('between') > -1) {
4383
+ const ruleCondition = sqlLocale ? ' ' + this.l10n.getConstant('AND').toUpperCase() + ' ' : ' ' + 'AND' + ' ';
4384
+ if (rule.type === 'date' && !this.isDateFunction(rule.value[0])) {
4385
+ valueStr += '"' + rule.value[0] + '"' + ruleCondition + '"' + rule.value[1] + '"';
4386
+ }
4387
+ else {
4388
+ valueStr += rule.value[0] + ruleCondition + rule.value[1];
4389
+ }
4378
4390
  }
4379
4391
  else {
4380
- valueStr += rule.value[0] + ruleCondition + rule.value[1];
4392
+ if (typeof rule.value[0] === 'string' && rule.value !== null) {
4393
+ valueStr += '("' + rule.value[0] + '"';
4394
+ for (let k = 1, kLen = rule.value.length; k < kLen; k++) {
4395
+ valueStr += ',"' + rule.value[k] + '"';
4396
+ }
4397
+ valueStr += ')';
4398
+ }
4399
+ else {
4400
+ valueStr += '(' + rule.value + ')';
4401
+ }
4381
4402
  }
4382
4403
  }
4383
4404
  else {
4384
- if (typeof rule.value[0] === 'string' && rule.value !== null) {
4385
- valueStr += '("' + rule.value[0] + '"';
4386
- for (let k = 1, kLen = rule.value.length; k < kLen; k++) {
4387
- valueStr += ',"' + rule.value[k] + '"';
4388
- }
4389
- valueStr += ')';
4405
+ if (rule.operator.toString().indexOf('startswith') > -1) {
4406
+ valueStr += rule.value ? '("' + rule.value + '%")' : '(' + rule.value + ')';
4407
+ }
4408
+ else if (rule.operator.toString().indexOf('endswith') > -1) {
4409
+ valueStr += rule.value ? '("%' + rule.value + '")' : '(' + rule.value + ')';
4410
+ }
4411
+ else if (rule.operator.toString().indexOf('contains') > -1) {
4412
+ valueStr += rule.value ? '("%' + rule.value + '%")' : '(' + rule.value + ')';
4390
4413
  }
4391
4414
  else {
4392
- valueStr += '(' + rule.value + ')';
4415
+ if (rule.type === 'number' || typeof rule.value === 'boolean' || rule.value === null) {
4416
+ valueStr += rule.value;
4417
+ }
4418
+ else {
4419
+ valueStr += '"' + rule.value + '"';
4420
+ }
4393
4421
  }
4394
4422
  }
4395
- }
4396
- else {
4397
- if (rule.operator.toString().indexOf('startswith') > -1) {
4398
- valueStr += rule.value ? '("' + rule.value + '%")' : '(' + rule.value + ')';
4399
- }
4400
- else if (rule.operator.toString().indexOf('endswith') > -1) {
4401
- valueStr += rule.value ? '("%' + rule.value + '")' : '(' + rule.value + ')';
4402
- }
4403
- else if (rule.operator.toString().indexOf('contains') > -1) {
4404
- valueStr += rule.value ? '("%' + rule.value + '%")' : '(' + rule.value + ')';
4405
- }
4406
- else {
4407
- if (rule.type === 'number' || typeof rule.value === 'boolean' || rule.value === null) {
4408
- valueStr += rule.value;
4423
+ if (rule.operator.toString().indexOf('null') > -1 || (rule.operator.toString().indexOf('empty') > -1)) {
4424
+ if (enableEscape) {
4425
+ rule.field = '`' + rule.field + '`';
4409
4426
  }
4410
4427
  else {
4411
- valueStr += '"' + rule.value + '"';
4428
+ if (rule.field.indexOf(' ') > -1) {
4429
+ rule.field = '"' + rule.field + '"';
4430
+ }
4412
4431
  }
4413
- }
4414
- }
4415
- if (rule.operator.toString().indexOf('null') > -1 || (rule.operator.toString().indexOf('empty') > -1)) {
4416
- if (enableEscape) {
4417
- rule.field = '`' + rule.field + '`';
4432
+ queryStr += rule.field + ' ' + ruleOpertor;
4418
4433
  }
4419
4434
  else {
4420
- if (rule.field.indexOf(' ') > -1) {
4421
- rule.field = '"' + rule.field + '"';
4435
+ if (enableEscape) {
4436
+ rule.field = '`' + rule.field + '`';
4422
4437
  }
4423
- }
4424
- queryStr += rule.field + ' ' + ruleOpertor;
4425
- }
4426
- else {
4427
- if (enableEscape) {
4428
- rule.field = '`' + rule.field + '`';
4429
- }
4430
- else {
4431
- if (rule.field.indexOf(' ') > -1) {
4432
- rule.field = '"' + rule.field + '"';
4438
+ else {
4439
+ if (rule.field.indexOf(' ') > -1) {
4440
+ rule.field = '"' + rule.field + '"';
4441
+ }
4433
4442
  }
4443
+ queryStr += rule.field + ' ' + ruleOpertor + ' ' + valueStr;
4444
+ }
4445
+ if (rule.condition && rule.condition !== '') {
4446
+ condition = rule.condition;
4434
4447
  }
4435
- queryStr += rule.field + ' ' + ruleOpertor + ' ' + valueStr;
4436
- }
4437
- if (rule.condition && rule.condition !== '') {
4438
- condition = rule.condition;
4439
4448
  }
4440
- }
4441
- if (j !== jLen - 1) {
4442
- if (condition === '') {
4443
- condition = rules.rules[j].condition;
4449
+ if (j !== jLen - 1) {
4450
+ if (condition === '') {
4451
+ condition = rules.rules[j].condition;
4452
+ }
4453
+ condition = sqlLocale ? this.l10n.getConstant(condition.toUpperCase()).toUpperCase() : condition.toUpperCase();
4454
+ queryStr += ' ' + condition + ' ';
4444
4455
  }
4445
- condition = sqlLocale ? this.l10n.getConstant(condition.toUpperCase()).toUpperCase() : condition.toUpperCase();
4446
- queryStr += ' ' + condition + ' ';
4447
4456
  }
4448
4457
  }
4449
4458
  if (!isRoot) {
@@ -4490,7 +4499,7 @@ let QueryBuilder = class QueryBuilder extends Component {
4490
4499
  *
4491
4500
  * @param {RuleModel} rule - 'rule' to be passed to get the sql.
4492
4501
  * @param {boolean} allowEscape - Set `true` if it exclude the escape character.
4493
- * @param {boolean} sqlLocale - Set `true` if Localization for Sql query.
4502
+ * @param {boolean} sqlLocale - Set `true` if Localization for Sql query.
4494
4503
  * @returns {object} - Sql query from rules.
4495
4504
  */
4496
4505
  getSqlFromRules(rule, allowEscape, sqlLocale) {
@@ -4534,6 +4543,7 @@ let QueryBuilder = class QueryBuilder extends Component {
4534
4543
  let matchValue;
4535
4544
  for (let i = 0, iLen = operators.length; i < iLen; i++) {
4536
4545
  regexStr = /^\w+$/.test(operators[i]) ? '\\b' : '';
4546
+ // eslint-disable-next-line
4537
4547
  regex = new RegExp('^(' + operators[i] + ')' + regexStr, 'ig');
4538
4548
  if (regex.exec(sqlString)) {
4539
4549
  this.parser.push(['Operators', operators[i].toLowerCase()]);
@@ -4544,6 +4554,7 @@ let QueryBuilder = class QueryBuilder extends Component {
4544
4554
  if (!lastPasrser || (lastPasrser && lastPasrser[0] !== 'Literal')) {
4545
4555
  for (let i = 0, iLen = conditions.length; i < iLen; i++) {
4546
4556
  regexStr = /^\w+$/.test(conditions[i]) ? '\\b' : '';
4557
+ // eslint-disable-next-line
4547
4558
  regex = new RegExp('^(' + conditions[i] + ')' + regexStr, 'ig');
4548
4559
  if (regex.exec(sqlString)) {
4549
4560
  this.parser.push(['Conditions', conditions[i].toLowerCase()]);
@@ -4553,6 +4564,7 @@ let QueryBuilder = class QueryBuilder extends Component {
4553
4564
  }
4554
4565
  for (let i = 0, iLen = subOp.length; i < iLen; i++) {
4555
4566
  regexStr = /^\w+$/.test(subOp[i]) ? '\\b' : '';
4567
+ // eslint-disable-next-line
4556
4568
  regex = new RegExp('^(' + subOp[i] + ')' + regexStr, 'ig');
4557
4569
  if (regex.exec(sqlString)) {
4558
4570
  this.parser.push(['SubOperators', subOp[i].toLowerCase()]);
@@ -4596,30 +4608,39 @@ let QueryBuilder = class QueryBuilder extends Component {
4596
4608
  return matchValue.length + 2;
4597
4609
  }
4598
4610
  if (this.checkNumberLiteral(sqlString, sqlLocale)) {
4611
+ // eslint-disable-next-line
4599
4612
  matchValue = /^[0-9]+(\.[0-9]+)?/.exec(sqlString)[0];
4600
4613
  this.parser.push(['Literal', matchValue]);
4601
4614
  return matchValue.length;
4602
4615
  }
4603
4616
  //String
4617
+ // eslint-disable-next-line
4604
4618
  if (/^'((?:[^\\']+?|\\.|'')*)'(?!')/.exec(sqlString)) {
4619
+ // eslint-disable-next-line
4605
4620
  matchValue = /^'((?:[^\\']+?|\\.|'')*)'(?!')/.exec(sqlString)[0];
4606
4621
  this.parser.push(['String', matchValue]);
4607
4622
  return matchValue.length;
4608
4623
  }
4609
4624
  //Double String
4625
+ // eslint-disable-next-line
4610
4626
  if (/^"([^\\"]*(?:\\.[^\\"]*)*)"/.exec(sqlString)) {
4627
+ // eslint-disable-next-line
4611
4628
  matchValue = /^"([^\\"]*(?:\\.[^\\"]*)*)"/.exec(sqlString)[0];
4612
4629
  this.parser.push(['DoubleString', matchValue]);
4613
4630
  return matchValue.length;
4614
4631
  }
4615
4632
  //Number
4633
+ // eslint-disable-next-line
4616
4634
  if (/^[0-9]+(\.[0-9]+)?/.exec(sqlString)) {
4635
+ // eslint-disable-next-line
4617
4636
  matchValue = /^[0-9]+(\.[0-9]+)?/.exec(sqlString)[0];
4618
4637
  this.parser.push(['Number', matchValue]);
4619
4638
  return matchValue.length;
4620
4639
  }
4621
4640
  //Negative Number
4641
+ // eslint-disable-next-line
4622
4642
  if (/^-?[0-9]+(\.[0-9]+)?/.exec(sqlString)) {
4643
+ // eslint-disable-next-line
4623
4644
  matchValue = /^-?[0-9]+(\.[0-9]+)?/.exec(sqlString)[0];
4624
4645
  this.parser.push(['Number', matchValue]);
4625
4646
  return matchValue.length;
@@ -4645,13 +4666,14 @@ let QueryBuilder = class QueryBuilder extends Component {
4645
4666
  return true;
4646
4667
  }
4647
4668
  else {
4669
+ // eslint-disable-next-line
4648
4670
  if (/^[0-9]+(\.[0-9]+)?/.exec(sqlString)) {
4649
4671
  const secParser = this.parser[this.parser.length - 2];
4650
4672
  const betweenParser = this.parser[this.parser.length - 3];
4651
4673
  if (lastParser[0] === 'Left' && (secParser && secParser[0] === 'Conditions')) {
4652
4674
  return true;
4653
4675
  }
4654
- let betweenOperator = sqlLocale ? this.l10n.getConstant('Between').toLowerCase() : 'between';
4676
+ const betweenOperator = sqlLocale ? this.l10n.getConstant('Between').toLowerCase() : 'between';
4655
4677
  if (lastParser[0] === 'Conditions' && (betweenParser && betweenParser[1].indexOf(betweenOperator) < 0)) {
4656
4678
  return true;
4657
4679
  }
@@ -4666,7 +4688,7 @@ let QueryBuilder = class QueryBuilder extends Component {
4666
4688
  'is empty': 'isempty', 'is null': 'isnull', 'is not null': 'isnotnull', 'is not empty': 'isnotempty'
4667
4689
  };
4668
4690
  if (sqlLocale) {
4669
- let localeOperator = Object.keys(this.sqlOperators);
4691
+ const localeOperator = Object.keys(this.sqlOperators);
4670
4692
  for (let i = 0; i < localeOperator.length; i++) {
4671
4693
  if (this.sqlOperators[localeOperator[i]] === operator.toUpperCase()) {
4672
4694
  if (value && value.indexOf('%') === 0 && value[value.length - 1] === '%') {
@@ -4702,7 +4724,7 @@ let QueryBuilder = class QueryBuilder extends Component {
4702
4724
  return 'equal';
4703
4725
  }
4704
4726
  }
4705
- return operators[operator];
4727
+ return operators[`${operator}`];
4706
4728
  }
4707
4729
  getTypeFromColumn(rules) {
4708
4730
  const columnData = this.getColumn(rules.field);