@syncfusion/ej2-querybuilder 33.2.3 → 33.2.5

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.
@@ -164,6 +164,7 @@ let QueryBuilder = class QueryBuilder extends Component {
164
164
  this.isRuleClicked = false;
165
165
  this.groupCloned = false;
166
166
  this.isRequestSent = false;
167
+ this.isPopupScroll = false;
167
168
  MultiSelect.Inject(CheckBoxSelection);
168
169
  }
169
170
  getPersistData() {
@@ -1295,6 +1296,10 @@ let QueryBuilder = class QueryBuilder extends Component {
1295
1296
  if (tooltipCloseElement) {
1296
1297
  tooltipCloseElement.style.display = 'none';
1297
1298
  }
1299
+ }, beforeClose: (args) => {
1300
+ if (this.isPopupScroll) {
1301
+ args.cancel = true;
1302
+ }
1298
1303
  }
1299
1304
  });
1300
1305
  tooltip.appendTo(element);
@@ -3349,7 +3354,9 @@ let QueryBuilder = class QueryBuilder extends Component {
3349
3354
  const isTemplate = (typeof itemData.template === 'string');
3350
3355
  if (rule.value && !isNullOrUndefined(format)) {
3351
3356
  selVal = (length > 1) ? rule.value[i] : rule.value;
3352
- selectedValue = this.parseDate(selVal, format) || new Date();
3357
+ if (selVal) {
3358
+ selectedValue = this.parseDate(selVal, format) || new Date();
3359
+ }
3353
3360
  }
3354
3361
  if (!isNullOrUndefined(itemData) && itemData.value && !isTemplate) {
3355
3362
  const parsedDate = this.parseDate(itemData.value.toString(), itemData.format);
@@ -4903,6 +4910,11 @@ let QueryBuilder = class QueryBuilder extends Component {
4903
4910
  groupRule = groupRule.properties;
4904
4911
  }
4905
4912
  const groupElem = closest(targetGroup, '.e-group-container');
4913
+ const cloneGroupElem = groupElem.cloneNode(true);
4914
+ let isRuleArea = false;
4915
+ if (closest(e.target, '.e-group-container') && closest(e.target, '.e-group-container').id === this.initialID + '_group0') {
4916
+ isRuleArea = true;
4917
+ }
4906
4918
  const nestGrpElem = groupElem.querySelectorAll('.e-group-container');
4907
4919
  nestGrpElem.forEach((ele) => {
4908
4920
  if (this.element.querySelector('#' + ele.id)) {
@@ -4920,11 +4932,23 @@ let QueryBuilder = class QueryBuilder extends Component {
4920
4932
  ruleIds.push(ruleElems[i].id.split(this.element.id + '_')[1]);
4921
4933
  }
4922
4934
  this.deleteRules(ruleIds);
4935
+ // Calculate index considering both groups and rules in the overall rules collection
4936
+ let overallDropIndex = 0;
4937
+ const ruleListElem = cloneGroupElem.querySelector('.e-rule-list');
4938
+ if (ruleListElem) {
4939
+ for (let j = 0; j < ruleListElem.children.length; j++) {
4940
+ const child = ruleListElem.children[j];
4941
+ if (child.classList.contains('e-drag-rule-top-line') || child.classList.contains('e-drag-rule-bottom-line')) {
4942
+ overallDropIndex = j;
4943
+ break;
4944
+ }
4945
+ }
4946
+ }
4923
4947
  if (targetGroup.classList.contains('e-drag-rule-top-line')) {
4924
- groupRule.rules.splice(dropInd, 0, rule);
4948
+ groupRule.rules.splice(isRuleArea ? overallDropIndex : dropInd, 0, rule);
4925
4949
  }
4926
4950
  else {
4927
- groupRule.rules.splice(dropInd + 1, 0, rule);
4951
+ groupRule.rules.splice(isRuleArea ? overallDropIndex + 1 : dropInd + 1, 0, rule);
4928
4952
  }
4929
4953
  groupRule.rules.forEach((rule) => {
4930
4954
  if (this.enableSeparateConnector) {
@@ -5123,12 +5147,24 @@ let QueryBuilder = class QueryBuilder extends Component {
5123
5147
  this.initWrapper();
5124
5148
  this.wireEvents();
5125
5149
  }
5150
+ scrollEventHandler(e) {
5151
+ const target = e.target;
5152
+ if (target && ((target.closest && target.closest('.e-popup')))) {
5153
+ this.isPopupScroll = true;
5154
+ }
5155
+ else {
5156
+ this.isPopupScroll = false;
5157
+ }
5158
+ }
5126
5159
  wireEvents() {
5127
5160
  const wrapper = this.getWrapper();
5128
5161
  EventHandler.add(wrapper, 'click', this.clickEventHandler, this);
5129
5162
  EventHandler.add(wrapper, 'focusout', this.focusEventHandler, this);
5130
5163
  EventHandler.add(wrapper, 'focusin', this.focusEventHandler, this);
5131
5164
  EventHandler.add(this.element, 'keydown', this.keyBoardHandler, this);
5165
+ this.boundScrollHandler = this.scrollEventHandler.bind(this);
5166
+ document.addEventListener('wheel', this.boundScrollHandler);
5167
+ document.addEventListener('scroll', this.boundScrollHandler);
5132
5168
  if (this.allowDragAndDrop) {
5133
5169
  EventHandler.add(document, 'keydown', this.keyBoardHandler, this);
5134
5170
  }
@@ -5141,6 +5177,9 @@ let QueryBuilder = class QueryBuilder extends Component {
5141
5177
  EventHandler.remove(wrapper, 'focusout', this.focusEventHandler);
5142
5178
  EventHandler.remove(wrapper, 'focusin', this.focusEventHandler);
5143
5179
  EventHandler.remove(this.element, 'keydown', this.keyBoardHandler);
5180
+ document.removeEventListener('wheel', this.boundScrollHandler);
5181
+ document.removeEventListener('scroll', this.boundScrollHandler);
5182
+ this.boundScrollHandler = null;
5144
5183
  EventHandler.remove(document, 'keydown', this.keyBoardHandler);
5145
5184
  if (this.boundResizeHandler) {
5146
5185
  window.removeEventListener('resize', this.boundResizeHandler);