@syncfusion/ej2-querybuilder 31.2.15 → 32.1.19

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 (188) hide show
  1. package/dist/ej2-querybuilder.min.js +1 -10
  2. package/dist/ej2-querybuilder.umd.min.js +1 -10
  3. package/dist/ej2-querybuilder.umd.min.js.map +1 -1
  4. package/dist/es6/ej2-querybuilder.es2015.js +14 -3
  5. package/dist/es6/ej2-querybuilder.es2015.js.map +1 -1
  6. package/dist/es6/ej2-querybuilder.es5.js +14 -3
  7. package/dist/es6/ej2-querybuilder.es5.js.map +1 -1
  8. package/dist/global/ej2-querybuilder.min.js +1 -10
  9. package/dist/global/ej2-querybuilder.min.js.map +1 -1
  10. package/dist/global/index.d.ts +0 -9
  11. package/package.json +7 -7
  12. package/src/query-builder/query-builder.d.ts +1 -0
  13. package/src/query-builder/query-builder.js +14 -3
  14. package/styles/bds-lite.css +0 -37
  15. package/styles/bds-lite.scss +14 -15
  16. package/styles/bds.css +0 -36
  17. package/styles/bds.scss +15 -16
  18. package/styles/bootstrap-dark-lite.css +0 -37
  19. package/styles/bootstrap-dark-lite.scss +14 -15
  20. package/styles/bootstrap-dark.css +0 -36
  21. package/styles/bootstrap-dark.scss +15 -16
  22. package/styles/bootstrap-lite.css +0 -37
  23. package/styles/bootstrap-lite.scss +14 -15
  24. package/styles/bootstrap.css +0 -36
  25. package/styles/bootstrap.scss +15 -16
  26. package/styles/bootstrap4-lite.css +0 -37
  27. package/styles/bootstrap4-lite.scss +14 -15
  28. package/styles/bootstrap4.css +0 -36
  29. package/styles/bootstrap4.scss +15 -16
  30. package/styles/bootstrap5-dark-lite.css +0 -37
  31. package/styles/bootstrap5-dark-lite.scss +14 -15
  32. package/styles/bootstrap5-dark.css +0 -36
  33. package/styles/bootstrap5-dark.scss +15 -16
  34. package/styles/bootstrap5-lite.css +0 -37
  35. package/styles/bootstrap5-lite.scss +15 -15
  36. package/styles/bootstrap5.3-lite.css +117 -74
  37. package/styles/bootstrap5.3-lite.scss +15 -15
  38. package/styles/bootstrap5.3.css +117 -73
  39. package/styles/bootstrap5.3.scss +16 -16
  40. package/styles/bootstrap5.css +0 -36
  41. package/styles/bootstrap5.scss +16 -16
  42. package/styles/fabric-dark-lite.css +0 -37
  43. package/styles/fabric-dark-lite.scss +15 -15
  44. package/styles/fabric-dark.css +0 -36
  45. package/styles/fabric-dark.scss +16 -16
  46. package/styles/fabric-lite.css +0 -37
  47. package/styles/fabric-lite.scss +15 -15
  48. package/styles/fabric.css +0 -36
  49. package/styles/fabric.scss +16 -16
  50. package/styles/fluent-dark-lite.css +0 -37
  51. package/styles/fluent-dark-lite.scss +15 -15
  52. package/styles/fluent-dark.css +0 -36
  53. package/styles/fluent-dark.scss +16 -16
  54. package/styles/fluent-lite.css +0 -37
  55. package/styles/fluent-lite.scss +15 -15
  56. package/styles/fluent.css +0 -36
  57. package/styles/fluent.scss +16 -16
  58. package/styles/fluent2-lite.css +455 -79
  59. package/styles/fluent2-lite.scss +15 -15
  60. package/styles/fluent2.css +459 -82
  61. package/styles/fluent2.scss +16 -16
  62. package/styles/highcontrast-light-lite.css +0 -37
  63. package/styles/highcontrast-light-lite.scss +15 -15
  64. package/styles/highcontrast-light.css +0 -36
  65. package/styles/highcontrast-light.scss +16 -16
  66. package/styles/highcontrast-lite.css +0 -37
  67. package/styles/highcontrast-lite.scss +15 -15
  68. package/styles/highcontrast.css +0 -36
  69. package/styles/highcontrast.scss +16 -16
  70. package/styles/material-dark-lite.css +0 -37
  71. package/styles/material-dark-lite.scss +15 -15
  72. package/styles/material-dark.css +0 -36
  73. package/styles/material-dark.scss +16 -16
  74. package/styles/material-lite.css +0 -39
  75. package/styles/material-lite.scss +14 -15
  76. package/styles/material.css +0 -38
  77. package/styles/material.scss +15 -16
  78. package/styles/material3-dark-lite.css +461 -77
  79. package/styles/material3-dark-lite.scss +15 -15
  80. package/styles/material3-dark.css +461 -76
  81. package/styles/material3-dark.scss +16 -18
  82. package/styles/material3-lite.css +461 -77
  83. package/styles/material3-lite.scss +15 -15
  84. package/styles/material3.css +461 -76
  85. package/styles/material3.scss +16 -18
  86. package/styles/query-builder/_all.scss +2 -2
  87. package/styles/query-builder/_bds-definition.scss +69 -2
  88. package/styles/query-builder/_bigger.scss +21 -18
  89. package/styles/query-builder/_bootstrap-dark-definition.scss +34 -2
  90. package/styles/query-builder/_bootstrap-definition.scss +34 -4
  91. package/styles/query-builder/_bootstrap4-definition.scss +34 -3
  92. package/styles/query-builder/_bootstrap5-dark-definition.scss +150 -1
  93. package/styles/query-builder/_bootstrap5-definition.scss +35 -2
  94. package/styles/query-builder/_bootstrap5.3-definition.scss +37 -2
  95. package/styles/query-builder/_fabric-dark-definition.scss +34 -4
  96. package/styles/query-builder/_fabric-definition.scss +34 -4
  97. package/styles/query-builder/_fluent-dark-definition.scss +149 -1
  98. package/styles/query-builder/_fluent-definition.scss +35 -2
  99. package/styles/query-builder/_fluent2-definition.scss +55 -2
  100. package/styles/query-builder/_fusionnew-definition.scss +32 -2
  101. package/styles/query-builder/_highcontrast-definition.scss +34 -4
  102. package/styles/query-builder/_highcontrast-light-definition.scss +34 -4
  103. package/styles/query-builder/_layout.scss +100 -112
  104. package/styles/query-builder/_material-dark-definition.scss +34 -3
  105. package/styles/query-builder/_material-definition.scss +34 -3
  106. package/styles/query-builder/_material3-dark-definition.scss +158 -1
  107. package/styles/query-builder/_material3-definition.scss +41 -2
  108. package/styles/query-builder/_tailwind-dark-definition.scss +148 -1
  109. package/styles/query-builder/_tailwind-definition.scss +34 -2
  110. package/styles/query-builder/_tailwind3-definition.scss +38 -2
  111. package/styles/query-builder/_theme-variables.scss +1 -0
  112. package/styles/query-builder/_theme.scss +2 -23
  113. package/styles/query-builder/bds.css +0 -36
  114. package/styles/query-builder/bds.scss +16 -16
  115. package/styles/query-builder/bootstrap-dark.css +0 -36
  116. package/styles/query-builder/bootstrap-dark.scss +16 -16
  117. package/styles/query-builder/bootstrap.css +0 -36
  118. package/styles/query-builder/bootstrap.scss +16 -16
  119. package/styles/query-builder/bootstrap4.css +0 -36
  120. package/styles/query-builder/bootstrap4.scss +16 -16
  121. package/styles/query-builder/bootstrap5-dark.css +0 -36
  122. package/styles/query-builder/bootstrap5-dark.scss +16 -16
  123. package/styles/query-builder/bootstrap5.3.css +117 -73
  124. package/styles/query-builder/bootstrap5.3.scss +16 -16
  125. package/styles/query-builder/bootstrap5.css +0 -36
  126. package/styles/query-builder/bootstrap5.scss +16 -16
  127. package/styles/query-builder/fabric-dark.css +0 -36
  128. package/styles/query-builder/fabric-dark.scss +16 -16
  129. package/styles/query-builder/fabric.css +0 -36
  130. package/styles/query-builder/fabric.scss +16 -16
  131. package/styles/query-builder/fluent-dark.css +0 -36
  132. package/styles/query-builder/fluent-dark.scss +16 -16
  133. package/styles/query-builder/fluent.css +0 -36
  134. package/styles/query-builder/fluent.scss +16 -16
  135. package/styles/query-builder/fluent2.css +459 -82
  136. package/styles/query-builder/fluent2.scss +16 -16
  137. package/styles/query-builder/highcontrast-light.css +0 -36
  138. package/styles/query-builder/highcontrast-light.scss +16 -16
  139. package/styles/query-builder/highcontrast.css +0 -36
  140. package/styles/query-builder/highcontrast.scss +16 -16
  141. package/styles/query-builder/icons/_bds.scss +1 -0
  142. package/styles/query-builder/icons/_bootstrap-dark.scss +1 -0
  143. package/styles/query-builder/icons/_bootstrap.scss +1 -0
  144. package/styles/query-builder/icons/_bootstrap4.scss +1 -0
  145. package/styles/query-builder/icons/_bootstrap5-dark.scss +1 -1
  146. package/styles/query-builder/icons/_bootstrap5.3.scss +1 -0
  147. package/styles/query-builder/icons/_bootstrap5.scss +1 -0
  148. package/styles/query-builder/icons/_fabric-dark.scss +1 -0
  149. package/styles/query-builder/icons/_fabric.scss +1 -0
  150. package/styles/query-builder/icons/_fluent-dark.scss +1 -1
  151. package/styles/query-builder/icons/_fluent.scss +1 -0
  152. package/styles/query-builder/icons/_fluent2.scss +1 -0
  153. package/styles/query-builder/icons/_fusionnew.scss +1 -0
  154. package/styles/query-builder/icons/_highcontrast-light.scss +1 -0
  155. package/styles/query-builder/icons/_highcontrast.scss +1 -0
  156. package/styles/query-builder/icons/_material-dark.scss +1 -0
  157. package/styles/query-builder/icons/_material.scss +1 -0
  158. package/styles/query-builder/icons/_material3-dark.scss +1 -1
  159. package/styles/query-builder/icons/_material3.scss +1 -0
  160. package/styles/query-builder/icons/_tailwind-dark.scss +1 -0
  161. package/styles/query-builder/icons/_tailwind.scss +1 -0
  162. package/styles/query-builder/icons/_tailwind3.scss +1 -0
  163. package/styles/query-builder/material-dark.css +0 -36
  164. package/styles/query-builder/material-dark.scss +16 -16
  165. package/styles/query-builder/material.css +0 -38
  166. package/styles/query-builder/material.scss +16 -16
  167. package/styles/query-builder/material3-dark.css +461 -76
  168. package/styles/query-builder/material3-dark.scss +16 -17
  169. package/styles/query-builder/material3.css +461 -76
  170. package/styles/query-builder/material3.scss +16 -17
  171. package/styles/query-builder/tailwind-dark.css +0 -36
  172. package/styles/query-builder/tailwind-dark.scss +16 -16
  173. package/styles/query-builder/tailwind.css +0 -36
  174. package/styles/query-builder/tailwind.scss +16 -16
  175. package/styles/query-builder/tailwind3.css +110 -76
  176. package/styles/query-builder/tailwind3.scss +16 -16
  177. package/styles/tailwind-dark-lite.css +0 -37
  178. package/styles/tailwind-dark-lite.scss +15 -15
  179. package/styles/tailwind-dark.css +0 -36
  180. package/styles/tailwind-dark.scss +16 -16
  181. package/styles/tailwind-lite.css +0 -37
  182. package/styles/tailwind-lite.scss +15 -15
  183. package/styles/tailwind.css +0 -36
  184. package/styles/tailwind.scss +16 -16
  185. package/styles/tailwind3-lite.css +110 -77
  186. package/styles/tailwind3-lite.scss +15 -15
  187. package/styles/tailwind3.css +110 -76
  188. package/styles/tailwind3.scss +16 -16
@@ -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.isPropChange = false;\n _this.isRuleClicked = 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 inputElements = this.element.querySelectorAll('input.e-control');\n var batchSize = 20;\n var currentIndex = 0;\n var processBatch = function () {\n var endIndex = Math.min(currentIndex + batchSize, inputElements.length);\n for (var i = currentIndex; i < endIndex; i++) {\n var element = inputElements[i];\n try {\n if (element.className.indexOf('e-tooltip') > -1) {\n var tooltip = getComponent(element, 'tooltip');\n if (tooltip) {\n tooltip.destroy();\n }\n }\n else if (element.parentElement && element.parentElement.className.indexOf('e-tooltip') > -1) {\n var tooltip = getComponent(element.parentElement, 'tooltip');\n if (tooltip) {\n tooltip.destroy();\n }\n }\n }\n catch (e) {\n console.warn('Error destroying tooltip:', e);\n }\n }\n currentIndex = endIndex;\n if (currentIndex < inputElements.length) {\n requestAnimationFrame(processBatch);\n }\n };\n if (inputElements.length > 0) {\n processBatch();\n }\n if (bodyElem) {\n bodyElem.textContent = '';\n }\n else {\n var fragment = document.createDocumentFragment();\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);\n grpContainer.appendChild(grpBody);\n fragment.appendChild(grpContainer);\n this.element.appendChild(fragment);\n bodyElem = this.element.querySelector('.e-group-body');\n }\n if (this.headerTemplate && this.isRoot) {\n this.element.textContent = '';\n this.isRoot = false;\n }\n if (this.enableNotCondition) {\n var toggleElements = this.element.querySelectorAll('.e-qb-toggle');\n for (var i = 0; i < toggleElements.length; i++) {\n removeClass([toggleElements[i]], 'e-active-toggle');\n }\n }\n if (bodyElem) {\n bodyElem.appendChild(this.createElement('div', { attrs: { class: 'e-rule-list' } }));\n }\n this.levelColl[this.element.id + '_group0'] = [0];\n this.setProperties({ rule: { condition: 'and', not: false, rules: [] } }, true);\n if (bodyElem && bodyElem.parentElement) {\n this.disableRuleCondition(bodyElem.parentElement);\n }\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 if (!isNullOrUndefined(field)) {\n return this.separator ? field.split(this.separator)[0] : field;\n }\n return '';\n };\n QueryBuilder.prototype.initialize = function () {\n var _this = this;\n if (this.dataColl.length) {\n var columnKeys_1 = Object.keys(this.dataColl[0]);\n var cols = [];\n var categories_1 = [];\n var type_1;\n var groupBy_1 = false;\n var isDate_1 = false;\n var value_1;\n var validateObj_1 = { isRequired: true, min: 0, max: Number.MAX_VALUE };\n if (this.columns.length) {\n this.columnSort();\n var columns = this.columns;\n columns.forEach(function (column) {\n _this.updateCustomOperator(column, 'initial');\n if (!column.type) {\n if (columnKeys_1.indexOf(column.field) > -1) {\n value_1 = _this.dataColl[0][column.field];\n type_1 = typeof value_1;\n if (type_1 === 'string') {\n isDate_1 = !isNaN(Date.parse(value_1));\n }\n else if (type_1 === 'object') {\n isDate_1 = value_1 instanceof Date && !isNaN(value_1.getTime());\n type_1 = 'string';\n }\n column.type = type_1;\n isDate_1 = false;\n }\n type_1 = 'string';\n }\n if (!column.validation) {\n column.validation = validateObj_1;\n }\n if (column.category) {\n groupBy_1 = true;\n }\n else {\n column.category = _this.l10n.getConstant('OtherFields');\n }\n if (categories_1.indexOf(column.category) < 0) {\n categories_1.push(column.category);\n }\n if (!column.operators ||\n (_this.isLocale && _this.isCustomOprCols.indexOf(column.field) === -1)) {\n column.operators = _this.customOperators[column.type + 'Operator'];\n }\n });\n if (groupBy_1 && (categories_1.length > 1 || categories_1[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_1.length; i < len; i++) {\n value_1 = this.dataColl[0][columnKeys_1[i]];\n type_1 = typeof value_1;\n if (type_1 === 'string') {\n isDate_1 = !isNaN(Date.parse(value_1));\n }\n else if (type_1 === 'object' && !Object.keys(value_1).length) {\n isDate_1 = value_1 instanceof Date && !isNaN(value_1.getTime());\n type_1 = 'string';\n }\n cols[i] = {\n 'field': columnKeys_1[i], 'label': columnKeys_1[i], 'type': isDate_1 ? 'date' : type_1,\n 'validation': validateObj_1\n };\n isDate_1 = false;\n cols[i].operators = this.customOperators[cols[i].type + 'Operator'];\n if (type_1 === 'object') {\n this.updateSubFields(value_1, cols[i]);\n }\n }\n this.columns = cols;\n }\n }\n else if (this.columns && this.columns.length) {\n if (this.sortDirection !== 'Default') {\n this.columnSort();\n }\n this.processColumnsInBatches();\n if (this.columns.length > 50) {\n setTimeout(function () {\n _this.updateSubFieldsFromColumns(_this.columns);\n }, 0);\n }\n else {\n this.updateSubFieldsFromColumns(this.columns);\n }\n }\n this.trigger('dataBound', { type: 'dataBound' });\n };\n QueryBuilder.prototype.processColumnsInBatches = function () {\n var _this = this;\n var columns = this.columns;\n var batchSize = 10;\n var processedCount = 0;\n var processBatch = function () {\n var endIdx = Math.min(processedCount + batchSize, columns.length);\n for (var i = processedCount; i < endIdx; i++) {\n if (columns[i].category && columns[i].category !== _this.l10n.getConstant('OtherFields')) {\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], 'initial');\n if (!columns[i].operators ||\n (_this.isLocale && _this.isCustomOprCols.indexOf(columns[i].field) === -1)) {\n columns[i].operators = _this.customOperators[columns[i].type + 'Operator'];\n }\n }\n processedCount = endIdx;\n if (processedCount < columns.length) {\n requestAnimationFrame(processBatch);\n }\n };\n processBatch();\n };\n QueryBuilder.prototype.updateSubFieldsFromColumns = function (col, field) {\n if (col.length > 50) {\n this.updateSubFieldsLarge(col, field);\n return;\n }\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.updateSubFieldsLarge = function (col, field) {\n var _this = this;\n var i = 0;\n var colLength = col.length;\n var processNextBatch = function () {\n var endIdx = Math.min(i + 10, colLength);\n for (; i < endIdx; 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 }\n if (i < colLength) {\n requestAnimationFrame(processNextBatch);\n }\n else {\n setTimeout(function () {\n for (var j = 0; j < colLength; j++) {\n if (col[j].columns) {\n col[j].type = 'object';\n _this.updateSubFieldsFromColumns(col[j].columns, col[j].field);\n }\n }\n }, 0);\n }\n };\n processNextBatch();\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 (typeof target.className === 'string' && 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' && typeof target.className === 'string' && 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.isRuleClicked = 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.isRuleClicked = 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 (typeof target.className === 'string' && 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 if (target.classList.contains('e-btngroup-or-lbl')) {\n targetValue = 'or';\n }\n else if (target.classList.contains('e-btngroup-and-lbl')) {\n targetValue = 'and';\n }\n else {\n targetValue = target.textContent;\n }\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 = {\n groupID: groupID, cancel: false, type: 'condition', value: targetValue.toLowerCase(),\n 'not': ariaChecked\n };\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.isRuleClicked = true;\n this.addRuleElement(closest(target, '.e-group-container'), {});\n }\n else if (event.element.children[0].className.indexOf('e-addgroup') > -1) {\n this.isRuleClicked = true;\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 && 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 _this = this;\n var isVertical = this.element.className.indexOf('e-device') > -1 || this.displayMode === 'Vertical';\n var height = isVertical ? '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 = {\n 'label': column.label,\n 'field': column.field,\n 'type': column.type,\n 'operator': operators[0].value\n };\n var passedRule_1 = Object.keys(rule).length ? rule : newRule;\n ruleElem = this.appendRuleElem(trgt, column, act, pId, 'field', passedRule_1);\n var actionArgs = {\n requestType: 'template-initialize',\n ruleID: ruleElem.id,\n action: 'insert-rule',\n fields: this.fields,\n rule: passedRule_1\n };\n this.trigger('actionBegin', actionArgs);\n setTimeout(function () {\n var createArgs = {\n requestType: 'template-create',\n ruleID: ruleElem.id,\n action: 'insert-rule',\n fields: _this.fields,\n rule: passedRule_1\n };\n _this.trigger('actionBegin', createArgs);\n }, 0);\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', {\n attrs: { class: 'e-btn-icon e-icons e-delete-icon' }\n });\n element.appendChild(spanElement);\n }\n if (!this.showButtons.ruleDelete) {\n element.classList.add('e-button-hide');\n }\n }\n ruleElem.className = 'e-rule-container ' + (isVertical ? 'e-vertical-mode' : 'e-horizontal-mode');\n var previousRuleElem = ruleElem.previousElementSibling;\n this.processAdjacentElements(ruleElem, previousRuleElem, rule);\n if (!this.isImportRules) {\n this.updateAddedRule(trgt, rule, newRule, isRlTmp, pId, this.enableSeparateConnector ? true : null);\n }\n if (this.rule.condition === '' && (this.isRuleClicked || this.rule.rules.length > 1)) {\n this.rule.condition = 'and';\n }\n this.isRuleClicked = false;\n var ruleCount = this.rule.rules.length;\n if (!column || (column && !column.ruleTemplate) || !rule.field) {\n if (ruleCount > 20) {\n setTimeout(function () {\n _this.applyFieldComponent(ruleElem, rule, height);\n }, 0);\n }\n else {\n this.applyFieldComponent(ruleElem, rule, height);\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', {\n groupID: trgt.id.replace(this.element.id + '_', ''),\n ruleID: ruleID,\n type: 'insertRule'\n });\n }\n }\n if (this.enableSeparateConnector && isNullOrUndefined(rule.condition) && ruleID) {\n rule = this.getRule(ruleID);\n }\n if (this.enableSeparateConnector) {\n this.processConnectorElements(ruleElem);\n }\n };\n QueryBuilder.prototype.processAdjacentElements = function (ruleElem, previousRuleElem, rule) {\n if (this.enableSeparateConnector) {\n if (previousRuleElem && previousRuleElem.classList.contains('e-group-container')) {\n var ruleContainer = previousRuleElem.querySelectorAll('.e-rule-container');\n previousRuleElem = ruleContainer[ruleContainer.length - 1];\n }\n if (previousRuleElem && previousRuleElem.classList.contains('e-rule-container')) {\n var prevRule = this.getRule(previousRuleElem);\n if (this.headerTemplate) {\n this.headerTemplateFn(previousRuleElem, false, prevRule.condition, prevRule, previousRuleElem.id);\n }\n }\n else if (isNullOrUndefined(previousRuleElem) && ruleElem.id !== this.element.id + '_group0_rule0') {\n this.handleOrphanedRuleElement(ruleElem, rule);\n }\n }\n else {\n if (previousRuleElem && previousRuleElem.className.indexOf('e-rule-container') > -1) {\n ruleElem.classList.add('e-joined-rule');\n previousRuleElem.classList.add('e-prev-joined-rule');\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 };\n QueryBuilder.prototype.handleOrphanedRuleElement = function (ruleElem, rule) {\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 = this.getRule(prevElem);\n this.headerTemplateFn(prevElem, false, prevRule.condition, prevRule, prevElem.id, true);\n }\n }\n else {\n this.headerTemplateFn(ruleElem, false, rule.condition, rule, ruleElem.id, true);\n }\n };\n QueryBuilder.prototype.processConnectorElements = function (ruleElem) {\n var prevElem = ruleElem.previousElementSibling;\n var ruleContainer;\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 = {\n requestType: 'rule-template-create',\n ruleID: prevElem.id,\n condition: prevRule.condition,\n notCondition: this.enableNotCondition ? true : undefined\n };\n this.trigger('actionBegin', args);\n }\n else if (isNullOrUndefined(prevElem) && ruleElem.id !== this.element.id + '_group0_rule0') {\n this.handleOrphanedConnectorElement(ruleElem);\n }\n this.setMultiConnector(ruleElem);\n };\n QueryBuilder.prototype.handleOrphanedConnectorElement = function (ruleElem) {\n var group = ruleElem.closest('.e-group-container');\n if (group && group.previousElementSibling && group.previousElementSibling.previousElementSibling) {\n var prevElem = group.previousElementSibling.previousElementSibling;\n if (prevElem.classList.contains('e-group-container')) {\n var ruleContainer = prevElem.querySelectorAll('.e-rule-container');\n prevElem = ruleContainer[ruleContainer.length - 1];\n }\n if (prevElem.classList.contains('e-rule-container')) {\n var prevRule = this.getRule(prevElem);\n var args = {\n requestType: 'rule-template-create',\n ruleID: prevElem.id,\n condition: prevRule.condition,\n notCondition: this.enableNotCondition ? true : undefined\n };\n this.trigger('actionBegin', args);\n }\n }\n };\n QueryBuilder.prototype.applyFieldComponent = function (ruleElem, rule, height) {\n if (this.fieldMode === 'Default') {\n this.applyDropdownListComponent(ruleElem, rule, height);\n }\n else {\n this.applyDropdownTreeComponent(ruleElem, rule, height);\n }\n };\n QueryBuilder.prototype.applyDropdownListComponent = function (ruleElem, rule, height) {\n var ddlField;\n var ddlValue;\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,\n placeholder: this.l10n.getConstant('SelectField'),\n popupHeight: ((this.columns.length > 5) ? height : 'auto'),\n close: this.fieldClose.bind(this, ruleElem.id + '_filterkey'),\n change: this.changeField.bind(this),\n value: rule ? ddlValue : null,\n open: this.popupOpen.bind(this, true),\n cssClass: 'qb-dropdownlist'\n };\n if (this.fieldModel) {\n ddlField = __assign({}, ddlField, this.fieldModel);\n }\n var dropDownList = new DropDownList(ddlField);\n dropDownList.appendTo('#' + ruleElem.id + '_filterkey');\n var ddlVal;\n if (this.separator && rule.field) {\n ddlVal = this.GetRootColumnName(rule.field);\n }\n else {\n ddlVal = this.isImportRules ? this.GetRootColumnName(rule.field) : dropDownList.value;\n }\n this.selectedColumn = dropDownList.getDataByValue(ddlVal);\n if (Object.keys(rule).length) {\n this.changeRule(rule, {\n element: dropDownList.element,\n itemData: this.selectedColumn\n });\n }\n };\n QueryBuilder.prototype.applyDropdownTreeComponent = function (ruleElem, rule, height) {\n var ddlField;\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: {\n dataSource: this.dummyDropdownTreeDs,\n value: 'field',\n text: 'label',\n child: 'columns',\n expanded: 'expanded',\n selectable: 'selectable'\n },\n placeholder: this.l10n.getConstant('SelectField'),\n showClearButton: false,\n popupHeight: ((this.columns.length > 5) ? height : 'auto'),\n changeOnBlur: false,\n change: this.changeField.bind(this),\n value: !isNullOrUndefined(ddlValue) ? [ddlValue] : null,\n open: this.popupOpen.bind(this, false),\n treeSettings: { expandOn: 'Click' },\n cssClass: 'e-qb-ddt',\n filtering: this.dropdownTreeFiltering.bind(this),\n 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 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,\n itemData: this.selectedColumn\n });\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 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) && !isNullOrUndefined(proxy.ddTree.treeObj)) {\n proxy.ddTree.treeObj.expandAll();\n }\n }, 100);\n }\n };\n QueryBuilder.prototype.changeDataSource = function (data) {\n this.updateDropdowntreeDS(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(extend([], this.columns, [], true));\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 if (column && 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 operVal = this.selectedColumn.operators;\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 else {\n var rule = { field: '', label: '', operator: '', value: '' };\n this.addRuleElement(parentGroup, rule, column, 'change', parentId, true);\n }\n }\n };\n QueryBuilder.prototype.renderToolTip = function (element) {\n var tooltip = new Tooltip({\n 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 });\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.value) && 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.value)) ||\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 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', {\n attrs: {\n class: dragClsName, 'aria-label': 'drag handle',\n title: 'drag handle'\n }\n });\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', {\n attrs: { class: 'e-lib e-btn e-btngroup-and-lbl e-small' },\n innerHTML: this.l10n.getConstant('AND')\n });\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', {\n attrs: { class: 'e-lib e-btn e-btngroup-or-lbl e-small' },\n innerHTML: this.l10n.getConstant('OR')\n });\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', {\n attrs: {\n class: dragClsName, 'aria-label': 'drag handle',\n title: 'drag handle'\n }\n });\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_1 = {\n requestType: 'header-template-create', ruleID: groupElem.id, condition: condition,\n notCondition: this.enableNotCondition ? not : undefined\n };\n this.trigger('actionBegin', args_1);\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 && trgt.previousElementSibling) {\n var btnGroupElem = this.groupTemplate(true).querySelector('.e-btn-group');\n if (btnGroupElem) {\n trgt.parentElement.insertBefore(btnGroupElem, 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) && 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 (!isNullOrUndefined(prevRule) && 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 = {\n requestType: 'header-template-initialize', ruleID: groupElem.id,\n notCondition: this.enableNotCondition ? not : undefined,\n condition: condition, rule: this.getRuleCollection(rule, false), groupID: groupID\n };\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 = grpElem && 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.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 = rule && 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 if (isNullOrUndefined(value)) {\n if (!isNullOrUndefined(rule)) {\n rule.field = '';\n rule.label = '';\n rule.type = '';\n rule.value = '';\n rule.operator = '';\n }\n else {\n return;\n }\n }\n else {\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 }\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 = {\n requestType: 'template-create', action: type, ruleID: grpEle.id,\n fields: this.fields, rule: rule\n };\n eventsArgs = {\n groupID: grpElem.id.replace(this.element.id + '_', ''), ruleID: grpEle.id.replace(this.element.id + '_', ''),\n value: rule.field, type: 'field'\n };\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 && (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 if (!isNaN(value)) {\n numericTextBoxObj.value = value;\n }\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 this.setSecondDateMinFromFirst(element, 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.setSecondDateMinFromFirst = function (element, valueIndex) {\n if (valueIndex !== 0) {\n return;\n }\n var ruleElem = closest(element, '.e-rule-container');\n if (!ruleElem) {\n return;\n }\n var operatorDropdownElement = ruleElem.querySelector('.e-rule-operator .e-dropdownlist');\n if (!operatorDropdownElement) {\n return;\n }\n var operatorDropdown = getComponent(operatorDropdownElement, 'dropdownlist');\n var operatorValue = operatorDropdown && operatorDropdown.value ? operatorDropdown.value.toString().toLowerCase() : '';\n if (operatorValue.indexOf('between') < 0) {\n return;\n }\n var firstDateElement = document.getElementById(ruleElem.id + '_valuekey0');\n var secondDateElement = document.getElementById(ruleElem.id + '_valuekey1');\n if (!firstDateElement || !secondDateElement) {\n return;\n }\n var firstDatePicker = getComponent(firstDateElement, 'datepicker');\n var secondDatePicker = getComponent(secondDateElement, 'datepicker');\n if (!firstDatePicker || !secondDatePicker || !(firstDatePicker.value instanceof Date)) {\n return;\n }\n var nextDay = new Date(firstDatePicker.value.getTime());\n nextDay.setDate(nextDay.getDate() + 1);\n secondDatePicker.min = nextDay;\n if (secondDatePicker.value instanceof Date && secondDatePicker.value.getTime() < nextDay.getTime()) {\n secondDatePicker.value = nextDay;\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 = {\n element: ddl.element, value: itemData.value, isInteracted: true,\n previousItemData: this.prevItemData, previousItem: null, item: item, itemData: itemData, event: null, e: null\n };\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 = {\n groupID: grID, ruleID: ruleID, selectedField: this.fieldMode === 'DropdownTree' ?\n dl.value[0] : dl.value, cancel: false, type: 'field'\n };\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 else if (prevOper.indexOf('in') > -1) {\n tooltipElem = parentElem.querySelector('.e-tooltip');\n if (tooltipElem) {\n getComponent(tooltipElem, 'tooltip').destroy();\n }\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 if (rule.operator) {\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 }\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 value = '';\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 var multiSelectUserQuery = (this.valueModel && this.valueModel.multiSelectModel && this.valueModel.multiSelectModel.query)\n ? this.valueModel.multiSelectModel.query\n : null;\n var multiSelectQuery = (multiSelectUserQuery && typeof multiSelectUserQuery.clone === 'function')\n ? multiSelectUserQuery.clone()\n : new Query();\n var selectedField = rule.field;\n if (selectedField) {\n multiSelectQuery.select([selectedField]);\n }\n var resolvedQuery = new Query([rule.field]);\n if (!isValues && !isFetched && (this.dataManager instanceof DataManager || this.dataSource instanceof DataManager)) {\n resolvedQuery = multiSelectQuery;\n }\n multiSelectValue = {\n dataSource: isValues ? values : (isFetched ? ds : this.dataManager),\n query: resolvedQuery,\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'), this.fieldMode === 'DropdownTree' ? 'dropdowntree' : 'dropdownlist');\n if (this.fieldMode === 'DropdownTree') {\n this.selectedColumn = this.getColumn(dropDownObj.value[0]);\n }\n else {\n this.selectedColumn = dropDownObj.getDataByValue(dropDownObj.value);\n }\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 userQuery = (this.valueModel && this.valueModel.multiSelectModel && this.valueModel.multiSelectModel.query)\n ? this.valueModel.multiSelectModel.query\n : null;\n var dataQuery = (userQuery && typeof userQuery.clone === 'function')\n ? userQuery.clone()\n : new Query();\n dataQuery.select([value]);\n var data = this.dataManager.executeQuery(dataQuery);\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 (target && target.nextElementSibling) {\n target.nextElementSibling.style.position = 'relative';\n target.nextElementSibling.classList.add('e-querybuilder-spinner');\n }\n var onComplete = function () {\n if (target && target.nextElementSibling && target.nextElementSibling.classList.contains('e-querybuilder-spinner')) {\n target.nextElementSibling.classList.remove('e-querybuilder-spinner');\n }\n };\n if (typeof itemData.template === 'string' || itemData.template.write === undefined) {\n var args = {\n rule: rule, ruleID: container.id, operator: tempRule.operator, field: column.field,\n requestType: 'value-template-create'\n };\n this.trigger('actionBegin', args);\n onComplete();\n }\n else {\n var template = itemData.template;\n var templateArgs = {\n elements: tempElements.length > 1 ? tempElements : tempElements[0],\n values: rule.value,\n operator: tempRule.operator,\n field: column.field,\n dataSource: column.values,\n onComplete: onComplete\n };\n var writeResult = void 0;\n if (typeof template.write === 'string') {\n writeResult = getValue(template.write, window)(templateArgs);\n }\n else if (typeof itemData.template !== 'function') {\n writeResult = itemData.template.write(templateArgs);\n }\n if (writeResult && typeof writeResult.then === 'function') {\n writeResult.then(function () { return onComplete(); });\n }\n else {\n setTimeout(function () { return onComplete(); }, 100);\n }\n }\n };\n QueryBuilder.prototype.getItemData = function (parentId) {\n var fieldObj = getComponent(document.getElementById(parentId + '_filterkey'), 'dropdownlist');\n var parentFieldObj = this.element.querySelector(\"#\" + parentId);\n if (this.fieldMode === 'DropdownTree') {\n fieldObj = getComponent(document.getElementById(parentId + '_filterkey'), 'dropdowntree');\n }\n else if (parentFieldObj) {\n var subFieldObjList = parentFieldObj.querySelectorAll('.e-rule-sub-filter');\n if (subFieldObjList.length > 0) {\n var lastSubFieldObj = subFieldObjList[subFieldObjList.length - 1].querySelector('.e-dropdownlist');\n fieldObj = getComponent(lastSubFieldObj, 'dropdownlist');\n }\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 if (operator === 'between' || operator === 'notbetween') {\n if (selectedValue.length > 1) {\n selectedValue = selectedValue[idx];\n }\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 if (!isNullOrUndefined(itemData) && itemData.value && !isTemplate) {\n var parsedDate = this.parseDate(itemData.value.toString(), itemData.format);\n if (parsedDate && !isNaN(parsedDate.getTime())) {\n selectedValue = parsedDate;\n }\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 (!isNullOrUndefined(column) && !isNullOrUndefined(column.values) && column.values.length > 0) {\n var parsedDate = this.parseDate(column.values[i], format);\n if (!isNullOrUndefined(parsedDate) && parsedDate instanceof Date) {\n datePicker.value = parsedDate;\n if (i === 1) {\n var parsedMinDate = this.parseDate(column.values[0], format);\n if (parsedMinDate instanceof Date && !isNaN(parsedMinDate.getTime())) {\n parsedMinDate.setDate(parsedMinDate.getDate() + 1);\n datePicker.min = parsedMinDate;\n }\n }\n }\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 ? prevItemData.value : prevItemData.field);\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 // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.isAngular && !isNullOrUndefined(prevItemData.key) && this.fieldMode === 'DropdownTree') {\n delete prevItemData.template;\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 // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.isAngular && !isNullOrUndefined(itemData.key) && itemData.template && this.fieldMode === 'DropdownTree') {\n delete itemData.template;\n }\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 = {\n requestType: 'value-template-initialize', ruleID: ruleID, field: field, operator: operator, rule: rule,\n renderTemplate: true\n };\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 // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var textboxValue;\n switch (controlName) {\n case 'checkbox':\n value = getComponent(element, controlName).value;\n rule.value = (value !== '') ? value : undefined;\n break;\n case 'textbox':\n textboxValue = 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] = textboxValue;\n }\n else if (['in', 'notin'].some(function (op) { return rule.operator.indexOf(op) !== -1; })\n && rule.operator.indexOf('contains') === -1) {\n rule.value = textboxValue ?\n (rule.type === 'string' ? textboxValue.split(',').map(function (val) { return val.trim(); }) :\n textboxValue.split(',').map(Number)) : [];\n }\n else {\n rule.value = textboxValue;\n }\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 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 if (oper === 'between' || oper === 'notbetween') {\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 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(rule) && isNullOrUndefined(ruleElem)) {\n return;\n }\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 _super.prototype.destroy.call(this);\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 = {\n isLocked: groups[i].isLocked, condition: groups[i].condition,\n not: groups[i].not\n };\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 || (window.innerWidth < 768 && !this.isPropChange) || this.displayMode === 'Vertical') {\n if (Browser.isDevice || window.innerWidth < 768) {\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 && this.sortDirection.toLowerCase() === 'descending') {\n this.columns = new DataManager(this.columns).executeLocal(new Query().sortByDesc('field'));\n }\n else if (this.sortDirection && 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 this.isPropChange = true;\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 this.isPropChange = false;\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 if (this.columns && this.columns.length) {\n this.dataColl = this.columns;\n this.initControl();\n }\n else {\n this.executeDataManager(new Query().take(1));\n }\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 enableAutoScroll: 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 = {\n dragRuleID: targetElem !== null ? targetElem.id : grpElem !== null ? grpElem.id : null,\n dragGroupID: grpElem !== null ? grpElem.id : null, cancel: false\n };\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 = {\n cancel: false, dropRuleID: targetGroup !== null ? targetGroup.id\n : targetGrp !== null ? targetGrp.id : null, dropGroupID: targetGrp !== null ? targetGrp.id : null\n };\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 if (this.allowDragAndDrop) {\n EventHandler.add(document, 'keydown', this.keyBoardHandler, this);\n }\n window.addEventListener('resize', this.windowResizeHandler.bind(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 window.removeEventListener('resize', this.windowResizeHandler);\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.windowResizeHandler = function () {\n if (Browser.isDevice || window.innerWidth < 768) {\n this.displayMode = 'Vertical';\n }\n else {\n this.displayMode = 'Horizontal';\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 if (this.isImportRules) {\n andElem = groupElem.parentElement.querySelector('.e-btn-group.e-multi-connector .e-btngroup-and');\n orElem = groupElem.parentElement.querySelector('.e-btn-group.e-multi-connector .e-btngroup-or');\n }\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 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 // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if ((rule.operator === 'between' || rule.operator === 'notbetween') && Array.isArray(rule.value) && (rule.value.length < 2 || rule.value.some(function (val) { return val === '' || val === null; }))) {\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 = {\n '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 var fieldParts = this.separator !== '' ? (field ? field.split(this.separator) : []) : [field];\n var rootField = fieldParts && fieldParts.length > 0 ? fieldParts[0] : null;\n for (var i = 0; i < columns.length; i++) {\n if (columns[i].field === field) {\n column = columns[i];\n break;\n }\n }\n if (!column && this.separator !== '') {\n for (var i = 0; i < columns.length; i++) {\n if (columns[i].field === rootField) {\n if (columns[i].columns) {\n var subField = field.substring(rootField.length + this.separator.length);\n if (subField) {\n column = this.getColumn(subField, columns[i].columns);\n }\n else {\n column = columns[i];\n }\n }\n else {\n column = columns[i];\n }\n break;\n }\n }\n }\n if (!column) {\n for (var i = 0; i < columns.length; i++) {\n if (columns[i].columns) {\n column = this.getColumn(field, columns[i].columns);\n if (column) {\n break;\n }\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 if (this.enableSeparateConnector) {\n getComponent(tglBtnElem.querySelector('.e-checkbox'), 'checkbox').checked = rule.not;\n }\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 if (!isNullOrUndefined(ruleColl[i].rules)) {\n parentElem = this.renderGroup(ruleColl[i], ruleColl[i].condition, parentElem, ruleColl[i].not);\n var andElem = parentElem.querySelector('.e-btngroup-and');\n var orElem = parentElem.querySelector('.e-btngroup-or');\n andElem.disabled = true;\n orElem.disabled = 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 _this = this;\n var isRoot = false;\n if (!queryStr && queryStr !== '') {\n queryStr = '';\n isRoot = true;\n }\n else {\n queryStr += '(';\n }\n if (rules.not) {\n var notPrefix = sqlLocale ? this.l10n.getConstant('NOT').toUpperCase() + ' ' : 'NOT ';\n queryStr += isRoot ? notPrefix + '(' : ' ' + notPrefix + '(';\n }\n if (rules.rules && rules.rules.length) {\n queryStr += rules.rules.reduce(function (result, rule, j) {\n var ruleStr = '';\n if (rule.rules) {\n ruleStr = _this.getSqlString(rule, enableEscape, '', sqlLocale);\n if (_this.enableSeparateConnector) {\n rules.condition = rule.condition;\n }\n }\n else {\n var ruleOpertor = sqlLocale ? _this.sqlOperators[rule.operator] : _this.operators[rule.operator];\n var valueStr = '';\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 var valueArray = rule.value;\n valueStr = '(\"' + valueArray.join('\",\"') + '\")';\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 var fieldName = rule.field;\n if (enableEscape) {\n fieldName = '`' + fieldName + '`';\n }\n else if (fieldName.indexOf(' ') > -1) {\n fieldName = '\"' + fieldName + '\"';\n }\n if (rule.operator.toString().indexOf('null') > -1) {\n ruleStr = fieldName + ' ' + 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 ruleStr = fieldName + ' ' + custOper + ' ' + valueStr;\n }\n }\n if (j !== rules.rules.length - 1) {\n var condition = rules.condition;\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 ruleStr += ' ' + condition + ' ';\n }\n }\n return result + ruleStr;\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 if (/^\\(/.exec(sqlString)) {\n this.parser.push(['Left', '(']);\n return 1;\n }\n if (/^\\)/.exec(sqlString)) {\n this.parser.push(['Right', ')']);\n return 1;\n }\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 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 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 this.parser.push(['String', matchValue]);\n return matchValue.length;\n }\n var doubleString = this.getDoubleQuoteString(sqlString);\n if (doubleString !== '') {\n matchValue = doubleString;\n this.parser.push(['DoubleString', matchValue]);\n return matchValue.length;\n }\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 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) ? 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 if (parser.length === 3 && parser[2][0] === 'String' && (parser[2][1]).indexOf('%') !== -1) {\n var oper = parser[i + 2][1] ? parser[i + 2][1].replace(/'/g, '') : parser[i + 2][1];\n rule.operator = this.getOperator(oper, parser[i + 1][1], sqlLocale);\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 }\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([{\n 'label': getRule.label, 'field': getRule.field, 'type': getRule.type, 'operator': getRule.operator,\n 'value': getRule.value, 'condition': getRule.condition\n }], groupId);\n }\n else {\n this.addRules([{\n 'label': getRule.label, 'field': getRule.field, 'type': getRule.type, 'operator': getRule.operator,\n 'value': getRule.value\n }], 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 disableComponents = function (elements, componentGetter, isDisabled) {\n elements.forEach(function (element) {\n var component = componentGetter(element);\n if ('enabled' in component) {\n component.enabled = !isDisabled;\n }\n else if ('disabled' in component) {\n component.disabled = isDisabled;\n }\n });\n };\n var elements = {\n ddl: groupElem.querySelectorAll('.e-control.e-dropdownlist'),\n numeric: groupElem.querySelectorAll('.e-control.e-numerictextbox'),\n text: groupElem.querySelectorAll('.e-control.e-textbox'),\n date: groupElem.querySelectorAll('.e-control.e-datepicker'),\n checkbox: groupElem.querySelectorAll('.e-control.e-checkbox'),\n radio: groupElem.querySelectorAll('.e-control.e-radio'),\n multiSelect: groupElem.querySelectorAll('.e-control.e-multiselect'),\n deleteElem: groupElem.querySelectorAll('.e-rule-delete'),\n lockElem: groupElem.querySelectorAll('.e-lock-rule'),\n cloneElem: groupElem.querySelectorAll('.e-clone-rule'),\n ruleElem: groupElem.querySelectorAll('.e-rule-container'),\n ddTree: groupElem.querySelectorAll('.e-control.e-dropdowntree')\n };\n elements.deleteElem.forEach(function (elem, i) {\n if (isDisabled) {\n if (elements.ruleElem[i] && elements.ruleElem[i].classList.contains('e-disable')) {\n elements.ruleElem[i].classList.add('e-disable');\n }\n elements.deleteElem[i].disabled = true;\n if (elements.cloneElem[i]) {\n elements.cloneElem[i].disabled = true;\n }\n if (elements.lockElem[i] !== target) {\n elements.lockElem[i].disabled = true;\n elements.lockElem[i].children[0].classList.remove('e-unlock');\n elements.lockElem[i].children[0].classList.add('e-lock');\n }\n }\n else {\n if (elements.ruleElem[i]) {\n elements.ruleElem[i].classList.remove('e-disable');\n }\n if (elements.cloneElem[i]) {\n elements.cloneElem[i].disabled = false;\n }\n elements.deleteElem[i].disabled = false;\n elements.lockElem[i].disabled = false;\n elements.lockElem[i].children[0].classList.remove('e-lock');\n elements.lockElem[i].children[0].classList.add('e-unlock');\n }\n });\n disableComponents(elements.ddl, function (elem) { return getComponent(elem, 'dropdownlist'); }, isDisabled);\n disableComponents(elements.numeric, function (elem) { return getComponent(elem, 'numerictextbox'); }, isDisabled);\n disableComponents(elements.text, function (elem) { return getComponent(elem, 'textbox'); }, isDisabled);\n disableComponents(elements.date, function (elem) { return getComponent(elem, 'datepicker'); }, isDisabled);\n disableComponents(elements.checkbox, function (elem) { return getComponent(elem, 'checkbox'); }, isDisabled);\n disableComponents(elements.radio, function (elem) { return getComponent(elem, 'radio'); }, isDisabled);\n disableComponents(elements.multiSelect, function (elem) { return getComponent(elem, 'multiselect'); }, isDisabled);\n disableComponents(elements.ddTree, function (elem) { return getComponent(elem, 'dropdowntree'); }, isDisabled);\n };\n __decorate([\n Event()\n ], QueryBuilder.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], QueryBuilder.prototype, \"destroyed\", 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 fieldType;\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 for (var _i = 0, _a = this.parent.columns; _i < _a.length; _i++) {\n var column = _a[_i];\n if (column.field === condition) {\n fieldType = column.type;\n break;\n }\n }\n if (!isNaN(Date.parse(stringValue)) || fieldType === 'date') { // 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","isPropChange","isRuleClicked","MultiSelect","Inject","CheckBoxSelection","getPersistData","addOnPersist","reset","isImportRules","bodyElem","querySelector","inputElements","querySelectorAll","currentIndex","processBatch","endIndex","Math","className","indexOf","tooltip","getComponent","destroy","parentElement","e","console","warn","requestAnimationFrame","textContent","fragment","document","createDocumentFragment","grpContainer","createElement","attrs","class","grpHeader","grpBody","appendChild","headerTemplate","isRoot","enableNotCondition","toggleElements","removeClass","levelColl","id","setProperties","rule","rules","disableRuleCondition","getWrapper","getModuleName","requiredModules","modules","push","member","args","GetRootColumnName","field","isNullOrUndefined","separator","split","initialize","dataColl","type_1","value_1","columnKeys_1","keys","cols","categories_1","groupBy_1","isDate_1","validateObj_1","columns","columnSort","forEach","column","updateCustomOperator","type","isNaN","Date","parse","getTime","validation","category","l10n","getConstant","operators","customOperators","groupBy","updateSubFieldsFromColumns","len","label","updateSubFields","sortDirection","processColumnsInBatches","setTimeout","trigger","processedCount","endIdx","col","updateSubFieldsLarge","colLength","processNextBatch","j","data","sampCol","result","columnKeys","compField","resData","from","this_1","sqlIdx","operator_1","operColl","values","map","join","valueIdx","focusEventHandler","event","clickEventHandler","groupID","tagName","animation","Animation","duration","delay","renderSummary","summaryElem","getElementById","txtareaElem","animate","name","groupElem","style","display","getSqlFromRules","height","scrollHeight","actionButton","deleteRule","ruleClone","ruleLock","groupLock","groupClone","closest","deleteGroup","addGroupElement","mRules","extend","setGroupRules","renderSummaryCollapse","forIdValue","getAttribute","targetValue","enableSeparateConnector","classList","contains","replace","group","getGroup","ariaChecked","toggleElem","getElementsByClassName","addClass","cancel","toLowerCase","beforeSuccessCallBack","observedChangeArgs","beforeRules","getValidRules","getParentGroup","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","isVertical","displayMode","getColumn","newRule","operator","selectedColumn","passedRule_1","actionArgs","createArgs","spanElement","add","previousRuleElem","processAdjacentElements","updateAddedRule","ruleCount","applyFieldComponent","lockRuleTarget","processConnectorElements","ruleContainer","prevRule","headerTemplateFn","handleOrphanedRuleElement","prevElem","prevRuleContainer","notCondition","undefined","handleOrphanedConnectorElement","setMultiConnector","fieldMode","applyDropdownListComponent","applyDropdownTreeComponent","ddlField","ddlValue","autoSelectField","dataSource","placeholder","popupHeight","close","fieldClose","bind","change","changeField","open","popupOpen","cssClass","fieldModel","dropDownList","DropDownList","appendTo","ddlVal","getDataByValue","changeRule","itemData","dummyDropdownTreeDs","updateDropdowntreeDS","child","expanded","selectable","showClearButton","changeOnBlur","treeSettings","expandOn","filtering","dropdownTreeFiltering","dropdownTreeClose","dropdowntree","DropDownTree","getLabelFromColumn","proxy","ruleElemID","srcElement","ddTree","hierarchicalData","changeDataSource","matchedDataSource","nestedChildFilter","filter","filteredChild","treeObj","expandAll","refresh","node","isMatchedNode","matchedChildren","checkValue","parseInt","toString","template","isNewRuleAdded","enableSeparateCondition","custom","splice","changeRuleTemplate","parentGroup","previousColumn","detach","clearQBTemplate","operVal","renderToolTip","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-label","title","role","innerHTML","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_1","conditionBtn_1","btnObj","onclick","groupBtn_1","DropDownButton","items","grpId","chgrpId","childGroupID","btnGroupElem","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","setSecondDateMinFromFirst","valueIndex","operatorDropdownElement","operatorDropdown","firstDateElement","secondDateElement","firstDatePicker","secondDatePicker","nextDay","setDate","getDate","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","remove","subFieldValue","subFilterCounter","ruleId","subField","currOper","prevValue","parentElem","operatorList","oprElem","childElementCount","fieldObj","renderValues","operator_2","ddlIdx","autoSelectOperator","ddlOperator","operatorModel","isField","popup","inputElement","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","multiSelectUserQuery","valueModel","multiSelectModel","query","multiSelectQuery","clone","Query","resolvedQuery","dataManager","DataManager","selectedRule","mode","width","closePopup","actionBegin","multiSelectOpen","multiSelectObj","bindMultiSelectData","getMultiSelectData","dummyData","deferred","Deferred","userQuery","dataQuery","executeQuery","multiselectObj","hideSpinner","createSpinner","showSpinner","then","actual","catch","reject","spinnerElem","Browser","isDevice","ms","processTemplate","container","tempElements","onComplete","write","templateArgs","writeResult","parentFieldObj","subFieldObjList","lastSubFieldObj","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","parsedDate","formatObj","getLocale","datePickerModel","DatePicker","parsedMinDate","orgValue","isCheck","radioBtn","radioButtonModel","radiobutton","RadioButton","getOperatorIndex","getPreviousItemData","isRender","filtElem","getElementsByTagName","filtObj","isTempRendered","setColumnTemplate","inputLen","renderTemplate","observedActionArgs","actionBeginSuccessCallBack","Element","columnTemplateFn","valElemColl","updateValues","selectedDate","radioBtnObj","textboxValue","controlName","some","op","val","trim","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","innerWidth","summaryView","notGroupRtl","readonly","enableReadonly","buttons","button","contentElem","textElem","styles","editElem","divElem","collapseElem","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","initControl","executeDataManager","take","renderComplete","initializeDrag","draggable","Draggable","dragTarget","distance","helper","dragStart","dragStartHandler","drag","dragHandler","dragStop","dragStopHandler","isReplaceDragEle","isPreventSelect","abort","isDragScroll","enableAutoScroll","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","addEventListener","windowResizeHandler","removeEventListener","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","isArray","notValue","HTMLElement","deleteGroups","groupIdColl","getFilteredRecords","predicate","getPredicate","dataManagerQuery","where","ruleIdColl","getDataManagerQuery","pred","pred2","ruleValue","ignoreCase","and","or","isDateFilter","dateOperColl","matchCase","isTime","datePredicate","arrayPredicate","Predicate","localeString","cldrData","fieldParts","rootField","substring","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","notPrefix","reduce","ruleStr","ruleOpertor","valueStr","ruleCondition","fieldName","custOper","isCustom","setRulesFromSql","sqlString","ruleModel","getRulesFromSql","sqlParser","processParser","allowEscape","getParameterizedSql","moduleLoader","loadedModules","sql","notify","prop","onPropertyChange","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","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","subRules","lLen","grpCount","numVal","strVal","isLeftOpened","isNotOpened","pop","targetGrpId","lockItem","disableRuleControls","newGroup","disableHeaderControls","updateLockItems","isDisabled","addElem","deleteGrpElem","lockElem","groupContElem","addCondition","addGroup","disableComponents","componentGetter","component","enabled","checkbox","radio","multiSelect","deleteElem","Event","Complex","NotifyPropertyChanges","Component","QueryLibrary","parent","isDestroyed","on","queryLibrary","off","getMongoFromRules","mongoParser","getParameterSql","getNamedParameterSql","convertParamSqlToSql","convertNamedParamSqlToSql","convertMongoQuery","getOperatorFromMongoOperator","operatorValue","itVal","x","endsWith","mongoList","mongoRecursion","stringValue","betweenValue","fieldType","keyObj","betweenOperatorArray","inOperatorArray","notBetween","innerObject","firstKey","secondKey","firstValue","innerFirstValue","innerSecondValue","_a","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 _this.isValueEmpty = false;\n _this.isPropChange = false;\n _this.isRuleClicked = false;\n _this.groupCloned = 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 inputElements = this.element.querySelectorAll('input.e-control');\n var batchSize = 20;\n var currentIndex = 0;\n var processBatch = function () {\n var endIndex = Math.min(currentIndex + batchSize, inputElements.length);\n for (var i = currentIndex; i < endIndex; i++) {\n var element = inputElements[i];\n try {\n if (element.className.indexOf('e-tooltip') > -1) {\n var tooltip = getComponent(element, 'tooltip');\n if (tooltip) {\n tooltip.destroy();\n }\n }\n else if (element.parentElement && element.parentElement.className.indexOf('e-tooltip') > -1) {\n var tooltip = getComponent(element.parentElement, 'tooltip');\n if (tooltip) {\n tooltip.destroy();\n }\n }\n }\n catch (e) {\n console.warn('Error destroying tooltip:', e);\n }\n }\n currentIndex = endIndex;\n if (currentIndex < inputElements.length) {\n requestAnimationFrame(processBatch);\n }\n };\n if (inputElements.length > 0) {\n processBatch();\n }\n if (bodyElem) {\n bodyElem.textContent = '';\n }\n else {\n var fragment = document.createDocumentFragment();\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);\n grpContainer.appendChild(grpBody);\n fragment.appendChild(grpContainer);\n this.element.appendChild(fragment);\n bodyElem = this.element.querySelector('.e-group-body');\n }\n if (this.headerTemplate && this.isRoot) {\n this.element.textContent = '';\n this.isRoot = false;\n }\n if (this.enableNotCondition) {\n var toggleElements = this.element.querySelectorAll('.e-qb-toggle');\n for (var i = 0; i < toggleElements.length; i++) {\n removeClass([toggleElements[i]], 'e-active-toggle');\n }\n }\n if (bodyElem) {\n bodyElem.appendChild(this.createElement('div', { attrs: { class: 'e-rule-list' } }));\n }\n this.levelColl[this.element.id + '_group0'] = [0];\n this.setProperties({ rule: { condition: 'and', not: false, rules: [] } }, true);\n if (bodyElem && bodyElem.parentElement) {\n this.disableRuleCondition(bodyElem.parentElement);\n }\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 if (!isNullOrUndefined(field)) {\n return this.separator ? field.split(this.separator)[0] : field;\n }\n return '';\n };\n QueryBuilder.prototype.initialize = function () {\n var _this = this;\n if (this.dataColl.length) {\n var columnKeys_1 = Object.keys(this.dataColl[0]);\n var cols = [];\n var categories_1 = [];\n var type_1;\n var groupBy_1 = false;\n var isDate_1 = false;\n var value_1;\n var validateObj_1 = { isRequired: true, min: 0, max: Number.MAX_VALUE };\n if (this.columns.length) {\n this.columnSort();\n var columns = this.columns;\n columns.forEach(function (column) {\n _this.updateCustomOperator(column, 'initial');\n if (!column.type) {\n if (columnKeys_1.indexOf(column.field) > -1) {\n value_1 = _this.dataColl[0][column.field];\n type_1 = typeof value_1;\n if (type_1 === 'string') {\n isDate_1 = !isNaN(Date.parse(value_1));\n }\n else if (type_1 === 'object') {\n isDate_1 = value_1 instanceof Date && !isNaN(value_1.getTime());\n type_1 = 'string';\n }\n column.type = type_1;\n isDate_1 = false;\n }\n type_1 = 'string';\n }\n if (!column.validation) {\n column.validation = validateObj_1;\n }\n if (column.category) {\n groupBy_1 = true;\n }\n else {\n column.category = _this.l10n.getConstant('OtherFields');\n }\n if (categories_1.indexOf(column.category) < 0) {\n categories_1.push(column.category);\n }\n if (!column.operators ||\n (_this.isLocale && _this.isCustomOprCols.indexOf(column.field) === -1)) {\n column.operators = _this.customOperators[column.type + 'Operator'];\n }\n });\n if (groupBy_1 && (categories_1.length > 1 || categories_1[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_1.length; i < len; i++) {\n value_1 = this.dataColl[0][columnKeys_1[i]];\n type_1 = typeof value_1;\n if (type_1 === 'string') {\n isDate_1 = !isNaN(Date.parse(value_1));\n }\n else if (type_1 === 'object' && !Object.keys(value_1).length) {\n isDate_1 = value_1 instanceof Date && !isNaN(value_1.getTime());\n type_1 = 'string';\n }\n cols[i] = {\n 'field': columnKeys_1[i], 'label': columnKeys_1[i], 'type': isDate_1 ? 'date' : type_1,\n 'validation': validateObj_1\n };\n isDate_1 = false;\n cols[i].operators = this.customOperators[cols[i].type + 'Operator'];\n if (type_1 === 'object') {\n this.updateSubFields(value_1, cols[i]);\n }\n }\n this.columns = cols;\n }\n }\n else if (this.columns && this.columns.length) {\n if (this.sortDirection !== 'Default') {\n this.columnSort();\n }\n this.processColumnsInBatches();\n if (this.columns.length > 50) {\n setTimeout(function () {\n _this.updateSubFieldsFromColumns(_this.columns);\n }, 0);\n }\n else {\n this.updateSubFieldsFromColumns(this.columns);\n }\n }\n this.trigger('dataBound', { type: 'dataBound' });\n };\n QueryBuilder.prototype.processColumnsInBatches = function () {\n var _this = this;\n var columns = this.columns;\n var batchSize = 10;\n var processedCount = 0;\n var processBatch = function () {\n var endIdx = Math.min(processedCount + batchSize, columns.length);\n for (var i = processedCount; i < endIdx; i++) {\n if (columns[i].category && columns[i].category !== _this.l10n.getConstant('OtherFields')) {\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], 'initial');\n if (!columns[i].operators ||\n (_this.isLocale && _this.isCustomOprCols.indexOf(columns[i].field) === -1)) {\n columns[i].operators = _this.customOperators[columns[i].type + 'Operator'];\n }\n }\n processedCount = endIdx;\n if (processedCount < columns.length) {\n requestAnimationFrame(processBatch);\n }\n };\n processBatch();\n };\n QueryBuilder.prototype.updateSubFieldsFromColumns = function (col, field) {\n if (col.length > 50) {\n this.updateSubFieldsLarge(col, field);\n return;\n }\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.updateSubFieldsLarge = function (col, field) {\n var _this = this;\n var i = 0;\n var colLength = col.length;\n var processNextBatch = function () {\n var endIdx = Math.min(i + 10, colLength);\n for (; i < endIdx; 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 }\n if (i < colLength) {\n requestAnimationFrame(processNextBatch);\n }\n else {\n setTimeout(function () {\n for (var j = 0; j < colLength; j++) {\n if (col[j].columns) {\n col[j].type = 'object';\n _this.updateSubFieldsFromColumns(col[j].columns, col[j].field);\n }\n }\n }, 0);\n }\n };\n processNextBatch();\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 (typeof target.className === 'string' && 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' && typeof target.className === 'string' && 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.isRuleClicked = 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 = this.groupCloned = true;\n this.isRuleClicked = 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 (typeof target.className === 'string' && 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 if (target.classList.contains('e-btngroup-or-lbl')) {\n targetValue = 'or';\n }\n else if (target.classList.contains('e-btngroup-and-lbl')) {\n targetValue = 'and';\n }\n else {\n targetValue = target.textContent;\n }\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 = {\n groupID: groupID, cancel: false, type: 'condition', value: targetValue.toLowerCase(),\n 'not': ariaChecked\n };\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.isRuleClicked = true;\n this.addRuleElement(closest(target, '.e-group-container'), {});\n }\n else if (event.element.children[0].className.indexOf('e-addgroup') > -1) {\n this.isRuleClicked = true;\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 && 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 _this = this;\n var isVertical = this.element.className.indexOf('e-device') > -1 || this.displayMode === 'Vertical';\n var height = isVertical ? '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 = {\n 'label': column.label,\n 'field': column.field,\n 'type': column.type,\n 'operator': operators[0].value\n };\n var passedRule_1 = Object.keys(rule).length ? rule : newRule;\n ruleElem = this.appendRuleElem(trgt, column, act, pId, 'field', passedRule_1);\n var actionArgs = {\n requestType: 'template-initialize',\n ruleID: ruleElem.id,\n action: 'insert-rule',\n fields: this.fields,\n rule: passedRule_1\n };\n this.trigger('actionBegin', actionArgs);\n setTimeout(function () {\n var createArgs = {\n requestType: 'template-create',\n ruleID: ruleElem.id,\n action: 'insert-rule',\n fields: _this.fields,\n rule: passedRule_1\n };\n _this.trigger('actionBegin', createArgs);\n }, 0);\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', {\n attrs: { class: 'e-btn-icon e-icons e-delete-icon' }\n });\n element.appendChild(spanElement);\n }\n if (!this.showButtons.ruleDelete) {\n element.classList.add('e-button-hide');\n }\n }\n ruleElem.className = 'e-rule-container ' + (isVertical ? 'e-vertical-mode' : 'e-horizontal-mode');\n var previousRuleElem = ruleElem.previousElementSibling;\n this.processAdjacentElements(ruleElem, previousRuleElem, rule);\n if (!this.isImportRules) {\n this.updateAddedRule(trgt, rule, newRule, isRlTmp, pId, this.enableSeparateConnector ? true : null);\n }\n if (this.rule.condition === '' && (this.isRuleClicked || this.rule.rules.length > 1)) {\n this.rule.condition = 'and';\n }\n this.isRuleClicked = false;\n var ruleCount = this.rule.rules.length;\n if (!column || (column && !column.ruleTemplate) || !rule.field) {\n if (ruleCount > 20) {\n setTimeout(function () {\n _this.applyFieldComponent(ruleElem, rule, height);\n }, 0);\n }\n else {\n this.applyFieldComponent(ruleElem, rule, height);\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', {\n groupID: trgt.id.replace(this.element.id + '_', ''),\n ruleID: ruleID,\n type: 'insertRule'\n });\n }\n }\n if (this.enableSeparateConnector && isNullOrUndefined(rule.condition) && ruleID) {\n rule = this.getRule(ruleID);\n }\n if (this.enableSeparateConnector) {\n this.processConnectorElements(ruleElem);\n }\n };\n QueryBuilder.prototype.processAdjacentElements = function (ruleElem, previousRuleElem, rule) {\n if (this.enableSeparateConnector) {\n if (previousRuleElem && previousRuleElem.classList.contains('e-group-container')) {\n var ruleContainer = previousRuleElem.querySelectorAll('.e-rule-container');\n previousRuleElem = ruleContainer[ruleContainer.length - 1];\n }\n if (previousRuleElem && previousRuleElem.classList.contains('e-rule-container')) {\n var prevRule = this.getRule(previousRuleElem);\n if (this.headerTemplate) {\n this.headerTemplateFn(previousRuleElem, false, prevRule.condition, prevRule, previousRuleElem.id);\n }\n }\n else if (isNullOrUndefined(previousRuleElem) && ruleElem.id !== this.element.id + '_group0_rule0') {\n this.handleOrphanedRuleElement(ruleElem, rule);\n }\n }\n else {\n if (previousRuleElem && previousRuleElem.className.indexOf('e-rule-container') > -1) {\n ruleElem.classList.add('e-joined-rule');\n previousRuleElem.classList.add('e-prev-joined-rule');\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 };\n QueryBuilder.prototype.handleOrphanedRuleElement = function (ruleElem, rule) {\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 = this.getRule(prevElem);\n this.headerTemplateFn(prevElem, false, prevRule.condition, prevRule, prevElem.id, true);\n }\n }\n else {\n this.headerTemplateFn(ruleElem, false, rule.condition, rule, ruleElem.id, true);\n }\n };\n QueryBuilder.prototype.processConnectorElements = function (ruleElem) {\n var prevElem = ruleElem.previousElementSibling;\n var ruleContainer;\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 = {\n requestType: 'rule-template-create',\n ruleID: prevElem.id,\n condition: prevRule.condition,\n notCondition: this.enableNotCondition ? true : undefined\n };\n this.trigger('actionBegin', args);\n }\n else if (isNullOrUndefined(prevElem) && ruleElem.id !== this.element.id + '_group0_rule0') {\n this.handleOrphanedConnectorElement(ruleElem);\n }\n this.setMultiConnector(ruleElem);\n };\n QueryBuilder.prototype.handleOrphanedConnectorElement = function (ruleElem) {\n var group = ruleElem.closest('.e-group-container');\n if (group && group.previousElementSibling && group.previousElementSibling.previousElementSibling) {\n var prevElem = group.previousElementSibling.previousElementSibling;\n if (prevElem.classList.contains('e-group-container')) {\n var ruleContainer = prevElem.querySelectorAll('.e-rule-container');\n prevElem = ruleContainer[ruleContainer.length - 1];\n }\n if (prevElem.classList.contains('e-rule-container')) {\n var prevRule = this.getRule(prevElem);\n var args = {\n requestType: 'rule-template-create',\n ruleID: prevElem.id,\n condition: prevRule.condition,\n notCondition: this.enableNotCondition ? true : undefined\n };\n this.trigger('actionBegin', args);\n }\n }\n };\n QueryBuilder.prototype.applyFieldComponent = function (ruleElem, rule, height) {\n if (this.fieldMode === 'Default') {\n this.applyDropdownListComponent(ruleElem, rule, height);\n }\n else {\n this.applyDropdownTreeComponent(ruleElem, rule, height);\n }\n };\n QueryBuilder.prototype.applyDropdownListComponent = function (ruleElem, rule, height) {\n var ddlField;\n var ddlValue;\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,\n placeholder: this.l10n.getConstant('SelectField'),\n popupHeight: ((this.columns.length > 5) ? height : 'auto'),\n close: this.fieldClose.bind(this, ruleElem.id + '_filterkey'),\n change: this.changeField.bind(this),\n value: rule ? ddlValue : null,\n open: this.popupOpen.bind(this, true),\n cssClass: 'qb-dropdownlist'\n };\n if (this.fieldModel) {\n ddlField = __assign({}, ddlField, this.fieldModel);\n }\n var dropDownList = new DropDownList(ddlField);\n dropDownList.appendTo('#' + ruleElem.id + '_filterkey');\n var ddlVal;\n if (this.separator && rule.field) {\n ddlVal = this.GetRootColumnName(rule.field);\n }\n else {\n ddlVal = this.isImportRules ? this.GetRootColumnName(rule.field) : dropDownList.value;\n }\n this.selectedColumn = dropDownList.getDataByValue(ddlVal);\n if (Object.keys(rule).length) {\n this.changeRule(rule, {\n element: dropDownList.element,\n itemData: this.selectedColumn\n });\n }\n };\n QueryBuilder.prototype.applyDropdownTreeComponent = function (ruleElem, rule, height) {\n var ddlField;\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: {\n dataSource: this.dummyDropdownTreeDs,\n value: 'field',\n text: 'label',\n child: 'columns',\n expanded: 'expanded',\n selectable: 'selectable'\n },\n placeholder: this.l10n.getConstant('SelectField'),\n showClearButton: false,\n popupHeight: ((this.columns.length > 5) ? height : 'auto'),\n changeOnBlur: false,\n change: this.changeField.bind(this),\n value: !isNullOrUndefined(ddlValue) ? [ddlValue] : null,\n open: this.popupOpen.bind(this, false),\n treeSettings: { expandOn: 'Click' },\n cssClass: 'e-qb-ddt',\n filtering: this.dropdownTreeFiltering.bind(this),\n 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 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,\n itemData: this.selectedColumn\n });\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 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) && !isNullOrUndefined(proxy.ddTree.treeObj)) {\n proxy.ddTree.treeObj.expandAll();\n }\n }, 100);\n }\n };\n QueryBuilder.prototype.changeDataSource = function (data) {\n this.updateDropdowntreeDS(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(extend([], this.columns, [], true));\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 if (column && 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 operVal = this.selectedColumn.operators;\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 else {\n var rule = { field: '', label: '', operator: '', value: '' };\n this.addRuleElement(parentGroup, rule, column, 'change', parentId, true);\n }\n }\n };\n QueryBuilder.prototype.renderToolTip = function (element) {\n var tooltip = new Tooltip({\n 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 });\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.value) && 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.value)) ||\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 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', {\n attrs: {\n class: dragClsName, 'aria-label': 'drag handle',\n title: 'drag handle'\n }\n });\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', {\n attrs: { class: 'e-lib e-btn e-btngroup-and-lbl e-small' },\n innerHTML: this.l10n.getConstant('AND')\n });\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', {\n attrs: { class: 'e-lib e-btn e-btngroup-or-lbl e-small' },\n innerHTML: this.l10n.getConstant('OR')\n });\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', {\n attrs: {\n class: dragClsName, 'aria-label': 'drag handle',\n title: 'drag handle'\n }\n });\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_1 = {\n requestType: 'header-template-create', ruleID: groupElem.id, condition: condition,\n notCondition: this.enableNotCondition ? not : undefined\n };\n this.trigger('actionBegin', args_1);\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 && trgt.previousElementSibling) {\n var btnGroupElem = this.groupTemplate(true).querySelector('.e-btn-group');\n if (btnGroupElem) {\n trgt.parentElement.insertBefore(btnGroupElem, 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) && 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 (!isNullOrUndefined(prevRule) && 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 = {\n requestType: 'header-template-initialize', ruleID: groupElem.id,\n notCondition: this.enableNotCondition ? not : undefined,\n condition: condition, rule: this.getRuleCollection(rule, false), groupID: groupID\n };\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 = grpElem && 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.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 = rule && 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 if (isNullOrUndefined(value)) {\n if (!isNullOrUndefined(rule)) {\n rule.field = '';\n rule.label = '';\n rule.type = '';\n rule.value = '';\n rule.operator = '';\n }\n else {\n return;\n }\n }\n else {\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 }\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 = {\n requestType: 'template-create', action: type, ruleID: grpEle.id,\n fields: this.fields, rule: rule\n };\n eventsArgs = {\n groupID: grpElem.id.replace(this.element.id + '_', ''), ruleID: grpEle.id.replace(this.element.id + '_', ''),\n value: rule.field, type: 'field'\n };\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 && (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 if (!isNaN(value)) {\n numericTextBoxObj.value = value;\n }\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 this.setSecondDateMinFromFirst(element, 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.setSecondDateMinFromFirst = function (element, valueIndex) {\n if (valueIndex !== 0) {\n return;\n }\n var ruleElem = closest(element, '.e-rule-container');\n if (!ruleElem) {\n return;\n }\n var operatorDropdownElement = ruleElem.querySelector('.e-rule-operator .e-dropdownlist');\n if (!operatorDropdownElement) {\n return;\n }\n var operatorDropdown = getComponent(operatorDropdownElement, 'dropdownlist');\n var operatorValue = operatorDropdown && operatorDropdown.value ? operatorDropdown.value.toString().toLowerCase() : '';\n if (operatorValue.indexOf('between') < 0) {\n return;\n }\n var firstDateElement = document.getElementById(ruleElem.id + '_valuekey0');\n var secondDateElement = document.getElementById(ruleElem.id + '_valuekey1');\n if (!firstDateElement || !secondDateElement) {\n return;\n }\n var firstDatePicker = getComponent(firstDateElement, 'datepicker');\n var secondDatePicker = getComponent(secondDateElement, 'datepicker');\n if (!firstDatePicker || !secondDatePicker || !(firstDatePicker.value instanceof Date)) {\n return;\n }\n var nextDay = new Date(firstDatePicker.value.getTime());\n nextDay.setDate(nextDay.getDate() + 1);\n secondDatePicker.min = nextDay;\n if (secondDatePicker.value instanceof Date && secondDatePicker.value.getTime() < nextDay.getTime()) {\n secondDatePicker.value = nextDay;\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 = {\n element: ddl.element, value: itemData.value, isInteracted: true,\n previousItemData: this.prevItemData, previousItem: null, item: item, itemData: itemData, event: null, e: null\n };\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 = {\n groupID: grID, ruleID: ruleID, selectedField: this.fieldMode === 'DropdownTree' ?\n dl.value[0] : dl.value, cancel: false, type: 'field'\n };\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 else if (prevOper.indexOf('in') > -1) {\n tooltipElem = parentElem.querySelector('.e-tooltip');\n if (tooltipElem) {\n getComponent(tooltipElem, 'tooltip').destroy();\n }\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 if (rule.operator) {\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 }\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 value = '';\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 var multiSelectUserQuery = (this.valueModel && this.valueModel.multiSelectModel && this.valueModel.multiSelectModel.query)\n ? this.valueModel.multiSelectModel.query\n : null;\n var multiSelectQuery = (multiSelectUserQuery && typeof multiSelectUserQuery.clone === 'function')\n ? multiSelectUserQuery.clone()\n : new Query();\n var selectedField = rule.field;\n if (selectedField) {\n multiSelectQuery.select([selectedField]);\n }\n var resolvedQuery = new Query([rule.field]);\n if (!isValues && !isFetched && (this.dataManager instanceof DataManager || this.dataSource instanceof DataManager)) {\n resolvedQuery = multiSelectQuery;\n }\n multiSelectValue = {\n dataSource: isValues ? values : (isFetched ? ds : this.dataManager),\n query: resolvedQuery,\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'), this.fieldMode === 'DropdownTree' ? 'dropdowntree' : 'dropdownlist');\n if (this.fieldMode === 'DropdownTree') {\n this.selectedColumn = this.getColumn(dropDownObj.value[0]);\n }\n else {\n this.selectedColumn = dropDownObj.getDataByValue(dropDownObj.value);\n }\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 userQuery = (this.valueModel && this.valueModel.multiSelectModel && this.valueModel.multiSelectModel.query)\n ? this.valueModel.multiSelectModel.query\n : null;\n var dataQuery = (userQuery && typeof userQuery.clone === 'function')\n ? userQuery.clone()\n : new Query();\n dataQuery.select([value]);\n var data = this.dataManager.executeQuery(dataQuery);\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 (target && target.nextElementSibling) {\n target.nextElementSibling.style.position = 'relative';\n target.nextElementSibling.classList.add('e-querybuilder-spinner');\n }\n var onComplete = function () {\n if (target && target.nextElementSibling && target.nextElementSibling.classList.contains('e-querybuilder-spinner')) {\n target.nextElementSibling.classList.remove('e-querybuilder-spinner');\n }\n };\n if (typeof itemData.template === 'string' || itemData.template.write === undefined) {\n var args = {\n rule: rule, ruleID: container.id, operator: tempRule.operator, field: column.field,\n requestType: 'value-template-create'\n };\n this.trigger('actionBegin', args);\n onComplete();\n }\n else {\n var template = itemData.template;\n var templateArgs = {\n elements: tempElements.length > 1 ? tempElements : tempElements[0],\n values: rule.value,\n operator: tempRule.operator,\n field: column.field,\n dataSource: column.values,\n onComplete: onComplete\n };\n var writeResult = void 0;\n if (typeof template.write === 'string') {\n writeResult = getValue(template.write, window)(templateArgs);\n }\n else if (typeof itemData.template !== 'function') {\n writeResult = itemData.template.write(templateArgs);\n }\n if (writeResult && typeof writeResult.then === 'function') {\n writeResult.then(function () { return onComplete(); });\n }\n else {\n setTimeout(function () { return onComplete(); }, 100);\n }\n }\n };\n QueryBuilder.prototype.getItemData = function (parentId) {\n var fieldObj = getComponent(document.getElementById(parentId + '_filterkey'), 'dropdownlist');\n var parentFieldObj = this.element.querySelector(\"#\" + parentId);\n if (this.fieldMode === 'DropdownTree') {\n fieldObj = getComponent(document.getElementById(parentId + '_filterkey'), 'dropdowntree');\n }\n else if (parentFieldObj) {\n var subFieldObjList = parentFieldObj.querySelectorAll('.e-rule-sub-filter');\n if (subFieldObjList.length > 0) {\n var lastSubFieldObj = subFieldObjList[subFieldObjList.length - 1].querySelector('.e-dropdownlist');\n fieldObj = getComponent(lastSubFieldObj, 'dropdownlist');\n }\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 if (operator === 'between' || operator === 'notbetween') {\n if (selectedValue.length > 1) {\n selectedValue = selectedValue[idx];\n }\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 if (!isNullOrUndefined(itemData) && itemData.value && !isTemplate) {\n var parsedDate = this.parseDate(itemData.value.toString(), itemData.format);\n if (parsedDate && !isNaN(parsedDate.getTime())) {\n selectedValue = parsedDate;\n }\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 (!isNullOrUndefined(column) && !isNullOrUndefined(column.values) && column.values.length > 0) {\n var parsedDate = this.parseDate(column.values[i], format);\n if (!isNullOrUndefined(parsedDate) && parsedDate instanceof Date) {\n datePicker.value = parsedDate;\n if (i === 1) {\n var parsedMinDate = this.parseDate(column.values[0], format);\n if (parsedMinDate instanceof Date && !isNaN(parsedMinDate.getTime())) {\n parsedMinDate.setDate(parsedMinDate.getDate() + 1);\n datePicker.min = parsedMinDate;\n }\n }\n }\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 ? prevItemData.value : prevItemData.field);\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 // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.isAngular && !isNullOrUndefined(prevItemData.key) && this.fieldMode === 'DropdownTree') {\n delete prevItemData.template;\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 // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.isAngular && !isNullOrUndefined(itemData.key) && itemData.template && this.fieldMode === 'DropdownTree') {\n delete itemData.template;\n }\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 = {\n requestType: 'value-template-initialize', ruleID: ruleID, field: field, operator: operator, rule: rule,\n renderTemplate: true\n };\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 // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var textboxValue;\n switch (controlName) {\n case 'checkbox':\n value = getComponent(element, controlName).value;\n rule.value = (value !== '') ? value : undefined;\n break;\n case 'textbox':\n textboxValue = 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] = textboxValue;\n }\n else if (['in', 'notin'].some(function (op) { return rule.operator.indexOf(op) !== -1; })\n && rule.operator.indexOf('contains') === -1) {\n rule.value = textboxValue ?\n (rule.type === 'string' ? textboxValue.split(',').map(function (val) { return val.trim(); }) :\n textboxValue.split(',').map(Number)) : [];\n }\n else {\n rule.value = textboxValue;\n }\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 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 if (oper === 'between' || oper === 'notbetween') {\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 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(rule) && isNullOrUndefined(ruleElem)) {\n return;\n }\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 _super.prototype.destroy.call(this);\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 temp = this.groupIndex;\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 = {\n isLocked: groups[i].isLocked, condition: groups[i].condition,\n not: groups[i].not\n };\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.groupCloned) {\n var parent_1 = this.element.querySelector('#' + groupID);\n var topLevelGroups = parent_1.querySelectorAll(':scope > .e-group-body > .e-rule-list > .e-group-container');\n this.groupIndex = topLevelGroups.length > 1 ? topLevelGroups.length - 1 : 0;\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 if (this.groupCloned) {\n this.groupIndex = temp;\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 || (window.innerWidth < 768 && !this.isPropChange) || this.displayMode === 'Vertical') {\n if (Browser.isDevice || window.innerWidth < 768) {\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 && this.sortDirection.toLowerCase() === 'descending') {\n this.columns = new DataManager(this.columns).executeLocal(new Query().sortByDesc('field'));\n }\n else if (this.sortDirection && 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 this.isPropChange = true;\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 this.isPropChange = false;\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 if (this.columns && this.columns.length) {\n this.dataColl = this.columns;\n this.initControl();\n }\n else {\n this.executeDataManager(new Query().take(1));\n }\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 enableAutoScroll: 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 = {\n dragRuleID: targetElem !== null ? targetElem.id : grpElem !== null ? grpElem.id : null,\n dragGroupID: grpElem !== null ? grpElem.id : null, cancel: false\n };\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 = {\n cancel: false, dropRuleID: targetGroup !== null ? targetGroup.id\n : targetGrp !== null ? targetGrp.id : null, dropGroupID: targetGrp !== null ? targetGrp.id : null\n };\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 if (this.allowDragAndDrop) {\n EventHandler.add(document, 'keydown', this.keyBoardHandler, this);\n }\n window.addEventListener('resize', this.windowResizeHandler.bind(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 window.removeEventListener('resize', this.windowResizeHandler);\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.windowResizeHandler = function () {\n if (Browser.isDevice || window.innerWidth < 768) {\n this.displayMode = 'Vertical';\n }\n else {\n this.displayMode = 'Horizontal';\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 if (this.isImportRules) {\n andElem = groupElem.parentElement.querySelector('.e-btn-group.e-multi-connector .e-btngroup-and');\n orElem = groupElem.parentElement.querySelector('.e-btn-group.e-multi-connector .e-btngroup-or');\n }\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 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 // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if ((rule.operator === 'between' || rule.operator === 'notbetween') && Array.isArray(rule.value) && (rule.value.length < 2 || rule.value.some(function (val) { return val === '' || val === null; }))) {\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 = {\n '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 var fieldParts = this.separator !== '' ? (field ? field.split(this.separator) : []) : [field];\n var rootField = fieldParts && fieldParts.length > 0 ? fieldParts[0] : null;\n for (var i = 0; i < columns.length; i++) {\n if (columns[i].field === field) {\n column = columns[i];\n break;\n }\n }\n if (!column && this.separator !== '') {\n for (var i = 0; i < columns.length; i++) {\n if (columns[i].field === rootField) {\n if (columns[i].columns) {\n var subField = field.substring(rootField.length + this.separator.length);\n if (subField) {\n column = this.getColumn(subField, columns[i].columns);\n }\n else {\n column = columns[i];\n }\n }\n else {\n column = columns[i];\n }\n break;\n }\n }\n }\n if (!column) {\n for (var i = 0; i < columns.length; i++) {\n if (columns[i].columns) {\n column = this.getColumn(field, columns[i].columns);\n if (column) {\n break;\n }\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 if (this.enableSeparateConnector) {\n getComponent(tglBtnElem.querySelector('.e-checkbox'), 'checkbox').checked = rule.not;\n }\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 if (!isNullOrUndefined(ruleColl[i].rules)) {\n parentElem = this.renderGroup(ruleColl[i], ruleColl[i].condition, parentElem, ruleColl[i].not);\n var andElem = parentElem.querySelector('.e-btngroup-and');\n var orElem = parentElem.querySelector('.e-btngroup-or');\n andElem.disabled = true;\n orElem.disabled = 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 _this = this;\n var isRoot = false;\n if (!queryStr && queryStr !== '') {\n queryStr = '';\n isRoot = true;\n }\n else {\n queryStr += '(';\n }\n if (rules.not) {\n var notPrefix = sqlLocale ? this.l10n.getConstant('NOT').toUpperCase() + ' ' : 'NOT ';\n queryStr += isRoot ? notPrefix + '(' : ' ' + notPrefix + '(';\n }\n if (rules.rules && rules.rules.length) {\n queryStr += rules.rules.reduce(function (result, rule, j) {\n var ruleStr = '';\n if (rule.rules) {\n ruleStr = _this.getSqlString(rule, enableEscape, '', sqlLocale);\n if (_this.enableSeparateConnector) {\n rules.condition = rule.condition;\n }\n }\n else {\n var ruleOpertor = sqlLocale ? _this.sqlOperators[rule.operator] : _this.operators[rule.operator];\n var valueStr = '';\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 var valueArray = rule.value;\n valueStr = '(\"' + valueArray.join('\",\"') + '\")';\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 var fieldName = rule.field;\n if (enableEscape) {\n fieldName = '`' + fieldName + '`';\n }\n else if (fieldName.indexOf(' ') > -1) {\n fieldName = '\"' + fieldName + '\"';\n }\n if (rule.operator.toString().indexOf('null') > -1) {\n ruleStr = fieldName + ' ' + 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 ruleStr = fieldName + ' ' + custOper + ' ' + valueStr;\n }\n }\n if (j !== rules.rules.length - 1) {\n var condition = rules.condition;\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 ruleStr += ' ' + condition + ' ';\n }\n }\n return result + ruleStr;\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 = this.groupCloned = 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 = this.groupCloned = 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 if (/^\\(/.exec(sqlString)) {\n this.parser.push(['Left', '(']);\n return 1;\n }\n if (/^\\)/.exec(sqlString)) {\n this.parser.push(['Right', ')']);\n return 1;\n }\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 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 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 this.parser.push(['String', matchValue]);\n return matchValue.length;\n }\n var doubleString = this.getDoubleQuoteString(sqlString);\n if (doubleString !== '') {\n matchValue = doubleString;\n this.parser.push(['DoubleString', matchValue]);\n return matchValue.length;\n }\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 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) ? 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 if (parser.length === 3 && parser[2][0] === 'String' && (parser[2][1]).indexOf('%') !== -1) {\n var oper = parser[i + 2][1] ? parser[i + 2][1].replace(/'/g, '') : parser[i + 2][1];\n rule.operator = this.getOperator(oper, parser[i + 1][1], sqlLocale);\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 }\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 this.groupCloned = false;\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([{\n 'label': getRule.label, 'field': getRule.field, 'type': getRule.type, 'operator': getRule.operator,\n 'value': getRule.value, 'condition': getRule.condition\n }], groupId);\n }\n else {\n this.addRules([{\n 'label': getRule.label, 'field': getRule.field, 'type': getRule.type, 'operator': getRule.operator,\n 'value': getRule.value\n }], 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 disableComponents = function (elements, componentGetter, isDisabled) {\n elements.forEach(function (element) {\n var component = componentGetter(element);\n if ('enabled' in component) {\n component.enabled = !isDisabled;\n }\n else if ('disabled' in component) {\n component.disabled = isDisabled;\n }\n });\n };\n var elements = {\n ddl: groupElem.querySelectorAll('.e-control.e-dropdownlist'),\n numeric: groupElem.querySelectorAll('.e-control.e-numerictextbox'),\n text: groupElem.querySelectorAll('.e-control.e-textbox'),\n date: groupElem.querySelectorAll('.e-control.e-datepicker'),\n checkbox: groupElem.querySelectorAll('.e-control.e-checkbox'),\n radio: groupElem.querySelectorAll('.e-control.e-radio'),\n multiSelect: groupElem.querySelectorAll('.e-control.e-multiselect'),\n deleteElem: groupElem.querySelectorAll('.e-rule-delete'),\n lockElem: groupElem.querySelectorAll('.e-lock-rule'),\n cloneElem: groupElem.querySelectorAll('.e-clone-rule'),\n ruleElem: groupElem.querySelectorAll('.e-rule-container'),\n ddTree: groupElem.querySelectorAll('.e-control.e-dropdowntree')\n };\n elements.deleteElem.forEach(function (elem, i) {\n if (isDisabled) {\n if (elements.ruleElem[i] && elements.ruleElem[i].classList.contains('e-disable')) {\n elements.ruleElem[i].classList.add('e-disable');\n }\n elements.deleteElem[i].disabled = true;\n if (elements.cloneElem[i]) {\n elements.cloneElem[i].disabled = true;\n }\n if (elements.lockElem[i] !== target) {\n elements.lockElem[i].disabled = true;\n elements.lockElem[i].children[0].classList.remove('e-unlock');\n elements.lockElem[i].children[0].classList.add('e-lock');\n }\n }\n else {\n if (elements.ruleElem[i]) {\n elements.ruleElem[i].classList.remove('e-disable');\n }\n if (elements.cloneElem[i]) {\n elements.cloneElem[i].disabled = false;\n }\n elements.deleteElem[i].disabled = false;\n elements.lockElem[i].disabled = false;\n elements.lockElem[i].children[0].classList.remove('e-lock');\n elements.lockElem[i].children[0].classList.add('e-unlock');\n }\n });\n disableComponents(elements.ddl, function (elem) { return getComponent(elem, 'dropdownlist'); }, isDisabled);\n disableComponents(elements.numeric, function (elem) { return getComponent(elem, 'numerictextbox'); }, isDisabled);\n disableComponents(elements.text, function (elem) { return getComponent(elem, 'textbox'); }, isDisabled);\n disableComponents(elements.date, function (elem) { return getComponent(elem, 'datepicker'); }, isDisabled);\n disableComponents(elements.checkbox, function (elem) { return getComponent(elem, 'checkbox'); }, isDisabled);\n disableComponents(elements.radio, function (elem) { return getComponent(elem, 'radio'); }, isDisabled);\n disableComponents(elements.multiSelect, function (elem) { return getComponent(elem, 'multiselect'); }, isDisabled);\n disableComponents(elements.ddTree, function (elem) { return getComponent(elem, 'dropdowntree'); }, isDisabled);\n };\n __decorate([\n Event()\n ], QueryBuilder.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], QueryBuilder.prototype, \"destroyed\", 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 fieldType;\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 for (var _i = 0, _a = this.parent.columns; _i < _a.length; _i++) {\n var column = _a[_i];\n if (column.field === condition) {\n fieldType = column.type;\n break;\n }\n }\n if (!isNaN(Date.parse(stringValue)) || fieldType === 'date') { // 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","isPropChange","isRuleClicked","groupCloned","MultiSelect","Inject","CheckBoxSelection","getPersistData","addOnPersist","reset","isImportRules","bodyElem","querySelector","inputElements","querySelectorAll","currentIndex","processBatch","endIndex","Math","className","indexOf","tooltip","getComponent","destroy","parentElement","e","console","warn","requestAnimationFrame","textContent","fragment","document","createDocumentFragment","grpContainer","createElement","attrs","class","grpHeader","grpBody","appendChild","headerTemplate","isRoot","enableNotCondition","toggleElements","removeClass","levelColl","id","setProperties","rule","rules","disableRuleCondition","getWrapper","getModuleName","requiredModules","modules","push","member","args","GetRootColumnName","field","isNullOrUndefined","separator","split","initialize","dataColl","type_1","value_1","columnKeys_1","keys","cols","categories_1","groupBy_1","isDate_1","validateObj_1","columns","columnSort","forEach","column","updateCustomOperator","type","isNaN","Date","parse","getTime","validation","category","l10n","getConstant","operators","customOperators","groupBy","updateSubFieldsFromColumns","len","label","updateSubFields","sortDirection","processColumnsInBatches","setTimeout","trigger","processedCount","endIdx","col","updateSubFieldsLarge","colLength","processNextBatch","j","data","sampCol","result","columnKeys","compField","resData","from","this_1","sqlIdx","operator_1","operColl","values","map","join","valueIdx","focusEventHandler","event","clickEventHandler","groupID","tagName","animation","Animation","duration","delay","renderSummary","summaryElem","getElementById","txtareaElem","animate","name","groupElem","style","display","getSqlFromRules","height","scrollHeight","actionButton","deleteRule","ruleClone","ruleLock","groupLock","groupClone","closest","deleteGroup","addGroupElement","mRules","extend","setGroupRules","renderSummaryCollapse","forIdValue","getAttribute","targetValue","enableSeparateConnector","classList","contains","replace","group","getGroup","ariaChecked","toggleElem","getElementsByClassName","addClass","cancel","toLowerCase","beforeSuccessCallBack","observedChangeArgs","beforeRules","getValidRules","getParentGroup","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","isVertical","displayMode","getColumn","newRule","operator","selectedColumn","passedRule_1","actionArgs","createArgs","spanElement","add","previousRuleElem","processAdjacentElements","updateAddedRule","ruleCount","applyFieldComponent","lockRuleTarget","processConnectorElements","ruleContainer","prevRule","headerTemplateFn","handleOrphanedRuleElement","prevElem","prevRuleContainer","notCondition","undefined","handleOrphanedConnectorElement","setMultiConnector","fieldMode","applyDropdownListComponent","applyDropdownTreeComponent","ddlField","ddlValue","autoSelectField","dataSource","placeholder","popupHeight","close","fieldClose","bind","change","changeField","open","popupOpen","cssClass","fieldModel","dropDownList","DropDownList","appendTo","ddlVal","getDataByValue","changeRule","itemData","dummyDropdownTreeDs","updateDropdowntreeDS","child","expanded","selectable","showClearButton","changeOnBlur","treeSettings","expandOn","filtering","dropdownTreeFiltering","dropdownTreeClose","dropdowntree","DropDownTree","getLabelFromColumn","proxy","ruleElemID","srcElement","ddTree","hierarchicalData","changeDataSource","matchedDataSource","nestedChildFilter","filter","filteredChild","treeObj","expandAll","refresh","node","isMatchedNode","matchedChildren","checkValue","parseInt","toString","template","isNewRuleAdded","enableSeparateCondition","custom","splice","changeRuleTemplate","parentGroup","previousColumn","detach","clearQBTemplate","operVal","renderToolTip","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-label","title","role","innerHTML","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_1","conditionBtn_1","btnObj","onclick","groupBtn_1","DropDownButton","items","grpId","chgrpId","childGroupID","btnGroupElem","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","setSecondDateMinFromFirst","valueIndex","operatorDropdownElement","operatorDropdown","firstDateElement","secondDateElement","firstDatePicker","secondDatePicker","nextDay","setDate","getDate","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","remove","subFieldValue","subFilterCounter","ruleId","subField","currOper","prevValue","parentElem","operatorList","oprElem","childElementCount","fieldObj","renderValues","operator_2","ddlIdx","autoSelectOperator","ddlOperator","operatorModel","isField","popup","inputElement","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","multiSelectUserQuery","valueModel","multiSelectModel","query","multiSelectQuery","clone","Query","resolvedQuery","dataManager","DataManager","selectedRule","mode","width","closePopup","actionBegin","multiSelectOpen","multiSelectObj","bindMultiSelectData","getMultiSelectData","dummyData","deferred","Deferred","userQuery","dataQuery","executeQuery","multiselectObj","hideSpinner","createSpinner","showSpinner","then","actual","catch","reject","spinnerElem","Browser","isDevice","ms","processTemplate","container","tempElements","onComplete","write","templateArgs","writeResult","parentFieldObj","subFieldObjList","lastSubFieldObj","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","parsedDate","formatObj","getLocale","datePickerModel","DatePicker","parsedMinDate","orgValue","isCheck","radioBtn","radioButtonModel","radiobutton","RadioButton","getOperatorIndex","getPreviousItemData","isRender","filtElem","getElementsByTagName","filtObj","isTempRendered","setColumnTemplate","inputLen","renderTemplate","observedActionArgs","actionBeginSuccessCallBack","Element","columnTemplateFn","valElemColl","updateValues","selectedDate","radioBtnObj","textboxValue","controlName","some","op","val","trim","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","topLevelGroups","initWrapper","innerWidth","summaryView","notGroupRtl","readonly","enableReadonly","buttons","button","contentElem","textElem","styles","editElem","divElem","collapseElem","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","initControl","executeDataManager","take","renderComplete","initializeDrag","draggable","Draggable","dragTarget","distance","helper","dragStart","dragStartHandler","drag","dragHandler","dragStop","dragStopHandler","isReplaceDragEle","isPreventSelect","abort","isDragScroll","enableAutoScroll","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","addEventListener","windowResizeHandler","removeEventListener","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","isArray","notValue","HTMLElement","deleteGroups","groupIdColl","getFilteredRecords","predicate","getPredicate","dataManagerQuery","where","ruleIdColl","getDataManagerQuery","pred","pred2","ruleValue","ignoreCase","and","or","isDateFilter","dateOperColl","matchCase","isTime","datePredicate","arrayPredicate","Predicate","localeString","cldrData","fieldParts","rootField","substring","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","notPrefix","reduce","ruleStr","ruleOpertor","valueStr","ruleCondition","fieldName","custOper","isCustom","setRulesFromSql","sqlString","ruleModel","getRulesFromSql","sqlParser","processParser","allowEscape","getParameterizedSql","moduleLoader","loadedModules","sql","notify","prop","onPropertyChange","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","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","subRules","lLen","grpCount","numVal","strVal","isLeftOpened","isNotOpened","pop","targetGrpId","lockItem","disableRuleControls","newGroup","disableHeaderControls","updateLockItems","isDisabled","addElem","deleteGrpElem","lockElem","groupContElem","addCondition","addGroup","disableComponents","componentGetter","component","enabled","checkbox","radio","multiSelect","deleteElem","Event","Complex","NotifyPropertyChanges","Component","QueryLibrary","parent","isDestroyed","on","queryLibrary","off","getMongoFromRules","mongoParser","getParameterSql","getNamedParameterSql","convertParamSqlToSql","convertNamedParamSqlToSql","convertMongoQuery","getOperatorFromMongoOperator","operatorValue","itVal","x","endsWith","mongoList","mongoRecursion","stringValue","betweenValue","fieldType","keyObj","betweenOperatorArray","inOperatorArray","notBetween","innerObject","firstKey","secondKey","firstValue","innerFirstValue","innerSecondValue","_a","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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"}