@syncfusion/ej2-querybuilder 19.3.45 → 19.4.42

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.
@@ -179,6 +179,9 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
179
179
  _this.isNotified = false;
180
180
  _this.isAddSuccess = false;
181
181
  _this.isNotValueChange = false;
182
+ _this.isFieldChange = false;
183
+ _this.isFieldClose = false;
184
+ _this.isDestroy = false;
182
185
  MultiSelect.Inject(CheckBoxSelection);
183
186
  return _this;
184
187
  }
@@ -658,8 +661,8 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
658
661
  ddlField = {
659
662
  dataSource: this.columns,
660
663
  fields: this.fields, placeholder: this.l10n.getConstant('SelectField'),
661
- popupHeight: ((this.columns.length > 5) ? height : 'auto'),
662
- change: this.changeField.bind(this), value: rule ? ddlValue : null, open: this.popupOpen.bind(this)
664
+ popupHeight: ((this.columns.length > 5) ? height : 'auto'), close: this.fieldClose.bind(this, ruleElem.id + '_filterkey'),
665
+ change: this.changeField.bind(this), value: rule ? ddlValue : null, open: this.popupOpen.bind(this, true)
663
666
  };
664
667
  if (this.fieldModel) {
665
668
  ddlField = __assign({}, ddlField, this.fieldModel);
@@ -681,11 +684,11 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
681
684
  var ddlValue = this.isImportRules ? rule.field : rule.field;
682
685
  ddlField = {
683
686
  fields: { dataSource: this.columns,
684
- value: "field", text: "label", child: 'columns', expanded: "expanded" },
687
+ value: 'field', text: 'label', child: 'columns', expanded: 'expanded' },
685
688
  placeholder: this.l10n.getConstant('SelectField'), showClearButton: false,
686
689
  popupHeight: ((this.columns.length > 5) ? height : 'auto'), changeOnBlur: false,
687
690
  change: this.changeField.bind(this), value: this.isImportRules ? [ddlValue] : null,
688
- open: this.popupOpen.bind(this)
691
+ open: this.popupOpen.bind(this, false)
689
692
  };
690
693
  if (this.fieldModel) {
691
694
  ddlField = __assign({}, ddlField, this.fieldModel);
@@ -1288,21 +1291,38 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
1288
1291
  }
1289
1292
  }
1290
1293
  };
1294
+ QueryBuilder.prototype.fieldClose = function (id) {
1295
+ if (this.isFieldChange || this.isDestroy) {
1296
+ return;
1297
+ }
1298
+ this.isFieldClose = true;
1299
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
1300
+ var ddl = getComponent(id, 'dropdownlist');
1301
+ var item = ddl.popupObj.element.querySelector('.e-active');
1302
+ var itemData = ddl.getItemData();
1303
+ ddl.value = itemData.value;
1304
+ var customArgs = { element: ddl.element, value: itemData.value, isInteracted: true,
1305
+ previousItemData: this.prevItemData, previousItem: null, item: item, itemData: itemData, event: null, e: null };
1306
+ this.changeField(customArgs);
1307
+ this.isFieldChange = false;
1308
+ };
1291
1309
  QueryBuilder.prototype.changeField = function (args) {
1292
1310
  if (args.isInteracted) {
1311
+ this.isFieldChange = true;
1312
+ this.prevItemData = args.itemData;
1293
1313
  var fieldElem = closest(args.element, '.e-rule-filter') || closest(args.element, '.e-rule-sub-filter');
1294
1314
  var column = this.fieldMode === 'DropdownTree' ? this.getColumn(args.value[0]) : this.getColumn(args.value);
1295
1315
  if (this.fieldMode === 'DropdownTree' && fieldElem != null) {
1296
- var ddtElem = fieldElem.querySelector(".e-control");
1316
+ var ddtElem = fieldElem.querySelector('.e-control');
1297
1317
  var ddt = getComponent(ddtElem, 'dropdowntree');
1298
1318
  if (column) {
1299
- if (column.type == 'object') {
1319
+ if (column.type === 'object') {
1300
1320
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
1301
1321
  ddt.value = args.oldValue;
1302
1322
  ddt.dataBind();
1303
1323
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
1304
1324
  if (isNullOrUndefined(args.oldValue)) {
1305
- ddtElem.value = "";
1325
+ ddtElem.value = '';
1306
1326
  }
1307
1327
  else {
1308
1328
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
@@ -1461,15 +1481,20 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
1461
1481
  tempElem.appendChild(subFieldElem);
1462
1482
  var height = (this.element.className.indexOf('e-device') > -1) ? '250px' : '200px';
1463
1483
  var subFieldData = Object.keys(this.selectedColumn.columns[0]);
1464
- var dropDownList = new DropDownList({
1484
+ var ddlField;
1485
+ ddlField = {
1465
1486
  dataSource: this.selectedColumn.columns,
1466
1487
  fields: this.fields,
1467
1488
  placeholder: this.l10n.getConstant('SelectField'),
1468
1489
  popupHeight: ((subFieldData.length > 5) ? height : 'auto'),
1469
1490
  change: this.changeField.bind(this),
1470
1491
  index: 0,
1471
- open: this.popupOpen.bind(this)
1472
- });
1492
+ open: this.popupOpen.bind(this, false)
1493
+ };
1494
+ if (this.fieldModel) {
1495
+ ddlField = __assign({}, ddlField, this.fieldModel);
1496
+ }
1497
+ var dropDownList = new DropDownList(ddlField);
1473
1498
  dropDownList.appendTo('#' + ruleId + '_subfilterkey' + this.subFilterCounter);
1474
1499
  if (this.isImportRules) {
1475
1500
  var subField = this.selectedColumn.columns;
@@ -1589,7 +1614,7 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
1589
1614
  change: this.changeField.bind(this),
1590
1615
  index: 0,
1591
1616
  value: value,
1592
- open: this.popupOpen.bind(this)
1617
+ open: this.popupOpen.bind(this, false)
1593
1618
  };
1594
1619
  if (this.operatorModel) {
1595
1620
  ddlOperator = __assign({}, ddlOperator, this.operatorModel);
@@ -1608,10 +1633,13 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
1608
1633
  this.updateRules(ddlArgs.element, ddlArgs.item);
1609
1634
  }
1610
1635
  };
1611
- QueryBuilder.prototype.popupOpen = function (args) {
1636
+ QueryBuilder.prototype.popupOpen = function (isField, args) {
1612
1637
  if (this.enableRtl) {
1613
1638
  addClass([args.popup.element], 'e-rtl');
1614
1639
  }
1640
+ if (isField) {
1641
+ this.isFieldClose = false;
1642
+ }
1615
1643
  };
1616
1644
  QueryBuilder.prototype.destroyControls = function (target, isRuleTemplate) {
1617
1645
  var element = isRuleTemplate ? target : target.nextElementSibling;
@@ -1804,7 +1832,7 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
1804
1832
  change: this.changeValue.bind(this, i),
1805
1833
  close: this.closePopup.bind(this, i),
1806
1834
  actionBegin: this.multiSelectOpen.bind(this, parentId + '_valuekey' + i),
1807
- open: this.popupOpen.bind(this)
1835
+ open: this.popupOpen.bind(this, false)
1808
1836
  };
1809
1837
  if (this.valueModel && this.valueModel.multiSelectModel) {
1810
1838
  multiSelectValue = __assign({}, multiSelectValue, this.valueModel.multiSelectModel);
@@ -1864,8 +1892,10 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
1864
1892
  };
1865
1893
  QueryBuilder.prototype.closePopup = function (i, args) {
1866
1894
  var element = document.getElementById(args.popup.element.id.replace('_popup', ''));
1867
- var value = getComponent(element, 'multiselect').value;
1868
- this.updateRules(element, value, i);
1895
+ if (element) {
1896
+ var value = getComponent(element, 'multiselect').value;
1897
+ this.updateRules(element, value, i);
1898
+ }
1869
1899
  };
1870
1900
  QueryBuilder.prototype.processTemplate = function (target, itemData, rule, tempRule) {
1871
1901
  var container = closest(target, '.e-rule-container');
@@ -2226,6 +2256,9 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
2226
2256
  return 0;
2227
2257
  };
2228
2258
  QueryBuilder.prototype.getPreviousItemData = function (prevItemData, column) {
2259
+ if (this.isFieldClose && prevItemData) {
2260
+ prevItemData = this.getColumn(prevItemData.value);
2261
+ }
2229
2262
  if (column.template && prevItemData && Object.keys(prevItemData).length < 4) {
2230
2263
  prevItemData.template = column.template;
2231
2264
  }
@@ -2718,6 +2751,7 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
2718
2751
  * @returns {void}
2719
2752
  */
2720
2753
  QueryBuilder.prototype.destroy = function () {
2754
+ this.isDestroy = true;
2721
2755
  var queryElement = this.element;
2722
2756
  if (!queryElement) {
2723
2757
  return;
@@ -2773,6 +2807,7 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
2773
2807
  this.clearQBTemplate();
2774
2808
  }
2775
2809
  classList(this.element, [], ['e-rtl', 'e-responsive', 'e-device']);
2810
+ this.isDestroy = false;
2776
2811
  };
2777
2812
  /**
2778
2813
  * Adds single or multiple rules.
@@ -3558,6 +3593,9 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
3558
3593
  rule.not = notValue;
3559
3594
  }
3560
3595
  }
3596
+ else if ((isNullOrUndefined(rule.condition)) && isNullOrUndefined(rule.rules)) {
3597
+ rule = { 'label': '', 'field': '', 'operator': '', 'type': '', 'value': '' };
3598
+ }
3561
3599
  else {
3562
3600
  if (this.enableNotCondition) {
3563
3601
  rule = { 'condition': rule.condition, 'rules': rule.rules, 'not': rule.not };
@@ -3741,7 +3779,7 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
3741
3779
  }
3742
3780
  }
3743
3781
  }
3744
- else if (ruleColl[i].operator.length) {
3782
+ else if (!isNullOrUndefined(ruleColl[i].operator) && !isNullOrUndefined(ruleColl[i].operator.length)) {
3745
3783
  var oper = ruleColl[i].operator.toLowerCase();
3746
3784
  var isDateFilter = false;
3747
3785
  var dateOperColl = ['equal', 'notequal', 'greaterthan', 'greaterthanorequal', 'lessthan', 'lessthanorequal'];
@@ -4073,7 +4111,7 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
4073
4111
  if (!isNullOrUndefined(ruleColl)) {
4074
4112
  for (var i = 0, len = ruleColl.length; i < len; i++) {
4075
4113
  var keys = Object.keys(ruleColl[i]);
4076
- if (!isNullOrUndefined(ruleColl[i].rules) && keys.indexOf('rules') > -1) {
4114
+ if (!isNullOrUndefined(ruleColl[i].rules) && keys.indexOf('rules') > -1 && (ruleColl[i].rules.length !== 0)) {
4077
4115
  parentElem = this.renderGroup(ruleColl[i], ruleColl[i].condition, parentElem, ruleColl[i].not);
4078
4116
  parentElem = this.importRules(ruleColl[i], parentElem, true);
4079
4117
  }
@@ -4445,6 +4483,12 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
4445
4483
  this.parser.push(['Literal', matchValue]);
4446
4484
  return matchValue.length + 2;
4447
4485
  }
4486
+ // eslint-disable-next-line
4487
+ if (this.checkNumberLiteral(sqlString)) {
4488
+ matchValue = /^[0-9]+(\.[0-9]+)?/.exec(sqlString)[0];
4489
+ this.parser.push(['Literal', matchValue]);
4490
+ return matchValue.length;
4491
+ }
4448
4492
  //String
4449
4493
  if (/^'((?:[^\\']+?|\\.|'')*)'(?!')/.exec(sqlString)) {
4450
4494
  matchValue = /^'((?:[^\\']+?|\\.|'')*)'(?!')/.exec(sqlString)[0];
@@ -4484,6 +4528,25 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
4484
4528
  }
4485
4529
  return false;
4486
4530
  };
4531
+ QueryBuilder.prototype.checkNumberLiteral = function (sqlString) {
4532
+ var lastParser = this.parser[this.parser.length - 1];
4533
+ if (!lastParser) {
4534
+ return true;
4535
+ }
4536
+ else {
4537
+ if (/^[0-9]+(\.[0-9]+)?/.exec(sqlString)) {
4538
+ var secParser = this.parser[this.parser.length - 2];
4539
+ var betweenParser = this.parser[this.parser.length - 3];
4540
+ if (lastParser[0] === 'Left' && (secParser && secParser[0] === 'Conditions')) {
4541
+ return true;
4542
+ }
4543
+ if (lastParser[0] === 'Conditions' && (betweenParser && betweenParser[1].indexOf('between') < 0)) {
4544
+ return true;
4545
+ }
4546
+ }
4547
+ }
4548
+ return false;
4549
+ };
4487
4550
  QueryBuilder.prototype.getOperator = function (value, operator) {
4488
4551
  var operators = {
4489
4552
  '=': 'equal', '!=': 'notequal', '<': 'lessthan', '>': 'greaterthan', '<=': 'lessthanorequal',