@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
@@ -1,6 +1,6 @@
1
1
  import { Animation, Browser, ChildProperty, Collection, Complex, Component, Event, EventHandler, Internationalization, L10n, NotifyPropertyChanges, Property, addClass, classList, cldrData, closest, compile, detach, extend, getComponent, getInstance, getUniqueID, getValue, isNullOrUndefined, removeClass, rippleEffect, select } from '@syncfusion/ej2-base';
2
2
  import { Button, RadioButton } from '@syncfusion/ej2-buttons';
3
- import { CheckBoxSelection, DropDownList, MultiSelect } from '@syncfusion/ej2-dropdowns';
3
+ import { CheckBoxSelection, DropDownList, DropDownTree, MultiSelect } from '@syncfusion/ej2-dropdowns';
4
4
  import { DataManager, Deferred, Predicate, Query } from '@syncfusion/ej2-data';
5
5
  import { NumericTextBox, TextBox } from '@syncfusion/ej2-inputs';
6
6
  import { DatePicker } from '@syncfusion/ej2-calendars';
@@ -325,7 +325,9 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
325
325
  };
326
326
  QueryBuilder.prototype.updateSubFieldsFromColumns = function (col, field) {
327
327
  for (var i = 0; i < col.length; i++) {
328
- col[i].field = field ? field + this.separator + col[i].field : col[i].field;
328
+ if (this.separator != '' && col[i].field.indexOf(this.separator) < 0) {
329
+ col[i].field = field ? field + this.separator + col[i].field : col[i].field;
330
+ }
329
331
  if (col[i].operators) {
330
332
  this.updateCustomOperator(col[i]);
331
333
  }
@@ -650,28 +652,57 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
650
652
  this.updateAddedRule(trgt, rule, newRule, isRlTmp, pId);
651
653
  }
652
654
  if (!column || (column && !column.ruleTemplate)) {
653
- var ddlField = void 0;
654
- var ddlValue = this.isImportRules ? this.GetRootColumnName(rule.field) : rule.field;
655
- ddlField = {
656
- dataSource: this.columns,
657
- fields: this.fields, placeholder: this.l10n.getConstant('SelectField'),
658
- popupHeight: ((this.columns.length > 5) ? height : 'auto'),
659
- change: this.changeField.bind(this), value: rule ? ddlValue : null,
660
- open: this.popupOpen.bind(this)
661
- };
662
- if (this.fieldModel) {
663
- ddlField = __assign({}, ddlField, this.fieldModel);
655
+ if (this.fieldMode === 'Default') {
656
+ var ddlField = void 0;
657
+ var ddlValue = this.isImportRules ? this.GetRootColumnName(rule.field) : rule.field;
658
+ ddlField = {
659
+ dataSource: this.columns,
660
+ 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)
663
+ };
664
+ if (this.fieldModel) {
665
+ ddlField = __assign({}, ddlField, this.fieldModel);
666
+ }
667
+ dropDownList = new DropDownList(ddlField);
668
+ dropDownList.appendTo('#' + ruleElem.id + '_filterkey');
669
+ var ddlVal = this.isImportRules ?
670
+ this.GetRootColumnName(rule.field) : dropDownList.value;
671
+ this.selectedColumn = dropDownList.getDataByValue(ddlVal);
672
+ if (Object.keys(rule).length) {
673
+ this.changeRule(rule, {
674
+ element: dropDownList.element, itemData: this.selectedColumn
675
+ });
676
+ }
664
677
  }
665
- dropDownList = new DropDownList(ddlField);
666
- dropDownList.appendTo('#' + ruleElem.id + '_filterkey');
667
- var ddlVal = this.isImportRules ?
668
- this.GetRootColumnName(rule.field) : dropDownList.value;
669
- this.selectedColumn = dropDownList.getDataByValue(ddlVal);
670
- if (Object.keys(rule).length) {
671
- this.changeRule(rule, {
672
- element: dropDownList.element,
673
- itemData: this.selectedColumn
674
- });
678
+ else {
679
+ var dropdowntree = void 0;
680
+ var ddlField = void 0;
681
+ var ddlValue = this.isImportRules ? rule.field : rule.field;
682
+ ddlField = {
683
+ fields: { dataSource: this.columns,
684
+ value: "field", text: "label", child: 'columns', expanded: "expanded" },
685
+ placeholder: this.l10n.getConstant('SelectField'), showClearButton: false,
686
+ popupHeight: ((this.columns.length > 5) ? height : 'auto'), changeOnBlur: false,
687
+ change: this.changeField.bind(this), value: this.isImportRules ? [ddlValue] : null,
688
+ open: this.popupOpen.bind(this)
689
+ };
690
+ if (this.fieldModel) {
691
+ ddlField = __assign({}, ddlField, this.fieldModel);
692
+ }
693
+ dropdowntree = new DropDownTree(ddlField);
694
+ dropdowntree.appendTo('#' + ruleElem.id + '_filterkey');
695
+ if (!isNullOrUndefined(dropdowntree.value)) {
696
+ dropdowntree.element.value = dropdowntree.value[0];
697
+ }
698
+ var ddlVal = this.isImportRules ?
699
+ this.GetRootColumnName(rule.field) : dropdowntree.value;
700
+ this.selectedColumn = this.getColumn(ddlVal);
701
+ if (Object.keys(rule).length) {
702
+ this.changeRule(rule, {
703
+ element: dropdowntree.element, itemData: this.selectedColumn
704
+ });
705
+ }
675
706
  }
676
707
  }
677
708
  ruleID = ruleElem.id.replace(this.element.id + '_', '');
@@ -899,7 +930,7 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
899
930
  else {
900
931
  clsName = 'e-removerule e-rule-delete e-css e-btn e-small e-button-hide';
901
932
  }
902
- var delBtnElem = this.createElement('button', { attrs: { class: clsName } });
933
+ var delBtnElem = this.createElement('button', { attrs: { type: 'button', class: clsName } });
903
934
  tempElem.appendChild(delBtnElem);
904
935
  fieldElem.appendChild(tempElem);
905
936
  ruleElem.appendChild(fieldElem);
@@ -951,7 +982,7 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
951
982
  }
952
983
  if (isGroup) {
953
984
  var clsName = this.showButtons.groupDelete ? 'e-deletegroup' : 'e-deletegroup e-button-hide';
954
- dltGroupBtn = this.createElement('button', { attrs: { class: clsName } });
985
+ dltGroupBtn = this.createElement('button', { attrs: { type: 'button', class: clsName } });
955
986
  var button = new Button({ iconCss: 'e-icons e-delete-icon', cssClass: 'e-small e-round' });
956
987
  button.appendTo(dltGroupBtn);
957
988
  dltGroupBtn.setAttribute('title', this.l10n.getConstant('DeleteGroup'));
@@ -1027,7 +1058,7 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
1027
1058
  var groupHdr = groupElem.querySelector('.e-group-header');
1028
1059
  if (this.headerTemplate) {
1029
1060
  args = { requestType: 'header-template-initialize', ruleID: groupElem.id,
1030
- notCondition: this.enableNotCondition ? not : undefined, condition: condition, rule: rule };
1061
+ notCondition: this.enableNotCondition ? not : undefined, condition: condition, rule: this.getRuleCollection(rule, true) };
1031
1062
  this.trigger('actionBegin', args);
1032
1063
  this.headerFn = this.templateParser(this.headerTemplate);
1033
1064
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
@@ -1181,12 +1212,17 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
1181
1212
  QueryBuilder.prototype.changeValue = function (i, args) {
1182
1213
  var _this = this;
1183
1214
  var element;
1184
- if (args.event) {
1215
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
1216
+ if (args.element && args.element.classList.contains('e-multiselect')) {
1217
+ var multiSelectArgs = args;
1218
+ element = multiSelectArgs.element;
1219
+ }
1220
+ else if (args.event) {
1185
1221
  element = args.event.target;
1186
1222
  }
1187
1223
  else {
1188
- var multiSelectArgs = args;
1189
- element = multiSelectArgs.element;
1224
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
1225
+ element = args.element;
1190
1226
  }
1191
1227
  if (element.className.indexOf('e-day') > -1 || element.className.indexOf('e-today') > -1 || element.className.indexOf('e-cell') > -1) {
1192
1228
  var calenderArgs = args;
@@ -1255,10 +1291,41 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
1255
1291
  QueryBuilder.prototype.changeField = function (args) {
1256
1292
  if (args.isInteracted) {
1257
1293
  var fieldElem = closest(args.element, '.e-rule-filter') || closest(args.element, '.e-rule-sub-filter');
1294
+ var column = this.fieldMode === 'DropdownTree' ? this.getColumn(args.value[0]) : this.getColumn(args.value);
1295
+ if (this.fieldMode === 'DropdownTree' && fieldElem != null) {
1296
+ var ddtElem = fieldElem.querySelector(".e-control");
1297
+ var ddt = getComponent(ddtElem, 'dropdowntree');
1298
+ if (column) {
1299
+ if (column.type == 'object') {
1300
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
1301
+ ddt.value = args.oldValue;
1302
+ ddt.dataBind();
1303
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
1304
+ if (isNullOrUndefined(args.oldValue)) {
1305
+ ddtElem.value = "";
1306
+ }
1307
+ else {
1308
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
1309
+ ddtElem.value = args.oldValue[0];
1310
+ }
1311
+ return;
1312
+ }
1313
+ else {
1314
+ if (!isNullOrUndefined(args.value[0])) {
1315
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
1316
+ ddt.value = args.value[0];
1317
+ ddt.dataBind();
1318
+ ddtElem.value = args.value[0];
1319
+ }
1320
+ }
1321
+ }
1322
+ else {
1323
+ return;
1324
+ }
1325
+ }
1258
1326
  this.destroySubFields(fieldElem);
1259
1327
  this.subFieldElem = null;
1260
1328
  this.isNotValueChange = true;
1261
- var column = this.getColumn(args.value);
1262
1329
  if (column && column.ruleTemplate) {
1263
1330
  this.templateChange(args.element, column.field, 'field');
1264
1331
  }
@@ -1277,12 +1344,23 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
1277
1344
  };
1278
1345
  QueryBuilder.prototype.changeRule = function (rule, ddlArgs) {
1279
1346
  if (!ddlArgs.itemData) {
1280
- return;
1347
+ if (this.fieldMode === "DropdownTree") {
1348
+ var ddt = getComponent(ddlArgs.element, 'dropdowntree');
1349
+ if (ddt.value == null) {
1350
+ return;
1351
+ }
1352
+ }
1353
+ else {
1354
+ return;
1355
+ }
1281
1356
  }
1282
1357
  var tempRule = {};
1283
1358
  var filterElem = closest(ddlArgs.element, '.e-rule-filter');
1284
1359
  filterElem = filterElem ? filterElem : closest(ddlArgs.element, '.e-rule-sub-filter');
1285
1360
  var ddlObj = getComponent(ddlArgs.element, 'dropdownlist');
1361
+ if (this.fieldMode === 'DropdownTree' && filterElem != null) {
1362
+ ddlObj = getComponent(ddlArgs.element, 'dropdowntree');
1363
+ }
1286
1364
  var element = closest(ddlArgs.element, '.e-group-container');
1287
1365
  var groupID = element.id.replace(this.element.id + '_', '');
1288
1366
  this.changeFilter(filterElem, ddlObj, groupID, rule, tempRule, ddlArgs);
@@ -1290,11 +1368,18 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
1290
1368
  QueryBuilder.prototype.changeFilter = function (flt, dl, grID, rl, tmpRl, dArg) {
1291
1369
  var _this = this;
1292
1370
  if (flt) {
1293
- var ddlValue = this.isImportRules ? this.GetRootColumnName(dl.value) : dl.value;
1294
- this.selectedColumn = dl.getDataByValue(ddlValue);
1371
+ var ddlValue = void 0;
1372
+ if (this.fieldMode === 'DropdownTree') {
1373
+ ddlValue = (dl.value[0]);
1374
+ }
1375
+ else {
1376
+ ddlValue = this.isImportRules ? this.GetRootColumnName(dl.value) : dl.value;
1377
+ }
1378
+ this.selectedColumn = this.getColumn(ddlValue);
1295
1379
  var ruleElem = closest(flt, '.e-rule-container');
1296
1380
  var ruleID = ruleElem.id.replace(this.element.id + '_', '');
1297
- var eventsArgs = { groupID: grID, ruleID: ruleID, selectedField: dl.value, cancel: false, type: 'field' };
1381
+ var eventsArgs = { groupID: grID, ruleID: ruleID, selectedField: this.fieldMode === 'DropdownTree' ?
1382
+ dl.value[0] : dl.value, cancel: false, type: 'field' };
1298
1383
  if (!this.isImportRules) {
1299
1384
  this.trigger('beforeChange', eventsArgs, function (observedChangeArgs) {
1300
1385
  _this.fieldChangeSuccess(observedChangeArgs, tmpRl, flt, rl, dArg);
@@ -1346,7 +1431,7 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
1346
1431
  if (ruleElem.querySelector('.e-template')) {
1347
1432
  rule.value = '';
1348
1433
  }
1349
- if (this.selectedColumn.type === 'object') {
1434
+ if (this.selectedColumn.type === 'object' && this.fieldMode === 'Default') {
1350
1435
  tempRule.type = this.selectedColumn.columns[0].type;
1351
1436
  while (this.selectedColumn.columns) {
1352
1437
  this.createSubFields(filterElem, rule, tempRule, ddlArgs);
@@ -1469,9 +1554,16 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
1469
1554
  addClass([operatorElem], 'e-operator');
1470
1555
  if (operatorElem.childElementCount) {
1471
1556
  ddlObj = getComponent(operatorElem.querySelector('.e-dropdownlist'), 'dropdownlist');
1472
- var fieldObj = getComponent(filterElem.querySelector('.e-dropdownlist'), 'dropdownlist');
1473
1557
  tempRule.operator = ddlObj.value;
1474
- tempRule.type = this.getColumn(fieldObj.value).type;
1558
+ var fieldObj = void 0;
1559
+ if (this.fieldMode === 'DropdownTree') {
1560
+ fieldObj = getComponent(filterElem.querySelector('.e-dropdowntree'), 'dropdowntree');
1561
+ }
1562
+ else {
1563
+ fieldObj = getComponent(filterElem.querySelector('.e-dropdownlist'), 'dropdownlist');
1564
+ }
1565
+ tempRule.type = this.fieldMode === 'DropdownTree' ? this.getColumn(fieldObj.value[0]).type :
1566
+ this.getColumn(fieldObj.value).type;
1475
1567
  var itemData = ddlArgs.itemData;
1476
1568
  this.renderValues(operatorElem, itemData, ddlArgs.previousItemData, true, rule, tempRule, ddlArgs.element);
1477
1569
  }
@@ -1778,8 +1870,10 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
1778
1870
  QueryBuilder.prototype.processTemplate = function (target, itemData, rule, tempRule) {
1779
1871
  var container = closest(target, '.e-rule-container');
1780
1872
  var tempElements = container.querySelectorAll('.e-template');
1781
- var ddlObj = getComponent(container.querySelector('.e-rule-filter .e-filter-input'), 'dropdownlist');
1782
- var column = this.getColumn(ddlObj.value);
1873
+ var filterElem = container.querySelector('.e-rule-filter .e-filter-input');
1874
+ var ddlObj = this.fieldMode === 'DropdownTree' ? getComponent(filterElem, 'dropdowntree')
1875
+ : getComponent(container.querySelector('.e-rule-filter .e-filter-input'), 'dropdownlist');
1876
+ var column = this.fieldMode === 'DropdownTree' ? this.getColumn(ddlObj.value[0]) : this.getColumn(ddlObj.value);
1783
1877
  if (typeof itemData.template === 'string' || itemData.template.write === undefined) {
1784
1878
  var args = { rule: rule, ruleID: container.id, operator: tempRule.operator, field: column.field,
1785
1879
  requestType: 'value-template-create' };
@@ -1799,7 +1893,10 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
1799
1893
  };
1800
1894
  QueryBuilder.prototype.getItemData = function (parentId) {
1801
1895
  var fieldObj = getComponent(document.getElementById(parentId + '_filterkey'), 'dropdownlist');
1802
- return this.getColumn(fieldObj.value);
1896
+ if (this.fieldMode === "DropdownTree") {
1897
+ fieldObj = getComponent(document.getElementById(parentId + '_filterkey'), 'dropdowntree');
1898
+ }
1899
+ return this.fieldMode === "DropdownTree" ? this.getColumn(fieldObj.value[0]) : this.getColumn(fieldObj.value);
1803
1900
  };
1804
1901
  QueryBuilder.prototype.setDefaultValue = function (parentId, isArryValue, isNumber) {
1805
1902
  var itemData = this.getItemData(parentId);
@@ -1891,8 +1988,7 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
1891
1988
  input.dataBind();
1892
1989
  }
1893
1990
  else {
1894
- var fieldObj = getComponent(document.getElementById(parentId + '_filterkey'), 'dropdownlist');
1895
- itemData = this.getColumn(fieldObj.value);
1991
+ itemData = columnData;
1896
1992
  var min = (itemData.validation && itemData.validation.min) ? itemData.validation.min : 0;
1897
1993
  var max = (itemData.validation && itemData.validation.max) ? itemData.validation.max : Number.MAX_VALUE;
1898
1994
  var format = itemData.format ? itemData.format : 'n';
@@ -2138,10 +2234,11 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
2138
2234
  QueryBuilder.prototype.renderValues = function (target, itemData, prevItemData, isRender, rule, tempRule, element) {
2139
2235
  var subFldElem = target.previousElementSibling;
2140
2236
  var filtElem = subFldElem.getElementsByTagName('input')[0];
2141
- var filtObj = getComponent(filtElem, 'dropdownlist');
2142
- var column = this.getColumn(filtObj.value);
2143
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
2144
- this.selectedRule = filtObj.itemData;
2237
+ var filtObj = this.fieldMode === 'DropdownTree' ? getComponent(filtElem, 'dropdowntree')
2238
+ : getComponent(filtElem, 'dropdownlist');
2239
+ var column = this.fieldMode === 'DropdownTree' ? this.getColumn(filtObj.value[0])
2240
+ : this.getColumn(filtObj.value);
2241
+ this.selectedRule = column;
2145
2242
  if (isRender) {
2146
2243
  var ddlObj = getComponent(target.querySelector('input'), 'dropdownlist');
2147
2244
  itemData = element.id.indexOf('operator') > -1 ? itemData : this.selectedRule;
@@ -2382,15 +2479,17 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
2382
2479
  if (this.subFieldElem) {
2383
2480
  target = this.subFieldElem;
2384
2481
  }
2385
- dropDownObj = getComponent(target, 'dropdownlist');
2386
- var column = this.getColumn(dropDownObj.value);
2482
+ dropDownObj = this.fieldMode === 'DropdownTree' ? getComponent(target, 'dropdowntree') :
2483
+ getComponent(target, 'dropdownlist');
2484
+ var column = this.fieldMode === 'DropdownTree' ? this.getColumn(dropDownObj.value[0])
2485
+ : this.getColumn(dropDownObj.value);
2387
2486
  if (!this.isImportRules && rule.rules[index].field && rule.rules[index].field.toLowerCase() !== column.field.toLowerCase()) {
2388
2487
  if (!(ruleElem.querySelectorAll('.e-template')) && !(operator.indexOf('null') > -1)
2389
2488
  || (operator.indexOf('empty') > -1)) {
2390
2489
  rule.rules[index].value = '';
2391
2490
  }
2392
2491
  }
2393
- this.selectedColumn = dropDownObj.getDataByValue(dropDownObj.value);
2492
+ this.selectedColumn = this.getColumn(this.selectedColumn.field);
2394
2493
  rule.rules[index].field = this.selectedColumn.field;
2395
2494
  rule.rules[index].type = this.selectedColumn.type;
2396
2495
  rule.rules[index].label = this.selectedColumn.label;
@@ -2523,8 +2622,7 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
2523
2622
  }
2524
2623
  }
2525
2624
  else if (target.className.indexOf('e-datepicker') > -1) {
2526
- var ddlInst = getInstance(ruleElem.querySelector('.e-rule-filter input'), DropDownList);
2527
- var format = this.getFormat(this.getColumn(ddlInst.value).format);
2625
+ var format = this.getFormat(this.getColumn(this.selectedColumn.field).format);
2528
2626
  if (format.type) {
2529
2627
  if (arrOperator.indexOf(oper) > -1) {
2530
2628
  if (typeof rule.rules[index].value === 'string') {
@@ -2642,7 +2740,12 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
2642
2740
  element = this.element.querySelectorAll('.e-rule-filter .e-control:not(.e-tooltip)');
2643
2741
  len = element.length;
2644
2742
  for (i = 0; i < len; i++) {
2645
- getComponent(element[i], 'dropdownlist').destroy();
2743
+ if (getComponent(element[i], 'dropdownlist')) {
2744
+ getComponent(element[i], 'dropdownlist').destroy();
2745
+ }
2746
+ else {
2747
+ getComponent(element[i], 'dropdowntree').destroy();
2748
+ }
2646
2749
  detach(element[i]);
2647
2750
  }
2648
2751
  tooltip = this.element.querySelectorAll('.e-rule-operator .e-control.e-tooltip');
@@ -2652,8 +2755,10 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
2652
2755
  element = this.element.querySelectorAll('.e-rule-operator .e-control:not(.e-tooltip)');
2653
2756
  len = element.length;
2654
2757
  for (i = 0; i < len; i++) {
2655
- getComponent(element[i], 'dropdownlist').destroy();
2656
- detach(element[i]);
2758
+ if (getComponent(element[i], 'dropdownlist')) {
2759
+ getComponent(element[i], 'dropdownlist').destroy();
2760
+ detach(element[i]);
2761
+ }
2657
2762
  }
2658
2763
  tooltip = this.element.querySelectorAll('.e-rule-value .e-control.e-tooltip');
2659
2764
  for (i = 0; i < tooltip.length; i++) {
@@ -2795,7 +2900,7 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
2795
2900
  }
2796
2901
  });
2797
2902
  var textElem = this.createElement('textarea', { attrs: { class: 'e-summary-text', readonly: 'true' }, styles: 'max-height:500px' });
2798
- var editElem = this.createElement('button', { attrs: { class: 'e-edit-rule e-css e-btn e-small e-flat e-primary' } });
2903
+ var editElem = this.createElement('button', { attrs: { type: 'button', class: 'e-edit-rule e-css e-btn e-small e-flat e-primary' } });
2799
2904
  var divElem = this.createElement('div', { attrs: { class: 'e-summary-btndiv' } });
2800
2905
  contentElem.appendChild(textElem);
2801
2906
  textElem.textContent = this.getSqlFromRules(this.rule);
@@ -3401,6 +3506,9 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
3401
3506
  return rule;
3402
3507
  };
3403
3508
  QueryBuilder.prototype.getRuleCollection = function (rule, isValidRule) {
3509
+ if (isNullOrUndefined(rule)) {
3510
+ return null;
3511
+ }
3404
3512
  var orgRule;
3405
3513
  if (rule.rules && rule.rules.length && (Object.keys(rule.rules[0]).length > 6 || isValidRule)) {
3406
3514
  var jLen = rule.rules.length;
@@ -4404,14 +4512,8 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
4404
4512
  return operators[operator];
4405
4513
  };
4406
4514
  QueryBuilder.prototype.getTypeFromColumn = function (rules) {
4407
- var columnData = this.columns;
4408
- for (var i = 0; i < columnData.length; i++) {
4409
- if (columnData[i].field === rules.field) {
4410
- rules.type = columnData[i].type;
4411
- break;
4412
- }
4413
- }
4414
- return rules.type;
4515
+ var columnData = this.getColumn(rules.field);
4516
+ return columnData.type;
4415
4517
  };
4416
4518
  QueryBuilder.prototype.processParser = function (parser, rules, levelColl) {
4417
4519
  var j;
@@ -4426,6 +4528,7 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
4426
4528
  var lLen;
4427
4529
  var grpCount;
4428
4530
  var operator;
4531
+ var isLeftOpened = false;
4429
4532
  for (var i = 0, iLen = parser.length; i < iLen; i++) {
4430
4533
  if (parser[i][0] === 'Literal') {
4431
4534
  rule = { label: parser[i][1], field: parser[i][1] };
@@ -4444,8 +4547,12 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
4444
4547
  j = i + 1;
4445
4548
  jLen = iLen;
4446
4549
  for (j = i + 1; j < jLen; j++) {
4447
- if (parser[j][0] === 'Right') {
4550
+ if (operator.indexOf('between') < 0 && parser[j][0] === 'Left') {
4551
+ isLeftOpened = true;
4552
+ }
4553
+ else if (parser[j][0] === 'Right' && isLeftOpened) {
4448
4554
  i = j;
4555
+ isLeftOpened = false;
4449
4556
  break;
4450
4557
  }
4451
4558
  else {
@@ -4582,6 +4689,9 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
4582
4689
  __decorate([
4583
4690
  Property(false)
4584
4691
  ], QueryBuilder.prototype, "allowValidation", void 0);
4692
+ __decorate([
4693
+ Property('Default')
4694
+ ], QueryBuilder.prototype, "fieldMode", void 0);
4585
4695
  __decorate([
4586
4696
  Property([])
4587
4697
  ], QueryBuilder.prototype, "columns", void 0);