@syncfusion/ej2-querybuilder 25.2.7 → 26.1.38

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 +1334 -290
  6. package/dist/es6/ej2-querybuilder.es2015.js.map +1 -1
  7. package/dist/es6/ej2-querybuilder.es5.js +1327 -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 +1319 -262
  16. package/src/query-builder/query-library.js +2 -2
  17. package/styles/bootstrap-dark.css +195 -21
  18. package/styles/bootstrap-dark.scss +15 -1
  19. package/styles/bootstrap.css +195 -21
  20. package/styles/bootstrap.scss +15 -1
  21. package/styles/bootstrap4.css +199 -22
  22. package/styles/bootstrap4.scss +15 -1
  23. package/styles/bootstrap5-dark.css +199 -30
  24. package/styles/bootstrap5-dark.scss +15 -1
  25. package/styles/bootstrap5.css +199 -30
  26. package/styles/bootstrap5.scss +15 -1
  27. package/styles/fabric-dark.css +193 -20
  28. package/styles/fabric-dark.scss +15 -1
  29. package/styles/fabric.css +193 -20
  30. package/styles/fabric.scss +15 -1
  31. package/styles/fluent-dark.css +197 -28
  32. package/styles/fluent-dark.scss +15 -1
  33. package/styles/fluent.css +197 -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 +196 -20
  38. package/styles/highcontrast-light.scss +15 -1
  39. package/styles/highcontrast.css +196 -20
  40. package/styles/highcontrast.scss +15 -1
  41. package/styles/material-dark.css +206 -24
  42. package/styles/material-dark.scss +15 -1
  43. package/styles/material.css +208 -24
  44. package/styles/material.scss +15 -1
  45. package/styles/material3-dark.css +213 -26
  46. package/styles/material3-dark.scss +15 -1
  47. package/styles/material3.css +213 -26
  48. package/styles/material3.scss +15 -1
  49. package/styles/query-builder/_bds-definition.scss +8 -1
  50. package/styles/query-builder/_bootstrap-dark-definition.scss +8 -0
  51. package/styles/query-builder/_bootstrap-definition.scss +8 -0
  52. package/styles/query-builder/_bootstrap4-definition.scss +8 -0
  53. package/styles/query-builder/_bootstrap5-definition.scss +8 -1
  54. package/styles/query-builder/_bootstrap5.3-definition.scss +115 -0
  55. package/styles/query-builder/_fabric-dark-definition.scss +8 -0
  56. package/styles/query-builder/_fabric-definition.scss +8 -0
  57. package/styles/query-builder/_fluent-definition.scss +8 -1
  58. package/styles/query-builder/_fluent2-definition.scss +114 -0
  59. package/styles/query-builder/_fusionnew-definition.scss +8 -1
  60. package/styles/query-builder/_highcontrast-definition.scss +8 -0
  61. package/styles/query-builder/_highcontrast-light-definition.scss +8 -0
  62. package/styles/query-builder/_layout.scss +273 -12
  63. package/styles/query-builder/_material-dark-definition.scss +8 -0
  64. package/styles/query-builder/_material-definition.scss +8 -0
  65. package/styles/query-builder/_material3-definition.scss +8 -1
  66. package/styles/query-builder/_tailwind-definition.scss +8 -1
  67. package/styles/query-builder/_theme.scss +34 -22
  68. package/styles/query-builder/bootstrap-dark.css +195 -21
  69. package/styles/query-builder/bootstrap.css +195 -21
  70. package/styles/query-builder/bootstrap4.css +199 -22
  71. package/styles/query-builder/bootstrap5-dark.css +199 -30
  72. package/styles/query-builder/bootstrap5.css +199 -30
  73. package/styles/query-builder/fabric-dark.css +193 -20
  74. package/styles/query-builder/fabric.css +193 -20
  75. package/styles/query-builder/fluent-dark.css +197 -28
  76. package/styles/query-builder/fluent.css +197 -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 +196 -20
  80. package/styles/query-builder/highcontrast.css +196 -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 +206 -24
  100. package/styles/query-builder/material.css +208 -24
  101. package/styles/query-builder/material3-dark.css +213 -26
  102. package/styles/query-builder/material3.css +213 -26
  103. package/styles/query-builder/tailwind-dark.css +206 -24
  104. package/styles/query-builder/tailwind.css +206 -24
  105. package/styles/tailwind-dark.css +206 -24
  106. package/styles/tailwind-dark.scss +15 -1
  107. package/styles/tailwind.css +206 -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,20 +1168,68 @@ 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++) {
853
1220
  if (columns[parseInt(i.toString(), 10)].type === 'object') {
1221
+ if (this.isAngular && columns[parseInt(i.toString(), 10)].template) {
1222
+ delete columns[parseInt(i.toString(), 10)].template;
1223
+ }
854
1224
  columns[parseInt(i.toString(), 10)].selectable = false;
855
1225
  this.updateDropdowntreeDS(columns[parseInt(i.toString(), 10)].columns);
856
1226
  }
1227
+ else if (this.isAngular && columns[parseInt(i.toString(), 10)].template) {
1228
+ delete columns[parseInt(i.toString(), 10)].template;
1229
+ }
857
1230
  }
858
1231
  };
859
- QueryBuilder.prototype.updateAddedRule = function (target, rule, newRule, isRuleTemplate, pId) {
1232
+ QueryBuilder.prototype.updateAddedRule = function (target, rule, newRule, isRuleTemplate, pId, isNewRuleAdded) {
860
1233
  var ruleElem;
861
1234
  var index = 0;
862
1235
  var groupElem;
@@ -867,7 +1240,12 @@ var QueryBuilder = /** @class */ (function (_super) {
867
1240
  rules = this.getParentGroup(groupElem);
868
1241
  while (ruleElem && ruleElem.previousElementSibling !== null) {
869
1242
  ruleElem = ruleElem.previousElementSibling;
870
- index++;
1243
+ var enableSeparateCondition = this.enableSeparateConnector && ((!this.headerTemplate && !ruleElem.classList.contains('e-btn-group')) ||
1244
+ (this.headerTemplate && (ruleElem.classList.contains('e-rule-container') ||
1245
+ ruleElem.classList.contains('e-group-container'))));
1246
+ if (!this.enableSeparateConnector || enableSeparateCondition) {
1247
+ index++;
1248
+ }
871
1249
  }
872
1250
  rules.rules[index] = rule;
873
1251
  }
@@ -885,6 +1263,9 @@ var QueryBuilder = /** @class */ (function (_super) {
885
1263
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
886
1264
  rules.rules[rules.rules.length - 1].custom = custom;
887
1265
  }
1266
+ if (this.enableSeparateConnector) {
1267
+ rules.rules[rules.rules.length - 1].condition = rule.condition ? rule.condition : newRule.condition;
1268
+ }
888
1269
  }
889
1270
  else {
890
1271
  rules.rules.splice(this.ruleIndex + 1, 0, {
@@ -894,6 +1275,9 @@ var QueryBuilder = /** @class */ (function (_super) {
894
1275
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
895
1276
  rules.rules[this.ruleIndex + 1].custom = custom;
896
1277
  }
1278
+ if (this.enableSeparateConnector) {
1279
+ rules.rules[this.ruleIndex + 1].condition = rule.condition ? rule.condition : newRule.condition;
1280
+ }
897
1281
  }
898
1282
  }
899
1283
  else {
@@ -907,7 +1291,7 @@ var QueryBuilder = /** @class */ (function (_super) {
907
1291
  rules.rules.push(newRule);
908
1292
  }
909
1293
  }
910
- this.disableRuleCondition(target, rules);
1294
+ this.disableRuleCondition(target, rules, isNewRuleAdded);
911
1295
  };
912
1296
  QueryBuilder.prototype.changeRuleTemplate = function (column, element) {
913
1297
  var operVal = this.selectedColumn.operators;
@@ -985,7 +1369,11 @@ var QueryBuilder = /** @class */ (function (_super) {
985
1369
  if (validateRule && validateRule.isRequired) {
986
1370
  while (indexElem && indexElem.previousElementSibling !== null) {
987
1371
  indexElem = indexElem.previousElementSibling;
988
- index++;
1372
+ var separateCondition = this.enableSeparateConnector && ((!this.headerTemplate && !indexElem.classList.contains('e-btn-group')) ||
1373
+ (this.headerTemplate && (indexElem.classList.contains('e-rule-container') || indexElem.classList.contains('e-group-container'))));
1374
+ if (!this.enableSeparateConnector || separateCondition) {
1375
+ index++;
1376
+ }
989
1377
  }
990
1378
  fieldElem = tempElem.querySelector('.e-rule-operator .e-control');
991
1379
  if (!rule.rules[index].operator) {
@@ -1062,9 +1450,10 @@ var QueryBuilder = /** @class */ (function (_super) {
1062
1450
  obj.level = this.levelColl[obj.groupElement.id].slice();
1063
1451
  return obj;
1064
1452
  };
1065
- QueryBuilder.prototype.groupTemplate = function () {
1453
+ QueryBuilder.prototype.groupTemplate = function (isConnector) {
1066
1454
  var glueElem;
1067
1455
  var inputElem;
1456
+ var dragClsName;
1068
1457
  var labelElem;
1069
1458
  var grpActElem;
1070
1459
  var groupBtn;
@@ -1077,9 +1466,27 @@ var QueryBuilder = /** @class */ (function (_super) {
1077
1466
  groupElem.appendChild(grpBodyElem);
1078
1467
  // create button group in OR and AND process
1079
1468
  if (!this.headerTemplate) {
1080
- glueElem = this.createElement('div', { attrs: { class: 'e-lib e-btn-group', role: 'group' } });
1469
+ if (this.allowDragAndDrop) {
1470
+ dragClsName = 'e-icons e-drag-qb-rule';
1471
+ }
1472
+ else {
1473
+ dragClsName = 'e-icons e-drag-qb-rule e-hidden';
1474
+ }
1475
+ var spanDragElement = this.createElement('span', { attrs: { class: dragClsName, 'aria-lable': 'drag handle',
1476
+ title: 'drag handle' } });
1477
+ groupHdrElem.appendChild(spanDragElement);
1478
+ var className = this.enableSeparateConnector && !isConnector ? 'e-lib e-btn-group e-qb-toggle-btn' : 'e-lib e-btn-group';
1479
+ glueElem = this.createElement('div', { attrs: { class: className, role: 'group' } });
1480
+ if (this.enableSeparateConnector) {
1481
+ glueElem.classList.add('e-multi-connector');
1482
+ }
1081
1483
  if (this.enableNotCondition) {
1082
- inputElem = this.createElement('button', { attrs: { type: 'button', class: 'e-qb-toggle' } });
1484
+ if (this.enableSeparateConnector) {
1485
+ inputElem = this.createElement('input', { attrs: { type: 'checkbox', class: 'e-qb-toggle' } });
1486
+ }
1487
+ else {
1488
+ inputElem = this.createElement('button', { attrs: { type: 'button', class: 'e-qb-toggle' } });
1489
+ }
1083
1490
  glueElem.appendChild(inputElem);
1084
1491
  }
1085
1492
  inputElem = this.createElement('input', { attrs: { type: 'radio', class: 'e-btngroup-and', value: 'AND' } });
@@ -1094,8 +1501,16 @@ var QueryBuilder = /** @class */ (function (_super) {
1094
1501
  glueElem.appendChild(labelElem);
1095
1502
  groupHdrElem.appendChild(glueElem);
1096
1503
  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);
1504
+ if (this.enableSeparateConnector) {
1505
+ groupBtn = this.createElement('button', { attrs: { type: 'button', class: 'e-add-condition-btn' } });
1506
+ grpActElem.appendChild(groupBtn);
1507
+ groupBtn = this.createElement('button', { attrs: { type: 'button', class: 'e-add-group-btn' } });
1508
+ grpActElem.appendChild(groupBtn);
1509
+ }
1510
+ else {
1511
+ groupBtn = this.createElement('button', { attrs: { type: 'button', class: 'e-add-btn' } });
1512
+ grpActElem.appendChild(groupBtn);
1513
+ }
1099
1514
  groupHdrElem.appendChild(grpActElem);
1100
1515
  }
1101
1516
  return groupElem;
@@ -1105,9 +1520,19 @@ var QueryBuilder = /** @class */ (function (_super) {
1105
1520
  var clsName;
1106
1521
  var cloneClsName;
1107
1522
  var lockClsName;
1523
+ var dragClsName;
1108
1524
  var ruleElem = this.createElement('div');
1109
1525
  var fieldElem = this.createElement('div', { attrs: { class: 'e-rule-field' } });
1110
1526
  tempElem = this.createElement('div', { attrs: { class: 'e-rule-filter' } });
1527
+ if (this.allowDragAndDrop) {
1528
+ dragClsName = 'e-icons e-drag-qb-rule';
1529
+ }
1530
+ else {
1531
+ dragClsName = 'e-icons e-drag-qb-rule e-hidden';
1532
+ }
1533
+ var spanDragElement = this.createElement('span', { attrs: { class: dragClsName, 'aria-lable': 'drag handle',
1534
+ title: 'drag handle' } });
1535
+ fieldElem.appendChild(spanDragElement);
1111
1536
  var filterElem = this.createElement('input', { attrs: { type: 'text', class: 'e-filter-input' } });
1112
1537
  tempElem.appendChild(filterElem);
1113
1538
  fieldElem.appendChild(tempElem);
@@ -1151,7 +1576,7 @@ var QueryBuilder = /** @class */ (function (_super) {
1151
1576
  QueryBuilder.prototype.addGroupElement = function (isGroup, target, condition, isBtnClick, not, isRoot, rule) {
1152
1577
  var _this = this;
1153
1578
  var args = { groupID: target.id.replace(this.element.id + '_', ''), cancel: false, type: 'insertGroup' };
1154
- if (!this.isImportRules && !this.isInitialLoad) {
1579
+ if (!this.isImportRules && !this.isInitialLoad && !this.prvtEvtTgrDaD) {
1155
1580
  this.trigger('beforeChange', args, function (observedChangeArgs) {
1156
1581
  _this.addGroupSuccess(observedChangeArgs, isGroup, target, condition, isBtnClick, not, isRoot, rule);
1157
1582
  });
@@ -1162,6 +1587,7 @@ var QueryBuilder = /** @class */ (function (_super) {
1162
1587
  }
1163
1588
  };
1164
1589
  QueryBuilder.prototype.addGroupSuccess = function (args, isGroup, eventTarget, condition, isBtnClick, not, isRoot, rule) {
1590
+ var _this = this;
1165
1591
  if (!args.cancel && (this.element.querySelectorAll('.e-group-container').length <= this.maxGroupCount)) {
1166
1592
  var target = eventTarget;
1167
1593
  var dltGroupBtn = void 0;
@@ -1172,8 +1598,17 @@ var QueryBuilder = /** @class */ (function (_super) {
1172
1598
  else {
1173
1599
  groupID = target.id;
1174
1600
  }
1601
+ if (this.enableSeparateConnector) {
1602
+ this.groupElem = this.groupTemplate();
1603
+ }
1175
1604
  var groupElem = this.groupElem.cloneNode(true);
1176
1605
  groupElem.setAttribute('id', this.element.id + '_group' + this.groupIdCounter);
1606
+ if (this.groupIdCounter === 0 && this.allowDragAndDrop && groupElem.querySelector('.e-drag-qb-rule')) {
1607
+ if (groupElem && groupElem.children[0]) {
1608
+ groupElem.children[0].classList.add('e-parent-header');
1609
+ }
1610
+ addClass([groupElem.querySelector('.e-drag-qb-rule')], 'e-hidden');
1611
+ }
1177
1612
  if (this.headerTemplate) {
1178
1613
  if (isRoot) {
1179
1614
  isGroup = false;
@@ -1226,7 +1661,25 @@ var QueryBuilder = /** @class */ (function (_super) {
1226
1661
  this.isLastGroup = true;
1227
1662
  }
1228
1663
  else {
1229
- childElems[this.groupIndex + 1].parentNode.insertBefore(groupElem, childElems[this.groupIndex + 1]); // clone the element to nxt element
1664
+ if (this.enableSeparateConnector) {
1665
+ var index = 0;
1666
+ var tempGroupIndex = this.groupIndex + 1;
1667
+ for (var i = 0; i < tempGroupIndex; i++) {
1668
+ if (childElems[i].classList.contains('e-rule-container')) {
1669
+ tempGroupIndex++;
1670
+ index++;
1671
+ }
1672
+ }
1673
+ if (index > 0) {
1674
+ index--;
1675
+ }
1676
+ var idx = this.groupIndex + index + 1;
1677
+ childElems[idx].parentNode.insertBefore(groupElem, childElems[idx]);
1678
+ }
1679
+ else {
1680
+ var idx = this.groupIndex + 1;
1681
+ childElems[idx].parentNode.insertBefore(groupElem, childElems[idx]);
1682
+ }
1230
1683
  this.isMiddleGroup = true;
1231
1684
  }
1232
1685
  }
@@ -1292,7 +1745,14 @@ var QueryBuilder = /** @class */ (function (_super) {
1292
1745
  if (this.enableNotCondition) {
1293
1746
  if (!this.headerTemplate) {
1294
1747
  var notElem = groupElem.querySelector('.e-qb-toggle');
1295
- var tglBtn = new Button({ content: this.l10n.getConstant('NOT'), cssClass: 'e-btn e-small' });
1748
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
1749
+ var tglBtn = void 0;
1750
+ if (this.enableSeparateConnector) {
1751
+ tglBtn = new CheckBox({ label: this.l10n.getConstant('NOT'), cssClass: 'e-qb-toggle' });
1752
+ }
1753
+ else {
1754
+ tglBtn = new Button({ content: this.l10n.getConstant('NOT'), cssClass: 'e-btn e-small' });
1755
+ }
1296
1756
  tglBtn.appendTo(notElem);
1297
1757
  groupElem.querySelector('.e-btngroup-and-lbl').classList.add('e-not');
1298
1758
  if (this.updatedRule && this.updatedRule.not) {
@@ -1300,67 +1760,218 @@ var QueryBuilder = /** @class */ (function (_super) {
1300
1760
  }
1301
1761
  }
1302
1762
  }
1763
+ if (this.enableSeparateConnector && !this.headerTemplate) {
1764
+ var andElem = groupElem.querySelector('.e-btngroup-and');
1765
+ var orElem = groupElem.querySelector('.e-btngroup-or');
1766
+ var btnGroup = groupElem.querySelector('.e-btn-group');
1767
+ for (var i = 0; i < btnGroup.childNodes.length; i++) {
1768
+ if (groupElem.querySelector('.e-btn-group').childNodes[i].textContent.toLowerCase() === 'not') {
1769
+ if (!this.enableNotCondition) {
1770
+ btnGroup.childNodes[i].style.display = 'none';
1771
+ }
1772
+ else {
1773
+ btnGroup.childNodes[i].classList.add('e-multiconnector');
1774
+ }
1775
+ }
1776
+ else {
1777
+ btnGroup.childNodes[i].style.display = 'none';
1778
+ }
1779
+ }
1780
+ var prevSibling = groupElem.previousElementSibling;
1781
+ if (prevSibling) {
1782
+ if (isNullOrUndefined(this.headerTemplate)) {
1783
+ groupElem.parentElement.insertBefore(this.groupTemplate(true).querySelector('.e-btn-group'), groupElem);
1784
+ var notElem = groupElem.previousElementSibling.childNodes[0];
1785
+ if (notElem.classList.contains('e-qb-toggle')) {
1786
+ notElem.style.display = 'none';
1787
+ }
1788
+ }
1789
+ if (!this.isImportRules) {
1790
+ var groupElement = groupElem.previousElementSibling;
1791
+ var newAndElem = groupElement.querySelector('.e-btngroup-and');
1792
+ var newOrElem = groupElement.querySelector('.e-btngroup-or');
1793
+ if (!andElem.checked && !orElem.checked) {
1794
+ var nextSibling = groupElem.nextElementSibling;
1795
+ if (nextSibling && nextSibling.classList.contains('e-btn-group')) {
1796
+ andElem = nextSibling.querySelector('.e-btngroup-and');
1797
+ orElem = nextSibling.querySelector('.e-btngroup-or');
1798
+ newAndElem.checked = andElem.checked;
1799
+ newOrElem.checked = orElem.checked;
1800
+ }
1801
+ }
1802
+ else if (this.enableSeparateConnector) {
1803
+ if (andElem.checked) {
1804
+ newAndElem.checked = true;
1805
+ }
1806
+ if (orElem.checked) {
1807
+ newOrElem.checked = true;
1808
+ }
1809
+ }
1810
+ }
1811
+ }
1812
+ }
1303
1813
  this.updatedRule = null;
1304
1814
  if (this.headerTemplate) {
1305
- var args_2 = { requestType: 'header-template-create', ruleID: groupElem.id, condition: condition,
1815
+ var args_4 = { requestType: 'header-template-create', ruleID: groupElem.id, condition: condition,
1306
1816
  notCondition: this.enableNotCondition ? not : undefined };
1307
- this.trigger('actionBegin', args_2);
1817
+ this.trigger('actionBegin', args_4);
1308
1818
  }
1309
1819
  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'));
1820
+ if (this.enableSeparateConnector) {
1821
+ var conditionBtn_1 = groupElem.querySelector('.e-add-condition-btn');
1822
+ var btnObj = new Button({ cssClass: this.element.id + '_addConditionbtn', content: this.l10n.getConstant('AddCondition') });
1823
+ btnObj.appendTo(conditionBtn_1);
1824
+ btnObj.element.onclick = function () {
1825
+ _this.addRuleElement(closest(conditionBtn_1, '.e-group-container'), {});
1826
+ };
1827
+ var groupBtn_1 = groupElem.querySelector('.e-add-group-btn');
1828
+ btnObj = new Button({ cssClass: this.element.id + '_addGroupbtn', content: this.l10n.getConstant('AddGroup') });
1829
+ btnObj.appendTo(groupBtn_1);
1830
+ btnObj.element.onclick = function () {
1831
+ _this.addGroupElement(true, closest(groupBtn_1, '.e-group-container'), '', true);
1832
+ };
1833
+ }
1834
+ else {
1835
+ var groupBtn = groupElem.querySelector('.e-add-btn');
1836
+ var btnObj = new DropDownButton({
1837
+ items: this.items,
1838
+ cssClass: 'e-round e-small e-caret-hide e-addrulegroup',
1839
+ iconCss: 'e-icons e-add-icon',
1840
+ beforeOpen: this.selectBtn.bind(this, groupBtn),
1841
+ select: this.selectBtn.bind(this, groupBtn)
1842
+ });
1843
+ btnObj.appendTo(groupBtn);
1844
+ groupBtn.setAttribute('title', this.l10n.getConstant('AddButton'));
1845
+ }
1320
1846
  }
1321
- if (!this.isImportRules) {
1847
+ if (!this.isImportRules && !this.prvtEvtTgrDaD) {
1322
1848
  var grpId = target.id.replace(this.element.id + '_', '');
1323
1849
  var chgrpId = groupElem.id.replace(this.element.id + '_', '');
1324
1850
  this.trigger('change', { groupID: grpId, type: 'insertGroup', childGroupID: chgrpId });
1325
1851
  }
1326
1852
  }
1327
1853
  };
1328
- QueryBuilder.prototype.headerTemplateFn = function (groupElem, not, condition, rule, groupID) {
1854
+ QueryBuilder.prototype.setMultiConnector = function (trgt) {
1855
+ if (this.enableSeparateConnector && !this.headerTemplate) {
1856
+ if (trgt.previousElementSibling && this.groupElem.querySelector('.e-btn-group')) {
1857
+ trgt.parentElement.insertBefore(this.groupTemplate(true).querySelector('.e-btn-group'), trgt);
1858
+ var notElem = trgt.previousElementSibling.childNodes[0];
1859
+ if (notElem.classList.contains('e-qb-toggle')) {
1860
+ notElem.style.display = 'none';
1861
+ }
1862
+ this.addHeaderDiv(trgt);
1863
+ }
1864
+ }
1865
+ };
1866
+ QueryBuilder.prototype.addHeaderDiv = function (elem) {
1867
+ var prevRule;
1868
+ var prevElem = elem.previousElementSibling.previousElementSibling;
1869
+ if (prevElem) {
1870
+ if (prevElem.id.indexOf('rule') > -1) {
1871
+ prevRule = this.getRule(prevElem);
1872
+ }
1873
+ else {
1874
+ prevRule = this.getGroup(prevElem);
1875
+ }
1876
+ if (isNullOrUndefined(prevRule.condition)) {
1877
+ prevRule.condition = 'and';
1878
+ }
1879
+ var orElem = elem.previousElementSibling.querySelector('.e-btngroup-or');
1880
+ var andElem = elem.previousElementSibling.querySelector('.e-btngroup-and');
1881
+ orElem.disabled = false;
1882
+ andElem.disabled = false;
1883
+ if (prevRule.condition === 'or') {
1884
+ orElem.checked = true;
1885
+ }
1886
+ else {
1887
+ andElem.checked = true;
1888
+ }
1889
+ }
1890
+ };
1891
+ QueryBuilder.prototype.headerTemplateFn = function (groupElem, not, condition, rule, groupID, isInitialRule) {
1329
1892
  var template;
1330
1893
  var templateID = this.element.id + '_header';
1331
1894
  var args;
1332
1895
  var groupHdr = groupElem.querySelector('.e-group-header');
1896
+ if (this.enableSeparateConnector && groupElem.id.indexOf('rule') !== -1) {
1897
+ groupHdr = groupElem;
1898
+ }
1333
1899
  if (this.headerTemplate) {
1334
1900
  args = { requestType: 'header-template-initialize', ruleID: groupElem.id,
1335
1901
  notCondition: this.enableNotCondition ? not : undefined,
1336
1902
  condition: condition, rule: this.getRuleCollection(rule, true), groupID: groupID };
1337
1903
  this.trigger('actionBegin', args);
1904
+ if (this.enableSeparateConnector && groupElem.id.indexOf('rule') !== -1) {
1905
+ args.requestType = 'rule-template-create';
1906
+ }
1338
1907
  this.headerFn = this.templateParser(this.headerTemplate);
1339
1908
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
1340
1909
  if (this.isReact) {
1341
1910
  template = this.headerFn(args, this, groupElem.id, templateID)[0];
1342
- groupHdr.appendChild(template);
1911
+ if (this.enableSeparateConnector && isInitialRule) {
1912
+ this.enableSeparateConnectorInitialRule(groupElem, template);
1913
+ }
1914
+ else if (this.enableSeparateConnector && groupElem.id.indexOf('rule') !== -1) {
1915
+ groupHdr.parentElement.insertBefore(template, groupHdr.nextElementSibling);
1916
+ }
1917
+ else {
1918
+ groupHdr.appendChild(template);
1919
+ }
1343
1920
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
1344
1921
  }
1345
1922
  else if (this.isAngular) {
1346
1923
  var templateColl = this.headerFn(args, this, groupElem.id, templateID);
1347
1924
  template = (templateColl[0].nodeType === 3) ? templateColl[1] : templateColl[0];
1348
- groupHdr.appendChild(template);
1925
+ if (this.enableSeparateConnector && isInitialRule) {
1926
+ this.enableSeparateConnectorInitialRule(groupElem, template);
1927
+ }
1928
+ else if (this.enableSeparateConnector && groupElem.id.indexOf('rule') !== -1) {
1929
+ groupHdr.parentElement.insertBefore(template, groupHdr.nextElementSibling);
1930
+ }
1931
+ else {
1932
+ groupHdr.appendChild(template);
1933
+ }
1349
1934
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
1350
1935
  }
1351
1936
  else if (this.isVue3) {
1352
1937
  template = this.headerFn(args, this, groupElem.id, templateID);
1353
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
1354
- append(template, groupHdr);
1938
+ if (this.enableSeparateConnector && isInitialRule) {
1939
+ this.enableSeparateConnectorInitialRule(groupElem, template);
1940
+ }
1941
+ else if (this.enableSeparateConnector && groupElem.id.indexOf('rule') !== -1) {
1942
+ groupHdr.parentElement.insertBefore(template, groupHdr.nextElementSibling);
1943
+ }
1944
+ else {
1945
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
1946
+ append(template, groupHdr);
1947
+ }
1355
1948
  }
1356
1949
  else {
1357
1950
  template = this.headerFn(args, this, 'Template', templateID)[0];
1358
- groupHdr.appendChild(template);
1951
+ if (this.enableSeparateConnector && isInitialRule) {
1952
+ this.enableSeparateConnectorInitialRule(groupElem, template);
1953
+ }
1954
+ else if (this.enableSeparateConnector && groupElem.id.indexOf('rule') !== -1) {
1955
+ groupHdr.parentElement.insertBefore(template, groupHdr.nextElementSibling);
1956
+ }
1957
+ else {
1958
+ groupHdr.appendChild(template);
1959
+ }
1359
1960
  }
1360
1961
  this.renderReactTemplates();
1361
1962
  }
1362
1963
  return groupElem;
1363
1964
  };
1965
+ QueryBuilder.prototype.enableSeparateConnectorInitialRule = function (groupElem, template) {
1966
+ var elem = groupElem.nextElementSibling ? groupElem.nextElementSibling : groupElem;
1967
+ var group = elem.closest('.e-group-container');
1968
+ if (!groupElem.nextElementSibling && group) {
1969
+ group = group.nextElementSibling ? group.nextElementSibling : group;
1970
+ }
1971
+ if (group) {
1972
+ group.parentElement.insertBefore(template, group);
1973
+ }
1974
+ };
1364
1975
  /**
1365
1976
  * Notify the changes to component.
1366
1977
  *
@@ -1379,12 +1990,29 @@ var QueryBuilder = /** @class */ (function (_super) {
1379
1990
  return;
1380
1991
  }
1381
1992
  if (type === 'condition') {
1382
- rules.condition = value;
1993
+ if (this.enableSeparateConnector) {
1994
+ ruleElement = element.parentElement.previousElementSibling;
1995
+ if (ruleElement && ruleElement.classList.contains('e-group-container')) {
1996
+ ruleElement = ruleElement.querySelectorAll('.e-rule-container')[ruleElement.querySelectorAll('.e-rule-container').length - 1];
1997
+ }
1998
+ if (ruleElement && ruleElement.classList.contains('e-rule-container')) {
1999
+ rules = this.getRule(ruleElement);
2000
+ }
2001
+ rules.condition = value;
2002
+ }
2003
+ else {
2004
+ rules.condition = value;
2005
+ }
1383
2006
  return;
1384
2007
  }
1385
2008
  while (ruleElement && ruleElement.previousElementSibling !== null) {
1386
2009
  ruleElement = ruleElement.previousElementSibling;
1387
- index++;
2010
+ if (!this.enableSeparateConnector || (this.enableSeparateConnector &&
2011
+ ((!this.headerTemplate && !ruleElement.classList.contains('e-btn-group')) ||
2012
+ this.headerTemplate && (ruleElement.classList.contains('e-rule-container') ||
2013
+ ruleElement.classList.contains('e-group-container'))))) {
2014
+ index++;
2015
+ }
1388
2016
  }
1389
2017
  var rule = rules.rules[index];
1390
2018
  var column = this.getColumn(rule.field);
@@ -1421,7 +2049,12 @@ var QueryBuilder = /** @class */ (function (_super) {
1421
2049
  }
1422
2050
  while (ruleElem && ruleElem.previousElementSibling !== null) {
1423
2051
  ruleElem = ruleElem.previousElementSibling;
1424
- index++;
2052
+ if (!this.enableSeparateConnector || (this.enableSeparateConnector &&
2053
+ ((!this.headerTemplate && !ruleElem.classList.contains('e-btn-group')) ||
2054
+ this.headerTemplate && (ruleElem.classList.contains('e-rule-container') ||
2055
+ ruleElem.classList.contains('e-group-container'))))) {
2056
+ index++;
2057
+ }
1425
2058
  }
1426
2059
  var rule = rules.rules[index];
1427
2060
  if (type === 'field') {
@@ -1478,12 +2111,14 @@ var QueryBuilder = /** @class */ (function (_super) {
1478
2111
  else {
1479
2112
  ruleElement.className = 'e-rule-container e-horizontal-mode';
1480
2113
  }
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';
2114
+ if (!this.enableSeparateConnector) {
2115
+ if (ruleElement.previousElementSibling && ruleElement.previousElementSibling.className.indexOf('e-rule-container') > -1) {
2116
+ if (ruleElement.className.indexOf('e-joined-rule') < 0) {
2117
+ ruleElement.className += ' e-joined-rule';
2118
+ }
2119
+ if (ruleElement.previousElementSibling.className.indexOf('e-prev-joined-rule') < 0) {
2120
+ ruleElement.previousElementSibling.className += ' e-prev-joined-rule';
2121
+ }
1487
2122
  }
1488
2123
  }
1489
2124
  if (ruleElement.previousElementSibling && ruleElement.previousElementSibling.className.indexOf('e-group-container') > -1 &&
@@ -1548,8 +2183,7 @@ var QueryBuilder = /** @class */ (function (_super) {
1548
2183
  var value;
1549
2184
  var rbValue;
1550
2185
  if (element.className.indexOf('e-radio') > -1) {
1551
- // eslint-disable-next-line
1552
- rbValue = parseInt(element.id.split('valuekey')[1], 0);
2186
+ rbValue = parseInt(element.id.split('valuekey')[1], 10);
1553
2187
  if (this.fieldMode === 'Default') {
1554
2188
  dropDownObj = getComponent(closest(element, '.e-rule-container').querySelector('.e-filter-input'), 'dropdownlist');
1555
2189
  this.selectedColumn = dropDownObj.getDataByValue(dropDownObj.value);
@@ -1579,7 +2213,9 @@ var QueryBuilder = /** @class */ (function (_super) {
1579
2213
  if (args.type === 'input' && args.currentTarget) {
1580
2214
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
1581
2215
  value = Number(args.currentTarget.value);
1582
- var numericTextBoxObj = getInstance(args.currentTarget, NumericTextBox);
2216
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
2217
+ var elem = args.currentTarget;
2218
+ var numericTextBoxObj = getInstance(elem, NumericTextBox);
1583
2219
  numericTextBoxObj.value = value;
1584
2220
  this.isNumInput = true;
1585
2221
  }
@@ -1688,7 +2324,12 @@ var QueryBuilder = /** @class */ (function (_super) {
1688
2324
  var index = 0;
1689
2325
  while (ruleElem && ruleElem.previousElementSibling !== null) {
1690
2326
  ruleElem = ruleElem.previousElementSibling;
1691
- index++;
2327
+ if (!this.enableSeparateConnector || (this.enableSeparateConnector &&
2328
+ ((!this.headerTemplate && !ruleElem.classList.contains('e-btn-group')) ||
2329
+ this.headerTemplate && (ruleElem.classList.contains('e-rule-container') ||
2330
+ ruleElem.classList.contains('e-group-container'))))) {
2331
+ index++;
2332
+ }
1692
2333
  }
1693
2334
  rules.rules[index].value = '';
1694
2335
  this.changeRule(rules.rules[index], args);
@@ -1734,7 +2375,7 @@ var QueryBuilder = /** @class */ (function (_super) {
1734
2375
  var ruleID = ruleElem.id.replace(this.element.id + '_', '');
1735
2376
  var eventsArgs = { groupID: grID, ruleID: ruleID, selectedField: this.fieldMode === 'DropdownTree' ?
1736
2377
  dl.value[0] : dl.value, cancel: false, type: 'field' };
1737
- if (!this.isImportRules) {
2378
+ if (!this.isImportRules && !this.prvtEvtTgrDaD) {
1738
2379
  this.trigger('beforeChange', eventsArgs, function (observedChangeArgs) {
1739
2380
  _this.fieldChangeSuccess(observedChangeArgs, tmpRl, flt, rl, dArg);
1740
2381
  });
@@ -1905,7 +2546,7 @@ var QueryBuilder = /** @class */ (function (_super) {
1905
2546
  if (valElem && this.getColumn(rule.field).template) {
1906
2547
  filterElem = operatorElem.previousElementSibling;
1907
2548
  }
1908
- if (valElem.children.length == 0) {
2549
+ if (valElem.children.length === 0) {
1909
2550
  filterElem = operatorElem.previousElementSibling;
1910
2551
  }
1911
2552
  this.changeRuleValues(filterElem, rule, tempRule, ddlArgs);
@@ -1959,7 +2600,7 @@ var QueryBuilder = /** @class */ (function (_super) {
1959
2600
  value = '';
1960
2601
  ddlIdx = -1;
1961
2602
  }
1962
- if (this.isImportRules || (this.ruleIndex > -1 || this.groupIndex > -1)) {
2603
+ if (this.isImportRules || (this.ruleIndex > -1 || this.groupIndex > -1 || this.prvtEvtTgrDaD)) {
1963
2604
  value = rule ? (rule.operator ? rule.operator : value) : value;
1964
2605
  }
1965
2606
  var ddlOperator = void 0;
@@ -2344,14 +2985,15 @@ var QueryBuilder = /** @class */ (function (_super) {
2344
2985
  var columnData = this.getItemData(parentId);
2345
2986
  var selectedValue;
2346
2987
  var isTemplate = (typeof columnData.template === 'string');
2347
- if (this.isImportRules || this.ruleIndex > -1 || this.groupIndex > -1 || this.isPublic || isTemplate || rule.value != '') {
2988
+ if (this.isImportRules || this.ruleIndex > -1 || this.groupIndex > -1 || this.isPublic || isTemplate || rule.value !== '') {
2348
2989
  selectedValue = rule.value;
2349
2990
  }
2350
2991
  else {
2351
2992
  selectedValue = this.setDefaultValue(parentId, false, false);
2352
2993
  }
2353
2994
  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);
2995
+ selectedVal = (this.isImportRules || this.ruleIndex > -1 || this.groupIndex > -1 || this.isPublic) ? rule.value :
2996
+ this.setDefaultValue(parentId, true, false);
2355
2997
  this.renderMultiSelect(columnData, parentId, idx, selectedVal, columnData.values);
2356
2998
  if (this.displayMode === 'Vertical' || this.element.className.indexOf('e-device') > -1) {
2357
2999
  ruleValElem.style.width = '100%';
@@ -2363,7 +3005,8 @@ var QueryBuilder = /** @class */ (function (_super) {
2363
3005
  }
2364
3006
  else {
2365
3007
  if (operator === 'in' || operator === 'notin') {
2366
- selectedVal = (this.isImportRules || this.ruleIndex > -1 || this.groupIndex > -1) ? rule.value : this.setDefaultValue(parentId, true, false);
3008
+ selectedVal = (this.isImportRules || this.ruleIndex > -1 || this.groupIndex > -1) ? rule.value :
3009
+ this.setDefaultValue(parentId, true, false);
2367
3010
  selectedValue = selectedVal.join(',');
2368
3011
  }
2369
3012
  var txtBox = void 0;
@@ -2383,9 +3026,11 @@ var QueryBuilder = /** @class */ (function (_super) {
2383
3026
  QueryBuilder.prototype.renderNumberValue = function (parentId, rule, operator, idx, ruleValElem, itemData, length) {
2384
3027
  var columnData = this.getItemData(parentId);
2385
3028
  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);
3029
+ var selectedVal = (this.isImportRules || this.ruleIndex > -1 || this.groupIndex > -1 || this.isPublic || isTemplate ||
3030
+ typeof rule.value === 'number') ? rule.value : this.setDefaultValue(parentId, false, true);
2387
3031
  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);
3032
+ selectedVal = (this.isImportRules || this.ruleIndex > -1 || this.groupIndex > -1 || this.isPublic) ? rule.value :
3033
+ this.setDefaultValue(parentId, true, false);
2389
3034
  this.renderMultiSelect(columnData, parentId, idx, selectedVal, columnData.values);
2390
3035
  if (this.element.className.indexOf('e-device') > -1 || this.displayMode === 'Vertical') {
2391
3036
  ruleValElem.style.width = '100%';
@@ -2396,7 +3041,8 @@ var QueryBuilder = /** @class */ (function (_super) {
2396
3041
  }
2397
3042
  }
2398
3043
  else if (operator === 'in' || operator === 'notin') {
2399
- selectedVal = (this.isImportRules || this.ruleIndex > -1 || this.groupIndex > -1) ? rule.value : this.setDefaultValue(parentId, true, false);
3044
+ selectedVal = (this.isImportRules || this.ruleIndex > -1 || this.groupIndex > -1) ? rule.value :
3045
+ this.setDefaultValue(parentId, true, false);
2400
3046
  var selVal = selectedVal.join(',');
2401
3047
  var txtInp = void 0;
2402
3048
  txtInp = {
@@ -2858,10 +3504,14 @@ var QueryBuilder = /** @class */ (function (_super) {
2858
3504
  }
2859
3505
  var controlName = element.className.split(' e-')[idx];
2860
3506
  var i = parseInt(element.id.slice(-1), 2);
3507
+ var column;
3508
+ var format;
3509
+ var selectedDate;
3510
+ var value;
3511
+ var radioBtnObj;
2861
3512
  switch (controlName) {
2862
3513
  case 'checkbox':
2863
- // eslint-disable-next-line
2864
- var value = getComponent(element, controlName).value;
3514
+ value = getComponent(element, controlName).value;
2865
3515
  rule.value = (value !== '') ? value : undefined;
2866
3516
  break;
2867
3517
  case 'textbox':
@@ -2871,8 +3521,7 @@ var QueryBuilder = /** @class */ (function (_super) {
2871
3521
  rule.value = getComponent(element, controlName).value;
2872
3522
  break;
2873
3523
  case 'radio':
2874
- // eslint-disable-next-line
2875
- var radioBtnObj = getComponent(element, controlName);
3524
+ radioBtnObj = getComponent(element, controlName);
2876
3525
  if (radioBtnObj.checked) {
2877
3526
  if (typeof rule.value === 'boolean') {
2878
3527
  rule.value = radioBtnObj.value === 'true';
@@ -2900,12 +3549,9 @@ var QueryBuilder = /** @class */ (function (_super) {
2900
3549
  }
2901
3550
  break;
2902
3551
  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;
3552
+ column = this.getColumn(rule.field);
3553
+ format = this.getFormat(column.format);
3554
+ selectedDate = getComponent(element, controlName).value;
2909
3555
  if (rule.operator.indexOf('between') > -1) {
2910
3556
  if (typeof rule.value === 'string') {
2911
3557
  rule.value = [];
@@ -2938,7 +3584,12 @@ var QueryBuilder = /** @class */ (function (_super) {
2938
3584
  var beforeRules = this.getValidRules(this.rule);
2939
3585
  while (ruleElem && ruleElem.previousElementSibling !== null) {
2940
3586
  ruleElem = ruleElem.previousElementSibling;
2941
- index++;
3587
+ if (!this.enableSeparateConnector || (this.enableSeparateConnector &&
3588
+ ((!this.headerTemplate && !ruleElem.classList.contains('e-btn-group')) ||
3589
+ this.headerTemplate && (ruleElem.classList.contains('e-rule-container') ||
3590
+ ruleElem.classList.contains('e-group-container'))))) {
3591
+ index++;
3592
+ }
2942
3593
  }
2943
3594
  var operator = rule.rules[index].operator ? rule.rules[index].operator.toString() : '';
2944
3595
  ruleElem = closest(target, '.e-rule-container');
@@ -2987,7 +3638,7 @@ var QueryBuilder = /** @class */ (function (_super) {
2987
3638
  }
2988
3639
  this.updateValues(elementCln[i_1], rule.rules[index]);
2989
3640
  }
2990
- if (!this.isImportRules) {
3641
+ if (!this.isImportRules && !this.prvtEvtTgrDaD) {
2991
3642
  this.trigger('change', eventsArgs);
2992
3643
  }
2993
3644
  if (this.allowValidation && rule.rules[index].field && target.parentElement.className.indexOf('e-tooltip') > -1) {
@@ -3032,7 +3683,7 @@ var QueryBuilder = /** @class */ (function (_super) {
3032
3683
  var beforeRuleStr = JSON.stringify({ condition: beforeRule.condition, not: beforeRule.not, rule: beforeRule.rules });
3033
3684
  var afetrRuleStr = JSON.stringify({ condition: afterRule.condition, not: afterRule.not, rule: afterRule.rules });
3034
3685
  if (beforeRuleStr !== afetrRuleStr) {
3035
- if (!this.isImportRules) {
3686
+ if (!this.isImportRules && !this.prvtEvtTgrDaD) {
3036
3687
  this.trigger('ruleChange', { previousRule: beforeRule, rule: afterRule, type: type });
3037
3688
  }
3038
3689
  }
@@ -3199,7 +3850,6 @@ var QueryBuilder = /** @class */ (function (_super) {
3199
3850
  var len;
3200
3851
  var tooltip;
3201
3852
  _super.prototype.destroy.call(this);
3202
- var popupElement;
3203
3853
  element = this.element.querySelectorAll('.e-addrulegroup');
3204
3854
  len = element.length;
3205
3855
  for (i = 0; i < len; i++) {
@@ -3245,7 +3895,7 @@ var QueryBuilder = /** @class */ (function (_super) {
3245
3895
  if (this.portals && this.portals.length) {
3246
3896
  this.clearQBTemplate();
3247
3897
  }
3248
- popupElement = document.querySelectorAll('.qb-dropdownlist.e-popup');
3898
+ var popupElement = document.querySelectorAll('.qb-dropdownlist.e-popup');
3249
3899
  if (popupElement) {
3250
3900
  for (i = 0; i < popupElement.length; i++) {
3251
3901
  popupElement[i].remove();
@@ -3318,7 +3968,7 @@ var QueryBuilder = /** @class */ (function (_super) {
3318
3968
  }
3319
3969
  }
3320
3970
  if (!this.headerTemplate) {
3321
- this.disableRuleCondition(groupElem, rule);
3971
+ this.disableRuleCondition(groupElem, rule, null, this.enableSeparateConnector ? true : null);
3322
3972
  }
3323
3973
  }
3324
3974
  };
@@ -3327,6 +3977,9 @@ var QueryBuilder = /** @class */ (function (_super) {
3327
3977
  if (this.cssClass) {
3328
3978
  addClass([this.element], this.cssClass.replace(/\s+/g, ' ').trim().split(' '));
3329
3979
  }
3980
+ if (this.enableSeparateConnector) {
3981
+ addClass([this.element], 'e-multi-connector');
3982
+ }
3330
3983
  if (this.enableRtl) {
3331
3984
  addClass([this.element], 'e-rtl');
3332
3985
  }
@@ -3363,14 +4016,14 @@ var QueryBuilder = /** @class */ (function (_super) {
3363
4016
  }
3364
4017
  }
3365
4018
  else {
3366
- if (this.columns.length && this.isImportRules) {
4019
+ if (this.columns && this.columns.length && this.isImportRules) {
3367
4020
  this.addGroupElement(false, this.element, this.rule.condition, false, this.rule.not, false, this.rule);
3368
4021
  var mRules = extend({}, this.rule, {}, true);
3369
4022
  this.isRefreshed = true;
3370
4023
  this.setGroupRules(mRules);
3371
4024
  this.isRefreshed = false;
3372
4025
  }
3373
- else if (this.columns.length) {
4026
+ else if (this.columns && this.columns.length) {
3374
4027
  this.addRuleElement(this.element.querySelector('.e-group-container'), {});
3375
4028
  }
3376
4029
  this.notGroupRtl();
@@ -3424,8 +4077,8 @@ var QueryBuilder = /** @class */ (function (_super) {
3424
4077
  this.groupIdCounter = 0;
3425
4078
  if (!this.headerTemplate) {
3426
4079
  if (this.enableNotCondition) {
3427
- if (this.enableNotCondition) {
3428
- var inputElem = this.createElement('button', { attrs: { type: 'button', class: 'e-qb-toggle' } });
4080
+ var inputElem = this.createElement('button', { attrs: { type: 'button', class: 'e-qb-toggle' } });
4081
+ if (this.groupElem.querySelector('.e-btn-group')) {
3429
4082
  this.groupElem.querySelector('.e-btn-group').insertBefore(inputElem, this.groupElem.querySelector('.e-btngroup-and'));
3430
4083
  }
3431
4084
  }
@@ -3466,14 +4119,12 @@ var QueryBuilder = /** @class */ (function (_super) {
3466
4119
  };
3467
4120
  QueryBuilder.prototype.onPropertyChanged = function (newProp, oldProp) {
3468
4121
  var properties = Object.keys(newProp);
4122
+ var groupElem = this.element.querySelector('.e-group-container');
4123
+ var summaryElem = this.element.querySelector('.e-summary-content');
3469
4124
  for (var _i = 0, properties_1 = properties; _i < properties_1.length; _i++) {
3470
4125
  var prop = properties_1[_i];
3471
4126
  switch (prop) {
3472
4127
  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
4128
  if (newProp.summaryView) {
3478
4129
  groupElem.style.display = 'none';
3479
4130
  if (this.element.querySelectorAll('.e-summary-content').length < 1) {
@@ -3613,6 +4264,14 @@ var QueryBuilder = /** @class */ (function (_super) {
3613
4264
  this.isReadonly = newProp.readonly;
3614
4265
  this.enableReadonly();
3615
4266
  break;
4267
+ case 'allowDragAndDrop':
4268
+ this.allowDragAndDrop = newProp.allowDragAndDrop;
4269
+ this.refresh();
4270
+ break;
4271
+ case 'enableSeparateConnector':
4272
+ this.enableSeparateConnector = newProp.enableSeparateConnector;
4273
+ this.refresh();
4274
+ break;
3616
4275
  }
3617
4276
  }
3618
4277
  };
@@ -3770,6 +4429,134 @@ var QueryBuilder = /** @class */ (function (_super) {
3770
4429
  this.initControl();
3771
4430
  }
3772
4431
  this.renderComplete();
4432
+ if (this.allowDragAndDrop) {
4433
+ this.initializeDrag();
4434
+ }
4435
+ };
4436
+ QueryBuilder.prototype.initializeDrag = function () {
4437
+ this.draggable = new Draggable(this.element, {
4438
+ dragTarget: '.e-drag-qb-rule',
4439
+ distance: 5,
4440
+ helper: this.helper.bind(this),
4441
+ dragStart: this.dragStartHandler.bind(this),
4442
+ drag: this.dragHandler.bind(this),
4443
+ dragStop: this.dragStopHandler.bind(this),
4444
+ isReplaceDragEle: true,
4445
+ isPreventSelect: false,
4446
+ abort: '.e-parent-header',
4447
+ isDragScroll: true
4448
+ });
4449
+ };
4450
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
4451
+ QueryBuilder.prototype.helper = function (e) {
4452
+ var target = this.draggable.currentStateTarget;
4453
+ if (!target.classList.contains('e-drag-qb-rule') || (target.classList.contains('e-drag-qb-rule') && closest(target, '.e-disable'))) {
4454
+ return false;
4455
+ }
4456
+ var visualElement = this.createElement('div', {
4457
+ className: 'e-cloneproperties e-draganddrop e-dragclone',
4458
+ styles: 'height:"auto", z-index:2, width:' + this.element.offsetWidth
4459
+ });
4460
+ var cloneElement;
4461
+ if (this.draggable.currentStateTarget.parentElement.classList.contains('e-group-header')) {
4462
+ cloneElement = closest(target, '.e-group-container').cloneNode(true);
4463
+ closest(target, '.e-group-container').classList.add('e-qb-dragging-rule');
4464
+ }
4465
+ else {
4466
+ visualElement.classList.add('e-group-body');
4467
+ cloneElement = this.createElement('div', { className: 'e-rule-container' });
4468
+ var ruleElement = closest(target, '.e-rule-field').cloneNode(true);
4469
+ cloneElement.appendChild(ruleElement);
4470
+ closest(target, '.e-rule-field').classList.add('e-qb-dragging-rule');
4471
+ }
4472
+ visualElement.appendChild(cloneElement);
4473
+ var childElements = visualElement.querySelectorAll('*');
4474
+ childElements.forEach(function (child) {
4475
+ child.removeAttribute('id');
4476
+ });
4477
+ this.element.appendChild(visualElement);
4478
+ return visualElement;
4479
+ };
4480
+ QueryBuilder.prototype.dragStartHandler = function (e) {
4481
+ this.draggedRule = e.target;
4482
+ this.isDragEventPrevent = false;
4483
+ document.body.classList.add('e-prevent-select');
4484
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
4485
+ this.dragElement = e.dragElement;
4486
+ var rule = closest(e.target, '.e-rule-container');
4487
+ var group = closest(e.target, '.e-group-container');
4488
+ var dragEventArgs = { dragRuleID: rule !== null ? rule.id : group.id, dragGroupID: group.id, cancel: false };
4489
+ this.trigger('dragStart', dragEventArgs);
4490
+ this.isDragEventPrevent = dragEventArgs.cancel;
4491
+ };
4492
+ QueryBuilder.prototype.dragHandler = function (e) {
4493
+ if (this.isDragEventPrevent) {
4494
+ return;
4495
+ }
4496
+ var borderLineElem = this.element.querySelectorAll('.e-drag-rule-bottom-line');
4497
+ borderLineElem.forEach(function (ele) {
4498
+ ele.classList.remove('e-drag-rule-bottom-line');
4499
+ });
4500
+ borderLineElem = this.element.querySelectorAll('.e-drag-rule-top-line');
4501
+ borderLineElem.forEach(function (ele) {
4502
+ ele.classList.remove('e-drag-rule-top-line');
4503
+ });
4504
+ if (isNullOrUndefined(e.target)) {
4505
+ return;
4506
+ }
4507
+ if (e.target.nodeName === 'HTML' || closest(e.target, '.e-qb-dragging-rule') || closest(e.target, '.e-group-header') ||
4508
+ !closest(e.target, '#' + this.element.id) || closest(e.target, '.e-disable') || (e.target.parentElement && e.target.parentElement.classList.contains('e-btn-group') && this.enableSeparateConnector)) {
4509
+ this.dragElement.classList.add('e-notallowedcur');
4510
+ return;
4511
+ }
4512
+ else {
4513
+ this.dragElement.classList.remove('e-notallowedcur');
4514
+ }
4515
+ var targetElem = closest(e.target, '.e-rule-container');
4516
+ var grpElem = closest(e.target, '.e-group-container');
4517
+ if (targetElem) {
4518
+ var rect = targetElem.getBoundingClientRect();
4519
+ var mouseY = e.event.clientY || e.event.changedTouches[0].clientY;
4520
+ var distanceToTop = mouseY - rect.top;
4521
+ var distanceToBottom = rect.bottom - mouseY;
4522
+ var threshold = 20; // Adjust as needed
4523
+ if (distanceToTop < threshold) {
4524
+ targetElem.classList.add('e-drag-rule-top-line');
4525
+ }
4526
+ else if (distanceToBottom < threshold) {
4527
+ targetElem.classList.add('e-drag-rule-bottom-line');
4528
+ }
4529
+ }
4530
+ else if (e.target.classList.contains('e-rule-list') && e.target.children.length === 0) {
4531
+ e.target.classList.add('e-drag-rule-bottom-line');
4532
+ }
4533
+ else if (e.target.classList.contains('e-rule-list') && e.target.children[0].classList.contains('e-group-container')) {
4534
+ var rect = e.target.children[0].getBoundingClientRect();
4535
+ var mouseY = e.event.clientY || e.event.changedTouches[0].clientY;
4536
+ var distanceToTop = mouseY - rect.top;
4537
+ var threshold = 20; // Adjust as needed
4538
+ if (distanceToTop < threshold) {
4539
+ e.target.classList.add('e-drag-rule-top-line');
4540
+ }
4541
+ }
4542
+ else if (closest(e.target, '.e-group-container') || e.target.classList.contains('e-group-container')) {
4543
+ if (!grpElem) {
4544
+ grpElem = e.target;
4545
+ }
4546
+ if (grpElem.id.indexOf('group0') > -1) {
4547
+ var rect = e.target.getBoundingClientRect();
4548
+ var mouseY = e.event.clientY || e.event.changedTouches[0].clientY;
4549
+ var distanceToBottom = rect.bottom - mouseY;
4550
+ var threshold = 20; // Adjust as needed
4551
+ if (distanceToBottom < threshold) {
4552
+ e.target.classList.add('e-drag-rule-bottom-line');
4553
+ }
4554
+ }
4555
+ }
4556
+ var dragEventArgs = { dragRuleID: targetElem !== null ? targetElem.id : grpElem !== null ? grpElem.id : null,
4557
+ dragGroupID: grpElem !== null ? grpElem.id : null, cancel: false };
4558
+ this.trigger('drag', dragEventArgs);
4559
+ this.isDragEventPrevent = dragEventArgs.cancel;
3773
4560
  };
3774
4561
  QueryBuilder.prototype.templateParser = function (template) {
3775
4562
  if (template) {
@@ -3814,6 +4601,7 @@ var QueryBuilder = /** @class */ (function (_super) {
3814
4601
  EventHandler.add(wrapper, 'focusout', this.focusEventHandler, this);
3815
4602
  EventHandler.add(wrapper, 'focusin', this.focusEventHandler, this);
3816
4603
  EventHandler.add(this.element, 'keydown', this.keyBoardHandler, this);
4604
+ EventHandler.add(document, 'keydown', this.keyBoardHandler, this);
3817
4605
  };
3818
4606
  QueryBuilder.prototype.unWireEvents = function () {
3819
4607
  var wrapper = this.getWrapper();
@@ -3821,6 +4609,7 @@ var QueryBuilder = /** @class */ (function (_super) {
3821
4609
  EventHandler.remove(wrapper, 'focusout', this.focusEventHandler);
3822
4610
  EventHandler.remove(wrapper, 'focusin', this.focusEventHandler);
3823
4611
  EventHandler.remove(this.element, 'keydown', this.keyBoardHandler);
4612
+ EventHandler.remove(document, 'keydown', this.keyBoardHandler);
3824
4613
  };
3825
4614
  QueryBuilder.prototype.getParentGroup = function (target, isParent) {
3826
4615
  var groupLevel = (target instanceof Element) ? this.levelColl[target.id] : this.levelColl["" + target];
@@ -3849,7 +4638,7 @@ var QueryBuilder = /** @class */ (function (_super) {
3849
4638
  groupId = groupElem.id.replace(this.element.id + '_', '');
3850
4639
  }
3851
4640
  var args = { groupID: groupId, cancel: false, type: 'deleteGroup' };
3852
- if (!this.isImportRules) {
4641
+ if (!this.isImportRules && !this.prvtEvtTgrDaD) {
3853
4642
  this.trigger('beforeChange', args, function (observedChangeArgs) {
3854
4643
  _this.deleteGroupSuccessCallBack(observedChangeArgs, target);
3855
4644
  });
@@ -3879,13 +4668,20 @@ var QueryBuilder = /** @class */ (function (_super) {
3879
4668
  }
3880
4669
  while (groupElem.previousElementSibling !== null) {
3881
4670
  groupElem = groupElem.previousElementSibling;
3882
- index++;
4671
+ if (!this.enableSeparateConnector || (this.enableSeparateConnector &&
4672
+ ((!this.headerTemplate && !groupElem.classList.contains('e-btn-group')) ||
4673
+ this.headerTemplate && (groupElem.classList.contains('e-rule-container') ||
4674
+ groupElem.classList.contains('e-group-container'))))) {
4675
+ index++;
4676
+ }
3883
4677
  }
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');
4678
+ if (!this.enableSeparateConnector) {
4679
+ if (nextElem && nextElem.className.indexOf('e-separate-rule') > -1) {
4680
+ removeClass([nextElem], 'e-separate-rule');
4681
+ addClass([nextElem], 'e-joined-rule');
4682
+ if (prevElem && prevElem.className.indexOf('e-rule-container') > -1) {
4683
+ addClass([prevElem], 'e-prev-joined-rule');
4684
+ }
3889
4685
  }
3890
4686
  }
3891
4687
  var elem = groupElem.parentElement.parentElement.parentElement;
@@ -3917,7 +4713,11 @@ var QueryBuilder = /** @class */ (function (_super) {
3917
4713
  delete this.levelColl[args.groupID];
3918
4714
  this.refreshLevelColl();
3919
4715
  this.disableRuleCondition(elem, rule);
3920
- if (!this.isImportRules) {
4716
+ if (this.enableSeparateConnector && prevElem && ((!this.headerTemplate && prevElem.classList.contains('e-btn-group')) ||
4717
+ (this.headerTemplate && prevElem.classList.contains('e-custom-group-btn')))) {
4718
+ detach(prevElem);
4719
+ }
4720
+ if (!this.isImportRules && !this.prvtEvtTgrDaD) {
3921
4721
  this.trigger('change', args);
3922
4722
  }
3923
4723
  this.filterRules(beforeRules, this.getValidRules(this.rule), 'deleteGroup');
@@ -3934,7 +4734,7 @@ var QueryBuilder = /** @class */ (function (_super) {
3934
4734
  var groupID = groupElem.id.replace(this.element.id + '_', '');
3935
4735
  var ruleID = closest(target, '.e-rule-container').id.replace(this.element.id + '_', '');
3936
4736
  var args = { groupID: groupID, ruleID: ruleID, cancel: false, type: 'deleteRule' };
3937
- if (!this.isImportRules) {
4737
+ if (!this.isImportRules && !this.prvtEvtTgrDaD) {
3938
4738
  this.trigger('beforeChange', args, function (observedChangeArgs) {
3939
4739
  _this.deleteRuleSuccessCallBack(observedChangeArgs, target);
3940
4740
  });
@@ -3949,10 +4749,10 @@ var QueryBuilder = /** @class */ (function (_super) {
3949
4749
  var rule = this.getParentGroup(groupElem);
3950
4750
  var ruleElem = closest(target, '.e-rule-container');
3951
4751
  var beforeRules = this.getValidRules(this.rule);
3952
- var clnruleElem = ruleElem;
3953
- var nextElem = ruleElem.nextElementSibling;
3954
4752
  var prevElem = ruleElem.previousElementSibling;
3955
4753
  var index = 0;
4754
+ var clnruleElem = ruleElem;
4755
+ var nextElem = ruleElem.nextElementSibling;
3956
4756
  var valElem = ruleElem.querySelectorAll('.e-tooltip');
3957
4757
  var i = void 0;
3958
4758
  var len = valElem.length;
@@ -3961,7 +4761,12 @@ var QueryBuilder = /** @class */ (function (_super) {
3961
4761
  }
3962
4762
  while (ruleElem.previousElementSibling !== null) {
3963
4763
  ruleElem = ruleElem.previousElementSibling;
3964
- index++;
4764
+ if (!this.enableSeparateConnector || (this.enableSeparateConnector &&
4765
+ ((!this.headerTemplate && !ruleElem.classList.contains('e-btn-group')) ||
4766
+ this.headerTemplate && (ruleElem.classList.contains('e-rule-container') ||
4767
+ ruleElem.classList.contains('e-group-container'))))) {
4768
+ index++;
4769
+ }
3965
4770
  }
3966
4771
  var column = this.getColumn(rule.rules[index].field);
3967
4772
  if (column && column.template && clnruleElem.querySelector('.e-template')) {
@@ -3980,17 +4785,27 @@ var QueryBuilder = /** @class */ (function (_super) {
3980
4785
  var isTemplateRendered = clnruleElem.querySelector('.e-template-value');
3981
4786
  // eslint-disable
3982
4787
  try {
4788
+ if (this.enableSeparateConnector && (clnruleElem.previousElementSibling || clnruleElem.nextElementSibling)) {
4789
+ var previousElem = clnruleElem.previousElementSibling;
4790
+ var nextElem_1 = clnruleElem.nextElementSibling;
4791
+ if (isNullOrUndefined(nextElem_1) && ((!this.headerTemplate && previousElem.classList.contains('e-btn-group'))
4792
+ || (this.headerTemplate && previousElem.classList.contains('e-custom-group-btn')))) {
4793
+ if (previousElem && previousElem.previousElementSibling && previousElem.previousElementSibling.classList.contains('e-rule-container')) {
4794
+ var rule_1 = this.getRule(previousElem.previousElementSibling);
4795
+ rule_1.condition = null;
4796
+ }
4797
+ detach(previousElem);
4798
+ }
4799
+ else if ((!this.headerTemplate && nextElem_1.classList.contains('e-btn-group'))
4800
+ || (this.headerTemplate && nextElem_1.classList.contains('e-custom-group-btn'))) {
4801
+ detach(nextElem_1);
4802
+ }
4803
+ }
3983
4804
  detach(clnruleElem);
3984
4805
  }
3985
4806
  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;
4807
+ return;
3992
4808
  }
3993
- // eslint-enable
3994
4809
  if (column && column.ruleTemplate) {
3995
4810
  this.clearQBTemplate([clnruleElem.id]);
3996
4811
  }
@@ -3999,13 +4814,13 @@ var QueryBuilder = /** @class */ (function (_super) {
3999
4814
  }
4000
4815
  rule.rules.splice(index, 1);
4001
4816
  if (!(rule.rules[0] && rule.rules[0].rules)) {
4002
- this.disableRuleCondition(groupElem, rule);
4817
+ this.disableRuleCondition(groupElem, rule, this.enableSeparateConnector ? true : false);
4003
4818
  }
4004
4819
  var tooltipElem = this.element.querySelectorAll('.e-tooltip');
4005
4820
  for (var i_3 = 0; i_3 < tooltipElem.length; i_3++) {
4006
4821
  getComponent(tooltipElem[i_3], 'tooltip').refresh(tooltipElem[i_3]);
4007
4822
  }
4008
- if (!this.isImportRules) {
4823
+ if (!this.isImportRules && !this.prvtEvtTgrDaD) {
4009
4824
  this.trigger('change', args);
4010
4825
  }
4011
4826
  this.filterRules(beforeRules, this.getValidRules(this.rule), 'deleteRule');
@@ -4029,9 +4844,32 @@ var QueryBuilder = /** @class */ (function (_super) {
4029
4844
  this.isImportRules = false;
4030
4845
  };
4031
4846
  QueryBuilder.prototype.keyBoardHandler = function (e) {
4032
- if (this.readonly && (e.keyCode === 38 || e.keyCode === 40 || e.keyCode === 13)) {
4847
+ if (e.currentTarget === this.element && this.readonly && (e.keyCode === 38 || e.keyCode === 40 || e.keyCode === 13)) {
4033
4848
  e.preventDefault();
4034
4849
  }
4850
+ else if (e.code === 'Escape' && this.allowDragAndDrop) {
4851
+ this.isDragEventPrevent = true;
4852
+ document.body.classList.remove('e-prevent-select');
4853
+ var borderLineElem = this.element.querySelectorAll('.e-drag-rule-bottom-line');
4854
+ borderLineElem.forEach(function (ele) {
4855
+ ele.classList.remove('e-drag-rule-bottom-line');
4856
+ });
4857
+ borderLineElem = this.element.querySelectorAll('.e-drag-rule-top-line');
4858
+ borderLineElem.forEach(function (ele) {
4859
+ ele.classList.remove('e-drag-rule-top-line');
4860
+ });
4861
+ borderLineElem = this.element.querySelectorAll('.e-qb-dragging-rule');
4862
+ borderLineElem.forEach(function (ele) {
4863
+ ele.classList.remove('e-qb-dragging-rule');
4864
+ });
4865
+ var dragElemnet = this.element.querySelector('.e-cloneproperties');
4866
+ if (dragElemnet) {
4867
+ remove(dragElemnet);
4868
+ }
4869
+ if (this.enableSeparateConnector) {
4870
+ this.refresh();
4871
+ }
4872
+ }
4035
4873
  };
4036
4874
  QueryBuilder.prototype.clearQBTemplate = function (ruleElemColl) {
4037
4875
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
@@ -4039,7 +4877,7 @@ var QueryBuilder = /** @class */ (function (_super) {
4039
4877
  this.clearTemplate(ruleElemColl);
4040
4878
  }
4041
4879
  };
4042
- QueryBuilder.prototype.disableRuleCondition = function (groupElem, rules) {
4880
+ QueryBuilder.prototype.disableRuleCondition = function (groupElem, rules, isNewRuleAdded, isNewGroup) {
4043
4881
  if (!this.headerTemplate) {
4044
4882
  if (this.readonly) {
4045
4883
  return;
@@ -4055,21 +4893,124 @@ var QueryBuilder = /** @class */ (function (_super) {
4055
4893
  orElem.nextElementSibling.classList.remove('e-btn-disable');
4056
4894
  andElem.nextElementSibling.classList.remove('e-btn-disable');
4057
4895
  }
4058
- if (rules && rules.condition === 'or') {
4059
- orElem.checked = true;
4896
+ if (this.enableSeparateConnector && !isNewRuleAdded) {
4897
+ var index = 0;
4898
+ var element = void 0;
4899
+ // eslint-disable-next-line no-constant-condition
4900
+ while (true) {
4901
+ var andGroup = groupElem.parentElement.querySelectorAll('.e-btngroup-and');
4902
+ var orGroup = groupElem.parentElement.querySelectorAll('.e-btngroup-or');
4903
+ andElem = andGroup[andGroup.length - (1 + index)];
4904
+ orElem = orGroup[orGroup.length - (1 + index)];
4905
+ element = andGroup[andGroup.length - (1 + index)];
4906
+ if (element && element.parentElement && element.parentElement.style.display === 'none') {
4907
+ index++;
4908
+ }
4909
+ else {
4910
+ break;
4911
+ }
4912
+ }
4913
+ var elem = groupElem.previousElementSibling;
4914
+ while (elem && !elem.classList.contains('e-rule-container')) {
4915
+ if (elem.classList.contains('e-group-container')) {
4916
+ elem = elem.querySelectorAll('.e-rule-container')[elem.querySelectorAll('.e-rule-container').length - 1];
4917
+ break;
4918
+ }
4919
+ elem = elem.previousElementSibling;
4920
+ }
4921
+ if (isNewGroup && groupElem.classList.contains('e-group-container')) {
4922
+ elem = groupElem;
4923
+ var prevRule = this.getGroup(elem);
4924
+ if (prevRule.condition === 'or') {
4925
+ orElem.checked = true;
4926
+ }
4927
+ else {
4928
+ andElem.checked = true;
4929
+ }
4930
+ }
4931
+ else if (elem && elem.classList.contains('e-rule-container')) {
4932
+ var ruleID = elem.id.replace(this.element.id + '_', '');
4933
+ var prevRule = this.getRule(ruleID);
4934
+ if (prevRule.condition === 'or') {
4935
+ orElem.checked = true;
4936
+ }
4937
+ else {
4938
+ andElem.checked = true;
4939
+ }
4940
+ }
4060
4941
  }
4061
- else {
4062
- andElem.checked = true;
4942
+ else if (!isNewRuleAdded) {
4943
+ if (rules && rules.condition === 'or') {
4944
+ orElem.checked = true;
4945
+ }
4946
+ else {
4947
+ andElem.checked = true;
4948
+ }
4063
4949
  }
4064
4950
  }
4065
4951
  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');
4952
+ if (this.enableSeparateConnector && !isNewRuleAdded) {
4953
+ var index = 0;
4954
+ var element = void 0;
4955
+ // eslint-disable-next-line no-constant-condition
4956
+ while (true) {
4957
+ var andGroup = groupElem.parentElement.querySelectorAll('.e-btngroup-and');
4958
+ var orGroup = groupElem.parentElement.querySelectorAll('.e-btngroup-or');
4959
+ andElem = andGroup[andGroup.length - (1 + index)];
4960
+ orElem = orGroup[orGroup.length - (1 + index)];
4961
+ element = andGroup[andGroup.length - (1 + index)];
4962
+ if (element && element.parentElement && element.parentElement.style.display === 'none') {
4963
+ index++;
4964
+ }
4965
+ else {
4966
+ break;
4967
+ }
4968
+ }
4969
+ var elem = void 0;
4970
+ var tempElem = groupElem.previousElementSibling;
4971
+ while (tempElem) {
4972
+ if (tempElem.classList.contains('e-group-container')) {
4973
+ tempElem = tempElem.querySelectorAll('.e-rule-container')[tempElem.querySelectorAll('.e-rule-container').length - 1];
4974
+ }
4975
+ if (tempElem.classList.contains('e-rule-container')) {
4976
+ elem = tempElem;
4977
+ break;
4978
+ }
4979
+ tempElem = tempElem.previousElementSibling;
4980
+ }
4981
+ if (isNullOrUndefined(elem) && groupElem.querySelectorAll('.e-rule-container')[groupElem.querySelectorAll('.e-rule-container').length - 1]) {
4982
+ elem = groupElem.querySelectorAll('.e-rule-container')[groupElem.querySelectorAll('.e-rule-container').length - 1];
4983
+ }
4984
+ if (isNewGroup && groupElem.classList.contains('e-group-container')) {
4985
+ elem = groupElem;
4986
+ var prevRule = this.getGroup(elem);
4987
+ if (prevRule.condition === 'or') {
4988
+ orElem.checked = true;
4989
+ }
4990
+ else {
4991
+ andElem.checked = true;
4992
+ }
4993
+ }
4994
+ else if (elem) {
4995
+ var ruleID = elem.id.replace(this.element.id + '_', '');
4996
+ var prevRule = this.getRule(ruleID);
4997
+ if (prevRule.condition === 'or' && orElem) {
4998
+ orElem.checked = true;
4999
+ }
5000
+ else if (andElem) {
5001
+ andElem.checked = true;
5002
+ }
5003
+ }
5004
+ }
5005
+ else if (!isNewRuleAdded) {
5006
+ andElem.checked = false;
5007
+ andElem.disabled = true;
5008
+ orElem.checked = false;
5009
+ orElem.disabled = true;
5010
+ if (rules) {
5011
+ orElem.nextElementSibling.classList.add('e-btn-disable');
5012
+ andElem.nextElementSibling.classList.add('e-btn-disable');
5013
+ }
4073
5014
  }
4074
5015
  }
4075
5016
  }
@@ -4173,7 +5114,7 @@ var QueryBuilder = /** @class */ (function (_super) {
4173
5114
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
4174
5115
  rule.custom = customObj;
4175
5116
  }
4176
- if (rule.rules.length === 0) {
5117
+ if (rule.rules && rule.rules.length === 0) {
4177
5118
  rule = {};
4178
5119
  }
4179
5120
  }
@@ -4242,7 +5183,12 @@ var QueryBuilder = /** @class */ (function (_super) {
4242
5183
  var rule = this.getParentGroup(groupElem);
4243
5184
  while (ruleElem.previousElementSibling !== null) {
4244
5185
  ruleElem = ruleElem.previousElementSibling;
4245
- index++;
5186
+ if (!this.enableSeparateConnector || (this.enableSeparateConnector &&
5187
+ ((!this.headerTemplate && !ruleElem.classList.contains('e-btn-group')) ||
5188
+ this.headerTemplate && (ruleElem.classList.contains('e-rule-container') ||
5189
+ ruleElem.classList.contains('e-group-container'))))) {
5190
+ index++;
5191
+ }
4246
5192
  }
4247
5193
  return rule.rules[index];
4248
5194
  };
@@ -4652,13 +5598,10 @@ var QueryBuilder = /** @class */ (function (_super) {
4652
5598
  if (value.indexOf(':') > -1 && (value.indexOf('/') < 0 && value.indexOf(',') < 0
4653
5599
  && value.indexOf('-') < 0)) {
4654
5600
  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]));
5601
+ currDate.setHours(parseInt(value.split(':')[0], 10));
5602
+ currDate.setMinutes(parseInt(value.split(':')[1], 10));
4659
5603
  if (value.split(':')[2]) {
4660
- // eslint-disable-next-line
4661
- currDate.setSeconds(parseInt(value.split(':')[2]));
5604
+ currDate.setSeconds(parseInt(value.split(':')[2], 10));
4662
5605
  }
4663
5606
  }
4664
5607
  return currDate;
@@ -4674,17 +5617,43 @@ var QueryBuilder = /** @class */ (function (_super) {
4674
5617
  parentElem = this.renderGroup(rule, rule.condition, parentElem, not);
4675
5618
  }
4676
5619
  else {
4677
- if (rule.rules.length > 1 && !this.headerTemplate) {
5620
+ if (rule.rules && rule.rules.length > 1 && !this.headerTemplate) {
4678
5621
  // enable/disable conditions when rule group is added
4679
5622
  var orElem = parentElem.querySelector('.e-btngroup-or');
4680
5623
  var andElem = parentElem.querySelector('.e-btngroup-and');
5624
+ if (this.enableSeparateConnector && parentElem.previousElementSibling) {
5625
+ orElem = parentElem.previousElementSibling.querySelector('.e-btngroup-or');
5626
+ andElem = parentElem.previousElementSibling.querySelector('.e-btngroup-and');
5627
+ }
4681
5628
  orElem.disabled = false;
4682
5629
  andElem.disabled = false;
4683
- if (rule.condition === 'or') {
4684
- orElem.checked = true;
5630
+ if (this.enableSeparateConnector) {
5631
+ var elem = parentElem.previousElementSibling;
5632
+ while (elem && !elem.classList.contains('e-rule-container')) {
5633
+ if (elem.classList.contains('e-group-container')) {
5634
+ elem = elem.querySelectorAll('.e-rule-container')[elem.querySelectorAll('.e-rule-container').length - 1];
5635
+ break;
5636
+ }
5637
+ elem = elem.previousElementSibling;
5638
+ }
5639
+ if (elem && elem.classList.contains('e-rule-container')) {
5640
+ var ruleID = elem.id.replace(this.element.id + '_', '');
5641
+ var prevRule = this.getRule(ruleID);
5642
+ if (prevRule.condition === 'or') {
5643
+ orElem.checked = true;
5644
+ }
5645
+ else {
5646
+ andElem.checked = true;
5647
+ }
5648
+ }
4685
5649
  }
4686
5650
  else {
4687
- andElem.checked = true;
5651
+ if (rule.condition === 'or') {
5652
+ orElem.checked = true;
5653
+ }
5654
+ else {
5655
+ andElem.checked = true;
5656
+ }
4688
5657
  }
4689
5658
  }
4690
5659
  else {
@@ -4704,7 +5673,7 @@ var QueryBuilder = /** @class */ (function (_super) {
4704
5673
  }
4705
5674
  }
4706
5675
  }
4707
- if (rule.rules.length === 0 && this.headerTemplate) {
5676
+ if (rule.rules && rule.rules.length === 0 && this.headerTemplate) {
4708
5677
  rule.rules[0] = { 'label': '', 'field': '', 'operator': '', 'type': '', 'value': '' };
4709
5678
  }
4710
5679
  var ruleColl = rule.rules;
@@ -4725,10 +5694,6 @@ var QueryBuilder = /** @class */ (function (_super) {
4725
5694
  var lockGrpTarget = parentElem.querySelector('.e-rule-list').children[i].querySelector('.e-lock-grp-btn');
4726
5695
  this.groupLock(lockGrpTarget);
4727
5696
  }
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
5697
  }
4733
5698
  }
4734
5699
  if (parentElem) {
@@ -4746,7 +5711,17 @@ var QueryBuilder = /** @class */ (function (_super) {
4746
5711
  if (this.showButtons.cloneGroup && this.cloneGrpBtnClick && this.isMiddleGroup) {
4747
5712
  this.isMiddleGroup = false;
4748
5713
  this.cloneGrpBtnClick = false;
4749
- return cloneElem[this.groupIndex + 1]; // group added in the middle
5714
+ var index = 0;
5715
+ var tempGroupIndex = this.groupIndex + 1;
5716
+ if (this.enableSeparateConnector) {
5717
+ for (var i = 0; i < tempGroupIndex; i++) {
5718
+ if (cloneElem[i].classList.contains('e-rule-container')) {
5719
+ tempGroupIndex++;
5720
+ index++;
5721
+ }
5722
+ }
5723
+ }
5724
+ return cloneElem[this.groupIndex + index + 1]; // group added in the middle
4750
5725
  }
4751
5726
  else if (this.showButtons.cloneGroup && this.cloneGrpBtnClick && this.isLastGroup) {
4752
5727
  this.isLastGroup = false;
@@ -4915,6 +5890,9 @@ var QueryBuilder = /** @class */ (function (_super) {
4915
5890
  for (var j = 0, jLen = rules.rules.length; j < jLen; j++) {
4916
5891
  if (rules.rules[j].rules) {
4917
5892
  queryStr = this.getSqlString(rules.rules[j], enableEscape, queryStr, sqlLocale);
5893
+ if (this.enableSeparateConnector) {
5894
+ condition = rules.rules[j].condition;
5895
+ }
4918
5896
  }
4919
5897
  else {
4920
5898
  var rule = rules.rules[j];
@@ -5006,8 +5984,10 @@ var QueryBuilder = /** @class */ (function (_super) {
5006
5984
  if (condition === '' || (rule && rule.condition !== '' && rule.custom && rule.custom.isCustom)) {
5007
5985
  condition = rule.condition;
5008
5986
  }
5009
- condition = sqlLocale ? this.l10n.getConstant(condition.toUpperCase()).toUpperCase() : condition.toUpperCase();
5010
- queryStr += ' ' + condition + ' ';
5987
+ if (condition) {
5988
+ condition = sqlLocale ? this.l10n.getConstant(condition.toUpperCase()).toUpperCase() : condition.toUpperCase();
5989
+ queryStr += ' ' + condition + ' ';
5990
+ }
5011
5991
  }
5012
5992
  }
5013
5993
  }
@@ -5073,12 +6053,19 @@ var QueryBuilder = /** @class */ (function (_super) {
5073
6053
  * @returns {ParameterizedSql} – Parameterized SQL query from rules.
5074
6054
  */
5075
6055
  QueryBuilder.prototype.getParameterizedSql = function (rule) {
5076
- if (!rule) {
5077
- rule = this.getValidRules();
6056
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
6057
+ if (this.moduleLoader.loadedModules.length) {
6058
+ if (!rule) {
6059
+ rule = this.getValidRules();
6060
+ }
6061
+ var obj = { sql: null };
6062
+ this.notify('query-library', { prop: 'getParameterSql', onPropertyChange: false, value: { rule: rule, obj: obj } });
6063
+ return obj['sql'];
5078
6064
  }
5079
- var obj = { sql: null };
5080
- this.notify('query-library', { prop: 'getParameterSql', onPropertyChange: false, value: { rule: rule, obj: obj } });
5081
- return obj['sql'];
6065
+ else {
6066
+ console.warn('[WARNING] :: Module "query-library" is not available in QueryBuilder component! You either misspelled the module name or forgot to load it.');
6067
+ }
6068
+ return null;
5082
6069
  };
5083
6070
  /**
5084
6071
  * Sets the rules from the parameter sql query.
@@ -5087,13 +6074,19 @@ var QueryBuilder = /** @class */ (function (_super) {
5087
6074
  * @returns {void}
5088
6075
  */
5089
6076
  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 });
6077
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
6078
+ if (this.moduleLoader.loadedModules.length) {
6079
+ var obj = { sql: null };
6080
+ this.notify('query-library', { prop: 'convertParamSqlToSql', onPropertyChange: false, value: { sql: sqlQuery, obj: obj } });
6081
+ var sql = obj['sql'];
6082
+ if (sql) {
6083
+ sql = sql.replace(/`/g, '');
6084
+ var ruleModel = this.getRulesFromSql(sql);
6085
+ this.setRules({ condition: ruleModel.condition, not: ruleModel.not, rules: ruleModel.rules });
6086
+ }
6087
+ }
6088
+ else {
6089
+ console.warn('[WARNING] :: Module "query-library" is not available in QueryBuilder component! You either misspelled the module name or forgot to load it.');
5097
6090
  }
5098
6091
  };
5099
6092
  /**
@@ -5103,12 +6096,19 @@ var QueryBuilder = /** @class */ (function (_super) {
5103
6096
  * @returns {ParameterizedNamedSql} – Parameterized Named SQL query from rules.
5104
6097
  */
5105
6098
  QueryBuilder.prototype.getParameterizedNamedSql = function (rule) {
5106
- if (!rule) {
5107
- rule = this.getValidRules();
6099
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
6100
+ if (this.moduleLoader.loadedModules.length) {
6101
+ if (!rule) {
6102
+ rule = this.getValidRules();
6103
+ }
6104
+ var obj = { sql: null };
6105
+ this.notify('query-library', { prop: 'getNamedParameterSql', onPropertyChange: false, value: { rule: rule, obj: obj } });
6106
+ return obj['sql'];
5108
6107
  }
5109
- var obj = { sql: null };
5110
- this.notify('query-library', { prop: 'getNamedParameterSql', onPropertyChange: false, value: { rule: rule, obj: obj } });
5111
- return obj['sql'];
6108
+ else {
6109
+ console.warn('[WARNING] :: Module "query-library" is not available in QueryBuilder component! You either misspelled the module name or forgot to load it.');
6110
+ }
6111
+ return null;
5112
6112
  };
5113
6113
  /**
5114
6114
  * Sets the rules from the named parameter SQL query.
@@ -5117,13 +6117,19 @@ var QueryBuilder = /** @class */ (function (_super) {
5117
6117
  * @returns {void}
5118
6118
  */
5119
6119
  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 });
6120
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
6121
+ if (this.moduleLoader.loadedModules.length) {
6122
+ var obj = { sql: null };
6123
+ this.notify('query-library', { prop: 'convertNamedParamSqlToSql', onPropertyChange: false, value: { sql: sqlQuery, obj: obj } });
6124
+ var sql = obj['sql'];
6125
+ if (sql) {
6126
+ sql = sql.replace(/`/g, '');
6127
+ var ruleModel = this.getRulesFromSql(sql);
6128
+ this.setRules({ condition: ruleModel.condition, not: ruleModel.not, rules: ruleModel.rules });
6129
+ }
6130
+ }
6131
+ else {
6132
+ console.warn('[WARNING] :: Module "query-library" is not available in QueryBuilder component! You either misspelled the module name or forgot to load it.');
5127
6133
  }
5128
6134
  };
5129
6135
  /**
@@ -5134,8 +6140,14 @@ var QueryBuilder = /** @class */ (function (_super) {
5134
6140
  * @returns {void}
5135
6141
  */
5136
6142
  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 } });
6143
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
6144
+ if (this.moduleLoader.loadedModules.length) {
6145
+ this.rule = { condition: 'and', not: false, rules: [] };
6146
+ this.notify('query-library', { prop: 'mongoParser', onPropertyChange: false, value: { mongoQuery: JSON.parse(mongoQuery), rule: this.rule, mongoLocale: mongoLocale } });
6147
+ }
6148
+ else {
6149
+ console.warn('[WARNING] :: Module "query-library" is not available in QueryBuilder component! You either misspelled the module name or forgot to load it.');
6150
+ }
5139
6151
  };
5140
6152
  /**
5141
6153
  * Gets the Mongo query from rules.
@@ -5144,12 +6156,19 @@ var QueryBuilder = /** @class */ (function (_super) {
5144
6156
  * @returns {object} - Sql query from rules.
5145
6157
  */
5146
6158
  QueryBuilder.prototype.getMongoQuery = function (rule) {
5147
- if (!rule) {
5148
- rule = this.getValidRules();
6159
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
6160
+ if (this.moduleLoader.loadedModules.length) {
6161
+ if (!rule) {
6162
+ rule = this.getValidRules();
6163
+ }
6164
+ var obj = { mongoQuery: null };
6165
+ this.notify('query-library', { prop: 'getMongoFromRules', onPropertyChange: false, value: { rule: rule, mongoQuery: '', obj: obj } });
6166
+ return obj['mongoQuery'];
6167
+ }
6168
+ else {
6169
+ console.warn('[WARNING] :: Module "query-library" is not available in QueryBuilder component! You either misspelled the module name or forgot to load it.');
5149
6170
  }
5150
- var obj = { mongoQuery: null };
5151
- this.notify('query-library', { prop: 'getMongoFromRules', onPropertyChange: false, value: { rule: rule, mongoQuery: '', obj: obj } });
5152
- return obj['mongoQuery'];
6171
+ return '';
5153
6172
  };
5154
6173
  /**
5155
6174
  * Clones the rule based on the rule ID to the specific group.
@@ -5168,7 +6187,7 @@ var QueryBuilder = /** @class */ (function (_super) {
5168
6187
  this.showButtons.cloneRule = true;
5169
6188
  this.addRules([{
5170
6189
  'label': getRule.label, 'field': getRule.field, 'type': getRule.type, 'operator': getRule.operator,
5171
- 'value': getRule.value
6190
+ 'value': getRule.value, 'condition': getRule.condition
5172
6191
  }], groupID);
5173
6192
  this.ruleIndex = -1;
5174
6193
  this.cloneRuleBtnClick = false;
@@ -5257,8 +6276,9 @@ var QueryBuilder = /** @class */ (function (_super) {
5257
6276
  var matchValue;
5258
6277
  for (var i = 0, iLen = operators.length; i < iLen; i++) {
5259
6278
  regexStr = /^\w+$/.test(operators[i]) ? '\\b' : '';
5260
- // eslint-disable-next-line
5261
- regex = new RegExp('^(' + operators[i] + ')' + regexStr, 'ig');
6279
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
6280
+ var regExp = RegExp;
6281
+ regex = new regExp('^(' + operators[i] + ')' + regexStr, 'ig');
5262
6282
  if (regex.exec(sqlString)) {
5263
6283
  this.parser.push(['Operators', operators[i].toLowerCase()]);
5264
6284
  return operators[i].length;
@@ -5268,8 +6288,9 @@ var QueryBuilder = /** @class */ (function (_super) {
5268
6288
  if (!lastPasrser || (lastPasrser && lastPasrser[0] !== 'Literal')) {
5269
6289
  for (var i = 0, iLen = conditions.length; i < iLen; i++) {
5270
6290
  regexStr = /^\w+$/.test(conditions[i]) ? '\\b' : '';
5271
- // eslint-disable-next-line
5272
- regex = new RegExp('^(' + conditions[i] + ')' + regexStr, 'ig');
6291
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
6292
+ var regExp = RegExp;
6293
+ regex = new regExp('^(' + conditions[i] + ')' + regexStr, 'ig');
5273
6294
  if (regex.exec(sqlString)) {
5274
6295
  this.parser.push(['Conditions', conditions[i].toLowerCase()]);
5275
6296
  return conditions[i].length;
@@ -5278,8 +6299,9 @@ var QueryBuilder = /** @class */ (function (_super) {
5278
6299
  }
5279
6300
  for (var i = 0, iLen = subOp.length; i < iLen; i++) {
5280
6301
  regexStr = /^\w+$/.test(subOp[i]) ? '\\b' : '';
5281
- // eslint-disable-next-line
5282
- regex = new RegExp('^(' + subOp[i] + ')' + regexStr, 'ig');
6302
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
6303
+ var regExp = RegExp;
6304
+ regex = new regExp('^(' + subOp[i] + ')' + regexStr, 'ig');
5283
6305
  if (regex.exec(sqlString)) {
5284
6306
  this.parser.push(['SubOperators', subOp[i].toLowerCase()]);
5285
6307
  return subOp[i].length;
@@ -5307,31 +6329,25 @@ var QueryBuilder = /** @class */ (function (_super) {
5307
6329
  this.parser.push(['String', null]);
5308
6330
  return matchValue.length;
5309
6331
  }
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];
6332
+ if (/^`?([a-z_][a-z0-9_.\\[\]\\(\\)]{0,}(\\:(number|float|string|date|boolean))?)`?/i.exec(sqlString)) {
6333
+ matchValue = /^`?([a-z_][a-z0-9_.\\[\]\\(\\)]{0,}(\\:(number|float|string|date|boolean))?)`?/i.exec(sqlString)[1];
5314
6334
  this.parser.push(['Literal', matchValue]);
5315
6335
  return matchValue.length;
5316
6336
  }
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];
6337
+ if (this.checkLiteral() && /^'?([a-z_][a-z0-9 _.\\[\]\\(\\)-]{0,}(\\:(number|float|string|date|boolean))?)'?/i.exec(sqlString)) {
6338
+ matchValue = /^'?([a-z_][a-z0-9 _.\\[\]\\(\\)-]{0,}(\\:(number|float|string|date|boolean))?)'?/i.exec(sqlString)[1];
5321
6339
  this.parser.push(['Literal', matchValue]);
5322
6340
  return matchValue.length + 2;
5323
6341
  }
5324
6342
  if (this.checkNumberLiteral(sqlString, sqlLocale)) {
5325
- // eslint-disable-next-line
5326
- matchValue = /^[0-9]+(\.[0-9]+)?/.exec(sqlString)[0];
6343
+ matchValue = /^[0-9]+(\.[0-9]+)$/.exec(sqlString)[0];
5327
6344
  this.parser.push(['Literal', matchValue]);
5328
6345
  return matchValue.length;
5329
6346
  }
5330
6347
  //String
5331
- // eslint-disable-next-line
5332
- if (/^'((?:[^\\']+?|\\.|'')*)'(?!')/.exec(sqlString)) {
5333
- // eslint-disable-next-line
5334
- matchValue = /^'((?:[^\\']+?|\\.|'')*)'(?!')/.exec(sqlString)[0];
6348
+ var singleString = this.getSingleQuoteString(sqlString);
6349
+ if (singleString !== '') {
6350
+ matchValue = singleString;
5335
6351
  if (matchValue[matchValue.length - 2] === '(') {
5336
6352
  var isClosed = false;
5337
6353
  for (var j = matchValue.length; j < sqlString.length; j++) {
@@ -5346,38 +6362,43 @@ var QueryBuilder = /** @class */ (function (_super) {
5346
6362
  }
5347
6363
  else if (sqlString[matchValue.length] && (sqlString[matchValue.length] !== ')') &&
5348
6364
  !this.checkCondition(sqlString, matchValue)) {
5349
- matchValue = this.getSingleQuoteString(sqlString, matchValue);
6365
+ matchValue = this.combineSingleQuoteString(sqlString, matchValue);
5350
6366
  }
5351
6367
  // end
5352
6368
  this.parser.push(['String', matchValue]);
5353
6369
  return matchValue.length;
5354
6370
  }
5355
6371
  // Double String
5356
- // eslint-disable-next-line
5357
- if (/^"([^\\"]*(?:\\.[^\\"]*)*)"/.exec(sqlString)) {
5358
- // eslint-disable-next-line
5359
- matchValue = /^"([^\\"]*(?:\\.[^\\"]*)*)"/.exec(sqlString)[0];
6372
+ var doubleString = this.getDoubleQuoteString(sqlString);
6373
+ if (doubleString !== '') {
6374
+ matchValue = doubleString;
5360
6375
  this.parser.push(['DoubleString', matchValue]);
5361
6376
  return matchValue.length;
5362
6377
  }
5363
6378
  //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];
6379
+ if (/^\d*\.?\d+/.exec(sqlString)) {
6380
+ matchValue = /^\d*\.?\d+/.exec(sqlString)[0];
5368
6381
  this.parser.push(['Number', matchValue]);
5369
6382
  return matchValue.length;
5370
6383
  }
5371
6384
  //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];
6385
+ if (/^-?\d*\.?\d+/.exec(sqlString)) {
6386
+ matchValue = /^-?\d*\.?\d+/.exec(sqlString)[0];
5376
6387
  this.parser.push(['Number', matchValue]);
5377
6388
  return matchValue.length;
5378
6389
  }
5379
6390
  return 1;
5380
6391
  };
6392
+ QueryBuilder.prototype.getDoubleQuoteString = function (sqlString) {
6393
+ var start = sqlString.indexOf('"');
6394
+ if (start === 0) {
6395
+ var end = sqlString.indexOf('"', start + 1);
6396
+ if (end !== -1) {
6397
+ return sqlString.substring(start, end + 1);
6398
+ }
6399
+ }
6400
+ return '';
6401
+ };
5381
6402
  QueryBuilder.prototype.checkCondition = function (sqlString, matchValue) {
5382
6403
  if (sqlString.slice(matchValue.length + 1, matchValue.length + 4) === 'AND' ||
5383
6404
  sqlString.slice(matchValue.length + 1, matchValue.length + 3) === 'OR') {
@@ -5385,16 +6406,26 @@ var QueryBuilder = /** @class */ (function (_super) {
5385
6406
  }
5386
6407
  return false;
5387
6408
  };
5388
- QueryBuilder.prototype.getSingleQuoteString = function (sqlString, matchValue) {
6409
+ QueryBuilder.prototype.getSingleQuoteString = function (sqlString, isBetween) {
6410
+ var start = sqlString.indexOf('\'');
6411
+ if ((start !== -1 && isBetween) || (start === 0 && !isBetween)) {
6412
+ var end = sqlString.indexOf('\'', start + 1);
6413
+ if (end !== -1) {
6414
+ return sqlString.substring(start, end + 1);
6415
+ }
6416
+ }
6417
+ return '';
6418
+ };
6419
+ QueryBuilder.prototype.combineSingleQuoteString = function (sqlString, matchValue) {
5389
6420
  if (sqlString[matchValue.length] && (sqlString[matchValue.length] !== ')') &&
5390
6421
  !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];
6422
+ var tempMatchValue = matchValue.substring(0, matchValue.length - 1);
6423
+ var tempStr = sqlString.replace(tempMatchValue, '');
6424
+ var singleString = this.getSingleQuoteString(tempStr, true);
6425
+ if (singleString !== '') {
6426
+ var parsedValue = singleString.substring(1, singleString.length);
5396
6427
  matchValue += parsedValue;
5397
- matchValue = this.getSingleQuoteString(sqlString, matchValue);
6428
+ matchValue = this.combineSingleQuoteString(sqlString, matchValue);
5398
6429
  }
5399
6430
  }
5400
6431
  return matchValue;
@@ -5423,8 +6454,7 @@ var QueryBuilder = /** @class */ (function (_super) {
5423
6454
  return true;
5424
6455
  }
5425
6456
  else {
5426
- // eslint-disable-next-line
5427
- if (/^[0-9]+(\.[0-9]+)?/.exec(sqlString)) {
6457
+ if (/^[0-9]+(?:\.[0-9]+)$/.exec(sqlString)) {
5428
6458
  var secParser = this.parser[this.parser.length - 2];
5429
6459
  var betweenParser = this.parser[this.parser.length - 3];
5430
6460
  if (lastParser[0] === 'Left' && (secParser && secParser[0] === 'Conditions')) {
@@ -5637,17 +6667,17 @@ var QueryBuilder = /** @class */ (function (_super) {
5637
6667
  strVal = [];
5638
6668
  rule.type = this.getTypeFromColumn(rule);
5639
6669
  }
6670
+ if (this.enableSeparateConnector && parser[i + 1][0] === 'Conditions') {
6671
+ rule.condition = parser[i + 1][1];
6672
+ }
5640
6673
  }
5641
6674
  else if (parser[i + 1][0] === 'Operators') {
5642
6675
  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;
6676
+ if (rule.operator === 'equal' && parser[i + 2][0] === 'String' && parser[i + 2][1] === '\'\'') {
6677
+ rule.operator = 'isempty';
5647
6678
  }
5648
- else if (rule.operator == "notequal" && parser[i + 2][0] === "String" && parser[i + 2][1] === "''") {
5649
- rule.operator = "isnotempty";
5650
- isEmptyOper = true;
6679
+ else if (rule.operator === 'notequal' && parser[i + 2][0] === 'String' && parser[i + 2][1] === '\'\'') {
6680
+ rule.operator = 'isnotempty';
5651
6681
  }
5652
6682
  if (parser[i + 2][0] === 'Number') {
5653
6683
  rule.type = 'number';
@@ -5661,6 +6691,9 @@ var QueryBuilder = /** @class */ (function (_super) {
5661
6691
  }
5662
6692
  rule.value = val;
5663
6693
  }
6694
+ if (this.enableSeparateConnector && parser[i + 3][0] === 'Conditions') {
6695
+ rule.condition = parser[i + 3][1];
6696
+ }
5664
6697
  rule.type = this.getTypeFromColumn(rule);
5665
6698
  }
5666
6699
  rules.rules.push(rule);
@@ -5688,7 +6721,7 @@ var QueryBuilder = /** @class */ (function (_super) {
5688
6721
  subRules = this.processParser(this.parser, subRules, levelColl, sqlLocale);
5689
6722
  return rules;
5690
6723
  }
5691
- else if (parser[i][0] === 'Conditions') {
6724
+ else if (parser[i][0] === 'Conditions' && !this.enableSeparateConnector) {
5692
6725
  if (parser[i][1] === 'not' || (sqlLocale && this.l10n.getConstant('NOT').toLowerCase() === parser[i][1])) {
5693
6726
  rules.not = true;
5694
6727
  }
@@ -5709,27 +6742,6 @@ var QueryBuilder = /** @class */ (function (_super) {
5709
6742
  }
5710
6743
  return rules;
5711
6744
  };
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
6745
  /**
5734
6746
  * Clone the Group
5735
6747
  *
@@ -5764,8 +6776,14 @@ var QueryBuilder = /** @class */ (function (_super) {
5764
6776
  this.ruleIndex = i;
5765
6777
  }
5766
6778
  }
5767
- this.addRules([{ 'label': getRule.label, 'field': getRule.field, 'type': getRule.type, 'operator': getRule.operator,
5768
- 'value': getRule.value }], groupId);
6779
+ if (this.enableSeparateConnector) {
6780
+ this.addRules([{ 'label': getRule.label, 'field': getRule.field, 'type': getRule.type, 'operator': getRule.operator,
6781
+ 'value': getRule.value, 'condition': getRule.condition }], groupId);
6782
+ }
6783
+ else {
6784
+ this.addRules([{ 'label': getRule.label, 'field': getRule.field, 'type': getRule.type, 'operator': getRule.operator,
6785
+ 'value': getRule.value }], groupId);
6786
+ }
5769
6787
  this.ruleIndex = -1;
5770
6788
  };
5771
6789
  QueryBuilder.prototype.ruleLock = function (target) {
@@ -5866,6 +6884,8 @@ var QueryBuilder = /** @class */ (function (_super) {
5866
6884
  var lockElem = groupElem.querySelectorAll('.e-lock-grp-btn');
5867
6885
  var cloneElem = groupElem.querySelectorAll('.e-clone-grp-btn');
5868
6886
  var groupContElem = groupElem.querySelectorAll('.e-group-container');
6887
+ var addCondition = groupElem.querySelectorAll('.e-add-condition-btn');
6888
+ var addGroup = groupElem.querySelectorAll('.e-add-group-btn');
5869
6889
  for (var i = 0; i < andElem.length; i++) {
5870
6890
  if (isDisabled) {
5871
6891
  if (groupContElem[i] && groupContElem[i].classList.contains('e-disable')) {
@@ -5873,7 +6893,15 @@ var QueryBuilder = /** @class */ (function (_super) {
5873
6893
  }
5874
6894
  andElem[i].disabled = true;
5875
6895
  orElem[i].disabled = true;
5876
- addElem[i].disabled = true;
6896
+ if (addElem[i]) {
6897
+ addElem[i].disabled = true;
6898
+ }
6899
+ if (addCondition[i]) {
6900
+ addCondition[i].disabled = true;
6901
+ }
6902
+ if (addGroup[i]) {
6903
+ addGroup[i].disabled = true;
6904
+ }
5877
6905
  if (notElem[i]) {
5878
6906
  notElem[i].disabled = true;
5879
6907
  }
@@ -5884,7 +6912,7 @@ var QueryBuilder = /** @class */ (function (_super) {
5884
6912
  cloneElem[i].disabled = true;
5885
6913
  }
5886
6914
  andElem[i].parentElement.classList.add('e-disabled');
5887
- if (lockElem[i] !== target) {
6915
+ if (lockElem[i] && lockElem[i] !== target) {
5888
6916
  lockElem[i].disabled = true;
5889
6917
  lockElem[i].children[0].classList.remove('e-unlock');
5890
6918
  lockElem[i].children[0].classList.add('e-lock');
@@ -5896,8 +6924,18 @@ var QueryBuilder = /** @class */ (function (_super) {
5896
6924
  }
5897
6925
  andElem[i].disabled = false;
5898
6926
  orElem[i].disabled = false;
5899
- addElem[i].disabled = false;
5900
- lockElem[i].disabled = false;
6927
+ if (addElem[i]) {
6928
+ addElem[i].disabled = false;
6929
+ }
6930
+ if (addCondition[i]) {
6931
+ addCondition[i].disabled = false;
6932
+ }
6933
+ if (addGroup[i]) {
6934
+ addGroup[i].disabled = false;
6935
+ }
6936
+ if (lockElem[i]) {
6937
+ lockElem[i].disabled = false;
6938
+ }
5901
6939
  if (notElem[i]) {
5902
6940
  notElem[i].disabled = false;
5903
6941
  }
@@ -5908,8 +6946,12 @@ var QueryBuilder = /** @class */ (function (_super) {
5908
6946
  cloneElem[i].disabled = false;
5909
6947
  }
5910
6948
  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');
6949
+ if (lockElem[i]) {
6950
+ lockElem[i].children[0].classList.remove('e-lock');
6951
+ }
6952
+ if (lockElem[i]) {
6953
+ lockElem[i].children[0].classList.add('e-unlock');
6954
+ }
5913
6955
  }
5914
6956
  }
5915
6957
  this.disableRuleControls(target, groupElem, isDisabled);
@@ -6043,6 +7085,15 @@ var QueryBuilder = /** @class */ (function (_super) {
6043
7085
  __decorate([
6044
7086
  Event()
6045
7087
  ], QueryBuilder.prototype, "ruleChange", void 0);
7088
+ __decorate([
7089
+ Event()
7090
+ ], QueryBuilder.prototype, "dragStart", void 0);
7091
+ __decorate([
7092
+ Event()
7093
+ ], QueryBuilder.prototype, "drag", void 0);
7094
+ __decorate([
7095
+ Event()
7096
+ ], QueryBuilder.prototype, "drop", void 0);
6046
7097
  __decorate([
6047
7098
  Complex({}, ShowButtons)
6048
7099
  ], QueryBuilder.prototype, "showButtons", void 0);
@@ -6118,9 +7169,15 @@ var QueryBuilder = /** @class */ (function (_super) {
6118
7169
  __decorate([
6119
7170
  Property('')
6120
7171
  ], QueryBuilder.prototype, "separator", void 0);
7172
+ __decorate([
7173
+ Property(false)
7174
+ ], QueryBuilder.prototype, "enableSeparateConnector", void 0);
6121
7175
  __decorate([
6122
7176
  Complex({ condition: 'and', rules: [] }, Rule)
6123
7177
  ], QueryBuilder.prototype, "rule", void 0);
7178
+ __decorate([
7179
+ Property(false)
7180
+ ], QueryBuilder.prototype, "allowDragAndDrop", void 0);
6124
7181
  QueryBuilder = __decorate([
6125
7182
  NotifyPropertyChanges
6126
7183
  ], QueryBuilder);