@syncfusion/ej2-querybuilder 19.3.53 → 19.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.
@@ -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
@@ -1468,7 +1488,7 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
1468
1488
  popupHeight: ((subFieldData.length > 5) ? height : 'auto'),
1469
1489
  change: this.changeField.bind(this),
1470
1490
  index: 0,
1471
- open: this.popupOpen.bind(this)
1491
+ open: this.popupOpen.bind(this, false)
1472
1492
  });
1473
1493
  dropDownList.appendTo('#' + ruleId + '_subfilterkey' + this.subFilterCounter);
1474
1494
  if (this.isImportRules) {
@@ -1589,7 +1609,7 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
1589
1609
  change: this.changeField.bind(this),
1590
1610
  index: 0,
1591
1611
  value: value,
1592
- open: this.popupOpen.bind(this)
1612
+ open: this.popupOpen.bind(this, false)
1593
1613
  };
1594
1614
  if (this.operatorModel) {
1595
1615
  ddlOperator = __assign({}, ddlOperator, this.operatorModel);
@@ -1608,10 +1628,13 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
1608
1628
  this.updateRules(ddlArgs.element, ddlArgs.item);
1609
1629
  }
1610
1630
  };
1611
- QueryBuilder.prototype.popupOpen = function (args) {
1631
+ QueryBuilder.prototype.popupOpen = function (isField, args) {
1612
1632
  if (this.enableRtl) {
1613
1633
  addClass([args.popup.element], 'e-rtl');
1614
1634
  }
1635
+ if (isField) {
1636
+ this.isFieldClose = false;
1637
+ }
1615
1638
  };
1616
1639
  QueryBuilder.prototype.destroyControls = function (target, isRuleTemplate) {
1617
1640
  var element = isRuleTemplate ? target : target.nextElementSibling;
@@ -1804,7 +1827,7 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
1804
1827
  change: this.changeValue.bind(this, i),
1805
1828
  close: this.closePopup.bind(this, i),
1806
1829
  actionBegin: this.multiSelectOpen.bind(this, parentId + '_valuekey' + i),
1807
- open: this.popupOpen.bind(this)
1830
+ open: this.popupOpen.bind(this, false)
1808
1831
  };
1809
1832
  if (this.valueModel && this.valueModel.multiSelectModel) {
1810
1833
  multiSelectValue = __assign({}, multiSelectValue, this.valueModel.multiSelectModel);
@@ -2226,6 +2249,9 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
2226
2249
  return 0;
2227
2250
  };
2228
2251
  QueryBuilder.prototype.getPreviousItemData = function (prevItemData, column) {
2252
+ if (this.isFieldClose && prevItemData) {
2253
+ prevItemData = this.getColumn(prevItemData.value);
2254
+ }
2229
2255
  if (column.template && prevItemData && Object.keys(prevItemData).length < 4) {
2230
2256
  prevItemData.template = column.template;
2231
2257
  }
@@ -2718,6 +2744,7 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
2718
2744
  * @returns {void}
2719
2745
  */
2720
2746
  QueryBuilder.prototype.destroy = function () {
2747
+ this.isDestroy = true;
2721
2748
  var queryElement = this.element;
2722
2749
  if (!queryElement) {
2723
2750
  return;
@@ -2773,6 +2800,7 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
2773
2800
  this.clearQBTemplate();
2774
2801
  }
2775
2802
  classList(this.element, [], ['e-rtl', 'e-responsive', 'e-device']);
2803
+ this.isDestroy = false;
2776
2804
  };
2777
2805
  /**
2778
2806
  * Adds single or multiple rules.
@@ -3558,6 +3586,9 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
3558
3586
  rule.not = notValue;
3559
3587
  }
3560
3588
  }
3589
+ else if ((isNullOrUndefined(rule.condition)) && isNullOrUndefined(rule.rules)) {
3590
+ rule = { 'label': '', 'field': '', 'operator': '', 'type': '', 'value': '' };
3591
+ }
3561
3592
  else {
3562
3593
  if (this.enableNotCondition) {
3563
3594
  rule = { 'condition': rule.condition, 'rules': rule.rules, 'not': rule.not };
@@ -3741,7 +3772,7 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
3741
3772
  }
3742
3773
  }
3743
3774
  }
3744
- else if (ruleColl[i].operator.length) {
3775
+ else if (!isNullOrUndefined(ruleColl[i].operator) && !isNullOrUndefined(ruleColl[i].operator.length)) {
3745
3776
  var oper = ruleColl[i].operator.toLowerCase();
3746
3777
  var isDateFilter = false;
3747
3778
  var dateOperColl = ['equal', 'notequal', 'greaterthan', 'greaterthanorequal', 'lessthan', 'lessthanorequal'];
@@ -4445,6 +4476,12 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
4445
4476
  this.parser.push(['Literal', matchValue]);
4446
4477
  return matchValue.length + 2;
4447
4478
  }
4479
+ // eslint-disable-next-line
4480
+ if (this.checkNumberLiteral(sqlString)) {
4481
+ matchValue = /^[0-9]+(\.[0-9]+)?/.exec(sqlString)[0];
4482
+ this.parser.push(['Literal', matchValue]);
4483
+ return matchValue.length;
4484
+ }
4448
4485
  //String
4449
4486
  if (/^'((?:[^\\']+?|\\.|'')*)'(?!')/.exec(sqlString)) {
4450
4487
  matchValue = /^'((?:[^\\']+?|\\.|'')*)'(?!')/.exec(sqlString)[0];
@@ -4484,6 +4521,25 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
4484
4521
  }
4485
4522
  return false;
4486
4523
  };
4524
+ QueryBuilder.prototype.checkNumberLiteral = function (sqlString) {
4525
+ var lastParser = this.parser[this.parser.length - 1];
4526
+ if (!lastParser) {
4527
+ return true;
4528
+ }
4529
+ else {
4530
+ if (/^[0-9]+(\.[0-9]+)?/.exec(sqlString)) {
4531
+ var secParser = this.parser[this.parser.length - 2];
4532
+ var betweenParser = this.parser[this.parser.length - 3];
4533
+ if (lastParser[0] === 'Left' && (secParser && secParser[0] === 'Conditions')) {
4534
+ return true;
4535
+ }
4536
+ if (lastParser[0] === 'Conditions' && (betweenParser && betweenParser[1].indexOf('between') < 0)) {
4537
+ return true;
4538
+ }
4539
+ }
4540
+ }
4541
+ return false;
4542
+ };
4487
4543
  QueryBuilder.prototype.getOperator = function (value, operator) {
4488
4544
  var operators = {
4489
4545
  '=': 'equal', '!=': 'notequal', '<': 'lessthan', '>': 'greaterthan', '<=': 'lessthanorequal',