@syncfusion/ej2-querybuilder 19.2.60 → 19.3.53

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.
Files changed (41) hide show
  1. package/.eslintrc.json +1 -1
  2. package/CHANGELOG.md +17 -0
  3. package/dist/ej2-querybuilder.umd.min.js +2 -2
  4. package/dist/ej2-querybuilder.umd.min.js.map +1 -1
  5. package/dist/es6/ej2-querybuilder.es2015.js +176 -66
  6. package/dist/es6/ej2-querybuilder.es2015.js.map +1 -1
  7. package/dist/es6/ej2-querybuilder.es5.js +174 -64
  8. package/dist/es6/ej2-querybuilder.es5.js.map +1 -1
  9. package/dist/global/ej2-querybuilder.min.js +2 -2
  10. package/dist/global/ej2-querybuilder.min.js.map +1 -1
  11. package/dist/global/index.d.ts +1 -1
  12. package/helpers/e2e/index.d.ts +1 -0
  13. package/helpers/e2e/index.js +6 -0
  14. package/helpers/e2e/querybuilderHelper.d.ts +37 -0
  15. package/helpers/e2e/querybuilderHelper.js +36 -0
  16. package/package.json +11 -11
  17. package/src/query-builder/query-builder-model.d.ts +10 -3
  18. package/src/query-builder/query-builder.d.ts +17 -2
  19. package/src/query-builder/query-builder.js +174 -64
  20. package/styles/bootstrap5-dark.css +962 -0
  21. package/styles/bootstrap5-dark.scss +1 -0
  22. package/styles/bootstrap5.css +962 -0
  23. package/styles/bootstrap5.scss +1 -0
  24. package/styles/material-dark.css +3 -3
  25. package/styles/query-builder/_bootstrap5-dark-definition.scss +1 -0
  26. package/styles/query-builder/_bootstrap5-definition.scss +107 -0
  27. package/styles/query-builder/_tailwind-dark-definition.scss +1 -106
  28. package/styles/query-builder/_tailwind-definition.scss +17 -16
  29. package/styles/query-builder/_theme.scss +1 -1
  30. package/styles/query-builder/bootstrap5-dark.css +962 -0
  31. package/styles/query-builder/bootstrap5-dark.scss +15 -0
  32. package/styles/query-builder/bootstrap5.css +962 -0
  33. package/styles/query-builder/bootstrap5.scss +15 -0
  34. package/styles/query-builder/icons/_bootstrap5-dark.scss +1 -0
  35. package/styles/query-builder/icons/_bootstrap5.scss +8 -0
  36. package/styles/query-builder/icons/_tailwind.scss +1 -1
  37. package/styles/query-builder/material-dark.css +3 -3
  38. package/styles/query-builder/tailwind-dark.css +9 -9
  39. package/styles/query-builder/tailwind.css +10 -10
  40. package/styles/tailwind-dark.css +9 -9
  41. package/styles/tailwind.css +10 -10
@@ -36,7 +36,7 @@ import { Property, ChildProperty, Complex, L10n, closest, extend, isNullOrUndefi
36
36
  import { getInstance, addClass, removeClass, rippleEffect, detach, classList } from '@syncfusion/ej2-base';
37
37
  import { Internationalization, getUniqueID, select } from '@syncfusion/ej2-base';
38
38
  import { Button, RadioButton } from '@syncfusion/ej2-buttons';
39
- import { DropDownList, CheckBoxSelection } from '@syncfusion/ej2-dropdowns';
39
+ import { DropDownList, CheckBoxSelection, DropDownTree } from '@syncfusion/ej2-dropdowns';
40
40
  import { MultiSelect } from '@syncfusion/ej2-dropdowns';
41
41
  import { Event, EventHandler, getValue, Animation } from '@syncfusion/ej2-base';
42
42
  import { Query, Predicate, DataManager, Deferred } from '@syncfusion/ej2-data';
@@ -334,7 +334,9 @@ var QueryBuilder = /** @class */ (function (_super) {
334
334
  };
335
335
  QueryBuilder.prototype.updateSubFieldsFromColumns = function (col, field) {
336
336
  for (var i = 0; i < col.length; i++) {
337
- col[i].field = field ? field + this.separator + col[i].field : col[i].field;
337
+ if (this.separator != '' && col[i].field.indexOf(this.separator) < 0) {
338
+ col[i].field = field ? field + this.separator + col[i].field : col[i].field;
339
+ }
338
340
  if (col[i].operators) {
339
341
  this.updateCustomOperator(col[i]);
340
342
  }
@@ -659,28 +661,57 @@ var QueryBuilder = /** @class */ (function (_super) {
659
661
  this.updateAddedRule(trgt, rule, newRule, isRlTmp, pId);
660
662
  }
661
663
  if (!column || (column && !column.ruleTemplate)) {
662
- var ddlField = void 0;
663
- var ddlValue = this.isImportRules ? this.GetRootColumnName(rule.field) : rule.field;
664
- ddlField = {
665
- dataSource: this.columns,
666
- fields: this.fields, placeholder: this.l10n.getConstant('SelectField'),
667
- popupHeight: ((this.columns.length > 5) ? height : 'auto'),
668
- change: this.changeField.bind(this), value: rule ? ddlValue : null,
669
- open: this.popupOpen.bind(this)
670
- };
671
- if (this.fieldModel) {
672
- ddlField = __assign({}, ddlField, this.fieldModel);
664
+ if (this.fieldMode === 'Default') {
665
+ var ddlField = void 0;
666
+ var ddlValue = this.isImportRules ? this.GetRootColumnName(rule.field) : rule.field;
667
+ ddlField = {
668
+ dataSource: this.columns,
669
+ fields: this.fields, placeholder: this.l10n.getConstant('SelectField'),
670
+ popupHeight: ((this.columns.length > 5) ? height : 'auto'),
671
+ change: this.changeField.bind(this), value: rule ? ddlValue : null, open: this.popupOpen.bind(this)
672
+ };
673
+ if (this.fieldModel) {
674
+ ddlField = __assign({}, ddlField, this.fieldModel);
675
+ }
676
+ dropDownList = new DropDownList(ddlField);
677
+ dropDownList.appendTo('#' + ruleElem.id + '_filterkey');
678
+ var ddlVal = this.isImportRules ?
679
+ this.GetRootColumnName(rule.field) : dropDownList.value;
680
+ this.selectedColumn = dropDownList.getDataByValue(ddlVal);
681
+ if (Object.keys(rule).length) {
682
+ this.changeRule(rule, {
683
+ element: dropDownList.element, itemData: this.selectedColumn
684
+ });
685
+ }
673
686
  }
674
- dropDownList = new DropDownList(ddlField);
675
- dropDownList.appendTo('#' + ruleElem.id + '_filterkey');
676
- var ddlVal = this.isImportRules ?
677
- this.GetRootColumnName(rule.field) : dropDownList.value;
678
- this.selectedColumn = dropDownList.getDataByValue(ddlVal);
679
- if (Object.keys(rule).length) {
680
- this.changeRule(rule, {
681
- element: dropDownList.element,
682
- itemData: this.selectedColumn
683
- });
687
+ else {
688
+ var dropdowntree = void 0;
689
+ var ddlField = void 0;
690
+ var ddlValue = this.isImportRules ? rule.field : rule.field;
691
+ ddlField = {
692
+ fields: { dataSource: this.columns,
693
+ value: "field", text: "label", child: 'columns', expanded: "expanded" },
694
+ placeholder: this.l10n.getConstant('SelectField'), showClearButton: false,
695
+ popupHeight: ((this.columns.length > 5) ? height : 'auto'), changeOnBlur: false,
696
+ change: this.changeField.bind(this), value: this.isImportRules ? [ddlValue] : null,
697
+ open: this.popupOpen.bind(this)
698
+ };
699
+ if (this.fieldModel) {
700
+ ddlField = __assign({}, ddlField, this.fieldModel);
701
+ }
702
+ dropdowntree = new DropDownTree(ddlField);
703
+ dropdowntree.appendTo('#' + ruleElem.id + '_filterkey');
704
+ if (!isNullOrUndefined(dropdowntree.value)) {
705
+ dropdowntree.element.value = dropdowntree.value[0];
706
+ }
707
+ var ddlVal = this.isImportRules ?
708
+ this.GetRootColumnName(rule.field) : dropdowntree.value;
709
+ this.selectedColumn = this.getColumn(ddlVal);
710
+ if (Object.keys(rule).length) {
711
+ this.changeRule(rule, {
712
+ element: dropdowntree.element, itemData: this.selectedColumn
713
+ });
714
+ }
684
715
  }
685
716
  }
686
717
  ruleID = ruleElem.id.replace(this.element.id + '_', '');
@@ -908,7 +939,7 @@ var QueryBuilder = /** @class */ (function (_super) {
908
939
  else {
909
940
  clsName = 'e-removerule e-rule-delete e-css e-btn e-small e-button-hide';
910
941
  }
911
- var delBtnElem = this.createElement('button', { attrs: { class: clsName } });
942
+ var delBtnElem = this.createElement('button', { attrs: { type: 'button', class: clsName } });
912
943
  tempElem.appendChild(delBtnElem);
913
944
  fieldElem.appendChild(tempElem);
914
945
  ruleElem.appendChild(fieldElem);
@@ -960,7 +991,7 @@ var QueryBuilder = /** @class */ (function (_super) {
960
991
  }
961
992
  if (isGroup) {
962
993
  var clsName = this.showButtons.groupDelete ? 'e-deletegroup' : 'e-deletegroup e-button-hide';
963
- dltGroupBtn = this.createElement('button', { attrs: { class: clsName } });
994
+ dltGroupBtn = this.createElement('button', { attrs: { type: 'button', class: clsName } });
964
995
  var button = new Button({ iconCss: 'e-icons e-delete-icon', cssClass: 'e-small e-round' });
965
996
  button.appendTo(dltGroupBtn);
966
997
  dltGroupBtn.setAttribute('title', this.l10n.getConstant('DeleteGroup'));
@@ -1036,7 +1067,7 @@ var QueryBuilder = /** @class */ (function (_super) {
1036
1067
  var groupHdr = groupElem.querySelector('.e-group-header');
1037
1068
  if (this.headerTemplate) {
1038
1069
  args = { requestType: 'header-template-initialize', ruleID: groupElem.id,
1039
- notCondition: this.enableNotCondition ? not : undefined, condition: condition, rule: rule };
1070
+ notCondition: this.enableNotCondition ? not : undefined, condition: condition, rule: this.getRuleCollection(rule, true) };
1040
1071
  this.trigger('actionBegin', args);
1041
1072
  this.headerFn = this.templateParser(this.headerTemplate);
1042
1073
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
@@ -1190,12 +1221,17 @@ var QueryBuilder = /** @class */ (function (_super) {
1190
1221
  QueryBuilder.prototype.changeValue = function (i, args) {
1191
1222
  var _this = this;
1192
1223
  var element;
1193
- if (args.event) {
1224
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
1225
+ if (args.element && args.element.classList.contains('e-multiselect')) {
1226
+ var multiSelectArgs = args;
1227
+ element = multiSelectArgs.element;
1228
+ }
1229
+ else if (args.event) {
1194
1230
  element = args.event.target;
1195
1231
  }
1196
1232
  else {
1197
- var multiSelectArgs = args;
1198
- element = multiSelectArgs.element;
1233
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
1234
+ element = args.element;
1199
1235
  }
1200
1236
  if (element.className.indexOf('e-day') > -1 || element.className.indexOf('e-today') > -1 || element.className.indexOf('e-cell') > -1) {
1201
1237
  var calenderArgs = args;
@@ -1264,10 +1300,41 @@ var QueryBuilder = /** @class */ (function (_super) {
1264
1300
  QueryBuilder.prototype.changeField = function (args) {
1265
1301
  if (args.isInteracted) {
1266
1302
  var fieldElem = closest(args.element, '.e-rule-filter') || closest(args.element, '.e-rule-sub-filter');
1303
+ var column = this.fieldMode === 'DropdownTree' ? this.getColumn(args.value[0]) : this.getColumn(args.value);
1304
+ if (this.fieldMode === 'DropdownTree' && fieldElem != null) {
1305
+ var ddtElem = fieldElem.querySelector(".e-control");
1306
+ var ddt = getComponent(ddtElem, 'dropdowntree');
1307
+ if (column) {
1308
+ if (column.type == 'object') {
1309
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
1310
+ ddt.value = args.oldValue;
1311
+ ddt.dataBind();
1312
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
1313
+ if (isNullOrUndefined(args.oldValue)) {
1314
+ ddtElem.value = "";
1315
+ }
1316
+ else {
1317
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
1318
+ ddtElem.value = args.oldValue[0];
1319
+ }
1320
+ return;
1321
+ }
1322
+ else {
1323
+ if (!isNullOrUndefined(args.value[0])) {
1324
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
1325
+ ddt.value = args.value[0];
1326
+ ddt.dataBind();
1327
+ ddtElem.value = args.value[0];
1328
+ }
1329
+ }
1330
+ }
1331
+ else {
1332
+ return;
1333
+ }
1334
+ }
1267
1335
  this.destroySubFields(fieldElem);
1268
1336
  this.subFieldElem = null;
1269
1337
  this.isNotValueChange = true;
1270
- var column = this.getColumn(args.value);
1271
1338
  if (column && column.ruleTemplate) {
1272
1339
  this.templateChange(args.element, column.field, 'field');
1273
1340
  }
@@ -1286,12 +1353,23 @@ var QueryBuilder = /** @class */ (function (_super) {
1286
1353
  };
1287
1354
  QueryBuilder.prototype.changeRule = function (rule, ddlArgs) {
1288
1355
  if (!ddlArgs.itemData) {
1289
- return;
1356
+ if (this.fieldMode === "DropdownTree") {
1357
+ var ddt = getComponent(ddlArgs.element, 'dropdowntree');
1358
+ if (ddt.value == null) {
1359
+ return;
1360
+ }
1361
+ }
1362
+ else {
1363
+ return;
1364
+ }
1290
1365
  }
1291
1366
  var tempRule = {};
1292
1367
  var filterElem = closest(ddlArgs.element, '.e-rule-filter');
1293
1368
  filterElem = filterElem ? filterElem : closest(ddlArgs.element, '.e-rule-sub-filter');
1294
1369
  var ddlObj = getComponent(ddlArgs.element, 'dropdownlist');
1370
+ if (this.fieldMode === 'DropdownTree' && filterElem != null) {
1371
+ ddlObj = getComponent(ddlArgs.element, 'dropdowntree');
1372
+ }
1295
1373
  var element = closest(ddlArgs.element, '.e-group-container');
1296
1374
  var groupID = element.id.replace(this.element.id + '_', '');
1297
1375
  this.changeFilter(filterElem, ddlObj, groupID, rule, tempRule, ddlArgs);
@@ -1299,11 +1377,18 @@ var QueryBuilder = /** @class */ (function (_super) {
1299
1377
  QueryBuilder.prototype.changeFilter = function (flt, dl, grID, rl, tmpRl, dArg) {
1300
1378
  var _this = this;
1301
1379
  if (flt) {
1302
- var ddlValue = this.isImportRules ? this.GetRootColumnName(dl.value) : dl.value;
1303
- this.selectedColumn = dl.getDataByValue(ddlValue);
1380
+ var ddlValue = void 0;
1381
+ if (this.fieldMode === 'DropdownTree') {
1382
+ ddlValue = (dl.value[0]);
1383
+ }
1384
+ else {
1385
+ ddlValue = this.isImportRules ? this.GetRootColumnName(dl.value) : dl.value;
1386
+ }
1387
+ this.selectedColumn = this.getColumn(ddlValue);
1304
1388
  var ruleElem = closest(flt, '.e-rule-container');
1305
1389
  var ruleID = ruleElem.id.replace(this.element.id + '_', '');
1306
- var eventsArgs = { groupID: grID, ruleID: ruleID, selectedField: dl.value, cancel: false, type: 'field' };
1390
+ var eventsArgs = { groupID: grID, ruleID: ruleID, selectedField: this.fieldMode === 'DropdownTree' ?
1391
+ dl.value[0] : dl.value, cancel: false, type: 'field' };
1307
1392
  if (!this.isImportRules) {
1308
1393
  this.trigger('beforeChange', eventsArgs, function (observedChangeArgs) {
1309
1394
  _this.fieldChangeSuccess(observedChangeArgs, tmpRl, flt, rl, dArg);
@@ -1355,7 +1440,7 @@ var QueryBuilder = /** @class */ (function (_super) {
1355
1440
  if (ruleElem.querySelector('.e-template')) {
1356
1441
  rule.value = '';
1357
1442
  }
1358
- if (this.selectedColumn.type === 'object') {
1443
+ if (this.selectedColumn.type === 'object' && this.fieldMode === 'Default') {
1359
1444
  tempRule.type = this.selectedColumn.columns[0].type;
1360
1445
  while (this.selectedColumn.columns) {
1361
1446
  this.createSubFields(filterElem, rule, tempRule, ddlArgs);
@@ -1478,9 +1563,16 @@ var QueryBuilder = /** @class */ (function (_super) {
1478
1563
  addClass([operatorElem], 'e-operator');
1479
1564
  if (operatorElem.childElementCount) {
1480
1565
  ddlObj = getComponent(operatorElem.querySelector('.e-dropdownlist'), 'dropdownlist');
1481
- var fieldObj = getComponent(filterElem.querySelector('.e-dropdownlist'), 'dropdownlist');
1482
1566
  tempRule.operator = ddlObj.value;
1483
- tempRule.type = this.getColumn(fieldObj.value).type;
1567
+ var fieldObj = void 0;
1568
+ if (this.fieldMode === 'DropdownTree') {
1569
+ fieldObj = getComponent(filterElem.querySelector('.e-dropdowntree'), 'dropdowntree');
1570
+ }
1571
+ else {
1572
+ fieldObj = getComponent(filterElem.querySelector('.e-dropdownlist'), 'dropdownlist');
1573
+ }
1574
+ tempRule.type = this.fieldMode === 'DropdownTree' ? this.getColumn(fieldObj.value[0]).type :
1575
+ this.getColumn(fieldObj.value).type;
1484
1576
  var itemData = ddlArgs.itemData;
1485
1577
  this.renderValues(operatorElem, itemData, ddlArgs.previousItemData, true, rule, tempRule, ddlArgs.element);
1486
1578
  }
@@ -1787,8 +1879,10 @@ var QueryBuilder = /** @class */ (function (_super) {
1787
1879
  QueryBuilder.prototype.processTemplate = function (target, itemData, rule, tempRule) {
1788
1880
  var container = closest(target, '.e-rule-container');
1789
1881
  var tempElements = container.querySelectorAll('.e-template');
1790
- var ddlObj = getComponent(container.querySelector('.e-rule-filter .e-filter-input'), 'dropdownlist');
1791
- var column = this.getColumn(ddlObj.value);
1882
+ var filterElem = container.querySelector('.e-rule-filter .e-filter-input');
1883
+ var ddlObj = this.fieldMode === 'DropdownTree' ? getComponent(filterElem, 'dropdowntree')
1884
+ : getComponent(container.querySelector('.e-rule-filter .e-filter-input'), 'dropdownlist');
1885
+ var column = this.fieldMode === 'DropdownTree' ? this.getColumn(ddlObj.value[0]) : this.getColumn(ddlObj.value);
1792
1886
  if (typeof itemData.template === 'string' || itemData.template.write === undefined) {
1793
1887
  var args = { rule: rule, ruleID: container.id, operator: tempRule.operator, field: column.field,
1794
1888
  requestType: 'value-template-create' };
@@ -1808,7 +1902,10 @@ var QueryBuilder = /** @class */ (function (_super) {
1808
1902
  };
1809
1903
  QueryBuilder.prototype.getItemData = function (parentId) {
1810
1904
  var fieldObj = getComponent(document.getElementById(parentId + '_filterkey'), 'dropdownlist');
1811
- return this.getColumn(fieldObj.value);
1905
+ if (this.fieldMode === "DropdownTree") {
1906
+ fieldObj = getComponent(document.getElementById(parentId + '_filterkey'), 'dropdowntree');
1907
+ }
1908
+ return this.fieldMode === "DropdownTree" ? this.getColumn(fieldObj.value[0]) : this.getColumn(fieldObj.value);
1812
1909
  };
1813
1910
  QueryBuilder.prototype.setDefaultValue = function (parentId, isArryValue, isNumber) {
1814
1911
  var itemData = this.getItemData(parentId);
@@ -1900,8 +1997,7 @@ var QueryBuilder = /** @class */ (function (_super) {
1900
1997
  input.dataBind();
1901
1998
  }
1902
1999
  else {
1903
- var fieldObj = getComponent(document.getElementById(parentId + '_filterkey'), 'dropdownlist');
1904
- itemData = this.getColumn(fieldObj.value);
2000
+ itemData = columnData;
1905
2001
  var min = (itemData.validation && itemData.validation.min) ? itemData.validation.min : 0;
1906
2002
  var max = (itemData.validation && itemData.validation.max) ? itemData.validation.max : Number.MAX_VALUE;
1907
2003
  var format = itemData.format ? itemData.format : 'n';
@@ -2147,10 +2243,11 @@ var QueryBuilder = /** @class */ (function (_super) {
2147
2243
  QueryBuilder.prototype.renderValues = function (target, itemData, prevItemData, isRender, rule, tempRule, element) {
2148
2244
  var subFldElem = target.previousElementSibling;
2149
2245
  var filtElem = subFldElem.getElementsByTagName('input')[0];
2150
- var filtObj = getComponent(filtElem, 'dropdownlist');
2151
- var column = this.getColumn(filtObj.value);
2152
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
2153
- this.selectedRule = filtObj.itemData;
2246
+ var filtObj = this.fieldMode === 'DropdownTree' ? getComponent(filtElem, 'dropdowntree')
2247
+ : getComponent(filtElem, 'dropdownlist');
2248
+ var column = this.fieldMode === 'DropdownTree' ? this.getColumn(filtObj.value[0])
2249
+ : this.getColumn(filtObj.value);
2250
+ this.selectedRule = column;
2154
2251
  if (isRender) {
2155
2252
  var ddlObj = getComponent(target.querySelector('input'), 'dropdownlist');
2156
2253
  itemData = element.id.indexOf('operator') > -1 ? itemData : this.selectedRule;
@@ -2391,15 +2488,17 @@ var QueryBuilder = /** @class */ (function (_super) {
2391
2488
  if (this.subFieldElem) {
2392
2489
  target = this.subFieldElem;
2393
2490
  }
2394
- dropDownObj = getComponent(target, 'dropdownlist');
2395
- var column = this.getColumn(dropDownObj.value);
2491
+ dropDownObj = this.fieldMode === 'DropdownTree' ? getComponent(target, 'dropdowntree') :
2492
+ getComponent(target, 'dropdownlist');
2493
+ var column = this.fieldMode === 'DropdownTree' ? this.getColumn(dropDownObj.value[0])
2494
+ : this.getColumn(dropDownObj.value);
2396
2495
  if (!this.isImportRules && rule.rules[index].field && rule.rules[index].field.toLowerCase() !== column.field.toLowerCase()) {
2397
2496
  if (!(ruleElem.querySelectorAll('.e-template')) && !(operator.indexOf('null') > -1)
2398
2497
  || (operator.indexOf('empty') > -1)) {
2399
2498
  rule.rules[index].value = '';
2400
2499
  }
2401
2500
  }
2402
- this.selectedColumn = dropDownObj.getDataByValue(dropDownObj.value);
2501
+ this.selectedColumn = this.getColumn(this.selectedColumn.field);
2403
2502
  rule.rules[index].field = this.selectedColumn.field;
2404
2503
  rule.rules[index].type = this.selectedColumn.type;
2405
2504
  rule.rules[index].label = this.selectedColumn.label;
@@ -2532,8 +2631,7 @@ var QueryBuilder = /** @class */ (function (_super) {
2532
2631
  }
2533
2632
  }
2534
2633
  else if (target.className.indexOf('e-datepicker') > -1) {
2535
- var ddlInst = getInstance(ruleElem.querySelector('.e-rule-filter input'), DropDownList);
2536
- var format = this.getFormat(this.getColumn(ddlInst.value).format);
2634
+ var format = this.getFormat(this.getColumn(this.selectedColumn.field).format);
2537
2635
  if (format.type) {
2538
2636
  if (arrOperator.indexOf(oper) > -1) {
2539
2637
  if (typeof rule.rules[index].value === 'string') {
@@ -2651,7 +2749,12 @@ var QueryBuilder = /** @class */ (function (_super) {
2651
2749
  element = this.element.querySelectorAll('.e-rule-filter .e-control:not(.e-tooltip)');
2652
2750
  len = element.length;
2653
2751
  for (i = 0; i < len; i++) {
2654
- getComponent(element[i], 'dropdownlist').destroy();
2752
+ if (getComponent(element[i], 'dropdownlist')) {
2753
+ getComponent(element[i], 'dropdownlist').destroy();
2754
+ }
2755
+ else {
2756
+ getComponent(element[i], 'dropdowntree').destroy();
2757
+ }
2655
2758
  detach(element[i]);
2656
2759
  }
2657
2760
  tooltip = this.element.querySelectorAll('.e-rule-operator .e-control.e-tooltip');
@@ -2661,8 +2764,10 @@ var QueryBuilder = /** @class */ (function (_super) {
2661
2764
  element = this.element.querySelectorAll('.e-rule-operator .e-control:not(.e-tooltip)');
2662
2765
  len = element.length;
2663
2766
  for (i = 0; i < len; i++) {
2664
- getComponent(element[i], 'dropdownlist').destroy();
2665
- detach(element[i]);
2767
+ if (getComponent(element[i], 'dropdownlist')) {
2768
+ getComponent(element[i], 'dropdownlist').destroy();
2769
+ detach(element[i]);
2770
+ }
2666
2771
  }
2667
2772
  tooltip = this.element.querySelectorAll('.e-rule-value .e-control.e-tooltip');
2668
2773
  for (i = 0; i < tooltip.length; i++) {
@@ -2804,7 +2909,7 @@ var QueryBuilder = /** @class */ (function (_super) {
2804
2909
  }
2805
2910
  });
2806
2911
  var textElem = this.createElement('textarea', { attrs: { class: 'e-summary-text', readonly: 'true' }, styles: 'max-height:500px' });
2807
- var editElem = this.createElement('button', { attrs: { class: 'e-edit-rule e-css e-btn e-small e-flat e-primary' } });
2912
+ var editElem = this.createElement('button', { attrs: { type: 'button', class: 'e-edit-rule e-css e-btn e-small e-flat e-primary' } });
2808
2913
  var divElem = this.createElement('div', { attrs: { class: 'e-summary-btndiv' } });
2809
2914
  contentElem.appendChild(textElem);
2810
2915
  textElem.textContent = this.getSqlFromRules(this.rule);
@@ -3410,6 +3515,9 @@ var QueryBuilder = /** @class */ (function (_super) {
3410
3515
  return rule;
3411
3516
  };
3412
3517
  QueryBuilder.prototype.getRuleCollection = function (rule, isValidRule) {
3518
+ if (isNullOrUndefined(rule)) {
3519
+ return null;
3520
+ }
3413
3521
  var orgRule;
3414
3522
  if (rule.rules && rule.rules.length && (Object.keys(rule.rules[0]).length > 6 || isValidRule)) {
3415
3523
  var jLen = rule.rules.length;
@@ -4413,14 +4521,8 @@ var QueryBuilder = /** @class */ (function (_super) {
4413
4521
  return operators[operator];
4414
4522
  };
4415
4523
  QueryBuilder.prototype.getTypeFromColumn = function (rules) {
4416
- var columnData = this.columns;
4417
- for (var i = 0; i < columnData.length; i++) {
4418
- if (columnData[i].field === rules.field) {
4419
- rules.type = columnData[i].type;
4420
- break;
4421
- }
4422
- }
4423
- return rules.type;
4524
+ var columnData = this.getColumn(rules.field);
4525
+ return columnData.type;
4424
4526
  };
4425
4527
  QueryBuilder.prototype.processParser = function (parser, rules, levelColl) {
4426
4528
  var j;
@@ -4435,6 +4537,7 @@ var QueryBuilder = /** @class */ (function (_super) {
4435
4537
  var lLen;
4436
4538
  var grpCount;
4437
4539
  var operator;
4540
+ var isLeftOpened = false;
4438
4541
  for (var i = 0, iLen = parser.length; i < iLen; i++) {
4439
4542
  if (parser[i][0] === 'Literal') {
4440
4543
  rule = { label: parser[i][1], field: parser[i][1] };
@@ -4453,8 +4556,12 @@ var QueryBuilder = /** @class */ (function (_super) {
4453
4556
  j = i + 1;
4454
4557
  jLen = iLen;
4455
4558
  for (j = i + 1; j < jLen; j++) {
4456
- if (parser[j][0] === 'Right') {
4559
+ if (operator.indexOf('between') < 0 && parser[j][0] === 'Left') {
4560
+ isLeftOpened = true;
4561
+ }
4562
+ else if (parser[j][0] === 'Right' && isLeftOpened) {
4457
4563
  i = j;
4564
+ isLeftOpened = false;
4458
4565
  break;
4459
4566
  }
4460
4567
  else {
@@ -4591,6 +4698,9 @@ var QueryBuilder = /** @class */ (function (_super) {
4591
4698
  __decorate([
4592
4699
  Property(false)
4593
4700
  ], QueryBuilder.prototype, "allowValidation", void 0);
4701
+ __decorate([
4702
+ Property('Default')
4703
+ ], QueryBuilder.prototype, "fieldMode", void 0);
4594
4704
  __decorate([
4595
4705
  Property([])
4596
4706
  ], QueryBuilder.prototype, "columns", void 0);