@syncfusion/ej2-querybuilder 25.2.7 → 26.1.35

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 (109) hide show
  1. package/.eslintrc.json +3 -2
  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 +1326 -290
  6. package/dist/es6/ej2-querybuilder.es2015.js.map +1 -1
  7. package/dist/es6/ej2-querybuilder.es5.js +1319 -282
  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-model.d.ts +45 -6
  14. package/src/query-builder/query-builder.d.ts +102 -5
  15. package/src/query-builder/query-builder.js +1311 -262
  16. package/src/query-builder/query-library.js +2 -2
  17. package/styles/bootstrap-dark.css +194 -21
  18. package/styles/bootstrap-dark.scss +15 -1
  19. package/styles/bootstrap.css +194 -21
  20. package/styles/bootstrap.scss +15 -1
  21. package/styles/bootstrap4.css +198 -22
  22. package/styles/bootstrap4.scss +15 -1
  23. package/styles/bootstrap5-dark.css +198 -30
  24. package/styles/bootstrap5-dark.scss +15 -1
  25. package/styles/bootstrap5.css +198 -30
  26. package/styles/bootstrap5.scss +15 -1
  27. package/styles/fabric-dark.css +192 -20
  28. package/styles/fabric-dark.scss +15 -1
  29. package/styles/fabric.css +192 -20
  30. package/styles/fabric.scss +15 -1
  31. package/styles/fluent-dark.css +196 -28
  32. package/styles/fluent-dark.scss +15 -1
  33. package/styles/fluent.css +196 -28
  34. package/styles/fluent.scss +15 -1
  35. package/styles/fluent2.css +2052 -0
  36. package/styles/fluent2.scss +15 -0
  37. package/styles/highcontrast-light.css +195 -20
  38. package/styles/highcontrast-light.scss +15 -1
  39. package/styles/highcontrast.css +195 -20
  40. package/styles/highcontrast.scss +15 -1
  41. package/styles/material-dark.css +205 -24
  42. package/styles/material-dark.scss +15 -1
  43. package/styles/material.css +207 -24
  44. package/styles/material.scss +15 -1
  45. package/styles/material3-dark.css +211 -26
  46. package/styles/material3-dark.scss +15 -1
  47. package/styles/material3.css +211 -26
  48. package/styles/material3.scss +15 -1
  49. package/styles/query-builder/_bds-definition.scss +7 -1
  50. package/styles/query-builder/_bootstrap-dark-definition.scss +7 -0
  51. package/styles/query-builder/_bootstrap-definition.scss +7 -0
  52. package/styles/query-builder/_bootstrap4-definition.scss +7 -0
  53. package/styles/query-builder/_bootstrap5-definition.scss +7 -1
  54. package/styles/query-builder/_bootstrap5.3-definition.scss +114 -0
  55. package/styles/query-builder/_fabric-dark-definition.scss +7 -0
  56. package/styles/query-builder/_fabric-definition.scss +7 -0
  57. package/styles/query-builder/_fluent-definition.scss +7 -1
  58. package/styles/query-builder/_fluent2-definition.scss +114 -0
  59. package/styles/query-builder/_fusionnew-definition.scss +7 -1
  60. package/styles/query-builder/_highcontrast-definition.scss +7 -0
  61. package/styles/query-builder/_highcontrast-light-definition.scss +7 -0
  62. package/styles/query-builder/_layout.scss +275 -12
  63. package/styles/query-builder/_material-dark-definition.scss +7 -0
  64. package/styles/query-builder/_material-definition.scss +7 -0
  65. package/styles/query-builder/_material3-definition.scss +7 -1
  66. package/styles/query-builder/_tailwind-definition.scss +7 -1
  67. package/styles/query-builder/_theme.scss +34 -22
  68. package/styles/query-builder/bootstrap-dark.css +194 -21
  69. package/styles/query-builder/bootstrap.css +194 -21
  70. package/styles/query-builder/bootstrap4.css +198 -22
  71. package/styles/query-builder/bootstrap5-dark.css +198 -30
  72. package/styles/query-builder/bootstrap5.css +198 -30
  73. package/styles/query-builder/fabric-dark.css +192 -20
  74. package/styles/query-builder/fabric.css +192 -20
  75. package/styles/query-builder/fluent-dark.css +196 -28
  76. package/styles/query-builder/fluent.css +196 -28
  77. package/styles/query-builder/fluent2.css +2052 -0
  78. package/styles/query-builder/fluent2.scss +15 -0
  79. package/styles/query-builder/highcontrast-light.css +195 -20
  80. package/styles/query-builder/highcontrast.css +195 -20
  81. package/styles/query-builder/icons/_bds.scss +4 -0
  82. package/styles/query-builder/icons/_bootstrap-dark.scss +4 -0
  83. package/styles/query-builder/icons/_bootstrap.scss +4 -0
  84. package/styles/query-builder/icons/_bootstrap4.scss +4 -0
  85. package/styles/query-builder/icons/_bootstrap5.3.scss +11 -0
  86. package/styles/query-builder/icons/_bootstrap5.scss +4 -0
  87. package/styles/query-builder/icons/_fabric-dark.scss +4 -0
  88. package/styles/query-builder/icons/_fabric.scss +4 -0
  89. package/styles/query-builder/icons/_fluent.scss +4 -0
  90. package/styles/query-builder/icons/_fluent2.scss +11 -0
  91. package/styles/query-builder/icons/_fusionnew.scss +4 -0
  92. package/styles/query-builder/icons/_highcontrast-light.scss +4 -0
  93. package/styles/query-builder/icons/_highcontrast.scss +4 -0
  94. package/styles/query-builder/icons/_material-dark.scss +4 -0
  95. package/styles/query-builder/icons/_material.scss +4 -0
  96. package/styles/query-builder/icons/_material3.scss +4 -0
  97. package/styles/query-builder/icons/_tailwind-dark.scss +4 -0
  98. package/styles/query-builder/icons/_tailwind.scss +4 -0
  99. package/styles/query-builder/material-dark.css +205 -24
  100. package/styles/query-builder/material.css +207 -24
  101. package/styles/query-builder/material3-dark.css +211 -26
  102. package/styles/query-builder/material3.css +211 -26
  103. package/styles/query-builder/tailwind-dark.css +205 -24
  104. package/styles/query-builder/tailwind.css +205 -24
  105. package/styles/tailwind-dark.css +205 -24
  106. package/styles/tailwind-dark.scss +15 -1
  107. package/styles/tailwind.css +205 -24
  108. package/styles/tailwind.scss +15 -1
  109. package/CHANGELOG.md +0 -828
@@ -31,11 +31,11 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
31
31
  /**
32
32
  * Query Builder Source
33
33
  */
34
- import { Component, NotifyPropertyChanges, getComponent, Browser, compile, append } from '@syncfusion/ej2-base';
34
+ import { Component, NotifyPropertyChanges, getComponent, Browser, compile, append, Draggable, remove } from '@syncfusion/ej2-base';
35
35
  import { Property, ChildProperty, Complex, L10n, closest, extend, isNullOrUndefined, Collection, cldrData } from '@syncfusion/ej2-base';
36
36
  import { getInstance, addClass, removeClass, rippleEffect, detach, classList } from '@syncfusion/ej2-base';
37
37
  import { Internationalization, getUniqueID, select } from '@syncfusion/ej2-base';
38
- import { Button, RadioButton } from '@syncfusion/ej2-buttons';
38
+ import { Button, CheckBox, RadioButton } from '@syncfusion/ej2-buttons';
39
39
  import { DropDownList, CheckBoxSelection, DropDownTree } from '@syncfusion/ej2-dropdowns';
40
40
  import { MultiSelect } from '@syncfusion/ej2-dropdowns';
41
41
  import { Event, EventHandler, getValue, Animation } from '@syncfusion/ej2-base';
@@ -216,6 +216,233 @@ var QueryBuilder = /** @class */ (function (_super) {
216
216
  _this.cloneGrpBtnClick = false;
217
217
  _this.isMiddleGroup = false;
218
218
  _this.cloneRuleBtnClick = false;
219
+ _this.dragStopHandler = function (e) {
220
+ if (_this.isDragEventPrevent) {
221
+ return;
222
+ }
223
+ var targetGroup = closest(e.target, '.e-rule-container');
224
+ if (isNullOrUndefined(targetGroup) && e.target.parentElement &&
225
+ e.target.parentElement.classList.contains('e-btn-group') && _this.enableSeparateConnector) {
226
+ targetGroup = closest(e.target.parentElement.previousElementSibling, '.e-rule-container');
227
+ }
228
+ var isPreventelem = closest(e.helper, '.e-notallowedcur');
229
+ var prevRule;
230
+ if (!isPreventelem) {
231
+ var targetGrp = closest(e.target, '.e-group-container');
232
+ var dropEventArgs = { cancel: false, dropRuleID: targetGroup !== null ? targetGroup.id
233
+ : targetGrp !== null ? targetGrp.id : null, dropGroupID: targetGrp !== null ? targetGrp.id : null };
234
+ _this.trigger('drop', dropEventArgs);
235
+ if (dropEventArgs.cancel) {
236
+ isPreventelem = true;
237
+ }
238
+ prevRule = _this.getValidRules();
239
+ }
240
+ _this.prvtEvtTgrDaD = true;
241
+ var tgrt = _this.enableSeparateConnector && e.target.parentElement &&
242
+ e.target.parentElement.classList.contains('e-btn-group') ? e.target.parentElement.previousElementSibling : e.target;
243
+ if (targetGroup && !isPreventelem) {
244
+ var groupId_1 = targetGroup.id.split(_this.element.id + '_')[1].split('_')[0];
245
+ if (_this.draggable.currentStateTarget.parentElement.classList.contains('e-rule-field') ||
246
+ _this.draggable.currentStateTarget.parentElement.classList.contains('e-group-header')) {
247
+ var rule = void 0;
248
+ if (_this.draggable.currentStateTarget.parentElement.classList.contains('e-group-header')) {
249
+ rule = _this.getGroup(_this.draggedRule);
250
+ _this.deleteGroup(closest(_this.draggedRule, '.e-group-container'));
251
+ }
252
+ else {
253
+ rule = _this.getRule(_this.draggedRule);
254
+ _this.deleteRule(_this.draggedRule);
255
+ }
256
+ var groupRule = extend([], _this.getGroup(targetGroup), [], true);
257
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
258
+ if (groupRule.properties) {
259
+ groupRule = groupRule.properties;
260
+ }
261
+ var groupElem = closest(targetGroup, '.e-group-container');
262
+ var nestGrpElem = groupElem.querySelectorAll('.e-group-container');
263
+ nestGrpElem.forEach(function (ele) {
264
+ if (_this.element.querySelector('#' + ele.id)) {
265
+ _this.deleteGroup(ele);
266
+ }
267
+ });
268
+ var ruleElems = groupElem.querySelectorAll('.e-rule-container');
269
+ var ruleIds = [];
270
+ var dropInd = void 0;
271
+ for (var i = 0; i < ruleElems.length; i++) {
272
+ if (ruleElems[i].classList.contains('e-drag-rule-top-line') ||
273
+ ruleElems[i].classList.contains('e-drag-rule-bottom-line')) {
274
+ dropInd = i;
275
+ }
276
+ ruleIds.push(ruleElems[i].id.split(_this.element.id + '_')[1]);
277
+ }
278
+ _this.deleteRules(ruleIds);
279
+ if (targetGroup.classList.contains('e-drag-rule-top-line')) {
280
+ groupRule.rules.splice(dropInd, 0, rule);
281
+ }
282
+ else {
283
+ groupRule.rules.splice(dropInd + 1, 0, rule);
284
+ }
285
+ groupRule.rules.forEach(function (rule) {
286
+ if (_this.enableSeparateConnector) {
287
+ if (!rule.rules) {
288
+ _this.addRules([rule], groupId_1);
289
+ }
290
+ else {
291
+ _this.addGroups([rule], groupId_1);
292
+ }
293
+ }
294
+ else {
295
+ if (rule.condition) {
296
+ _this.addGroups([rule], groupId_1);
297
+ }
298
+ else {
299
+ _this.addRules([rule], groupId_1);
300
+ }
301
+ }
302
+ });
303
+ }
304
+ }
305
+ else if (tgrt.classList.contains('e-rule-list') && tgrt.children.length === 0 && !isPreventelem) {
306
+ var groupElem = closest(tgrt, '.e-group-container');
307
+ var groupId = groupElem.id.split(_this.element.id + '_')[1].split('_')[0];
308
+ var rule = void 0;
309
+ if (_this.draggable.currentStateTarget.parentElement.classList.contains('e-group-header')) {
310
+ rule = _this.getGroup(_this.draggedRule);
311
+ _this.deleteGroup(closest(_this.draggedRule, '.e-group-container'));
312
+ }
313
+ else {
314
+ rule = _this.getRule(_this.draggedRule);
315
+ _this.deleteRule(_this.draggedRule);
316
+ }
317
+ if (_this.enableSeparateConnector) {
318
+ if (!rule.rules) {
319
+ _this.addRules([rule], groupId);
320
+ }
321
+ else {
322
+ _this.addGroups([rule], groupId);
323
+ }
324
+ }
325
+ else {
326
+ if (rule.condition) {
327
+ _this.addGroups([rule], groupId);
328
+ }
329
+ else {
330
+ _this.addRules([rule], groupId);
331
+ }
332
+ }
333
+ }
334
+ else if (tgrt.classList.contains('e-rule-list') && tgrt.children[0].classList.contains('e-group-container') && !isPreventelem) {
335
+ var groupElem = closest(tgrt, '.e-group-container');
336
+ var groupId_2 = groupElem.id.split(_this.element.id + '_')[1].split('_')[0];
337
+ var rule = void 0;
338
+ if (_this.draggable.currentStateTarget.parentElement.classList.contains('e-group-header')) {
339
+ rule = _this.getGroup(_this.draggedRule);
340
+ _this.deleteGroup(closest(_this.draggedRule, '.e-group-container'));
341
+ }
342
+ else {
343
+ rule = _this.getRule(_this.draggedRule);
344
+ _this.deleteRule(_this.draggedRule);
345
+ }
346
+ var groupRule = extend([], _this.getGroup(tgrt), [], true);
347
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
348
+ if (groupRule.properties) {
349
+ groupRule = groupRule.properties;
350
+ }
351
+ var groupElems = tgrt.querySelectorAll('.e-group-container');
352
+ groupElems.forEach(function (ele) {
353
+ if (_this.element.querySelector('#' + ele.id)) {
354
+ _this.deleteGroup(ele);
355
+ }
356
+ });
357
+ var ruleElems = groupElem.querySelectorAll('.e-rule-container');
358
+ ruleElems.forEach(function (ele) {
359
+ if (_this.element.querySelector('#' + ele.id)) {
360
+ _this.deleteRule(ele);
361
+ }
362
+ });
363
+ if (_this.draggable.currentStateTarget.parentElement.classList.contains('e-group-header')) {
364
+ _this.addGroups([rule], groupId_2);
365
+ }
366
+ else {
367
+ _this.addRules([rule], groupId_2);
368
+ }
369
+ groupRule.rules.forEach(function (rule) {
370
+ if (_this.enableSeparateConnector) {
371
+ if (!rule.rules) {
372
+ _this.addRules([rule], groupId_2);
373
+ }
374
+ else {
375
+ _this.addGroups([rule], groupId_2);
376
+ }
377
+ }
378
+ else {
379
+ if (rule.condition) {
380
+ _this.addGroups([rule], groupId_2);
381
+ }
382
+ else {
383
+ _this.addRules([rule], groupId_2);
384
+ }
385
+ }
386
+ });
387
+ }
388
+ else if ((closest(e.target, '.e-group-container') || e.target.classList.contains('e-group-container')) && !isPreventelem) {
389
+ var rule = void 0;
390
+ targetGroup = closest(e.target, '.e-group-container');
391
+ if (!targetGroup && e.target.classList.contains('e-group-container')) {
392
+ targetGroup = e.target;
393
+ }
394
+ var groupId = targetGroup.id.split(_this.element.id + '_')[1].split('_')[0];
395
+ if (groupId === 'group0') {
396
+ if (_this.draggable.currentStateTarget.parentElement.classList.contains('e-group-header')) {
397
+ rule = _this.getGroup(_this.draggedRule);
398
+ _this.deleteGroup(closest(_this.draggedRule, '.e-group-container'));
399
+ }
400
+ else {
401
+ rule = _this.getRule(_this.draggedRule);
402
+ _this.deleteRule(_this.draggedRule);
403
+ }
404
+ if (_this.enableSeparateConnector) {
405
+ if (!rule.rules) {
406
+ _this.addRules([rule], groupId);
407
+ }
408
+ else {
409
+ _this.addGroups([rule], groupId);
410
+ }
411
+ }
412
+ else {
413
+ if (rule.condition) {
414
+ _this.addGroups([rule], groupId);
415
+ }
416
+ else {
417
+ _this.addRules([rule], groupId);
418
+ }
419
+ }
420
+ }
421
+ }
422
+ if (!isPreventelem) {
423
+ _this.trigger('ruleChange', { previousRule: prevRule, rule: _this.getValidRules(), type: 'drag-and-drop' });
424
+ }
425
+ _this.prvtEvtTgrDaD = false;
426
+ document.body.classList.remove('e-prevent-select');
427
+ var borderLineElem = _this.element.querySelectorAll('.e-drag-rule-bottom-line');
428
+ borderLineElem.forEach(function (ele) {
429
+ ele.classList.remove('e-drag-rule-bottom-line');
430
+ });
431
+ borderLineElem = _this.element.querySelectorAll('.e-drag-rule-top-line');
432
+ borderLineElem.forEach(function (ele) {
433
+ ele.classList.remove('e-drag-rule-top-line');
434
+ });
435
+ borderLineElem = _this.element.querySelectorAll('.e-qb-dragging-rule');
436
+ borderLineElem.forEach(function (ele) {
437
+ ele.classList.remove('e-qb-dragging-rule');
438
+ });
439
+ if (e.helper.classList.contains('e-cloneproperties') && document.querySelector('.' + e.helper.classList[0])) {
440
+ remove(e.helper);
441
+ }
442
+ if (_this.enableSeparateConnector) {
443
+ _this.refresh();
444
+ }
445
+ };
219
446
  MultiSelect.Inject(CheckBoxSelection);
220
447
  return _this;
221
448
  }
@@ -354,7 +581,7 @@ var QueryBuilder = /** @class */ (function (_super) {
354
581
  this.columns = cols;
355
582
  }
356
583
  }
357
- else if (this.columns.length) {
584
+ else if (this.columns && this.columns.length) {
358
585
  var columns = this.columns;
359
586
  for (var i = 0, len = columns.length; i < len; i++) {
360
587
  if (columns[i].category) {
@@ -469,6 +696,7 @@ var QueryBuilder = /** @class */ (function (_super) {
469
696
  txtareaElem.style.height = txtareaElem.scrollHeight + 'px';
470
697
  }
471
698
  if (target.tagName === 'BUTTON' && target.className.indexOf('e-qb-toggle') < 0) {
699
+ var animation = new Animation({ duration: 1000, delay: 0 });
472
700
  switch (true) {
473
701
  case target.className.indexOf('e-removerule') > -1:
474
702
  this.actionButton = target;
@@ -497,7 +725,6 @@ var QueryBuilder = /** @class */ (function (_super) {
497
725
  this.deleteGroup(closest(target, '.e-group-container'));
498
726
  break;
499
727
  case target.className.indexOf('e-edit-rule') > -1:
500
- var animation = new Animation({ duration: 1000, delay: 0 });
501
728
  animation.animate('.e-query-builder', { name: 'SlideLeftIn' });
502
729
  document.getElementById(this.element.id + '_summary_content').style.display = 'none';
503
730
  if (this.element.querySelectorAll('.e-group-container').length < 1) {
@@ -525,6 +752,9 @@ var QueryBuilder = /** @class */ (function (_super) {
525
752
  if (forIdValue) {
526
753
  targetValue = document.getElementById(forIdValue).getAttribute('value');
527
754
  }
755
+ else if (this.enableSeparateConnector) {
756
+ targetValue = target.textContent;
757
+ }
528
758
  groupID = element.id.replace(this.element.id + '_', '');
529
759
  var group = this.getGroup(groupID);
530
760
  var ariaChecked = void 0;
@@ -568,14 +798,55 @@ var QueryBuilder = /** @class */ (function (_super) {
568
798
  var groupID = element.id.replace(this.element.id + '_', '');
569
799
  var beforeRules = this.getValidRules(this.rule);
570
800
  var rule = this.getParentGroup(element);
571
- rule.condition = args.value;
572
- if (this.enableNotCondition) {
573
- rule.not = args.not;
801
+ if (this.enableSeparateConnector) {
802
+ if (isNullOrUndefined(closest(target, '.e-rule-container')) &&
803
+ element.classList.contains('e-group-container')) {
804
+ element = target.parentElement.previousElementSibling !== null ?
805
+ target.parentElement.previousElementSibling : element;
806
+ }
807
+ else {
808
+ element = closest(target, '.e-rule-container');
809
+ }
810
+ var id = element.id.replace(this.element.id + '_', '');
811
+ if (element.classList.contains('e-rule-container')) {
812
+ rule = this.getRule(element);
813
+ rule.condition = args.value;
814
+ }
815
+ else if (element.classList.contains('e-group-container')) {
816
+ rule = this.getGroup(element);
817
+ rule.condition = args.value;
818
+ }
819
+ if (this.enableNotCondition) {
820
+ rule.not = args.not;
821
+ }
822
+ if (!this.isImportRules) {
823
+ this.trigger('change', { groupID: groupID, ruleID: id, type: 'condition', value: rule.condition });
824
+ }
574
825
  }
575
- if (!this.isImportRules) {
576
- this.trigger('change', { groupID: groupID, type: 'condition', value: rule.condition });
826
+ else {
827
+ rule.condition = args.value;
828
+ if (this.enableNotCondition) {
829
+ rule.not = args.not;
830
+ }
831
+ if (!this.isImportRules) {
832
+ this.trigger('change', { groupID: groupID, type: 'condition', value: rule.condition });
833
+ }
577
834
  }
578
835
  this.filterRules(beforeRules, this.getValidRules(this.rule), 'condition');
836
+ if (this.enableSeparateConnector) {
837
+ var andElem = target.parentElement.querySelector('.e-btngroup-and');
838
+ var orElem = target.parentElement.querySelector('.e-btngroup-or');
839
+ if (andElem && orElem) {
840
+ if (args.value === 'and') {
841
+ andElem.checked = true;
842
+ orElem.checked = false;
843
+ }
844
+ else if (args.value === 'or') {
845
+ orElem.checked = true;
846
+ andElem.checked = false;
847
+ }
848
+ }
849
+ }
579
850
  }
580
851
  };
581
852
  QueryBuilder.prototype.selectBtn = function (target, event) {
@@ -618,7 +889,23 @@ var QueryBuilder = /** @class */ (function (_super) {
618
889
  ruleListElem.appendChild(ruleElem);
619
890
  }
620
891
  else {
621
- ruleListElem.insertBefore(ruleElem, ruleListElem.children[this.ruleIndex + 1]); // added clone rule to next position
892
+ if (this.enableSeparateConnector) {
893
+ var index = -1;
894
+ var tempRuleIndex = this.ruleIndex + 1;
895
+ for (var i = 0; i < tempRuleIndex; i++) {
896
+ if (i === ruleListElem.children.length) {
897
+ break;
898
+ }
899
+ if (ruleListElem.children[i].classList.contains('e-rule-container')) {
900
+ tempRuleIndex++;
901
+ index++;
902
+ }
903
+ }
904
+ ruleListElem.insertBefore(ruleElem, ruleListElem.children[this.ruleIndex + index + 1]); // added clone rule to next position
905
+ }
906
+ else {
907
+ ruleListElem.insertBefore(ruleElem, ruleListElem.children[this.ruleIndex + 1]); // added clone rule to next position
908
+ }
622
909
  }
623
910
  this.cloneRuleBtnClick = false;
624
911
  }
@@ -689,6 +976,9 @@ var QueryBuilder = /** @class */ (function (_super) {
689
976
  if (this.showButtons.ruleDelete) {
690
977
  removeClass(ruleElem.querySelectorAll('.e-lock-grp-btn'), 'e-button-hide');
691
978
  }
979
+ if (this.allowDragAndDrop) {
980
+ removeClass(ruleElem.querySelectorAll('.e-drag-qb-rule'), 'e-hidden');
981
+ }
692
982
  if (column && column.ruleTemplate && rule) {
693
983
  this.renderReactTemplates();
694
984
  }
@@ -700,7 +990,7 @@ var QueryBuilder = /** @class */ (function (_super) {
700
990
  return;
701
991
  }
702
992
  var args = { groupID: target.id.replace(this.element.id + '_', ''), cancel: false, type: 'insertRule' };
703
- if (!this.isImportRules && !this.isInitialLoad) {
993
+ if (!this.isImportRules && !this.isInitialLoad && !this.prvtEvtTgrDaD) {
704
994
  this.trigger('beforeChange', args, function (observedChangeArgs) {
705
995
  _this.addRuleSuccessCallBack(observedChangeArgs, target, rule, column, action, parentId, isRuleTemplate);
706
996
  });
@@ -755,20 +1045,54 @@ var QueryBuilder = /** @class */ (function (_super) {
755
1045
  else {
756
1046
  ruleElem.className = 'e-rule-container e-horizontal-mode';
757
1047
  }
758
- if (ruleElem.previousElementSibling && ruleElem.previousElementSibling.className.indexOf('e-rule-container') > -1) {
759
- if (ruleElem.className.indexOf('e-joined-rule') < 0) {
760
- ruleElem.className += ' e-joined-rule';
1048
+ var previousRuleElem = ruleElem.previousElementSibling;
1049
+ if (this.enableSeparateConnector) {
1050
+ var prevRule = void 0;
1051
+ var ruleContainer = void 0;
1052
+ if (previousRuleElem && previousRuleElem.classList.contains('e-group-container')) {
1053
+ ruleContainer = previousRuleElem.querySelectorAll('.e-rule-container');
1054
+ previousRuleElem = ruleContainer[ruleContainer.length - 1];
1055
+ }
1056
+ if (previousRuleElem && previousRuleElem.classList.contains('e-rule-container')) {
1057
+ prevRule = this.getRule(previousRuleElem);
1058
+ }
1059
+ if (this.headerTemplate && previousRuleElem && prevRule) {
1060
+ this.headerTemplateFn(previousRuleElem, false, prevRule.condition, prevRule, previousRuleElem.id);
1061
+ }
1062
+ else if (isNullOrUndefined(previousRuleElem) && ruleElem.id !== this.element.id + '_group0_rule0') {
1063
+ var group = ruleElem.closest('.e-group-container');
1064
+ if (group && group.previousElementSibling) {
1065
+ var prevElem = group.previousElementSibling;
1066
+ var prevRuleContainer = prevElem.querySelectorAll('.e-rule-container');
1067
+ if (prevElem.classList.contains('e-group-container')) {
1068
+ prevElem = prevRuleContainer[prevRuleContainer.length - 1];
1069
+ }
1070
+ if (prevElem.classList.contains('e-rule-container')) {
1071
+ var prevRule_1 = this.getRule(prevElem);
1072
+ this.headerTemplateFn(prevElem, false, prevRule_1.condition, prevRule_1, prevElem.id, true);
1073
+ }
1074
+ }
1075
+ else {
1076
+ this.headerTemplateFn(ruleElem, false, rule.condition, rule, ruleElem.id, true);
1077
+ }
761
1078
  }
762
- if (ruleElem.previousElementSibling.className.indexOf('e-prev-joined-rule') < 0) {
763
- ruleElem.previousElementSibling.className += ' e-prev-joined-rule';
1079
+ }
1080
+ else {
1081
+ if (previousRuleElem && previousRuleElem.className.indexOf('e-rule-container') > -1) {
1082
+ if (ruleElem.className.indexOf('e-joined-rule') < 0) {
1083
+ ruleElem.className += ' e-joined-rule';
1084
+ }
1085
+ if (previousRuleElem.className.indexOf('e-prev-joined-rule') < 0) {
1086
+ previousRuleElem.className += ' e-prev-joined-rule';
1087
+ }
764
1088
  }
765
1089
  }
766
- if (ruleElem.previousElementSibling && ruleElem.previousElementSibling.className.indexOf('e-group-container') > -1 &&
1090
+ if (previousRuleElem && previousRuleElem.className.indexOf('e-group-container') > -1 &&
767
1091
  ruleElem.className.indexOf('e-separate-rule') < 0) {
768
1092
  ruleElem.className += ' e-separate-rule';
769
1093
  }
770
1094
  if (!this.isImportRules) {
771
- this.updateAddedRule(trgt, rule, newRule, isRlTmp, pId);
1095
+ this.updateAddedRule(trgt, rule, newRule, isRlTmp, pId, this.enableSeparateConnector ? true : null);
772
1096
  }
773
1097
  if (!column || (column && !column.ruleTemplate) || !rule.field) {
774
1098
  if (this.fieldMode === 'Default') {
@@ -799,7 +1123,8 @@ var QueryBuilder = /** @class */ (function (_super) {
799
1123
  ddlVal = this.GetRootColumnName(rule.field);
800
1124
  }
801
1125
  else {
802
- ddlVal = this.isImportRules ? this.GetRootColumnName(rule.field) : dropDownList.value;
1126
+ ddlVal = this.isImportRules ? this.GetRootColumnName(rule.field) :
1127
+ dropDownList.value;
803
1128
  }
804
1129
  this.selectedColumn = dropDownList.getDataByValue(ddlVal);
805
1130
  if (Object.keys(rule).length) {
@@ -843,10 +1168,52 @@ var QueryBuilder = /** @class */ (function (_super) {
843
1168
  }
844
1169
  }
845
1170
  ruleID = ruleElem.id.replace(this.element.id + '_', '');
846
- if (!this.isImportRules) {
1171
+ if (rule && rule.isLocked) {
1172
+ var lockRuleTarget = ruleElem.querySelector('.e-lock-rule-btn');
1173
+ this.ruleLock(lockRuleTarget);
1174
+ }
1175
+ if (!this.isImportRules && !this.prvtEvtTgrDaD) {
847
1176
  this.trigger('change', { groupID: trgt.id.replace(this.element.id + '_', ''), ruleID: ruleID, type: 'insertRule' });
848
1177
  }
849
1178
  }
1179
+ if (this.enableSeparateConnector && isNullOrUndefined(rule.condition) && ruleID) {
1180
+ rule = this.getRule(ruleID);
1181
+ }
1182
+ if (this.enableSeparateConnector) {
1183
+ var prevElem = ruleElem.previousElementSibling;
1184
+ var ruleContainer = void 0;
1185
+ while (prevElem && !prevElem.classList.contains('e-rule-container')) {
1186
+ if (prevElem.classList.contains('e-group-container')) {
1187
+ ruleContainer = prevElem.querySelectorAll('.e-rule-container');
1188
+ prevElem = ruleContainer[ruleContainer.length - 1];
1189
+ break;
1190
+ }
1191
+ prevElem = prevElem.previousElementSibling;
1192
+ }
1193
+ if (this.headerTemplate && prevElem) {
1194
+ var prevRule = this.getRule(prevElem);
1195
+ var args_2 = { requestType: 'rule-template-create', ruleID: prevElem.id, condition: prevRule.condition,
1196
+ notCondition: this.enableNotCondition ? true : undefined };
1197
+ this.trigger('actionBegin', args_2);
1198
+ }
1199
+ else if (isNullOrUndefined(prevElem) && ruleElem.id !== this.element.id + '_group0_rule0') {
1200
+ var group = ruleElem.closest('.e-group-container');
1201
+ if (group && group.previousElementSibling && group.previousElementSibling.previousElementSibling) {
1202
+ var prevElem_1 = group.previousElementSibling.previousElementSibling;
1203
+ if (prevElem_1.classList.contains('e-group-container')) {
1204
+ var ruleContainer_1 = prevElem_1.querySelectorAll('.e-rule-container');
1205
+ prevElem_1 = ruleContainer_1[ruleContainer_1.length - 1];
1206
+ }
1207
+ if (prevElem_1.classList.contains('e-rule-container')) {
1208
+ var prevRule = this.getRule(prevElem_1);
1209
+ var args_3 = { requestType: 'rule-template-create', ruleID: prevElem_1.id,
1210
+ condition: prevRule.condition, notCondition: this.enableNotCondition ? true : undefined };
1211
+ this.trigger('actionBegin', args_3);
1212
+ }
1213
+ }
1214
+ }
1215
+ this.setMultiConnector(ruleElem);
1216
+ }
850
1217
  };
851
1218
  QueryBuilder.prototype.updateDropdowntreeDS = function (columns) {
852
1219
  for (var i = 0; i < columns.length; i++) {
@@ -856,7 +1223,7 @@ var QueryBuilder = /** @class */ (function (_super) {
856
1223
  }
857
1224
  }
858
1225
  };
859
- QueryBuilder.prototype.updateAddedRule = function (target, rule, newRule, isRuleTemplate, pId) {
1226
+ QueryBuilder.prototype.updateAddedRule = function (target, rule, newRule, isRuleTemplate, pId, isNewRuleAdded) {
860
1227
  var ruleElem;
861
1228
  var index = 0;
862
1229
  var groupElem;
@@ -867,7 +1234,12 @@ var QueryBuilder = /** @class */ (function (_super) {
867
1234
  rules = this.getParentGroup(groupElem);
868
1235
  while (ruleElem && ruleElem.previousElementSibling !== null) {
869
1236
  ruleElem = ruleElem.previousElementSibling;
870
- index++;
1237
+ var enableSeparateCondition = this.enableSeparateConnector && ((!this.headerTemplate && !ruleElem.classList.contains('e-btn-group')) ||
1238
+ (this.headerTemplate && (ruleElem.classList.contains('e-rule-container') ||
1239
+ ruleElem.classList.contains('e-group-container'))));
1240
+ if (!this.enableSeparateConnector || enableSeparateCondition) {
1241
+ index++;
1242
+ }
871
1243
  }
872
1244
  rules.rules[index] = rule;
873
1245
  }
@@ -885,6 +1257,9 @@ var QueryBuilder = /** @class */ (function (_super) {
885
1257
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
886
1258
  rules.rules[rules.rules.length - 1].custom = custom;
887
1259
  }
1260
+ if (this.enableSeparateConnector) {
1261
+ rules.rules[rules.rules.length - 1].condition = rule.condition ? rule.condition : newRule.condition;
1262
+ }
888
1263
  }
889
1264
  else {
890
1265
  rules.rules.splice(this.ruleIndex + 1, 0, {
@@ -894,6 +1269,9 @@ var QueryBuilder = /** @class */ (function (_super) {
894
1269
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
895
1270
  rules.rules[this.ruleIndex + 1].custom = custom;
896
1271
  }
1272
+ if (this.enableSeparateConnector) {
1273
+ rules.rules[this.ruleIndex + 1].condition = rule.condition ? rule.condition : newRule.condition;
1274
+ }
897
1275
  }
898
1276
  }
899
1277
  else {
@@ -907,7 +1285,7 @@ var QueryBuilder = /** @class */ (function (_super) {
907
1285
  rules.rules.push(newRule);
908
1286
  }
909
1287
  }
910
- this.disableRuleCondition(target, rules);
1288
+ this.disableRuleCondition(target, rules, isNewRuleAdded);
911
1289
  };
912
1290
  QueryBuilder.prototype.changeRuleTemplate = function (column, element) {
913
1291
  var operVal = this.selectedColumn.operators;
@@ -985,7 +1363,11 @@ var QueryBuilder = /** @class */ (function (_super) {
985
1363
  if (validateRule && validateRule.isRequired) {
986
1364
  while (indexElem && indexElem.previousElementSibling !== null) {
987
1365
  indexElem = indexElem.previousElementSibling;
988
- index++;
1366
+ var separateCondition = this.enableSeparateConnector && ((!this.headerTemplate && !indexElem.classList.contains('e-btn-group')) ||
1367
+ (this.headerTemplate && (indexElem.classList.contains('e-rule-container') || indexElem.classList.contains('e-group-container'))));
1368
+ if (!this.enableSeparateConnector || separateCondition) {
1369
+ index++;
1370
+ }
989
1371
  }
990
1372
  fieldElem = tempElem.querySelector('.e-rule-operator .e-control');
991
1373
  if (!rule.rules[index].operator) {
@@ -1062,9 +1444,10 @@ var QueryBuilder = /** @class */ (function (_super) {
1062
1444
  obj.level = this.levelColl[obj.groupElement.id].slice();
1063
1445
  return obj;
1064
1446
  };
1065
- QueryBuilder.prototype.groupTemplate = function () {
1447
+ QueryBuilder.prototype.groupTemplate = function (isConnector) {
1066
1448
  var glueElem;
1067
1449
  var inputElem;
1450
+ var dragClsName;
1068
1451
  var labelElem;
1069
1452
  var grpActElem;
1070
1453
  var groupBtn;
@@ -1077,9 +1460,27 @@ var QueryBuilder = /** @class */ (function (_super) {
1077
1460
  groupElem.appendChild(grpBodyElem);
1078
1461
  // create button group in OR and AND process
1079
1462
  if (!this.headerTemplate) {
1080
- glueElem = this.createElement('div', { attrs: { class: 'e-lib e-btn-group', role: 'group' } });
1463
+ if (this.allowDragAndDrop) {
1464
+ dragClsName = 'e-icons e-drag-qb-rule';
1465
+ }
1466
+ else {
1467
+ dragClsName = 'e-icons e-drag-qb-rule e-hidden';
1468
+ }
1469
+ var spanDragElement = this.createElement('span', { attrs: { class: dragClsName, 'aria-lable': 'drag handle',
1470
+ title: 'drag handle' } });
1471
+ groupHdrElem.appendChild(spanDragElement);
1472
+ var className = this.enableSeparateConnector && !isConnector ? 'e-lib e-btn-group e-qb-toggle-btn' : 'e-lib e-btn-group';
1473
+ glueElem = this.createElement('div', { attrs: { class: className, role: 'group' } });
1474
+ if (this.enableSeparateConnector) {
1475
+ glueElem.classList.add('e-multi-connector');
1476
+ }
1081
1477
  if (this.enableNotCondition) {
1082
- inputElem = this.createElement('button', { attrs: { type: 'button', class: 'e-qb-toggle' } });
1478
+ if (this.enableSeparateConnector) {
1479
+ inputElem = this.createElement('input', { attrs: { type: 'checkbox', class: 'e-qb-toggle' } });
1480
+ }
1481
+ else {
1482
+ inputElem = this.createElement('button', { attrs: { type: 'button', class: 'e-qb-toggle' } });
1483
+ }
1083
1484
  glueElem.appendChild(inputElem);
1084
1485
  }
1085
1486
  inputElem = this.createElement('input', { attrs: { type: 'radio', class: 'e-btngroup-and', value: 'AND' } });
@@ -1094,8 +1495,16 @@ var QueryBuilder = /** @class */ (function (_super) {
1094
1495
  glueElem.appendChild(labelElem);
1095
1496
  groupHdrElem.appendChild(glueElem);
1096
1497
  grpActElem = this.createElement('div', { attrs: { class: 'e-group-action' } });
1097
- groupBtn = this.createElement('button', { attrs: { type: 'button', class: 'e-add-btn' } });
1098
- grpActElem.appendChild(groupBtn);
1498
+ if (this.enableSeparateConnector) {
1499
+ groupBtn = this.createElement('button', { attrs: { type: 'button', class: 'e-add-condition-btn' } });
1500
+ grpActElem.appendChild(groupBtn);
1501
+ groupBtn = this.createElement('button', { attrs: { type: 'button', class: 'e-add-group-btn' } });
1502
+ grpActElem.appendChild(groupBtn);
1503
+ }
1504
+ else {
1505
+ groupBtn = this.createElement('button', { attrs: { type: 'button', class: 'e-add-btn' } });
1506
+ grpActElem.appendChild(groupBtn);
1507
+ }
1099
1508
  groupHdrElem.appendChild(grpActElem);
1100
1509
  }
1101
1510
  return groupElem;
@@ -1105,9 +1514,19 @@ var QueryBuilder = /** @class */ (function (_super) {
1105
1514
  var clsName;
1106
1515
  var cloneClsName;
1107
1516
  var lockClsName;
1517
+ var dragClsName;
1108
1518
  var ruleElem = this.createElement('div');
1109
1519
  var fieldElem = this.createElement('div', { attrs: { class: 'e-rule-field' } });
1110
1520
  tempElem = this.createElement('div', { attrs: { class: 'e-rule-filter' } });
1521
+ if (this.allowDragAndDrop) {
1522
+ dragClsName = 'e-icons e-drag-qb-rule';
1523
+ }
1524
+ else {
1525
+ dragClsName = 'e-icons e-drag-qb-rule e-hidden';
1526
+ }
1527
+ var spanDragElement = this.createElement('span', { attrs: { class: dragClsName, 'aria-lable': 'drag handle',
1528
+ title: 'drag handle' } });
1529
+ fieldElem.appendChild(spanDragElement);
1111
1530
  var filterElem = this.createElement('input', { attrs: { type: 'text', class: 'e-filter-input' } });
1112
1531
  tempElem.appendChild(filterElem);
1113
1532
  fieldElem.appendChild(tempElem);
@@ -1151,7 +1570,7 @@ var QueryBuilder = /** @class */ (function (_super) {
1151
1570
  QueryBuilder.prototype.addGroupElement = function (isGroup, target, condition, isBtnClick, not, isRoot, rule) {
1152
1571
  var _this = this;
1153
1572
  var args = { groupID: target.id.replace(this.element.id + '_', ''), cancel: false, type: 'insertGroup' };
1154
- if (!this.isImportRules && !this.isInitialLoad) {
1573
+ if (!this.isImportRules && !this.isInitialLoad && !this.prvtEvtTgrDaD) {
1155
1574
  this.trigger('beforeChange', args, function (observedChangeArgs) {
1156
1575
  _this.addGroupSuccess(observedChangeArgs, isGroup, target, condition, isBtnClick, not, isRoot, rule);
1157
1576
  });
@@ -1162,6 +1581,7 @@ var QueryBuilder = /** @class */ (function (_super) {
1162
1581
  }
1163
1582
  };
1164
1583
  QueryBuilder.prototype.addGroupSuccess = function (args, isGroup, eventTarget, condition, isBtnClick, not, isRoot, rule) {
1584
+ var _this = this;
1165
1585
  if (!args.cancel && (this.element.querySelectorAll('.e-group-container').length <= this.maxGroupCount)) {
1166
1586
  var target = eventTarget;
1167
1587
  var dltGroupBtn = void 0;
@@ -1172,8 +1592,17 @@ var QueryBuilder = /** @class */ (function (_super) {
1172
1592
  else {
1173
1593
  groupID = target.id;
1174
1594
  }
1595
+ if (this.enableSeparateConnector) {
1596
+ this.groupElem = this.groupTemplate();
1597
+ }
1175
1598
  var groupElem = this.groupElem.cloneNode(true);
1176
1599
  groupElem.setAttribute('id', this.element.id + '_group' + this.groupIdCounter);
1600
+ if (this.groupIdCounter === 0 && this.allowDragAndDrop && groupElem.querySelector('.e-drag-qb-rule')) {
1601
+ if (groupElem && groupElem.children[0]) {
1602
+ groupElem.children[0].classList.add('e-parent-header');
1603
+ }
1604
+ addClass([groupElem.querySelector('.e-drag-qb-rule')], 'e-hidden');
1605
+ }
1177
1606
  if (this.headerTemplate) {
1178
1607
  if (isRoot) {
1179
1608
  isGroup = false;
@@ -1226,7 +1655,25 @@ var QueryBuilder = /** @class */ (function (_super) {
1226
1655
  this.isLastGroup = true;
1227
1656
  }
1228
1657
  else {
1229
- childElems[this.groupIndex + 1].parentNode.insertBefore(groupElem, childElems[this.groupIndex + 1]); // clone the element to nxt element
1658
+ if (this.enableSeparateConnector) {
1659
+ var index = 0;
1660
+ var tempGroupIndex = this.groupIndex + 1;
1661
+ for (var i = 0; i < tempGroupIndex; i++) {
1662
+ if (childElems[i].classList.contains('e-rule-container')) {
1663
+ tempGroupIndex++;
1664
+ index++;
1665
+ }
1666
+ }
1667
+ if (index > 0) {
1668
+ index--;
1669
+ }
1670
+ var idx = this.groupIndex + index + 1;
1671
+ childElems[idx].parentNode.insertBefore(groupElem, childElems[idx]);
1672
+ }
1673
+ else {
1674
+ var idx = this.groupIndex + 1;
1675
+ childElems[idx].parentNode.insertBefore(groupElem, childElems[idx]);
1676
+ }
1230
1677
  this.isMiddleGroup = true;
1231
1678
  }
1232
1679
  }
@@ -1292,7 +1739,14 @@ var QueryBuilder = /** @class */ (function (_super) {
1292
1739
  if (this.enableNotCondition) {
1293
1740
  if (!this.headerTemplate) {
1294
1741
  var notElem = groupElem.querySelector('.e-qb-toggle');
1295
- var tglBtn = new Button({ content: this.l10n.getConstant('NOT'), cssClass: 'e-btn e-small' });
1742
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
1743
+ var tglBtn = void 0;
1744
+ if (this.enableSeparateConnector) {
1745
+ tglBtn = new CheckBox({ label: this.l10n.getConstant('NOT'), cssClass: 'e-qb-toggle' });
1746
+ }
1747
+ else {
1748
+ tglBtn = new Button({ content: this.l10n.getConstant('NOT'), cssClass: 'e-btn e-small' });
1749
+ }
1296
1750
  tglBtn.appendTo(notElem);
1297
1751
  groupElem.querySelector('.e-btngroup-and-lbl').classList.add('e-not');
1298
1752
  if (this.updatedRule && this.updatedRule.not) {
@@ -1300,67 +1754,218 @@ var QueryBuilder = /** @class */ (function (_super) {
1300
1754
  }
1301
1755
  }
1302
1756
  }
1757
+ if (this.enableSeparateConnector && !this.headerTemplate) {
1758
+ var andElem = groupElem.querySelector('.e-btngroup-and');
1759
+ var orElem = groupElem.querySelector('.e-btngroup-or');
1760
+ var btnGroup = groupElem.querySelector('.e-btn-group');
1761
+ for (var i = 0; i < btnGroup.childNodes.length; i++) {
1762
+ if (groupElem.querySelector('.e-btn-group').childNodes[i].textContent.toLowerCase() === 'not') {
1763
+ if (!this.enableNotCondition) {
1764
+ btnGroup.childNodes[i].style.display = 'none';
1765
+ }
1766
+ else {
1767
+ btnGroup.childNodes[i].classList.add('e-multiconnector');
1768
+ }
1769
+ }
1770
+ else {
1771
+ btnGroup.childNodes[i].style.display = 'none';
1772
+ }
1773
+ }
1774
+ var prevSibling = groupElem.previousElementSibling;
1775
+ if (prevSibling) {
1776
+ if (isNullOrUndefined(this.headerTemplate)) {
1777
+ groupElem.parentElement.insertBefore(this.groupTemplate(true).querySelector('.e-btn-group'), groupElem);
1778
+ var notElem = groupElem.previousElementSibling.childNodes[0];
1779
+ if (notElem.classList.contains('e-qb-toggle')) {
1780
+ notElem.style.display = 'none';
1781
+ }
1782
+ }
1783
+ if (!this.isImportRules) {
1784
+ var groupElement = groupElem.previousElementSibling;
1785
+ var newAndElem = groupElement.querySelector('.e-btngroup-and');
1786
+ var newOrElem = groupElement.querySelector('.e-btngroup-or');
1787
+ if (!andElem.checked && !orElem.checked) {
1788
+ var nextSibling = groupElem.nextElementSibling;
1789
+ if (nextSibling && nextSibling.classList.contains('e-btn-group')) {
1790
+ andElem = nextSibling.querySelector('.e-btngroup-and');
1791
+ orElem = nextSibling.querySelector('.e-btngroup-or');
1792
+ newAndElem.checked = andElem.checked;
1793
+ newOrElem.checked = orElem.checked;
1794
+ }
1795
+ }
1796
+ else if (this.enableSeparateConnector) {
1797
+ if (andElem.checked) {
1798
+ newAndElem.checked = true;
1799
+ }
1800
+ if (orElem.checked) {
1801
+ newOrElem.checked = true;
1802
+ }
1803
+ }
1804
+ }
1805
+ }
1806
+ }
1303
1807
  this.updatedRule = null;
1304
1808
  if (this.headerTemplate) {
1305
- var args_2 = { requestType: 'header-template-create', ruleID: groupElem.id, condition: condition,
1809
+ var args_4 = { requestType: 'header-template-create', ruleID: groupElem.id, condition: condition,
1306
1810
  notCondition: this.enableNotCondition ? not : undefined };
1307
- this.trigger('actionBegin', args_2);
1811
+ this.trigger('actionBegin', args_4);
1308
1812
  }
1309
1813
  else {
1310
- var groupBtn = groupElem.querySelector('.e-add-btn');
1311
- var btnObj = new DropDownButton({
1312
- items: this.items,
1313
- cssClass: 'e-round e-small e-caret-hide e-addrulegroup',
1314
- iconCss: 'e-icons e-add-icon',
1315
- beforeOpen: this.selectBtn.bind(this, groupBtn),
1316
- select: this.selectBtn.bind(this, groupBtn)
1317
- });
1318
- btnObj.appendTo(groupBtn);
1319
- groupBtn.setAttribute('title', this.l10n.getConstant('AddButton'));
1814
+ if (this.enableSeparateConnector) {
1815
+ var conditionBtn_1 = groupElem.querySelector('.e-add-condition-btn');
1816
+ var btnObj = new Button({ cssClass: this.element.id + '_addConditionbtn', content: this.l10n.getConstant('AddCondition') });
1817
+ btnObj.appendTo(conditionBtn_1);
1818
+ btnObj.element.onclick = function () {
1819
+ _this.addRuleElement(closest(conditionBtn_1, '.e-group-container'), {});
1820
+ };
1821
+ var groupBtn_1 = groupElem.querySelector('.e-add-group-btn');
1822
+ btnObj = new Button({ cssClass: this.element.id + '_addGroupbtn', content: this.l10n.getConstant('AddGroup') });
1823
+ btnObj.appendTo(groupBtn_1);
1824
+ btnObj.element.onclick = function () {
1825
+ _this.addGroupElement(true, closest(groupBtn_1, '.e-group-container'), '', true);
1826
+ };
1827
+ }
1828
+ else {
1829
+ var groupBtn = groupElem.querySelector('.e-add-btn');
1830
+ var btnObj = new DropDownButton({
1831
+ items: this.items,
1832
+ cssClass: 'e-round e-small e-caret-hide e-addrulegroup',
1833
+ iconCss: 'e-icons e-add-icon',
1834
+ beforeOpen: this.selectBtn.bind(this, groupBtn),
1835
+ select: this.selectBtn.bind(this, groupBtn)
1836
+ });
1837
+ btnObj.appendTo(groupBtn);
1838
+ groupBtn.setAttribute('title', this.l10n.getConstant('AddButton'));
1839
+ }
1320
1840
  }
1321
- if (!this.isImportRules) {
1841
+ if (!this.isImportRules && !this.prvtEvtTgrDaD) {
1322
1842
  var grpId = target.id.replace(this.element.id + '_', '');
1323
1843
  var chgrpId = groupElem.id.replace(this.element.id + '_', '');
1324
1844
  this.trigger('change', { groupID: grpId, type: 'insertGroup', childGroupID: chgrpId });
1325
1845
  }
1326
1846
  }
1327
1847
  };
1328
- QueryBuilder.prototype.headerTemplateFn = function (groupElem, not, condition, rule, groupID) {
1848
+ QueryBuilder.prototype.setMultiConnector = function (trgt) {
1849
+ if (this.enableSeparateConnector && !this.headerTemplate) {
1850
+ if (trgt.previousElementSibling && this.groupElem.querySelector('.e-btn-group')) {
1851
+ trgt.parentElement.insertBefore(this.groupTemplate(true).querySelector('.e-btn-group'), trgt);
1852
+ var notElem = trgt.previousElementSibling.childNodes[0];
1853
+ if (notElem.classList.contains('e-qb-toggle')) {
1854
+ notElem.style.display = 'none';
1855
+ }
1856
+ this.addHeaderDiv(trgt);
1857
+ }
1858
+ }
1859
+ };
1860
+ QueryBuilder.prototype.addHeaderDiv = function (elem) {
1861
+ var prevRule;
1862
+ var prevElem = elem.previousElementSibling.previousElementSibling;
1863
+ if (prevElem) {
1864
+ if (prevElem.id.indexOf('rule') > -1) {
1865
+ prevRule = this.getRule(prevElem);
1866
+ }
1867
+ else {
1868
+ prevRule = this.getGroup(prevElem);
1869
+ }
1870
+ if (isNullOrUndefined(prevRule.condition)) {
1871
+ prevRule.condition = 'and';
1872
+ }
1873
+ var orElem = elem.previousElementSibling.querySelector('.e-btngroup-or');
1874
+ var andElem = elem.previousElementSibling.querySelector('.e-btngroup-and');
1875
+ orElem.disabled = false;
1876
+ andElem.disabled = false;
1877
+ if (prevRule.condition === 'or') {
1878
+ orElem.checked = true;
1879
+ }
1880
+ else {
1881
+ andElem.checked = true;
1882
+ }
1883
+ }
1884
+ };
1885
+ QueryBuilder.prototype.headerTemplateFn = function (groupElem, not, condition, rule, groupID, isInitialRule) {
1329
1886
  var template;
1330
1887
  var templateID = this.element.id + '_header';
1331
1888
  var args;
1332
1889
  var groupHdr = groupElem.querySelector('.e-group-header');
1890
+ if (this.enableSeparateConnector && groupElem.id.indexOf('rule') !== -1) {
1891
+ groupHdr = groupElem;
1892
+ }
1333
1893
  if (this.headerTemplate) {
1334
1894
  args = { requestType: 'header-template-initialize', ruleID: groupElem.id,
1335
1895
  notCondition: this.enableNotCondition ? not : undefined,
1336
1896
  condition: condition, rule: this.getRuleCollection(rule, true), groupID: groupID };
1337
1897
  this.trigger('actionBegin', args);
1898
+ if (this.enableSeparateConnector && groupElem.id.indexOf('rule') !== -1) {
1899
+ args.requestType = 'rule-template-create';
1900
+ }
1338
1901
  this.headerFn = this.templateParser(this.headerTemplate);
1339
1902
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
1340
1903
  if (this.isReact) {
1341
1904
  template = this.headerFn(args, this, groupElem.id, templateID)[0];
1342
- groupHdr.appendChild(template);
1905
+ if (this.enableSeparateConnector && isInitialRule) {
1906
+ this.enableSeparateConnectorInitialRule(groupElem, template);
1907
+ }
1908
+ else if (this.enableSeparateConnector && groupElem.id.indexOf('rule') !== -1) {
1909
+ groupHdr.parentElement.insertBefore(template, groupHdr.nextElementSibling);
1910
+ }
1911
+ else {
1912
+ groupHdr.appendChild(template);
1913
+ }
1343
1914
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
1344
1915
  }
1345
1916
  else if (this.isAngular) {
1346
1917
  var templateColl = this.headerFn(args, this, groupElem.id, templateID);
1347
1918
  template = (templateColl[0].nodeType === 3) ? templateColl[1] : templateColl[0];
1348
- groupHdr.appendChild(template);
1919
+ if (this.enableSeparateConnector && isInitialRule) {
1920
+ this.enableSeparateConnectorInitialRule(groupElem, template);
1921
+ }
1922
+ else if (this.enableSeparateConnector && groupElem.id.indexOf('rule') !== -1) {
1923
+ groupHdr.parentElement.insertBefore(template, groupHdr.nextElementSibling);
1924
+ }
1925
+ else {
1926
+ groupHdr.appendChild(template);
1927
+ }
1349
1928
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
1350
1929
  }
1351
1930
  else if (this.isVue3) {
1352
1931
  template = this.headerFn(args, this, groupElem.id, templateID);
1353
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
1354
- append(template, groupHdr);
1932
+ if (this.enableSeparateConnector && isInitialRule) {
1933
+ this.enableSeparateConnectorInitialRule(groupElem, template);
1934
+ }
1935
+ else if (this.enableSeparateConnector && groupElem.id.indexOf('rule') !== -1) {
1936
+ groupHdr.parentElement.insertBefore(template, groupHdr.nextElementSibling);
1937
+ }
1938
+ else {
1939
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
1940
+ append(template, groupHdr);
1941
+ }
1355
1942
  }
1356
1943
  else {
1357
1944
  template = this.headerFn(args, this, 'Template', templateID)[0];
1358
- groupHdr.appendChild(template);
1945
+ if (this.enableSeparateConnector && isInitialRule) {
1946
+ this.enableSeparateConnectorInitialRule(groupElem, template);
1947
+ }
1948
+ else if (this.enableSeparateConnector && groupElem.id.indexOf('rule') !== -1) {
1949
+ groupHdr.parentElement.insertBefore(template, groupHdr.nextElementSibling);
1950
+ }
1951
+ else {
1952
+ groupHdr.appendChild(template);
1953
+ }
1359
1954
  }
1360
1955
  this.renderReactTemplates();
1361
1956
  }
1362
1957
  return groupElem;
1363
1958
  };
1959
+ QueryBuilder.prototype.enableSeparateConnectorInitialRule = function (groupElem, template) {
1960
+ var elem = groupElem.nextElementSibling ? groupElem.nextElementSibling : groupElem;
1961
+ var group = elem.closest('.e-group-container');
1962
+ if (!groupElem.nextElementSibling && group) {
1963
+ group = group.nextElementSibling ? group.nextElementSibling : group;
1964
+ }
1965
+ if (group) {
1966
+ group.parentElement.insertBefore(template, group);
1967
+ }
1968
+ };
1364
1969
  /**
1365
1970
  * Notify the changes to component.
1366
1971
  *
@@ -1379,12 +1984,29 @@ var QueryBuilder = /** @class */ (function (_super) {
1379
1984
  return;
1380
1985
  }
1381
1986
  if (type === 'condition') {
1382
- rules.condition = value;
1987
+ if (this.enableSeparateConnector) {
1988
+ ruleElement = element.parentElement.previousElementSibling;
1989
+ if (ruleElement && ruleElement.classList.contains('e-group-container')) {
1990
+ ruleElement = ruleElement.querySelectorAll('.e-rule-container')[ruleElement.querySelectorAll('.e-rule-container').length - 1];
1991
+ }
1992
+ if (ruleElement && ruleElement.classList.contains('e-rule-container')) {
1993
+ rules = this.getRule(ruleElement);
1994
+ }
1995
+ rules.condition = value;
1996
+ }
1997
+ else {
1998
+ rules.condition = value;
1999
+ }
1383
2000
  return;
1384
2001
  }
1385
2002
  while (ruleElement && ruleElement.previousElementSibling !== null) {
1386
2003
  ruleElement = ruleElement.previousElementSibling;
1387
- index++;
2004
+ if (!this.enableSeparateConnector || (this.enableSeparateConnector &&
2005
+ ((!this.headerTemplate && !ruleElement.classList.contains('e-btn-group')) ||
2006
+ this.headerTemplate && (ruleElement.classList.contains('e-rule-container') ||
2007
+ ruleElement.classList.contains('e-group-container'))))) {
2008
+ index++;
2009
+ }
1388
2010
  }
1389
2011
  var rule = rules.rules[index];
1390
2012
  var column = this.getColumn(rule.field);
@@ -1421,7 +2043,12 @@ var QueryBuilder = /** @class */ (function (_super) {
1421
2043
  }
1422
2044
  while (ruleElem && ruleElem.previousElementSibling !== null) {
1423
2045
  ruleElem = ruleElem.previousElementSibling;
1424
- index++;
2046
+ if (!this.enableSeparateConnector || (this.enableSeparateConnector &&
2047
+ ((!this.headerTemplate && !ruleElem.classList.contains('e-btn-group')) ||
2048
+ this.headerTemplate && (ruleElem.classList.contains('e-rule-container') ||
2049
+ ruleElem.classList.contains('e-group-container'))))) {
2050
+ index++;
2051
+ }
1425
2052
  }
1426
2053
  var rule = rules.rules[index];
1427
2054
  if (type === 'field') {
@@ -1478,12 +2105,14 @@ var QueryBuilder = /** @class */ (function (_super) {
1478
2105
  else {
1479
2106
  ruleElement.className = 'e-rule-container e-horizontal-mode';
1480
2107
  }
1481
- if (ruleElement.previousElementSibling && ruleElement.previousElementSibling.className.indexOf('e-rule-container') > -1) {
1482
- if (ruleElement.className.indexOf('e-joined-rule') < 0) {
1483
- ruleElement.className += ' e-joined-rule';
1484
- }
1485
- if (ruleElement.previousElementSibling.className.indexOf('e-prev-joined-rule') < 0) {
1486
- ruleElement.previousElementSibling.className += ' e-prev-joined-rule';
2108
+ if (!this.enableSeparateConnector) {
2109
+ if (ruleElement.previousElementSibling && ruleElement.previousElementSibling.className.indexOf('e-rule-container') > -1) {
2110
+ if (ruleElement.className.indexOf('e-joined-rule') < 0) {
2111
+ ruleElement.className += ' e-joined-rule';
2112
+ }
2113
+ if (ruleElement.previousElementSibling.className.indexOf('e-prev-joined-rule') < 0) {
2114
+ ruleElement.previousElementSibling.className += ' e-prev-joined-rule';
2115
+ }
1487
2116
  }
1488
2117
  }
1489
2118
  if (ruleElement.previousElementSibling && ruleElement.previousElementSibling.className.indexOf('e-group-container') > -1 &&
@@ -1548,8 +2177,7 @@ var QueryBuilder = /** @class */ (function (_super) {
1548
2177
  var value;
1549
2178
  var rbValue;
1550
2179
  if (element.className.indexOf('e-radio') > -1) {
1551
- // eslint-disable-next-line
1552
- rbValue = parseInt(element.id.split('valuekey')[1], 0);
2180
+ rbValue = parseInt(element.id.split('valuekey')[1], 10);
1553
2181
  if (this.fieldMode === 'Default') {
1554
2182
  dropDownObj = getComponent(closest(element, '.e-rule-container').querySelector('.e-filter-input'), 'dropdownlist');
1555
2183
  this.selectedColumn = dropDownObj.getDataByValue(dropDownObj.value);
@@ -1579,7 +2207,9 @@ var QueryBuilder = /** @class */ (function (_super) {
1579
2207
  if (args.type === 'input' && args.currentTarget) {
1580
2208
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
1581
2209
  value = Number(args.currentTarget.value);
1582
- var numericTextBoxObj = getInstance(args.currentTarget, NumericTextBox);
2210
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
2211
+ var elem = args.currentTarget;
2212
+ var numericTextBoxObj = getInstance(elem, NumericTextBox);
1583
2213
  numericTextBoxObj.value = value;
1584
2214
  this.isNumInput = true;
1585
2215
  }
@@ -1688,7 +2318,12 @@ var QueryBuilder = /** @class */ (function (_super) {
1688
2318
  var index = 0;
1689
2319
  while (ruleElem && ruleElem.previousElementSibling !== null) {
1690
2320
  ruleElem = ruleElem.previousElementSibling;
1691
- index++;
2321
+ if (!this.enableSeparateConnector || (this.enableSeparateConnector &&
2322
+ ((!this.headerTemplate && !ruleElem.classList.contains('e-btn-group')) ||
2323
+ this.headerTemplate && (ruleElem.classList.contains('e-rule-container') ||
2324
+ ruleElem.classList.contains('e-group-container'))))) {
2325
+ index++;
2326
+ }
1692
2327
  }
1693
2328
  rules.rules[index].value = '';
1694
2329
  this.changeRule(rules.rules[index], args);
@@ -1734,7 +2369,7 @@ var QueryBuilder = /** @class */ (function (_super) {
1734
2369
  var ruleID = ruleElem.id.replace(this.element.id + '_', '');
1735
2370
  var eventsArgs = { groupID: grID, ruleID: ruleID, selectedField: this.fieldMode === 'DropdownTree' ?
1736
2371
  dl.value[0] : dl.value, cancel: false, type: 'field' };
1737
- if (!this.isImportRules) {
2372
+ if (!this.isImportRules && !this.prvtEvtTgrDaD) {
1738
2373
  this.trigger('beforeChange', eventsArgs, function (observedChangeArgs) {
1739
2374
  _this.fieldChangeSuccess(observedChangeArgs, tmpRl, flt, rl, dArg);
1740
2375
  });
@@ -1905,7 +2540,7 @@ var QueryBuilder = /** @class */ (function (_super) {
1905
2540
  if (valElem && this.getColumn(rule.field).template) {
1906
2541
  filterElem = operatorElem.previousElementSibling;
1907
2542
  }
1908
- if (valElem.children.length == 0) {
2543
+ if (valElem.children.length === 0) {
1909
2544
  filterElem = operatorElem.previousElementSibling;
1910
2545
  }
1911
2546
  this.changeRuleValues(filterElem, rule, tempRule, ddlArgs);
@@ -1959,7 +2594,7 @@ var QueryBuilder = /** @class */ (function (_super) {
1959
2594
  value = '';
1960
2595
  ddlIdx = -1;
1961
2596
  }
1962
- if (this.isImportRules || (this.ruleIndex > -1 || this.groupIndex > -1)) {
2597
+ if (this.isImportRules || (this.ruleIndex > -1 || this.groupIndex > -1 || this.prvtEvtTgrDaD)) {
1963
2598
  value = rule ? (rule.operator ? rule.operator : value) : value;
1964
2599
  }
1965
2600
  var ddlOperator = void 0;
@@ -2344,14 +2979,15 @@ var QueryBuilder = /** @class */ (function (_super) {
2344
2979
  var columnData = this.getItemData(parentId);
2345
2980
  var selectedValue;
2346
2981
  var isTemplate = (typeof columnData.template === 'string');
2347
- if (this.isImportRules || this.ruleIndex > -1 || this.groupIndex > -1 || this.isPublic || isTemplate || rule.value != '') {
2982
+ if (this.isImportRules || this.ruleIndex > -1 || this.groupIndex > -1 || this.isPublic || isTemplate || rule.value !== '') {
2348
2983
  selectedValue = rule.value;
2349
2984
  }
2350
2985
  else {
2351
2986
  selectedValue = this.setDefaultValue(parentId, false, false);
2352
2987
  }
2353
2988
  if ((operator === 'in' || operator === 'notin') && (this.dataColl.length || columnData.values)) {
2354
- selectedVal = (this.isImportRules || this.ruleIndex > -1 || this.groupIndex > -1) ? rule.value : this.setDefaultValue(parentId, true, false);
2989
+ selectedVal = (this.isImportRules || this.ruleIndex > -1 || this.groupIndex > -1 || this.isPublic) ? rule.value :
2990
+ this.setDefaultValue(parentId, true, false);
2355
2991
  this.renderMultiSelect(columnData, parentId, idx, selectedVal, columnData.values);
2356
2992
  if (this.displayMode === 'Vertical' || this.element.className.indexOf('e-device') > -1) {
2357
2993
  ruleValElem.style.width = '100%';
@@ -2363,7 +2999,8 @@ var QueryBuilder = /** @class */ (function (_super) {
2363
2999
  }
2364
3000
  else {
2365
3001
  if (operator === 'in' || operator === 'notin') {
2366
- selectedVal = (this.isImportRules || this.ruleIndex > -1 || this.groupIndex > -1) ? rule.value : this.setDefaultValue(parentId, true, false);
3002
+ selectedVal = (this.isImportRules || this.ruleIndex > -1 || this.groupIndex > -1) ? rule.value :
3003
+ this.setDefaultValue(parentId, true, false);
2367
3004
  selectedValue = selectedVal.join(',');
2368
3005
  }
2369
3006
  var txtBox = void 0;
@@ -2383,9 +3020,11 @@ var QueryBuilder = /** @class */ (function (_super) {
2383
3020
  QueryBuilder.prototype.renderNumberValue = function (parentId, rule, operator, idx, ruleValElem, itemData, length) {
2384
3021
  var columnData = this.getItemData(parentId);
2385
3022
  var isTemplate = (typeof columnData.template === 'string');
2386
- var selectedVal = (this.isImportRules || this.ruleIndex > -1 || this.groupIndex > -1 || this.isPublic || isTemplate || typeof rule.value === 'number') ? rule.value : this.setDefaultValue(parentId, false, true);
3023
+ var selectedVal = (this.isImportRules || this.ruleIndex > -1 || this.groupIndex > -1 || this.isPublic || isTemplate ||
3024
+ typeof rule.value === 'number') ? rule.value : this.setDefaultValue(parentId, false, true);
2387
3025
  if ((operator === 'in' || operator === 'notin') && (this.dataColl.length || columnData.values)) {
2388
- selectedVal = (this.isImportRules || this.ruleIndex > -1 || this.groupIndex > -1) ? rule.value : this.setDefaultValue(parentId, true, false);
3026
+ selectedVal = (this.isImportRules || this.ruleIndex > -1 || this.groupIndex > -1 || this.isPublic) ? rule.value :
3027
+ this.setDefaultValue(parentId, true, false);
2389
3028
  this.renderMultiSelect(columnData, parentId, idx, selectedVal, columnData.values);
2390
3029
  if (this.element.className.indexOf('e-device') > -1 || this.displayMode === 'Vertical') {
2391
3030
  ruleValElem.style.width = '100%';
@@ -2396,7 +3035,8 @@ var QueryBuilder = /** @class */ (function (_super) {
2396
3035
  }
2397
3036
  }
2398
3037
  else if (operator === 'in' || operator === 'notin') {
2399
- selectedVal = (this.isImportRules || this.ruleIndex > -1 || this.groupIndex > -1) ? rule.value : this.setDefaultValue(parentId, true, false);
3038
+ selectedVal = (this.isImportRules || this.ruleIndex > -1 || this.groupIndex > -1) ? rule.value :
3039
+ this.setDefaultValue(parentId, true, false);
2400
3040
  var selVal = selectedVal.join(',');
2401
3041
  var txtInp = void 0;
2402
3042
  txtInp = {
@@ -2858,10 +3498,14 @@ var QueryBuilder = /** @class */ (function (_super) {
2858
3498
  }
2859
3499
  var controlName = element.className.split(' e-')[idx];
2860
3500
  var i = parseInt(element.id.slice(-1), 2);
3501
+ var column;
3502
+ var format;
3503
+ var selectedDate;
3504
+ var value;
3505
+ var radioBtnObj;
2861
3506
  switch (controlName) {
2862
3507
  case 'checkbox':
2863
- // eslint-disable-next-line
2864
- var value = getComponent(element, controlName).value;
3508
+ value = getComponent(element, controlName).value;
2865
3509
  rule.value = (value !== '') ? value : undefined;
2866
3510
  break;
2867
3511
  case 'textbox':
@@ -2871,8 +3515,7 @@ var QueryBuilder = /** @class */ (function (_super) {
2871
3515
  rule.value = getComponent(element, controlName).value;
2872
3516
  break;
2873
3517
  case 'radio':
2874
- // eslint-disable-next-line
2875
- var radioBtnObj = getComponent(element, controlName);
3518
+ radioBtnObj = getComponent(element, controlName);
2876
3519
  if (radioBtnObj.checked) {
2877
3520
  if (typeof rule.value === 'boolean') {
2878
3521
  rule.value = radioBtnObj.value === 'true';
@@ -2900,12 +3543,9 @@ var QueryBuilder = /** @class */ (function (_super) {
2900
3543
  }
2901
3544
  break;
2902
3545
  case 'datepicker':
2903
- // eslint-disable-next-line
2904
- var column = this.getColumn(rule.field);
2905
- // eslint-disable-next-line
2906
- var format = this.getFormat(column.format);
2907
- // eslint-disable-next-line
2908
- var selectedDate = getComponent(element, controlName).value;
3546
+ column = this.getColumn(rule.field);
3547
+ format = this.getFormat(column.format);
3548
+ selectedDate = getComponent(element, controlName).value;
2909
3549
  if (rule.operator.indexOf('between') > -1) {
2910
3550
  if (typeof rule.value === 'string') {
2911
3551
  rule.value = [];
@@ -2938,7 +3578,12 @@ var QueryBuilder = /** @class */ (function (_super) {
2938
3578
  var beforeRules = this.getValidRules(this.rule);
2939
3579
  while (ruleElem && ruleElem.previousElementSibling !== null) {
2940
3580
  ruleElem = ruleElem.previousElementSibling;
2941
- index++;
3581
+ if (!this.enableSeparateConnector || (this.enableSeparateConnector &&
3582
+ ((!this.headerTemplate && !ruleElem.classList.contains('e-btn-group')) ||
3583
+ this.headerTemplate && (ruleElem.classList.contains('e-rule-container') ||
3584
+ ruleElem.classList.contains('e-group-container'))))) {
3585
+ index++;
3586
+ }
2942
3587
  }
2943
3588
  var operator = rule.rules[index].operator ? rule.rules[index].operator.toString() : '';
2944
3589
  ruleElem = closest(target, '.e-rule-container');
@@ -2987,7 +3632,7 @@ var QueryBuilder = /** @class */ (function (_super) {
2987
3632
  }
2988
3633
  this.updateValues(elementCln[i_1], rule.rules[index]);
2989
3634
  }
2990
- if (!this.isImportRules) {
3635
+ if (!this.isImportRules && !this.prvtEvtTgrDaD) {
2991
3636
  this.trigger('change', eventsArgs);
2992
3637
  }
2993
3638
  if (this.allowValidation && rule.rules[index].field && target.parentElement.className.indexOf('e-tooltip') > -1) {
@@ -3032,7 +3677,7 @@ var QueryBuilder = /** @class */ (function (_super) {
3032
3677
  var beforeRuleStr = JSON.stringify({ condition: beforeRule.condition, not: beforeRule.not, rule: beforeRule.rules });
3033
3678
  var afetrRuleStr = JSON.stringify({ condition: afterRule.condition, not: afterRule.not, rule: afterRule.rules });
3034
3679
  if (beforeRuleStr !== afetrRuleStr) {
3035
- if (!this.isImportRules) {
3680
+ if (!this.isImportRules && !this.prvtEvtTgrDaD) {
3036
3681
  this.trigger('ruleChange', { previousRule: beforeRule, rule: afterRule, type: type });
3037
3682
  }
3038
3683
  }
@@ -3199,7 +3844,6 @@ var QueryBuilder = /** @class */ (function (_super) {
3199
3844
  var len;
3200
3845
  var tooltip;
3201
3846
  _super.prototype.destroy.call(this);
3202
- var popupElement;
3203
3847
  element = this.element.querySelectorAll('.e-addrulegroup');
3204
3848
  len = element.length;
3205
3849
  for (i = 0; i < len; i++) {
@@ -3245,7 +3889,7 @@ var QueryBuilder = /** @class */ (function (_super) {
3245
3889
  if (this.portals && this.portals.length) {
3246
3890
  this.clearQBTemplate();
3247
3891
  }
3248
- popupElement = document.querySelectorAll('.qb-dropdownlist.e-popup');
3892
+ var popupElement = document.querySelectorAll('.qb-dropdownlist.e-popup');
3249
3893
  if (popupElement) {
3250
3894
  for (i = 0; i < popupElement.length; i++) {
3251
3895
  popupElement[i].remove();
@@ -3318,7 +3962,7 @@ var QueryBuilder = /** @class */ (function (_super) {
3318
3962
  }
3319
3963
  }
3320
3964
  if (!this.headerTemplate) {
3321
- this.disableRuleCondition(groupElem, rule);
3965
+ this.disableRuleCondition(groupElem, rule, null, this.enableSeparateConnector ? true : null);
3322
3966
  }
3323
3967
  }
3324
3968
  };
@@ -3327,6 +3971,9 @@ var QueryBuilder = /** @class */ (function (_super) {
3327
3971
  if (this.cssClass) {
3328
3972
  addClass([this.element], this.cssClass.replace(/\s+/g, ' ').trim().split(' '));
3329
3973
  }
3974
+ if (this.enableSeparateConnector) {
3975
+ addClass([this.element], 'e-multi-connector');
3976
+ }
3330
3977
  if (this.enableRtl) {
3331
3978
  addClass([this.element], 'e-rtl');
3332
3979
  }
@@ -3363,14 +4010,14 @@ var QueryBuilder = /** @class */ (function (_super) {
3363
4010
  }
3364
4011
  }
3365
4012
  else {
3366
- if (this.columns.length && this.isImportRules) {
4013
+ if (this.columns && this.columns.length && this.isImportRules) {
3367
4014
  this.addGroupElement(false, this.element, this.rule.condition, false, this.rule.not, false, this.rule);
3368
4015
  var mRules = extend({}, this.rule, {}, true);
3369
4016
  this.isRefreshed = true;
3370
4017
  this.setGroupRules(mRules);
3371
4018
  this.isRefreshed = false;
3372
4019
  }
3373
- else if (this.columns.length) {
4020
+ else if (this.columns && this.columns.length) {
3374
4021
  this.addRuleElement(this.element.querySelector('.e-group-container'), {});
3375
4022
  }
3376
4023
  this.notGroupRtl();
@@ -3424,8 +4071,8 @@ var QueryBuilder = /** @class */ (function (_super) {
3424
4071
  this.groupIdCounter = 0;
3425
4072
  if (!this.headerTemplate) {
3426
4073
  if (this.enableNotCondition) {
3427
- if (this.enableNotCondition) {
3428
- var inputElem = this.createElement('button', { attrs: { type: 'button', class: 'e-qb-toggle' } });
4074
+ var inputElem = this.createElement('button', { attrs: { type: 'button', class: 'e-qb-toggle' } });
4075
+ if (this.groupElem.querySelector('.e-btn-group')) {
3429
4076
  this.groupElem.querySelector('.e-btn-group').insertBefore(inputElem, this.groupElem.querySelector('.e-btngroup-and'));
3430
4077
  }
3431
4078
  }
@@ -3466,14 +4113,12 @@ var QueryBuilder = /** @class */ (function (_super) {
3466
4113
  };
3467
4114
  QueryBuilder.prototype.onPropertyChanged = function (newProp, oldProp) {
3468
4115
  var properties = Object.keys(newProp);
4116
+ var groupElem = this.element.querySelector('.e-group-container');
4117
+ var summaryElem = this.element.querySelector('.e-summary-content');
3469
4118
  for (var _i = 0, properties_1 = properties; _i < properties_1.length; _i++) {
3470
4119
  var prop = properties_1[_i];
3471
4120
  switch (prop) {
3472
4121
  case 'summaryView':
3473
- // eslint-disable-next-line
3474
- var groupElem = this.element.querySelector('.e-group-container');
3475
- // eslint-disable-next-line
3476
- var summaryElem = this.element.querySelector('.e-summary-content');
3477
4122
  if (newProp.summaryView) {
3478
4123
  groupElem.style.display = 'none';
3479
4124
  if (this.element.querySelectorAll('.e-summary-content').length < 1) {
@@ -3613,6 +4258,14 @@ var QueryBuilder = /** @class */ (function (_super) {
3613
4258
  this.isReadonly = newProp.readonly;
3614
4259
  this.enableReadonly();
3615
4260
  break;
4261
+ case 'allowDragAndDrop':
4262
+ this.allowDragAndDrop = newProp.allowDragAndDrop;
4263
+ this.refresh();
4264
+ break;
4265
+ case 'enableSeparateConnector':
4266
+ this.enableSeparateConnector = newProp.enableSeparateConnector;
4267
+ this.refresh();
4268
+ break;
3616
4269
  }
3617
4270
  }
3618
4271
  };
@@ -3770,6 +4423,134 @@ var QueryBuilder = /** @class */ (function (_super) {
3770
4423
  this.initControl();
3771
4424
  }
3772
4425
  this.renderComplete();
4426
+ if (this.allowDragAndDrop) {
4427
+ this.initializeDrag();
4428
+ }
4429
+ };
4430
+ QueryBuilder.prototype.initializeDrag = function () {
4431
+ this.draggable = new Draggable(this.element, {
4432
+ dragTarget: '.e-drag-qb-rule',
4433
+ distance: 5,
4434
+ helper: this.helper.bind(this),
4435
+ dragStart: this.dragStartHandler.bind(this),
4436
+ drag: this.dragHandler.bind(this),
4437
+ dragStop: this.dragStopHandler.bind(this),
4438
+ isReplaceDragEle: true,
4439
+ isPreventSelect: false,
4440
+ abort: '.e-parent-header',
4441
+ isDragScroll: true
4442
+ });
4443
+ };
4444
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
4445
+ QueryBuilder.prototype.helper = function (e) {
4446
+ var target = this.draggable.currentStateTarget;
4447
+ if (!target.classList.contains('e-drag-qb-rule') || (target.classList.contains('e-drag-qb-rule') && closest(target, '.e-disable'))) {
4448
+ return false;
4449
+ }
4450
+ var visualElement = this.createElement('div', {
4451
+ className: 'e-cloneproperties e-draganddrop e-dragclone',
4452
+ styles: 'height:"auto", z-index:2, width:' + this.element.offsetWidth
4453
+ });
4454
+ var cloneElement;
4455
+ if (this.draggable.currentStateTarget.parentElement.classList.contains('e-group-header')) {
4456
+ cloneElement = closest(target, '.e-group-container').cloneNode(true);
4457
+ closest(target, '.e-group-container').classList.add('e-qb-dragging-rule');
4458
+ }
4459
+ else {
4460
+ visualElement.classList.add('e-group-body');
4461
+ cloneElement = this.createElement('div', { className: 'e-rule-container' });
4462
+ var ruleElement = closest(target, '.e-rule-field').cloneNode(true);
4463
+ cloneElement.appendChild(ruleElement);
4464
+ closest(target, '.e-rule-field').classList.add('e-qb-dragging-rule');
4465
+ }
4466
+ visualElement.appendChild(cloneElement);
4467
+ var childElements = visualElement.querySelectorAll('*');
4468
+ childElements.forEach(function (child) {
4469
+ child.removeAttribute('id');
4470
+ });
4471
+ this.element.appendChild(visualElement);
4472
+ return visualElement;
4473
+ };
4474
+ QueryBuilder.prototype.dragStartHandler = function (e) {
4475
+ this.draggedRule = e.target;
4476
+ this.isDragEventPrevent = false;
4477
+ document.body.classList.add('e-prevent-select');
4478
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
4479
+ this.dragElement = e.dragElement;
4480
+ var rule = closest(e.target, '.e-rule-container');
4481
+ var group = closest(e.target, '.e-group-container');
4482
+ var dragEventArgs = { dragRuleID: rule !== null ? rule.id : group.id, dragGroupID: group.id, cancel: false };
4483
+ this.trigger('dragStart', dragEventArgs);
4484
+ this.isDragEventPrevent = dragEventArgs.cancel;
4485
+ };
4486
+ QueryBuilder.prototype.dragHandler = function (e) {
4487
+ if (this.isDragEventPrevent) {
4488
+ return;
4489
+ }
4490
+ var borderLineElem = this.element.querySelectorAll('.e-drag-rule-bottom-line');
4491
+ borderLineElem.forEach(function (ele) {
4492
+ ele.classList.remove('e-drag-rule-bottom-line');
4493
+ });
4494
+ borderLineElem = this.element.querySelectorAll('.e-drag-rule-top-line');
4495
+ borderLineElem.forEach(function (ele) {
4496
+ ele.classList.remove('e-drag-rule-top-line');
4497
+ });
4498
+ if (isNullOrUndefined(e.target)) {
4499
+ return;
4500
+ }
4501
+ if (e.target.nodeName === 'HTML' || closest(e.target, '.e-qb-dragging-rule') || closest(e.target, '.e-group-header') ||
4502
+ !closest(e.target, '#' + this.element.id) || closest(e.target, '.e-disable') || (e.target.parentElement && e.target.parentElement.classList.contains('e-btn-group') && this.enableSeparateConnector)) {
4503
+ this.dragElement.classList.add('e-notallowedcur');
4504
+ return;
4505
+ }
4506
+ else {
4507
+ this.dragElement.classList.remove('e-notallowedcur');
4508
+ }
4509
+ var targetElem = closest(e.target, '.e-rule-container');
4510
+ var grpElem = closest(e.target, '.e-group-container');
4511
+ if (targetElem) {
4512
+ var rect = targetElem.getBoundingClientRect();
4513
+ var mouseY = e.event.clientY || e.event.changedTouches[0].clientY;
4514
+ var distanceToTop = mouseY - rect.top;
4515
+ var distanceToBottom = rect.bottom - mouseY;
4516
+ var threshold = 20; // Adjust as needed
4517
+ if (distanceToTop < threshold) {
4518
+ targetElem.classList.add('e-drag-rule-top-line');
4519
+ }
4520
+ else if (distanceToBottom < threshold) {
4521
+ targetElem.classList.add('e-drag-rule-bottom-line');
4522
+ }
4523
+ }
4524
+ else if (e.target.classList.contains('e-rule-list') && e.target.children.length === 0) {
4525
+ e.target.classList.add('e-drag-rule-bottom-line');
4526
+ }
4527
+ else if (e.target.classList.contains('e-rule-list') && e.target.children[0].classList.contains('e-group-container')) {
4528
+ var rect = e.target.children[0].getBoundingClientRect();
4529
+ var mouseY = e.event.clientY || e.event.changedTouches[0].clientY;
4530
+ var distanceToTop = mouseY - rect.top;
4531
+ var threshold = 20; // Adjust as needed
4532
+ if (distanceToTop < threshold) {
4533
+ e.target.classList.add('e-drag-rule-top-line');
4534
+ }
4535
+ }
4536
+ else if (closest(e.target, '.e-group-container') || e.target.classList.contains('e-group-container')) {
4537
+ if (!grpElem) {
4538
+ grpElem = e.target;
4539
+ }
4540
+ if (grpElem.id.indexOf('group0') > -1) {
4541
+ var rect = e.target.getBoundingClientRect();
4542
+ var mouseY = e.event.clientY || e.event.changedTouches[0].clientY;
4543
+ var distanceToBottom = rect.bottom - mouseY;
4544
+ var threshold = 20; // Adjust as needed
4545
+ if (distanceToBottom < threshold) {
4546
+ e.target.classList.add('e-drag-rule-bottom-line');
4547
+ }
4548
+ }
4549
+ }
4550
+ var dragEventArgs = { dragRuleID: targetElem !== null ? targetElem.id : grpElem !== null ? grpElem.id : null,
4551
+ dragGroupID: grpElem !== null ? grpElem.id : null, cancel: false };
4552
+ this.trigger('drag', dragEventArgs);
4553
+ this.isDragEventPrevent = dragEventArgs.cancel;
3773
4554
  };
3774
4555
  QueryBuilder.prototype.templateParser = function (template) {
3775
4556
  if (template) {
@@ -3814,6 +4595,7 @@ var QueryBuilder = /** @class */ (function (_super) {
3814
4595
  EventHandler.add(wrapper, 'focusout', this.focusEventHandler, this);
3815
4596
  EventHandler.add(wrapper, 'focusin', this.focusEventHandler, this);
3816
4597
  EventHandler.add(this.element, 'keydown', this.keyBoardHandler, this);
4598
+ EventHandler.add(document, 'keydown', this.keyBoardHandler, this);
3817
4599
  };
3818
4600
  QueryBuilder.prototype.unWireEvents = function () {
3819
4601
  var wrapper = this.getWrapper();
@@ -3821,6 +4603,7 @@ var QueryBuilder = /** @class */ (function (_super) {
3821
4603
  EventHandler.remove(wrapper, 'focusout', this.focusEventHandler);
3822
4604
  EventHandler.remove(wrapper, 'focusin', this.focusEventHandler);
3823
4605
  EventHandler.remove(this.element, 'keydown', this.keyBoardHandler);
4606
+ EventHandler.remove(document, 'keydown', this.keyBoardHandler);
3824
4607
  };
3825
4608
  QueryBuilder.prototype.getParentGroup = function (target, isParent) {
3826
4609
  var groupLevel = (target instanceof Element) ? this.levelColl[target.id] : this.levelColl["" + target];
@@ -3849,7 +4632,7 @@ var QueryBuilder = /** @class */ (function (_super) {
3849
4632
  groupId = groupElem.id.replace(this.element.id + '_', '');
3850
4633
  }
3851
4634
  var args = { groupID: groupId, cancel: false, type: 'deleteGroup' };
3852
- if (!this.isImportRules) {
4635
+ if (!this.isImportRules && !this.prvtEvtTgrDaD) {
3853
4636
  this.trigger('beforeChange', args, function (observedChangeArgs) {
3854
4637
  _this.deleteGroupSuccessCallBack(observedChangeArgs, target);
3855
4638
  });
@@ -3879,13 +4662,20 @@ var QueryBuilder = /** @class */ (function (_super) {
3879
4662
  }
3880
4663
  while (groupElem.previousElementSibling !== null) {
3881
4664
  groupElem = groupElem.previousElementSibling;
3882
- index++;
4665
+ if (!this.enableSeparateConnector || (this.enableSeparateConnector &&
4666
+ ((!this.headerTemplate && !groupElem.classList.contains('e-btn-group')) ||
4667
+ this.headerTemplate && (groupElem.classList.contains('e-rule-container') ||
4668
+ groupElem.classList.contains('e-group-container'))))) {
4669
+ index++;
4670
+ }
3883
4671
  }
3884
- if (nextElem && nextElem.className.indexOf('e-separate-rule') > -1) {
3885
- removeClass([nextElem], 'e-separate-rule');
3886
- addClass([nextElem], 'e-joined-rule');
3887
- if (prevElem && prevElem.className.indexOf('e-rule-container') > -1) {
3888
- addClass([prevElem], 'e-prev-joined-rule');
4672
+ if (!this.enableSeparateConnector) {
4673
+ if (nextElem && nextElem.className.indexOf('e-separate-rule') > -1) {
4674
+ removeClass([nextElem], 'e-separate-rule');
4675
+ addClass([nextElem], 'e-joined-rule');
4676
+ if (prevElem && prevElem.className.indexOf('e-rule-container') > -1) {
4677
+ addClass([prevElem], 'e-prev-joined-rule');
4678
+ }
3889
4679
  }
3890
4680
  }
3891
4681
  var elem = groupElem.parentElement.parentElement.parentElement;
@@ -3917,7 +4707,11 @@ var QueryBuilder = /** @class */ (function (_super) {
3917
4707
  delete this.levelColl[args.groupID];
3918
4708
  this.refreshLevelColl();
3919
4709
  this.disableRuleCondition(elem, rule);
3920
- if (!this.isImportRules) {
4710
+ if (this.enableSeparateConnector && prevElem && ((!this.headerTemplate && prevElem.classList.contains('e-btn-group')) ||
4711
+ (this.headerTemplate && prevElem.classList.contains('e-custom-group-btn')))) {
4712
+ detach(prevElem);
4713
+ }
4714
+ if (!this.isImportRules && !this.prvtEvtTgrDaD) {
3921
4715
  this.trigger('change', args);
3922
4716
  }
3923
4717
  this.filterRules(beforeRules, this.getValidRules(this.rule), 'deleteGroup');
@@ -3934,7 +4728,7 @@ var QueryBuilder = /** @class */ (function (_super) {
3934
4728
  var groupID = groupElem.id.replace(this.element.id + '_', '');
3935
4729
  var ruleID = closest(target, '.e-rule-container').id.replace(this.element.id + '_', '');
3936
4730
  var args = { groupID: groupID, ruleID: ruleID, cancel: false, type: 'deleteRule' };
3937
- if (!this.isImportRules) {
4731
+ if (!this.isImportRules && !this.prvtEvtTgrDaD) {
3938
4732
  this.trigger('beforeChange', args, function (observedChangeArgs) {
3939
4733
  _this.deleteRuleSuccessCallBack(observedChangeArgs, target);
3940
4734
  });
@@ -3949,10 +4743,10 @@ var QueryBuilder = /** @class */ (function (_super) {
3949
4743
  var rule = this.getParentGroup(groupElem);
3950
4744
  var ruleElem = closest(target, '.e-rule-container');
3951
4745
  var beforeRules = this.getValidRules(this.rule);
3952
- var clnruleElem = ruleElem;
3953
- var nextElem = ruleElem.nextElementSibling;
3954
4746
  var prevElem = ruleElem.previousElementSibling;
3955
4747
  var index = 0;
4748
+ var clnruleElem = ruleElem;
4749
+ var nextElem = ruleElem.nextElementSibling;
3956
4750
  var valElem = ruleElem.querySelectorAll('.e-tooltip');
3957
4751
  var i = void 0;
3958
4752
  var len = valElem.length;
@@ -3961,7 +4755,12 @@ var QueryBuilder = /** @class */ (function (_super) {
3961
4755
  }
3962
4756
  while (ruleElem.previousElementSibling !== null) {
3963
4757
  ruleElem = ruleElem.previousElementSibling;
3964
- index++;
4758
+ if (!this.enableSeparateConnector || (this.enableSeparateConnector &&
4759
+ ((!this.headerTemplate && !ruleElem.classList.contains('e-btn-group')) ||
4760
+ this.headerTemplate && (ruleElem.classList.contains('e-rule-container') ||
4761
+ ruleElem.classList.contains('e-group-container'))))) {
4762
+ index++;
4763
+ }
3965
4764
  }
3966
4765
  var column = this.getColumn(rule.rules[index].field);
3967
4766
  if (column && column.template && clnruleElem.querySelector('.e-template')) {
@@ -3980,17 +4779,27 @@ var QueryBuilder = /** @class */ (function (_super) {
3980
4779
  var isTemplateRendered = clnruleElem.querySelector('.e-template-value');
3981
4780
  // eslint-disable
3982
4781
  try {
4782
+ if (this.enableSeparateConnector && (clnruleElem.previousElementSibling || clnruleElem.nextElementSibling)) {
4783
+ var previousElem = clnruleElem.previousElementSibling;
4784
+ var nextElem_1 = clnruleElem.nextElementSibling;
4785
+ if (isNullOrUndefined(nextElem_1) && ((!this.headerTemplate && previousElem.classList.contains('e-btn-group'))
4786
+ || (this.headerTemplate && previousElem.classList.contains('e-custom-group-btn')))) {
4787
+ if (previousElem && previousElem.previousElementSibling && previousElem.previousElementSibling.classList.contains('e-rule-container')) {
4788
+ var rule_1 = this.getRule(previousElem.previousElementSibling);
4789
+ rule_1.condition = null;
4790
+ }
4791
+ detach(previousElem);
4792
+ }
4793
+ else if ((!this.headerTemplate && nextElem_1.classList.contains('e-btn-group'))
4794
+ || (this.headerTemplate && nextElem_1.classList.contains('e-custom-group-btn'))) {
4795
+ detach(nextElem_1);
4796
+ }
4797
+ }
3983
4798
  detach(clnruleElem);
3984
4799
  }
3985
4800
  catch (err) {
3986
- // eslint-disable-next-line no-ex-assign
3987
- err = [];
3988
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
3989
- var error = 'error';
3990
- // eslint-disable-next-line
3991
- err[error] = error;
4801
+ return;
3992
4802
  }
3993
- // eslint-enable
3994
4803
  if (column && column.ruleTemplate) {
3995
4804
  this.clearQBTemplate([clnruleElem.id]);
3996
4805
  }
@@ -3999,13 +4808,13 @@ var QueryBuilder = /** @class */ (function (_super) {
3999
4808
  }
4000
4809
  rule.rules.splice(index, 1);
4001
4810
  if (!(rule.rules[0] && rule.rules[0].rules)) {
4002
- this.disableRuleCondition(groupElem, rule);
4811
+ this.disableRuleCondition(groupElem, rule, this.enableSeparateConnector ? true : false);
4003
4812
  }
4004
4813
  var tooltipElem = this.element.querySelectorAll('.e-tooltip');
4005
4814
  for (var i_3 = 0; i_3 < tooltipElem.length; i_3++) {
4006
4815
  getComponent(tooltipElem[i_3], 'tooltip').refresh(tooltipElem[i_3]);
4007
4816
  }
4008
- if (!this.isImportRules) {
4817
+ if (!this.isImportRules && !this.prvtEvtTgrDaD) {
4009
4818
  this.trigger('change', args);
4010
4819
  }
4011
4820
  this.filterRules(beforeRules, this.getValidRules(this.rule), 'deleteRule');
@@ -4029,9 +4838,32 @@ var QueryBuilder = /** @class */ (function (_super) {
4029
4838
  this.isImportRules = false;
4030
4839
  };
4031
4840
  QueryBuilder.prototype.keyBoardHandler = function (e) {
4032
- if (this.readonly && (e.keyCode === 38 || e.keyCode === 40 || e.keyCode === 13)) {
4841
+ if (e.currentTarget === this.element && this.readonly && (e.keyCode === 38 || e.keyCode === 40 || e.keyCode === 13)) {
4033
4842
  e.preventDefault();
4034
4843
  }
4844
+ else if (e.code === 'Escape' && this.allowDragAndDrop) {
4845
+ this.isDragEventPrevent = true;
4846
+ document.body.classList.remove('e-prevent-select');
4847
+ var borderLineElem = this.element.querySelectorAll('.e-drag-rule-bottom-line');
4848
+ borderLineElem.forEach(function (ele) {
4849
+ ele.classList.remove('e-drag-rule-bottom-line');
4850
+ });
4851
+ borderLineElem = this.element.querySelectorAll('.e-drag-rule-top-line');
4852
+ borderLineElem.forEach(function (ele) {
4853
+ ele.classList.remove('e-drag-rule-top-line');
4854
+ });
4855
+ borderLineElem = this.element.querySelectorAll('.e-qb-dragging-rule');
4856
+ borderLineElem.forEach(function (ele) {
4857
+ ele.classList.remove('e-qb-dragging-rule');
4858
+ });
4859
+ var dragElemnet = this.element.querySelector('.e-cloneproperties');
4860
+ if (dragElemnet) {
4861
+ remove(dragElemnet);
4862
+ }
4863
+ if (this.enableSeparateConnector) {
4864
+ this.refresh();
4865
+ }
4866
+ }
4035
4867
  };
4036
4868
  QueryBuilder.prototype.clearQBTemplate = function (ruleElemColl) {
4037
4869
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
@@ -4039,7 +4871,7 @@ var QueryBuilder = /** @class */ (function (_super) {
4039
4871
  this.clearTemplate(ruleElemColl);
4040
4872
  }
4041
4873
  };
4042
- QueryBuilder.prototype.disableRuleCondition = function (groupElem, rules) {
4874
+ QueryBuilder.prototype.disableRuleCondition = function (groupElem, rules, isNewRuleAdded, isNewGroup) {
4043
4875
  if (!this.headerTemplate) {
4044
4876
  if (this.readonly) {
4045
4877
  return;
@@ -4055,21 +4887,124 @@ var QueryBuilder = /** @class */ (function (_super) {
4055
4887
  orElem.nextElementSibling.classList.remove('e-btn-disable');
4056
4888
  andElem.nextElementSibling.classList.remove('e-btn-disable');
4057
4889
  }
4058
- if (rules && rules.condition === 'or') {
4059
- orElem.checked = true;
4890
+ if (this.enableSeparateConnector && !isNewRuleAdded) {
4891
+ var index = 0;
4892
+ var element = void 0;
4893
+ // eslint-disable-next-line no-constant-condition
4894
+ while (true) {
4895
+ var andGroup = groupElem.parentElement.querySelectorAll('.e-btngroup-and');
4896
+ var orGroup = groupElem.parentElement.querySelectorAll('.e-btngroup-or');
4897
+ andElem = andGroup[andGroup.length - (1 + index)];
4898
+ orElem = orGroup[orGroup.length - (1 + index)];
4899
+ element = andGroup[andGroup.length - (1 + index)];
4900
+ if (element && element.parentElement && element.parentElement.style.display === 'none') {
4901
+ index++;
4902
+ }
4903
+ else {
4904
+ break;
4905
+ }
4906
+ }
4907
+ var elem = groupElem.previousElementSibling;
4908
+ while (elem && !elem.classList.contains('e-rule-container')) {
4909
+ if (elem.classList.contains('e-group-container')) {
4910
+ elem = elem.querySelectorAll('.e-rule-container')[elem.querySelectorAll('.e-rule-container').length - 1];
4911
+ break;
4912
+ }
4913
+ elem = elem.previousElementSibling;
4914
+ }
4915
+ if (isNewGroup && groupElem.classList.contains('e-group-container')) {
4916
+ elem = groupElem;
4917
+ var prevRule = this.getGroup(elem);
4918
+ if (prevRule.condition === 'or') {
4919
+ orElem.checked = true;
4920
+ }
4921
+ else {
4922
+ andElem.checked = true;
4923
+ }
4924
+ }
4925
+ else if (elem && elem.classList.contains('e-rule-container')) {
4926
+ var ruleID = elem.id.replace(this.element.id + '_', '');
4927
+ var prevRule = this.getRule(ruleID);
4928
+ if (prevRule.condition === 'or') {
4929
+ orElem.checked = true;
4930
+ }
4931
+ else {
4932
+ andElem.checked = true;
4933
+ }
4934
+ }
4060
4935
  }
4061
- else {
4062
- andElem.checked = true;
4936
+ else if (!isNewRuleAdded) {
4937
+ if (rules && rules.condition === 'or') {
4938
+ orElem.checked = true;
4939
+ }
4940
+ else {
4941
+ andElem.checked = true;
4942
+ }
4063
4943
  }
4064
4944
  }
4065
4945
  else {
4066
- andElem.checked = false;
4067
- andElem.disabled = true;
4068
- orElem.checked = false;
4069
- orElem.disabled = true;
4070
- if (rules) {
4071
- orElem.nextElementSibling.classList.add('e-btn-disable');
4072
- andElem.nextElementSibling.classList.add('e-btn-disable');
4946
+ if (this.enableSeparateConnector && !isNewRuleAdded) {
4947
+ var index = 0;
4948
+ var element = void 0;
4949
+ // eslint-disable-next-line no-constant-condition
4950
+ while (true) {
4951
+ var andGroup = groupElem.parentElement.querySelectorAll('.e-btngroup-and');
4952
+ var orGroup = groupElem.parentElement.querySelectorAll('.e-btngroup-or');
4953
+ andElem = andGroup[andGroup.length - (1 + index)];
4954
+ orElem = orGroup[orGroup.length - (1 + index)];
4955
+ element = andGroup[andGroup.length - (1 + index)];
4956
+ if (element && element.parentElement && element.parentElement.style.display === 'none') {
4957
+ index++;
4958
+ }
4959
+ else {
4960
+ break;
4961
+ }
4962
+ }
4963
+ var elem = void 0;
4964
+ var tempElem = groupElem.previousElementSibling;
4965
+ while (tempElem) {
4966
+ if (tempElem.classList.contains('e-group-container')) {
4967
+ tempElem = tempElem.querySelectorAll('.e-rule-container')[tempElem.querySelectorAll('.e-rule-container').length - 1];
4968
+ }
4969
+ if (tempElem.classList.contains('e-rule-container')) {
4970
+ elem = tempElem;
4971
+ break;
4972
+ }
4973
+ tempElem = tempElem.previousElementSibling;
4974
+ }
4975
+ if (isNullOrUndefined(elem) && groupElem.querySelectorAll('.e-rule-container')[groupElem.querySelectorAll('.e-rule-container').length - 1]) {
4976
+ elem = groupElem.querySelectorAll('.e-rule-container')[groupElem.querySelectorAll('.e-rule-container').length - 1];
4977
+ }
4978
+ if (isNewGroup && groupElem.classList.contains('e-group-container')) {
4979
+ elem = groupElem;
4980
+ var prevRule = this.getGroup(elem);
4981
+ if (prevRule.condition === 'or') {
4982
+ orElem.checked = true;
4983
+ }
4984
+ else {
4985
+ andElem.checked = true;
4986
+ }
4987
+ }
4988
+ else if (elem) {
4989
+ var ruleID = elem.id.replace(this.element.id + '_', '');
4990
+ var prevRule = this.getRule(ruleID);
4991
+ if (prevRule.condition === 'or' && orElem) {
4992
+ orElem.checked = true;
4993
+ }
4994
+ else if (andElem) {
4995
+ andElem.checked = true;
4996
+ }
4997
+ }
4998
+ }
4999
+ else if (!isNewRuleAdded) {
5000
+ andElem.checked = false;
5001
+ andElem.disabled = true;
5002
+ orElem.checked = false;
5003
+ orElem.disabled = true;
5004
+ if (rules) {
5005
+ orElem.nextElementSibling.classList.add('e-btn-disable');
5006
+ andElem.nextElementSibling.classList.add('e-btn-disable');
5007
+ }
4073
5008
  }
4074
5009
  }
4075
5010
  }
@@ -4173,7 +5108,7 @@ var QueryBuilder = /** @class */ (function (_super) {
4173
5108
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
4174
5109
  rule.custom = customObj;
4175
5110
  }
4176
- if (rule.rules.length === 0) {
5111
+ if (rule.rules && rule.rules.length === 0) {
4177
5112
  rule = {};
4178
5113
  }
4179
5114
  }
@@ -4242,7 +5177,12 @@ var QueryBuilder = /** @class */ (function (_super) {
4242
5177
  var rule = this.getParentGroup(groupElem);
4243
5178
  while (ruleElem.previousElementSibling !== null) {
4244
5179
  ruleElem = ruleElem.previousElementSibling;
4245
- index++;
5180
+ if (!this.enableSeparateConnector || (this.enableSeparateConnector &&
5181
+ ((!this.headerTemplate && !ruleElem.classList.contains('e-btn-group')) ||
5182
+ this.headerTemplate && (ruleElem.classList.contains('e-rule-container') ||
5183
+ ruleElem.classList.contains('e-group-container'))))) {
5184
+ index++;
5185
+ }
4246
5186
  }
4247
5187
  return rule.rules[index];
4248
5188
  };
@@ -4652,13 +5592,10 @@ var QueryBuilder = /** @class */ (function (_super) {
4652
5592
  if (value.indexOf(':') > -1 && (value.indexOf('/') < 0 && value.indexOf(',') < 0
4653
5593
  && value.indexOf('-') < 0)) {
4654
5594
  currDate = new Date();
4655
- // eslint-disable-next-line
4656
- currDate.setHours(parseInt(value.split(':')[0]));
4657
- // eslint-disable-next-line
4658
- currDate.setMinutes(parseInt(value.split(':')[1]));
5595
+ currDate.setHours(parseInt(value.split(':')[0], 10));
5596
+ currDate.setMinutes(parseInt(value.split(':')[1], 10));
4659
5597
  if (value.split(':')[2]) {
4660
- // eslint-disable-next-line
4661
- currDate.setSeconds(parseInt(value.split(':')[2]));
5598
+ currDate.setSeconds(parseInt(value.split(':')[2], 10));
4662
5599
  }
4663
5600
  }
4664
5601
  return currDate;
@@ -4674,17 +5611,43 @@ var QueryBuilder = /** @class */ (function (_super) {
4674
5611
  parentElem = this.renderGroup(rule, rule.condition, parentElem, not);
4675
5612
  }
4676
5613
  else {
4677
- if (rule.rules.length > 1 && !this.headerTemplate) {
5614
+ if (rule.rules && rule.rules.length > 1 && !this.headerTemplate) {
4678
5615
  // enable/disable conditions when rule group is added
4679
5616
  var orElem = parentElem.querySelector('.e-btngroup-or');
4680
5617
  var andElem = parentElem.querySelector('.e-btngroup-and');
5618
+ if (this.enableSeparateConnector && parentElem.previousElementSibling) {
5619
+ orElem = parentElem.previousElementSibling.querySelector('.e-btngroup-or');
5620
+ andElem = parentElem.previousElementSibling.querySelector('.e-btngroup-and');
5621
+ }
4681
5622
  orElem.disabled = false;
4682
5623
  andElem.disabled = false;
4683
- if (rule.condition === 'or') {
4684
- orElem.checked = true;
5624
+ if (this.enableSeparateConnector) {
5625
+ var elem = parentElem.previousElementSibling;
5626
+ while (elem && !elem.classList.contains('e-rule-container')) {
5627
+ if (elem.classList.contains('e-group-container')) {
5628
+ elem = elem.querySelectorAll('.e-rule-container')[elem.querySelectorAll('.e-rule-container').length - 1];
5629
+ break;
5630
+ }
5631
+ elem = elem.previousElementSibling;
5632
+ }
5633
+ if (elem && elem.classList.contains('e-rule-container')) {
5634
+ var ruleID = elem.id.replace(this.element.id + '_', '');
5635
+ var prevRule = this.getRule(ruleID);
5636
+ if (prevRule.condition === 'or') {
5637
+ orElem.checked = true;
5638
+ }
5639
+ else {
5640
+ andElem.checked = true;
5641
+ }
5642
+ }
4685
5643
  }
4686
5644
  else {
4687
- andElem.checked = true;
5645
+ if (rule.condition === 'or') {
5646
+ orElem.checked = true;
5647
+ }
5648
+ else {
5649
+ andElem.checked = true;
5650
+ }
4688
5651
  }
4689
5652
  }
4690
5653
  else {
@@ -4704,7 +5667,7 @@ var QueryBuilder = /** @class */ (function (_super) {
4704
5667
  }
4705
5668
  }
4706
5669
  }
4707
- if (rule.rules.length === 0 && this.headerTemplate) {
5670
+ if (rule.rules && rule.rules.length === 0 && this.headerTemplate) {
4708
5671
  rule.rules[0] = { 'label': '', 'field': '', 'operator': '', 'type': '', 'value': '' };
4709
5672
  }
4710
5673
  var ruleColl = rule.rules;
@@ -4725,10 +5688,6 @@ var QueryBuilder = /** @class */ (function (_super) {
4725
5688
  var lockGrpTarget = parentElem.querySelector('.e-rule-list').children[i].querySelector('.e-lock-grp-btn');
4726
5689
  this.groupLock(lockGrpTarget);
4727
5690
  }
4728
- if (isNullOrUndefined(ruleColl[i].rules) && ruleColl[i].isLocked) {
4729
- var lockRuleTarget = parentElem.querySelector('.e-rule-list').children[i].querySelector('.e-lock-rule-btn');
4730
- this.ruleLock(lockRuleTarget);
4731
- }
4732
5691
  }
4733
5692
  }
4734
5693
  if (parentElem) {
@@ -4746,7 +5705,17 @@ var QueryBuilder = /** @class */ (function (_super) {
4746
5705
  if (this.showButtons.cloneGroup && this.cloneGrpBtnClick && this.isMiddleGroup) {
4747
5706
  this.isMiddleGroup = false;
4748
5707
  this.cloneGrpBtnClick = false;
4749
- return cloneElem[this.groupIndex + 1]; // group added in the middle
5708
+ var index = 0;
5709
+ var tempGroupIndex = this.groupIndex + 1;
5710
+ if (this.enableSeparateConnector) {
5711
+ for (var i = 0; i < tempGroupIndex; i++) {
5712
+ if (cloneElem[i].classList.contains('e-rule-container')) {
5713
+ tempGroupIndex++;
5714
+ index++;
5715
+ }
5716
+ }
5717
+ }
5718
+ return cloneElem[this.groupIndex + index + 1]; // group added in the middle
4750
5719
  }
4751
5720
  else if (this.showButtons.cloneGroup && this.cloneGrpBtnClick && this.isLastGroup) {
4752
5721
  this.isLastGroup = false;
@@ -4915,6 +5884,7 @@ var QueryBuilder = /** @class */ (function (_super) {
4915
5884
  for (var j = 0, jLen = rules.rules.length; j < jLen; j++) {
4916
5885
  if (rules.rules[j].rules) {
4917
5886
  queryStr = this.getSqlString(rules.rules[j], enableEscape, queryStr, sqlLocale);
5887
+ condition = rules.rules[j].condition;
4918
5888
  }
4919
5889
  else {
4920
5890
  var rule = rules.rules[j];
@@ -5006,8 +5976,10 @@ var QueryBuilder = /** @class */ (function (_super) {
5006
5976
  if (condition === '' || (rule && rule.condition !== '' && rule.custom && rule.custom.isCustom)) {
5007
5977
  condition = rule.condition;
5008
5978
  }
5009
- condition = sqlLocale ? this.l10n.getConstant(condition.toUpperCase()).toUpperCase() : condition.toUpperCase();
5010
- queryStr += ' ' + condition + ' ';
5979
+ if (condition) {
5980
+ condition = sqlLocale ? this.l10n.getConstant(condition.toUpperCase()).toUpperCase() : condition.toUpperCase();
5981
+ queryStr += ' ' + condition + ' ';
5982
+ }
5011
5983
  }
5012
5984
  }
5013
5985
  }
@@ -5073,12 +6045,19 @@ var QueryBuilder = /** @class */ (function (_super) {
5073
6045
  * @returns {ParameterizedSql} – Parameterized SQL query from rules.
5074
6046
  */
5075
6047
  QueryBuilder.prototype.getParameterizedSql = function (rule) {
5076
- if (!rule) {
5077
- rule = this.getValidRules();
6048
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
6049
+ if (this.moduleLoader.loadedModules.length) {
6050
+ if (!rule) {
6051
+ rule = this.getValidRules();
6052
+ }
6053
+ var obj = { sql: null };
6054
+ this.notify('query-library', { prop: 'getParameterSql', onPropertyChange: false, value: { rule: rule, obj: obj } });
6055
+ return obj['sql'];
5078
6056
  }
5079
- var obj = { sql: null };
5080
- this.notify('query-library', { prop: 'getParameterSql', onPropertyChange: false, value: { rule: rule, obj: obj } });
5081
- return obj['sql'];
6057
+ else {
6058
+ console.warn('[WARNING] :: Module "query-library" is not available in QueryBuilder component! You either misspelled the module name or forgot to load it.');
6059
+ }
6060
+ return null;
5082
6061
  };
5083
6062
  /**
5084
6063
  * Sets the rules from the parameter sql query.
@@ -5087,13 +6066,19 @@ var QueryBuilder = /** @class */ (function (_super) {
5087
6066
  * @returns {void}
5088
6067
  */
5089
6068
  QueryBuilder.prototype.setParameterizedSql = function (sqlQuery) {
5090
- var obj = { sql: null };
5091
- this.notify('query-library', { prop: 'convertParamSqlToSql', onPropertyChange: false, value: { sql: sqlQuery, obj: obj } });
5092
- var sql = obj['sql'];
5093
- if (sql) {
5094
- sql = sql.replace(/`/g, '');
5095
- var ruleModel = this.getRulesFromSql(sql);
5096
- this.setRules({ condition: ruleModel.condition, not: ruleModel.not, rules: ruleModel.rules });
6069
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
6070
+ if (this.moduleLoader.loadedModules.length) {
6071
+ var obj = { sql: null };
6072
+ this.notify('query-library', { prop: 'convertParamSqlToSql', onPropertyChange: false, value: { sql: sqlQuery, obj: obj } });
6073
+ var sql = obj['sql'];
6074
+ if (sql) {
6075
+ sql = sql.replace(/`/g, '');
6076
+ var ruleModel = this.getRulesFromSql(sql);
6077
+ this.setRules({ condition: ruleModel.condition, not: ruleModel.not, rules: ruleModel.rules });
6078
+ }
6079
+ }
6080
+ else {
6081
+ console.warn('[WARNING] :: Module "query-library" is not available in QueryBuilder component! You either misspelled the module name or forgot to load it.');
5097
6082
  }
5098
6083
  };
5099
6084
  /**
@@ -5103,12 +6088,19 @@ var QueryBuilder = /** @class */ (function (_super) {
5103
6088
  * @returns {ParameterizedNamedSql} – Parameterized Named SQL query from rules.
5104
6089
  */
5105
6090
  QueryBuilder.prototype.getParameterizedNamedSql = function (rule) {
5106
- if (!rule) {
5107
- rule = this.getValidRules();
6091
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
6092
+ if (this.moduleLoader.loadedModules.length) {
6093
+ if (!rule) {
6094
+ rule = this.getValidRules();
6095
+ }
6096
+ var obj = { sql: null };
6097
+ this.notify('query-library', { prop: 'getNamedParameterSql', onPropertyChange: false, value: { rule: rule, obj: obj } });
6098
+ return obj['sql'];
5108
6099
  }
5109
- var obj = { sql: null };
5110
- this.notify('query-library', { prop: 'getNamedParameterSql', onPropertyChange: false, value: { rule: rule, obj: obj } });
5111
- return obj['sql'];
6100
+ else {
6101
+ console.warn('[WARNING] :: Module "query-library" is not available in QueryBuilder component! You either misspelled the module name or forgot to load it.');
6102
+ }
6103
+ return null;
5112
6104
  };
5113
6105
  /**
5114
6106
  * Sets the rules from the named parameter SQL query.
@@ -5117,13 +6109,19 @@ var QueryBuilder = /** @class */ (function (_super) {
5117
6109
  * @returns {void}
5118
6110
  */
5119
6111
  QueryBuilder.prototype.setParameterizedNamedSql = function (sqlQuery) {
5120
- var obj = { sql: null };
5121
- this.notify('query-library', { prop: 'convertNamedParamSqlToSql', onPropertyChange: false, value: { sql: sqlQuery, obj: obj } });
5122
- var sql = obj['sql'];
5123
- if (sql) {
5124
- sql = sql.replace(/`/g, '');
5125
- var ruleModel = this.getRulesFromSql(sql);
5126
- this.setRules({ condition: ruleModel.condition, not: ruleModel.not, rules: ruleModel.rules });
6112
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
6113
+ if (this.moduleLoader.loadedModules.length) {
6114
+ var obj = { sql: null };
6115
+ this.notify('query-library', { prop: 'convertNamedParamSqlToSql', onPropertyChange: false, value: { sql: sqlQuery, obj: obj } });
6116
+ var sql = obj['sql'];
6117
+ if (sql) {
6118
+ sql = sql.replace(/`/g, '');
6119
+ var ruleModel = this.getRulesFromSql(sql);
6120
+ this.setRules({ condition: ruleModel.condition, not: ruleModel.not, rules: ruleModel.rules });
6121
+ }
6122
+ }
6123
+ else {
6124
+ console.warn('[WARNING] :: Module "query-library" is not available in QueryBuilder component! You either misspelled the module name or forgot to load it.');
5127
6125
  }
5128
6126
  };
5129
6127
  /**
@@ -5134,8 +6132,14 @@ var QueryBuilder = /** @class */ (function (_super) {
5134
6132
  * @returns {void}
5135
6133
  */
5136
6134
  QueryBuilder.prototype.setMongoQuery = function (mongoQuery, mongoLocale) {
5137
- this.rule = { condition: 'and', not: false, rules: [] };
5138
- this.notify('query-library', { prop: 'mongoParser', onPropertyChange: false, value: { mongoQuery: JSON.parse(mongoQuery), rule: this.rule, mongoLocale: mongoLocale } });
6135
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
6136
+ if (this.moduleLoader.loadedModules.length) {
6137
+ this.rule = { condition: 'and', not: false, rules: [] };
6138
+ this.notify('query-library', { prop: 'mongoParser', onPropertyChange: false, value: { mongoQuery: JSON.parse(mongoQuery), rule: this.rule, mongoLocale: mongoLocale } });
6139
+ }
6140
+ else {
6141
+ console.warn('[WARNING] :: Module "query-library" is not available in QueryBuilder component! You either misspelled the module name or forgot to load it.');
6142
+ }
5139
6143
  };
5140
6144
  /**
5141
6145
  * Gets the Mongo query from rules.
@@ -5144,12 +6148,19 @@ var QueryBuilder = /** @class */ (function (_super) {
5144
6148
  * @returns {object} - Sql query from rules.
5145
6149
  */
5146
6150
  QueryBuilder.prototype.getMongoQuery = function (rule) {
5147
- if (!rule) {
5148
- rule = this.getValidRules();
6151
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
6152
+ if (this.moduleLoader.loadedModules.length) {
6153
+ if (!rule) {
6154
+ rule = this.getValidRules();
6155
+ }
6156
+ var obj = { mongoQuery: null };
6157
+ this.notify('query-library', { prop: 'getMongoFromRules', onPropertyChange: false, value: { rule: rule, mongoQuery: '', obj: obj } });
6158
+ return obj['mongoQuery'];
6159
+ }
6160
+ else {
6161
+ console.warn('[WARNING] :: Module "query-library" is not available in QueryBuilder component! You either misspelled the module name or forgot to load it.');
5149
6162
  }
5150
- var obj = { mongoQuery: null };
5151
- this.notify('query-library', { prop: 'getMongoFromRules', onPropertyChange: false, value: { rule: rule, mongoQuery: '', obj: obj } });
5152
- return obj['mongoQuery'];
6163
+ return '';
5153
6164
  };
5154
6165
  /**
5155
6166
  * Clones the rule based on the rule ID to the specific group.
@@ -5168,7 +6179,7 @@ var QueryBuilder = /** @class */ (function (_super) {
5168
6179
  this.showButtons.cloneRule = true;
5169
6180
  this.addRules([{
5170
6181
  'label': getRule.label, 'field': getRule.field, 'type': getRule.type, 'operator': getRule.operator,
5171
- 'value': getRule.value
6182
+ 'value': getRule.value, 'condition': getRule.condition
5172
6183
  }], groupID);
5173
6184
  this.ruleIndex = -1;
5174
6185
  this.cloneRuleBtnClick = false;
@@ -5257,8 +6268,9 @@ var QueryBuilder = /** @class */ (function (_super) {
5257
6268
  var matchValue;
5258
6269
  for (var i = 0, iLen = operators.length; i < iLen; i++) {
5259
6270
  regexStr = /^\w+$/.test(operators[i]) ? '\\b' : '';
5260
- // eslint-disable-next-line
5261
- regex = new RegExp('^(' + operators[i] + ')' + regexStr, 'ig');
6271
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
6272
+ var regExp = RegExp;
6273
+ regex = new regExp('^(' + operators[i] + ')' + regexStr, 'ig');
5262
6274
  if (regex.exec(sqlString)) {
5263
6275
  this.parser.push(['Operators', operators[i].toLowerCase()]);
5264
6276
  return operators[i].length;
@@ -5268,8 +6280,9 @@ var QueryBuilder = /** @class */ (function (_super) {
5268
6280
  if (!lastPasrser || (lastPasrser && lastPasrser[0] !== 'Literal')) {
5269
6281
  for (var i = 0, iLen = conditions.length; i < iLen; i++) {
5270
6282
  regexStr = /^\w+$/.test(conditions[i]) ? '\\b' : '';
5271
- // eslint-disable-next-line
5272
- regex = new RegExp('^(' + conditions[i] + ')' + regexStr, 'ig');
6283
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
6284
+ var regExp = RegExp;
6285
+ regex = new regExp('^(' + conditions[i] + ')' + regexStr, 'ig');
5273
6286
  if (regex.exec(sqlString)) {
5274
6287
  this.parser.push(['Conditions', conditions[i].toLowerCase()]);
5275
6288
  return conditions[i].length;
@@ -5278,8 +6291,9 @@ var QueryBuilder = /** @class */ (function (_super) {
5278
6291
  }
5279
6292
  for (var i = 0, iLen = subOp.length; i < iLen; i++) {
5280
6293
  regexStr = /^\w+$/.test(subOp[i]) ? '\\b' : '';
5281
- // eslint-disable-next-line
5282
- regex = new RegExp('^(' + subOp[i] + ')' + regexStr, 'ig');
6294
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
6295
+ var regExp = RegExp;
6296
+ regex = new regExp('^(' + subOp[i] + ')' + regexStr, 'ig');
5283
6297
  if (regex.exec(sqlString)) {
5284
6298
  this.parser.push(['SubOperators', subOp[i].toLowerCase()]);
5285
6299
  return subOp[i].length;
@@ -5307,31 +6321,25 @@ var QueryBuilder = /** @class */ (function (_super) {
5307
6321
  this.parser.push(['String', null]);
5308
6322
  return matchValue.length;
5309
6323
  }
5310
- // eslint-disable-next-line
5311
- if (/^`?([a-z_][a-z0-9_.\[\]\(\)]{0,}(\:(number|float|string|date|boolean))?)`?/i.exec(sqlString)) {
5312
- // eslint-disable-next-line
5313
- matchValue = /^`?([a-zåäö_][a-z0-9åäö_.\[\]\(\)]{0,}(\:(number|float|string|date|boolean))?)`?/i.exec(sqlString)[1];
6324
+ if (/^`?([a-z_][a-z0-9_.\\[\]\\(\\)]{0,}(\\:(number|float|string|date|boolean))?)`?/i.exec(sqlString)) {
6325
+ matchValue = /^`?([a-z_][a-z0-9_.\\[\]\\(\\)]{0,}(\\:(number|float|string|date|boolean))?)`?/i.exec(sqlString)[1];
5314
6326
  this.parser.push(['Literal', matchValue]);
5315
6327
  return matchValue.length;
5316
6328
  }
5317
- // eslint-disable-next-line
5318
- if (this.checkLiteral() && /^'?([a-z_][a-z0-9 _.\[\]\(\)-]{0,}(\:(number|float|string|date|boolean))?)'?/i.exec(sqlString)) {
5319
- // eslint-disable-next-line
5320
- matchValue = /^'?([a-z_][a-z0-9 _.\[\]\(\)-]{0,}(\:(number|float|string|date|boolean))?)'?/i.exec(sqlString)[1];
6329
+ if (this.checkLiteral() && /^'?([a-z_][a-z0-9 _.\\[\]\\(\\)-]{0,}(\\:(number|float|string|date|boolean))?)'?/i.exec(sqlString)) {
6330
+ matchValue = /^'?([a-z_][a-z0-9 _.\\[\]\\(\\)-]{0,}(\\:(number|float|string|date|boolean))?)'?/i.exec(sqlString)[1];
5321
6331
  this.parser.push(['Literal', matchValue]);
5322
6332
  return matchValue.length + 2;
5323
6333
  }
5324
6334
  if (this.checkNumberLiteral(sqlString, sqlLocale)) {
5325
- // eslint-disable-next-line
5326
- matchValue = /^[0-9]+(\.[0-9]+)?/.exec(sqlString)[0];
6335
+ matchValue = /^[0-9]+(\.[0-9]+)$/.exec(sqlString)[0];
5327
6336
  this.parser.push(['Literal', matchValue]);
5328
6337
  return matchValue.length;
5329
6338
  }
5330
6339
  //String
5331
- // eslint-disable-next-line
5332
- if (/^'((?:[^\\']+?|\\.|'')*)'(?!')/.exec(sqlString)) {
5333
- // eslint-disable-next-line
5334
- matchValue = /^'((?:[^\\']+?|\\.|'')*)'(?!')/.exec(sqlString)[0];
6340
+ var singleString = this.getSingleQuoteString(sqlString);
6341
+ if (singleString !== '') {
6342
+ matchValue = singleString;
5335
6343
  if (matchValue[matchValue.length - 2] === '(') {
5336
6344
  var isClosed = false;
5337
6345
  for (var j = matchValue.length; j < sqlString.length; j++) {
@@ -5346,38 +6354,43 @@ var QueryBuilder = /** @class */ (function (_super) {
5346
6354
  }
5347
6355
  else if (sqlString[matchValue.length] && (sqlString[matchValue.length] !== ')') &&
5348
6356
  !this.checkCondition(sqlString, matchValue)) {
5349
- matchValue = this.getSingleQuoteString(sqlString, matchValue);
6357
+ matchValue = this.combineSingleQuoteString(sqlString, matchValue);
5350
6358
  }
5351
6359
  // end
5352
6360
  this.parser.push(['String', matchValue]);
5353
6361
  return matchValue.length;
5354
6362
  }
5355
6363
  // Double String
5356
- // eslint-disable-next-line
5357
- if (/^"([^\\"]*(?:\\.[^\\"]*)*)"/.exec(sqlString)) {
5358
- // eslint-disable-next-line
5359
- matchValue = /^"([^\\"]*(?:\\.[^\\"]*)*)"/.exec(sqlString)[0];
6364
+ var doubleString = this.getDoubleQuoteString(sqlString);
6365
+ if (doubleString !== '') {
6366
+ matchValue = doubleString;
5360
6367
  this.parser.push(['DoubleString', matchValue]);
5361
6368
  return matchValue.length;
5362
6369
  }
5363
6370
  //Number
5364
- // eslint-disable-next-line
5365
- if (/^[0-9]+(\.[0-9]+)?/.exec(sqlString)) {
5366
- // eslint-disable-next-line
5367
- matchValue = /^[0-9]+(\.[0-9]+)?/.exec(sqlString)[0];
6371
+ if (/^\d*\.?\d+/.exec(sqlString)) {
6372
+ matchValue = /^\d*\.?\d+/.exec(sqlString)[0];
5368
6373
  this.parser.push(['Number', matchValue]);
5369
6374
  return matchValue.length;
5370
6375
  }
5371
6376
  //Negative Number
5372
- // eslint-disable-next-line
5373
- if (/^-?[0-9]+(\.[0-9]+)?/.exec(sqlString)) {
5374
- // eslint-disable-next-line
5375
- matchValue = /^-?[0-9]+(\.[0-9]+)?/.exec(sqlString)[0];
6377
+ if (/^-?\d*\.?\d+/.exec(sqlString)) {
6378
+ matchValue = /^-?\d*\.?\d+/.exec(sqlString)[0];
5376
6379
  this.parser.push(['Number', matchValue]);
5377
6380
  return matchValue.length;
5378
6381
  }
5379
6382
  return 1;
5380
6383
  };
6384
+ QueryBuilder.prototype.getDoubleQuoteString = function (sqlString) {
6385
+ var start = sqlString.indexOf('"');
6386
+ if (start === 0) {
6387
+ var end = sqlString.indexOf('"', start + 1);
6388
+ if (end !== -1) {
6389
+ return sqlString.substring(start, end + 1);
6390
+ }
6391
+ }
6392
+ return '';
6393
+ };
5381
6394
  QueryBuilder.prototype.checkCondition = function (sqlString, matchValue) {
5382
6395
  if (sqlString.slice(matchValue.length + 1, matchValue.length + 4) === 'AND' ||
5383
6396
  sqlString.slice(matchValue.length + 1, matchValue.length + 3) === 'OR') {
@@ -5385,16 +6398,26 @@ var QueryBuilder = /** @class */ (function (_super) {
5385
6398
  }
5386
6399
  return false;
5387
6400
  };
5388
- QueryBuilder.prototype.getSingleQuoteString = function (sqlString, matchValue) {
6401
+ QueryBuilder.prototype.getSingleQuoteString = function (sqlString, isBetween) {
6402
+ var start = sqlString.indexOf('\'');
6403
+ if ((start !== -1 && isBetween) || (start === 0 && !isBetween)) {
6404
+ var end = sqlString.indexOf('\'', start + 1);
6405
+ if (end !== -1) {
6406
+ return sqlString.substring(start, end + 1);
6407
+ }
6408
+ }
6409
+ return '';
6410
+ };
6411
+ QueryBuilder.prototype.combineSingleQuoteString = function (sqlString, matchValue) {
5389
6412
  if (sqlString[matchValue.length] && (sqlString[matchValue.length] !== ')') &&
5390
6413
  !this.checkCondition(sqlString, matchValue) && sqlString[matchValue.length] !== ',') {
5391
- var tempStr = sqlString.replace(matchValue, '');
5392
- // eslint-disable-next-line
5393
- if (isNullOrUndefined(/^'((?:[^\\']+?|\\.|'')*)'(?!')/.exec(tempStr))) {
5394
- // eslint-disable-next-line
5395
- var parsedValue = /^((?:[^\\']+?|\\.|'')*)'(?!')/.exec(tempStr)[0];
6414
+ var tempMatchValue = matchValue.substring(0, matchValue.length - 1);
6415
+ var tempStr = sqlString.replace(tempMatchValue, '');
6416
+ var singleString = this.getSingleQuoteString(tempStr, true);
6417
+ if (singleString !== '') {
6418
+ var parsedValue = singleString.substring(1, singleString.length);
5396
6419
  matchValue += parsedValue;
5397
- matchValue = this.getSingleQuoteString(sqlString, matchValue);
6420
+ matchValue = this.combineSingleQuoteString(sqlString, matchValue);
5398
6421
  }
5399
6422
  }
5400
6423
  return matchValue;
@@ -5423,8 +6446,7 @@ var QueryBuilder = /** @class */ (function (_super) {
5423
6446
  return true;
5424
6447
  }
5425
6448
  else {
5426
- // eslint-disable-next-line
5427
- if (/^[0-9]+(\.[0-9]+)?/.exec(sqlString)) {
6449
+ if (/^[0-9]+(?:\.[0-9]+)$/.exec(sqlString)) {
5428
6450
  var secParser = this.parser[this.parser.length - 2];
5429
6451
  var betweenParser = this.parser[this.parser.length - 3];
5430
6452
  if (lastParser[0] === 'Left' && (secParser && secParser[0] === 'Conditions')) {
@@ -5637,17 +6659,17 @@ var QueryBuilder = /** @class */ (function (_super) {
5637
6659
  strVal = [];
5638
6660
  rule.type = this.getTypeFromColumn(rule);
5639
6661
  }
6662
+ if (this.enableSeparateConnector && parser[i + 1][0] === 'Conditions') {
6663
+ rule.condition = parser[i + 1][1];
6664
+ }
5640
6665
  }
5641
6666
  else if (parser[i + 1][0] === 'Operators') {
5642
6667
  rule.operator = this.getOperator(parser[i + 2][1], parser[i + 1][1], sqlLocale);
5643
- var isEmptyOper = false;
5644
- if (rule.operator == "equal" && parser[i + 2][0] === "String" && parser[i + 2][1] === "''") {
5645
- rule.operator = "isempty";
5646
- isEmptyOper = true;
6668
+ if (rule.operator === 'equal' && parser[i + 2][0] === 'String' && parser[i + 2][1] === '\'\'') {
6669
+ rule.operator = 'isempty';
5647
6670
  }
5648
- else if (rule.operator == "notequal" && parser[i + 2][0] === "String" && parser[i + 2][1] === "''") {
5649
- rule.operator = "isnotempty";
5650
- isEmptyOper = true;
6671
+ else if (rule.operator === 'notequal' && parser[i + 2][0] === 'String' && parser[i + 2][1] === '\'\'') {
6672
+ rule.operator = 'isnotempty';
5651
6673
  }
5652
6674
  if (parser[i + 2][0] === 'Number') {
5653
6675
  rule.type = 'number';
@@ -5661,6 +6683,9 @@ var QueryBuilder = /** @class */ (function (_super) {
5661
6683
  }
5662
6684
  rule.value = val;
5663
6685
  }
6686
+ if (this.enableSeparateConnector && parser[i + 3][0] === 'Conditions') {
6687
+ rule.condition = parser[i + 3][1];
6688
+ }
5664
6689
  rule.type = this.getTypeFromColumn(rule);
5665
6690
  }
5666
6691
  rules.rules.push(rule);
@@ -5688,7 +6713,7 @@ var QueryBuilder = /** @class */ (function (_super) {
5688
6713
  subRules = this.processParser(this.parser, subRules, levelColl, sqlLocale);
5689
6714
  return rules;
5690
6715
  }
5691
- else if (parser[i][0] === 'Conditions') {
6716
+ else if (parser[i][0] === 'Conditions' && !this.enableSeparateConnector) {
5692
6717
  if (parser[i][1] === 'not' || (sqlLocale && this.l10n.getConstant('NOT').toLowerCase() === parser[i][1])) {
5693
6718
  rules.not = true;
5694
6719
  }
@@ -5709,27 +6734,6 @@ var QueryBuilder = /** @class */ (function (_super) {
5709
6734
  }
5710
6735
  return rules;
5711
6736
  };
5712
- QueryBuilder.prototype.getValueFromParser = function (parser, idx) {
5713
- var value = '';
5714
- var k;
5715
- for (k = idx; k < parser.length; k++) {
5716
- if (parser[k][0] !== 'String' || parser[k][1] === ',' || parser[k][1] === ', ') {
5717
- break;
5718
- }
5719
- else {
5720
- if (value !== '') {
5721
- idx += 1;
5722
- }
5723
- if (parser[k][1] !== null) {
5724
- value += parser[k][1];
5725
- }
5726
- else {
5727
- value = null;
5728
- }
5729
- }
5730
- }
5731
- return { value: value, idx: idx };
5732
- };
5733
6737
  /**
5734
6738
  * Clone the Group
5735
6739
  *
@@ -5764,8 +6768,14 @@ var QueryBuilder = /** @class */ (function (_super) {
5764
6768
  this.ruleIndex = i;
5765
6769
  }
5766
6770
  }
5767
- this.addRules([{ 'label': getRule.label, 'field': getRule.field, 'type': getRule.type, 'operator': getRule.operator,
5768
- 'value': getRule.value }], groupId);
6771
+ if (this.enableSeparateConnector) {
6772
+ this.addRules([{ 'label': getRule.label, 'field': getRule.field, 'type': getRule.type, 'operator': getRule.operator,
6773
+ 'value': getRule.value, 'condition': getRule.condition }], groupId);
6774
+ }
6775
+ else {
6776
+ this.addRules([{ 'label': getRule.label, 'field': getRule.field, 'type': getRule.type, 'operator': getRule.operator,
6777
+ 'value': getRule.value }], groupId);
6778
+ }
5769
6779
  this.ruleIndex = -1;
5770
6780
  };
5771
6781
  QueryBuilder.prototype.ruleLock = function (target) {
@@ -5866,6 +6876,8 @@ var QueryBuilder = /** @class */ (function (_super) {
5866
6876
  var lockElem = groupElem.querySelectorAll('.e-lock-grp-btn');
5867
6877
  var cloneElem = groupElem.querySelectorAll('.e-clone-grp-btn');
5868
6878
  var groupContElem = groupElem.querySelectorAll('.e-group-container');
6879
+ var addCondition = groupElem.querySelectorAll('.e-add-condition-btn');
6880
+ var addGroup = groupElem.querySelectorAll('.e-add-group-btn');
5869
6881
  for (var i = 0; i < andElem.length; i++) {
5870
6882
  if (isDisabled) {
5871
6883
  if (groupContElem[i] && groupContElem[i].classList.contains('e-disable')) {
@@ -5873,7 +6885,15 @@ var QueryBuilder = /** @class */ (function (_super) {
5873
6885
  }
5874
6886
  andElem[i].disabled = true;
5875
6887
  orElem[i].disabled = true;
5876
- addElem[i].disabled = true;
6888
+ if (addElem[i]) {
6889
+ addElem[i].disabled = true;
6890
+ }
6891
+ if (addCondition[i]) {
6892
+ addCondition[i].disabled = true;
6893
+ }
6894
+ if (addGroup[i]) {
6895
+ addGroup[i].disabled = true;
6896
+ }
5877
6897
  if (notElem[i]) {
5878
6898
  notElem[i].disabled = true;
5879
6899
  }
@@ -5884,7 +6904,7 @@ var QueryBuilder = /** @class */ (function (_super) {
5884
6904
  cloneElem[i].disabled = true;
5885
6905
  }
5886
6906
  andElem[i].parentElement.classList.add('e-disabled');
5887
- if (lockElem[i] !== target) {
6907
+ if (lockElem[i] && lockElem[i] !== target) {
5888
6908
  lockElem[i].disabled = true;
5889
6909
  lockElem[i].children[0].classList.remove('e-unlock');
5890
6910
  lockElem[i].children[0].classList.add('e-lock');
@@ -5896,8 +6916,18 @@ var QueryBuilder = /** @class */ (function (_super) {
5896
6916
  }
5897
6917
  andElem[i].disabled = false;
5898
6918
  orElem[i].disabled = false;
5899
- addElem[i].disabled = false;
5900
- lockElem[i].disabled = false;
6919
+ if (addElem[i]) {
6920
+ addElem[i].disabled = false;
6921
+ }
6922
+ if (addCondition[i]) {
6923
+ addCondition[i].disabled = false;
6924
+ }
6925
+ if (addGroup[i]) {
6926
+ addGroup[i].disabled = false;
6927
+ }
6928
+ if (lockElem[i]) {
6929
+ lockElem[i].disabled = false;
6930
+ }
5901
6931
  if (notElem[i]) {
5902
6932
  notElem[i].disabled = false;
5903
6933
  }
@@ -5908,8 +6938,12 @@ var QueryBuilder = /** @class */ (function (_super) {
5908
6938
  cloneElem[i].disabled = false;
5909
6939
  }
5910
6940
  andElem[i].parentElement.classList.remove('e-disabled');
5911
- lockElem[i].children[0].classList.remove('e-lock');
5912
- lockElem[i].children[0].classList.add('e-unlock');
6941
+ if (lockElem[i]) {
6942
+ lockElem[i].children[0].classList.remove('e-lock');
6943
+ }
6944
+ if (lockElem[i]) {
6945
+ lockElem[i].children[0].classList.add('e-unlock');
6946
+ }
5913
6947
  }
5914
6948
  }
5915
6949
  this.disableRuleControls(target, groupElem, isDisabled);
@@ -6043,6 +7077,15 @@ var QueryBuilder = /** @class */ (function (_super) {
6043
7077
  __decorate([
6044
7078
  Event()
6045
7079
  ], QueryBuilder.prototype, "ruleChange", void 0);
7080
+ __decorate([
7081
+ Event()
7082
+ ], QueryBuilder.prototype, "dragStart", void 0);
7083
+ __decorate([
7084
+ Event()
7085
+ ], QueryBuilder.prototype, "drag", void 0);
7086
+ __decorate([
7087
+ Event()
7088
+ ], QueryBuilder.prototype, "drop", void 0);
6046
7089
  __decorate([
6047
7090
  Complex({}, ShowButtons)
6048
7091
  ], QueryBuilder.prototype, "showButtons", void 0);
@@ -6118,9 +7161,15 @@ var QueryBuilder = /** @class */ (function (_super) {
6118
7161
  __decorate([
6119
7162
  Property('')
6120
7163
  ], QueryBuilder.prototype, "separator", void 0);
7164
+ __decorate([
7165
+ Property(false)
7166
+ ], QueryBuilder.prototype, "enableSeparateConnector", void 0);
6121
7167
  __decorate([
6122
7168
  Complex({ condition: 'and', rules: [] }, Rule)
6123
7169
  ], QueryBuilder.prototype, "rule", void 0);
7170
+ __decorate([
7171
+ Property(false)
7172
+ ], QueryBuilder.prototype, "allowDragAndDrop", void 0);
6124
7173
  QueryBuilder = __decorate([
6125
7174
  NotifyPropertyChanges
6126
7175
  ], QueryBuilder);