@syncfusion/ej2-querybuilder 19.4.40 → 19.4.50

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);
@@ -729,12 +732,19 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
729
732
  else {
730
733
  groupElem = closest(target, '.e-group-container');
731
734
  rules = this.getParentGroup(groupElem);
735
+ var custom = rule.custom;
732
736
  if (Object.keys(rule).length) {
733
737
  rules.rules.push({
734
738
  'field': rule.field, 'type': rule.type, 'label': rule.label, 'operator': rule.operator, value: rule.value
735
739
  });
740
+ if (custom) {
741
+ rules.rules[rules.rules.length - 1].custom = custom;
742
+ }
736
743
  }
737
744
  else {
745
+ if (custom) {
746
+ newRule.custom = custom;
747
+ }
738
748
  rules.rules.push(newRule);
739
749
  }
740
750
  }
@@ -1288,21 +1298,41 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
1288
1298
  }
1289
1299
  }
1290
1300
  };
1301
+ QueryBuilder.prototype.fieldClose = function (id) {
1302
+ if (this.isFieldChange || this.isDestroy) {
1303
+ return;
1304
+ }
1305
+ this.isFieldClose = true;
1306
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
1307
+ var ddl = getComponent(id, 'dropdownlist');
1308
+ var item = ddl.popupObj.element.querySelector('.e-active');
1309
+ var itemData = ddl.getItemData();
1310
+ ddl.value = itemData.value;
1311
+ var customArgs = { element: ddl.element, value: itemData.value, isInteracted: true,
1312
+ previousItemData: this.prevItemData, previousItem: null, item: item, itemData: itemData, event: null, e: null };
1313
+ this.changeField(customArgs);
1314
+ this.isFieldChange = false;
1315
+ };
1291
1316
  QueryBuilder.prototype.changeField = function (args) {
1292
1317
  if (args.isInteracted) {
1318
+ if (isNullOrUndefined(args.value)) {
1319
+ return;
1320
+ }
1321
+ this.isFieldChange = true;
1322
+ this.prevItemData = args.itemData;
1293
1323
  var fieldElem = closest(args.element, '.e-rule-filter') || closest(args.element, '.e-rule-sub-filter');
1294
1324
  var column = this.fieldMode === 'DropdownTree' ? this.getColumn(args.value[0]) : this.getColumn(args.value);
1295
1325
  if (this.fieldMode === 'DropdownTree' && fieldElem != null) {
1296
- var ddtElem = fieldElem.querySelector(".e-control");
1326
+ var ddtElem = fieldElem.querySelector('.e-control');
1297
1327
  var ddt = getComponent(ddtElem, 'dropdowntree');
1298
1328
  if (column) {
1299
- if (column.type == 'object') {
1329
+ if (column.type === 'object') {
1300
1330
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
1301
1331
  ddt.value = args.oldValue;
1302
1332
  ddt.dataBind();
1303
1333
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
1304
1334
  if (isNullOrUndefined(args.oldValue)) {
1305
- ddtElem.value = "";
1335
+ ddtElem.value = '';
1306
1336
  }
1307
1337
  else {
1308
1338
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
@@ -1338,6 +1368,7 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
1338
1368
  ruleElem = ruleElem.previousElementSibling;
1339
1369
  index++;
1340
1370
  }
1371
+ rules.rules[index].value = '';
1341
1372
  this.changeRule(rules.rules[index], args);
1342
1373
  }
1343
1374
  }
@@ -1427,6 +1458,9 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
1427
1458
  getComponent(tooltipElem[i], 'tooltip').destroy();
1428
1459
  }
1429
1460
  if (!args.cancel) {
1461
+ if (isNullOrUndefined(this.selectedColumn)) {
1462
+ return;
1463
+ }
1430
1464
  tempRule.type = this.selectedColumn.type;
1431
1465
  if (ruleElem.querySelector('.e-template')) {
1432
1466
  rule.value = '';
@@ -1461,15 +1495,20 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
1461
1495
  tempElem.appendChild(subFieldElem);
1462
1496
  var height = (this.element.className.indexOf('e-device') > -1) ? '250px' : '200px';
1463
1497
  var subFieldData = Object.keys(this.selectedColumn.columns[0]);
1464
- var dropDownList = new DropDownList({
1498
+ var ddlField;
1499
+ ddlField = {
1465
1500
  dataSource: this.selectedColumn.columns,
1466
1501
  fields: this.fields,
1467
1502
  placeholder: this.l10n.getConstant('SelectField'),
1468
1503
  popupHeight: ((subFieldData.length > 5) ? height : 'auto'),
1469
1504
  change: this.changeField.bind(this),
1470
1505
  index: 0,
1471
- open: this.popupOpen.bind(this)
1472
- });
1506
+ open: this.popupOpen.bind(this, false)
1507
+ };
1508
+ if (this.fieldModel) {
1509
+ ddlField = __assign({}, ddlField, this.fieldModel);
1510
+ }
1511
+ var dropDownList = new DropDownList(ddlField);
1473
1512
  dropDownList.appendTo('#' + ruleId + '_subfilterkey' + this.subFilterCounter);
1474
1513
  if (this.isImportRules) {
1475
1514
  var subField = this.selectedColumn.columns;
@@ -1589,7 +1628,7 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
1589
1628
  change: this.changeField.bind(this),
1590
1629
  index: 0,
1591
1630
  value: value,
1592
- open: this.popupOpen.bind(this)
1631
+ open: this.popupOpen.bind(this, false)
1593
1632
  };
1594
1633
  if (this.operatorModel) {
1595
1634
  ddlOperator = __assign({}, ddlOperator, this.operatorModel);
@@ -1608,10 +1647,13 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
1608
1647
  this.updateRules(ddlArgs.element, ddlArgs.item);
1609
1648
  }
1610
1649
  };
1611
- QueryBuilder.prototype.popupOpen = function (args) {
1650
+ QueryBuilder.prototype.popupOpen = function (isField, args) {
1612
1651
  if (this.enableRtl) {
1613
1652
  addClass([args.popup.element], 'e-rtl');
1614
1653
  }
1654
+ if (isField) {
1655
+ this.isFieldClose = false;
1656
+ }
1615
1657
  };
1616
1658
  QueryBuilder.prototype.destroyControls = function (target, isRuleTemplate) {
1617
1659
  var element = isRuleTemplate ? target : target.nextElementSibling;
@@ -1804,7 +1846,7 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
1804
1846
  change: this.changeValue.bind(this, i),
1805
1847
  close: this.closePopup.bind(this, i),
1806
1848
  actionBegin: this.multiSelectOpen.bind(this, parentId + '_valuekey' + i),
1807
- open: this.popupOpen.bind(this)
1849
+ open: this.popupOpen.bind(this, false)
1808
1850
  };
1809
1851
  if (this.valueModel && this.valueModel.multiSelectModel) {
1810
1852
  multiSelectValue = __assign({}, multiSelectValue, this.valueModel.multiSelectModel);
@@ -1864,8 +1906,10 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
1864
1906
  };
1865
1907
  QueryBuilder.prototype.closePopup = function (i, args) {
1866
1908
  var element = document.getElementById(args.popup.element.id.replace('_popup', ''));
1867
- var value = getComponent(element, 'multiselect').value;
1868
- this.updateRules(element, value, i);
1909
+ if (element) {
1910
+ var value = getComponent(element, 'multiselect').value;
1911
+ this.updateRules(element, value, i);
1912
+ }
1869
1913
  };
1870
1914
  QueryBuilder.prototype.processTemplate = function (target, itemData, rule, tempRule) {
1871
1915
  var container = closest(target, '.e-rule-container');
@@ -2226,6 +2270,9 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
2226
2270
  return 0;
2227
2271
  };
2228
2272
  QueryBuilder.prototype.getPreviousItemData = function (prevItemData, column) {
2273
+ if (this.isFieldClose && prevItemData) {
2274
+ prevItemData = this.getColumn(prevItemData.value);
2275
+ }
2229
2276
  if (column.template && prevItemData && Object.keys(prevItemData).length < 4) {
2230
2277
  prevItemData.template = column.template;
2231
2278
  }
@@ -2718,6 +2765,7 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
2718
2765
  * @returns {void}
2719
2766
  */
2720
2767
  QueryBuilder.prototype.destroy = function () {
2768
+ this.isDestroy = true;
2721
2769
  var queryElement = this.element;
2722
2770
  if (!queryElement) {
2723
2771
  return;
@@ -2773,6 +2821,7 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
2773
2821
  this.clearQBTemplate();
2774
2822
  }
2775
2823
  classList(this.element, [], ['e-rtl', 'e-responsive', 'e-device']);
2824
+ this.isDestroy = false;
2776
2825
  };
2777
2826
  /**
2778
2827
  * Adds single or multiple rules.
@@ -3413,7 +3462,11 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
3413
3462
  }
3414
3463
  }
3415
3464
  var isTemplateRendered = clnruleElem.querySelector('.e-template-value');
3416
- detach(clnruleElem);
3465
+ try {
3466
+ detach(clnruleElem);
3467
+ }
3468
+ catch (err) {
3469
+ }
3417
3470
  if (column && column.ruleTemplate) {
3418
3471
  this.clearQBTemplate([clnruleElem.id]);
3419
3472
  }
@@ -3533,10 +3586,14 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
3533
3586
  }
3534
3587
  }
3535
3588
  if ((this.isRefreshed && this.enablePersistence) || (this.rule.field !== '' && rule.operator !== '' && (rule.value !== '' &&
3536
- rule.value !== undefined))) {
3589
+ rule.value !== undefined)) || (customObj && customObj.isQuestion)) {
3590
+ var condition = rule.condition;
3537
3591
  rule = {
3538
3592
  'label': rule.label, 'field': rule.field, 'operator': rule.operator, 'type': rule.type, 'value': rule.value
3539
3593
  };
3594
+ if (condition) {
3595
+ rule.condition = condition;
3596
+ }
3540
3597
  if (customObj) {
3541
3598
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
3542
3599
  rule.custom = customObj;
@@ -3558,6 +3615,9 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
3558
3615
  rule.not = notValue;
3559
3616
  }
3560
3617
  }
3618
+ else if ((isNullOrUndefined(rule.condition)) && isNullOrUndefined(rule.rules)) {
3619
+ rule = { 'label': '', 'field': '', 'operator': '', 'type': '', 'value': '' };
3620
+ }
3561
3621
  else {
3562
3622
  if (this.enableNotCondition) {
3563
3623
  rule = { 'condition': rule.condition, 'rules': rule.rules, 'not': rule.not };
@@ -3741,7 +3801,7 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
3741
3801
  }
3742
3802
  }
3743
3803
  }
3744
- else if (ruleColl[i].operator.length) {
3804
+ else if (!isNullOrUndefined(ruleColl[i].operator) && !isNullOrUndefined(ruleColl[i].operator.length)) {
3745
3805
  var oper = ruleColl[i].operator.toLowerCase();
3746
3806
  var isDateFilter = false;
3747
3807
  var dateOperColl = ['equal', 'notequal', 'greaterthan', 'greaterthanorequal', 'lessthan', 'lessthanorequal'];
@@ -3842,6 +3902,12 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
3842
3902
  break;
3843
3903
  }
3844
3904
  }
3905
+ else if (field.indexOf(this.separator) > -1) {
3906
+ if (columns[i].field === field.split(this.separator)[0]) {
3907
+ column = columns[i];
3908
+ break;
3909
+ }
3910
+ }
3845
3911
  }
3846
3912
  return column;
3847
3913
  };
@@ -3931,7 +3997,7 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
3931
3997
  }
3932
3998
  if (!(operator.indexOf('null') > -1 || operator.indexOf('empty') > -1)) {
3933
3999
  for (var j = 0, jLen = value.length; j < jLen; j++) {
3934
- if (value[j] !== '') {
4000
+ if (value[j] !== '' || ((operator === 'in' || operator === 'notin') && column.type === 'string')) {
3935
4001
  if (j === 0) {
3936
4002
  var gte = 'greaterthanorequal';
3937
4003
  switch (operator) {
@@ -4073,7 +4139,7 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
4073
4139
  if (!isNullOrUndefined(ruleColl)) {
4074
4140
  for (var i = 0, len = ruleColl.length; i < len; i++) {
4075
4141
  var keys = Object.keys(ruleColl[i]);
4076
- if (!isNullOrUndefined(ruleColl[i].rules) && keys.indexOf('rules') > -1) {
4142
+ if (!isNullOrUndefined(ruleColl[i].rules) && keys.indexOf('rules') > -1 && (ruleColl[i].rules.length !== 0)) {
4077
4143
  parentElem = this.renderGroup(ruleColl[i], ruleColl[i].condition, parentElem, ruleColl[i].not);
4078
4144
  parentElem = this.importRules(ruleColl[i], parentElem, true);
4079
4145
  }
@@ -4310,8 +4376,14 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
4310
4376
  }
4311
4377
  queryStr += rule.field + ' ' + this.operators[rule.operator] + ' ' + valueStr;
4312
4378
  }
4379
+ if (rule.condition && rule.condition != '') {
4380
+ condition = rule.condition;
4381
+ }
4313
4382
  }
4314
4383
  if (j !== jLen - 1) {
4384
+ if (condition === '') {
4385
+ condition = rules.rules[j].condition;
4386
+ }
4315
4387
  queryStr += ' ' + condition.toUpperCase() + ' ';
4316
4388
  }
4317
4389
  }
@@ -4445,6 +4517,12 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
4445
4517
  this.parser.push(['Literal', matchValue]);
4446
4518
  return matchValue.length + 2;
4447
4519
  }
4520
+ // eslint-disable-next-line
4521
+ if (this.checkNumberLiteral(sqlString)) {
4522
+ matchValue = /^[0-9]+(\.[0-9]+)?/.exec(sqlString)[0];
4523
+ this.parser.push(['Literal', matchValue]);
4524
+ return matchValue.length;
4525
+ }
4448
4526
  //String
4449
4527
  if (/^'((?:[^\\']+?|\\.|'')*)'(?!')/.exec(sqlString)) {
4450
4528
  matchValue = /^'((?:[^\\']+?|\\.|'')*)'(?!')/.exec(sqlString)[0];
@@ -4484,6 +4562,25 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
4484
4562
  }
4485
4563
  return false;
4486
4564
  };
4565
+ QueryBuilder.prototype.checkNumberLiteral = function (sqlString) {
4566
+ var lastParser = this.parser[this.parser.length - 1];
4567
+ if (!lastParser) {
4568
+ return true;
4569
+ }
4570
+ else {
4571
+ if (/^[0-9]+(\.[0-9]+)?/.exec(sqlString)) {
4572
+ var secParser = this.parser[this.parser.length - 2];
4573
+ var betweenParser = this.parser[this.parser.length - 3];
4574
+ if (lastParser[0] === 'Left' && (secParser && secParser[0] === 'Conditions')) {
4575
+ return true;
4576
+ }
4577
+ if (lastParser[0] === 'Conditions' && (betweenParser && betweenParser[1].indexOf('between') < 0)) {
4578
+ return true;
4579
+ }
4580
+ }
4581
+ }
4582
+ return false;
4583
+ };
4487
4584
  QueryBuilder.prototype.getOperator = function (value, operator) {
4488
4585
  var operators = {
4489
4586
  '=': 'equal', '!=': 'notequal', '<': 'lessthan', '>': 'greaterthan', '<=': 'lessthanorequal',