@syncfusion/ej2-querybuilder 30.2.4 → 30.2.6

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.
@@ -823,34 +823,23 @@ let QueryBuilder = class QueryBuilder extends Component {
823
823
  }
824
824
  }
825
825
  addRuleSuccessCallBack(args, trgt, rule, col, act, pId, isRlTmp) {
826
- const isVertical = this.element.className.indexOf('e-device') > -1 || this.displayMode === 'Vertical';
827
- const height = isVertical ? '250px' : '200px';
826
+ const height = (this.element.className.indexOf('e-device') > -1) ? '250px' : '200px';
828
827
  let ruleID;
829
828
  const column = (rule && rule.field) ? this.getColumn(rule.field) : col ? col : this.columns[0];
830
829
  let operators;
830
+ let dropDownList;
831
831
  let ruleElem;
832
832
  let newRule = { 'label': '', 'field': '', 'type': '', 'operator': '' };
833
833
  if (!args.cancel) {
834
- const fragment = document.createDocumentFragment();
835
834
  if (column && column.ruleTemplate && rule.field) {
836
835
  this.selectedColumn = column;
837
836
  operators = this.selectedColumn.operators;
838
- newRule = {
839
- 'label': column.label,
840
- 'field': column.field,
841
- 'type': column.type,
842
- 'operator': operators[0].value
843
- };
837
+ newRule = { 'label': column.label, 'field': column.field, 'type': column.type, 'operator': operators[0].value };
844
838
  const passedRule = Object.keys(rule).length ? rule : newRule;
845
839
  ruleElem = this.appendRuleElem(trgt, column, act, pId, 'field', passedRule);
846
- const actionArgs = {
847
- requestType: 'template-initialize',
848
- ruleID: ruleElem.id,
849
- action: 'insert-rule',
850
- fields: this.fields,
851
- rule: passedRule
852
- };
853
- this.trigger('actionBegin', actionArgs);
840
+ const args = { requestType: 'template-create', action: 'insert-rule', ruleID: ruleElem.id,
841
+ fields: this.fields, rule: passedRule };
842
+ this.trigger('actionBegin', args);
854
843
  }
855
844
  else {
856
845
  ruleElem = this.appendRuleElem(trgt, column, act, pId, 'field');
@@ -865,30 +854,139 @@ let QueryBuilder = class QueryBuilder extends Component {
865
854
  addClass([element], 'e-round');
866
855
  addClass([element], 'e-icon-btn');
867
856
  element.setAttribute('title', this.l10n.getConstant('DeleteRule'));
868
- const spanElement = this.createElement('span', {
869
- attrs: { class: 'e-btn-icon e-icons e-delete-icon' }
870
- });
871
- element.appendChild(spanElement);
857
+ const spanElement = this.createElement('span', { attrs: { class: 'e-btn-icon e-icons e-delete-icon' } });
858
+ ruleElem.querySelector('.e-rule-delete').appendChild(spanElement);
872
859
  }
873
860
  if (!this.showButtons.ruleDelete) {
874
861
  element.classList.add('e-button-hide');
875
862
  }
876
863
  }
877
- ruleElem.className = 'e-rule-container ' + (isVertical ? 'e-vertical-mode' : 'e-horizontal-mode');
878
- const previousRuleElem = ruleElem.previousElementSibling;
879
- this.processAdjacentElements(ruleElem, previousRuleElem, rule);
864
+ if (this.displayMode === 'Vertical' || this.element.className.indexOf('e-device') > -1) {
865
+ ruleElem.className = 'e-rule-container e-vertical-mode';
866
+ }
867
+ else {
868
+ ruleElem.className = 'e-rule-container e-horizontal-mode';
869
+ }
870
+ let previousRuleElem = ruleElem.previousElementSibling;
871
+ if (this.enableSeparateConnector) {
872
+ let prevRule;
873
+ let ruleContainer;
874
+ if (previousRuleElem && previousRuleElem.classList.contains('e-group-container')) {
875
+ ruleContainer = previousRuleElem.querySelectorAll('.e-rule-container');
876
+ previousRuleElem = ruleContainer[ruleContainer.length - 1];
877
+ }
878
+ if (previousRuleElem && previousRuleElem.classList.contains('e-rule-container')) {
879
+ prevRule = this.getRule(previousRuleElem);
880
+ }
881
+ if (this.headerTemplate && previousRuleElem && prevRule) {
882
+ this.headerTemplateFn(previousRuleElem, false, prevRule.condition, prevRule, previousRuleElem.id);
883
+ }
884
+ else if (isNullOrUndefined(previousRuleElem) && ruleElem.id !== this.element.id + '_group0_rule0') {
885
+ const group = ruleElem.closest('.e-group-container');
886
+ if (group && group.previousElementSibling) {
887
+ let prevElem = group.previousElementSibling;
888
+ const prevRuleContainer = prevElem.querySelectorAll('.e-rule-container');
889
+ if (prevElem.classList.contains('e-group-container')) {
890
+ prevElem = prevRuleContainer[prevRuleContainer.length - 1];
891
+ }
892
+ if (prevElem.classList.contains('e-rule-container')) {
893
+ const prevRule = this.getRule(prevElem);
894
+ this.headerTemplateFn(prevElem, false, prevRule.condition, prevRule, prevElem.id, true);
895
+ }
896
+ }
897
+ else {
898
+ this.headerTemplateFn(ruleElem, false, rule.condition, rule, ruleElem.id, true);
899
+ }
900
+ }
901
+ }
902
+ else {
903
+ if (previousRuleElem && previousRuleElem.className.indexOf('e-rule-container') > -1) {
904
+ if (ruleElem.className.indexOf('e-joined-rule') < 0) {
905
+ ruleElem.className += ' e-joined-rule';
906
+ }
907
+ if (previousRuleElem.className.indexOf('e-prev-joined-rule') < 0) {
908
+ previousRuleElem.className += ' e-prev-joined-rule';
909
+ }
910
+ }
911
+ }
912
+ if (previousRuleElem && previousRuleElem.className.indexOf('e-group-container') > -1 &&
913
+ ruleElem.className.indexOf('e-separate-rule') < 0) {
914
+ ruleElem.className += ' e-separate-rule';
915
+ }
880
916
  if (!this.isImportRules) {
881
917
  this.updateAddedRule(trgt, rule, newRule, isRlTmp, pId, this.enableSeparateConnector ? true : null);
882
918
  }
883
- const ruleCount = this.rule.rules.length;
884
919
  if (!column || (column && !column.ruleTemplate) || !rule.field) {
885
- if (ruleCount > 20) {
886
- setTimeout(() => {
887
- this.applyFieldComponent(ruleElem, rule, height);
888
- }, 0);
920
+ if (this.fieldMode === 'Default') {
921
+ let ddlField;
922
+ let ddlValue;
923
+ if (this.separator && rule.field) {
924
+ ddlValue = this.GetRootColumnName(rule.field);
925
+ }
926
+ else if (this.autoSelectField) {
927
+ ddlValue = this.GetRootColumnName(rule.field);
928
+ }
929
+ else {
930
+ ddlValue = this.isImportRules ? this.GetRootColumnName(rule.field) : rule.field;
931
+ }
932
+ ddlField = {
933
+ dataSource: this.columns,
934
+ fields: this.fields, placeholder: this.l10n.getConstant('SelectField'),
935
+ popupHeight: ((this.columns.length > 5) ? height : 'auto'), close: this.fieldClose.bind(this, ruleElem.id + '_filterkey'),
936
+ change: this.changeField.bind(this), value: rule ? ddlValue : null, open: this.popupOpen.bind(this, true), cssClass: 'qb-dropdownlist'
937
+ };
938
+ if (this.fieldModel) {
939
+ ddlField = Object.assign({}, ddlField, this.fieldModel);
940
+ }
941
+ dropDownList = new DropDownList(ddlField);
942
+ dropDownList.appendTo('#' + ruleElem.id + '_filterkey');
943
+ let ddlVal;
944
+ if (this.separator && rule.field) {
945
+ ddlVal = this.GetRootColumnName(rule.field);
946
+ }
947
+ else {
948
+ ddlVal = this.isImportRules ? this.GetRootColumnName(rule.field) :
949
+ dropDownList.value;
950
+ }
951
+ this.selectedColumn = dropDownList.getDataByValue(ddlVal);
952
+ if (Object.keys(rule).length) {
953
+ this.changeRule(rule, {
954
+ element: dropDownList.element, itemData: this.selectedColumn
955
+ });
956
+ }
889
957
  }
890
958
  else {
891
- this.applyFieldComponent(ruleElem, rule, height);
959
+ let ddlField;
960
+ const ddlValue = this.isImportRules ? rule.field : rule.field;
961
+ this.dummyDropdownTreeDs = extend([], this.columns, [], true);
962
+ this.updateDropdowntreeDS(this.dummyDropdownTreeDs);
963
+ ddlField = {
964
+ fields: { dataSource: this.dummyDropdownTreeDs,
965
+ value: 'field', text: 'label', child: 'columns', expanded: 'expanded', selectable: 'selectable' },
966
+ placeholder: this.l10n.getConstant('SelectField'), showClearButton: false,
967
+ popupHeight: ((this.columns.length > 5) ? height : 'auto'), changeOnBlur: false,
968
+ change: this.changeField.bind(this), value: !isNullOrUndefined(ddlValue) ? [ddlValue] : null,
969
+ open: this.popupOpen.bind(this, false), treeSettings: { expandOn: 'Click' },
970
+ cssClass: 'e-qb-ddt', filtering: this.dropdownTreeFiltering.bind(this), close: this.dropdownTreeClose.bind(this)
971
+ };
972
+ if (this.fieldModel) {
973
+ ddlField = Object.assign({}, ddlField, this.fieldModel);
974
+ }
975
+ const dropdowntree = new DropDownTree(ddlField);
976
+ dropdowntree.appendTo('#' + ruleElem.id + '_filterkey');
977
+ if (!isNullOrUndefined(dropdowntree.value)) {
978
+ const value = this.getLabelFromColumn(dropdowntree.value[0]);
979
+ dropdowntree.element.value = value;
980
+ }
981
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
982
+ const ddlVal = !isNullOrUndefined(rule.field) ?
983
+ this.GetRootColumnName(rule.field) : dropdowntree.value;
984
+ this.selectedColumn = this.getColumn(ddlVal);
985
+ if (Object.keys(rule).length) {
986
+ this.changeRule(rule, {
987
+ element: dropdowntree.element, itemData: this.selectedColumn
988
+ });
989
+ }
892
990
  }
893
991
  }
894
992
  ruleID = ruleElem.id.replace(this.element.id + '_', '');
@@ -897,204 +995,46 @@ let QueryBuilder = class QueryBuilder extends Component {
897
995
  this.ruleLock(lockRuleTarget);
898
996
  }
899
997
  if (!this.isImportRules && !this.prvtEvtTgrDaD) {
900
- this.trigger('change', {
901
- groupID: trgt.id.replace(this.element.id + '_', ''),
902
- ruleID: ruleID,
903
- type: 'insertRule'
904
- });
998
+ this.trigger('change', { groupID: trgt.id.replace(this.element.id + '_', ''), ruleID: ruleID, type: 'insertRule' });
905
999
  }
906
1000
  }
907
1001
  if (this.enableSeparateConnector && isNullOrUndefined(rule.condition) && ruleID) {
908
1002
  rule = this.getRule(ruleID);
909
1003
  }
910
1004
  if (this.enableSeparateConnector) {
911
- this.processConnectorElements(ruleElem);
912
- }
913
- }
914
- processAdjacentElements(ruleElem, previousRuleElem, rule) {
915
- if (this.enableSeparateConnector) {
916
- if (previousRuleElem && previousRuleElem.classList.contains('e-group-container')) {
917
- const ruleContainer = previousRuleElem.querySelectorAll('.e-rule-container');
918
- previousRuleElem = ruleContainer[ruleContainer.length - 1];
919
- }
920
- if (previousRuleElem && previousRuleElem.classList.contains('e-rule-container')) {
921
- const prevRule = this.getRule(previousRuleElem);
922
- if (this.headerTemplate) {
923
- this.headerTemplateFn(previousRuleElem, false, prevRule.condition, prevRule, previousRuleElem.id);
1005
+ let prevElem = ruleElem.previousElementSibling;
1006
+ let ruleContainer;
1007
+ while (prevElem && !prevElem.classList.contains('e-rule-container')) {
1008
+ if (prevElem.classList.contains('e-group-container')) {
1009
+ ruleContainer = prevElem.querySelectorAll('.e-rule-container');
1010
+ prevElem = ruleContainer[ruleContainer.length - 1];
1011
+ break;
924
1012
  }
1013
+ prevElem = prevElem.previousElementSibling;
925
1014
  }
926
- else if (isNullOrUndefined(previousRuleElem) && ruleElem.id !== this.element.id + '_group0_rule0') {
927
- this.handleOrphanedRuleElement(ruleElem, rule);
928
- }
929
- }
930
- else {
931
- if (previousRuleElem && previousRuleElem.className.indexOf('e-rule-container') > -1) {
932
- ruleElem.classList.add('e-joined-rule');
933
- previousRuleElem.classList.add('e-prev-joined-rule');
934
- }
935
- }
936
- if (previousRuleElem && previousRuleElem.className.indexOf('e-group-container') > -1 &&
937
- ruleElem.className.indexOf('e-separate-rule') < 0) {
938
- ruleElem.className += ' e-separate-rule';
939
- }
940
- }
941
- handleOrphanedRuleElement(ruleElem, rule) {
942
- const group = ruleElem.closest('.e-group-container');
943
- if (group && group.previousElementSibling) {
944
- let prevElem = group.previousElementSibling;
945
- const prevRuleContainer = prevElem.querySelectorAll('.e-rule-container');
946
- if (prevElem.classList.contains('e-group-container')) {
947
- prevElem = prevRuleContainer[prevRuleContainer.length - 1];
948
- }
949
- if (prevElem.classList.contains('e-rule-container')) {
1015
+ if (this.headerTemplate && prevElem) {
950
1016
  const prevRule = this.getRule(prevElem);
951
- this.headerTemplateFn(prevElem, false, prevRule.condition, prevRule, prevElem.id, true);
952
- }
953
- }
954
- else {
955
- this.headerTemplateFn(ruleElem, false, rule.condition, rule, ruleElem.id, true);
956
- }
957
- }
958
- processConnectorElements(ruleElem) {
959
- let prevElem = ruleElem.previousElementSibling;
960
- let ruleContainer;
961
- while (prevElem && !prevElem.classList.contains('e-rule-container')) {
962
- if (prevElem.classList.contains('e-group-container')) {
963
- ruleContainer = prevElem.querySelectorAll('.e-rule-container');
964
- prevElem = ruleContainer[ruleContainer.length - 1];
965
- break;
966
- }
967
- prevElem = prevElem.previousElementSibling;
968
- }
969
- if (this.headerTemplate && prevElem) {
970
- const prevRule = this.getRule(prevElem);
971
- const args = {
972
- requestType: 'rule-template-create',
973
- ruleID: prevElem.id,
974
- condition: prevRule.condition,
975
- notCondition: this.enableNotCondition ? true : undefined
976
- };
977
- this.trigger('actionBegin', args);
978
- }
979
- else if (isNullOrUndefined(prevElem) && ruleElem.id !== this.element.id + '_group0_rule0') {
980
- this.handleOrphanedConnectorElement(ruleElem);
981
- }
982
- this.setMultiConnector(ruleElem);
983
- }
984
- handleOrphanedConnectorElement(ruleElem) {
985
- const group = ruleElem.closest('.e-group-container');
986
- if (group && group.previousElementSibling && group.previousElementSibling.previousElementSibling) {
987
- let prevElem = group.previousElementSibling.previousElementSibling;
988
- if (prevElem.classList.contains('e-group-container')) {
989
- const ruleContainer = prevElem.querySelectorAll('.e-rule-container');
990
- prevElem = ruleContainer[ruleContainer.length - 1];
991
- }
992
- if (prevElem.classList.contains('e-rule-container')) {
993
- const prevRule = this.getRule(prevElem);
994
- const args = {
995
- requestType: 'rule-template-create',
996
- ruleID: prevElem.id,
997
- condition: prevRule.condition,
998
- notCondition: this.enableNotCondition ? true : undefined
999
- };
1017
+ const args = { requestType: 'rule-template-create', ruleID: prevElem.id, condition: prevRule.condition,
1018
+ notCondition: this.enableNotCondition ? true : undefined };
1000
1019
  this.trigger('actionBegin', args);
1001
1020
  }
1002
- }
1003
- }
1004
- applyFieldComponent(ruleElem, rule, height) {
1005
- if (this.fieldMode === 'Default') {
1006
- this.applyDropdownListComponent(ruleElem, rule, height);
1007
- }
1008
- else {
1009
- this.applyDropdownTreeComponent(ruleElem, rule, height);
1010
- }
1011
- }
1012
- applyDropdownListComponent(ruleElem, rule, height) {
1013
- let ddlField;
1014
- let ddlValue;
1015
- if (this.separator && rule.field) {
1016
- ddlValue = this.GetRootColumnName(rule.field);
1017
- }
1018
- else if (this.autoSelectField) {
1019
- ddlValue = this.GetRootColumnName(rule.field);
1020
- }
1021
- else {
1022
- ddlValue = this.isImportRules ? this.GetRootColumnName(rule.field) : rule.field;
1023
- }
1024
- ddlField = {
1025
- dataSource: this.columns,
1026
- fields: this.fields,
1027
- placeholder: this.l10n.getConstant('SelectField'),
1028
- popupHeight: ((this.columns.length > 5) ? height : 'auto'),
1029
- close: this.fieldClose.bind(this, ruleElem.id + '_filterkey'),
1030
- change: this.changeField.bind(this),
1031
- value: rule ? ddlValue : null,
1032
- open: this.popupOpen.bind(this, true),
1033
- cssClass: 'qb-dropdownlist'
1034
- };
1035
- if (this.fieldModel) {
1036
- ddlField = Object.assign({}, ddlField, this.fieldModel);
1037
- }
1038
- const dropDownList = new DropDownList(ddlField);
1039
- dropDownList.appendTo('#' + ruleElem.id + '_filterkey');
1040
- let ddlVal;
1041
- if (this.separator && rule.field) {
1042
- ddlVal = this.GetRootColumnName(rule.field);
1043
- }
1044
- else {
1045
- ddlVal = this.isImportRules ? this.GetRootColumnName(rule.field) : dropDownList.value;
1046
- }
1047
- this.selectedColumn = dropDownList.getDataByValue(ddlVal);
1048
- if (Object.keys(rule).length) {
1049
- this.changeRule(rule, {
1050
- element: dropDownList.element,
1051
- itemData: this.selectedColumn
1052
- });
1053
- }
1054
- }
1055
- applyDropdownTreeComponent(ruleElem, rule, height) {
1056
- let ddlField;
1057
- const ddlValue = this.isImportRules ? rule.field : rule.field;
1058
- this.dummyDropdownTreeDs = extend([], this.columns, [], true);
1059
- this.updateDropdowntreeDS(this.dummyDropdownTreeDs);
1060
- ddlField = {
1061
- fields: {
1062
- dataSource: this.dummyDropdownTreeDs,
1063
- value: 'field',
1064
- text: 'label',
1065
- child: 'columns',
1066
- expanded: 'expanded',
1067
- selectable: 'selectable'
1068
- },
1069
- placeholder: this.l10n.getConstant('SelectField'),
1070
- showClearButton: false,
1071
- popupHeight: ((this.columns.length > 5) ? height : 'auto'),
1072
- changeOnBlur: false,
1073
- change: this.changeField.bind(this),
1074
- value: !isNullOrUndefined(ddlValue) ? [ddlValue] : null,
1075
- open: this.popupOpen.bind(this, false),
1076
- treeSettings: { expandOn: 'Click' },
1077
- cssClass: 'e-qb-ddt',
1078
- filtering: this.dropdownTreeFiltering.bind(this),
1079
- close: this.dropdownTreeClose.bind(this)
1080
- };
1081
- if (this.fieldModel) {
1082
- ddlField = Object.assign({}, ddlField, this.fieldModel);
1083
- }
1084
- const dropdowntree = new DropDownTree(ddlField);
1085
- dropdowntree.appendTo('#' + ruleElem.id + '_filterkey');
1086
- if (!isNullOrUndefined(dropdowntree.value)) {
1087
- const value = this.getLabelFromColumn(dropdowntree.value[0]);
1088
- dropdowntree.element.value = value;
1089
- }
1090
- const ddlVal = !isNullOrUndefined(rule.field) ?
1091
- this.GetRootColumnName(rule.field) : dropdowntree.value;
1092
- this.selectedColumn = this.getColumn(ddlVal);
1093
- if (Object.keys(rule).length) {
1094
- this.changeRule(rule, {
1095
- element: dropdowntree.element,
1096
- itemData: this.selectedColumn
1097
- });
1021
+ else if (isNullOrUndefined(prevElem) && ruleElem.id !== this.element.id + '_group0_rule0') {
1022
+ const group = ruleElem.closest('.e-group-container');
1023
+ if (group && group.previousElementSibling && group.previousElementSibling.previousElementSibling) {
1024
+ let prevElem = group.previousElementSibling.previousElementSibling;
1025
+ if (prevElem.classList.contains('e-group-container')) {
1026
+ const ruleContainer = prevElem.querySelectorAll('.e-rule-container');
1027
+ prevElem = ruleContainer[ruleContainer.length - 1];
1028
+ }
1029
+ if (prevElem.classList.contains('e-rule-container')) {
1030
+ const prevRule = this.getRule(prevElem);
1031
+ const args = { requestType: 'rule-template-create', ruleID: prevElem.id,
1032
+ condition: prevRule.condition, notCondition: this.enableNotCondition ? true : undefined };
1033
+ this.trigger('actionBegin', args);
1034
+ }
1035
+ }
1036
+ }
1037
+ this.setMultiConnector(ruleElem);
1098
1038
  }
1099
1039
  }
1100
1040
  dropdownTreeFiltering(args) {