@syncfusion/ej2-querybuilder 26.2.11 → 27.1.50

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 (131) hide show
  1. package/README.md +1 -1
  2. package/dist/ej2-querybuilder.min.js +2 -2
  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 +285 -259
  6. package/dist/es6/ej2-querybuilder.es2015.js.map +1 -1
  7. package/dist/es6/ej2-querybuilder.es5.js +286 -259
  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/package.json +12 -12
  13. package/src/query-builder/query-builder.js +285 -258
  14. package/styles/bootstrap-dark-lite.css +728 -0
  15. package/styles/bootstrap-dark-lite.scss +15 -0
  16. package/styles/bootstrap-dark.css +114 -170
  17. package/styles/bootstrap-dark.scss +1 -0
  18. package/styles/bootstrap-lite.css +713 -0
  19. package/styles/bootstrap-lite.scss +15 -0
  20. package/styles/bootstrap.css +106 -162
  21. package/styles/bootstrap.scss +1 -0
  22. package/styles/bootstrap4-lite.css +781 -0
  23. package/styles/bootstrap4-lite.scss +15 -0
  24. package/styles/bootstrap4.css +120 -231
  25. package/styles/bootstrap4.scss +1 -0
  26. package/styles/bootstrap5-dark-lite.css +764 -0
  27. package/styles/bootstrap5-dark-lite.scss +15 -0
  28. package/styles/bootstrap5-dark.css +109 -165
  29. package/styles/bootstrap5-dark.scss +1 -0
  30. package/styles/bootstrap5-lite.css +764 -0
  31. package/styles/bootstrap5-lite.scss +15 -0
  32. package/styles/bootstrap5.3-lite.css +775 -0
  33. package/styles/bootstrap5.3-lite.scss +15 -0
  34. package/styles/bootstrap5.3.css +959 -0
  35. package/styles/bootstrap5.3.scss +16 -0
  36. package/styles/bootstrap5.css +109 -165
  37. package/styles/bootstrap5.scss +1 -0
  38. package/styles/fabric-dark-lite.css +690 -0
  39. package/styles/fabric-dark-lite.scss +15 -0
  40. package/styles/fabric-dark.css +108 -156
  41. package/styles/fabric-dark.scss +1 -0
  42. package/styles/fabric-lite.css +679 -0
  43. package/styles/fabric-lite.scss +15 -0
  44. package/styles/fabric.css +102 -143
  45. package/styles/fabric.scss +1 -0
  46. package/styles/fluent-dark-lite.css +759 -0
  47. package/styles/fluent-dark-lite.scss +15 -0
  48. package/styles/fluent-dark.css +111 -159
  49. package/styles/fluent-dark.scss +1 -0
  50. package/styles/fluent-lite.css +759 -0
  51. package/styles/fluent-lite.scss +15 -0
  52. package/styles/fluent.css +111 -159
  53. package/styles/fluent.scss +1 -0
  54. package/styles/fluent2-lite.css +771 -0
  55. package/styles/fluent2-lite.scss +15 -0
  56. package/styles/fluent2.css +114 -151
  57. package/styles/fluent2.scss +1 -0
  58. package/styles/highcontrast-light-lite.css +773 -0
  59. package/styles/highcontrast-light-lite.scss +15 -0
  60. package/styles/highcontrast-light.css +101 -135
  61. package/styles/highcontrast-light.scss +1 -0
  62. package/styles/highcontrast-lite.css +801 -0
  63. package/styles/highcontrast-lite.scss +15 -0
  64. package/styles/highcontrast.css +122 -156
  65. package/styles/highcontrast.scss +1 -0
  66. package/styles/material-dark-lite.css +725 -0
  67. package/styles/material-dark-lite.scss +15 -0
  68. package/styles/material-dark.css +105 -131
  69. package/styles/material-dark.scss +1 -0
  70. package/styles/material-lite.css +731 -0
  71. package/styles/material-lite.scss +15 -0
  72. package/styles/material.css +105 -152
  73. package/styles/material.scss +1 -0
  74. package/styles/material3-dark-lite.css +738 -0
  75. package/styles/material3-dark-lite.scss +15 -0
  76. package/styles/material3-dark.css +101 -157
  77. package/styles/material3-dark.scss +1 -0
  78. package/styles/material3-lite.css +740 -0
  79. package/styles/material3-lite.scss +15 -0
  80. package/styles/material3.css +101 -157
  81. package/styles/material3.scss +1 -0
  82. package/styles/query-builder/_bigger.scss +208 -0
  83. package/styles/query-builder/_bootstrap5.3-definition.scss +1 -1
  84. package/styles/query-builder/_layout.scss +5 -210
  85. package/styles/query-builder/_theme.scss +10 -3
  86. package/styles/query-builder/bootstrap-dark.css +114 -170
  87. package/styles/query-builder/bootstrap-dark.scss +1 -0
  88. package/styles/query-builder/bootstrap.css +106 -162
  89. package/styles/query-builder/bootstrap.scss +1 -0
  90. package/styles/query-builder/bootstrap4.css +120 -231
  91. package/styles/query-builder/bootstrap4.scss +1 -0
  92. package/styles/query-builder/bootstrap5-dark.css +109 -165
  93. package/styles/query-builder/bootstrap5-dark.scss +1 -0
  94. package/styles/query-builder/bootstrap5.3.css +959 -0
  95. package/styles/query-builder/bootstrap5.3.scss +16 -0
  96. package/styles/query-builder/bootstrap5.css +109 -165
  97. package/styles/query-builder/bootstrap5.scss +1 -0
  98. package/styles/query-builder/fabric-dark.css +108 -156
  99. package/styles/query-builder/fabric-dark.scss +1 -0
  100. package/styles/query-builder/fabric.css +102 -143
  101. package/styles/query-builder/fabric.scss +1 -0
  102. package/styles/query-builder/fluent-dark.css +111 -159
  103. package/styles/query-builder/fluent-dark.scss +1 -0
  104. package/styles/query-builder/fluent.css +111 -159
  105. package/styles/query-builder/fluent.scss +1 -0
  106. package/styles/query-builder/fluent2.css +114 -151
  107. package/styles/query-builder/fluent2.scss +1 -0
  108. package/styles/query-builder/highcontrast-light.css +101 -135
  109. package/styles/query-builder/highcontrast-light.scss +1 -0
  110. package/styles/query-builder/highcontrast.css +122 -156
  111. package/styles/query-builder/highcontrast.scss +1 -0
  112. package/styles/query-builder/material-dark.css +105 -131
  113. package/styles/query-builder/material-dark.scss +1 -0
  114. package/styles/query-builder/material.css +105 -152
  115. package/styles/query-builder/material.scss +1 -0
  116. package/styles/query-builder/material3-dark.css +101 -157
  117. package/styles/query-builder/material3-dark.scss +1 -0
  118. package/styles/query-builder/material3.css +101 -157
  119. package/styles/query-builder/material3.scss +1 -0
  120. package/styles/query-builder/tailwind-dark.css +100 -137
  121. package/styles/query-builder/tailwind-dark.scss +1 -0
  122. package/styles/query-builder/tailwind.css +100 -137
  123. package/styles/query-builder/tailwind.scss +1 -0
  124. package/styles/tailwind-dark-lite.css +726 -0
  125. package/styles/tailwind-dark-lite.scss +15 -0
  126. package/styles/tailwind-dark.css +100 -137
  127. package/styles/tailwind-dark.scss +1 -0
  128. package/styles/tailwind-lite.css +726 -0
  129. package/styles/tailwind-lite.scss +15 -0
  130. package/styles/tailwind.css +100 -137
  131. package/styles/tailwind.scss +1 -0
@@ -1,4 +1,4 @@
1
- import { ChildProperty, Property, Collection, Component, closest, isNullOrUndefined, extend, remove, getComponent, removeClass, Animation, addClass, select, append, detach, rippleEffect, getInstance, getValue, getNumericObject, Browser, classList, Internationalization, getUniqueID, L10n, Draggable, compile, EventHandler, cldrData, Event, Complex, NotifyPropertyChanges } from '@syncfusion/ej2-base';
1
+ import { ChildProperty, Property, Collection, Component, getComponent, removeClass, isNullOrUndefined, Animation, extend, closest, addClass, select, append, detach, rippleEffect, getInstance, getValue, getNumericObject, Browser, classList, Internationalization, getUniqueID, L10n, Draggable, remove, compile, EventHandler, cldrData, Event, Complex, NotifyPropertyChanges } from '@syncfusion/ej2-base';
2
2
  import { Button, CheckBox, RadioButton } from '@syncfusion/ej2-buttons';
3
3
  import { MultiSelect, CheckBoxSelection, DropDownList, DropDownTree } from '@syncfusion/ej2-dropdowns';
4
4
  import { Query, DataManager, Deferred, Predicate } from '@syncfusion/ej2-data';
@@ -160,233 +160,6 @@ let QueryBuilder = class QueryBuilder extends Component {
160
160
  this.isMiddleGroup = false;
161
161
  this.cloneRuleBtnClick = false;
162
162
  this.isValueEmpty = false;
163
- this.dragStopHandler = (e) => {
164
- if (this.isDragEventPrevent) {
165
- return;
166
- }
167
- let targetGroup = closest(e.target, '.e-rule-container');
168
- if (isNullOrUndefined(targetGroup) && e.target.parentElement &&
169
- e.target.parentElement.classList.contains('e-btn-group') && this.enableSeparateConnector) {
170
- targetGroup = closest(e.target.parentElement.previousElementSibling, '.e-rule-container');
171
- }
172
- let isPreventelem = closest(e.helper, '.e-notallowedcur');
173
- let prevRule;
174
- if (!isPreventelem) {
175
- const targetGrp = closest(e.target, '.e-group-container');
176
- const dropEventArgs = { cancel: false, dropRuleID: targetGroup !== null ? targetGroup.id
177
- : targetGrp !== null ? targetGrp.id : null, dropGroupID: targetGrp !== null ? targetGrp.id : null };
178
- this.trigger('drop', dropEventArgs);
179
- if (dropEventArgs.cancel) {
180
- isPreventelem = true;
181
- }
182
- prevRule = this.getValidRules();
183
- }
184
- this.prvtEvtTgrDaD = true;
185
- const tgrt = this.enableSeparateConnector && e.target.parentElement &&
186
- e.target.parentElement.classList.contains('e-btn-group') ? e.target.parentElement.previousElementSibling : e.target;
187
- if (targetGroup && !isPreventelem) {
188
- const groupId = targetGroup.id.split(this.element.id + '_')[1].split('_')[0];
189
- if (this.draggable.currentStateTarget.parentElement.classList.contains('e-rule-field') ||
190
- this.draggable.currentStateTarget.parentElement.classList.contains('e-group-header')) {
191
- let rule;
192
- if (this.draggable.currentStateTarget.parentElement.classList.contains('e-group-header')) {
193
- rule = this.getGroup(this.draggedRule);
194
- this.deleteGroup(closest(this.draggedRule, '.e-group-container'));
195
- }
196
- else {
197
- rule = this.getRule(this.draggedRule);
198
- this.deleteRule(this.draggedRule);
199
- }
200
- let groupRule = extend([], this.getGroup(targetGroup), [], true);
201
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
202
- if (groupRule.properties) {
203
- groupRule = groupRule.properties;
204
- }
205
- const groupElem = closest(targetGroup, '.e-group-container');
206
- const nestGrpElem = groupElem.querySelectorAll('.e-group-container');
207
- nestGrpElem.forEach((ele) => {
208
- if (this.element.querySelector('#' + ele.id)) {
209
- this.deleteGroup(ele);
210
- }
211
- });
212
- const ruleElems = groupElem.querySelectorAll('.e-rule-container');
213
- const ruleIds = [];
214
- let dropInd;
215
- for (let i = 0; i < ruleElems.length; i++) {
216
- if (ruleElems[i].classList.contains('e-drag-rule-top-line') ||
217
- ruleElems[i].classList.contains('e-drag-rule-bottom-line')) {
218
- dropInd = i;
219
- }
220
- ruleIds.push(ruleElems[i].id.split(this.element.id + '_')[1]);
221
- }
222
- this.deleteRules(ruleIds);
223
- if (targetGroup.classList.contains('e-drag-rule-top-line')) {
224
- groupRule.rules.splice(dropInd, 0, rule);
225
- }
226
- else {
227
- groupRule.rules.splice(dropInd + 1, 0, rule);
228
- }
229
- groupRule.rules.forEach((rule) => {
230
- if (this.enableSeparateConnector) {
231
- if (!rule.rules) {
232
- this.addRules([rule], groupId);
233
- }
234
- else {
235
- this.addGroups([rule], groupId);
236
- }
237
- }
238
- else {
239
- if (rule.condition) {
240
- this.addGroups([rule], groupId);
241
- }
242
- else {
243
- this.addRules([rule], groupId);
244
- }
245
- }
246
- });
247
- }
248
- }
249
- else if (tgrt.classList.contains('e-rule-list') && tgrt.children.length === 0 && !isPreventelem) {
250
- const groupElem = closest(tgrt, '.e-group-container');
251
- const groupId = groupElem.id.split(this.element.id + '_')[1].split('_')[0];
252
- let rule;
253
- if (this.draggable.currentStateTarget.parentElement.classList.contains('e-group-header')) {
254
- rule = this.getGroup(this.draggedRule);
255
- this.deleteGroup(closest(this.draggedRule, '.e-group-container'));
256
- }
257
- else {
258
- rule = this.getRule(this.draggedRule);
259
- this.deleteRule(this.draggedRule);
260
- }
261
- if (this.enableSeparateConnector) {
262
- if (!rule.rules) {
263
- this.addRules([rule], groupId);
264
- }
265
- else {
266
- this.addGroups([rule], groupId);
267
- }
268
- }
269
- else {
270
- if (rule.condition) {
271
- this.addGroups([rule], groupId);
272
- }
273
- else {
274
- this.addRules([rule], groupId);
275
- }
276
- }
277
- }
278
- else if (tgrt.classList.contains('e-rule-list') && tgrt.children[0].classList.contains('e-group-container') && !isPreventelem) {
279
- const groupElem = closest(tgrt, '.e-group-container');
280
- const groupId = groupElem.id.split(this.element.id + '_')[1].split('_')[0];
281
- let rule;
282
- if (this.draggable.currentStateTarget.parentElement.classList.contains('e-group-header')) {
283
- rule = this.getGroup(this.draggedRule);
284
- this.deleteGroup(closest(this.draggedRule, '.e-group-container'));
285
- }
286
- else {
287
- rule = this.getRule(this.draggedRule);
288
- this.deleteRule(this.draggedRule);
289
- }
290
- let groupRule = extend([], this.getGroup(tgrt), [], true);
291
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
292
- if (groupRule.properties) {
293
- groupRule = groupRule.properties;
294
- }
295
- const groupElems = tgrt.querySelectorAll('.e-group-container');
296
- groupElems.forEach((ele) => {
297
- if (this.element.querySelector('#' + ele.id)) {
298
- this.deleteGroup(ele);
299
- }
300
- });
301
- const ruleElems = groupElem.querySelectorAll('.e-rule-container');
302
- ruleElems.forEach((ele) => {
303
- if (this.element.querySelector('#' + ele.id)) {
304
- this.deleteRule(ele);
305
- }
306
- });
307
- if (this.draggable.currentStateTarget.parentElement.classList.contains('e-group-header')) {
308
- this.addGroups([rule], groupId);
309
- }
310
- else {
311
- this.addRules([rule], groupId);
312
- }
313
- groupRule.rules.forEach((rule) => {
314
- if (this.enableSeparateConnector) {
315
- if (!rule.rules) {
316
- this.addRules([rule], groupId);
317
- }
318
- else {
319
- this.addGroups([rule], groupId);
320
- }
321
- }
322
- else {
323
- if (rule.condition) {
324
- this.addGroups([rule], groupId);
325
- }
326
- else {
327
- this.addRules([rule], groupId);
328
- }
329
- }
330
- });
331
- }
332
- else if ((closest(e.target, '.e-group-container') || e.target.classList.contains('e-group-container')) && !isPreventelem) {
333
- let rule;
334
- targetGroup = closest(e.target, '.e-group-container');
335
- if (!targetGroup && e.target.classList.contains('e-group-container')) {
336
- targetGroup = e.target;
337
- }
338
- const groupId = targetGroup.id.split(this.element.id + '_')[1].split('_')[0];
339
- if (groupId === 'group0') {
340
- if (this.draggable.currentStateTarget.parentElement.classList.contains('e-group-header')) {
341
- rule = this.getGroup(this.draggedRule);
342
- this.deleteGroup(closest(this.draggedRule, '.e-group-container'));
343
- }
344
- else {
345
- rule = this.getRule(this.draggedRule);
346
- this.deleteRule(this.draggedRule);
347
- }
348
- if (this.enableSeparateConnector) {
349
- if (!rule.rules) {
350
- this.addRules([rule], groupId);
351
- }
352
- else {
353
- this.addGroups([rule], groupId);
354
- }
355
- }
356
- else {
357
- if (rule.condition) {
358
- this.addGroups([rule], groupId);
359
- }
360
- else {
361
- this.addRules([rule], groupId);
362
- }
363
- }
364
- }
365
- }
366
- if (!isPreventelem) {
367
- this.trigger('ruleChange', { previousRule: prevRule, rule: this.getValidRules(), type: 'drag-and-drop' });
368
- }
369
- this.prvtEvtTgrDaD = false;
370
- document.body.classList.remove('e-prevent-select');
371
- let borderLineElem = this.element.querySelectorAll('.e-drag-rule-bottom-line');
372
- borderLineElem.forEach((ele) => {
373
- ele.classList.remove('e-drag-rule-bottom-line');
374
- });
375
- borderLineElem = this.element.querySelectorAll('.e-drag-rule-top-line');
376
- borderLineElem.forEach((ele) => {
377
- ele.classList.remove('e-drag-rule-top-line');
378
- });
379
- borderLineElem = this.element.querySelectorAll('.e-qb-dragging-rule');
380
- borderLineElem.forEach((ele) => {
381
- ele.classList.remove('e-qb-dragging-rule');
382
- });
383
- if (e.helper.classList.contains('e-cloneproperties') && document.querySelector('.' + e.helper.classList[0])) {
384
- remove(e.helper);
385
- }
386
- if (this.enableSeparateConnector) {
387
- this.refresh();
388
- }
389
- };
390
163
  MultiSelect.Inject(CheckBoxSelection);
391
164
  }
392
165
  getPersistData() {
@@ -886,7 +659,9 @@ let QueryBuilder = class QueryBuilder extends Component {
886
659
  elem = template;
887
660
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
888
661
  append(elem, ruleElem);
889
- ruleElem.children[ruleElem.children.length - 1].className += ' e-rule-field';
662
+ if (ruleElem.children.length) {
663
+ ruleElem.children[ruleElem.children.length - 1].className += ' e-rule-field';
664
+ }
890
665
  }
891
666
  else {
892
667
  template = this.ruleTemplateFn(args, this, 'Template', templateID)[0];
@@ -1174,11 +949,14 @@ let QueryBuilder = class QueryBuilder extends Component {
1174
949
  .filter((filteredChild) => filteredChild !== null);
1175
950
  this.changeDataSource(matchedDataSource);
1176
951
  setTimeout(() => {
1177
- proxy.ddTree.treeObj.expandAll();
952
+ if (!isNullOrUndefined(proxy.ddTree) && !isNullOrUndefined(proxy.ddTree.treeObj)) {
953
+ proxy.ddTree.treeObj.expandAll();
954
+ }
1178
955
  }, 100);
1179
956
  }
1180
957
  }
1181
958
  changeDataSource(data) {
959
+ this.updateDropdowntreeDS(data);
1182
960
  this.ddTree.treeObj.fields = {
1183
961
  dataSource: data,
1184
962
  value: 'field',
@@ -1212,7 +990,7 @@ let QueryBuilder = class QueryBuilder extends Component {
1212
990
  }
1213
991
  dropdownTreeClose() {
1214
992
  if (this.ddTree) {
1215
- this.changeDataSource(this.columns);
993
+ this.changeDataSource(extend([], this.columns, [], true));
1216
994
  }
1217
995
  this.ddTree = null;
1218
996
  }
@@ -1914,7 +1692,7 @@ let QueryBuilder = class QueryBuilder extends Component {
1914
1692
  if (this.headerTemplate) {
1915
1693
  args = { requestType: 'header-template-initialize', ruleID: groupElem.id,
1916
1694
  notCondition: this.enableNotCondition ? not : undefined,
1917
- condition: condition, rule: this.getRuleCollection(rule, true), groupID: groupID };
1695
+ condition: condition, rule: this.getRuleCollection(rule, false), groupID: groupID };
1918
1696
  this.trigger('actionBegin', args);
1919
1697
  if (this.enableSeparateConnector && groupElem.id.indexOf('rule') !== -1) {
1920
1698
  args.requestType = 'rule-template-create';
@@ -1950,6 +1728,17 @@ let QueryBuilder = class QueryBuilder extends Component {
1950
1728
  }
1951
1729
  else if (this.isVue3) {
1952
1730
  template = this.headerFn(args, this, groupElem.id, templateID);
1731
+ if (this.enableSeparateConnector && (isInitialRule || groupElem.id.indexOf('rule') !== -1)) {
1732
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
1733
+ for (let i = 0; i < template.length; i++) {
1734
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
1735
+ if (template[i].nodeName === 'DIV') {
1736
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
1737
+ template = template[i];
1738
+ break;
1739
+ }
1740
+ }
1741
+ }
1953
1742
  if (this.enableSeparateConnector && isInitialRule) {
1954
1743
  this.enableSeparateConnectorInitialRule(groupElem, template);
1955
1744
  }
@@ -2152,7 +1941,8 @@ let QueryBuilder = class QueryBuilder extends Component {
2152
1941
  changeValue(i, args) {
2153
1942
  let element;
2154
1943
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
2155
- if (this.isNumInput && typeof args.value === 'number') {
1944
+ if ((this.isNumInput && typeof args.value === 'number') || (args.type === 'input' && args.target && args.target.classList.contains('e-numerictextbox'))
1945
+ && (this.selectedColumn.validation.max !== Number.MAX_VALUE || this.selectedColumn.validation.min > 0)) {
2156
1946
  this.isNumInput = false;
2157
1947
  return;
2158
1948
  }
@@ -2165,7 +1955,7 @@ let QueryBuilder = class QueryBuilder extends Component {
2165
1955
  element = args.event.target;
2166
1956
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
2167
1957
  }
2168
- else if (args.type === 'input' && args.currentTarget) {
1958
+ else if (args.type === 'input' && args.target && args.target.classList.contains('e-numerictextbox')) {
2169
1959
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
2170
1960
  element = args.currentTarget;
2171
1961
  }
@@ -2227,7 +2017,7 @@ let QueryBuilder = class QueryBuilder extends Component {
2227
2017
  else {
2228
2018
  value = args.value;
2229
2019
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
2230
- if (args.type === 'input' && args.currentTarget) {
2020
+ if (args.type === 'input' && args.target && args.target.classList.contains('e-numerictextbox')) {
2231
2021
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
2232
2022
  value = Number(args.currentTarget.value);
2233
2023
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
@@ -2276,7 +2066,7 @@ let QueryBuilder = class QueryBuilder extends Component {
2276
2066
  this.isFieldClose = true;
2277
2067
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
2278
2068
  const ddl = getComponent(id, 'dropdownlist');
2279
- const item = ddl.popupObj.element.querySelector('.e-active');
2069
+ const item = ddl.popupObj && ddl.popupObj.element.querySelector('.e-active');
2280
2070
  const itemData = ddl.getItemData();
2281
2071
  ddl.value = itemData.value;
2282
2072
  const customArgs = { element: ddl.element, value: itemData.value, isInteracted: true,
@@ -2613,13 +2403,13 @@ let QueryBuilder = class QueryBuilder extends Component {
2613
2403
  }
2614
2404
  const height = (this.element.className.indexOf('e-device') > -1) ? '250px' : '200px';
2615
2405
  let operator;
2616
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
2617
- operatorList.forEach((obj) => {
2618
- if ('value' in obj && typeof obj.value === 'string' && obj.value.toLowerCase() === rule.operator.toLowerCase()) {
2619
- operator = obj.value;
2620
- }
2621
- });
2622
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
2406
+ if (rule.operator) {
2407
+ operatorList.forEach((obj) => {
2408
+ if ('value' in obj && typeof obj.value === 'string' && obj.value.toLowerCase() === rule.operator.toLowerCase()) {
2409
+ operator = obj.value;
2410
+ }
2411
+ });
2412
+ }
2623
2413
  let value = operator ? operator : operatorList[0].value;
2624
2414
  let ddlIdx = 0;
2625
2415
  if (!this.autoSelectOperator) {
@@ -2949,8 +2739,11 @@ let QueryBuilder = class QueryBuilder extends Component {
2949
2739
  closePopup(i, args) {
2950
2740
  const element = document.getElementById(args.popup.element.id.replace('_popup', ''));
2951
2741
  if (element) {
2952
- const value = getComponent(element, 'multiselect').value;
2953
- this.updateRules(element, value, i);
2742
+ const ms = getComponent(element, 'multiselect');
2743
+ if (ms) {
2744
+ const value = ms.value;
2745
+ this.updateRules(element, value, i);
2746
+ }
2954
2747
  }
2955
2748
  }
2956
2749
  processTemplate(target, itemData, rule, tempRule) {
@@ -4580,6 +4373,236 @@ let QueryBuilder = class QueryBuilder extends Component {
4580
4373
  this.trigger('drag', dragEventArgs);
4581
4374
  this.isDragEventPrevent = dragEventArgs.cancel;
4582
4375
  }
4376
+ dragStopHandler(e) {
4377
+ if (this.isDragEventPrevent) {
4378
+ return;
4379
+ }
4380
+ let targetGroup = closest(e.target, '.e-rule-container');
4381
+ if (isNullOrUndefined(targetGroup) && e.target.parentElement &&
4382
+ e.target.parentElement.classList.contains('e-btn-group') && this.enableSeparateConnector) {
4383
+ targetGroup = closest(e.target.parentElement.previousElementSibling, '.e-rule-container');
4384
+ }
4385
+ let isPreventelem;
4386
+ if (!isNullOrUndefined(e.helper)) {
4387
+ isPreventelem = closest(e.helper, '.e-notallowedcur');
4388
+ }
4389
+ let prevRule;
4390
+ if (!isPreventelem) {
4391
+ const targetGrp = closest(e.target, '.e-group-container');
4392
+ const dropEventArgs = { cancel: false, dropRuleID: targetGroup !== null ? targetGroup.id
4393
+ : targetGrp !== null ? targetGrp.id : null, dropGroupID: targetGrp !== null ? targetGrp.id : null };
4394
+ this.trigger('drop', dropEventArgs);
4395
+ if (dropEventArgs.cancel) {
4396
+ isPreventelem = true;
4397
+ }
4398
+ prevRule = this.getValidRules();
4399
+ }
4400
+ this.prvtEvtTgrDaD = true;
4401
+ const tgrt = this.enableSeparateConnector && e.target.parentElement &&
4402
+ e.target.parentElement.classList.contains('e-btn-group') ? e.target.parentElement.previousElementSibling : e.target;
4403
+ if (targetGroup && !isPreventelem) {
4404
+ const groupId = targetGroup.id.split(this.element.id + '_')[1].split('_')[0];
4405
+ if (this.draggable.currentStateTarget.parentElement.classList.contains('e-rule-field') ||
4406
+ this.draggable.currentStateTarget.parentElement.classList.contains('e-group-header')) {
4407
+ let rule;
4408
+ if (this.draggable.currentStateTarget.parentElement.classList.contains('e-group-header')) {
4409
+ rule = this.getGroup(this.draggedRule);
4410
+ this.deleteGroup(closest(this.draggedRule, '.e-group-container'));
4411
+ }
4412
+ else {
4413
+ rule = this.getRule(this.draggedRule);
4414
+ this.deleteRule(this.draggedRule);
4415
+ }
4416
+ let groupRule = extend([], this.getGroup(targetGroup), [], true);
4417
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
4418
+ if (groupRule.properties) {
4419
+ groupRule = groupRule.properties;
4420
+ }
4421
+ const groupElem = closest(targetGroup, '.e-group-container');
4422
+ const nestGrpElem = groupElem.querySelectorAll('.e-group-container');
4423
+ nestGrpElem.forEach((ele) => {
4424
+ if (this.element.querySelector('#' + ele.id)) {
4425
+ this.deleteGroup(ele);
4426
+ }
4427
+ });
4428
+ const ruleElems = groupElem.querySelectorAll('.e-rule-container');
4429
+ const ruleIds = [];
4430
+ let dropInd;
4431
+ for (let i = 0; i < ruleElems.length; i++) {
4432
+ if (ruleElems[i].classList.contains('e-drag-rule-top-line') ||
4433
+ ruleElems[i].classList.contains('e-drag-rule-bottom-line')) {
4434
+ dropInd = i;
4435
+ }
4436
+ ruleIds.push(ruleElems[i].id.split(this.element.id + '_')[1]);
4437
+ }
4438
+ this.deleteRules(ruleIds);
4439
+ if (targetGroup.classList.contains('e-drag-rule-top-line')) {
4440
+ groupRule.rules.splice(dropInd, 0, rule);
4441
+ }
4442
+ else {
4443
+ groupRule.rules.splice(dropInd + 1, 0, rule);
4444
+ }
4445
+ groupRule.rules.forEach((rule) => {
4446
+ if (this.enableSeparateConnector) {
4447
+ if (!rule.rules) {
4448
+ this.addRules([rule], groupId);
4449
+ }
4450
+ else {
4451
+ this.addGroups([rule], groupId);
4452
+ }
4453
+ }
4454
+ else {
4455
+ if (rule.condition) {
4456
+ this.addGroups([rule], groupId);
4457
+ }
4458
+ else {
4459
+ this.addRules([rule], groupId);
4460
+ }
4461
+ }
4462
+ });
4463
+ }
4464
+ }
4465
+ else if (tgrt.classList.contains('e-rule-list') && tgrt.children.length === 0 && !isPreventelem) {
4466
+ const groupElem = closest(tgrt, '.e-group-container');
4467
+ const groupId = groupElem.id.split(this.element.id + '_')[1].split('_')[0];
4468
+ let rule;
4469
+ if (this.draggable.currentStateTarget.parentElement.classList.contains('e-group-header')) {
4470
+ rule = this.getGroup(this.draggedRule);
4471
+ this.deleteGroup(closest(this.draggedRule, '.e-group-container'));
4472
+ }
4473
+ else {
4474
+ rule = this.getRule(this.draggedRule);
4475
+ this.deleteRule(this.draggedRule);
4476
+ }
4477
+ if (this.enableSeparateConnector) {
4478
+ if (!rule.rules) {
4479
+ this.addRules([rule], groupId);
4480
+ }
4481
+ else {
4482
+ this.addGroups([rule], groupId);
4483
+ }
4484
+ }
4485
+ else {
4486
+ if (rule.condition) {
4487
+ this.addGroups([rule], groupId);
4488
+ }
4489
+ else {
4490
+ this.addRules([rule], groupId);
4491
+ }
4492
+ }
4493
+ }
4494
+ else if (tgrt.classList.contains('e-rule-list') && tgrt.children[0].classList.contains('e-group-container') && !isPreventelem) {
4495
+ const groupElem = closest(tgrt, '.e-group-container');
4496
+ const groupId = groupElem.id.split(this.element.id + '_')[1].split('_')[0];
4497
+ let rule;
4498
+ if (this.draggable.currentStateTarget.parentElement.classList.contains('e-group-header')) {
4499
+ rule = this.getGroup(this.draggedRule);
4500
+ this.deleteGroup(closest(this.draggedRule, '.e-group-container'));
4501
+ }
4502
+ else {
4503
+ rule = this.getRule(this.draggedRule);
4504
+ this.deleteRule(this.draggedRule);
4505
+ }
4506
+ let groupRule = extend([], this.getGroup(tgrt), [], true);
4507
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
4508
+ if (groupRule.properties) {
4509
+ groupRule = groupRule.properties;
4510
+ }
4511
+ const groupElems = tgrt.querySelectorAll('.e-group-container');
4512
+ groupElems.forEach((ele) => {
4513
+ if (this.element.querySelector('#' + ele.id)) {
4514
+ this.deleteGroup(ele);
4515
+ }
4516
+ });
4517
+ const ruleElems = groupElem.querySelectorAll('.e-rule-container');
4518
+ ruleElems.forEach((ele) => {
4519
+ if (this.element.querySelector('#' + ele.id)) {
4520
+ this.deleteRule(ele);
4521
+ }
4522
+ });
4523
+ if (this.draggable.currentStateTarget.parentElement.classList.contains('e-group-header')) {
4524
+ this.addGroups([rule], groupId);
4525
+ }
4526
+ else {
4527
+ this.addRules([rule], groupId);
4528
+ }
4529
+ groupRule.rules.forEach((rule) => {
4530
+ if (this.enableSeparateConnector) {
4531
+ if (!rule.rules) {
4532
+ this.addRules([rule], groupId);
4533
+ }
4534
+ else {
4535
+ this.addGroups([rule], groupId);
4536
+ }
4537
+ }
4538
+ else {
4539
+ if (rule.condition) {
4540
+ this.addGroups([rule], groupId);
4541
+ }
4542
+ else {
4543
+ this.addRules([rule], groupId);
4544
+ }
4545
+ }
4546
+ });
4547
+ }
4548
+ else if ((closest(e.target, '.e-group-container') || e.target.classList.contains('e-group-container')) && !isPreventelem) {
4549
+ let rule;
4550
+ targetGroup = closest(e.target, '.e-group-container');
4551
+ if (!targetGroup && e.target.classList.contains('e-group-container')) {
4552
+ targetGroup = e.target;
4553
+ }
4554
+ const groupId = targetGroup.id.split(this.element.id + '_')[1].split('_')[0];
4555
+ if (groupId === 'group0') {
4556
+ if (this.draggable.currentStateTarget.parentElement.classList.contains('e-group-header')) {
4557
+ rule = this.getGroup(this.draggedRule);
4558
+ this.deleteGroup(closest(this.draggedRule, '.e-group-container'));
4559
+ }
4560
+ else {
4561
+ rule = this.getRule(this.draggedRule);
4562
+ this.deleteRule(this.draggedRule);
4563
+ }
4564
+ if (this.enableSeparateConnector) {
4565
+ if (!rule.rules) {
4566
+ this.addRules([rule], groupId);
4567
+ }
4568
+ else {
4569
+ this.addGroups([rule], groupId);
4570
+ }
4571
+ }
4572
+ else {
4573
+ if (rule.condition) {
4574
+ this.addGroups([rule], groupId);
4575
+ }
4576
+ else {
4577
+ this.addRules([rule], groupId);
4578
+ }
4579
+ }
4580
+ }
4581
+ }
4582
+ if (!isPreventelem) {
4583
+ this.trigger('ruleChange', { previousRule: prevRule, rule: this.getValidRules(), type: 'drag-and-drop' });
4584
+ }
4585
+ this.prvtEvtTgrDaD = false;
4586
+ document.body.classList.remove('e-prevent-select');
4587
+ let borderLineElem = this.element.querySelectorAll('.e-drag-rule-bottom-line');
4588
+ borderLineElem.forEach((ele) => {
4589
+ ele.classList.remove('e-drag-rule-bottom-line');
4590
+ });
4591
+ borderLineElem = this.element.querySelectorAll('.e-drag-rule-top-line');
4592
+ borderLineElem.forEach((ele) => {
4593
+ ele.classList.remove('e-drag-rule-top-line');
4594
+ });
4595
+ borderLineElem = this.element.querySelectorAll('.e-qb-dragging-rule');
4596
+ borderLineElem.forEach((ele) => {
4597
+ ele.classList.remove('e-qb-dragging-rule');
4598
+ });
4599
+ if (e.helper && e.helper.classList.contains('e-cloneproperties') && document.querySelector('.' + e.helper.classList[0])) {
4600
+ remove(e.helper);
4601
+ }
4602
+ if (this.enableSeparateConnector) {
4603
+ this.refresh();
4604
+ }
4605
+ }
4583
4606
  templateParser(template) {
4584
4607
  if (template) {
4585
4608
  try {
@@ -4653,10 +4676,14 @@ let QueryBuilder = class QueryBuilder extends Component {
4653
4676
  if (typeof target === 'string') {
4654
4677
  groupId = this.element.id + '_' + target;
4655
4678
  target = document.getElementById(groupId);
4679
+ groupId = groupId.replace(this.element.id + '_', '');
4656
4680
  }
4657
4681
  else {
4658
4682
  groupId = groupElem.id.replace(this.element.id + '_', '');
4659
4683
  }
4684
+ if (groupId === 'group0' || !target) {
4685
+ return;
4686
+ }
4660
4687
  const args = { groupID: groupId, cancel: false, type: 'deleteGroup' };
4661
4688
  if (!this.isImportRules && !this.prvtEvtTgrDaD) {
4662
4689
  this.trigger('beforeChange', args, (observedChangeArgs) => {
@@ -5021,7 +5048,7 @@ let QueryBuilder = class QueryBuilder extends Component {
5021
5048
  }
5022
5049
  }
5023
5050
  }
5024
- else if (!isNewRuleAdded) {
5051
+ else if (!isNewRuleAdded && !isNullOrUndefined(andElem)) {
5025
5052
  andElem.checked = false;
5026
5053
  andElem.disabled = true;
5027
5054
  orElem.checked = false;
@@ -5239,6 +5266,9 @@ let QueryBuilder = class QueryBuilder extends Component {
5239
5266
  const len = groupIdColl.length;
5240
5267
  let groupID;
5241
5268
  for (i = 0; i < len; i++) {
5269
+ if (groupIdColl[i] === 'group0') {
5270
+ continue;
5271
+ }
5242
5272
  groupID = this.element.id + '_' + groupIdColl[i];
5243
5273
  this.deleteGroup(document.getElementById(groupID));
5244
5274
  }
@@ -6359,9 +6389,13 @@ let QueryBuilder = class QueryBuilder extends Component {
6359
6389
  return matchValue.length + 2;
6360
6390
  }
6361
6391
  if (this.checkNumberLiteral(sqlString, sqlLocale)) {
6362
- matchValue = /^[0-9]+(\.[0-9]+)$/.exec(sqlString)[0];
6363
- this.parser.push(['Literal', matchValue]);
6364
- return matchValue.length;
6392
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
6393
+ const regExValue = /^[0-9]+(\.[0-9]+)$/.exec(sqlString);
6394
+ if (regExValue) {
6395
+ matchValue = regExValue[0];
6396
+ this.parser.push(['Literal', matchValue]);
6397
+ return matchValue.length;
6398
+ }
6365
6399
  }
6366
6400
  //String
6367
6401
  const singleString = this.getSingleQuoteString(sqlString);
@@ -6775,16 +6809,8 @@ let QueryBuilder = class QueryBuilder extends Component {
6775
6809
  */
6776
6810
  groupClone(target) {
6777
6811
  const groupElem = target.closest('.e-rule-list').closest('.e-group-container');
6778
- let targetGrpId;
6779
- let groupId;
6780
- if (typeof target === 'string') {
6781
- groupId = this.element.id + '_' + target;
6782
- target = document.getElementById(groupId);
6783
- }
6784
- else {
6785
- targetGrpId = target.id.replace(this.element.id + '_', '');
6786
- groupId = groupElem.id.replace(this.element.id + '_', '');
6787
- }
6812
+ const targetGrpId = target.id.replace(this.element.id + '_', '');
6813
+ const groupId = groupElem.id.replace(this.element.id + '_', '');
6788
6814
  const group = this.getGroup(targetGrpId);
6789
6815
  this.groupIndex = Array.prototype.indexOf.call(target.closest('.e-rule-list').children, target.closest('.e-group-container'));
6790
6816
  this.addGroups([{ 'condition': group.condition, 'not': group.not, 'rules': group.rules }], groupId);