@syncfusion/ej2-querybuilder 30.2.6 → 31.1.22

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 (86) hide show
  1. package/dist/ej2-querybuilder.min.js +3 -3
  2. package/dist/ej2-querybuilder.umd.min.js +3 -3
  3. package/dist/ej2-querybuilder.umd.min.js.map +1 -1
  4. package/dist/es6/ej2-querybuilder.es2015.js +256 -166
  5. package/dist/es6/ej2-querybuilder.es2015.js.map +1 -1
  6. package/dist/es6/ej2-querybuilder.es5.js +260 -169
  7. package/dist/es6/ej2-querybuilder.es5.js.map +1 -1
  8. package/dist/global/ej2-querybuilder.min.js +3 -3
  9. package/dist/global/ej2-querybuilder.min.js.map +1 -1
  10. package/dist/global/index.d.ts +2 -2
  11. package/package.json +7 -7
  12. package/src/query-builder/query-builder.d.ts +7 -0
  13. package/src/query-builder/query-builder.js +260 -168
  14. package/styles/bds-lite.css +37 -0
  15. package/styles/bds.css +36 -0
  16. package/styles/bootstrap-dark-lite.css +37 -0
  17. package/styles/bootstrap-dark.css +36 -0
  18. package/styles/bootstrap-lite.css +37 -0
  19. package/styles/bootstrap.css +36 -0
  20. package/styles/bootstrap4-lite.css +45 -0
  21. package/styles/bootstrap4.css +44 -0
  22. package/styles/bootstrap5-dark-lite.css +37 -0
  23. package/styles/bootstrap5-dark.css +36 -0
  24. package/styles/bootstrap5-lite.css +37 -0
  25. package/styles/bootstrap5.3-lite.css +37 -0
  26. package/styles/bootstrap5.3.css +36 -0
  27. package/styles/bootstrap5.css +36 -0
  28. package/styles/fabric-dark-lite.css +37 -0
  29. package/styles/fabric-dark.css +36 -0
  30. package/styles/fabric-lite.css +37 -0
  31. package/styles/fabric.css +36 -0
  32. package/styles/fluent-dark-lite.css +37 -0
  33. package/styles/fluent-dark.css +36 -0
  34. package/styles/fluent-lite.css +37 -0
  35. package/styles/fluent.css +36 -0
  36. package/styles/fluent2-lite.css +37 -0
  37. package/styles/fluent2.css +36 -0
  38. package/styles/highcontrast-light-lite.css +37 -0
  39. package/styles/highcontrast-light.css +36 -0
  40. package/styles/highcontrast-lite.css +37 -0
  41. package/styles/highcontrast.css +36 -0
  42. package/styles/material-dark-lite.css +37 -0
  43. package/styles/material-dark.css +36 -0
  44. package/styles/material-lite.css +37 -0
  45. package/styles/material.css +36 -0
  46. package/styles/material3-dark-lite.css +37 -0
  47. package/styles/material3-dark.css +36 -0
  48. package/styles/material3-lite.css +37 -0
  49. package/styles/material3.css +36 -0
  50. package/styles/query-builder/_bootstrap-dark-definition.scss +2 -0
  51. package/styles/query-builder/_bootstrap-definition.scss +2 -0
  52. package/styles/query-builder/_bootstrap4-definition.scss +1 -0
  53. package/styles/query-builder/_fabric-dark-definition.scss +2 -0
  54. package/styles/query-builder/_fabric-definition.scss +2 -0
  55. package/styles/query-builder/_highcontrast-definition.scss +2 -0
  56. package/styles/query-builder/_highcontrast-light-definition.scss +2 -0
  57. package/styles/query-builder/_material-dark-definition.scss +1 -0
  58. package/styles/query-builder/_material-definition.scss +1 -0
  59. package/styles/query-builder/_theme.scss +23 -0
  60. package/styles/query-builder/bds.css +36 -0
  61. package/styles/query-builder/bootstrap-dark.css +36 -0
  62. package/styles/query-builder/bootstrap.css +36 -0
  63. package/styles/query-builder/bootstrap4.css +44 -0
  64. package/styles/query-builder/bootstrap5-dark.css +36 -0
  65. package/styles/query-builder/bootstrap5.3.css +36 -0
  66. package/styles/query-builder/bootstrap5.css +36 -0
  67. package/styles/query-builder/fabric-dark.css +36 -0
  68. package/styles/query-builder/fabric.css +36 -0
  69. package/styles/query-builder/fluent-dark.css +36 -0
  70. package/styles/query-builder/fluent.css +36 -0
  71. package/styles/query-builder/fluent2.css +36 -0
  72. package/styles/query-builder/highcontrast-light.css +36 -0
  73. package/styles/query-builder/highcontrast.css +36 -0
  74. package/styles/query-builder/material-dark.css +36 -0
  75. package/styles/query-builder/material.css +36 -0
  76. package/styles/query-builder/material3-dark.css +36 -0
  77. package/styles/query-builder/material3.css +36 -0
  78. package/styles/query-builder/tailwind-dark.css +36 -0
  79. package/styles/query-builder/tailwind.css +36 -0
  80. package/styles/query-builder/tailwind3.css +36 -0
  81. package/styles/tailwind-dark-lite.css +37 -0
  82. package/styles/tailwind-dark.css +36 -0
  83. package/styles/tailwind-lite.css +37 -0
  84. package/styles/tailwind.css +36 -0
  85. package/styles/tailwind3-lite.css +37 -0
  86. package/styles/tailwind3.css +36 -0
@@ -878,23 +878,44 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
878
878
  }
879
879
  };
880
880
  QueryBuilder.prototype.addRuleSuccessCallBack = function (args, trgt, rule, col, act, pId, isRlTmp) {
881
- var height = (this.element.className.indexOf('e-device') > -1) ? '250px' : '200px';
881
+ var _this = this;
882
+ var isVertical = this.element.className.indexOf('e-device') > -1 || this.displayMode === 'Vertical';
883
+ var height = isVertical ? '250px' : '200px';
882
884
  var ruleID;
883
885
  var column = (rule && rule.field) ? this.getColumn(rule.field) : col ? col : this.columns[0];
884
886
  var operators;
885
- var dropDownList;
886
887
  var ruleElem;
887
888
  var newRule = { 'label': '', 'field': '', 'type': '', 'operator': '' };
888
889
  if (!args.cancel) {
889
890
  if (column && column.ruleTemplate && rule.field) {
890
891
  this.selectedColumn = column;
891
892
  operators = this.selectedColumn.operators;
892
- newRule = { 'label': column.label, 'field': column.field, 'type': column.type, 'operator': operators[0].value };
893
- var passedRule = Object.keys(rule).length ? rule : newRule;
894
- ruleElem = this.appendRuleElem(trgt, column, act, pId, 'field', passedRule);
895
- var args_1 = { requestType: 'template-create', action: 'insert-rule', ruleID: ruleElem.id,
896
- fields: this.fields, rule: passedRule };
897
- this.trigger('actionBegin', args_1);
893
+ newRule = {
894
+ 'label': column.label,
895
+ 'field': column.field,
896
+ 'type': column.type,
897
+ 'operator': operators[0].value
898
+ };
899
+ var passedRule_1 = Object.keys(rule).length ? rule : newRule;
900
+ ruleElem = this.appendRuleElem(trgt, column, act, pId, 'field', passedRule_1);
901
+ var actionArgs = {
902
+ requestType: 'template-initialize',
903
+ ruleID: ruleElem.id,
904
+ action: 'insert-rule',
905
+ fields: this.fields,
906
+ rule: passedRule_1
907
+ };
908
+ this.trigger('actionBegin', actionArgs);
909
+ setTimeout(function () {
910
+ var createArgs = {
911
+ requestType: 'template-create',
912
+ ruleID: ruleElem.id,
913
+ action: 'insert-rule',
914
+ fields: _this.fields,
915
+ rule: passedRule_1
916
+ };
917
+ _this.trigger('actionBegin', createArgs);
918
+ }, 0);
898
919
  }
899
920
  else {
900
921
  ruleElem = this.appendRuleElem(trgt, column, act, pId, 'field');
@@ -909,139 +930,30 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
909
930
  addClass([element], 'e-round');
910
931
  addClass([element], 'e-icon-btn');
911
932
  element.setAttribute('title', this.l10n.getConstant('DeleteRule'));
912
- var spanElement = this.createElement('span', { attrs: { class: 'e-btn-icon e-icons e-delete-icon' } });
913
- ruleElem.querySelector('.e-rule-delete').appendChild(spanElement);
933
+ var spanElement = this.createElement('span', {
934
+ attrs: { class: 'e-btn-icon e-icons e-delete-icon' }
935
+ });
936
+ element.appendChild(spanElement);
914
937
  }
915
938
  if (!this.showButtons.ruleDelete) {
916
939
  element.classList.add('e-button-hide');
917
940
  }
918
941
  }
919
- if (this.displayMode === 'Vertical' || this.element.className.indexOf('e-device') > -1) {
920
- ruleElem.className = 'e-rule-container e-vertical-mode';
921
- }
922
- else {
923
- ruleElem.className = 'e-rule-container e-horizontal-mode';
924
- }
942
+ ruleElem.className = 'e-rule-container ' + (isVertical ? 'e-vertical-mode' : 'e-horizontal-mode');
925
943
  var previousRuleElem = ruleElem.previousElementSibling;
926
- if (this.enableSeparateConnector) {
927
- var prevRule = void 0;
928
- var ruleContainer = void 0;
929
- if (previousRuleElem && previousRuleElem.classList.contains('e-group-container')) {
930
- ruleContainer = previousRuleElem.querySelectorAll('.e-rule-container');
931
- previousRuleElem = ruleContainer[ruleContainer.length - 1];
932
- }
933
- if (previousRuleElem && previousRuleElem.classList.contains('e-rule-container')) {
934
- prevRule = this.getRule(previousRuleElem);
935
- }
936
- if (this.headerTemplate && previousRuleElem && prevRule) {
937
- this.headerTemplateFn(previousRuleElem, false, prevRule.condition, prevRule, previousRuleElem.id);
938
- }
939
- else if (isNullOrUndefined(previousRuleElem) && ruleElem.id !== this.element.id + '_group0_rule0') {
940
- var group = ruleElem.closest('.e-group-container');
941
- if (group && group.previousElementSibling) {
942
- var prevElem = group.previousElementSibling;
943
- var prevRuleContainer = prevElem.querySelectorAll('.e-rule-container');
944
- if (prevElem.classList.contains('e-group-container')) {
945
- prevElem = prevRuleContainer[prevRuleContainer.length - 1];
946
- }
947
- if (prevElem.classList.contains('e-rule-container')) {
948
- var prevRule_1 = this.getRule(prevElem);
949
- this.headerTemplateFn(prevElem, false, prevRule_1.condition, prevRule_1, prevElem.id, true);
950
- }
951
- }
952
- else {
953
- this.headerTemplateFn(ruleElem, false, rule.condition, rule, ruleElem.id, true);
954
- }
955
- }
956
- }
957
- else {
958
- if (previousRuleElem && previousRuleElem.className.indexOf('e-rule-container') > -1) {
959
- if (ruleElem.className.indexOf('e-joined-rule') < 0) {
960
- ruleElem.className += ' e-joined-rule';
961
- }
962
- if (previousRuleElem.className.indexOf('e-prev-joined-rule') < 0) {
963
- previousRuleElem.className += ' e-prev-joined-rule';
964
- }
965
- }
966
- }
967
- if (previousRuleElem && previousRuleElem.className.indexOf('e-group-container') > -1 &&
968
- ruleElem.className.indexOf('e-separate-rule') < 0) {
969
- ruleElem.className += ' e-separate-rule';
970
- }
944
+ this.processAdjacentElements(ruleElem, previousRuleElem, rule);
971
945
  if (!this.isImportRules) {
972
946
  this.updateAddedRule(trgt, rule, newRule, isRlTmp, pId, this.enableSeparateConnector ? true : null);
973
947
  }
948
+ var ruleCount = this.rule.rules.length;
974
949
  if (!column || (column && !column.ruleTemplate) || !rule.field) {
975
- if (this.fieldMode === 'Default') {
976
- var ddlField = void 0;
977
- var ddlValue = void 0;
978
- if (this.separator && rule.field) {
979
- ddlValue = this.GetRootColumnName(rule.field);
980
- }
981
- else if (this.autoSelectField) {
982
- ddlValue = this.GetRootColumnName(rule.field);
983
- }
984
- else {
985
- ddlValue = this.isImportRules ? this.GetRootColumnName(rule.field) : rule.field;
986
- }
987
- ddlField = {
988
- dataSource: this.columns,
989
- fields: this.fields, placeholder: this.l10n.getConstant('SelectField'),
990
- popupHeight: ((this.columns.length > 5) ? height : 'auto'), close: this.fieldClose.bind(this, ruleElem.id + '_filterkey'),
991
- change: this.changeField.bind(this), value: rule ? ddlValue : null, open: this.popupOpen.bind(this, true), cssClass: 'qb-dropdownlist'
992
- };
993
- if (this.fieldModel) {
994
- ddlField = __assign({}, ddlField, this.fieldModel);
995
- }
996
- dropDownList = new DropDownList(ddlField);
997
- dropDownList.appendTo('#' + ruleElem.id + '_filterkey');
998
- var ddlVal = void 0;
999
- if (this.separator && rule.field) {
1000
- ddlVal = this.GetRootColumnName(rule.field);
1001
- }
1002
- else {
1003
- ddlVal = this.isImportRules ? this.GetRootColumnName(rule.field) :
1004
- dropDownList.value;
1005
- }
1006
- this.selectedColumn = dropDownList.getDataByValue(ddlVal);
1007
- if (Object.keys(rule).length) {
1008
- this.changeRule(rule, {
1009
- element: dropDownList.element, itemData: this.selectedColumn
1010
- });
1011
- }
950
+ if (ruleCount > 20) {
951
+ setTimeout(function () {
952
+ _this.applyFieldComponent(ruleElem, rule, height);
953
+ }, 0);
1012
954
  }
1013
955
  else {
1014
- var ddlField = void 0;
1015
- var ddlValue = this.isImportRules ? rule.field : rule.field;
1016
- this.dummyDropdownTreeDs = extend([], this.columns, [], true);
1017
- this.updateDropdowntreeDS(this.dummyDropdownTreeDs);
1018
- ddlField = {
1019
- fields: { dataSource: this.dummyDropdownTreeDs,
1020
- value: 'field', text: 'label', child: 'columns', expanded: 'expanded', selectable: 'selectable' },
1021
- placeholder: this.l10n.getConstant('SelectField'), showClearButton: false,
1022
- popupHeight: ((this.columns.length > 5) ? height : 'auto'), changeOnBlur: false,
1023
- change: this.changeField.bind(this), value: !isNullOrUndefined(ddlValue) ? [ddlValue] : null,
1024
- open: this.popupOpen.bind(this, false), treeSettings: { expandOn: 'Click' },
1025
- cssClass: 'e-qb-ddt', filtering: this.dropdownTreeFiltering.bind(this), close: this.dropdownTreeClose.bind(this)
1026
- };
1027
- if (this.fieldModel) {
1028
- ddlField = __assign({}, ddlField, this.fieldModel);
1029
- }
1030
- var dropdowntree = new DropDownTree(ddlField);
1031
- dropdowntree.appendTo('#' + ruleElem.id + '_filterkey');
1032
- if (!isNullOrUndefined(dropdowntree.value)) {
1033
- var value = this.getLabelFromColumn(dropdowntree.value[0]);
1034
- dropdowntree.element.value = value;
1035
- }
1036
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
1037
- var ddlVal = !isNullOrUndefined(rule.field) ?
1038
- this.GetRootColumnName(rule.field) : dropdowntree.value;
1039
- this.selectedColumn = this.getColumn(ddlVal);
1040
- if (Object.keys(rule).length) {
1041
- this.changeRule(rule, {
1042
- element: dropdowntree.element, itemData: this.selectedColumn
1043
- });
1044
- }
956
+ this.applyFieldComponent(ruleElem, rule, height);
1045
957
  }
1046
958
  }
1047
959
  ruleID = ruleElem.id.replace(this.element.id + '_', '');
@@ -1050,46 +962,204 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
1050
962
  this.ruleLock(lockRuleTarget);
1051
963
  }
1052
964
  if (!this.isImportRules && !this.prvtEvtTgrDaD) {
1053
- this.trigger('change', { groupID: trgt.id.replace(this.element.id + '_', ''), ruleID: ruleID, type: 'insertRule' });
965
+ this.trigger('change', {
966
+ groupID: trgt.id.replace(this.element.id + '_', ''),
967
+ ruleID: ruleID,
968
+ type: 'insertRule'
969
+ });
1054
970
  }
1055
971
  }
1056
972
  if (this.enableSeparateConnector && isNullOrUndefined(rule.condition) && ruleID) {
1057
973
  rule = this.getRule(ruleID);
1058
974
  }
1059
975
  if (this.enableSeparateConnector) {
1060
- var prevElem = ruleElem.previousElementSibling;
1061
- var ruleContainer = void 0;
1062
- while (prevElem && !prevElem.classList.contains('e-rule-container')) {
1063
- if (prevElem.classList.contains('e-group-container')) {
1064
- ruleContainer = prevElem.querySelectorAll('.e-rule-container');
1065
- prevElem = ruleContainer[ruleContainer.length - 1];
1066
- break;
976
+ this.processConnectorElements(ruleElem);
977
+ }
978
+ };
979
+ QueryBuilder.prototype.processAdjacentElements = function (ruleElem, previousRuleElem, rule) {
980
+ if (this.enableSeparateConnector) {
981
+ if (previousRuleElem && previousRuleElem.classList.contains('e-group-container')) {
982
+ var ruleContainer = previousRuleElem.querySelectorAll('.e-rule-container');
983
+ previousRuleElem = ruleContainer[ruleContainer.length - 1];
984
+ }
985
+ if (previousRuleElem && previousRuleElem.classList.contains('e-rule-container')) {
986
+ var prevRule = this.getRule(previousRuleElem);
987
+ if (this.headerTemplate) {
988
+ this.headerTemplateFn(previousRuleElem, false, prevRule.condition, prevRule, previousRuleElem.id);
1067
989
  }
1068
- prevElem = prevElem.previousElementSibling;
1069
990
  }
1070
- if (this.headerTemplate && prevElem) {
991
+ else if (isNullOrUndefined(previousRuleElem) && ruleElem.id !== this.element.id + '_group0_rule0') {
992
+ this.handleOrphanedRuleElement(ruleElem, rule);
993
+ }
994
+ }
995
+ else {
996
+ if (previousRuleElem && previousRuleElem.className.indexOf('e-rule-container') > -1) {
997
+ ruleElem.classList.add('e-joined-rule');
998
+ previousRuleElem.classList.add('e-prev-joined-rule');
999
+ }
1000
+ }
1001
+ if (previousRuleElem && previousRuleElem.className.indexOf('e-group-container') > -1 &&
1002
+ ruleElem.className.indexOf('e-separate-rule') < 0) {
1003
+ ruleElem.className += ' e-separate-rule';
1004
+ }
1005
+ };
1006
+ QueryBuilder.prototype.handleOrphanedRuleElement = function (ruleElem, rule) {
1007
+ var group = ruleElem.closest('.e-group-container');
1008
+ if (group && group.previousElementSibling) {
1009
+ var prevElem = group.previousElementSibling;
1010
+ var prevRuleContainer = prevElem.querySelectorAll('.e-rule-container');
1011
+ if (prevElem.classList.contains('e-group-container')) {
1012
+ prevElem = prevRuleContainer[prevRuleContainer.length - 1];
1013
+ }
1014
+ if (prevElem.classList.contains('e-rule-container')) {
1071
1015
  var prevRule = this.getRule(prevElem);
1072
- var args_2 = { requestType: 'rule-template-create', ruleID: prevElem.id, condition: prevRule.condition,
1073
- notCondition: this.enableNotCondition ? true : undefined };
1074
- this.trigger('actionBegin', args_2);
1016
+ this.headerTemplateFn(prevElem, false, prevRule.condition, prevRule, prevElem.id, true);
1075
1017
  }
1076
- else if (isNullOrUndefined(prevElem) && ruleElem.id !== this.element.id + '_group0_rule0') {
1077
- var group = ruleElem.closest('.e-group-container');
1078
- if (group && group.previousElementSibling && group.previousElementSibling.previousElementSibling) {
1079
- var prevElem_1 = group.previousElementSibling.previousElementSibling;
1080
- if (prevElem_1.classList.contains('e-group-container')) {
1081
- var ruleContainer_1 = prevElem_1.querySelectorAll('.e-rule-container');
1082
- prevElem_1 = ruleContainer_1[ruleContainer_1.length - 1];
1083
- }
1084
- if (prevElem_1.classList.contains('e-rule-container')) {
1085
- var prevRule = this.getRule(prevElem_1);
1086
- var args_3 = { requestType: 'rule-template-create', ruleID: prevElem_1.id,
1087
- condition: prevRule.condition, notCondition: this.enableNotCondition ? true : undefined };
1088
- this.trigger('actionBegin', args_3);
1089
- }
1090
- }
1018
+ }
1019
+ else {
1020
+ this.headerTemplateFn(ruleElem, false, rule.condition, rule, ruleElem.id, true);
1021
+ }
1022
+ };
1023
+ QueryBuilder.prototype.processConnectorElements = function (ruleElem) {
1024
+ var prevElem = ruleElem.previousElementSibling;
1025
+ var ruleContainer;
1026
+ while (prevElem && !prevElem.classList.contains('e-rule-container')) {
1027
+ if (prevElem.classList.contains('e-group-container')) {
1028
+ ruleContainer = prevElem.querySelectorAll('.e-rule-container');
1029
+ prevElem = ruleContainer[ruleContainer.length - 1];
1030
+ break;
1031
+ }
1032
+ prevElem = prevElem.previousElementSibling;
1033
+ }
1034
+ if (this.headerTemplate && prevElem) {
1035
+ var prevRule = this.getRule(prevElem);
1036
+ var args = {
1037
+ requestType: 'rule-template-create',
1038
+ ruleID: prevElem.id,
1039
+ condition: prevRule.condition,
1040
+ notCondition: this.enableNotCondition ? true : undefined
1041
+ };
1042
+ this.trigger('actionBegin', args);
1043
+ }
1044
+ else if (isNullOrUndefined(prevElem) && ruleElem.id !== this.element.id + '_group0_rule0') {
1045
+ this.handleOrphanedConnectorElement(ruleElem);
1046
+ }
1047
+ this.setMultiConnector(ruleElem);
1048
+ };
1049
+ QueryBuilder.prototype.handleOrphanedConnectorElement = function (ruleElem) {
1050
+ var group = ruleElem.closest('.e-group-container');
1051
+ if (group && group.previousElementSibling && group.previousElementSibling.previousElementSibling) {
1052
+ var prevElem = group.previousElementSibling.previousElementSibling;
1053
+ if (prevElem.classList.contains('e-group-container')) {
1054
+ var ruleContainer = prevElem.querySelectorAll('.e-rule-container');
1055
+ prevElem = ruleContainer[ruleContainer.length - 1];
1056
+ }
1057
+ if (prevElem.classList.contains('e-rule-container')) {
1058
+ var prevRule = this.getRule(prevElem);
1059
+ var args = {
1060
+ requestType: 'rule-template-create',
1061
+ ruleID: prevElem.id,
1062
+ condition: prevRule.condition,
1063
+ notCondition: this.enableNotCondition ? true : undefined
1064
+ };
1065
+ this.trigger('actionBegin', args);
1091
1066
  }
1092
- this.setMultiConnector(ruleElem);
1067
+ }
1068
+ };
1069
+ QueryBuilder.prototype.applyFieldComponent = function (ruleElem, rule, height) {
1070
+ if (this.fieldMode === 'Default') {
1071
+ this.applyDropdownListComponent(ruleElem, rule, height);
1072
+ }
1073
+ else {
1074
+ this.applyDropdownTreeComponent(ruleElem, rule, height);
1075
+ }
1076
+ };
1077
+ QueryBuilder.prototype.applyDropdownListComponent = function (ruleElem, rule, height) {
1078
+ var ddlField;
1079
+ var ddlValue;
1080
+ if (this.separator && rule.field) {
1081
+ ddlValue = this.GetRootColumnName(rule.field);
1082
+ }
1083
+ else if (this.autoSelectField) {
1084
+ ddlValue = this.GetRootColumnName(rule.field);
1085
+ }
1086
+ else {
1087
+ ddlValue = this.isImportRules ? this.GetRootColumnName(rule.field) : rule.field;
1088
+ }
1089
+ ddlField = {
1090
+ dataSource: this.columns,
1091
+ fields: this.fields,
1092
+ placeholder: this.l10n.getConstant('SelectField'),
1093
+ popupHeight: ((this.columns.length > 5) ? height : 'auto'),
1094
+ close: this.fieldClose.bind(this, ruleElem.id + '_filterkey'),
1095
+ change: this.changeField.bind(this),
1096
+ value: rule ? ddlValue : null,
1097
+ open: this.popupOpen.bind(this, true),
1098
+ cssClass: 'qb-dropdownlist'
1099
+ };
1100
+ if (this.fieldModel) {
1101
+ ddlField = __assign({}, ddlField, this.fieldModel);
1102
+ }
1103
+ var dropDownList = new DropDownList(ddlField);
1104
+ dropDownList.appendTo('#' + ruleElem.id + '_filterkey');
1105
+ var ddlVal;
1106
+ if (this.separator && rule.field) {
1107
+ ddlVal = this.GetRootColumnName(rule.field);
1108
+ }
1109
+ else {
1110
+ ddlVal = this.isImportRules ? this.GetRootColumnName(rule.field) : dropDownList.value;
1111
+ }
1112
+ this.selectedColumn = dropDownList.getDataByValue(ddlVal);
1113
+ if (Object.keys(rule).length) {
1114
+ this.changeRule(rule, {
1115
+ element: dropDownList.element,
1116
+ itemData: this.selectedColumn
1117
+ });
1118
+ }
1119
+ };
1120
+ QueryBuilder.prototype.applyDropdownTreeComponent = function (ruleElem, rule, height) {
1121
+ var ddlField;
1122
+ var ddlValue = this.isImportRules ? rule.field : rule.field;
1123
+ this.dummyDropdownTreeDs = extend([], this.columns, [], true);
1124
+ this.updateDropdowntreeDS(this.dummyDropdownTreeDs);
1125
+ ddlField = {
1126
+ fields: {
1127
+ dataSource: this.dummyDropdownTreeDs,
1128
+ value: 'field',
1129
+ text: 'label',
1130
+ child: 'columns',
1131
+ expanded: 'expanded',
1132
+ selectable: 'selectable'
1133
+ },
1134
+ placeholder: this.l10n.getConstant('SelectField'),
1135
+ showClearButton: false,
1136
+ popupHeight: ((this.columns.length > 5) ? height : 'auto'),
1137
+ changeOnBlur: false,
1138
+ change: this.changeField.bind(this),
1139
+ value: !isNullOrUndefined(ddlValue) ? [ddlValue] : null,
1140
+ open: this.popupOpen.bind(this, false),
1141
+ treeSettings: { expandOn: 'Click' },
1142
+ cssClass: 'e-qb-ddt',
1143
+ filtering: this.dropdownTreeFiltering.bind(this),
1144
+ close: this.dropdownTreeClose.bind(this)
1145
+ };
1146
+ if (this.fieldModel) {
1147
+ ddlField = __assign({}, ddlField, this.fieldModel);
1148
+ }
1149
+ var dropdowntree = new DropDownTree(ddlField);
1150
+ dropdowntree.appendTo('#' + ruleElem.id + '_filterkey');
1151
+ if (!isNullOrUndefined(dropdowntree.value)) {
1152
+ var value = this.getLabelFromColumn(dropdowntree.value[0]);
1153
+ dropdowntree.element.value = value;
1154
+ }
1155
+ var ddlVal = !isNullOrUndefined(rule.field) ?
1156
+ this.GetRootColumnName(rule.field) : dropdowntree.value;
1157
+ this.selectedColumn = this.getColumn(ddlVal);
1158
+ if (Object.keys(rule).length) {
1159
+ this.changeRule(rule, {
1160
+ element: dropdowntree.element,
1161
+ itemData: this.selectedColumn
1162
+ });
1093
1163
  }
1094
1164
  };
1095
1165
  QueryBuilder.prototype.dropdownTreeFiltering = function (args) {
@@ -1790,11 +1860,11 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
1790
1860
  }
1791
1861
  this.updatedRule = null;
1792
1862
  if (this.headerTemplate) {
1793
- var args_4 = {
1863
+ var args_1 = {
1794
1864
  requestType: 'header-template-create', ruleID: groupElem.id, condition: condition,
1795
1865
  notCondition: this.enableNotCondition ? not : undefined
1796
1866
  };
1797
- this.trigger('actionBegin', args_4);
1867
+ this.trigger('actionBegin', args_1);
1798
1868
  }
1799
1869
  else {
1800
1870
  if (this.enableSeparateConnector) {
@@ -2988,26 +3058,45 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
2988
3058
  var ddlObj = this.fieldMode === 'DropdownTree' ? getComponent(filterElem, 'dropdowntree')
2989
3059
  : getComponent(container.querySelector('.e-rule-filter .e-filter-input'), 'dropdownlist');
2990
3060
  var column = this.fieldMode === 'DropdownTree' ? this.getColumn(ddlObj.value[0]) : this.getColumn(ddlObj.value);
3061
+ if (target && target.nextElementSibling) {
3062
+ target.nextElementSibling.style.position = 'relative';
3063
+ target.nextElementSibling.classList.add('e-querybuilder-spinner');
3064
+ }
3065
+ var onComplete = function () {
3066
+ if (target && target.nextElementSibling && target.nextElementSibling.classList.contains('e-querybuilder-spinner')) {
3067
+ target.nextElementSibling.classList.remove('e-querybuilder-spinner');
3068
+ }
3069
+ };
2991
3070
  if (typeof itemData.template === 'string' || itemData.template.write === undefined) {
2992
3071
  var args = {
2993
3072
  rule: rule, ruleID: container.id, operator: tempRule.operator, field: column.field,
2994
3073
  requestType: 'value-template-create'
2995
3074
  };
2996
3075
  this.trigger('actionBegin', args);
3076
+ onComplete();
2997
3077
  }
2998
3078
  else {
2999
3079
  var template = itemData.template;
3080
+ var templateArgs = {
3081
+ elements: tempElements.length > 1 ? tempElements : tempElements[0],
3082
+ values: rule.value,
3083
+ operator: tempRule.operator,
3084
+ field: column.field,
3085
+ dataSource: column.values,
3086
+ onComplete: onComplete
3087
+ };
3088
+ var writeResult = void 0;
3000
3089
  if (typeof template.write === 'string') {
3001
- getValue(template.write, window)({
3002
- elements: tempElements.length > 1 ? tempElements : tempElements[0], values: rule.value,
3003
- operator: tempRule.operator, field: column.field, dataSource: column.values
3004
- });
3090
+ writeResult = getValue(template.write, window)(templateArgs);
3005
3091
  }
3006
3092
  else if (typeof itemData.template !== 'function') {
3007
- itemData.template.write({
3008
- elements: tempElements.length > 1 ? tempElements : tempElements[0],
3009
- values: rule.value, operator: tempRule.operator, field: column.field, dataSource: column.values
3010
- });
3093
+ writeResult = itemData.template.write(templateArgs);
3094
+ }
3095
+ if (writeResult && typeof writeResult.then === 'function') {
3096
+ writeResult.then(function () { return onComplete(); });
3097
+ }
3098
+ else {
3099
+ setTimeout(function () { return onComplete(); }, 100);
3011
3100
  }
3012
3101
  }
3013
3102
  };
@@ -7362,7 +7451,8 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
7362
7451
  deleteElem: groupElem.querySelectorAll('.e-rule-delete'),
7363
7452
  lockElem: groupElem.querySelectorAll('.e-lock-rule'),
7364
7453
  cloneElem: groupElem.querySelectorAll('.e-clone-rule'),
7365
- ruleElem: groupElem.querySelectorAll('.e-rule-container')
7454
+ ruleElem: groupElem.querySelectorAll('.e-rule-container'),
7455
+ ddTree: groupElem.querySelectorAll('.e-control.e-dropdowntree')
7366
7456
  };
7367
7457
  elements.deleteElem.forEach(function (elem, i) {
7368
7458
  if (isDisabled) {
@@ -7399,6 +7489,7 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
7399
7489
  disableComponents(elements.checkbox, function (elem) { return getComponent(elem, 'checkbox'); }, isDisabled);
7400
7490
  disableComponents(elements.radio, function (elem) { return getComponent(elem, 'radio'); }, isDisabled);
7401
7491
  disableComponents(elements.multiSelect, function (elem) { return getComponent(elem, 'multiselect'); }, isDisabled);
7492
+ disableComponents(elements.ddTree, function (elem) { return getComponent(elem, 'dropdowntree'); }, isDisabled);
7402
7493
  };
7403
7494
  __decorate([
7404
7495
  Event()