@syncfusion/ej2-querybuilder 26.2.11 → 27.1.48

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 (132) hide show
  1. package/README.md +1 -1
  2. package/dist/ej2-querybuilder.min.js +2 -2
  3. package/dist/ej2-querybuilder.umd.min.js +2 -2
  4. package/dist/ej2-querybuilder.umd.min.js.map +1 -1
  5. package/dist/es6/ej2-querybuilder.es2015.js +278 -259
  6. package/dist/es6/ej2-querybuilder.es2015.js.map +1 -1
  7. package/dist/es6/ej2-querybuilder.es5.js +279 -259
  8. package/dist/es6/ej2-querybuilder.es5.js.map +1 -1
  9. package/dist/global/ej2-querybuilder.min.js +2 -2
  10. package/dist/global/ej2-querybuilder.min.js.map +1 -1
  11. package/dist/global/index.d.ts +1 -1
  12. package/package.json +13 -12
  13. package/src/query-builder/query-builder.d.ts +0 -1
  14. package/src/query-builder/query-builder.js +278 -258
  15. package/styles/bootstrap-dark-lite.css +728 -0
  16. package/styles/bootstrap-dark-lite.scss +15 -0
  17. package/styles/bootstrap-dark.css +114 -170
  18. package/styles/bootstrap-dark.scss +1 -0
  19. package/styles/bootstrap-lite.css +713 -0
  20. package/styles/bootstrap-lite.scss +15 -0
  21. package/styles/bootstrap.css +106 -162
  22. package/styles/bootstrap.scss +1 -0
  23. package/styles/bootstrap4-lite.css +781 -0
  24. package/styles/bootstrap4-lite.scss +15 -0
  25. package/styles/bootstrap4.css +120 -231
  26. package/styles/bootstrap4.scss +1 -0
  27. package/styles/bootstrap5-dark-lite.css +764 -0
  28. package/styles/bootstrap5-dark-lite.scss +15 -0
  29. package/styles/bootstrap5-dark.css +109 -165
  30. package/styles/bootstrap5-dark.scss +1 -0
  31. package/styles/bootstrap5-lite.css +764 -0
  32. package/styles/bootstrap5-lite.scss +15 -0
  33. package/styles/bootstrap5.3-lite.css +775 -0
  34. package/styles/bootstrap5.3-lite.scss +15 -0
  35. package/styles/bootstrap5.3.css +959 -0
  36. package/styles/bootstrap5.3.scss +16 -0
  37. package/styles/bootstrap5.css +109 -165
  38. package/styles/bootstrap5.scss +1 -0
  39. package/styles/fabric-dark-lite.css +690 -0
  40. package/styles/fabric-dark-lite.scss +15 -0
  41. package/styles/fabric-dark.css +108 -156
  42. package/styles/fabric-dark.scss +1 -0
  43. package/styles/fabric-lite.css +679 -0
  44. package/styles/fabric-lite.scss +15 -0
  45. package/styles/fabric.css +102 -143
  46. package/styles/fabric.scss +1 -0
  47. package/styles/fluent-dark-lite.css +759 -0
  48. package/styles/fluent-dark-lite.scss +15 -0
  49. package/styles/fluent-dark.css +111 -159
  50. package/styles/fluent-dark.scss +1 -0
  51. package/styles/fluent-lite.css +759 -0
  52. package/styles/fluent-lite.scss +15 -0
  53. package/styles/fluent.css +111 -159
  54. package/styles/fluent.scss +1 -0
  55. package/styles/fluent2-lite.css +771 -0
  56. package/styles/fluent2-lite.scss +15 -0
  57. package/styles/fluent2.css +113 -150
  58. package/styles/fluent2.scss +1 -0
  59. package/styles/highcontrast-light-lite.css +773 -0
  60. package/styles/highcontrast-light-lite.scss +15 -0
  61. package/styles/highcontrast-light.css +101 -135
  62. package/styles/highcontrast-light.scss +1 -0
  63. package/styles/highcontrast-lite.css +801 -0
  64. package/styles/highcontrast-lite.scss +15 -0
  65. package/styles/highcontrast.css +122 -156
  66. package/styles/highcontrast.scss +1 -0
  67. package/styles/material-dark-lite.css +725 -0
  68. package/styles/material-dark-lite.scss +15 -0
  69. package/styles/material-dark.css +105 -131
  70. package/styles/material-dark.scss +1 -0
  71. package/styles/material-lite.css +731 -0
  72. package/styles/material-lite.scss +15 -0
  73. package/styles/material.css +105 -152
  74. package/styles/material.scss +1 -0
  75. package/styles/material3-dark-lite.css +738 -0
  76. package/styles/material3-dark-lite.scss +15 -0
  77. package/styles/material3-dark.css +101 -157
  78. package/styles/material3-dark.scss +1 -0
  79. package/styles/material3-lite.css +740 -0
  80. package/styles/material3-lite.scss +15 -0
  81. package/styles/material3.css +101 -157
  82. package/styles/material3.scss +1 -0
  83. package/styles/query-builder/_bigger.scss +208 -0
  84. package/styles/query-builder/_bootstrap5.3-definition.scss +1 -1
  85. package/styles/query-builder/_layout.scss +5 -210
  86. package/styles/query-builder/_theme.scss +10 -3
  87. package/styles/query-builder/bootstrap-dark.css +114 -170
  88. package/styles/query-builder/bootstrap-dark.scss +1 -0
  89. package/styles/query-builder/bootstrap.css +106 -162
  90. package/styles/query-builder/bootstrap.scss +1 -0
  91. package/styles/query-builder/bootstrap4.css +120 -231
  92. package/styles/query-builder/bootstrap4.scss +1 -0
  93. package/styles/query-builder/bootstrap5-dark.css +109 -165
  94. package/styles/query-builder/bootstrap5-dark.scss +1 -0
  95. package/styles/query-builder/bootstrap5.3.css +959 -0
  96. package/styles/query-builder/bootstrap5.3.scss +16 -0
  97. package/styles/query-builder/bootstrap5.css +109 -165
  98. package/styles/query-builder/bootstrap5.scss +1 -0
  99. package/styles/query-builder/fabric-dark.css +108 -156
  100. package/styles/query-builder/fabric-dark.scss +1 -0
  101. package/styles/query-builder/fabric.css +102 -143
  102. package/styles/query-builder/fabric.scss +1 -0
  103. package/styles/query-builder/fluent-dark.css +111 -159
  104. package/styles/query-builder/fluent-dark.scss +1 -0
  105. package/styles/query-builder/fluent.css +111 -159
  106. package/styles/query-builder/fluent.scss +1 -0
  107. package/styles/query-builder/fluent2.css +113 -150
  108. package/styles/query-builder/fluent2.scss +1 -0
  109. package/styles/query-builder/highcontrast-light.css +101 -135
  110. package/styles/query-builder/highcontrast-light.scss +1 -0
  111. package/styles/query-builder/highcontrast.css +122 -156
  112. package/styles/query-builder/highcontrast.scss +1 -0
  113. package/styles/query-builder/material-dark.css +105 -131
  114. package/styles/query-builder/material-dark.scss +1 -0
  115. package/styles/query-builder/material.css +105 -152
  116. package/styles/query-builder/material.scss +1 -0
  117. package/styles/query-builder/material3-dark.css +101 -157
  118. package/styles/query-builder/material3-dark.scss +1 -0
  119. package/styles/query-builder/material3.css +101 -157
  120. package/styles/query-builder/material3.scss +1 -0
  121. package/styles/query-builder/tailwind-dark.css +100 -137
  122. package/styles/query-builder/tailwind-dark.scss +1 -0
  123. package/styles/query-builder/tailwind.css +100 -137
  124. package/styles/query-builder/tailwind.scss +1 -0
  125. package/styles/tailwind-dark-lite.css +726 -0
  126. package/styles/tailwind-dark-lite.scss +15 -0
  127. package/styles/tailwind-dark.css +100 -137
  128. package/styles/tailwind-dark.scss +1 -0
  129. package/styles/tailwind-lite.css +726 -0
  130. package/styles/tailwind-lite.scss +15 -0
  131. package/styles/tailwind.css +100 -137
  132. package/styles/tailwind.scss +1 -0
@@ -1 +1 @@
1
- {"version":3,"file":"ej2-querybuilder.min.js","sources":["../../src/query-builder/query-builder.js","../../src/query-builder/query-library.js","../../src/global.js"],"sourcesContent":["var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n/**\n * Query Builder Source\n */\n/* eslint-disable max-len */\nimport { Component, NotifyPropertyChanges, getComponent, Browser, compile, append, Draggable, remove } from '@syncfusion/ej2-base';\nimport { Property, ChildProperty, Complex, L10n, closest, extend, isNullOrUndefined, Collection, cldrData } from '@syncfusion/ej2-base';\nimport { getInstance, addClass, removeClass, rippleEffect, detach, classList } from '@syncfusion/ej2-base';\nimport { Internationalization, getUniqueID, select } from '@syncfusion/ej2-base';\nimport { Button, CheckBox, RadioButton } from '@syncfusion/ej2-buttons';\nimport { DropDownList, CheckBoxSelection, DropDownTree } from '@syncfusion/ej2-dropdowns';\nimport { MultiSelect } from '@syncfusion/ej2-dropdowns';\nimport { Event, EventHandler, getValue, Animation } from '@syncfusion/ej2-base';\nimport { Query, Predicate, DataManager, Deferred } from '@syncfusion/ej2-data';\nimport { TextBox, NumericTextBox } from '@syncfusion/ej2-inputs';\nimport { DatePicker } from '@syncfusion/ej2-calendars';\nimport { DropDownButton } from '@syncfusion/ej2-splitbuttons';\nimport { Tooltip, createSpinner, showSpinner, hideSpinner } from '@syncfusion/ej2-popups';\nimport { compile as templateCompiler, getNumericObject } from '@syncfusion/ej2-base';\n/**\n * Defines the Columns of Query Builder\n */\nvar Columns = /** @class */ (function (_super) {\n __extends(Columns, _super);\n function Columns() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], Columns.prototype, \"field\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"label\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"type\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"values\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"operators\", void 0);\n __decorate([\n Property()\n ], Columns.prototype, \"ruleTemplate\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"template\", void 0);\n __decorate([\n Property({ isRequired: true, min: 0, max: Number.MAX_VALUE })\n ], Columns.prototype, \"validation\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"format\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"step\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"value\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"category\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"columns\", void 0);\n return Columns;\n}(ChildProperty));\nexport { Columns };\n/**\n * Defines the rule of Query Builder\n */\nvar Rule = /** @class */ (function (_super) {\n __extends(Rule, _super);\n function Rule() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], Rule.prototype, \"condition\", void 0);\n __decorate([\n Collection([], Rule)\n ], Rule.prototype, \"rules\", void 0);\n __decorate([\n Property(null)\n ], Rule.prototype, \"field\", void 0);\n __decorate([\n Property(null)\n ], Rule.prototype, \"label\", void 0);\n __decorate([\n Property(null)\n ], Rule.prototype, \"type\", void 0);\n __decorate([\n Property(null)\n ], Rule.prototype, \"operator\", void 0);\n __decorate([\n Property(null)\n ], Rule.prototype, \"value\", void 0);\n __decorate([\n Property(false)\n ], Rule.prototype, \"not\", void 0);\n __decorate([\n Property(null)\n ], Rule.prototype, \"isLocked\", void 0);\n return Rule;\n}(ChildProperty));\nexport { Rule };\n/**\n * Defines the property for value.\n */\nvar Value = /** @class */ (function (_super) {\n __extends(Value, _super);\n function Value() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], Value.prototype, \"numericTextBoxModel\", void 0);\n __decorate([\n Property(null)\n ], Value.prototype, \"multiSelectModel\", void 0);\n __decorate([\n Property(null)\n ], Value.prototype, \"datePickerModel\", void 0);\n __decorate([\n Property(null)\n ], Value.prototype, \"textBoxModel\", void 0);\n __decorate([\n Property(null)\n ], Value.prototype, \"radioButtonModel\", void 0);\n return Value;\n}(ChildProperty));\nexport { Value };\n/**\n * Defines the ruleDelete, groupInsert, and groupDelete options of Query Builder.\n */\nvar ShowButtons = /** @class */ (function (_super) {\n __extends(ShowButtons, _super);\n function ShowButtons() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], ShowButtons.prototype, \"cloneRule\", void 0);\n __decorate([\n Property(false)\n ], ShowButtons.prototype, \"cloneGroup\", void 0);\n __decorate([\n Property(false)\n ], ShowButtons.prototype, \"lockRule\", void 0);\n __decorate([\n Property(false)\n ], ShowButtons.prototype, \"lockGroup\", void 0);\n __decorate([\n Property(true)\n ], ShowButtons.prototype, \"ruleDelete\", void 0);\n __decorate([\n Property(true)\n ], ShowButtons.prototype, \"groupInsert\", void 0);\n __decorate([\n Property(true)\n ], ShowButtons.prototype, \"groupDelete\", void 0);\n return ShowButtons;\n}(ChildProperty));\nexport { ShowButtons };\nvar QueryBuilder = /** @class */ (function (_super) {\n __extends(QueryBuilder, _super);\n function QueryBuilder(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.isReadonly = true;\n _this.fields = { text: 'label', value: 'field' };\n _this.updatedRule = { not: false, condition: 'and', isLocked: false };\n _this.isLocale = false;\n _this.isRefreshed = false;\n _this.isNotified = false;\n _this.isAddSuccess = false;\n _this.isNotValueChange = false;\n _this.isFieldChange = false;\n _this.isFieldClose = false;\n _this.isDestroy = false;\n _this.isGetNestedData = false;\n _this.isCustomOprCols = [];\n _this.groupCounter = 0;\n _this.lockItems = [];\n _this.groupIndex = -1;\n _this.ruleIndex = -1;\n _this.isLastGroup = false;\n _this.cloneGrpBtnClick = false;\n _this.isMiddleGroup = false;\n _this.cloneRuleBtnClick = false;\n _this.isValueEmpty = false;\n _this.dragStopHandler = function (e) {\n if (_this.isDragEventPrevent) {\n return;\n }\n var targetGroup = closest(e.target, '.e-rule-container');\n if (isNullOrUndefined(targetGroup) && e.target.parentElement &&\n e.target.parentElement.classList.contains('e-btn-group') && _this.enableSeparateConnector) {\n targetGroup = closest(e.target.parentElement.previousElementSibling, '.e-rule-container');\n }\n var isPreventelem = closest(e.helper, '.e-notallowedcur');\n var prevRule;\n if (!isPreventelem) {\n var targetGrp = closest(e.target, '.e-group-container');\n var dropEventArgs = { cancel: false, dropRuleID: targetGroup !== null ? targetGroup.id\n : targetGrp !== null ? targetGrp.id : null, dropGroupID: targetGrp !== null ? targetGrp.id : null };\n _this.trigger('drop', dropEventArgs);\n if (dropEventArgs.cancel) {\n isPreventelem = true;\n }\n prevRule = _this.getValidRules();\n }\n _this.prvtEvtTgrDaD = true;\n var tgrt = _this.enableSeparateConnector && e.target.parentElement &&\n e.target.parentElement.classList.contains('e-btn-group') ? e.target.parentElement.previousElementSibling : e.target;\n if (targetGroup && !isPreventelem) {\n var groupId_1 = targetGroup.id.split(_this.element.id + '_')[1].split('_')[0];\n if (_this.draggable.currentStateTarget.parentElement.classList.contains('e-rule-field') ||\n _this.draggable.currentStateTarget.parentElement.classList.contains('e-group-header')) {\n var rule = void 0;\n if (_this.draggable.currentStateTarget.parentElement.classList.contains('e-group-header')) {\n rule = _this.getGroup(_this.draggedRule);\n _this.deleteGroup(closest(_this.draggedRule, '.e-group-container'));\n }\n else {\n rule = _this.getRule(_this.draggedRule);\n _this.deleteRule(_this.draggedRule);\n }\n var groupRule = extend([], _this.getGroup(targetGroup), [], true);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (groupRule.properties) {\n groupRule = groupRule.properties;\n }\n var groupElem = closest(targetGroup, '.e-group-container');\n var nestGrpElem = groupElem.querySelectorAll('.e-group-container');\n nestGrpElem.forEach(function (ele) {\n if (_this.element.querySelector('#' + ele.id)) {\n _this.deleteGroup(ele);\n }\n });\n var ruleElems = groupElem.querySelectorAll('.e-rule-container');\n var ruleIds = [];\n var dropInd = void 0;\n for (var i = 0; i < ruleElems.length; i++) {\n if (ruleElems[i].classList.contains('e-drag-rule-top-line') ||\n ruleElems[i].classList.contains('e-drag-rule-bottom-line')) {\n dropInd = i;\n }\n ruleIds.push(ruleElems[i].id.split(_this.element.id + '_')[1]);\n }\n _this.deleteRules(ruleIds);\n if (targetGroup.classList.contains('e-drag-rule-top-line')) {\n groupRule.rules.splice(dropInd, 0, rule);\n }\n else {\n groupRule.rules.splice(dropInd + 1, 0, rule);\n }\n groupRule.rules.forEach(function (rule) {\n if (_this.enableSeparateConnector) {\n if (!rule.rules) {\n _this.addRules([rule], groupId_1);\n }\n else {\n _this.addGroups([rule], groupId_1);\n }\n }\n else {\n if (rule.condition) {\n _this.addGroups([rule], groupId_1);\n }\n else {\n _this.addRules([rule], groupId_1);\n }\n }\n });\n }\n }\n else if (tgrt.classList.contains('e-rule-list') && tgrt.children.length === 0 && !isPreventelem) {\n var groupElem = closest(tgrt, '.e-group-container');\n var groupId = groupElem.id.split(_this.element.id + '_')[1].split('_')[0];\n var rule = void 0;\n if (_this.draggable.currentStateTarget.parentElement.classList.contains('e-group-header')) {\n rule = _this.getGroup(_this.draggedRule);\n _this.deleteGroup(closest(_this.draggedRule, '.e-group-container'));\n }\n else {\n rule = _this.getRule(_this.draggedRule);\n _this.deleteRule(_this.draggedRule);\n }\n if (_this.enableSeparateConnector) {\n if (!rule.rules) {\n _this.addRules([rule], groupId);\n }\n else {\n _this.addGroups([rule], groupId);\n }\n }\n else {\n if (rule.condition) {\n _this.addGroups([rule], groupId);\n }\n else {\n _this.addRules([rule], groupId);\n }\n }\n }\n else if (tgrt.classList.contains('e-rule-list') && tgrt.children[0].classList.contains('e-group-container') && !isPreventelem) {\n var groupElem = closest(tgrt, '.e-group-container');\n var groupId_2 = groupElem.id.split(_this.element.id + '_')[1].split('_')[0];\n var rule = void 0;\n if (_this.draggable.currentStateTarget.parentElement.classList.contains('e-group-header')) {\n rule = _this.getGroup(_this.draggedRule);\n _this.deleteGroup(closest(_this.draggedRule, '.e-group-container'));\n }\n else {\n rule = _this.getRule(_this.draggedRule);\n _this.deleteRule(_this.draggedRule);\n }\n var groupRule = extend([], _this.getGroup(tgrt), [], true);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (groupRule.properties) {\n groupRule = groupRule.properties;\n }\n var groupElems = tgrt.querySelectorAll('.e-group-container');\n groupElems.forEach(function (ele) {\n if (_this.element.querySelector('#' + ele.id)) {\n _this.deleteGroup(ele);\n }\n });\n var ruleElems = groupElem.querySelectorAll('.e-rule-container');\n ruleElems.forEach(function (ele) {\n if (_this.element.querySelector('#' + ele.id)) {\n _this.deleteRule(ele);\n }\n });\n if (_this.draggable.currentStateTarget.parentElement.classList.contains('e-group-header')) {\n _this.addGroups([rule], groupId_2);\n }\n else {\n _this.addRules([rule], groupId_2);\n }\n groupRule.rules.forEach(function (rule) {\n if (_this.enableSeparateConnector) {\n if (!rule.rules) {\n _this.addRules([rule], groupId_2);\n }\n else {\n _this.addGroups([rule], groupId_2);\n }\n }\n else {\n if (rule.condition) {\n _this.addGroups([rule], groupId_2);\n }\n else {\n _this.addRules([rule], groupId_2);\n }\n }\n });\n }\n else if ((closest(e.target, '.e-group-container') || e.target.classList.contains('e-group-container')) && !isPreventelem) {\n var rule = void 0;\n targetGroup = closest(e.target, '.e-group-container');\n if (!targetGroup && e.target.classList.contains('e-group-container')) {\n targetGroup = e.target;\n }\n var groupId = targetGroup.id.split(_this.element.id + '_')[1].split('_')[0];\n if (groupId === 'group0') {\n if (_this.draggable.currentStateTarget.parentElement.classList.contains('e-group-header')) {\n rule = _this.getGroup(_this.draggedRule);\n _this.deleteGroup(closest(_this.draggedRule, '.e-group-container'));\n }\n else {\n rule = _this.getRule(_this.draggedRule);\n _this.deleteRule(_this.draggedRule);\n }\n if (_this.enableSeparateConnector) {\n if (!rule.rules) {\n _this.addRules([rule], groupId);\n }\n else {\n _this.addGroups([rule], groupId);\n }\n }\n else {\n if (rule.condition) {\n _this.addGroups([rule], groupId);\n }\n else {\n _this.addRules([rule], groupId);\n }\n }\n }\n }\n if (!isPreventelem) {\n _this.trigger('ruleChange', { previousRule: prevRule, rule: _this.getValidRules(), type: 'drag-and-drop' });\n }\n _this.prvtEvtTgrDaD = false;\n document.body.classList.remove('e-prevent-select');\n var borderLineElem = _this.element.querySelectorAll('.e-drag-rule-bottom-line');\n borderLineElem.forEach(function (ele) {\n ele.classList.remove('e-drag-rule-bottom-line');\n });\n borderLineElem = _this.element.querySelectorAll('.e-drag-rule-top-line');\n borderLineElem.forEach(function (ele) {\n ele.classList.remove('e-drag-rule-top-line');\n });\n borderLineElem = _this.element.querySelectorAll('.e-qb-dragging-rule');\n borderLineElem.forEach(function (ele) {\n ele.classList.remove('e-qb-dragging-rule');\n });\n if (e.helper.classList.contains('e-cloneproperties') && document.querySelector('.' + e.helper.classList[0])) {\n remove(e.helper);\n }\n if (_this.enableSeparateConnector) {\n _this.refresh();\n }\n };\n MultiSelect.Inject(CheckBoxSelection);\n return _this;\n }\n QueryBuilder.prototype.getPersistData = function () {\n return this.addOnPersist(['rule']);\n };\n /**\n * Clears the rules without root rule.\n *\n * @returns {void}.\n */\n QueryBuilder.prototype.reset = function () {\n this.isImportRules = false;\n var bodyElem = this.element.querySelector('.e-group-body');\n var inputElement = this.element.querySelectorAll('input.e-control');\n for (var i = 0, len = inputElement.length; i < len; i++) {\n if (inputElement[i].className.indexOf('e-tooltip') > -1) {\n getComponent(inputElement[i], 'tooltip').destroy();\n }\n else if (inputElement[i].parentElement.className.indexOf('e-tooltip') > -1) {\n getComponent(inputElement[i].parentElement, 'tooltip').destroy();\n }\n }\n if (bodyElem) {\n bodyElem.innerHTML = '';\n }\n else {\n var grpContainer = this.createElement('div', { attrs: { class: 'e-group-container' } });\n var grpHeader = this.createElement('div', { attrs: { class: 'e-group-header' } });\n var grpBody = this.createElement('div', { attrs: { class: 'e-group-body' } });\n grpContainer.appendChild(grpHeader).appendChild(grpBody);\n this.element.appendChild(grpContainer);\n bodyElem = this.element.querySelector('.e-group-body');\n }\n if (this.headerTemplate && this.isRoot) {\n this.element.innerHTML = '';\n this.isRoot = false;\n }\n if (this.enableNotCondition) {\n removeClass(this.element.querySelectorAll('.e-qb-toggle'), 'e-active-toggle');\n }\n bodyElem.appendChild(this.createElement('div', { attrs: { class: 'e-rule-list' } }));\n this.levelColl[this.element.id + '_group0'] = [0];\n this.setProperties({ rule: { condition: 'and', not: false, rules: [] } }, true);\n this.disableRuleCondition(bodyElem.parentElement);\n };\n QueryBuilder.prototype.getWrapper = function () {\n return this.element;\n };\n QueryBuilder.prototype.getModuleName = function () {\n return 'query-builder';\n };\n QueryBuilder.prototype.requiredModules = function () {\n var modules = [];\n modules.push({\n member: 'query-library',\n args: [this]\n });\n return modules;\n };\n QueryBuilder.prototype.GetRootColumnName = function (field) {\n return this.separator ? field.split(this.separator)[0] : field;\n };\n QueryBuilder.prototype.initialize = function () {\n if (this.dataColl.length) {\n var columnKeys = Object.keys(this.dataColl[0]);\n var cols = [];\n var categories = [];\n var type = void 0;\n var groupBy = false;\n var isDate = false;\n var value = void 0;\n var validateObj = { isRequired: true, min: 0, max: Number.MAX_VALUE };\n if (this.columns.length) {\n this.columnSort();\n var columns = this.columns;\n for (var i = 0, len = columns.length; i < len; i++) {\n this.updateCustomOperator(columns[i], 'initial');\n if (!columns[i].type) {\n if (columnKeys.indexOf(columns[i].field) > -1) {\n value = this.dataColl[0][columns[i].field];\n type = typeof value;\n if (type === 'string') {\n isDate = !isNaN(Date.parse(value));\n }\n else if (type === 'object') {\n isDate = value instanceof Date && !isNaN(value.getTime());\n type = 'string';\n }\n columns[i].type = type;\n isDate = false;\n }\n type = 'string';\n }\n if (!columns[i].validation) {\n columns[i].validation = validateObj;\n }\n if (columns[i].category) {\n groupBy = true;\n }\n else {\n columns[i].category = this.l10n.getConstant('OtherFields');\n }\n if (categories.indexOf(columns[i].category) < 0) {\n categories.push(columns[i].category);\n }\n if (!columns[i].operators ||\n (this.isLocale && this.isCustomOprCols.indexOf(columns[i].field) !== 0)) {\n columns[i].operators = this.customOperators[columns[i].type + 'Operator'];\n }\n }\n if (groupBy && (categories.length > 1 || categories[0] !== this.l10n.getConstant('OtherFields'))) {\n this.fields = { text: 'label', value: 'field', groupBy: 'category' };\n }\n this.updateSubFieldsFromColumns(this.columns);\n }\n else {\n for (var i = 0, len = columnKeys.length; i < len; i++) {\n value = this.dataColl[0][columnKeys[i]];\n type = typeof value;\n if (type === 'string') {\n isDate = !isNaN(Date.parse(value));\n }\n else if (type === 'object' && !Object.keys(value).length) {\n isDate = value instanceof Date && !isNaN(value.getTime());\n type = 'string';\n }\n cols[i] = { 'field': columnKeys[i], 'label': columnKeys[i], 'type': isDate ? 'date' : type,\n 'validation': validateObj };\n isDate = false;\n cols[i].operators = this.customOperators[cols[i].type + 'Operator'];\n if (type === 'object') {\n this.updateSubFields(value, cols[i]);\n }\n }\n this.columns = cols;\n }\n }\n else if (this.columns && this.columns.length) {\n var columns = this.columns;\n for (var i = 0, len = columns.length; i < len; i++) {\n if (columns[i].category) {\n this.fields = { text: 'label', value: 'field', groupBy: 'category' };\n }\n else {\n columns[i].category = this.l10n.getConstant('OtherFields');\n }\n this.updateCustomOperator(columns[i]);\n if (!columns[i].operators || this.isLocale) {\n columns[i].operators = this.customOperators[columns[i].type + 'Operator'];\n }\n }\n this.updateSubFieldsFromColumns(this.columns);\n }\n this.trigger('dataBound', { type: 'dataBound' });\n };\n QueryBuilder.prototype.updateSubFieldsFromColumns = function (col, field) {\n for (var i = 0; i < col.length; i++) {\n if (this.separator !== '' && col[i].field.indexOf(this.separator) < 0) {\n col[i].field = field ? field + this.separator + col[i].field : col[i].field;\n }\n if (col[i].operators) {\n this.updateCustomOperator(col[i]);\n }\n else if (col[i].type && col[i].type !== 'object') {\n col[i].operators = this.customOperators[col[i].type + 'Operator'];\n }\n if (col[i].columns) {\n col[i].type = 'object';\n this.updateSubFieldsFromColumns(col[i].columns, col[i].field);\n }\n }\n };\n QueryBuilder.prototype.updateSubFields = function (value, col, data) {\n var sampCol;\n col.columns = [];\n var columnKeys = Object.keys(value);\n var field;\n var label;\n var type;\n var result;\n data = data ? data : this.dataColl[0];\n for (var i = 0, len = columnKeys.length; i < len; i++) {\n var compField = col.field.split('.');\n if (data) {\n result = data[compField[compField.length - 1]][columnKeys[i]];\n }\n else {\n result = this.dataColl[0][col.field][columnKeys[i]];\n }\n var resData = data[col.field.split(this.separator)[col.field.split(this.separator).length - 1]];\n type = typeof result;\n field = col.field + this.separator + columnKeys[i];\n label = columnKeys[i];\n type = (type === 'object' && !isNaN(Date.parse(result))) ? 'date' : type;\n sampCol = { field: field, label: label, type: type };\n if (type !== 'object') {\n sampCol.operators = this.customOperators[type + 'Operator'];\n }\n col.columns.push(sampCol);\n if (type === 'object') {\n this.updateSubFields(result, sampCol, resData);\n }\n }\n };\n QueryBuilder.prototype.updateCustomOperator = function (column, from) {\n if (column.operators) {\n if (!this.isLocale && from === 'initial' && !isNullOrUndefined(this.isCustomOprCols)) {\n this.isCustomOprCols.push(column.field);\n }\n var _loop_1 = function (j) {\n var sqlIdx = Object.keys(column.operators[j]).indexOf('sqlOperator');\n if (sqlIdx > -1) {\n var operator_1 = column.operators[j];\n var operColl = Object.keys(operator_1);\n var values = operColl.map(function (key) { return operator_1[\"\" + key]; }).join(',').split(',');\n var valueIdx = operColl.indexOf('value');\n this_1.operators[values[valueIdx]] = values[sqlIdx];\n }\n };\n var this_1 = this;\n for (var j = 0; j < column.operators.length; j++) {\n _loop_1(j);\n }\n }\n };\n QueryBuilder.prototype.focusEventHandler = function (event) {\n this.target = event.target;\n };\n QueryBuilder.prototype.clickEventHandler = function (event) {\n var _this = this;\n var target = event.target;\n var args;\n this.isImportRules = false;\n var groupID;\n if (target.tagName === 'SPAN') {\n target = target.parentElement;\n }\n if (target.className.indexOf('e-collapse-rule') > -1) {\n var animation = new Animation({ duration: 1000, delay: 0 });\n if (this.element.querySelectorAll('.e-summary-content').length < 1) {\n this.renderSummary();\n }\n var summaryElem = document.getElementById(this.element.id + '_summary_content');\n var txtareaElem = summaryElem.querySelector('.e-summary-text');\n animation.animate('.e-query-builder', { name: 'SlideLeftIn' });\n var groupElem = this.element.querySelector('.e-group-container');\n groupElem.style.display = 'none';\n txtareaElem.textContent = this.getSqlFromRules(this.rule);\n summaryElem.style.display = 'block';\n txtareaElem.style.height = txtareaElem.scrollHeight + 'px';\n }\n if (target.tagName === 'BUTTON' && target.className.indexOf('e-qb-toggle') < 0) {\n var animation = new Animation({ duration: 1000, delay: 0 });\n switch (true) {\n case target.className.indexOf('e-removerule') > -1:\n this.actionButton = target;\n this.deleteRule(target);\n break;\n case target.className.indexOf('e-clone-rule-btn') > -1:\n this.actionButton = target;\n this.cloneRuleBtnClick = true;\n this.ruleClone(target);\n break;\n case target.className.indexOf('e-lock-rule-btn') > -1:\n this.actionButton = target;\n this.ruleLock(target);\n break;\n case target.className.indexOf('e-lock-grp-btn') > -1:\n this.actionButton = target;\n this.groupLock(target);\n break;\n case target.className.indexOf('e-clone-grp-btn') > -1:\n this.actionButton = target;\n this.cloneGrpBtnClick = true;\n this.groupClone(closest(target, '.e-group-container'));\n break;\n case target.className.indexOf('e-deletegroup') > -1:\n this.actionButton = target;\n this.deleteGroup(closest(target, '.e-group-container'));\n break;\n case target.className.indexOf('e-edit-rule') > -1:\n animation.animate('.e-query-builder', { name: 'SlideLeftIn' });\n document.getElementById(this.element.id + '_summary_content').style.display = 'none';\n if (this.element.querySelectorAll('.e-group-container').length < 1) {\n this.addGroupElement(false, this.element, this.rule.condition, false, this.rule.not);\n var mRules = extend({}, this.rule, {}, true);\n this.setGroupRules(mRules);\n this.renderSummaryCollapse();\n }\n else {\n var groupElem = this.element.querySelector('.e-group-container');\n if (groupElem.querySelectorAll('.e-collapse-rule').length < 1) {\n this.renderSummaryCollapse();\n }\n groupElem.style.display = 'block';\n }\n break;\n }\n }\n else if ((target.tagName === 'LABEL' && target.parentElement.className.indexOf('e-btn-group') > -1) ||\n target.className.indexOf('e-qb-toggle') > -1) {\n var element = closest(target, '.e-group-container');\n if (!this.headerTemplate) {\n var forIdValue = target.getAttribute('for');\n var targetValue = void 0;\n if (forIdValue) {\n targetValue = document.getElementById(forIdValue).getAttribute('value');\n }\n else if (this.enableSeparateConnector) {\n targetValue = target.textContent;\n }\n groupID = element.id.replace(this.element.id + '_', '');\n var group = this.getGroup(groupID);\n var ariaChecked = void 0;\n if (this.enableNotCondition) {\n if (target.className.indexOf('e-qb-toggle') > -1) {\n var toggleElem = element.getElementsByClassName('e-qb-toggle')[0];\n if (toggleElem.className.indexOf('e-active-toggle') > -1) {\n removeClass([toggleElem], 'e-active-toggle');\n ariaChecked = false;\n }\n else {\n addClass([toggleElem], 'e-active-toggle');\n ariaChecked = true;\n }\n targetValue = group.condition;\n }\n else {\n ariaChecked = group.not;\n }\n }\n args = { groupID: groupID, cancel: false, type: 'condition', value: targetValue.toLowerCase() };\n if (this.enableNotCondition) {\n args = { groupID: groupID, cancel: false, type: 'condition', value: targetValue.toLowerCase(),\n 'not': ariaChecked };\n }\n }\n if (!this.isImportRules) {\n this.trigger('beforeChange', args, function (observedChangeArgs) {\n _this.beforeSuccessCallBack(observedChangeArgs, target);\n });\n }\n else {\n this.beforeSuccessCallBack(args, target);\n }\n this.target = target;\n }\n };\n QueryBuilder.prototype.beforeSuccessCallBack = function (args, target) {\n if (args && !args.cancel) {\n var element = closest(target, '.e-group-container');\n var groupID = element.id.replace(this.element.id + '_', '');\n var beforeRules = this.getValidRules(this.rule);\n var rule = this.getParentGroup(element);\n if (this.enableSeparateConnector) {\n if (isNullOrUndefined(closest(target, '.e-rule-container')) &&\n element.classList.contains('e-group-container')) {\n element = target.parentElement.previousElementSibling !== null ?\n target.parentElement.previousElementSibling : element;\n }\n else {\n element = closest(target, '.e-rule-container');\n }\n var id = element.id.replace(this.element.id + '_', '');\n if (element.classList.contains('e-rule-container')) {\n rule = this.getRule(element);\n rule.condition = args.value;\n }\n else if (element.classList.contains('e-group-container')) {\n rule = this.getGroup(element);\n rule.condition = args.value;\n }\n if (this.enableNotCondition) {\n rule.not = args.not;\n }\n if (!this.isImportRules) {\n this.trigger('change', { groupID: groupID, ruleID: id, type: 'condition', value: rule.condition });\n }\n }\n else {\n rule.condition = args.value;\n if (this.enableNotCondition) {\n rule.not = args.not;\n }\n if (!this.isImportRules) {\n this.trigger('change', { groupID: groupID, type: 'condition', value: rule.condition });\n }\n }\n this.filterRules(beforeRules, this.getValidRules(this.rule), 'condition');\n if (this.enableSeparateConnector) {\n var andElem = target.parentElement.querySelector('.e-btngroup-and');\n var orElem = target.parentElement.querySelector('.e-btngroup-or');\n if (andElem && orElem) {\n if (args.value === 'and') {\n andElem.checked = true;\n orElem.checked = false;\n }\n else if (args.value === 'or') {\n orElem.checked = true;\n andElem.checked = false;\n }\n }\n }\n }\n };\n QueryBuilder.prototype.selectBtn = function (target, event) {\n if (event.name === 'beforeOpen') {\n if (this.showButtons.groupInsert || isNullOrUndefined(this.showButtons.groupInsert)) {\n if (this.element.querySelectorAll('.e-group-container').length >= this.maxGroupCount + 1) {\n addClass([event.element.querySelector('li span.e-addgroup').parentElement], 'e-button-hide');\n }\n else {\n removeClass([event.element.querySelector('li span.e-addgroup').parentElement], 'e-button-hide');\n }\n if (this.enableRtl) {\n addClass([event.element.querySelector('li').parentElement], 'e-rtl');\n }\n }\n else {\n addClass([event.element.querySelector('li span.e-addgroup').parentElement], 'e-button-hide');\n }\n }\n else if (event.element.children[0].className.indexOf('e-addrule') > -1) {\n this.addRuleElement(closest(target, '.e-group-container'), {});\n }\n else if (event.element.children[0].className.indexOf('e-addgroup') > -1) {\n this.addGroupElement(true, closest(target, '.e-group-container'), '', true);\n }\n };\n QueryBuilder.prototype.appendRuleElem = function (target, column, type, parentId, action, rule) {\n var ruleElem;\n var elem;\n var ruleListElem = target.querySelector('.e-rule-list');\n var args;\n if (type === 'change') {\n ruleElem = select('#' + parentId, target);\n }\n else {\n ruleElem = this.createElement('div', { attrs: { class: 'e-rule-container' } });\n ruleElem.setAttribute('id', target.id + '_rule' + this.ruleIdCounter);\n if (this.showButtons.cloneRule && this.cloneRuleBtnClick) {\n if (this.ruleIndex < 0) {\n ruleListElem.appendChild(ruleElem);\n }\n else {\n if (this.enableSeparateConnector) {\n var index = -1;\n var tempRuleIndex = this.ruleIndex + 1;\n for (var i = 0; i < tempRuleIndex; i++) {\n if (i === ruleListElem.children.length) {\n break;\n }\n if (ruleListElem.children[i].classList.contains('e-rule-container')) {\n tempRuleIndex++;\n index++;\n }\n }\n ruleListElem.insertBefore(ruleElem, ruleListElem.children[this.ruleIndex + index + 1]); // added clone rule to next position\n }\n else {\n ruleListElem.insertBefore(ruleElem, ruleListElem.children[this.ruleIndex + 1]); // added clone rule to next position\n }\n }\n this.cloneRuleBtnClick = false;\n }\n else {\n ruleListElem.appendChild(ruleElem);\n }\n this.ruleIdCounter++;\n }\n if (column && column.ruleTemplate && rule) {\n args = { requestType: 'template-initialize', ruleID: ruleElem.id, action: action, fields: this.fields, rule: rule };\n this.trigger('actionBegin', args);\n this.ruleTemplateFn = this.templateParser(column.ruleTemplate);\n var templateID = this.element.id + column.field;\n var template = void 0;\n args.fields = this.fields;\n args.columns = this.columns;\n if (rule.field === '') {\n rule.field = column.field;\n }\n args.operators = this.getOperators(rule.field);\n args.operatorFields = { text: 'key', value: 'value' };\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.isReact) {\n template = this.ruleTemplateFn(args, this, ruleElem.id, templateID)[0];\n elem = template;\n elem.className += ' e-rule-field';\n ruleElem.appendChild(elem);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n }\n else if (this.isAngular) {\n var templateColl = this.ruleTemplateFn(args, this, ruleElem.id, templateID);\n template = (templateColl[0].nodeType === 3) ? templateColl[1] : templateColl[0];\n elem = template;\n elem.className += ' e-rule-field';\n ruleElem.appendChild(elem);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n }\n else if (this.isVue3) {\n template = this.ruleTemplateFn(args, this, 'Template', templateID);\n elem = template;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n append(elem, ruleElem);\n ruleElem.children[ruleElem.children.length - 1].className += ' e-rule-field';\n }\n else {\n template = this.ruleTemplateFn(args, this, 'Template', templateID)[0];\n elem = template;\n elem.className += ' e-rule-field';\n ruleElem.appendChild(elem);\n }\n }\n else {\n elem = this.ruleElem.querySelector('.e-rule-field').cloneNode(true);\n ruleElem.appendChild(elem);\n }\n if (this.showButtons.lockGroup) {\n removeClass(ruleElem.querySelectorAll('.e-lock-grp-btn'), 'e-button-hide');\n }\n if (this.showButtons.lockRule) {\n removeClass(ruleElem.querySelectorAll('.e-lock-rule-btn'), 'e-button-hide');\n }\n if (this.showButtons.cloneGroup) {\n removeClass(ruleElem.querySelectorAll('.e-clone-grp-btn'), 'e-button-hide');\n }\n if (this.showButtons.cloneRule) {\n removeClass(ruleElem.querySelectorAll('.e-clone-rule-btn'), 'e-button-hide');\n }\n if (this.showButtons.ruleDelete) {\n removeClass(ruleElem.querySelectorAll('.e-lock-grp-btn'), 'e-button-hide');\n }\n if (this.allowDragAndDrop) {\n removeClass(ruleElem.querySelectorAll('.e-drag-qb-rule'), 'e-hidden');\n }\n if (column && column.ruleTemplate && rule) {\n this.renderReactTemplates();\n }\n return ruleElem;\n };\n QueryBuilder.prototype.addRuleElement = function (target, rule, column, action, parentId, isRuleTemplate) {\n var _this = this;\n if (!target) {\n return;\n }\n var args = { groupID: target.id.replace(this.element.id + '_', ''), cancel: false, type: 'insertRule' };\n if (!this.isImportRules && !this.isInitialLoad && !this.prvtEvtTgrDaD) {\n this.trigger('beforeChange', args, function (observedChangeArgs) {\n _this.addRuleSuccessCallBack(observedChangeArgs, target, rule, column, action, parentId, isRuleTemplate);\n });\n }\n else {\n this.isInitialLoad = false;\n this.addRuleSuccessCallBack(args, target, rule, column, action, parentId, isRuleTemplate);\n }\n };\n QueryBuilder.prototype.addRuleSuccessCallBack = function (args, trgt, rule, col, act, pId, isRlTmp) {\n var height = (this.element.className.indexOf('e-device') > -1) ? '250px' : '200px';\n var ruleID;\n var column = (rule && rule.field) ? this.getColumn(rule.field) : col ? col : this.columns[0];\n var operators;\n var dropDownList;\n var ruleElem;\n var newRule = { 'label': '', 'field': '', 'type': '', 'operator': '' };\n if (!args.cancel) {\n if (column && column.ruleTemplate && rule.field) {\n this.selectedColumn = column;\n operators = this.selectedColumn.operators;\n newRule = { 'label': column.label, 'field': column.field, 'type': column.type, 'operator': operators[0].value };\n var passedRule = Object.keys(rule).length ? rule : newRule;\n ruleElem = this.appendRuleElem(trgt, column, act, pId, 'field', passedRule);\n var args_1 = { requestType: 'template-create', action: 'insert-rule', ruleID: ruleElem.id,\n fields: this.fields, rule: passedRule };\n this.trigger('actionBegin', args_1);\n }\n else {\n ruleElem = this.appendRuleElem(trgt, column, act, pId, 'field');\n ruleElem.querySelector('.e-filter-input').setAttribute('id', ruleElem.id + '_filterkey');\n var element = ruleElem.querySelector('.e-rule-delete');\n if (this.element.className.indexOf('e-device') > -1 || this.displayMode === 'Vertical') {\n element.textContent = this.l10n.getConstant('Remove');\n addClass([element], 'e-flat');\n addClass([element], 'e-primary');\n }\n else {\n addClass([element], 'e-round');\n addClass([element], 'e-icon-btn');\n element.setAttribute('title', this.l10n.getConstant('DeleteRule'));\n var spanElement = this.createElement('span', { attrs: { class: 'e-btn-icon e-icons e-delete-icon' } });\n ruleElem.querySelector('.e-rule-delete').appendChild(spanElement);\n }\n if (!this.showButtons.ruleDelete) {\n element.classList.add('e-button-hide');\n }\n }\n if (this.displayMode === 'Vertical' || this.element.className.indexOf('e-device') > -1) {\n ruleElem.className = 'e-rule-container e-vertical-mode';\n }\n else {\n ruleElem.className = 'e-rule-container e-horizontal-mode';\n }\n var previousRuleElem = ruleElem.previousElementSibling;\n if (this.enableSeparateConnector) {\n var prevRule = void 0;\n var ruleContainer = void 0;\n if (previousRuleElem && previousRuleElem.classList.contains('e-group-container')) {\n ruleContainer = previousRuleElem.querySelectorAll('.e-rule-container');\n previousRuleElem = ruleContainer[ruleContainer.length - 1];\n }\n if (previousRuleElem && previousRuleElem.classList.contains('e-rule-container')) {\n prevRule = this.getRule(previousRuleElem);\n }\n if (this.headerTemplate && previousRuleElem && prevRule) {\n this.headerTemplateFn(previousRuleElem, false, prevRule.condition, prevRule, previousRuleElem.id);\n }\n else if (isNullOrUndefined(previousRuleElem) && ruleElem.id !== this.element.id + '_group0_rule0') {\n var group = ruleElem.closest('.e-group-container');\n if (group && group.previousElementSibling) {\n var prevElem = group.previousElementSibling;\n var prevRuleContainer = prevElem.querySelectorAll('.e-rule-container');\n if (prevElem.classList.contains('e-group-container')) {\n prevElem = prevRuleContainer[prevRuleContainer.length - 1];\n }\n if (prevElem.classList.contains('e-rule-container')) {\n var prevRule_1 = this.getRule(prevElem);\n this.headerTemplateFn(prevElem, false, prevRule_1.condition, prevRule_1, prevElem.id, true);\n }\n }\n else {\n this.headerTemplateFn(ruleElem, false, rule.condition, rule, ruleElem.id, true);\n }\n }\n }\n else {\n if (previousRuleElem && previousRuleElem.className.indexOf('e-rule-container') > -1) {\n if (ruleElem.className.indexOf('e-joined-rule') < 0) {\n ruleElem.className += ' e-joined-rule';\n }\n if (previousRuleElem.className.indexOf('e-prev-joined-rule') < 0) {\n previousRuleElem.className += ' e-prev-joined-rule';\n }\n }\n }\n if (previousRuleElem && previousRuleElem.className.indexOf('e-group-container') > -1 &&\n ruleElem.className.indexOf('e-separate-rule') < 0) {\n ruleElem.className += ' e-separate-rule';\n }\n if (!this.isImportRules) {\n this.updateAddedRule(trgt, rule, newRule, isRlTmp, pId, this.enableSeparateConnector ? true : null);\n }\n if (!column || (column && !column.ruleTemplate) || !rule.field) {\n if (this.fieldMode === 'Default') {\n var ddlField = void 0;\n var ddlValue = void 0;\n if (this.separator && rule.field) {\n ddlValue = this.GetRootColumnName(rule.field);\n }\n else if (this.autoSelectField) {\n ddlValue = this.GetRootColumnName(rule.field);\n }\n else {\n ddlValue = this.isImportRules ? this.GetRootColumnName(rule.field) : rule.field;\n }\n ddlField = {\n dataSource: this.columns,\n fields: this.fields, placeholder: this.l10n.getConstant('SelectField'),\n popupHeight: ((this.columns.length > 5) ? height : 'auto'), close: this.fieldClose.bind(this, ruleElem.id + '_filterkey'),\n change: this.changeField.bind(this), value: rule ? ddlValue : null, open: this.popupOpen.bind(this, true), cssClass: 'qb-dropdownlist'\n };\n if (this.fieldModel) {\n ddlField = __assign({}, ddlField, this.fieldModel);\n }\n dropDownList = new DropDownList(ddlField);\n dropDownList.appendTo('#' + ruleElem.id + '_filterkey');\n var ddlVal = void 0;\n if (this.separator && rule.field) {\n ddlVal = this.GetRootColumnName(rule.field);\n }\n else {\n ddlVal = this.isImportRules ? this.GetRootColumnName(rule.field) :\n dropDownList.value;\n }\n this.selectedColumn = dropDownList.getDataByValue(ddlVal);\n if (Object.keys(rule).length) {\n this.changeRule(rule, {\n element: dropDownList.element, itemData: this.selectedColumn\n });\n }\n }\n else {\n var ddlField = void 0;\n var ddlValue = this.isImportRules ? rule.field : rule.field;\n this.dummyDropdownTreeDs = extend([], this.columns, [], true);\n this.updateDropdowntreeDS(this.dummyDropdownTreeDs);\n ddlField = {\n fields: { dataSource: this.dummyDropdownTreeDs,\n value: 'field', text: 'label', child: 'columns', expanded: 'expanded', selectable: 'selectable' },\n placeholder: this.l10n.getConstant('SelectField'), showClearButton: false,\n popupHeight: ((this.columns.length > 5) ? height : 'auto'), changeOnBlur: false,\n change: this.changeField.bind(this), value: !isNullOrUndefined(ddlValue) ? [ddlValue] : null,\n open: this.popupOpen.bind(this, false), treeSettings: { expandOn: 'Click' },\n cssClass: 'e-qb-ddt', filtering: this.dropdownTreeFiltering.bind(this), close: this.dropdownTreeClose.bind(this)\n };\n if (this.fieldModel) {\n ddlField = __assign({}, ddlField, this.fieldModel);\n }\n var dropdowntree = new DropDownTree(ddlField);\n dropdowntree.appendTo('#' + ruleElem.id + '_filterkey');\n if (!isNullOrUndefined(dropdowntree.value)) {\n var value = this.getLabelFromColumn(dropdowntree.value[0]);\n dropdowntree.element.value = value;\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var ddlVal = !isNullOrUndefined(rule.field) ?\n this.GetRootColumnName(rule.field) : dropdowntree.value;\n this.selectedColumn = this.getColumn(ddlVal);\n if (Object.keys(rule).length) {\n this.changeRule(rule, {\n element: dropdowntree.element, itemData: this.selectedColumn\n });\n }\n }\n }\n ruleID = ruleElem.id.replace(this.element.id + '_', '');\n if (rule && rule.isLocked) {\n var lockRuleTarget = ruleElem.querySelector('.e-lock-rule-btn');\n this.ruleLock(lockRuleTarget);\n }\n if (!this.isImportRules && !this.prvtEvtTgrDaD) {\n this.trigger('change', { groupID: trgt.id.replace(this.element.id + '_', ''), ruleID: ruleID, type: 'insertRule' });\n }\n }\n if (this.enableSeparateConnector && isNullOrUndefined(rule.condition) && ruleID) {\n rule = this.getRule(ruleID);\n }\n if (this.enableSeparateConnector) {\n var prevElem = ruleElem.previousElementSibling;\n var ruleContainer = void 0;\n while (prevElem && !prevElem.classList.contains('e-rule-container')) {\n if (prevElem.classList.contains('e-group-container')) {\n ruleContainer = prevElem.querySelectorAll('.e-rule-container');\n prevElem = ruleContainer[ruleContainer.length - 1];\n break;\n }\n prevElem = prevElem.previousElementSibling;\n }\n if (this.headerTemplate && prevElem) {\n var prevRule = this.getRule(prevElem);\n var args_2 = { requestType: 'rule-template-create', ruleID: prevElem.id, condition: prevRule.condition,\n notCondition: this.enableNotCondition ? true : undefined };\n this.trigger('actionBegin', args_2);\n }\n else if (isNullOrUndefined(prevElem) && ruleElem.id !== this.element.id + '_group0_rule0') {\n var group = ruleElem.closest('.e-group-container');\n if (group && group.previousElementSibling && group.previousElementSibling.previousElementSibling) {\n var prevElem_1 = group.previousElementSibling.previousElementSibling;\n if (prevElem_1.classList.contains('e-group-container')) {\n var ruleContainer_1 = prevElem_1.querySelectorAll('.e-rule-container');\n prevElem_1 = ruleContainer_1[ruleContainer_1.length - 1];\n }\n if (prevElem_1.classList.contains('e-rule-container')) {\n var prevRule = this.getRule(prevElem_1);\n var args_3 = { requestType: 'rule-template-create', ruleID: prevElem_1.id,\n condition: prevRule.condition, notCondition: this.enableNotCondition ? true : undefined };\n this.trigger('actionBegin', args_3);\n }\n }\n }\n this.setMultiConnector(ruleElem);\n }\n };\n QueryBuilder.prototype.dropdownTreeFiltering = function (args) {\n var _this = this;\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var proxy = this;\n var ruleElemID = '';\n var srcElement = args.event.srcElement;\n var isClearIcon = srcElement.classList.contains('e-clear-icon');\n var inputElem = isClearIcon ? srcElement.parentElement.querySelector('.e-textbox') : srcElement;\n ruleElemID = inputElem.id.split('_filterkey')[0];\n var ruleElem = document.getElementById(ruleElemID);\n this.ddTree = getComponent(ruleElem.querySelector('input.e-dropdowntree'), 'dropdowntree');\n var hierarchicalData = extend([], this.columns, [], true);\n // Cancel the default filtering.\n args.cancel = true;\n if (args.text === '') {\n this.changeDataSource(hierarchicalData);\n }\n else {\n var matchedDataSource = hierarchicalData\n .map(function (data) { return _this.nestedChildFilter(args.text, data); })\n .filter(function (filteredChild) { return filteredChild !== null; });\n this.changeDataSource(matchedDataSource);\n setTimeout(function () {\n proxy.ddTree.treeObj.expandAll();\n }, 100);\n }\n };\n QueryBuilder.prototype.changeDataSource = function (data) {\n this.ddTree.treeObj.fields = {\n dataSource: data,\n value: 'field',\n text: 'label',\n child: 'columns',\n expanded: 'expanded'\n };\n this.ddTree.treeObj.refresh();\n };\n QueryBuilder.prototype.nestedChildFilter = function (value, node) {\n var _this = this;\n var children = node[this.ddTree.fields.child];\n if (!children) {\n return this.isMatchedNode(value, node) ? node : null;\n }\n var matchedChildren = children\n .map(function (child) { return _this.nestedChildFilter(value, child); })\n .filter(function (filteredChild) { return filteredChild !== null; });\n if (matchedChildren.length) {\n node[this.ddTree.fields.child] = matchedChildren;\n return node;\n }\n else {\n node[this.ddTree.fields.child] = children;\n return this.isMatchedNode(value, node) ? node : null;\n }\n };\n QueryBuilder.prototype.isMatchedNode = function (value, node) {\n var checkValue = node[this.ddTree.fields.text].toLowerCase();\n value = value ? value.toLowerCase() : '';\n return checkValue.indexOf(value) !== -1;\n };\n QueryBuilder.prototype.dropdownTreeClose = function () {\n if (this.ddTree) {\n this.changeDataSource(this.columns);\n }\n this.ddTree = null;\n };\n QueryBuilder.prototype.updateDropdowntreeDS = function (columns) {\n for (var i = 0; i < columns.length; i++) {\n if (columns[parseInt(i.toString(), 10)].type === 'object') {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.isAngular && columns[parseInt(i.toString(), 10)].template) {\n delete columns[parseInt(i.toString(), 10)].template;\n }\n columns[parseInt(i.toString(), 10)].selectable = false;\n this.updateDropdowntreeDS(columns[parseInt(i.toString(), 10)].columns);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n }\n else if (this.isAngular && columns[parseInt(i.toString(), 10)].template) {\n delete columns[parseInt(i.toString(), 10)].template;\n }\n }\n };\n QueryBuilder.prototype.updateAddedRule = function (target, rule, newRule, isRuleTemplate, pId, isNewRuleAdded) {\n var ruleElem;\n var index = 0;\n var groupElem;\n var rules;\n if (isRuleTemplate) {\n ruleElem = select('#' + pId, target);\n groupElem = closest(target, '.e-group-container');\n rules = this.getParentGroup(groupElem);\n while (ruleElem && ruleElem.previousElementSibling !== null) {\n ruleElem = ruleElem.previousElementSibling;\n var enableSeparateCondition = this.enableSeparateConnector && ((!this.headerTemplate && !ruleElem.classList.contains('e-btn-group')) ||\n (this.headerTemplate && (ruleElem.classList.contains('e-rule-container') ||\n ruleElem.classList.contains('e-group-container'))));\n if (!this.enableSeparateConnector || enableSeparateCondition) {\n index++;\n }\n }\n rules.rules[index] = rule;\n }\n else {\n groupElem = closest(target, '.e-group-container');\n rules = this.getParentGroup(groupElem);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var custom = rule.custom;\n if (Object.keys(rule).length) {\n if (this.ruleIndex < 0) {\n rules.rules.push({\n 'field': rule.field, 'type': rule.type, 'label': rule.label, 'operator': rule.operator, value: rule.value\n });\n if (custom) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n rules.rules[rules.rules.length - 1].custom = custom;\n }\n if (this.enableSeparateConnector) {\n rules.rules[rules.rules.length - 1].condition = rule.condition ? rule.condition : newRule.condition;\n }\n }\n else {\n rules.rules.splice(this.ruleIndex + 1, 0, {\n 'field': rule.field, 'type': rule.type, 'label': rule.label, 'operator': rule.operator, value: rule.value\n });\n if (custom) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n rules.rules[this.ruleIndex + 1].custom = custom;\n }\n if (this.enableSeparateConnector) {\n rules.rules[this.ruleIndex + 1].condition = rule.condition ? rule.condition : newRule.condition;\n }\n }\n }\n else {\n if (custom) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n newRule.custom = custom;\n }\n if (this.autoSelectField) {\n rule.field = newRule.field = this.rule.rules[0].field;\n }\n rules.rules.push(newRule);\n }\n }\n this.disableRuleCondition(target, rules, isNewRuleAdded);\n };\n QueryBuilder.prototype.changeRuleTemplate = function (column, element) {\n var operVal = this.selectedColumn.operators;\n if (column.ruleTemplate) {\n return;\n }\n else {\n var parentGroup = closest(element, '.e-group-container');\n var parentId = closest(element, '.e-rule-container').id;\n if (this.previousColumn && this.previousColumn.ruleTemplate) {\n detach(element.closest('[id=\"' + parentId + '\"]').querySelector('.e-rule-field'));\n this.clearQBTemplate([parentId]);\n }\n if (column) {\n var rule = { field: column.field, label: column.label, operator: operVal[0].value, value: '' };\n this.addRuleElement(parentGroup, rule, column, 'change', parentId, true);\n }\n }\n };\n QueryBuilder.prototype.renderToolTip = function (element) {\n var tooltip = new Tooltip({ content: this.l10n.getConstant('ValidationMessage'), isSticky: true,\n position: 'BottomCenter', cssClass: 'e-querybuilder-error', afterClose: function () {\n tooltip.destroy();\n }, beforeOpen: function (args) {\n var tooltipCloseElement = args.element.querySelector('.e-tooltip-close');\n if (tooltipCloseElement) {\n tooltipCloseElement.style.display = 'none';\n }\n } });\n tooltip.appendTo(element);\n tooltip.open(element);\n };\n /**\n * Validate the conditions and it display errors for invalid fields.\n *\n * @returns {boolean} - Validation\n */\n QueryBuilder.prototype.validateFields = function () {\n var isValid = true;\n var dropDownTreeObj;\n if (this.allowValidation) {\n var excludeOprs = ['isnull', 'isnotnull', 'isempty', 'isnotempty'];\n var i = void 0;\n var len = void 0;\n var fieldElem = void 0;\n var indexElem = void 0;\n var valArray = [];\n var groupElem = void 0;\n var index = void 0;\n var dropDownObj = void 0;\n var tempElem = void 0;\n var rule = void 0;\n var ruleElemCln = this.element.querySelectorAll('.e-rule-container');\n for (i = 0, len = ruleElemCln.length; i < len; i++) {\n var validateRule = void 0;\n groupElem = closest(ruleElemCln[i], '.e-group-container');\n rule = this.getParentGroup(groupElem);\n index = 0;\n indexElem = tempElem = ruleElemCln[i];\n if (this.fieldMode === 'DropdownTree') {\n dropDownTreeObj = getComponent(ruleElemCln[i].querySelector('.e-rule-filter input.e-dropdowntree'), 'dropdowntree');\n if (dropDownTreeObj && dropDownTreeObj.value && dropDownTreeObj.value.length) {\n this.selectedColumn = this.getColumn(dropDownTreeObj.value[0]);\n validateRule = this.selectedColumn.validation;\n }\n }\n else {\n dropDownObj = getComponent(ruleElemCln[i].querySelector('.e-rule-filter input.e-dropdownlist'), 'dropdownlist');\n if (dropDownObj && dropDownObj.value) {\n this.selectedColumn = dropDownObj.getDataByValue(dropDownObj.value);\n validateRule = !isNullOrUndefined(dropDownObj.index) && this.selectedColumn.validation;\n }\n }\n fieldElem = tempElem.querySelector('.e-rule-field input.e-control');\n if (validateRule && validateRule.isRequired) {\n while (indexElem && indexElem.previousElementSibling !== null) {\n indexElem = indexElem.previousElementSibling;\n var separateCondition = this.enableSeparateConnector && ((!this.headerTemplate && !indexElem.classList.contains('e-btn-group')) ||\n (this.headerTemplate && (indexElem.classList.contains('e-rule-container') || indexElem.classList.contains('e-group-container'))));\n if (!this.enableSeparateConnector || separateCondition) {\n index++;\n }\n }\n fieldElem = tempElem.querySelector('.e-rule-operator .e-control');\n if (!rule.rules[index].operator) {\n if (fieldElem.parentElement.className.indexOf('e-tooltip') < 0 && fieldElem.className.indexOf('e-tooltip') < 0) {\n this.renderToolTip(fieldElem.parentElement);\n }\n isValid = false;\n }\n if (rule.rules[index].value instanceof Array) {\n valArray = rule.rules[index].value;\n }\n if (excludeOprs.indexOf(rule.rules[index].operator) < -1 &&\n (isNullOrUndefined(rule.rules[index].value) &&\n rule.rules[index].type !== 'date') || rule.rules[index].value === '' || rule.rules[index].value === null ||\n (rule.rules[index].value instanceof Array && valArray.length < 1)) {\n var valElem = tempElem.querySelectorAll('.e-rule-value .e-control');\n if (excludeOprs.indexOf(rule.rules[index].operator) < 0) {\n isValid = false;\n }\n for (var j = 0, jLen = valElem.length; j < jLen; j++) {\n var element = valElem[j];\n var elem = void 0;\n if (element.parentElement.className.indexOf('e-searcher') > -1) {\n elem = closest(element, '.e-multi-select-wrapper');\n if (elem.className.indexOf('e-tooltip') < 0) {\n this.renderToolTip(elem);\n }\n }\n else if (valElem[j].parentElement.className.indexOf('e-tooltip') < 0 && valElem[j].className.indexOf('e-tooltip') < 0) {\n this.renderToolTip(valElem[j].parentElement);\n }\n j++;\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n }\n else if (rule.rules[index].type === 'date' && (rule.rules[index].value === null || rule.rules[index].value.indexOf(null) > -1)) {\n var valElem = tempElem.querySelectorAll('.e-rule-value .e-control');\n if (excludeOprs.indexOf(rule.rules[index].operator) < 0) {\n isValid = false;\n }\n for (var j = 0, jLen = valElem.length; j < jLen; j++) {\n if (valElem[j].parentElement.className.indexOf('e-tooltip') < 0 && valElem[j].className.indexOf('e-tooltip') < 0 && (isNullOrUndefined(rule.rules[index].value) || rule.rules[index].value[j] == null)) {\n this.renderToolTip(valElem[j].parentElement);\n }\n }\n }\n }\n else if ((dropDownObj && dropDownObj.element && isNullOrUndefined(dropDownObj.index)) ||\n (dropDownTreeObj && dropDownTreeObj.element && (isNullOrUndefined(dropDownTreeObj.value) ||\n dropDownTreeObj.value.length < 1))) {\n if (fieldElem.parentElement.className.indexOf('e-tooltip') < 0) {\n this.renderToolTip(fieldElem.parentElement);\n }\n isValid = false;\n }\n }\n }\n return isValid;\n };\n QueryBuilder.prototype.refreshLevelColl = function () {\n this.levelColl = {};\n var groupElem = this.element.querySelector('.e-group-container');\n if (groupElem) {\n this.levelColl[groupElem.id] = [0];\n var obj = { groupElement: groupElem, level: [0] };\n this.refreshLevel(obj);\n }\n };\n QueryBuilder.prototype.refreshLevel = function (obj) {\n var ruleList = obj.groupElement.querySelector('.e-rule-list').children;\n var childElem;\n var groupElem = obj.groupElement;\n var i;\n var iLen = ruleList.length;\n var groupCount = 0;\n for (i = 0; i < iLen; i++) {\n childElem = ruleList[i];\n if (childElem.className.indexOf('e-group-container') > -1) {\n obj.level.push(groupCount);\n this.levelColl[childElem.id] = obj.level.slice();\n groupCount++;\n obj.groupElement = childElem;\n obj = this.refreshLevel(obj);\n }\n }\n var ruleListElem = closest(groupElem, '.e-rule-list');\n obj.groupElement = ruleListElem ? closest(ruleListElem, '.e-group-container') : groupElem;\n obj.level = this.levelColl[obj.groupElement.id].slice();\n return obj;\n };\n QueryBuilder.prototype.groupTemplate = function (isConnector) {\n var glueElem;\n var inputElem;\n var dragClsName;\n var labelElem;\n var grpActElem;\n var groupBtn;\n var groupElem = this.createElement('div', { attrs: { class: 'e-group-container' } });\n var groupHdrElem = this.createElement('div', { attrs: { class: 'e-group-header' } });\n var grpBodyElem = this.createElement('div', { attrs: { class: 'e-group-body' } });\n var rulesElem = this.createElement('div', { attrs: { class: 'e-rule-list' } });\n groupElem.appendChild(groupHdrElem);\n grpBodyElem.appendChild(rulesElem);\n groupElem.appendChild(grpBodyElem);\n // create button group in OR and AND process\n if (!this.headerTemplate) {\n if (this.allowDragAndDrop) {\n dragClsName = 'e-icons e-drag-qb-rule';\n }\n else {\n dragClsName = 'e-icons e-drag-qb-rule e-hidden';\n }\n var spanDragElement = this.createElement('span', { attrs: { class: dragClsName, 'aria-lable': 'drag handle',\n title: 'drag handle' } });\n groupHdrElem.appendChild(spanDragElement);\n var className = this.enableSeparateConnector && !isConnector ? 'e-lib e-btn-group e-qb-toggle-btn' : 'e-lib e-btn-group';\n glueElem = this.createElement('div', { attrs: { class: className, role: 'group' } });\n if (this.enableSeparateConnector) {\n glueElem.classList.add('e-multi-connector');\n }\n if (this.enableNotCondition) {\n if (this.enableSeparateConnector) {\n inputElem = this.createElement('input', { attrs: { type: 'checkbox', class: 'e-qb-toggle' } });\n }\n else {\n inputElem = this.createElement('button', { attrs: { type: 'button', class: 'e-qb-toggle' } });\n }\n glueElem.appendChild(inputElem);\n }\n inputElem = this.createElement('input', { attrs: { type: 'radio', class: 'e-btngroup-and', value: 'AND' } });\n glueElem.appendChild(inputElem);\n labelElem = this.createElement('label', { attrs: { class: 'e-lib e-btn e-btngroup-and-lbl e-small' },\n innerHTML: this.l10n.getConstant('AND') });\n glueElem.appendChild(labelElem);\n inputElem = this.createElement('input', { attrs: { type: 'radio', class: 'e-btngroup-or', value: 'OR' } });\n glueElem.appendChild(inputElem);\n labelElem = this.createElement('label', { attrs: { class: 'e-lib e-btn e-btngroup-or-lbl e-small' },\n innerHTML: this.l10n.getConstant('OR') });\n glueElem.appendChild(labelElem);\n groupHdrElem.appendChild(glueElem);\n grpActElem = this.createElement('div', { attrs: { class: 'e-group-action' } });\n if (this.enableSeparateConnector) {\n groupBtn = this.createElement('button', { attrs: { type: 'button', class: 'e-add-condition-btn' } });\n grpActElem.appendChild(groupBtn);\n groupBtn = this.createElement('button', { attrs: { type: 'button', class: 'e-add-group-btn' } });\n grpActElem.appendChild(groupBtn);\n }\n else {\n groupBtn = this.createElement('button', { attrs: { type: 'button', class: 'e-add-btn' } });\n grpActElem.appendChild(groupBtn);\n }\n groupHdrElem.appendChild(grpActElem);\n }\n return groupElem;\n };\n QueryBuilder.prototype.ruleTemplate = function () {\n var tempElem;\n var clsName;\n var cloneClsName;\n var lockClsName;\n var dragClsName;\n var ruleElem = this.createElement('div');\n var fieldElem = this.createElement('div', { attrs: { class: 'e-rule-field' } });\n tempElem = this.createElement('div', { attrs: { class: 'e-rule-filter' } });\n if (this.allowDragAndDrop) {\n dragClsName = 'e-icons e-drag-qb-rule';\n }\n else {\n dragClsName = 'e-icons e-drag-qb-rule e-hidden';\n }\n var spanDragElement = this.createElement('span', { attrs: { class: dragClsName, 'aria-lable': 'drag handle',\n title: 'drag handle' } });\n fieldElem.appendChild(spanDragElement);\n var filterElem = this.createElement('input', { attrs: { type: 'text', class: 'e-filter-input' } });\n tempElem.appendChild(filterElem);\n fieldElem.appendChild(tempElem);\n tempElem = this.createElement('div', { attrs: { class: 'e-rule-operator' } });\n fieldElem.appendChild(tempElem);\n tempElem = this.createElement('div', { attrs: { class: 'e-rule-value' } });\n fieldElem.appendChild(tempElem);\n tempElem = this.createElement('div', { attrs: { class: 'e-rule-value-delete' } });\n if (this.showButtons.cloneRule) {\n cloneClsName = 'e-clone-rule-btn e-clone-rule e-css e-btn e-small e-round e-icon-btn';\n }\n else {\n cloneClsName = 'e-clone-rule-btn e-clone-rule e-css e-btn e-small e-round e-icon-btn e-button-hide';\n }\n if (this.showButtons.lockRule) {\n lockClsName = 'e-lock-rule-btn e-lock-rule e-css e-btn e-small e-round e-icons e-icon-btn';\n }\n else {\n lockClsName = 'e-lock-rule-btn e-lock-rule e-css e-btn e-small e-round e-icons e-icon-btn e-button-hide';\n }\n var cloneRuleBtnElem = this.createElement('button', { attrs: { title: this.l10n.getConstant('CloneRule'), type: 'button', class: cloneClsName } });\n var spanElement = this.createElement('span', { attrs: { class: 'e-btn-icon e-icons e-copy' } });\n cloneRuleBtnElem.appendChild(spanElement);\n var cloneLockBtnElem = this.createElement('button', { attrs: { title: this.l10n.getConstant('LockRule'), type: 'button', class: lockClsName } });\n spanElement = this.createElement('span', { attrs: { class: 'e-btn-icon e-icons e-unlock' } });\n cloneLockBtnElem.appendChild(spanElement);\n if (this.showButtons.ruleDelete || isNullOrUndefined(this.showButtons.ruleDelete)) {\n clsName = 'e-removerule e-rule-delete e-css e-btn e-small';\n }\n else {\n clsName = 'e-removerule e-rule-delete e-css e-btn e-small e-button-hide';\n }\n var delBtnElem = this.createElement('button', { attrs: { type: 'button', class: clsName } });\n tempElem.appendChild(cloneRuleBtnElem);\n tempElem.appendChild(cloneLockBtnElem);\n tempElem.appendChild(delBtnElem);\n fieldElem.appendChild(tempElem);\n ruleElem.appendChild(fieldElem);\n return ruleElem;\n };\n QueryBuilder.prototype.addGroupElement = function (isGroup, target, condition, isBtnClick, not, isRoot, rule) {\n var _this = this;\n var args = { groupID: target.id.replace(this.element.id + '_', ''), cancel: false, type: 'insertGroup' };\n if (!this.isImportRules && !this.isInitialLoad && !this.prvtEvtTgrDaD) {\n this.trigger('beforeChange', args, function (observedChangeArgs) {\n _this.addGroupSuccess(observedChangeArgs, isGroup, target, condition, isBtnClick, not, isRoot, rule);\n });\n }\n else {\n this.isInitialLoad = false;\n this.addGroupSuccess(args, isGroup, target, condition, isBtnClick, not, isRoot, rule);\n }\n };\n QueryBuilder.prototype.addGroupSuccess = function (args, isGroup, eventTarget, condition, isBtnClick, not, isRoot, rule) {\n var _this = this;\n if (!args.cancel && (this.element.querySelectorAll('.e-group-container').length <= this.maxGroupCount)) {\n var target = eventTarget;\n var dltGroupBtn = void 0;\n var groupID = '';\n if (target.className.indexOf('e-group-container') < 0) {\n groupID = target.querySelector('.e-group-container') && target.querySelector('.e-group-container').id;\n }\n else {\n groupID = target.id;\n }\n if (this.enableSeparateConnector) {\n this.groupElem = this.groupTemplate();\n }\n var groupElem = this.groupElem.cloneNode(true);\n groupElem.setAttribute('id', this.element.id + '_group' + this.groupIdCounter);\n if (this.groupIdCounter === 0 && this.allowDragAndDrop && groupElem.querySelector('.e-drag-qb-rule')) {\n if (groupElem && groupElem.children[0]) {\n groupElem.children[0].classList.add('e-parent-header');\n }\n addClass([groupElem.querySelector('.e-drag-qb-rule')], 'e-hidden');\n }\n if (this.headerTemplate) {\n if (isRoot) {\n isGroup = false;\n groupElem.setAttribute('id', this.element.id + '_group0');\n this.headerTemplateFn(groupElem, not, condition, rule, groupID);\n this.groupIdCounter = 0;\n }\n else {\n this.headerTemplateFn(groupElem, not, condition, rule, groupID);\n }\n }\n this.groupIdCounter++;\n if (!this.headerTemplate) {\n var andInpElem = groupElem.querySelector('.e-btngroup-and');\n var orInpElem = groupElem.querySelector('.e-btngroup-or');\n var andLblElem = groupElem.querySelector('.e-btngroup-and-lbl');\n var orLblElem = groupElem.querySelector('.e-btngroup-or-lbl');\n andInpElem.setAttribute('id', this.element.id + '_and' + this.btnGroupId);\n orInpElem.setAttribute('id', this.element.id + '_or' + this.btnGroupId);\n andInpElem.setAttribute('name', this.element.id + '_and' + this.btnGroupId);\n orInpElem.setAttribute('name', this.element.id + '_and' + this.btnGroupId);\n andLblElem.setAttribute('for', this.element.id + '_and' + this.btnGroupId);\n orLblElem.setAttribute('for', this.element.id + '_or' + this.btnGroupId);\n this.btnGroupId++;\n }\n if (isGroup) {\n var clsName = void 0;\n if (this.showButtons.groupDelete || isNullOrUndefined(this.showButtons.groupDelete)) {\n clsName = 'e-deletegroup';\n }\n else {\n clsName = 'e-deletegroup e-button-hide';\n }\n dltGroupBtn = this.createElement('button', { attrs: { type: 'button', class: clsName } });\n var button = new Button({ iconCss: 'e-icons e-delete-icon', cssClass: 'e-small e-round' });\n button.appendTo(dltGroupBtn);\n dltGroupBtn.setAttribute('title', this.l10n.getConstant('DeleteGroup'));\n rippleEffect(dltGroupBtn, { selector: '.deletegroup' });\n var ruleList = target.querySelector('.e-rule-list');\n var childElems = ruleList.children;\n var grpLen = 0;\n for (var j = 0, jLen = childElems.length; j < jLen; j++) {\n if (childElems[j].className.indexOf('e-group-container') > -1) {\n grpLen += 1;\n }\n }\n if (this.showButtons.cloneGroup && this.cloneGrpBtnClick) {\n if (this.groupIndex === (childElems.length - 1)) {\n ruleList.appendChild(groupElem);\n this.isLastGroup = true;\n }\n else {\n if (this.enableSeparateConnector) {\n var index = 0;\n var tempGroupIndex = this.groupIndex + 1;\n for (var i = 0; i < tempGroupIndex; i++) {\n if (childElems[i].classList.contains('e-rule-container')) {\n tempGroupIndex++;\n index++;\n }\n }\n if (index > 0) {\n index--;\n }\n var idx = this.groupIndex + index + 1;\n childElems[idx].parentNode.insertBefore(groupElem, childElems[idx]);\n }\n else {\n var idx = this.groupIndex + 1;\n childElems[idx].parentNode.insertBefore(groupElem, childElems[idx]);\n }\n this.isMiddleGroup = true;\n }\n }\n else {\n ruleList.appendChild(groupElem);\n }\n var level = this.levelColl[target.id].slice(0);\n level.push(grpLen);\n this.levelColl[groupElem.id] = level;\n if (this.groupIndex > -1) {\n this.refreshLevelColl();\n }\n if (!this.isImportRules) {\n this.isAddSuccess = true;\n this.addGroups([], target.id.replace(this.element.id + '_', ''));\n this.isAddSuccess = false;\n if (isBtnClick && this.addRuleToNewGroups) {\n this.addRuleElement(groupElem, {});\n }\n }\n if (!this.headerTemplate) {\n var lockClsName = '';\n if (this.showButtons.cloneGroup) {\n lockClsName = 'e-clone-grp-btn e-css e-btn e-small e-round e-icons e-icon-btn';\n }\n else {\n lockClsName = 'e-clone-grp-btn e-css e-btn e-small e-round e-icons e-icon-btn e-button-hide';\n }\n var cloneBtnElem = this.createElement('button', { attrs: { title: this.l10n.getConstant('CloneGroup'), type: 'button', class: lockClsName } });\n var spanElement = this.createElement('span', { attrs: { class: 'e-btn-icon e-icons e-copy' } });\n cloneBtnElem.appendChild(spanElement);\n groupElem.querySelector('.e-group-action').appendChild(cloneBtnElem);\n if (this.showButtons.lockGroup) {\n lockClsName = 'e-lock-grp-btn e-css e-btn e-small e-round e-icons e-icon-btn';\n }\n else {\n lockClsName = 'e-lock-grp-btn e-css e-btn e-small e-round e-icons e-icon-btn e-button-hide';\n }\n var lockBtnElem = this.createElement('button', { attrs: { title: this.l10n.getConstant('LockGroup'), type: 'button', class: lockClsName } });\n var lockSpanElement = this.createElement('span', { attrs: { class: 'e-btn-icon e-icons e-unlock' } });\n lockBtnElem.appendChild(lockSpanElement);\n groupElem.querySelector('.e-group-action').appendChild(lockBtnElem);\n groupElem.querySelector('.e-group-action').appendChild(dltGroupBtn);\n }\n }\n else {\n if (!this.headerTemplate) {\n var lockClsName = '';\n if (this.showButtons.lockGroup) {\n lockClsName = 'e-lock-grp-btn e-css e-btn e-small e-round e-icons e-icon-btn';\n }\n else {\n lockClsName = 'e-lock-grp-btn e-css e-btn e-small e-round e-icons e-icon-btn e-button-hide';\n }\n var lockBtnElem = this.createElement('button', { attrs: { title: this.l10n.getConstant('LockGroup'), type: 'button', class: lockClsName } });\n var spanElement = this.createElement('span', { attrs: { class: 'e-btn-icon e-icons e-unlock' } });\n lockBtnElem.appendChild(spanElement);\n groupElem.querySelector('.e-group-action').appendChild(lockBtnElem);\n }\n target.appendChild(groupElem);\n this.levelColl[groupElem.id] = [0];\n }\n if (this.enableNotCondition) {\n if (!this.headerTemplate) {\n var notElem = groupElem.querySelector('.e-qb-toggle');\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var tglBtn = void 0;\n if (this.enableSeparateConnector) {\n tglBtn = new CheckBox({ label: this.l10n.getConstant('NOT'), cssClass: 'e-qb-toggle' });\n }\n else {\n tglBtn = new Button({ content: this.l10n.getConstant('NOT'), cssClass: 'e-btn e-small' });\n }\n tglBtn.appendTo(notElem);\n groupElem.querySelector('.e-btngroup-and-lbl').classList.add('e-not');\n if (this.updatedRule && this.updatedRule.not) {\n addClass([notElem], 'e-active-toggle');\n }\n }\n }\n if (this.enableSeparateConnector && !this.headerTemplate) {\n var andElem = groupElem.querySelector('.e-btngroup-and');\n var orElem = groupElem.querySelector('.e-btngroup-or');\n var btnGroup = groupElem.querySelector('.e-btn-group');\n for (var i = 0; i < btnGroup.childNodes.length; i++) {\n if (groupElem.querySelector('.e-btn-group').childNodes[i].textContent.toLowerCase() === 'not') {\n if (!this.enableNotCondition) {\n btnGroup.childNodes[i].style.display = 'none';\n }\n else {\n btnGroup.childNodes[i].classList.add('e-multiconnector');\n }\n }\n else {\n btnGroup.childNodes[i].style.display = 'none';\n }\n }\n var prevSibling = groupElem.previousElementSibling;\n if (prevSibling) {\n if (isNullOrUndefined(this.headerTemplate)) {\n groupElem.parentElement.insertBefore(this.groupTemplate(true).querySelector('.e-btn-group'), groupElem);\n var notElem = groupElem.previousElementSibling.childNodes[0];\n if (notElem.classList.contains('e-qb-toggle')) {\n notElem.style.display = 'none';\n }\n }\n if (!this.isImportRules) {\n var groupElement = groupElem.previousElementSibling;\n var newAndElem = groupElement.querySelector('.e-btngroup-and');\n var newOrElem = groupElement.querySelector('.e-btngroup-or');\n if (!andElem.checked && !orElem.checked) {\n var nextSibling = groupElem.nextElementSibling;\n if (nextSibling && nextSibling.classList.contains('e-btn-group')) {\n andElem = nextSibling.querySelector('.e-btngroup-and');\n orElem = nextSibling.querySelector('.e-btngroup-or');\n newAndElem.checked = andElem.checked;\n newOrElem.checked = orElem.checked;\n }\n }\n else if (this.enableSeparateConnector) {\n if (andElem.checked) {\n newAndElem.checked = true;\n }\n if (orElem.checked) {\n newOrElem.checked = true;\n }\n }\n }\n }\n }\n this.updatedRule = null;\n if (this.headerTemplate) {\n var args_4 = { requestType: 'header-template-create', ruleID: groupElem.id, condition: condition,\n notCondition: this.enableNotCondition ? not : undefined };\n this.trigger('actionBegin', args_4);\n }\n else {\n if (this.enableSeparateConnector) {\n var conditionBtn_1 = groupElem.querySelector('.e-add-condition-btn');\n var btnObj = new Button({ cssClass: this.element.id + '_addConditionbtn', content: this.l10n.getConstant('AddCondition') });\n btnObj.appendTo(conditionBtn_1);\n btnObj.element.onclick = function () {\n _this.addRuleElement(closest(conditionBtn_1, '.e-group-container'), {});\n };\n var groupBtn_1 = groupElem.querySelector('.e-add-group-btn');\n btnObj = new Button({ cssClass: this.element.id + '_addGroupbtn', content: this.l10n.getConstant('AddGroup') });\n btnObj.appendTo(groupBtn_1);\n btnObj.element.onclick = function () {\n _this.addGroupElement(true, closest(groupBtn_1, '.e-group-container'), '', true);\n };\n }\n else {\n var groupBtn = groupElem.querySelector('.e-add-btn');\n var btnObj = new DropDownButton({\n items: this.items,\n cssClass: 'e-round e-small e-caret-hide e-addrulegroup',\n iconCss: 'e-icons e-add-icon',\n beforeOpen: this.selectBtn.bind(this, groupBtn),\n select: this.selectBtn.bind(this, groupBtn)\n });\n btnObj.appendTo(groupBtn);\n groupBtn.setAttribute('title', this.l10n.getConstant('AddButton'));\n }\n }\n if (!this.isImportRules && !this.prvtEvtTgrDaD) {\n var grpId = target.id.replace(this.element.id + '_', '');\n var chgrpId = groupElem.id.replace(this.element.id + '_', '');\n this.trigger('change', { groupID: grpId, type: 'insertGroup', childGroupID: chgrpId });\n }\n }\n };\n QueryBuilder.prototype.setMultiConnector = function (trgt) {\n if (this.enableSeparateConnector && !this.headerTemplate) {\n if (trgt.previousElementSibling && this.groupElem.querySelector('.e-btn-group')) {\n trgt.parentElement.insertBefore(this.groupTemplate(true).querySelector('.e-btn-group'), trgt);\n var notElem = trgt.previousElementSibling.childNodes[0];\n if (notElem.classList.contains('e-qb-toggle')) {\n notElem.style.display = 'none';\n }\n this.addHeaderDiv(trgt);\n }\n }\n };\n QueryBuilder.prototype.addHeaderDiv = function (elem) {\n var prevRule;\n var prevElem = elem.previousElementSibling.previousElementSibling;\n if (prevElem) {\n if (prevElem.id.indexOf('rule') > -1) {\n prevRule = this.getRule(prevElem);\n }\n else {\n prevRule = this.getGroup(prevElem);\n }\n if (isNullOrUndefined(prevRule.condition)) {\n prevRule.condition = 'and';\n }\n var orElem = elem.previousElementSibling.querySelector('.e-btngroup-or');\n var andElem = elem.previousElementSibling.querySelector('.e-btngroup-and');\n orElem.disabled = false;\n andElem.disabled = false;\n if (prevRule.condition === 'or') {\n orElem.checked = true;\n }\n else {\n andElem.checked = true;\n }\n }\n };\n QueryBuilder.prototype.headerTemplateFn = function (groupElem, not, condition, rule, groupID, isInitialRule) {\n var template;\n var templateID = this.element.id + '_header';\n var args;\n var groupHdr = groupElem.querySelector('.e-group-header');\n if (this.enableSeparateConnector && groupElem.id.indexOf('rule') !== -1) {\n groupHdr = groupElem;\n }\n if (this.headerTemplate) {\n args = { requestType: 'header-template-initialize', ruleID: groupElem.id,\n notCondition: this.enableNotCondition ? not : undefined,\n condition: condition, rule: this.getRuleCollection(rule, true), groupID: groupID };\n this.trigger('actionBegin', args);\n if (this.enableSeparateConnector && groupElem.id.indexOf('rule') !== -1) {\n args.requestType = 'rule-template-create';\n }\n this.headerFn = this.templateParser(this.headerTemplate);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.isReact) {\n template = this.headerFn(args, this, groupElem.id, templateID)[0];\n if (this.enableSeparateConnector && isInitialRule) {\n this.enableSeparateConnectorInitialRule(groupElem, template);\n }\n else if (this.enableSeparateConnector && groupElem.id.indexOf('rule') !== -1) {\n groupHdr.parentElement.insertBefore(template, groupHdr.nextElementSibling);\n }\n else {\n groupHdr.appendChild(template);\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n }\n else if (this.isAngular) {\n var templateColl = this.headerFn(args, this, groupElem.id, templateID);\n template = (templateColl[0].nodeType === 3) ? templateColl[1] : templateColl[0];\n if (this.enableSeparateConnector && isInitialRule) {\n this.enableSeparateConnectorInitialRule(groupElem, template);\n }\n else if (this.enableSeparateConnector && groupElem.id.indexOf('rule') !== -1) {\n groupHdr.parentElement.insertBefore(template, groupHdr.nextElementSibling);\n }\n else {\n groupHdr.appendChild(template);\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n }\n else if (this.isVue3) {\n template = this.headerFn(args, this, groupElem.id, templateID);\n if (this.enableSeparateConnector && isInitialRule) {\n this.enableSeparateConnectorInitialRule(groupElem, template);\n }\n else if (this.enableSeparateConnector && groupElem.id.indexOf('rule') !== -1) {\n groupHdr.parentElement.insertBefore(template, groupHdr.nextElementSibling);\n }\n else {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n append(template, groupHdr);\n }\n }\n else {\n template = this.headerFn(args, this, 'Template', templateID)[0];\n if (this.enableSeparateConnector && isInitialRule) {\n this.enableSeparateConnectorInitialRule(groupElem, template);\n }\n else if (this.enableSeparateConnector && groupElem.id.indexOf('rule') !== -1) {\n groupHdr.parentElement.insertBefore(template, groupHdr.nextElementSibling);\n }\n else {\n groupHdr.appendChild(template);\n }\n }\n this.renderReactTemplates();\n }\n return groupElem;\n };\n QueryBuilder.prototype.enableSeparateConnectorInitialRule = function (groupElem, template) {\n var elem = groupElem.nextElementSibling ? groupElem.nextElementSibling : groupElem;\n var group = elem.closest('.e-group-container');\n if (!groupElem.nextElementSibling && group) {\n group = group.nextElementSibling ? group.nextElementSibling : group;\n }\n if (group) {\n group.parentElement.insertBefore(template, group);\n }\n };\n /**\n * Notify the changes to component.\n *\n * @param {string | number | boolean | Date | string[] | number[] | Date[]} value - 'value' to be passed to update the rule value.\n * @param {Element} element - 'element' to be passed to update the rule.\n * @param {string} type - 'type' to be passed to update the rule .\n * @returns {void}.\n */\n QueryBuilder.prototype.notifyChange = function (value, element, type) {\n var grpElement = closest(element, '.e-group-container');\n var rules = this.getParentGroup(grpElement);\n var ruleElement = closest(element, '.e-rule-container');\n var index = 0;\n if (type === 'not') {\n rules.not = value;\n return;\n }\n if (type === 'condition') {\n if (this.enableSeparateConnector) {\n ruleElement = element.parentElement.previousElementSibling;\n if (ruleElement && ruleElement.classList.contains('e-group-container')) {\n ruleElement = ruleElement.querySelectorAll('.e-rule-container')[ruleElement.querySelectorAll('.e-rule-container').length - 1];\n }\n if (ruleElement && ruleElement.classList.contains('e-rule-container')) {\n rules = this.getRule(ruleElement);\n }\n rules.condition = value;\n }\n else {\n rules.condition = value;\n }\n return;\n }\n while (ruleElement && ruleElement.previousElementSibling !== null) {\n ruleElement = ruleElement.previousElementSibling;\n if (!this.enableSeparateConnector || (this.enableSeparateConnector &&\n ((!this.headerTemplate && !ruleElement.classList.contains('e-btn-group')) ||\n this.headerTemplate && (ruleElement.classList.contains('e-rule-container') ||\n ruleElement.classList.contains('e-group-container'))))) {\n index++;\n }\n }\n var rule = rules.rules[index];\n var column = this.getColumn(rule.field);\n var format = this.getFormat(column.format);\n if (column.type === 'date') {\n if (value instanceof Date) {\n value = this.intl.formatDate(value, format);\n }\n else if (value instanceof Array) {\n for (var i = 0; i < value.length; i++) {\n if (value[i] && value[i] instanceof Date) {\n value[i] = this.intl.formatDate(value[i], format);\n }\n }\n }\n }\n if (column.ruleTemplate) {\n this.templateChange(element, value, type);\n }\n else {\n this.isNotified = true;\n this.updateRules(element, value);\n this.isNotified = false;\n }\n };\n QueryBuilder.prototype.templateChange = function (element, value, type) {\n var grpElem = closest(element, '.e-group-container');\n var eventsArgs;\n var rules = this.getParentGroup(grpElem);\n var ruleElem = closest(element, '.e-rule-container');\n var index = 0;\n if (this.allowValidation) {\n this.validateValue(rules, ruleElem);\n }\n while (ruleElem && ruleElem.previousElementSibling !== null) {\n ruleElem = ruleElem.previousElementSibling;\n if (!this.enableSeparateConnector || (this.enableSeparateConnector &&\n ((!this.headerTemplate && !ruleElem.classList.contains('e-btn-group')) ||\n this.headerTemplate && (ruleElem.classList.contains('e-rule-container') ||\n ruleElem.classList.contains('e-group-container'))))) {\n index++;\n }\n }\n var rule = rules.rules[index];\n if (type === 'field') {\n this.selectedColumn = this.getColumn(value);\n }\n else if (rule) {\n this.selectedColumn = this.getColumn(rule.field);\n }\n var operVal;\n this.previousColumn = this.getColumn(rule.field);\n var beforeRules = this.getValidRules(this.rule);\n if (this.selectedColumn) {\n if (this.selectedColumn.operators) {\n operVal = this.selectedColumn.operators;\n }\n else {\n operVal = this.customOperators[this.selectedColumn.type + 'Operator'];\n }\n }\n var arrOper = ['in', 'notin', 'between', 'notbetween'];\n var prevOper;\n switch (type) {\n case 'field':\n rule.field = value;\n rule.label = this.selectedColumn.label;\n rule.type = this.selectedColumn.type;\n rule.value = '';\n rule.operator = operVal[0].value;\n break;\n case 'operator':\n prevOper = rule.operator;\n rule.operator = value;\n if (arrOper.indexOf(rule.operator) > -1) {\n rule.value = [];\n }\n else if (arrOper.indexOf(prevOper) > -1) {\n rule.value = '';\n }\n break;\n case 'value':\n rule.value = value;\n }\n this.changeRuleTemplate(this.selectedColumn, element);\n this.filterRules(beforeRules, this.getValidRules(this.rule), type);\n if (this.selectedColumn && this.selectedColumn.ruleTemplate) {\n if (type === 'field' || type === 'operator') {\n var grpEle = closest(element, '.e-rule-container');\n this.destroyControls(grpEle, true);\n detach(grpEle.querySelector('.e-rule-field'));\n var ruleElement = this.appendRuleElem(closest(grpEle, '.e-group-container'), this.selectedColumn, 'change', grpEle.id, type, rule);\n if (this.displayMode === 'Vertical' || this.element.className.indexOf('e-device') > -1) {\n ruleElement.className = 'e-rule-container e-vertical-mode';\n }\n else {\n ruleElement.className = 'e-rule-container e-horizontal-mode';\n }\n if (!this.enableSeparateConnector) {\n if (ruleElement.previousElementSibling && ruleElement.previousElementSibling.className.indexOf('e-rule-container') > -1) {\n if (ruleElement.className.indexOf('e-joined-rule') < 0) {\n ruleElement.className += ' e-joined-rule';\n }\n if (ruleElement.previousElementSibling.className.indexOf('e-prev-joined-rule') < 0) {\n ruleElement.previousElementSibling.className += ' e-prev-joined-rule';\n }\n }\n }\n if (ruleElement.previousElementSibling && ruleElement.previousElementSibling.className.indexOf('e-group-container') > -1 &&\n ruleElement.className.indexOf('e-separate-rule') < 0) {\n ruleElement.className += ' e-separate-rule';\n }\n var args = { requestType: 'template-create', action: type, ruleID: grpEle.id,\n fields: this.fields, rule: rule };\n eventsArgs = { groupID: grpElem.id.replace(this.element.id + '_', ''), ruleID: grpEle.id.replace(this.element.id + '_', ''),\n value: rule.field, type: 'field' };\n this.trigger('actionBegin', args);\n this.trigger('change', eventsArgs);\n }\n }\n };\n QueryBuilder.prototype.changeValue = function (i, args) {\n var _this = this;\n var element;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.isNumInput && typeof args.value === 'number') {\n this.isNumInput = false;\n return;\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (args.element && args.element.classList.contains('e-multiselect')) {\n var multiSelectArgs = args;\n element = multiSelectArgs.element;\n }\n else if (args.event) {\n element = args.event.target;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n }\n else if (args.type === 'input' && args.currentTarget) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n element = args.currentTarget;\n }\n else {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n element = args.element;\n }\n if (!element) {\n return;\n }\n if (element.className.indexOf('e-day') > -1 || element.className.indexOf('e-today') > -1 || element.className.indexOf('e-cell') > -1) {\n var calenderArgs = args;\n element = calenderArgs.element;\n }\n var groupElem = closest(element, '.e-group-container');\n var ruleElem = closest(element, '.e-rule-container');\n var groupID = groupElem && groupElem.id.replace(this.element.id + '_', '');\n var ruleID = ruleElem.id.replace(this.element.id + '_', '');\n var dateElement = args;\n var dropDownObj;\n if (dateElement.element && dateElement.element.className.indexOf('e-datepicker') > -1) {\n element = dateElement.element;\n dropDownObj = getComponent(closest(element, '.e-rule-container').querySelector('.e-filter-input'), 'dropdownlist');\n if (dropDownObj) {\n this.selectedColumn = dropDownObj.getDataByValue(dropDownObj.value);\n }\n dropDownObj = getComponent(closest(element, '.e-rule-container').querySelector('.e-filter-input'), 'dropdowntree');\n if (dropDownObj) {\n this.selectedColumn = this.getColumn(dropDownObj.value[0]);\n }\n }\n var value;\n var rbValue;\n if (element.className.indexOf('e-radio') > -1) {\n rbValue = parseInt(element.id.split('valuekey')[1], 10);\n if (this.fieldMode === 'Default') {\n dropDownObj = getComponent(closest(element, '.e-rule-container').querySelector('.e-filter-input'), 'dropdownlist');\n this.selectedColumn = dropDownObj.getDataByValue(dropDownObj.value);\n if (this.selectedColumn.columns) {\n dropDownObj = getComponent(closest(element, '.e-rule-container').querySelector('.e-rule-sub-filter .e-dropdownlist'), 'dropdownlist');\n this.selectedColumn = this.getColumn(dropDownObj.value);\n }\n }\n else {\n dropDownObj = getComponent(closest(element, '.e-rule-container').querySelector('.e-filter-input'), 'dropdowntree');\n this.selectedColumn = this.getColumn(dropDownObj.value[0]);\n }\n if (this.selectedColumn.values) {\n value = this.selectedColumn.values[rbValue];\n }\n else {\n var valColl = [true, false];\n value = valColl[rbValue];\n }\n }\n else if (element.className.indexOf('e-multiselect') > -1) {\n value = getComponent(element, 'multiselect').value;\n }\n else {\n value = args.value;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (args.type === 'input' && args.currentTarget) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n value = Number(args.currentTarget.value);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var elem = args.currentTarget;\n var numericTextBoxObj = getInstance(elem, NumericTextBox);\n var decimalSeparator = getValue('decimal', getNumericObject(this.locale));\n if (isNaN(value) && elem.value.indexOf(decimalSeparator) !== -1) {\n value = this.intl.getNumberParser({ format: 'n' })(elem.value);\n }\n numericTextBoxObj.value = value;\n this.isNumInput = true;\n }\n }\n if (args.name === 'input' && this.immediateModeDelay) {\n window.clearInterval(this.timer);\n this.timer = window.setInterval(function () { _this.filterValue(groupID, ruleID, value, i, element); }, this.immediateModeDelay);\n }\n else {\n this.filterValue(groupID, ruleID, value, i, element);\n }\n };\n QueryBuilder.prototype.filterValue = function (grID, rlID, value, i, ele) {\n var _this = this;\n var eventsArgs = { groupID: grID, ruleID: rlID, value: value, cancel: false, type: 'value' };\n window.clearInterval(this.timer);\n if (!this.isImportRules) {\n this.trigger('beforeChange', eventsArgs, function (observedChangeArgs) {\n _this.changeValueSuccessCallBack(observedChangeArgs, ele, i, grID, rlID);\n });\n }\n else {\n this.changeValueSuccessCallBack(eventsArgs, ele, i, grID, rlID);\n }\n };\n QueryBuilder.prototype.changeValueSuccessCallBack = function (args, element, i, groupID, ruleID) {\n if (!args.cancel) {\n this.updateRules(element, args.value, i);\n if (!this.isImportRules) {\n this.trigger('change', { groupID: groupID, ruleID: ruleID, value: args.value, cancel: false, type: 'value' });\n }\n }\n };\n QueryBuilder.prototype.fieldClose = function (id) {\n if (this.isFieldChange || this.isDestroy) {\n return;\n }\n this.isFieldClose = true;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var ddl = getComponent(id, 'dropdownlist');\n var item = ddl.popupObj.element.querySelector('.e-active');\n var itemData = ddl.getItemData();\n ddl.value = itemData.value;\n var customArgs = { element: ddl.element, value: itemData.value, isInteracted: true,\n previousItemData: this.prevItemData, previousItem: null, item: item, itemData: itemData, event: null, e: null };\n if (ddl.previousValue !== ddl.value) {\n this.changeField(customArgs);\n }\n this.isFieldChange = false;\n };\n QueryBuilder.prototype.changeField = function (args) {\n if (args.isInteracted) {\n if (isNullOrUndefined(args.value)) {\n return;\n }\n this.isFieldChange = true;\n this.prevItemData = args.itemData;\n var fieldElem = closest(args.element, '.e-rule-filter') || closest(args.element, '.e-rule-sub-filter');\n var column = this.fieldMode === 'DropdownTree' ? this.getColumn(args.value[0]) : this.getColumn(args.value);\n if (this.fieldMode === 'DropdownTree' && fieldElem !== null) {\n var ddtElem = fieldElem.querySelector('.e-dropdowntree.e-control');\n var ddt = getComponent(ddtElem, 'dropdowntree');\n if (column) {\n if (column.type === 'object') {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ddt.value = args.oldValue;\n ddt.dataBind();\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (isNullOrUndefined(args.oldValue)) {\n ddtElem.value = '';\n }\n else {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var result = this.getLabelFromColumn(args.oldValue[0]);\n ddtElem.value = result;\n }\n return;\n }\n else {\n if (!isNullOrUndefined(args.value[0])) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ddt.value = args.value[0];\n ddt.dataBind();\n var result = this.getLabelFromColumn(args.value[0]);\n ddtElem.value = result;\n }\n }\n }\n else {\n return;\n }\n }\n this.destroySubFields(fieldElem);\n this.subFieldElem = null;\n this.isNotValueChange = true;\n if (column && column.ruleTemplate) {\n this.templateChange(args.element, column.field, 'field');\n }\n else if (column && column.columns && column.columns[0].ruleTemplate) {\n this.templateChange(args.element, column.columns[0].field, 'field');\n }\n else {\n var groupElem = closest(args.element, '.e-group-container');\n var rules = this.getParentGroup(groupElem);\n var ruleElem = closest(args.element, '.e-rule-container');\n var index = 0;\n while (ruleElem && ruleElem.previousElementSibling !== null) {\n ruleElem = ruleElem.previousElementSibling;\n if (!this.enableSeparateConnector || (this.enableSeparateConnector &&\n ((!this.headerTemplate && !ruleElem.classList.contains('e-btn-group')) ||\n this.headerTemplate && (ruleElem.classList.contains('e-rule-container') ||\n ruleElem.classList.contains('e-group-container'))))) {\n index++;\n }\n }\n rules.rules[index].value = '';\n this.changeRule(rules.rules[index], args);\n }\n }\n };\n QueryBuilder.prototype.changeRule = function (rule, ddlArgs) {\n if (!ddlArgs.itemData) {\n if (this.fieldMode === 'DropdownTree') {\n var ddt = getComponent(ddlArgs.element, 'dropdowntree');\n if (ddt.value == null) {\n return;\n }\n }\n else {\n return;\n }\n }\n var tempRule = {};\n var filterElem = closest(ddlArgs.element, '.e-rule-filter');\n filterElem = filterElem ? filterElem : closest(ddlArgs.element, '.e-rule-sub-filter');\n var ddlObj = getComponent(ddlArgs.element, 'dropdownlist');\n if (this.fieldMode === 'DropdownTree' && filterElem !== null) {\n ddlObj = getComponent(ddlArgs.element, 'dropdowntree');\n }\n var element = closest(ddlArgs.element, '.e-group-container');\n var groupID = element.id.replace(this.element.id + '_', '');\n this.changeFilter(filterElem, ddlObj, groupID, rule, tempRule, ddlArgs);\n };\n QueryBuilder.prototype.changeFilter = function (flt, dl, grID, rl, tmpRl, dArg) {\n var _this = this;\n if (flt) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var ddlValue = void 0;\n if (this.fieldMode === 'DropdownTree') {\n ddlValue = (dl.value[0]);\n }\n else {\n ddlValue = this.isImportRules ? this.GetRootColumnName(dl.value) : dl.value;\n }\n this.selectedColumn = this.getColumn(ddlValue);\n var ruleElem = closest(flt, '.e-rule-container');\n var ruleID = ruleElem.id.replace(this.element.id + '_', '');\n var eventsArgs = { groupID: grID, ruleID: ruleID, selectedField: this.fieldMode === 'DropdownTree' ?\n dl.value[0] : dl.value, cancel: false, type: 'field' };\n if (!this.isImportRules && !this.prvtEvtTgrDaD) {\n this.trigger('beforeChange', eventsArgs, function (observedChangeArgs) {\n _this.fieldChangeSuccess(observedChangeArgs, tmpRl, flt, rl, dArg);\n });\n }\n else {\n this.fieldChangeSuccess(eventsArgs, tmpRl, flt, rl, dArg);\n }\n }\n else {\n var operatorElem = closest(dArg.element, '.e-rule-operator');\n this.changeOperator(flt, operatorElem, dl, grID, rl, tmpRl, dArg);\n }\n };\n QueryBuilder.prototype.changeOperator = function (\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n flt, opr, dl, grID, rl, tmpRl, dArg) {\n var _this = this;\n var ruleElem;\n var ruleID;\n var eventsArgs;\n if (opr) {\n ruleElem = closest(opr, '.e-rule-container');\n ruleID = ruleElem.id.replace(this.element.id + '_', '');\n eventsArgs = { groupID: grID, ruleID: ruleID, selectedIndex: dl.index, cancel: false, type: 'operator' };\n if (!this.isImportRules) {\n this.trigger('beforeChange', eventsArgs, function (observedChangeArgs) {\n _this.operatorChangeSuccess(observedChangeArgs, flt, tmpRl, rl, dArg);\n });\n }\n else {\n this.operatorChangeSuccess(eventsArgs, flt, tmpRl, rl, dArg);\n }\n }\n else {\n this.changeRuleValues(flt, rl, tmpRl, dArg);\n }\n };\n QueryBuilder.prototype.fieldChangeSuccess = function (args, tempRule, filterElem, rule, ddlArgs) {\n var ruleElem = closest(filterElem, '.e-rule-container');\n var operatorElem = closest(ddlArgs.element, '.e-rule-operator');\n var element = closest(ddlArgs.element, '.e-group-container');\n var groupID = element.id.replace(this.element.id + '_', '');\n var ddlObj = getComponent(ddlArgs.element, 'dropdownlist');\n var tooltipElem = ruleElem.querySelectorAll('.e-tooltip.e-input-group');\n for (var i = 0; i < tooltipElem.length; i++) {\n getComponent(tooltipElem[i], 'tooltip').destroy();\n }\n if (!args.cancel) {\n if (isNullOrUndefined(this.selectedColumn)) {\n return;\n }\n tempRule.type = this.selectedColumn.type;\n if (ruleElem.querySelector('.e-template')) {\n rule.value = '';\n }\n if (this.selectedColumn.type === 'object' && this.fieldMode === 'Default') {\n tempRule.type = this.selectedColumn.columns[0].type;\n while (this.selectedColumn.columns) {\n this.createSubFields(filterElem, rule, tempRule, ddlArgs);\n }\n }\n else {\n this.destroySubFields(filterElem);\n this.changeOperator(filterElem, operatorElem, ddlObj, groupID, rule, tempRule, ddlArgs);\n }\n }\n else {\n this.changeOperator(filterElem, operatorElem, ddlObj, groupID, rule, tempRule, ddlArgs);\n }\n };\n QueryBuilder.prototype.destroySubFields = function (filterElem) {\n while (filterElem && filterElem.nextElementSibling.classList.contains('e-rule-sub-filter')) {\n this.destroyControls(filterElem);\n filterElem.nextElementSibling.remove();\n }\n };\n QueryBuilder.prototype.createSubFields = function (filterElem, rule, tempRule, ddlArgs) {\n var subFieldValue = false;\n var fieldElem = closest(filterElem, '.e-rule-field');\n var tempElem = this.createElement('div', { attrs: { class: 'e-rule-sub-filter', id: 'subfilter' + this.subFilterCounter } });\n fieldElem.insertBefore(tempElem, fieldElem.querySelector('.e-rule-operator'));\n var ruleId = closest(tempElem, '.e-rule-container').id;\n var subFieldElem = this.createElement('input', { attrs: { type: 'text', id: ruleId + '_subfilterkey' + this.subFilterCounter } });\n tempElem.appendChild(subFieldElem);\n var height = (this.element.className.indexOf('e-device') > -1) ? '250px' : '200px';\n var ddlField;\n ddlField = {\n dataSource: this.selectedColumn.columns,\n fields: this.fields,\n placeholder: this.l10n.getConstant('SelectField'),\n popupHeight: ((this.selectedColumn.columns.length > 5) ? height : 'auto'),\n change: this.changeField.bind(this),\n index: 0,\n open: this.popupOpen.bind(this, false)\n };\n if (this.fieldModel) {\n ddlField = __assign({}, ddlField, this.fieldModel);\n }\n var dropDownList = new DropDownList(ddlField);\n dropDownList.appendTo('#' + ruleId + '_subfilterkey' + this.subFilterCounter);\n if (this.isImportRules || (this.previousColumn && this.previousColumn.ruleTemplate &&\n this.GetRootColumnName(rule.field) === this.GetRootColumnName(this.previousColumn.field))) {\n var subField = this.selectedColumn.columns;\n for (var i = 0; i < subField.length; i++) {\n if (rule.field === subField[i].field || rule.field.indexOf(subField[i].field + this.separator) > -1) {\n dropDownList.value = subField[i].field;\n this.selectedColumn = subField[i];\n subFieldValue = true;\n break;\n }\n }\n }\n this.subFilterCounter++;\n this.subFieldElem = subFieldElem;\n // eslint-disable-next-line\n ddlArgs.itemData = ddlArgs.itemData;\n if (!subFieldValue && this.selectedColumn.columns) {\n if (!subFieldValue && this.isImportRules) {\n dropDownList.value = null;\n }\n this.selectedColumn = this.selectedColumn.columns[0];\n }\n this.previousColumn = this.selectedColumn;\n if (!this.selectedColumn.columns) {\n this.changeRuleValues(tempElem, rule, tempRule, ddlArgs);\n }\n };\n QueryBuilder.prototype.operatorChangeSuccess = function (eventsArgs, filterElem, tempRule, rule, ddlArgs) {\n if (!eventsArgs.cancel) {\n var operatorElem = closest(ddlArgs.element, '.e-rule-operator');\n var valElem = operatorElem.nextElementSibling;\n var dropDownObj = getComponent(ddlArgs.element, 'dropdownlist');\n var prevOper = rule.operator ? rule.operator.toString().toLowerCase() : '';\n tempRule.operator = dropDownObj.value.toString();\n var currOper = tempRule.operator.toLowerCase();\n if (tempRule.operator.toLowerCase().indexOf('between') > -1 || (tempRule.operator.toLowerCase().indexOf('in') > -1\n && tempRule.operator.toLowerCase().indexOf('contains') < 0)) {\n filterElem = operatorElem.previousElementSibling;\n tempRule.type = rule.type;\n if (tempRule.operator.toLowerCase().indexOf('in') < 0 || prevOper.indexOf('in') < 0) {\n rule.value = [];\n }\n }\n else if (typeof rule.value === 'object' && rule.value !== null) {\n rule.value = rule.value.length > 0 ? rule.value[0] : rule.type === 'number' ? 0 : '';\n }\n if (ddlArgs.previousItemData) {\n var prevValue = ddlArgs.previousItemData.value.toString().toLowerCase();\n if ((prevValue.indexOf('between') > -1 || (prevValue.indexOf('in') > -1 || (prevValue.indexOf('null') > -1)\n || (prevValue.indexOf('empty') > -1)) && prevValue.indexOf('contains') < 0)) {\n filterElem = operatorElem.previousElementSibling;\n tempRule.type = rule.type;\n }\n }\n if ((prevOper.indexOf('in') > -1 && prevOper.indexOf('in') < 5) && (currOper.indexOf('in') > -1\n && currOper.indexOf('in') < 5)) {\n filterElem = null;\n }\n if (tempRule.operator.indexOf('null') > -1 || (tempRule.operator.indexOf('empty') > -1)) {\n var parentElem = operatorElem.parentElement.querySelector('.e-rule-value');\n var tooltipElem = parentElem.querySelector('.e-tooltip.e-input-group');\n if (tooltipElem) {\n getComponent(tooltipElem, 'tooltip').destroy();\n }\n removeClass([parentElem], 'e-show');\n addClass([parentElem], 'e-hide');\n }\n if (valElem && this.getColumn(rule.field).template) {\n filterElem = operatorElem.previousElementSibling;\n }\n if (valElem.children.length === 0) {\n filterElem = operatorElem.previousElementSibling;\n }\n this.changeRuleValues(filterElem, rule, tempRule, ddlArgs);\n }\n };\n QueryBuilder.prototype.changeRuleValues = function (filterElem, rule, tempRule, ddlArgs) {\n var operatorElem = closest(ddlArgs.element, '.e-rule-operator');\n var isSub;\n var ddlObj;\n var operatorList;\n var oprElem;\n if (filterElem) {\n operatorElem = filterElem.nextElementSibling;\n if (filterElem.classList.contains('e-rule-sub-filter')) {\n tempRule.type = this.selectedColumn.type;\n isSub = operatorElem.classList.contains('e-rule-sub-filter');\n operatorElem = isSub ? operatorElem.nextElementSibling : operatorElem;\n }\n addClass([operatorElem], 'e-operator');\n if (operatorElem.childElementCount) {\n ddlObj = getComponent(operatorElem.querySelector('.e-dropdownlist'), 'dropdownlist');\n tempRule.operator = ddlObj.value;\n var fieldObj = void 0;\n if (this.fieldMode === 'DropdownTree') {\n fieldObj = getComponent(filterElem.querySelector('.e-dropdowntree'), 'dropdowntree');\n }\n else {\n fieldObj = getComponent(filterElem.querySelector('.e-dropdownlist'), 'dropdownlist');\n }\n tempRule.type = this.fieldMode === 'DropdownTree' ? this.getColumn(fieldObj.value[0]).type :\n this.getColumn(fieldObj.value).type;\n var itemData = ddlArgs.itemData;\n if (ddlObj.value !== '') {\n this.renderValues(operatorElem, itemData, ddlArgs.previousItemData, true, rule, tempRule, ddlArgs.element);\n }\n }\n else {\n var ruleId = closest(operatorElem, '.e-rule-container').id;\n oprElem = this.createElement('input', { attrs: { type: 'text', id: ruleId + '_operatorkey' } });\n operatorElem.appendChild(oprElem);\n if (this.selectedColumn.operators) {\n operatorList = this.selectedColumn.operators;\n }\n else if (ddlArgs.itemData) {\n operatorList = this.customOperators[this.selectedColumn.type + 'Operator'];\n }\n var height = (this.element.className.indexOf('e-device') > -1) ? '250px' : '200px';\n var operator_2;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n operatorList.forEach(function (obj) {\n if ('value' in obj && typeof obj.value === 'string' && obj.value.toLowerCase() === rule.operator.toLowerCase()) {\n operator_2 = obj.value;\n }\n });\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var value = operator_2 ? operator_2 : operatorList[0].value;\n var ddlIdx = 0;\n if (!this.autoSelectOperator) {\n value = '';\n ddlIdx = -1;\n }\n if (this.isImportRules || (this.ruleIndex > -1 || this.groupIndex > -1 || this.prvtEvtTgrDaD)) {\n value = rule ? (rule.operator ? rule.operator : value) : value;\n }\n var ddlOperator = void 0;\n ddlOperator = {\n dataSource: operatorList,\n fields: { text: 'key', value: 'value' },\n placeholder: this.l10n.getConstant('SelectOperator'),\n popupHeight: ((operatorList.length > 5) ? height : 'auto'),\n change: this.changeField.bind(this),\n index: ddlIdx,\n value: value,\n open: this.popupOpen.bind(this, false)\n };\n if (this.operatorModel) {\n ddlOperator = __assign({}, ddlOperator, this.operatorModel);\n }\n var dropDownList = new DropDownList(ddlOperator);\n dropDownList.appendTo('#' + ruleId + '_operatorkey');\n tempRule.operator = (rule && rule.operator !== '' && !isNullOrUndefined(rule.operator)) ? rule.operator : operatorList[0].value;\n if (this.isImportRules) {\n tempRule.type = this.selectedColumn.type;\n tempRule.operator = rule.operator;\n }\n if (!isNullOrUndefined(value) && value !== '') {\n this.renderValues(operatorElem, this.selectedColumn, ddlArgs.previousItemData, false, rule, tempRule, ddlArgs.element);\n }\n else if (this.autoSelectField && this.autoSelectOperator) {\n this.renderValues(operatorElem, this.selectedColumn, ddlArgs.previousItemData, false, rule, tempRule, ddlArgs.element);\n }\n }\n }\n if (!this.isImportRules) {\n this.updateRules(ddlArgs.element, ddlArgs.item);\n }\n };\n QueryBuilder.prototype.popupOpen = function (isField, args) {\n if (this.enableRtl) {\n addClass([args.popup.element], 'e-rtl');\n }\n if (isField) {\n this.isFieldClose = false;\n }\n };\n QueryBuilder.prototype.destroyControls = function (target, isRuleTemplate) {\n var element = isRuleTemplate ? target : target.nextElementSibling;\n var inputElement = element.querySelectorAll('input.e-control');\n var divElement = element.querySelectorAll('div.e-control:not(.e-handle)');\n var columns = this.columns;\n for (var i = 0, len = inputElement.length; i < len; i++) {\n if (inputElement[i].classList.contains('e-textbox')) {\n getComponent(inputElement[i], 'textbox').destroy();\n detach(select('input#' + inputElement[i].id, element));\n }\n else if (inputElement[i].classList.contains('e-dropdownlist')) {\n if (this.allowValidation && inputElement[i].parentElement.className.indexOf('e-tooltip') > -1) {\n getComponent(inputElement[i].parentElement, 'tooltip').destroy();\n }\n getComponent(inputElement[i], 'dropdownlist').destroy();\n }\n else if (inputElement[i].classList.contains('e-radio')) {\n getComponent(inputElement[i], 'radio').destroy();\n }\n else if (inputElement[i].classList.contains('e-numerictextbox')) {\n getComponent(inputElement[i], 'numerictextbox').destroy();\n detach(select('input#' + inputElement[i].id, element));\n }\n else if (inputElement[i].classList.contains('e-datepicker')) {\n getComponent(inputElement[i], 'datepicker').destroy();\n }\n else if (inputElement[i].classList.contains('e-multiselect')) {\n getComponent(inputElement[i], 'multiselect').destroy();\n }\n else if (inputElement[i].className.indexOf('e-template') > -1) {\n var clsName = inputElement[i].className;\n for (var j = 0, jLen = columns.length; j < jLen; j++) {\n if (columns[j].template && clsName.indexOf(columns[j].field) > -1) {\n this.templateDestroy(columns[j], inputElement[i].id);\n break;\n }\n }\n }\n if (document.getElementById(inputElement[i].id)) {\n detach(inputElement[i]);\n }\n }\n for (var i = 0, len = divElement.length; i < len; i++) {\n if (divElement[i].className.indexOf('e-template') > -1) {\n var clsName = divElement[i].className;\n for (var j = 0, jLen = columns.length; j < jLen; j++) {\n if (columns[j].template && clsName.indexOf(columns[j].field) > -1) {\n this.templateDestroy(columns[j], divElement[i].id);\n break;\n }\n }\n }\n detach(divElement[i]);\n }\n var templateElement = element.querySelectorAll('.e-template:not(.e-control)');\n for (var i = 0, len = templateElement.length; i < len; i++) {\n detach(templateElement[i]);\n }\n };\n QueryBuilder.prototype.templateDestroy = function (column, elemId) {\n var template;\n if (typeof column.template !== 'string' || column.template.destroy === undefined) {\n template = column.template;\n }\n else {\n return;\n }\n var temp = template.destroy;\n if (template.destroy) {\n var templateElements = void 0;\n if (document.getElementById(elemId)) {\n templateElements = closest(document.getElementById(elemId), '.e-rule-field').querySelectorAll('.e-template');\n }\n if (typeof temp === 'string') {\n temp = getValue(temp, window);\n temp({ field: column.field, elementId: elemId, elements: templateElements });\n }\n else {\n template.destroy({ field: column.field, elementId: elemId, elements: templateElements });\n }\n }\n };\n /**\n * Return values bound to the column.\n *\n * @param {string} field - 'field' to be passed to get the field values.\n * @returns {object[]} - Values bound to the column\n */\n QueryBuilder.prototype.getValues = function (field) {\n var original = {};\n var result = [];\n var value;\n var fieldColl = [];\n if (this.separator.length > 0) {\n fieldColl = field.split(this.separator);\n }\n var dataSource = this.dataColl;\n if (this.dataColl[1]) {\n for (var i = 0, iLen = dataSource.length; i < iLen; i++) {\n var data = {};\n if (fieldColl.length > 1) {\n var dataObj = dataSource[i];\n var fieldStr = void 0;\n for (var j = 0, jLen = fieldColl.length; j < jLen; j++) {\n fieldStr = fieldColl[j];\n if (fieldColl.length === (j + 1)) {\n value = dataObj[\"\" + fieldStr];\n if (Number(dataObj[\"\" + fieldStr]) === dataObj[\"\" + fieldStr] && dataObj[\"\" + fieldStr] % 1 !== 0) {\n value = dataObj[\"\" + fieldStr].toString();\n }\n }\n else {\n dataObj = dataObj[\"\" + fieldStr];\n }\n }\n }\n else {\n value = dataSource[i][\"\" + field];\n if (Number(dataSource[i][\"\" + field]) === dataSource[i][\"\" + field] && dataSource[i][\"\" + field] % 1 !== 0) {\n value = dataSource[i][\"\" + field].toString();\n }\n }\n if (!(value in original)) {\n original[\"\" + value] = 1;\n if (fieldColl.length > 1) {\n this.createNestedObject(data, fieldColl, value);\n }\n else {\n data[\"\" + field] = value;\n }\n result.push(data);\n }\n }\n }\n return result;\n };\n QueryBuilder.prototype.createNestedObject = function (obj, fieldColl, value) {\n var key;\n var lastIndex = fieldColl.length - 1;\n for (var k = 0; k < lastIndex; ++k) {\n key = fieldColl[k];\n if (!(key in obj)) {\n obj[\"\" + key] = {};\n }\n obj = obj[\"\" + key];\n }\n obj[fieldColl[lastIndex]] = value;\n };\n QueryBuilder.prototype.getDistinctValues = function (dataSource, field) {\n var original = {};\n var result = [];\n var nest = [];\n var value = '';\n var isNested = field.indexOf(this.separator);\n var _loop_2 = function (i, iLen) {\n if (isNested === 0) {\n value = dataSource[i][\"\" + field];\n }\n else {\n nest = field.split(this_2.separator);\n // eslint-disable-next-line @typescript-eslint/tslint/config\n nest.forEach(function (element) {\n if (value) {\n value = value[\"\" + element];\n }\n else {\n value = dataSource[i][\"\" + element];\n }\n });\n }\n if (Number(dataSource[i][\"\" + field]) === dataSource[i][\"\" + field] && dataSource[i][\"\" + field] % 1 !== 0) {\n value = dataSource[i][\"\" + field].toString();\n }\n var data = {};\n if (!(value in original)) {\n original[\"\" + value] = 1;\n if (isNested === 0) {\n data[\"\" + field] = value;\n }\n else {\n data[nest[nest.length - 1]] = value;\n }\n result.push(data);\n }\n };\n var this_2 = this;\n for (var i = 0, iLen = dataSource.length; i < iLen; i++) {\n _loop_2(i, iLen);\n }\n return result;\n };\n QueryBuilder.prototype.renderMultiSelect = function (rule, parentId, i, selectedValue, values) {\n var isFetched = false;\n var ds;\n var isValues = false;\n this.isGetNestedData = false;\n if (this.dataColl[1]) {\n if (Object.keys(this.dataColl[1]).indexOf(rule.field) > -1) {\n isFetched = true;\n ds = this.getDistinctValues(this.dataColl, rule.field);\n }\n }\n isFetched = rule.columns ? false : isFetched;\n if (!this.dataColl.length && values.length) {\n isValues = true;\n }\n var multiSelectValue;\n multiSelectValue = {\n dataSource: isValues ? values : (isFetched ? ds : this.dataManager),\n query: new Query([rule.field]),\n fields: { text: this.selectedRule.field, value: this.selectedRule.field },\n placeholder: this.l10n.getConstant('SelectValue'),\n value: selectedValue,\n mode: 'CheckBox',\n width: '100%',\n change: this.changeValue.bind(this, i),\n close: this.closePopup.bind(this, i),\n actionBegin: this.multiSelectOpen.bind(this, parentId + '_valuekey' + i),\n open: this.popupOpen.bind(this, false)\n };\n if (this.valueModel && this.valueModel.multiSelectModel) {\n multiSelectValue = __assign({}, multiSelectValue, this.valueModel.multiSelectModel);\n }\n var multiSelectObj = new MultiSelect(multiSelectValue);\n multiSelectObj.appendTo('#' + parentId + '_valuekey' + i);\n this.updateRules(multiSelectObj.element, selectedValue, 0);\n };\n QueryBuilder.prototype.multiSelectOpen = function (parentId, args) {\n if (this.dataSource instanceof DataManager) {\n var element = document.getElementById(parentId);\n var dropDownObj = getComponent(closest(element, '.e-rule-container').querySelector('.e-filter-input'), 'dropdownlist');\n this.selectedColumn = dropDownObj.getDataByValue(dropDownObj.value);\n var value = this.selectedColumn.field;\n var isFetched = false;\n if (this.dataColl[1]) {\n if (Object.keys(this.dataColl[1]).indexOf(value) > -1) {\n isFetched = true;\n }\n var isNest = value.indexOf(this.separator);\n if (isNest !== 0 && this.isGetNestedData) {\n isFetched = true;\n }\n }\n if (!isFetched) {\n args.cancel = true;\n this.bindMultiSelectData(element, value);\n }\n }\n };\n QueryBuilder.prototype.bindMultiSelectData = function (element, value) {\n this.getMultiSelectData(element, value);\n };\n QueryBuilder.prototype.getMultiSelectData = function (element, value) {\n var _this = this;\n var dummyData;\n var deferred = new Deferred();\n var data = this.dataManager.executeQuery(new Query().select(value));\n var multiselectObj = getComponent(element, 'multiselect');\n multiselectObj.hideSpinner();\n this.createSpinner(closest(element, '.e-multi-select-wrapper').parentElement);\n showSpinner(closest(element, '.e-multi-select-wrapper').parentElement);\n data.then(function (e) {\n if (e.actual && e.actual.result) {\n dummyData = e.actual.result;\n }\n else {\n dummyData = e.result;\n }\n _this.dataColl = extend(_this.dataColl, dummyData, [], true);\n multiselectObj.dataSource = _this.getDistinctValues(_this.dataColl, value);\n _this.isGetNestedData = true;\n hideSpinner(closest(element, '.e-multi-select-wrapper').parentElement);\n }).catch(function (e) {\n deferred.reject(e);\n });\n };\n QueryBuilder.prototype.createSpinner = function (element) {\n var spinnerElem = this.createElement('span', { attrs: { class: 'e-qb-spinner' } });\n element.appendChild(spinnerElem);\n createSpinner({ target: spinnerElem, width: Browser.isDevice ? '16px' : '14px' });\n };\n QueryBuilder.prototype.closePopup = function (i, args) {\n var element = document.getElementById(args.popup.element.id.replace('_popup', ''));\n if (element) {\n var value = getComponent(element, 'multiselect').value;\n this.updateRules(element, value, i);\n }\n };\n QueryBuilder.prototype.processTemplate = function (target, itemData, rule, tempRule) {\n var container = closest(target, '.e-rule-container');\n var tempElements = container.querySelectorAll('.e-template');\n var filterElem = container.querySelector('.e-rule-filter .e-filter-input');\n var ddlObj = this.fieldMode === 'DropdownTree' ? getComponent(filterElem, 'dropdowntree')\n : getComponent(container.querySelector('.e-rule-filter .e-filter-input'), 'dropdownlist');\n var column = this.fieldMode === 'DropdownTree' ? this.getColumn(ddlObj.value[0]) : this.getColumn(ddlObj.value);\n if (typeof itemData.template === 'string' || itemData.template.write === undefined) {\n var args = { rule: rule, ruleID: container.id, operator: tempRule.operator, field: column.field,\n requestType: 'value-template-create' };\n this.trigger('actionBegin', args);\n }\n else {\n var template = itemData.template;\n if (typeof template.write === 'string') {\n getValue(template.write, window)({ elements: tempElements.length > 1 ? tempElements : tempElements[0], values: rule.value,\n operator: tempRule.operator, field: column.field, dataSource: column.values });\n }\n else if (typeof itemData.template !== 'function') {\n itemData.template.write({ elements: tempElements.length > 1 ? tempElements : tempElements[0],\n values: rule.value, operator: tempRule.operator, field: column.field, dataSource: column.values });\n }\n }\n };\n QueryBuilder.prototype.getItemData = function (parentId) {\n var fieldObj = getComponent(document.getElementById(parentId + '_filterkey'), 'dropdownlist');\n if (this.fieldMode === 'DropdownTree') {\n fieldObj = getComponent(document.getElementById(parentId + '_filterkey'), 'dropdowntree');\n }\n return this.fieldMode === 'DropdownTree' ? this.getColumn(fieldObj.value[0]) : this.getColumn(fieldObj.value);\n };\n QueryBuilder.prototype.setDefaultValue = function (parentId, isArryValue, isNumber) {\n var itemData = this.getItemData(parentId);\n if (isNullOrUndefined(itemData.value)) {\n return isNumber ? isArryValue ? [0, 0] : 0 : isArryValue ? [] : '';\n }\n if (isArryValue) {\n if (!(itemData.value instanceof Array)) {\n return [itemData.value];\n }\n }\n else {\n if (itemData.value instanceof Array) {\n return itemData.value[0];\n }\n }\n return itemData.value;\n };\n QueryBuilder.prototype.renderStringValue = function (parentId, rule, operator, idx, ruleValElem) {\n var selectedVal;\n var columnData = this.getItemData(parentId);\n var selectedValue;\n var isTemplate = (typeof columnData.template === 'string');\n if (this.isImportRules || this.ruleIndex > -1 || this.groupIndex > -1 || this.isPublic || isTemplate || rule.value !== '') {\n selectedValue = rule.value;\n }\n else {\n selectedValue = this.setDefaultValue(parentId, false, false);\n }\n if ((operator === 'in' || operator === 'notin') && (this.dataColl.length || columnData.values)) {\n selectedVal = (this.isImportRules || this.ruleIndex > -1 || this.groupIndex > -1 || this.isPublic) ? rule.value :\n this.setDefaultValue(parentId, true, false);\n this.renderMultiSelect(columnData, parentId, idx, selectedVal, columnData.values);\n if (this.displayMode === 'Vertical' || this.element.className.indexOf('e-device') > -1) {\n ruleValElem.style.width = '100%';\n }\n else {\n ruleValElem.style.width = null;\n ruleValElem.style.minWidth = '200px';\n }\n }\n else {\n if (operator === 'in' || operator === 'notin') {\n selectedVal = (this.isImportRules || this.ruleIndex > -1 || this.groupIndex > -1) ? rule.value :\n this.setDefaultValue(parentId, true, false);\n selectedValue = selectedVal.join(',');\n }\n var txtBox = void 0;\n txtBox = {\n placeholder: this.l10n.getConstant('SelectValue'),\n input: this.changeValue.bind(this, idx)\n };\n if (this.valueModel && this.valueModel.textBoxModel) {\n txtBox = __assign({}, txtBox, this.valueModel.textBoxModel);\n }\n var inputobj = new TextBox(txtBox);\n inputobj.appendTo('#' + parentId + '_valuekey' + idx);\n inputobj.value = selectedValue;\n inputobj.dataBind();\n }\n };\n QueryBuilder.prototype.renderNumberValue = function (parentId, rule, operator, idx, ruleValElem, itemData, length) {\n var columnData = this.getItemData(parentId);\n var isTemplate = (typeof columnData.template === 'string');\n var selectedVal = (this.isImportRules || this.ruleIndex > -1 || this.groupIndex > -1 || this.isPublic || isTemplate ||\n typeof rule.value === 'number') ? rule.value : this.setDefaultValue(parentId, false, true);\n if ((operator === 'in' || operator === 'notin') && (this.dataColl.length || columnData.values)) {\n selectedVal = (this.isImportRules || this.ruleIndex > -1 || this.groupIndex > -1 || this.isPublic) ? rule.value :\n this.setDefaultValue(parentId, true, false);\n this.renderMultiSelect(columnData, parentId, idx, selectedVal, columnData.values);\n if (this.element.className.indexOf('e-device') > -1 || this.displayMode === 'Vertical') {\n ruleValElem.style.width = '100%';\n }\n else {\n ruleValElem.style.minWidth = '200px';\n ruleValElem.style.width = null;\n }\n }\n else if (operator === 'in' || operator === 'notin') {\n selectedVal = (this.isImportRules || this.ruleIndex > -1 || this.groupIndex > -1) ? rule.value :\n this.setDefaultValue(parentId, true, false);\n var selVal = selectedVal.join(',');\n var txtInp = void 0;\n txtInp = {\n placeholder: this.l10n.getConstant('SelectValue'),\n input: this.changeValue.bind(this, idx)\n };\n if (this.valueModel && this.valueModel.textBoxModel) {\n txtInp = __assign({}, txtInp, this.valueModel.textBoxModel);\n }\n var input = new TextBox(txtInp);\n input.appendTo('#' + parentId + '_valuekey' + idx);\n input.value = selVal;\n input.dataBind();\n }\n else {\n itemData = columnData;\n var min = (itemData.validation && itemData.validation.min) ? itemData.validation.min : 0;\n var max = (itemData.validation && itemData.validation.max) ? itemData.validation.max : Number.MAX_VALUE;\n var format = itemData.format ? itemData.format : 'n';\n if (length > 1 && rule) {\n selectedVal = rule.value[idx] ? rule.value[idx] : this.setDefaultValue(parentId, true, true);\n }\n var numericTxt = void 0;\n numericTxt = {\n value: (selectedVal instanceof Array) ? selectedVal[idx] : selectedVal,\n format: format, min: min, max: max, width: '100%',\n step: itemData.step ? itemData.step : 1,\n change: this.changeValue.bind(this, idx)\n };\n if (this.valueModel && this.valueModel.numericTextBoxModel) {\n numericTxt = __assign({}, numericTxt, this.valueModel.numericTextBoxModel);\n }\n var numeric = new NumericTextBox(numericTxt);\n numeric.appendTo('#' + parentId + '_valuekey' + idx);\n numeric.element.setAttribute('aria-label', itemData.label + ' ' + 'Value');\n numeric.element.oninput = this.changeValue.bind(this, idx);\n }\n };\n QueryBuilder.prototype.processValueString = function (value, type) {\n var numArr = [];\n var strArr = value.split(',');\n if (type === 'string') {\n return strArr;\n }\n else {\n for (var k = 0, kLen = strArr.length; k < kLen; k++) {\n numArr.push(Number(strArr[k]));\n }\n return numArr;\n }\n };\n QueryBuilder.prototype.parseDate = function (value, format) {\n var formatOpt;\n var selectedValue;\n if (format) {\n var dParser = this.intl.getDateParser({ skeleton: 'full', type: 'dateTime' });\n formatOpt = this.getFormat(format);\n selectedValue = dParser(value);\n if (isNullOrUndefined(selectedValue)) {\n selectedValue = this.intl.parseDate(value, formatOpt);\n }\n }\n else {\n selectedValue = new Date(value);\n }\n return selectedValue;\n };\n QueryBuilder.prototype.renderControls = function (target, itemData, rule, tempRule, isRendered) {\n addClass([target.parentElement.querySelector('.e-rule-value')], 'e-value');\n removeClass([target.parentElement.querySelector('.e-rule-value')], 'e-hide');\n addClass([target.parentElement.querySelector('.e-rule-value')], 'e-show');\n if (itemData.template && (itemData.template.create || isRendered)) {\n this.processTemplate(target, itemData, rule, tempRule);\n }\n else {\n var length_1;\n if (tempRule.type === 'boolean') {\n length_1 = this.selectedColumn.values ? this.selectedColumn.values.length : 2;\n }\n else {\n length_1 = tempRule.operator && tempRule.operator.toString().toLowerCase().indexOf('between') > -1 ? 2 : 1;\n }\n var parentId = closest(target, '.e-rule-container').id;\n var ruleValElem = void 0;\n var operator = tempRule.operator.toString();\n if (target.className.indexOf('e-rule-operator') > -1 || target.className.indexOf('e-rule-filter') > -1) {\n ruleValElem = target.parentElement.querySelector('.e-rule-value');\n if (this.element.className.indexOf('e-device') > -1 || this.displayMode === 'Vertical') {\n ruleValElem.style.width = '100%';\n }\n else {\n if (operator !== 'in' && operator !== 'notin') {\n addClass([ruleValElem], 'e-custom-value');\n }\n else {\n removeClass([ruleValElem], 'e-custom-value');\n }\n }\n for (var i = 0; i < length_1; i++) {\n switch (tempRule.type) {\n case 'string':\n {\n this.renderStringValue(parentId, rule, operator, i, ruleValElem);\n }\n break;\n case 'number':\n {\n this.renderNumberValue(parentId, rule, operator, i, ruleValElem, itemData, length_1);\n }\n break;\n case 'boolean':\n this.processBoolValues(itemData, rule, parentId, i);\n break;\n case 'date':\n {\n var selectedValue = new Date();\n var selVal = void 0;\n var column = void 0;\n var format = itemData.format;\n var datepick = void 0;\n var datePicker = void 0;\n var place = this.l10n.getConstant('SelectValue');\n var isTemplate = (typeof itemData.template === 'string');\n if (rule.value && !isNullOrUndefined(format)) {\n selVal = (length_1 > 1) ? rule.value[i] : rule.value;\n selectedValue = this.parseDate(selVal, format) || new Date();\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (!itemData.field && !itemData.key && itemData.value) {\n if (itemData.value instanceof Date) {\n selectedValue = itemData.value;\n }\n else {\n selectedValue = this.parseDate(itemData.value, itemData.format);\n }\n }\n if (!itemData.format && rule && rule.field !== '') {\n column = this.getColumn(rule.field);\n format = column.format;\n }\n if ((this.isImportRules || this.isPublic || isTemplate) && rule) {\n column = this.getColumn(rule.field);\n format = column.format;\n if (rule.value) {\n selVal = (length_1 > 1) ? rule.value[i] : rule.value;\n selectedValue = this.parseDate(selVal, column.format);\n }\n else {\n selectedValue = rule.value;\n }\n }\n if (format) {\n var formatObj = this.getFormat(format);\n if (formatObj.skeleton) {\n datePicker = {\n locale: this.getLocale(), value: selectedValue,\n placeholder: place, format: formatObj, change: this.changeValue.bind(this, i)\n };\n if (this.valueModel && this.valueModel.datePickerModel) {\n datePicker = __assign({}, datePicker, this.valueModel.datePickerModel);\n }\n datepick = new DatePicker(datePicker);\n }\n else {\n datePicker = {\n value: selectedValue, locale: this.getLocale(), placeholder: place,\n format: formatObj.format, change: this.changeValue.bind(this, i)\n };\n if (this.valueModel && this.valueModel.datePickerModel) {\n datePicker = __assign({}, datePicker, this.valueModel.datePickerModel);\n }\n datepick = new DatePicker(datePicker);\n }\n }\n else {\n datePicker = {\n locale: this.getLocale(), value: selectedValue,\n placeholder: place, change: this.changeValue.bind(this, i)\n };\n if (this.valueModel && this.valueModel.datePickerModel) {\n datePicker = __assign({}, datePicker, this.valueModel.datePickerModel);\n }\n datepick = new DatePicker(datePicker);\n }\n datepick.appendTo('#' + parentId + '_valuekey' + i);\n if (!rule.value) {\n var elem = document.getElementById(parentId + '_valuekey' + i);\n this.updateRules(elem, selectedValue, null, this.isNotValueChange);\n this.isNotValueChange = false;\n }\n }\n break;\n }\n }\n }\n }\n };\n QueryBuilder.prototype.processBoolValues = function (itemData, rule, parentId, i) {\n var isCheck = false;\n var value;\n var orgValue;\n if (isNullOrUndefined(rule.type) && itemData) {\n rule.type = itemData.type;\n }\n var label;\n if (itemData.values) {\n var values = itemData.values;\n if (rule.type === 'boolean' && !isNullOrUndefined(rule.value)) {\n isCheck = values[i].toLowerCase() === rule.value.toString().toLowerCase();\n }\n else if (itemData.value) {\n isCheck = values[i].toLowerCase() === itemData.value.toString().toLowerCase();\n }\n else if (i === 0) {\n isCheck = true;\n }\n orgValue = value = label = values[i];\n }\n else {\n var values = [true, false];\n if (rule.type === 'boolean' && !isNullOrUndefined(rule.value)) {\n isCheck = values[i].toString().toLowerCase() === rule.value.toString().toLowerCase();\n }\n else if (itemData.value) {\n isCheck = values[i].toString().toLowerCase() === itemData.value.toString().toLowerCase();\n }\n else if (i === 0) {\n if (typeof rule.value === 'boolean') {\n isCheck = rule.value ? true : false;\n }\n else {\n isCheck = true;\n }\n }\n if (typeof rule.value === 'boolean' && i === 1) {\n isCheck = !rule.value ? true : false;\n }\n value = values[i].toString();\n orgValue = values[i];\n label = this.l10n.getConstant(['True', 'False'][i]);\n }\n var radioBtn;\n radioBtn = {\n label: label, name: parentId + 'default', checked: isCheck, value: value,\n change: this.changeValue.bind(this, i)\n };\n if (this.valueModel && this.valueModel.radioButtonModel) {\n radioBtn = __assign({}, radioBtn, this.valueModel.radioButtonModel);\n }\n var radiobutton = new RadioButton(radioBtn);\n radiobutton.appendTo('#' + parentId + '_valuekey' + i);\n if (isCheck) {\n this.updateRules(radiobutton.element, orgValue, 0, true);\n }\n };\n QueryBuilder.prototype.getOperatorIndex = function (ddlObj, rule) {\n var i;\n var dataSource = ddlObj.dataSource;\n var len = dataSource.length;\n for (i = 0; i < len; i++) {\n if (rule.operator === ddlObj.dataSource[i].value) {\n return i;\n }\n }\n return 0;\n };\n QueryBuilder.prototype.getPreviousItemData = function (prevItemData, column) {\n if (this.isFieldClose && prevItemData) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n prevItemData = this.getColumn(prevItemData.value);\n }\n if (column && column.template && prevItemData && Object.keys(prevItemData).length < 4) {\n prevItemData.template = column.template;\n }\n return prevItemData;\n };\n QueryBuilder.prototype.renderValues = function (target, itemData, prevItemData, isRender, rule, tempRule, element) {\n var subFldElem = target.previousElementSibling;\n var filtElem = subFldElem.getElementsByTagName('input')[0];\n var filtObj = this.fieldMode === 'DropdownTree' ? getComponent(filtElem, 'dropdowntree')\n : getComponent(filtElem, 'dropdownlist');\n var column = this.fieldMode === 'DropdownTree' ? this.getColumn(filtObj.value[0])\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n : this.getColumn(filtObj.value);\n this.selectedRule = column;\n var ddlObj = getComponent(target.querySelector('input'), 'dropdownlist');\n if (isRender) {\n itemData = element.id.indexOf('operator') > -1 ? itemData : this.selectedRule;\n if (itemData.operators) {\n ddlObj.value = null;\n ddlObj.dataBind();\n ddlObj.dataSource = itemData.operators;\n ddlObj.index = this.getOperatorIndex(ddlObj, rule);\n ddlObj.value = tempRule.operator = ddlObj.dataSource[ddlObj.index].value;\n if (!this.autoSelectOperator) {\n ddlObj.index = -1;\n tempRule.operator = ddlObj.value = '';\n }\n else {\n ddlObj.dataBind();\n }\n }\n }\n var operator = tempRule.operator.toString();\n var isTempRendered = false;\n if (!(operator.indexOf('null') > -1 || operator.indexOf('isempty') > -1 || operator.indexOf('isnotempty') > -1)) {\n var parentId = closest(target, '.e-rule-container').id;\n prevItemData = this.getPreviousItemData(prevItemData, column);\n if (prevItemData && prevItemData.template === undefined) {\n if (prevItemData.columns) {\n prevItemData = this.getColumn(rule.field);\n }\n }\n else if (this.fieldMode === 'DropdownTree' && prevItemData === undefined) {\n prevItemData = this.getColumn(rule.field);\n }\n if (prevItemData && prevItemData.template) {\n this.templateDestroy(prevItemData, parentId + '_valuekey0');\n var elem = select('#' + parentId + '_valuekey0', target.nextElementSibling);\n if (elem && !elem.classList.contains('e-control')) {\n detach(select('#' + parentId + '_valuekey0', target.nextElementSibling));\n }\n if (typeof prevItemData.template === 'string' || prevItemData.template.create === undefined) {\n if (target.nextElementSibling.classList.contains('e-template-value')) {\n this.clearQBTemplate([parentId]);\n }\n target.nextElementSibling.innerHTML = '';\n }\n }\n if (isRender) {\n this.validateValue(rule, closest(target, '.e-rule-container'));\n this.destroyControls(target);\n }\n if (this.isImportRules || (ddlObj && ddlObj.value !== '')) {\n if (column) {\n itemData.template = column.template;\n }\n if (itemData.template) {\n addClass([target.nextElementSibling], 'e-template-value');\n itemData.template = column.template;\n isTempRendered = this.setColumnTemplate(itemData, parentId, column.field, itemData.value ||\n operator, target, rule);\n }\n if (isTempRendered) {\n var parentElem = target.parentElement.querySelector('.e-rule-value');\n if (this.element.className.indexOf('e-device') > -1 || this.displayMode === 'Vertical') {\n parentElem.style.width = '100%';\n }\n else {\n parentElem.style.width = '200px';\n }\n }\n else {\n removeClass([target.nextElementSibling], 'e-template-value');\n var inputLen = 1;\n if (tempRule.type === 'boolean') {\n inputLen = this.selectedColumn.values ? this.selectedColumn.values.length : 2;\n }\n else {\n inputLen = (operator && operator.toLowerCase().indexOf('between') > -1) ? 2 : 1;\n }\n for (var i = 0; i < inputLen; i++) {\n var valElem = this.createElement('input', { attrs: { type: 'text', id: parentId + '_valuekey' + i } });\n target.nextElementSibling.appendChild(valElem);\n }\n }\n this.renderControls(target, itemData, rule, tempRule, isTempRendered);\n }\n }\n else {\n var parentElem = target.parentElement.querySelector('.e-rule-value');\n if (parentElem) {\n removeClass([parentElem], 'e-show');\n addClass([parentElem], 'e-hide');\n }\n }\n };\n QueryBuilder.prototype.setColumnTemplate = function (itemData, ruleID, field, operator, target, rule) {\n var _this = this;\n var args;\n var isRendered = true;\n if (!itemData.template) {\n return true;\n }\n else {\n if (typeof itemData.template === 'string' || itemData.template.create === undefined) {\n args = { requestType: 'value-template-initialize', ruleID: ruleID, field: field, operator: operator, rule: rule,\n renderTemplate: true };\n this.trigger('actionBegin', args, function (observedActionArgs) {\n isRendered = _this.actionBeginSuccessCallBack(observedActionArgs, itemData, ruleID, field, target);\n });\n return isRendered;\n }\n else {\n var valElem = void 0;\n var template = itemData.template;\n if (typeof template.create === 'string') {\n valElem = getValue(template.create, window)({ field: field, operator: operator });\n }\n else {\n valElem = template.create({ field: field, operator: operator });\n }\n if (valElem instanceof Element) {\n valElem.id = ruleID + '_valuekey0';\n addClass([valElem], 'e-template');\n target.nextElementSibling.appendChild(valElem);\n if (field.indexOf(' ') < 0) {\n addClass([valElem], 'e-' + field);\n }\n }\n else if (valElem instanceof Array) {\n addClass(valElem, 'e-template');\n for (var i = 0, iLen = valElem.length; i < iLen; i++) {\n valElem[i].id = ruleID + '_valuekey' + i;\n target.nextElementSibling.appendChild(valElem[i]);\n }\n }\n addClass([target.nextElementSibling], 'e-template-value');\n return true;\n }\n }\n };\n QueryBuilder.prototype.actionBeginSuccessCallBack = function (args, itemData, ruleID, field, target) {\n if (args.renderTemplate) {\n var valElem = void 0;\n this.columnTemplateFn = this.templateParser(typeof itemData.template === 'function' ? itemData.template : itemData.template);\n var templateID = this.element.id + field;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.isReact) {\n valElem = this.columnTemplateFn(args, this, ruleID, templateID)[0];\n target.nextElementSibling.appendChild(valElem);\n } // eslint-disable-next-line @typescript-eslint/no-explicit-any\n else if (this.isAngular) {\n var valElemColl = this.columnTemplateFn(args, this, ruleID, templateID);\n valElem = (valElemColl[0].nodeType === 3) ? valElemColl[1] : valElemColl[0];\n target.nextElementSibling.appendChild(valElem);\n } // eslint-disable-next-line @typescript-eslint/no-explicit-any\n else if (this.isVue3) {\n valElem = this.columnTemplateFn(args, this, 'Template', templateID);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n append(valElem, target.nextElementSibling);\n }\n else {\n valElem = this.columnTemplateFn(args, this, 'Template', templateID)[0];\n target.nextElementSibling.appendChild(valElem);\n }\n addClass([target.nextElementSibling], 'e-template-value');\n this.renderReactTemplates();\n return true;\n }\n else {\n return false;\n }\n };\n QueryBuilder.prototype.updateValues = function (element, rule) {\n var idx = 1;\n if (element.className.indexOf('e-template') > -1) {\n idx = 3;\n }\n var controlName = element.className.split(' e-')[idx];\n var i = parseInt(element.id.slice(-1), 2);\n var column;\n var format;\n var selectedDate;\n var value;\n var radioBtnObj;\n switch (controlName) {\n case 'checkbox':\n value = getComponent(element, controlName).value;\n rule.value = (value !== '') ? value : undefined;\n break;\n case 'textbox':\n rule.value = getComponent(element, controlName).value;\n break;\n case 'dropdownlist':\n rule.value = getComponent(element, controlName).value;\n break;\n case 'radio':\n radioBtnObj = getComponent(element, controlName);\n if (radioBtnObj.checked) {\n if (typeof rule.value === 'boolean') {\n rule.value = radioBtnObj.value === 'true';\n }\n else {\n if (this.getColumn(rule.field).values) {\n rule.value = radioBtnObj.value;\n }\n else {\n rule.value = radioBtnObj.value === 'true';\n }\n }\n }\n radioBtnObj.refresh();\n break;\n case 'numerictextbox':\n if (rule.operator.indexOf('between') > -1) {\n if (typeof rule.value === 'string') {\n rule.value = [];\n }\n rule.value[i] = getComponent(element, controlName).value;\n }\n else {\n rule.value = getComponent(element, controlName).value;\n }\n break;\n case 'datepicker':\n column = this.getColumn(rule.field);\n format = this.getFormat(column.format);\n selectedDate = getComponent(element, controlName).value;\n if (rule.operator.indexOf('between') > -1) {\n if (typeof rule.value === 'string') {\n rule.value = [];\n }\n rule.value[i] = this.intl.formatDate(selectedDate, format);\n }\n else if (isNullOrUndefined(format.format) && selectedDate) {\n rule.value = this.intl.formatDate(selectedDate);\n }\n else if (selectedDate) {\n rule.value = this.intl.formatDate(selectedDate, format);\n }\n else {\n rule.value = selectedDate;\n }\n break;\n case 'multiselect':\n rule.value = getComponent(element, controlName).value;\n break;\n }\n };\n QueryBuilder.prototype.updateRules = function (target, selectedValue, i, isNotTrigger) {\n var groupElem = closest(target, '.e-group-container');\n var rule = this.getParentGroup(groupElem);\n var ruleElem = closest(target, '.e-rule-container');\n var index = 0;\n var dropDownObj;\n var eventsArgs;\n var groupID = groupElem.id.replace(this.element.id + '_', '');\n var beforeRules = this.getValidRules(this.rule);\n while (ruleElem && ruleElem.previousElementSibling !== null) {\n ruleElem = ruleElem.previousElementSibling;\n if (!this.enableSeparateConnector || (this.enableSeparateConnector &&\n ((!this.headerTemplate && !ruleElem.classList.contains('e-btn-group')) ||\n this.headerTemplate && (ruleElem.classList.contains('e-rule-container') ||\n ruleElem.classList.contains('e-group-container'))))) {\n index++;\n }\n }\n var operator = rule.rules[index].operator ? rule.rules[index].operator.toString() : '';\n ruleElem = closest(target, '.e-rule-container');\n var ruleID = ruleElem.id.replace(this.element.id + '_', '');\n if (closest(target, '.e-rule-filter') || closest(target, '.e-rule-sub-filter')) {\n if (this.subFieldElem) {\n target = this.subFieldElem;\n }\n dropDownObj = this.fieldMode === 'DropdownTree' ? getComponent(target, 'dropdowntree') :\n getComponent(target, 'dropdownlist');\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var column = this.fieldMode === 'DropdownTree' ? this.getColumn(dropDownObj.value[0])\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n : this.getColumn(dropDownObj.value);\n if (!this.isImportRules && rule.rules[index].field &&\n rule.rules[index].field.toLowerCase() !== column.field.toLowerCase()) {\n if (!(ruleElem.querySelectorAll('.e-template')) && !(operator.indexOf('null') > -1)\n || (operator.indexOf('empty') > -1)) {\n rule.rules[index].value = '';\n }\n }\n this.selectedColumn = this.getColumn(this.selectedColumn.field);\n rule.rules[index].field = this.selectedColumn.field;\n rule.rules[index].type = this.selectedColumn.type;\n rule.rules[index].label = this.selectedColumn.label;\n var ruleElement = closest(target, '.e-rule-filter');\n ruleElement = ruleElement ? ruleElement : closest(target, '.e-rule-sub-filter');\n var element = ruleElement.nextElementSibling.querySelector('input.e-control');\n element = element ? element : ruleElement.nextElementSibling.nextElementSibling.querySelector('input.e-control');\n operator = getComponent(element, 'dropdownlist').value.toString();\n rule.rules[index].operator = operator;\n // Value Fields\n var valueContainer = ruleElement.nextElementSibling.nextElementSibling;\n var elementCln = valueContainer.querySelectorAll('input.e-control');\n if (elementCln.length < 1) {\n elementCln = valueContainer.querySelectorAll('div.e-control');\n }\n if (elementCln.length < 1) {\n elementCln = valueContainer.querySelectorAll('.e-template');\n }\n eventsArgs = { groupID: groupID, ruleID: ruleID, value: rule.rules[index].field, type: 'field' };\n for (var i_1 = 0; i_1 < elementCln.length; i_1++) {\n if (operator.indexOf('null') > -1 || operator.indexOf('empty') > -1) {\n rule.rules[index].value = null;\n continue;\n }\n this.updateValues(elementCln[i_1], rule.rules[index]);\n }\n if (!this.isImportRules && !this.prvtEvtTgrDaD) {\n this.trigger('change', eventsArgs);\n }\n if (this.allowValidation && rule.rules[index].field && target.parentElement.className.indexOf('e-tooltip') > -1) {\n getComponent(target.parentElement, 'tooltip').destroy();\n }\n this.filterRules(beforeRules, this.getValidRules(this.rule), 'field');\n }\n else if (closest(target, '.e-rule-operator')) {\n dropDownObj = getComponent(target, 'dropdownlist');\n rule.rules[index].operator = dropDownObj.value.toString();\n var inputElem = ruleElem.querySelectorAll('.e-rule-value input.e-control');\n eventsArgs = { groupID: groupID, ruleID: ruleID, value: dropDownObj.value, type: 'operator' };\n if (this.allowValidation && rule.rules[index].operator && target.parentElement.className.indexOf('e-tooltip') > -1) {\n getComponent(target.parentElement, 'tooltip').destroy();\n }\n if (inputElem.length > 1 && !(inputElem[0].className.indexOf('e-template') > -1)) {\n rule.rules[index].value = [];\n }\n for (var i_2 = 0; i_2 < inputElem.length; i_2++) {\n if (rule.rules[index].operator.indexOf('null') > -1 || rule.rules[index].operator.indexOf('empty') > -1) {\n rule.rules[index].value = null;\n continue;\n }\n else if (inputElem[i_2].classList.contains('e-template')) {\n continue;\n }\n this.updateValues(inputElem[i_2], rule.rules[index]);\n }\n if (!this.isImportRules) {\n this.trigger('change', eventsArgs);\n }\n this.filterRules(beforeRules, this.getValidRules(this.rule), 'operator');\n }\n else if (closest(target, '.e-rule-value')) {\n this.ruleValueUpdate(target, selectedValue, rule, index, groupElem, ruleElem, i);\n if (!isNotTrigger) {\n this.filterRules(beforeRules, this.getValidRules(this.rule), 'value');\n }\n }\n };\n QueryBuilder.prototype.filterRules = function (beforeRule, afterRule, type) {\n var beforeRuleStr = JSON.stringify({ condition: beforeRule.condition, not: beforeRule.not, rule: beforeRule.rules });\n var afetrRuleStr = JSON.stringify({ condition: afterRule.condition, not: afterRule.not, rule: afterRule.rules });\n if (beforeRuleStr !== afetrRuleStr) {\n if (!this.isImportRules && !this.prvtEvtTgrDaD) {\n this.trigger('ruleChange', { previousRule: beforeRule, rule: afterRule, type: type });\n }\n }\n };\n QueryBuilder.prototype.ruleValueUpdate = function (target, selectedValue, rule, index, groupElem, ruleElem, i) {\n var eventsArgs;\n var oper;\n var arrOperator = ['in', 'between', 'notin', 'notbetween'];\n if (rule.rules[index].operator) {\n oper = rule.rules[index].operator.toString().toLowerCase();\n }\n if (selectedValue !== null) {\n if (target.className.indexOf('e-multiselect') > -1 && rule.rules[index].type === 'number' &&\n !this.isNotified) {\n var selVal = [];\n var dupSelectedValue = selectedValue;\n for (var k = 0, kLen = dupSelectedValue.length; k < kLen; k++) {\n if (typeof dupSelectedValue[k] === 'string') {\n selVal.push(parseFloat(dupSelectedValue[k]));\n }\n }\n if (selVal.length) {\n selectedValue = selVal;\n }\n }\n if (this.isNotified) {\n rule.rules[index].value = selectedValue;\n eventsArgs = { groupID: groupElem.id, ruleID: ruleElem.id, value: rule.rules[index].value, type: 'value' };\n if (!this.isImportRules) {\n this.trigger('change', eventsArgs);\n }\n }\n else if (target.className.indexOf('e-spin') > -1 || target.className.indexOf('e-numeric') > -1) {\n if (arrOperator.indexOf(oper) > -1) {\n rule.rules[index].value[i] = selectedValue;\n }\n else {\n rule.rules[index].value = selectedValue;\n }\n }\n else if (target.className.indexOf('e-radio') > -1) {\n rule.rules[index].value = selectedValue;\n }\n else if (target.className.indexOf('e-multiselect') > -1) {\n rule.rules[index].value = selectedValue;\n }\n else if (target.className.indexOf('e-textbox') > -1) {\n if (oper === 'in' || oper === 'notin') {\n if (rule.rules[index].type === 'string') {\n rule.rules[index].value = this.processValueString(selectedValue, rule.rules[index].type);\n }\n else {\n rule.rules[index].value = this.processValueString(selectedValue, rule.rules[index].type);\n }\n }\n else {\n rule.rules[index].value = selectedValue;\n }\n }\n else if (target.className.indexOf('e-datepicker') > -1) {\n var format = this.getFormat(this.getColumn(this.selectedColumn.field).format);\n if (format.type) {\n if (arrOperator.indexOf(oper) > -1) {\n if (typeof rule.rules[index].value === 'string') {\n rule.rules[index].value = [];\n }\n rule.rules[index].value[i] = this.intl.formatDate(selectedValue, format);\n }\n else {\n rule.rules[index].value = this.intl.formatDate(selectedValue, format);\n }\n }\n }\n this.validateValue(rule, ruleElem, index);\n }\n else {\n if (target.className.indexOf('e-datepicker') > -1) {\n if (arrOperator.indexOf(oper) > -1) {\n if (typeof rule.rules[index].value === 'string') {\n rule.rules[index].value = [];\n }\n rule.rules[index].value[i] = selectedValue;\n }\n else {\n rule.rules[index].value = selectedValue;\n }\n }\n else {\n rule.rules[index].value = selectedValue;\n }\n }\n };\n QueryBuilder.prototype.validateValue = function (rule, ruleElem, index) {\n if (!isNullOrUndefined(index)) {\n rule = rule.rules[index];\n }\n var isObject = typeof (rule.value) === 'object';\n if (this.allowValidation && (isNullOrUndefined(index) || (isObject ? rule.value.length > 0 : rule.value))) {\n var valElem = ruleElem.querySelectorAll('.e-rule-value .e-control');\n if (valElem.length > 0) {\n if (valElem[0].className.indexOf('e-tooltip') > -1) {\n getComponent(valElem[0], 'tooltip').destroy();\n }\n else if (valElem[0].parentElement.className.indexOf('e-tooltip') > -1) {\n getComponent(valElem[0].parentElement, 'tooltip').destroy();\n }\n if (valElem[1] && valElem[1].parentElement.className.indexOf('e-tooltip') > -1) {\n getComponent(valElem[1].parentElement, 'tooltip').destroy();\n }\n if (valElem[2] && valElem[2].parentElement.className.indexOf('e-tooltip') > -1) {\n getComponent(valElem[2].parentElement, 'tooltip').destroy();\n }\n }\n }\n };\n QueryBuilder.prototype.getFormat = function (format) {\n var formatOptions;\n if (format) {\n if (typeof (format) === 'string') {\n formatOptions = { type: 'dateTime' };\n if (format === 'short' || format === 'yMd') {\n formatOptions.type = 'date';\n formatOptions.skeleton = format;\n }\n else {\n formatOptions.format = format;\n }\n }\n else {\n formatOptions = { type: 'dateTime', skeleton: format.skeleton };\n }\n }\n else {\n formatOptions = { type: 'date', skeleton: 'yMd' };\n }\n return formatOptions;\n };\n QueryBuilder.prototype.findGroupByIdx = function (groupIdx, rule, isRoot) {\n var ruleColl = rule.rules;\n var dupRuleColl = [];\n if (!isRoot) {\n for (var j = 0, jLen = ruleColl.length; j < jLen; j++) {\n rule = ruleColl[j];\n if (rule.rules) {\n dupRuleColl.push(rule);\n }\n }\n return dupRuleColl[groupIdx];\n }\n return rule;\n };\n /**\n * Removes the component from the DOM and detaches all its related event handlers.\n * Also it maintains the initial input element from the DOM.\n *\n * @method destroy\n * @returns {void}\n */\n QueryBuilder.prototype.destroy = function () {\n this.isDestroy = true;\n var queryElement = this.element;\n if (!queryElement) {\n return;\n }\n var element;\n var i;\n var len;\n var tooltip;\n _super.prototype.destroy.call(this);\n element = this.element.querySelectorAll('.e-addrulegroup');\n len = element.length;\n for (i = 0; i < len; i++) {\n getComponent(element[i], 'dropdown-btn').destroy();\n detach(element[i]);\n }\n tooltip = this.element.querySelectorAll('.e-rule-filter .e-control.e-tooltip');\n for (i = 0; i < tooltip.length; i++) {\n getComponent(tooltip[i], 'tooltip').destroy();\n }\n element = this.element.querySelectorAll('.e-rule-filter .e-control:not(.e-tooltip)');\n len = element.length;\n for (i = 0; i < len; i++) {\n if (getComponent(element[i], 'dropdownlist')) {\n getComponent(element[i], 'dropdownlist').destroy();\n }\n else {\n getComponent(element[i], 'dropdowntree').destroy();\n }\n detach(element[i]);\n }\n tooltip = this.element.querySelectorAll('.e-rule-operator .e-control.e-tooltip');\n for (i = 0; i < tooltip.length; i++) {\n getComponent(tooltip[i], 'tooltip').destroy();\n }\n element = this.element.querySelectorAll('.e-rule-operator .e-control:not(.e-tooltip)');\n len = element.length;\n for (i = 0; i < len; i++) {\n if (getComponent(element[i], 'dropdownlist')) {\n getComponent(element[i], 'dropdownlist').destroy();\n detach(element[i]);\n }\n }\n tooltip = this.element.querySelectorAll('.e-rule-value .e-control.e-tooltip');\n for (i = 0; i < tooltip.length; i++) {\n getComponent(tooltip[i], 'tooltip').destroy();\n }\n this.isImportRules = false;\n this.unWireEvents();\n this.levelColl[this.element.id + '_group0'] = [0];\n this.element.innerHTML = '';\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.portals && this.portals.length) {\n this.clearQBTemplate();\n }\n var popupElement = document.querySelectorAll('.qb-dropdownlist.e-popup');\n if (popupElement) {\n for (i = 0; i < popupElement.length; i++) {\n popupElement[i].remove();\n }\n }\n classList(this.element, [], ['e-rtl', 'e-responsive', 'e-device']);\n this.isDestroy = false;\n };\n /**\n * Adds single or multiple rules.\n *\n * @param {RuleModel[]} rule - 'rule collection' to be passed to add the rules.\n * @param {string} groupID - 'group id' to be passed to add the rule in groups.\n * @returns {void}.\n */\n QueryBuilder.prototype.addRules = function (rule, groupID) {\n groupID = this.element.id + '_' + groupID;\n this.isPublic = true;\n for (var i = 0, len = rule.length; i < len; i++) {\n this.addRuleElement(document.getElementById(groupID), rule[i]);\n }\n this.isPublic = false;\n };\n /**\n * Adds single or multiple groups, which contains the collection of rules.\n *\n * @param {RuleModel[]} groups - 'group collection' to be passed to add the groups.\n * @param {string} groupID - 'group id' to be passed to add the groups.\n * @returns {void}.\n */\n QueryBuilder.prototype.addGroups = function (groups, groupID) {\n if (this.isAddSuccess || this.element.querySelectorAll('.e-group-container').length <= this.maxGroupCount) {\n groupID = this.element.id + '_' + groupID;\n var groupElem = document.getElementById(groupID);\n var rule = this.getParentGroup(groupElem);\n var grouplen = groups.length;\n if (grouplen) {\n this.isPublic = true;\n for (var i = 0, len = groups.length; i < len; i++) {\n this.updatedRule = { isLocked: groups[i].isLocked, condition: groups[i].condition,\n not: groups[i].not };\n this.importRules(groups[i], groupElem, false, groups[i].not);\n }\n this.isPublic = false;\n }\n else {\n var condition = 'and';\n var not = false;\n var isLocked = false;\n if (this.updatedRule) {\n condition = this.updatedRule.condition;\n not = this.updatedRule.not;\n isLocked = this.updatedRule.isLocked;\n }\n if (this.groupIndex < 0) {\n if (this.enableNotCondition) {\n rule.rules.push({ 'condition': condition, 'not': not, rules: [] });\n }\n else {\n rule.rules.push({ 'condition': condition, rules: [] });\n }\n }\n else {\n if (this.enableNotCondition) {\n rule.rules.splice(this.groupIndex + 1, 0, { condition: condition, not: not, rules: [], isLocked: isLocked });\n }\n else {\n rule.rules.splice(this.groupIndex + 1, 0, { condition: condition, rules: [], isLocked: isLocked });\n }\n }\n }\n if (!this.headerTemplate) {\n this.disableRuleCondition(groupElem, rule, null, this.enableSeparateConnector ? true : null);\n }\n }\n };\n QueryBuilder.prototype.initWrapper = function () {\n this.isInitialLoad = true;\n if (this.cssClass) {\n addClass([this.element], this.cssClass.replace(/\\s+/g, ' ').trim().split(' '));\n }\n if (this.enableSeparateConnector) {\n addClass([this.element], 'e-multi-connector');\n }\n if (this.enableRtl) {\n addClass([this.element], 'e-rtl');\n }\n if (this.width) {\n this.element.style.width = this.width;\n }\n if (this.height) {\n this.element.style.height = this.height;\n }\n if (this.rule.rules.length) {\n this.isImportRules = true;\n }\n else {\n this.addGroupElement(false, this.element);\n }\n if (Browser.isDevice || this.displayMode === 'Vertical') {\n if (Browser.isDevice) {\n this.element.style.width = '100%';\n this.element.classList.add('e-device');\n }\n removeClass(this.element.querySelectorAll('.e-rule-container'), 'e-horizontal-mode');\n addClass(this.element.querySelectorAll('.e-rule-container'), 'e-vertical-mode');\n this.displayMode = 'Vertical';\n }\n else {\n this.displayMode = 'Horizontal';\n }\n if (this.summaryView) {\n if (this.isImportRules) {\n this.renderSummary();\n }\n else {\n this.renderSummaryCollapse();\n }\n }\n else {\n if (this.columns && this.columns.length && this.isImportRules) {\n this.addGroupElement(false, this.element, this.rule.condition, false, this.rule.not, false, this.rule);\n var mRules = extend({}, this.rule, {}, true);\n this.isRefreshed = true;\n this.setGroupRules(mRules);\n this.isRefreshed = false;\n }\n else if (this.columns && this.columns.length) {\n this.addRuleElement(this.element.querySelector('.e-group-container'), {});\n }\n this.notGroupRtl();\n if (this.readonly) {\n this.enableReadonly();\n }\n var buttons = this.element.querySelectorAll('label.e-btn');\n var button = void 0;\n for (var i = 0; i < buttons.length; i++) {\n button = buttons.item(i);\n rippleEffect(button, { selector: '.e-btn' });\n }\n }\n };\n QueryBuilder.prototype.renderSummary = function () {\n var contentElem = this.createElement('div', {\n attrs: {\n class: 'e-summary-content',\n id: this.element.id + '_summary_content'\n }\n });\n var textElem = this.createElement('textarea', { attrs: { class: 'e-summary-text', readonly: 'true' }, styles: 'max-height:500px' });\n var editElem = this.createElement('button', { attrs: { type: 'button', class: 'e-edit-rule e-css e-btn e-small e-flat e-primary' } });\n var divElem = this.createElement('div', { attrs: { class: 'e-summary-btndiv' } });\n contentElem.appendChild(textElem);\n textElem.textContent = this.getSqlFromRules(this.rule);\n editElem.textContent = this.l10n.getConstant('Edit');\n divElem.appendChild(editElem);\n contentElem.appendChild(divElem);\n this.element.appendChild(contentElem);\n };\n QueryBuilder.prototype.renderSummaryCollapse = function () {\n var collapseElem = this.createElement('div', {\n attrs: {\n class: 'e-collapse-rule e-icons',\n title: this.l10n.getConstant('SummaryViewTitle')\n }\n });\n this.element.querySelector('.e-group-header').appendChild(collapseElem);\n };\n QueryBuilder.prototype.columnSort = function () {\n if (this.sortDirection.toLowerCase() === 'descending') {\n this.columns = new DataManager(this.columns).executeLocal(new Query().sortByDesc('field'));\n }\n else if (this.sortDirection.toLowerCase() === 'ascending') {\n this.columns = new DataManager(this.columns).executeLocal(new Query().sortBy('field'));\n }\n };\n QueryBuilder.prototype.onChangeNotGroup = function () {\n this.element.innerHTML = '';\n this.groupIdCounter = 0;\n if (!this.headerTemplate) {\n if (this.enableNotCondition) {\n var inputElem = this.createElement('button', { attrs: { type: 'button', class: 'e-qb-toggle' } });\n if (this.groupElem.querySelector('.e-btn-group')) {\n this.groupElem.querySelector('.e-btn-group').insertBefore(inputElem, this.groupElem.querySelector('.e-btngroup-and'));\n }\n }\n else {\n this.groupElem.querySelector('.e-qb-toggle').remove();\n }\n }\n this.setProperties({ rule: this.checkNotGroup(this.rule) }, true);\n this.initWrapper();\n };\n QueryBuilder.prototype.notGroupRtl = function () {\n if (this.enableRtl) {\n addClass(this.element.querySelectorAll('.e-btn-group'), 'e-rtl');\n }\n else {\n removeClass(this.element.querySelectorAll('.e-btn-group'), 'e-rtl');\n }\n };\n QueryBuilder.prototype.checkNotGroup = function (rule) {\n var orgRule;\n if (rule.rules) {\n for (var i = 0; i < rule.rules.length; i++) {\n orgRule = rule.rules[i];\n orgRule = this.checkNotGroup(orgRule);\n rule.rules[i] = orgRule;\n }\n }\n if (!isNullOrUndefined(rule.not)) {\n if (this.enableNotCondition) {\n rule.not = false;\n }\n delete rule.not;\n }\n else if (this.enableNotCondition && !isNullOrUndefined(rule.condition)) {\n rule.not = false;\n }\n return rule;\n };\n QueryBuilder.prototype.onPropertyChanged = function (newProp, oldProp) {\n var properties = Object.keys(newProp);\n var groupElem = this.element.querySelector('.e-group-container');\n var summaryElem = this.element.querySelector('.e-summary-content');\n for (var _i = 0, properties_1 = properties; _i < properties_1.length; _i++) {\n var prop = properties_1[_i];\n switch (prop) {\n case 'summaryView':\n if (newProp.summaryView) {\n groupElem.style.display = 'none';\n if (this.element.querySelectorAll('.e-summary-content').length < 1) {\n this.renderSummary();\n summaryElem = this.element.querySelector('.e-summary-content');\n }\n else {\n this.element.querySelector('.e-summary-text').textContent = this.getSqlFromRules(this.rule);\n }\n summaryElem.style.display = 'block';\n }\n else {\n if (groupElem.querySelectorAll('.e-collapse-rule').length > -1) {\n this.renderSummaryCollapse();\n }\n groupElem.style.display = 'block';\n summaryElem.style.display = 'none';\n }\n break;\n case 'displayMode':\n this.refresh();\n break;\n case 'showButtons':\n if (!isNullOrUndefined(newProp.showButtons.lockGroup)) {\n if (newProp.showButtons.lockGroup) {\n removeClass(this.element.querySelectorAll('.e-lock-grp-btn'), 'e-button-hide');\n }\n else {\n addClass(this.element.querySelectorAll('.e-lock-grp-btn'), 'e-button-hide');\n }\n }\n if (!isNullOrUndefined(newProp.showButtons.lockRule)) {\n if (newProp.showButtons.lockRule) {\n removeClass(this.element.querySelectorAll('.e-lock-rule-btn'), 'e-button-hide');\n }\n else {\n addClass(this.element.querySelectorAll('.e-lock-rule-btn'), 'e-button-hide');\n }\n }\n if (!isNullOrUndefined(newProp.showButtons.cloneGroup)) {\n if (newProp.showButtons.cloneGroup) {\n removeClass(this.element.querySelectorAll('.e-clone-grp-btn'), 'e-button-hide');\n }\n else {\n addClass(this.element.querySelectorAll('.e-clone-grp-btn'), 'e-button-hide');\n }\n }\n if (!isNullOrUndefined(newProp.showButtons.cloneRule)) {\n if (newProp.showButtons.cloneRule) {\n removeClass(this.element.querySelectorAll('.e-clone-rule-btn'), 'e-button-hide');\n }\n else {\n addClass(this.element.querySelectorAll('.e-clone-rule-btn'), 'e-button-hide');\n }\n }\n if (!isNullOrUndefined(newProp.showButtons.ruleDelete)) {\n if (newProp.showButtons.ruleDelete) {\n removeClass(this.element.querySelectorAll('.e-rule-delete'), 'e-button-hide');\n }\n else {\n addClass(this.element.querySelectorAll('.e-rule-delete'), 'e-button-hide');\n }\n }\n if (!isNullOrUndefined(newProp.showButtons.groupDelete)) {\n if (newProp.showButtons.groupDelete) {\n removeClass(this.element.querySelectorAll('.e-deletegroup'), 'e-button-hide');\n }\n else {\n addClass(this.element.querySelectorAll('.e-deletegroup'), 'e-button-hide');\n }\n }\n break;\n case 'cssClass':\n if (oldProp.cssClass) {\n removeClass([this.element], oldProp.cssClass.split(' '));\n }\n if (newProp.cssClass) {\n addClass([this.element], newProp.cssClass.replace(/\\s+/g, ' ').trim().split(' '));\n }\n break;\n case 'enableRtl':\n if (newProp.enableRtl) {\n addClass([this.element], 'e-rtl');\n this.notGroupRtl();\n }\n else {\n removeClass([this.element], 'e-rtl');\n this.notGroupRtl();\n }\n break;\n case 'enablePersistence':\n this.enablePersistence = newProp.enablePersistence;\n break;\n case 'dataSource':\n this.dataSource = newProp.dataSource;\n this.refresh();\n break;\n case 'columns':\n this.columns = newProp.columns;\n this.columnSort();\n this.updateSubFieldsFromColumns(this.columns);\n break;\n case 'sortDirection':\n this.sortDirection = newProp.sortDirection;\n this.columnSort();\n break;\n case 'maxGroupCount':\n this.maxGroupCount = newProp.maxGroupCount;\n break;\n case 'height':\n this.height = newProp.height;\n this.element.style.height = this.height;\n break;\n case 'rule':\n if (this.rule.rules.length === 0 && !isNullOrUndefined(this.rule)) {\n this.reset();\n }\n this.setProperties({ rule: newProp.rule }, true);\n newProp.rule = this.getRuleCollection(this.rule, false);\n this.setRules(this.rule);\n break;\n case 'width':\n this.width = newProp.width;\n this.element.style.width = this.width;\n break;\n case 'locale':\n this.locale = newProp.locale;\n this.intl = new Internationalization(this.locale);\n this.isLocale = true;\n this.refresh();\n this.isLocale = false;\n break;\n case 'enableNotCondition':\n this.onChangeNotGroup();\n break;\n case 'readonly':\n this.isReadonly = newProp.readonly;\n this.enableReadonly();\n break;\n case 'allowDragAndDrop':\n this.allowDragAndDrop = newProp.allowDragAndDrop;\n this.refresh();\n break;\n case 'enableSeparateConnector':\n this.enableSeparateConnector = newProp.enableSeparateConnector;\n this.refresh();\n break;\n }\n }\n };\n QueryBuilder.prototype.preRender = function () {\n this.element.id = this.element.id || getUniqueID('ej2-querybuilder');\n this.defaultLocale = {\n StartsWith: 'Starts With',\n DoesNotStartWith: 'Does Not Start With',\n EndsWith: 'Ends With',\n DoesNotEndWith: 'Does Not End With',\n Contains: 'Contains',\n DoesNotContain: 'Does Not Contain',\n NotLike: 'Not Like',\n Like: 'Like',\n Equal: 'Equal',\n NotEqual: 'Not Equal',\n LessThan: 'Less Than',\n LessThanOrEqual: 'Less Than Or Equal',\n GreaterThan: 'Greater Than',\n GreaterThanOrEqual: 'Greater Than Or Equal',\n Between: 'Between',\n NotBetween: 'Not Between',\n In: 'In',\n NotIn: 'Not In',\n Remove: 'REMOVE',\n SelectField: 'Select a field',\n SelectOperator: 'Select operator',\n DeleteRule: 'Remove this condition',\n DeleteGroup: 'Delete group',\n AddGroup: 'Add Group',\n AddCondition: 'Add Condition',\n Edit: 'EDIT',\n ValidationMessage: 'This field is required',\n SummaryViewTitle: 'Summary View',\n OtherFields: 'Other Fields',\n AND: 'AND',\n OR: 'OR',\n NOT: 'NOT',\n SelectValue: 'Enter Value',\n IsEmpty: 'Is Empty',\n IsNotEmpty: 'Is Not Empty',\n IsNull: 'Is Null',\n IsNotNull: 'Is Not Null',\n True: 'true',\n False: 'false',\n AddButton: 'Add Group/Condition',\n CloneGroup: 'Clone Group',\n LockGroup: 'Lock Group',\n CloneRule: 'Clone Rule',\n LockRule: 'Lock Rule',\n UnlockRule: 'Unlock Rule',\n UnlockGroup: 'Unlock Group'\n };\n this.l10n = new L10n('querybuilder', this.defaultLocale, this.locale);\n this.intl = new Internationalization(this.locale);\n this.groupIdCounter = 0;\n this.subFilterCounter = 0;\n this.ruleIdCounter = 0;\n this.btnGroupId = 0;\n this.isImportRules = false;\n this.parser = [];\n this.customOperators = {\n stringOperator: [\n { value: 'startswith', key: this.l10n.getConstant('StartsWith') },\n { value: 'notstartswith', key: this.l10n.getConstant('DoesNotStartWith') },\n { value: 'endswith', key: this.l10n.getConstant('EndsWith') },\n { value: 'notendswith', key: this.l10n.getConstant('DoesNotEndWith') },\n { value: 'contains', key: this.l10n.getConstant('Contains') },\n { value: 'notcontains', key: this.l10n.getConstant('DoesNotContain') },\n { value: 'equal', key: this.l10n.getConstant('Equal') },\n { value: 'notequal', key: this.l10n.getConstant('NotEqual') },\n { value: 'in', key: this.l10n.getConstant('In') },\n { value: 'notin', key: this.l10n.getConstant('NotIn') },\n { value: 'isempty', key: this.l10n.getConstant('IsEmpty') },\n { value: 'isnotempty', key: this.l10n.getConstant('IsNotEmpty') }\n ],\n dateOperator: [\n { value: 'equal', key: this.l10n.getConstant('Equal') },\n { value: 'greaterthan', key: this.l10n.getConstant('GreaterThan') },\n { value: 'greaterthanorequal', key: this.l10n.getConstant('GreaterThanOrEqual') },\n { value: 'lessthan', key: this.l10n.getConstant('LessThan') },\n { value: 'lessthanorequal', key: this.l10n.getConstant('LessThanOrEqual') },\n { value: 'notequal', key: this.l10n.getConstant('NotEqual') },\n { value: 'between', key: this.l10n.getConstant('Between') },\n { value: 'notbetween', key: this.l10n.getConstant('NotBetween') }\n ],\n booleanOperator: [\n { value: 'equal', key: this.l10n.getConstant('Equal') },\n { value: 'notequal', key: this.l10n.getConstant('NotEqual') }\n ],\n numberOperator: [\n { value: 'equal', key: this.l10n.getConstant('Equal') },\n { value: 'greaterthanorequal', key: this.l10n.getConstant('GreaterThanOrEqual') },\n { value: 'greaterthan', key: this.l10n.getConstant('GreaterThan') },\n { value: 'between', key: this.l10n.getConstant('Between') },\n { value: 'lessthan', key: this.l10n.getConstant('LessThan') },\n { value: 'notbetween', key: this.l10n.getConstant('NotBetween') },\n { value: 'lessthanorequal', key: this.l10n.getConstant('LessThanOrEqual') },\n { value: 'notequal', key: this.l10n.getConstant('NotEqual') },\n { value: 'in', key: this.l10n.getConstant('In') },\n { value: 'notin', key: this.l10n.getConstant('NotIn') }\n ]\n };\n this.operators = {\n equal: '=', notequal: '!=', greaterthan: '>', greaterthanorequal: '>=', lessthan: '<', in: 'IN', notin: 'NOT IN',\n lessthanorequal: '<=', startswith: 'LIKE', endswith: 'LIKE', between: 'BETWEEN', notbetween: 'NOT BETWEEN', contains: 'LIKE',\n isnull: 'IS NULL', isnotnull: 'IS NOT NULL', isempty: 'IS EMPTY', isnotempty: 'IS NOT EMPTY', notstartswith: 'NOT LIKE',\n notendswith: 'NOT LIKE', notcontains: 'NOT LIKE'\n };\n this.sqlOperators = {\n equal: '=', notequal: '!=', greaterthan: '>', greaterthanorequal: '>=', lessthan: '<', in: this.l10n.getConstant('In').toUpperCase(),\n notin: this.l10n.getConstant('NotIn').toUpperCase(), lessthanorequal: '<=', startswith: this.l10n.getConstant('Like').toUpperCase(),\n endswith: this.l10n.getConstant('Like').toUpperCase(), between: this.l10n.getConstant('Between').toUpperCase(),\n notbetween: this.l10n.getConstant('NotBetween').toUpperCase(), contains: this.l10n.getConstant('Like').toUpperCase(),\n isnull: this.l10n.getConstant('IsNull').toUpperCase(), isnotnull: this.l10n.getConstant('IsNotNull').toUpperCase(),\n isempty: this.l10n.getConstant('IsEmpty').toUpperCase(), isnotempty: this.l10n.getConstant('IsNotEmpty').toUpperCase(),\n notstartswith: this.l10n.getConstant('NotLike').toUpperCase(), notendswith: this.l10n.getConstant('NotLike').toUpperCase(),\n notcontains: this.l10n.getConstant('NotLike').toUpperCase()\n };\n if (!this.fields) {\n this.fields = { text: 'label', value: 'field' };\n }\n };\n QueryBuilder.prototype.render = function () {\n this.levelColl = {};\n this.items = [\n {\n text: this.l10n.getConstant('AddGroup'),\n iconCss: 'e-icons e-add-icon e-addgroup'\n },\n {\n text: this.l10n.getConstant('AddCondition'),\n iconCss: 'e-icons e-add-icon e-addrule'\n }\n ];\n this.ruleElem = this.ruleTemplate();\n this.groupElem = this.groupTemplate();\n var stringOper = [\n { value: 'isnull', key: this.l10n.getConstant('IsNull') },\n { value: 'isnotnull', key: this.l10n.getConstant('IsNotNull') }\n ];\n var numberOper = [\n { value: 'isnull', key: this.l10n.getConstant('IsNull') },\n { value: 'isnotnull', key: this.l10n.getConstant('IsNotNull') }\n ];\n this.customOperators['stringOperator'] = this.customOperators['stringOperator'].concat(stringOper); // tslint:disable-line\n this.customOperators['numberOperator'] = this.customOperators['numberOperator'].concat(numberOper); // tslint:disable-line\n if (this.dataSource instanceof DataManager) {\n this.dataManager = this.dataSource;\n this.executeDataManager(new Query().take(1));\n }\n else {\n this.dataManager = new DataManager(this.dataSource);\n this.dataColl = this.dataManager.executeLocal(new Query());\n this.initControl();\n }\n this.renderComplete();\n if (this.allowDragAndDrop) {\n this.initializeDrag();\n }\n };\n QueryBuilder.prototype.initializeDrag = function () {\n this.draggable = new Draggable(this.element, {\n dragTarget: '.e-drag-qb-rule',\n distance: 5,\n helper: this.helper.bind(this),\n dragStart: this.dragStartHandler.bind(this),\n drag: this.dragHandler.bind(this),\n dragStop: this.dragStopHandler.bind(this),\n isReplaceDragEle: true,\n isPreventSelect: false,\n abort: '.e-parent-header',\n isDragScroll: true\n });\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n QueryBuilder.prototype.helper = function (e) {\n var target = this.draggable.currentStateTarget;\n if (!target.classList.contains('e-drag-qb-rule') || (target.classList.contains('e-drag-qb-rule') && closest(target, '.e-disable'))) {\n return false;\n }\n var visualElement = this.createElement('div', {\n className: 'e-cloneproperties e-draganddrop e-dragclone',\n styles: 'height:\"auto\", z-index:2, width:' + this.element.offsetWidth\n });\n var cloneElement;\n if (this.draggable.currentStateTarget.parentElement.classList.contains('e-group-header')) {\n cloneElement = closest(target, '.e-group-container').cloneNode(true);\n closest(target, '.e-group-container').classList.add('e-qb-dragging-rule');\n }\n else {\n visualElement.classList.add('e-group-body');\n cloneElement = this.createElement('div', { className: 'e-rule-container' });\n var ruleElement = closest(target, '.e-rule-field').cloneNode(true);\n cloneElement.appendChild(ruleElement);\n closest(target, '.e-rule-field').classList.add('e-qb-dragging-rule');\n }\n visualElement.appendChild(cloneElement);\n var childElements = visualElement.querySelectorAll('*');\n childElements.forEach(function (child) {\n child.removeAttribute('id');\n });\n this.element.appendChild(visualElement);\n return visualElement;\n };\n QueryBuilder.prototype.dragStartHandler = function (e) {\n this.draggedRule = e.target;\n this.isDragEventPrevent = false;\n document.body.classList.add('e-prevent-select');\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this.dragElement = e.dragElement;\n var rule = closest(e.target, '.e-rule-container');\n var group = closest(e.target, '.e-group-container');\n var dragEventArgs = { dragRuleID: rule !== null ? rule.id : group.id, dragGroupID: group.id, cancel: false };\n this.trigger('dragStart', dragEventArgs);\n this.isDragEventPrevent = dragEventArgs.cancel;\n };\n QueryBuilder.prototype.dragHandler = function (e) {\n if (this.isDragEventPrevent) {\n return;\n }\n var borderLineElem = this.element.querySelectorAll('.e-drag-rule-bottom-line');\n borderLineElem.forEach(function (ele) {\n ele.classList.remove('e-drag-rule-bottom-line');\n });\n borderLineElem = this.element.querySelectorAll('.e-drag-rule-top-line');\n borderLineElem.forEach(function (ele) {\n ele.classList.remove('e-drag-rule-top-line');\n });\n if (isNullOrUndefined(e.target)) {\n return;\n }\n if (e.target.nodeName === 'HTML' || closest(e.target, '.e-qb-dragging-rule') || closest(e.target, '.e-group-header') ||\n !closest(e.target, '#' + this.element.id) || closest(e.target, '.e-disable') || (e.target.parentElement && e.target.parentElement.classList.contains('e-btn-group') && this.enableSeparateConnector)) {\n this.dragElement.classList.add('e-notallowedcur');\n return;\n }\n else {\n this.dragElement.classList.remove('e-notallowedcur');\n }\n var targetElem = closest(e.target, '.e-rule-container');\n var grpElem = closest(e.target, '.e-group-container');\n if (targetElem) {\n var rect = targetElem.getBoundingClientRect();\n var mouseY = e.event.clientY || e.event.changedTouches[0].clientY;\n var distanceToTop = mouseY - rect.top;\n var distanceToBottom = rect.bottom - mouseY;\n var threshold = 20; // Adjust as needed\n if (distanceToTop < threshold) {\n targetElem.classList.add('e-drag-rule-top-line');\n }\n else if (distanceToBottom < threshold) {\n targetElem.classList.add('e-drag-rule-bottom-line');\n }\n }\n else if (e.target.classList.contains('e-rule-list') && e.target.children.length === 0) {\n e.target.classList.add('e-drag-rule-bottom-line');\n }\n else if (e.target.classList.contains('e-rule-list') && e.target.children[0].classList.contains('e-group-container')) {\n var rect = e.target.children[0].getBoundingClientRect();\n var mouseY = e.event.clientY || e.event.changedTouches[0].clientY;\n var distanceToTop = mouseY - rect.top;\n var threshold = 20; // Adjust as needed\n if (distanceToTop < threshold) {\n e.target.classList.add('e-drag-rule-top-line');\n }\n }\n else if (closest(e.target, '.e-group-container') || e.target.classList.contains('e-group-container')) {\n if (!grpElem) {\n grpElem = e.target;\n }\n if (grpElem.id.indexOf('group0') > -1) {\n var rect = e.target.getBoundingClientRect();\n var mouseY = e.event.clientY || e.event.changedTouches[0].clientY;\n var distanceToBottom = rect.bottom - mouseY;\n var threshold = 20; // Adjust as needed\n if (distanceToBottom < threshold) {\n e.target.classList.add('e-drag-rule-bottom-line');\n }\n }\n }\n var dragEventArgs = { dragRuleID: targetElem !== null ? targetElem.id : grpElem !== null ? grpElem.id : null,\n dragGroupID: grpElem !== null ? grpElem.id : null, cancel: false };\n this.trigger('drag', dragEventArgs);\n this.isDragEventPrevent = dragEventArgs.cancel;\n };\n QueryBuilder.prototype.templateParser = function (template) {\n if (template) {\n try {\n if (typeof template !== 'function' && document.querySelectorAll(template).length) {\n return templateCompiler(document.querySelector(template).innerHTML.trim());\n }\n else {\n return compile(template);\n }\n }\n catch (error) {\n return templateCompiler(template);\n }\n }\n return undefined;\n };\n QueryBuilder.prototype.executeDataManager = function (query) {\n var _this = this;\n var data = this.dataManager.executeQuery(query);\n var deferred = new Deferred();\n data.then(function (e) {\n if (e.actual && e.actual.result) {\n _this.dataColl = e.actual.result;\n }\n else {\n _this.dataColl = e.result;\n }\n _this.initControl();\n }).catch(function (e) {\n deferred.reject(e);\n });\n };\n QueryBuilder.prototype.initControl = function () {\n this.initialize();\n this.initWrapper();\n this.wireEvents();\n };\n QueryBuilder.prototype.wireEvents = function () {\n var wrapper = this.getWrapper();\n EventHandler.add(wrapper, 'click', this.clickEventHandler, this);\n EventHandler.add(wrapper, 'focusout', this.focusEventHandler, this);\n EventHandler.add(wrapper, 'focusin', this.focusEventHandler, this);\n EventHandler.add(this.element, 'keydown', this.keyBoardHandler, this);\n EventHandler.add(document, 'keydown', this.keyBoardHandler, this);\n };\n QueryBuilder.prototype.unWireEvents = function () {\n var wrapper = this.getWrapper();\n EventHandler.remove(wrapper, 'click', this.clickEventHandler);\n EventHandler.remove(wrapper, 'focusout', this.focusEventHandler);\n EventHandler.remove(wrapper, 'focusin', this.focusEventHandler);\n EventHandler.remove(this.element, 'keydown', this.keyBoardHandler);\n EventHandler.remove(document, 'keydown', this.keyBoardHandler);\n };\n QueryBuilder.prototype.getParentGroup = function (target, isParent) {\n var groupLevel = (target instanceof Element) ? this.levelColl[target.id] : this.levelColl[\"\" + target];\n var len = isParent ? groupLevel.length - 1 : groupLevel.length;\n var rule = this.rule;\n for (var i = 0; i < len; i++) {\n rule = this.findGroupByIdx(groupLevel[i], rule, i === 0);\n }\n return rule;\n };\n /**\n * Delete the Group\n *\n * @param {Element | string} target - 'target' to be passed to delete the group.\n * @returns {void}\n */\n QueryBuilder.prototype.deleteGroup = function (target) {\n var _this = this;\n var groupElem = target;\n var groupId;\n if (typeof target === 'string') {\n groupId = this.element.id + '_' + target;\n target = document.getElementById(groupId);\n }\n else {\n groupId = groupElem.id.replace(this.element.id + '_', '');\n }\n var args = { groupID: groupId, cancel: false, type: 'deleteGroup' };\n if (!this.isImportRules && !this.prvtEvtTgrDaD) {\n this.trigger('beforeChange', args, function (observedChangeArgs) {\n _this.deleteGroupSuccessCallBack(observedChangeArgs, target);\n });\n }\n else {\n this.deleteGroupSuccessCallBack(args, target);\n }\n };\n QueryBuilder.prototype.deleteGroupSuccessCallBack = function (args, target) {\n if (!args.cancel) {\n var groupElem = target;\n var rule = this.getParentGroup(groupElem, true);\n var index = 0;\n var i = void 0;\n var len = void 0;\n var beforeRules = this.getValidRules(this.rule);\n var nextElem = groupElem.nextElementSibling;\n var prevElem = groupElem.previousElementSibling;\n var element = groupElem.querySelectorAll('.e-group-container');\n var valElem = groupElem.querySelectorAll('.e-tooltip');\n len = valElem.length;\n for (i = 0; i < len; i++) {\n getComponent(valElem[i], 'tooltip').destroy();\n }\n for (i = 0, len = element.length; i < len; i++) {\n delete this.levelColl[element[i].id];\n }\n while (groupElem.previousElementSibling !== null) {\n groupElem = groupElem.previousElementSibling;\n if (!this.enableSeparateConnector || (this.enableSeparateConnector &&\n ((!this.headerTemplate && !groupElem.classList.contains('e-btn-group')) ||\n this.headerTemplate && (groupElem.classList.contains('e-rule-container') ||\n groupElem.classList.contains('e-group-container'))))) {\n index++;\n }\n }\n if (!this.enableSeparateConnector) {\n if (nextElem && nextElem.className.indexOf('e-separate-rule') > -1) {\n removeClass([nextElem], 'e-separate-rule');\n addClass([nextElem], 'e-joined-rule');\n if (prevElem && prevElem.className.indexOf('e-rule-container') > -1) {\n addClass([prevElem], 'e-prev-joined-rule');\n }\n }\n }\n var elem = groupElem.parentElement.parentElement.parentElement;\n var removeString = [];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.isReact || this.isAngular) {\n var remRule = rule.rules[index];\n var ruleElemColl = target.querySelectorAll('.e-rule-container');\n if (remRule && remRule.rules) {\n for (var r = 0; r < remRule.rules.length; r++) {\n var column = this.getColumn(remRule.rules[r].field);\n if (ruleElemColl[r]) {\n var isTemplateRendered = ruleElemColl[r].querySelector('.e-template-value');\n if (column && (column.ruleTemplate || (this.isPlatformTemplate(column) && isTemplateRendered))) {\n removeString.push(ruleElemColl[r].id);\n }\n }\n }\n }\n }\n detach(target);\n if (this.headerTemplate) {\n this.clearQBTemplate([target.id]);\n }\n if (removeString.length) {\n this.clearQBTemplate(removeString);\n }\n rule.rules.splice(index, 1);\n delete this.levelColl[args.groupID];\n this.refreshLevelColl();\n this.disableRuleCondition(elem, rule);\n if (this.enableSeparateConnector && prevElem && ((!this.headerTemplate && prevElem.classList.contains('e-btn-group')) ||\n (this.headerTemplate && prevElem.classList.contains('e-custom-group-btn')))) {\n detach(prevElem);\n }\n if (!this.isImportRules && !this.prvtEvtTgrDaD) {\n this.trigger('change', args);\n }\n this.filterRules(beforeRules, this.getValidRules(this.rule), 'deleteGroup');\n }\n };\n QueryBuilder.prototype.isPlatformTemplate = function (column) {\n var isTemp = false;\n isTemp = column.template && (typeof column.template === 'string' || column.template.create === undefined);\n return isTemp;\n };\n QueryBuilder.prototype.deleteRule = function (target) {\n var _this = this;\n var groupElem = closest(target, '.e-group-container');\n var groupID = groupElem.id.replace(this.element.id + '_', '');\n var ruleID = closest(target, '.e-rule-container').id.replace(this.element.id + '_', '');\n var args = { groupID: groupID, ruleID: ruleID, cancel: false, type: 'deleteRule' };\n if (!this.isImportRules && !this.prvtEvtTgrDaD) {\n this.trigger('beforeChange', args, function (observedChangeArgs) {\n _this.deleteRuleSuccessCallBack(observedChangeArgs, target);\n });\n }\n else {\n this.deleteRuleSuccessCallBack(args, target);\n }\n };\n QueryBuilder.prototype.deleteRuleSuccessCallBack = function (args, target) {\n if (!args.cancel) {\n var groupElem = closest(target, '.e-group-container');\n var rule = this.getParentGroup(groupElem);\n var ruleElem = closest(target, '.e-rule-container');\n var beforeRules = this.getValidRules(this.rule);\n var prevElem = ruleElem.previousElementSibling;\n var index = 0;\n var clnruleElem = ruleElem;\n var nextElem = ruleElem.nextElementSibling;\n var valElem = ruleElem.querySelectorAll('.e-tooltip');\n var i = void 0;\n var len = valElem.length;\n for (i = 0; i < len; i++) {\n getComponent(valElem[i], 'tooltip').destroy();\n }\n while (ruleElem.previousElementSibling !== null) {\n ruleElem = ruleElem.previousElementSibling;\n if (!this.enableSeparateConnector || (this.enableSeparateConnector &&\n ((!this.headerTemplate && !ruleElem.classList.contains('e-btn-group')) ||\n this.headerTemplate && (ruleElem.classList.contains('e-rule-container') ||\n ruleElem.classList.contains('e-group-container'))))) {\n index++;\n }\n }\n var column = this.getColumn(rule.rules[index].field);\n if (column && column.template && clnruleElem.querySelector('.e-template')) {\n this.templateDestroy(column, clnruleElem.querySelector('.e-template').id);\n }\n if (!prevElem || prevElem.className.indexOf('e-rule-container') < 0) {\n if (nextElem) {\n removeClass([nextElem], 'e-joined-rule');\n }\n }\n if (!nextElem || nextElem.className.indexOf('e-rule-container') < 0) {\n if (prevElem) {\n removeClass([prevElem], 'e-prev-joined-rule');\n }\n }\n var isTemplateRendered = clnruleElem.querySelector('.e-template-value');\n // eslint-disable\n try {\n if (this.enableSeparateConnector && (clnruleElem.previousElementSibling || clnruleElem.nextElementSibling)) {\n var previousElem = clnruleElem.previousElementSibling;\n var nextElem_1 = clnruleElem.nextElementSibling;\n if (isNullOrUndefined(nextElem_1) && ((!this.headerTemplate && previousElem.classList.contains('e-btn-group'))\n || (this.headerTemplate && previousElem.classList.contains('e-custom-group-btn')))) {\n if (previousElem && previousElem.previousElementSibling && previousElem.previousElementSibling.classList.contains('e-rule-container')) {\n var rule_1 = this.getRule(previousElem.previousElementSibling);\n rule_1.condition = null;\n }\n detach(previousElem);\n }\n else if ((!this.headerTemplate && nextElem_1.classList.contains('e-btn-group'))\n || (this.headerTemplate && nextElem_1.classList.contains('e-custom-group-btn'))) {\n detach(nextElem_1);\n }\n }\n detach(clnruleElem);\n }\n catch (err) {\n return;\n }\n if (column && column.ruleTemplate) {\n this.clearQBTemplate([clnruleElem.id]);\n }\n if (column && this.isPlatformTemplate(column) && isTemplateRendered) {\n this.clearQBTemplate([clnruleElem.id]);\n }\n rule.rules.splice(index, 1);\n if (!(rule.rules[0] && rule.rules[0].rules)) {\n this.disableRuleCondition(groupElem, rule, this.enableSeparateConnector ? true : false);\n }\n var tooltipElem = this.element.querySelectorAll('.e-tooltip');\n for (var i_3 = 0; i_3 < tooltipElem.length; i_3++) {\n getComponent(tooltipElem[i_3], 'tooltip').refresh(tooltipElem[i_3]);\n }\n if (!this.isImportRules && !this.prvtEvtTgrDaD) {\n this.trigger('change', args);\n }\n this.filterRules(beforeRules, this.getValidRules(this.rule), 'deleteRule');\n }\n };\n QueryBuilder.prototype.setGroupRules = function (rule, isRoot) {\n if (this.headerTemplate && isRoot) {\n this.isRoot = true;\n }\n this.reset();\n this.groupIdCounter = 1;\n this.ruleIdCounter = 0;\n this.isImportRules = true;\n this.setProperties({ rule: rule }, true);\n rule = this.getRuleCollection(this.rule, false);\n this.importRules(this.rule, this.element.querySelector('.e-group-container'), true, this.rule.not, isRoot);\n if (rule.isLocked) {\n var lockGrpTarget = this.element.querySelector('.e-group-container').querySelector('.e-lock-grp-btn');\n this.groupLock(lockGrpTarget);\n }\n this.isImportRules = false;\n };\n QueryBuilder.prototype.keyBoardHandler = function (e) {\n if (e.currentTarget === this.element && this.readonly && (e.keyCode === 38 || e.keyCode === 40 || e.keyCode === 13)) {\n e.preventDefault();\n }\n else if (e.code === 'Escape' && this.allowDragAndDrop) {\n this.isDragEventPrevent = true;\n document.body.classList.remove('e-prevent-select');\n var borderLineElem = this.element.querySelectorAll('.e-drag-rule-bottom-line');\n borderLineElem.forEach(function (ele) {\n ele.classList.remove('e-drag-rule-bottom-line');\n });\n borderLineElem = this.element.querySelectorAll('.e-drag-rule-top-line');\n borderLineElem.forEach(function (ele) {\n ele.classList.remove('e-drag-rule-top-line');\n });\n borderLineElem = this.element.querySelectorAll('.e-qb-dragging-rule');\n borderLineElem.forEach(function (ele) {\n ele.classList.remove('e-qb-dragging-rule');\n });\n var dragElemnet = this.element.querySelector('.e-cloneproperties');\n if (dragElemnet) {\n remove(dragElemnet);\n }\n if (this.enableSeparateConnector) {\n this.refresh();\n }\n }\n };\n QueryBuilder.prototype.clearQBTemplate = function (ruleElemColl) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.isReact || this.isAngular) {\n this.clearTemplate(ruleElemColl);\n }\n };\n QueryBuilder.prototype.disableRuleCondition = function (groupElem, rules, isNewRuleAdded, isNewGroup) {\n if (!this.headerTemplate) {\n if (this.readonly) {\n return;\n }\n var count = groupElem.querySelector('.e-rule-list').childElementCount;\n var andElem = groupElem.querySelector('.e-btngroup-and');\n var orElem = groupElem.querySelector('.e-btngroup-or');\n if (count > 1) {\n andElem.disabled = false;\n orElem.disabled = false;\n if (orElem.nextElementSibling.classList.contains('e-btn-disable') ||\n andElem.nextElementSibling.classList.contains('e-btn-disable')) {\n orElem.nextElementSibling.classList.remove('e-btn-disable');\n andElem.nextElementSibling.classList.remove('e-btn-disable');\n }\n if (this.enableSeparateConnector && !isNewRuleAdded) {\n var index = 0;\n var element = void 0;\n // eslint-disable-next-line no-constant-condition\n while (true) {\n var andGroup = groupElem.parentElement.querySelectorAll('.e-btngroup-and');\n var orGroup = groupElem.parentElement.querySelectorAll('.e-btngroup-or');\n andElem = andGroup[andGroup.length - (1 + index)];\n orElem = orGroup[orGroup.length - (1 + index)];\n element = andGroup[andGroup.length - (1 + index)];\n if (element && element.parentElement && element.parentElement.style.display === 'none') {\n index++;\n }\n else {\n break;\n }\n }\n var elem = groupElem.previousElementSibling;\n while (elem && !elem.classList.contains('e-rule-container')) {\n if (elem.classList.contains('e-group-container')) {\n elem = elem.querySelectorAll('.e-rule-container')[elem.querySelectorAll('.e-rule-container').length - 1];\n break;\n }\n elem = elem.previousElementSibling;\n }\n if (isNewGroup && groupElem.classList.contains('e-group-container')) {\n elem = groupElem;\n var prevRule = this.getGroup(elem);\n if (prevRule.condition === 'or') {\n orElem.checked = true;\n }\n else {\n andElem.checked = true;\n }\n }\n else if (elem && elem.classList.contains('e-rule-container')) {\n var ruleID = elem.id.replace(this.element.id + '_', '');\n var prevRule = this.getRule(ruleID);\n if (prevRule.condition === 'or') {\n orElem.checked = true;\n }\n else {\n andElem.checked = true;\n }\n }\n }\n else if (!isNewRuleAdded) {\n if (rules && rules.condition === 'or') {\n orElem.checked = true;\n }\n else {\n andElem.checked = true;\n }\n }\n }\n else {\n if (this.enableSeparateConnector && !isNewRuleAdded) {\n var index = 0;\n var element = void 0;\n // eslint-disable-next-line no-constant-condition\n while (true) {\n var andGroup = groupElem.parentElement.querySelectorAll('.e-btngroup-and');\n var orGroup = groupElem.parentElement.querySelectorAll('.e-btngroup-or');\n andElem = andGroup[andGroup.length - (1 + index)];\n orElem = orGroup[orGroup.length - (1 + index)];\n element = andGroup[andGroup.length - (1 + index)];\n if (element && element.parentElement && element.parentElement.style.display === 'none') {\n index++;\n }\n else {\n break;\n }\n }\n var elem = void 0;\n var tempElem = groupElem.previousElementSibling;\n while (tempElem) {\n if (tempElem.classList.contains('e-group-container')) {\n tempElem = tempElem.querySelectorAll('.e-rule-container')[tempElem.querySelectorAll('.e-rule-container').length - 1];\n }\n if (tempElem.classList.contains('e-rule-container')) {\n elem = tempElem;\n break;\n }\n tempElem = tempElem.previousElementSibling;\n }\n if (isNullOrUndefined(elem) && groupElem.querySelectorAll('.e-rule-container')[groupElem.querySelectorAll('.e-rule-container').length - 1]) {\n elem = groupElem.querySelectorAll('.e-rule-container')[groupElem.querySelectorAll('.e-rule-container').length - 1];\n }\n if (isNewGroup && groupElem.classList.contains('e-group-container')) {\n elem = groupElem;\n var prevRule = this.getGroup(elem);\n if (prevRule.condition === 'or') {\n orElem.checked = true;\n }\n else {\n andElem.checked = true;\n }\n }\n else if (elem) {\n var ruleID = elem.id.replace(this.element.id + '_', '');\n var prevRule = this.getRule(ruleID);\n if (prevRule.condition === 'or' && orElem) {\n orElem.checked = true;\n }\n else if (andElem) {\n andElem.checked = true;\n }\n }\n }\n else if (!isNewRuleAdded) {\n andElem.checked = false;\n andElem.disabled = true;\n orElem.checked = false;\n orElem.disabled = true;\n if (rules) {\n orElem.nextElementSibling.classList.add('e-btn-disable');\n andElem.nextElementSibling.classList.add('e-btn-disable');\n }\n }\n }\n }\n };\n /**\n * Get the valid rule or rules collection.\n *\n * @param {RuleModel} currentRule - 'currentRule' to be passed to get the valid rules.\n * @returns {RuleModel} - Valid rule or rules collection\n */\n QueryBuilder.prototype.getValidRules = function (currentRule) {\n this.isValueEmpty = true;\n if (!currentRule) {\n currentRule = this.getRules();\n }\n var ruleCondtion = currentRule.condition;\n var notCondition = currentRule.not;\n var ruleColl = extend([], currentRule.rules, [], true);\n var rule = !isNullOrUndefined(currentRule.isLocked) ?\n this.getRuleCollection({ condition: ruleCondtion, rules: ruleColl, not: notCondition, isLocked: currentRule.isLocked }, true) :\n this.getRuleCollection({ condition: ruleCondtion, rules: ruleColl, not: notCondition }, true);\n this.isValueEmpty = false;\n return rule;\n };\n QueryBuilder.prototype.getRuleCollection = function (rule, isValidRule) {\n if (isNullOrUndefined(rule)) {\n return null;\n }\n var orgRule;\n if (rule.rules && rule.rules.length && (Object.keys(rule.rules[0]).length > 6 || isValidRule)) {\n var jLen = rule.rules.length;\n for (var j = 0; j < jLen; j++) {\n orgRule = rule.rules[j];\n orgRule = this.getRuleCollection(orgRule, isValidRule);\n rule.rules[j] = orgRule;\n if (Object.keys(orgRule).length < 1 && isValidRule) {\n rule.rules.splice(j, 1);\n j--;\n jLen--;\n }\n }\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var customObj = rule.custom;\n if ((rule.field && rule.field !== '') && (isNullOrUndefined(customObj) || (customObj && (customObj.type !== 'question' &&\n customObj.type !== 'answer')))) {\n if (rule.operator) {\n if (rule.operator.toString().indexOf('null') > -1 || rule.operator.toString().indexOf('empty') > -1) {\n rule.value = null;\n }\n }\n if ((this.isRefreshed && this.enablePersistence) || (rule.field !== '' && rule.operator !== '' &&\n (this.isValueEmpty ? rule.value !== '' && rule.value !== undefined : rule.value !== undefined)) ||\n (customObj && customObj.isQuestion)) {\n var condition = rule.condition;\n var lockedRule = rule.isLocked;\n rule = { 'label': rule.label, 'field': rule.field, 'operator': rule.operator, 'type': rule.type, 'value': rule.value };\n if (!isNullOrUndefined(lockedRule)) {\n rule.isLocked = lockedRule;\n }\n if (condition) {\n rule.condition = condition;\n }\n if (customObj) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n rule.custom = customObj;\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if ((rule.operator === 'in' || rule.operator === 'notin') && rule.value && rule.value.length === 0) {\n rule = {};\n }\n }\n else {\n rule = {};\n }\n }\n else {\n if (customObj && (customObj.type === 'question' || customObj.type === 'answer')) {\n var notValue = rule.not;\n rule = { 'label': rule.label, 'field': rule.field, 'operator': rule.operator, 'type': rule.type, 'value': rule.value,\n 'condition': rule.condition, 'rules': rule.rules\n };\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n rule.custom = customObj;\n if (this.enableNotCondition) {\n rule.not = notValue;\n }\n }\n else if ((isNullOrUndefined(rule.condition)) && isNullOrUndefined(rule.rules)) {\n rule = {};\n }\n else {\n var isLocked = rule.isLocked;\n if (this.enableNotCondition) {\n rule = { 'condition': rule.condition, 'rules': rule.rules, 'not': rule.not };\n }\n else {\n rule = { 'condition': rule.condition, 'rules': rule.rules };\n }\n if (!isNullOrUndefined(isLocked)) {\n rule.isLocked = isLocked;\n }\n if (customObj) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n rule.custom = customObj;\n }\n if (rule.rules && rule.rules.length === 0) {\n rule = {};\n }\n }\n }\n return rule;\n };\n /**\n * Set the rule or rules collection.\n *\n * @param {RuleModel} rule - 'rule' to be passed to set rules.\n * @returns {void}.\n */\n QueryBuilder.prototype.setRules = function (rule) {\n var mRules = extend({}, rule, {}, true);\n if (this.headerTemplate) {\n this.setGroupRules(mRules, true);\n }\n else {\n this.setGroupRules(mRules);\n }\n };\n /**\n * Gets the rule or rule collection.\n *\n * @returns {object} - Rule or rule collection\n */\n QueryBuilder.prototype.getRules = function () {\n var rule;\n if (this.enableNotCondition) {\n rule = { condition: this.rule.condition, rules: this.rule.rules, not: this.rule.not };\n }\n else {\n rule = { condition: this.rule.condition, rules: this.rule.rules };\n }\n if (!isNullOrUndefined(this.rule.isLocked)) {\n rule.isLocked = this.rule.isLocked;\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.rule.custom) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n rule.custom = this.rule.custom;\n }\n return rule;\n };\n /**\n * Gets the rule.\n *\n * @param {string | HTMLElement} elem - 'elem' to be passed to get rule.\n * @returns {object} - Rule\n */\n QueryBuilder.prototype.getRule = function (elem) {\n var ruleElem;\n var ruleId;\n var index = 0;\n if (elem instanceof HTMLElement) {\n ruleElem = closest(elem, '.e-rule-container');\n }\n else {\n ruleId = this.element.id + '_' + elem;\n ruleElem = document.getElementById(ruleId);\n }\n if (isNullOrUndefined(ruleElem)) {\n return null;\n }\n var groupElem = closest(ruleElem, '.e-group-container');\n var rule = this.getParentGroup(groupElem);\n while (ruleElem.previousElementSibling !== null) {\n ruleElem = ruleElem.previousElementSibling;\n if (!this.enableSeparateConnector || (this.enableSeparateConnector &&\n ((!this.headerTemplate && !ruleElem.classList.contains('e-btn-group')) ||\n this.headerTemplate && (ruleElem.classList.contains('e-rule-container') ||\n ruleElem.classList.contains('e-group-container'))))) {\n index++;\n }\n }\n return rule.rules[index];\n };\n /**\n * Gets the group.\n *\n * @param {string | Element} target - 'target' to be passed to get group.\n * @returns {object} -Group\n */\n QueryBuilder.prototype.getGroup = function (target) {\n if (target instanceof Element && target.className.indexOf('e-group-container') < 1) {\n target = closest(target, '.e-group-container');\n }\n var groupId = (target instanceof Element) ? target.id : this.element.id + '_' + target;\n var rule = this.getParentGroup(groupId);\n return rule;\n };\n /**\n * Deletes the group or groups based on the group ID.\n *\n * @param {string[]} groupIdColl - 'groupIdColl' to be passed to delete groups.\n * @returns {void}\n */\n QueryBuilder.prototype.deleteGroups = function (groupIdColl) {\n var i;\n var len = groupIdColl.length;\n var groupID;\n for (i = 0; i < len; i++) {\n groupID = this.element.id + '_' + groupIdColl[i];\n this.deleteGroup(document.getElementById(groupID));\n }\n };\n /**\n * Return the Query from current rules collection.\n *\n * @returns {Promise} - Query from current rules collection\n * @blazorType object\n */\n QueryBuilder.prototype.getFilteredRecords = function () {\n var predicate = this.getPredicate(this.getValidRules(this.rule));\n var dataManagerQuery = isNullOrUndefined(predicate) ? new Query() : new Query().where(predicate);\n return this.dataManager.executeQuery(dataManagerQuery);\n };\n /**\n * Deletes the rule or rules based on the rule ID.\n *\n * @param {string[]} ruleIdColl - 'ruleIdColl' to be passed to delete rules.\n * @returns {void}.\n */\n QueryBuilder.prototype.deleteRules = function (ruleIdColl) {\n var i;\n var len = ruleIdColl.length;\n var ruleID;\n for (i = 0; i < len; i++) {\n ruleID = this.element.id + '_' + ruleIdColl[i];\n this.deleteRule(document.getElementById(ruleID));\n }\n };\n /**\n * Gets the query for Data Manager.\n *\n * @param {RuleModel} rule - 'rule' to be passed to get query.\n * @returns {string} - Query for Data Manager\n */\n QueryBuilder.prototype.getDataManagerQuery = function (rule) {\n var predicate = this.getPredicate(rule);\n var query;\n var fields = [];\n for (var i = 0, len = Object.keys(this.columns); i < len.length; i++) {\n fields.push(this.columns[i].field);\n }\n if (rule.rules.length) {\n query = new Query().select(fields).where(predicate);\n }\n else {\n query = new Query().select(fields);\n }\n return query;\n };\n /**\n * Get the predicate from collection of rules.\n *\n * @param {RuleModel} rule - 'rule' to be passed to get predicate.\n * @returns {Predicate} - Predicate from collection of rules\n */\n QueryBuilder.prototype.getPredicate = function (rule) {\n var ruleColl = rule.rules;\n var pred;\n var pred2;\n var ruleValue;\n var ignoreCase = false;\n var column;\n if (!ruleColl) {\n return pred;\n }\n for (var i = 0, len = ruleColl.length; i < len; i++) {\n var operator = ruleColl[i].operator;\n if (operator === 'notstartswith') {\n operator = 'doesnotstartwith';\n }\n else if (operator === 'notendswith') {\n operator = 'doesnotendwith';\n }\n else if (operator === 'notcontains') {\n operator = 'doesnotcontain';\n }\n var keys = Object.keys(ruleColl[i]);\n ignoreCase = false;\n if (keys.indexOf('rules') > -1 && ruleColl[i].rules) {\n pred2 = this.getPredicate(ruleColl[i]);\n if (pred2) {\n if (pred) {\n if (rule.condition === 'and') {\n pred = pred.and(pred2);\n }\n else {\n pred = pred.or(pred2);\n }\n }\n else {\n pred = pred2;\n }\n }\n }\n else if (!isNullOrUndefined(operator) && !isNullOrUndefined(operator.length)) {\n var oper = ruleColl[i].operator.toLowerCase();\n var isDateFilter = false;\n var dateOperColl = ['equal', 'notequal', 'greaterthan', 'greaterthanorequal', 'lessthan', 'lessthanorequal'];\n if (ruleColl[i].type === 'string') {\n ignoreCase = this.matchCase ? false : true;\n }\n if (ruleColl[i].type === 'date' && dateOperColl.indexOf(oper) > -1) {\n ignoreCase = true;\n }\n column = this.getColumn(ruleColl[i].field);\n if (oper.indexOf('null') > -1 || oper.indexOf('empty') > -1) {\n ruleColl[i].value = null;\n }\n else if (ruleColl[i].type === 'date' && !(ruleColl[i].value instanceof Array)) {\n var format = this.getFormat(column.format);\n if (!isNullOrUndefined(ruleColl[i].value)) {\n ruleValue = this.getDate(ruleColl[i].value, format);\n if (dateOperColl.indexOf(oper) > -1 && !this.isTime(ruleColl[i].value)) {\n isDateFilter = true;\n }\n }\n else {\n ruleValue = null;\n }\n }\n else {\n ruleValue = ruleColl[i].value;\n }\n if (i === 0) {\n if (isDateFilter || (oper.indexOf('in') > -1 || oper.indexOf('between') > -1 || oper.indexOf('null') > -1 ||\n oper.indexOf('empty') > -1) && (oper.indexOf('contain') < 0)) {\n pred = isDateFilter ? this.datePredicate(ruleColl[i], ruleValue) :\n this.arrayPredicate(ruleColl[i]);\n }\n else {\n var value = ruleValue;\n if (value !== '') {\n pred = new Predicate(ruleColl[i].field, operator, ruleValue, ignoreCase);\n }\n }\n }\n else {\n if (isDateFilter || (oper.indexOf('in') > -1 || oper.indexOf('between') > -1 ||\n oper.indexOf('null') > -1 || oper.indexOf('empty') > -1) && oper.indexOf('contain') < 0) {\n pred = isDateFilter ? this.datePredicate(ruleColl[i], ruleValue, pred, rule.condition) :\n this.arrayPredicate(ruleColl[i], pred, rule.condition);\n }\n else {\n if (rule.condition === 'and') {\n var value = ruleValue;\n if (pred && value !== '') {\n pred\n = pred.and(ruleColl[i].field, operator, ruleValue, ignoreCase);\n }\n else if (value !== '') {\n pred = new Predicate(ruleColl[i].field, operator, ruleValue, ignoreCase);\n }\n }\n else {\n var value = ruleValue;\n if (pred && value !== '') {\n pred = pred.or(ruleColl[i].field, operator, ruleValue, ignoreCase);\n }\n else if (value !== '') {\n pred = new Predicate(ruleColl[i].field, operator, ruleValue, ignoreCase);\n }\n }\n }\n }\n }\n }\n if (this.dataSource instanceof DataManager) {\n if (!isNullOrUndefined(pred) && (pred.operator === 'isnull' || pred.operator === 'isnotnull')) {\n pred.operator = pred.operator === 'isnull' ? 'equal' : 'notequal';\n }\n }\n return pred;\n };\n QueryBuilder.prototype.getLocale = function () {\n var gregorianFormat = '.dates.calendars.gregorian.days.format.short';\n var localeString = this.locale;\n var mainVal = 'main.';\n var cultureObj = getValue(mainVal + '' + this.locale + gregorianFormat, cldrData);\n if (!cultureObj) {\n localeString = 'en';\n }\n return localeString;\n };\n QueryBuilder.prototype.getColumn = function (field, col) {\n var columns = this.columns;\n var column;\n columns = col ? col : columns;\n for (var i = 0, iLen = columns.length; i < iLen; i++) {\n if (columns[i].field === field) {\n column = columns[i];\n break;\n }\n else if (columns[i].columns) {\n column = this.getColumn(field, columns[i].columns);\n if (column) {\n break;\n }\n }\n else if (field && field.indexOf(this.separator) > -1) {\n if (this.separator !== '' && columns[i].field === field.split(this.separator)[0]) {\n column = columns[i];\n break;\n }\n }\n }\n return column;\n };\n /* eslint-disable */\n /**\n * Return the operator bound to the column.\n *\n * @returns {[key: string]: Object}[] - Operator bound to the column\n */\n /* eslint-enable */\n QueryBuilder.prototype.getOperators = function (field) {\n var column = this.getColumn(field);\n return column.operators;\n };\n QueryBuilder.prototype.setTime = function (date, isStart) {\n if (isStart) {\n date.setHours(0, 0, 0);\n }\n else {\n date.setHours(23, 59, 59);\n }\n return date;\n };\n QueryBuilder.prototype.datePredicate = function (ruleColl, value, predicate, condition) {\n var pred;\n var startDate = this.setTime(new Date(value.getTime()), true);\n var endDate = this.setTime(value);\n switch (ruleColl.operator) {\n case 'equal':\n pred = new Predicate(ruleColl.field, 'greaterthanorequal', startDate);\n pred = pred.and(ruleColl.field, 'lessthanorequal', endDate);\n break;\n case 'notequal':\n pred = new Predicate(ruleColl.field, 'lessthan', startDate);\n pred = pred.or(ruleColl.field, 'greaterthan', endDate);\n break;\n case 'greaterthan':\n pred = new Predicate(ruleColl.field, 'greaterthan', endDate);\n break;\n case 'greaterthanorequal':\n pred = new Predicate(ruleColl.field, 'greaterthanorequal', startDate);\n break;\n case 'lessthan':\n pred = new Predicate(ruleColl.field, 'lessthan', startDate);\n break;\n case 'lessthanorequal':\n pred = new Predicate(ruleColl.field, 'lessthanorequal', endDate);\n break;\n }\n if (pred) {\n if (predicate) {\n if (condition === 'and') {\n predicate = predicate.and(pred);\n }\n else if (condition === 'or') {\n predicate = predicate.or(pred);\n }\n }\n else {\n predicate = pred;\n }\n }\n return predicate;\n };\n QueryBuilder.prototype.arrayPredicate = function (ruleColl, predicate, condition) {\n var value = ruleColl.value;\n var operator = ruleColl.operator.toString();\n var nullValue = ruleColl.value;\n var pred;\n var column = this.getColumn(ruleColl.field);\n var format = this.getFormat(column.format);\n if (operator.indexOf('null') > -1 || operator.indexOf('empty') > -1) {\n switch (operator) {\n case 'isnull':\n pred = new Predicate(ruleColl.field, 'isnull', nullValue);\n break;\n case 'isnotnull':\n pred = new Predicate(ruleColl.field, 'isnotnull', nullValue);\n break;\n case 'isempty':\n pred = new Predicate(ruleColl.field, 'equal', '');\n break;\n case 'isnotempty':\n pred = new Predicate(ruleColl.field, 'notequal', '');\n break;\n }\n }\n if (!(operator.indexOf('null') > -1 || operator.indexOf('empty') > -1)) {\n for (var j = 0, jLen = value.length; j < jLen; j++) {\n if (value[j] !== '' || ((operator === 'in' || operator === 'notin') && column.type === 'string')) {\n if (j === 0) {\n var gte = 'greaterthanorequal';\n switch (operator) {\n case 'between':\n if (column.type !== 'date') {\n pred = new Predicate(ruleColl.field, gte, value[j]);\n }\n else {\n pred = new Predicate(ruleColl.field, gte, value[j] ?\n (this.isTime(value[j]) ? this.getDate(value[j], format) :\n this.setTime(this.getDate(value[j], format), true)) : null);\n }\n break;\n case 'notbetween':\n if (column.type === 'date') {\n pred = new Predicate(ruleColl.field, 'lessthan', value[j] ?\n (this.isTime(value[j]) ? this.getDate(value[j], format) :\n this.setTime(this.getDate(value[j], format), true)) : null);\n }\n else {\n pred = new Predicate(ruleColl.field, 'lessthan', value[j]);\n }\n break;\n case 'in':\n pred = new Predicate(ruleColl.field, 'equal', value[j]);\n break;\n case 'notin':\n pred = new Predicate(ruleColl.field, 'notequal', value[j]);\n break;\n }\n }\n else {\n var gt = 'greaterthan';\n switch (ruleColl.operator) {\n case 'between':\n if (column.type === 'date') {\n pred = pred.and(ruleColl.field, 'lessthanorequal', value[j] ?\n (this.isTime(value[j]) ? this.getDate(value[j], format) :\n this.setTime(this.getDate(value[j], format))) : value[j]);\n }\n else {\n pred = pred.and(ruleColl.field, 'lessthanorequal', value[j]);\n }\n break;\n case 'notbetween':\n if (column.type === 'date') {\n pred = pred.or(ruleColl.field, gt, value[j] ?\n (this.isTime(value[j]) ? this.getDate(value[j], format) :\n this.setTime(this.getDate(value[j], format))) : value[j]);\n }\n else {\n pred = pred.or(ruleColl.field, 'greaterthan', value[j]);\n }\n break;\n case 'in':\n pred = pred.or(ruleColl.field, 'equal', value[j]);\n break;\n case 'notin':\n pred = pred.and(ruleColl.field, 'notequal', value[j]);\n break;\n }\n }\n }\n }\n }\n if (pred) {\n if (predicate) {\n if (condition === 'and') {\n predicate = predicate.and(pred);\n }\n else if (condition === 'or') {\n predicate = predicate.or(pred);\n }\n }\n else {\n predicate = pred;\n }\n }\n return predicate;\n };\n QueryBuilder.prototype.getDate = function (value, format) {\n var currDate = this.intl.parseDate(value, format);\n if (value.indexOf(':') > -1 && (value.indexOf('/') < 0 && value.indexOf(',') < 0\n && value.indexOf('-') < 0)) {\n currDate = new Date();\n currDate.setHours(parseInt(value.split(':')[0], 10));\n currDate.setMinutes(parseInt(value.split(':')[1], 10));\n if (value.split(':')[2]) {\n currDate.setSeconds(parseInt(value.split(':')[2], 10));\n }\n }\n return currDate;\n };\n QueryBuilder.prototype.isTime = function (value) {\n if (value && value.indexOf(':') > -1) {\n return true;\n }\n return false;\n };\n QueryBuilder.prototype.importRules = function (rule, parentElem, isReset, not, isRoot) {\n if (!isReset) {\n parentElem = this.renderGroup(rule, rule.condition, parentElem, not);\n }\n else {\n if (rule.rules && rule.rules.length > 1 && !this.headerTemplate) {\n // enable/disable conditions when rule group is added\n var orElem = parentElem.querySelector('.e-btngroup-or');\n var andElem = parentElem.querySelector('.e-btngroup-and');\n if (this.enableSeparateConnector && parentElem.previousElementSibling) {\n orElem = parentElem.previousElementSibling.querySelector('.e-btngroup-or');\n andElem = parentElem.previousElementSibling.querySelector('.e-btngroup-and');\n }\n orElem.disabled = false;\n andElem.disabled = false;\n if (this.enableSeparateConnector) {\n var elem = parentElem.previousElementSibling;\n while (elem && !elem.classList.contains('e-rule-container')) {\n if (elem.classList.contains('e-group-container')) {\n elem = elem.querySelectorAll('.e-rule-container')[elem.querySelectorAll('.e-rule-container').length - 1];\n break;\n }\n elem = elem.previousElementSibling;\n }\n if (elem && elem.classList.contains('e-rule-container')) {\n var ruleID = elem.id.replace(this.element.id + '_', '');\n var prevRule = this.getRule(ruleID);\n if (prevRule.condition === 'or') {\n orElem.checked = true;\n }\n else {\n andElem.checked = true;\n }\n }\n }\n else {\n if (rule.condition === 'or') {\n orElem.checked = true;\n }\n else {\n andElem.checked = true;\n }\n }\n }\n else {\n // enable/disable conditions when rule condition is added\n this.disableRuleCondition(parentElem);\n }\n if (this.headerTemplate && isRoot) {\n parentElem = this.renderGroup(rule, rule.condition, this.element, rule.not, isRoot);\n }\n if (this.enableNotCondition && !this.headerTemplate) {\n var tglBtnElem = parentElem.querySelector('.e-qb-toggle');\n if (rule.not) {\n addClass([tglBtnElem], 'e-active-toggle');\n }\n else {\n removeClass([tglBtnElem], 'e-active-toggle');\n }\n }\n }\n if (rule.rules && rule.rules.length === 0 && this.headerTemplate) {\n rule.rules[0] = { 'label': '', 'field': '', 'operator': '', 'type': '', 'value': '' };\n }\n var ruleColl = rule.rules;\n if (!isNullOrUndefined(ruleColl)) {\n for (var i = 0, len = ruleColl.length; i < len; i++) {\n var keys = Object.keys(ruleColl[i]);\n if (!isNullOrUndefined(ruleColl[i].rules) && keys.indexOf('rules') > -1 && (ruleColl[i].rules.length !== 0)) {\n if (this.element.querySelectorAll('.e-group-container').length > this.maxGroupCount) {\n return null;\n }\n parentElem = this.renderGroup(ruleColl[i], ruleColl[i].condition, parentElem, ruleColl[i].not);\n parentElem = this.importRules(ruleColl[i], parentElem, true);\n }\n else {\n this.renderRule(ruleColl[i], parentElem);\n }\n if (!isNullOrUndefined(ruleColl[i].rules) && ruleColl[i].isLocked) {\n var lockGrpTarget = parentElem.querySelector('.e-rule-list').children[i].querySelector('.e-lock-grp-btn');\n this.groupLock(lockGrpTarget);\n }\n }\n }\n if (parentElem) {\n parentElem = closest(parentElem, '.e-rule-list');\n }\n if (parentElem) {\n parentElem = closest(parentElem, '.e-group-container');\n }\n return parentElem;\n };\n QueryBuilder.prototype.renderGroup = function (rule, condition, parentElem, not, isRoot) {\n this.addGroupElement(true, parentElem, condition, false, not, isRoot, rule); //Child group\n var element = parentElem.querySelectorAll('.e-group-container');\n var cloneElem = parentElem.querySelector('.e-rule-list').children;\n if (this.showButtons.cloneGroup && this.cloneGrpBtnClick && this.isMiddleGroup) {\n this.isMiddleGroup = false;\n this.cloneGrpBtnClick = false;\n var index = 0;\n var tempGroupIndex = this.groupIndex + 1;\n if (this.enableSeparateConnector) {\n for (var i = 0; i < tempGroupIndex; i++) {\n if (cloneElem[i].classList.contains('e-rule-container')) {\n tempGroupIndex++;\n index++;\n }\n }\n }\n return cloneElem[this.groupIndex + index + 1]; // group added in the middle\n }\n else if (this.showButtons.cloneGroup && this.cloneGrpBtnClick && this.isLastGroup) {\n this.isLastGroup = false;\n this.cloneGrpBtnClick = false;\n return cloneElem[cloneElem.length - 1]; // group added in the end\n }\n else {\n return element[element.length - 1];\n }\n };\n QueryBuilder.prototype.renderRule = function (rule, parentElem) {\n if (parentElem.className.indexOf('e-group-container') > -1) {\n this.addRuleElement(parentElem, rule); //Create rule\n }\n else {\n this.addRuleElement(parentElem.querySelector('.e-group-container'), rule); //Create group\n }\n };\n QueryBuilder.prototype.enableReadonly = function () {\n var target = this.element;\n var elem = target.querySelectorAll('.e-dropdownlist, .e-dropdowntree, .e-numerictextbox, .e-textbox, .e-datepicker, .e-multiselect .e-lib, .e-radio');\n for (var i = 0; i < elem.length; i++) {\n if (elem[i].classList.contains('e-dropdownlist')) {\n var dropDownObj = getInstance(elem[i], DropDownList);\n dropDownObj.readonly = this.isReadonly;\n }\n else if (elem[i].classList.contains('e-dropdowntree')) {\n var dropDownTreeObj = getComponent(elem[i], 'dropdowntree');\n dropDownTreeObj.readonly = this.isReadonly;\n }\n else if (elem[i].classList.contains('e-numerictextbox')) {\n var numericTextBoxObj = getInstance(elem[i], NumericTextBox);\n numericTextBoxObj.readonly = this.isReadonly;\n }\n else if (elem[i].classList.contains('e-textbox')) {\n var textBoxObj = getInstance(elem[i], TextBox);\n textBoxObj.readonly = this.isReadonly;\n }\n else if (elem[i].classList.contains('e-datepicker')) {\n var datePickerObj = getInstance(elem[i], DatePicker);\n datePickerObj.readonly = this.isReadonly;\n }\n else if (elem[i].classList.contains('e-multiselect')) {\n var multiSelectObj = getInstance(elem[i], MultiSelect);\n multiSelectObj.readonly = this.isReadonly;\n }\n else if (elem[i].classList.contains('e-radio')) {\n var radioButtonObj = getInstance(elem[i], RadioButton);\n if (!radioButtonObj.checked) {\n if (this.isReadonly) {\n elem[i].parentElement.style.display = 'none';\n }\n else {\n elem[i].parentElement.style.display = 'inherit';\n }\n }\n }\n }\n var deleteGroupElems = this.element.querySelectorAll('.e-deletegroup');\n var addRuleGroupElems = this.element.querySelectorAll('.e-addrulegroup');\n var removeRuleElems = this.element.querySelectorAll('.e-removerule');\n if (!this.isReadonly && this.ruleElem.classList.contains('e-readonly')) {\n this.ruleElem.classList.remove('e-readonly');\n }\n var elems = [deleteGroupElems, addRuleGroupElems, removeRuleElems];\n for (var i = 0; i < elems.length; i++) {\n elems[i].forEach(function (elem) {\n if (elem.classList.contains('e-readonly')) {\n elem.classList.remove('e-readonly');\n }\n else {\n elem.classList.add('e-readonly');\n }\n });\n }\n this.enableBtnGroup();\n };\n QueryBuilder.prototype.enableBtnGroup = function () {\n var _this = this;\n var elems = this.element.querySelectorAll('.e-btngroup-and-lbl, .e-btngroup-or-lbl, .e-qb-toggle');\n var not = false;\n elems.forEach(function (elem) {\n if (elem.classList.contains('e-qb-toggle') && !elem.classList.contains('e-active-toggle')\n && !elem.classList.contains('e-readonly')) {\n elem.classList.add('e-readonly');\n not = false;\n }\n else if (elem.classList.contains('e-qb-toggle') && elem.classList.contains('e-not-readonly')) {\n elem.classList.remove('e-not-readonly');\n }\n else if (elem.classList.contains('e-qb-toggle') && elem.classList.contains('e-readonly')) {\n elem.classList.remove('e-readonly');\n }\n else if (elem.classList.contains('e-active-toggle')) {\n elem.classList.add('e-not-readonly');\n not = true;\n }\n else if (elem.previousElementSibling.checked || elem.classList.contains('e-readonly')) {\n elem.classList.remove('e-readonly');\n if (not) {\n if (elem.textContent === 'AND') {\n elem.classList.add('e-readonly-and');\n }\n else {\n elem.classList.add('e-readonly-or');\n }\n }\n else {\n if (elem.textContent === 'AND' && _this.isReadonly) {\n elem.classList.remove('e-not');\n elem.classList.add('e-readonly-and');\n }\n else {\n if (_this.enableNotCondition) {\n elem.classList.add('e-not');\n }\n elem.classList.remove('e-readonly-and');\n }\n if (elem.textContent === 'OR' && _this.isReadonly) {\n elem.classList.add('e-readonly-or-not');\n }\n else {\n elem.classList.remove('e-readonly-or-not');\n }\n }\n }\n else if (elem.classList.contains('e-btn-disable')) {\n // do nothing\n }\n else {\n elem.classList.add('e-readonly');\n }\n });\n };\n QueryBuilder.prototype.isDateFunction = function (value) {\n var dateFunc = ['date', 'time', 'day', 'week', 'month', 'year', 'hour', 'minute', 'second', 'now', 'quarter', 'period', 'extract'];\n for (var i = 0, len = dateFunc.length; i < len; i++) {\n if (value.toLowerCase().indexOf(dateFunc[i]) > -1) {\n return true;\n }\n }\n return false;\n };\n QueryBuilder.prototype.getSqlString = function (rules, enableEscape, queryStr, sqlLocale) {\n var isRoot = false;\n if (!queryStr && queryStr !== '') {\n queryStr = '';\n isRoot = true;\n }\n else {\n queryStr += '(';\n }\n var condition = rules.condition;\n if (rules.not) {\n var rulesNotCondition = void 0;\n if (isRoot) {\n rulesNotCondition = sqlLocale ? this.l10n.getConstant('NOT').toUpperCase() + ' (' : 'NOT (';\n queryStr += rulesNotCondition;\n }\n else {\n rulesNotCondition = sqlLocale ? ' ' + this.l10n.getConstant('NOT').toUpperCase() + ' (' : ' NOT (';\n queryStr += rulesNotCondition;\n }\n }\n if (rules.rules) {\n for (var j = 0, jLen = rules.rules.length; j < jLen; j++) {\n if (rules.rules[j].rules) {\n queryStr = this.getSqlString(rules.rules[j], enableEscape, queryStr, sqlLocale);\n if (this.enableSeparateConnector) {\n condition = rules.rules[j].condition;\n }\n }\n else {\n var rule = rules.rules[j];\n var valueStr = '';\n var ruleOpertor = sqlLocale ? this.sqlOperators[rule.operator] : this.operators[rule.operator];\n if (rule.value instanceof Array) {\n if (rule.operator.toString().indexOf('between') > -1) {\n var ruleCondition = sqlLocale ? ' ' + this.l10n.getConstant('AND').toUpperCase() + ' ' : ' ' + 'AND' + ' ';\n if (rule.type === 'date' && !this.isDateFunction(rule.value[0])) {\n valueStr += '\"' + rule.value[0] + '\"' + ruleCondition + '\"' + rule.value[1] + '\"';\n }\n else {\n valueStr += rule.value[0] + ruleCondition + rule.value[1];\n }\n }\n else {\n if (typeof rule.value[0] === 'string' && rule.value !== null) {\n valueStr += '(\"' + rule.value[0] + '\"';\n for (var k = 1, kLen = rule.value.length; k < kLen; k++) {\n valueStr += ',\"' + rule.value[k] + '\"';\n }\n valueStr += ')';\n }\n else {\n valueStr += '(' + rule.value + ')';\n }\n }\n }\n else {\n if (rule.operator.toString().indexOf('startswith') > -1) {\n valueStr += rule.value ? '(\"' + rule.value + '%\")' : '(' + rule.value + ')';\n }\n else if (rule.operator.toString().indexOf('endswith') > -1) {\n valueStr += rule.value ? '(\"%' + rule.value + '\")' : '(' + rule.value + ')';\n }\n else if (rule.operator.toString().indexOf('contains') > -1) {\n valueStr += rule.value ? '(\"%' + rule.value + '%\")' : '(' + rule.value + ')';\n }\n else {\n if (rule.type === 'number' || typeof rule.value === 'boolean' ||\n (rule.value === null && (rule.operator.toString().indexOf('empty') < -1))) {\n valueStr += rule.value;\n }\n else if (rule.operator.toString().indexOf('empty') > -1) {\n valueStr += '\"\"';\n }\n else {\n valueStr += '\"' + rule.value + '\"';\n }\n }\n }\n if (rule.operator.toString().indexOf('null') > -1) {\n if (enableEscape) {\n rule.field = '`' + rule.field + '`';\n }\n else {\n if (rule.field.indexOf(' ') > -1) {\n rule.field = '\"' + rule.field + '\"';\n }\n }\n queryStr += rule.field + ' ' + ruleOpertor;\n }\n else {\n var custOper = ruleOpertor;\n if (rule.operator === 'isempty') {\n custOper = '=';\n }\n else if (rule.operator === 'isnotempty') {\n custOper = '!=';\n }\n if (enableEscape) {\n rule.field = '`' + rule.field + '`';\n }\n else {\n if (rule.field.indexOf(' ') > -1) {\n rule.field = '\"' + rule.field + '\"';\n }\n }\n queryStr += rule.field + ' ' + custOper + ' ' + valueStr;\n }\n if (rule.condition && rule.condition !== '') {\n condition = rule.condition;\n }\n }\n if (j !== jLen - 1) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var rule = rules.rules[j];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (condition === '' || (rule && rule.condition !== '' && rule.custom && rule.custom.isCustom)) {\n condition = rule.condition;\n }\n if (condition) {\n condition = sqlLocale ? this.l10n.getConstant(condition.toUpperCase()).toUpperCase() : condition.toUpperCase();\n queryStr += ' ' + condition + ' ';\n }\n }\n }\n }\n if (!isRoot) {\n queryStr += ')';\n }\n if (rules.not) {\n queryStr += ')';\n }\n return queryStr;\n };\n /**\n * Sets the rules from the sql query.\n *\n * @param {string} sqlString - 'sql String' to be passed to set the rule.\n * @param {boolean} sqlLocale - Optional. Set `true` if Localization for Sql query.\n * @returns {void}\n */\n QueryBuilder.prototype.setRulesFromSql = function (sqlString, sqlLocale) {\n sqlString = sqlString.replace(/`/g, '');\n var ruleModel = this.getRulesFromSql(sqlString, sqlLocale);\n this.setRules({ condition: ruleModel.condition, not: ruleModel.not, rules: ruleModel.rules });\n };\n /**\n * Get the rules from SQL query.\n *\n * @param {string} sqlString - 'sql String' to be passed to get the rule.\n * @param {boolean} sqlLocale - Set `true` if Localization for Sql query.\n * @returns {object} - Rules from SQL query\n */\n QueryBuilder.prototype.getRulesFromSql = function (sqlString, sqlLocale) {\n this.parser = [];\n this.sqlParser(sqlString, sqlLocale);\n this.setProperties({ rule: { condition: 'and', not: false, rules: [] } }, true);\n var rule = this.processParser(this.parser, this.rule, [0], sqlLocale);\n if (this.enableNotCondition) {\n return { condition: rule.condition, not: rule.not, rules: rule.rules };\n }\n else {\n return { condition: rule.condition, rules: rule.rules };\n }\n };\n /**\n * Gets the sql query from rules.\n *\n * @param {RuleModel} rule - 'rule' to be passed to get the sql.\n * @param {boolean} allowEscape - Set `true` if it exclude the escape character.\n * @param {boolean} sqlLocale - Set `true` if Localization for Sql query.\n * @returns {string} - Sql query from rules.\n */\n QueryBuilder.prototype.getSqlFromRules = function (rule, allowEscape, sqlLocale) {\n if (!rule) {\n rule = this.getValidRules();\n }\n rule = this.getRuleCollection(rule, false);\n var sqlString = this.getSqlString(this.getValidRules(rule), allowEscape, null, sqlLocale).replace(/\"/g, '\\'');\n return sqlString;\n };\n /**\n * Gets the parameter SQL query from rules.\n *\n * @param {RuleModel} rule – Specify the rule to be passed to get the parameter sql string.\n * @returns {ParameterizedSql} – Parameterized SQL query from rules.\n */\n QueryBuilder.prototype.getParameterizedSql = function (rule) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.moduleLoader.loadedModules.length) {\n if (!rule) {\n rule = this.getValidRules();\n }\n var obj = { sql: null };\n this.notify('query-library', { prop: 'getParameterSql', onPropertyChange: false, value: { rule: rule, obj: obj } });\n return obj['sql'];\n }\n else {\n console.warn('[WARNING] :: Module \"query-library\" is not available in QueryBuilder component! You either misspelled the module name or forgot to load it.');\n }\n return null;\n };\n /**\n * Sets the rules from the parameter sql query.\n *\n * @param { ParameterizedSql} sqlQuery – Specifies the parameter SQL to be passed to set the rule and load it to the query builder.\n * @returns {void}\n */\n QueryBuilder.prototype.setParameterizedSql = function (sqlQuery) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.moduleLoader.loadedModules.length) {\n var obj = { sql: null };\n this.notify('query-library', { prop: 'convertParamSqlToSql', onPropertyChange: false, value: { sql: sqlQuery, obj: obj } });\n var sql = obj['sql'];\n if (sql) {\n sql = sql.replace(/`/g, '');\n var ruleModel = this.getRulesFromSql(sql);\n this.setRules({ condition: ruleModel.condition, not: ruleModel.not, rules: ruleModel.rules });\n }\n }\n else {\n console.warn('[WARNING] :: Module \"query-library\" is not available in QueryBuilder component! You either misspelled the module name or forgot to load it.');\n }\n };\n /**\n * Gets the named parameter SQL query from rules.\n *\n * @param {RuleModel} rule – Specify the rule to be passed to get the named parameter SQL string.\n * @returns {ParameterizedNamedSql} – Parameterized Named SQL query from rules.\n */\n QueryBuilder.prototype.getParameterizedNamedSql = function (rule) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.moduleLoader.loadedModules.length) {\n if (!rule) {\n rule = this.getValidRules();\n }\n var obj = { sql: null };\n this.notify('query-library', { prop: 'getNamedParameterSql', onPropertyChange: false, value: { rule: rule, obj: obj } });\n return obj['sql'];\n }\n else {\n console.warn('[WARNING] :: Module \"query-library\" is not available in QueryBuilder component! You either misspelled the module name or forgot to load it.');\n }\n return null;\n };\n /**\n * Sets the rules from the named parameter SQL query.\n *\n * @param { ParameterizedNamedSql } sqlQuery – Specifies the named parameter SQL to be passed to set the rule and load it to the query builder.\n * @returns {void}\n */\n QueryBuilder.prototype.setParameterizedNamedSql = function (sqlQuery) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.moduleLoader.loadedModules.length) {\n var obj = { sql: null };\n this.notify('query-library', { prop: 'convertNamedParamSqlToSql', onPropertyChange: false, value: { sql: sqlQuery, obj: obj } });\n var sql = obj['sql'];\n if (sql) {\n sql = sql.replace(/`/g, '');\n var ruleModel = this.getRulesFromSql(sql);\n this.setRules({ condition: ruleModel.condition, not: ruleModel.not, rules: ruleModel.rules });\n }\n }\n else {\n console.warn('[WARNING] :: Module \"query-library\" is not available in QueryBuilder component! You either misspelled the module name or forgot to load it.');\n }\n };\n /**\n * Set the rules from Mongo query.\n *\n * @param {string} mongoQuery - 'sql String' to be passed to get the rule.\n * @param {boolean} mongoLocale - Set `true` if Localization for Mongo query.\n * @returns {void}\n */\n QueryBuilder.prototype.setMongoQuery = function (mongoQuery, mongoLocale) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.moduleLoader.loadedModules.length) {\n this.rule = { condition: 'and', not: false, rules: [] };\n this.notify('query-library', { prop: 'mongoParser', onPropertyChange: false, value: { mongoQuery: JSON.parse(mongoQuery), rule: this.rule, mongoLocale: mongoLocale } });\n }\n else {\n console.warn('[WARNING] :: Module \"query-library\" is not available in QueryBuilder component! You either misspelled the module name or forgot to load it.');\n }\n };\n /**\n * Gets the Mongo query from rules.\n *\n * @param {RuleModel} rule - 'rule' to be passed to get the sql.\n * @returns {object} - Sql query from rules.\n */\n QueryBuilder.prototype.getMongoQuery = function (rule) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.moduleLoader.loadedModules.length) {\n if (!rule) {\n rule = this.getValidRules();\n }\n var obj = { mongoQuery: null };\n this.notify('query-library', { prop: 'getMongoFromRules', onPropertyChange: false, value: { rule: rule, mongoQuery: '', obj: obj } });\n return obj['mongoQuery'];\n }\n else {\n console.warn('[WARNING] :: Module \"query-library\" is not available in QueryBuilder component! You either misspelled the module name or forgot to load it.');\n }\n return '';\n };\n /**\n * Clones the rule based on the rule ID to the specific group.\n *\n * @param {string} ruleID - Specifies the ruleID that needs to be cloned.\n * @param {string} groupID - Specifies the groupID in which the rule to be cloned.\n * @param {number} index - Specifies the index to insert the cloned rule inside the group.\n * @returns {void}\n */\n QueryBuilder.prototype.cloneRule = function (ruleID, groupID, index) {\n var getRule = this.getRule(ruleID.replace(this.element.id + '_', ''));\n var isCloneRule = this.showButtons.cloneRule;\n groupID = groupID.replace(this.element.id + '_', '');\n this.ruleIndex = index;\n this.cloneRuleBtnClick = true;\n this.showButtons.cloneRule = true;\n this.addRules([{\n 'label': getRule.label, 'field': getRule.field, 'type': getRule.type, 'operator': getRule.operator,\n 'value': getRule.value, 'condition': getRule.condition\n }], groupID);\n this.ruleIndex = -1;\n this.cloneRuleBtnClick = false;\n this.showButtons.cloneRule = isCloneRule;\n isCloneRule = false;\n };\n /**\n * Clones the group based on the group ID to the specific group.\n *\n * @param {string} groupID - Specifies the groupID that needs to be cloned.\n * @param {string} parentGroupID - Specifies the parentGroupID in which the group to be cloned.\n * @param {number} index - Specifies the index to insert the cloned group inside the parent group.\n * @returns {void}\n */\n QueryBuilder.prototype.cloneGroup = function (groupID, parentGroupID, index) {\n parentGroupID = parentGroupID.replace(this.element.id + '_', '');\n var group = this.getGroup(parentGroupID);\n var isCloneGroup = this.showButtons.cloneGroup;\n groupID = groupID.replace(this.element.id + '_', '');\n this.groupIndex = index;\n this.cloneGrpBtnClick = true;\n this.showButtons.cloneGroup = true;\n this.addGroups([{ 'condition': group.condition, 'not': group.not, 'rules': group.rules }], groupID);\n this.groupIndex = -1;\n this.cloneGrpBtnClick = false;\n this.showButtons.cloneGroup = isCloneGroup;\n isCloneGroup = false;\n };\n /**\n * Locks the rule based on the rule ID.\n *\n * @param {string} ruleID - Specifies the ruleID that needs to be locked.\n * @returns {void}\n */\n QueryBuilder.prototype.lockRule = function (ruleID) {\n if (ruleID.indexOf(this.element.id) < 0) {\n ruleID = this.element.id + '_' + ruleID;\n }\n var target = document.getElementById(ruleID).querySelectorAll('.e-lock-rule-btn')[0];\n this.ruleLock(target);\n };\n /**\n * Locks the group based on the group ID\n *\n * @param {string} groupID - Specifies the groupID that needs to be locked.\n * @returns {void}\n */\n QueryBuilder.prototype.lockGroup = function (groupID) {\n if (groupID.indexOf(this.element.id) < 0) {\n groupID = this.element.id + '_' + groupID;\n }\n var target = document.getElementById(groupID).querySelectorAll('.e-lock-grp-btn')[0];\n this.groupLock(target);\n };\n QueryBuilder.prototype.sqlParser = function (sqlString, sqlLocale) {\n var st = 0;\n var str;\n do {\n str = sqlString.slice(st);\n st += this.parseSqlStrings(str, sqlLocale);\n } while (str !== '');\n return this.parser;\n };\n QueryBuilder.prototype.parseSqlStrings = function (sqlString, sqlLocale) {\n var operators = ['=', '!=', '<=', '>=', '<', '>'];\n var conditions;\n if (sqlLocale) {\n conditions = [this.l10n.getConstant('AND').toUpperCase(), this.l10n.getConstant('OR').toUpperCase(), this.l10n.getConstant('NOT').toUpperCase()];\n }\n else {\n conditions = ['AND', 'OR', 'NOT'];\n }\n var subOp;\n if (sqlLocale) {\n subOp = [this.l10n.getConstant('In').toUpperCase(), this.l10n.getConstant('NotIn').toUpperCase(),\n this.l10n.getConstant('Like').toUpperCase(), this.l10n.getConstant('NotLike').toUpperCase(),\n this.l10n.getConstant('Between').toUpperCase(), this.l10n.getConstant('NotBetween').toUpperCase(),\n this.l10n.getConstant('IsNull').toUpperCase(), this.l10n.getConstant('IsNotNull').toUpperCase(),\n this.l10n.getConstant('IsEmpty').toUpperCase(), this.l10n.getConstant('IsNotEmpty').toUpperCase()];\n }\n else {\n subOp = ['IN', 'NOT IN', 'LIKE', 'NOT LIKE', 'BETWEEN', 'NOT BETWEEN', 'IS NULL', 'IS NOT NULL', 'IS EMPTY', 'IS NOT EMPTY'];\n }\n var regexStr;\n var regex;\n var matchValue;\n for (var i = 0, iLen = operators.length; i < iLen; i++) {\n regexStr = /^\\w+$/.test(operators[i]) ? '\\\\b' : '';\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var regExp = RegExp;\n regex = new regExp('^(' + operators[i] + ')' + regexStr, 'ig');\n if (regex.exec(sqlString)) {\n this.parser.push(['Operators', operators[i].toLowerCase()]);\n return operators[i].length;\n }\n }\n var lastPasrser = this.parser[this.parser.length - 1];\n if (!lastPasrser || (lastPasrser && lastPasrser[0] !== 'Literal')) {\n for (var i = 0, iLen = conditions.length; i < iLen; i++) {\n regexStr = /^\\w+$/.test(conditions[i]) ? '\\\\b' : '';\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var regExp = RegExp;\n regex = new regExp('^(' + conditions[i] + ')' + regexStr, 'ig');\n if (regex.exec(sqlString)) {\n this.parser.push(['Conditions', conditions[i].toLowerCase()]);\n return conditions[i].length;\n }\n }\n }\n for (var i = 0, iLen = subOp.length; i < iLen; i++) {\n regexStr = /^\\w+$/.test(subOp[i]) ? '\\\\b' : '';\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var regExp = RegExp;\n regex = new regExp('^(' + subOp[i] + ')' + regexStr, 'ig');\n if (regex.exec(sqlString)) {\n this.parser.push(['SubOperators', subOp[i].toLowerCase()]);\n return subOp[i].length;\n }\n }\n //Left Parenthesis\n if (/^\\(/.exec(sqlString)) {\n this.parser.push(['Left', '(']);\n return 1;\n }\n //Right Parenthesis\n if (/^\\)/.exec(sqlString)) {\n this.parser.push(['Right', ')']);\n return 1;\n }\n //Boolean\n if (/^(true|false)/.exec(sqlString)) {\n matchValue = /^(true|false)/.exec(sqlString)[0];\n this.parser.push(['String', matchValue]);\n return matchValue.length;\n }\n //Null\n if (/^null/.exec(sqlString)) {\n matchValue = /^null/.exec(sqlString)[0];\n this.parser.push(['String', null]);\n return matchValue.length;\n }\n if (/^`?([a-z_][a-z0-9_.\\\\[\\]\\\\(\\\\)]{0,}(\\\\:(number|float|string|date|boolean))?)`?/i.exec(sqlString)) {\n matchValue = /^`?([a-z_][a-z0-9_.\\\\[\\]\\\\(\\\\)]{0,}(\\\\:(number|float|string|date|boolean))?)`?/i.exec(sqlString)[1];\n this.parser.push(['Literal', matchValue]);\n return matchValue.length;\n }\n if (this.checkLiteral() && /^'?([a-z_][a-z0-9 _.\\\\[\\]\\\\(\\\\)-]{0,}(\\\\:(number|float|string|date|boolean))?)'?/i.exec(sqlString)) {\n matchValue = /^'?([a-z_][a-z0-9 _.\\\\[\\]\\\\(\\\\)-]{0,}(\\\\:(number|float|string|date|boolean))?)'?/i.exec(sqlString)[1];\n this.parser.push(['Literal', matchValue]);\n return matchValue.length + 2;\n }\n if (this.checkNumberLiteral(sqlString, sqlLocale)) {\n matchValue = /^[0-9]+(\\.[0-9]+)$/.exec(sqlString)[0];\n this.parser.push(['Literal', matchValue]);\n return matchValue.length;\n }\n //String\n var singleString = this.getSingleQuoteString(sqlString);\n if (singleString !== '') {\n matchValue = singleString;\n if (matchValue[matchValue.length - 2] === '(') {\n var isClosed = false;\n for (var j = matchValue.length; j < sqlString.length; j++) {\n matchValue += sqlString[j];\n if (sqlString[j] === ')') {\n isClosed = true;\n }\n if (isClosed && sqlString[j] === '\\'') {\n break;\n }\n }\n }\n else if (sqlString[matchValue.length] && (sqlString[matchValue.length] !== ')') &&\n !this.checkCondition(sqlString, matchValue)) {\n matchValue = this.combineSingleQuoteString(sqlString, matchValue);\n }\n // end\n this.parser.push(['String', matchValue]);\n return matchValue.length;\n }\n // Double String\n var doubleString = this.getDoubleQuoteString(sqlString);\n if (doubleString !== '') {\n matchValue = doubleString;\n this.parser.push(['DoubleString', matchValue]);\n return matchValue.length;\n }\n //Number\n if (/^\\d*\\.?\\d+/.exec(sqlString)) {\n matchValue = /^\\d*\\.?\\d+/.exec(sqlString)[0];\n this.parser.push(['Number', matchValue]);\n return matchValue.length;\n }\n //Negative Number\n if (/^-?\\d*\\.?\\d+/.exec(sqlString)) {\n matchValue = /^-?\\d*\\.?\\d+/.exec(sqlString)[0];\n this.parser.push(['Number', matchValue]);\n return matchValue.length;\n }\n return 1;\n };\n QueryBuilder.prototype.getDoubleQuoteString = function (sqlString) {\n var start = sqlString.indexOf('\"');\n if (start === 0) {\n var end = sqlString.indexOf('\"', start + 1);\n if (end !== -1) {\n return sqlString.substring(start, end + 1);\n }\n }\n return '';\n };\n QueryBuilder.prototype.checkCondition = function (sqlString, matchValue) {\n if (sqlString.slice(matchValue.length + 1, matchValue.length + 4) === 'AND' ||\n sqlString.slice(matchValue.length + 1, matchValue.length + 3) === 'OR') {\n return true;\n }\n return false;\n };\n QueryBuilder.prototype.getSingleQuoteString = function (sqlString, isBetween) {\n var start = sqlString.indexOf('\\'');\n if ((start !== -1 && isBetween) || (start === 0 && !isBetween)) {\n var end = sqlString.indexOf('\\'', start + 1);\n if (end !== -1) {\n return sqlString.substring(start, end + 1);\n }\n }\n return '';\n };\n QueryBuilder.prototype.combineSingleQuoteString = function (sqlString, matchValue) {\n if (sqlString[matchValue.length] && (sqlString[matchValue.length] !== ')') &&\n !this.checkCondition(sqlString, matchValue) && sqlString[matchValue.length] !== ',') {\n var tempMatchValue = matchValue.substring(0, matchValue.length - 1);\n var tempStr = sqlString.replace(tempMatchValue, '');\n var singleString = this.getSingleQuoteString(tempStr, true);\n if (singleString !== '') {\n var parsedValue = singleString.substring(1, singleString.length);\n matchValue += parsedValue;\n matchValue = this.combineSingleQuoteString(sqlString, matchValue);\n }\n }\n return matchValue;\n };\n QueryBuilder.prototype.checkLiteral = function () {\n var lastParser = this.parser[this.parser.length - 1];\n if (!lastParser) {\n return true;\n }\n else {\n var secParser = this.parser[this.parser.length - 2];\n var betweenParser = this.parser[this.parser.length - 3];\n if (lastParser[0] === 'Left' && (secParser && secParser[0] === 'Conditions')) {\n return true;\n }\n var betweenOperator = 'between';\n if (lastParser[0] === 'Conditions' && (betweenParser && betweenParser[1].indexOf(betweenOperator) < 0)) {\n return true;\n }\n }\n return false;\n };\n QueryBuilder.prototype.checkNumberLiteral = function (sqlString, sqlLocale) {\n var lastParser = this.parser[this.parser.length - 1];\n if (!lastParser) {\n return true;\n }\n else {\n if (/^[0-9]+(?:\\.[0-9]+)$/.exec(sqlString)) {\n var secParser = this.parser[this.parser.length - 2];\n var betweenParser = this.parser[this.parser.length - 3];\n if (lastParser[0] === 'Left' && (secParser && secParser[0] === 'Conditions')) {\n return true;\n }\n var betweenOperator = sqlLocale ? this.l10n.getConstant('Between').toLowerCase() : 'between';\n if (lastParser[0] === 'Conditions' && (betweenParser && betweenParser[1].indexOf(betweenOperator) < 0)) {\n return true;\n }\n }\n }\n return false;\n };\n QueryBuilder.prototype.getOperator = function (value, operator, sqlLocale) {\n var operators = {\n '=': 'equal', '!=': 'notequal', '<': 'lessthan', '>': 'greaterthan', '<=': 'lessthanorequal',\n '>=': 'greaterthanorequal', 'in': 'in', 'not in': 'notin', 'between': 'between', 'not between': 'notbetween',\n 'is empty': 'isempty', 'is null': 'isnull', 'is not null': 'isnotnull', 'is not empty': 'isnotempty'\n };\n if (sqlLocale) {\n var localeOperator = Object.keys(this.sqlOperators);\n for (var i = 0; i < localeOperator.length; i++) {\n if (this.sqlOperators[localeOperator[i]] === operator.toUpperCase()) {\n if (value && value.indexOf('%') === 0 && value[value.length - 1] === '%') {\n return (operator.toUpperCase() === 'NOT LIKE') ? 'notcontains' : 'contains';\n }\n else if (value && value.indexOf('%') !== 0 && value.indexOf('%') === value.length - 1) {\n return (operator.toUpperCase() === 'NOT LIKE') ? 'notstartswith' : 'startswith';\n }\n else if (value && value.indexOf('%') === 0 && value.indexOf('%') !== value.length - 1) {\n return (operator.toUpperCase() === 'NOT LIKE') ? 'notendswith' : 'endswith';\n }\n return localeOperator[i];\n }\n }\n return null;\n }\n if (value) {\n if (value.indexOf('%') === 0 && value[value.length - 1] === '%') {\n return (operator === 'not like') ? 'notcontains' : 'contains';\n }\n else if (value.indexOf('%') !== 0 && value.indexOf('%') === value.length - 1) {\n return (operator === 'not like') ? 'notstartswith' : 'startswith';\n }\n else if (value.indexOf('%') === 0 && value.indexOf('%') !== value.length - 1) {\n return (operator === 'not like') ? 'notendswith' : 'endswith';\n }\n }\n else {\n if (operator === 'not like') {\n return 'notequal';\n }\n else if (operator === 'like') {\n return 'equal';\n }\n }\n return operators[\"\" + operator];\n };\n QueryBuilder.prototype.getTypeFromColumn = function (rules) {\n var columnData = this.getColumn(rules.field);\n if (!isNullOrUndefined(columnData)) {\n return columnData.type;\n }\n return null;\n };\n QueryBuilder.prototype.getLabelFromColumn = function (field) {\n var label = '';\n var l = 0;\n if (this.separator !== '') {\n var fieldColl = field.split(this.separator);\n for (var i = 0; i < fieldColl.length; i++) {\n label += this.getLabelFromField(fieldColl, i + 1);\n l++;\n if (l < fieldColl.length) {\n label += this.separator;\n }\n }\n return label;\n }\n else {\n var labelItem = this.getColumn(field).label;\n return labelItem;\n }\n };\n QueryBuilder.prototype.getLabelFromField = function (field, startIdx) {\n var fieldName = '';\n var j = 0;\n for (var k = 0; k < startIdx; k++) {\n fieldName += field[k];\n j++;\n if (j < startIdx) {\n fieldName += this.separator;\n }\n }\n return this.getColumn(fieldName).label;\n };\n QueryBuilder.prototype.processParser = function (parser, rules, levelColl, sqlLocale) {\n var j;\n var jLen;\n var rule;\n var subRules;\n var numVal = [];\n var strVal = [];\n var k;\n var kLen;\n var l;\n var lLen;\n var grpCount;\n var operator;\n var isLeftOpened = false;\n var isNotOpened = false;\n for (var i = 0, iLen = parser.length; i < iLen; i++) {\n if (parser[i][0] === 'Literal') {\n var column = this.getColumn(parser[i][1]);\n rule = { label: (column && column.label) ? column.label : parser[i][1], field: parser[i][1] };\n if (parser[i + 1][0] === 'SubOperators') {\n if (parser[i + 1][1].indexOf('null') > -1 || parser[i + 1][1].indexOf('empty') > -1) {\n rule.operator = this.getOperator(' ', parser[i + 1][1], sqlLocale);\n rule.value = null;\n rule.type = this.getTypeFromColumn(rule);\n }\n else {\n var oper = parser[i + 3][1] ? parser[i + 3][1].replace(/'/g, '') : parser[i + 3][1];\n rule.operator = this.getOperator(oper, parser[i + 1][1], sqlLocale);\n }\n operator = parser[i + 1][1];\n i++;\n j = i + 1;\n jLen = iLen;\n if (sqlLocale && rule.operator === 'contains' || rule.operator === 'startswith' || rule.operator === 'endswith') {\n operator = 'like';\n }\n else if (sqlLocale && rule.operator === 'notcontains' || rule.operator === 'notstartswith' || rule.operator === 'notendswith') {\n operator = 'not like';\n }\n else if (sqlLocale) {\n operator = rule.operator;\n }\n for (j = i + 1; j < jLen; j++) {\n if (operator.indexOf('between') < 0 && parser[j][0] === 'Left') {\n isLeftOpened = true;\n }\n else if (parser[j][0] === 'Right' && isLeftOpened) {\n i = j;\n isLeftOpened = false;\n break;\n }\n else {\n if (operator.indexOf('null') > -1 || operator.indexOf('empty') > -1) {\n break;\n }\n if (operator.indexOf('like') > -1 && parser[j][0] === 'String') {\n var val = parser[j][1];\n if (parser[j][1] && parser[j][1][0] === '\\'') {\n val = parser[j][1].substring(1, parser[j][1].length - 1);\n }\n val = val ? val.replace(/%/g, '') : parser[j][1];\n rule.value = val;\n rule.type = 'string';\n }\n else if (operator.indexOf('between') > -1) {\n if (parser[j][0] === 'Literal' || parser[j][0] === 'Left') {\n break;\n }\n if (parser[j][0] === 'Number') {\n numVal.push(Number(parser[j][1]));\n }\n else if (parser[j][0] === 'String') {\n var val = parser[j][1];\n if (parser[j][1] && parser[j][1][0] === '\\'') {\n val = parser[j][1].substring(1, parser[j][1].length - 1);\n }\n strVal.push(val);\n }\n }\n else {\n if (parser[j][0] === 'Number') {\n numVal.push(Number(parser[j][1]));\n }\n else if (parser[j][0] === 'String') {\n var val = parser[j][1];\n if (parser[j][1] && parser[j][1][0] === '\\'') {\n val = parser[j][1].substring(1, parser[j][1].length - 1);\n }\n strVal.push(val);\n }\n }\n rule.type = this.getTypeFromColumn(rule);\n }\n }\n if (operator.indexOf('like') < 0) {\n if (parser[j - 1][0] === 'Number') {\n rule.value = numVal;\n rule.type = 'number';\n }\n else if (parser[j - 1][0] === 'String') {\n rule.value = strVal;\n rule.type = 'string';\n }\n else if (operator.indexOf('between') > -1 && parser[j - 1][0] === 'Conditions') {\n if (strVal.length !== 0) {\n rule.value = strVal;\n rule.type = 'string';\n }\n else {\n rule.value = numVal;\n rule.type = 'number';\n }\n }\n numVal = [];\n strVal = [];\n rule.type = this.getTypeFromColumn(rule);\n }\n if (this.enableSeparateConnector && parser[i + 1][0] === 'Conditions') {\n rule.condition = parser[i + 1][1];\n }\n }\n else if (parser[i + 1][0] === 'Operators') {\n rule.operator = this.getOperator(parser[i + 2][1], parser[i + 1][1], sqlLocale);\n if (rule.operator === 'equal' && parser[i + 2][0] === 'String' && parser[i + 2][1] === '\\'\\'') {\n rule.operator = 'isempty';\n }\n else if (rule.operator === 'notequal' && parser[i + 2][0] === 'String' && parser[i + 2][1] === '\\'\\'') {\n rule.operator = 'isnotempty';\n }\n if (parser[i + 2][0] === 'Number') {\n rule.type = 'number';\n rule.value = Number(parser[i + 2][1]);\n }\n else {\n rule.type = 'string';\n var val = parser[i + 2][1];\n if (val && val[0] === '\\'') {\n val = val.substring(1, val.length - 1);\n }\n rule.value = val;\n }\n if (this.enableSeparateConnector && parser[i + 3][0] === 'Conditions') {\n rule.condition = parser[i + 3][1];\n }\n rule.type = this.getTypeFromColumn(rule);\n }\n rules.rules.push(rule);\n }\n else if (parser[i][0] === 'Left') {\n if (!(parser[0][0] === 'Left') && (parser[i - 1][1] === 'not' || sqlLocale && this.l10n.getConstant('NOT').toLowerCase() === parser[i - 1][1])) {\n isNotOpened = true;\n continue;\n }\n this.parser = parser.splice(i + 1, iLen - (i + 1));\n if (this.enableNotCondition) {\n subRules = { condition: 'and', rules: [], not: false };\n }\n else {\n subRules = { condition: 'and', rules: [] };\n }\n grpCount = 0;\n kLen = rules.rules.length;\n for (k = 0; k < kLen; k++) { //To get the group position\n if (rules.rules[k].rules) {\n grpCount++;\n }\n }\n levelColl.push(grpCount);\n rules.rules.push(subRules);\n subRules = this.processParser(this.parser, subRules, levelColl, sqlLocale);\n return rules;\n }\n else if (parser[i][0] === 'Conditions' && !this.enableSeparateConnector) {\n if (parser[i][1] === 'not' || (sqlLocale && this.l10n.getConstant('NOT').toLowerCase() === parser[i][1])) {\n rules.not = true;\n }\n else {\n rules.condition = parser[i][1];\n }\n }\n else if (parser[i][0] === 'Right') {\n if (isNotOpened && parser[i + 1][0] === 'Right') {\n isNotOpened = false;\n continue;\n }\n this.parser = parser.splice(i + 1, iLen - (i + 1));\n levelColl.pop(); //To get the parent Group\n rules = this.rule;\n lLen = levelColl.length;\n for (l = 0; l < lLen; l++) {\n rules = this.findGroupByIdx(levelColl[l], rules, l === 0);\n }\n return this.processParser(this.parser, rules, levelColl, sqlLocale);\n }\n }\n return rules;\n };\n /**\n * Clone the Group\n *\n * @param {Element | string} target - 'target' to be passed to clone the group.\n * @returns {void}\n */\n QueryBuilder.prototype.groupClone = function (target) {\n var groupElem = target.closest('.e-rule-list').closest('.e-group-container');\n var targetGrpId;\n var groupId;\n if (typeof target === 'string') {\n groupId = this.element.id + '_' + target;\n target = document.getElementById(groupId);\n }\n else {\n targetGrpId = target.id.replace(this.element.id + '_', '');\n groupId = groupElem.id.replace(this.element.id + '_', '');\n }\n var group = this.getGroup(targetGrpId);\n this.groupIndex = Array.prototype.indexOf.call(target.closest('.e-rule-list').children, target.closest('.e-group-container'));\n this.addGroups([{ 'condition': group.condition, 'not': group.not, 'rules': group.rules }], groupId);\n this.groupIndex = -1;\n };\n QueryBuilder.prototype.ruleClone = function (target) {\n var ruleElem = closest(target, '.e-rule-container');\n var groupElem = target.closest('.e-rule-list').closest('.e-group-container');\n var getRule = this.getRule(target);\n var groupId = groupElem.id.replace(this.element.id + '_', '');\n var ruleElemColl = groupElem.querySelectorAll('.e-rule-container');\n for (var i = 0, iLen = ruleElemColl.length; i < iLen; i++) {\n if (ruleElem.id === ruleElemColl[i].id) {\n this.ruleIndex = i;\n }\n }\n if (this.enableSeparateConnector) {\n this.addRules([{ 'label': getRule.label, 'field': getRule.field, 'type': getRule.type, 'operator': getRule.operator,\n 'value': getRule.value, 'condition': getRule.condition }], groupId);\n }\n else {\n this.addRules([{ 'label': getRule.label, 'field': getRule.field, 'type': getRule.type, 'operator': getRule.operator,\n 'value': getRule.value }], groupId);\n }\n this.ruleIndex = -1;\n };\n QueryBuilder.prototype.ruleLock = function (target) {\n var ruleElem = closest(target, '.e-rule-container');\n var rule = this.getRule(ruleElem.id.replace(this.element.id + '_', ''));\n if (ruleElem.classList.contains('e-disable')) {\n rule.isLocked = false;\n this.lockItems = this.lockItems.filter(function (lockItem) { return lockItem !== ruleElem.id; });\n ruleElem.classList.remove('e-disable');\n this.disableRuleControls(target, ruleElem, false);\n target.children[0].classList.add('e-unlock');\n target.children[0].classList.remove('e-lock');\n target.setAttribute('title', this.l10n.getConstant('LockRule'));\n }\n else {\n rule.isLocked = true;\n if (this.lockItems.indexOf(ruleElem.id) < 0) {\n this.lockItems.splice(this.lockItems.length - 1, 0, ruleElem.id);\n }\n ruleElem.classList.add('e-disable');\n this.disableRuleControls(target, ruleElem, true);\n target.children[0].classList.add('e-lock');\n target.children[0].classList.remove('e-unlock');\n target.setAttribute('title', this.l10n.getConstant('UnlockRule'));\n }\n };\n QueryBuilder.prototype.groupLock = function (target) {\n var groupElem = closest(target, '.e-group-container');\n var group = this.getGroup(groupElem.id.replace(this.element.id + '_', ''));\n var isRoot = groupElem.id.indexOf('group0') > -1;\n if (groupElem.classList.contains('e-disable')) {\n if (isRoot) {\n var newGroup = {};\n newGroup.condition = group.condition;\n newGroup.not = group.not;\n newGroup.isLocked = false;\n this.setProperties({ rule: newGroup }, true);\n }\n else {\n group.isLocked = false;\n }\n this.lockItems = this.lockItems.filter(function (lockItem) { return lockItem !== groupElem.id; });\n groupElem.classList.remove('e-disable');\n this.disableHeaderControls(target, groupElem, false);\n target.children[0].classList.add('e-unlock');\n target.children[0].classList.remove('e-lock');\n target.setAttribute('title', this.l10n.getConstant('LockGroup'));\n this.updateLockItems();\n }\n else {\n if (isRoot) {\n var newGroup = {};\n newGroup.condition = group.condition;\n newGroup.not = group.not;\n newGroup.isLocked = true;\n this.setProperties({ rule: newGroup }, true);\n }\n else {\n group.isLocked = true;\n }\n if (this.lockItems.indexOf(groupElem.id) < 0) {\n this.lockItems.splice(this.lockItems.length - 1, 0, groupElem.id);\n }\n groupElem.classList.add('e-disable');\n this.disableHeaderControls(target, groupElem, true);\n target.children[0].classList.add('e-lock');\n target.children[0].classList.remove('e-unlock');\n target.setAttribute('title', this.l10n.getConstant('UnlockGroup'));\n }\n };\n QueryBuilder.prototype.updateLockItems = function () {\n for (var i = 0; i < this.lockItems.length; i++) {\n var idColl = this.lockItems[i].split('_');\n if (idColl.length > 2) {\n var ruleElem = this.element.querySelector('#' + this.lockItems[i]);\n var target = ruleElem.querySelector('.e-lock-rule-btn');\n ruleElem = closest(target, '.e-rule-container');\n if (!ruleElem.classList.contains('e-disable')) {\n this.ruleLock(target);\n }\n }\n else {\n var groupElem = this.element.querySelector('#' + this.lockItems[i]);\n var target = groupElem.querySelector('.e-lock-grp-btn');\n groupElem = closest(target, '.e-group-container');\n if (!groupElem.classList.contains('e-disable')) {\n this.groupLock(target);\n }\n }\n }\n };\n QueryBuilder.prototype.disableHeaderControls = function (target, groupElem, isDisabled) {\n var andElem = groupElem.querySelectorAll('.e-btngroup-and');\n var orElem = groupElem.querySelectorAll('.e-btngroup-or');\n var notElem = groupElem.querySelectorAll('.e-qb-toggle');\n var addElem = groupElem.querySelectorAll('.e-add-btn');\n var deleteGrpElem = groupElem.querySelectorAll('.e-deletegroup');\n var lockElem = groupElem.querySelectorAll('.e-lock-grp-btn');\n var cloneElem = groupElem.querySelectorAll('.e-clone-grp-btn');\n var groupContElem = groupElem.querySelectorAll('.e-group-container');\n var addCondition = groupElem.querySelectorAll('.e-add-condition-btn');\n var addGroup = groupElem.querySelectorAll('.e-add-group-btn');\n for (var i = 0; i < andElem.length; i++) {\n if (isDisabled) {\n if (groupContElem[i] && groupContElem[i].classList.contains('e-disable')) {\n groupContElem[i].classList.add('e-disable');\n }\n andElem[i].disabled = true;\n orElem[i].disabled = true;\n if (addElem[i]) {\n addElem[i].disabled = true;\n }\n if (addCondition[i]) {\n addCondition[i].disabled = true;\n }\n if (addGroup[i]) {\n addGroup[i].disabled = true;\n }\n if (notElem[i]) {\n notElem[i].disabled = true;\n }\n if (deleteGrpElem[i]) {\n deleteGrpElem[i].disabled = true;\n }\n if (cloneElem[i]) {\n cloneElem[i].disabled = true;\n }\n andElem[i].parentElement.classList.add('e-disabled');\n if (lockElem[i] && lockElem[i] !== target) {\n lockElem[i].disabled = true;\n lockElem[i].children[0].classList.remove('e-unlock');\n lockElem[i].children[0].classList.add('e-lock');\n }\n }\n else {\n if (groupContElem[i]) {\n groupContElem[i].classList.remove('e-disable');\n }\n andElem[i].disabled = false;\n orElem[i].disabled = false;\n if (addElem[i]) {\n addElem[i].disabled = false;\n }\n if (addCondition[i]) {\n addCondition[i].disabled = false;\n }\n if (addGroup[i]) {\n addGroup[i].disabled = false;\n }\n if (lockElem[i]) {\n lockElem[i].disabled = false;\n }\n if (notElem[i]) {\n notElem[i].disabled = false;\n }\n if (deleteGrpElem[i]) {\n deleteGrpElem[i].disabled = false;\n }\n if (cloneElem[i]) {\n cloneElem[i].disabled = false;\n }\n andElem[i].parentElement.classList.remove('e-disabled');\n if (lockElem[i]) {\n lockElem[i].children[0].classList.remove('e-lock');\n }\n if (lockElem[i]) {\n lockElem[i].children[0].classList.add('e-unlock');\n }\n }\n }\n this.disableRuleControls(target, groupElem, isDisabled);\n };\n QueryBuilder.prototype.disableRuleControls = function (target, groupElem, isDisabled) {\n var ddlElement = groupElem.querySelectorAll('.e-control.e-dropdownlist');\n var numericElement = groupElem.querySelectorAll('.e-control.e-numerictextbox');\n var textElement = groupElem.querySelectorAll('.e-control.e-textbox');\n var dateElement = groupElem.querySelectorAll('.e-control.e-datepicker');\n var checkboxElement = groupElem.querySelectorAll('.e-control.e-checkbox');\n var radioBtnElement = groupElem.querySelectorAll('.e-control.e-radio');\n var multiSelectElement = groupElem.querySelectorAll('.e-control.e-multiselect');\n var deleteElem = groupElem.querySelectorAll('.e-rule-delete');\n var lockElem = groupElem.querySelectorAll('.e-lock-rule');\n var cloneElem = groupElem.querySelectorAll('.e-clone-rule');\n var ruleElem = groupElem.querySelectorAll('.e-rule-container');\n for (var i = 0; i < deleteElem.length; i++) {\n if (isDisabled) {\n if (ruleElem[i] && ruleElem[i].classList.contains('e-disable')) {\n ruleElem[i].classList.add('e-disable');\n }\n deleteElem[i].disabled = true;\n if (cloneElem[i]) {\n cloneElem[i].disabled = true;\n }\n if (lockElem[i] !== target) {\n lockElem[i].disabled = true;\n lockElem[i].children[0].classList.remove('e-unlock');\n lockElem[i].children[0].classList.add('e-lock');\n }\n }\n else {\n if (ruleElem[i]) {\n ruleElem[i].classList.remove('e-disable');\n }\n if (cloneElem[i]) {\n cloneElem[i].disabled = false;\n }\n deleteElem[i].disabled = false;\n lockElem[i].disabled = false;\n lockElem[i].children[0].classList.remove('e-lock');\n lockElem[i].children[0].classList.add('e-unlock');\n }\n }\n var dropDownObj;\n var numericObj;\n var textObj;\n var dateObj;\n var checkBoxObj;\n var radioBtnObj;\n var multiSelectObj;\n for (var i = 0; i < ddlElement.length; i++) {\n dropDownObj = getComponent(ddlElement[i], 'dropdownlist');\n if (isDisabled) {\n dropDownObj.enabled = false;\n }\n else {\n dropDownObj.enabled = true;\n }\n }\n for (var i = 0; i < numericElement.length; i++) {\n numericObj = getComponent(numericElement[i], 'numerictextbox');\n if (isDisabled) {\n numericObj.enabled = false;\n }\n else {\n numericObj.enabled = true;\n }\n }\n for (var i = 0; i < textElement.length; i++) {\n textObj = getComponent(textElement[i], 'textbox');\n if (isDisabled) {\n textObj.enabled = false;\n }\n else {\n textObj.enabled = true;\n }\n }\n for (var i = 0; i < dateElement.length; i++) {\n dateObj = getComponent(dateElement[i], 'datepicker');\n if (isDisabled) {\n dateObj.enabled = false;\n }\n else {\n dateObj.enabled = true;\n }\n }\n for (var i = 0; i < checkboxElement.length; i++) {\n checkBoxObj = getComponent(checkboxElement[i], 'checkbox');\n if (isDisabled) {\n checkBoxObj.disabled = true;\n }\n else {\n checkBoxObj.disabled = false;\n }\n }\n for (var i = 0; i < radioBtnElement.length; i++) {\n radioBtnObj = getComponent(radioBtnElement[i], 'radio');\n if (isDisabled) {\n radioBtnObj.disabled = true;\n }\n else {\n radioBtnObj.disabled = false;\n }\n }\n for (var i = 0; i < multiSelectElement.length; i++) {\n multiSelectObj = getComponent(multiSelectElement[i], 'multiselect');\n if (isDisabled) {\n multiSelectObj.enabled = false;\n }\n else {\n multiSelectObj.enabled = true;\n }\n }\n };\n __decorate([\n Event()\n ], QueryBuilder.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], QueryBuilder.prototype, \"actionBegin\", void 0);\n __decorate([\n Event()\n ], QueryBuilder.prototype, \"beforeChange\", void 0);\n __decorate([\n Event()\n ], QueryBuilder.prototype, \"change\", void 0);\n __decorate([\n Event()\n ], QueryBuilder.prototype, \"dataBound\", void 0);\n __decorate([\n Event()\n ], QueryBuilder.prototype, \"ruleChange\", void 0);\n __decorate([\n Event()\n ], QueryBuilder.prototype, \"dragStart\", void 0);\n __decorate([\n Event()\n ], QueryBuilder.prototype, \"drag\", void 0);\n __decorate([\n Event()\n ], QueryBuilder.prototype, \"drop\", void 0);\n __decorate([\n Complex({}, ShowButtons)\n ], QueryBuilder.prototype, \"showButtons\", void 0);\n __decorate([\n Property(false)\n ], QueryBuilder.prototype, \"summaryView\", void 0);\n __decorate([\n Property(false)\n ], QueryBuilder.prototype, \"allowValidation\", void 0);\n __decorate([\n Property('Default')\n ], QueryBuilder.prototype, \"fieldMode\", void 0);\n __decorate([\n Property([])\n ], QueryBuilder.prototype, \"columns\", void 0);\n __decorate([\n Property(null)\n ], QueryBuilder.prototype, \"fieldModel\", void 0);\n __decorate([\n Property(null)\n ], QueryBuilder.prototype, \"operatorModel\", void 0);\n __decorate([\n Property(null)\n ], QueryBuilder.prototype, \"valueModel\", void 0);\n __decorate([\n Property()\n ], QueryBuilder.prototype, \"headerTemplate\", void 0);\n __decorate([\n Property('')\n ], QueryBuilder.prototype, \"cssClass\", void 0);\n __decorate([\n Property([])\n ], QueryBuilder.prototype, \"dataSource\", void 0);\n __decorate([\n Property('Horizontal')\n ], QueryBuilder.prototype, \"displayMode\", void 0);\n __decorate([\n Property(false)\n ], QueryBuilder.prototype, \"enablePersistence\", void 0);\n __decorate([\n Property('Default')\n ], QueryBuilder.prototype, \"sortDirection\", void 0);\n __decorate([\n Property(5)\n ], QueryBuilder.prototype, \"maxGroupCount\", void 0);\n __decorate([\n Property('auto')\n ], QueryBuilder.prototype, \"height\", void 0);\n __decorate([\n Property('auto')\n ], QueryBuilder.prototype, \"width\", void 0);\n __decorate([\n Property(false)\n ], QueryBuilder.prototype, \"matchCase\", void 0);\n __decorate([\n Property(0)\n ], QueryBuilder.prototype, \"immediateModeDelay\", void 0);\n __decorate([\n Property(false)\n ], QueryBuilder.prototype, \"enableNotCondition\", void 0);\n __decorate([\n Property(false)\n ], QueryBuilder.prototype, \"readonly\", void 0);\n __decorate([\n Property(true)\n ], QueryBuilder.prototype, \"addRuleToNewGroups\", void 0);\n __decorate([\n Property(false)\n ], QueryBuilder.prototype, \"autoSelectField\", void 0);\n __decorate([\n Property(true)\n ], QueryBuilder.prototype, \"autoSelectOperator\", void 0);\n __decorate([\n Property('')\n ], QueryBuilder.prototype, \"separator\", void 0);\n __decorate([\n Property(false)\n ], QueryBuilder.prototype, \"enableSeparateConnector\", void 0);\n __decorate([\n Complex({ condition: 'and', rules: [] }, Rule)\n ], QueryBuilder.prototype, \"rule\", void 0);\n __decorate([\n Property(false)\n ], QueryBuilder.prototype, \"allowDragAndDrop\", void 0);\n QueryBuilder = __decorate([\n NotifyPropertyChanges\n ], QueryBuilder);\n return QueryBuilder;\n}(Component));\nexport { QueryBuilder };\nvar LevelColl = /** @class */ (function () {\n function LevelColl() {\n }\n return LevelColl;\n}());\n","import { extend, isNullOrUndefined } from '@syncfusion/ej2-base';\nvar QueryLibrary = /** @class */ (function () {\n function QueryLibrary(parent) {\n this.parent = parent;\n this.addEventListener();\n }\n QueryLibrary.prototype.destroy = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.removeEventListener();\n };\n QueryLibrary.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on('query-library', this.queryLibrary, this);\n this.parent.on('destroyed', this.destroy, this);\n };\n QueryLibrary.prototype.removeEventListener = function () {\n this.parent.off('query-library', this.queryLibrary);\n this.parent.off('destroyed', this.destroy);\n };\n QueryLibrary.prototype.queryLibrary = function (args) {\n switch (args.prop) {\n case 'getMongoFromRules':\n args.value['obj']['mongoQuery'] = this.getMongoFromRules(args.value['rule'], args.value['mongoQuery']);\n break;\n case 'mongoParser':\n this.mongoParser(args.value['mongoQuery'], args.value['rule'], args.value['mongoLocale']);\n break;\n case 'getParameterSql':\n args.value['obj']['sql'] = this.getParameterSql(args.value['rule']);\n break;\n case 'getNamedParameterSql':\n args.value['obj']['sql'] = this.getNamedParameterSql(args.value['rule']);\n break;\n case 'convertParamSqlToSql':\n args.value['obj']['sql'] = this.convertParamSqlToSql(args.value['sql']);\n break;\n case 'convertNamedParamSqlToSql':\n args.value['obj']['sql'] = this.convertNamedParamSqlToSql(args.value['sql']);\n break;\n }\n };\n QueryLibrary.prototype.getMongoFromRules = function (rule, mongoQuery) {\n mongoQuery = '{';\n if (rule.condition === 'or') {\n mongoQuery += '\"$or\":[';\n mongoQuery = this.convertMongoQuery(rule.rules, mongoQuery) + ']';\n }\n else {\n mongoQuery += '\"$and\":[';\n mongoQuery = this.convertMongoQuery(rule.rules, mongoQuery) + ']';\n }\n mongoQuery += '}';\n return mongoQuery;\n };\n QueryLibrary.prototype.getOperatorFromMongoOperator = function (operator) {\n var operatorValue;\n switch (operator) {\n case '$ne':\n operatorValue = 'notequal';\n break;\n case '$gt':\n operatorValue = 'greaterthan';\n break;\n case '$gte':\n operatorValue = 'greaterthanorequal';\n break;\n case '$lt':\n operatorValue = 'lessthan';\n break;\n case '$lte':\n operatorValue = 'lessthanorequal';\n break;\n case '$nin':\n operatorValue = 'notin';\n break;\n }\n return operatorValue;\n };\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n QueryLibrary.prototype.convertMongoQuery = function (rules, mongoQuery) {\n var _this = this;\n var i = 0;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n rules.forEach(function (item) {\n i++;\n mongoQuery += '{';\n if (item.rules !== undefined) {\n if (item.condition === 'or') {\n mongoQuery += ' \"$or\":[';\n mongoQuery = _this.convertMongoQuery(item.rules, mongoQuery) + ']';\n }\n else {\n mongoQuery += ' \"$and\":[';\n mongoQuery = _this.convertMongoQuery(item.rules, mongoQuery) + ']';\n }\n }\n var itVal = item.type === 'string' && item.operator !== 'in' && item.operator !== 'notin' && item.value && item.value.trim() !== '' ? item.value.replace(/'/g, '\\\\') : '';\n if (item.type === 'string' && (item.operator === 'in' || item.operator === 'notin') && item.value && item.value.length === 1) {\n itVal = item.value[0].replace(/'/g, '\\\\');\n }\n var field = item.field ? item.field.substring(0) : '';\n switch (item.operator) {\n case 'contains':\n mongoQuery += '\"' + field + '\":{\"$regex\":\"' + itVal + '\"}';\n break;\n case 'notcontains':\n mongoQuery += '\"' + field + '\":{\"$not\":{\"$regex\":\"' + item.value + '\"}}';\n break;\n case 'startswith':\n mongoQuery += '\"' + field + '\":{\"$regex\":\"^' + itVal + '\"}';\n break;\n case 'notstartswith':\n mongoQuery += '\"' + field + '\":{\"$not\":{\"$regex\":\"^' + item.value + '\"}}';\n break;\n case 'endswith':\n mongoQuery += '\"' + field + '\":{\"$regex\":\"' + itVal + '$\"}';\n break;\n case 'notendswith':\n mongoQuery += '\"' + field + '\":{\"$not\":{\"$regex\":\"' + item.value + '$\"}}';\n break;\n case 'isnull':\n mongoQuery += '\"' + field + '\": null';\n break;\n case 'isnotnull':\n mongoQuery += '\"' + field + '\":{\"$ne\": null}';\n break;\n case 'isempty':\n mongoQuery += '\"' + field + '\": \"\"';\n break;\n case 'isnotempty':\n mongoQuery += '\"' + field + '\":{\"$ne\": \"\"}';\n break;\n case 'equal':\n if (item.type === 'string') {\n mongoQuery += '\"' + field + '\":\"' + itVal + '\"';\n }\n else if (item.type === 'date') {\n mongoQuery += '\"' + field + '\":\"' + item.value + '\"';\n }\n else if (item.type === 'boolean') {\n mongoQuery += '\"' + field + '\":' + item.value + '';\n }\n else {\n mongoQuery += '\"' + field + '\":' + item.value + '';\n }\n break;\n case 'notequal':\n if (item.type === 'string') {\n mongoQuery += '\"' + field + '\":{\"$ne\":\"' + itVal + '\"}';\n }\n else if (item.type === 'date') {\n mongoQuery += '\"' + field + '\":{\"$ne\":\"' + item.value + '\"}';\n }\n else {\n mongoQuery += '\"' + field + '\":{\"$ne\":' + item.value + '}';\n }\n break;\n case 'in':\n if (item.type === 'string') {\n if (item.value.length > 1) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var s = item.value.map(function (x, j) { return (j < item.value.length ? \"\\\"\" + x + \"\\\"\" : ''); }).toString();\n s = s.endsWith(',') ? s.substring(0, s.length - 1) : s;\n mongoQuery += '\"' + field + '\": { \"$in\": [' + s + ']}';\n }\n else {\n mongoQuery += '\"' + field + '\": { \"$in\": [\"' + itVal + '\"]}';\n }\n }\n else if (item.type === 'number') {\n if (item.value.length > 1) {\n mongoQuery += '\"' + field + '\": { \"$in\": [' + item.value.toString() + ']}';\n }\n else {\n mongoQuery += '\"' + field + '\": { \"$in\": [' + item.value + ']}';\n }\n }\n break;\n case 'notin':\n if (item.type === 'string') {\n if (item.value.length > 1) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var s = item.value.map(function (x, j) { return (j < item.value.length ? \"\\\"\" + x + \"\\\"\" : ''); }).toString();\n s = s.endsWith(',') ? s.substring(0, s.length - 1) : s;\n mongoQuery += '\"' + field + '\": { \"$nin\": [' + s + ']}';\n }\n else {\n mongoQuery += '\"' + field + '\": { \"$nin\": [\"' + itVal + '\"]}';\n }\n }\n else if (item.type === 'number') {\n if (item.value.length > 1) {\n mongoQuery += '\"' + field + '\": { \"$nin\": [' + item.value.toString() + ']}';\n }\n else {\n mongoQuery += '\"' + field + '\": { \"$nin\": [' + item.value + ']}';\n }\n }\n break;\n case 'greaterthan':\n if (item.type === 'number') {\n mongoQuery += '\"' + field + '\": { \"$gt\": ' + item.value + '}';\n }\n else {\n mongoQuery += '\"' + field + '\": { \"$gt\": \"' + item.value + '\"}';\n }\n break;\n case 'greaterthanorequal':\n if (item.type === 'number') {\n mongoQuery += '\"' + field + '\": { \"$gte\": ' + item.value + '}';\n }\n else {\n mongoQuery += '\"' + field + '\": { \"$gte\": \"' + item.value + '\"}';\n }\n break;\n case 'between':\n if (item.type === 'number') {\n mongoQuery += '\"' + field + '\": {\"$gte\":' + item.value[0] + ', \"$lte\":' + item.value[1] + '}';\n }\n else {\n mongoQuery += '\"' + field + '\": {\"$gte\": \"' + item.value[0] + '\", \"$lte\": \"' + item.value[1] + '\"}';\n }\n break;\n case 'notbetween':\n if (item.type === 'number') {\n mongoQuery += '\"$or\":[{\"' + field + '\": {\"$lt\":' + item.value[0] + '}}, {\"' + field + '\": {\"$gt\":' + item.value[1] + '}}]';\n }\n else {\n mongoQuery += '\"$or\":[{\"' + field + '\": {\"$lt\": \"' + item.value[0] + '\"}}, {\"' + field + '\": {\"$gt\": \"' + item.value[1] + '\"}}]';\n }\n break;\n case 'lessthan':\n if (item.type === 'number') {\n mongoQuery += '\"' + field + '\": { \"$lt\": ' + item.value + '}';\n }\n else {\n mongoQuery += '\"' + field + '\": { \"$lt\": \"' + item.value + '\"}';\n }\n break;\n case 'lessthanorequal':\n if (item.type === 'number') {\n mongoQuery += '\"' + field + '\": { \"$lte\": ' + item.value + '}';\n }\n else {\n mongoQuery += '\"' + field + '\": { \"$lte\": \"' + item.value + '\"}';\n }\n break;\n }\n mongoQuery += '}';\n if (rules.length !== i) {\n mongoQuery += ',';\n }\n });\n return mongoQuery;\n };\n QueryLibrary.prototype.mongoParser = function (mongoQuery, rule, mongoLocale) {\n var mongoList;\n if (Object.keys(mongoQuery).indexOf('$and') > -1) {\n mongoList = mongoQuery['$and'];\n rule.condition = 'and';\n }\n else if (Object.keys(mongoQuery).indexOf('$or') > -1) {\n mongoList = mongoQuery['$or'];\n rule.condition = 'or';\n }\n rule.rules = [];\n this.mongoRecursion(mongoList, rule.rules, mongoLocale);\n };\n QueryLibrary.prototype.mongoRecursion = function (mongoList, rules, mongoLocale) {\n var operatorValue;\n var type;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var stringValue;\n var key;\n var betweenValue;\n var condition;\n var value;\n var subRules;\n var rule;\n var keyObj;\n var ruleValue;\n for (var i = 0, len = mongoList.length; i < len; i++) {\n var betweenOperatorArray = [];\n var inOperatorArray = [];\n condition = Object.keys(mongoList[i])[0];\n value = mongoList[i][condition];\n if (condition === '$and') {\n if (this.parent.enableNotCondition) {\n subRules = { condition: condition.replace('$', ''), rules: [], not: false };\n }\n else {\n subRules = { condition: condition.replace('$', ''), rules: [] };\n }\n rules.push(subRules);\n this.mongoRecursion(mongoList[i][condition], rules[rules.length - 1].rules, mongoLocale);\n }\n else if (condition === '$or') {\n var notBetween = void 0;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var innerObject = [];\n var keys = [];\n var firstKey = [];\n var secondKey = [];\n var innerKeys = [];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var firstValue = [];\n var secondValue = [];\n var innerFirstValue = [];\n var innerSecondValue = [];\n if (Array.isArray(value) && value.length === 2) {\n keys = Object.keys(value);\n innerFirstValue = value[keys[0]];\n innerSecondValue = value[keys[1]];\n if (typeof innerFirstValue === 'object') {\n innerObject = Object.keys(innerFirstValue)[0];\n innerKeys = Object.keys(innerFirstValue[Object.keys(innerFirstValue)[0]]);\n firstKey = innerKeys[0];\n secondKey = Object.keys(innerSecondValue[Object.keys(innerSecondValue)[0]])[0];\n if (firstKey === '$lt' && secondKey === '$gt') {\n operatorValue = 'notbetween';\n // eslint-disable-next-line security/detect-object-injection\n firstValue = innerFirstValue[innerObject][firstKey];\n // eslint-disable-next-line security/detect-object-injection\n secondValue = innerSecondValue[innerObject][secondKey];\n type = typeof firstValue === 'number' ? 'number' : 'date';\n ruleValue = [firstValue, secondValue];\n rule = { field: innerObject, label: innerObject, value: ruleValue, operator: operatorValue, type: type };\n rules.push(rule);\n notBetween = true;\n }\n }\n }\n if (!notBetween) {\n if (this.parent.enableNotCondition) {\n subRules = { condition: condition.replace('$', ''), rules: [], not: false };\n }\n else {\n subRules = { condition: condition.replace('$', ''), rules: [] };\n }\n rules.push(subRules);\n this.mongoRecursion(mongoList[i][condition], rules[rules.length - 1].rules, mongoLocale);\n }\n }\n else {\n value = mongoList[i][condition];\n if (value === null) { // isnull operator\n operatorValue = 'isnull';\n }\n if (typeof value === 'boolean') { // boolean type values\n operatorValue = 'equal';\n type = 'boolean';\n ruleValue = value;\n }\n if (typeof (value) === 'number') {\n ruleValue = value;\n type = 'number';\n operatorValue = 'equal';\n }\n else if (typeof (value) === 'object' && value !== null) {\n keyObj = Object.keys(value);\n for (var i_1 = 0; i_1 < keyObj.length; i_1++) {\n key = keyObj[i_1];\n stringValue = (value)[keyObj[i_1]];\n if (key === '$ne' && isNullOrUndefined(stringValue)) { // not null operator\n operatorValue = 'isnotnull';\n ruleValue = null;\n }\n if (key === '$ne' && typeof stringValue === 'boolean') { // not equal operator for boolean\n operatorValue = 'notequal';\n ruleValue = stringValue;\n type = 'boolean';\n }\n if (keyObj.length >= 2 && keyObj[i_1]) {\n if (typeof (stringValue) == 'object') { // between and notbetween operators\n operatorValue = 'notbetween';\n condition = Object.keys(stringValue)[0];\n betweenValue = [Object.keys(stringValue[condition])[0]];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n betweenOperatorArray.push(stringValue[condition][betweenValue]);\n type = 'number';\n }\n else {\n operatorValue = 'between';\n betweenOperatorArray.push(stringValue);\n }\n if (typeof (stringValue) === 'number') {\n type = 'number';\n }\n }\n else if (typeof (stringValue) === 'object' && stringValue !== null) { // \"in\" and \"notin\" operator\n if (key === '$not' && Object.keys(stringValue)[0] === '$regex') {\n if (stringValue['$regex'].indexOf('^') > -1) {\n operatorValue = 'notstartswith';\n ruleValue = stringValue['$regex'].replace('^', '');\n }\n else if (stringValue['$regex'].indexOf('$') > -1) {\n operatorValue = 'notendswith';\n ruleValue = stringValue['$regex'].replace('$', '');\n }\n else {\n operatorValue = 'notcontains';\n ruleValue = stringValue['$regex'];\n }\n }\n else {\n operatorValue = key === '$in' ? 'in' : 'notin';\n inOperatorArray = stringValue;\n type = typeof (stringValue[0]) === 'number' ? 'number' : 'string';\n }\n }\n else if (typeof (stringValue) === 'number') { // number type values\n operatorValue = this.getOperatorFromMongoOperator(key);\n type = 'number';\n ruleValue = stringValue;\n }\n if (typeof (stringValue) === 'string') { // string type values\n if (key === '$regex') {\n operatorValue = 'contains';\n ruleValue = stringValue;\n type = 'string';\n }\n if (key === '$ne') { // not equal\n if (stringValue !== null && stringValue.length > 0 && isNaN(Date.parse(stringValue))) {\n operatorValue = 'notequal';\n ruleValue = stringValue;\n }\n else if (isNullOrUndefined(stringValue)) { // is not null operator\n operatorValue = 'isnotnull';\n ruleValue = stringValue;\n }\n else if (stringValue === '') { // is not empty operator\n operatorValue = 'isnotempty';\n ruleValue = stringValue;\n }\n type = 'string';\n }\n if (stringValue.indexOf('^') > -1) {\n operatorValue = 'startswith';\n ruleValue = stringValue.replace('^', '');\n type = 'string';\n }\n if (stringValue.indexOf('$') > -1 && key !== '$not') {\n operatorValue = 'endswith';\n ruleValue = stringValue.replace('$', '');\n type = 'string';\n }\n if (!isNaN(Date.parse(stringValue))) { // Date type operators\n operatorValue = operatorValue || this.getOperatorFromMongoOperator(key);\n type = 'date';\n ruleValue = stringValue;\n }\n }\n }\n }\n else if (value && typeof (value) === 'string' && !isNaN(Date.parse(value))) {\n operatorValue = 'equal';\n ruleValue = value;\n type = 'date';\n }\n else if (typeof (value) === 'string' && value !== '' && value !== 'true' && value !== 'false') {\n operatorValue = 'equal';\n ruleValue = value;\n type = 'string';\n }\n else if (typeof (value) === 'string' && value === '') {\n operatorValue = 'isempty';\n ruleValue = value;\n type = 'string';\n }\n if (betweenOperatorArray && betweenOperatorArray.length > 1) { // between opertor value\n rule = { field: condition, label: condition, value: betweenOperatorArray, operator: operatorValue, type: type };\n }\n else if (inOperatorArray && inOperatorArray.length > 1) { // in operator value\n rule = { field: condition, label: condition, value: inOperatorArray, operator: operatorValue, type: type };\n }\n else {\n rule = { field: condition, label: condition, value: ruleValue, operator: operatorValue, type: type };\n }\n rules.push(rule);\n operatorValue = '';\n }\n }\n };\n QueryLibrary.prototype.convertParamSqlToSql = function (sql) {\n var paramSql = sql.sql;\n var paramValues = sql.params;\n var parts = paramSql.split('?');\n var normalSql = parts[0];\n for (var i = 0; i < paramValues.length; i++) {\n normalSql += (typeof (paramValues[i]) === 'string' ? \"'\" + paramValues[i] + \"'\" + parts[i + 1] : paramValues[i] + parts[i + 1]);\n }\n if (normalSql.length >= 2 && normalSql[0] === '(' && normalSql[normalSql.length - 1] === ')') {\n normalSql = normalSql.slice(1, -1);\n }\n normalSql = normalSql.replace(/!= ''(?! =)/g, 'IS NOT EMPTY').replace(/= ''/g, 'IS EMPTY');\n return normalSql;\n };\n QueryLibrary.prototype.convertNamedParamSqlToSql = function (sql) {\n var namedParamSql = sql.sql;\n var params = sql.params;\n var normalSql = namedParamSql;\n Object.keys(params).forEach(function (paramName) {\n var paramValue = params[paramName];\n paramName = ':' + paramName;\n normalSql = normalSql.replace(paramName, typeof (paramValue) === 'string' ? \"'\" + paramValue + \"'\" : String(paramValue));\n });\n if (normalSql.length >= 2 && normalSql[0] === '(' && normalSql[normalSql.length - 1] === ')') {\n normalSql = normalSql.slice(1, -1);\n }\n normalSql = normalSql.replace(/!= ''(?! =)/g, 'IS NOT EMPTY').replace(/= ''/g, 'IS EMPTY');\n return normalSql;\n };\n QueryLibrary.prototype.getParameterSql = function (qbrule) {\n var qbRule = extend({}, qbrule, null, true);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var value = this.updateRuleValue(qbRule, false);\n return this.getParameterSQLVal(this.parent.getSqlFromRules(qbRule), value['ruleVal']);\n };\n QueryLibrary.prototype.getNamedParameterSql = function (qbrule) {\n var qbRule = extend({}, qbrule, null, true);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var value = this.updateRuleValue(qbRule, true);\n return this.getNamedParameterSQLVal(this.parent.getSqlFromRules(qbRule), value['namedRuleVal']);\n };\n QueryLibrary.prototype.getParameterSQLVal = function (content, ruleValue) {\n var replacedString = content.replace(/[%']/g, '');\n return { sql: '(' + replacedString + ')', params: ruleValue };\n };\n QueryLibrary.prototype.getNamedParameterSQLVal = function (content, ruleValue) {\n var replacedString = content.replace(/[%']/g, '');\n return { sql: '(' + replacedString + ')', params: ruleValue };\n };\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n QueryLibrary.prototype.updateRuleValue = function (rule, isNamedParameter) {\n var ruleVal = [];\n var namedRuleVal = {};\n var namedParameters = [];\n return this.updateValue(rule.rules, isNamedParameter, ruleVal, namedRuleVal, namedParameters);\n };\n QueryLibrary.prototype.updateValue = function (rules, isNamedParameter, ruleVal, \n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n namedRuleVal, namedParameters) {\n if (isNullOrUndefined(rules)) {\n return { ruleVal: ruleVal, namedRuleVal: namedRuleVal };\n }\n for (var i = 0; i < rules.length; i++) {\n if (rules[i].rules) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var value = this.updateValue(rules[i].rules, isNamedParameter, ruleVal, namedRuleVal, namedParameters);\n ruleVal = value['ruleVal'];\n namedRuleVal = value['namedRuleVal'];\n }\n else {\n var namedField = void 0;\n if (rules[i].value instanceof Array) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n for (var j = 0; j < (rules[i].value).length; j++) {\n if (isNamedParameter) {\n namedField = this.getNamedParameter(rules[i].field, namedParameters);\n }\n if (!isNullOrUndefined(rules[i].value[j])) {\n if (rules[i].type === 'string' || rules[i].type === 'date') {\n if (isNamedParameter) {\n namedRuleVal[namedField] = rules[i].value[j];\n }\n else {\n ruleVal.push(rules[i].value[j]);\n }\n }\n else {\n if (isNamedParameter) {\n namedRuleVal[namedField] = rules[i].value[j];\n }\n else {\n ruleVal.push(rules[i].value[j]);\n }\n }\n }\n if (isNamedParameter) {\n rules[i].value[j] = ':' + namedField;\n }\n else {\n rules[i].value[j] = '?';\n }\n }\n }\n else {\n if (isNamedParameter) {\n namedField = this.getNamedParameter(rules[i].field, namedParameters);\n }\n if (rules[i].operator.indexOf('null') < 1) {\n if (rules[i].type !== 'string' || (rules[i].type === 'string' && (rules[i].value !== '' || rules[i].value === 0))) {\n if (rules[i].type === 'string' || rules[i].type === 'date') {\n if (rules[i].operator.indexOf('empty') < 1) {\n var value = rules[i].value.toString();\n switch (rules[i].operator) {\n case 'startswith':\n case 'notstartswith':\n value = value + '%';\n break;\n case 'endswith':\n case 'notendswith':\n value = '%' + value;\n break;\n case 'contains':\n case 'notcontains':\n value = '%' + value + '%';\n break;\n }\n if (isNamedParameter) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n namedRuleVal[namedField] = value;\n }\n else {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ruleVal.push(value);\n }\n }\n else {\n if (isNamedParameter) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n namedRuleVal[namedField] = '';\n }\n else {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ruleVal.push('');\n }\n if (rules[i].operator === 'isempty') {\n rules[i].operator = 'equal';\n }\n else {\n rules[i].operator = 'notequal';\n }\n }\n }\n else {\n if (!isNullOrUndefined(rules[i].value)) {\n if (isNamedParameter) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n namedRuleVal[namedField] = rules[i].value;\n }\n else {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ruleVal.push(rules[i].value);\n }\n }\n }\n if (isNamedParameter) {\n rules[i].value = ':' + namedField;\n }\n else {\n rules[i].value = '?';\n }\n }\n }\n }\n }\n }\n return { ruleVal: ruleVal, namedRuleVal: namedRuleVal };\n };\n QueryLibrary.prototype.getNamedParameter = function (field, namedParameters) {\n var newField = null;\n if (namedParameters.length > 0) {\n for (var i = namedParameters.length - 1; i >= 0; i--) {\n var currField = namedParameters[i];\n if (currField.indexOf(field) > -1) {\n var idx = parseInt(currField.split('_')[1], 10) + 1;\n newField = field + '_' + idx;\n namedParameters.push(newField);\n break;\n }\n }\n }\n if (!newField) {\n newField = field + '_1';\n namedParameters.push(newField);\n }\n return newField;\n };\n QueryLibrary.prototype.getModuleName = function () {\n return 'query-library';\n };\n return QueryLibrary;\n}());\nexport { QueryLibrary };\n","import * as index from './index';\nindex.QueryBuilder.Inject(index.QueryLibrary);\nexport * from './index';\n"],"names":["__extends","extendStatics","d","b","Object","setPrototypeOf","__proto__","Array","p","hasOwnProperty","__","this","constructor","prototype","create","__assign","assign","t","s","i","n","arguments","length","call","apply","__decorate","decorators","target","key","desc","c","r","getOwnPropertyDescriptor","Reflect","decorate","defineProperty","Columns","_super","Property","isRequired","min","max","Number","MAX_VALUE","ChildProperty","Rule","Collection","Value","ShowButtons","QueryBuilder","options","element","_this","isReadonly","fields","text","value","updatedRule","not","condition","isLocked","isLocale","isRefreshed","isNotified","isAddSuccess","isNotValueChange","isFieldChange","isFieldClose","isDestroy","isGetNestedData","isCustomOprCols","groupCounter","lockItems","groupIndex","ruleIndex","isLastGroup","cloneGrpBtnClick","isMiddleGroup","cloneRuleBtnClick","isValueEmpty","dragStopHandler","e","isDragEventPrevent","targetGroup","closest","isNullOrUndefined","parentElement","classList","contains","enableSeparateConnector","previousElementSibling","prevRule","isPreventelem","helper","targetGrp","dropEventArgs","cancel","dropRuleID","id","dropGroupID","trigger","getValidRules","prvtEvtTgrDaD","tgrt","groupId_1","split","draggable","currentStateTarget","rule","getGroup","draggedRule","deleteGroup","getRule","deleteRule","groupRule","extend","properties","groupElem","querySelectorAll","forEach","ele","querySelector","ruleElems","ruleIds","dropInd","push","deleteRules","rules","splice","addGroups","addRules","children","groupId","groupId_2","previousRule","type","document","body","remove","borderLineElem","refresh","MultiSelect","Inject","CheckBoxSelection","getPersistData","addOnPersist","reset","isImportRules","bodyElem","inputElement","len","className","indexOf","getComponent","destroy","innerHTML","grpContainer","createElement","attrs","class","grpHeader","grpBody","appendChild","headerTemplate","isRoot","enableNotCondition","removeClass","levelColl","setProperties","disableRuleCondition","getWrapper","getModuleName","requiredModules","modules","member","args","GetRootColumnName","field","separator","initialize","dataColl","columnKeys","keys","cols","categories","groupBy","isDate","validateObj","columns","columnSort","updateCustomOperator","isNaN","Date","parse","getTime","validation","category","l10n","getConstant","operators","customOperators","updateSubFieldsFromColumns","label","updateSubFields","col","data","sampCol","result","compField","resData","column","from","this_1","j","sqlIdx","operator_1","operColl","values","map","join","valueIdx","focusEventHandler","event","clickEventHandler","groupID","tagName","animation","Animation","duration","delay","renderSummary","summaryElem","getElementById","txtareaElem","animate","name","style","display","textContent","getSqlFromRules","height","scrollHeight","actionButton","ruleClone","ruleLock","groupLock","groupClone","addGroupElement","mRules","setGroupRules","renderSummaryCollapse","forIdValue","getAttribute","targetValue","replace","group","ariaChecked","toggleElem","getElementsByClassName","addClass","toLowerCase","beforeSuccessCallBack","observedChangeArgs","beforeRules","getParentGroup","ruleID","filterRules","andElem","orElem","checked","selectBtn","showButtons","groupInsert","maxGroupCount","enableRtl","addRuleElement","appendRuleElem","parentId","action","ruleElem","elem","ruleListElem","select","setAttribute","ruleIdCounter","cloneRule","index","tempRuleIndex","insertBefore","ruleTemplate","requestType","ruleTemplateFn","templateParser","templateID","getOperators","operatorFields","isReact","isAngular","templateColl","nodeType","isVue3","append","cloneNode","lockGroup","lockRule","cloneGroup","ruleDelete","allowDragAndDrop","renderReactTemplates","isRuleTemplate","isInitialLoad","addRuleSuccessCallBack","trgt","act","pId","isRlTmp","dropDownList","getColumn","newRule","operator","selectedColumn","passedRule","args_1","displayMode","spanElement","add","previousRuleElem","ruleContainer","headerTemplateFn","prevRuleContainer","prevElem","prevRule_1","updateAddedRule","fieldMode","ddlField","ddlValue","autoSelectField","dataSource","placeholder","popupHeight","close","fieldClose","bind","change","changeField","open","popupOpen","cssClass","fieldModel","DropDownList","appendTo","ddlVal","getDataByValue","changeRule","itemData","dummyDropdownTreeDs","updateDropdowntreeDS","child","expanded","selectable","showClearButton","changeOnBlur","treeSettings","expandOn","filtering","dropdownTreeFiltering","dropdownTreeClose","dropdowntree","DropDownTree","getLabelFromColumn","lockRuleTarget","args_2","notCondition","undefined","prevElem_1","ruleContainer_1","args_3","setMultiConnector","proxy","ruleElemID","srcElement","ddTree","hierarchicalData","changeDataSource","matchedDataSource","nestedChildFilter","filter","filteredChild","setTimeout","treeObj","expandAll","node","isMatchedNode","matchedChildren","checkValue","parseInt","toString","template","isNewRuleAdded","enableSeparateCondition","custom","changeRuleTemplate","operVal","parentGroup","previousColumn","detach","clearQBTemplate","renderToolTip","tooltip","Tooltip","content","isSticky","position","afterClose","beforeOpen","tooltipCloseElement","validateFields","dropDownTreeObj","isValid","allowValidation","excludeOprs","fieldElem","indexElem","valArray","dropDownObj","tempElem","ruleElemCln","validateRule","separateCondition","valElem","jLen","refreshLevelColl","obj","groupElement","level","refreshLevel","childElem","ruleList","iLen","groupCount","slice","groupTemplate","isConnector","glueElem","inputElem","dragClsName","labelElem","grpActElem","groupBtn","groupHdrElem","grpBodyElem","rulesElem","spanDragElement","aria-lable","title","role","clsName","cloneClsName","lockClsName","filterElem","cloneRuleBtnElem","cloneLockBtnElem","delBtnElem","isGroup","isBtnClick","addGroupSuccess","eventTarget","dltGroupBtn","groupIdCounter","andInpElem","orInpElem","andLblElem","orLblElem","btnGroupId","groupDelete","Button","iconCss","rippleEffect","selector","childElems","grpLen","tempGroupIndex","idx","parentNode","addRuleToNewGroups","cloneBtnElem","lockBtnElem","lockSpanElement","notElem","CheckBox","btnGroup","childNodes","newAndElem","newOrElem","nextSibling","nextElementSibling","args_4","conditionBtn_1","btnObj","onclick","groupBtn_1","DropDownButton","items","grpId","chgrpId","childGroupID","addHeaderDiv","disabled","isInitialRule","groupHdr","getRuleCollection","headerFn","enableSeparateConnectorInitialRule","notifyChange","grpElement","ruleElement","format","getFormat","intl","formatDate","templateChange","updateRules","eventsArgs","grpElem","validateValue","prevOper","arrOper","grpEle","destroyControls","changeValue","isNumInput","currentTarget","dateElement","rbValue","numericTextBoxObj","getInstance","NumericTextBox","decimalSeparator","getValue","getNumericObject","locale","getNumberParser","immediateModeDelay","window","clearInterval","timer","setInterval","filterValue","grID","rlID","changeValueSuccessCallBack","ddl","item","popupObj","getItemData","customArgs","isInteracted","previousItemData","prevItemData","previousItem","previousValue","ddtElem","ddt","oldValue","dataBind","destroySubFields","subFieldElem","ddlArgs","tempRule","ddlObj","changeFilter","flt","dl","rl","tmpRl","dArg","selectedField","fieldChangeSuccess","operatorElem","changeOperator","opr","selectedIndex","operatorChangeSuccess","changeRuleValues","tooltipElem","createSubFields","subFieldValue","subFilterCounter","ruleId","subField","currOper","prevValue","parentElem","operatorList","oprElem","childElementCount","fieldObj","renderValues","operator_2","ddlIdx","autoSelectOperator","ddlOperator","operatorModel","isField","popup","divElement","templateDestroy","templateElement","elemId","temp","templateElements","elementId","elements","getValues","original","fieldColl","dataObj","fieldStr","createNestedObject","lastIndex","k","getDistinctValues","nest","isNested","this_2","renderMultiSelect","selectedValue","ds","isFetched","isValues","multiSelectValue","dataManager","query","Query","selectedRule","mode","width","closePopup","actionBegin","multiSelectOpen","valueModel","multiSelectModel","multiSelectObj","DataManager","bindMultiSelectData","getMultiSelectData","dummyData","deferred","Deferred","executeQuery","multiselectObj","hideSpinner","createSpinner","showSpinner","then","actual","catch","reject","spinnerElem","Browser","isDevice","processTemplate","container","tempElements","write","setDefaultValue","isArryValue","isNumber","renderStringValue","ruleValElem","selectedVal","columnData","isTemplate","isPublic","txtBox","input","textBoxModel","inputobj","TextBox","minWidth","renderNumberValue","selVal","txtInp","numericTxt","step","numericTextBoxModel","numeric","oninput","processValueString","numArr","strArr","kLen","parseDate","formatOpt","dParser","getDateParser","skeleton","renderControls","isRendered","length_1","processBoolValues","datepick","datePicker","place","formatObj","getLocale","datePickerModel","DatePicker","orgValue","isCheck","radioBtn","radioButtonModel","radiobutton","RadioButton","getOperatorIndex","getPreviousItemData","isRender","filtElem","getElementsByTagName","filtObj","isTempRendered","setColumnTemplate","inputLen","renderTemplate","observedActionArgs","actionBeginSuccessCallBack","Element","columnTemplateFn","valElemColl","updateValues","selectedDate","radioBtnObj","controlName","isNotTrigger","valueContainer","elementCln","i_1","i_2","ruleValueUpdate","beforeRule","afterRule","JSON","stringify","oper","arrOperator","dupSelectedValue","parseFloat","isObject","formatOptions","findGroupByIdx","groupIdx","ruleColl","dupRuleColl","unWireEvents","portals","popupElement","groups","importRules","initWrapper","trim","summaryView","notGroupRtl","readonly","enableReadonly","buttons","button","contentElem","textElem","styles","editElem","divElem","collapseElem","sortDirection","executeLocal","sortByDesc","sortBy","onChangeNotGroup","checkNotGroup","orgRule","onPropertyChanged","newProp","oldProp","_i","properties_1","enablePersistence","setRules","Internationalization","preRender","getUniqueID","defaultLocale","StartsWith","DoesNotStartWith","EndsWith","DoesNotEndWith","Contains","DoesNotContain","NotLike","Like","Equal","NotEqual","LessThan","LessThanOrEqual","GreaterThan","GreaterThanOrEqual","Between","NotBetween","In","NotIn","Remove","SelectField","SelectOperator","DeleteRule","DeleteGroup","AddGroup","AddCondition","Edit","ValidationMessage","SummaryViewTitle","OtherFields","AND","OR","NOT","SelectValue","IsEmpty","IsNotEmpty","IsNull","IsNotNull","True","False","AddButton","CloneGroup","LockGroup","CloneRule","LockRule","UnlockRule","UnlockGroup","L10n","parser","stringOperator","dateOperator","booleanOperator","numberOperator","equal","notequal","greaterthan","greaterthanorequal","lessthan","in","notin","lessthanorequal","startswith","endswith","between","notbetween","isnull","isnotnull","isempty","isnotempty","notstartswith","notendswith","notcontains","sqlOperators","toUpperCase","render","stringOper","numberOper","concat","executeDataManager","take","initControl","renderComplete","initializeDrag","Draggable","dragTarget","distance","dragStart","dragStartHandler","drag","dragHandler","dragStop","isReplaceDragEle","isPreventSelect","abort","isDragScroll","cloneElement","visualElement","offsetWidth","removeAttribute","dragElement","dragEventArgs","dragRuleID","dragGroupID","nodeName","targetElem","rect","getBoundingClientRect","distanceToTop","mouseY","clientY","changedTouches","top","distanceToBottom","bottom","threshold","templateCompiler","compile","error","wireEvents","wrapper","EventHandler","keyBoardHandler","isParent","groupLevel","deleteGroupSuccessCallBack","nextElem","removeString","remRule","ruleElemColl","isTemplateRendered","isPlatformTemplate","deleteRuleSuccessCallBack","clnruleElem","previousElem","nextElem_1","err","i_3","lockGrpTarget","keyCode","code","dragElemnet","preventDefault","clearTemplate","isNewGroup","count","andGroup","orGroup","currentRule","getRules","ruleCondtion","isValidRule","customObj","isQuestion","lockedRule","notValue","HTMLElement","deleteGroups","groupIdColl","getFilteredRecords","predicate","getPredicate","dataManagerQuery","where","ruleIdColl","getDataManagerQuery","pred","pred2","ruleValue","ignoreCase","and","or","isDateFilter","dateOperColl","matchCase","getDate","isTime","datePredicate","arrayPredicate","Predicate","localeString","cldrData","setTime","date","isStart","setHours","startDate","endDate","nullValue","gte","currDate","setMinutes","setSeconds","isReset","renderGroup","tglBtnElem","renderRule","cloneElem","deleteGroupElems","addRuleGroupElems","removeRuleElems","elems","enableBtnGroup","isDateFunction","dateFunc","getSqlString","enableEscape","queryStr","sqlLocale","valueStr","ruleOpertor","ruleCondition","custOper","isCustom","setRulesFromSql","sqlString","ruleModel","getRulesFromSql","sqlParser","processParser","allowEscape","getParameterizedSql","moduleLoader","loadedModules","sql","notify","prop","onPropertyChange","console","warn","setParameterizedSql","sqlQuery","getParameterizedNamedSql","setParameterizedNamedSql","setMongoQuery","mongoQuery","mongoLocale","getMongoQuery","isCloneRule","parentGroupID","isCloneGroup","str","st","parseSqlStrings","conditions","subOp","regexStr","matchValue","test","regExp","RegExp","exec","lastPasrser","checkLiteral","checkNumberLiteral","singleString","getSingleQuoteString","isClosed","checkCondition","combineSingleQuoteString","doubleString","getDoubleQuoteString","start","end","substring","isBetween","tempMatchValue","tempStr","lastParser","secParser","betweenParser","betweenOperator","getOperator","=","!=","<",">","<=",">=","not in","not between","is empty","is null","is not null","is not empty","localeOperator","getTypeFromColumn","l","getLabelFromField","startIdx","fieldName","subRules","lLen","grpCount","numVal","strVal","isLeftOpened","isNotOpened","val","pop","targetGrpId","lockItem","disableRuleControls","newGroup","disableHeaderControls","updateLockItems","isDisabled","addElem","deleteGrpElem","lockElem","groupContElem","addCondition","addGroup","ddlElement","numericElement","textElement","checkboxElement","radioBtnElement","multiSelectElement","deleteElem","enabled","Event","Complex","NotifyPropertyChanges","Component","QueryLibrary","parent","addEventListener","isDestroyed","removeEventListener","on","queryLibrary","off","getMongoFromRules","mongoParser","getParameterSql","getNamedParameterSql","convertParamSqlToSql","convertNamedParamSqlToSql","convertMongoQuery","getOperatorFromMongoOperator","operatorValue","itVal","x","endsWith","mongoList","mongoRecursion","stringValue","betweenValue","keyObj","betweenOperatorArray","inOperatorArray","notBetween","innerObject","firstKey","secondKey","firstValue","innerFirstValue","innerSecondValue","isArray","paramSql","paramValues","params","parts","normalSql","namedParamSql","paramName","paramValue","String","qbrule","qbRule","updateRuleValue","getParameterSQLVal","getNamedParameterSQLVal","isNamedParameter","ruleVal","namedRuleVal","namedParameters","updateValue","namedField","getNamedParameter","newField","currField","index.QueryLibrary"],"mappings":"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"}
1
+ {"version":3,"file":"ej2-querybuilder.min.js","sources":["../../src/query-builder/query-builder.js","../../src/query-builder/query-library.js","../../src/global.js"],"sourcesContent":["var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n/**\n * Query Builder Source\n */\n/* eslint-disable max-len */\nimport { Component, NotifyPropertyChanges, getComponent, Browser, compile, append, Draggable, remove } from '@syncfusion/ej2-base';\nimport { Property, ChildProperty, Complex, L10n, closest, extend, isNullOrUndefined, Collection, cldrData } from '@syncfusion/ej2-base';\nimport { getInstance, addClass, removeClass, rippleEffect, detach, classList } from '@syncfusion/ej2-base';\nimport { Internationalization, getUniqueID, select } from '@syncfusion/ej2-base';\nimport { Button, CheckBox, RadioButton } from '@syncfusion/ej2-buttons';\nimport { DropDownList, CheckBoxSelection, DropDownTree } from '@syncfusion/ej2-dropdowns';\nimport { MultiSelect } from '@syncfusion/ej2-dropdowns';\nimport { Event, EventHandler, getValue, Animation } from '@syncfusion/ej2-base';\nimport { Query, Predicate, DataManager, Deferred } from '@syncfusion/ej2-data';\nimport { TextBox, NumericTextBox } from '@syncfusion/ej2-inputs';\nimport { DatePicker } from '@syncfusion/ej2-calendars';\nimport { DropDownButton } from '@syncfusion/ej2-splitbuttons';\nimport { Tooltip, createSpinner, showSpinner, hideSpinner } from '@syncfusion/ej2-popups';\nimport { compile as templateCompiler, getNumericObject } from '@syncfusion/ej2-base';\n/**\n * Defines the Columns of Query Builder\n */\nvar Columns = /** @class */ (function (_super) {\n __extends(Columns, _super);\n function Columns() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], Columns.prototype, \"field\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"label\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"type\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"values\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"operators\", void 0);\n __decorate([\n Property()\n ], Columns.prototype, \"ruleTemplate\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"template\", void 0);\n __decorate([\n Property({ isRequired: true, min: 0, max: Number.MAX_VALUE })\n ], Columns.prototype, \"validation\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"format\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"step\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"value\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"category\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"columns\", void 0);\n return Columns;\n}(ChildProperty));\nexport { Columns };\n/**\n * Defines the rule of Query Builder\n */\nvar Rule = /** @class */ (function (_super) {\n __extends(Rule, _super);\n function Rule() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], Rule.prototype, \"condition\", void 0);\n __decorate([\n Collection([], Rule)\n ], Rule.prototype, \"rules\", void 0);\n __decorate([\n Property(null)\n ], Rule.prototype, \"field\", void 0);\n __decorate([\n Property(null)\n ], Rule.prototype, \"label\", void 0);\n __decorate([\n Property(null)\n ], Rule.prototype, \"type\", void 0);\n __decorate([\n Property(null)\n ], Rule.prototype, \"operator\", void 0);\n __decorate([\n Property(null)\n ], Rule.prototype, \"value\", void 0);\n __decorate([\n Property(false)\n ], Rule.prototype, \"not\", void 0);\n __decorate([\n Property(null)\n ], Rule.prototype, \"isLocked\", void 0);\n return Rule;\n}(ChildProperty));\nexport { Rule };\n/**\n * Defines the property for value.\n */\nvar Value = /** @class */ (function (_super) {\n __extends(Value, _super);\n function Value() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], Value.prototype, \"numericTextBoxModel\", void 0);\n __decorate([\n Property(null)\n ], Value.prototype, \"multiSelectModel\", void 0);\n __decorate([\n Property(null)\n ], Value.prototype, \"datePickerModel\", void 0);\n __decorate([\n Property(null)\n ], Value.prototype, \"textBoxModel\", void 0);\n __decorate([\n Property(null)\n ], Value.prototype, \"radioButtonModel\", void 0);\n return Value;\n}(ChildProperty));\nexport { Value };\n/**\n * Defines the ruleDelete, groupInsert, and groupDelete options of Query Builder.\n */\nvar ShowButtons = /** @class */ (function (_super) {\n __extends(ShowButtons, _super);\n function ShowButtons() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], ShowButtons.prototype, \"cloneRule\", void 0);\n __decorate([\n Property(false)\n ], ShowButtons.prototype, \"cloneGroup\", void 0);\n __decorate([\n Property(false)\n ], ShowButtons.prototype, \"lockRule\", void 0);\n __decorate([\n Property(false)\n ], ShowButtons.prototype, \"lockGroup\", void 0);\n __decorate([\n Property(true)\n ], ShowButtons.prototype, \"ruleDelete\", void 0);\n __decorate([\n Property(true)\n ], ShowButtons.prototype, \"groupInsert\", void 0);\n __decorate([\n Property(true)\n ], ShowButtons.prototype, \"groupDelete\", void 0);\n return ShowButtons;\n}(ChildProperty));\nexport { ShowButtons };\nvar QueryBuilder = /** @class */ (function (_super) {\n __extends(QueryBuilder, _super);\n function QueryBuilder(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.isReadonly = true;\n _this.fields = { text: 'label', value: 'field' };\n _this.updatedRule = { not: false, condition: 'and', isLocked: false };\n _this.isLocale = false;\n _this.isRefreshed = false;\n _this.isNotified = false;\n _this.isAddSuccess = false;\n _this.isNotValueChange = false;\n _this.isFieldChange = false;\n _this.isFieldClose = false;\n _this.isDestroy = false;\n _this.isGetNestedData = false;\n _this.isCustomOprCols = [];\n _this.groupCounter = 0;\n _this.lockItems = [];\n _this.groupIndex = -1;\n _this.ruleIndex = -1;\n _this.isLastGroup = false;\n _this.cloneGrpBtnClick = false;\n _this.isMiddleGroup = false;\n _this.cloneRuleBtnClick = false;\n MultiSelect.Inject(CheckBoxSelection);\n return _this;\n }\n QueryBuilder.prototype.getPersistData = function () {\n return this.addOnPersist(['rule']);\n };\n /**\n * Clears the rules without root rule.\n *\n * @returns {void}.\n */\n QueryBuilder.prototype.reset = function () {\n this.isImportRules = false;\n var bodyElem = this.element.querySelector('.e-group-body');\n var inputElement = this.element.querySelectorAll('input.e-control');\n for (var i = 0, len = inputElement.length; i < len; i++) {\n if (inputElement[i].className.indexOf('e-tooltip') > -1) {\n getComponent(inputElement[i], 'tooltip').destroy();\n }\n else if (inputElement[i].parentElement.className.indexOf('e-tooltip') > -1) {\n getComponent(inputElement[i].parentElement, 'tooltip').destroy();\n }\n }\n if (bodyElem) {\n bodyElem.innerHTML = '';\n }\n else {\n var grpContainer = this.createElement('div', { attrs: { class: 'e-group-container' } });\n var grpHeader = this.createElement('div', { attrs: { class: 'e-group-header' } });\n var grpBody = this.createElement('div', { attrs: { class: 'e-group-body' } });\n grpContainer.appendChild(grpHeader).appendChild(grpBody);\n this.element.appendChild(grpContainer);\n bodyElem = this.element.querySelector('.e-group-body');\n }\n if (this.headerTemplate && this.isRoot) {\n this.element.innerHTML = '';\n this.isRoot = false;\n }\n if (this.enableNotCondition) {\n removeClass(this.element.querySelectorAll('.e-qb-toggle'), 'e-active-toggle');\n }\n bodyElem.appendChild(this.createElement('div', { attrs: { class: 'e-rule-list' } }));\n this.levelColl[this.element.id + '_group0'] = [0];\n this.setProperties({ rule: { condition: 'and', not: false, rules: [] } }, true);\n this.disableRuleCondition(bodyElem.parentElement);\n };\n QueryBuilder.prototype.getWrapper = function () {\n return this.element;\n };\n QueryBuilder.prototype.getModuleName = function () {\n return 'query-builder';\n };\n QueryBuilder.prototype.requiredModules = function () {\n var modules = [];\n modules.push({\n member: 'query-library',\n args: [this]\n });\n return modules;\n };\n QueryBuilder.prototype.GetRootColumnName = function (field) {\n return this.separator ? field.split(this.separator)[0] : field;\n };\n QueryBuilder.prototype.initialize = function () {\n if (this.dataColl.length) {\n var columnKeys = Object.keys(this.dataColl[0]);\n var cols = [];\n var categories = [];\n var type = void 0;\n var groupBy = false;\n var isDate = false;\n var value = void 0;\n var validateObj = { isRequired: true, min: 0, max: Number.MAX_VALUE };\n if (this.columns.length) {\n this.columnSort();\n var columns = this.columns;\n for (var i = 0, len = columns.length; i < len; i++) {\n this.updateCustomOperator(columns[i], 'initial');\n if (!columns[i].type) {\n if (columnKeys.indexOf(columns[i].field) > -1) {\n value = this.dataColl[0][columns[i].field];\n type = typeof value;\n if (type === 'string') {\n isDate = !isNaN(Date.parse(value));\n }\n else if (type === 'object') {\n isDate = value instanceof Date && !isNaN(value.getTime());\n type = 'string';\n }\n columns[i].type = type;\n isDate = false;\n }\n type = 'string';\n }\n if (!columns[i].validation) {\n columns[i].validation = validateObj;\n }\n if (columns[i].category) {\n groupBy = true;\n }\n else {\n columns[i].category = this.l10n.getConstant('OtherFields');\n }\n if (categories.indexOf(columns[i].category) < 0) {\n categories.push(columns[i].category);\n }\n if (!columns[i].operators ||\n (this.isLocale && this.isCustomOprCols.indexOf(columns[i].field) !== 0)) {\n columns[i].operators = this.customOperators[columns[i].type + 'Operator'];\n }\n }\n if (groupBy && (categories.length > 1 || categories[0] !== this.l10n.getConstant('OtherFields'))) {\n this.fields = { text: 'label', value: 'field', groupBy: 'category' };\n }\n this.updateSubFieldsFromColumns(this.columns);\n }\n else {\n for (var i = 0, len = columnKeys.length; i < len; i++) {\n value = this.dataColl[0][columnKeys[i]];\n type = typeof value;\n if (type === 'string') {\n isDate = !isNaN(Date.parse(value));\n }\n else if (type === 'object' && !Object.keys(value).length) {\n isDate = value instanceof Date && !isNaN(value.getTime());\n type = 'string';\n }\n cols[i] = { 'field': columnKeys[i], 'label': columnKeys[i], 'type': isDate ? 'date' : type,\n 'validation': validateObj };\n isDate = false;\n cols[i].operators = this.customOperators[cols[i].type + 'Operator'];\n if (type === 'object') {\n this.updateSubFields(value, cols[i]);\n }\n }\n this.columns = cols;\n }\n }\n else if (this.columns && this.columns.length) {\n var columns = this.columns;\n for (var i = 0, len = columns.length; i < len; i++) {\n if (columns[i].category) {\n this.fields = { text: 'label', value: 'field', groupBy: 'category' };\n }\n else {\n columns[i].category = this.l10n.getConstant('OtherFields');\n }\n this.updateCustomOperator(columns[i]);\n if (!columns[i].operators || this.isLocale) {\n columns[i].operators = this.customOperators[columns[i].type + 'Operator'];\n }\n }\n this.updateSubFieldsFromColumns(this.columns);\n }\n this.trigger('dataBound', { type: 'dataBound' });\n };\n QueryBuilder.prototype.updateSubFieldsFromColumns = function (col, field) {\n for (var i = 0; i < col.length; i++) {\n if (this.separator !== '' && col[i].field.indexOf(this.separator) < 0) {\n col[i].field = field ? field + this.separator + col[i].field : col[i].field;\n }\n if (col[i].operators) {\n this.updateCustomOperator(col[i]);\n }\n else if (col[i].type && col[i].type !== 'object') {\n col[i].operators = this.customOperators[col[i].type + 'Operator'];\n }\n if (col[i].columns) {\n col[i].type = 'object';\n this.updateSubFieldsFromColumns(col[i].columns, col[i].field);\n }\n }\n };\n QueryBuilder.prototype.updateSubFields = function (value, col, data) {\n var sampCol;\n col.columns = [];\n var columnKeys = Object.keys(value);\n var field;\n var label;\n var type;\n var result;\n data = data ? data : this.dataColl[0];\n for (var i = 0, len = columnKeys.length; i < len; i++) {\n var compField = col.field.split('.');\n if (data) {\n result = data[compField[compField.length - 1]][columnKeys[i]];\n }\n else {\n result = this.dataColl[0][col.field][columnKeys[i]];\n }\n var resData = data[col.field.split(this.separator)[col.field.split(this.separator).length - 1]];\n type = typeof result;\n field = col.field + this.separator + columnKeys[i];\n label = columnKeys[i];\n type = (type === 'object' && !isNaN(Date.parse(result))) ? 'date' : type;\n sampCol = { field: field, label: label, type: type };\n if (type !== 'object') {\n sampCol.operators = this.customOperators[type + 'Operator'];\n }\n col.columns.push(sampCol);\n if (type === 'object') {\n this.updateSubFields(result, sampCol, resData);\n }\n }\n };\n QueryBuilder.prototype.updateCustomOperator = function (column, from) {\n if (column.operators) {\n if (!this.isLocale && from === 'initial' && !isNullOrUndefined(this.isCustomOprCols)) {\n this.isCustomOprCols.push(column.field);\n }\n var _loop_1 = function (j) {\n var sqlIdx = Object.keys(column.operators[j]).indexOf('sqlOperator');\n if (sqlIdx > -1) {\n var operator_1 = column.operators[j];\n var operColl = Object.keys(operator_1);\n var values = operColl.map(function (key) { return operator_1[\"\" + key]; }).join(',').split(',');\n var valueIdx = operColl.indexOf('value');\n this_1.operators[values[valueIdx]] = values[sqlIdx];\n }\n };\n var this_1 = this;\n for (var j = 0; j < column.operators.length; j++) {\n _loop_1(j);\n }\n }\n };\n QueryBuilder.prototype.focusEventHandler = function (event) {\n this.target = event.target;\n };\n QueryBuilder.prototype.clickEventHandler = function (event) {\n var _this = this;\n var target = event.target;\n var args;\n this.isImportRules = false;\n var groupID;\n if (target.tagName === 'SPAN') {\n target = target.parentElement;\n }\n if (target.className.indexOf('e-collapse-rule') > -1) {\n var animation = new Animation({ duration: 1000, delay: 0 });\n if (this.element.querySelectorAll('.e-summary-content').length < 1) {\n this.renderSummary();\n }\n var summaryElem = document.getElementById(this.element.id + '_summary_content');\n var txtareaElem = summaryElem.querySelector('.e-summary-text');\n animation.animate('.e-query-builder', { name: 'SlideLeftIn' });\n var groupElem = this.element.querySelector('.e-group-container');\n groupElem.style.display = 'none';\n txtareaElem.textContent = this.getSqlFromRules(this.rule);\n summaryElem.style.display = 'block';\n txtareaElem.style.height = txtareaElem.scrollHeight + 'px';\n }\n if (target.tagName === 'BUTTON' && target.className.indexOf('e-qb-toggle') < 0) {\n var animation = new Animation({ duration: 1000, delay: 0 });\n switch (true) {\n case target.className.indexOf('e-removerule') > -1:\n this.actionButton = target;\n this.deleteRule(target);\n break;\n case target.className.indexOf('e-clone-rule-btn') > -1:\n this.actionButton = target;\n this.cloneRuleBtnClick = true;\n this.ruleClone(target);\n break;\n case target.className.indexOf('e-lock-rule-btn') > -1:\n this.actionButton = target;\n this.ruleLock(target);\n break;\n case target.className.indexOf('e-lock-grp-btn') > -1:\n this.actionButton = target;\n this.groupLock(target);\n break;\n case target.className.indexOf('e-clone-grp-btn') > -1:\n this.actionButton = target;\n this.cloneGrpBtnClick = true;\n this.groupClone(closest(target, '.e-group-container'));\n break;\n case target.className.indexOf('e-deletegroup') > -1:\n this.actionButton = target;\n this.deleteGroup(closest(target, '.e-group-container'));\n break;\n case target.className.indexOf('e-edit-rule') > -1:\n animation.animate('.e-query-builder', { name: 'SlideLeftIn' });\n document.getElementById(this.element.id + '_summary_content').style.display = 'none';\n if (this.element.querySelectorAll('.e-group-container').length < 1) {\n this.addGroupElement(false, this.element, this.rule.condition, false, this.rule.not);\n var mRules = extend({}, this.rule, {}, true);\n this.setGroupRules(mRules);\n this.renderSummaryCollapse();\n }\n else {\n var groupElem = this.element.querySelector('.e-group-container');\n if (groupElem.querySelectorAll('.e-collapse-rule').length < 1) {\n this.renderSummaryCollapse();\n }\n groupElem.style.display = 'block';\n }\n break;\n }\n }\n else if ((target.tagName === 'LABEL' && target.parentElement.className.indexOf('e-btn-group') > -1) ||\n target.className.indexOf('e-qb-toggle') > -1) {\n var element = closest(target, '.e-group-container');\n if (!this.headerTemplate) {\n var forIdValue = target.getAttribute('for');\n var targetValue = void 0;\n if (forIdValue) {\n targetValue = document.getElementById(forIdValue).getAttribute('value');\n }\n else if (this.enableSeparateConnector) {\n targetValue = target.textContent;\n }\n groupID = element.id.replace(this.element.id + '_', '');\n var group = this.getGroup(groupID);\n var ariaChecked = void 0;\n if (this.enableNotCondition) {\n if (target.className.indexOf('e-qb-toggle') > -1) {\n var toggleElem = element.getElementsByClassName('e-qb-toggle')[0];\n if (toggleElem.className.indexOf('e-active-toggle') > -1) {\n removeClass([toggleElem], 'e-active-toggle');\n ariaChecked = false;\n }\n else {\n addClass([toggleElem], 'e-active-toggle');\n ariaChecked = true;\n }\n targetValue = group.condition;\n }\n else {\n ariaChecked = group.not;\n }\n }\n args = { groupID: groupID, cancel: false, type: 'condition', value: targetValue.toLowerCase() };\n if (this.enableNotCondition) {\n args = { groupID: groupID, cancel: false, type: 'condition', value: targetValue.toLowerCase(),\n 'not': ariaChecked };\n }\n }\n if (!this.isImportRules) {\n this.trigger('beforeChange', args, function (observedChangeArgs) {\n _this.beforeSuccessCallBack(observedChangeArgs, target);\n });\n }\n else {\n this.beforeSuccessCallBack(args, target);\n }\n this.target = target;\n }\n };\n QueryBuilder.prototype.beforeSuccessCallBack = function (args, target) {\n if (args && !args.cancel) {\n var element = closest(target, '.e-group-container');\n var groupID = element.id.replace(this.element.id + '_', '');\n var beforeRules = this.getValidRules(this.rule);\n var rule = this.getParentGroup(element);\n if (this.enableSeparateConnector) {\n if (isNullOrUndefined(closest(target, '.e-rule-container')) &&\n element.classList.contains('e-group-container')) {\n element = target.parentElement.previousElementSibling !== null ?\n target.parentElement.previousElementSibling : element;\n }\n else {\n element = closest(target, '.e-rule-container');\n }\n var id = element.id.replace(this.element.id + '_', '');\n if (element.classList.contains('e-rule-container')) {\n rule = this.getRule(element);\n rule.condition = args.value;\n }\n else if (element.classList.contains('e-group-container')) {\n rule = this.getGroup(element);\n rule.condition = args.value;\n }\n if (this.enableNotCondition) {\n rule.not = args.not;\n }\n if (!this.isImportRules) {\n this.trigger('change', { groupID: groupID, ruleID: id, type: 'condition', value: rule.condition });\n }\n }\n else {\n rule.condition = args.value;\n if (this.enableNotCondition) {\n rule.not = args.not;\n }\n if (!this.isImportRules) {\n this.trigger('change', { groupID: groupID, type: 'condition', value: rule.condition });\n }\n }\n this.filterRules(beforeRules, this.getValidRules(this.rule), 'condition');\n if (this.enableSeparateConnector) {\n var andElem = target.parentElement.querySelector('.e-btngroup-and');\n var orElem = target.parentElement.querySelector('.e-btngroup-or');\n if (andElem && orElem) {\n if (args.value === 'and') {\n andElem.checked = true;\n orElem.checked = false;\n }\n else if (args.value === 'or') {\n orElem.checked = true;\n andElem.checked = false;\n }\n }\n }\n }\n };\n QueryBuilder.prototype.selectBtn = function (target, event) {\n if (event.name === 'beforeOpen') {\n if (this.showButtons.groupInsert || isNullOrUndefined(this.showButtons.groupInsert)) {\n if (this.element.querySelectorAll('.e-group-container').length >= this.maxGroupCount + 1) {\n addClass([event.element.querySelector('li span.e-addgroup').parentElement], 'e-button-hide');\n }\n else {\n removeClass([event.element.querySelector('li span.e-addgroup').parentElement], 'e-button-hide');\n }\n if (this.enableRtl) {\n addClass([event.element.querySelector('li').parentElement], 'e-rtl');\n }\n }\n else {\n addClass([event.element.querySelector('li span.e-addgroup').parentElement], 'e-button-hide');\n }\n }\n else if (event.element.children[0].className.indexOf('e-addrule') > -1) {\n this.addRuleElement(closest(target, '.e-group-container'), {});\n }\n else if (event.element.children[0].className.indexOf('e-addgroup') > -1) {\n this.addGroupElement(true, closest(target, '.e-group-container'), '', true);\n }\n };\n QueryBuilder.prototype.appendRuleElem = function (target, column, type, parentId, action, rule) {\n var ruleElem;\n var elem;\n var ruleListElem = target.querySelector('.e-rule-list');\n var args;\n if (type === 'change') {\n ruleElem = select('#' + parentId, target);\n }\n else {\n ruleElem = this.createElement('div', { attrs: { class: 'e-rule-container' } });\n ruleElem.setAttribute('id', target.id + '_rule' + this.ruleIdCounter);\n if (this.showButtons.cloneRule && this.cloneRuleBtnClick) {\n if (this.ruleIndex < 0) {\n ruleListElem.appendChild(ruleElem);\n }\n else {\n if (this.enableSeparateConnector) {\n var index = -1;\n var tempRuleIndex = this.ruleIndex + 1;\n for (var i = 0; i < tempRuleIndex; i++) {\n if (i === ruleListElem.children.length) {\n break;\n }\n if (ruleListElem.children[i].classList.contains('e-rule-container')) {\n tempRuleIndex++;\n index++;\n }\n }\n ruleListElem.insertBefore(ruleElem, ruleListElem.children[this.ruleIndex + index + 1]); // added clone rule to next position\n }\n else {\n ruleListElem.insertBefore(ruleElem, ruleListElem.children[this.ruleIndex + 1]); // added clone rule to next position\n }\n }\n this.cloneRuleBtnClick = false;\n }\n else {\n ruleListElem.appendChild(ruleElem);\n }\n this.ruleIdCounter++;\n }\n if (column && column.ruleTemplate && rule) {\n args = { requestType: 'template-initialize', ruleID: ruleElem.id, action: action, fields: this.fields, rule: rule };\n this.trigger('actionBegin', args);\n this.ruleTemplateFn = this.templateParser(column.ruleTemplate);\n var templateID = this.element.id + column.field;\n var template = void 0;\n args.fields = this.fields;\n args.columns = this.columns;\n if (rule.field === '') {\n rule.field = column.field;\n }\n args.operators = this.getOperators(rule.field);\n args.operatorFields = { text: 'key', value: 'value' };\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.isReact) {\n template = this.ruleTemplateFn(args, this, ruleElem.id, templateID)[0];\n elem = template;\n elem.className += ' e-rule-field';\n ruleElem.appendChild(elem);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n }\n else if (this.isAngular) {\n var templateColl = this.ruleTemplateFn(args, this, ruleElem.id, templateID);\n template = (templateColl[0].nodeType === 3) ? templateColl[1] : templateColl[0];\n elem = template;\n elem.className += ' e-rule-field';\n ruleElem.appendChild(elem);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n }\n else if (this.isVue3) {\n template = this.ruleTemplateFn(args, this, 'Template', templateID);\n elem = template;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n append(elem, ruleElem);\n if (ruleElem.children.length) {\n ruleElem.children[ruleElem.children.length - 1].className += ' e-rule-field';\n }\n }\n else {\n template = this.ruleTemplateFn(args, this, 'Template', templateID)[0];\n elem = template;\n elem.className += ' e-rule-field';\n ruleElem.appendChild(elem);\n }\n }\n else {\n elem = this.ruleElem.querySelector('.e-rule-field').cloneNode(true);\n ruleElem.appendChild(elem);\n }\n if (this.showButtons.lockGroup) {\n removeClass(ruleElem.querySelectorAll('.e-lock-grp-btn'), 'e-button-hide');\n }\n if (this.showButtons.lockRule) {\n removeClass(ruleElem.querySelectorAll('.e-lock-rule-btn'), 'e-button-hide');\n }\n if (this.showButtons.cloneGroup) {\n removeClass(ruleElem.querySelectorAll('.e-clone-grp-btn'), 'e-button-hide');\n }\n if (this.showButtons.cloneRule) {\n removeClass(ruleElem.querySelectorAll('.e-clone-rule-btn'), 'e-button-hide');\n }\n if (this.showButtons.ruleDelete) {\n removeClass(ruleElem.querySelectorAll('.e-lock-grp-btn'), 'e-button-hide');\n }\n if (this.allowDragAndDrop) {\n removeClass(ruleElem.querySelectorAll('.e-drag-qb-rule'), 'e-hidden');\n }\n if (column && column.ruleTemplate && rule) {\n this.renderReactTemplates();\n }\n return ruleElem;\n };\n QueryBuilder.prototype.addRuleElement = function (target, rule, column, action, parentId, isRuleTemplate) {\n var _this = this;\n if (!target) {\n return;\n }\n var args = { groupID: target.id.replace(this.element.id + '_', ''), cancel: false, type: 'insertRule' };\n if (!this.isImportRules && !this.isInitialLoad && !this.prvtEvtTgrDaD) {\n this.trigger('beforeChange', args, function (observedChangeArgs) {\n _this.addRuleSuccessCallBack(observedChangeArgs, target, rule, column, action, parentId, isRuleTemplate);\n });\n }\n else {\n this.isInitialLoad = false;\n this.addRuleSuccessCallBack(args, target, rule, column, action, parentId, isRuleTemplate);\n }\n };\n QueryBuilder.prototype.addRuleSuccessCallBack = function (args, trgt, rule, col, act, pId, isRlTmp) {\n var height = (this.element.className.indexOf('e-device') > -1) ? '250px' : '200px';\n var ruleID;\n var column = (rule && rule.field) ? this.getColumn(rule.field) : col ? col : this.columns[0];\n var operators;\n var dropDownList;\n var ruleElem;\n var newRule = { 'label': '', 'field': '', 'type': '', 'operator': '' };\n if (!args.cancel) {\n if (column && column.ruleTemplate && rule.field) {\n this.selectedColumn = column;\n operators = this.selectedColumn.operators;\n newRule = { 'label': column.label, 'field': column.field, 'type': column.type, 'operator': operators[0].value };\n var passedRule = Object.keys(rule).length ? rule : newRule;\n ruleElem = this.appendRuleElem(trgt, column, act, pId, 'field', passedRule);\n var args_1 = { requestType: 'template-create', action: 'insert-rule', ruleID: ruleElem.id,\n fields: this.fields, rule: passedRule };\n this.trigger('actionBegin', args_1);\n }\n else {\n ruleElem = this.appendRuleElem(trgt, column, act, pId, 'field');\n ruleElem.querySelector('.e-filter-input').setAttribute('id', ruleElem.id + '_filterkey');\n var element = ruleElem.querySelector('.e-rule-delete');\n if (this.element.className.indexOf('e-device') > -1 || this.displayMode === 'Vertical') {\n element.textContent = this.l10n.getConstant('Remove');\n addClass([element], 'e-flat');\n addClass([element], 'e-primary');\n }\n else {\n addClass([element], 'e-round');\n addClass([element], 'e-icon-btn');\n element.setAttribute('title', this.l10n.getConstant('DeleteRule'));\n var spanElement = this.createElement('span', { attrs: { class: 'e-btn-icon e-icons e-delete-icon' } });\n ruleElem.querySelector('.e-rule-delete').appendChild(spanElement);\n }\n if (!this.showButtons.ruleDelete) {\n element.classList.add('e-button-hide');\n }\n }\n if (this.displayMode === 'Vertical' || this.element.className.indexOf('e-device') > -1) {\n ruleElem.className = 'e-rule-container e-vertical-mode';\n }\n else {\n ruleElem.className = 'e-rule-container e-horizontal-mode';\n }\n var previousRuleElem = ruleElem.previousElementSibling;\n if (this.enableSeparateConnector) {\n var prevRule = void 0;\n var ruleContainer = void 0;\n if (previousRuleElem && previousRuleElem.classList.contains('e-group-container')) {\n ruleContainer = previousRuleElem.querySelectorAll('.e-rule-container');\n previousRuleElem = ruleContainer[ruleContainer.length - 1];\n }\n if (previousRuleElem && previousRuleElem.classList.contains('e-rule-container')) {\n prevRule = this.getRule(previousRuleElem);\n }\n if (this.headerTemplate && previousRuleElem && prevRule) {\n this.headerTemplateFn(previousRuleElem, false, prevRule.condition, prevRule, previousRuleElem.id);\n }\n else if (isNullOrUndefined(previousRuleElem) && ruleElem.id !== this.element.id + '_group0_rule0') {\n var group = ruleElem.closest('.e-group-container');\n if (group && group.previousElementSibling) {\n var prevElem = group.previousElementSibling;\n var prevRuleContainer = prevElem.querySelectorAll('.e-rule-container');\n if (prevElem.classList.contains('e-group-container')) {\n prevElem = prevRuleContainer[prevRuleContainer.length - 1];\n }\n if (prevElem.classList.contains('e-rule-container')) {\n var prevRule_1 = this.getRule(prevElem);\n this.headerTemplateFn(prevElem, false, prevRule_1.condition, prevRule_1, prevElem.id, true);\n }\n }\n else {\n this.headerTemplateFn(ruleElem, false, rule.condition, rule, ruleElem.id, true);\n }\n }\n }\n else {\n if (previousRuleElem && previousRuleElem.className.indexOf('e-rule-container') > -1) {\n if (ruleElem.className.indexOf('e-joined-rule') < 0) {\n ruleElem.className += ' e-joined-rule';\n }\n if (previousRuleElem.className.indexOf('e-prev-joined-rule') < 0) {\n previousRuleElem.className += ' e-prev-joined-rule';\n }\n }\n }\n if (previousRuleElem && previousRuleElem.className.indexOf('e-group-container') > -1 &&\n ruleElem.className.indexOf('e-separate-rule') < 0) {\n ruleElem.className += ' e-separate-rule';\n }\n if (!this.isImportRules) {\n this.updateAddedRule(trgt, rule, newRule, isRlTmp, pId, this.enableSeparateConnector ? true : null);\n }\n if (!column || (column && !column.ruleTemplate) || !rule.field) {\n if (this.fieldMode === 'Default') {\n var ddlField = void 0;\n var ddlValue = void 0;\n if (this.separator && rule.field) {\n ddlValue = this.GetRootColumnName(rule.field);\n }\n else if (this.autoSelectField) {\n ddlValue = this.GetRootColumnName(rule.field);\n }\n else {\n ddlValue = this.isImportRules ? this.GetRootColumnName(rule.field) : rule.field;\n }\n ddlField = {\n dataSource: this.columns,\n fields: this.fields, placeholder: this.l10n.getConstant('SelectField'),\n popupHeight: ((this.columns.length > 5) ? height : 'auto'), close: this.fieldClose.bind(this, ruleElem.id + '_filterkey'),\n change: this.changeField.bind(this), value: rule ? ddlValue : null, open: this.popupOpen.bind(this, true), cssClass: 'qb-dropdownlist'\n };\n if (this.fieldModel) {\n ddlField = __assign({}, ddlField, this.fieldModel);\n }\n dropDownList = new DropDownList(ddlField);\n dropDownList.appendTo('#' + ruleElem.id + '_filterkey');\n var ddlVal = void 0;\n if (this.separator && rule.field) {\n ddlVal = this.GetRootColumnName(rule.field);\n }\n else {\n ddlVal = this.isImportRules ? this.GetRootColumnName(rule.field) :\n dropDownList.value;\n }\n this.selectedColumn = dropDownList.getDataByValue(ddlVal);\n if (Object.keys(rule).length) {\n this.changeRule(rule, {\n element: dropDownList.element, itemData: this.selectedColumn\n });\n }\n }\n else {\n var ddlField = void 0;\n var ddlValue = this.isImportRules ? rule.field : rule.field;\n this.dummyDropdownTreeDs = extend([], this.columns, [], true);\n this.updateDropdowntreeDS(this.dummyDropdownTreeDs);\n ddlField = {\n fields: { dataSource: this.dummyDropdownTreeDs,\n value: 'field', text: 'label', child: 'columns', expanded: 'expanded', selectable: 'selectable' },\n placeholder: this.l10n.getConstant('SelectField'), showClearButton: false,\n popupHeight: ((this.columns.length > 5) ? height : 'auto'), changeOnBlur: false,\n change: this.changeField.bind(this), value: !isNullOrUndefined(ddlValue) ? [ddlValue] : null,\n open: this.popupOpen.bind(this, false), treeSettings: { expandOn: 'Click' },\n cssClass: 'e-qb-ddt', filtering: this.dropdownTreeFiltering.bind(this), close: this.dropdownTreeClose.bind(this)\n };\n if (this.fieldModel) {\n ddlField = __assign({}, ddlField, this.fieldModel);\n }\n var dropdowntree = new DropDownTree(ddlField);\n dropdowntree.appendTo('#' + ruleElem.id + '_filterkey');\n if (!isNullOrUndefined(dropdowntree.value)) {\n var value = this.getLabelFromColumn(dropdowntree.value[0]);\n dropdowntree.element.value = value;\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var ddlVal = !isNullOrUndefined(rule.field) ?\n this.GetRootColumnName(rule.field) : dropdowntree.value;\n this.selectedColumn = this.getColumn(ddlVal);\n if (Object.keys(rule).length) {\n this.changeRule(rule, {\n element: dropdowntree.element, itemData: this.selectedColumn\n });\n }\n }\n }\n ruleID = ruleElem.id.replace(this.element.id + '_', '');\n if (rule && rule.isLocked) {\n var lockRuleTarget = ruleElem.querySelector('.e-lock-rule-btn');\n this.ruleLock(lockRuleTarget);\n }\n if (!this.isImportRules && !this.prvtEvtTgrDaD) {\n this.trigger('change', { groupID: trgt.id.replace(this.element.id + '_', ''), ruleID: ruleID, type: 'insertRule' });\n }\n }\n if (this.enableSeparateConnector && isNullOrUndefined(rule.condition) && ruleID) {\n rule = this.getRule(ruleID);\n }\n if (this.enableSeparateConnector) {\n var prevElem = ruleElem.previousElementSibling;\n var ruleContainer = void 0;\n while (prevElem && !prevElem.classList.contains('e-rule-container')) {\n if (prevElem.classList.contains('e-group-container')) {\n ruleContainer = prevElem.querySelectorAll('.e-rule-container');\n prevElem = ruleContainer[ruleContainer.length - 1];\n break;\n }\n prevElem = prevElem.previousElementSibling;\n }\n if (this.headerTemplate && prevElem) {\n var prevRule = this.getRule(prevElem);\n var args_2 = { requestType: 'rule-template-create', ruleID: prevElem.id, condition: prevRule.condition,\n notCondition: this.enableNotCondition ? true : undefined };\n this.trigger('actionBegin', args_2);\n }\n else if (isNullOrUndefined(prevElem) && ruleElem.id !== this.element.id + '_group0_rule0') {\n var group = ruleElem.closest('.e-group-container');\n if (group && group.previousElementSibling && group.previousElementSibling.previousElementSibling) {\n var prevElem_1 = group.previousElementSibling.previousElementSibling;\n if (prevElem_1.classList.contains('e-group-container')) {\n var ruleContainer_1 = prevElem_1.querySelectorAll('.e-rule-container');\n prevElem_1 = ruleContainer_1[ruleContainer_1.length - 1];\n }\n if (prevElem_1.classList.contains('e-rule-container')) {\n var prevRule = this.getRule(prevElem_1);\n var args_3 = { requestType: 'rule-template-create', ruleID: prevElem_1.id,\n condition: prevRule.condition, notCondition: this.enableNotCondition ? true : undefined };\n this.trigger('actionBegin', args_3);\n }\n }\n }\n this.setMultiConnector(ruleElem);\n }\n };\n QueryBuilder.prototype.dropdownTreeFiltering = function (args) {\n var _this = this;\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var proxy = this;\n var ruleElemID = '';\n var srcElement = args.event.srcElement;\n var isClearIcon = srcElement.classList.contains('e-clear-icon');\n var inputElem = isClearIcon ? srcElement.parentElement.querySelector('.e-textbox') : srcElement;\n ruleElemID = inputElem.id.split('_filterkey')[0];\n var ruleElem = document.getElementById(ruleElemID);\n this.ddTree = getComponent(ruleElem.querySelector('input.e-dropdowntree'), 'dropdowntree');\n var hierarchicalData = extend([], this.columns, [], true);\n // Cancel the default filtering.\n args.cancel = true;\n if (args.text === '') {\n this.changeDataSource(hierarchicalData);\n }\n else {\n var matchedDataSource = hierarchicalData\n .map(function (data) { return _this.nestedChildFilter(args.text, data); })\n .filter(function (filteredChild) { return filteredChild !== null; });\n this.changeDataSource(matchedDataSource);\n setTimeout(function () {\n if (!isNullOrUndefined(proxy.ddTree)) {\n proxy.ddTree.treeObj.expandAll();\n }\n }, 100);\n }\n };\n QueryBuilder.prototype.changeDataSource = function (data) {\n this.ddTree.treeObj.fields = {\n dataSource: data,\n value: 'field',\n text: 'label',\n child: 'columns',\n expanded: 'expanded'\n };\n this.ddTree.treeObj.refresh();\n };\n QueryBuilder.prototype.nestedChildFilter = function (value, node) {\n var _this = this;\n var children = node[this.ddTree.fields.child];\n if (!children) {\n return this.isMatchedNode(value, node) ? node : null;\n }\n var matchedChildren = children\n .map(function (child) { return _this.nestedChildFilter(value, child); })\n .filter(function (filteredChild) { return filteredChild !== null; });\n if (matchedChildren.length) {\n node[this.ddTree.fields.child] = matchedChildren;\n return node;\n }\n else {\n node[this.ddTree.fields.child] = children;\n return this.isMatchedNode(value, node) ? node : null;\n }\n };\n QueryBuilder.prototype.isMatchedNode = function (value, node) {\n var checkValue = node[this.ddTree.fields.text].toLowerCase();\n value = value ? value.toLowerCase() : '';\n return checkValue.indexOf(value) !== -1;\n };\n QueryBuilder.prototype.dropdownTreeClose = function () {\n if (this.ddTree) {\n this.changeDataSource(this.columns);\n }\n this.ddTree = null;\n };\n QueryBuilder.prototype.updateDropdowntreeDS = function (columns) {\n for (var i = 0; i < columns.length; i++) {\n if (columns[parseInt(i.toString(), 10)].type === 'object') {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.isAngular && columns[parseInt(i.toString(), 10)].template) {\n delete columns[parseInt(i.toString(), 10)].template;\n }\n columns[parseInt(i.toString(), 10)].selectable = false;\n this.updateDropdowntreeDS(columns[parseInt(i.toString(), 10)].columns);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n }\n else if (this.isAngular && columns[parseInt(i.toString(), 10)].template) {\n delete columns[parseInt(i.toString(), 10)].template;\n }\n }\n };\n QueryBuilder.prototype.updateAddedRule = function (target, rule, newRule, isRuleTemplate, pId, isNewRuleAdded) {\n var ruleElem;\n var index = 0;\n var groupElem;\n var rules;\n if (isRuleTemplate) {\n ruleElem = select('#' + pId, target);\n groupElem = closest(target, '.e-group-container');\n rules = this.getParentGroup(groupElem);\n while (ruleElem && ruleElem.previousElementSibling !== null) {\n ruleElem = ruleElem.previousElementSibling;\n var enableSeparateCondition = this.enableSeparateConnector && ((!this.headerTemplate && !ruleElem.classList.contains('e-btn-group')) ||\n (this.headerTemplate && (ruleElem.classList.contains('e-rule-container') ||\n ruleElem.classList.contains('e-group-container'))));\n if (!this.enableSeparateConnector || enableSeparateCondition) {\n index++;\n }\n }\n rules.rules[index] = rule;\n }\n else {\n groupElem = closest(target, '.e-group-container');\n rules = this.getParentGroup(groupElem);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var custom = rule.custom;\n if (Object.keys(rule).length) {\n if (this.ruleIndex < 0) {\n rules.rules.push({\n 'field': rule.field, 'type': rule.type, 'label': rule.label, 'operator': rule.operator, value: rule.value\n });\n if (custom) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n rules.rules[rules.rules.length - 1].custom = custom;\n }\n if (this.enableSeparateConnector) {\n rules.rules[rules.rules.length - 1].condition = rule.condition ? rule.condition : newRule.condition;\n }\n }\n else {\n rules.rules.splice(this.ruleIndex + 1, 0, {\n 'field': rule.field, 'type': rule.type, 'label': rule.label, 'operator': rule.operator, value: rule.value\n });\n if (custom) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n rules.rules[this.ruleIndex + 1].custom = custom;\n }\n if (this.enableSeparateConnector) {\n rules.rules[this.ruleIndex + 1].condition = rule.condition ? rule.condition : newRule.condition;\n }\n }\n }\n else {\n if (custom) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n newRule.custom = custom;\n }\n if (this.autoSelectField) {\n rule.field = newRule.field = this.rule.rules[0].field;\n }\n rules.rules.push(newRule);\n }\n }\n this.disableRuleCondition(target, rules, isNewRuleAdded);\n };\n QueryBuilder.prototype.changeRuleTemplate = function (column, element) {\n var operVal = this.selectedColumn.operators;\n if (column.ruleTemplate) {\n return;\n }\n else {\n var parentGroup = closest(element, '.e-group-container');\n var parentId = closest(element, '.e-rule-container').id;\n if (this.previousColumn && this.previousColumn.ruleTemplate) {\n detach(element.closest('[id=\"' + parentId + '\"]').querySelector('.e-rule-field'));\n this.clearQBTemplate([parentId]);\n }\n if (column) {\n var rule = { field: column.field, label: column.label, operator: operVal[0].value, value: '' };\n this.addRuleElement(parentGroup, rule, column, 'change', parentId, true);\n }\n }\n };\n QueryBuilder.prototype.renderToolTip = function (element) {\n var tooltip = new Tooltip({ content: this.l10n.getConstant('ValidationMessage'), isSticky: true,\n position: 'BottomCenter', cssClass: 'e-querybuilder-error', afterClose: function () {\n tooltip.destroy();\n }, beforeOpen: function (args) {\n var tooltipCloseElement = args.element.querySelector('.e-tooltip-close');\n if (tooltipCloseElement) {\n tooltipCloseElement.style.display = 'none';\n }\n } });\n tooltip.appendTo(element);\n tooltip.open(element);\n };\n /**\n * Validate the conditions and it display errors for invalid fields.\n *\n * @returns {boolean} - Validation\n */\n QueryBuilder.prototype.validateFields = function () {\n var isValid = true;\n var dropDownTreeObj;\n if (this.allowValidation) {\n var excludeOprs = ['isnull', 'isnotnull', 'isempty', 'isnotempty'];\n var i = void 0;\n var len = void 0;\n var fieldElem = void 0;\n var indexElem = void 0;\n var valArray = [];\n var groupElem = void 0;\n var index = void 0;\n var dropDownObj = void 0;\n var tempElem = void 0;\n var rule = void 0;\n var ruleElemCln = this.element.querySelectorAll('.e-rule-container');\n for (i = 0, len = ruleElemCln.length; i < len; i++) {\n var validateRule = void 0;\n groupElem = closest(ruleElemCln[i], '.e-group-container');\n rule = this.getParentGroup(groupElem);\n index = 0;\n indexElem = tempElem = ruleElemCln[i];\n if (this.fieldMode === 'DropdownTree') {\n dropDownTreeObj = getComponent(ruleElemCln[i].querySelector('.e-rule-filter input.e-dropdowntree'), 'dropdowntree');\n if (dropDownTreeObj && dropDownTreeObj.value && dropDownTreeObj.value.length) {\n this.selectedColumn = this.getColumn(dropDownTreeObj.value[0]);\n validateRule = this.selectedColumn.validation;\n }\n }\n else {\n dropDownObj = getComponent(ruleElemCln[i].querySelector('.e-rule-filter input.e-dropdownlist'), 'dropdownlist');\n if (dropDownObj && dropDownObj.value) {\n this.selectedColumn = dropDownObj.getDataByValue(dropDownObj.value);\n validateRule = !isNullOrUndefined(dropDownObj.index) && this.selectedColumn.validation;\n }\n }\n fieldElem = tempElem.querySelector('.e-rule-field input.e-control');\n if (validateRule && validateRule.isRequired) {\n while (indexElem && indexElem.previousElementSibling !== null) {\n indexElem = indexElem.previousElementSibling;\n var separateCondition = this.enableSeparateConnector && ((!this.headerTemplate && !indexElem.classList.contains('e-btn-group')) ||\n (this.headerTemplate && (indexElem.classList.contains('e-rule-container') || indexElem.classList.contains('e-group-container'))));\n if (!this.enableSeparateConnector || separateCondition) {\n index++;\n }\n }\n fieldElem = tempElem.querySelector('.e-rule-operator .e-control');\n if (!rule.rules[index].operator) {\n if (fieldElem.parentElement.className.indexOf('e-tooltip') < 0 && fieldElem.className.indexOf('e-tooltip') < 0) {\n this.renderToolTip(fieldElem.parentElement);\n }\n isValid = false;\n }\n if (rule.rules[index].value instanceof Array) {\n valArray = rule.rules[index].value;\n }\n if (excludeOprs.indexOf(rule.rules[index].operator) < -1 &&\n (isNullOrUndefined(rule.rules[index].value) &&\n rule.rules[index].type !== 'date') || rule.rules[index].value === '' || rule.rules[index].value === null ||\n (rule.rules[index].value instanceof Array && valArray.length < 1)) {\n var valElem = tempElem.querySelectorAll('.e-rule-value .e-control');\n if (excludeOprs.indexOf(rule.rules[index].operator) < 0) {\n isValid = false;\n }\n for (var j = 0, jLen = valElem.length; j < jLen; j++) {\n var element = valElem[j];\n var elem = void 0;\n if (element.parentElement.className.indexOf('e-searcher') > -1) {\n elem = closest(element, '.e-multi-select-wrapper');\n if (elem.className.indexOf('e-tooltip') < 0) {\n this.renderToolTip(elem);\n }\n }\n else if (valElem[j].parentElement.className.indexOf('e-tooltip') < 0 && valElem[j].className.indexOf('e-tooltip') < 0) {\n this.renderToolTip(valElem[j].parentElement);\n }\n j++;\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n }\n else if (rule.rules[index].type === 'date' && (rule.rules[index].value === null || rule.rules[index].value.indexOf(null) > -1)) {\n var valElem = tempElem.querySelectorAll('.e-rule-value .e-control');\n if (excludeOprs.indexOf(rule.rules[index].operator) < 0) {\n isValid = false;\n }\n for (var j = 0, jLen = valElem.length; j < jLen; j++) {\n if (valElem[j].parentElement.className.indexOf('e-tooltip') < 0 && valElem[j].className.indexOf('e-tooltip') < 0 && (isNullOrUndefined(rule.rules[index].value) || rule.rules[index].value[j] == null)) {\n this.renderToolTip(valElem[j].parentElement);\n }\n }\n }\n }\n else if ((dropDownObj && dropDownObj.element && isNullOrUndefined(dropDownObj.index)) ||\n (dropDownTreeObj && dropDownTreeObj.element && (isNullOrUndefined(dropDownTreeObj.value) ||\n dropDownTreeObj.value.length < 1))) {\n if (fieldElem.parentElement.className.indexOf('e-tooltip') < 0) {\n this.renderToolTip(fieldElem.parentElement);\n }\n isValid = false;\n }\n }\n }\n return isValid;\n };\n QueryBuilder.prototype.refreshLevelColl = function () {\n this.levelColl = {};\n var groupElem = this.element.querySelector('.e-group-container');\n if (groupElem) {\n this.levelColl[groupElem.id] = [0];\n var obj = { groupElement: groupElem, level: [0] };\n this.refreshLevel(obj);\n }\n };\n QueryBuilder.prototype.refreshLevel = function (obj) {\n var ruleList = obj.groupElement.querySelector('.e-rule-list').children;\n var childElem;\n var groupElem = obj.groupElement;\n var i;\n var iLen = ruleList.length;\n var groupCount = 0;\n for (i = 0; i < iLen; i++) {\n childElem = ruleList[i];\n if (childElem.className.indexOf('e-group-container') > -1) {\n obj.level.push(groupCount);\n this.levelColl[childElem.id] = obj.level.slice();\n groupCount++;\n obj.groupElement = childElem;\n obj = this.refreshLevel(obj);\n }\n }\n var ruleListElem = closest(groupElem, '.e-rule-list');\n obj.groupElement = ruleListElem ? closest(ruleListElem, '.e-group-container') : groupElem;\n obj.level = this.levelColl[obj.groupElement.id].slice();\n return obj;\n };\n QueryBuilder.prototype.groupTemplate = function (isConnector) {\n var glueElem;\n var inputElem;\n var dragClsName;\n var labelElem;\n var grpActElem;\n var groupBtn;\n var groupElem = this.createElement('div', { attrs: { class: 'e-group-container' } });\n var groupHdrElem = this.createElement('div', { attrs: { class: 'e-group-header' } });\n var grpBodyElem = this.createElement('div', { attrs: { class: 'e-group-body' } });\n var rulesElem = this.createElement('div', { attrs: { class: 'e-rule-list' } });\n groupElem.appendChild(groupHdrElem);\n grpBodyElem.appendChild(rulesElem);\n groupElem.appendChild(grpBodyElem);\n // create button group in OR and AND process\n if (!this.headerTemplate) {\n if (this.allowDragAndDrop) {\n dragClsName = 'e-icons e-drag-qb-rule';\n }\n else {\n dragClsName = 'e-icons e-drag-qb-rule e-hidden';\n }\n var spanDragElement = this.createElement('span', { attrs: { class: dragClsName, 'aria-lable': 'drag handle',\n title: 'drag handle' } });\n groupHdrElem.appendChild(spanDragElement);\n var className = this.enableSeparateConnector && !isConnector ? 'e-lib e-btn-group e-qb-toggle-btn' : 'e-lib e-btn-group';\n glueElem = this.createElement('div', { attrs: { class: className, role: 'group' } });\n if (this.enableSeparateConnector) {\n glueElem.classList.add('e-multi-connector');\n }\n if (this.enableNotCondition) {\n if (this.enableSeparateConnector) {\n inputElem = this.createElement('input', { attrs: { type: 'checkbox', class: 'e-qb-toggle' } });\n }\n else {\n inputElem = this.createElement('button', { attrs: { type: 'button', class: 'e-qb-toggle' } });\n }\n glueElem.appendChild(inputElem);\n }\n inputElem = this.createElement('input', { attrs: { type: 'radio', class: 'e-btngroup-and', value: 'AND' } });\n glueElem.appendChild(inputElem);\n labelElem = this.createElement('label', { attrs: { class: 'e-lib e-btn e-btngroup-and-lbl e-small' },\n innerHTML: this.l10n.getConstant('AND') });\n glueElem.appendChild(labelElem);\n inputElem = this.createElement('input', { attrs: { type: 'radio', class: 'e-btngroup-or', value: 'OR' } });\n glueElem.appendChild(inputElem);\n labelElem = this.createElement('label', { attrs: { class: 'e-lib e-btn e-btngroup-or-lbl e-small' },\n innerHTML: this.l10n.getConstant('OR') });\n glueElem.appendChild(labelElem);\n groupHdrElem.appendChild(glueElem);\n grpActElem = this.createElement('div', { attrs: { class: 'e-group-action' } });\n if (this.enableSeparateConnector) {\n groupBtn = this.createElement('button', { attrs: { type: 'button', class: 'e-add-condition-btn' } });\n grpActElem.appendChild(groupBtn);\n groupBtn = this.createElement('button', { attrs: { type: 'button', class: 'e-add-group-btn' } });\n grpActElem.appendChild(groupBtn);\n }\n else {\n groupBtn = this.createElement('button', { attrs: { type: 'button', class: 'e-add-btn' } });\n grpActElem.appendChild(groupBtn);\n }\n groupHdrElem.appendChild(grpActElem);\n }\n return groupElem;\n };\n QueryBuilder.prototype.ruleTemplate = function () {\n var tempElem;\n var clsName;\n var cloneClsName;\n var lockClsName;\n var dragClsName;\n var ruleElem = this.createElement('div');\n var fieldElem = this.createElement('div', { attrs: { class: 'e-rule-field' } });\n tempElem = this.createElement('div', { attrs: { class: 'e-rule-filter' } });\n if (this.allowDragAndDrop) {\n dragClsName = 'e-icons e-drag-qb-rule';\n }\n else {\n dragClsName = 'e-icons e-drag-qb-rule e-hidden';\n }\n var spanDragElement = this.createElement('span', { attrs: { class: dragClsName, 'aria-lable': 'drag handle',\n title: 'drag handle' } });\n fieldElem.appendChild(spanDragElement);\n var filterElem = this.createElement('input', { attrs: { type: 'text', class: 'e-filter-input' } });\n tempElem.appendChild(filterElem);\n fieldElem.appendChild(tempElem);\n tempElem = this.createElement('div', { attrs: { class: 'e-rule-operator' } });\n fieldElem.appendChild(tempElem);\n tempElem = this.createElement('div', { attrs: { class: 'e-rule-value' } });\n fieldElem.appendChild(tempElem);\n tempElem = this.createElement('div', { attrs: { class: 'e-rule-value-delete' } });\n if (this.showButtons.cloneRule) {\n cloneClsName = 'e-clone-rule-btn e-clone-rule e-css e-btn e-small e-round e-icon-btn';\n }\n else {\n cloneClsName = 'e-clone-rule-btn e-clone-rule e-css e-btn e-small e-round e-icon-btn e-button-hide';\n }\n if (this.showButtons.lockRule) {\n lockClsName = 'e-lock-rule-btn e-lock-rule e-css e-btn e-small e-round e-icons e-icon-btn';\n }\n else {\n lockClsName = 'e-lock-rule-btn e-lock-rule e-css e-btn e-small e-round e-icons e-icon-btn e-button-hide';\n }\n var cloneRuleBtnElem = this.createElement('button', { attrs: { title: this.l10n.getConstant('CloneRule'), type: 'button', class: cloneClsName } });\n var spanElement = this.createElement('span', { attrs: { class: 'e-btn-icon e-icons e-copy' } });\n cloneRuleBtnElem.appendChild(spanElement);\n var cloneLockBtnElem = this.createElement('button', { attrs: { title: this.l10n.getConstant('LockRule'), type: 'button', class: lockClsName } });\n spanElement = this.createElement('span', { attrs: { class: 'e-btn-icon e-icons e-unlock' } });\n cloneLockBtnElem.appendChild(spanElement);\n if (this.showButtons.ruleDelete || isNullOrUndefined(this.showButtons.ruleDelete)) {\n clsName = 'e-removerule e-rule-delete e-css e-btn e-small';\n }\n else {\n clsName = 'e-removerule e-rule-delete e-css e-btn e-small e-button-hide';\n }\n var delBtnElem = this.createElement('button', { attrs: { type: 'button', class: clsName } });\n tempElem.appendChild(cloneRuleBtnElem);\n tempElem.appendChild(cloneLockBtnElem);\n tempElem.appendChild(delBtnElem);\n fieldElem.appendChild(tempElem);\n ruleElem.appendChild(fieldElem);\n return ruleElem;\n };\n QueryBuilder.prototype.addGroupElement = function (isGroup, target, condition, isBtnClick, not, isRoot, rule) {\n var _this = this;\n var args = { groupID: target.id.replace(this.element.id + '_', ''), cancel: false, type: 'insertGroup' };\n if (!this.isImportRules && !this.isInitialLoad && !this.prvtEvtTgrDaD) {\n this.trigger('beforeChange', args, function (observedChangeArgs) {\n _this.addGroupSuccess(observedChangeArgs, isGroup, target, condition, isBtnClick, not, isRoot, rule);\n });\n }\n else {\n this.isInitialLoad = false;\n this.addGroupSuccess(args, isGroup, target, condition, isBtnClick, not, isRoot, rule);\n }\n };\n QueryBuilder.prototype.addGroupSuccess = function (args, isGroup, eventTarget, condition, isBtnClick, not, isRoot, rule) {\n var _this = this;\n if (!args.cancel && (this.element.querySelectorAll('.e-group-container').length <= this.maxGroupCount)) {\n var target = eventTarget;\n var dltGroupBtn = void 0;\n var groupID = '';\n if (target.className.indexOf('e-group-container') < 0) {\n groupID = target.querySelector('.e-group-container') && target.querySelector('.e-group-container').id;\n }\n else {\n groupID = target.id;\n }\n if (this.enableSeparateConnector) {\n this.groupElem = this.groupTemplate();\n }\n var groupElem = this.groupElem.cloneNode(true);\n groupElem.setAttribute('id', this.element.id + '_group' + this.groupIdCounter);\n if (this.groupIdCounter === 0 && this.allowDragAndDrop && groupElem.querySelector('.e-drag-qb-rule')) {\n if (groupElem && groupElem.children[0]) {\n groupElem.children[0].classList.add('e-parent-header');\n }\n addClass([groupElem.querySelector('.e-drag-qb-rule')], 'e-hidden');\n }\n if (this.headerTemplate) {\n if (isRoot) {\n isGroup = false;\n groupElem.setAttribute('id', this.element.id + '_group0');\n this.headerTemplateFn(groupElem, not, condition, rule, groupID);\n this.groupIdCounter = 0;\n }\n else {\n this.headerTemplateFn(groupElem, not, condition, rule, groupID);\n }\n }\n this.groupIdCounter++;\n if (!this.headerTemplate) {\n var andInpElem = groupElem.querySelector('.e-btngroup-and');\n var orInpElem = groupElem.querySelector('.e-btngroup-or');\n var andLblElem = groupElem.querySelector('.e-btngroup-and-lbl');\n var orLblElem = groupElem.querySelector('.e-btngroup-or-lbl');\n andInpElem.setAttribute('id', this.element.id + '_and' + this.btnGroupId);\n orInpElem.setAttribute('id', this.element.id + '_or' + this.btnGroupId);\n andInpElem.setAttribute('name', this.element.id + '_and' + this.btnGroupId);\n orInpElem.setAttribute('name', this.element.id + '_and' + this.btnGroupId);\n andLblElem.setAttribute('for', this.element.id + '_and' + this.btnGroupId);\n orLblElem.setAttribute('for', this.element.id + '_or' + this.btnGroupId);\n this.btnGroupId++;\n }\n if (isGroup) {\n var clsName = void 0;\n if (this.showButtons.groupDelete || isNullOrUndefined(this.showButtons.groupDelete)) {\n clsName = 'e-deletegroup';\n }\n else {\n clsName = 'e-deletegroup e-button-hide';\n }\n dltGroupBtn = this.createElement('button', { attrs: { type: 'button', class: clsName } });\n var button = new Button({ iconCss: 'e-icons e-delete-icon', cssClass: 'e-small e-round' });\n button.appendTo(dltGroupBtn);\n dltGroupBtn.setAttribute('title', this.l10n.getConstant('DeleteGroup'));\n rippleEffect(dltGroupBtn, { selector: '.deletegroup' });\n var ruleList = target.querySelector('.e-rule-list');\n var childElems = ruleList.children;\n var grpLen = 0;\n for (var j = 0, jLen = childElems.length; j < jLen; j++) {\n if (childElems[j].className.indexOf('e-group-container') > -1) {\n grpLen += 1;\n }\n }\n if (this.showButtons.cloneGroup && this.cloneGrpBtnClick) {\n if (this.groupIndex === (childElems.length - 1)) {\n ruleList.appendChild(groupElem);\n this.isLastGroup = true;\n }\n else {\n if (this.enableSeparateConnector) {\n var index = 0;\n var tempGroupIndex = this.groupIndex + 1;\n for (var i = 0; i < tempGroupIndex; i++) {\n if (childElems[i].classList.contains('e-rule-container')) {\n tempGroupIndex++;\n index++;\n }\n }\n if (index > 0) {\n index--;\n }\n var idx = this.groupIndex + index + 1;\n childElems[idx].parentNode.insertBefore(groupElem, childElems[idx]);\n }\n else {\n var idx = this.groupIndex + 1;\n childElems[idx].parentNode.insertBefore(groupElem, childElems[idx]);\n }\n this.isMiddleGroup = true;\n }\n }\n else {\n ruleList.appendChild(groupElem);\n }\n var level = this.levelColl[target.id].slice(0);\n level.push(grpLen);\n this.levelColl[groupElem.id] = level;\n if (this.groupIndex > -1) {\n this.refreshLevelColl();\n }\n if (!this.isImportRules) {\n this.isAddSuccess = true;\n this.addGroups([], target.id.replace(this.element.id + '_', ''));\n this.isAddSuccess = false;\n if (isBtnClick && this.addRuleToNewGroups) {\n this.addRuleElement(groupElem, {});\n }\n }\n if (!this.headerTemplate) {\n var lockClsName = '';\n if (this.showButtons.cloneGroup) {\n lockClsName = 'e-clone-grp-btn e-css e-btn e-small e-round e-icons e-icon-btn';\n }\n else {\n lockClsName = 'e-clone-grp-btn e-css e-btn e-small e-round e-icons e-icon-btn e-button-hide';\n }\n var cloneBtnElem = this.createElement('button', { attrs: { title: this.l10n.getConstant('CloneGroup'), type: 'button', class: lockClsName } });\n var spanElement = this.createElement('span', { attrs: { class: 'e-btn-icon e-icons e-copy' } });\n cloneBtnElem.appendChild(spanElement);\n groupElem.querySelector('.e-group-action').appendChild(cloneBtnElem);\n if (this.showButtons.lockGroup) {\n lockClsName = 'e-lock-grp-btn e-css e-btn e-small e-round e-icons e-icon-btn';\n }\n else {\n lockClsName = 'e-lock-grp-btn e-css e-btn e-small e-round e-icons e-icon-btn e-button-hide';\n }\n var lockBtnElem = this.createElement('button', { attrs: { title: this.l10n.getConstant('LockGroup'), type: 'button', class: lockClsName } });\n var lockSpanElement = this.createElement('span', { attrs: { class: 'e-btn-icon e-icons e-unlock' } });\n lockBtnElem.appendChild(lockSpanElement);\n groupElem.querySelector('.e-group-action').appendChild(lockBtnElem);\n groupElem.querySelector('.e-group-action').appendChild(dltGroupBtn);\n }\n }\n else {\n if (!this.headerTemplate) {\n var lockClsName = '';\n if (this.showButtons.lockGroup) {\n lockClsName = 'e-lock-grp-btn e-css e-btn e-small e-round e-icons e-icon-btn';\n }\n else {\n lockClsName = 'e-lock-grp-btn e-css e-btn e-small e-round e-icons e-icon-btn e-button-hide';\n }\n var lockBtnElem = this.createElement('button', { attrs: { title: this.l10n.getConstant('LockGroup'), type: 'button', class: lockClsName } });\n var spanElement = this.createElement('span', { attrs: { class: 'e-btn-icon e-icons e-unlock' } });\n lockBtnElem.appendChild(spanElement);\n groupElem.querySelector('.e-group-action').appendChild(lockBtnElem);\n }\n target.appendChild(groupElem);\n this.levelColl[groupElem.id] = [0];\n }\n if (this.enableNotCondition) {\n if (!this.headerTemplate) {\n var notElem = groupElem.querySelector('.e-qb-toggle');\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var tglBtn = void 0;\n if (this.enableSeparateConnector) {\n tglBtn = new CheckBox({ label: this.l10n.getConstant('NOT'), cssClass: 'e-qb-toggle' });\n }\n else {\n tglBtn = new Button({ content: this.l10n.getConstant('NOT'), cssClass: 'e-btn e-small' });\n }\n tglBtn.appendTo(notElem);\n groupElem.querySelector('.e-btngroup-and-lbl').classList.add('e-not');\n if (this.updatedRule && this.updatedRule.not) {\n addClass([notElem], 'e-active-toggle');\n }\n }\n }\n if (this.enableSeparateConnector && !this.headerTemplate) {\n var andElem = groupElem.querySelector('.e-btngroup-and');\n var orElem = groupElem.querySelector('.e-btngroup-or');\n var btnGroup = groupElem.querySelector('.e-btn-group');\n for (var i = 0; i < btnGroup.childNodes.length; i++) {\n if (groupElem.querySelector('.e-btn-group').childNodes[i].textContent.toLowerCase() === 'not') {\n if (!this.enableNotCondition) {\n btnGroup.childNodes[i].style.display = 'none';\n }\n else {\n btnGroup.childNodes[i].classList.add('e-multiconnector');\n }\n }\n else {\n btnGroup.childNodes[i].style.display = 'none';\n }\n }\n var prevSibling = groupElem.previousElementSibling;\n if (prevSibling) {\n if (isNullOrUndefined(this.headerTemplate)) {\n groupElem.parentElement.insertBefore(this.groupTemplate(true).querySelector('.e-btn-group'), groupElem);\n var notElem = groupElem.previousElementSibling.childNodes[0];\n if (notElem.classList.contains('e-qb-toggle')) {\n notElem.style.display = 'none';\n }\n }\n if (!this.isImportRules) {\n var groupElement = groupElem.previousElementSibling;\n var newAndElem = groupElement.querySelector('.e-btngroup-and');\n var newOrElem = groupElement.querySelector('.e-btngroup-or');\n if (!andElem.checked && !orElem.checked) {\n var nextSibling = groupElem.nextElementSibling;\n if (nextSibling && nextSibling.classList.contains('e-btn-group')) {\n andElem = nextSibling.querySelector('.e-btngroup-and');\n orElem = nextSibling.querySelector('.e-btngroup-or');\n newAndElem.checked = andElem.checked;\n newOrElem.checked = orElem.checked;\n }\n }\n else if (this.enableSeparateConnector) {\n if (andElem.checked) {\n newAndElem.checked = true;\n }\n if (orElem.checked) {\n newOrElem.checked = true;\n }\n }\n }\n }\n }\n this.updatedRule = null;\n if (this.headerTemplate) {\n var args_4 = { requestType: 'header-template-create', ruleID: groupElem.id, condition: condition,\n notCondition: this.enableNotCondition ? not : undefined };\n this.trigger('actionBegin', args_4);\n }\n else {\n if (this.enableSeparateConnector) {\n var conditionBtn_1 = groupElem.querySelector('.e-add-condition-btn');\n var btnObj = new Button({ cssClass: this.element.id + '_addConditionbtn', content: this.l10n.getConstant('AddCondition') });\n btnObj.appendTo(conditionBtn_1);\n btnObj.element.onclick = function () {\n _this.addRuleElement(closest(conditionBtn_1, '.e-group-container'), {});\n };\n var groupBtn_1 = groupElem.querySelector('.e-add-group-btn');\n btnObj = new Button({ cssClass: this.element.id + '_addGroupbtn', content: this.l10n.getConstant('AddGroup') });\n btnObj.appendTo(groupBtn_1);\n btnObj.element.onclick = function () {\n _this.addGroupElement(true, closest(groupBtn_1, '.e-group-container'), '', true);\n };\n }\n else {\n var groupBtn = groupElem.querySelector('.e-add-btn');\n var btnObj = new DropDownButton({\n items: this.items,\n cssClass: 'e-round e-small e-caret-hide e-addrulegroup',\n iconCss: 'e-icons e-add-icon',\n beforeOpen: this.selectBtn.bind(this, groupBtn),\n select: this.selectBtn.bind(this, groupBtn)\n });\n btnObj.appendTo(groupBtn);\n groupBtn.setAttribute('title', this.l10n.getConstant('AddButton'));\n }\n }\n if (!this.isImportRules && !this.prvtEvtTgrDaD) {\n var grpId = target.id.replace(this.element.id + '_', '');\n var chgrpId = groupElem.id.replace(this.element.id + '_', '');\n this.trigger('change', { groupID: grpId, type: 'insertGroup', childGroupID: chgrpId });\n }\n }\n };\n QueryBuilder.prototype.setMultiConnector = function (trgt) {\n if (this.enableSeparateConnector && !this.headerTemplate) {\n if (trgt.previousElementSibling && this.groupElem.querySelector('.e-btn-group')) {\n trgt.parentElement.insertBefore(this.groupTemplate(true).querySelector('.e-btn-group'), trgt);\n var notElem = trgt.previousElementSibling.childNodes[0];\n if (notElem.classList.contains('e-qb-toggle')) {\n notElem.style.display = 'none';\n }\n this.addHeaderDiv(trgt);\n }\n }\n };\n QueryBuilder.prototype.addHeaderDiv = function (elem) {\n var prevRule;\n var prevElem = elem.previousElementSibling.previousElementSibling;\n if (prevElem) {\n if (prevElem.id.indexOf('rule') > -1) {\n prevRule = this.getRule(prevElem);\n }\n else {\n prevRule = this.getGroup(prevElem);\n }\n if (isNullOrUndefined(prevRule.condition)) {\n prevRule.condition = 'and';\n }\n var orElem = elem.previousElementSibling.querySelector('.e-btngroup-or');\n var andElem = elem.previousElementSibling.querySelector('.e-btngroup-and');\n orElem.disabled = false;\n andElem.disabled = false;\n if (prevRule.condition === 'or') {\n orElem.checked = true;\n }\n else {\n andElem.checked = true;\n }\n }\n };\n QueryBuilder.prototype.headerTemplateFn = function (groupElem, not, condition, rule, groupID, isInitialRule) {\n var template;\n var templateID = this.element.id + '_header';\n var args;\n var groupHdr = groupElem.querySelector('.e-group-header');\n if (this.enableSeparateConnector && groupElem.id.indexOf('rule') !== -1) {\n groupHdr = groupElem;\n }\n if (this.headerTemplate) {\n args = { requestType: 'header-template-initialize', ruleID: groupElem.id,\n notCondition: this.enableNotCondition ? not : undefined,\n condition: condition, rule: this.getRuleCollection(rule, false), groupID: groupID };\n this.trigger('actionBegin', args);\n if (this.enableSeparateConnector && groupElem.id.indexOf('rule') !== -1) {\n args.requestType = 'rule-template-create';\n }\n this.headerFn = this.templateParser(this.headerTemplate);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.isReact) {\n template = this.headerFn(args, this, groupElem.id, templateID)[0];\n if (this.enableSeparateConnector && isInitialRule) {\n this.enableSeparateConnectorInitialRule(groupElem, template);\n }\n else if (this.enableSeparateConnector && groupElem.id.indexOf('rule') !== -1) {\n groupHdr.parentElement.insertBefore(template, groupHdr.nextElementSibling);\n }\n else {\n groupHdr.appendChild(template);\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n }\n else if (this.isAngular) {\n var templateColl = this.headerFn(args, this, groupElem.id, templateID);\n template = (templateColl[0].nodeType === 3) ? templateColl[1] : templateColl[0];\n if (this.enableSeparateConnector && isInitialRule) {\n this.enableSeparateConnectorInitialRule(groupElem, template);\n }\n else if (this.enableSeparateConnector && groupElem.id.indexOf('rule') !== -1) {\n groupHdr.parentElement.insertBefore(template, groupHdr.nextElementSibling);\n }\n else {\n groupHdr.appendChild(template);\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n }\n else if (this.isVue3) {\n template = this.headerFn(args, this, groupElem.id, templateID);\n if (this.enableSeparateConnector && (isInitialRule || groupElem.id.indexOf('rule') !== -1)) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n for (var i = 0; i < template.length; i++) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (template[i].nodeName === 'DIV') {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n template = template[i];\n break;\n }\n }\n }\n if (this.enableSeparateConnector && isInitialRule) {\n this.enableSeparateConnectorInitialRule(groupElem, template);\n }\n else if (this.enableSeparateConnector && groupElem.id.indexOf('rule') !== -1) {\n groupHdr.parentElement.insertBefore(template, groupHdr.nextElementSibling);\n }\n else {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n append(template, groupHdr);\n }\n }\n else {\n template = this.headerFn(args, this, 'Template', templateID)[0];\n if (this.enableSeparateConnector && isInitialRule) {\n this.enableSeparateConnectorInitialRule(groupElem, template);\n }\n else if (this.enableSeparateConnector && groupElem.id.indexOf('rule') !== -1) {\n groupHdr.parentElement.insertBefore(template, groupHdr.nextElementSibling);\n }\n else {\n groupHdr.appendChild(template);\n }\n }\n this.renderReactTemplates();\n }\n return groupElem;\n };\n QueryBuilder.prototype.enableSeparateConnectorInitialRule = function (groupElem, template) {\n var elem = groupElem.nextElementSibling ? groupElem.nextElementSibling : groupElem;\n var group = elem.closest('.e-group-container');\n if (!groupElem.nextElementSibling && group) {\n group = group.nextElementSibling ? group.nextElementSibling : group;\n }\n if (group) {\n group.parentElement.insertBefore(template, group);\n }\n };\n /**\n * Notify the changes to component.\n *\n * @param {string | number | boolean | Date | string[] | number[] | Date[]} value - 'value' to be passed to update the rule value.\n * @param {Element} element - 'element' to be passed to update the rule.\n * @param {string} type - 'type' to be passed to update the rule .\n * @returns {void}.\n */\n QueryBuilder.prototype.notifyChange = function (value, element, type) {\n var grpElement = closest(element, '.e-group-container');\n var rules = this.getParentGroup(grpElement);\n var ruleElement = closest(element, '.e-rule-container');\n var index = 0;\n if (type === 'not') {\n rules.not = value;\n return;\n }\n if (type === 'condition') {\n if (this.enableSeparateConnector) {\n ruleElement = element.parentElement.previousElementSibling;\n if (ruleElement && ruleElement.classList.contains('e-group-container')) {\n ruleElement = ruleElement.querySelectorAll('.e-rule-container')[ruleElement.querySelectorAll('.e-rule-container').length - 1];\n }\n if (ruleElement && ruleElement.classList.contains('e-rule-container')) {\n rules = this.getRule(ruleElement);\n }\n rules.condition = value;\n }\n else {\n rules.condition = value;\n }\n return;\n }\n while (ruleElement && ruleElement.previousElementSibling !== null) {\n ruleElement = ruleElement.previousElementSibling;\n if (!this.enableSeparateConnector || (this.enableSeparateConnector &&\n ((!this.headerTemplate && !ruleElement.classList.contains('e-btn-group')) ||\n this.headerTemplate && (ruleElement.classList.contains('e-rule-container') ||\n ruleElement.classList.contains('e-group-container'))))) {\n index++;\n }\n }\n var rule = rules.rules[index];\n var column = this.getColumn(rule.field);\n var format = this.getFormat(column.format);\n if (column.type === 'date') {\n if (value instanceof Date) {\n value = this.intl.formatDate(value, format);\n }\n else if (value instanceof Array) {\n for (var i = 0; i < value.length; i++) {\n if (value[i] && value[i] instanceof Date) {\n value[i] = this.intl.formatDate(value[i], format);\n }\n }\n }\n }\n if (column.ruleTemplate) {\n this.templateChange(element, value, type);\n }\n else {\n this.isNotified = true;\n this.updateRules(element, value);\n this.isNotified = false;\n }\n };\n QueryBuilder.prototype.templateChange = function (element, value, type) {\n var grpElem = closest(element, '.e-group-container');\n var eventsArgs;\n var rules = this.getParentGroup(grpElem);\n var ruleElem = closest(element, '.e-rule-container');\n var index = 0;\n if (this.allowValidation) {\n this.validateValue(rules, ruleElem);\n }\n while (ruleElem && ruleElem.previousElementSibling !== null) {\n ruleElem = ruleElem.previousElementSibling;\n if (!this.enableSeparateConnector || (this.enableSeparateConnector &&\n ((!this.headerTemplate && !ruleElem.classList.contains('e-btn-group')) ||\n this.headerTemplate && (ruleElem.classList.contains('e-rule-container') ||\n ruleElem.classList.contains('e-group-container'))))) {\n index++;\n }\n }\n var rule = rules.rules[index];\n if (type === 'field') {\n this.selectedColumn = this.getColumn(value);\n }\n else if (rule) {\n this.selectedColumn = this.getColumn(rule.field);\n }\n var operVal;\n this.previousColumn = this.getColumn(rule.field);\n var beforeRules = this.getValidRules(this.rule);\n if (this.selectedColumn) {\n if (this.selectedColumn.operators) {\n operVal = this.selectedColumn.operators;\n }\n else {\n operVal = this.customOperators[this.selectedColumn.type + 'Operator'];\n }\n }\n var arrOper = ['in', 'notin', 'between', 'notbetween'];\n var prevOper;\n switch (type) {\n case 'field':\n rule.field = value;\n rule.label = this.selectedColumn.label;\n rule.type = this.selectedColumn.type;\n rule.value = '';\n rule.operator = operVal[0].value;\n break;\n case 'operator':\n prevOper = rule.operator;\n rule.operator = value;\n if (arrOper.indexOf(rule.operator) > -1) {\n rule.value = [];\n }\n else if (arrOper.indexOf(prevOper) > -1) {\n rule.value = '';\n }\n break;\n case 'value':\n rule.value = value;\n }\n this.changeRuleTemplate(this.selectedColumn, element);\n this.filterRules(beforeRules, this.getValidRules(this.rule), type);\n if (this.selectedColumn && this.selectedColumn.ruleTemplate) {\n if (type === 'field' || type === 'operator') {\n var grpEle = closest(element, '.e-rule-container');\n this.destroyControls(grpEle, true);\n detach(grpEle.querySelector('.e-rule-field'));\n var ruleElement = this.appendRuleElem(closest(grpEle, '.e-group-container'), this.selectedColumn, 'change', grpEle.id, type, rule);\n if (this.displayMode === 'Vertical' || this.element.className.indexOf('e-device') > -1) {\n ruleElement.className = 'e-rule-container e-vertical-mode';\n }\n else {\n ruleElement.className = 'e-rule-container e-horizontal-mode';\n }\n if (!this.enableSeparateConnector) {\n if (ruleElement.previousElementSibling && ruleElement.previousElementSibling.className.indexOf('e-rule-container') > -1) {\n if (ruleElement.className.indexOf('e-joined-rule') < 0) {\n ruleElement.className += ' e-joined-rule';\n }\n if (ruleElement.previousElementSibling.className.indexOf('e-prev-joined-rule') < 0) {\n ruleElement.previousElementSibling.className += ' e-prev-joined-rule';\n }\n }\n }\n if (ruleElement.previousElementSibling && ruleElement.previousElementSibling.className.indexOf('e-group-container') > -1 &&\n ruleElement.className.indexOf('e-separate-rule') < 0) {\n ruleElement.className += ' e-separate-rule';\n }\n var args = { requestType: 'template-create', action: type, ruleID: grpEle.id,\n fields: this.fields, rule: rule };\n eventsArgs = { groupID: grpElem.id.replace(this.element.id + '_', ''), ruleID: grpEle.id.replace(this.element.id + '_', ''),\n value: rule.field, type: 'field' };\n this.trigger('actionBegin', args);\n this.trigger('change', eventsArgs);\n }\n }\n };\n QueryBuilder.prototype.changeValue = function (i, args) {\n var _this = this;\n var element;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if ((this.isNumInput && typeof args.value === 'number') || (args.type === 'input' && args.target && args.target.classList.contains('e-numerictextbox'))\n && (this.selectedColumn.validation.max !== Number.MAX_VALUE || this.selectedColumn.validation.min > 0)) {\n this.isNumInput = false;\n return;\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (args.element && args.element.classList.contains('e-multiselect')) {\n var multiSelectArgs = args;\n element = multiSelectArgs.element;\n }\n else if (args.event) {\n element = args.event.target;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n }\n else if (args.type === 'input' && args.target && args.target.classList.contains('e-numerictextbox')) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n element = args.currentTarget;\n }\n else {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n element = args.element;\n }\n if (!element) {\n return;\n }\n if (element.className.indexOf('e-day') > -1 || element.className.indexOf('e-today') > -1 || element.className.indexOf('e-cell') > -1) {\n var calenderArgs = args;\n element = calenderArgs.element;\n }\n var groupElem = closest(element, '.e-group-container');\n var ruleElem = closest(element, '.e-rule-container');\n var groupID = groupElem && groupElem.id.replace(this.element.id + '_', '');\n var ruleID = ruleElem.id.replace(this.element.id + '_', '');\n var dateElement = args;\n var dropDownObj;\n if (dateElement.element && dateElement.element.className.indexOf('e-datepicker') > -1) {\n element = dateElement.element;\n dropDownObj = getComponent(closest(element, '.e-rule-container').querySelector('.e-filter-input'), 'dropdownlist');\n if (dropDownObj) {\n this.selectedColumn = dropDownObj.getDataByValue(dropDownObj.value);\n }\n dropDownObj = getComponent(closest(element, '.e-rule-container').querySelector('.e-filter-input'), 'dropdowntree');\n if (dropDownObj) {\n this.selectedColumn = this.getColumn(dropDownObj.value[0]);\n }\n }\n var value;\n var rbValue;\n if (element.className.indexOf('e-radio') > -1) {\n rbValue = parseInt(element.id.split('valuekey')[1], 10);\n if (this.fieldMode === 'Default') {\n dropDownObj = getComponent(closest(element, '.e-rule-container').querySelector('.e-filter-input'), 'dropdownlist');\n this.selectedColumn = dropDownObj.getDataByValue(dropDownObj.value);\n if (this.selectedColumn.columns) {\n dropDownObj = getComponent(closest(element, '.e-rule-container').querySelector('.e-rule-sub-filter .e-dropdownlist'), 'dropdownlist');\n this.selectedColumn = this.getColumn(dropDownObj.value);\n }\n }\n else {\n dropDownObj = getComponent(closest(element, '.e-rule-container').querySelector('.e-filter-input'), 'dropdowntree');\n this.selectedColumn = this.getColumn(dropDownObj.value[0]);\n }\n if (this.selectedColumn.values) {\n value = this.selectedColumn.values[rbValue];\n }\n else {\n var valColl = [true, false];\n value = valColl[rbValue];\n }\n }\n else if (element.className.indexOf('e-multiselect') > -1) {\n value = getComponent(element, 'multiselect').value;\n }\n else {\n value = args.value;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (args.type === 'input' && args.target && args.target.classList.contains('e-numerictextbox')) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n value = Number(args.currentTarget.value);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var elem = args.currentTarget;\n var numericTextBoxObj = getInstance(elem, NumericTextBox);\n var decimalSeparator = getValue('decimal', getNumericObject(this.locale));\n if (isNaN(value) && elem.value.indexOf(decimalSeparator) !== -1) {\n value = this.intl.getNumberParser({ format: 'n' })(elem.value);\n }\n numericTextBoxObj.value = value;\n this.isNumInput = true;\n }\n }\n if (args.name === 'input' && this.immediateModeDelay) {\n window.clearInterval(this.timer);\n this.timer = window.setInterval(function () { _this.filterValue(groupID, ruleID, value, i, element); }, this.immediateModeDelay);\n }\n else {\n this.filterValue(groupID, ruleID, value, i, element);\n }\n };\n QueryBuilder.prototype.filterValue = function (grID, rlID, value, i, ele) {\n var _this = this;\n var eventsArgs = { groupID: grID, ruleID: rlID, value: value, cancel: false, type: 'value' };\n window.clearInterval(this.timer);\n if (!this.isImportRules) {\n this.trigger('beforeChange', eventsArgs, function (observedChangeArgs) {\n _this.changeValueSuccessCallBack(observedChangeArgs, ele, i, grID, rlID);\n });\n }\n else {\n this.changeValueSuccessCallBack(eventsArgs, ele, i, grID, rlID);\n }\n };\n QueryBuilder.prototype.changeValueSuccessCallBack = function (args, element, i, groupID, ruleID) {\n if (!args.cancel) {\n this.updateRules(element, args.value, i);\n if (!this.isImportRules) {\n this.trigger('change', { groupID: groupID, ruleID: ruleID, value: args.value, cancel: false, type: 'value' });\n }\n }\n };\n QueryBuilder.prototype.fieldClose = function (id) {\n if (this.isFieldChange || this.isDestroy) {\n return;\n }\n this.isFieldClose = true;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var ddl = getComponent(id, 'dropdownlist');\n var item = ddl.popupObj && ddl.popupObj.element.querySelector('.e-active');\n var itemData = ddl.getItemData();\n ddl.value = itemData.value;\n var customArgs = { element: ddl.element, value: itemData.value, isInteracted: true,\n previousItemData: this.prevItemData, previousItem: null, item: item, itemData: itemData, event: null, e: null };\n if (ddl.previousValue !== ddl.value) {\n this.changeField(customArgs);\n }\n this.isFieldChange = false;\n };\n QueryBuilder.prototype.changeField = function (args) {\n if (args.isInteracted) {\n if (isNullOrUndefined(args.value)) {\n return;\n }\n this.isFieldChange = true;\n this.prevItemData = args.itemData;\n var fieldElem = closest(args.element, '.e-rule-filter') || closest(args.element, '.e-rule-sub-filter');\n var column = this.fieldMode === 'DropdownTree' ? this.getColumn(args.value[0]) : this.getColumn(args.value);\n if (this.fieldMode === 'DropdownTree' && fieldElem !== null) {\n var ddtElem = fieldElem.querySelector('.e-dropdowntree.e-control');\n var ddt = getComponent(ddtElem, 'dropdowntree');\n if (column) {\n if (column.type === 'object') {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ddt.value = args.oldValue;\n ddt.dataBind();\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (isNullOrUndefined(args.oldValue)) {\n ddtElem.value = '';\n }\n else {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var result = this.getLabelFromColumn(args.oldValue[0]);\n ddtElem.value = result;\n }\n return;\n }\n else {\n if (!isNullOrUndefined(args.value[0])) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ddt.value = args.value[0];\n ddt.dataBind();\n var result = this.getLabelFromColumn(args.value[0]);\n ddtElem.value = result;\n }\n }\n }\n else {\n return;\n }\n }\n this.destroySubFields(fieldElem);\n this.subFieldElem = null;\n this.isNotValueChange = true;\n if (column && column.ruleTemplate) {\n this.templateChange(args.element, column.field, 'field');\n }\n else if (column && column.columns && column.columns[0].ruleTemplate) {\n this.templateChange(args.element, column.columns[0].field, 'field');\n }\n else {\n var groupElem = closest(args.element, '.e-group-container');\n var rules = this.getParentGroup(groupElem);\n var ruleElem = closest(args.element, '.e-rule-container');\n var index = 0;\n while (ruleElem && ruleElem.previousElementSibling !== null) {\n ruleElem = ruleElem.previousElementSibling;\n if (!this.enableSeparateConnector || (this.enableSeparateConnector &&\n ((!this.headerTemplate && !ruleElem.classList.contains('e-btn-group')) ||\n this.headerTemplate && (ruleElem.classList.contains('e-rule-container') ||\n ruleElem.classList.contains('e-group-container'))))) {\n index++;\n }\n }\n rules.rules[index].value = '';\n this.changeRule(rules.rules[index], args);\n }\n }\n };\n QueryBuilder.prototype.changeRule = function (rule, ddlArgs) {\n if (!ddlArgs.itemData) {\n if (this.fieldMode === 'DropdownTree') {\n var ddt = getComponent(ddlArgs.element, 'dropdowntree');\n if (ddt.value == null) {\n return;\n }\n }\n else {\n return;\n }\n }\n var tempRule = {};\n var filterElem = closest(ddlArgs.element, '.e-rule-filter');\n filterElem = filterElem ? filterElem : closest(ddlArgs.element, '.e-rule-sub-filter');\n var ddlObj = getComponent(ddlArgs.element, 'dropdownlist');\n if (this.fieldMode === 'DropdownTree' && filterElem !== null) {\n ddlObj = getComponent(ddlArgs.element, 'dropdowntree');\n }\n var element = closest(ddlArgs.element, '.e-group-container');\n var groupID = element.id.replace(this.element.id + '_', '');\n this.changeFilter(filterElem, ddlObj, groupID, rule, tempRule, ddlArgs);\n };\n QueryBuilder.prototype.changeFilter = function (flt, dl, grID, rl, tmpRl, dArg) {\n var _this = this;\n if (flt) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var ddlValue = void 0;\n if (this.fieldMode === 'DropdownTree') {\n ddlValue = (dl.value[0]);\n }\n else {\n ddlValue = this.isImportRules ? this.GetRootColumnName(dl.value) : dl.value;\n }\n this.selectedColumn = this.getColumn(ddlValue);\n var ruleElem = closest(flt, '.e-rule-container');\n var ruleID = ruleElem.id.replace(this.element.id + '_', '');\n var eventsArgs = { groupID: grID, ruleID: ruleID, selectedField: this.fieldMode === 'DropdownTree' ?\n dl.value[0] : dl.value, cancel: false, type: 'field' };\n if (!this.isImportRules && !this.prvtEvtTgrDaD) {\n this.trigger('beforeChange', eventsArgs, function (observedChangeArgs) {\n _this.fieldChangeSuccess(observedChangeArgs, tmpRl, flt, rl, dArg);\n });\n }\n else {\n this.fieldChangeSuccess(eventsArgs, tmpRl, flt, rl, dArg);\n }\n }\n else {\n var operatorElem = closest(dArg.element, '.e-rule-operator');\n this.changeOperator(flt, operatorElem, dl, grID, rl, tmpRl, dArg);\n }\n };\n QueryBuilder.prototype.changeOperator = function (\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n flt, opr, dl, grID, rl, tmpRl, dArg) {\n var _this = this;\n var ruleElem;\n var ruleID;\n var eventsArgs;\n if (opr) {\n ruleElem = closest(opr, '.e-rule-container');\n ruleID = ruleElem.id.replace(this.element.id + '_', '');\n eventsArgs = { groupID: grID, ruleID: ruleID, selectedIndex: dl.index, cancel: false, type: 'operator' };\n if (!this.isImportRules) {\n this.trigger('beforeChange', eventsArgs, function (observedChangeArgs) {\n _this.operatorChangeSuccess(observedChangeArgs, flt, tmpRl, rl, dArg);\n });\n }\n else {\n this.operatorChangeSuccess(eventsArgs, flt, tmpRl, rl, dArg);\n }\n }\n else {\n this.changeRuleValues(flt, rl, tmpRl, dArg);\n }\n };\n QueryBuilder.prototype.fieldChangeSuccess = function (args, tempRule, filterElem, rule, ddlArgs) {\n var ruleElem = closest(filterElem, '.e-rule-container');\n var operatorElem = closest(ddlArgs.element, '.e-rule-operator');\n var element = closest(ddlArgs.element, '.e-group-container');\n var groupID = element.id.replace(this.element.id + '_', '');\n var ddlObj = getComponent(ddlArgs.element, 'dropdownlist');\n var tooltipElem = ruleElem.querySelectorAll('.e-tooltip.e-input-group');\n for (var i = 0; i < tooltipElem.length; i++) {\n getComponent(tooltipElem[i], 'tooltip').destroy();\n }\n if (!args.cancel) {\n if (isNullOrUndefined(this.selectedColumn)) {\n return;\n }\n tempRule.type = this.selectedColumn.type;\n if (ruleElem.querySelector('.e-template')) {\n rule.value = '';\n }\n if (this.selectedColumn.type === 'object' && this.fieldMode === 'Default') {\n tempRule.type = this.selectedColumn.columns[0].type;\n while (this.selectedColumn.columns) {\n this.createSubFields(filterElem, rule, tempRule, ddlArgs);\n }\n }\n else {\n this.destroySubFields(filterElem);\n this.changeOperator(filterElem, operatorElem, ddlObj, groupID, rule, tempRule, ddlArgs);\n }\n }\n else {\n this.changeOperator(filterElem, operatorElem, ddlObj, groupID, rule, tempRule, ddlArgs);\n }\n };\n QueryBuilder.prototype.destroySubFields = function (filterElem) {\n while (filterElem && filterElem.nextElementSibling.classList.contains('e-rule-sub-filter')) {\n this.destroyControls(filterElem);\n filterElem.nextElementSibling.remove();\n }\n };\n QueryBuilder.prototype.createSubFields = function (filterElem, rule, tempRule, ddlArgs) {\n var subFieldValue = false;\n var fieldElem = closest(filterElem, '.e-rule-field');\n var tempElem = this.createElement('div', { attrs: { class: 'e-rule-sub-filter', id: 'subfilter' + this.subFilterCounter } });\n fieldElem.insertBefore(tempElem, fieldElem.querySelector('.e-rule-operator'));\n var ruleId = closest(tempElem, '.e-rule-container').id;\n var subFieldElem = this.createElement('input', { attrs: { type: 'text', id: ruleId + '_subfilterkey' + this.subFilterCounter } });\n tempElem.appendChild(subFieldElem);\n var height = (this.element.className.indexOf('e-device') > -1) ? '250px' : '200px';\n var ddlField;\n ddlField = {\n dataSource: this.selectedColumn.columns,\n fields: this.fields,\n placeholder: this.l10n.getConstant('SelectField'),\n popupHeight: ((this.selectedColumn.columns.length > 5) ? height : 'auto'),\n change: this.changeField.bind(this),\n index: 0,\n open: this.popupOpen.bind(this, false)\n };\n if (this.fieldModel) {\n ddlField = __assign({}, ddlField, this.fieldModel);\n }\n var dropDownList = new DropDownList(ddlField);\n dropDownList.appendTo('#' + ruleId + '_subfilterkey' + this.subFilterCounter);\n if (this.isImportRules || (this.previousColumn && this.previousColumn.ruleTemplate &&\n this.GetRootColumnName(rule.field) === this.GetRootColumnName(this.previousColumn.field))) {\n var subField = this.selectedColumn.columns;\n for (var i = 0; i < subField.length; i++) {\n if (rule.field === subField[i].field || rule.field.indexOf(subField[i].field + this.separator) > -1) {\n dropDownList.value = subField[i].field;\n this.selectedColumn = subField[i];\n subFieldValue = true;\n break;\n }\n }\n }\n this.subFilterCounter++;\n this.subFieldElem = subFieldElem;\n // eslint-disable-next-line\n ddlArgs.itemData = ddlArgs.itemData;\n if (!subFieldValue && this.selectedColumn.columns) {\n if (!subFieldValue && this.isImportRules) {\n dropDownList.value = null;\n }\n this.selectedColumn = this.selectedColumn.columns[0];\n }\n this.previousColumn = this.selectedColumn;\n if (!this.selectedColumn.columns) {\n this.changeRuleValues(tempElem, rule, tempRule, ddlArgs);\n }\n };\n QueryBuilder.prototype.operatorChangeSuccess = function (eventsArgs, filterElem, tempRule, rule, ddlArgs) {\n if (!eventsArgs.cancel) {\n var operatorElem = closest(ddlArgs.element, '.e-rule-operator');\n var valElem = operatorElem.nextElementSibling;\n var dropDownObj = getComponent(ddlArgs.element, 'dropdownlist');\n var prevOper = rule.operator ? rule.operator.toString().toLowerCase() : '';\n tempRule.operator = dropDownObj.value.toString();\n var currOper = tempRule.operator.toLowerCase();\n if (tempRule.operator.toLowerCase().indexOf('between') > -1 || (tempRule.operator.toLowerCase().indexOf('in') > -1\n && tempRule.operator.toLowerCase().indexOf('contains') < 0)) {\n filterElem = operatorElem.previousElementSibling;\n tempRule.type = rule.type;\n if (tempRule.operator.toLowerCase().indexOf('in') < 0 || prevOper.indexOf('in') < 0) {\n rule.value = [];\n }\n }\n else if (typeof rule.value === 'object' && rule.value !== null) {\n rule.value = rule.value.length > 0 ? rule.value[0] : rule.type === 'number' ? 0 : '';\n }\n if (ddlArgs.previousItemData) {\n var prevValue = ddlArgs.previousItemData.value.toString().toLowerCase();\n if ((prevValue.indexOf('between') > -1 || (prevValue.indexOf('in') > -1 || (prevValue.indexOf('null') > -1)\n || (prevValue.indexOf('empty') > -1)) && prevValue.indexOf('contains') < 0)) {\n filterElem = operatorElem.previousElementSibling;\n tempRule.type = rule.type;\n }\n }\n if ((prevOper.indexOf('in') > -1 && prevOper.indexOf('in') < 5) && (currOper.indexOf('in') > -1\n && currOper.indexOf('in') < 5)) {\n filterElem = null;\n }\n if (tempRule.operator.indexOf('null') > -1 || (tempRule.operator.indexOf('empty') > -1)) {\n var parentElem = operatorElem.parentElement.querySelector('.e-rule-value');\n var tooltipElem = parentElem.querySelector('.e-tooltip.e-input-group');\n if (tooltipElem) {\n getComponent(tooltipElem, 'tooltip').destroy();\n }\n removeClass([parentElem], 'e-show');\n addClass([parentElem], 'e-hide');\n }\n if (valElem && this.getColumn(rule.field).template) {\n filterElem = operatorElem.previousElementSibling;\n }\n if (valElem.children.length === 0) {\n filterElem = operatorElem.previousElementSibling;\n }\n this.changeRuleValues(filterElem, rule, tempRule, ddlArgs);\n }\n };\n QueryBuilder.prototype.changeRuleValues = function (filterElem, rule, tempRule, ddlArgs) {\n var operatorElem = closest(ddlArgs.element, '.e-rule-operator');\n var isSub;\n var ddlObj;\n var operatorList;\n var oprElem;\n if (filterElem) {\n operatorElem = filterElem.nextElementSibling;\n if (filterElem.classList.contains('e-rule-sub-filter')) {\n tempRule.type = this.selectedColumn.type;\n isSub = operatorElem.classList.contains('e-rule-sub-filter');\n operatorElem = isSub ? operatorElem.nextElementSibling : operatorElem;\n }\n addClass([operatorElem], 'e-operator');\n if (operatorElem.childElementCount) {\n ddlObj = getComponent(operatorElem.querySelector('.e-dropdownlist'), 'dropdownlist');\n tempRule.operator = ddlObj.value;\n var fieldObj = void 0;\n if (this.fieldMode === 'DropdownTree') {\n fieldObj = getComponent(filterElem.querySelector('.e-dropdowntree'), 'dropdowntree');\n }\n else {\n fieldObj = getComponent(filterElem.querySelector('.e-dropdownlist'), 'dropdownlist');\n }\n tempRule.type = this.fieldMode === 'DropdownTree' ? this.getColumn(fieldObj.value[0]).type :\n this.getColumn(fieldObj.value).type;\n var itemData = ddlArgs.itemData;\n if (ddlObj.value !== '') {\n this.renderValues(operatorElem, itemData, ddlArgs.previousItemData, true, rule, tempRule, ddlArgs.element);\n }\n }\n else {\n var ruleId = closest(operatorElem, '.e-rule-container').id;\n oprElem = this.createElement('input', { attrs: { type: 'text', id: ruleId + '_operatorkey' } });\n operatorElem.appendChild(oprElem);\n if (this.selectedColumn.operators) {\n operatorList = this.selectedColumn.operators;\n }\n else if (ddlArgs.itemData) {\n operatorList = this.customOperators[this.selectedColumn.type + 'Operator'];\n }\n var height = (this.element.className.indexOf('e-device') > -1) ? '250px' : '200px';\n var operator_2;\n operatorList.forEach(function (obj) {\n if ('value' in obj && typeof obj.value === 'string' && obj.value.toLowerCase() === rule.operator.toLowerCase()) {\n operator_2 = obj.value;\n }\n });\n var value = operator_2 ? operator_2 : operatorList[0].value;\n var ddlIdx = 0;\n if (!this.autoSelectOperator) {\n value = '';\n ddlIdx = -1;\n }\n if (this.isImportRules || (this.ruleIndex > -1 || this.groupIndex > -1 || this.prvtEvtTgrDaD)) {\n value = rule ? (rule.operator ? rule.operator : value) : value;\n }\n var ddlOperator = void 0;\n ddlOperator = {\n dataSource: operatorList,\n fields: { text: 'key', value: 'value' },\n placeholder: this.l10n.getConstant('SelectOperator'),\n popupHeight: ((operatorList.length > 5) ? height : 'auto'),\n change: this.changeField.bind(this),\n index: ddlIdx,\n value: value,\n open: this.popupOpen.bind(this, false)\n };\n if (this.operatorModel) {\n ddlOperator = __assign({}, ddlOperator, this.operatorModel);\n }\n var dropDownList = new DropDownList(ddlOperator);\n dropDownList.appendTo('#' + ruleId + '_operatorkey');\n tempRule.operator = (rule && rule.operator !== '' && !isNullOrUndefined(rule.operator)) ? rule.operator : operatorList[0].value;\n if (this.isImportRules) {\n tempRule.type = this.selectedColumn.type;\n tempRule.operator = rule.operator;\n }\n if (!isNullOrUndefined(value) && value !== '') {\n this.renderValues(operatorElem, this.selectedColumn, ddlArgs.previousItemData, false, rule, tempRule, ddlArgs.element);\n }\n else if (this.autoSelectField && this.autoSelectOperator) {\n this.renderValues(operatorElem, this.selectedColumn, ddlArgs.previousItemData, false, rule, tempRule, ddlArgs.element);\n }\n }\n }\n if (!this.isImportRules) {\n this.updateRules(ddlArgs.element, ddlArgs.item);\n }\n };\n QueryBuilder.prototype.popupOpen = function (isField, args) {\n if (this.enableRtl) {\n addClass([args.popup.element], 'e-rtl');\n }\n if (isField) {\n this.isFieldClose = false;\n }\n };\n QueryBuilder.prototype.destroyControls = function (target, isRuleTemplate) {\n var element = isRuleTemplate ? target : target.nextElementSibling;\n var inputElement = element.querySelectorAll('input.e-control');\n var divElement = element.querySelectorAll('div.e-control:not(.e-handle)');\n var columns = this.columns;\n for (var i = 0, len = inputElement.length; i < len; i++) {\n if (inputElement[i].classList.contains('e-textbox')) {\n getComponent(inputElement[i], 'textbox').destroy();\n detach(select('input#' + inputElement[i].id, element));\n }\n else if (inputElement[i].classList.contains('e-dropdownlist')) {\n if (this.allowValidation && inputElement[i].parentElement.className.indexOf('e-tooltip') > -1) {\n getComponent(inputElement[i].parentElement, 'tooltip').destroy();\n }\n getComponent(inputElement[i], 'dropdownlist').destroy();\n }\n else if (inputElement[i].classList.contains('e-radio')) {\n getComponent(inputElement[i], 'radio').destroy();\n }\n else if (inputElement[i].classList.contains('e-numerictextbox')) {\n getComponent(inputElement[i], 'numerictextbox').destroy();\n detach(select('input#' + inputElement[i].id, element));\n }\n else if (inputElement[i].classList.contains('e-datepicker')) {\n getComponent(inputElement[i], 'datepicker').destroy();\n }\n else if (inputElement[i].classList.contains('e-multiselect')) {\n getComponent(inputElement[i], 'multiselect').destroy();\n }\n else if (inputElement[i].className.indexOf('e-template') > -1) {\n var clsName = inputElement[i].className;\n for (var j = 0, jLen = columns.length; j < jLen; j++) {\n if (columns[j].template && clsName.indexOf(columns[j].field) > -1) {\n this.templateDestroy(columns[j], inputElement[i].id);\n break;\n }\n }\n }\n if (document.getElementById(inputElement[i].id)) {\n detach(inputElement[i]);\n }\n }\n for (var i = 0, len = divElement.length; i < len; i++) {\n if (divElement[i].className.indexOf('e-template') > -1) {\n var clsName = divElement[i].className;\n for (var j = 0, jLen = columns.length; j < jLen; j++) {\n if (columns[j].template && clsName.indexOf(columns[j].field) > -1) {\n this.templateDestroy(columns[j], divElement[i].id);\n break;\n }\n }\n }\n detach(divElement[i]);\n }\n var templateElement = element.querySelectorAll('.e-template:not(.e-control)');\n for (var i = 0, len = templateElement.length; i < len; i++) {\n detach(templateElement[i]);\n }\n };\n QueryBuilder.prototype.templateDestroy = function (column, elemId) {\n var template;\n if (typeof column.template !== 'string' || column.template.destroy === undefined) {\n template = column.template;\n }\n else {\n return;\n }\n var temp = template.destroy;\n if (template.destroy) {\n var templateElements = void 0;\n if (document.getElementById(elemId)) {\n templateElements = closest(document.getElementById(elemId), '.e-rule-field').querySelectorAll('.e-template');\n }\n if (typeof temp === 'string') {\n temp = getValue(temp, window);\n temp({ field: column.field, elementId: elemId, elements: templateElements });\n }\n else {\n template.destroy({ field: column.field, elementId: elemId, elements: templateElements });\n }\n }\n };\n /**\n * Return values bound to the column.\n *\n * @param {string} field - 'field' to be passed to get the field values.\n * @returns {object[]} - Values bound to the column\n */\n QueryBuilder.prototype.getValues = function (field) {\n var original = {};\n var result = [];\n var value;\n var fieldColl = [];\n if (this.separator.length > 0) {\n fieldColl = field.split(this.separator);\n }\n var dataSource = this.dataColl;\n if (this.dataColl[1]) {\n for (var i = 0, iLen = dataSource.length; i < iLen; i++) {\n var data = {};\n if (fieldColl.length > 1) {\n var dataObj = dataSource[i];\n var fieldStr = void 0;\n for (var j = 0, jLen = fieldColl.length; j < jLen; j++) {\n fieldStr = fieldColl[j];\n if (fieldColl.length === (j + 1)) {\n value = dataObj[\"\" + fieldStr];\n if (Number(dataObj[\"\" + fieldStr]) === dataObj[\"\" + fieldStr] && dataObj[\"\" + fieldStr] % 1 !== 0) {\n value = dataObj[\"\" + fieldStr].toString();\n }\n }\n else {\n dataObj = dataObj[\"\" + fieldStr];\n }\n }\n }\n else {\n value = dataSource[i][\"\" + field];\n if (Number(dataSource[i][\"\" + field]) === dataSource[i][\"\" + field] && dataSource[i][\"\" + field] % 1 !== 0) {\n value = dataSource[i][\"\" + field].toString();\n }\n }\n if (!(value in original)) {\n original[\"\" + value] = 1;\n if (fieldColl.length > 1) {\n this.createNestedObject(data, fieldColl, value);\n }\n else {\n data[\"\" + field] = value;\n }\n result.push(data);\n }\n }\n }\n return result;\n };\n QueryBuilder.prototype.createNestedObject = function (obj, fieldColl, value) {\n var key;\n var lastIndex = fieldColl.length - 1;\n for (var k = 0; k < lastIndex; ++k) {\n key = fieldColl[k];\n if (!(key in obj)) {\n obj[\"\" + key] = {};\n }\n obj = obj[\"\" + key];\n }\n obj[fieldColl[lastIndex]] = value;\n };\n QueryBuilder.prototype.getDistinctValues = function (dataSource, field) {\n var original = {};\n var result = [];\n var nest = [];\n var value = '';\n var isNested = field.indexOf(this.separator);\n var _loop_2 = function (i, iLen) {\n if (isNested === 0) {\n value = dataSource[i][\"\" + field];\n }\n else {\n nest = field.split(this_2.separator);\n // eslint-disable-next-line @typescript-eslint/tslint/config\n nest.forEach(function (element) {\n if (value) {\n value = value[\"\" + element];\n }\n else {\n value = dataSource[i][\"\" + element];\n }\n });\n }\n if (Number(dataSource[i][\"\" + field]) === dataSource[i][\"\" + field] && dataSource[i][\"\" + field] % 1 !== 0) {\n value = dataSource[i][\"\" + field].toString();\n }\n var data = {};\n if (!(value in original)) {\n original[\"\" + value] = 1;\n if (isNested === 0) {\n data[\"\" + field] = value;\n }\n else {\n data[nest[nest.length - 1]] = value;\n }\n result.push(data);\n }\n };\n var this_2 = this;\n for (var i = 0, iLen = dataSource.length; i < iLen; i++) {\n _loop_2(i, iLen);\n }\n return result;\n };\n QueryBuilder.prototype.renderMultiSelect = function (rule, parentId, i, selectedValue, values) {\n var isFetched = false;\n var ds;\n var isValues = false;\n this.isGetNestedData = false;\n if (this.dataColl[1]) {\n if (Object.keys(this.dataColl[1]).indexOf(rule.field) > -1) {\n isFetched = true;\n ds = this.getDistinctValues(this.dataColl, rule.field);\n }\n }\n isFetched = rule.columns ? false : isFetched;\n if (!this.dataColl.length && values.length) {\n isValues = true;\n }\n var multiSelectValue;\n multiSelectValue = {\n dataSource: isValues ? values : (isFetched ? ds : this.dataManager),\n query: new Query([rule.field]),\n fields: { text: this.selectedRule.field, value: this.selectedRule.field },\n placeholder: this.l10n.getConstant('SelectValue'),\n value: selectedValue,\n mode: 'CheckBox',\n width: '100%',\n change: this.changeValue.bind(this, i),\n close: this.closePopup.bind(this, i),\n actionBegin: this.multiSelectOpen.bind(this, parentId + '_valuekey' + i),\n open: this.popupOpen.bind(this, false)\n };\n if (this.valueModel && this.valueModel.multiSelectModel) {\n multiSelectValue = __assign({}, multiSelectValue, this.valueModel.multiSelectModel);\n }\n var multiSelectObj = new MultiSelect(multiSelectValue);\n multiSelectObj.appendTo('#' + parentId + '_valuekey' + i);\n this.updateRules(multiSelectObj.element, selectedValue, 0);\n };\n QueryBuilder.prototype.multiSelectOpen = function (parentId, args) {\n if (this.dataSource instanceof DataManager) {\n var element = document.getElementById(parentId);\n var dropDownObj = getComponent(closest(element, '.e-rule-container').querySelector('.e-filter-input'), 'dropdownlist');\n this.selectedColumn = dropDownObj.getDataByValue(dropDownObj.value);\n var value = this.selectedColumn.field;\n var isFetched = false;\n if (this.dataColl[1]) {\n if (Object.keys(this.dataColl[1]).indexOf(value) > -1) {\n isFetched = true;\n }\n var isNest = value.indexOf(this.separator);\n if (isNest !== 0 && this.isGetNestedData) {\n isFetched = true;\n }\n }\n if (!isFetched) {\n args.cancel = true;\n this.bindMultiSelectData(element, value);\n }\n }\n };\n QueryBuilder.prototype.bindMultiSelectData = function (element, value) {\n this.getMultiSelectData(element, value);\n };\n QueryBuilder.prototype.getMultiSelectData = function (element, value) {\n var _this = this;\n var dummyData;\n var deferred = new Deferred();\n var data = this.dataManager.executeQuery(new Query().select(value));\n var multiselectObj = getComponent(element, 'multiselect');\n multiselectObj.hideSpinner();\n this.createSpinner(closest(element, '.e-multi-select-wrapper').parentElement);\n showSpinner(closest(element, '.e-multi-select-wrapper').parentElement);\n data.then(function (e) {\n if (e.actual && e.actual.result) {\n dummyData = e.actual.result;\n }\n else {\n dummyData = e.result;\n }\n _this.dataColl = extend(_this.dataColl, dummyData, [], true);\n multiselectObj.dataSource = _this.getDistinctValues(_this.dataColl, value);\n _this.isGetNestedData = true;\n hideSpinner(closest(element, '.e-multi-select-wrapper').parentElement);\n }).catch(function (e) {\n deferred.reject(e);\n });\n };\n QueryBuilder.prototype.createSpinner = function (element) {\n var spinnerElem = this.createElement('span', { attrs: { class: 'e-qb-spinner' } });\n element.appendChild(spinnerElem);\n createSpinner({ target: spinnerElem, width: Browser.isDevice ? '16px' : '14px' });\n };\n QueryBuilder.prototype.closePopup = function (i, args) {\n var element = document.getElementById(args.popup.element.id.replace('_popup', ''));\n if (element) {\n var ms = getComponent(element, 'multiselect');\n if (ms) {\n var value = ms.value;\n this.updateRules(element, value, i);\n }\n }\n };\n QueryBuilder.prototype.processTemplate = function (target, itemData, rule, tempRule) {\n var container = closest(target, '.e-rule-container');\n var tempElements = container.querySelectorAll('.e-template');\n var filterElem = container.querySelector('.e-rule-filter .e-filter-input');\n var ddlObj = this.fieldMode === 'DropdownTree' ? getComponent(filterElem, 'dropdowntree')\n : getComponent(container.querySelector('.e-rule-filter .e-filter-input'), 'dropdownlist');\n var column = this.fieldMode === 'DropdownTree' ? this.getColumn(ddlObj.value[0]) : this.getColumn(ddlObj.value);\n if (typeof itemData.template === 'string' || itemData.template.write === undefined) {\n var args = { rule: rule, ruleID: container.id, operator: tempRule.operator, field: column.field,\n requestType: 'value-template-create' };\n this.trigger('actionBegin', args);\n }\n else {\n var template = itemData.template;\n if (typeof template.write === 'string') {\n getValue(template.write, window)({ elements: tempElements.length > 1 ? tempElements : tempElements[0], values: rule.value,\n operator: tempRule.operator, field: column.field, dataSource: column.values });\n }\n else if (typeof itemData.template !== 'function') {\n itemData.template.write({ elements: tempElements.length > 1 ? tempElements : tempElements[0],\n values: rule.value, operator: tempRule.operator, field: column.field, dataSource: column.values });\n }\n }\n };\n QueryBuilder.prototype.getItemData = function (parentId) {\n var fieldObj = getComponent(document.getElementById(parentId + '_filterkey'), 'dropdownlist');\n if (this.fieldMode === 'DropdownTree') {\n fieldObj = getComponent(document.getElementById(parentId + '_filterkey'), 'dropdowntree');\n }\n return this.fieldMode === 'DropdownTree' ? this.getColumn(fieldObj.value[0]) : this.getColumn(fieldObj.value);\n };\n QueryBuilder.prototype.setDefaultValue = function (parentId, isArryValue, isNumber) {\n var itemData = this.getItemData(parentId);\n if (isNullOrUndefined(itemData.value)) {\n return isNumber ? isArryValue ? [0, 0] : 0 : isArryValue ? [] : '';\n }\n if (isArryValue) {\n if (!(itemData.value instanceof Array)) {\n return [itemData.value];\n }\n }\n else {\n if (itemData.value instanceof Array) {\n return itemData.value[0];\n }\n }\n return itemData.value;\n };\n QueryBuilder.prototype.renderStringValue = function (parentId, rule, operator, idx, ruleValElem) {\n var selectedVal;\n var columnData = this.getItemData(parentId);\n var selectedValue;\n var isTemplate = (typeof columnData.template === 'string');\n if (this.isImportRules || this.ruleIndex > -1 || this.groupIndex > -1 || this.isPublic || isTemplate || rule.value !== '') {\n selectedValue = rule.value;\n }\n else {\n selectedValue = this.setDefaultValue(parentId, false, false);\n }\n if ((operator === 'in' || operator === 'notin') && (this.dataColl.length || columnData.values)) {\n selectedVal = (this.isImportRules || this.ruleIndex > -1 || this.groupIndex > -1 || this.isPublic) ? rule.value :\n this.setDefaultValue(parentId, true, false);\n this.renderMultiSelect(columnData, parentId, idx, selectedVal, columnData.values);\n if (this.displayMode === 'Vertical' || this.element.className.indexOf('e-device') > -1) {\n ruleValElem.style.width = '100%';\n }\n else {\n ruleValElem.style.width = null;\n ruleValElem.style.minWidth = '200px';\n }\n }\n else {\n if (operator === 'in' || operator === 'notin') {\n selectedVal = (this.isImportRules || this.ruleIndex > -1 || this.groupIndex > -1) ? rule.value :\n this.setDefaultValue(parentId, true, false);\n selectedValue = selectedVal.join(',');\n }\n var txtBox = void 0;\n txtBox = {\n placeholder: this.l10n.getConstant('SelectValue'),\n input: this.changeValue.bind(this, idx)\n };\n if (this.valueModel && this.valueModel.textBoxModel) {\n txtBox = __assign({}, txtBox, this.valueModel.textBoxModel);\n }\n var inputobj = new TextBox(txtBox);\n inputobj.appendTo('#' + parentId + '_valuekey' + idx);\n inputobj.value = selectedValue;\n inputobj.dataBind();\n }\n };\n QueryBuilder.prototype.renderNumberValue = function (parentId, rule, operator, idx, ruleValElem, itemData, length) {\n var columnData = this.getItemData(parentId);\n var isTemplate = (typeof columnData.template === 'string');\n var selectedVal = (this.isImportRules || this.ruleIndex > -1 || this.groupIndex > -1 || this.isPublic || isTemplate ||\n typeof rule.value === 'number') ? rule.value : this.setDefaultValue(parentId, false, true);\n if ((operator === 'in' || operator === 'notin') && (this.dataColl.length || columnData.values)) {\n selectedVal = (this.isImportRules || this.ruleIndex > -1 || this.groupIndex > -1 || this.isPublic) ? rule.value :\n this.setDefaultValue(parentId, true, false);\n this.renderMultiSelect(columnData, parentId, idx, selectedVal, columnData.values);\n if (this.element.className.indexOf('e-device') > -1 || this.displayMode === 'Vertical') {\n ruleValElem.style.width = '100%';\n }\n else {\n ruleValElem.style.minWidth = '200px';\n ruleValElem.style.width = null;\n }\n }\n else if (operator === 'in' || operator === 'notin') {\n selectedVal = (this.isImportRules || this.ruleIndex > -1 || this.groupIndex > -1) ? rule.value :\n this.setDefaultValue(parentId, true, false);\n var selVal = selectedVal.join(',');\n var txtInp = void 0;\n txtInp = {\n placeholder: this.l10n.getConstant('SelectValue'),\n input: this.changeValue.bind(this, idx)\n };\n if (this.valueModel && this.valueModel.textBoxModel) {\n txtInp = __assign({}, txtInp, this.valueModel.textBoxModel);\n }\n var input = new TextBox(txtInp);\n input.appendTo('#' + parentId + '_valuekey' + idx);\n input.value = selVal;\n input.dataBind();\n }\n else {\n itemData = columnData;\n var min = (itemData.validation && itemData.validation.min) ? itemData.validation.min : 0;\n var max = (itemData.validation && itemData.validation.max) ? itemData.validation.max : Number.MAX_VALUE;\n var format = itemData.format ? itemData.format : 'n';\n if (length > 1 && rule) {\n selectedVal = rule.value[idx] ? rule.value[idx] : this.setDefaultValue(parentId, true, true);\n }\n var numericTxt = void 0;\n numericTxt = {\n value: (selectedVal instanceof Array) ? selectedVal[idx] : selectedVal,\n format: format, min: min, max: max, width: '100%',\n step: itemData.step ? itemData.step : 1,\n change: this.changeValue.bind(this, idx)\n };\n if (this.valueModel && this.valueModel.numericTextBoxModel) {\n numericTxt = __assign({}, numericTxt, this.valueModel.numericTextBoxModel);\n }\n var numeric = new NumericTextBox(numericTxt);\n numeric.appendTo('#' + parentId + '_valuekey' + idx);\n numeric.element.setAttribute('aria-label', itemData.label + ' ' + 'Value');\n numeric.element.oninput = this.changeValue.bind(this, idx);\n }\n };\n QueryBuilder.prototype.processValueString = function (value, type) {\n var numArr = [];\n var strArr = value.split(',');\n if (type === 'string') {\n return strArr;\n }\n else {\n for (var k = 0, kLen = strArr.length; k < kLen; k++) {\n numArr.push(Number(strArr[k]));\n }\n return numArr;\n }\n };\n QueryBuilder.prototype.parseDate = function (value, format) {\n var formatOpt;\n var selectedValue;\n if (format) {\n var dParser = this.intl.getDateParser({ skeleton: 'full', type: 'dateTime' });\n formatOpt = this.getFormat(format);\n selectedValue = dParser(value);\n if (isNullOrUndefined(selectedValue)) {\n selectedValue = this.intl.parseDate(value, formatOpt);\n }\n }\n else {\n selectedValue = new Date(value);\n }\n return selectedValue;\n };\n QueryBuilder.prototype.renderControls = function (target, itemData, rule, tempRule, isRendered) {\n addClass([target.parentElement.querySelector('.e-rule-value')], 'e-value');\n removeClass([target.parentElement.querySelector('.e-rule-value')], 'e-hide');\n addClass([target.parentElement.querySelector('.e-rule-value')], 'e-show');\n if (itemData.template && (itemData.template.create || isRendered)) {\n this.processTemplate(target, itemData, rule, tempRule);\n }\n else {\n var length_1;\n if (tempRule.type === 'boolean') {\n length_1 = this.selectedColumn.values ? this.selectedColumn.values.length : 2;\n }\n else {\n length_1 = tempRule.operator && tempRule.operator.toString().toLowerCase().indexOf('between') > -1 ? 2 : 1;\n }\n var parentId = closest(target, '.e-rule-container').id;\n var ruleValElem = void 0;\n var operator = tempRule.operator.toString();\n if (target.className.indexOf('e-rule-operator') > -1 || target.className.indexOf('e-rule-filter') > -1) {\n ruleValElem = target.parentElement.querySelector('.e-rule-value');\n if (this.element.className.indexOf('e-device') > -1 || this.displayMode === 'Vertical') {\n ruleValElem.style.width = '100%';\n }\n else {\n if (operator !== 'in' && operator !== 'notin') {\n addClass([ruleValElem], 'e-custom-value');\n }\n else {\n removeClass([ruleValElem], 'e-custom-value');\n }\n }\n for (var i = 0; i < length_1; i++) {\n switch (tempRule.type) {\n case 'string':\n {\n this.renderStringValue(parentId, rule, operator, i, ruleValElem);\n }\n break;\n case 'number':\n {\n this.renderNumberValue(parentId, rule, operator, i, ruleValElem, itemData, length_1);\n }\n break;\n case 'boolean':\n this.processBoolValues(itemData, rule, parentId, i);\n break;\n case 'date':\n {\n var selectedValue = new Date();\n var selVal = void 0;\n var column = void 0;\n var format = itemData.format;\n var datepick = void 0;\n var datePicker = void 0;\n var place = this.l10n.getConstant('SelectValue');\n var isTemplate = (typeof itemData.template === 'string');\n if (rule.value && !isNullOrUndefined(format)) {\n selVal = (length_1 > 1) ? rule.value[i] : rule.value;\n selectedValue = this.parseDate(selVal, format) || new Date();\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (!itemData.field && !itemData.key && itemData.value) {\n if (itemData.value instanceof Date) {\n selectedValue = itemData.value;\n }\n else {\n selectedValue = this.parseDate(itemData.value, itemData.format);\n }\n }\n if (!itemData.format && rule && rule.field !== '') {\n column = this.getColumn(rule.field);\n format = column.format;\n }\n if ((this.isImportRules || this.isPublic || isTemplate) && rule) {\n column = this.getColumn(rule.field);\n format = column.format;\n if (rule.value) {\n selVal = (length_1 > 1) ? rule.value[i] : rule.value;\n selectedValue = this.parseDate(selVal, column.format);\n }\n else {\n selectedValue = rule.value;\n }\n }\n if (format) {\n var formatObj = this.getFormat(format);\n if (formatObj.skeleton) {\n datePicker = {\n locale: this.getLocale(), value: selectedValue,\n placeholder: place, format: formatObj, change: this.changeValue.bind(this, i)\n };\n if (this.valueModel && this.valueModel.datePickerModel) {\n datePicker = __assign({}, datePicker, this.valueModel.datePickerModel);\n }\n datepick = new DatePicker(datePicker);\n }\n else {\n datePicker = {\n value: selectedValue, locale: this.getLocale(), placeholder: place,\n format: formatObj.format, change: this.changeValue.bind(this, i)\n };\n if (this.valueModel && this.valueModel.datePickerModel) {\n datePicker = __assign({}, datePicker, this.valueModel.datePickerModel);\n }\n datepick = new DatePicker(datePicker);\n }\n }\n else {\n datePicker = {\n locale: this.getLocale(), value: selectedValue,\n placeholder: place, change: this.changeValue.bind(this, i)\n };\n if (this.valueModel && this.valueModel.datePickerModel) {\n datePicker = __assign({}, datePicker, this.valueModel.datePickerModel);\n }\n datepick = new DatePicker(datePicker);\n }\n datepick.appendTo('#' + parentId + '_valuekey' + i);\n if (!rule.value) {\n var elem = document.getElementById(parentId + '_valuekey' + i);\n this.updateRules(elem, selectedValue, null, this.isNotValueChange);\n this.isNotValueChange = false;\n }\n }\n break;\n }\n }\n }\n }\n };\n QueryBuilder.prototype.processBoolValues = function (itemData, rule, parentId, i) {\n var isCheck = false;\n var value;\n var orgValue;\n if (isNullOrUndefined(rule.type) && itemData) {\n rule.type = itemData.type;\n }\n var label;\n if (itemData.values) {\n var values = itemData.values;\n if (rule.type === 'boolean' && !isNullOrUndefined(rule.value)) {\n isCheck = values[i].toLowerCase() === rule.value.toString().toLowerCase();\n }\n else if (itemData.value) {\n isCheck = values[i].toLowerCase() === itemData.value.toString().toLowerCase();\n }\n else if (i === 0) {\n isCheck = true;\n }\n orgValue = value = label = values[i];\n }\n else {\n var values = [true, false];\n if (rule.type === 'boolean' && !isNullOrUndefined(rule.value)) {\n isCheck = values[i].toString().toLowerCase() === rule.value.toString().toLowerCase();\n }\n else if (itemData.value) {\n isCheck = values[i].toString().toLowerCase() === itemData.value.toString().toLowerCase();\n }\n else if (i === 0) {\n if (typeof rule.value === 'boolean') {\n isCheck = rule.value ? true : false;\n }\n else {\n isCheck = true;\n }\n }\n if (typeof rule.value === 'boolean' && i === 1) {\n isCheck = !rule.value ? true : false;\n }\n value = values[i].toString();\n orgValue = values[i];\n label = this.l10n.getConstant(['True', 'False'][i]);\n }\n var radioBtn;\n radioBtn = {\n label: label, name: parentId + 'default', checked: isCheck, value: value,\n change: this.changeValue.bind(this, i)\n };\n if (this.valueModel && this.valueModel.radioButtonModel) {\n radioBtn = __assign({}, radioBtn, this.valueModel.radioButtonModel);\n }\n var radiobutton = new RadioButton(radioBtn);\n radiobutton.appendTo('#' + parentId + '_valuekey' + i);\n if (isCheck) {\n this.updateRules(radiobutton.element, orgValue, 0, true);\n }\n };\n QueryBuilder.prototype.getOperatorIndex = function (ddlObj, rule) {\n var i;\n var dataSource = ddlObj.dataSource;\n var len = dataSource.length;\n for (i = 0; i < len; i++) {\n if (rule.operator === ddlObj.dataSource[i].value) {\n return i;\n }\n }\n return 0;\n };\n QueryBuilder.prototype.getPreviousItemData = function (prevItemData, column) {\n if (this.isFieldClose && prevItemData) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n prevItemData = this.getColumn(prevItemData.value);\n }\n if (column && column.template && prevItemData && Object.keys(prevItemData).length < 4) {\n prevItemData.template = column.template;\n }\n return prevItemData;\n };\n QueryBuilder.prototype.renderValues = function (target, itemData, prevItemData, isRender, rule, tempRule, element) {\n var subFldElem = target.previousElementSibling;\n var filtElem = subFldElem.getElementsByTagName('input')[0];\n var filtObj = this.fieldMode === 'DropdownTree' ? getComponent(filtElem, 'dropdowntree')\n : getComponent(filtElem, 'dropdownlist');\n var column = this.fieldMode === 'DropdownTree' ? this.getColumn(filtObj.value[0])\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n : this.getColumn(filtObj.value);\n this.selectedRule = column;\n var ddlObj = getComponent(target.querySelector('input'), 'dropdownlist');\n if (isRender) {\n itemData = element.id.indexOf('operator') > -1 ? itemData : this.selectedRule;\n if (itemData.operators) {\n ddlObj.value = null;\n ddlObj.dataBind();\n ddlObj.dataSource = itemData.operators;\n ddlObj.index = this.getOperatorIndex(ddlObj, rule);\n ddlObj.value = tempRule.operator = ddlObj.dataSource[ddlObj.index].value;\n if (!this.autoSelectOperator) {\n ddlObj.index = -1;\n tempRule.operator = ddlObj.value = '';\n }\n else {\n ddlObj.dataBind();\n }\n }\n }\n var operator = tempRule.operator.toString();\n var isTempRendered = false;\n if (!(operator.indexOf('null') > -1 || operator.indexOf('isempty') > -1 || operator.indexOf('isnotempty') > -1)) {\n var parentId = closest(target, '.e-rule-container').id;\n prevItemData = this.getPreviousItemData(prevItemData, column);\n if (prevItemData && prevItemData.template === undefined) {\n if (prevItemData.columns) {\n prevItemData = this.getColumn(rule.field);\n }\n }\n else if (this.fieldMode === 'DropdownTree' && prevItemData === undefined) {\n prevItemData = this.getColumn(rule.field);\n }\n if (prevItemData && prevItemData.template) {\n this.templateDestroy(prevItemData, parentId + '_valuekey0');\n var elem = select('#' + parentId + '_valuekey0', target.nextElementSibling);\n if (elem && !elem.classList.contains('e-control')) {\n detach(select('#' + parentId + '_valuekey0', target.nextElementSibling));\n }\n if (typeof prevItemData.template === 'string' || prevItemData.template.create === undefined) {\n if (target.nextElementSibling.classList.contains('e-template-value')) {\n this.clearQBTemplate([parentId]);\n }\n target.nextElementSibling.innerHTML = '';\n }\n }\n if (isRender) {\n this.validateValue(rule, closest(target, '.e-rule-container'));\n this.destroyControls(target);\n }\n if (this.isImportRules || (ddlObj && ddlObj.value !== '')) {\n if (column) {\n itemData.template = column.template;\n }\n if (itemData.template) {\n addClass([target.nextElementSibling], 'e-template-value');\n itemData.template = column.template;\n isTempRendered = this.setColumnTemplate(itemData, parentId, column.field, itemData.value ||\n operator, target, rule);\n }\n if (isTempRendered) {\n var parentElem = target.parentElement.querySelector('.e-rule-value');\n if (this.element.className.indexOf('e-device') > -1 || this.displayMode === 'Vertical') {\n parentElem.style.width = '100%';\n }\n else {\n parentElem.style.width = '200px';\n }\n }\n else {\n removeClass([target.nextElementSibling], 'e-template-value');\n var inputLen = 1;\n if (tempRule.type === 'boolean') {\n inputLen = this.selectedColumn.values ? this.selectedColumn.values.length : 2;\n }\n else {\n inputLen = (operator && operator.toLowerCase().indexOf('between') > -1) ? 2 : 1;\n }\n for (var i = 0; i < inputLen; i++) {\n var valElem = this.createElement('input', { attrs: { type: 'text', id: parentId + '_valuekey' + i } });\n target.nextElementSibling.appendChild(valElem);\n }\n }\n this.renderControls(target, itemData, rule, tempRule, isTempRendered);\n }\n }\n else {\n var parentElem = target.parentElement.querySelector('.e-rule-value');\n if (parentElem) {\n removeClass([parentElem], 'e-show');\n addClass([parentElem], 'e-hide');\n }\n }\n };\n QueryBuilder.prototype.setColumnTemplate = function (itemData, ruleID, field, operator, target, rule) {\n var _this = this;\n var args;\n var isRendered = true;\n if (!itemData.template) {\n return true;\n }\n else {\n if (typeof itemData.template === 'string' || itemData.template.create === undefined) {\n args = { requestType: 'value-template-initialize', ruleID: ruleID, field: field, operator: operator, rule: rule,\n renderTemplate: true };\n this.trigger('actionBegin', args, function (observedActionArgs) {\n isRendered = _this.actionBeginSuccessCallBack(observedActionArgs, itemData, ruleID, field, target);\n });\n return isRendered;\n }\n else {\n var valElem = void 0;\n var template = itemData.template;\n if (typeof template.create === 'string') {\n valElem = getValue(template.create, window)({ field: field, operator: operator });\n }\n else {\n valElem = template.create({ field: field, operator: operator });\n }\n if (valElem instanceof Element) {\n valElem.id = ruleID + '_valuekey0';\n addClass([valElem], 'e-template');\n target.nextElementSibling.appendChild(valElem);\n if (field.indexOf(' ') < 0) {\n addClass([valElem], 'e-' + field);\n }\n }\n else if (valElem instanceof Array) {\n addClass(valElem, 'e-template');\n for (var i = 0, iLen = valElem.length; i < iLen; i++) {\n valElem[i].id = ruleID + '_valuekey' + i;\n target.nextElementSibling.appendChild(valElem[i]);\n }\n }\n addClass([target.nextElementSibling], 'e-template-value');\n return true;\n }\n }\n };\n QueryBuilder.prototype.actionBeginSuccessCallBack = function (args, itemData, ruleID, field, target) {\n if (args.renderTemplate) {\n var valElem = void 0;\n this.columnTemplateFn = this.templateParser(typeof itemData.template === 'function' ? itemData.template : itemData.template);\n var templateID = this.element.id + field;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.isReact) {\n valElem = this.columnTemplateFn(args, this, ruleID, templateID)[0];\n target.nextElementSibling.appendChild(valElem);\n } // eslint-disable-next-line @typescript-eslint/no-explicit-any\n else if (this.isAngular) {\n var valElemColl = this.columnTemplateFn(args, this, ruleID, templateID);\n valElem = (valElemColl[0].nodeType === 3) ? valElemColl[1] : valElemColl[0];\n target.nextElementSibling.appendChild(valElem);\n } // eslint-disable-next-line @typescript-eslint/no-explicit-any\n else if (this.isVue3) {\n valElem = this.columnTemplateFn(args, this, 'Template', templateID);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n append(valElem, target.nextElementSibling);\n }\n else {\n valElem = this.columnTemplateFn(args, this, 'Template', templateID)[0];\n target.nextElementSibling.appendChild(valElem);\n }\n addClass([target.nextElementSibling], 'e-template-value');\n this.renderReactTemplates();\n return true;\n }\n else {\n return false;\n }\n };\n QueryBuilder.prototype.updateValues = function (element, rule) {\n var idx = 1;\n if (element.className.indexOf('e-template') > -1) {\n idx = 3;\n }\n var controlName = element.className.split(' e-')[idx];\n var i = parseInt(element.id.slice(-1), 2);\n var column;\n var format;\n var selectedDate;\n var value;\n var radioBtnObj;\n switch (controlName) {\n case 'checkbox':\n value = getComponent(element, controlName).value;\n rule.value = (value !== '') ? value : undefined;\n break;\n case 'textbox':\n rule.value = getComponent(element, controlName).value;\n break;\n case 'dropdownlist':\n rule.value = getComponent(element, controlName).value;\n break;\n case 'radio':\n radioBtnObj = getComponent(element, controlName);\n if (radioBtnObj.checked) {\n if (typeof rule.value === 'boolean') {\n rule.value = radioBtnObj.value === 'true';\n }\n else {\n if (this.getColumn(rule.field).values) {\n rule.value = radioBtnObj.value;\n }\n else {\n rule.value = radioBtnObj.value === 'true';\n }\n }\n }\n radioBtnObj.refresh();\n break;\n case 'numerictextbox':\n if (rule.operator.indexOf('between') > -1) {\n if (typeof rule.value === 'string') {\n rule.value = [];\n }\n rule.value[i] = getComponent(element, controlName).value;\n }\n else {\n rule.value = getComponent(element, controlName).value;\n }\n break;\n case 'datepicker':\n column = this.getColumn(rule.field);\n format = this.getFormat(column.format);\n selectedDate = getComponent(element, controlName).value;\n if (rule.operator.indexOf('between') > -1) {\n if (typeof rule.value === 'string') {\n rule.value = [];\n }\n rule.value[i] = this.intl.formatDate(selectedDate, format);\n }\n else if (isNullOrUndefined(format.format) && selectedDate) {\n rule.value = this.intl.formatDate(selectedDate);\n }\n else if (selectedDate) {\n rule.value = this.intl.formatDate(selectedDate, format);\n }\n else {\n rule.value = selectedDate;\n }\n break;\n case 'multiselect':\n rule.value = getComponent(element, controlName).value;\n break;\n }\n };\n QueryBuilder.prototype.updateRules = function (target, selectedValue, i, isNotTrigger) {\n var groupElem = closest(target, '.e-group-container');\n var rule = this.getParentGroup(groupElem);\n var ruleElem = closest(target, '.e-rule-container');\n var index = 0;\n var dropDownObj;\n var eventsArgs;\n var groupID = groupElem.id.replace(this.element.id + '_', '');\n var beforeRules = this.getValidRules(this.rule);\n while (ruleElem && ruleElem.previousElementSibling !== null) {\n ruleElem = ruleElem.previousElementSibling;\n if (!this.enableSeparateConnector || (this.enableSeparateConnector &&\n ((!this.headerTemplate && !ruleElem.classList.contains('e-btn-group')) ||\n this.headerTemplate && (ruleElem.classList.contains('e-rule-container') ||\n ruleElem.classList.contains('e-group-container'))))) {\n index++;\n }\n }\n var operator = rule.rules[index].operator ? rule.rules[index].operator.toString() : '';\n ruleElem = closest(target, '.e-rule-container');\n var ruleID = ruleElem.id.replace(this.element.id + '_', '');\n if (closest(target, '.e-rule-filter') || closest(target, '.e-rule-sub-filter')) {\n if (this.subFieldElem) {\n target = this.subFieldElem;\n }\n dropDownObj = this.fieldMode === 'DropdownTree' ? getComponent(target, 'dropdowntree') :\n getComponent(target, 'dropdownlist');\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var column = this.fieldMode === 'DropdownTree' ? this.getColumn(dropDownObj.value[0])\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n : this.getColumn(dropDownObj.value);\n if (!this.isImportRules && rule.rules[index].field &&\n rule.rules[index].field.toLowerCase() !== column.field.toLowerCase()) {\n if (!(ruleElem.querySelectorAll('.e-template')) && !(operator.indexOf('null') > -1)\n || (operator.indexOf('empty') > -1)) {\n rule.rules[index].value = '';\n }\n }\n this.selectedColumn = this.getColumn(this.selectedColumn.field);\n rule.rules[index].field = this.selectedColumn.field;\n rule.rules[index].type = this.selectedColumn.type;\n rule.rules[index].label = this.selectedColumn.label;\n var ruleElement = closest(target, '.e-rule-filter');\n ruleElement = ruleElement ? ruleElement : closest(target, '.e-rule-sub-filter');\n var element = ruleElement.nextElementSibling.querySelector('input.e-control');\n element = element ? element : ruleElement.nextElementSibling.nextElementSibling.querySelector('input.e-control');\n operator = getComponent(element, 'dropdownlist').value.toString();\n rule.rules[index].operator = operator;\n // Value Fields\n var valueContainer = ruleElement.nextElementSibling.nextElementSibling;\n var elementCln = valueContainer.querySelectorAll('input.e-control');\n if (elementCln.length < 1) {\n elementCln = valueContainer.querySelectorAll('div.e-control');\n }\n if (elementCln.length < 1) {\n elementCln = valueContainer.querySelectorAll('.e-template');\n }\n eventsArgs = { groupID: groupID, ruleID: ruleID, value: rule.rules[index].field, type: 'field' };\n for (var i_1 = 0; i_1 < elementCln.length; i_1++) {\n if (operator.indexOf('null') > -1 || operator.indexOf('empty') > -1) {\n rule.rules[index].value = null;\n continue;\n }\n this.updateValues(elementCln[i_1], rule.rules[index]);\n }\n if (!this.isImportRules && !this.prvtEvtTgrDaD) {\n this.trigger('change', eventsArgs);\n }\n if (this.allowValidation && rule.rules[index].field && target.parentElement.className.indexOf('e-tooltip') > -1) {\n getComponent(target.parentElement, 'tooltip').destroy();\n }\n this.filterRules(beforeRules, this.getValidRules(this.rule), 'field');\n }\n else if (closest(target, '.e-rule-operator')) {\n dropDownObj = getComponent(target, 'dropdownlist');\n rule.rules[index].operator = dropDownObj.value.toString();\n var inputElem = ruleElem.querySelectorAll('.e-rule-value input.e-control');\n eventsArgs = { groupID: groupID, ruleID: ruleID, value: dropDownObj.value, type: 'operator' };\n if (this.allowValidation && rule.rules[index].operator && target.parentElement.className.indexOf('e-tooltip') > -1) {\n getComponent(target.parentElement, 'tooltip').destroy();\n }\n if (inputElem.length > 1 && !(inputElem[0].className.indexOf('e-template') > -1)) {\n rule.rules[index].value = [];\n }\n for (var i_2 = 0; i_2 < inputElem.length; i_2++) {\n if (rule.rules[index].operator.indexOf('null') > -1 || rule.rules[index].operator.indexOf('empty') > -1) {\n rule.rules[index].value = null;\n continue;\n }\n else if (inputElem[i_2].classList.contains('e-template')) {\n continue;\n }\n this.updateValues(inputElem[i_2], rule.rules[index]);\n }\n if (!this.isImportRules) {\n this.trigger('change', eventsArgs);\n }\n this.filterRules(beforeRules, this.getValidRules(this.rule), 'operator');\n }\n else if (closest(target, '.e-rule-value')) {\n this.ruleValueUpdate(target, selectedValue, rule, index, groupElem, ruleElem, i);\n if (!isNotTrigger) {\n this.filterRules(beforeRules, this.getValidRules(this.rule), 'value');\n }\n }\n };\n QueryBuilder.prototype.filterRules = function (beforeRule, afterRule, type) {\n var beforeRuleStr = JSON.stringify({ condition: beforeRule.condition, not: beforeRule.not, rule: beforeRule.rules });\n var afetrRuleStr = JSON.stringify({ condition: afterRule.condition, not: afterRule.not, rule: afterRule.rules });\n if (beforeRuleStr !== afetrRuleStr) {\n if (!this.isImportRules && !this.prvtEvtTgrDaD) {\n this.trigger('ruleChange', { previousRule: beforeRule, rule: afterRule, type: type });\n }\n }\n };\n QueryBuilder.prototype.ruleValueUpdate = function (target, selectedValue, rule, index, groupElem, ruleElem, i) {\n var eventsArgs;\n var oper;\n var arrOperator = ['in', 'between', 'notin', 'notbetween'];\n if (rule.rules[index].operator) {\n oper = rule.rules[index].operator.toString().toLowerCase();\n }\n if (selectedValue !== null) {\n if (target.className.indexOf('e-multiselect') > -1 && rule.rules[index].type === 'number' &&\n !this.isNotified) {\n var selVal = [];\n var dupSelectedValue = selectedValue;\n for (var k = 0, kLen = dupSelectedValue.length; k < kLen; k++) {\n if (typeof dupSelectedValue[k] === 'string') {\n selVal.push(parseFloat(dupSelectedValue[k]));\n }\n }\n if (selVal.length) {\n selectedValue = selVal;\n }\n }\n if (this.isNotified) {\n rule.rules[index].value = selectedValue;\n eventsArgs = { groupID: groupElem.id, ruleID: ruleElem.id, value: rule.rules[index].value, type: 'value' };\n if (!this.isImportRules) {\n this.trigger('change', eventsArgs);\n }\n }\n else if (target.className.indexOf('e-spin') > -1 || target.className.indexOf('e-numeric') > -1) {\n if (arrOperator.indexOf(oper) > -1) {\n rule.rules[index].value[i] = selectedValue;\n }\n else {\n rule.rules[index].value = selectedValue;\n }\n }\n else if (target.className.indexOf('e-radio') > -1) {\n rule.rules[index].value = selectedValue;\n }\n else if (target.className.indexOf('e-multiselect') > -1) {\n rule.rules[index].value = selectedValue;\n }\n else if (target.className.indexOf('e-textbox') > -1) {\n if (oper === 'in' || oper === 'notin') {\n if (rule.rules[index].type === 'string') {\n rule.rules[index].value = this.processValueString(selectedValue, rule.rules[index].type);\n }\n else {\n rule.rules[index].value = this.processValueString(selectedValue, rule.rules[index].type);\n }\n }\n else {\n rule.rules[index].value = selectedValue;\n }\n }\n else if (target.className.indexOf('e-datepicker') > -1) {\n var format = this.getFormat(this.getColumn(this.selectedColumn.field).format);\n if (format.type) {\n if (arrOperator.indexOf(oper) > -1) {\n if (typeof rule.rules[index].value === 'string') {\n rule.rules[index].value = [];\n }\n rule.rules[index].value[i] = this.intl.formatDate(selectedValue, format);\n }\n else {\n rule.rules[index].value = this.intl.formatDate(selectedValue, format);\n }\n }\n }\n this.validateValue(rule, ruleElem, index);\n }\n else {\n if (target.className.indexOf('e-datepicker') > -1) {\n if (arrOperator.indexOf(oper) > -1) {\n if (typeof rule.rules[index].value === 'string') {\n rule.rules[index].value = [];\n }\n rule.rules[index].value[i] = selectedValue;\n }\n else {\n rule.rules[index].value = selectedValue;\n }\n }\n else {\n rule.rules[index].value = selectedValue;\n }\n }\n };\n QueryBuilder.prototype.validateValue = function (rule, ruleElem, index) {\n if (!isNullOrUndefined(index)) {\n rule = rule.rules[index];\n }\n var isObject = typeof (rule.value) === 'object';\n if (this.allowValidation && (isNullOrUndefined(index) || (isObject ? rule.value.length > 0 : rule.value))) {\n var valElem = ruleElem.querySelectorAll('.e-rule-value .e-control');\n if (valElem.length > 0) {\n if (valElem[0].className.indexOf('e-tooltip') > -1) {\n getComponent(valElem[0], 'tooltip').destroy();\n }\n else if (valElem[0].parentElement.className.indexOf('e-tooltip') > -1) {\n getComponent(valElem[0].parentElement, 'tooltip').destroy();\n }\n if (valElem[1] && valElem[1].parentElement.className.indexOf('e-tooltip') > -1) {\n getComponent(valElem[1].parentElement, 'tooltip').destroy();\n }\n if (valElem[2] && valElem[2].parentElement.className.indexOf('e-tooltip') > -1) {\n getComponent(valElem[2].parentElement, 'tooltip').destroy();\n }\n }\n }\n };\n QueryBuilder.prototype.getFormat = function (format) {\n var formatOptions;\n if (format) {\n if (typeof (format) === 'string') {\n formatOptions = { type: 'dateTime' };\n if (format === 'short' || format === 'yMd') {\n formatOptions.type = 'date';\n formatOptions.skeleton = format;\n }\n else {\n formatOptions.format = format;\n }\n }\n else {\n formatOptions = { type: 'dateTime', skeleton: format.skeleton };\n }\n }\n else {\n formatOptions = { type: 'date', skeleton: 'yMd' };\n }\n return formatOptions;\n };\n QueryBuilder.prototype.findGroupByIdx = function (groupIdx, rule, isRoot) {\n var ruleColl = rule.rules;\n var dupRuleColl = [];\n if (!isRoot) {\n for (var j = 0, jLen = ruleColl.length; j < jLen; j++) {\n rule = ruleColl[j];\n if (rule.rules) {\n dupRuleColl.push(rule);\n }\n }\n return dupRuleColl[groupIdx];\n }\n return rule;\n };\n /**\n * Removes the component from the DOM and detaches all its related event handlers.\n * Also it maintains the initial input element from the DOM.\n *\n * @method destroy\n * @returns {void}\n */\n QueryBuilder.prototype.destroy = function () {\n this.isDestroy = true;\n var queryElement = this.element;\n if (!queryElement) {\n return;\n }\n var element;\n var i;\n var len;\n var tooltip;\n _super.prototype.destroy.call(this);\n element = this.element.querySelectorAll('.e-addrulegroup');\n len = element.length;\n for (i = 0; i < len; i++) {\n getComponent(element[i], 'dropdown-btn').destroy();\n detach(element[i]);\n }\n tooltip = this.element.querySelectorAll('.e-rule-filter .e-control.e-tooltip');\n for (i = 0; i < tooltip.length; i++) {\n getComponent(tooltip[i], 'tooltip').destroy();\n }\n element = this.element.querySelectorAll('.e-rule-filter .e-control:not(.e-tooltip)');\n len = element.length;\n for (i = 0; i < len; i++) {\n if (getComponent(element[i], 'dropdownlist')) {\n getComponent(element[i], 'dropdownlist').destroy();\n }\n else {\n getComponent(element[i], 'dropdowntree').destroy();\n }\n detach(element[i]);\n }\n tooltip = this.element.querySelectorAll('.e-rule-operator .e-control.e-tooltip');\n for (i = 0; i < tooltip.length; i++) {\n getComponent(tooltip[i], 'tooltip').destroy();\n }\n element = this.element.querySelectorAll('.e-rule-operator .e-control:not(.e-tooltip)');\n len = element.length;\n for (i = 0; i < len; i++) {\n if (getComponent(element[i], 'dropdownlist')) {\n getComponent(element[i], 'dropdownlist').destroy();\n detach(element[i]);\n }\n }\n tooltip = this.element.querySelectorAll('.e-rule-value .e-control.e-tooltip');\n for (i = 0; i < tooltip.length; i++) {\n getComponent(tooltip[i], 'tooltip').destroy();\n }\n this.isImportRules = false;\n this.unWireEvents();\n this.levelColl[this.element.id + '_group0'] = [0];\n this.element.innerHTML = '';\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.portals && this.portals.length) {\n this.clearQBTemplate();\n }\n var popupElement = document.querySelectorAll('.qb-dropdownlist.e-popup');\n if (popupElement) {\n for (i = 0; i < popupElement.length; i++) {\n popupElement[i].remove();\n }\n }\n classList(this.element, [], ['e-rtl', 'e-responsive', 'e-device']);\n this.isDestroy = false;\n };\n /**\n * Adds single or multiple rules.\n *\n * @param {RuleModel[]} rule - 'rule collection' to be passed to add the rules.\n * @param {string} groupID - 'group id' to be passed to add the rule in groups.\n * @returns {void}.\n */\n QueryBuilder.prototype.addRules = function (rule, groupID) {\n groupID = this.element.id + '_' + groupID;\n this.isPublic = true;\n for (var i = 0, len = rule.length; i < len; i++) {\n this.addRuleElement(document.getElementById(groupID), rule[i]);\n }\n this.isPublic = false;\n };\n /**\n * Adds single or multiple groups, which contains the collection of rules.\n *\n * @param {RuleModel[]} groups - 'group collection' to be passed to add the groups.\n * @param {string} groupID - 'group id' to be passed to add the groups.\n * @returns {void}.\n */\n QueryBuilder.prototype.addGroups = function (groups, groupID) {\n if (this.isAddSuccess || this.element.querySelectorAll('.e-group-container').length <= this.maxGroupCount) {\n groupID = this.element.id + '_' + groupID;\n var groupElem = document.getElementById(groupID);\n var rule = this.getParentGroup(groupElem);\n var grouplen = groups.length;\n if (grouplen) {\n this.isPublic = true;\n for (var i = 0, len = groups.length; i < len; i++) {\n this.updatedRule = { isLocked: groups[i].isLocked, condition: groups[i].condition,\n not: groups[i].not };\n this.importRules(groups[i], groupElem, false, groups[i].not);\n }\n this.isPublic = false;\n }\n else {\n var condition = 'and';\n var not = false;\n var isLocked = false;\n if (this.updatedRule) {\n condition = this.updatedRule.condition;\n not = this.updatedRule.not;\n isLocked = this.updatedRule.isLocked;\n }\n if (this.groupIndex < 0) {\n if (this.enableNotCondition) {\n rule.rules.push({ 'condition': condition, 'not': not, rules: [] });\n }\n else {\n rule.rules.push({ 'condition': condition, rules: [] });\n }\n }\n else {\n if (this.enableNotCondition) {\n rule.rules.splice(this.groupIndex + 1, 0, { condition: condition, not: not, rules: [], isLocked: isLocked });\n }\n else {\n rule.rules.splice(this.groupIndex + 1, 0, { condition: condition, rules: [], isLocked: isLocked });\n }\n }\n }\n if (!this.headerTemplate) {\n this.disableRuleCondition(groupElem, rule, null, this.enableSeparateConnector ? true : null);\n }\n }\n };\n QueryBuilder.prototype.initWrapper = function () {\n this.isInitialLoad = true;\n if (this.cssClass) {\n addClass([this.element], this.cssClass.replace(/\\s+/g, ' ').trim().split(' '));\n }\n if (this.enableSeparateConnector) {\n addClass([this.element], 'e-multi-connector');\n }\n if (this.enableRtl) {\n addClass([this.element], 'e-rtl');\n }\n if (this.width) {\n this.element.style.width = this.width;\n }\n if (this.height) {\n this.element.style.height = this.height;\n }\n if (this.rule.rules.length) {\n this.isImportRules = true;\n }\n else {\n this.addGroupElement(false, this.element);\n }\n if (Browser.isDevice || this.displayMode === 'Vertical') {\n if (Browser.isDevice) {\n this.element.style.width = '100%';\n this.element.classList.add('e-device');\n }\n removeClass(this.element.querySelectorAll('.e-rule-container'), 'e-horizontal-mode');\n addClass(this.element.querySelectorAll('.e-rule-container'), 'e-vertical-mode');\n this.displayMode = 'Vertical';\n }\n else {\n this.displayMode = 'Horizontal';\n }\n if (this.summaryView) {\n if (this.isImportRules) {\n this.renderSummary();\n }\n else {\n this.renderSummaryCollapse();\n }\n }\n else {\n if (this.columns && this.columns.length && this.isImportRules) {\n this.addGroupElement(false, this.element, this.rule.condition, false, this.rule.not, false, this.rule);\n var mRules = extend({}, this.rule, {}, true);\n this.isRefreshed = true;\n this.setGroupRules(mRules);\n this.isRefreshed = false;\n }\n else if (this.columns && this.columns.length) {\n this.addRuleElement(this.element.querySelector('.e-group-container'), {});\n }\n this.notGroupRtl();\n if (this.readonly) {\n this.enableReadonly();\n }\n var buttons = this.element.querySelectorAll('label.e-btn');\n var button = void 0;\n for (var i = 0; i < buttons.length; i++) {\n button = buttons.item(i);\n rippleEffect(button, { selector: '.e-btn' });\n }\n }\n };\n QueryBuilder.prototype.renderSummary = function () {\n var contentElem = this.createElement('div', {\n attrs: {\n class: 'e-summary-content',\n id: this.element.id + '_summary_content'\n }\n });\n var textElem = this.createElement('textarea', { attrs: { class: 'e-summary-text', readonly: 'true' }, styles: 'max-height:500px' });\n var editElem = this.createElement('button', { attrs: { type: 'button', class: 'e-edit-rule e-css e-btn e-small e-flat e-primary' } });\n var divElem = this.createElement('div', { attrs: { class: 'e-summary-btndiv' } });\n contentElem.appendChild(textElem);\n textElem.textContent = this.getSqlFromRules(this.rule);\n editElem.textContent = this.l10n.getConstant('Edit');\n divElem.appendChild(editElem);\n contentElem.appendChild(divElem);\n this.element.appendChild(contentElem);\n };\n QueryBuilder.prototype.renderSummaryCollapse = function () {\n var collapseElem = this.createElement('div', {\n attrs: {\n class: 'e-collapse-rule e-icons',\n title: this.l10n.getConstant('SummaryViewTitle')\n }\n });\n this.element.querySelector('.e-group-header').appendChild(collapseElem);\n };\n QueryBuilder.prototype.columnSort = function () {\n if (this.sortDirection.toLowerCase() === 'descending') {\n this.columns = new DataManager(this.columns).executeLocal(new Query().sortByDesc('field'));\n }\n else if (this.sortDirection.toLowerCase() === 'ascending') {\n this.columns = new DataManager(this.columns).executeLocal(new Query().sortBy('field'));\n }\n };\n QueryBuilder.prototype.onChangeNotGroup = function () {\n this.element.innerHTML = '';\n this.groupIdCounter = 0;\n if (!this.headerTemplate) {\n if (this.enableNotCondition) {\n var inputElem = this.createElement('button', { attrs: { type: 'button', class: 'e-qb-toggle' } });\n if (this.groupElem.querySelector('.e-btn-group')) {\n this.groupElem.querySelector('.e-btn-group').insertBefore(inputElem, this.groupElem.querySelector('.e-btngroup-and'));\n }\n }\n else {\n this.groupElem.querySelector('.e-qb-toggle').remove();\n }\n }\n this.setProperties({ rule: this.checkNotGroup(this.rule) }, true);\n this.initWrapper();\n };\n QueryBuilder.prototype.notGroupRtl = function () {\n if (this.enableRtl) {\n addClass(this.element.querySelectorAll('.e-btn-group'), 'e-rtl');\n }\n else {\n removeClass(this.element.querySelectorAll('.e-btn-group'), 'e-rtl');\n }\n };\n QueryBuilder.prototype.checkNotGroup = function (rule) {\n var orgRule;\n if (rule.rules) {\n for (var i = 0; i < rule.rules.length; i++) {\n orgRule = rule.rules[i];\n orgRule = this.checkNotGroup(orgRule);\n rule.rules[i] = orgRule;\n }\n }\n if (!isNullOrUndefined(rule.not)) {\n if (this.enableNotCondition) {\n rule.not = false;\n }\n delete rule.not;\n }\n else if (this.enableNotCondition && !isNullOrUndefined(rule.condition)) {\n rule.not = false;\n }\n return rule;\n };\n QueryBuilder.prototype.onPropertyChanged = function (newProp, oldProp) {\n var properties = Object.keys(newProp);\n var groupElem = this.element.querySelector('.e-group-container');\n var summaryElem = this.element.querySelector('.e-summary-content');\n for (var _i = 0, properties_1 = properties; _i < properties_1.length; _i++) {\n var prop = properties_1[_i];\n switch (prop) {\n case 'summaryView':\n if (newProp.summaryView) {\n groupElem.style.display = 'none';\n if (this.element.querySelectorAll('.e-summary-content').length < 1) {\n this.renderSummary();\n summaryElem = this.element.querySelector('.e-summary-content');\n }\n else {\n this.element.querySelector('.e-summary-text').textContent = this.getSqlFromRules(this.rule);\n }\n summaryElem.style.display = 'block';\n }\n else {\n if (groupElem.querySelectorAll('.e-collapse-rule').length > -1) {\n this.renderSummaryCollapse();\n }\n groupElem.style.display = 'block';\n summaryElem.style.display = 'none';\n }\n break;\n case 'displayMode':\n this.refresh();\n break;\n case 'showButtons':\n if (!isNullOrUndefined(newProp.showButtons.lockGroup)) {\n if (newProp.showButtons.lockGroup) {\n removeClass(this.element.querySelectorAll('.e-lock-grp-btn'), 'e-button-hide');\n }\n else {\n addClass(this.element.querySelectorAll('.e-lock-grp-btn'), 'e-button-hide');\n }\n }\n if (!isNullOrUndefined(newProp.showButtons.lockRule)) {\n if (newProp.showButtons.lockRule) {\n removeClass(this.element.querySelectorAll('.e-lock-rule-btn'), 'e-button-hide');\n }\n else {\n addClass(this.element.querySelectorAll('.e-lock-rule-btn'), 'e-button-hide');\n }\n }\n if (!isNullOrUndefined(newProp.showButtons.cloneGroup)) {\n if (newProp.showButtons.cloneGroup) {\n removeClass(this.element.querySelectorAll('.e-clone-grp-btn'), 'e-button-hide');\n }\n else {\n addClass(this.element.querySelectorAll('.e-clone-grp-btn'), 'e-button-hide');\n }\n }\n if (!isNullOrUndefined(newProp.showButtons.cloneRule)) {\n if (newProp.showButtons.cloneRule) {\n removeClass(this.element.querySelectorAll('.e-clone-rule-btn'), 'e-button-hide');\n }\n else {\n addClass(this.element.querySelectorAll('.e-clone-rule-btn'), 'e-button-hide');\n }\n }\n if (!isNullOrUndefined(newProp.showButtons.ruleDelete)) {\n if (newProp.showButtons.ruleDelete) {\n removeClass(this.element.querySelectorAll('.e-rule-delete'), 'e-button-hide');\n }\n else {\n addClass(this.element.querySelectorAll('.e-rule-delete'), 'e-button-hide');\n }\n }\n if (!isNullOrUndefined(newProp.showButtons.groupDelete)) {\n if (newProp.showButtons.groupDelete) {\n removeClass(this.element.querySelectorAll('.e-deletegroup'), 'e-button-hide');\n }\n else {\n addClass(this.element.querySelectorAll('.e-deletegroup'), 'e-button-hide');\n }\n }\n break;\n case 'cssClass':\n if (oldProp.cssClass) {\n removeClass([this.element], oldProp.cssClass.split(' '));\n }\n if (newProp.cssClass) {\n addClass([this.element], newProp.cssClass.replace(/\\s+/g, ' ').trim().split(' '));\n }\n break;\n case 'enableRtl':\n if (newProp.enableRtl) {\n addClass([this.element], 'e-rtl');\n this.notGroupRtl();\n }\n else {\n removeClass([this.element], 'e-rtl');\n this.notGroupRtl();\n }\n break;\n case 'enablePersistence':\n this.enablePersistence = newProp.enablePersistence;\n break;\n case 'dataSource':\n this.dataSource = newProp.dataSource;\n this.refresh();\n break;\n case 'columns':\n this.columns = newProp.columns;\n this.columnSort();\n this.updateSubFieldsFromColumns(this.columns);\n break;\n case 'sortDirection':\n this.sortDirection = newProp.sortDirection;\n this.columnSort();\n break;\n case 'maxGroupCount':\n this.maxGroupCount = newProp.maxGroupCount;\n break;\n case 'height':\n this.height = newProp.height;\n this.element.style.height = this.height;\n break;\n case 'rule':\n if (this.rule.rules.length === 0 && !isNullOrUndefined(this.rule)) {\n this.reset();\n }\n this.setProperties({ rule: newProp.rule }, true);\n newProp.rule = this.getRuleCollection(this.rule, false);\n this.setRules(this.rule);\n break;\n case 'width':\n this.width = newProp.width;\n this.element.style.width = this.width;\n break;\n case 'locale':\n this.locale = newProp.locale;\n this.intl = new Internationalization(this.locale);\n this.isLocale = true;\n this.refresh();\n this.isLocale = false;\n break;\n case 'enableNotCondition':\n this.onChangeNotGroup();\n break;\n case 'readonly':\n this.isReadonly = newProp.readonly;\n this.enableReadonly();\n break;\n case 'allowDragAndDrop':\n this.allowDragAndDrop = newProp.allowDragAndDrop;\n this.refresh();\n break;\n case 'enableSeparateConnector':\n this.enableSeparateConnector = newProp.enableSeparateConnector;\n this.refresh();\n break;\n }\n }\n };\n QueryBuilder.prototype.preRender = function () {\n this.element.id = this.element.id || getUniqueID('ej2-querybuilder');\n this.defaultLocale = {\n StartsWith: 'Starts With',\n DoesNotStartWith: 'Does Not Start With',\n EndsWith: 'Ends With',\n DoesNotEndWith: 'Does Not End With',\n Contains: 'Contains',\n DoesNotContain: 'Does Not Contain',\n NotLike: 'Not Like',\n Like: 'Like',\n Equal: 'Equal',\n NotEqual: 'Not Equal',\n LessThan: 'Less Than',\n LessThanOrEqual: 'Less Than Or Equal',\n GreaterThan: 'Greater Than',\n GreaterThanOrEqual: 'Greater Than Or Equal',\n Between: 'Between',\n NotBetween: 'Not Between',\n In: 'In',\n NotIn: 'Not In',\n Remove: 'REMOVE',\n SelectField: 'Select a field',\n SelectOperator: 'Select operator',\n DeleteRule: 'Remove this condition',\n DeleteGroup: 'Delete group',\n AddGroup: 'Add Group',\n AddCondition: 'Add Condition',\n Edit: 'EDIT',\n ValidationMessage: 'This field is required',\n SummaryViewTitle: 'Summary View',\n OtherFields: 'Other Fields',\n AND: 'AND',\n OR: 'OR',\n NOT: 'NOT',\n SelectValue: 'Enter Value',\n IsEmpty: 'Is Empty',\n IsNotEmpty: 'Is Not Empty',\n IsNull: 'Is Null',\n IsNotNull: 'Is Not Null',\n True: 'true',\n False: 'false',\n AddButton: 'Add Group/Condition',\n CloneGroup: 'Clone Group',\n LockGroup: 'Lock Group',\n CloneRule: 'Clone Rule',\n LockRule: 'Lock Rule',\n UnlockRule: 'Unlock Rule',\n UnlockGroup: 'Unlock Group'\n };\n this.l10n = new L10n('querybuilder', this.defaultLocale, this.locale);\n this.intl = new Internationalization(this.locale);\n this.groupIdCounter = 0;\n this.subFilterCounter = 0;\n this.ruleIdCounter = 0;\n this.btnGroupId = 0;\n this.isImportRules = false;\n this.parser = [];\n this.customOperators = {\n stringOperator: [\n { value: 'startswith', key: this.l10n.getConstant('StartsWith') },\n { value: 'notstartswith', key: this.l10n.getConstant('DoesNotStartWith') },\n { value: 'endswith', key: this.l10n.getConstant('EndsWith') },\n { value: 'notendswith', key: this.l10n.getConstant('DoesNotEndWith') },\n { value: 'contains', key: this.l10n.getConstant('Contains') },\n { value: 'notcontains', key: this.l10n.getConstant('DoesNotContain') },\n { value: 'equal', key: this.l10n.getConstant('Equal') },\n { value: 'notequal', key: this.l10n.getConstant('NotEqual') },\n { value: 'in', key: this.l10n.getConstant('In') },\n { value: 'notin', key: this.l10n.getConstant('NotIn') },\n { value: 'isempty', key: this.l10n.getConstant('IsEmpty') },\n { value: 'isnotempty', key: this.l10n.getConstant('IsNotEmpty') }\n ],\n dateOperator: [\n { value: 'equal', key: this.l10n.getConstant('Equal') },\n { value: 'greaterthan', key: this.l10n.getConstant('GreaterThan') },\n { value: 'greaterthanorequal', key: this.l10n.getConstant('GreaterThanOrEqual') },\n { value: 'lessthan', key: this.l10n.getConstant('LessThan') },\n { value: 'lessthanorequal', key: this.l10n.getConstant('LessThanOrEqual') },\n { value: 'notequal', key: this.l10n.getConstant('NotEqual') },\n { value: 'between', key: this.l10n.getConstant('Between') },\n { value: 'notbetween', key: this.l10n.getConstant('NotBetween') }\n ],\n booleanOperator: [\n { value: 'equal', key: this.l10n.getConstant('Equal') },\n { value: 'notequal', key: this.l10n.getConstant('NotEqual') }\n ],\n numberOperator: [\n { value: 'equal', key: this.l10n.getConstant('Equal') },\n { value: 'greaterthanorequal', key: this.l10n.getConstant('GreaterThanOrEqual') },\n { value: 'greaterthan', key: this.l10n.getConstant('GreaterThan') },\n { value: 'between', key: this.l10n.getConstant('Between') },\n { value: 'lessthan', key: this.l10n.getConstant('LessThan') },\n { value: 'notbetween', key: this.l10n.getConstant('NotBetween') },\n { value: 'lessthanorequal', key: this.l10n.getConstant('LessThanOrEqual') },\n { value: 'notequal', key: this.l10n.getConstant('NotEqual') },\n { value: 'in', key: this.l10n.getConstant('In') },\n { value: 'notin', key: this.l10n.getConstant('NotIn') }\n ]\n };\n this.operators = {\n equal: '=', notequal: '!=', greaterthan: '>', greaterthanorequal: '>=', lessthan: '<', in: 'IN', notin: 'NOT IN',\n lessthanorequal: '<=', startswith: 'LIKE', endswith: 'LIKE', between: 'BETWEEN', notbetween: 'NOT BETWEEN', contains: 'LIKE',\n isnull: 'IS NULL', isnotnull: 'IS NOT NULL', isempty: 'IS EMPTY', isnotempty: 'IS NOT EMPTY', notstartswith: 'NOT LIKE',\n notendswith: 'NOT LIKE', notcontains: 'NOT LIKE'\n };\n this.sqlOperators = {\n equal: '=', notequal: '!=', greaterthan: '>', greaterthanorequal: '>=', lessthan: '<', in: this.l10n.getConstant('In').toUpperCase(),\n notin: this.l10n.getConstant('NotIn').toUpperCase(), lessthanorequal: '<=', startswith: this.l10n.getConstant('Like').toUpperCase(),\n endswith: this.l10n.getConstant('Like').toUpperCase(), between: this.l10n.getConstant('Between').toUpperCase(),\n notbetween: this.l10n.getConstant('NotBetween').toUpperCase(), contains: this.l10n.getConstant('Like').toUpperCase(),\n isnull: this.l10n.getConstant('IsNull').toUpperCase(), isnotnull: this.l10n.getConstant('IsNotNull').toUpperCase(),\n isempty: this.l10n.getConstant('IsEmpty').toUpperCase(), isnotempty: this.l10n.getConstant('IsNotEmpty').toUpperCase(),\n notstartswith: this.l10n.getConstant('NotLike').toUpperCase(), notendswith: this.l10n.getConstant('NotLike').toUpperCase(),\n notcontains: this.l10n.getConstant('NotLike').toUpperCase()\n };\n if (!this.fields) {\n this.fields = { text: 'label', value: 'field' };\n }\n };\n QueryBuilder.prototype.render = function () {\n this.levelColl = {};\n this.items = [\n {\n text: this.l10n.getConstant('AddGroup'),\n iconCss: 'e-icons e-add-icon e-addgroup'\n },\n {\n text: this.l10n.getConstant('AddCondition'),\n iconCss: 'e-icons e-add-icon e-addrule'\n }\n ];\n this.ruleElem = this.ruleTemplate();\n this.groupElem = this.groupTemplate();\n var stringOper = [\n { value: 'isnull', key: this.l10n.getConstant('IsNull') },\n { value: 'isnotnull', key: this.l10n.getConstant('IsNotNull') }\n ];\n var numberOper = [\n { value: 'isnull', key: this.l10n.getConstant('IsNull') },\n { value: 'isnotnull', key: this.l10n.getConstant('IsNotNull') }\n ];\n this.customOperators['stringOperator'] = this.customOperators['stringOperator'].concat(stringOper); // tslint:disable-line\n this.customOperators['numberOperator'] = this.customOperators['numberOperator'].concat(numberOper); // tslint:disable-line\n if (this.dataSource instanceof DataManager) {\n this.dataManager = this.dataSource;\n this.executeDataManager(new Query().take(1));\n }\n else {\n this.dataManager = new DataManager(this.dataSource);\n this.dataColl = this.dataManager.executeLocal(new Query());\n this.initControl();\n }\n this.renderComplete();\n if (this.allowDragAndDrop) {\n this.initializeDrag();\n }\n };\n QueryBuilder.prototype.initializeDrag = function () {\n this.draggable = new Draggable(this.element, {\n dragTarget: '.e-drag-qb-rule',\n distance: 5,\n helper: this.helper.bind(this),\n dragStart: this.dragStartHandler.bind(this),\n drag: this.dragHandler.bind(this),\n dragStop: this.dragStopHandler.bind(this),\n isReplaceDragEle: true,\n isPreventSelect: false,\n abort: '.e-parent-header',\n isDragScroll: true\n });\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n QueryBuilder.prototype.helper = function (e) {\n var target = this.draggable.currentStateTarget;\n if (!target.classList.contains('e-drag-qb-rule') || (target.classList.contains('e-drag-qb-rule') && closest(target, '.e-disable'))) {\n return false;\n }\n var visualElement = this.createElement('div', {\n className: 'e-cloneproperties e-draganddrop e-dragclone',\n styles: 'height:\"auto\", z-index:2, width:' + this.element.offsetWidth\n });\n var cloneElement;\n if (this.draggable.currentStateTarget.parentElement.classList.contains('e-group-header')) {\n cloneElement = closest(target, '.e-group-container').cloneNode(true);\n closest(target, '.e-group-container').classList.add('e-qb-dragging-rule');\n }\n else {\n visualElement.classList.add('e-group-body');\n cloneElement = this.createElement('div', { className: 'e-rule-container' });\n var ruleElement = closest(target, '.e-rule-field').cloneNode(true);\n cloneElement.appendChild(ruleElement);\n closest(target, '.e-rule-field').classList.add('e-qb-dragging-rule');\n }\n visualElement.appendChild(cloneElement);\n var childElements = visualElement.querySelectorAll('*');\n childElements.forEach(function (child) {\n child.removeAttribute('id');\n });\n this.element.appendChild(visualElement);\n return visualElement;\n };\n QueryBuilder.prototype.dragStartHandler = function (e) {\n this.draggedRule = e.target;\n this.isDragEventPrevent = false;\n document.body.classList.add('e-prevent-select');\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this.dragElement = e.dragElement;\n var rule = closest(e.target, '.e-rule-container');\n var group = closest(e.target, '.e-group-container');\n var dragEventArgs = { dragRuleID: rule !== null ? rule.id : group.id, dragGroupID: group.id, cancel: false };\n this.trigger('dragStart', dragEventArgs);\n this.isDragEventPrevent = dragEventArgs.cancel;\n };\n QueryBuilder.prototype.dragHandler = function (e) {\n if (this.isDragEventPrevent) {\n return;\n }\n var borderLineElem = this.element.querySelectorAll('.e-drag-rule-bottom-line');\n borderLineElem.forEach(function (ele) {\n ele.classList.remove('e-drag-rule-bottom-line');\n });\n borderLineElem = this.element.querySelectorAll('.e-drag-rule-top-line');\n borderLineElem.forEach(function (ele) {\n ele.classList.remove('e-drag-rule-top-line');\n });\n if (isNullOrUndefined(e.target)) {\n return;\n }\n if (e.target.nodeName === 'HTML' || closest(e.target, '.e-qb-dragging-rule') || closest(e.target, '.e-group-header') ||\n !closest(e.target, '#' + this.element.id) || closest(e.target, '.e-disable') || (e.target.parentElement && e.target.parentElement.classList.contains('e-btn-group') && this.enableSeparateConnector)) {\n this.dragElement.classList.add('e-notallowedcur');\n return;\n }\n else {\n this.dragElement.classList.remove('e-notallowedcur');\n }\n var targetElem = closest(e.target, '.e-rule-container');\n var grpElem = closest(e.target, '.e-group-container');\n if (targetElem) {\n var rect = targetElem.getBoundingClientRect();\n var mouseY = e.event.clientY || e.event.changedTouches[0].clientY;\n var distanceToTop = mouseY - rect.top;\n var distanceToBottom = rect.bottom - mouseY;\n var threshold = 20; // Adjust as needed\n if (distanceToTop < threshold) {\n targetElem.classList.add('e-drag-rule-top-line');\n }\n else if (distanceToBottom < threshold) {\n targetElem.classList.add('e-drag-rule-bottom-line');\n }\n }\n else if (e.target.classList.contains('e-rule-list') && e.target.children.length === 0) {\n e.target.classList.add('e-drag-rule-bottom-line');\n }\n else if (e.target.classList.contains('e-rule-list') && e.target.children[0].classList.contains('e-group-container')) {\n var rect = e.target.children[0].getBoundingClientRect();\n var mouseY = e.event.clientY || e.event.changedTouches[0].clientY;\n var distanceToTop = mouseY - rect.top;\n var threshold = 20; // Adjust as needed\n if (distanceToTop < threshold) {\n e.target.classList.add('e-drag-rule-top-line');\n }\n }\n else if (closest(e.target, '.e-group-container') || e.target.classList.contains('e-group-container')) {\n if (!grpElem) {\n grpElem = e.target;\n }\n if (grpElem.id.indexOf('group0') > -1) {\n var rect = e.target.getBoundingClientRect();\n var mouseY = e.event.clientY || e.event.changedTouches[0].clientY;\n var distanceToBottom = rect.bottom - mouseY;\n var threshold = 20; // Adjust as needed\n if (distanceToBottom < threshold) {\n e.target.classList.add('e-drag-rule-bottom-line');\n }\n }\n }\n var dragEventArgs = { dragRuleID: targetElem !== null ? targetElem.id : grpElem !== null ? grpElem.id : null,\n dragGroupID: grpElem !== null ? grpElem.id : null, cancel: false };\n this.trigger('drag', dragEventArgs);\n this.isDragEventPrevent = dragEventArgs.cancel;\n };\n QueryBuilder.prototype.dragStopHandler = function (e) {\n var _this = this;\n if (this.isDragEventPrevent) {\n return;\n }\n var targetGroup = closest(e.target, '.e-rule-container');\n if (isNullOrUndefined(targetGroup) && e.target.parentElement &&\n e.target.parentElement.classList.contains('e-btn-group') && this.enableSeparateConnector) {\n targetGroup = closest(e.target.parentElement.previousElementSibling, '.e-rule-container');\n }\n var isPreventelem;\n if (!isNullOrUndefined(e.helper)) {\n isPreventelem = closest(e.helper, '.e-notallowedcur');\n }\n var prevRule;\n if (!isPreventelem) {\n var targetGrp = closest(e.target, '.e-group-container');\n var dropEventArgs = { cancel: false, dropRuleID: targetGroup !== null ? targetGroup.id\n : targetGrp !== null ? targetGrp.id : null, dropGroupID: targetGrp !== null ? targetGrp.id : null };\n this.trigger('drop', dropEventArgs);\n if (dropEventArgs.cancel) {\n isPreventelem = true;\n }\n prevRule = this.getValidRules();\n }\n this.prvtEvtTgrDaD = true;\n var tgrt = this.enableSeparateConnector && e.target.parentElement &&\n e.target.parentElement.classList.contains('e-btn-group') ? e.target.parentElement.previousElementSibling : e.target;\n if (targetGroup && !isPreventelem) {\n var groupId_1 = targetGroup.id.split(this.element.id + '_')[1].split('_')[0];\n if (this.draggable.currentStateTarget.parentElement.classList.contains('e-rule-field') ||\n this.draggable.currentStateTarget.parentElement.classList.contains('e-group-header')) {\n var rule = void 0;\n if (this.draggable.currentStateTarget.parentElement.classList.contains('e-group-header')) {\n rule = this.getGroup(this.draggedRule);\n this.deleteGroup(closest(this.draggedRule, '.e-group-container'));\n }\n else {\n rule = this.getRule(this.draggedRule);\n this.deleteRule(this.draggedRule);\n }\n var groupRule = extend([], this.getGroup(targetGroup), [], true);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (groupRule.properties) {\n groupRule = groupRule.properties;\n }\n var groupElem = closest(targetGroup, '.e-group-container');\n var nestGrpElem = groupElem.querySelectorAll('.e-group-container');\n nestGrpElem.forEach(function (ele) {\n if (_this.element.querySelector('#' + ele.id)) {\n _this.deleteGroup(ele);\n }\n });\n var ruleElems = groupElem.querySelectorAll('.e-rule-container');\n var ruleIds = [];\n var dropInd = void 0;\n for (var i = 0; i < ruleElems.length; i++) {\n if (ruleElems[i].classList.contains('e-drag-rule-top-line') ||\n ruleElems[i].classList.contains('e-drag-rule-bottom-line')) {\n dropInd = i;\n }\n ruleIds.push(ruleElems[i].id.split(this.element.id + '_')[1]);\n }\n this.deleteRules(ruleIds);\n if (targetGroup.classList.contains('e-drag-rule-top-line')) {\n groupRule.rules.splice(dropInd, 0, rule);\n }\n else {\n groupRule.rules.splice(dropInd + 1, 0, rule);\n }\n groupRule.rules.forEach(function (rule) {\n if (_this.enableSeparateConnector) {\n if (!rule.rules) {\n _this.addRules([rule], groupId_1);\n }\n else {\n _this.addGroups([rule], groupId_1);\n }\n }\n else {\n if (rule.condition) {\n _this.addGroups([rule], groupId_1);\n }\n else {\n _this.addRules([rule], groupId_1);\n }\n }\n });\n }\n }\n else if (tgrt.classList.contains('e-rule-list') && tgrt.children.length === 0 && !isPreventelem) {\n var groupElem = closest(tgrt, '.e-group-container');\n var groupId = groupElem.id.split(this.element.id + '_')[1].split('_')[0];\n var rule = void 0;\n if (this.draggable.currentStateTarget.parentElement.classList.contains('e-group-header')) {\n rule = this.getGroup(this.draggedRule);\n this.deleteGroup(closest(this.draggedRule, '.e-group-container'));\n }\n else {\n rule = this.getRule(this.draggedRule);\n this.deleteRule(this.draggedRule);\n }\n if (this.enableSeparateConnector) {\n if (!rule.rules) {\n this.addRules([rule], groupId);\n }\n else {\n this.addGroups([rule], groupId);\n }\n }\n else {\n if (rule.condition) {\n this.addGroups([rule], groupId);\n }\n else {\n this.addRules([rule], groupId);\n }\n }\n }\n else if (tgrt.classList.contains('e-rule-list') && tgrt.children[0].classList.contains('e-group-container') && !isPreventelem) {\n var groupElem = closest(tgrt, '.e-group-container');\n var groupId_2 = groupElem.id.split(this.element.id + '_')[1].split('_')[0];\n var rule = void 0;\n if (this.draggable.currentStateTarget.parentElement.classList.contains('e-group-header')) {\n rule = this.getGroup(this.draggedRule);\n this.deleteGroup(closest(this.draggedRule, '.e-group-container'));\n }\n else {\n rule = this.getRule(this.draggedRule);\n this.deleteRule(this.draggedRule);\n }\n var groupRule = extend([], this.getGroup(tgrt), [], true);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (groupRule.properties) {\n groupRule = groupRule.properties;\n }\n var groupElems = tgrt.querySelectorAll('.e-group-container');\n groupElems.forEach(function (ele) {\n if (_this.element.querySelector('#' + ele.id)) {\n _this.deleteGroup(ele);\n }\n });\n var ruleElems = groupElem.querySelectorAll('.e-rule-container');\n ruleElems.forEach(function (ele) {\n if (_this.element.querySelector('#' + ele.id)) {\n _this.deleteRule(ele);\n }\n });\n if (this.draggable.currentStateTarget.parentElement.classList.contains('e-group-header')) {\n this.addGroups([rule], groupId_2);\n }\n else {\n this.addRules([rule], groupId_2);\n }\n groupRule.rules.forEach(function (rule) {\n if (_this.enableSeparateConnector) {\n if (!rule.rules) {\n _this.addRules([rule], groupId_2);\n }\n else {\n _this.addGroups([rule], groupId_2);\n }\n }\n else {\n if (rule.condition) {\n _this.addGroups([rule], groupId_2);\n }\n else {\n _this.addRules([rule], groupId_2);\n }\n }\n });\n }\n else if ((closest(e.target, '.e-group-container') || e.target.classList.contains('e-group-container')) && !isPreventelem) {\n var rule = void 0;\n targetGroup = closest(e.target, '.e-group-container');\n if (!targetGroup && e.target.classList.contains('e-group-container')) {\n targetGroup = e.target;\n }\n var groupId = targetGroup.id.split(this.element.id + '_')[1].split('_')[0];\n if (groupId === 'group0') {\n if (this.draggable.currentStateTarget.parentElement.classList.contains('e-group-header')) {\n rule = this.getGroup(this.draggedRule);\n this.deleteGroup(closest(this.draggedRule, '.e-group-container'));\n }\n else {\n rule = this.getRule(this.draggedRule);\n this.deleteRule(this.draggedRule);\n }\n if (this.enableSeparateConnector) {\n if (!rule.rules) {\n this.addRules([rule], groupId);\n }\n else {\n this.addGroups([rule], groupId);\n }\n }\n else {\n if (rule.condition) {\n this.addGroups([rule], groupId);\n }\n else {\n this.addRules([rule], groupId);\n }\n }\n }\n }\n if (!isPreventelem) {\n this.trigger('ruleChange', { previousRule: prevRule, rule: this.getValidRules(), type: 'drag-and-drop' });\n }\n this.prvtEvtTgrDaD = false;\n document.body.classList.remove('e-prevent-select');\n var borderLineElem = this.element.querySelectorAll('.e-drag-rule-bottom-line');\n borderLineElem.forEach(function (ele) {\n ele.classList.remove('e-drag-rule-bottom-line');\n });\n borderLineElem = this.element.querySelectorAll('.e-drag-rule-top-line');\n borderLineElem.forEach(function (ele) {\n ele.classList.remove('e-drag-rule-top-line');\n });\n borderLineElem = this.element.querySelectorAll('.e-qb-dragging-rule');\n borderLineElem.forEach(function (ele) {\n ele.classList.remove('e-qb-dragging-rule');\n });\n if (e.helper && e.helper.classList.contains('e-cloneproperties') && document.querySelector('.' + e.helper.classList[0])) {\n remove(e.helper);\n }\n if (this.enableSeparateConnector) {\n this.refresh();\n }\n };\n QueryBuilder.prototype.templateParser = function (template) {\n if (template) {\n try {\n if (typeof template !== 'function' && document.querySelectorAll(template).length) {\n return templateCompiler(document.querySelector(template).innerHTML.trim());\n }\n else {\n return compile(template);\n }\n }\n catch (error) {\n return templateCompiler(template);\n }\n }\n return undefined;\n };\n QueryBuilder.prototype.executeDataManager = function (query) {\n var _this = this;\n var data = this.dataManager.executeQuery(query);\n var deferred = new Deferred();\n data.then(function (e) {\n if (e.actual && e.actual.result) {\n _this.dataColl = e.actual.result;\n }\n else {\n _this.dataColl = e.result;\n }\n _this.initControl();\n }).catch(function (e) {\n deferred.reject(e);\n });\n };\n QueryBuilder.prototype.initControl = function () {\n this.initialize();\n this.initWrapper();\n this.wireEvents();\n };\n QueryBuilder.prototype.wireEvents = function () {\n var wrapper = this.getWrapper();\n EventHandler.add(wrapper, 'click', this.clickEventHandler, this);\n EventHandler.add(wrapper, 'focusout', this.focusEventHandler, this);\n EventHandler.add(wrapper, 'focusin', this.focusEventHandler, this);\n EventHandler.add(this.element, 'keydown', this.keyBoardHandler, this);\n EventHandler.add(document, 'keydown', this.keyBoardHandler, this);\n };\n QueryBuilder.prototype.unWireEvents = function () {\n var wrapper = this.getWrapper();\n EventHandler.remove(wrapper, 'click', this.clickEventHandler);\n EventHandler.remove(wrapper, 'focusout', this.focusEventHandler);\n EventHandler.remove(wrapper, 'focusin', this.focusEventHandler);\n EventHandler.remove(this.element, 'keydown', this.keyBoardHandler);\n EventHandler.remove(document, 'keydown', this.keyBoardHandler);\n };\n QueryBuilder.prototype.getParentGroup = function (target, isParent) {\n var groupLevel = (target instanceof Element) ? this.levelColl[target.id] : this.levelColl[\"\" + target];\n var len = isParent ? groupLevel.length - 1 : groupLevel.length;\n var rule = this.rule;\n for (var i = 0; i < len; i++) {\n rule = this.findGroupByIdx(groupLevel[i], rule, i === 0);\n }\n return rule;\n };\n /**\n * Delete the Group\n *\n * @param {Element | string} target - 'target' to be passed to delete the group.\n * @returns {void}\n */\n QueryBuilder.prototype.deleteGroup = function (target) {\n var _this = this;\n var groupElem = target;\n var groupId;\n if (typeof target === 'string') {\n groupId = this.element.id + '_' + target;\n target = document.getElementById(groupId);\n groupId = groupId.replace(this.element.id + '_', '');\n }\n else {\n groupId = groupElem.id.replace(this.element.id + '_', '');\n }\n if (groupId === 'group0' || !target) {\n return;\n }\n var args = { groupID: groupId, cancel: false, type: 'deleteGroup' };\n if (!this.isImportRules && !this.prvtEvtTgrDaD) {\n this.trigger('beforeChange', args, function (observedChangeArgs) {\n _this.deleteGroupSuccessCallBack(observedChangeArgs, target);\n });\n }\n else {\n this.deleteGroupSuccessCallBack(args, target);\n }\n };\n QueryBuilder.prototype.deleteGroupSuccessCallBack = function (args, target) {\n if (!args.cancel) {\n var groupElem = target;\n var rule = this.getParentGroup(groupElem, true);\n var index = 0;\n var i = void 0;\n var len = void 0;\n var beforeRules = this.getValidRules(this.rule);\n var nextElem = groupElem.nextElementSibling;\n var prevElem = groupElem.previousElementSibling;\n var element = groupElem.querySelectorAll('.e-group-container');\n var valElem = groupElem.querySelectorAll('.e-tooltip');\n len = valElem.length;\n for (i = 0; i < len; i++) {\n getComponent(valElem[i], 'tooltip').destroy();\n }\n for (i = 0, len = element.length; i < len; i++) {\n delete this.levelColl[element[i].id];\n }\n while (groupElem.previousElementSibling !== null) {\n groupElem = groupElem.previousElementSibling;\n if (!this.enableSeparateConnector || (this.enableSeparateConnector &&\n ((!this.headerTemplate && !groupElem.classList.contains('e-btn-group')) ||\n this.headerTemplate && (groupElem.classList.contains('e-rule-container') ||\n groupElem.classList.contains('e-group-container'))))) {\n index++;\n }\n }\n if (!this.enableSeparateConnector) {\n if (nextElem && nextElem.className.indexOf('e-separate-rule') > -1) {\n removeClass([nextElem], 'e-separate-rule');\n addClass([nextElem], 'e-joined-rule');\n if (prevElem && prevElem.className.indexOf('e-rule-container') > -1) {\n addClass([prevElem], 'e-prev-joined-rule');\n }\n }\n }\n var elem = groupElem.parentElement.parentElement.parentElement;\n var removeString = [];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.isReact || this.isAngular) {\n var remRule = rule.rules[index];\n var ruleElemColl = target.querySelectorAll('.e-rule-container');\n if (remRule && remRule.rules) {\n for (var r = 0; r < remRule.rules.length; r++) {\n var column = this.getColumn(remRule.rules[r].field);\n if (ruleElemColl[r]) {\n var isTemplateRendered = ruleElemColl[r].querySelector('.e-template-value');\n if (column && (column.ruleTemplate || (this.isPlatformTemplate(column) && isTemplateRendered))) {\n removeString.push(ruleElemColl[r].id);\n }\n }\n }\n }\n }\n detach(target);\n if (this.headerTemplate) {\n this.clearQBTemplate([target.id]);\n }\n if (removeString.length) {\n this.clearQBTemplate(removeString);\n }\n rule.rules.splice(index, 1);\n delete this.levelColl[args.groupID];\n this.refreshLevelColl();\n this.disableRuleCondition(elem, rule);\n if (this.enableSeparateConnector && prevElem && ((!this.headerTemplate && prevElem.classList.contains('e-btn-group')) ||\n (this.headerTemplate && prevElem.classList.contains('e-custom-group-btn')))) {\n detach(prevElem);\n }\n if (!this.isImportRules && !this.prvtEvtTgrDaD) {\n this.trigger('change', args);\n }\n this.filterRules(beforeRules, this.getValidRules(this.rule), 'deleteGroup');\n }\n };\n QueryBuilder.prototype.isPlatformTemplate = function (column) {\n var isTemp = false;\n isTemp = column.template && (typeof column.template === 'string' || column.template.create === undefined);\n return isTemp;\n };\n QueryBuilder.prototype.deleteRule = function (target) {\n var _this = this;\n var groupElem = closest(target, '.e-group-container');\n var groupID = groupElem.id.replace(this.element.id + '_', '');\n var ruleID = closest(target, '.e-rule-container').id.replace(this.element.id + '_', '');\n var args = { groupID: groupID, ruleID: ruleID, cancel: false, type: 'deleteRule' };\n if (!this.isImportRules && !this.prvtEvtTgrDaD) {\n this.trigger('beforeChange', args, function (observedChangeArgs) {\n _this.deleteRuleSuccessCallBack(observedChangeArgs, target);\n });\n }\n else {\n this.deleteRuleSuccessCallBack(args, target);\n }\n };\n QueryBuilder.prototype.deleteRuleSuccessCallBack = function (args, target) {\n if (!args.cancel) {\n var groupElem = closest(target, '.e-group-container');\n var rule = this.getParentGroup(groupElem);\n var ruleElem = closest(target, '.e-rule-container');\n var beforeRules = this.getValidRules(this.rule);\n var prevElem = ruleElem.previousElementSibling;\n var index = 0;\n var clnruleElem = ruleElem;\n var nextElem = ruleElem.nextElementSibling;\n var valElem = ruleElem.querySelectorAll('.e-tooltip');\n var i = void 0;\n var len = valElem.length;\n for (i = 0; i < len; i++) {\n getComponent(valElem[i], 'tooltip').destroy();\n }\n while (ruleElem.previousElementSibling !== null) {\n ruleElem = ruleElem.previousElementSibling;\n if (!this.enableSeparateConnector || (this.enableSeparateConnector &&\n ((!this.headerTemplate && !ruleElem.classList.contains('e-btn-group')) ||\n this.headerTemplate && (ruleElem.classList.contains('e-rule-container') ||\n ruleElem.classList.contains('e-group-container'))))) {\n index++;\n }\n }\n var column = this.getColumn(rule.rules[index].field);\n if (column && column.template && clnruleElem.querySelector('.e-template')) {\n this.templateDestroy(column, clnruleElem.querySelector('.e-template').id);\n }\n if (!prevElem || prevElem.className.indexOf('e-rule-container') < 0) {\n if (nextElem) {\n removeClass([nextElem], 'e-joined-rule');\n }\n }\n if (!nextElem || nextElem.className.indexOf('e-rule-container') < 0) {\n if (prevElem) {\n removeClass([prevElem], 'e-prev-joined-rule');\n }\n }\n var isTemplateRendered = clnruleElem.querySelector('.e-template-value');\n // eslint-disable\n try {\n if (this.enableSeparateConnector && (clnruleElem.previousElementSibling || clnruleElem.nextElementSibling)) {\n var previousElem = clnruleElem.previousElementSibling;\n var nextElem_1 = clnruleElem.nextElementSibling;\n if (isNullOrUndefined(nextElem_1) && ((!this.headerTemplate && previousElem.classList.contains('e-btn-group'))\n || (this.headerTemplate && previousElem.classList.contains('e-custom-group-btn')))) {\n if (previousElem && previousElem.previousElementSibling && previousElem.previousElementSibling.classList.contains('e-rule-container')) {\n var rule_1 = this.getRule(previousElem.previousElementSibling);\n rule_1.condition = null;\n }\n detach(previousElem);\n }\n else if ((!this.headerTemplate && nextElem_1.classList.contains('e-btn-group'))\n || (this.headerTemplate && nextElem_1.classList.contains('e-custom-group-btn'))) {\n detach(nextElem_1);\n }\n }\n detach(clnruleElem);\n }\n catch (err) {\n return;\n }\n if (column && column.ruleTemplate) {\n this.clearQBTemplate([clnruleElem.id]);\n }\n if (column && this.isPlatformTemplate(column) && isTemplateRendered) {\n this.clearQBTemplate([clnruleElem.id]);\n }\n rule.rules.splice(index, 1);\n if (!(rule.rules[0] && rule.rules[0].rules)) {\n this.disableRuleCondition(groupElem, rule, this.enableSeparateConnector ? true : false);\n }\n var tooltipElem = this.element.querySelectorAll('.e-tooltip');\n for (var i_3 = 0; i_3 < tooltipElem.length; i_3++) {\n getComponent(tooltipElem[i_3], 'tooltip').refresh(tooltipElem[i_3]);\n }\n if (!this.isImportRules && !this.prvtEvtTgrDaD) {\n this.trigger('change', args);\n }\n this.filterRules(beforeRules, this.getValidRules(this.rule), 'deleteRule');\n }\n };\n QueryBuilder.prototype.setGroupRules = function (rule, isRoot) {\n if (this.headerTemplate && isRoot) {\n this.isRoot = true;\n }\n this.reset();\n this.groupIdCounter = 1;\n this.ruleIdCounter = 0;\n this.isImportRules = true;\n this.setProperties({ rule: rule }, true);\n rule = this.getRuleCollection(this.rule, false);\n this.importRules(this.rule, this.element.querySelector('.e-group-container'), true, this.rule.not, isRoot);\n if (rule.isLocked) {\n var lockGrpTarget = this.element.querySelector('.e-group-container').querySelector('.e-lock-grp-btn');\n this.groupLock(lockGrpTarget);\n }\n this.isImportRules = false;\n };\n QueryBuilder.prototype.keyBoardHandler = function (e) {\n if (e.currentTarget === this.element && this.readonly && (e.keyCode === 38 || e.keyCode === 40 || e.keyCode === 13)) {\n e.preventDefault();\n }\n else if (e.code === 'Escape' && this.allowDragAndDrop) {\n this.isDragEventPrevent = true;\n document.body.classList.remove('e-prevent-select');\n var borderLineElem = this.element.querySelectorAll('.e-drag-rule-bottom-line');\n borderLineElem.forEach(function (ele) {\n ele.classList.remove('e-drag-rule-bottom-line');\n });\n borderLineElem = this.element.querySelectorAll('.e-drag-rule-top-line');\n borderLineElem.forEach(function (ele) {\n ele.classList.remove('e-drag-rule-top-line');\n });\n borderLineElem = this.element.querySelectorAll('.e-qb-dragging-rule');\n borderLineElem.forEach(function (ele) {\n ele.classList.remove('e-qb-dragging-rule');\n });\n var dragElemnet = this.element.querySelector('.e-cloneproperties');\n if (dragElemnet) {\n remove(dragElemnet);\n }\n if (this.enableSeparateConnector) {\n this.refresh();\n }\n }\n };\n QueryBuilder.prototype.clearQBTemplate = function (ruleElemColl) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.isReact || this.isAngular) {\n this.clearTemplate(ruleElemColl);\n }\n };\n QueryBuilder.prototype.disableRuleCondition = function (groupElem, rules, isNewRuleAdded, isNewGroup) {\n if (!this.headerTemplate) {\n if (this.readonly) {\n return;\n }\n var count = groupElem.querySelector('.e-rule-list').childElementCount;\n var andElem = groupElem.querySelector('.e-btngroup-and');\n var orElem = groupElem.querySelector('.e-btngroup-or');\n if (count > 1) {\n andElem.disabled = false;\n orElem.disabled = false;\n if (orElem.nextElementSibling.classList.contains('e-btn-disable') ||\n andElem.nextElementSibling.classList.contains('e-btn-disable')) {\n orElem.nextElementSibling.classList.remove('e-btn-disable');\n andElem.nextElementSibling.classList.remove('e-btn-disable');\n }\n if (this.enableSeparateConnector && !isNewRuleAdded) {\n var index = 0;\n var element = void 0;\n // eslint-disable-next-line no-constant-condition\n while (true) {\n var andGroup = groupElem.parentElement.querySelectorAll('.e-btngroup-and');\n var orGroup = groupElem.parentElement.querySelectorAll('.e-btngroup-or');\n andElem = andGroup[andGroup.length - (1 + index)];\n orElem = orGroup[orGroup.length - (1 + index)];\n element = andGroup[andGroup.length - (1 + index)];\n if (element && element.parentElement && element.parentElement.style.display === 'none') {\n index++;\n }\n else {\n break;\n }\n }\n var elem = groupElem.previousElementSibling;\n while (elem && !elem.classList.contains('e-rule-container')) {\n if (elem.classList.contains('e-group-container')) {\n elem = elem.querySelectorAll('.e-rule-container')[elem.querySelectorAll('.e-rule-container').length - 1];\n break;\n }\n elem = elem.previousElementSibling;\n }\n if (isNewGroup && groupElem.classList.contains('e-group-container')) {\n elem = groupElem;\n var prevRule = this.getGroup(elem);\n if (prevRule.condition === 'or') {\n orElem.checked = true;\n }\n else {\n andElem.checked = true;\n }\n }\n else if (elem && elem.classList.contains('e-rule-container')) {\n var ruleID = elem.id.replace(this.element.id + '_', '');\n var prevRule = this.getRule(ruleID);\n if (prevRule.condition === 'or') {\n orElem.checked = true;\n }\n else {\n andElem.checked = true;\n }\n }\n }\n else if (!isNewRuleAdded) {\n if (rules && rules.condition === 'or') {\n orElem.checked = true;\n }\n else {\n andElem.checked = true;\n }\n }\n }\n else {\n if (this.enableSeparateConnector && !isNewRuleAdded) {\n var index = 0;\n var element = void 0;\n // eslint-disable-next-line no-constant-condition\n while (true) {\n var andGroup = groupElem.parentElement.querySelectorAll('.e-btngroup-and');\n var orGroup = groupElem.parentElement.querySelectorAll('.e-btngroup-or');\n andElem = andGroup[andGroup.length - (1 + index)];\n orElem = orGroup[orGroup.length - (1 + index)];\n element = andGroup[andGroup.length - (1 + index)];\n if (element && element.parentElement && element.parentElement.style.display === 'none') {\n index++;\n }\n else {\n break;\n }\n }\n var elem = void 0;\n var tempElem = groupElem.previousElementSibling;\n while (tempElem) {\n if (tempElem.classList.contains('e-group-container')) {\n tempElem = tempElem.querySelectorAll('.e-rule-container')[tempElem.querySelectorAll('.e-rule-container').length - 1];\n }\n if (tempElem.classList.contains('e-rule-container')) {\n elem = tempElem;\n break;\n }\n tempElem = tempElem.previousElementSibling;\n }\n if (isNullOrUndefined(elem) && groupElem.querySelectorAll('.e-rule-container')[groupElem.querySelectorAll('.e-rule-container').length - 1]) {\n elem = groupElem.querySelectorAll('.e-rule-container')[groupElem.querySelectorAll('.e-rule-container').length - 1];\n }\n if (isNewGroup && groupElem.classList.contains('e-group-container')) {\n elem = groupElem;\n var prevRule = this.getGroup(elem);\n if (prevRule.condition === 'or') {\n orElem.checked = true;\n }\n else {\n andElem.checked = true;\n }\n }\n else if (elem) {\n var ruleID = elem.id.replace(this.element.id + '_', '');\n var prevRule = this.getRule(ruleID);\n if (prevRule.condition === 'or' && orElem) {\n orElem.checked = true;\n }\n else if (andElem) {\n andElem.checked = true;\n }\n }\n }\n else if (!isNewRuleAdded && !isNullOrUndefined(andElem)) {\n andElem.checked = false;\n andElem.disabled = true;\n orElem.checked = false;\n orElem.disabled = true;\n if (rules) {\n orElem.nextElementSibling.classList.add('e-btn-disable');\n andElem.nextElementSibling.classList.add('e-btn-disable');\n }\n }\n }\n }\n };\n /**\n * Get the valid rule or rules collection.\n *\n * @param {RuleModel} currentRule - 'currentRule' to be passed to get the valid rules.\n * @returns {RuleModel} - Valid rule or rules collection\n */\n QueryBuilder.prototype.getValidRules = function (currentRule) {\n if (!currentRule) {\n currentRule = this.getRules();\n }\n var ruleCondtion = currentRule.condition;\n var notCondition = currentRule.not;\n var ruleColl = extend([], currentRule.rules, [], true);\n var rule = !isNullOrUndefined(currentRule.isLocked) ?\n this.getRuleCollection({ condition: ruleCondtion, rules: ruleColl, not: notCondition, isLocked: currentRule.isLocked }, true) :\n this.getRuleCollection({ condition: ruleCondtion, rules: ruleColl, not: notCondition }, true);\n return rule;\n };\n QueryBuilder.prototype.getRuleCollection = function (rule, isValidRule) {\n if (isNullOrUndefined(rule)) {\n return null;\n }\n var orgRule;\n if (rule.rules && rule.rules.length && (Object.keys(rule.rules[0]).length > 6 || isValidRule)) {\n var jLen = rule.rules.length;\n for (var j = 0; j < jLen; j++) {\n orgRule = rule.rules[j];\n orgRule = this.getRuleCollection(orgRule, isValidRule);\n rule.rules[j] = orgRule;\n if (Object.keys(orgRule).length < 1 && isValidRule) {\n rule.rules.splice(j, 1);\n j--;\n jLen--;\n }\n }\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var customObj = rule.custom;\n if ((rule.field && rule.field !== '') && (isNullOrUndefined(customObj) || (customObj && (customObj.type !== 'question' &&\n customObj.type !== 'answer')))) {\n if (rule.operator) {\n if (rule.operator.toString().indexOf('null') > -1 || rule.operator.toString().indexOf('empty') > -1) {\n rule.value = null;\n }\n }\n if ((this.isRefreshed && this.enablePersistence) || (rule.field !== '' && rule.operator !== '' && (rule.value !== '' &&\n rule.value !== undefined)) || (customObj && customObj.isQuestion)) {\n var condition = rule.condition;\n var lockedRule = rule.isLocked;\n rule = { 'label': rule.label, 'field': rule.field, 'operator': rule.operator, 'type': rule.type, 'value': rule.value };\n if (!isNullOrUndefined(lockedRule)) {\n rule.isLocked = lockedRule;\n }\n if (condition) {\n rule.condition = condition;\n }\n if (customObj) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n rule.custom = customObj;\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if ((rule.operator === 'in' || rule.operator === 'notin') && rule.value && rule.value.length === 0) {\n rule = {};\n }\n }\n else {\n rule = {};\n }\n }\n else {\n if (customObj && (customObj.type === 'question' || customObj.type === 'answer')) {\n var notValue = rule.not;\n rule = { 'label': rule.label, 'field': rule.field, 'operator': rule.operator, 'type': rule.type, 'value': rule.value,\n 'condition': rule.condition, 'rules': rule.rules\n };\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n rule.custom = customObj;\n if (this.enableNotCondition) {\n rule.not = notValue;\n }\n }\n else if ((isNullOrUndefined(rule.condition)) && isNullOrUndefined(rule.rules)) {\n rule = {};\n }\n else {\n var isLocked = rule.isLocked;\n if (this.enableNotCondition) {\n rule = { 'condition': rule.condition, 'rules': rule.rules, 'not': rule.not };\n }\n else {\n rule = { 'condition': rule.condition, 'rules': rule.rules };\n }\n if (!isNullOrUndefined(isLocked)) {\n rule.isLocked = isLocked;\n }\n if (customObj) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n rule.custom = customObj;\n }\n if (rule.rules && rule.rules.length === 0) {\n rule = {};\n }\n }\n }\n return rule;\n };\n /**\n * Set the rule or rules collection.\n *\n * @param {RuleModel} rule - 'rule' to be passed to set rules.\n * @returns {void}.\n */\n QueryBuilder.prototype.setRules = function (rule) {\n var mRules = extend({}, rule, {}, true);\n if (this.headerTemplate) {\n this.setGroupRules(mRules, true);\n }\n else {\n this.setGroupRules(mRules);\n }\n };\n /**\n * Gets the rule or rule collection.\n *\n * @returns {object} - Rule or rule collection\n */\n QueryBuilder.prototype.getRules = function () {\n var rule;\n if (this.enableNotCondition) {\n rule = { condition: this.rule.condition, rules: this.rule.rules, not: this.rule.not };\n }\n else {\n rule = { condition: this.rule.condition, rules: this.rule.rules };\n }\n if (!isNullOrUndefined(this.rule.isLocked)) {\n rule.isLocked = this.rule.isLocked;\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.rule.custom) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n rule.custom = this.rule.custom;\n }\n return rule;\n };\n /**\n * Gets the rule.\n *\n * @param {string | HTMLElement} elem - 'elem' to be passed to get rule.\n * @returns {object} - Rule\n */\n QueryBuilder.prototype.getRule = function (elem) {\n var ruleElem;\n var ruleId;\n var index = 0;\n if (elem instanceof HTMLElement) {\n ruleElem = closest(elem, '.e-rule-container');\n }\n else {\n ruleId = this.element.id + '_' + elem;\n ruleElem = document.getElementById(ruleId);\n }\n if (isNullOrUndefined(ruleElem)) {\n return null;\n }\n var groupElem = closest(ruleElem, '.e-group-container');\n var rule = this.getParentGroup(groupElem);\n while (ruleElem.previousElementSibling !== null) {\n ruleElem = ruleElem.previousElementSibling;\n if (!this.enableSeparateConnector || (this.enableSeparateConnector &&\n ((!this.headerTemplate && !ruleElem.classList.contains('e-btn-group')) ||\n this.headerTemplate && (ruleElem.classList.contains('e-rule-container') ||\n ruleElem.classList.contains('e-group-container'))))) {\n index++;\n }\n }\n return rule.rules[index];\n };\n /**\n * Gets the group.\n *\n * @param {string | Element} target - 'target' to be passed to get group.\n * @returns {object} -Group\n */\n QueryBuilder.prototype.getGroup = function (target) {\n if (target instanceof Element && target.className.indexOf('e-group-container') < 1) {\n target = closest(target, '.e-group-container');\n }\n var groupId = (target instanceof Element) ? target.id : this.element.id + '_' + target;\n var rule = this.getParentGroup(groupId);\n return rule;\n };\n /**\n * Deletes the group or groups based on the group ID.\n *\n * @param {string[]} groupIdColl - 'groupIdColl' to be passed to delete groups.\n * @returns {void}\n */\n QueryBuilder.prototype.deleteGroups = function (groupIdColl) {\n var i;\n var len = groupIdColl.length;\n var groupID;\n for (i = 0; i < len; i++) {\n if (groupIdColl[i] === 'group0') {\n continue;\n }\n groupID = this.element.id + '_' + groupIdColl[i];\n this.deleteGroup(document.getElementById(groupID));\n }\n };\n /**\n * Return the Query from current rules collection.\n *\n * @returns {Promise} - Query from current rules collection\n * @blazorType object\n */\n QueryBuilder.prototype.getFilteredRecords = function () {\n var predicate = this.getPredicate(this.getValidRules(this.rule));\n var dataManagerQuery = isNullOrUndefined(predicate) ? new Query() : new Query().where(predicate);\n return this.dataManager.executeQuery(dataManagerQuery);\n };\n /**\n * Deletes the rule or rules based on the rule ID.\n *\n * @param {string[]} ruleIdColl - 'ruleIdColl' to be passed to delete rules.\n * @returns {void}.\n */\n QueryBuilder.prototype.deleteRules = function (ruleIdColl) {\n var i;\n var len = ruleIdColl.length;\n var ruleID;\n for (i = 0; i < len; i++) {\n ruleID = this.element.id + '_' + ruleIdColl[i];\n this.deleteRule(document.getElementById(ruleID));\n }\n };\n /**\n * Gets the query for Data Manager.\n *\n * @param {RuleModel} rule - 'rule' to be passed to get query.\n * @returns {string} - Query for Data Manager\n */\n QueryBuilder.prototype.getDataManagerQuery = function (rule) {\n var predicate = this.getPredicate(rule);\n var query;\n var fields = [];\n for (var i = 0, len = Object.keys(this.columns); i < len.length; i++) {\n fields.push(this.columns[i].field);\n }\n if (rule.rules.length) {\n query = new Query().select(fields).where(predicate);\n }\n else {\n query = new Query().select(fields);\n }\n return query;\n };\n /**\n * Get the predicate from collection of rules.\n *\n * @param {RuleModel} rule - 'rule' to be passed to get predicate.\n * @returns {Predicate} - Predicate from collection of rules\n */\n QueryBuilder.prototype.getPredicate = function (rule) {\n var ruleColl = rule.rules;\n var pred;\n var pred2;\n var ruleValue;\n var ignoreCase = false;\n var column;\n if (!ruleColl) {\n return pred;\n }\n for (var i = 0, len = ruleColl.length; i < len; i++) {\n var operator = ruleColl[i].operator;\n if (operator === 'notstartswith') {\n operator = 'doesnotstartwith';\n }\n else if (operator === 'notendswith') {\n operator = 'doesnotendwith';\n }\n else if (operator === 'notcontains') {\n operator = 'doesnotcontain';\n }\n var keys = Object.keys(ruleColl[i]);\n ignoreCase = false;\n if (keys.indexOf('rules') > -1 && ruleColl[i].rules) {\n pred2 = this.getPredicate(ruleColl[i]);\n if (pred2) {\n if (pred) {\n if (rule.condition === 'and') {\n pred = pred.and(pred2);\n }\n else {\n pred = pred.or(pred2);\n }\n }\n else {\n pred = pred2;\n }\n }\n }\n else if (!isNullOrUndefined(operator) && !isNullOrUndefined(operator.length)) {\n var oper = ruleColl[i].operator.toLowerCase();\n var isDateFilter = false;\n var dateOperColl = ['equal', 'notequal', 'greaterthan', 'greaterthanorequal', 'lessthan', 'lessthanorequal'];\n if (ruleColl[i].type === 'string') {\n ignoreCase = this.matchCase ? false : true;\n }\n if (ruleColl[i].type === 'date' && dateOperColl.indexOf(oper) > -1) {\n ignoreCase = true;\n }\n column = this.getColumn(ruleColl[i].field);\n if (oper.indexOf('null') > -1 || oper.indexOf('empty') > -1) {\n ruleColl[i].value = null;\n }\n else if (ruleColl[i].type === 'date' && !(ruleColl[i].value instanceof Array)) {\n var format = this.getFormat(column.format);\n if (!isNullOrUndefined(ruleColl[i].value)) {\n ruleValue = this.getDate(ruleColl[i].value, format);\n if (dateOperColl.indexOf(oper) > -1 && !this.isTime(ruleColl[i].value)) {\n isDateFilter = true;\n }\n }\n else {\n ruleValue = null;\n }\n }\n else {\n ruleValue = ruleColl[i].value;\n }\n if (i === 0) {\n if (isDateFilter || (oper.indexOf('in') > -1 || oper.indexOf('between') > -1 || oper.indexOf('null') > -1 ||\n oper.indexOf('empty') > -1) && (oper.indexOf('contain') < 0)) {\n pred = isDateFilter ? this.datePredicate(ruleColl[i], ruleValue) :\n this.arrayPredicate(ruleColl[i]);\n }\n else {\n var value = ruleValue;\n if (value !== '') {\n pred = new Predicate(ruleColl[i].field, operator, ruleValue, ignoreCase);\n }\n }\n }\n else {\n if (isDateFilter || (oper.indexOf('in') > -1 || oper.indexOf('between') > -1 ||\n oper.indexOf('null') > -1 || oper.indexOf('empty') > -1) && oper.indexOf('contain') < 0) {\n pred = isDateFilter ? this.datePredicate(ruleColl[i], ruleValue, pred, rule.condition) :\n this.arrayPredicate(ruleColl[i], pred, rule.condition);\n }\n else {\n if (rule.condition === 'and') {\n var value = ruleValue;\n if (pred && value !== '') {\n pred\n = pred.and(ruleColl[i].field, operator, ruleValue, ignoreCase);\n }\n else if (value !== '') {\n pred = new Predicate(ruleColl[i].field, operator, ruleValue, ignoreCase);\n }\n }\n else {\n var value = ruleValue;\n if (pred && value !== '') {\n pred = pred.or(ruleColl[i].field, operator, ruleValue, ignoreCase);\n }\n else if (value !== '') {\n pred = new Predicate(ruleColl[i].field, operator, ruleValue, ignoreCase);\n }\n }\n }\n }\n }\n }\n if (this.dataSource instanceof DataManager) {\n if (!isNullOrUndefined(pred) && (pred.operator === 'isnull' || pred.operator === 'isnotnull')) {\n pred.operator = pred.operator === 'isnull' ? 'equal' : 'notequal';\n }\n }\n return pred;\n };\n QueryBuilder.prototype.getLocale = function () {\n var gregorianFormat = '.dates.calendars.gregorian.days.format.short';\n var localeString = this.locale;\n var mainVal = 'main.';\n var cultureObj = getValue(mainVal + '' + this.locale + gregorianFormat, cldrData);\n if (!cultureObj) {\n localeString = 'en';\n }\n return localeString;\n };\n QueryBuilder.prototype.getColumn = function (field, col) {\n var columns = this.columns;\n var column;\n columns = col ? col : columns;\n for (var i = 0, iLen = columns.length; i < iLen; i++) {\n if (columns[i].field === field) {\n column = columns[i];\n break;\n }\n else if (columns[i].columns) {\n column = this.getColumn(field, columns[i].columns);\n if (column) {\n break;\n }\n }\n else if (field && field.indexOf(this.separator) > -1) {\n if (this.separator !== '' && columns[i].field === field.split(this.separator)[0]) {\n column = columns[i];\n break;\n }\n }\n }\n return column;\n };\n /* eslint-disable */\n /**\n * Return the operator bound to the column.\n *\n * @returns {[key: string]: Object}[] - Operator bound to the column\n */\n /* eslint-enable */\n QueryBuilder.prototype.getOperators = function (field) {\n var column = this.getColumn(field);\n return column.operators;\n };\n QueryBuilder.prototype.setTime = function (date, isStart) {\n if (isStart) {\n date.setHours(0, 0, 0);\n }\n else {\n date.setHours(23, 59, 59);\n }\n return date;\n };\n QueryBuilder.prototype.datePredicate = function (ruleColl, value, predicate, condition) {\n var pred;\n var startDate = this.setTime(new Date(value.getTime()), true);\n var endDate = this.setTime(value);\n switch (ruleColl.operator) {\n case 'equal':\n pred = new Predicate(ruleColl.field, 'greaterthanorequal', startDate);\n pred = pred.and(ruleColl.field, 'lessthanorequal', endDate);\n break;\n case 'notequal':\n pred = new Predicate(ruleColl.field, 'lessthan', startDate);\n pred = pred.or(ruleColl.field, 'greaterthan', endDate);\n break;\n case 'greaterthan':\n pred = new Predicate(ruleColl.field, 'greaterthan', endDate);\n break;\n case 'greaterthanorequal':\n pred = new Predicate(ruleColl.field, 'greaterthanorequal', startDate);\n break;\n case 'lessthan':\n pred = new Predicate(ruleColl.field, 'lessthan', startDate);\n break;\n case 'lessthanorequal':\n pred = new Predicate(ruleColl.field, 'lessthanorequal', endDate);\n break;\n }\n if (pred) {\n if (predicate) {\n if (condition === 'and') {\n predicate = predicate.and(pred);\n }\n else if (condition === 'or') {\n predicate = predicate.or(pred);\n }\n }\n else {\n predicate = pred;\n }\n }\n return predicate;\n };\n QueryBuilder.prototype.arrayPredicate = function (ruleColl, predicate, condition) {\n var value = ruleColl.value;\n var operator = ruleColl.operator.toString();\n var nullValue = ruleColl.value;\n var pred;\n var column = this.getColumn(ruleColl.field);\n var format = this.getFormat(column.format);\n if (operator.indexOf('null') > -1 || operator.indexOf('empty') > -1) {\n switch (operator) {\n case 'isnull':\n pred = new Predicate(ruleColl.field, 'isnull', nullValue);\n break;\n case 'isnotnull':\n pred = new Predicate(ruleColl.field, 'isnotnull', nullValue);\n break;\n case 'isempty':\n pred = new Predicate(ruleColl.field, 'equal', '');\n break;\n case 'isnotempty':\n pred = new Predicate(ruleColl.field, 'notequal', '');\n break;\n }\n }\n if (!(operator.indexOf('null') > -1 || operator.indexOf('empty') > -1)) {\n for (var j = 0, jLen = value.length; j < jLen; j++) {\n if (value[j] !== '' || ((operator === 'in' || operator === 'notin') && column.type === 'string')) {\n if (j === 0) {\n var gte = 'greaterthanorequal';\n switch (operator) {\n case 'between':\n if (column.type !== 'date') {\n pred = new Predicate(ruleColl.field, gte, value[j]);\n }\n else {\n pred = new Predicate(ruleColl.field, gte, value[j] ?\n (this.isTime(value[j]) ? this.getDate(value[j], format) :\n this.setTime(this.getDate(value[j], format), true)) : null);\n }\n break;\n case 'notbetween':\n if (column.type === 'date') {\n pred = new Predicate(ruleColl.field, 'lessthan', value[j] ?\n (this.isTime(value[j]) ? this.getDate(value[j], format) :\n this.setTime(this.getDate(value[j], format), true)) : null);\n }\n else {\n pred = new Predicate(ruleColl.field, 'lessthan', value[j]);\n }\n break;\n case 'in':\n pred = new Predicate(ruleColl.field, 'equal', value[j]);\n break;\n case 'notin':\n pred = new Predicate(ruleColl.field, 'notequal', value[j]);\n break;\n }\n }\n else {\n var gt = 'greaterthan';\n switch (ruleColl.operator) {\n case 'between':\n if (column.type === 'date') {\n pred = pred.and(ruleColl.field, 'lessthanorequal', value[j] ?\n (this.isTime(value[j]) ? this.getDate(value[j], format) :\n this.setTime(this.getDate(value[j], format))) : value[j]);\n }\n else {\n pred = pred.and(ruleColl.field, 'lessthanorequal', value[j]);\n }\n break;\n case 'notbetween':\n if (column.type === 'date') {\n pred = pred.or(ruleColl.field, gt, value[j] ?\n (this.isTime(value[j]) ? this.getDate(value[j], format) :\n this.setTime(this.getDate(value[j], format))) : value[j]);\n }\n else {\n pred = pred.or(ruleColl.field, 'greaterthan', value[j]);\n }\n break;\n case 'in':\n pred = pred.or(ruleColl.field, 'equal', value[j]);\n break;\n case 'notin':\n pred = pred.and(ruleColl.field, 'notequal', value[j]);\n break;\n }\n }\n }\n }\n }\n if (pred) {\n if (predicate) {\n if (condition === 'and') {\n predicate = predicate.and(pred);\n }\n else if (condition === 'or') {\n predicate = predicate.or(pred);\n }\n }\n else {\n predicate = pred;\n }\n }\n return predicate;\n };\n QueryBuilder.prototype.getDate = function (value, format) {\n var currDate = this.intl.parseDate(value, format);\n if (value.indexOf(':') > -1 && (value.indexOf('/') < 0 && value.indexOf(',') < 0\n && value.indexOf('-') < 0)) {\n currDate = new Date();\n currDate.setHours(parseInt(value.split(':')[0], 10));\n currDate.setMinutes(parseInt(value.split(':')[1], 10));\n if (value.split(':')[2]) {\n currDate.setSeconds(parseInt(value.split(':')[2], 10));\n }\n }\n return currDate;\n };\n QueryBuilder.prototype.isTime = function (value) {\n if (value && value.indexOf(':') > -1) {\n return true;\n }\n return false;\n };\n QueryBuilder.prototype.importRules = function (rule, parentElem, isReset, not, isRoot) {\n if (!isReset) {\n parentElem = this.renderGroup(rule, rule.condition, parentElem, not);\n }\n else {\n if (rule.rules && rule.rules.length > 1 && !this.headerTemplate) {\n // enable/disable conditions when rule group is added\n var orElem = parentElem.querySelector('.e-btngroup-or');\n var andElem = parentElem.querySelector('.e-btngroup-and');\n if (this.enableSeparateConnector && parentElem.previousElementSibling) {\n orElem = parentElem.previousElementSibling.querySelector('.e-btngroup-or');\n andElem = parentElem.previousElementSibling.querySelector('.e-btngroup-and');\n }\n orElem.disabled = false;\n andElem.disabled = false;\n if (this.enableSeparateConnector) {\n var elem = parentElem.previousElementSibling;\n while (elem && !elem.classList.contains('e-rule-container')) {\n if (elem.classList.contains('e-group-container')) {\n elem = elem.querySelectorAll('.e-rule-container')[elem.querySelectorAll('.e-rule-container').length - 1];\n break;\n }\n elem = elem.previousElementSibling;\n }\n if (elem && elem.classList.contains('e-rule-container')) {\n var ruleID = elem.id.replace(this.element.id + '_', '');\n var prevRule = this.getRule(ruleID);\n if (prevRule.condition === 'or') {\n orElem.checked = true;\n }\n else {\n andElem.checked = true;\n }\n }\n }\n else {\n if (rule.condition === 'or') {\n orElem.checked = true;\n }\n else {\n andElem.checked = true;\n }\n }\n }\n else {\n // enable/disable conditions when rule condition is added\n this.disableRuleCondition(parentElem);\n }\n if (this.headerTemplate && isRoot) {\n parentElem = this.renderGroup(rule, rule.condition, this.element, rule.not, isRoot);\n }\n if (this.enableNotCondition && !this.headerTemplate) {\n var tglBtnElem = parentElem.querySelector('.e-qb-toggle');\n if (rule.not) {\n addClass([tglBtnElem], 'e-active-toggle');\n }\n else {\n removeClass([tglBtnElem], 'e-active-toggle');\n }\n }\n }\n if (rule.rules && rule.rules.length === 0 && this.headerTemplate) {\n rule.rules[0] = { 'label': '', 'field': '', 'operator': '', 'type': '', 'value': '' };\n }\n var ruleColl = rule.rules;\n if (!isNullOrUndefined(ruleColl)) {\n for (var i = 0, len = ruleColl.length; i < len; i++) {\n var keys = Object.keys(ruleColl[i]);\n if (!isNullOrUndefined(ruleColl[i].rules) && keys.indexOf('rules') > -1 && (ruleColl[i].rules.length !== 0)) {\n if (this.element.querySelectorAll('.e-group-container').length > this.maxGroupCount) {\n return null;\n }\n parentElem = this.renderGroup(ruleColl[i], ruleColl[i].condition, parentElem, ruleColl[i].not);\n parentElem = this.importRules(ruleColl[i], parentElem, true);\n }\n else {\n this.renderRule(ruleColl[i], parentElem);\n }\n if (!isNullOrUndefined(ruleColl[i].rules) && ruleColl[i].isLocked) {\n var lockGrpTarget = parentElem.querySelector('.e-rule-list').children[i].querySelector('.e-lock-grp-btn');\n this.groupLock(lockGrpTarget);\n }\n }\n }\n if (parentElem) {\n parentElem = closest(parentElem, '.e-rule-list');\n }\n if (parentElem) {\n parentElem = closest(parentElem, '.e-group-container');\n }\n return parentElem;\n };\n QueryBuilder.prototype.renderGroup = function (rule, condition, parentElem, not, isRoot) {\n this.addGroupElement(true, parentElem, condition, false, not, isRoot, rule); //Child group\n var element = parentElem.querySelectorAll('.e-group-container');\n var cloneElem = parentElem.querySelector('.e-rule-list').children;\n if (this.showButtons.cloneGroup && this.cloneGrpBtnClick && this.isMiddleGroup) {\n this.isMiddleGroup = false;\n this.cloneGrpBtnClick = false;\n var index = 0;\n var tempGroupIndex = this.groupIndex + 1;\n if (this.enableSeparateConnector) {\n for (var i = 0; i < tempGroupIndex; i++) {\n if (cloneElem[i].classList.contains('e-rule-container')) {\n tempGroupIndex++;\n index++;\n }\n }\n }\n return cloneElem[this.groupIndex + index + 1]; // group added in the middle\n }\n else if (this.showButtons.cloneGroup && this.cloneGrpBtnClick && this.isLastGroup) {\n this.isLastGroup = false;\n this.cloneGrpBtnClick = false;\n return cloneElem[cloneElem.length - 1]; // group added in the end\n }\n else {\n return element[element.length - 1];\n }\n };\n QueryBuilder.prototype.renderRule = function (rule, parentElem) {\n if (parentElem.className.indexOf('e-group-container') > -1) {\n this.addRuleElement(parentElem, rule); //Create rule\n }\n else {\n this.addRuleElement(parentElem.querySelector('.e-group-container'), rule); //Create group\n }\n };\n QueryBuilder.prototype.enableReadonly = function () {\n var target = this.element;\n var elem = target.querySelectorAll('.e-dropdownlist, .e-dropdowntree, .e-numerictextbox, .e-textbox, .e-datepicker, .e-multiselect .e-lib, .e-radio');\n for (var i = 0; i < elem.length; i++) {\n if (elem[i].classList.contains('e-dropdownlist')) {\n var dropDownObj = getInstance(elem[i], DropDownList);\n dropDownObj.readonly = this.isReadonly;\n }\n else if (elem[i].classList.contains('e-dropdowntree')) {\n var dropDownTreeObj = getComponent(elem[i], 'dropdowntree');\n dropDownTreeObj.readonly = this.isReadonly;\n }\n else if (elem[i].classList.contains('e-numerictextbox')) {\n var numericTextBoxObj = getInstance(elem[i], NumericTextBox);\n numericTextBoxObj.readonly = this.isReadonly;\n }\n else if (elem[i].classList.contains('e-textbox')) {\n var textBoxObj = getInstance(elem[i], TextBox);\n textBoxObj.readonly = this.isReadonly;\n }\n else if (elem[i].classList.contains('e-datepicker')) {\n var datePickerObj = getInstance(elem[i], DatePicker);\n datePickerObj.readonly = this.isReadonly;\n }\n else if (elem[i].classList.contains('e-multiselect')) {\n var multiSelectObj = getInstance(elem[i], MultiSelect);\n multiSelectObj.readonly = this.isReadonly;\n }\n else if (elem[i].classList.contains('e-radio')) {\n var radioButtonObj = getInstance(elem[i], RadioButton);\n if (!radioButtonObj.checked) {\n if (this.isReadonly) {\n elem[i].parentElement.style.display = 'none';\n }\n else {\n elem[i].parentElement.style.display = 'inherit';\n }\n }\n }\n }\n var deleteGroupElems = this.element.querySelectorAll('.e-deletegroup');\n var addRuleGroupElems = this.element.querySelectorAll('.e-addrulegroup');\n var removeRuleElems = this.element.querySelectorAll('.e-removerule');\n if (!this.isReadonly && this.ruleElem.classList.contains('e-readonly')) {\n this.ruleElem.classList.remove('e-readonly');\n }\n var elems = [deleteGroupElems, addRuleGroupElems, removeRuleElems];\n for (var i = 0; i < elems.length; i++) {\n elems[i].forEach(function (elem) {\n if (elem.classList.contains('e-readonly')) {\n elem.classList.remove('e-readonly');\n }\n else {\n elem.classList.add('e-readonly');\n }\n });\n }\n this.enableBtnGroup();\n };\n QueryBuilder.prototype.enableBtnGroup = function () {\n var _this = this;\n var elems = this.element.querySelectorAll('.e-btngroup-and-lbl, .e-btngroup-or-lbl, .e-qb-toggle');\n var not = false;\n elems.forEach(function (elem) {\n if (elem.classList.contains('e-qb-toggle') && !elem.classList.contains('e-active-toggle')\n && !elem.classList.contains('e-readonly')) {\n elem.classList.add('e-readonly');\n not = false;\n }\n else if (elem.classList.contains('e-qb-toggle') && elem.classList.contains('e-not-readonly')) {\n elem.classList.remove('e-not-readonly');\n }\n else if (elem.classList.contains('e-qb-toggle') && elem.classList.contains('e-readonly')) {\n elem.classList.remove('e-readonly');\n }\n else if (elem.classList.contains('e-active-toggle')) {\n elem.classList.add('e-not-readonly');\n not = true;\n }\n else if (elem.previousElementSibling.checked || elem.classList.contains('e-readonly')) {\n elem.classList.remove('e-readonly');\n if (not) {\n if (elem.textContent === 'AND') {\n elem.classList.add('e-readonly-and');\n }\n else {\n elem.classList.add('e-readonly-or');\n }\n }\n else {\n if (elem.textContent === 'AND' && _this.isReadonly) {\n elem.classList.remove('e-not');\n elem.classList.add('e-readonly-and');\n }\n else {\n if (_this.enableNotCondition) {\n elem.classList.add('e-not');\n }\n elem.classList.remove('e-readonly-and');\n }\n if (elem.textContent === 'OR' && _this.isReadonly) {\n elem.classList.add('e-readonly-or-not');\n }\n else {\n elem.classList.remove('e-readonly-or-not');\n }\n }\n }\n else if (elem.classList.contains('e-btn-disable')) {\n // do nothing\n }\n else {\n elem.classList.add('e-readonly');\n }\n });\n };\n QueryBuilder.prototype.isDateFunction = function (value) {\n var dateFunc = ['date', 'time', 'day', 'week', 'month', 'year', 'hour', 'minute', 'second', 'now', 'quarter', 'period', 'extract'];\n for (var i = 0, len = dateFunc.length; i < len; i++) {\n if (value.toLowerCase().indexOf(dateFunc[i]) > -1) {\n return true;\n }\n }\n return false;\n };\n QueryBuilder.prototype.getSqlString = function (rules, enableEscape, queryStr, sqlLocale) {\n var isRoot = false;\n if (!queryStr && queryStr !== '') {\n queryStr = '';\n isRoot = true;\n }\n else {\n queryStr += '(';\n }\n var condition = rules.condition;\n if (rules.not) {\n var rulesNotCondition = void 0;\n if (isRoot) {\n rulesNotCondition = sqlLocale ? this.l10n.getConstant('NOT').toUpperCase() + ' (' : 'NOT (';\n queryStr += rulesNotCondition;\n }\n else {\n rulesNotCondition = sqlLocale ? ' ' + this.l10n.getConstant('NOT').toUpperCase() + ' (' : ' NOT (';\n queryStr += rulesNotCondition;\n }\n }\n if (rules.rules) {\n for (var j = 0, jLen = rules.rules.length; j < jLen; j++) {\n if (rules.rules[j].rules) {\n queryStr = this.getSqlString(rules.rules[j], enableEscape, queryStr, sqlLocale);\n if (this.enableSeparateConnector) {\n condition = rules.rules[j].condition;\n }\n }\n else {\n var rule = rules.rules[j];\n var valueStr = '';\n var ruleOpertor = sqlLocale ? this.sqlOperators[rule.operator] : this.operators[rule.operator];\n if (rule.value instanceof Array) {\n if (rule.operator.toString().indexOf('between') > -1) {\n var ruleCondition = sqlLocale ? ' ' + this.l10n.getConstant('AND').toUpperCase() + ' ' : ' ' + 'AND' + ' ';\n if (rule.type === 'date' && !this.isDateFunction(rule.value[0])) {\n valueStr += '\"' + rule.value[0] + '\"' + ruleCondition + '\"' + rule.value[1] + '\"';\n }\n else {\n valueStr += rule.value[0] + ruleCondition + rule.value[1];\n }\n }\n else {\n if (typeof rule.value[0] === 'string' && rule.value !== null) {\n valueStr += '(\"' + rule.value[0] + '\"';\n for (var k = 1, kLen = rule.value.length; k < kLen; k++) {\n valueStr += ',\"' + rule.value[k] + '\"';\n }\n valueStr += ')';\n }\n else {\n valueStr += '(' + rule.value + ')';\n }\n }\n }\n else {\n if (rule.operator.toString().indexOf('startswith') > -1) {\n valueStr += rule.value ? '(\"' + rule.value + '%\")' : '(' + rule.value + ')';\n }\n else if (rule.operator.toString().indexOf('endswith') > -1) {\n valueStr += rule.value ? '(\"%' + rule.value + '\")' : '(' + rule.value + ')';\n }\n else if (rule.operator.toString().indexOf('contains') > -1) {\n valueStr += rule.value ? '(\"%' + rule.value + '%\")' : '(' + rule.value + ')';\n }\n else {\n if (rule.type === 'number' || typeof rule.value === 'boolean' ||\n (rule.value === null && (rule.operator.toString().indexOf('empty') < -1))) {\n valueStr += rule.value;\n }\n else if (rule.operator.toString().indexOf('empty') > -1) {\n valueStr += '\"\"';\n }\n else {\n valueStr += '\"' + rule.value + '\"';\n }\n }\n }\n if (rule.operator.toString().indexOf('null') > -1) {\n if (enableEscape) {\n rule.field = '`' + rule.field + '`';\n }\n else {\n if (rule.field.indexOf(' ') > -1) {\n rule.field = '\"' + rule.field + '\"';\n }\n }\n queryStr += rule.field + ' ' + ruleOpertor;\n }\n else {\n var custOper = ruleOpertor;\n if (rule.operator === 'isempty') {\n custOper = '=';\n }\n else if (rule.operator === 'isnotempty') {\n custOper = '!=';\n }\n if (enableEscape) {\n rule.field = '`' + rule.field + '`';\n }\n else {\n if (rule.field.indexOf(' ') > -1) {\n rule.field = '\"' + rule.field + '\"';\n }\n }\n queryStr += rule.field + ' ' + custOper + ' ' + valueStr;\n }\n if (rule.condition && rule.condition !== '') {\n condition = rule.condition;\n }\n }\n if (j !== jLen - 1) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var rule = rules.rules[j];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (condition === '' || (rule && rule.condition !== '' && rule.custom && rule.custom.isCustom)) {\n condition = rule.condition;\n }\n if (condition) {\n condition = sqlLocale ? this.l10n.getConstant(condition.toUpperCase()).toUpperCase() : condition.toUpperCase();\n queryStr += ' ' + condition + ' ';\n }\n }\n }\n }\n if (!isRoot) {\n queryStr += ')';\n }\n if (rules.not) {\n queryStr += ')';\n }\n return queryStr;\n };\n /**\n * Sets the rules from the sql query.\n *\n * @param {string} sqlString - 'sql String' to be passed to set the rule.\n * @param {boolean} sqlLocale - Optional. Set `true` if Localization for Sql query.\n * @returns {void}\n */\n QueryBuilder.prototype.setRulesFromSql = function (sqlString, sqlLocale) {\n sqlString = sqlString.replace(/`/g, '');\n var ruleModel = this.getRulesFromSql(sqlString, sqlLocale);\n this.setRules({ condition: ruleModel.condition, not: ruleModel.not, rules: ruleModel.rules });\n };\n /**\n * Get the rules from SQL query.\n *\n * @param {string} sqlString - 'sql String' to be passed to get the rule.\n * @param {boolean} sqlLocale - Set `true` if Localization for Sql query.\n * @returns {object} - Rules from SQL query\n */\n QueryBuilder.prototype.getRulesFromSql = function (sqlString, sqlLocale) {\n this.parser = [];\n this.sqlParser(sqlString, sqlLocale);\n this.setProperties({ rule: { condition: 'and', not: false, rules: [] } }, true);\n var rule = this.processParser(this.parser, this.rule, [0], sqlLocale);\n if (this.enableNotCondition) {\n return { condition: rule.condition, not: rule.not, rules: rule.rules };\n }\n else {\n return { condition: rule.condition, rules: rule.rules };\n }\n };\n /**\n * Gets the sql query from rules.\n *\n * @param {RuleModel} rule - 'rule' to be passed to get the sql.\n * @param {boolean} allowEscape - Set `true` if it exclude the escape character.\n * @param {boolean} sqlLocale - Set `true` if Localization for Sql query.\n * @returns {string} - Sql query from rules.\n */\n QueryBuilder.prototype.getSqlFromRules = function (rule, allowEscape, sqlLocale) {\n if (!rule) {\n rule = this.getValidRules();\n }\n rule = this.getRuleCollection(rule, false);\n var sqlString = this.getSqlString(this.getValidRules(rule), allowEscape, null, sqlLocale).replace(/\"/g, '\\'');\n return sqlString;\n };\n /**\n * Gets the parameter SQL query from rules.\n *\n * @param {RuleModel} rule – Specify the rule to be passed to get the parameter sql string.\n * @returns {ParameterizedSql} – Parameterized SQL query from rules.\n */\n QueryBuilder.prototype.getParameterizedSql = function (rule) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.moduleLoader.loadedModules.length) {\n if (!rule) {\n rule = this.getValidRules();\n }\n var obj = { sql: null };\n this.notify('query-library', { prop: 'getParameterSql', onPropertyChange: false, value: { rule: rule, obj: obj } });\n return obj['sql'];\n }\n else {\n console.warn('[WARNING] :: Module \"query-library\" is not available in QueryBuilder component! You either misspelled the module name or forgot to load it.');\n }\n return null;\n };\n /**\n * Sets the rules from the parameter sql query.\n *\n * @param { ParameterizedSql} sqlQuery – Specifies the parameter SQL to be passed to set the rule and load it to the query builder.\n * @returns {void}\n */\n QueryBuilder.prototype.setParameterizedSql = function (sqlQuery) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.moduleLoader.loadedModules.length) {\n var obj = { sql: null };\n this.notify('query-library', { prop: 'convertParamSqlToSql', onPropertyChange: false, value: { sql: sqlQuery, obj: obj } });\n var sql = obj['sql'];\n if (sql) {\n sql = sql.replace(/`/g, '');\n var ruleModel = this.getRulesFromSql(sql);\n this.setRules({ condition: ruleModel.condition, not: ruleModel.not, rules: ruleModel.rules });\n }\n }\n else {\n console.warn('[WARNING] :: Module \"query-library\" is not available in QueryBuilder component! You either misspelled the module name or forgot to load it.');\n }\n };\n /**\n * Gets the named parameter SQL query from rules.\n *\n * @param {RuleModel} rule – Specify the rule to be passed to get the named parameter SQL string.\n * @returns {ParameterizedNamedSql} – Parameterized Named SQL query from rules.\n */\n QueryBuilder.prototype.getParameterizedNamedSql = function (rule) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.moduleLoader.loadedModules.length) {\n if (!rule) {\n rule = this.getValidRules();\n }\n var obj = { sql: null };\n this.notify('query-library', { prop: 'getNamedParameterSql', onPropertyChange: false, value: { rule: rule, obj: obj } });\n return obj['sql'];\n }\n else {\n console.warn('[WARNING] :: Module \"query-library\" is not available in QueryBuilder component! You either misspelled the module name or forgot to load it.');\n }\n return null;\n };\n /**\n * Sets the rules from the named parameter SQL query.\n *\n * @param { ParameterizedNamedSql } sqlQuery – Specifies the named parameter SQL to be passed to set the rule and load it to the query builder.\n * @returns {void}\n */\n QueryBuilder.prototype.setParameterizedNamedSql = function (sqlQuery) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.moduleLoader.loadedModules.length) {\n var obj = { sql: null };\n this.notify('query-library', { prop: 'convertNamedParamSqlToSql', onPropertyChange: false, value: { sql: sqlQuery, obj: obj } });\n var sql = obj['sql'];\n if (sql) {\n sql = sql.replace(/`/g, '');\n var ruleModel = this.getRulesFromSql(sql);\n this.setRules({ condition: ruleModel.condition, not: ruleModel.not, rules: ruleModel.rules });\n }\n }\n else {\n console.warn('[WARNING] :: Module \"query-library\" is not available in QueryBuilder component! You either misspelled the module name or forgot to load it.');\n }\n };\n /**\n * Set the rules from Mongo query.\n *\n * @param {string} mongoQuery - 'sql String' to be passed to get the rule.\n * @param {boolean} mongoLocale - Set `true` if Localization for Mongo query.\n * @returns {void}\n */\n QueryBuilder.prototype.setMongoQuery = function (mongoQuery, mongoLocale) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.moduleLoader.loadedModules.length) {\n this.rule = { condition: 'and', not: false, rules: [] };\n this.notify('query-library', { prop: 'mongoParser', onPropertyChange: false, value: { mongoQuery: JSON.parse(mongoQuery), rule: this.rule, mongoLocale: mongoLocale } });\n }\n else {\n console.warn('[WARNING] :: Module \"query-library\" is not available in QueryBuilder component! You either misspelled the module name or forgot to load it.');\n }\n };\n /**\n * Gets the Mongo query from rules.\n *\n * @param {RuleModel} rule - 'rule' to be passed to get the sql.\n * @returns {object} - Sql query from rules.\n */\n QueryBuilder.prototype.getMongoQuery = function (rule) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.moduleLoader.loadedModules.length) {\n if (!rule) {\n rule = this.getValidRules();\n }\n var obj = { mongoQuery: null };\n this.notify('query-library', { prop: 'getMongoFromRules', onPropertyChange: false, value: { rule: rule, mongoQuery: '', obj: obj } });\n return obj['mongoQuery'];\n }\n else {\n console.warn('[WARNING] :: Module \"query-library\" is not available in QueryBuilder component! You either misspelled the module name or forgot to load it.');\n }\n return '';\n };\n /**\n * Clones the rule based on the rule ID to the specific group.\n *\n * @param {string} ruleID - Specifies the ruleID that needs to be cloned.\n * @param {string} groupID - Specifies the groupID in which the rule to be cloned.\n * @param {number} index - Specifies the index to insert the cloned rule inside the group.\n * @returns {void}\n */\n QueryBuilder.prototype.cloneRule = function (ruleID, groupID, index) {\n var getRule = this.getRule(ruleID.replace(this.element.id + '_', ''));\n var isCloneRule = this.showButtons.cloneRule;\n groupID = groupID.replace(this.element.id + '_', '');\n this.ruleIndex = index;\n this.cloneRuleBtnClick = true;\n this.showButtons.cloneRule = true;\n this.addRules([{\n 'label': getRule.label, 'field': getRule.field, 'type': getRule.type, 'operator': getRule.operator,\n 'value': getRule.value, 'condition': getRule.condition\n }], groupID);\n this.ruleIndex = -1;\n this.cloneRuleBtnClick = false;\n this.showButtons.cloneRule = isCloneRule;\n isCloneRule = false;\n };\n /**\n * Clones the group based on the group ID to the specific group.\n *\n * @param {string} groupID - Specifies the groupID that needs to be cloned.\n * @param {string} parentGroupID - Specifies the parentGroupID in which the group to be cloned.\n * @param {number} index - Specifies the index to insert the cloned group inside the parent group.\n * @returns {void}\n */\n QueryBuilder.prototype.cloneGroup = function (groupID, parentGroupID, index) {\n parentGroupID = parentGroupID.replace(this.element.id + '_', '');\n var group = this.getGroup(parentGroupID);\n var isCloneGroup = this.showButtons.cloneGroup;\n groupID = groupID.replace(this.element.id + '_', '');\n this.groupIndex = index;\n this.cloneGrpBtnClick = true;\n this.showButtons.cloneGroup = true;\n this.addGroups([{ 'condition': group.condition, 'not': group.not, 'rules': group.rules }], groupID);\n this.groupIndex = -1;\n this.cloneGrpBtnClick = false;\n this.showButtons.cloneGroup = isCloneGroup;\n isCloneGroup = false;\n };\n /**\n * Locks the rule based on the rule ID.\n *\n * @param {string} ruleID - Specifies the ruleID that needs to be locked.\n * @returns {void}\n */\n QueryBuilder.prototype.lockRule = function (ruleID) {\n if (ruleID.indexOf(this.element.id) < 0) {\n ruleID = this.element.id + '_' + ruleID;\n }\n var target = document.getElementById(ruleID).querySelectorAll('.e-lock-rule-btn')[0];\n this.ruleLock(target);\n };\n /**\n * Locks the group based on the group ID\n *\n * @param {string} groupID - Specifies the groupID that needs to be locked.\n * @returns {void}\n */\n QueryBuilder.prototype.lockGroup = function (groupID) {\n if (groupID.indexOf(this.element.id) < 0) {\n groupID = this.element.id + '_' + groupID;\n }\n var target = document.getElementById(groupID).querySelectorAll('.e-lock-grp-btn')[0];\n this.groupLock(target);\n };\n QueryBuilder.prototype.sqlParser = function (sqlString, sqlLocale) {\n var st = 0;\n var str;\n do {\n str = sqlString.slice(st);\n st += this.parseSqlStrings(str, sqlLocale);\n } while (str !== '');\n return this.parser;\n };\n QueryBuilder.prototype.parseSqlStrings = function (sqlString, sqlLocale) {\n var operators = ['=', '!=', '<=', '>=', '<', '>'];\n var conditions;\n if (sqlLocale) {\n conditions = [this.l10n.getConstant('AND').toUpperCase(), this.l10n.getConstant('OR').toUpperCase(), this.l10n.getConstant('NOT').toUpperCase()];\n }\n else {\n conditions = ['AND', 'OR', 'NOT'];\n }\n var subOp;\n if (sqlLocale) {\n subOp = [this.l10n.getConstant('In').toUpperCase(), this.l10n.getConstant('NotIn').toUpperCase(),\n this.l10n.getConstant('Like').toUpperCase(), this.l10n.getConstant('NotLike').toUpperCase(),\n this.l10n.getConstant('Between').toUpperCase(), this.l10n.getConstant('NotBetween').toUpperCase(),\n this.l10n.getConstant('IsNull').toUpperCase(), this.l10n.getConstant('IsNotNull').toUpperCase(),\n this.l10n.getConstant('IsEmpty').toUpperCase(), this.l10n.getConstant('IsNotEmpty').toUpperCase()];\n }\n else {\n subOp = ['IN', 'NOT IN', 'LIKE', 'NOT LIKE', 'BETWEEN', 'NOT BETWEEN', 'IS NULL', 'IS NOT NULL', 'IS EMPTY', 'IS NOT EMPTY'];\n }\n var regexStr;\n var regex;\n var matchValue;\n for (var i = 0, iLen = operators.length; i < iLen; i++) {\n regexStr = /^\\w+$/.test(operators[i]) ? '\\\\b' : '';\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var regExp = RegExp;\n regex = new regExp('^(' + operators[i] + ')' + regexStr, 'ig');\n if (regex.exec(sqlString)) {\n this.parser.push(['Operators', operators[i].toLowerCase()]);\n return operators[i].length;\n }\n }\n var lastPasrser = this.parser[this.parser.length - 1];\n if (!lastPasrser || (lastPasrser && lastPasrser[0] !== 'Literal')) {\n for (var i = 0, iLen = conditions.length; i < iLen; i++) {\n regexStr = /^\\w+$/.test(conditions[i]) ? '\\\\b' : '';\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var regExp = RegExp;\n regex = new regExp('^(' + conditions[i] + ')' + regexStr, 'ig');\n if (regex.exec(sqlString)) {\n this.parser.push(['Conditions', conditions[i].toLowerCase()]);\n return conditions[i].length;\n }\n }\n }\n for (var i = 0, iLen = subOp.length; i < iLen; i++) {\n regexStr = /^\\w+$/.test(subOp[i]) ? '\\\\b' : '';\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var regExp = RegExp;\n regex = new regExp('^(' + subOp[i] + ')' + regexStr, 'ig');\n if (regex.exec(sqlString)) {\n this.parser.push(['SubOperators', subOp[i].toLowerCase()]);\n return subOp[i].length;\n }\n }\n //Left Parenthesis\n if (/^\\(/.exec(sqlString)) {\n this.parser.push(['Left', '(']);\n return 1;\n }\n //Right Parenthesis\n if (/^\\)/.exec(sqlString)) {\n this.parser.push(['Right', ')']);\n return 1;\n }\n //Boolean\n if (/^(true|false)/.exec(sqlString)) {\n matchValue = /^(true|false)/.exec(sqlString)[0];\n this.parser.push(['String', matchValue]);\n return matchValue.length;\n }\n //Null\n if (/^null/.exec(sqlString)) {\n matchValue = /^null/.exec(sqlString)[0];\n this.parser.push(['String', null]);\n return matchValue.length;\n }\n if (/^`?([a-z_][a-z0-9_.\\\\[\\]\\\\(\\\\)]{0,}(\\\\:(number|float|string|date|boolean))?)`?/i.exec(sqlString)) {\n matchValue = /^`?([a-z_][a-z0-9_.\\\\[\\]\\\\(\\\\)]{0,}(\\\\:(number|float|string|date|boolean))?)`?/i.exec(sqlString)[1];\n this.parser.push(['Literal', matchValue]);\n return matchValue.length;\n }\n if (this.checkLiteral() && /^'?([a-z_][a-z0-9 _.\\\\[\\]\\\\(\\\\)-]{0,}(\\\\:(number|float|string|date|boolean))?)'?/i.exec(sqlString)) {\n matchValue = /^'?([a-z_][a-z0-9 _.\\\\[\\]\\\\(\\\\)-]{0,}(\\\\:(number|float|string|date|boolean))?)'?/i.exec(sqlString)[1];\n this.parser.push(['Literal', matchValue]);\n return matchValue.length + 2;\n }\n if (this.checkNumberLiteral(sqlString, sqlLocale)) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var regExValue = /^[0-9]+(\\.[0-9]+)$/.exec(sqlString);\n if (regExValue) {\n matchValue = regExValue[0];\n this.parser.push(['Literal', matchValue]);\n return matchValue.length;\n }\n }\n //String\n var singleString = this.getSingleQuoteString(sqlString);\n if (singleString !== '') {\n matchValue = singleString;\n if (matchValue[matchValue.length - 2] === '(') {\n var isClosed = false;\n for (var j = matchValue.length; j < sqlString.length; j++) {\n matchValue += sqlString[j];\n if (sqlString[j] === ')') {\n isClosed = true;\n }\n if (isClosed && sqlString[j] === '\\'') {\n break;\n }\n }\n }\n else if (sqlString[matchValue.length] && (sqlString[matchValue.length] !== ')') &&\n !this.checkCondition(sqlString, matchValue)) {\n matchValue = this.combineSingleQuoteString(sqlString, matchValue);\n }\n // end\n this.parser.push(['String', matchValue]);\n return matchValue.length;\n }\n // Double String\n var doubleString = this.getDoubleQuoteString(sqlString);\n if (doubleString !== '') {\n matchValue = doubleString;\n this.parser.push(['DoubleString', matchValue]);\n return matchValue.length;\n }\n //Number\n if (/^\\d*\\.?\\d+/.exec(sqlString)) {\n matchValue = /^\\d*\\.?\\d+/.exec(sqlString)[0];\n this.parser.push(['Number', matchValue]);\n return matchValue.length;\n }\n //Negative Number\n if (/^-?\\d*\\.?\\d+/.exec(sqlString)) {\n matchValue = /^-?\\d*\\.?\\d+/.exec(sqlString)[0];\n this.parser.push(['Number', matchValue]);\n return matchValue.length;\n }\n return 1;\n };\n QueryBuilder.prototype.getDoubleQuoteString = function (sqlString) {\n var start = sqlString.indexOf('\"');\n if (start === 0) {\n var end = sqlString.indexOf('\"', start + 1);\n if (end !== -1) {\n return sqlString.substring(start, end + 1);\n }\n }\n return '';\n };\n QueryBuilder.prototype.checkCondition = function (sqlString, matchValue) {\n if (sqlString.slice(matchValue.length + 1, matchValue.length + 4) === 'AND' ||\n sqlString.slice(matchValue.length + 1, matchValue.length + 3) === 'OR') {\n return true;\n }\n return false;\n };\n QueryBuilder.prototype.getSingleQuoteString = function (sqlString, isBetween) {\n var start = sqlString.indexOf('\\'');\n if ((start !== -1 && isBetween) || (start === 0 && !isBetween)) {\n var end = sqlString.indexOf('\\'', start + 1);\n if (end !== -1) {\n return sqlString.substring(start, end + 1);\n }\n }\n return '';\n };\n QueryBuilder.prototype.combineSingleQuoteString = function (sqlString, matchValue) {\n if (sqlString[matchValue.length] && (sqlString[matchValue.length] !== ')') &&\n !this.checkCondition(sqlString, matchValue) && sqlString[matchValue.length] !== ',') {\n var tempMatchValue = matchValue.substring(0, matchValue.length - 1);\n var tempStr = sqlString.replace(tempMatchValue, '');\n var singleString = this.getSingleQuoteString(tempStr, true);\n if (singleString !== '') {\n var parsedValue = singleString.substring(1, singleString.length);\n matchValue += parsedValue;\n matchValue = this.combineSingleQuoteString(sqlString, matchValue);\n }\n }\n return matchValue;\n };\n QueryBuilder.prototype.checkLiteral = function () {\n var lastParser = this.parser[this.parser.length - 1];\n if (!lastParser) {\n return true;\n }\n else {\n var secParser = this.parser[this.parser.length - 2];\n var betweenParser = this.parser[this.parser.length - 3];\n if (lastParser[0] === 'Left' && (secParser && secParser[0] === 'Conditions')) {\n return true;\n }\n var betweenOperator = 'between';\n if (lastParser[0] === 'Conditions' && (betweenParser && betweenParser[1].indexOf(betweenOperator) < 0)) {\n return true;\n }\n }\n return false;\n };\n QueryBuilder.prototype.checkNumberLiteral = function (sqlString, sqlLocale) {\n var lastParser = this.parser[this.parser.length - 1];\n if (!lastParser) {\n return true;\n }\n else {\n if (/^[0-9]+(?:\\.[0-9]+)$/.exec(sqlString)) {\n var secParser = this.parser[this.parser.length - 2];\n var betweenParser = this.parser[this.parser.length - 3];\n if (lastParser[0] === 'Left' && (secParser && secParser[0] === 'Conditions')) {\n return true;\n }\n var betweenOperator = sqlLocale ? this.l10n.getConstant('Between').toLowerCase() : 'between';\n if (lastParser[0] === 'Conditions' && (betweenParser && betweenParser[1].indexOf(betweenOperator) < 0)) {\n return true;\n }\n }\n }\n return false;\n };\n QueryBuilder.prototype.getOperator = function (value, operator, sqlLocale) {\n var operators = {\n '=': 'equal', '!=': 'notequal', '<': 'lessthan', '>': 'greaterthan', '<=': 'lessthanorequal',\n '>=': 'greaterthanorequal', 'in': 'in', 'not in': 'notin', 'between': 'between', 'not between': 'notbetween',\n 'is empty': 'isempty', 'is null': 'isnull', 'is not null': 'isnotnull', 'is not empty': 'isnotempty'\n };\n if (sqlLocale) {\n var localeOperator = Object.keys(this.sqlOperators);\n for (var i = 0; i < localeOperator.length; i++) {\n if (this.sqlOperators[localeOperator[i]] === operator.toUpperCase()) {\n if (value && value.indexOf('%') === 0 && value[value.length - 1] === '%') {\n return (operator.toUpperCase() === 'NOT LIKE') ? 'notcontains' : 'contains';\n }\n else if (value && value.indexOf('%') !== 0 && value.indexOf('%') === value.length - 1) {\n return (operator.toUpperCase() === 'NOT LIKE') ? 'notstartswith' : 'startswith';\n }\n else if (value && value.indexOf('%') === 0 && value.indexOf('%') !== value.length - 1) {\n return (operator.toUpperCase() === 'NOT LIKE') ? 'notendswith' : 'endswith';\n }\n return localeOperator[i];\n }\n }\n return null;\n }\n if (value) {\n if (value.indexOf('%') === 0 && value[value.length - 1] === '%') {\n return (operator === 'not like') ? 'notcontains' : 'contains';\n }\n else if (value.indexOf('%') !== 0 && value.indexOf('%') === value.length - 1) {\n return (operator === 'not like') ? 'notstartswith' : 'startswith';\n }\n else if (value.indexOf('%') === 0 && value.indexOf('%') !== value.length - 1) {\n return (operator === 'not like') ? 'notendswith' : 'endswith';\n }\n }\n else {\n if (operator === 'not like') {\n return 'notequal';\n }\n else if (operator === 'like') {\n return 'equal';\n }\n }\n return operators[\"\" + operator];\n };\n QueryBuilder.prototype.getTypeFromColumn = function (rules) {\n var columnData = this.getColumn(rules.field);\n if (!isNullOrUndefined(columnData)) {\n return columnData.type;\n }\n return null;\n };\n QueryBuilder.prototype.getLabelFromColumn = function (field) {\n var label = '';\n var l = 0;\n if (this.separator !== '') {\n var fieldColl = field.split(this.separator);\n for (var i = 0; i < fieldColl.length; i++) {\n label += this.getLabelFromField(fieldColl, i + 1);\n l++;\n if (l < fieldColl.length) {\n label += this.separator;\n }\n }\n return label;\n }\n else {\n var labelItem = this.getColumn(field).label;\n return labelItem;\n }\n };\n QueryBuilder.prototype.getLabelFromField = function (field, startIdx) {\n var fieldName = '';\n var j = 0;\n for (var k = 0; k < startIdx; k++) {\n fieldName += field[k];\n j++;\n if (j < startIdx) {\n fieldName += this.separator;\n }\n }\n return this.getColumn(fieldName).label;\n };\n QueryBuilder.prototype.processParser = function (parser, rules, levelColl, sqlLocale) {\n var j;\n var jLen;\n var rule;\n var subRules;\n var numVal = [];\n var strVal = [];\n var k;\n var kLen;\n var l;\n var lLen;\n var grpCount;\n var operator;\n var isLeftOpened = false;\n var isNotOpened = false;\n for (var i = 0, iLen = parser.length; i < iLen; i++) {\n if (parser[i][0] === 'Literal') {\n var column = this.getColumn(parser[i][1]);\n rule = { label: (column && column.label) ? column.label : parser[i][1], field: parser[i][1] };\n if (parser[i + 1][0] === 'SubOperators') {\n if (parser[i + 1][1].indexOf('null') > -1 || parser[i + 1][1].indexOf('empty') > -1) {\n rule.operator = this.getOperator(' ', parser[i + 1][1], sqlLocale);\n rule.value = null;\n rule.type = this.getTypeFromColumn(rule);\n }\n else {\n var oper = parser[i + 3][1] ? parser[i + 3][1].replace(/'/g, '') : parser[i + 3][1];\n rule.operator = this.getOperator(oper, parser[i + 1][1], sqlLocale);\n }\n operator = parser[i + 1][1];\n i++;\n j = i + 1;\n jLen = iLen;\n if (sqlLocale && rule.operator === 'contains' || rule.operator === 'startswith' || rule.operator === 'endswith') {\n operator = 'like';\n }\n else if (sqlLocale && rule.operator === 'notcontains' || rule.operator === 'notstartswith' || rule.operator === 'notendswith') {\n operator = 'not like';\n }\n else if (sqlLocale) {\n operator = rule.operator;\n }\n for (j = i + 1; j < jLen; j++) {\n if (operator.indexOf('between') < 0 && parser[j][0] === 'Left') {\n isLeftOpened = true;\n }\n else if (parser[j][0] === 'Right' && isLeftOpened) {\n i = j;\n isLeftOpened = false;\n break;\n }\n else {\n if (operator.indexOf('null') > -1 || operator.indexOf('empty') > -1) {\n break;\n }\n if (operator.indexOf('like') > -1 && parser[j][0] === 'String') {\n var val = parser[j][1];\n if (parser[j][1] && parser[j][1][0] === '\\'') {\n val = parser[j][1].substring(1, parser[j][1].length - 1);\n }\n val = val ? val.replace(/%/g, '') : parser[j][1];\n rule.value = val;\n rule.type = 'string';\n }\n else if (operator.indexOf('between') > -1) {\n if (parser[j][0] === 'Literal' || parser[j][0] === 'Left') {\n break;\n }\n if (parser[j][0] === 'Number') {\n numVal.push(Number(parser[j][1]));\n }\n else if (parser[j][0] === 'String') {\n var val = parser[j][1];\n if (parser[j][1] && parser[j][1][0] === '\\'') {\n val = parser[j][1].substring(1, parser[j][1].length - 1);\n }\n strVal.push(val);\n }\n }\n else {\n if (parser[j][0] === 'Number') {\n numVal.push(Number(parser[j][1]));\n }\n else if (parser[j][0] === 'String') {\n var val = parser[j][1];\n if (parser[j][1] && parser[j][1][0] === '\\'') {\n val = parser[j][1].substring(1, parser[j][1].length - 1);\n }\n strVal.push(val);\n }\n }\n rule.type = this.getTypeFromColumn(rule);\n }\n }\n if (operator.indexOf('like') < 0) {\n if (parser[j - 1][0] === 'Number') {\n rule.value = numVal;\n rule.type = 'number';\n }\n else if (parser[j - 1][0] === 'String') {\n rule.value = strVal;\n rule.type = 'string';\n }\n else if (operator.indexOf('between') > -1 && parser[j - 1][0] === 'Conditions') {\n if (strVal.length !== 0) {\n rule.value = strVal;\n rule.type = 'string';\n }\n else {\n rule.value = numVal;\n rule.type = 'number';\n }\n }\n numVal = [];\n strVal = [];\n rule.type = this.getTypeFromColumn(rule);\n }\n if (this.enableSeparateConnector && parser[i + 1][0] === 'Conditions') {\n rule.condition = parser[i + 1][1];\n }\n }\n else if (parser[i + 1][0] === 'Operators') {\n rule.operator = this.getOperator(parser[i + 2][1], parser[i + 1][1], sqlLocale);\n if (rule.operator === 'equal' && parser[i + 2][0] === 'String' && parser[i + 2][1] === '\\'\\'') {\n rule.operator = 'isempty';\n }\n else if (rule.operator === 'notequal' && parser[i + 2][0] === 'String' && parser[i + 2][1] === '\\'\\'') {\n rule.operator = 'isnotempty';\n }\n if (parser[i + 2][0] === 'Number') {\n rule.type = 'number';\n rule.value = Number(parser[i + 2][1]);\n }\n else {\n rule.type = 'string';\n var val = parser[i + 2][1];\n if (val && val[0] === '\\'') {\n val = val.substring(1, val.length - 1);\n }\n rule.value = val;\n }\n if (this.enableSeparateConnector && parser[i + 3][0] === 'Conditions') {\n rule.condition = parser[i + 3][1];\n }\n rule.type = this.getTypeFromColumn(rule);\n }\n rules.rules.push(rule);\n }\n else if (parser[i][0] === 'Left') {\n if (!(parser[0][0] === 'Left') && (parser[i - 1][1] === 'not' || sqlLocale && this.l10n.getConstant('NOT').toLowerCase() === parser[i - 1][1])) {\n isNotOpened = true;\n continue;\n }\n this.parser = parser.splice(i + 1, iLen - (i + 1));\n if (this.enableNotCondition) {\n subRules = { condition: 'and', rules: [], not: false };\n }\n else {\n subRules = { condition: 'and', rules: [] };\n }\n grpCount = 0;\n kLen = rules.rules.length;\n for (k = 0; k < kLen; k++) { //To get the group position\n if (rules.rules[k].rules) {\n grpCount++;\n }\n }\n levelColl.push(grpCount);\n rules.rules.push(subRules);\n subRules = this.processParser(this.parser, subRules, levelColl, sqlLocale);\n return rules;\n }\n else if (parser[i][0] === 'Conditions' && !this.enableSeparateConnector) {\n if (parser[i][1] === 'not' || (sqlLocale && this.l10n.getConstant('NOT').toLowerCase() === parser[i][1])) {\n rules.not = true;\n }\n else {\n rules.condition = parser[i][1];\n }\n }\n else if (parser[i][0] === 'Right') {\n if (isNotOpened && parser[i + 1][0] === 'Right') {\n isNotOpened = false;\n continue;\n }\n this.parser = parser.splice(i + 1, iLen - (i + 1));\n levelColl.pop(); //To get the parent Group\n rules = this.rule;\n lLen = levelColl.length;\n for (l = 0; l < lLen; l++) {\n rules = this.findGroupByIdx(levelColl[l], rules, l === 0);\n }\n return this.processParser(this.parser, rules, levelColl, sqlLocale);\n }\n }\n return rules;\n };\n /**\n * Clone the Group\n *\n * @param {Element | string} target - 'target' to be passed to clone the group.\n * @returns {void}\n */\n QueryBuilder.prototype.groupClone = function (target) {\n var groupElem = target.closest('.e-rule-list').closest('.e-group-container');\n var targetGrpId = target.id.replace(this.element.id + '_', '');\n var groupId = groupElem.id.replace(this.element.id + '_', '');\n var group = this.getGroup(targetGrpId);\n this.groupIndex = Array.prototype.indexOf.call(target.closest('.e-rule-list').children, target.closest('.e-group-container'));\n this.addGroups([{ 'condition': group.condition, 'not': group.not, 'rules': group.rules }], groupId);\n this.groupIndex = -1;\n };\n QueryBuilder.prototype.ruleClone = function (target) {\n var ruleElem = closest(target, '.e-rule-container');\n var groupElem = target.closest('.e-rule-list').closest('.e-group-container');\n var getRule = this.getRule(target);\n var groupId = groupElem.id.replace(this.element.id + '_', '');\n var ruleElemColl = groupElem.querySelectorAll('.e-rule-container');\n for (var i = 0, iLen = ruleElemColl.length; i < iLen; i++) {\n if (ruleElem.id === ruleElemColl[i].id) {\n this.ruleIndex = i;\n }\n }\n if (this.enableSeparateConnector) {\n this.addRules([{ 'label': getRule.label, 'field': getRule.field, 'type': getRule.type, 'operator': getRule.operator,\n 'value': getRule.value, 'condition': getRule.condition }], groupId);\n }\n else {\n this.addRules([{ 'label': getRule.label, 'field': getRule.field, 'type': getRule.type, 'operator': getRule.operator,\n 'value': getRule.value }], groupId);\n }\n this.ruleIndex = -1;\n };\n QueryBuilder.prototype.ruleLock = function (target) {\n var ruleElem = closest(target, '.e-rule-container');\n var rule = this.getRule(ruleElem.id.replace(this.element.id + '_', ''));\n if (ruleElem.classList.contains('e-disable')) {\n rule.isLocked = false;\n this.lockItems = this.lockItems.filter(function (lockItem) { return lockItem !== ruleElem.id; });\n ruleElem.classList.remove('e-disable');\n this.disableRuleControls(target, ruleElem, false);\n target.children[0].classList.add('e-unlock');\n target.children[0].classList.remove('e-lock');\n target.setAttribute('title', this.l10n.getConstant('LockRule'));\n }\n else {\n rule.isLocked = true;\n if (this.lockItems.indexOf(ruleElem.id) < 0) {\n this.lockItems.splice(this.lockItems.length - 1, 0, ruleElem.id);\n }\n ruleElem.classList.add('e-disable');\n this.disableRuleControls(target, ruleElem, true);\n target.children[0].classList.add('e-lock');\n target.children[0].classList.remove('e-unlock');\n target.setAttribute('title', this.l10n.getConstant('UnlockRule'));\n }\n };\n QueryBuilder.prototype.groupLock = function (target) {\n var groupElem = closest(target, '.e-group-container');\n var group = this.getGroup(groupElem.id.replace(this.element.id + '_', ''));\n var isRoot = groupElem.id.indexOf('group0') > -1;\n if (groupElem.classList.contains('e-disable')) {\n if (isRoot) {\n var newGroup = {};\n newGroup.condition = group.condition;\n newGroup.not = group.not;\n newGroup.isLocked = false;\n this.setProperties({ rule: newGroup }, true);\n }\n else {\n group.isLocked = false;\n }\n this.lockItems = this.lockItems.filter(function (lockItem) { return lockItem !== groupElem.id; });\n groupElem.classList.remove('e-disable');\n this.disableHeaderControls(target, groupElem, false);\n target.children[0].classList.add('e-unlock');\n target.children[0].classList.remove('e-lock');\n target.setAttribute('title', this.l10n.getConstant('LockGroup'));\n this.updateLockItems();\n }\n else {\n if (isRoot) {\n var newGroup = {};\n newGroup.condition = group.condition;\n newGroup.not = group.not;\n newGroup.isLocked = true;\n this.setProperties({ rule: newGroup }, true);\n }\n else {\n group.isLocked = true;\n }\n if (this.lockItems.indexOf(groupElem.id) < 0) {\n this.lockItems.splice(this.lockItems.length - 1, 0, groupElem.id);\n }\n groupElem.classList.add('e-disable');\n this.disableHeaderControls(target, groupElem, true);\n target.children[0].classList.add('e-lock');\n target.children[0].classList.remove('e-unlock');\n target.setAttribute('title', this.l10n.getConstant('UnlockGroup'));\n }\n };\n QueryBuilder.prototype.updateLockItems = function () {\n for (var i = 0; i < this.lockItems.length; i++) {\n var idColl = this.lockItems[i].split('_');\n if (idColl.length > 2) {\n var ruleElem = this.element.querySelector('#' + this.lockItems[i]);\n var target = ruleElem.querySelector('.e-lock-rule-btn');\n ruleElem = closest(target, '.e-rule-container');\n if (!ruleElem.classList.contains('e-disable')) {\n this.ruleLock(target);\n }\n }\n else {\n var groupElem = this.element.querySelector('#' + this.lockItems[i]);\n var target = groupElem.querySelector('.e-lock-grp-btn');\n groupElem = closest(target, '.e-group-container');\n if (!groupElem.classList.contains('e-disable')) {\n this.groupLock(target);\n }\n }\n }\n };\n QueryBuilder.prototype.disableHeaderControls = function (target, groupElem, isDisabled) {\n var andElem = groupElem.querySelectorAll('.e-btngroup-and');\n var orElem = groupElem.querySelectorAll('.e-btngroup-or');\n var notElem = groupElem.querySelectorAll('.e-qb-toggle');\n var addElem = groupElem.querySelectorAll('.e-add-btn');\n var deleteGrpElem = groupElem.querySelectorAll('.e-deletegroup');\n var lockElem = groupElem.querySelectorAll('.e-lock-grp-btn');\n var cloneElem = groupElem.querySelectorAll('.e-clone-grp-btn');\n var groupContElem = groupElem.querySelectorAll('.e-group-container');\n var addCondition = groupElem.querySelectorAll('.e-add-condition-btn');\n var addGroup = groupElem.querySelectorAll('.e-add-group-btn');\n for (var i = 0; i < andElem.length; i++) {\n if (isDisabled) {\n if (groupContElem[i] && groupContElem[i].classList.contains('e-disable')) {\n groupContElem[i].classList.add('e-disable');\n }\n andElem[i].disabled = true;\n orElem[i].disabled = true;\n if (addElem[i]) {\n addElem[i].disabled = true;\n }\n if (addCondition[i]) {\n addCondition[i].disabled = true;\n }\n if (addGroup[i]) {\n addGroup[i].disabled = true;\n }\n if (notElem[i]) {\n notElem[i].disabled = true;\n }\n if (deleteGrpElem[i]) {\n deleteGrpElem[i].disabled = true;\n }\n if (cloneElem[i]) {\n cloneElem[i].disabled = true;\n }\n andElem[i].parentElement.classList.add('e-disabled');\n if (lockElem[i] && lockElem[i] !== target) {\n lockElem[i].disabled = true;\n lockElem[i].children[0].classList.remove('e-unlock');\n lockElem[i].children[0].classList.add('e-lock');\n }\n }\n else {\n if (groupContElem[i]) {\n groupContElem[i].classList.remove('e-disable');\n }\n andElem[i].disabled = false;\n orElem[i].disabled = false;\n if (addElem[i]) {\n addElem[i].disabled = false;\n }\n if (addCondition[i]) {\n addCondition[i].disabled = false;\n }\n if (addGroup[i]) {\n addGroup[i].disabled = false;\n }\n if (lockElem[i]) {\n lockElem[i].disabled = false;\n }\n if (notElem[i]) {\n notElem[i].disabled = false;\n }\n if (deleteGrpElem[i]) {\n deleteGrpElem[i].disabled = false;\n }\n if (cloneElem[i]) {\n cloneElem[i].disabled = false;\n }\n andElem[i].parentElement.classList.remove('e-disabled');\n if (lockElem[i]) {\n lockElem[i].children[0].classList.remove('e-lock');\n }\n if (lockElem[i]) {\n lockElem[i].children[0].classList.add('e-unlock');\n }\n }\n }\n this.disableRuleControls(target, groupElem, isDisabled);\n };\n QueryBuilder.prototype.disableRuleControls = function (target, groupElem, isDisabled) {\n var ddlElement = groupElem.querySelectorAll('.e-control.e-dropdownlist');\n var numericElement = groupElem.querySelectorAll('.e-control.e-numerictextbox');\n var textElement = groupElem.querySelectorAll('.e-control.e-textbox');\n var dateElement = groupElem.querySelectorAll('.e-control.e-datepicker');\n var checkboxElement = groupElem.querySelectorAll('.e-control.e-checkbox');\n var radioBtnElement = groupElem.querySelectorAll('.e-control.e-radio');\n var multiSelectElement = groupElem.querySelectorAll('.e-control.e-multiselect');\n var deleteElem = groupElem.querySelectorAll('.e-rule-delete');\n var lockElem = groupElem.querySelectorAll('.e-lock-rule');\n var cloneElem = groupElem.querySelectorAll('.e-clone-rule');\n var ruleElem = groupElem.querySelectorAll('.e-rule-container');\n for (var i = 0; i < deleteElem.length; i++) {\n if (isDisabled) {\n if (ruleElem[i] && ruleElem[i].classList.contains('e-disable')) {\n ruleElem[i].classList.add('e-disable');\n }\n deleteElem[i].disabled = true;\n if (cloneElem[i]) {\n cloneElem[i].disabled = true;\n }\n if (lockElem[i] !== target) {\n lockElem[i].disabled = true;\n lockElem[i].children[0].classList.remove('e-unlock');\n lockElem[i].children[0].classList.add('e-lock');\n }\n }\n else {\n if (ruleElem[i]) {\n ruleElem[i].classList.remove('e-disable');\n }\n if (cloneElem[i]) {\n cloneElem[i].disabled = false;\n }\n deleteElem[i].disabled = false;\n lockElem[i].disabled = false;\n lockElem[i].children[0].classList.remove('e-lock');\n lockElem[i].children[0].classList.add('e-unlock');\n }\n }\n var dropDownObj;\n var numericObj;\n var textObj;\n var dateObj;\n var checkBoxObj;\n var radioBtnObj;\n var multiSelectObj;\n for (var i = 0; i < ddlElement.length; i++) {\n dropDownObj = getComponent(ddlElement[i], 'dropdownlist');\n if (isDisabled) {\n dropDownObj.enabled = false;\n }\n else {\n dropDownObj.enabled = true;\n }\n }\n for (var i = 0; i < numericElement.length; i++) {\n numericObj = getComponent(numericElement[i], 'numerictextbox');\n if (isDisabled) {\n numericObj.enabled = false;\n }\n else {\n numericObj.enabled = true;\n }\n }\n for (var i = 0; i < textElement.length; i++) {\n textObj = getComponent(textElement[i], 'textbox');\n if (isDisabled) {\n textObj.enabled = false;\n }\n else {\n textObj.enabled = true;\n }\n }\n for (var i = 0; i < dateElement.length; i++) {\n dateObj = getComponent(dateElement[i], 'datepicker');\n if (isDisabled) {\n dateObj.enabled = false;\n }\n else {\n dateObj.enabled = true;\n }\n }\n for (var i = 0; i < checkboxElement.length; i++) {\n checkBoxObj = getComponent(checkboxElement[i], 'checkbox');\n if (isDisabled) {\n checkBoxObj.disabled = true;\n }\n else {\n checkBoxObj.disabled = false;\n }\n }\n for (var i = 0; i < radioBtnElement.length; i++) {\n radioBtnObj = getComponent(radioBtnElement[i], 'radio');\n if (isDisabled) {\n radioBtnObj.disabled = true;\n }\n else {\n radioBtnObj.disabled = false;\n }\n }\n for (var i = 0; i < multiSelectElement.length; i++) {\n multiSelectObj = getComponent(multiSelectElement[i], 'multiselect');\n if (isDisabled) {\n multiSelectObj.enabled = false;\n }\n else {\n multiSelectObj.enabled = true;\n }\n }\n };\n __decorate([\n Event()\n ], QueryBuilder.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], QueryBuilder.prototype, \"actionBegin\", void 0);\n __decorate([\n Event()\n ], QueryBuilder.prototype, \"beforeChange\", void 0);\n __decorate([\n Event()\n ], QueryBuilder.prototype, \"change\", void 0);\n __decorate([\n Event()\n ], QueryBuilder.prototype, \"dataBound\", void 0);\n __decorate([\n Event()\n ], QueryBuilder.prototype, \"ruleChange\", void 0);\n __decorate([\n Event()\n ], QueryBuilder.prototype, \"dragStart\", void 0);\n __decorate([\n Event()\n ], QueryBuilder.prototype, \"drag\", void 0);\n __decorate([\n Event()\n ], QueryBuilder.prototype, \"drop\", void 0);\n __decorate([\n Complex({}, ShowButtons)\n ], QueryBuilder.prototype, \"showButtons\", void 0);\n __decorate([\n Property(false)\n ], QueryBuilder.prototype, \"summaryView\", void 0);\n __decorate([\n Property(false)\n ], QueryBuilder.prototype, \"allowValidation\", void 0);\n __decorate([\n Property('Default')\n ], QueryBuilder.prototype, \"fieldMode\", void 0);\n __decorate([\n Property([])\n ], QueryBuilder.prototype, \"columns\", void 0);\n __decorate([\n Property(null)\n ], QueryBuilder.prototype, \"fieldModel\", void 0);\n __decorate([\n Property(null)\n ], QueryBuilder.prototype, \"operatorModel\", void 0);\n __decorate([\n Property(null)\n ], QueryBuilder.prototype, \"valueModel\", void 0);\n __decorate([\n Property()\n ], QueryBuilder.prototype, \"headerTemplate\", void 0);\n __decorate([\n Property('')\n ], QueryBuilder.prototype, \"cssClass\", void 0);\n __decorate([\n Property([])\n ], QueryBuilder.prototype, \"dataSource\", void 0);\n __decorate([\n Property('Horizontal')\n ], QueryBuilder.prototype, \"displayMode\", void 0);\n __decorate([\n Property(false)\n ], QueryBuilder.prototype, \"enablePersistence\", void 0);\n __decorate([\n Property('Default')\n ], QueryBuilder.prototype, \"sortDirection\", void 0);\n __decorate([\n Property(5)\n ], QueryBuilder.prototype, \"maxGroupCount\", void 0);\n __decorate([\n Property('auto')\n ], QueryBuilder.prototype, \"height\", void 0);\n __decorate([\n Property('auto')\n ], QueryBuilder.prototype, \"width\", void 0);\n __decorate([\n Property(false)\n ], QueryBuilder.prototype, \"matchCase\", void 0);\n __decorate([\n Property(0)\n ], QueryBuilder.prototype, \"immediateModeDelay\", void 0);\n __decorate([\n Property(false)\n ], QueryBuilder.prototype, \"enableNotCondition\", void 0);\n __decorate([\n Property(false)\n ], QueryBuilder.prototype, \"readonly\", void 0);\n __decorate([\n Property(true)\n ], QueryBuilder.prototype, \"addRuleToNewGroups\", void 0);\n __decorate([\n Property(false)\n ], QueryBuilder.prototype, \"autoSelectField\", void 0);\n __decorate([\n Property(true)\n ], QueryBuilder.prototype, \"autoSelectOperator\", void 0);\n __decorate([\n Property('')\n ], QueryBuilder.prototype, \"separator\", void 0);\n __decorate([\n Property(false)\n ], QueryBuilder.prototype, \"enableSeparateConnector\", void 0);\n __decorate([\n Complex({ condition: 'and', rules: [] }, Rule)\n ], QueryBuilder.prototype, \"rule\", void 0);\n __decorate([\n Property(false)\n ], QueryBuilder.prototype, \"allowDragAndDrop\", void 0);\n QueryBuilder = __decorate([\n NotifyPropertyChanges\n ], QueryBuilder);\n return QueryBuilder;\n}(Component));\nexport { QueryBuilder };\nvar LevelColl = /** @class */ (function () {\n function LevelColl() {\n }\n return LevelColl;\n}());\n","import { extend, isNullOrUndefined } from '@syncfusion/ej2-base';\nvar QueryLibrary = /** @class */ (function () {\n function QueryLibrary(parent) {\n this.parent = parent;\n this.addEventListener();\n }\n QueryLibrary.prototype.destroy = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.removeEventListener();\n };\n QueryLibrary.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on('query-library', this.queryLibrary, this);\n this.parent.on('destroyed', this.destroy, this);\n };\n QueryLibrary.prototype.removeEventListener = function () {\n this.parent.off('query-library', this.queryLibrary);\n this.parent.off('destroyed', this.destroy);\n };\n QueryLibrary.prototype.queryLibrary = function (args) {\n switch (args.prop) {\n case 'getMongoFromRules':\n args.value['obj']['mongoQuery'] = this.getMongoFromRules(args.value['rule'], args.value['mongoQuery']);\n break;\n case 'mongoParser':\n this.mongoParser(args.value['mongoQuery'], args.value['rule'], args.value['mongoLocale']);\n break;\n case 'getParameterSql':\n args.value['obj']['sql'] = this.getParameterSql(args.value['rule']);\n break;\n case 'getNamedParameterSql':\n args.value['obj']['sql'] = this.getNamedParameterSql(args.value['rule']);\n break;\n case 'convertParamSqlToSql':\n args.value['obj']['sql'] = this.convertParamSqlToSql(args.value['sql']);\n break;\n case 'convertNamedParamSqlToSql':\n args.value['obj']['sql'] = this.convertNamedParamSqlToSql(args.value['sql']);\n break;\n }\n };\n QueryLibrary.prototype.getMongoFromRules = function (rule, mongoQuery) {\n mongoQuery = '{';\n if (rule.condition === 'or') {\n mongoQuery += '\"$or\":[';\n mongoQuery = this.convertMongoQuery(rule.rules, mongoQuery) + ']';\n }\n else {\n mongoQuery += '\"$and\":[';\n mongoQuery = this.convertMongoQuery(rule.rules, mongoQuery) + ']';\n }\n mongoQuery += '}';\n return mongoQuery;\n };\n QueryLibrary.prototype.getOperatorFromMongoOperator = function (operator) {\n var operatorValue;\n switch (operator) {\n case '$ne':\n operatorValue = 'notequal';\n break;\n case '$gt':\n operatorValue = 'greaterthan';\n break;\n case '$gte':\n operatorValue = 'greaterthanorequal';\n break;\n case '$lt':\n operatorValue = 'lessthan';\n break;\n case '$lte':\n operatorValue = 'lessthanorequal';\n break;\n case '$nin':\n operatorValue = 'notin';\n break;\n }\n return operatorValue;\n };\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n QueryLibrary.prototype.convertMongoQuery = function (rules, mongoQuery) {\n var _this = this;\n var i = 0;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n rules.forEach(function (item) {\n i++;\n mongoQuery += '{';\n if (item.rules !== undefined) {\n if (item.condition === 'or') {\n mongoQuery += ' \"$or\":[';\n mongoQuery = _this.convertMongoQuery(item.rules, mongoQuery) + ']';\n }\n else {\n mongoQuery += ' \"$and\":[';\n mongoQuery = _this.convertMongoQuery(item.rules, mongoQuery) + ']';\n }\n }\n var itVal = item.type === 'string' && item.operator !== 'in' && item.operator !== 'notin' && item.value && item.value.trim() !== '' ? item.value.replace(/'/g, '\\\\') : '';\n if (item.type === 'string' && (item.operator === 'in' || item.operator === 'notin') && item.value && item.value.length === 1) {\n itVal = item.value[0].replace(/'/g, '\\\\');\n }\n var field = item.field ? item.field.substring(0) : '';\n switch (item.operator) {\n case 'contains':\n mongoQuery += '\"' + field + '\":{\"$regex\":\"' + itVal + '\"}';\n break;\n case 'notcontains':\n mongoQuery += '\"' + field + '\":{\"$not\":{\"$regex\":\"' + item.value + '\"}}';\n break;\n case 'startswith':\n mongoQuery += '\"' + field + '\":{\"$regex\":\"^' + itVal + '\"}';\n break;\n case 'notstartswith':\n mongoQuery += '\"' + field + '\":{\"$not\":{\"$regex\":\"^' + item.value + '\"}}';\n break;\n case 'endswith':\n mongoQuery += '\"' + field + '\":{\"$regex\":\"' + itVal + '$\"}';\n break;\n case 'notendswith':\n mongoQuery += '\"' + field + '\":{\"$not\":{\"$regex\":\"' + item.value + '$\"}}';\n break;\n case 'isnull':\n mongoQuery += '\"' + field + '\": null';\n break;\n case 'isnotnull':\n mongoQuery += '\"' + field + '\":{\"$ne\": null}';\n break;\n case 'isempty':\n mongoQuery += '\"' + field + '\": \"\"';\n break;\n case 'isnotempty':\n mongoQuery += '\"' + field + '\":{\"$ne\": \"\"}';\n break;\n case 'equal':\n if (item.type === 'string') {\n mongoQuery += '\"' + field + '\":\"' + itVal + '\"';\n }\n else if (item.type === 'date') {\n mongoQuery += '\"' + field + '\":\"' + item.value + '\"';\n }\n else if (item.type === 'boolean') {\n mongoQuery += '\"' + field + '\":' + item.value + '';\n }\n else {\n mongoQuery += '\"' + field + '\":' + item.value + '';\n }\n break;\n case 'notequal':\n if (item.type === 'string') {\n mongoQuery += '\"' + field + '\":{\"$ne\":\"' + itVal + '\"}';\n }\n else if (item.type === 'date') {\n mongoQuery += '\"' + field + '\":{\"$ne\":\"' + item.value + '\"}';\n }\n else {\n mongoQuery += '\"' + field + '\":{\"$ne\":' + item.value + '}';\n }\n break;\n case 'in':\n if (item.type === 'string') {\n if (item.value.length > 1) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var s = item.value.map(function (x, j) { return (j < item.value.length ? \"\\\"\" + x + \"\\\"\" : ''); }).toString();\n s = s.endsWith(',') ? s.substring(0, s.length - 1) : s;\n mongoQuery += '\"' + field + '\": { \"$in\": [' + s + ']}';\n }\n else {\n mongoQuery += '\"' + field + '\": { \"$in\": [\"' + itVal + '\"]}';\n }\n }\n else if (item.type === 'number') {\n if (item.value.length > 1) {\n mongoQuery += '\"' + field + '\": { \"$in\": [' + item.value.toString() + ']}';\n }\n else {\n mongoQuery += '\"' + field + '\": { \"$in\": [' + item.value + ']}';\n }\n }\n break;\n case 'notin':\n if (item.type === 'string') {\n if (item.value.length > 1) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var s = item.value.map(function (x, j) { return (j < item.value.length ? \"\\\"\" + x + \"\\\"\" : ''); }).toString();\n s = s.endsWith(',') ? s.substring(0, s.length - 1) : s;\n mongoQuery += '\"' + field + '\": { \"$nin\": [' + s + ']}';\n }\n else {\n mongoQuery += '\"' + field + '\": { \"$nin\": [\"' + itVal + '\"]}';\n }\n }\n else if (item.type === 'number') {\n if (item.value.length > 1) {\n mongoQuery += '\"' + field + '\": { \"$nin\": [' + item.value.toString() + ']}';\n }\n else {\n mongoQuery += '\"' + field + '\": { \"$nin\": [' + item.value + ']}';\n }\n }\n break;\n case 'greaterthan':\n if (item.type === 'number') {\n mongoQuery += '\"' + field + '\": { \"$gt\": ' + item.value + '}';\n }\n else {\n mongoQuery += '\"' + field + '\": { \"$gt\": \"' + item.value + '\"}';\n }\n break;\n case 'greaterthanorequal':\n if (item.type === 'number') {\n mongoQuery += '\"' + field + '\": { \"$gte\": ' + item.value + '}';\n }\n else {\n mongoQuery += '\"' + field + '\": { \"$gte\": \"' + item.value + '\"}';\n }\n break;\n case 'between':\n if (item.type === 'number') {\n mongoQuery += '\"' + field + '\": {\"$gte\":' + item.value[0] + ', \"$lte\":' + item.value[1] + '}';\n }\n else {\n mongoQuery += '\"' + field + '\": {\"$gte\": \"' + item.value[0] + '\", \"$lte\": \"' + item.value[1] + '\"}';\n }\n break;\n case 'notbetween':\n if (item.type === 'number') {\n mongoQuery += '\"$or\":[{\"' + field + '\": {\"$lt\":' + item.value[0] + '}}, {\"' + field + '\": {\"$gt\":' + item.value[1] + '}}]';\n }\n else {\n mongoQuery += '\"$or\":[{\"' + field + '\": {\"$lt\": \"' + item.value[0] + '\"}}, {\"' + field + '\": {\"$gt\": \"' + item.value[1] + '\"}}]';\n }\n break;\n case 'lessthan':\n if (item.type === 'number') {\n mongoQuery += '\"' + field + '\": { \"$lt\": ' + item.value + '}';\n }\n else {\n mongoQuery += '\"' + field + '\": { \"$lt\": \"' + item.value + '\"}';\n }\n break;\n case 'lessthanorequal':\n if (item.type === 'number') {\n mongoQuery += '\"' + field + '\": { \"$lte\": ' + item.value + '}';\n }\n else {\n mongoQuery += '\"' + field + '\": { \"$lte\": \"' + item.value + '\"}';\n }\n break;\n }\n mongoQuery += '}';\n if (rules.length !== i) {\n mongoQuery += ',';\n }\n });\n return mongoQuery;\n };\n QueryLibrary.prototype.mongoParser = function (mongoQuery, rule, mongoLocale) {\n var mongoList;\n if (Object.keys(mongoQuery).indexOf('$and') > -1) {\n mongoList = mongoQuery['$and'];\n rule.condition = 'and';\n }\n else if (Object.keys(mongoQuery).indexOf('$or') > -1) {\n mongoList = mongoQuery['$or'];\n rule.condition = 'or';\n }\n rule.rules = [];\n this.mongoRecursion(mongoList, rule.rules, mongoLocale);\n };\n QueryLibrary.prototype.mongoRecursion = function (mongoList, rules, mongoLocale) {\n var operatorValue;\n var type;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var stringValue;\n var key;\n var betweenValue;\n var condition;\n var value;\n var subRules;\n var rule;\n var keyObj;\n var ruleValue;\n for (var i = 0, len = mongoList.length; i < len; i++) {\n var betweenOperatorArray = [];\n var inOperatorArray = [];\n condition = Object.keys(mongoList[i])[0];\n value = mongoList[i][condition];\n if (condition === '$and') {\n if (this.parent.enableNotCondition) {\n subRules = { condition: condition.replace('$', ''), rules: [], not: false };\n }\n else {\n subRules = { condition: condition.replace('$', ''), rules: [] };\n }\n rules.push(subRules);\n this.mongoRecursion(mongoList[i][condition], rules[rules.length - 1].rules, mongoLocale);\n }\n else if (condition === '$or') {\n var notBetween = void 0;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var innerObject = [];\n var keys = [];\n var firstKey = [];\n var secondKey = [];\n var innerKeys = [];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var firstValue = [];\n var secondValue = [];\n var innerFirstValue = [];\n var innerSecondValue = [];\n if (Array.isArray(value) && value.length === 2) {\n keys = Object.keys(value);\n innerFirstValue = value[keys[0]];\n innerSecondValue = value[keys[1]];\n if (typeof innerFirstValue === 'object') {\n innerObject = Object.keys(innerFirstValue)[0];\n innerKeys = Object.keys(innerFirstValue[Object.keys(innerFirstValue)[0]]);\n firstKey = innerKeys[0];\n secondKey = Object.keys(innerSecondValue[Object.keys(innerSecondValue)[0]])[0];\n if (firstKey === '$lt' && secondKey === '$gt') {\n operatorValue = 'notbetween';\n // eslint-disable-next-line security/detect-object-injection\n firstValue = innerFirstValue[innerObject][firstKey];\n // eslint-disable-next-line security/detect-object-injection\n secondValue = innerSecondValue[innerObject][secondKey];\n type = typeof firstValue === 'number' ? 'number' : 'date';\n ruleValue = [firstValue, secondValue];\n rule = { field: innerObject, label: innerObject, value: ruleValue, operator: operatorValue, type: type };\n rules.push(rule);\n notBetween = true;\n }\n }\n }\n if (!notBetween) {\n if (this.parent.enableNotCondition) {\n subRules = { condition: condition.replace('$', ''), rules: [], not: false };\n }\n else {\n subRules = { condition: condition.replace('$', ''), rules: [] };\n }\n rules.push(subRules);\n this.mongoRecursion(mongoList[i][condition], rules[rules.length - 1].rules, mongoLocale);\n }\n }\n else {\n value = mongoList[i][condition];\n if (value === null) { // isnull operator\n operatorValue = 'isnull';\n }\n if (typeof value === 'boolean') { // boolean type values\n operatorValue = 'equal';\n type = 'boolean';\n ruleValue = value;\n }\n if (typeof (value) === 'number') {\n ruleValue = value;\n type = 'number';\n operatorValue = 'equal';\n }\n else if (typeof (value) === 'object' && value !== null) {\n keyObj = Object.keys(value);\n for (var i_1 = 0; i_1 < keyObj.length; i_1++) {\n key = keyObj[i_1];\n stringValue = (value)[keyObj[i_1]];\n if (key === '$ne' && isNullOrUndefined(stringValue)) { // not null operator\n operatorValue = 'isnotnull';\n ruleValue = null;\n }\n if (key === '$ne' && typeof stringValue === 'boolean') { // not equal operator for boolean\n operatorValue = 'notequal';\n ruleValue = stringValue;\n type = 'boolean';\n }\n if (keyObj.length >= 2 && keyObj[i_1]) {\n if (typeof (stringValue) == 'object') { // between and notbetween operators\n operatorValue = 'notbetween';\n condition = Object.keys(stringValue)[0];\n betweenValue = [Object.keys(stringValue[condition])[0]];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n betweenOperatorArray.push(stringValue[condition][betweenValue]);\n type = 'number';\n }\n else {\n operatorValue = 'between';\n betweenOperatorArray.push(stringValue);\n }\n if (typeof (stringValue) === 'number') {\n type = 'number';\n }\n }\n else if (typeof (stringValue) === 'object' && stringValue !== null) { // \"in\" and \"notin\" operator\n if (key === '$not' && Object.keys(stringValue)[0] === '$regex') {\n if (stringValue['$regex'].indexOf('^') > -1) {\n operatorValue = 'notstartswith';\n ruleValue = stringValue['$regex'].replace('^', '');\n }\n else if (stringValue['$regex'].indexOf('$') > -1) {\n operatorValue = 'notendswith';\n ruleValue = stringValue['$regex'].replace('$', '');\n }\n else {\n operatorValue = 'notcontains';\n ruleValue = stringValue['$regex'];\n }\n }\n else {\n operatorValue = key === '$in' ? 'in' : 'notin';\n inOperatorArray = stringValue;\n type = typeof (stringValue[0]) === 'number' ? 'number' : 'string';\n }\n }\n else if (typeof (stringValue) === 'number') { // number type values\n operatorValue = this.getOperatorFromMongoOperator(key);\n type = 'number';\n ruleValue = stringValue;\n }\n if (typeof (stringValue) === 'string') { // string type values\n if (key === '$regex') {\n operatorValue = 'contains';\n ruleValue = stringValue;\n type = 'string';\n }\n if (key === '$ne') { // not equal\n if (stringValue !== null && stringValue.length > 0 && isNaN(Date.parse(stringValue))) {\n operatorValue = 'notequal';\n ruleValue = stringValue;\n }\n else if (isNullOrUndefined(stringValue)) { // is not null operator\n operatorValue = 'isnotnull';\n ruleValue = stringValue;\n }\n else if (stringValue === '') { // is not empty operator\n operatorValue = 'isnotempty';\n ruleValue = stringValue;\n }\n type = 'string';\n }\n if (stringValue.indexOf('^') > -1) {\n operatorValue = 'startswith';\n ruleValue = stringValue.replace('^', '');\n type = 'string';\n }\n if (stringValue.indexOf('$') > -1 && key !== '$not') {\n operatorValue = 'endswith';\n ruleValue = stringValue.replace('$', '');\n type = 'string';\n }\n if (!isNaN(Date.parse(stringValue))) { // Date type operators\n operatorValue = operatorValue || this.getOperatorFromMongoOperator(key);\n type = 'date';\n ruleValue = stringValue;\n }\n }\n }\n }\n else if (value && typeof (value) === 'string' && !isNaN(Date.parse(value))) {\n operatorValue = 'equal';\n ruleValue = value;\n type = 'date';\n }\n else if (typeof (value) === 'string' && value !== '' && value !== 'true' && value !== 'false') {\n operatorValue = 'equal';\n ruleValue = value;\n type = 'string';\n }\n else if (typeof (value) === 'string' && value === '') {\n operatorValue = 'isempty';\n ruleValue = value;\n type = 'string';\n }\n if (betweenOperatorArray && betweenOperatorArray.length > 1) { // between opertor value\n rule = { field: condition, label: condition, value: betweenOperatorArray, operator: operatorValue, type: type };\n }\n else if (inOperatorArray && inOperatorArray.length > 1) { // in operator value\n rule = { field: condition, label: condition, value: inOperatorArray, operator: operatorValue, type: type };\n }\n else {\n rule = { field: condition, label: condition, value: ruleValue, operator: operatorValue, type: type };\n }\n rules.push(rule);\n operatorValue = '';\n }\n }\n };\n QueryLibrary.prototype.convertParamSqlToSql = function (sql) {\n var paramSql = sql.sql;\n var paramValues = sql.params;\n var parts = paramSql.split('?');\n var normalSql = parts[0];\n for (var i = 0; i < paramValues.length; i++) {\n normalSql += (typeof (paramValues[i]) === 'string' ? \"'\" + paramValues[i] + \"'\" + parts[i + 1] : paramValues[i] + parts[i + 1]);\n }\n if (normalSql.length >= 2 && normalSql[0] === '(' && normalSql[normalSql.length - 1] === ')') {\n normalSql = normalSql.slice(1, -1);\n }\n normalSql = normalSql.replace(/!= ''(?! =)/g, 'IS NOT EMPTY').replace(/= ''/g, 'IS EMPTY');\n return normalSql;\n };\n QueryLibrary.prototype.convertNamedParamSqlToSql = function (sql) {\n var namedParamSql = sql.sql;\n var params = sql.params;\n var normalSql = namedParamSql;\n Object.keys(params).forEach(function (paramName) {\n var paramValue = params[paramName];\n paramName = ':' + paramName;\n normalSql = normalSql.replace(paramName, typeof (paramValue) === 'string' ? \"'\" + paramValue + \"'\" : String(paramValue));\n });\n if (normalSql.length >= 2 && normalSql[0] === '(' && normalSql[normalSql.length - 1] === ')') {\n normalSql = normalSql.slice(1, -1);\n }\n normalSql = normalSql.replace(/!= ''(?! =)/g, 'IS NOT EMPTY').replace(/= ''/g, 'IS EMPTY');\n return normalSql;\n };\n QueryLibrary.prototype.getParameterSql = function (qbrule) {\n var qbRule = extend({}, qbrule, null, true);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var value = this.updateRuleValue(qbRule, false);\n return this.getParameterSQLVal(this.parent.getSqlFromRules(qbRule), value['ruleVal']);\n };\n QueryLibrary.prototype.getNamedParameterSql = function (qbrule) {\n var qbRule = extend({}, qbrule, null, true);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var value = this.updateRuleValue(qbRule, true);\n return this.getNamedParameterSQLVal(this.parent.getSqlFromRules(qbRule), value['namedRuleVal']);\n };\n QueryLibrary.prototype.getParameterSQLVal = function (content, ruleValue) {\n var replacedString = content.replace(/[%']/g, '');\n return { sql: '(' + replacedString + ')', params: ruleValue };\n };\n QueryLibrary.prototype.getNamedParameterSQLVal = function (content, ruleValue) {\n var replacedString = content.replace(/[%']/g, '');\n return { sql: '(' + replacedString + ')', params: ruleValue };\n };\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n QueryLibrary.prototype.updateRuleValue = function (rule, isNamedParameter) {\n var ruleVal = [];\n var namedRuleVal = {};\n var namedParameters = [];\n return this.updateValue(rule.rules, isNamedParameter, ruleVal, namedRuleVal, namedParameters);\n };\n QueryLibrary.prototype.updateValue = function (rules, isNamedParameter, ruleVal, \n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n namedRuleVal, namedParameters) {\n if (isNullOrUndefined(rules)) {\n return { ruleVal: ruleVal, namedRuleVal: namedRuleVal };\n }\n for (var i = 0; i < rules.length; i++) {\n if (rules[i].rules) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var value = this.updateValue(rules[i].rules, isNamedParameter, ruleVal, namedRuleVal, namedParameters);\n ruleVal = value['ruleVal'];\n namedRuleVal = value['namedRuleVal'];\n }\n else {\n var namedField = void 0;\n if (rules[i].value instanceof Array) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n for (var j = 0; j < (rules[i].value).length; j++) {\n if (isNamedParameter) {\n namedField = this.getNamedParameter(rules[i].field, namedParameters);\n }\n if (!isNullOrUndefined(rules[i].value[j])) {\n if (rules[i].type === 'string' || rules[i].type === 'date') {\n if (isNamedParameter) {\n namedRuleVal[namedField] = rules[i].value[j];\n }\n else {\n ruleVal.push(rules[i].value[j]);\n }\n }\n else {\n if (isNamedParameter) {\n namedRuleVal[namedField] = rules[i].value[j];\n }\n else {\n ruleVal.push(rules[i].value[j]);\n }\n }\n }\n if (isNamedParameter) {\n rules[i].value[j] = ':' + namedField;\n }\n else {\n rules[i].value[j] = '?';\n }\n }\n }\n else {\n if (isNamedParameter) {\n namedField = this.getNamedParameter(rules[i].field, namedParameters);\n }\n if (rules[i].operator.indexOf('null') < 1) {\n if (rules[i].type !== 'string' || (rules[i].type === 'string' && (rules[i].value !== '' || rules[i].value === 0))) {\n if (rules[i].type === 'string' || rules[i].type === 'date') {\n if (rules[i].operator.indexOf('empty') < 1) {\n var value = rules[i].value.toString();\n switch (rules[i].operator) {\n case 'startswith':\n case 'notstartswith':\n value = value + '%';\n break;\n case 'endswith':\n case 'notendswith':\n value = '%' + value;\n break;\n case 'contains':\n case 'notcontains':\n value = '%' + value + '%';\n break;\n }\n if (isNamedParameter) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n namedRuleVal[namedField] = value;\n }\n else {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ruleVal.push(value);\n }\n }\n else {\n if (isNamedParameter) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n namedRuleVal[namedField] = '';\n }\n else {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ruleVal.push('');\n }\n if (rules[i].operator === 'isempty') {\n rules[i].operator = 'equal';\n }\n else {\n rules[i].operator = 'notequal';\n }\n }\n }\n else {\n if (!isNullOrUndefined(rules[i].value)) {\n if (isNamedParameter) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n namedRuleVal[namedField] = rules[i].value;\n }\n else {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ruleVal.push(rules[i].value);\n }\n }\n }\n if (isNamedParameter) {\n rules[i].value = ':' + namedField;\n }\n else {\n rules[i].value = '?';\n }\n }\n }\n }\n }\n }\n return { ruleVal: ruleVal, namedRuleVal: namedRuleVal };\n };\n QueryLibrary.prototype.getNamedParameter = function (field, namedParameters) {\n var newField = null;\n if (namedParameters.length > 0) {\n for (var i = namedParameters.length - 1; i >= 0; i--) {\n var currField = namedParameters[i];\n if (currField.indexOf(field) > -1) {\n var idx = parseInt(currField.split('_')[1], 10) + 1;\n newField = field + '_' + idx;\n namedParameters.push(newField);\n break;\n }\n }\n }\n if (!newField) {\n newField = field + '_1';\n namedParameters.push(newField);\n }\n return newField;\n };\n QueryLibrary.prototype.getModuleName = function () {\n return 'query-library';\n };\n return QueryLibrary;\n}());\nexport { QueryLibrary };\n","import * as index from './index';\nindex.QueryBuilder.Inject(index.QueryLibrary);\nexport * from './index';\n"],"names":["__extends","extendStatics","d","b","Object","setPrototypeOf","__proto__","Array","p","hasOwnProperty","__","this","constructor","prototype","create","__assign","assign","t","s","i","n","arguments","length","call","apply","__decorate","decorators","target","key","desc","c","r","getOwnPropertyDescriptor","Reflect","decorate","defineProperty","Columns","_super","Property","isRequired","min","max","Number","MAX_VALUE","ChildProperty","Rule","Collection","Value","ShowButtons","QueryBuilder","options","element","_this","isReadonly","fields","text","value","updatedRule","not","condition","isLocked","isLocale","isRefreshed","isNotified","isAddSuccess","isNotValueChange","isFieldChange","isFieldClose","isDestroy","isGetNestedData","isCustomOprCols","groupCounter","lockItems","groupIndex","ruleIndex","isLastGroup","cloneGrpBtnClick","isMiddleGroup","cloneRuleBtnClick","MultiSelect","Inject","CheckBoxSelection","getPersistData","addOnPersist","reset","isImportRules","bodyElem","querySelector","inputElement","querySelectorAll","len","className","indexOf","getComponent","destroy","parentElement","innerHTML","grpContainer","createElement","attrs","class","grpHeader","grpBody","appendChild","headerTemplate","isRoot","enableNotCondition","removeClass","levelColl","id","setProperties","rule","rules","disableRuleCondition","getWrapper","getModuleName","requiredModules","modules","push","member","args","GetRootColumnName","field","separator","split","initialize","dataColl","columnKeys","keys","cols","categories","type","groupBy","isDate","validateObj","columns","columnSort","updateCustomOperator","isNaN","Date","parse","getTime","validation","category","l10n","getConstant","operators","customOperators","updateSubFieldsFromColumns","label","updateSubFields","trigger","col","data","sampCol","result","compField","resData","column","from","isNullOrUndefined","this_1","j","sqlIdx","operator_1","operColl","values","map","join","valueIdx","focusEventHandler","event","clickEventHandler","groupID","tagName","animation","Animation","duration","delay","renderSummary","summaryElem","document","getElementById","txtareaElem","animate","name","groupElem","style","display","textContent","getSqlFromRules","height","scrollHeight","actionButton","deleteRule","ruleClone","ruleLock","groupLock","groupClone","closest","deleteGroup","addGroupElement","mRules","extend","setGroupRules","renderSummaryCollapse","forIdValue","getAttribute","targetValue","enableSeparateConnector","replace","group","getGroup","ariaChecked","toggleElem","getElementsByClassName","addClass","cancel","toLowerCase","beforeSuccessCallBack","observedChangeArgs","beforeRules","getValidRules","getParentGroup","classList","contains","previousElementSibling","getRule","ruleID","filterRules","andElem","orElem","checked","selectBtn","showButtons","groupInsert","maxGroupCount","enableRtl","children","addRuleElement","appendRuleElem","parentId","action","ruleElem","elem","ruleListElem","select","setAttribute","ruleIdCounter","cloneRule","index","tempRuleIndex","insertBefore","ruleTemplate","requestType","ruleTemplateFn","templateParser","templateID","getOperators","operatorFields","isReact","isAngular","templateColl","nodeType","isVue3","append","cloneNode","lockGroup","lockRule","cloneGroup","ruleDelete","allowDragAndDrop","renderReactTemplates","isRuleTemplate","isInitialLoad","prvtEvtTgrDaD","addRuleSuccessCallBack","trgt","act","pId","isRlTmp","dropDownList","getColumn","newRule","operator","selectedColumn","passedRule","args_1","displayMode","spanElement","add","previousRuleElem","prevRule","ruleContainer","headerTemplateFn","prevRuleContainer","prevElem","prevRule_1","updateAddedRule","fieldMode","ddlField","ddlValue","autoSelectField","dataSource","placeholder","popupHeight","close","fieldClose","bind","change","changeField","open","popupOpen","cssClass","fieldModel","DropDownList","appendTo","ddlVal","getDataByValue","changeRule","itemData","dummyDropdownTreeDs","updateDropdowntreeDS","child","expanded","selectable","showClearButton","changeOnBlur","treeSettings","expandOn","filtering","dropdownTreeFiltering","dropdownTreeClose","dropdowntree","DropDownTree","getLabelFromColumn","lockRuleTarget","args_2","notCondition","undefined","prevElem_1","ruleContainer_1","args_3","setMultiConnector","proxy","ruleElemID","srcElement","ddTree","hierarchicalData","changeDataSource","matchedDataSource","nestedChildFilter","filter","filteredChild","setTimeout","treeObj","expandAll","refresh","node","isMatchedNode","matchedChildren","checkValue","parseInt","toString","template","isNewRuleAdded","enableSeparateCondition","custom","splice","changeRuleTemplate","operVal","parentGroup","previousColumn","detach","clearQBTemplate","renderToolTip","tooltip","Tooltip","content","isSticky","position","afterClose","beforeOpen","tooltipCloseElement","validateFields","dropDownTreeObj","isValid","allowValidation","excludeOprs","fieldElem","indexElem","valArray","dropDownObj","tempElem","ruleElemCln","validateRule","separateCondition","valElem","jLen","refreshLevelColl","obj","groupElement","level","refreshLevel","childElem","ruleList","iLen","groupCount","slice","groupTemplate","isConnector","glueElem","inputElem","dragClsName","labelElem","grpActElem","groupBtn","groupHdrElem","grpBodyElem","rulesElem","spanDragElement","aria-lable","title","role","clsName","cloneClsName","lockClsName","filterElem","cloneRuleBtnElem","cloneLockBtnElem","delBtnElem","isGroup","isBtnClick","addGroupSuccess","eventTarget","dltGroupBtn","groupIdCounter","andInpElem","orInpElem","andLblElem","orLblElem","btnGroupId","groupDelete","Button","iconCss","rippleEffect","selector","childElems","grpLen","tempGroupIndex","idx","parentNode","addGroups","addRuleToNewGroups","cloneBtnElem","lockBtnElem","lockSpanElement","notElem","CheckBox","btnGroup","childNodes","newAndElem","newOrElem","nextSibling","nextElementSibling","args_4","conditionBtn_1","btnObj","onclick","groupBtn_1","DropDownButton","items","grpId","chgrpId","childGroupID","addHeaderDiv","disabled","isInitialRule","groupHdr","getRuleCollection","headerFn","enableSeparateConnectorInitialRule","nodeName","notifyChange","grpElement","ruleElement","format","getFormat","intl","formatDate","templateChange","updateRules","eventsArgs","grpElem","validateValue","prevOper","arrOper","grpEle","destroyControls","changeValue","isNumInput","currentTarget","dateElement","rbValue","numericTextBoxObj","getInstance","NumericTextBox","decimalSeparator","getValue","getNumericObject","locale","getNumberParser","immediateModeDelay","window","clearInterval","timer","setInterval","filterValue","grID","rlID","ele","changeValueSuccessCallBack","ddl","item","popupObj","getItemData","customArgs","isInteracted","previousItemData","prevItemData","previousItem","e","previousValue","ddtElem","ddt","oldValue","dataBind","destroySubFields","subFieldElem","ddlArgs","tempRule","ddlObj","changeFilter","flt","dl","rl","tmpRl","dArg","selectedField","fieldChangeSuccess","operatorElem","changeOperator","opr","selectedIndex","operatorChangeSuccess","changeRuleValues","tooltipElem","createSubFields","remove","subFieldValue","subFilterCounter","ruleId","subField","currOper","prevValue","parentElem","operatorList","oprElem","childElementCount","fieldObj","renderValues","operator_2","forEach","ddlIdx","autoSelectOperator","ddlOperator","operatorModel","isField","popup","divElement","templateDestroy","templateElement","elemId","temp","templateElements","elementId","elements","getValues","original","fieldColl","dataObj","fieldStr","createNestedObject","lastIndex","k","getDistinctValues","nest","isNested","this_2","renderMultiSelect","selectedValue","ds","isFetched","isValues","multiSelectValue","dataManager","query","Query","selectedRule","mode","width","closePopup","actionBegin","multiSelectOpen","valueModel","multiSelectModel","multiSelectObj","DataManager","bindMultiSelectData","getMultiSelectData","dummyData","deferred","Deferred","executeQuery","multiselectObj","hideSpinner","createSpinner","showSpinner","then","actual","catch","reject","spinnerElem","Browser","isDevice","ms","processTemplate","container","tempElements","write","setDefaultValue","isArryValue","isNumber","renderStringValue","ruleValElem","selectedVal","columnData","isTemplate","isPublic","txtBox","input","textBoxModel","inputobj","TextBox","minWidth","renderNumberValue","selVal","txtInp","numericTxt","step","numericTextBoxModel","numeric","oninput","processValueString","numArr","strArr","kLen","parseDate","formatOpt","dParser","getDateParser","skeleton","renderControls","isRendered","length_1","processBoolValues","datepick","datePicker","place","formatObj","getLocale","datePickerModel","DatePicker","orgValue","isCheck","radioBtn","radioButtonModel","radiobutton","RadioButton","getOperatorIndex","getPreviousItemData","isRender","filtElem","getElementsByTagName","filtObj","isTempRendered","setColumnTemplate","inputLen","renderTemplate","observedActionArgs","actionBeginSuccessCallBack","Element","columnTemplateFn","valElemColl","updateValues","selectedDate","radioBtnObj","controlName","isNotTrigger","valueContainer","elementCln","i_1","i_2","ruleValueUpdate","beforeRule","afterRule","JSON","stringify","previousRule","oper","arrOperator","dupSelectedValue","parseFloat","isObject","formatOptions","findGroupByIdx","groupIdx","ruleColl","dupRuleColl","unWireEvents","portals","popupElement","addRules","groups","importRules","initWrapper","trim","summaryView","notGroupRtl","readonly","enableReadonly","buttons","button","contentElem","textElem","styles","editElem","divElem","collapseElem","sortDirection","executeLocal","sortByDesc","sortBy","onChangeNotGroup","checkNotGroup","orgRule","onPropertyChanged","newProp","oldProp","properties","_i","properties_1","enablePersistence","setRules","Internationalization","preRender","getUniqueID","defaultLocale","StartsWith","DoesNotStartWith","EndsWith","DoesNotEndWith","Contains","DoesNotContain","NotLike","Like","Equal","NotEqual","LessThan","LessThanOrEqual","GreaterThan","GreaterThanOrEqual","Between","NotBetween","In","NotIn","Remove","SelectField","SelectOperator","DeleteRule","DeleteGroup","AddGroup","AddCondition","Edit","ValidationMessage","SummaryViewTitle","OtherFields","AND","OR","NOT","SelectValue","IsEmpty","IsNotEmpty","IsNull","IsNotNull","True","False","AddButton","CloneGroup","LockGroup","CloneRule","LockRule","UnlockRule","UnlockGroup","L10n","parser","stringOperator","dateOperator","booleanOperator","numberOperator","equal","notequal","greaterthan","greaterthanorequal","lessthan","in","notin","lessthanorequal","startswith","endswith","between","notbetween","isnull","isnotnull","isempty","isnotempty","notstartswith","notendswith","notcontains","sqlOperators","toUpperCase","render","stringOper","numberOper","concat","executeDataManager","take","initControl","renderComplete","initializeDrag","draggable","Draggable","dragTarget","distance","helper","dragStart","dragStartHandler","drag","dragHandler","dragStop","dragStopHandler","isReplaceDragEle","isPreventSelect","abort","isDragScroll","currentStateTarget","cloneElement","visualElement","offsetWidth","removeAttribute","draggedRule","isDragEventPrevent","body","dragElement","dragEventArgs","dragRuleID","dragGroupID","borderLineElem","targetElem","rect","getBoundingClientRect","distanceToTop","mouseY","clientY","changedTouches","top","distanceToBottom","bottom","threshold","targetGroup","isPreventelem","targetGrp","dropEventArgs","dropRuleID","dropGroupID","tgrt","groupId_1","groupRule","ruleElems","ruleIds","dropInd","deleteRules","groupId","groupId_2","templateCompiler","compile","error","wireEvents","wrapper","EventHandler","keyBoardHandler","isParent","groupLevel","deleteGroupSuccessCallBack","nextElem","removeString","remRule","ruleElemColl","isTemplateRendered","isPlatformTemplate","deleteRuleSuccessCallBack","clnruleElem","previousElem","nextElem_1","err","i_3","lockGrpTarget","keyCode","code","dragElemnet","preventDefault","clearTemplate","isNewGroup","count","andGroup","orGroup","currentRule","getRules","ruleCondtion","isValidRule","customObj","isQuestion","lockedRule","notValue","HTMLElement","deleteGroups","groupIdColl","getFilteredRecords","predicate","getPredicate","dataManagerQuery","where","ruleIdColl","getDataManagerQuery","pred","pred2","ruleValue","ignoreCase","and","or","isDateFilter","dateOperColl","matchCase","getDate","isTime","datePredicate","arrayPredicate","Predicate","localeString","cldrData","setTime","date","isStart","setHours","startDate","endDate","nullValue","gte","currDate","setMinutes","setSeconds","isReset","renderGroup","tglBtnElem","renderRule","cloneElem","deleteGroupElems","addRuleGroupElems","removeRuleElems","elems","enableBtnGroup","isDateFunction","dateFunc","getSqlString","enableEscape","queryStr","sqlLocale","valueStr","ruleOpertor","ruleCondition","custOper","isCustom","setRulesFromSql","sqlString","ruleModel","getRulesFromSql","sqlParser","processParser","allowEscape","getParameterizedSql","moduleLoader","loadedModules","sql","notify","prop","onPropertyChange","console","warn","setParameterizedSql","sqlQuery","getParameterizedNamedSql","setParameterizedNamedSql","setMongoQuery","mongoQuery","mongoLocale","getMongoQuery","isCloneRule","parentGroupID","isCloneGroup","str","st","parseSqlStrings","conditions","subOp","regexStr","matchValue","test","regExp","RegExp","exec","lastPasrser","checkLiteral","checkNumberLiteral","regExValue","singleString","getSingleQuoteString","isClosed","checkCondition","combineSingleQuoteString","doubleString","getDoubleQuoteString","start","end","substring","isBetween","tempMatchValue","tempStr","lastParser","secParser","betweenParser","betweenOperator","getOperator","=","!=","<",">","<=",">=","not in","not between","is empty","is null","is not null","is not empty","localeOperator","getTypeFromColumn","l","getLabelFromField","startIdx","fieldName","subRules","lLen","grpCount","numVal","strVal","isLeftOpened","isNotOpened","val","pop","targetGrpId","lockItem","disableRuleControls","newGroup","disableHeaderControls","updateLockItems","isDisabled","addElem","deleteGrpElem","lockElem","groupContElem","addCondition","addGroup","ddlElement","numericElement","textElement","checkboxElement","radioBtnElement","multiSelectElement","deleteElem","enabled","Event","Complex","NotifyPropertyChanges","Component","QueryLibrary","parent","addEventListener","isDestroyed","removeEventListener","on","queryLibrary","off","getMongoFromRules","mongoParser","getParameterSql","getNamedParameterSql","convertParamSqlToSql","convertNamedParamSqlToSql","convertMongoQuery","getOperatorFromMongoOperator","operatorValue","itVal","x","endsWith","mongoList","mongoRecursion","stringValue","betweenValue","keyObj","betweenOperatorArray","inOperatorArray","notBetween","innerObject","firstKey","secondKey","firstValue","innerFirstValue","innerSecondValue","isArray","paramSql","paramValues","params","parts","normalSql","namedParamSql","paramName","paramValue","String","qbrule","qbRule","updateRuleValue","getParameterSQLVal","getNamedParameterSQLVal","isNamedParameter","ruleVal","namedRuleVal","namedParameters","updateValue","namedField","getNamedParameter","newField","currField","index.QueryLibrary"],"mappings":"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"}