@syncfusion/ej2-querybuilder 24.2.8 → 25.1.35

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (58) hide show
  1. package/CHANGELOG.md +18 -0
  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 +1615 -157
  6. package/dist/es6/ej2-querybuilder.es2015.js.map +1 -1
  7. package/dist/es6/ej2-querybuilder.es5.js +1617 -157
  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/global.js +2 -0
  14. package/src/query-builder/index.d.ts +1 -0
  15. package/src/query-builder/index.js +1 -0
  16. package/src/query-builder/query-builder-model.d.ts +69 -1
  17. package/src/query-builder/query-builder.d.ts +189 -4
  18. package/src/query-builder/query-builder.js +903 -130
  19. package/src/query-builder/query-library.d.ts +24 -0
  20. package/src/query-builder/query-library.js +689 -0
  21. package/styles/bootstrap-dark.css +29 -12
  22. package/styles/bootstrap.css +29 -12
  23. package/styles/bootstrap4.css +25 -12
  24. package/styles/bootstrap5-dark.css +35 -11
  25. package/styles/bootstrap5.css +35 -11
  26. package/styles/fabric-dark.css +25 -12
  27. package/styles/fabric.css +25 -12
  28. package/styles/fluent-dark.css +39 -11
  29. package/styles/fluent.css +39 -11
  30. package/styles/highcontrast-light.css +25 -12
  31. package/styles/highcontrast.css +25 -12
  32. package/styles/material-dark.css +25 -12
  33. package/styles/material.css +25 -12
  34. package/styles/material3-dark.css +25 -12
  35. package/styles/material3.css +25 -12
  36. package/styles/query-builder/_bds-definition.scss +107 -0
  37. package/styles/query-builder/_layout.scss +37 -7
  38. package/styles/query-builder/_theme.scss +16 -1
  39. package/styles/query-builder/bootstrap-dark.css +29 -12
  40. package/styles/query-builder/bootstrap.css +29 -12
  41. package/styles/query-builder/bootstrap4.css +25 -12
  42. package/styles/query-builder/bootstrap5-dark.css +35 -11
  43. package/styles/query-builder/bootstrap5.css +35 -11
  44. package/styles/query-builder/fabric-dark.css +25 -12
  45. package/styles/query-builder/fabric.css +25 -12
  46. package/styles/query-builder/fluent-dark.css +39 -11
  47. package/styles/query-builder/fluent.css +39 -11
  48. package/styles/query-builder/highcontrast-light.css +25 -12
  49. package/styles/query-builder/highcontrast.css +25 -12
  50. package/styles/query-builder/icons/_bds.scss +7 -0
  51. package/styles/query-builder/material-dark.css +25 -12
  52. package/styles/query-builder/material.css +25 -12
  53. package/styles/query-builder/material3-dark.css +25 -12
  54. package/styles/query-builder/material3.css +25 -12
  55. package/styles/query-builder/tailwind-dark.css +30 -11
  56. package/styles/query-builder/tailwind.css +30 -11
  57. package/styles/tailwind-dark.css +30 -11
  58. package/styles/tailwind.css +30 -11
@@ -121,6 +121,9 @@ var Rule = /** @__PURE__ @class */ (function (_super) {
121
121
  __decorate([
122
122
  Property(false)
123
123
  ], Rule.prototype, "not", void 0);
124
+ __decorate([
125
+ Property(false)
126
+ ], Rule.prototype, "isLocked", void 0);
124
127
  return Rule;
125
128
  }(ChildProperty));
126
129
  /**
@@ -156,6 +159,18 @@ var ShowButtons = /** @__PURE__ @class */ (function (_super) {
156
159
  function ShowButtons() {
157
160
  return _super !== null && _super.apply(this, arguments) || this;
158
161
  }
162
+ __decorate([
163
+ Property(false)
164
+ ], ShowButtons.prototype, "cloneRule", void 0);
165
+ __decorate([
166
+ Property(false)
167
+ ], ShowButtons.prototype, "cloneGroup", void 0);
168
+ __decorate([
169
+ Property(false)
170
+ ], ShowButtons.prototype, "lockRule", void 0);
171
+ __decorate([
172
+ Property(false)
173
+ ], ShowButtons.prototype, "lockGroup", void 0);
159
174
  __decorate([
160
175
  Property(true)
161
176
  ], ShowButtons.prototype, "ruleDelete", void 0);
@@ -173,7 +188,7 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
173
188
  var _this = _super.call(this, options, element) || this;
174
189
  _this.isReadonly = true;
175
190
  _this.fields = { text: 'label', value: 'field' };
176
- _this.updatedRule = { not: false, condition: 'and' };
191
+ _this.updatedRule = { not: false, condition: 'and', isLocked: false };
177
192
  _this.isLocale = false;
178
193
  _this.isRefreshed = false;
179
194
  _this.isNotified = false;
@@ -184,6 +199,14 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
184
199
  _this.isDestroy = false;
185
200
  _this.isGetNestedData = false;
186
201
  _this.isCustomOprCols = [];
202
+ _this.groupCounter = 0;
203
+ _this.lockItems = [];
204
+ _this.groupIndex = -1;
205
+ _this.ruleIndex = -1;
206
+ _this.isLastGroup = false;
207
+ _this.cloneGrpBtnClick = false;
208
+ _this.isMiddleGroup = false;
209
+ _this.cloneRuleBtnClick = false;
187
210
  MultiSelect.Inject(CheckBoxSelection);
188
211
  return _this;
189
212
  }
@@ -236,6 +259,14 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
236
259
  QueryBuilder.prototype.getModuleName = function () {
237
260
  return 'query-builder';
238
261
  };
262
+ QueryBuilder.prototype.requiredModules = function () {
263
+ var modules = [];
264
+ modules.push({
265
+ member: 'query-library',
266
+ args: [this]
267
+ });
268
+ return modules;
269
+ };
239
270
  QueryBuilder.prototype.GetRootColumnName = function (field) {
240
271
  return this.separator ? field.split(this.separator)[0] : field;
241
272
  };
@@ -429,31 +460,51 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
429
460
  txtareaElem.style.height = txtareaElem.scrollHeight + 'px';
430
461
  }
431
462
  if (target.tagName === 'BUTTON' && target.className.indexOf('e-qb-toggle') < 0) {
432
- if (target.className.indexOf('e-removerule') > -1) {
433
- this.actionButton = target;
434
- this.deleteRule(target);
435
- }
436
- else if (target.className.indexOf('e-deletegroup') > -1) {
437
- this.actionButton = target;
438
- this.deleteGroup(closest(target, '.e-group-container'));
439
- }
440
- else if (target.className.indexOf('e-edit-rule') > -1) {
441
- var animation = new Animation({ duration: 1000, delay: 0 });
442
- animation.animate('.e-query-builder', { name: 'SlideLeftIn' });
443
- document.getElementById(this.element.id + '_summary_content').style.display = 'none';
444
- if (this.element.querySelectorAll('.e-group-container').length < 1) {
445
- this.addGroupElement(false, this.element, this.rule.condition, false, this.rule.not);
446
- var mRules = extend({}, this.rule, {}, true);
447
- this.setGroupRules(mRules);
448
- this.renderSummaryCollapse();
449
- }
450
- else {
451
- var groupElem = this.element.querySelector('.e-group-container');
452
- if (groupElem.querySelectorAll('.e-collapse-rule').length < 1) {
463
+ switch (true) {
464
+ case target.className.indexOf('e-removerule') > -1:
465
+ this.actionButton = target;
466
+ this.deleteRule(target);
467
+ break;
468
+ case target.className.indexOf('e-clone-rule-btn') > -1:
469
+ this.actionButton = target;
470
+ this.cloneRuleBtnClick = true;
471
+ this.ruleClone(target);
472
+ break;
473
+ case target.className.indexOf('e-lock-rule-btn') > -1:
474
+ this.actionButton = target;
475
+ this.ruleLock(target);
476
+ break;
477
+ case target.className.indexOf('e-lock-grp-btn') > -1:
478
+ this.actionButton = target;
479
+ this.groupLock(target);
480
+ break;
481
+ case target.className.indexOf('e-clone-grp-btn') > -1:
482
+ this.actionButton = target;
483
+ this.cloneGrpBtnClick = true;
484
+ this.groupClone(closest(target, '.e-group-container'));
485
+ break;
486
+ case target.className.indexOf('e-deletegroup') > -1:
487
+ this.actionButton = target;
488
+ this.deleteGroup(closest(target, '.e-group-container'));
489
+ break;
490
+ case target.className.indexOf('e-edit-rule') > -1:
491
+ var animation = new Animation({ duration: 1000, delay: 0 });
492
+ animation.animate('.e-query-builder', { name: 'SlideLeftIn' });
493
+ document.getElementById(this.element.id + '_summary_content').style.display = 'none';
494
+ if (this.element.querySelectorAll('.e-group-container').length < 1) {
495
+ this.addGroupElement(false, this.element, this.rule.condition, false, this.rule.not);
496
+ var mRules = extend({}, this.rule, {}, true);
497
+ this.setGroupRules(mRules);
453
498
  this.renderSummaryCollapse();
454
499
  }
455
- groupElem.style.display = 'block';
456
- }
500
+ else {
501
+ var groupElem = this.element.querySelector('.e-group-container');
502
+ if (groupElem.querySelectorAll('.e-collapse-rule').length < 1) {
503
+ this.renderSummaryCollapse();
504
+ }
505
+ groupElem.style.display = 'block';
506
+ }
507
+ break;
457
508
  }
458
509
  }
459
510
  else if ((target.tagName === 'LABEL' && target.parentElement.className.indexOf('e-btn-group') > -1) ||
@@ -553,7 +604,18 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
553
604
  else {
554
605
  ruleElem = this.createElement('div', { attrs: { class: 'e-rule-container' } });
555
606
  ruleElem.setAttribute('id', target.id + '_rule' + this.ruleIdCounter);
556
- ruleListElem.appendChild(ruleElem);
607
+ if (this.showButtons.cloneRule && this.cloneRuleBtnClick) {
608
+ if (this.ruleIndex < 0) {
609
+ ruleListElem.appendChild(ruleElem);
610
+ }
611
+ else {
612
+ ruleListElem.insertBefore(ruleElem, ruleListElem.children[this.ruleIndex + 1]); // added clone rule to next position
613
+ }
614
+ this.cloneRuleBtnClick = false;
615
+ }
616
+ else {
617
+ ruleListElem.appendChild(ruleElem);
618
+ }
557
619
  this.ruleIdCounter++;
558
620
  }
559
621
  if (column && column.ruleTemplate && rule) {
@@ -603,6 +665,21 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
603
665
  elem = this.ruleElem.querySelector('.e-rule-field').cloneNode(true);
604
666
  ruleElem.appendChild(elem);
605
667
  }
668
+ if (this.showButtons.lockGroup) {
669
+ removeClass(ruleElem.querySelectorAll('.e-lock-grp-btn'), 'e-button-hide');
670
+ }
671
+ if (this.showButtons.lockRule) {
672
+ removeClass(ruleElem.querySelectorAll('.e-lock-rule-btn'), 'e-button-hide');
673
+ }
674
+ if (this.showButtons.cloneGroup) {
675
+ removeClass(ruleElem.querySelectorAll('.e-clone-grp-btn'), 'e-button-hide');
676
+ }
677
+ if (this.showButtons.cloneRule) {
678
+ removeClass(ruleElem.querySelectorAll('.e-clone-rule-btn'), 'e-button-hide');
679
+ }
680
+ if (this.showButtons.ruleDelete) {
681
+ removeClass(ruleElem.querySelectorAll('.e-lock-grp-btn'), 'e-button-hide');
682
+ }
606
683
  if (column && column.ruleTemplate && rule) {
607
684
  this.renderReactTemplates();
608
685
  }
@@ -646,7 +723,7 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
646
723
  else {
647
724
  ruleElem = this.appendRuleElem(trgt, column, act, pId, 'field');
648
725
  ruleElem.querySelector('.e-filter-input').setAttribute('id', ruleElem.id + '_filterkey');
649
- var element = ruleElem.querySelector('button');
726
+ var element = ruleElem.querySelector('.e-rule-delete');
650
727
  if (this.element.className.indexOf('e-device') > -1 || this.displayMode === 'Vertical') {
651
728
  element.textContent = this.l10n.getConstant('Remove');
652
729
  addClass([element], 'e-flat');
@@ -656,8 +733,11 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
656
733
  addClass([element], 'e-round');
657
734
  addClass([element], 'e-icon-btn');
658
735
  element.setAttribute('title', this.l10n.getConstant('DeleteRule'));
659
- element = this.createElement('span', { attrs: { class: 'e-btn-icon e-icons e-delete-icon' } });
660
- ruleElem.querySelector('button').appendChild(element);
736
+ var spanElement = this.createElement('span', { attrs: { class: 'e-btn-icon e-icons e-delete-icon' } });
737
+ ruleElem.querySelector('.e-rule-delete').appendChild(spanElement);
738
+ }
739
+ if (!this.showButtons.ruleDelete) {
740
+ element.classList.add('e-button-hide');
661
741
  }
662
742
  }
663
743
  if (this.displayMode === 'Vertical' || this.element.className.indexOf('e-device') > -1) {
@@ -688,6 +768,9 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
688
768
  if (this.separator && rule.field) {
689
769
  ddlValue = this.GetRootColumnName(rule.field);
690
770
  }
771
+ else if (this.autoSelectField) {
772
+ ddlValue = this.GetRootColumnName(rule.field);
773
+ }
691
774
  else {
692
775
  ddlValue = this.isImportRules ? this.GetRootColumnName(rule.field) : rule.field;
693
776
  }
@@ -695,8 +778,7 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
695
778
  dataSource: this.columns,
696
779
  fields: this.fields, placeholder: this.l10n.getConstant('SelectField'),
697
780
  popupHeight: ((this.columns.length > 5) ? height : 'auto'), close: this.fieldClose.bind(this, ruleElem.id + '_filterkey'),
698
- change: this.changeField.bind(this), value: rule ? ddlValue : null, open: this.popupOpen.bind(this, true),
699
- cssClass: 'qb-dropdownlist'
781
+ change: this.changeField.bind(this), value: rule ? ddlValue : null, open: this.popupOpen.bind(this, true), cssClass: 'qb-dropdownlist'
700
782
  };
701
783
  if (this.fieldModel) {
702
784
  ddlField = __assign({}, ddlField, this.fieldModel);
@@ -786,12 +868,23 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
786
868
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
787
869
  var custom = rule.custom;
788
870
  if (Object.keys(rule).length) {
789
- rules.rules.push({
790
- 'field': rule.field, 'type': rule.type, 'label': rule.label, 'operator': rule.operator, value: rule.value
791
- });
792
- if (custom) {
793
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
794
- rules.rules[rules.rules.length - 1].custom = custom;
871
+ if (this.ruleIndex < 0) {
872
+ rules.rules.push({
873
+ 'field': rule.field, 'type': rule.type, 'label': rule.label, 'operator': rule.operator, value: rule.value
874
+ });
875
+ if (custom) {
876
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
877
+ rules.rules[rules.rules.length - 1].custom = custom;
878
+ }
879
+ }
880
+ else {
881
+ rules.rules.splice(this.ruleIndex + 1, 0, {
882
+ 'field': rule.field, 'type': rule.type, 'label': rule.label, 'operator': rule.operator, value: rule.value
883
+ });
884
+ if (custom) {
885
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
886
+ rules.rules[this.ruleIndex + 1].custom = custom;
887
+ }
795
888
  }
796
889
  }
797
890
  else {
@@ -799,6 +892,9 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
799
892
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
800
893
  newRule.custom = custom;
801
894
  }
895
+ if (this.autoSelectField) {
896
+ rule.field = newRule.field = this.rule.rules[0].field;
897
+ }
802
898
  rules.rules.push(newRule);
803
899
  }
804
900
  }
@@ -998,6 +1094,8 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
998
1094
  QueryBuilder.prototype.ruleTemplate = function () {
999
1095
  var tempElem;
1000
1096
  var clsName;
1097
+ var cloneClsName;
1098
+ var lockClsName;
1001
1099
  var ruleElem = this.createElement('div');
1002
1100
  var fieldElem = this.createElement('div', { attrs: { class: 'e-rule-field' } });
1003
1101
  tempElem = this.createElement('div', { attrs: { class: 'e-rule-filter' } });
@@ -1009,6 +1107,24 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
1009
1107
  tempElem = this.createElement('div', { attrs: { class: 'e-rule-value' } });
1010
1108
  fieldElem.appendChild(tempElem);
1011
1109
  tempElem = this.createElement('div', { attrs: { class: 'e-rule-value-delete' } });
1110
+ if (this.showButtons.cloneRule) {
1111
+ cloneClsName = 'e-clone-rule-btn e-clone-rule e-css e-btn e-small e-round e-icon-btn';
1112
+ }
1113
+ else {
1114
+ cloneClsName = 'e-clone-rule-btn e-clone-rule e-css e-btn e-small e-round e-icon-btn e-button-hide';
1115
+ }
1116
+ if (this.showButtons.lockRule) {
1117
+ lockClsName = 'e-lock-rule-btn e-lock-rule e-css e-btn e-small e-round e-icons e-icon-btn';
1118
+ }
1119
+ else {
1120
+ lockClsName = 'e-lock-rule-btn e-lock-rule e-css e-btn e-small e-round e-icons e-icon-btn e-button-hide';
1121
+ }
1122
+ var cloneRuleBtnElem = this.createElement('button', { attrs: { title: this.l10n.getConstant('CloneRule'), type: 'button', class: cloneClsName } });
1123
+ var spanElement = this.createElement('span', { attrs: { class: 'e-btn-icon e-icons e-copy' } });
1124
+ cloneRuleBtnElem.appendChild(spanElement);
1125
+ var cloneLockBtnElem = this.createElement('button', { attrs: { title: this.l10n.getConstant('LockRule'), type: 'button', class: lockClsName } });
1126
+ spanElement = this.createElement('span', { attrs: { class: 'e-btn-icon e-icons e-unlock' } });
1127
+ cloneLockBtnElem.appendChild(spanElement);
1012
1128
  if (this.showButtons.ruleDelete || isNullOrUndefined(this.showButtons.ruleDelete)) {
1013
1129
  clsName = 'e-removerule e-rule-delete e-css e-btn e-small';
1014
1130
  }
@@ -1016,6 +1132,8 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
1016
1132
  clsName = 'e-removerule e-rule-delete e-css e-btn e-small e-button-hide';
1017
1133
  }
1018
1134
  var delBtnElem = this.createElement('button', { attrs: { type: 'button', class: clsName } });
1135
+ tempElem.appendChild(cloneRuleBtnElem);
1136
+ tempElem.appendChild(cloneLockBtnElem);
1019
1137
  tempElem.appendChild(delBtnElem);
1020
1138
  fieldElem.appendChild(tempElem);
1021
1139
  ruleElem.appendChild(fieldElem);
@@ -1085,9 +1203,6 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
1085
1203
  button.appendTo(dltGroupBtn);
1086
1204
  dltGroupBtn.setAttribute('title', this.l10n.getConstant('DeleteGroup'));
1087
1205
  rippleEffect(dltGroupBtn, { selector: '.deletegroup' });
1088
- if (!this.headerTemplate) {
1089
- groupElem.querySelector('.e-group-action').appendChild(dltGroupBtn);
1090
- }
1091
1206
  var ruleList = target.querySelector('.e-rule-list');
1092
1207
  var childElems = ruleList.children;
1093
1208
  var grpLen = 0;
@@ -1096,20 +1211,72 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
1096
1211
  grpLen += 1;
1097
1212
  }
1098
1213
  }
1099
- ruleList.appendChild(groupElem);
1214
+ if (this.showButtons.cloneGroup && this.cloneGrpBtnClick) {
1215
+ if (this.groupIndex === (childElems.length - 1)) {
1216
+ ruleList.appendChild(groupElem);
1217
+ this.isLastGroup = true;
1218
+ }
1219
+ else {
1220
+ childElems[this.groupIndex + 1].parentNode.insertBefore(groupElem, childElems[this.groupIndex + 1]); // clone the element to nxt element
1221
+ this.isMiddleGroup = true;
1222
+ }
1223
+ }
1224
+ else {
1225
+ ruleList.appendChild(groupElem);
1226
+ }
1100
1227
  var level = this.levelColl[target.id].slice(0);
1101
1228
  level.push(grpLen);
1102
1229
  this.levelColl[groupElem.id] = level;
1230
+ if (this.groupIndex > -1) {
1231
+ this.refreshLevelColl();
1232
+ }
1103
1233
  if (!this.isImportRules) {
1104
1234
  this.isAddSuccess = true;
1105
1235
  this.addGroups([], target.id.replace(this.element.id + '_', ''));
1106
1236
  this.isAddSuccess = false;
1107
- if (isBtnClick) {
1237
+ if (isBtnClick && this.addRuleToNewGroups) {
1108
1238
  this.addRuleElement(groupElem, {});
1109
1239
  }
1110
1240
  }
1241
+ if (!this.headerTemplate) {
1242
+ var lockClsName = '';
1243
+ if (this.showButtons.cloneGroup) {
1244
+ lockClsName = 'e-clone-grp-btn e-css e-btn e-small e-round e-icons e-icon-btn';
1245
+ }
1246
+ else {
1247
+ lockClsName = 'e-clone-grp-btn e-css e-btn e-small e-round e-icons e-icon-btn e-button-hide';
1248
+ }
1249
+ var cloneBtnElem = this.createElement('button', { attrs: { title: this.l10n.getConstant('CloneGroup'), type: 'button', class: lockClsName } });
1250
+ var spanElement = this.createElement('span', { attrs: { class: 'e-btn-icon e-icons e-copy' } });
1251
+ cloneBtnElem.appendChild(spanElement);
1252
+ groupElem.querySelector('.e-group-action').appendChild(cloneBtnElem);
1253
+ if (this.showButtons.lockGroup) {
1254
+ lockClsName = 'e-lock-grp-btn e-css e-btn e-small e-round e-icons e-icon-btn';
1255
+ }
1256
+ else {
1257
+ lockClsName = 'e-lock-grp-btn e-css e-btn e-small e-round e-icons e-icon-btn e-button-hide';
1258
+ }
1259
+ var lockBtnElem = this.createElement('button', { attrs: { title: this.l10n.getConstant('LockGroup'), type: 'button', class: lockClsName } });
1260
+ var lockSpanElement = this.createElement('span', { attrs: { class: 'e-btn-icon e-icons e-unlock' } });
1261
+ lockBtnElem.appendChild(lockSpanElement);
1262
+ groupElem.querySelector('.e-group-action').appendChild(lockBtnElem);
1263
+ groupElem.querySelector('.e-group-action').appendChild(dltGroupBtn);
1264
+ }
1111
1265
  }
1112
1266
  else {
1267
+ if (!this.headerTemplate) {
1268
+ var lockClsName = '';
1269
+ if (this.showButtons.lockGroup) {
1270
+ lockClsName = 'e-lock-grp-btn e-css e-btn e-small e-round e-icons e-icon-btn';
1271
+ }
1272
+ else {
1273
+ lockClsName = 'e-lock-grp-btn e-css e-btn e-small e-round e-icons e-icon-btn e-button-hide';
1274
+ }
1275
+ var lockBtnElem = this.createElement('button', { attrs: { title: this.l10n.getConstant('LockGroup'), type: 'button', class: lockClsName } });
1276
+ var spanElement = this.createElement('span', { attrs: { class: 'e-btn-icon e-icons e-unlock' } });
1277
+ lockBtnElem.appendChild(spanElement);
1278
+ groupElem.querySelector('.e-group-action').appendChild(lockBtnElem);
1279
+ }
1113
1280
  target.appendChild(groupElem);
1114
1281
  this.levelColl[groupElem.id] = [0];
1115
1282
  }
@@ -1367,6 +1534,10 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
1367
1534
  if (this.fieldMode === 'Default') {
1368
1535
  dropDownObj = getComponent(closest(element, '.e-rule-container').querySelector('.e-filter-input'), 'dropdownlist');
1369
1536
  this.selectedColumn = dropDownObj.getDataByValue(dropDownObj.value);
1537
+ if (this.selectedColumn.columns) {
1538
+ dropDownObj = getComponent(closest(element, '.e-rule-container').querySelector('.e-rule-sub-filter .e-dropdownlist'), 'dropdownlist');
1539
+ this.selectedColumn = this.getColumn(dropDownObj.value);
1540
+ }
1370
1541
  }
1371
1542
  else {
1372
1543
  dropDownObj = getComponent(closest(element, '.e-rule-container').querySelector('.e-filter-input'), 'dropdowntree');
@@ -1441,7 +1612,7 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
1441
1612
  this.prevItemData = args.itemData;
1442
1613
  var fieldElem = closest(args.element, '.e-rule-filter') || closest(args.element, '.e-rule-sub-filter');
1443
1614
  var column = this.fieldMode === 'DropdownTree' ? this.getColumn(args.value[0]) : this.getColumn(args.value);
1444
- if (this.fieldMode === 'DropdownTree' && fieldElem != null) {
1615
+ if (this.fieldMode === 'DropdownTree' && fieldElem !== null) {
1445
1616
  var ddtElem = fieldElem.querySelector('.e-dropdowntree.e-control');
1446
1617
  var ddt = getComponent(ddtElem, 'dropdowntree');
1447
1618
  if (column) {
@@ -1513,7 +1684,7 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
1513
1684
  var filterElem = closest(ddlArgs.element, '.e-rule-filter');
1514
1685
  filterElem = filterElem ? filterElem : closest(ddlArgs.element, '.e-rule-sub-filter');
1515
1686
  var ddlObj = getComponent(ddlArgs.element, 'dropdownlist');
1516
- if (this.fieldMode === 'DropdownTree' && filterElem != null) {
1687
+ if (this.fieldMode === 'DropdownTree' && filterElem !== null) {
1517
1688
  ddlObj = getComponent(ddlArgs.element, 'dropdowntree');
1518
1689
  }
1519
1690
  var element = closest(ddlArgs.element, '.e-group-container');
@@ -1642,7 +1813,7 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
1642
1813
  this.GetRootColumnName(rule.field) === this.GetRootColumnName(this.previousColumn.field))) {
1643
1814
  var subField = this.selectedColumn.columns;
1644
1815
  for (var i = 0; i < subField.length; i++) {
1645
- if (rule.field === subField[i].field || rule.field.indexOf(subField[i].field) > -1) {
1816
+ if (rule.field === subField[i].field) {
1646
1817
  dropDownList.value = subField[i].field;
1647
1818
  this.selectedColumn = subField[i];
1648
1819
  subFieldValue = true;
@@ -1681,7 +1852,7 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
1681
1852
  rule.value = [];
1682
1853
  }
1683
1854
  }
1684
- else if (typeof rule.value === 'object' && rule.value != null) {
1855
+ else if (typeof rule.value === 'object' && rule.value !== null) {
1685
1856
  rule.value = rule.value.length > 0 ? rule.value[0] : rule.type === 'number' ? 0 : '';
1686
1857
  }
1687
1858
  if (ddlArgs.previousItemData) {
@@ -1708,6 +1879,9 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
1708
1879
  if (valElem && this.getColumn(rule.field).template) {
1709
1880
  filterElem = operatorElem.previousElementSibling;
1710
1881
  }
1882
+ if (valElem.children.length == 0) {
1883
+ filterElem = operatorElem.previousElementSibling;
1884
+ }
1711
1885
  this.changeRuleValues(filterElem, rule, tempRule, ddlArgs);
1712
1886
  }
1713
1887
  };
@@ -1738,7 +1912,9 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
1738
1912
  tempRule.type = this.fieldMode === 'DropdownTree' ? this.getColumn(fieldObj.value[0]).type :
1739
1913
  this.getColumn(fieldObj.value).type;
1740
1914
  var itemData = ddlArgs.itemData;
1741
- this.renderValues(operatorElem, itemData, ddlArgs.previousItemData, true, rule, tempRule, ddlArgs.element);
1915
+ if (ddlObj.value !== '') {
1916
+ this.renderValues(operatorElem, itemData, ddlArgs.previousItemData, true, rule, tempRule, ddlArgs.element);
1917
+ }
1742
1918
  }
1743
1919
  else {
1744
1920
  var ruleId = closest(operatorElem, '.e-rule-container').id;
@@ -1752,7 +1928,14 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
1752
1928
  }
1753
1929
  var height = (this.element.className.indexOf('e-device') > -1) ? '250px' : '200px';
1754
1930
  var value = operatorList[0].value;
1755
- value = rule ? (rule.operator !== '' ? rule.operator : value) : value;
1931
+ var ddlIdx = 0;
1932
+ if (!this.autoSelectOperator) {
1933
+ value = '';
1934
+ ddlIdx = -1;
1935
+ }
1936
+ if (this.isImportRules || (this.ruleIndex > -1 || this.groupIndex > -1)) {
1937
+ value = rule ? (rule.operator ? rule.operator : value) : value;
1938
+ }
1756
1939
  var ddlOperator = void 0;
1757
1940
  ddlOperator = {
1758
1941
  dataSource: operatorList,
@@ -1760,7 +1943,7 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
1760
1943
  placeholder: this.l10n.getConstant('SelectOperator'),
1761
1944
  popupHeight: ((operatorList.length > 5) ? height : 'auto'),
1762
1945
  change: this.changeField.bind(this),
1763
- index: 0,
1946
+ index: ddlIdx,
1764
1947
  value: value,
1765
1948
  open: this.popupOpen.bind(this, false)
1766
1949
  };
@@ -1774,7 +1957,12 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
1774
1957
  tempRule.type = this.selectedColumn.type;
1775
1958
  tempRule.operator = rule.operator;
1776
1959
  }
1777
- this.renderValues(operatorElem, this.selectedColumn, ddlArgs.previousItemData, false, rule, tempRule, ddlArgs.element);
1960
+ if (!isNullOrUndefined(value) && value !== '') {
1961
+ this.renderValues(operatorElem, this.selectedColumn, ddlArgs.previousItemData, false, rule, tempRule, ddlArgs.element);
1962
+ }
1963
+ else if (this.autoSelectField && this.autoSelectOperator) {
1964
+ this.renderValues(operatorElem, this.selectedColumn, ddlArgs.previousItemData, false, rule, tempRule, ddlArgs.element);
1965
+ }
1778
1966
  }
1779
1967
  }
1780
1968
  if (!this.isImportRules) {
@@ -2136,14 +2324,14 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
2136
2324
  var columnData = this.getItemData(parentId);
2137
2325
  var selectedValue;
2138
2326
  var isTemplate = (typeof columnData.template === 'string');
2139
- if (this.isImportRules || this.isPublic || isTemplate) {
2327
+ if (this.isImportRules || this.ruleIndex > -1 || this.groupIndex > -1 || this.isPublic || isTemplate) {
2140
2328
  selectedValue = rule.value;
2141
2329
  }
2142
2330
  else {
2143
2331
  selectedValue = this.setDefaultValue(parentId, false, false);
2144
2332
  }
2145
2333
  if ((operator === 'in' || operator === 'notin') && (this.dataColl.length || columnData.values)) {
2146
- selectedVal = this.isImportRules ? rule.value : this.setDefaultValue(parentId, true, false);
2334
+ selectedVal = (this.isImportRules || this.ruleIndex > -1 || this.groupIndex > -1) ? rule.value : this.setDefaultValue(parentId, true, false);
2147
2335
  this.renderMultiSelect(columnData, parentId, idx, selectedVal, columnData.values);
2148
2336
  if (this.displayMode === 'Vertical' || this.element.className.indexOf('e-device') > -1) {
2149
2337
  ruleValElem.style.width = '100%';
@@ -2155,7 +2343,7 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
2155
2343
  }
2156
2344
  else {
2157
2345
  if (operator === 'in' || operator === 'notin') {
2158
- selectedVal = this.isImportRules ? rule.value : this.setDefaultValue(parentId, true, false);
2346
+ selectedVal = (this.isImportRules || this.ruleIndex > -1 || this.groupIndex > -1) ? rule.value : this.setDefaultValue(parentId, true, false);
2159
2347
  selectedValue = selectedVal.join(',');
2160
2348
  }
2161
2349
  var txtBox = void 0;
@@ -2175,9 +2363,9 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
2175
2363
  QueryBuilder.prototype.renderNumberValue = function (parentId, rule, operator, idx, ruleValElem, itemData, length) {
2176
2364
  var columnData = this.getItemData(parentId);
2177
2365
  var isTemplate = (typeof columnData.template === 'string');
2178
- var selectedVal = (this.isImportRules || this.isPublic || isTemplate) ? rule.value : this.setDefaultValue(parentId, false, true);
2366
+ var selectedVal = (this.isImportRules || this.ruleIndex > -1 || this.groupIndex > -1 || this.isPublic || isTemplate) ? rule.value : this.setDefaultValue(parentId, false, true);
2179
2367
  if ((operator === 'in' || operator === 'notin') && (this.dataColl.length || columnData.values)) {
2180
- selectedVal = this.isImportRules ? rule.value : this.setDefaultValue(parentId, true, false);
2368
+ selectedVal = (this.isImportRules || this.ruleIndex > -1 || this.groupIndex > -1) ? rule.value : this.setDefaultValue(parentId, true, false);
2181
2369
  this.renderMultiSelect(columnData, parentId, idx, selectedVal, columnData.values);
2182
2370
  if (this.element.className.indexOf('e-device') > -1 || this.displayMode === 'Vertical') {
2183
2371
  ruleValElem.style.width = '100%';
@@ -2188,7 +2376,7 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
2188
2376
  }
2189
2377
  }
2190
2378
  else if (operator === 'in' || operator === 'notin') {
2191
- selectedVal = this.isImportRules ? rule.value : this.setDefaultValue(parentId, true, false);
2379
+ selectedVal = (this.isImportRules || this.ruleIndex > -1 || this.groupIndex > -1) ? rule.value : this.setDefaultValue(parentId, true, false);
2192
2380
  var selVal = selectedVal.join(',');
2193
2381
  var txtInp = void 0;
2194
2382
  txtInp = {
@@ -2461,8 +2649,8 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
2461
2649
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
2462
2650
  : this.getColumn(filtObj.value);
2463
2651
  this.selectedRule = column;
2652
+ var ddlObj = getComponent(target.querySelector('input'), 'dropdownlist');
2464
2653
  if (isRender) {
2465
- var ddlObj = getComponent(target.querySelector('input'), 'dropdownlist');
2466
2654
  itemData = element.id.indexOf('operator') > -1 ? itemData : this.selectedRule;
2467
2655
  if (itemData.operators) {
2468
2656
  ddlObj.value = null;
@@ -2470,7 +2658,13 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
2470
2658
  ddlObj.dataSource = itemData.operators;
2471
2659
  ddlObj.index = this.getOperatorIndex(ddlObj, rule);
2472
2660
  ddlObj.value = tempRule.operator = ddlObj.dataSource[ddlObj.index].value;
2473
- ddlObj.dataBind();
2661
+ if (!this.autoSelectOperator) {
2662
+ ddlObj.index = -1;
2663
+ tempRule.operator = ddlObj.value = '';
2664
+ }
2665
+ else {
2666
+ ddlObj.dataBind();
2667
+ }
2474
2668
  }
2475
2669
  }
2476
2670
  var operator = tempRule.operator.toString();
@@ -2503,39 +2697,41 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
2503
2697
  this.validateValue(rule, closest(target, '.e-rule-container'));
2504
2698
  this.destroyControls(target);
2505
2699
  }
2506
- if (column) {
2507
- itemData.template = column.template;
2508
- }
2509
- if (itemData.template) {
2510
- addClass([target.nextElementSibling], 'e-template-value');
2511
- itemData.template = column.template;
2512
- isTempRendered = this.setColumnTemplate(itemData, parentId, column.field, itemData.value ||
2513
- operator, target, rule);
2514
- }
2515
- if (isTempRendered) {
2516
- var parentElem = target.parentElement.querySelector('.e-rule-value');
2517
- if (this.element.className.indexOf('e-device') > -1 || this.displayMode === 'Vertical') {
2518
- parentElem.style.width = '100%';
2519
- }
2520
- else {
2521
- parentElem.style.width = '200px';
2522
- }
2523
- }
2524
- else {
2525
- removeClass([target.nextElementSibling], 'e-template-value');
2526
- var inputLen = 1;
2527
- if (tempRule.type === 'boolean') {
2528
- inputLen = this.selectedColumn.values ? this.selectedColumn.values.length : 2;
2700
+ if (this.isImportRules || (ddlObj && ddlObj.value !== '')) {
2701
+ if (column) {
2702
+ itemData.template = column.template;
2703
+ }
2704
+ if (itemData.template) {
2705
+ addClass([target.nextElementSibling], 'e-template-value');
2706
+ itemData.template = column.template;
2707
+ isTempRendered = this.setColumnTemplate(itemData, parentId, column.field, itemData.value ||
2708
+ operator, target, rule);
2709
+ }
2710
+ if (isTempRendered) {
2711
+ var parentElem = target.parentElement.querySelector('.e-rule-value');
2712
+ if (this.element.className.indexOf('e-device') > -1 || this.displayMode === 'Vertical') {
2713
+ parentElem.style.width = '100%';
2714
+ }
2715
+ else {
2716
+ parentElem.style.width = '200px';
2717
+ }
2529
2718
  }
2530
2719
  else {
2531
- inputLen = (operator && operator.toLowerCase().indexOf('between') > -1) ? 2 : 1;
2532
- }
2533
- for (var i = 0; i < inputLen; i++) {
2534
- var valElem = this.createElement('input', { attrs: { type: 'text', id: parentId + '_valuekey' + i } });
2535
- target.nextElementSibling.appendChild(valElem);
2720
+ removeClass([target.nextElementSibling], 'e-template-value');
2721
+ var inputLen = 1;
2722
+ if (tempRule.type === 'boolean') {
2723
+ inputLen = this.selectedColumn.values ? this.selectedColumn.values.length : 2;
2724
+ }
2725
+ else {
2726
+ inputLen = (operator && operator.toLowerCase().indexOf('between') > -1) ? 2 : 1;
2727
+ }
2728
+ for (var i = 0; i < inputLen; i++) {
2729
+ var valElem = this.createElement('input', { attrs: { type: 'text', id: parentId + '_valuekey' + i } });
2730
+ target.nextElementSibling.appendChild(valElem);
2731
+ }
2536
2732
  }
2733
+ this.renderControls(target, itemData, rule, tempRule, isTempRendered);
2537
2734
  }
2538
- this.renderControls(target, itemData, rule, tempRule, isTempRendered);
2539
2735
  }
2540
2736
  else {
2541
2737
  var parentElem = target.parentElement.querySelector('.e-rule-value');
@@ -2969,8 +3165,8 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
2969
3165
  var i;
2970
3166
  var len;
2971
3167
  var tooltip;
2972
- var popupElement;
2973
3168
  _super.prototype.destroy.call(this);
3169
+ var popupElement;
2974
3170
  element = this.element.querySelectorAll('.e-addrulegroup');
2975
3171
  len = element.length;
2976
3172
  for (i = 0; i < len; i++) {
@@ -3056,7 +3252,8 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
3056
3252
  if (grouplen) {
3057
3253
  this.isPublic = true;
3058
3254
  for (var i = 0, len = groups.length; i < len; i++) {
3059
- this.updatedRule = { condition: groups[i].condition, not: groups[i].not };
3255
+ this.updatedRule = { isLocked: groups[i].isLocked, condition: groups[i].condition,
3256
+ not: groups[i].not };
3060
3257
  this.importRules(groups[i], groupElem, false, groups[i].not);
3061
3258
  }
3062
3259
  this.isPublic = false;
@@ -3064,15 +3261,27 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
3064
3261
  else {
3065
3262
  var condition = 'and';
3066
3263
  var not = false;
3264
+ var isLocked = false;
3067
3265
  if (this.updatedRule) {
3068
3266
  condition = this.updatedRule.condition;
3069
3267
  not = this.updatedRule.not;
3268
+ isLocked = this.updatedRule.isLocked;
3070
3269
  }
3071
- if (this.enableNotCondition) {
3072
- rule.rules.push({ 'condition': condition, 'not': not, rules: [] });
3270
+ if (this.groupIndex < 0) {
3271
+ if (this.enableNotCondition) {
3272
+ rule.rules.push({ 'condition': condition, 'not': not, rules: [] });
3273
+ }
3274
+ else {
3275
+ rule.rules.push({ 'condition': condition, rules: [] });
3276
+ }
3073
3277
  }
3074
3278
  else {
3075
- rule.rules.push({ 'condition': condition, rules: [] });
3279
+ if (this.enableNotCondition) {
3280
+ rule.rules.splice(this.groupIndex + 1, 0, { condition: condition, not: not, rules: [], isLocked: isLocked });
3281
+ }
3282
+ else {
3283
+ rule.rules.splice(this.groupIndex + 1, 0, { condition: condition, rules: [], isLocked: isLocked });
3284
+ }
3076
3285
  }
3077
3286
  }
3078
3287
  if (!this.headerTemplate) {
@@ -3255,17 +3464,53 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
3255
3464
  this.refresh();
3256
3465
  break;
3257
3466
  case 'showButtons':
3258
- if (newProp.showButtons.ruleDelete) {
3259
- removeClass(this.element.querySelectorAll('.e-rule-delete'), 'e-button-hide');
3467
+ if (!isNullOrUndefined(newProp.showButtons.lockGroup)) {
3468
+ if (newProp.showButtons.lockGroup) {
3469
+ removeClass(this.element.querySelectorAll('.e-lock-grp-btn'), 'e-button-hide');
3470
+ }
3471
+ else {
3472
+ addClass(this.element.querySelectorAll('.e-lock-grp-btn'), 'e-button-hide');
3473
+ }
3260
3474
  }
3261
- else {
3262
- addClass(this.element.querySelectorAll('.e-rule-delete'), 'e-button-hide');
3475
+ if (!isNullOrUndefined(newProp.showButtons.lockRule)) {
3476
+ if (newProp.showButtons.lockRule) {
3477
+ removeClass(this.element.querySelectorAll('.e-lock-rule-btn'), 'e-button-hide');
3478
+ }
3479
+ else {
3480
+ addClass(this.element.querySelectorAll('.e-lock-rule-btn'), 'e-button-hide');
3481
+ }
3263
3482
  }
3264
- if (newProp.showButtons.groupDelete) {
3265
- removeClass(this.element.querySelectorAll('.e-deletegroup'), 'e-button-hide');
3483
+ if (!isNullOrUndefined(newProp.showButtons.cloneGroup)) {
3484
+ if (newProp.showButtons.cloneGroup) {
3485
+ removeClass(this.element.querySelectorAll('.e-clone-grp-btn'), 'e-button-hide');
3486
+ }
3487
+ else {
3488
+ addClass(this.element.querySelectorAll('.e-clone-grp-btn'), 'e-button-hide');
3489
+ }
3266
3490
  }
3267
- else {
3268
- addClass(this.element.querySelectorAll('.e-deletegroup'), 'e-button-hide');
3491
+ if (!isNullOrUndefined(newProp.showButtons.cloneRule)) {
3492
+ if (newProp.showButtons.cloneRule) {
3493
+ removeClass(this.element.querySelectorAll('.e-clone-rule-btn'), 'e-button-hide');
3494
+ }
3495
+ else {
3496
+ addClass(this.element.querySelectorAll('.e-clone-rule-btn'), 'e-button-hide');
3497
+ }
3498
+ }
3499
+ if (!isNullOrUndefined(newProp.showButtons.ruleDelete)) {
3500
+ if (newProp.showButtons.ruleDelete) {
3501
+ removeClass(this.element.querySelectorAll('.e-rule-delete'), 'e-button-hide');
3502
+ }
3503
+ else {
3504
+ addClass(this.element.querySelectorAll('.e-rule-delete'), 'e-button-hide');
3505
+ }
3506
+ }
3507
+ if (!isNullOrUndefined(newProp.showButtons.groupDelete)) {
3508
+ if (newProp.showButtons.groupDelete) {
3509
+ removeClass(this.element.querySelectorAll('.e-deletegroup'), 'e-button-hide');
3510
+ }
3511
+ else {
3512
+ addClass(this.element.querySelectorAll('.e-deletegroup'), 'e-button-hide');
3513
+ }
3269
3514
  }
3270
3515
  break;
3271
3516
  case 'cssClass':
@@ -3342,8 +3587,11 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
3342
3587
  this.element.id = this.element.id || getUniqueID('ej2-querybuilder');
3343
3588
  this.defaultLocale = {
3344
3589
  StartsWith: 'Starts With',
3590
+ DoesNotStartWith: 'Does Not Start With',
3345
3591
  EndsWith: 'Ends With',
3592
+ DoesNotEndWith: 'Does Not End With',
3346
3593
  Contains: 'Contains',
3594
+ DoesNotContain: 'Does Not Contain',
3347
3595
  NotLike: 'Not Like',
3348
3596
  Like: 'Like',
3349
3597
  Equal: 'Equal',
@@ -3377,7 +3625,13 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
3377
3625
  IsNotNull: 'Is Not Null',
3378
3626
  True: 'true',
3379
3627
  False: 'false',
3380
- AddButton: 'Add Group/Condition'
3628
+ AddButton: 'Add Group/Condition',
3629
+ CloneGroup: 'Clone Group',
3630
+ LockGroup: 'Lock Group',
3631
+ CloneRule: 'Clone Rule',
3632
+ LockRule: 'Lock Rule',
3633
+ UnlockRule: 'Unlock Rule',
3634
+ UnlockGroup: 'Unlock Group'
3381
3635
  };
3382
3636
  this.l10n = new L10n('querybuilder', this.defaultLocale, this.locale);
3383
3637
  this.intl = new Internationalization(this.locale);
@@ -3390,8 +3644,11 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
3390
3644
  this.customOperators = {
3391
3645
  stringOperator: [
3392
3646
  { value: 'startswith', key: this.l10n.getConstant('StartsWith') },
3647
+ { value: 'notstartswith', key: this.l10n.getConstant('DoesNotStartWith') },
3393
3648
  { value: 'endswith', key: this.l10n.getConstant('EndsWith') },
3649
+ { value: 'notendswith', key: this.l10n.getConstant('DoesNotEndWith') },
3394
3650
  { value: 'contains', key: this.l10n.getConstant('Contains') },
3651
+ { value: 'notcontains', key: this.l10n.getConstant('DoesNotContain') },
3395
3652
  { value: 'equal', key: this.l10n.getConstant('Equal') },
3396
3653
  { value: 'notequal', key: this.l10n.getConstant('NotEqual') },
3397
3654
  { value: 'in', key: this.l10n.getConstant('In') },
@@ -3405,7 +3662,9 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
3405
3662
  { value: 'greaterthanorequal', key: this.l10n.getConstant('GreaterThanOrEqual') },
3406
3663
  { value: 'lessthan', key: this.l10n.getConstant('LessThan') },
3407
3664
  { value: 'lessthanorequal', key: this.l10n.getConstant('LessThanOrEqual') },
3408
- { value: 'notequal', key: this.l10n.getConstant('NotEqual') }
3665
+ { value: 'notequal', key: this.l10n.getConstant('NotEqual') },
3666
+ { value: 'between', key: this.l10n.getConstant('Between') },
3667
+ { value: 'notbetween', key: this.l10n.getConstant('NotBetween') }
3409
3668
  ],
3410
3669
  booleanOperator: [
3411
3670
  { value: 'equal', key: this.l10n.getConstant('Equal') },
@@ -3709,6 +3968,10 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
3709
3968
  if (!(rule.rules[0] && rule.rules[0].rules)) {
3710
3969
  this.disableRuleCondition(groupElem, rule);
3711
3970
  }
3971
+ var tooltipElem = this.element.querySelectorAll('.e-tooltip');
3972
+ for (var i_3 = 0; i_3 < tooltipElem.length; i_3++) {
3973
+ getComponent(tooltipElem[i_3], 'tooltip').refresh(tooltipElem[i_3]);
3974
+ }
3712
3975
  if (!this.isImportRules) {
3713
3976
  this.trigger('change', args);
3714
3977
  }
@@ -3726,6 +3989,10 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
3726
3989
  this.setProperties({ rule: rule }, true);
3727
3990
  rule = this.getRuleCollection(this.rule, false);
3728
3991
  this.importRules(this.rule, this.element.querySelector('.e-group-container'), true, this.rule.not, isRoot);
3992
+ if (rule.isLocked) {
3993
+ var lockGrpTarget = this.element.querySelector('.e-group-container').querySelector('.e-lock-grp-btn');
3994
+ this.groupLock(lockGrpTarget);
3995
+ }
3729
3996
  this.isImportRules = false;
3730
3997
  };
3731
3998
  QueryBuilder.prototype.keyBoardHandler = function (e) {
@@ -3821,7 +4088,8 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
3821
4088
  rule.value !== undefined)) || (customObj && customObj.isQuestion)) {
3822
4089
  var condition = rule.condition;
3823
4090
  rule = {
3824
- 'label': rule.label, 'field': rule.field, 'operator': rule.operator, 'type': rule.type, 'value': rule.value
4091
+ 'label': rule.label, 'field': rule.field, 'operator': rule.operator, 'type': rule.type, 'value': rule.value,
4092
+ 'isLocked': rule.isLocked
3825
4093
  };
3826
4094
  if (condition) {
3827
4095
  rule.condition = condition;
@@ -3830,6 +4098,7 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
3830
4098
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
3831
4099
  rule.custom = customObj;
3832
4100
  }
4101
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
3833
4102
  if ((rule.operator === 'in' || rule.operator === 'notin') && rule.value && rule.value.length === 0) {
3834
4103
  rule = {};
3835
4104
  }
@@ -3855,10 +4124,10 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
3855
4124
  }
3856
4125
  else {
3857
4126
  if (this.enableNotCondition) {
3858
- rule = { 'condition': rule.condition, 'rules': rule.rules, 'not': rule.not };
4127
+ rule = { 'condition': rule.condition, 'rules': rule.rules, 'not': rule.not, 'isLocked': rule.isLocked };
3859
4128
  }
3860
4129
  else {
3861
- rule = { 'condition': rule.condition, 'rules': rule.rules };
4130
+ rule = { 'condition': rule.condition, 'rules': rule.rules, 'isLocked': rule.isLocked };
3862
4131
  }
3863
4132
  if (customObj) {
3864
4133
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
@@ -4023,11 +4292,20 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
4023
4292
  var ruleValue;
4024
4293
  var ignoreCase = false;
4025
4294
  var column;
4026
- var ignoreOper = ['notcontains', 'notstartswith', 'notendswith'];
4027
4295
  if (!ruleColl) {
4028
4296
  return pred;
4029
4297
  }
4030
4298
  for (var i = 0, len = ruleColl.length; i < len; i++) {
4299
+ var operator = ruleColl[i].operator;
4300
+ if (operator === 'notstartswith') {
4301
+ operator = 'doesnotstartwith';
4302
+ }
4303
+ else if (operator === 'notendswith') {
4304
+ operator = 'doesnotendwith';
4305
+ }
4306
+ else if (operator === 'notcontains') {
4307
+ operator = 'doesnotcontain';
4308
+ }
4031
4309
  var keys = Object.keys(ruleColl[i]);
4032
4310
  ignoreCase = false;
4033
4311
  if (keys.indexOf('rules') > -1 && ruleColl[i].rules) {
@@ -4046,7 +4324,7 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
4046
4324
  }
4047
4325
  }
4048
4326
  }
4049
- else if (!isNullOrUndefined(ruleColl[i].operator) && !isNullOrUndefined(ruleColl[i].operator.length)) {
4327
+ else if (!isNullOrUndefined(operator) && !isNullOrUndefined(operator.length)) {
4050
4328
  var oper = ruleColl[i].operator.toLowerCase();
4051
4329
  var isDateFilter = false;
4052
4330
  var dateOperColl = ['equal', 'notequal', 'greaterthan', 'greaterthanorequal', 'lessthan', 'lessthanorequal'];
@@ -4077,23 +4355,20 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
4077
4355
  }
4078
4356
  if (i === 0) {
4079
4357
  if (isDateFilter || (oper.indexOf('in') > -1 || oper.indexOf('between') > -1 || oper.indexOf('null') > -1 ||
4080
- oper.indexOf('empty') > -1) && oper.indexOf('contains') < 0) {
4358
+ oper.indexOf('empty') > -1) && (oper.indexOf('contain') < 0)) {
4081
4359
  pred = isDateFilter ? this.datePredicate(ruleColl[i], ruleValue) :
4082
4360
  this.arrayPredicate(ruleColl[i]);
4083
4361
  }
4084
4362
  else {
4085
4363
  var value = ruleValue;
4086
- if (value !== '' && ignoreOper.indexOf(oper) < 0) {
4087
- pred = new Predicate(ruleColl[i].field, ruleColl[i].operator, ruleValue, ignoreCase);
4364
+ if (value !== '') {
4365
+ pred = new Predicate(ruleColl[i].field, operator, ruleValue, ignoreCase);
4088
4366
  }
4089
4367
  }
4090
4368
  }
4091
4369
  else {
4092
- if (ignoreOper.indexOf(oper) > -1) {
4093
- continue;
4094
- }
4095
4370
  if (isDateFilter || (oper.indexOf('in') > -1 || oper.indexOf('between') > -1 ||
4096
- oper.indexOf('null') > -1 || oper.indexOf('empty') > -1) && oper.indexOf('contains') < 0) {
4371
+ oper.indexOf('null') > -1 || oper.indexOf('empty') > -1) && oper.indexOf('contain') < 0) {
4097
4372
  pred = isDateFilter ? this.datePredicate(ruleColl[i], ruleValue, pred, rule.condition) :
4098
4373
  this.arrayPredicate(ruleColl[i], pred, rule.condition);
4099
4374
  }
@@ -4102,19 +4377,19 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
4102
4377
  var value = ruleValue;
4103
4378
  if (pred && value !== '') {
4104
4379
  pred
4105
- = pred.and(ruleColl[i].field, ruleColl[i].operator, ruleValue, ignoreCase);
4380
+ = pred.and(ruleColl[i].field, operator, ruleValue, ignoreCase);
4106
4381
  }
4107
4382
  else if (value !== '') {
4108
- pred = new Predicate(ruleColl[i].field, ruleColl[i].operator, ruleValue, ignoreCase);
4383
+ pred = new Predicate(ruleColl[i].field, operator, ruleValue, ignoreCase);
4109
4384
  }
4110
4385
  }
4111
4386
  else {
4112
4387
  var value = ruleValue;
4113
4388
  if (pred && value !== '') {
4114
- pred = pred.or(ruleColl[i].field, ruleColl[i].operator, ruleValue, ignoreCase);
4389
+ pred = pred.or(ruleColl[i].field, operator, ruleValue, ignoreCase);
4115
4390
  }
4116
4391
  else if (value !== '') {
4117
- pred = new Predicate(ruleColl[i].field, ruleColl[i].operator, ruleValue, ignoreCase);
4392
+ pred = new Predicate(ruleColl[i].field, operator, ruleValue, ignoreCase);
4118
4393
  }
4119
4394
  }
4120
4395
  }
@@ -4394,15 +4669,28 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
4394
4669
  for (var i = 0, len = ruleColl.length; i < len; i++) {
4395
4670
  var keys = Object.keys(ruleColl[i]);
4396
4671
  if (!isNullOrUndefined(ruleColl[i].rules) && keys.indexOf('rules') > -1 && (ruleColl[i].rules.length !== 0)) {
4672
+ if (this.element.querySelectorAll('.e-group-container').length > this.maxGroupCount) {
4673
+ return null;
4674
+ }
4397
4675
  parentElem = this.renderGroup(ruleColl[i], ruleColl[i].condition, parentElem, ruleColl[i].not);
4398
4676
  parentElem = this.importRules(ruleColl[i], parentElem, true);
4399
4677
  }
4400
4678
  else {
4401
4679
  this.renderRule(ruleColl[i], parentElem);
4402
4680
  }
4681
+ if (!isNullOrUndefined(ruleColl[i].rules) && ruleColl[i].isLocked) {
4682
+ var lockGrpTarget = parentElem.querySelector('.e-rule-list').children[i].querySelector('.e-lock-grp-btn');
4683
+ this.groupLock(lockGrpTarget);
4684
+ }
4685
+ if (isNullOrUndefined(ruleColl[i].rules) && ruleColl[i].isLocked) {
4686
+ var lockRuleTarget = parentElem.querySelector('.e-rule-list').children[i].querySelector('.e-lock-rule-btn');
4687
+ this.ruleLock(lockRuleTarget);
4688
+ }
4403
4689
  }
4404
4690
  }
4405
- parentElem = closest(parentElem, '.e-rule-list');
4691
+ if (parentElem) {
4692
+ parentElem = closest(parentElem, '.e-rule-list');
4693
+ }
4406
4694
  if (parentElem) {
4407
4695
  parentElem = closest(parentElem, '.e-group-container');
4408
4696
  }
@@ -4411,7 +4699,20 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
4411
4699
  QueryBuilder.prototype.renderGroup = function (rule, condition, parentElem, not, isRoot) {
4412
4700
  this.addGroupElement(true, parentElem, condition, false, not, isRoot, rule); //Child group
4413
4701
  var element = parentElem.querySelectorAll('.e-group-container');
4414
- return element[element.length - 1];
4702
+ var cloneElem = parentElem.querySelector('.e-rule-list').children;
4703
+ if (this.showButtons.cloneGroup && this.cloneGrpBtnClick && this.isMiddleGroup) {
4704
+ this.isMiddleGroup = false;
4705
+ this.cloneGrpBtnClick = false;
4706
+ return cloneElem[this.groupIndex + 1]; // group added in the middle
4707
+ }
4708
+ else if (this.showButtons.cloneGroup && this.cloneGrpBtnClick && this.isLastGroup) {
4709
+ this.isLastGroup = false;
4710
+ this.cloneGrpBtnClick = false;
4711
+ return cloneElem[cloneElem.length - 1]; // group added in the end
4712
+ }
4713
+ else {
4714
+ return element[element.length - 1];
4715
+ }
4415
4716
  };
4416
4717
  QueryBuilder.prototype.renderRule = function (rule, parentElem) {
4417
4718
  if (parentElem.className.indexOf('e-group-container') > -1) {
@@ -4610,15 +4911,19 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
4610
4911
  valueStr += rule.value ? '("%' + rule.value + '%")' : '(' + rule.value + ')';
4611
4912
  }
4612
4913
  else {
4613
- if (rule.type === 'number' || typeof rule.value === 'boolean' || rule.value === null) {
4914
+ if (rule.type === 'number' || typeof rule.value === 'boolean' ||
4915
+ (rule.value === null && (rule.operator.toString().indexOf('empty') < -1))) {
4614
4916
  valueStr += rule.value;
4615
4917
  }
4918
+ else if (rule.operator.toString().indexOf('empty') > -1) {
4919
+ valueStr += '""';
4920
+ }
4616
4921
  else {
4617
4922
  valueStr += '"' + rule.value + '"';
4618
4923
  }
4619
4924
  }
4620
4925
  }
4621
- if (rule.operator.toString().indexOf('null') > -1 || (rule.operator.toString().indexOf('empty') > -1)) {
4926
+ if (rule.operator.toString().indexOf('null') > -1) {
4622
4927
  if (enableEscape) {
4623
4928
  rule.field = '`' + rule.field + '`';
4624
4929
  }
@@ -4630,6 +4935,13 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
4630
4935
  queryStr += rule.field + ' ' + ruleOpertor;
4631
4936
  }
4632
4937
  else {
4938
+ var custOper = ruleOpertor;
4939
+ if (rule.operator === 'isempty') {
4940
+ custOper = '=';
4941
+ }
4942
+ else if (rule.operator === 'isnotempty') {
4943
+ custOper = '!=';
4944
+ }
4633
4945
  if (enableEscape) {
4634
4946
  rule.field = '`' + rule.field + '`';
4635
4947
  }
@@ -4638,7 +4950,7 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
4638
4950
  rule.field = '"' + rule.field + '"';
4639
4951
  }
4640
4952
  }
4641
- queryStr += rule.field + ' ' + ruleOpertor + ' ' + valueStr;
4953
+ queryStr += rule.field + ' ' + custOper + ' ' + valueStr;
4642
4954
  }
4643
4955
  if (rule.condition && rule.condition !== '') {
4644
4956
  condition = rule.condition;
@@ -4668,7 +4980,7 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
4668
4980
  * Sets the rules from the sql query.
4669
4981
  *
4670
4982
  * @param {string} sqlString - 'sql String' to be passed to set the rule.
4671
- * @param {boolean} sqlLocale - Set `true` if Localization for Sql query.
4983
+ * @param {boolean} sqlLocale - Optional. Set `true` if Localization for Sql query.
4672
4984
  * @returns {void}
4673
4985
  */
4674
4986
  QueryBuilder.prototype.setRulesFromSql = function (sqlString, sqlLocale) {
@@ -4700,15 +5012,163 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
4700
5012
  *
4701
5013
  * @param {RuleModel} rule - 'rule' to be passed to get the sql.
4702
5014
  * @param {boolean} allowEscape - Set `true` if it exclude the escape character.
4703
- * @param {boolean} sqlLocale - Set `true` if Localization for Sql query.
4704
- * @returns {object} - Sql query from rules.
5015
+ * @param {boolean} sqlLocale - Set `true` if Localization for Sql query.
5016
+ * @returns {string} - Sql query from rules.
4705
5017
  */
4706
5018
  QueryBuilder.prototype.getSqlFromRules = function (rule, allowEscape, sqlLocale) {
4707
5019
  if (!rule) {
4708
5020
  rule = this.getValidRules();
4709
5021
  }
4710
5022
  rule = this.getRuleCollection(rule, false);
4711
- return this.getSqlString(this.getValidRules(rule), allowEscape, null, sqlLocale).replace(/"/g, '\'');
5023
+ var sqlString = this.getSqlString(this.getValidRules(rule), allowEscape, null, sqlLocale).replace(/"/g, '\'');
5024
+ return sqlString;
5025
+ };
5026
+ /**
5027
+ * Gets the parameter SQL query from rules.
5028
+ *
5029
+ * @param {RuleModel} rule – Specify the rule to be passed to get the parameter sql string.
5030
+ * @returns {ParameterizedSql} – Parameterized SQL query from rules.
5031
+ */
5032
+ QueryBuilder.prototype.getParameterizedSql = function (rule) {
5033
+ if (!rule) {
5034
+ rule = this.getValidRules();
5035
+ }
5036
+ var obj = { sql: null };
5037
+ this.notify('query-library', { prop: 'getParameterSql', onPropertyChange: false, value: { rule: rule, obj: obj } });
5038
+ return obj['sql'];
5039
+ };
5040
+ /**
5041
+ * Sets the rules from the parameter sql query.
5042
+ *
5043
+ * @param { ParameterizedSql} sqlQuery – Specifies the parameter SQL to be passed to set the rule and load it to the query builder.
5044
+ * @returns {void}
5045
+ */
5046
+ QueryBuilder.prototype.setParameterizedSql = function (sqlQuery) {
5047
+ var obj = { sql: null };
5048
+ this.notify('query-library', { prop: 'convertParamSqlToSql', onPropertyChange: false, value: { sql: sqlQuery, obj: obj } });
5049
+ var sql = obj['sql'];
5050
+ if (sql) {
5051
+ sql = sql.replace(/`/g, '');
5052
+ var ruleModel = this.getRulesFromSql(sql);
5053
+ this.setRules({ condition: ruleModel.condition, not: ruleModel.not, rules: ruleModel.rules });
5054
+ }
5055
+ };
5056
+ /**
5057
+ * Gets the named parameter SQL query from rules.
5058
+ *
5059
+ * @param {RuleModel} rule – Specify the rule to be passed to get the named parameter SQL string.
5060
+ * @returns {ParameterizedNamedSql} – Parameterized Named SQL query from rules.
5061
+ */
5062
+ QueryBuilder.prototype.getParameterizedNamedSql = function (rule) {
5063
+ if (!rule) {
5064
+ rule = this.getValidRules();
5065
+ }
5066
+ var obj = { sql: null };
5067
+ this.notify('query-library', { prop: 'getNamedParameterSql', onPropertyChange: false, value: { rule: rule, obj: obj } });
5068
+ return obj['sql'];
5069
+ };
5070
+ /**
5071
+ * Sets the rules from the named parameter SQL query.
5072
+ *
5073
+ * @param { ParameterizedNamedSql } sqlQuery – Specifies the named parameter SQL to be passed to set the rule and load it to the query builder.
5074
+ * @returns {void}
5075
+ */
5076
+ QueryBuilder.prototype.setParameterizedNamedSql = function (sqlQuery) {
5077
+ var obj = { sql: null };
5078
+ this.notify('query-library', { prop: 'convertNamedParamSqlToSql', onPropertyChange: false, value: { sql: sqlQuery, obj: obj } });
5079
+ var sql = obj['sql'];
5080
+ if (sql) {
5081
+ sql = sql.replace(/`/g, '');
5082
+ var ruleModel = this.getRulesFromSql(sql);
5083
+ this.setRules({ condition: ruleModel.condition, not: ruleModel.not, rules: ruleModel.rules });
5084
+ }
5085
+ };
5086
+ /**
5087
+ * Set the rules from Mongo query.
5088
+ *
5089
+ * @param {string} mongoQuery - 'sql String' to be passed to get the rule.
5090
+ * @param {boolean} mongoLocale - Set `true` if Localization for Mongo query.
5091
+ * @returns {void}
5092
+ */
5093
+ QueryBuilder.prototype.setMongoQuery = function (mongoQuery, mongoLocale) {
5094
+ this.rule = { condition: 'and', not: false, rules: [] };
5095
+ this.notify('query-library', { prop: 'mongoParser', onPropertyChange: false, value: { mongoQuery: JSON.parse(mongoQuery), rule: this.rule, mongoLocale: mongoLocale } });
5096
+ };
5097
+ /**
5098
+ * Gets the Mongo query from rules.
5099
+ *
5100
+ * @param {RuleModel} rule - 'rule' to be passed to get the sql.
5101
+ * @returns {object} - Sql query from rules.
5102
+ */
5103
+ QueryBuilder.prototype.getMongoQuery = function (rule) {
5104
+ if (!rule) {
5105
+ rule = this.getValidRules();
5106
+ }
5107
+ var obj = { mongoQuery: null };
5108
+ this.notify('query-library', { prop: 'getMongoFromRules', onPropertyChange: false, value: { rule: rule, mongoQuery: '', obj: obj } });
5109
+ return obj['mongoQuery'];
5110
+ };
5111
+ /**
5112
+ * Clones the rule based on the rule ID to the specific group.
5113
+ *
5114
+ * @param {string} ruleID - Specifies the ruleID that needs to be cloned.
5115
+ * @param {string} groupID - Specifies the groupID in which the rule to be cloned.
5116
+ * @param {number} index - Specifies the index to insert the cloned rule inside the group.
5117
+ * @returns {void}
5118
+ */
5119
+ QueryBuilder.prototype.cloneRule = function (ruleID, groupID, index) {
5120
+ var getRule = this.getRule(ruleID.replace(this.element.id + '_', ''));
5121
+ groupID = groupID.replace(this.element.id + '_', '');
5122
+ this.ruleIndex = index;
5123
+ this.cloneRuleBtnClick = true;
5124
+ this.showButtons.cloneRule = true;
5125
+ this.addRules([{
5126
+ 'label': getRule.label, 'field': getRule.field, 'type': getRule.type, 'operator': getRule.operator,
5127
+ 'value': getRule.value
5128
+ }], groupID);
5129
+ this.ruleIndex = -1;
5130
+ this.cloneRuleBtnClick = false;
5131
+ this.showButtons.cloneRule = false;
5132
+ };
5133
+ /**
5134
+ * Clones the group based on the group ID to the specific group.
5135
+ *
5136
+ * @param {string} groupID - Specifies the groupID that needs to be cloned.
5137
+ * @param {string} parentGroupID - Specifies the parentGroupID in which the group to be cloned.
5138
+ * @param {number} index - Specifies the index to insert the cloned group inside the parent group.
5139
+ * @returns {void}
5140
+ */
5141
+ QueryBuilder.prototype.cloneGroup = function (groupID, parentGroupID, index) {
5142
+ parentGroupID = parentGroupID.replace(this.element.id + '_', '');
5143
+ var group = this.getGroup(parentGroupID);
5144
+ groupID = groupID.replace(this.element.id + '_', '');
5145
+ this.groupIndex = index;
5146
+ this.cloneGrpBtnClick = true;
5147
+ this.showButtons.cloneGroup = true;
5148
+ this.addGroups([{ 'condition': group.condition, 'not': group.not, 'rules': group.rules }], groupID);
5149
+ this.groupIndex = -1;
5150
+ this.cloneGrpBtnClick = false;
5151
+ this.showButtons.cloneGroup = false;
5152
+ };
5153
+ /**
5154
+ * Locks the rule based on the rule ID.
5155
+ *
5156
+ * @param {string} ruleID - Specifies the ruleID that needs to be locked.
5157
+ * @returns {void}
5158
+ */
5159
+ QueryBuilder.prototype.lockRule = function (ruleID) {
5160
+ var target = document.getElementById(ruleID).querySelectorAll('.e-lock-rule-btn')[0];
5161
+ this.ruleLock(target);
5162
+ };
5163
+ /**
5164
+ * Locks the group based on the group ID
5165
+ *
5166
+ * @param {string} groupID - Specifies the groupID that needs to be locked.
5167
+ * @returns {void}
5168
+ */
5169
+ QueryBuilder.prototype.lockGroup = function (groupID) {
5170
+ var target = document.getElementById(groupID).querySelectorAll('.e-lock-grp-btn')[0];
5171
+ this.groupLock(target);
4712
5172
  };
4713
5173
  QueryBuilder.prototype.sqlParser = function (sqlString, sqlLocale) {
4714
5174
  var st = 0;
@@ -4910,13 +5370,13 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
4910
5370
  for (var i = 0; i < localeOperator.length; i++) {
4911
5371
  if (this.sqlOperators[localeOperator[i]] === operator.toUpperCase()) {
4912
5372
  if (value && value.indexOf('%') === 0 && value[value.length - 1] === '%') {
4913
- return (localeOperator[i] === 'notcontains') ? 'notcontains' : 'contains';
5373
+ return (operator.toUpperCase() === 'NOT LIKE') ? 'notcontains' : 'contains';
4914
5374
  }
4915
5375
  else if (value && value.indexOf('%') !== 0 && value.indexOf('%') === value.length - 1) {
4916
- return (localeOperator[i] === 'notstartswith') ? 'notstartswith' : 'startswith';
5376
+ return (operator.toUpperCase() === 'NOT LIKE') ? 'notstartswith' : 'startswith';
4917
5377
  }
4918
5378
  else if (value && value.indexOf('%') === 0 && value.indexOf('%') !== value.length - 1) {
4919
- return (localeOperator[i] === 'notendswith') ? 'notendswith' : 'endswith';
5379
+ return (operator.toUpperCase() === 'NOT LIKE') ? 'notendswith' : 'endswith';
4920
5380
  }
4921
5381
  return localeOperator[i];
4922
5382
  }
@@ -5101,6 +5561,14 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
5101
5561
  }
5102
5562
  else if (parser[i + 1][0] === 'Operators') {
5103
5563
  rule.operator = this.getOperator(parser[i + 2][1], parser[i + 1][1], sqlLocale);
5564
+ if (rule.operator == "equal" && parser[i + 2][0] === "String" && parser[i + 2][1] === "''") {
5565
+ rule.operator = "isempty";
5566
+
5567
+ }
5568
+ else if (rule.operator == "notequal" && parser[i + 2][0] === "String" && parser[i + 2][1] === "''") {
5569
+ rule.operator = "isnotempty";
5570
+
5571
+ }
5104
5572
  if (parser[i + 2][0] === 'Number') {
5105
5573
  rule.type = 'number';
5106
5574
  rule.value = Number(parser[i + 2][1]);
@@ -5157,34 +5625,329 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
5157
5625
  }
5158
5626
  return rules;
5159
5627
  };
5628
+ /**
5629
+ * Clone the Group
5630
+ *
5631
+ * @param {Element | string} target - 'target' to be passed to clone the group.
5632
+ * @returns {void}
5633
+ */
5634
+ QueryBuilder.prototype.groupClone = function (target) {
5635
+ var groupElem = target.closest('.e-rule-list').closest('.e-group-container');
5636
+ var targetGrpId;
5637
+ var groupId;
5638
+ if (typeof target === 'string') {
5639
+ groupId = this.element.id + '_' + target;
5640
+ target = document.getElementById(groupId);
5641
+ }
5642
+ else {
5643
+ targetGrpId = target.id.replace(this.element.id + '_', '');
5644
+ groupId = groupElem.id.replace(this.element.id + '_', '');
5645
+ }
5646
+ var group = this.getGroup(targetGrpId);
5647
+ this.groupIndex = Array.prototype.indexOf.call(target.closest('.e-rule-list').children, target.closest('.e-group-container'));
5648
+ this.addGroups([{ 'condition': group.condition, 'not': group.not, 'rules': group.rules }], groupId);
5649
+ this.groupIndex = -1;
5650
+ };
5651
+ QueryBuilder.prototype.ruleClone = function (target) {
5652
+ var ruleElem = closest(target, '.e-rule-container');
5653
+ var groupElem = target.closest('.e-rule-list').closest('.e-group-container');
5654
+ var getRule = this.getRule(target);
5655
+ var groupId = groupElem.id.replace(this.element.id + '_', '');
5656
+ var ruleElemColl = groupElem.querySelectorAll('.e-rule-container');
5657
+ for (var i = 0, iLen = ruleElemColl.length; i < iLen; i++) {
5658
+ if (ruleElem.id === ruleElemColl[i].id) {
5659
+ this.ruleIndex = i;
5660
+ }
5661
+ }
5662
+ this.addRules([{ 'label': getRule.label, 'field': getRule.field, 'type': getRule.type, 'operator': getRule.operator,
5663
+ 'value': getRule.value }], groupId);
5664
+ this.ruleIndex = -1;
5665
+ };
5666
+ QueryBuilder.prototype.ruleLock = function (target) {
5667
+ var ruleElem = closest(target, '.e-rule-container');
5668
+ var rule = this.getRule(ruleElem.id.replace(this.element.id + '_', ''));
5669
+ if (ruleElem.classList.contains('e-disable')) {
5670
+ rule.isLocked = false;
5671
+ this.lockItems = this.lockItems.filter(function (lockItem) { return lockItem !== ruleElem.id; });
5672
+ ruleElem.classList.remove('e-disable');
5673
+ this.disableRuleControls(target, ruleElem, false);
5674
+ target.children[0].classList.add('e-unlock');
5675
+ target.children[0].classList.remove('e-lock');
5676
+ target.setAttribute('title', this.l10n.getConstant('LockRule'));
5677
+ }
5678
+ else {
5679
+ rule.isLocked = true;
5680
+ if (this.lockItems.indexOf(ruleElem.id) < 0) {
5681
+ this.lockItems.splice(this.lockItems.length - 1, 0, ruleElem.id);
5682
+ }
5683
+ ruleElem.classList.add('e-disable');
5684
+ this.disableRuleControls(target, ruleElem, true);
5685
+ target.children[0].classList.add('e-lock');
5686
+ target.children[0].classList.remove('e-unlock');
5687
+ target.setAttribute('title', this.l10n.getConstant('UnlockRule'));
5688
+ }
5689
+ };
5690
+ QueryBuilder.prototype.groupLock = function (target) {
5691
+ var groupElem = closest(target, '.e-group-container');
5692
+ var group = this.getGroup(groupElem.id.replace(this.element.id + '_', ''));
5693
+ var isRoot = groupElem.id.indexOf('group0') > -1;
5694
+ if (groupElem.classList.contains('e-disable')) {
5695
+ if (isRoot) {
5696
+ var newGroup = {};
5697
+ newGroup.condition = group.condition;
5698
+ newGroup.not = group.not;
5699
+ newGroup.isLocked = false;
5700
+ this.setProperties({ rule: newGroup }, true);
5701
+ }
5702
+ else {
5703
+ group.isLocked = false;
5704
+ }
5705
+ this.lockItems = this.lockItems.filter(function (lockItem) { return lockItem !== groupElem.id; });
5706
+ groupElem.classList.remove('e-disable');
5707
+ this.disableHeaderControls(target, groupElem, false);
5708
+ target.children[0].classList.add('e-unlock');
5709
+ target.children[0].classList.remove('e-lock');
5710
+ target.setAttribute('title', this.l10n.getConstant('LockGroup'));
5711
+ this.updateLockItems();
5712
+ }
5713
+ else {
5714
+ if (isRoot) {
5715
+ var newGroup = {};
5716
+ newGroup.condition = group.condition;
5717
+ newGroup.not = group.not;
5718
+ newGroup.isLocked = true;
5719
+ this.setProperties({ rule: newGroup }, true);
5720
+ }
5721
+ else {
5722
+ group.isLocked = true;
5723
+ }
5724
+ if (this.lockItems.indexOf(groupElem.id) < 0) {
5725
+ this.lockItems.splice(this.lockItems.length - 1, 0, groupElem.id);
5726
+ }
5727
+ groupElem.classList.add('e-disable');
5728
+ this.disableHeaderControls(target, groupElem, true);
5729
+ target.children[0].classList.add('e-lock');
5730
+ target.children[0].classList.remove('e-unlock');
5731
+ target.setAttribute('title', this.l10n.getConstant('UnlockGroup'));
5732
+ }
5733
+ };
5734
+ QueryBuilder.prototype.updateLockItems = function () {
5735
+ for (var i = 0; i < this.lockItems.length; i++) {
5736
+ var idColl = this.lockItems[i].split('_');
5737
+ if (idColl.length > 2) {
5738
+ var ruleElem = this.element.querySelector('#' + this.lockItems[i]);
5739
+ var target = ruleElem.querySelector('.e-lock-rule-btn');
5740
+ ruleElem = closest(target, '.e-rule-container');
5741
+ if (!ruleElem.classList.contains('e-disable')) {
5742
+ this.ruleLock(target);
5743
+ }
5744
+ }
5745
+ else {
5746
+ var groupElem = this.element.querySelector('#' + this.lockItems[i]);
5747
+ var target = groupElem.querySelector('.e-lock-grp-btn');
5748
+ groupElem = closest(target, '.e-group-container');
5749
+ if (!groupElem.classList.contains('e-disable')) {
5750
+ this.groupLock(target);
5751
+ }
5752
+ }
5753
+ }
5754
+ };
5755
+ QueryBuilder.prototype.disableHeaderControls = function (target, groupElem, isDisabled) {
5756
+ var andElem = groupElem.querySelectorAll('.e-btngroup-and');
5757
+ var orElem = groupElem.querySelectorAll('.e-btngroup-or');
5758
+ var notElem = groupElem.querySelectorAll('.e-qb-toggle');
5759
+ var addElem = groupElem.querySelectorAll('.e-add-btn');
5760
+ var deleteGrpElem = groupElem.querySelectorAll('.e-deletegroup');
5761
+ var lockElem = groupElem.querySelectorAll('.e-lock-grp-btn');
5762
+ var cloneElem = groupElem.querySelectorAll('.e-clone-grp-btn');
5763
+ var groupContElem = groupElem.querySelectorAll('.e-group-container');
5764
+ for (var i = 0; i < andElem.length; i++) {
5765
+ if (isDisabled) {
5766
+ if (groupContElem[i] && groupContElem[i].classList.contains('e-disable')) {
5767
+ groupContElem[i].classList.add('e-disable');
5768
+ }
5769
+ andElem[i].disabled = true;
5770
+ orElem[i].disabled = true;
5771
+ addElem[i].disabled = true;
5772
+ if (notElem[i]) {
5773
+ notElem[i].disabled = true;
5774
+ }
5775
+ if (deleteGrpElem[i]) {
5776
+ deleteGrpElem[i].disabled = true;
5777
+ }
5778
+ if (cloneElem[i]) {
5779
+ cloneElem[i].disabled = true;
5780
+ }
5781
+ andElem[i].parentElement.classList.add('e-disabled');
5782
+ if (lockElem[i] !== target) {
5783
+ lockElem[i].disabled = true;
5784
+ lockElem[i].children[0].classList.remove('e-unlock');
5785
+ lockElem[i].children[0].classList.add('e-lock');
5786
+ }
5787
+ }
5788
+ else {
5789
+ if (groupContElem[i]) {
5790
+ groupContElem[i].classList.remove('e-disable');
5791
+ }
5792
+ andElem[i].disabled = false;
5793
+ orElem[i].disabled = false;
5794
+ addElem[i].disabled = false;
5795
+ lockElem[i].disabled = false;
5796
+ if (notElem[i]) {
5797
+ notElem[i].disabled = false;
5798
+ }
5799
+ if (deleteGrpElem[i]) {
5800
+ deleteGrpElem[i].disabled = false;
5801
+ }
5802
+ if (cloneElem[i]) {
5803
+ cloneElem[i].disabled = false;
5804
+ }
5805
+ andElem[i].parentElement.classList.remove('e-disabled');
5806
+ lockElem[i].children[0].classList.remove('e-lock');
5807
+ lockElem[i].children[0].classList.add('e-unlock');
5808
+ }
5809
+ }
5810
+ this.disableRuleControls(target, groupElem, isDisabled);
5811
+ };
5812
+ QueryBuilder.prototype.disableRuleControls = function (target, groupElem, isDisabled) {
5813
+ var ddlElement = groupElem.querySelectorAll('.e-control.e-dropdownlist');
5814
+ var numericElement = groupElem.querySelectorAll('.e-control.e-numerictextbox');
5815
+ var textElement = groupElem.querySelectorAll('.e-control.e-textbox');
5816
+ var dateElement = groupElem.querySelectorAll('.e-control.e-datepicker');
5817
+ var checkboxElement = groupElem.querySelectorAll('.e-control.e-checkbox');
5818
+ var radioBtnElement = groupElem.querySelectorAll('.e-control.e-radio');
5819
+ var multiSelectElement = groupElem.querySelectorAll('.e-control.e-multiselect');
5820
+ var deleteElem = groupElem.querySelectorAll('.e-rule-delete');
5821
+ var lockElem = groupElem.querySelectorAll('.e-lock-rule');
5822
+ var cloneElem = groupElem.querySelectorAll('.e-clone-rule');
5823
+ var ruleElem = groupElem.querySelectorAll('.e-rule-container');
5824
+ for (var i = 0; i < deleteElem.length; i++) {
5825
+ if (isDisabled) {
5826
+ if (ruleElem[i] && ruleElem[i].classList.contains('e-disable')) {
5827
+ ruleElem[i].classList.add('e-disable');
5828
+ }
5829
+ deleteElem[i].disabled = true;
5830
+ if (cloneElem[i]) {
5831
+ cloneElem[i].disabled = true;
5832
+ }
5833
+ if (lockElem[i] !== target) {
5834
+ lockElem[i].disabled = true;
5835
+ lockElem[i].children[0].classList.remove('e-unlock');
5836
+ lockElem[i].children[0].classList.add('e-lock');
5837
+ }
5838
+ }
5839
+ else {
5840
+ if (ruleElem[i]) {
5841
+ ruleElem[i].classList.remove('e-disable');
5842
+ }
5843
+ if (cloneElem[i]) {
5844
+ cloneElem[i].disabled = false;
5845
+ }
5846
+ deleteElem[i].disabled = false;
5847
+ lockElem[i].disabled = false;
5848
+ lockElem[i].children[0].classList.remove('e-lock');
5849
+ lockElem[i].children[0].classList.add('e-unlock');
5850
+ }
5851
+ }
5852
+ var dropDownObj;
5853
+ var numericObj;
5854
+ var textObj;
5855
+ var dateObj;
5856
+ var checkBoxObj;
5857
+ var radioBtnObj;
5858
+ var multiSelectObj;
5859
+ for (var i = 0; i < ddlElement.length; i++) {
5860
+ dropDownObj = getComponent(ddlElement[i], 'dropdownlist');
5861
+ if (isDisabled) {
5862
+ dropDownObj.enabled = false;
5863
+ }
5864
+ else {
5865
+ dropDownObj.enabled = true;
5866
+ }
5867
+ }
5868
+ for (var i = 0; i < numericElement.length; i++) {
5869
+ numericObj = getComponent(numericElement[i], 'numerictextbox');
5870
+ if (isDisabled) {
5871
+ numericObj.enabled = false;
5872
+ }
5873
+ else {
5874
+ numericObj.enabled = true;
5875
+ }
5876
+ }
5877
+ for (var i = 0; i < textElement.length; i++) {
5878
+ textObj = getComponent(textElement[i], 'textbox');
5879
+ if (isDisabled) {
5880
+ textObj.enabled = false;
5881
+ }
5882
+ else {
5883
+ textObj.enabled = true;
5884
+ }
5885
+ }
5886
+ for (var i = 0; i < dateElement.length; i++) {
5887
+ dateObj = getComponent(dateElement[i], 'datepicker');
5888
+ if (isDisabled) {
5889
+ dateObj.enabled = false;
5890
+ }
5891
+ else {
5892
+ dateObj.enabled = true;
5893
+ }
5894
+ }
5895
+ for (var i = 0; i < checkboxElement.length; i++) {
5896
+ checkBoxObj = getComponent(checkboxElement[i], 'checkbox');
5897
+ if (isDisabled) {
5898
+ checkBoxObj.disabled = true;
5899
+ }
5900
+ else {
5901
+ checkBoxObj.disabled = false;
5902
+ }
5903
+ }
5904
+ for (var i = 0; i < radioBtnElement.length; i++) {
5905
+ radioBtnObj = getComponent(radioBtnElement[i], 'radio');
5906
+ if (isDisabled) {
5907
+ radioBtnObj.disabled = true;
5908
+ }
5909
+ else {
5910
+ radioBtnObj.disabled = false;
5911
+ }
5912
+ }
5913
+ for (var i = 0; i < multiSelectElement.length; i++) {
5914
+ multiSelectObj = getComponent(multiSelectElement[i], 'multiselect');
5915
+ if (isDisabled) {
5916
+ multiSelectObj.enabled = false;
5917
+ }
5918
+ else {
5919
+ multiSelectObj.enabled = true;
5920
+ }
5921
+ }
5922
+ };
5923
+ __decorate([
5924
+ Event()
5925
+ ], QueryBuilder.prototype, "created", void 0);
5926
+ __decorate([
5927
+ Event()
5928
+ ], QueryBuilder.prototype, "actionBegin", void 0);
5929
+ __decorate([
5930
+ Event()
5931
+ ], QueryBuilder.prototype, "beforeChange", void 0);
5932
+ __decorate([
5933
+ Event()
5934
+ ], QueryBuilder.prototype, "change", void 0);
5935
+ __decorate([
5936
+ Event()
5937
+ ], QueryBuilder.prototype, "dataBound", void 0);
5938
+ __decorate([
5939
+ Event()
5940
+ ], QueryBuilder.prototype, "ruleChange", void 0);
5941
+ __decorate([
5942
+ Complex({}, ShowButtons)
5943
+ ], QueryBuilder.prototype, "showButtons", void 0);
5944
+ __decorate([
5945
+ Property(false)
5946
+ ], QueryBuilder.prototype, "summaryView", void 0);
5947
+ __decorate([
5948
+ Property(false)
5949
+ ], QueryBuilder.prototype, "allowValidation", void 0);
5160
5950
  __decorate([
5161
- Event()
5162
- ], QueryBuilder.prototype, "created", void 0);
5163
- __decorate([
5164
- Event()
5165
- ], QueryBuilder.prototype, "actionBegin", void 0);
5166
- __decorate([
5167
- Event()
5168
- ], QueryBuilder.prototype, "beforeChange", void 0);
5169
- __decorate([
5170
- Event()
5171
- ], QueryBuilder.prototype, "change", void 0);
5172
- __decorate([
5173
- Event()
5174
- ], QueryBuilder.prototype, "dataBound", void 0);
5175
- __decorate([
5176
- Event()
5177
- ], QueryBuilder.prototype, "ruleChange", void 0);
5178
- __decorate([
5179
- Property({ ruleDelete: true, groupInsert: true, groupDelete: true })
5180
- ], QueryBuilder.prototype, "showButtons", void 0);
5181
- __decorate([
5182
- Property(false)
5183
- ], QueryBuilder.prototype, "summaryView", void 0);
5184
- __decorate([
5185
- Property(false)
5186
- ], QueryBuilder.prototype, "allowValidation", void 0);
5187
- __decorate([
5188
5951
  Property('Default')
5189
5952
  ], QueryBuilder.prototype, "fieldMode", void 0);
5190
5953
  __decorate([
@@ -5238,6 +6001,15 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
5238
6001
  __decorate([
5239
6002
  Property(false)
5240
6003
  ], QueryBuilder.prototype, "readonly", void 0);
6004
+ __decorate([
6005
+ Property(true)
6006
+ ], QueryBuilder.prototype, "addRuleToNewGroups", void 0);
6007
+ __decorate([
6008
+ Property(false)
6009
+ ], QueryBuilder.prototype, "autoSelectField", void 0);
6010
+ __decorate([
6011
+ Property(true)
6012
+ ], QueryBuilder.prototype, "autoSelectOperator", void 0);
5241
6013
  __decorate([
5242
6014
  Property('')
5243
6015
  ], QueryBuilder.prototype, "separator", void 0);
@@ -5250,6 +6022,694 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
5250
6022
  return QueryBuilder;
5251
6023
  }(Component));
5252
6024
 
6025
+ var QueryLibrary = /** @__PURE__ @class */ (function () {
6026
+ function QueryLibrary(parent) {
6027
+ this.parent = parent;
6028
+ this.addEventListener();
6029
+ }
6030
+ QueryLibrary.prototype.destroy = function () {
6031
+ if (this.parent.isDestroyed) {
6032
+ return;
6033
+ }
6034
+ this.removeEventListener();
6035
+ };
6036
+ QueryLibrary.prototype.addEventListener = function () {
6037
+ if (this.parent.isDestroyed) {
6038
+ return;
6039
+ }
6040
+ this.parent.on('query-library', this.queryLibrary, this);
6041
+ this.parent.on('destroyed', this.destroy, this);
6042
+ };
6043
+ QueryLibrary.prototype.removeEventListener = function () {
6044
+ this.parent.off('query-library', this.queryLibrary);
6045
+ this.parent.off('destroyed', this.destroy);
6046
+ };
6047
+ QueryLibrary.prototype.queryLibrary = function (args) {
6048
+ switch (args.prop) {
6049
+ case 'getMongoFromRules':
6050
+ args.value['obj']['mongoQuery'] = this.getMongoFromRules(args.value['rule'], args.value['mongoQuery']);
6051
+ break;
6052
+ case 'mongoParser':
6053
+ this.mongoParser(args.value['mongoQuery'], args.value['rule'], args.value['mongoLocale']);
6054
+ break;
6055
+ case 'getParameterSql':
6056
+ args.value['obj']['sql'] = this.getParameterSql(args.value['rule']);
6057
+ break;
6058
+ case 'getNamedParameterSql':
6059
+ args.value['obj']['sql'] = this.getNamedParameterSql(args.value['rule']);
6060
+ break;
6061
+ case 'convertParamSqlToSql':
6062
+ args.value['obj']['sql'] = this.convertParamSqlToSql(args.value['sql']);
6063
+ break;
6064
+ case 'convertNamedParamSqlToSql':
6065
+ args.value['obj']['sql'] = this.convertNamedParamSqlToSql(args.value['sql']);
6066
+ break;
6067
+ }
6068
+ };
6069
+ QueryLibrary.prototype.getMongoFromRules = function (rule, mongoQuery) {
6070
+ mongoQuery = '{';
6071
+ if (rule.condition === 'or') {
6072
+ mongoQuery += '"$or":[';
6073
+ mongoQuery = this.convertMongoQuery(rule.rules, mongoQuery) + ']';
6074
+ }
6075
+ else {
6076
+ mongoQuery += '"$and":[';
6077
+ mongoQuery = this.convertMongoQuery(rule.rules, mongoQuery) + ']';
6078
+ }
6079
+ mongoQuery += '}';
6080
+ return mongoQuery;
6081
+ };
6082
+ QueryLibrary.prototype.getOperatorFromMongoOperator = function (operator) {
6083
+ var operatorValue;
6084
+ switch (operator) {
6085
+ case '$ne':
6086
+ operatorValue = 'notequal';
6087
+ break;
6088
+ case '$gt':
6089
+ operatorValue = 'greaterthan';
6090
+ break;
6091
+ case '$gte':
6092
+ operatorValue = 'greaterthanorequal';
6093
+ break;
6094
+ case '$lt':
6095
+ operatorValue = 'lessthan';
6096
+ break;
6097
+ case '$lte':
6098
+ operatorValue = 'lessthanorequal';
6099
+ break;
6100
+ case '$nin':
6101
+ operatorValue = 'notin';
6102
+ break;
6103
+ }
6104
+ return operatorValue;
6105
+ };
6106
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
6107
+ QueryLibrary.prototype.convertMongoQuery = function (rules, mongoQuery) {
6108
+ var _this = this;
6109
+ var i = 0;
6110
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
6111
+ rules.forEach(function (item) {
6112
+ i++;
6113
+ mongoQuery += '{';
6114
+ if (item.rules !== undefined) {
6115
+ if (item.condition === 'or') {
6116
+ mongoQuery += ' "$or":[';
6117
+ mongoQuery = _this.convertMongoQuery(item.rules, mongoQuery) + ']';
6118
+ }
6119
+ else {
6120
+ mongoQuery += ' "$and":[';
6121
+ mongoQuery = _this.convertMongoQuery(item.rules, mongoQuery) + ']';
6122
+ }
6123
+ }
6124
+ var itVal = item.type === 'string' && item.operator !== 'in' && item.operator !== 'notin' && item.value && item.value.trim() !== '' ? item.value.replace(/'/g, '\\') : '';
6125
+ if (item.type === 'string' && (item.operator === 'in' || item.operator === 'notin') && item.value && item.value.length === 1) {
6126
+ itVal = item.value[0].replace(/'/g, '\\');
6127
+ }
6128
+ var field = item.field ? item.field.substring(0) : '';
6129
+ switch (item.operator) {
6130
+ case 'contains':
6131
+ mongoQuery += '"' + field + '":{"$regex":"' + itVal + '"}';
6132
+ break;
6133
+ case 'notcontains':
6134
+ mongoQuery += '"' + field + '":{"$not":{"$regex":"' + item.value + '"}}';
6135
+ break;
6136
+ case 'startswith':
6137
+ mongoQuery += '"' + field + '":{"$regex":"^' + itVal + '"}';
6138
+ break;
6139
+ case 'notstartswith':
6140
+ mongoQuery += '"' + field + '":{"$not":{"$regex":"^' + item.value + '"}}';
6141
+ break;
6142
+ case 'endswith':
6143
+ mongoQuery += '"' + field + '":{"$regex":"' + itVal + '$"}';
6144
+ break;
6145
+ case 'notendswith':
6146
+ mongoQuery += '"' + field + '":{"$not":{"$regex":"' + item.value + '$"}}';
6147
+ break;
6148
+ case 'isnull':
6149
+ mongoQuery += '"' + field + '": null';
6150
+ break;
6151
+ case 'isnotnull':
6152
+ mongoQuery += '"' + field + '":{"$ne": null}';
6153
+ break;
6154
+ case 'isempty':
6155
+ mongoQuery += '"' + field + '": ""';
6156
+ break;
6157
+ case 'isnotempty':
6158
+ mongoQuery += '"' + field + '":{"$ne": ""}';
6159
+ break;
6160
+ case 'equal':
6161
+ if (item.type === 'string') {
6162
+ mongoQuery += '"' + field + '":"' + itVal + '"';
6163
+ }
6164
+ else if (item.type === 'date') {
6165
+ mongoQuery += '"' + field + '":"' + item.value + '"';
6166
+ }
6167
+ else if (item.type === 'boolean') {
6168
+ mongoQuery += '"' + field + '":' + item.value + '';
6169
+ }
6170
+ else {
6171
+ mongoQuery += '"' + field + '":' + item.value + '';
6172
+ }
6173
+ break;
6174
+ case 'notequal':
6175
+ if (item.type === 'string') {
6176
+ mongoQuery += '"' + field + '":{"$ne":"' + itVal + '"}';
6177
+ }
6178
+ else if (item.type === 'date') {
6179
+ mongoQuery += '"' + field + '":{"$ne":"' + item.value + '"}';
6180
+ }
6181
+ else {
6182
+ mongoQuery += '"' + field + '":{"$ne":' + item.value + '}';
6183
+ }
6184
+ break;
6185
+ case 'in':
6186
+ if (item.type === 'string') {
6187
+ if (item.value.length > 1) {
6188
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
6189
+ var s = item.value.map(function (x, j) { return (j < item.value.length ? "\"" + x + "\"" : ''); }).toString();
6190
+ s = s.endsWith(',') ? s.substring(0, s.length - 1) : s;
6191
+ mongoQuery += '"' + field + '": { "$in": [' + s + ']}';
6192
+ }
6193
+ else {
6194
+ mongoQuery += '"' + field + '": { "$in": ["' + itVal + '"]}';
6195
+ }
6196
+ }
6197
+ else if (item.type === 'number') {
6198
+ if (item.value.length > 1) {
6199
+ mongoQuery += '"' + field + '": { "$in": [' + item.value.toString() + ']}';
6200
+ }
6201
+ else {
6202
+ mongoQuery += '"' + field + '": { "$in": [' + item.value + ']}';
6203
+ }
6204
+ }
6205
+ break;
6206
+ case 'notin':
6207
+ if (item.type === 'string') {
6208
+ if (item.value.length > 1) {
6209
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
6210
+ var s = item.value.map(function (x, j) { return (j < item.value.length ? "\"" + x + "\"" : ''); }).toString();
6211
+ s = s.endsWith(',') ? s.substring(0, s.length - 1) : s;
6212
+ mongoQuery += '"' + field + '": { "$nin": [' + s + ']}';
6213
+ }
6214
+ else {
6215
+ mongoQuery += '"' + field + '": { "$nin": ["' + itVal + '"]}';
6216
+ }
6217
+ }
6218
+ else if (item.type === 'number') {
6219
+ if (item.value.length > 1) {
6220
+ mongoQuery += '"' + field + '": { "$nin": [' + item.value.toString() + ']}';
6221
+ }
6222
+ else {
6223
+ mongoQuery += '"' + field + '": { "$nin": [' + item.value + ']}';
6224
+ }
6225
+ }
6226
+ break;
6227
+ case 'greaterthan':
6228
+ if (item.type === 'number') {
6229
+ mongoQuery += '"' + field + '": { "$gt": ' + item.value + '}';
6230
+ }
6231
+ else {
6232
+ mongoQuery += '"' + field + '": { "$gt": "' + item.value + '"}';
6233
+ }
6234
+ break;
6235
+ case 'greaterthanorequal':
6236
+ if (item.type === 'number') {
6237
+ mongoQuery += '"' + field + '": { "$gte": ' + item.value + '}';
6238
+ }
6239
+ else {
6240
+ mongoQuery += '"' + field + '": { "$gte": "' + item.value + '"}';
6241
+ }
6242
+ break;
6243
+ case 'between':
6244
+ if (item.type === 'number') {
6245
+ mongoQuery += '"' + field + '": {"$gte":' + item.value[0] + ', "$lte":' + item.value[1] + '}';
6246
+ }
6247
+ else {
6248
+ mongoQuery += '"' + field + '": {"$gte": "' + item.value[0] + '", "$lte": "' + item.value[1] + '"}';
6249
+ }
6250
+ break;
6251
+ case 'notbetween':
6252
+ if (item.type === 'number') {
6253
+ mongoQuery += '"$or":[{"' + field + '": {"$lt":' + item.value[0] + '}}, {"' + field + '": {"$gt":' + item.value[1] + '}}]';
6254
+ }
6255
+ else {
6256
+ mongoQuery += '"$or":[{"' + field + '": {"$lt": "' + item.value[0] + '"}}, {"' + field + '": {"$gt": "' + item.value[1] + '"}}]';
6257
+ }
6258
+ break;
6259
+ case 'lessthan':
6260
+ if (item.type === 'number') {
6261
+ mongoQuery += '"' + field + '": { "$lt": ' + item.value + '}';
6262
+ }
6263
+ else {
6264
+ mongoQuery += '"' + field + '": { "$lt": "' + item.value + '"}';
6265
+ }
6266
+ break;
6267
+ case 'lessthanorequal':
6268
+ if (item.type === 'number') {
6269
+ mongoQuery += '"' + field + '": { "$lte": ' + item.value + '}';
6270
+ }
6271
+ else {
6272
+ mongoQuery += '"' + field + '": { "$lte": "' + item.value + '"}';
6273
+ }
6274
+ break;
6275
+ }
6276
+ mongoQuery += '}';
6277
+ if (rules.length !== i) {
6278
+ mongoQuery += ',';
6279
+ }
6280
+ });
6281
+ return mongoQuery;
6282
+ };
6283
+ QueryLibrary.prototype.mongoParser = function (mongoQuery, rule, mongoLocale) {
6284
+ var mongoList;
6285
+ if (Object.keys(mongoQuery).indexOf('$and') > -1) {
6286
+ mongoList = mongoQuery['$and'];
6287
+ rule.condition = 'and';
6288
+ }
6289
+ else if (Object.keys(mongoQuery).indexOf('$or') > -1) {
6290
+ mongoList = mongoQuery['$or'];
6291
+ rule.condition = 'or';
6292
+ }
6293
+ rule.rules = [];
6294
+ this.mongoRecursion(mongoList, rule.rules, mongoLocale);
6295
+ };
6296
+ QueryLibrary.prototype.mongoRecursion = function (mongoList, rules, mongoLocale) {
6297
+ var operatorValue;
6298
+ var type;
6299
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
6300
+ var stringValue;
6301
+ var key;
6302
+ var betweenValue;
6303
+ var condition;
6304
+ var value;
6305
+ var subRules;
6306
+ var rule;
6307
+ var keyObj;
6308
+ var ruleValue;
6309
+ for (var i = 0, len = mongoList.length; i < len; i++) {
6310
+ var betweenOperatorArray = [];
6311
+ var inOperatorArray = [];
6312
+ condition = Object.keys(mongoList[i])[0];
6313
+ value = mongoList[i][condition];
6314
+ if (condition === '$and') {
6315
+ if (this.parent.enableNotCondition) {
6316
+ subRules = { condition: condition.replace('$', ''), rules: [], not: false };
6317
+ }
6318
+ else {
6319
+ subRules = { condition: condition.replace('$', ''), rules: [] };
6320
+ }
6321
+ rules.push(subRules);
6322
+ this.mongoRecursion(mongoList[i][condition], rules[rules.length - 1].rules, mongoLocale);
6323
+ }
6324
+ else if (condition === '$or') {
6325
+ var notBetween = void 0;
6326
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any, max-len
6327
+ var innerObject = [];
6328
+ var keys = [];
6329
+ var firstKey = [];
6330
+ var secondKey = [];
6331
+ var innerKeys = [];
6332
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any, max-len
6333
+ var firstValue = [];
6334
+ var secondValue = [];
6335
+ var innerFirstValue = [];
6336
+ var innerSecondValue = [];
6337
+ if (Array.isArray(value) && value.length === 2) {
6338
+ keys = Object.keys(value);
6339
+ innerFirstValue = value[keys[0]];
6340
+ innerSecondValue = value[keys[1]];
6341
+ if (typeof innerFirstValue === 'object') {
6342
+ innerObject = Object.keys(innerFirstValue)[0];
6343
+ innerKeys = Object.keys(innerFirstValue[Object.keys(innerFirstValue)[0]]);
6344
+ firstKey = innerKeys[0];
6345
+ secondKey = Object.keys(innerSecondValue[Object.keys(innerSecondValue)[0]])[0];
6346
+ if (firstKey === '$lt' && secondKey === '$gt') {
6347
+ operatorValue = 'notbetween';
6348
+ // eslint-disable-next-line security/detect-object-injection
6349
+ firstValue = innerFirstValue[innerObject][firstKey];
6350
+ // eslint-disable-next-line security/detect-object-injection
6351
+ secondValue = innerSecondValue[innerObject][secondKey];
6352
+ type = typeof firstValue === 'number' ? 'number' : 'date';
6353
+ ruleValue = [firstValue, secondValue];
6354
+ rule = { field: innerObject, label: innerObject, value: ruleValue, operator: operatorValue, type: type };
6355
+ rules.push(rule);
6356
+ notBetween = true;
6357
+ }
6358
+ }
6359
+ }
6360
+ if (!notBetween) {
6361
+ if (this.parent.enableNotCondition) {
6362
+ subRules = { condition: condition.replace('$', ''), rules: [], not: false };
6363
+ }
6364
+ else {
6365
+ subRules = { condition: condition.replace('$', ''), rules: [] };
6366
+ }
6367
+ rules.push(subRules);
6368
+ this.mongoRecursion(mongoList[i][condition], rules[rules.length - 1].rules, mongoLocale);
6369
+ }
6370
+ }
6371
+ else {
6372
+ value = mongoList[i][condition];
6373
+ if (value === null) { // isnull operator
6374
+ operatorValue = 'isnull';
6375
+ }
6376
+ if (typeof value === 'boolean') { // boolean type values
6377
+ operatorValue = 'equal';
6378
+ type = 'boolean';
6379
+ ruleValue = value;
6380
+ }
6381
+ if (typeof (value) === 'number') {
6382
+ ruleValue = value;
6383
+ type = 'number';
6384
+ operatorValue = 'equal';
6385
+ }
6386
+ else if (typeof (value) === 'object' && value !== null) {
6387
+ keyObj = Object.keys(value);
6388
+ for (var i_1 = 0; i_1 < keyObj.length; i_1++) {
6389
+ key = keyObj[i_1];
6390
+ stringValue = (value)[keyObj[i_1]];
6391
+ if (key === '$ne' && isNullOrUndefined(stringValue)) { // not null operator
6392
+ operatorValue = 'isnotnull';
6393
+ ruleValue = null;
6394
+ }
6395
+ if (key === '$ne' && typeof stringValue === 'boolean') { // not equal operator for boolean
6396
+ operatorValue = 'notequal';
6397
+ ruleValue = stringValue;
6398
+ type = 'boolean';
6399
+ }
6400
+ if (keyObj.length >= 2 && keyObj[i_1]) {
6401
+ if (typeof (stringValue) == 'object') { // between and notbetween operators
6402
+ operatorValue = 'notbetween';
6403
+ condition = Object.keys(stringValue)[0];
6404
+ betweenValue = [Object.keys(stringValue[condition])[0]];
6405
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
6406
+ betweenOperatorArray.push(stringValue[condition][betweenValue]);
6407
+ type = 'number';
6408
+ }
6409
+ else {
6410
+ operatorValue = 'between';
6411
+ betweenOperatorArray.push(stringValue);
6412
+ }
6413
+ if (typeof (stringValue) === 'number') {
6414
+ type = 'number';
6415
+ }
6416
+ }
6417
+ else if (typeof (stringValue) === 'object' && stringValue !== null) { // "in" and "notin" operator
6418
+ if (key === '$not' && Object.keys(stringValue)[0] === '$regex') {
6419
+ if (stringValue['$regex'].indexOf('^') > -1) {
6420
+ operatorValue = 'notstartswith';
6421
+ ruleValue = stringValue['$regex'].replace('^', '');
6422
+ }
6423
+ else if (stringValue['$regex'].indexOf('$') > -1) {
6424
+ operatorValue = 'notendswith';
6425
+ ruleValue = stringValue['$regex'].replace('$', '');
6426
+ }
6427
+ else {
6428
+ operatorValue = 'notcontains';
6429
+ ruleValue = stringValue['$regex'];
6430
+ }
6431
+ }
6432
+ else {
6433
+ operatorValue = key === '$in' ? 'in' : 'notin';
6434
+ inOperatorArray = stringValue;
6435
+ type = typeof (stringValue[0]) === 'number' ? 'number' : 'string';
6436
+ }
6437
+ }
6438
+ else if (typeof (stringValue) === 'number') { // number type values
6439
+ operatorValue = this.getOperatorFromMongoOperator(key);
6440
+ type = 'number';
6441
+ ruleValue = stringValue;
6442
+ }
6443
+ if (typeof (stringValue) === 'string') { // string type values
6444
+ if (key === '$regex') {
6445
+ operatorValue = 'contains';
6446
+ ruleValue = stringValue;
6447
+ type = 'string';
6448
+ }
6449
+ if (key === '$ne') { // not equal
6450
+ if (stringValue !== null && stringValue.length > 0 && isNaN(Date.parse(stringValue))) {
6451
+ operatorValue = 'notequal';
6452
+ ruleValue = stringValue;
6453
+ }
6454
+ else if (isNullOrUndefined(stringValue)) { // is not null operator
6455
+ operatorValue = 'isnotnull';
6456
+ ruleValue = stringValue;
6457
+ }
6458
+ else if (stringValue === '') { // is not empty operator
6459
+ operatorValue = 'isnotempty';
6460
+ ruleValue = stringValue;
6461
+ }
6462
+ type = 'string';
6463
+ }
6464
+ if (stringValue.indexOf('^') > -1) {
6465
+ operatorValue = 'startswith';
6466
+ ruleValue = stringValue.replace('^', '');
6467
+ type = 'string';
6468
+ }
6469
+ if (stringValue.indexOf('$') > -1 && key !== '$not') {
6470
+ operatorValue = 'endswith';
6471
+ ruleValue = stringValue.replace('$', '');
6472
+ type = 'string';
6473
+ }
6474
+ if (!isNaN(Date.parse(stringValue))) { // Date type operators
6475
+ operatorValue = operatorValue || this.getOperatorFromMongoOperator(key);
6476
+ type = 'date';
6477
+ ruleValue = stringValue;
6478
+ }
6479
+ }
6480
+ }
6481
+ }
6482
+ else if (value && typeof (value) === 'string' && !isNaN(Date.parse(value))) {
6483
+ operatorValue = 'equal';
6484
+ ruleValue = value;
6485
+ type = 'date';
6486
+ }
6487
+ else if (typeof (value) === 'string' && value !== '' && value !== 'true' && value !== 'false') {
6488
+ operatorValue = 'equal';
6489
+ ruleValue = value;
6490
+ type = 'string';
6491
+ }
6492
+ else if (typeof (value) === 'string' && value === '') {
6493
+ operatorValue = 'isempty';
6494
+ ruleValue = value;
6495
+ type = 'string';
6496
+ }
6497
+ if (betweenOperatorArray && betweenOperatorArray.length > 1) { // between opertor value
6498
+ rule = { field: condition, label: condition, value: betweenOperatorArray, operator: operatorValue, type: type };
6499
+ }
6500
+ else if (inOperatorArray && inOperatorArray.length > 1) { // in operator value
6501
+ rule = { field: condition, label: condition, value: inOperatorArray, operator: operatorValue, type: type };
6502
+ }
6503
+ else {
6504
+ rule = { field: condition, label: condition, value: ruleValue, operator: operatorValue, type: type };
6505
+ }
6506
+ rules.push(rule);
6507
+ operatorValue = '';
6508
+ }
6509
+ }
6510
+ };
6511
+ QueryLibrary.prototype.convertParamSqlToSql = function (sql) {
6512
+ var paramSql = sql.sql;
6513
+ var paramValues = sql.params;
6514
+ var parts = paramSql.split('?');
6515
+ var normalSql = parts[0];
6516
+ for (var i = 0; i < paramValues.length; i++) {
6517
+ normalSql += (typeof (paramValues[i]) === 'string' ? "'" + paramValues[i] + "'" + parts[i + 1] : paramValues[i] + parts[i + 1]);
6518
+ }
6519
+ if (normalSql.length >= 2 && normalSql[0] === '(' && normalSql[normalSql.length - 1] === ')') {
6520
+ normalSql = normalSql.slice(1, -1);
6521
+ }
6522
+ normalSql = normalSql.replace(/!= ''(?! =)/g, 'IS NOT EMPTY').replace(/= ''/g, 'IS EMPTY');
6523
+ return normalSql;
6524
+ };
6525
+ QueryLibrary.prototype.convertNamedParamSqlToSql = function (sql) {
6526
+ var namedParamSql = sql.sql;
6527
+ var params = sql.params;
6528
+ var normalSql = namedParamSql;
6529
+ Object.keys(params).forEach(function (paramName) {
6530
+ var paramValue = params[paramName];
6531
+ paramName = ':' + paramName;
6532
+ normalSql = normalSql.replace(paramName, typeof (paramValue) === 'string' ? "'" + paramValue + "'" : String(paramValue));
6533
+ });
6534
+ if (normalSql.length >= 2 && normalSql[0] === '(' && normalSql[normalSql.length - 1] === ')') {
6535
+ normalSql = normalSql.slice(1, -1);
6536
+ }
6537
+ normalSql = normalSql.replace(/!= ''(?! =)/g, 'IS NOT EMPTY').replace(/= ''/g, 'IS EMPTY');
6538
+ return normalSql;
6539
+ };
6540
+ QueryLibrary.prototype.getParameterSql = function (qbrule) {
6541
+ var qbRule = extend({}, qbrule, null, true);
6542
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
6543
+ var value = this.updateRuleValue(qbRule, false);
6544
+ return this.getParameterSQLVal(this.parent.getSqlFromRules(qbRule), value['ruleVal']);
6545
+ };
6546
+ QueryLibrary.prototype.getNamedParameterSql = function (qbrule) {
6547
+ var qbRule = extend({}, qbrule, null, true);
6548
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
6549
+ var value = this.updateRuleValue(qbRule, true);
6550
+ return this.getNamedParameterSQLVal(this.parent.getSqlFromRules(qbRule), value['namedRuleVal']);
6551
+ };
6552
+ QueryLibrary.prototype.getParameterSQLVal = function (content, ruleValue) {
6553
+ var replacedString = content.replace(/[%']/g, '');
6554
+ return { sql: '(' + replacedString + ')', params: ruleValue };
6555
+ };
6556
+ QueryLibrary.prototype.getNamedParameterSQLVal = function (content, ruleValue) {
6557
+ var replacedString = content.replace(/[%']/g, '');
6558
+ return { sql: '(' + replacedString + ')', params: ruleValue };
6559
+ };
6560
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
6561
+ QueryLibrary.prototype.updateRuleValue = function (rule, isNamedParameter) {
6562
+ var ruleVal = [];
6563
+ var namedRuleVal = {};
6564
+ var namedParameters = [];
6565
+ return this.updateValue(rule.rules, isNamedParameter, ruleVal, namedRuleVal, namedParameters);
6566
+ };
6567
+ QueryLibrary.prototype.updateValue = function (rules, isNamedParameter, ruleVal,
6568
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
6569
+ namedRuleVal, namedParameters) {
6570
+ if (isNullOrUndefined(rules)) {
6571
+ return { ruleVal: ruleVal, namedRuleVal: namedRuleVal };
6572
+ }
6573
+ for (var i = 0; i < rules.length; i++) {
6574
+ if (rules[i].rules) {
6575
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
6576
+ var value = this.updateValue(rules[i].rules, isNamedParameter, ruleVal, namedRuleVal, namedParameters);
6577
+ ruleVal = value['ruleVal'];
6578
+ namedRuleVal = value['namedRuleVal'];
6579
+ }
6580
+ else {
6581
+ var namedField = void 0;
6582
+ if (rules[i].value instanceof Array) {
6583
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
6584
+ for (var j = 0; j < (rules[i].value).length; j++) {
6585
+ if (isNamedParameter) {
6586
+ namedField = this.getNamedParameter(rules[i].field, namedParameters);
6587
+ }
6588
+ if (!isNullOrUndefined(rules[i].value[j])) {
6589
+ if (rules[i].type === 'string' || rules[i].type === 'date') {
6590
+ if (isNamedParameter) {
6591
+ namedRuleVal[namedField] = rules[i].value[j];
6592
+ }
6593
+ else {
6594
+ ruleVal.push(rules[i].value[j]);
6595
+ }
6596
+ }
6597
+ else {
6598
+ if (isNamedParameter) {
6599
+ namedRuleVal[namedField] = rules[i].value[j];
6600
+ }
6601
+ else {
6602
+ ruleVal.push(rules[i].value[j]);
6603
+ }
6604
+ }
6605
+ }
6606
+ if (isNamedParameter) {
6607
+ rules[i].value[j] = ':' + namedField;
6608
+ }
6609
+ else {
6610
+ rules[i].value[j] = '?';
6611
+ }
6612
+ }
6613
+ }
6614
+ else {
6615
+ if (isNamedParameter) {
6616
+ namedField = this.getNamedParameter(rules[i].field, namedParameters);
6617
+ }
6618
+ if (rules[i].operator.indexOf('null') < 1) {
6619
+ if (rules[i].type !== 'string' || (rules[i].type === 'string' && (rules[i].value !== '' || rules[i].value === 0))) {
6620
+ if (rules[i].type === 'string' || rules[i].type === 'date') {
6621
+ if (rules[i].operator.indexOf('empty') < 1) {
6622
+ var value = rules[i].value.toString();
6623
+ switch (rules[i].operator) {
6624
+ case 'startswith':
6625
+ case 'notstartswith':
6626
+ value = value + '%';
6627
+ break;
6628
+ case 'endswith':
6629
+ case 'notendswith':
6630
+ value = '%' + value;
6631
+ break;
6632
+ case 'contains':
6633
+ case 'notcontains':
6634
+ value = '%' + value + '%';
6635
+ break;
6636
+ }
6637
+ if (isNamedParameter) {
6638
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
6639
+ namedRuleVal[namedField] = value;
6640
+ }
6641
+ else {
6642
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
6643
+ ruleVal.push(value);
6644
+ }
6645
+ }
6646
+ else {
6647
+ if (isNamedParameter) {
6648
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
6649
+ namedRuleVal[namedField] = '';
6650
+ }
6651
+ else {
6652
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
6653
+ ruleVal.push('');
6654
+ }
6655
+ if (rules[i].operator === 'isempty') {
6656
+ rules[i].operator = 'equal';
6657
+ }
6658
+ else {
6659
+ rules[i].operator = 'notequal';
6660
+ }
6661
+ }
6662
+ }
6663
+ else {
6664
+ if (!isNullOrUndefined(rules[i].value)) {
6665
+ if (isNamedParameter) {
6666
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
6667
+ namedRuleVal[namedField] = rules[i].value;
6668
+ }
6669
+ else {
6670
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
6671
+ ruleVal.push(rules[i].value);
6672
+ }
6673
+ }
6674
+ }
6675
+ if (isNamedParameter) {
6676
+ rules[i].value = ':' + namedField;
6677
+ }
6678
+ else {
6679
+ rules[i].value = '?';
6680
+ }
6681
+ }
6682
+ }
6683
+ }
6684
+ }
6685
+ }
6686
+ return { ruleVal: ruleVal, namedRuleVal: namedRuleVal };
6687
+ };
6688
+ QueryLibrary.prototype.getNamedParameter = function (field, namedParameters) {
6689
+ var newField = null;
6690
+ if (namedParameters.length > 0) {
6691
+ for (var i = namedParameters.length - 1; i >= 0; i--) {
6692
+ var currField = namedParameters[i];
6693
+ if (currField.indexOf(field) > -1) {
6694
+ var idx = parseInt(currField.split('_')[1], 10) + 1;
6695
+ newField = field + '_' + idx;
6696
+ namedParameters.push(newField);
6697
+ break;
6698
+ }
6699
+ }
6700
+ }
6701
+ if (!newField) {
6702
+ newField = field + '_1';
6703
+ namedParameters.push(newField);
6704
+ }
6705
+ return newField;
6706
+ };
6707
+ QueryLibrary.prototype.getModuleName = function () {
6708
+ return 'query-library';
6709
+ };
6710
+ return QueryLibrary;
6711
+ }());
6712
+
5253
6713
  /**
5254
6714
  * QueryBuilder modules
5255
6715
  */
@@ -5258,5 +6718,5 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
5258
6718
  * QueryBuilder all modules
5259
6719
  */
5260
6720
 
5261
- export { Columns, Rule, Value, ShowButtons, QueryBuilder };
6721
+ export { Columns, Rule, Value, ShowButtons, QueryBuilder, QueryLibrary };
5262
6722
  //# sourceMappingURL=ej2-querybuilder.es5.js.map