@syncfusion/ej2-querybuilder 21.2.4 → 22.1.37

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 (50) hide show
  1. package/.eslintrc.json +1 -0
  2. package/CHANGELOG.md +3 -4
  3. package/dist/ej2-querybuilder.min.js +2 -2
  4. package/dist/ej2-querybuilder.umd.min.js +2 -2
  5. package/dist/ej2-querybuilder.umd.min.js.map +1 -1
  6. package/dist/es6/ej2-querybuilder.es2015.js +27 -12
  7. package/dist/es6/ej2-querybuilder.es2015.js.map +1 -1
  8. package/dist/es6/ej2-querybuilder.es5.js +27 -12
  9. package/dist/es6/ej2-querybuilder.es5.js.map +1 -1
  10. package/dist/global/ej2-querybuilder.min.js +2 -2
  11. package/dist/global/ej2-querybuilder.min.js.map +1 -1
  12. package/dist/global/index.d.ts +1 -1
  13. package/package.json +11 -11
  14. package/src/query-builder/query-builder-model.d.ts +6 -3
  15. package/src/query-builder/query-builder.d.ts +7 -3
  16. package/src/query-builder/query-builder.js +27 -12
  17. package/styles/bootstrap-dark.css +1 -1
  18. package/styles/bootstrap.css +1 -1
  19. package/styles/bootstrap4.css +1 -1
  20. package/styles/bootstrap5-dark.css +1 -1
  21. package/styles/bootstrap5.css +1 -1
  22. package/styles/fluent-dark.css +1 -1
  23. package/styles/fluent.css +1 -1
  24. package/styles/material-dark.css +1 -1
  25. package/styles/material.css +1 -1
  26. package/styles/material3-dark.css +821 -0
  27. package/styles/material3-dark.scss +3 -0
  28. package/styles/material3.css +877 -0
  29. package/styles/material3.scss +3 -0
  30. package/styles/query-builder/_layout.scss +76 -16
  31. package/styles/query-builder/_material3-dark-definition.scss +1 -0
  32. package/styles/query-builder/_material3-definition.scss +110 -0
  33. package/styles/query-builder/bootstrap-dark.css +1 -1
  34. package/styles/query-builder/bootstrap.css +1 -1
  35. package/styles/query-builder/bootstrap4.css +1 -1
  36. package/styles/query-builder/bootstrap5-dark.css +1 -1
  37. package/styles/query-builder/bootstrap5.css +1 -1
  38. package/styles/query-builder/fluent-dark.css +1 -1
  39. package/styles/query-builder/fluent.css +1 -1
  40. package/styles/query-builder/icons/_material3-dark.scss +1 -0
  41. package/styles/query-builder/material-dark.css +1 -1
  42. package/styles/query-builder/material.css +1 -1
  43. package/styles/query-builder/material3-dark.css +821 -0
  44. package/styles/query-builder/material3-dark.scss +16 -0
  45. package/styles/query-builder/material3.css +877 -0
  46. package/styles/query-builder/material3.scss +16 -0
  47. package/styles/query-builder/tailwind-dark.css +1 -1
  48. package/styles/query-builder/tailwind.css +1 -1
  49. package/styles/tailwind-dark.css +1 -1
  50. package/styles/tailwind.css +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"ej2-querybuilder.umd.min.js","sources":["../src/query-builder/query-builder.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 */\nimport { Component, NotifyPropertyChanges, getComponent, Browser, compile, append } 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, 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 } 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 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(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' };\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 MultiSelect.Inject(CheckBoxSelection);\n return _this;\n }\n QueryBuilder.prototype.getPersistData = function () {\n return this.addOnPersist(['rule']);\n };\n /**\n * Clears the rules without root rule.\n *\n * @returns {void}.\n */\n QueryBuilder.prototype.reset = function () {\n this.isImportRules = false;\n var bodyElem = this.element.querySelector('.e-group-body');\n var inputElement = this.element.querySelectorAll('input.e-control');\n for (var i = 0, len = inputElement.length; i < len; i++) {\n if (inputElement[i].className.indexOf('e-tooltip') > -1) {\n getComponent(inputElement[i], 'tooltip').destroy();\n }\n else if (inputElement[i].parentElement.className.indexOf('e-tooltip') > -1) {\n getComponent(inputElement[i].parentElement, 'tooltip').destroy();\n }\n }\n if (bodyElem) {\n bodyElem.innerHTML = '';\n }\n else {\n var grpContainer = this.createElement('div', { attrs: { class: 'e-group-container' } });\n var grpHeader = this.createElement('div', { attrs: { class: 'e-group-header' } });\n var grpBody = this.createElement('div', { attrs: { class: 'e-group-body' } });\n grpContainer.appendChild(grpHeader).appendChild(grpBody);\n this.element.appendChild(grpContainer);\n bodyElem = this.element.querySelector('.e-group-body');\n }\n if (this.headerTemplate && this.isRoot) {\n this.element.innerHTML = '';\n this.isRoot = false;\n }\n if (this.enableNotCondition) {\n removeClass(this.element.querySelectorAll('.e-qb-toggle'), 'e-active-toggle');\n }\n bodyElem.appendChild(this.createElement('div', { attrs: { class: 'e-rule-list' } }));\n this.levelColl[this.element.id + '_group0'] = [0];\n this.rule = { condition: 'and', not: false, rules: [] };\n this.disableRuleCondition(bodyElem.parentElement);\n };\n QueryBuilder.prototype.getWrapper = function () {\n return this.element;\n };\n QueryBuilder.prototype.getModuleName = function () {\n return 'query-builder';\n };\n QueryBuilder.prototype.GetRootColumnName = function (field) {\n return this.separator ? field.split(this.separator)[0] : field;\n };\n QueryBuilder.prototype.initialize = function () {\n if (this.dataColl.length) {\n var columnKeys = Object.keys(this.dataColl[0]);\n var cols = [];\n var categories = [];\n var type = void 0;\n var groupBy = false;\n var isDate = false;\n var value = void 0;\n var validateObj = { isRequired: true, min: 0, max: Number.MAX_VALUE };\n if (this.columns.length) {\n this.columnSort();\n var columns = this.columns;\n for (var i = 0, len = columns.length; i < len; i++) {\n this.updateCustomOperator(columns[i]);\n if (!columns[i].type) {\n if (columnKeys.indexOf(columns[i].field) > -1) {\n value = this.dataColl[0][columns[i].field];\n type = typeof value;\n if (type === 'string') {\n isDate = !isNaN(Date.parse(value));\n }\n else if (type === 'object') {\n isDate = value instanceof Date && !isNaN(value.getTime());\n type = 'string';\n }\n columns[i].type = type;\n isDate = false;\n }\n type = 'string';\n }\n if (!columns[i].validation) {\n columns[i].validation = validateObj;\n }\n if (columns[i].category) {\n groupBy = true;\n }\n else {\n columns[i].category = this.l10n.getConstant('OtherFields');\n }\n if (categories.indexOf(columns[i].category) < 0) {\n categories.push(columns[i].category);\n }\n if (!columns[i].operators || this.isLocale) {\n columns[i].operators = this.customOperators[columns[i].type + 'Operator'];\n }\n }\n if (groupBy && (categories.length > 1 || categories[0] !== this.l10n.getConstant('OtherFields'))) {\n this.fields = { text: 'label', value: 'field', groupBy: 'category' };\n }\n this.updateSubFieldsFromColumns(this.columns);\n }\n else {\n for (var i = 0, len = columnKeys.length; i < len; i++) {\n value = this.dataColl[0][columnKeys[i]];\n type = typeof value;\n if (type === 'string') {\n isDate = !isNaN(Date.parse(value));\n }\n else if (type === 'object' && !Object.keys(value).length) {\n isDate = value instanceof Date && !isNaN(value.getTime());\n type = 'string';\n }\n cols[i] = { 'field': columnKeys[i], 'label': columnKeys[i], 'type': isDate ? 'date' : type,\n 'validation': validateObj };\n isDate = false;\n cols[i].operators = this.customOperators[cols[i].type + 'Operator'];\n if (type === 'object') {\n this.updateSubFields(value, cols[i]);\n }\n }\n this.columns = cols;\n }\n }\n else if (this.columns.length) {\n var columns = this.columns;\n for (var i = 0, len = columns.length; i < len; i++) {\n if (columns[i].category) {\n this.fields = { text: 'label', value: 'field', groupBy: 'category' };\n }\n else {\n columns[i].category = this.l10n.getConstant('OtherFields');\n }\n this.updateCustomOperator(columns[i]);\n if (!columns[i].operators || this.isLocale) {\n columns[i].operators = this.customOperators[columns[i].type + 'Operator'];\n }\n }\n this.updateSubFieldsFromColumns(this.columns);\n }\n this.trigger('dataBound', { type: 'dataBound' });\n };\n QueryBuilder.prototype.updateSubFieldsFromColumns = function (col, field) {\n for (var i = 0; i < col.length; i++) {\n if (this.separator !== '' && col[i].field.indexOf(this.separator) < 0) {\n col[i].field = field ? field + this.separator + col[i].field : col[i].field;\n }\n if (col[i].operators) {\n this.updateCustomOperator(col[i]);\n }\n else if (col[i].type && col[i].type !== 'object') {\n col[i].operators = this.customOperators[col[i].type + 'Operator'];\n }\n if (col[i].columns) {\n col[i].type = 'object';\n this.updateSubFieldsFromColumns(col[i].columns, col[i].field);\n }\n }\n };\n QueryBuilder.prototype.updateSubFields = function (value, col, data) {\n var sampCol;\n col.columns = [];\n var columnKeys = Object.keys(value);\n var field;\n var label;\n var type;\n var result;\n data = data ? data : this.dataColl[0];\n for (var i = 0, len = columnKeys.length; i < len; i++) {\n var compField = col.field.split('.');\n if (data) {\n result = data[compField[compField.length - 1]][columnKeys[i]];\n }\n else {\n result = this.dataColl[0][col.field][columnKeys[i]];\n }\n var resData = data[col.field.split(this.separator)[col.field.split(this.separator).length - 1]];\n type = typeof result;\n field = col.field + this.separator + columnKeys[i];\n label = columnKeys[i];\n type = (type === 'object' && !isNaN(Date.parse(result))) ? 'date' : type;\n sampCol = { field: field, label: label, type: type };\n if (type !== 'object') {\n sampCol.operators = this.customOperators[type + 'Operator'];\n }\n col.columns.push(sampCol);\n if (type === 'object') {\n this.updateSubFields(result, sampCol, resData);\n }\n }\n };\n QueryBuilder.prototype.updateCustomOperator = function (column) {\n if (column.operators) {\n var _loop_1 = function (j) {\n var sqlIdx = Object.keys(column.operators[j]).indexOf('sqlOperator');\n if (sqlIdx > -1) {\n var operator_1 = column.operators[j];\n var operColl = Object.keys(operator_1);\n var values = operColl.map(function (key) { return operator_1[\"\" + key]; }).join(',').split(',');\n var valueIdx = operColl.indexOf('value');\n this_1.operators[values[valueIdx]] = values[sqlIdx];\n }\n };\n var this_1 = this;\n for (var j = 0; j < column.operators.length; j++) {\n _loop_1(j);\n }\n }\n };\n QueryBuilder.prototype.focusEventHandler = function (event) {\n this.target = event.target;\n };\n QueryBuilder.prototype.clickEventHandler = function (event) {\n var _this = this;\n var target = event.target;\n var args;\n this.isImportRules = false;\n var groupID;\n if (target.tagName === 'SPAN') {\n target = target.parentElement;\n }\n if (target.className.indexOf('e-collapse-rule') > -1) {\n var animation = new Animation({ duration: 1000, delay: 0 });\n if (this.element.querySelectorAll('.e-summary-content').length < 1) {\n this.renderSummary();\n }\n var summaryElem = document.getElementById(this.element.id + '_summary_content');\n var txtareaElem = summaryElem.querySelector('.e-summary-text');\n animation.animate('.e-query-builder', { name: 'SlideLeftIn' });\n var groupElem = this.element.querySelector('.e-group-container');\n groupElem.style.display = 'none';\n txtareaElem.textContent = this.getSqlFromRules(this.rule);\n summaryElem.style.display = 'block';\n txtareaElem.style.height = txtareaElem.scrollHeight + 'px';\n }\n if (target.tagName === 'BUTTON' && target.className.indexOf('e-qb-toggle') < 0) {\n if (target.className.indexOf('e-removerule') > -1) {\n this.actionButton = target;\n this.deleteRule(target);\n }\n else if (target.className.indexOf('e-deletegroup') > -1) {\n this.actionButton = target;\n this.deleteGroup(closest(target, '.e-group-container'));\n }\n else if (target.className.indexOf('e-edit-rule') > -1) {\n var animation = new Animation({ duration: 1000, delay: 0 });\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 }\n }\n else if ((target.tagName === 'LABEL' && target.parentElement.className.indexOf('e-btn-group') > -1) ||\n target.className.indexOf('e-qb-toggle') > -1) {\n var element = closest(target, '.e-group-container');\n if (!this.headerTemplate) {\n var forIdValue = target.getAttribute('for');\n var targetValue = void 0;\n if (forIdValue) {\n targetValue = document.getElementById(forIdValue).getAttribute('value');\n }\n groupID = element.id.replace(this.element.id + '_', '');\n var group = this.getGroup(groupID);\n var ariaChecked = void 0;\n if (this.enableNotCondition) {\n if (target.className.indexOf('e-qb-toggle') > -1) {\n var toggleElem = element.getElementsByClassName('e-qb-toggle')[0];\n if (toggleElem.className.indexOf('e-active-toggle') > -1) {\n removeClass([toggleElem], 'e-active-toggle');\n ariaChecked = false;\n }\n else {\n addClass([toggleElem], 'e-active-toggle');\n ariaChecked = true;\n }\n targetValue = group.condition;\n }\n else {\n ariaChecked = group.not;\n }\n }\n args = { groupID: groupID, cancel: false, type: 'condition', value: targetValue.toLowerCase() };\n if (this.enableNotCondition) {\n args = { groupID: groupID, cancel: false, type: 'condition', value: targetValue.toLowerCase(),\n 'not': ariaChecked };\n }\n }\n if (!this.isImportRules) {\n this.trigger('beforeChange', args, function (observedChangeArgs) {\n _this.beforeSuccessCallBack(observedChangeArgs, target);\n });\n }\n else {\n this.beforeSuccessCallBack(args, target);\n }\n this.target = target;\n }\n };\n QueryBuilder.prototype.beforeSuccessCallBack = function (args, target) {\n if (!args.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 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 this.filterRules(beforeRules, this.getValidRules(this.rule), 'condition');\n }\n };\n QueryBuilder.prototype.selectBtn = function (target, event) {\n if (event.name === 'beforeOpen') {\n if (this.showButtons.groupInsert || isNullOrUndefined(this.showButtons.groupInsert)) {\n if (this.element.querySelectorAll('.e-group-container').length >= this.maxGroupCount + 1) {\n addClass([event.element.querySelector('li span.e-addgroup').parentElement], 'e-button-hide');\n }\n else {\n removeClass([event.element.querySelector('li span.e-addgroup').parentElement], 'e-button-hide');\n }\n if (this.enableRtl) {\n addClass([event.element.querySelector('li').parentElement], 'e-rtl');\n }\n }\n else {\n addClass([event.element.querySelector('li span.e-addgroup').parentElement], 'e-button-hide');\n }\n }\n else if (event.element.children[0].className.indexOf('e-addrule') > -1) {\n this.addRuleElement(closest(target, '.e-group-container'), {});\n }\n else if (event.element.children[0].className.indexOf('e-addgroup') > -1) {\n this.addGroupElement(true, closest(target, '.e-group-container'), '', true);\n }\n };\n QueryBuilder.prototype.appendRuleElem = function (target, column, type, parentId, action, rule) {\n var ruleElem;\n var elem;\n var ruleListElem = target.querySelector('.e-rule-list');\n var args;\n if (type === 'change') {\n ruleElem = select('#' + parentId, target);\n }\n else {\n ruleElem = this.createElement('div', { attrs: { class: 'e-rule-container' } });\n ruleElem.setAttribute('id', target.id + '_rule' + this.ruleIdCounter);\n ruleListElem.appendChild(ruleElem);\n this.ruleIdCounter++;\n }\n if (column && column.ruleTemplate && rule) {\n args = { requestType: 'template-initialize', ruleID: ruleElem.id, action: action, fields: this.fields, rule: rule };\n this.trigger('actionBegin', args);\n this.ruleTemplateFn = this.templateParser(column.ruleTemplate);\n var templateID = this.element.id + column.field;\n var template = void 0;\n args.fields = this.fields;\n args.columns = this.columns;\n if (rule.field === '') {\n rule.field = column.field;\n }\n args.operators = this.getOperators(rule.field);\n args.operatorFields = { text: 'key', value: 'value' };\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.isReact) {\n template = this.ruleTemplateFn(args, this, ruleElem.id, templateID)[0];\n elem = template;\n elem.className += ' e-rule-field';\n ruleElem.appendChild(elem);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n }\n else if (this.isAngular) {\n var templateColl = this.ruleTemplateFn(args, this, ruleElem.id, templateID);\n template = (templateColl[0].nodeType === 3) ? templateColl[1] : templateColl[0];\n elem = template;\n elem.className += ' e-rule-field';\n ruleElem.appendChild(elem);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n }\n else if (this.isVue3) {\n template = this.ruleTemplateFn(args, this, 'Template', templateID);\n elem = template;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n append(elem, ruleElem);\n ruleElem.children[ruleElem.children.length - 1].className += ' e-rule-field';\n }\n else {\n template = this.ruleTemplateFn(args, this, 'Template', templateID)[0];\n elem = template;\n elem.className += ' e-rule-field';\n ruleElem.appendChild(elem);\n }\n }\n else {\n elem = this.ruleElem.querySelector('.e-rule-field').cloneNode(true);\n ruleElem.appendChild(elem);\n }\n if (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) {\n this.trigger('beforeChange', args, function (observedChangeArgs) {\n _this.addRuleSuccessCallBack(observedChangeArgs, target, rule, column, action, parentId, isRuleTemplate);\n });\n }\n else {\n this.isInitialLoad = false;\n this.addRuleSuccessCallBack(args, target, rule, column, action, parentId, isRuleTemplate);\n }\n };\n QueryBuilder.prototype.addRuleSuccessCallBack = function (args, trgt, rule, col, act, pId, isRlTmp) {\n var height = (this.element.className.indexOf('e-device') > -1) ? '250px' : '200px';\n var ruleID;\n var column = (rule && rule.field) ? this.getColumn(rule.field) : col ? col : this.columns[0];\n var operators;\n var dropDownList;\n var ruleElem;\n var newRule = { 'label': '', 'field': '', 'type': '', 'operator': '' };\n if (!args.cancel) {\n if (column && column.ruleTemplate && rule.field) {\n this.selectedColumn = column;\n operators = this.selectedColumn.operators;\n newRule = { 'label': column.label, 'field': column.field, 'type': column.type, 'operator': operators[0].value };\n var passedRule = Object.keys(rule).length ? rule : newRule;\n ruleElem = this.appendRuleElem(trgt, column, act, pId, 'field', passedRule);\n var args_1 = { requestType: 'template-create', action: 'insert-rule', ruleID: ruleElem.id,\n fields: this.fields, rule: passedRule };\n this.trigger('actionBegin', args_1);\n }\n else {\n ruleElem = this.appendRuleElem(trgt, column, act, pId, 'field');\n ruleElem.querySelector('.e-filter-input').setAttribute('id', ruleElem.id + '_filterkey');\n var element = ruleElem.querySelector('button');\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 element = this.createElement('span', { attrs: { class: 'e-btn-icon e-icons e-delete-icon' } });\n ruleElem.querySelector('button').appendChild(element);\n }\n }\n if (this.displayMode === 'Vertical' || this.element.className.indexOf('e-device') > -1) {\n ruleElem.className = 'e-rule-container e-vertical-mode';\n }\n else {\n ruleElem.className = 'e-rule-container e-horizontal-mode';\n }\n if (ruleElem.previousElementSibling && ruleElem.previousElementSibling.className.indexOf('e-rule-container') > -1) {\n if (ruleElem.className.indexOf('e-joined-rule') < 0) {\n ruleElem.className += ' e-joined-rule';\n }\n if (ruleElem.previousElementSibling.className.indexOf('e-prev-joined-rule') < 0) {\n ruleElem.previousElementSibling.className += ' e-prev-joined-rule';\n }\n }\n if (ruleElem.previousElementSibling && ruleElem.previousElementSibling.className.indexOf('e-group-container') > -1 &&\n ruleElem.className.indexOf('e-separate-rule') < 0) {\n ruleElem.className += ' e-separate-rule';\n }\n if (!this.isImportRules) {\n this.updateAddedRule(trgt, rule, newRule, isRlTmp, pId);\n }\n if (!column || (column && !column.ruleTemplate) || !rule.field) {\n if (this.fieldMode === 'Default') {\n var ddlField = void 0;\n var ddlValue = void 0;\n if (this.separator && rule.field) {\n ddlValue = this.GetRootColumnName(rule.field);\n }\n else {\n ddlValue = this.isImportRules ? this.GetRootColumnName(rule.field) : rule.field;\n }\n ddlField = {\n dataSource: this.columns,\n fields: this.fields, placeholder: this.l10n.getConstant('SelectField'),\n popupHeight: ((this.columns.length > 5) ? height : 'auto'), close: this.fieldClose.bind(this, ruleElem.id + '_filterkey'),\n change: this.changeField.bind(this), value: rule ? ddlValue : null, open: this.popupOpen.bind(this, true)\n };\n if (this.fieldModel) {\n ddlField = __assign({}, ddlField, this.fieldModel);\n }\n dropDownList = new DropDownList(ddlField);\n dropDownList.appendTo('#' + ruleElem.id + '_filterkey');\n var ddlVal = void 0;\n if (this.separator && rule.field) {\n ddlVal = this.GetRootColumnName(rule.field);\n }\n else {\n ddlVal = this.isImportRules ? this.GetRootColumnName(rule.field) : dropDownList.value;\n }\n this.selectedColumn = dropDownList.getDataByValue(ddlVal);\n if (Object.keys(rule).length) {\n this.changeRule(rule, {\n element: dropDownList.element, itemData: this.selectedColumn\n });\n }\n }\n else {\n var ddlField = void 0;\n var ddlValue = this.isImportRules ? rule.field : rule.field;\n ddlField = {\n fields: { dataSource: this.columns,\n value: 'field', text: 'label', child: 'columns', expanded: 'expanded' },\n placeholder: this.l10n.getConstant('SelectField'), showClearButton: false,\n popupHeight: ((this.columns.length > 5) ? height : 'auto'), changeOnBlur: false,\n change: this.changeField.bind(this), value: !isNullOrUndefined(ddlValue) ? [ddlValue] : null,\n open: this.popupOpen.bind(this, false)\n };\n if (this.fieldModel) {\n ddlField = __assign({}, ddlField, this.fieldModel);\n }\n var dropdowntree = new DropDownTree(ddlField);\n dropdowntree.appendTo('#' + ruleElem.id + '_filterkey');\n if (!isNullOrUndefined(dropdowntree.value)) {\n var value = this.getLabelFromColumn(dropdowntree.value[0]);\n dropdowntree.element.value = value;\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var ddlVal = !isNullOrUndefined(rule.field) ?\n this.GetRootColumnName(rule.field) : dropdowntree.value;\n this.selectedColumn = this.getColumn(ddlVal);\n if (Object.keys(rule).length) {\n this.changeRule(rule, {\n element: dropdowntree.element, itemData: this.selectedColumn\n });\n }\n }\n }\n ruleID = ruleElem.id.replace(this.element.id + '_', '');\n if (!this.isImportRules) {\n this.trigger('change', { groupID: trgt.id.replace(this.element.id + '_', ''), ruleID: ruleID, type: 'insertRule' });\n }\n }\n };\n QueryBuilder.prototype.updateAddedRule = function (target, rule, newRule, isRuleTemplate, pId) {\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 index++;\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 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 }\n else {\n if (custom) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n newRule.custom = custom;\n }\n rules.rules.push(newRule);\n }\n }\n this.disableRuleCondition(target, rules);\n };\n QueryBuilder.prototype.changeRuleTemplate = function (column, element) {\n var operVal = this.selectedColumn.operators;\n if (column.ruleTemplate) {\n return;\n }\n else {\n var parentGroup = closest(element, '.e-group-container');\n var parentId = closest(element, '.e-rule-container').id;\n if (this.previousColumn && this.previousColumn.ruleTemplate) {\n detach(element.closest('[id=\"' + parentId + '\"]').querySelector('.e-rule-field'));\n this.clearQBTemplate([parentId]);\n }\n if (column) {\n var rule = { field: column.field, label: column.label, operator: operVal[0].value, value: '' };\n this.addRuleElement(parentGroup, rule, column, 'change', parentId, true);\n }\n }\n };\n QueryBuilder.prototype.renderToolTip = function (element) {\n var tooltip = new Tooltip({ content: this.l10n.getConstant('ValidationMessage'),\n position: 'BottomCenter', cssClass: 'e-querybuilder-error' });\n tooltip.appendTo(element);\n tooltip.open(element);\n };\n /**\n * Validate the conditions and it display errors for invalid fields.\n *\n * @returns {boolean} - Validation\n */\n QueryBuilder.prototype.validateFields = function () {\n var isValid = true;\n var dropDownTreeObj;\n if (this.allowValidation) {\n var excludeOprs = ['isnull', 'isnotnull', 'isempty', 'isnotempty'];\n var i = void 0;\n var len = void 0;\n var fieldElem = void 0;\n var indexElem = void 0;\n var valArray = [];\n var groupElem = void 0;\n var index = void 0;\n var dropDownObj = void 0;\n var tempElem = void 0;\n var rule = void 0;\n var ruleElemCln = this.element.querySelectorAll('.e-rule-container');\n for (i = 0, len = ruleElemCln.length; i < len; i++) {\n var validateRule = void 0;\n groupElem = closest(ruleElemCln[i], '.e-group-container');\n rule = this.getParentGroup(groupElem);\n index = 0;\n indexElem = tempElem = ruleElemCln[i];\n if (this.fieldMode === 'DropdownTree') {\n dropDownTreeObj = getComponent(ruleElemCln[i].querySelector('.e-rule-filter input.e-dropdowntree'), 'dropdowntree');\n if (dropDownTreeObj && dropDownTreeObj.value && dropDownTreeObj.value.length) {\n this.selectedColumn = this.getColumn(dropDownTreeObj.value[0]);\n validateRule = this.selectedColumn.validation;\n }\n }\n else {\n dropDownObj = getComponent(ruleElemCln[i].querySelector('.e-rule-filter input.e-dropdownlist'), 'dropdownlist');\n if (dropDownObj && dropDownObj.value) {\n this.selectedColumn = dropDownObj.getDataByValue(dropDownObj.value);\n validateRule = !isNullOrUndefined(dropDownObj.index) && this.selectedColumn.validation;\n }\n }\n fieldElem = tempElem.querySelector('.e-rule-field input.e-control');\n if (validateRule && validateRule.isRequired) {\n while (indexElem && indexElem.previousElementSibling !== null) {\n indexElem = indexElem.previousElementSibling;\n index++;\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) {\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) < 0 &&\n (isNullOrUndefined(rule.rules[index].value) &&\n rule.rules[index].type !== 'date') || rule.rules[index].value === '' ||\n (rule.rules[index].value instanceof Array && valArray.length < 1)) {\n var valElem = tempElem.querySelectorAll('.e-rule-value .e-control');\n isValid = false;\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 }\n }\n else if ((dropDownObj && dropDownObj.element && isNullOrUndefined(dropDownObj.index)) ||\n (dropDownTreeObj && dropDownTreeObj.element && (isNullOrUndefined(dropDownTreeObj.value) ||\n dropDownTreeObj.value.length < 1))) {\n if (fieldElem.parentElement.className.indexOf('e-tooltip') < 0) {\n this.renderToolTip(fieldElem.parentElement);\n }\n isValid = false;\n }\n }\n }\n return isValid;\n };\n QueryBuilder.prototype.refreshLevelColl = function () {\n this.levelColl = {};\n var groupElem = this.element.querySelector('.e-group-container');\n if (groupElem) {\n this.levelColl[groupElem.id] = [0];\n var obj = { groupElement: groupElem, level: [0] };\n this.refreshLevel(obj);\n }\n };\n QueryBuilder.prototype.refreshLevel = function (obj) {\n var ruleList = obj.groupElement.querySelector('.e-rule-list').children;\n var childElem;\n var groupElem = obj.groupElement;\n var i;\n var iLen = ruleList.length;\n var groupCount = 0;\n for (i = 0; i < iLen; i++) {\n childElem = ruleList[i];\n if (childElem.className.indexOf('e-group-container') > -1) {\n obj.level.push(groupCount);\n this.levelColl[childElem.id] = obj.level.slice();\n groupCount++;\n obj.groupElement = childElem;\n obj = this.refreshLevel(obj);\n }\n }\n var ruleListElem = closest(groupElem, '.e-rule-list');\n obj.groupElement = ruleListElem ? closest(ruleListElem, '.e-group-container') : groupElem;\n obj.level = this.levelColl[obj.groupElement.id].slice();\n return obj;\n };\n QueryBuilder.prototype.groupTemplate = function () {\n var glueElem;\n var inputElem;\n var labelElem;\n var grpActElem;\n var groupBtn;\n var groupElem = this.createElement('div', { attrs: { class: 'e-group-container' } });\n var groupHdrElem = this.createElement('div', { attrs: { class: 'e-group-header' } });\n var grpBodyElem = this.createElement('div', { attrs: { class: 'e-group-body' } });\n var rulesElem = this.createElement('div', { attrs: { class: 'e-rule-list' } });\n groupElem.appendChild(groupHdrElem);\n grpBodyElem.appendChild(rulesElem);\n groupElem.appendChild(grpBodyElem);\n // create button group in OR and AND process\n if (!this.headerTemplate) {\n glueElem = this.createElement('div', { attrs: { class: 'e-lib e-btn-group', role: 'group' } });\n if (this.enableNotCondition) {\n inputElem = this.createElement('button', { attrs: { type: 'button', class: 'e-qb-toggle' } });\n glueElem.appendChild(inputElem);\n }\n inputElem = this.createElement('input', { attrs: { type: 'radio', class: 'e-btngroup-and', value: 'AND' } });\n glueElem.appendChild(inputElem);\n labelElem = this.createElement('label', { attrs: { class: 'e-lib e-btn e-btngroup-and-lbl e-small' },\n innerHTML: this.l10n.getConstant('AND') });\n glueElem.appendChild(labelElem);\n inputElem = this.createElement('input', { attrs: { type: 'radio', class: 'e-btngroup-or', value: 'OR' } });\n glueElem.appendChild(inputElem);\n labelElem = this.createElement('label', { attrs: { class: 'e-lib e-btn e-btngroup-or-lbl e-small' },\n innerHTML: this.l10n.getConstant('OR') });\n glueElem.appendChild(labelElem);\n groupHdrElem.appendChild(glueElem);\n grpActElem = this.createElement('div', { attrs: { class: 'e-group-action' } });\n groupBtn = this.createElement('button', { attrs: { type: 'button', class: 'e-add-btn' } });\n grpActElem.appendChild(groupBtn);\n groupHdrElem.appendChild(grpActElem);\n }\n return groupElem;\n };\n QueryBuilder.prototype.ruleTemplate = function () {\n var tempElem;\n var clsName;\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 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.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(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) {\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 if (!args.cancel && (this.element.querySelectorAll('.e-group-container').length <= this.maxGroupCount)) {\n var target = eventTarget;\n var dltGroupBtn = void 0;\n var groupElem = this.groupElem.cloneNode(true);\n groupElem.setAttribute('id', this.element.id + '_group' + this.groupIdCounter);\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);\n this.groupIdCounter = 0;\n }\n else {\n this.headerTemplateFn(groupElem, not, condition, rule);\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 if (!this.headerTemplate) {\n groupElem.querySelector('.e-group-action').appendChild(dltGroupBtn);\n }\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 ruleList.appendChild(groupElem);\n var level = this.levelColl[target.id].slice(0);\n level.push(grpLen);\n this.levelColl[groupElem.id] = level;\n if (!this.isImportRules) {\n this.isAddSuccess = true;\n this.addGroups([], target.id.replace(this.element.id + '_', ''));\n this.isAddSuccess = false;\n if (isBtnClick) {\n this.addRuleElement(groupElem, {});\n }\n }\n }\n else {\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 var tglBtn = new Button({ content: this.l10n.getConstant('NOT'), cssClass: 'e-btn e-small' });\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 this.updatedRule = null;\n if (this.headerTemplate) {\n var args_2 = { requestType: 'header-template-create', ruleID: groupElem.id, condition: condition,\n notCondition: this.enableNotCondition ? not : undefined };\n this.trigger('actionBegin', args_2);\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 if (!this.isImportRules) {\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.headerTemplateFn = function (groupElem, not, condition, rule) {\n var template;\n var templateID = this.element.id + '_header';\n var args;\n var groupHdr = groupElem.querySelector('.e-group-header');\n if (this.headerTemplate) {\n args = { requestType: 'header-template-initialize', ruleID: groupElem.id,\n notCondition: this.enableNotCondition ? not : undefined, condition: condition, rule: this.getRuleCollection(rule, true) };\n this.trigger('actionBegin', args);\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 groupHdr.appendChild(template);\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 groupHdr.appendChild(template);\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 // eslint-disable-next-line @typescript-eslint/no-explicit-any\n append(template, groupHdr);\n }\n else {\n template = this.headerFn(args, this, 'Template', templateID)[0];\n groupHdr.appendChild(template);\n }\n this.renderReactTemplates();\n }\n return groupElem;\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 rules.condition = value;\n return;\n }\n while (ruleElement && ruleElement.previousElementSibling !== null) {\n ruleElement = ruleElement.previousElementSibling;\n index++;\n }\n var rule = rules.rules[index];\n var column = this.getColumn(rule.field);\n var format = this.getFormat(column.format);\n if (column.type === 'date') {\n if (value instanceof Date) {\n value = this.intl.formatDate(value, format);\n }\n else if (value instanceof Array) {\n for (var i = 0; i < value.length; i++) {\n if (value[i] && value[i] instanceof Date) {\n value[i] = this.intl.formatDate(value[i], format);\n }\n }\n }\n }\n if (column.ruleTemplate) {\n this.templateChange(element, value, type);\n }\n else {\n this.isNotified = true;\n this.updateRules(element, value);\n this.isNotified = false;\n }\n };\n QueryBuilder.prototype.templateChange = function (element, value, type) {\n var grpElem = closest(element, '.e-group-container');\n var eventsArgs;\n var rules = this.getParentGroup(grpElem);\n var ruleElem = closest(element, '.e-rule-container');\n var index = 0;\n if (this.allowValidation) {\n this.validateValue(rules, ruleElem);\n }\n while (ruleElem && ruleElem.previousElementSibling !== null) {\n ruleElem = ruleElem.previousElementSibling;\n index++;\n }\n var rule = rules.rules[index];\n if (type === 'field') {\n this.selectedColumn = this.getColumn(value);\n }\n else if (rule) {\n this.selectedColumn = this.getColumn(rule.field);\n }\n var operVal;\n this.previousColumn = this.getColumn(rule.field);\n var beforeRules = this.getValidRules(this.rule);\n if (this.selectedColumn) {\n if (this.selectedColumn.operators) {\n operVal = this.selectedColumn.operators;\n }\n else {\n operVal = this.customOperators[this.selectedColumn.type + 'Operator'];\n }\n }\n var arrOper = ['in', 'notin', 'between', 'notbetween'];\n var prevOper;\n switch (type) {\n case 'field':\n rule.field = value;\n rule.label = this.selectedColumn.label;\n rule.type = this.selectedColumn.type;\n rule.value = '';\n rule.operator = operVal[0].value;\n break;\n case 'operator':\n prevOper = rule.operator;\n rule.operator = value;\n if (arrOper.indexOf(rule.operator) > -1) {\n rule.value = [];\n }\n else if (arrOper.indexOf(prevOper) > -1) {\n rule.value = '';\n }\n break;\n case 'value':\n rule.value = value;\n }\n this.changeRuleTemplate(this.selectedColumn, element);\n this.filterRules(beforeRules, this.getValidRules(this.rule), type);\n if (this.selectedColumn && this.selectedColumn.ruleTemplate) {\n if (type === 'field' || type === 'operator') {\n var grpEle = closest(element, '.e-rule-container');\n this.destroyControls(grpEle, true);\n detach(grpEle.querySelector('.e-rule-field'));\n var ruleElement = this.appendRuleElem(closest(grpEle, '.e-group-container'), this.selectedColumn, 'change', grpEle.id, type, rule);\n if (this.displayMode === 'Vertical' || this.element.className.indexOf('e-device') > -1) {\n ruleElement.className = 'e-rule-container e-vertical-mode';\n }\n else {\n ruleElement.className = 'e-rule-container e-horizontal-mode';\n }\n if (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 if (ruleElement.previousElementSibling && ruleElement.previousElementSibling.className.indexOf('e-group-container') > -1 &&\n ruleElement.className.indexOf('e-separate-rule') < 0) {\n ruleElement.className += ' e-separate-rule';\n }\n var args = { requestType: 'template-create', action: type, ruleID: grpEle.id,\n fields: this.fields, rule: rule };\n eventsArgs = { groupID: grpElem.id.replace(this.element.id + '_', ''), ruleID: grpEle.id.replace(this.element.id + '_', ''),\n value: rule.field, type: 'field' };\n this.trigger('actionBegin', args);\n this.trigger('change', eventsArgs);\n }\n }\n };\n QueryBuilder.prototype.changeValue = function (i, args) {\n var _this = this;\n var element;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (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 }\n else {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n element = args.element;\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 if (dateElement.element && dateElement.element.className.indexOf('e-datepicker') > -1) {\n element = dateElement.element;\n }\n var value;\n var rbValue;\n var dropDownObj;\n if (element.className.indexOf('e-radio') > -1) {\n // eslint-disable-next-line\n rbValue = parseInt(element.id.split('valuekey')[1], 0);\n dropDownObj =\n getComponent(closest(element, '.e-rule-container').querySelector('.e-filter-input'), 'dropdownlist');\n this.selectedColumn = dropDownObj.getDataByValue(dropDownObj.value);\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 }\n if (args.name === 'input' && this.immediateModeDelay) {\n window.clearInterval(this.timer);\n this.timer = window.setInterval(function () { _this.filterValue(groupID, ruleID, value, i, element); }, this.immediateModeDelay);\n }\n else {\n this.filterValue(groupID, ruleID, value, i, element);\n }\n };\n QueryBuilder.prototype.filterValue = function (grID, rlID, value, i, ele) {\n var _this = this;\n var eventsArgs = { groupID: grID, ruleID: rlID, value: value, cancel: false, type: 'value' };\n window.clearInterval(this.timer);\n if (!this.isImportRules) {\n this.trigger('beforeChange', eventsArgs, function (observedChangeArgs) {\n _this.changeValueSuccessCallBack(observedChangeArgs, ele, i, grID, rlID);\n });\n }\n else {\n this.changeValueSuccessCallBack(eventsArgs, ele, i, grID, rlID);\n }\n };\n QueryBuilder.prototype.changeValueSuccessCallBack = function (args, element, i, groupID, ruleID) {\n if (!args.cancel) {\n this.updateRules(element, args.value, i);\n if (!this.isImportRules) {\n this.trigger('change', { groupID: groupID, ruleID: ruleID, value: args.value, cancel: false, type: 'value' });\n }\n }\n };\n QueryBuilder.prototype.fieldClose = function (id) {\n if (this.isFieldChange || this.isDestroy) {\n return;\n }\n this.isFieldClose = true;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var ddl = getComponent(id, 'dropdownlist');\n var item = ddl.popupObj.element.querySelector('.e-active');\n var itemData = ddl.getItemData();\n ddl.value = itemData.value;\n var customArgs = { element: ddl.element, value: itemData.value, isInteracted: true,\n previousItemData: this.prevItemData, previousItem: null, item: item, itemData: itemData, event: null, e: null };\n if (ddl.previousValue !== ddl.value) {\n this.changeField(customArgs);\n }\n this.isFieldChange = false;\n };\n QueryBuilder.prototype.changeField = function (args) {\n if (args.isInteracted) {\n if (isNullOrUndefined(args.value)) {\n return;\n }\n this.isFieldChange = true;\n this.prevItemData = args.itemData;\n var fieldElem = closest(args.element, '.e-rule-filter') || closest(args.element, '.e-rule-sub-filter');\n var column = this.fieldMode === 'DropdownTree' ? this.getColumn(args.value[0]) : this.getColumn(args.value);\n if (this.fieldMode === 'DropdownTree' && fieldElem != null) {\n var ddtElem = fieldElem.querySelector('.e-dropdowntree.e-control');\n var ddt = getComponent(ddtElem, 'dropdowntree');\n if (column) {\n if (column.type === 'object') {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ddt.value = args.oldValue;\n ddt.dataBind();\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (isNullOrUndefined(args.oldValue)) {\n ddtElem.value = '';\n }\n else {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ddtElem.value = args.oldValue[0];\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 index++;\n }\n rules.rules[index].value = '';\n this.changeRule(rules.rules[index], args);\n }\n }\n };\n QueryBuilder.prototype.changeRule = function (rule, ddlArgs) {\n if (!ddlArgs.itemData) {\n if (this.fieldMode === 'DropdownTree') {\n var ddt = getComponent(ddlArgs.element, 'dropdowntree');\n if (ddt.value == null) {\n return;\n }\n }\n else {\n return;\n }\n }\n var tempRule = {};\n var filterElem = closest(ddlArgs.element, '.e-rule-filter');\n filterElem = filterElem ? filterElem : closest(ddlArgs.element, '.e-rule-sub-filter');\n var ddlObj = getComponent(ddlArgs.element, 'dropdownlist');\n if (this.fieldMode === 'DropdownTree' && filterElem != null) {\n ddlObj = getComponent(ddlArgs.element, 'dropdowntree');\n }\n var element = closest(ddlArgs.element, '.e-group-container');\n var groupID = element.id.replace(this.element.id + '_', '');\n this.changeFilter(filterElem, ddlObj, groupID, rule, tempRule, ddlArgs);\n };\n QueryBuilder.prototype.changeFilter = function (flt, dl, grID, rl, tmpRl, dArg) {\n var _this = this;\n if (flt) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var ddlValue = void 0;\n if (this.fieldMode === 'DropdownTree') {\n ddlValue = (dl.value[0]);\n }\n else {\n ddlValue = this.isImportRules ? this.GetRootColumnName(dl.value) : dl.value;\n }\n this.selectedColumn = this.getColumn(ddlValue);\n var ruleElem = closest(flt, '.e-rule-container');\n var ruleID = ruleElem.id.replace(this.element.id + '_', '');\n var eventsArgs = { groupID: grID, ruleID: ruleID, selectedField: this.fieldMode === 'DropdownTree' ?\n dl.value[0] : dl.value, cancel: false, type: 'field' };\n if (!this.isImportRules) {\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 subFieldData = Object.keys(this.selectedColumn.columns[0]);\n var ddlField;\n ddlField = {\n dataSource: this.selectedColumn.columns,\n fields: this.fields,\n placeholder: this.l10n.getConstant('SelectField'),\n popupHeight: ((subFieldData.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) > -1) {\n dropDownList.value = subField[i].field;\n this.selectedColumn = subField[i];\n subFieldValue = true;\n break;\n }\n }\n }\n this.subFilterCounter++;\n this.subFieldElem = subFieldElem;\n // eslint-disable-next-line\n ddlArgs.itemData = ddlArgs.itemData;\n if (!subFieldValue && this.selectedColumn.columns) {\n if (!subFieldValue && this.isImportRules) {\n dropDownList.value = null;\n }\n this.selectedColumn = this.selectedColumn.columns[0];\n }\n this.previousColumn = this.selectedColumn;\n if (!this.selectedColumn.columns) {\n this.changeRuleValues(tempElem, rule, tempRule, ddlArgs);\n }\n };\n QueryBuilder.prototype.operatorChangeSuccess = function (eventsArgs, filterElem, tempRule, rule, ddlArgs) {\n if (!eventsArgs.cancel) {\n var operatorElem = closest(ddlArgs.element, '.e-rule-operator');\n var valElem = operatorElem.nextElementSibling;\n var dropDownObj = getComponent(ddlArgs.element, 'dropdownlist');\n var prevOper = rule.operator ? rule.operator.toString().toLowerCase() : '';\n tempRule.operator = dropDownObj.value.toString();\n var currOper = tempRule.operator.toLowerCase();\n if (tempRule.operator.toLowerCase().indexOf('between') > -1 || (tempRule.operator.toLowerCase().indexOf('in') > -1\n && tempRule.operator.toLowerCase().indexOf('contains') < 0)) {\n filterElem = operatorElem.previousElementSibling;\n tempRule.type = rule.type;\n if (tempRule.operator.toLowerCase().indexOf('in') < 0 || prevOper.indexOf('in') < 0) {\n rule.value = [];\n }\n }\n else if (typeof rule.value === 'object' && rule.value != null) {\n rule.value = rule.value.length > 0 ? rule.value[0] : rule.type === 'number' ? 0 : '';\n }\n if (ddlArgs.previousItemData) {\n var prevValue = ddlArgs.previousItemData.value.toString().toLowerCase();\n if ((prevValue.indexOf('between') > -1 || (prevValue.indexOf('in') > -1 || (prevValue.indexOf('null') > -1)\n || (prevValue.indexOf('empty') > -1)) && prevValue.indexOf('contains') < 0)) {\n filterElem = operatorElem.previousElementSibling;\n tempRule.type = rule.type;\n }\n }\n if ((prevOper.indexOf('in') > -1 && prevOper.indexOf('in') < 5) && (currOper.indexOf('in') > -1\n && currOper.indexOf('in') < 5)) {\n filterElem = null;\n }\n if (tempRule.operator.indexOf('null') > -1 || (tempRule.operator.indexOf('empty') > -1)) {\n var parentElem = operatorElem.parentElement.querySelector('.e-rule-value');\n var tooltipElem = parentElem.querySelector('.e-tooltip.e-input-group');\n if (tooltipElem) {\n getComponent(tooltipElem, 'tooltip').destroy();\n }\n removeClass([parentElem], 'e-show');\n addClass([parentElem], 'e-hide');\n }\n if (valElem && this.getColumn(rule.field).template) {\n filterElem = operatorElem.previousElementSibling;\n }\n 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 this.renderValues(operatorElem, itemData, ddlArgs.previousItemData, true, rule, tempRule, ddlArgs.element);\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 value = operatorList[0].value;\n value = rule ? (rule.operator !== '' ? rule.operator : value) : value;\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: 0,\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 this.renderValues(operatorElem, this.selectedColumn, ddlArgs.previousItemData, false, rule, tempRule, ddlArgs.element);\n }\n }\n if (!this.isImportRules) {\n this.updateRules(ddlArgs.element, ddlArgs.item);\n }\n };\n QueryBuilder.prototype.popupOpen = function (isField, args) {\n if (this.enableRtl) {\n addClass([args.popup.element], 'e-rtl');\n }\n if (isField) {\n this.isFieldClose = false;\n }\n };\n QueryBuilder.prototype.destroyControls = function (target, isRuleTemplate) {\n var element = isRuleTemplate ? target : target.nextElementSibling;\n var inputElement = element.querySelectorAll('input.e-control');\n var divElement = element.querySelectorAll('div.e-control:not(.e-handle)');\n var columns = this.columns;\n for (var i = 0, len = inputElement.length; i < len; i++) {\n if (inputElement[i].classList.contains('e-textbox')) {\n getComponent(inputElement[i], 'textbox').destroy();\n detach(select('input#' + inputElement[i].id, element));\n }\n else if (inputElement[i].classList.contains('e-dropdownlist')) {\n if (this.allowValidation && inputElement[i].parentElement.className.indexOf('e-tooltip') > -1) {\n getComponent(inputElement[i].parentElement, 'tooltip').destroy();\n }\n getComponent(inputElement[i], 'dropdownlist').destroy();\n }\n else if (inputElement[i].classList.contains('e-radio')) {\n getComponent(inputElement[i], 'radio').destroy();\n }\n else if (inputElement[i].classList.contains('e-numerictextbox')) {\n getComponent(inputElement[i], 'numerictextbox').destroy();\n detach(select('input#' + inputElement[i].id, element));\n }\n else if (inputElement[i].classList.contains('e-datepicker')) {\n getComponent(inputElement[i], 'datepicker').destroy();\n }\n else if (inputElement[i].classList.contains('e-multiselect')) {\n getComponent(inputElement[i], 'multiselect').destroy();\n }\n else if (inputElement[i].className.indexOf('e-template') > -1) {\n var clsName = inputElement[i].className;\n for (var j = 0, jLen = columns.length; j < jLen; j++) {\n if (columns[j].template && clsName.indexOf(columns[j].field) > -1) {\n this.templateDestroy(columns[j], inputElement[i].id);\n break;\n }\n }\n }\n if (document.getElementById(inputElement[i].id)) {\n detach(inputElement[i]);\n }\n }\n for (var i = 0, len = divElement.length; i < len; i++) {\n if (divElement[i].className.indexOf('e-template') > -1) {\n var clsName = divElement[i].className;\n for (var j = 0, jLen = columns.length; j < jLen; j++) {\n if (columns[j].template && clsName.indexOf(columns[j].field) > -1) {\n this.templateDestroy(columns[j], divElement[i].id);\n break;\n }\n }\n }\n detach(divElement[i]);\n }\n var templateElement = element.querySelectorAll('.e-template:not(.e-control)');\n for (var i = 0, len = templateElement.length; i < len; i++) {\n detach(templateElement[i]);\n }\n };\n QueryBuilder.prototype.templateDestroy = function (column, elemId) {\n var template;\n if (typeof column.template !== 'string' || column.template.destroy === undefined) {\n template = column.template;\n }\n else {\n return;\n }\n var temp = template.destroy;\n if (template.destroy) {\n var templateElements = void 0;\n if (document.getElementById(elemId)) {\n templateElements = closest(document.getElementById(elemId), '.e-rule-field').querySelectorAll('.e-template');\n }\n if (typeof temp === 'string') {\n temp = getValue(temp, window);\n temp({ field: column.field, elementId: elemId, elements: templateElements });\n }\n else {\n template.destroy({ field: column.field, elementId: elemId, elements: templateElements });\n }\n }\n };\n /**\n * Return values bound to the column.\n *\n * @param {string} field - 'field' to be passed to get the field values.\n * @returns {object[]} - Values bound to the column\n */\n QueryBuilder.prototype.getValues = function (field) {\n var original = {};\n var result = [];\n var value;\n var fieldColl = [];\n if (this.separator.length > 0) {\n fieldColl = field.split(this.separator);\n }\n var dataSource = this.dataColl;\n if (this.dataColl[1]) {\n for (var i = 0, iLen = dataSource.length; i < iLen; i++) {\n var data = {};\n if (fieldColl.length > 1) {\n var dataObj = dataSource[i];\n var fieldStr = void 0;\n for (var j = 0, jLen = fieldColl.length; j < jLen; j++) {\n fieldStr = fieldColl[j];\n if (fieldColl.length === (j + 1)) {\n value = dataObj[\"\" + fieldStr];\n if (Number(dataObj[\"\" + fieldStr]) === dataObj[\"\" + fieldStr] && dataObj[\"\" + fieldStr] % 1 !== 0) {\n value = dataObj[\"\" + fieldStr].toString();\n }\n }\n else {\n dataObj = dataObj[\"\" + fieldStr];\n }\n }\n }\n else {\n value = dataSource[i][\"\" + field];\n if (Number(dataSource[i][\"\" + field]) === dataSource[i][\"\" + field] && dataSource[i][\"\" + field] % 1 !== 0) {\n value = dataSource[i][\"\" + field].toString();\n }\n }\n if (!(value in original)) {\n original[\"\" + value] = 1;\n if (fieldColl.length > 1) {\n this.createNestedObject(data, fieldColl, value);\n }\n else {\n data[\"\" + field] = value;\n }\n result.push(data);\n }\n }\n }\n return result;\n };\n QueryBuilder.prototype.createNestedObject = function (obj, fieldColl, value) {\n var key;\n var lastIndex = fieldColl.length - 1;\n for (var k = 0; k < lastIndex; ++k) {\n key = fieldColl[k];\n if (!(key in obj)) {\n obj[\"\" + key] = {};\n }\n obj = obj[\"\" + key];\n }\n obj[fieldColl[lastIndex]] = value;\n };\n QueryBuilder.prototype.getDistinctValues = function (dataSource, field) {\n var original = {};\n var result = [];\n var nest = [];\n var value = '';\n var isNested = field.indexOf(this.separator);\n var _loop_2 = function (i, iLen) {\n if (isNested === 0) {\n value = dataSource[i][\"\" + field];\n }\n else {\n nest = field.split(this_2.separator);\n // eslint-disable-next-line @typescript-eslint/tslint/config\n nest.forEach(function (element) {\n if (value) {\n value = value[\"\" + element];\n }\n else {\n value = dataSource[i][\"\" + element];\n }\n });\n }\n if (Number(dataSource[i][\"\" + field]) === dataSource[i][\"\" + field] && dataSource[i][\"\" + field] % 1 !== 0) {\n value = dataSource[i][\"\" + field].toString();\n }\n var data = {};\n if (!(value in original)) {\n original[\"\" + value] = 1;\n if (isNested === 0) {\n data[\"\" + field] = value;\n }\n else {\n data[nest[nest.length - 1]] = value;\n }\n result.push(data);\n }\n };\n var this_2 = this;\n for (var i = 0, iLen = dataSource.length; i < iLen; i++) {\n _loop_2(i, iLen);\n }\n return result;\n };\n QueryBuilder.prototype.renderMultiSelect = function (rule, parentId, i, selectedValue, values) {\n var isFetched = false;\n var ds;\n var isValues = false;\n this.isGetNestedData = false;\n if (this.dataColl[1]) {\n if (Object.keys(this.dataColl[1]).indexOf(rule.field) > -1) {\n isFetched = true;\n ds = this.getDistinctValues(this.dataColl, rule.field);\n }\n }\n isFetched = rule.columns ? false : isFetched;\n if (!this.dataColl.length && values.length) {\n isValues = true;\n }\n var fieldValue = this.selectedRule.field;\n var isNested = this.selectedRule.field.indexOf(this.separator);\n if (isNested !== 0 && this.fieldMode !== 'DropdownTree') {\n var nest = this.selectedRule.field.split(this.separator);\n fieldValue = nest[nest.length - 1];\n }\n var multiSelectValue;\n multiSelectValue = {\n dataSource: isValues ? values : (isFetched ? ds : this.dataManager),\n query: new Query([rule.field]),\n fields: { text: fieldValue, value: fieldValue },\n placeholder: this.l10n.getConstant('SelectValue'),\n value: selectedValue,\n mode: 'CheckBox',\n width: '100%',\n change: this.changeValue.bind(this, i),\n close: this.closePopup.bind(this, i),\n actionBegin: this.multiSelectOpen.bind(this, parentId + '_valuekey' + i),\n open: this.popupOpen.bind(this, false)\n };\n if (this.valueModel && this.valueModel.multiSelectModel) {\n multiSelectValue = __assign({}, multiSelectValue, this.valueModel.multiSelectModel);\n }\n var multiSelectObj = new MultiSelect(multiSelectValue);\n multiSelectObj.appendTo('#' + parentId + '_valuekey' + i);\n this.updateRules(multiSelectObj.element, selectedValue, 0);\n };\n QueryBuilder.prototype.multiSelectOpen = function (parentId, args) {\n if (this.dataSource instanceof DataManager) {\n var element = document.getElementById(parentId);\n var dropDownObj = getComponent(closest(element, '.e-rule-container').querySelector('.e-filter-input'), 'dropdownlist');\n this.selectedColumn = dropDownObj.getDataByValue(dropDownObj.value);\n var value = this.selectedColumn.field;\n var isFetched = false;\n if (this.dataColl[1]) {\n if (Object.keys(this.dataColl[1]).indexOf(value) > -1) {\n isFetched = true;\n }\n var isNest = value.indexOf(this.separator);\n if (isNest !== 0 && this.isGetNestedData) {\n isFetched = true;\n }\n }\n if (!isFetched) {\n args.cancel = true;\n this.bindMultiSelectData(element, value);\n }\n }\n };\n QueryBuilder.prototype.bindMultiSelectData = function (element, value) {\n this.getMultiSelectData(element, value);\n };\n QueryBuilder.prototype.getMultiSelectData = function (element, value) {\n var _this = this;\n var dummyData;\n var deferred = new Deferred();\n var data = this.dataManager.executeQuery(new Query().select(value));\n var multiselectObj = getComponent(element, 'multiselect');\n multiselectObj.hideSpinner();\n this.createSpinner(closest(element, '.e-multi-select-wrapper').parentElement);\n showSpinner(closest(element, '.e-multi-select-wrapper').parentElement);\n data.then(function (e) {\n if (e.actual && e.actual.result) {\n dummyData = e.actual.result;\n }\n else {\n dummyData = e.result;\n }\n _this.dataColl = extend(_this.dataColl, dummyData, [], true);\n multiselectObj.dataSource = _this.getDistinctValues(_this.dataColl, value);\n _this.isGetNestedData = true;\n hideSpinner(closest(element, '.e-multi-select-wrapper').parentElement);\n }).catch(function (e) {\n deferred.reject(e);\n });\n };\n QueryBuilder.prototype.createSpinner = function (element) {\n var spinnerElem = this.createElement('span', { attrs: { class: 'e-qb-spinner' } });\n element.appendChild(spinnerElem);\n createSpinner({ target: spinnerElem, width: Browser.isDevice ? '16px' : '14px' });\n };\n QueryBuilder.prototype.closePopup = function (i, args) {\n var element = document.getElementById(args.popup.element.id.replace('_popup', ''));\n if (element) {\n var value = getComponent(element, 'multiselect').value;\n this.updateRules(element, value, i);\n }\n };\n QueryBuilder.prototype.processTemplate = function (target, itemData, rule, tempRule) {\n var container = closest(target, '.e-rule-container');\n var tempElements = container.querySelectorAll('.e-template');\n var filterElem = container.querySelector('.e-rule-filter .e-filter-input');\n var ddlObj = this.fieldMode === 'DropdownTree' ? getComponent(filterElem, 'dropdowntree')\n : getComponent(container.querySelector('.e-rule-filter .e-filter-input'), 'dropdownlist');\n var column = this.fieldMode === 'DropdownTree' ? this.getColumn(ddlObj.value[0]) : this.getColumn(ddlObj.value);\n if (typeof itemData.template === 'string' || itemData.template.write === undefined) {\n var args = { rule: rule, ruleID: container.id, operator: tempRule.operator, field: column.field,\n requestType: 'value-template-create' };\n this.trigger('actionBegin', args);\n }\n else {\n var template = itemData.template;\n if (typeof template.write === 'string') {\n getValue(template.write, window)({ elements: tempElements.length > 1 ? tempElements : tempElements[0], values: rule.value,\n operator: tempRule.operator, field: column.field, dataSource: column.values });\n }\n else {\n itemData.template.write({ elements: tempElements.length > 1 ? tempElements : tempElements[0],\n values: rule.value, operator: tempRule.operator, field: column.field, dataSource: column.values });\n }\n }\n };\n QueryBuilder.prototype.getItemData = function (parentId) {\n var fieldObj = getComponent(document.getElementById(parentId + '_filterkey'), 'dropdownlist');\n if (this.fieldMode === 'DropdownTree') {\n fieldObj = getComponent(document.getElementById(parentId + '_filterkey'), 'dropdowntree');\n }\n return this.fieldMode === 'DropdownTree' ? this.getColumn(fieldObj.value[0]) : this.getColumn(fieldObj.value);\n };\n QueryBuilder.prototype.setDefaultValue = function (parentId, isArryValue, isNumber) {\n var itemData = this.getItemData(parentId);\n if (isNullOrUndefined(itemData.value)) {\n return isNumber ? isArryValue ? [0, 0] : 0 : isArryValue ? [] : '';\n }\n if (isArryValue) {\n if (!(itemData.value instanceof Array)) {\n return [itemData.value];\n }\n }\n else {\n if (itemData.value instanceof Array) {\n return itemData.value[0];\n }\n }\n return itemData.value;\n };\n QueryBuilder.prototype.renderStringValue = function (parentId, rule, operator, idx, ruleValElem) {\n var selectedVal;\n var columnData = this.getItemData(parentId);\n var selectedValue;\n var isTemplate = (typeof columnData.template === 'string');\n if (this.isImportRules || this.isPublic || isTemplate) {\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 ? rule.value : 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 ? rule.value : this.setDefaultValue(parentId, true, false);\n selectedValue = selectedVal.join(',');\n }\n var txtBox = void 0;\n txtBox = {\n placeholder: this.l10n.getConstant('SelectValue'),\n input: this.changeValue.bind(this, idx)\n };\n if (this.valueModel && this.valueModel.textBoxModel) {\n txtBox = __assign({}, txtBox, this.valueModel.textBoxModel);\n }\n var inputobj = new TextBox(txtBox);\n inputobj.appendTo('#' + parentId + '_valuekey' + idx);\n inputobj.value = selectedValue;\n inputobj.dataBind();\n }\n };\n QueryBuilder.prototype.renderNumberValue = function (parentId, rule, operator, idx, ruleValElem, itemData, length) {\n var columnData = this.getItemData(parentId);\n var isTemplate = (typeof columnData.template === 'string');\n var selectedVal = (this.isImportRules || this.isPublic || isTemplate) ? rule.value : this.setDefaultValue(parentId, false, true);\n if ((operator === 'in' || operator === 'notin') && (this.dataColl.length || columnData.values)) {\n selectedVal = this.isImportRules ? rule.value : 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 ? rule.value : 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 }\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 // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (!itemData.field && !itemData.key && itemData.value) {\n if (itemData.value instanceof Date) {\n selectedValue = itemData.value;\n }\n else {\n selectedValue = this.parseDate(itemData.value, itemData.format);\n }\n }\n if (!itemData.format && rule && rule.field !== '') {\n column = this.getColumn(rule.field);\n format = column.format;\n }\n if ((this.isImportRules || this.isPublic || isTemplate) && rule) {\n column = this.getColumn(rule.field);\n format = column.format;\n if (rule.value) {\n selVal = (length_1 > 1) ? rule.value[i] : rule.value;\n selectedValue = this.parseDate(selVal, column.format);\n }\n else {\n selectedValue = rule.value;\n }\n }\n if (format) {\n var formatObj = this.getFormat(format);\n if (formatObj.skeleton) {\n datePicker = {\n locale: this.getLocale(), value: selectedValue,\n placeholder: place, format: formatObj, change: this.changeValue.bind(this, i)\n };\n if (this.valueModel && this.valueModel.datePickerModel) {\n datePicker = __assign({}, datePicker, this.valueModel.datePickerModel);\n }\n datepick = new DatePicker(datePicker);\n }\n else {\n datePicker = {\n value: selectedValue, locale: this.getLocale(), placeholder: place,\n format: formatObj.format, change: this.changeValue.bind(this, i)\n };\n if (this.valueModel && this.valueModel.datePickerModel) {\n datePicker = __assign({}, datePicker, this.valueModel.datePickerModel);\n }\n datepick = new DatePicker(datePicker);\n }\n }\n else {\n datePicker = {\n locale: this.getLocale(), value: selectedValue,\n placeholder: place, change: this.changeValue.bind(this, i)\n };\n if (this.valueModel && this.valueModel.datePickerModel) {\n datePicker = __assign({}, datePicker, this.valueModel.datePickerModel);\n }\n datepick = new DatePicker(datePicker);\n }\n datepick.appendTo('#' + parentId + '_valuekey' + i);\n if (!rule.value) {\n var elem = document.getElementById(parentId + '_valuekey' + i);\n this.updateRules(elem, selectedValue, null, this.isNotValueChange);\n this.isNotValueChange = false;\n }\n }\n break;\n }\n }\n }\n }\n };\n QueryBuilder.prototype.processBoolValues = function (itemData, rule, parentId, i) {\n var isCheck = false;\n var value;\n var orgValue;\n if (isNullOrUndefined(rule.type) && itemData) {\n rule.type = itemData.type;\n }\n var label;\n if (itemData.values) {\n var values = itemData.values;\n if (rule.type === 'boolean' && !isNullOrUndefined(rule.value)) {\n isCheck = values[i].toLowerCase() === rule.value.toString().toLowerCase();\n }\n else if (itemData.value) {\n isCheck = values[i].toLowerCase() === itemData.value.toString().toLowerCase();\n }\n else if (i === 0) {\n isCheck = true;\n }\n orgValue = value = label = values[i];\n }\n else {\n var values = [true, false];\n if (rule.type === 'boolean' && !isNullOrUndefined(rule.value)) {\n isCheck = values[i].toString().toLowerCase() === rule.value.toString().toLowerCase();\n }\n else if (itemData.value) {\n isCheck = values[i].toString().toLowerCase() === itemData.value.toString().toLowerCase();\n }\n else if (i === 0) {\n isCheck = true;\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);\n }\n };\n QueryBuilder.prototype.getOperatorIndex = function (ddlObj, rule) {\n var i;\n var dataSource = ddlObj.dataSource;\n var len = dataSource.length;\n for (i = 0; i < len; i++) {\n if (rule.operator === ddlObj.dataSource[i].value) {\n return i;\n }\n }\n return 0;\n };\n QueryBuilder.prototype.getPreviousItemData = function (prevItemData, column) {\n if (this.isFieldClose && prevItemData) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n prevItemData = this.getColumn(prevItemData.value);\n }\n if (column && column.template && prevItemData && Object.keys(prevItemData).length < 4) {\n prevItemData.template = column.template;\n }\n return prevItemData;\n };\n QueryBuilder.prototype.renderValues = function (target, itemData, prevItemData, isRender, rule, tempRule, element) {\n var subFldElem = target.previousElementSibling;\n var filtElem = subFldElem.getElementsByTagName('input')[0];\n var filtObj = this.fieldMode === 'DropdownTree' ? getComponent(filtElem, 'dropdowntree')\n : getComponent(filtElem, 'dropdownlist');\n var column = this.fieldMode === 'DropdownTree' ? this.getColumn(filtObj.value[0])\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n : this.getColumn(filtObj.value);\n this.selectedRule = column;\n if (isRender) {\n var ddlObj = getComponent(target.querySelector('input'), 'dropdownlist');\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 ddlObj.dataBind();\n }\n }\n var operator = tempRule.operator.toString();\n var isTempRendered = false;\n if (!(operator.indexOf('null') > -1 || operator.indexOf('empty') > -1)) {\n var parentId = closest(target, '.e-rule-container').id;\n prevItemData = this.getPreviousItemData(prevItemData, column);\n if (prevItemData && prevItemData.template === undefined) {\n if (prevItemData.columns) {\n prevItemData = this.getColumn(rule.field);\n }\n }\n else if (this.fieldMode === 'DropdownTree' && prevItemData === undefined) {\n prevItemData = this.getColumn(rule.field);\n }\n if (prevItemData && prevItemData.template) {\n this.templateDestroy(prevItemData, parentId + '_valuekey0');\n var elem = select('#' + parentId + '_valuekey0', target.nextElementSibling);\n if (elem && !elem.classList.contains('e-control')) {\n detach(select('#' + parentId + '_valuekey0', target.nextElementSibling));\n }\n if (typeof prevItemData.template === 'string' || prevItemData.template.create === undefined) {\n if (target.nextElementSibling.classList.contains('e-template-value')) {\n this.clearQBTemplate([parentId]);\n }\n target.nextElementSibling.innerHTML = '';\n }\n }\n if (isRender) {\n this.validateValue(rule, closest(target, '.e-rule-container'));\n this.destroyControls(target);\n }\n if (column) {\n itemData.template = column.template;\n }\n if (itemData.template) {\n addClass([target.nextElementSibling], 'e-template-value');\n itemData.template = column.template;\n isTempRendered = this.setColumnTemplate(itemData, parentId, column.field, itemData.value ||\n operator, target, rule);\n }\n if (isTempRendered) {\n var parentElem = target.parentElement.querySelector('.e-rule-value');\n if (this.element.className.indexOf('e-device') > -1 || this.displayMode === 'Vertical') {\n parentElem.style.width = '100%';\n }\n else {\n parentElem.style.width = '200px';\n }\n }\n else {\n removeClass([target.nextElementSibling], 'e-template-value');\n var inputLen = 1;\n if (tempRule.type === 'boolean') {\n inputLen = this.selectedColumn.values ? this.selectedColumn.values.length : 2;\n }\n else {\n inputLen = (operator && operator.toLowerCase().indexOf('between') > -1) ? 2 : 1;\n }\n for (var i = 0; i < inputLen; i++) {\n var valElem = this.createElement('input', { attrs: { type: 'text', id: parentId + '_valuekey' + i } });\n target.nextElementSibling.appendChild(valElem);\n }\n }\n this.renderControls(target, itemData, rule, tempRule, isTempRendered);\n }\n else {\n var parentElem = target.parentElement.querySelector('.e-rule-value');\n if (parentElem) {\n removeClass([parentElem], 'e-show');\n addClass([parentElem], 'e-hide');\n }\n }\n };\n QueryBuilder.prototype.setColumnTemplate = function (itemData, ruleID, field, operator, target, rule) {\n var _this = this;\n var args;\n var isRendered = true;\n if (!itemData.template) {\n return true;\n }\n else {\n if (typeof itemData.template === 'string' || itemData.template.create === undefined) {\n args = { requestType: 'value-template-initialize', ruleID: ruleID, field: field, operator: operator, rule: rule,\n renderTemplate: true };\n this.trigger('actionBegin', args, function (observedActionArgs) {\n isRendered = _this.actionBeginSuccessCallBack(observedActionArgs, itemData, ruleID, field, target);\n });\n return isRendered;\n }\n else {\n var valElem = void 0;\n var template = itemData.template;\n if (typeof template.create === 'string') {\n valElem = getValue(template.create, window)({ field: field, operator: operator });\n }\n else {\n valElem = template.create({ field: field, operator: operator });\n }\n if (valElem instanceof Element) {\n valElem.id = ruleID + '_valuekey0';\n addClass([valElem], 'e-template');\n target.nextElementSibling.appendChild(valElem);\n if (field.indexOf(' ') < 0) {\n addClass([valElem], 'e-' + field);\n }\n }\n else if (valElem instanceof Array) {\n addClass(valElem, 'e-template');\n for (var i = 0, iLen = valElem.length; i < iLen; i++) {\n valElem[i].id = ruleID + '_valuekey' + i;\n target.nextElementSibling.appendChild(valElem[i]);\n }\n }\n addClass([target.nextElementSibling], 'e-template-value');\n return true;\n }\n }\n };\n QueryBuilder.prototype.actionBeginSuccessCallBack = function (args, itemData, ruleID, field, target) {\n if (args.renderTemplate) {\n var valElem = void 0;\n this.columnTemplateFn = this.templateParser(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 } // 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 }\n else {\n valElem = this.columnTemplateFn(args, this, 'Template', templateID)[0];\n }\n target.nextElementSibling.appendChild(valElem);\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 switch (controlName) {\n case 'checkbox':\n // eslint-disable-next-line\n var value = getComponent(element, controlName).value;\n rule.value = (value !== '') ? value : undefined;\n break;\n case 'textbox':\n rule.value = getComponent(element, controlName).value;\n break;\n case 'dropdownlist':\n rule.value = getComponent(element, controlName).value;\n break;\n case 'radio':\n // eslint-disable-next-line\n var 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 // eslint-disable-next-line\n var column = this.getColumn(rule.field);\n // eslint-disable-next-line\n var format = this.getFormat(column.format);\n // eslint-disable-next-line\n var 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 index++;\n }\n var operator = rule.rules[index].operator ? rule.rules[index].operator.toString() : '';\n ruleElem = closest(target, '.e-rule-container');\n var ruleID = ruleElem.id.replace(this.element.id + '_', '');\n if (closest(target, '.e-rule-filter') || closest(target, '.e-rule-sub-filter')) {\n if (this.subFieldElem) {\n target = this.subFieldElem;\n }\n dropDownObj = this.fieldMode === 'DropdownTree' ? getComponent(target, 'dropdowntree') :\n getComponent(target, 'dropdownlist');\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var column = this.fieldMode === 'DropdownTree' ? this.getColumn(dropDownObj.value[0])\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n : this.getColumn(dropDownObj.value);\n if (!this.isImportRules && rule.rules[index].field &&\n rule.rules[index].field.toLowerCase() !== column.field.toLowerCase()) {\n if (!(ruleElem.querySelectorAll('.e-template')) && !(operator.indexOf('null') > -1)\n || (operator.indexOf('empty') > -1)) {\n rule.rules[index].value = '';\n }\n }\n this.selectedColumn = this.getColumn(this.selectedColumn.field);\n rule.rules[index].field = this.selectedColumn.field;\n rule.rules[index].type = this.selectedColumn.type;\n rule.rules[index].label = this.selectedColumn.label;\n var ruleElement = closest(target, '.e-rule-filter');\n ruleElement = ruleElement ? ruleElement : closest(target, '.e-rule-sub-filter');\n var element = ruleElement.nextElementSibling.querySelector('input.e-control');\n element = element ? element : ruleElement.nextElementSibling.nextElementSibling.querySelector('input.e-control');\n operator = getComponent(element, 'dropdownlist').value.toString();\n rule.rules[index].operator = operator;\n // Value Fields\n var valueContainer = ruleElement.nextElementSibling.nextElementSibling;\n var elementCln = valueContainer.querySelectorAll('input.e-control');\n if (elementCln.length < 1) {\n elementCln = valueContainer.querySelectorAll('div.e-control');\n }\n if (elementCln.length < 1) {\n elementCln = valueContainer.querySelectorAll('.e-template');\n }\n eventsArgs = { groupID: groupID, ruleID: ruleID, value: rule.rules[index].field, type: 'field' };\n for (var i_1 = 0; i_1 < elementCln.length; i_1++) {\n if (operator.indexOf('null') > -1 || operator.indexOf('empty') > -1) {\n rule.rules[index].value = null;\n continue;\n }\n this.updateValues(elementCln[i_1], rule.rules[index]);\n }\n if (!this.isImportRules) {\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) {\n this.trigger('ruleChange', { previousRule: beforeRule, rule: afterRule, type: type });\n }\n }\n };\n QueryBuilder.prototype.ruleValueUpdate = function (target, selectedValue, rule, index, groupElem, ruleElem, i) {\n var eventsArgs;\n var oper;\n var arrOperator = ['in', 'between', 'notin', 'notbetween'];\n if (rule.rules[index].operator) {\n oper = rule.rules[index].operator.toString().toLowerCase();\n }\n if (selectedValue !== null) {\n if (target.className.indexOf('e-multiselect') > -1 && rule.rules[index].type === 'number' &&\n !this.isNotified) {\n var selVal = [];\n var dupSelectedValue = selectedValue;\n for (var k = 0, kLen = dupSelectedValue.length; k < kLen; k++) {\n if (typeof dupSelectedValue[k] === 'string') {\n selVal.push(parseFloat(dupSelectedValue[k]));\n }\n }\n if (selVal.length) {\n selectedValue = selVal;\n }\n }\n if (this.isNotified) {\n rule.rules[index].value = selectedValue;\n eventsArgs = { groupID: groupElem.id, ruleID: ruleElem.id, value: rule.rules[index].value, type: 'value' };\n if (!this.isImportRules) {\n this.trigger('change', eventsArgs);\n }\n }\n else if (target.className.indexOf('e-spin') > -1 || target.className.indexOf('e-numeric') > -1) {\n if (arrOperator.indexOf(oper) > -1) {\n rule.rules[index].value[i] = selectedValue;\n }\n else {\n rule.rules[index].value = selectedValue;\n }\n }\n else if (target.className.indexOf('e-radio') > -1) {\n rule.rules[index].value = selectedValue;\n }\n else if (target.className.indexOf('e-multiselect') > -1) {\n rule.rules[index].value = selectedValue;\n }\n else if (target.className.indexOf('e-textbox') > -1) {\n if (oper === 'in' || oper === 'notin') {\n if (rule.rules[index].type === 'string') {\n rule.rules[index].value = this.processValueString(selectedValue, rule.rules[index].type);\n }\n else {\n rule.rules[index].value = this.processValueString(selectedValue, rule.rules[index].type);\n }\n }\n else {\n rule.rules[index].value = selectedValue;\n }\n }\n else if (target.className.indexOf('e-datepicker') > -1) {\n var format = this.getFormat(this.getColumn(this.selectedColumn.field).format);\n if (format.type) {\n if (arrOperator.indexOf(oper) > -1) {\n if (typeof rule.rules[index].value === 'string') {\n rule.rules[index].value = [];\n }\n rule.rules[index].value[i] = this.intl.formatDate(selectedValue, format);\n }\n else {\n rule.rules[index].value = this.intl.formatDate(selectedValue, format);\n }\n }\n }\n this.validateValue(rule, ruleElem, index);\n }\n else {\n if (target.className.indexOf('e-datepicker') > -1) {\n if (arrOperator.indexOf(oper) > -1) {\n if (typeof rule.rules[index].value === 'string') {\n rule.rules[index].value = [];\n }\n rule.rules[index].value[i] = selectedValue;\n }\n else {\n rule.rules[index].value = selectedValue;\n }\n }\n else {\n rule.rules[index].value = selectedValue;\n }\n }\n };\n QueryBuilder.prototype.validateValue = function (rule, ruleElem, index) {\n if (!isNullOrUndefined(index)) {\n rule = rule.rules[index];\n }\n var isObject = typeof (rule.value) === 'object';\n if (this.allowValidation && (isNullOrUndefined(index) || (isObject ? rule.value.length > 0 : rule.value))) {\n var valElem = ruleElem.querySelectorAll('.e-rule-value .e-control');\n if (valElem.length > 0) {\n if (valElem[0].className.indexOf('e-tooltip') > -1) {\n getComponent(valElem[0], 'tooltip').destroy();\n }\n else if (valElem[0].parentElement.className.indexOf('e-tooltip') > -1) {\n getComponent(valElem[0].parentElement, 'tooltip').destroy();\n }\n if (valElem[1] && valElem[1].parentElement.className.indexOf('e-tooltip') > -1) {\n getComponent(valElem[1].parentElement, 'tooltip').destroy();\n }\n }\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 classList(this.element, [], ['e-rtl', 'e-responsive', 'e-device']);\n this.isDestroy = false;\n };\n /**\n * Adds single or multiple rules.\n *\n * @param {RuleModel[]} rule - 'rule collection' to be passed to add the rules.\n * @param {string} groupID - 'group id' to be passed to add the rule in groups.\n * @returns {void}.\n */\n QueryBuilder.prototype.addRules = function (rule, groupID) {\n groupID = this.element.id + '_' + groupID;\n this.isPublic = true;\n for (var i = 0, len = rule.length; i < len; i++) {\n this.addRuleElement(document.getElementById(groupID), rule[i]);\n }\n this.isPublic = false;\n };\n /**\n * Adds single or multiple groups, which contains the collection of rules.\n *\n * @param {RuleModel[]} groups - 'group collection' to be passed to add the groups.\n * @param {string} groupID - 'group id' to be passed to add the groups.\n * @returns {void}.\n */\n QueryBuilder.prototype.addGroups = function (groups, groupID) {\n if (this.isAddSuccess || this.element.querySelectorAll('.e-group-container').length <= this.maxGroupCount) {\n groupID = this.element.id + '_' + groupID;\n var groupElem = document.getElementById(groupID);\n var rule = this.getParentGroup(groupElem);\n var grouplen = groups.length;\n if (grouplen) {\n this.isPublic = true;\n for (var i = 0, len = groups.length; i < len; i++) {\n this.updatedRule = { condition: groups[i].condition, not: groups[i].not };\n this.importRules(groups[i], groupElem, false, groups[i].not);\n }\n this.isPublic = false;\n }\n else {\n var condition = 'and';\n var not = false;\n if (this.updatedRule) {\n condition = this.updatedRule.condition;\n not = this.updatedRule.not;\n }\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 if (!this.headerTemplate) {\n this.disableRuleCondition(groupElem, rule);\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.enableRtl) {\n addClass([this.element], 'e-rtl');\n }\n if (this.width) {\n this.element.style.width = this.width;\n }\n if (this.height) {\n this.element.style.height = this.height;\n }\n if (this.rule.rules.length) {\n this.isImportRules = true;\n }\n else {\n this.addGroupElement(false, this.element);\n }\n if (Browser.isDevice || this.displayMode === 'Vertical') {\n if (Browser.isDevice) {\n this.element.style.width = '100%';\n this.element.classList.add('e-device');\n }\n removeClass(this.element.querySelectorAll('.e-rule-container'), 'e-horizontal-mode');\n addClass(this.element.querySelectorAll('.e-rule-container'), 'e-vertical-mode');\n this.displayMode = 'Vertical';\n }\n else {\n this.displayMode = 'Horizontal';\n }\n if (this.summaryView) {\n if (this.isImportRules) {\n this.renderSummary();\n }\n else {\n this.renderSummaryCollapse();\n }\n }\n else {\n if (this.columns.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.length) {\n this.addRuleElement(this.element.querySelector('.e-group-container'), {});\n }\n this.notGroupRtl();\n if (this.readonly) {\n this.enableReadonly();\n }\n var buttons = this.element.querySelectorAll('label.e-btn');\n var button = void 0;\n for (var i = 0; i < buttons.length; i++) {\n button = buttons.item(i);\n rippleEffect(button, { selector: '.e-btn' });\n }\n }\n };\n QueryBuilder.prototype.renderSummary = function () {\n var contentElem = this.createElement('div', {\n attrs: {\n class: 'e-summary-content',\n id: this.element.id + '_summary_content'\n }\n });\n var textElem = this.createElement('textarea', { attrs: { class: 'e-summary-text', readonly: 'true' }, styles: 'max-height:500px' });\n var editElem = this.createElement('button', { attrs: { type: 'button', class: 'e-edit-rule e-css e-btn e-small e-flat e-primary' } });\n var divElem = this.createElement('div', { attrs: { class: 'e-summary-btndiv' } });\n contentElem.appendChild(textElem);\n textElem.textContent = this.getSqlFromRules(this.rule);\n editElem.textContent = this.l10n.getConstant('Edit');\n divElem.appendChild(editElem);\n contentElem.appendChild(divElem);\n this.element.appendChild(contentElem);\n };\n QueryBuilder.prototype.renderSummaryCollapse = function () {\n var collapseElem = this.createElement('div', {\n attrs: {\n class: 'e-collapse-rule e-icons',\n title: this.l10n.getConstant('SummaryViewTitle')\n }\n });\n this.element.querySelector('.e-group-header').appendChild(collapseElem);\n };\n QueryBuilder.prototype.columnSort = function () {\n if (this.sortDirection.toLowerCase() === 'descending') {\n this.columns = new DataManager(this.columns).executeLocal(new Query().sortByDesc('field'));\n }\n else if (this.sortDirection.toLowerCase() === 'ascending') {\n this.columns = new DataManager(this.columns).executeLocal(new Query().sortBy('field'));\n }\n };\n QueryBuilder.prototype.onChangeNotGroup = function () {\n this.element.innerHTML = '';\n this.groupIdCounter = 0;\n if (!this.headerTemplate) {\n if (this.enableNotCondition) {\n if (this.enableNotCondition) {\n var inputElem = this.createElement('button', { attrs: { type: 'button', class: 'e-qb-toggle' } });\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.rule = this.checkNotGroup(this.rule);\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 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 // eslint-disable-next-line\n var groupElem = this.element.querySelector('.e-group-container');\n // eslint-disable-next-line\n var summaryElem = this.element.querySelector('.e-summary-content');\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 (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 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 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 this.rule = newProp.rule;\n newProp.rule = this.getRuleCollection(this.rule, false);\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 }\n }\n };\n QueryBuilder.prototype.preRender = function () {\n this.element.id = this.element.id || getUniqueID('ej2-querybuilder');\n this.defaultLocale = {\n StartsWith: 'Starts With',\n EndsWith: 'Ends With',\n Contains: 'Contains',\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 };\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: 'endswith', key: this.l10n.getConstant('EndsWith') },\n { value: 'contains', key: this.l10n.getConstant('Contains') },\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 ],\n booleanOperator: [\n { value: 'equal', key: this.l10n.getConstant('Equal') },\n { value: 'notequal', key: this.l10n.getConstant('NotEqual') }\n ],\n numberOperator: [\n { value: 'equal', key: this.l10n.getConstant('Equal') },\n { value: 'greaterthanorequal', key: this.l10n.getConstant('GreaterThanOrEqual') },\n { value: 'greaterthan', key: this.l10n.getConstant('GreaterThan') },\n { value: 'between', key: this.l10n.getConstant('Between') },\n { value: 'lessthan', key: this.l10n.getConstant('LessThan') },\n { value: 'notbetween', key: this.l10n.getConstant('NotBetween') },\n { value: 'lessthanorequal', key: this.l10n.getConstant('LessThanOrEqual') },\n { value: 'notequal', key: this.l10n.getConstant('NotEqual') },\n { value: 'in', key: this.l10n.getConstant('In') },\n { value: 'notin', key: this.l10n.getConstant('NotIn') }\n ]\n };\n this.operators = {\n equal: '=', notequal: '!=', greaterthan: '>', greaterthanorequal: '>=', lessthan: '<', in: 'IN', notin: 'NOT IN',\n lessthanorequal: '<=', startswith: 'LIKE', endswith: 'LIKE', between: 'BETWEEN', notbetween: 'NOT BETWEEN', contains: 'LIKE',\n isnull: 'IS NULL', isnotnull: 'IS NOT NULL', isempty: 'IS EMPTY', isnotempty: 'IS NOT EMPTY', notstartswith: 'NOT LIKE',\n notendswith: 'NOT LIKE', notcontains: 'NOT LIKE'\n };\n this.sqlOperators = {\n equal: '=', notequal: '!=', greaterthan: '>', greaterthanorequal: '>=', lessthan: '<', in: this.l10n.getConstant('In').toUpperCase(),\n notin: this.l10n.getConstant('NotIn').toUpperCase(), lessthanorequal: '<=', startswith: this.l10n.getConstant('Like').toUpperCase(),\n endswith: this.l10n.getConstant('Like').toUpperCase(), between: this.l10n.getConstant('Between').toUpperCase(),\n notbetween: this.l10n.getConstant('NotBetween').toUpperCase(), contains: this.l10n.getConstant('Like').toUpperCase(),\n isnull: this.l10n.getConstant('IsNull').toUpperCase(), isnotnull: this.l10n.getConstant('IsNotNull').toUpperCase(),\n isempty: this.l10n.getConstant('IsEmpty').toUpperCase(), isnotempty: this.l10n.getConstant('IsNotEmpty').toUpperCase(),\n notstartswith: this.l10n.getConstant('NotLike').toUpperCase(), notendswith: this.l10n.getConstant('NotLike').toUpperCase(),\n notcontains: this.l10n.getConstant('NotLike').toUpperCase()\n };\n if (!this.fields) {\n this.fields = { text: 'label', value: 'field' };\n }\n };\n QueryBuilder.prototype.render = function () {\n this.levelColl = {};\n this.items = [\n {\n text: this.l10n.getConstant('AddGroup'),\n iconCss: 'e-icons e-add-icon e-addgroup'\n },\n {\n text: this.l10n.getConstant('AddCondition'),\n iconCss: 'e-icons e-add-icon e-addrule'\n }\n ];\n this.ruleElem = this.ruleTemplate();\n this.groupElem = this.groupTemplate();\n var stringOper = [\n { value: 'isnull', key: this.l10n.getConstant('IsNull') },\n { value: 'isnotnull', key: this.l10n.getConstant('IsNotNull') }\n ];\n var numberOper = [\n { value: 'isnull', key: this.l10n.getConstant('IsNull') },\n { value: 'isnotnull', key: this.l10n.getConstant('IsNotNull') }\n ];\n this.customOperators['stringOperator'] = this.customOperators['stringOperator'].concat(stringOper); // tslint:disable-line\n this.customOperators['numberOperator'] = this.customOperators['numberOperator'].concat(numberOper); // tslint:disable-line\n if (this.dataSource instanceof DataManager) {\n this.dataManager = this.dataSource;\n this.executeDataManager(new Query().take(1));\n }\n else {\n this.dataManager = new DataManager(this.dataSource);\n this.dataColl = this.dataManager.executeLocal(new Query());\n this.initControl();\n }\n this.renderComplete();\n };\n QueryBuilder.prototype.templateParser = function (template) {\n if (template) {\n try {\n if (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 };\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 };\n QueryBuilder.prototype.getParentGroup = function (target, isParent) {\n var groupLevel = (target instanceof Element) ? this.levelColl[target.id] : this.levelColl[\"\" + target];\n var len = isParent ? groupLevel.length - 1 : groupLevel.length;\n var rule = this.rule;\n for (var i = 0; i < len; i++) {\n rule = this.findGroupByIdx(groupLevel[i], rule, i === 0);\n }\n return rule;\n };\n /**\n * Delete the Group\n *\n * @param {Element | string} target - 'target' to be passed to delete the group.\n * @returns {void}\n */\n QueryBuilder.prototype.deleteGroup = function (target) {\n var _this = this;\n var groupElem = target;\n var groupId;\n if (typeof target === 'string') {\n groupId = this.element.id + '_' + target;\n target = document.getElementById(groupId);\n }\n else {\n groupId = groupElem.id.replace(this.element.id + '_', '');\n }\n var args = { groupID: groupId, cancel: false, type: 'deleteGroup' };\n if (!this.isImportRules) {\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 index++;\n }\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 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 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 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.isImportRules) {\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) {\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 clnruleElem = ruleElem;\n var nextElem = ruleElem.nextElementSibling;\n var prevElem = ruleElem.previousElementSibling;\n var index = 0;\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 index++;\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 detach(clnruleElem);\n }\n catch (err) {\n // eslint-disable-next-line no-ex-assign\n err = [];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var error = 'error';\n // eslint-disable-next-line\n err[error] = error;\n }\n // eslint-enable\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);\n }\n if (!this.isImportRules) {\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.rule = rule;\n rule = this.getRuleCollection(this.rule, false);\n this.importRules(this.rule, this.element.querySelector('.e-group-container'), true, this.rule.not, isRoot);\n this.isImportRules = false;\n };\n QueryBuilder.prototype.keyBoardHandler = function (e) {\n if (this.readonly && (e.keyCode === 38 || e.keyCode === 40 || e.keyCode === 13)) {\n e.preventDefault();\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) {\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 (rules && rules.condition === 'or') {\n orElem.checked = true;\n }\n else {\n andElem.checked = true;\n }\n }\n else {\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 * Get the valid rule or rules collection.\n *\n * @param {RuleModel} currentRule - 'currentRule' to be passed to get the valid rules.\n * @returns {RuleModel} - Valid rule or rules collection\n */\n QueryBuilder.prototype.getValidRules = function (currentRule) {\n if (!currentRule) {\n currentRule = this.getRules();\n }\n var ruleCondtion = currentRule.condition;\n var notCondition = currentRule.not;\n var ruleColl = extend([], currentRule.rules, [], true);\n var rule = this.getRuleCollection({ condition: ruleCondtion, rules: ruleColl, not: notCondition }, true);\n return rule;\n };\n QueryBuilder.prototype.getRuleCollection = function (rule, isValidRule) {\n if (isNullOrUndefined(rule)) {\n return null;\n }\n var orgRule;\n if (rule.rules && rule.rules.length && (Object.keys(rule.rules[0]).length > 6 || isValidRule)) {\n var jLen = rule.rules.length;\n for (var j = 0; j < jLen; j++) {\n orgRule = rule.rules[j];\n orgRule = this.getRuleCollection(orgRule, isValidRule);\n rule.rules[j] = orgRule;\n if (Object.keys(orgRule).length < 1 && isValidRule) {\n rule.rules.splice(j, 1);\n j--;\n jLen--;\n }\n }\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var customObj = rule.custom;\n if ((rule.field && rule.field !== '') && (isNullOrUndefined(customObj) || (customObj && (customObj.type !== 'question' &&\n customObj.type !== 'answer')))) {\n if (rule.operator) {\n if (rule.operator.toString().indexOf('null') > -1 || rule.operator.toString().indexOf('empty') > -1) {\n rule.value = null;\n }\n }\n if ((this.isRefreshed && this.enablePersistence) || (this.rule.field !== '' && rule.operator !== '' && (rule.value !== '' &&\n rule.value !== undefined)) || (customObj && customObj.isQuestion)) {\n var condition = rule.condition;\n rule = {\n 'label': rule.label, 'field': rule.field, 'operator': rule.operator, 'type': rule.type, 'value': rule.value\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 }\n else {\n rule = {};\n }\n }\n else {\n if (customObj && (customObj.type === 'question' || customObj.type === 'answer')) {\n var notValue = rule.not;\n rule = { 'label': rule.label, 'field': rule.field, 'operator': rule.operator, 'type': rule.type, 'value': rule.value,\n 'condition': rule.condition, 'rules': rule.rules\n };\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n rule.custom = customObj;\n if (this.enableNotCondition) {\n rule.not = notValue;\n }\n }\n else if ((isNullOrUndefined(rule.condition)) && isNullOrUndefined(rule.rules)) {\n rule = {};\n }\n else {\n 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 (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 // 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 var groupElem = closest(ruleElem, '.e-group-container');\n var rule = this.getParentGroup(groupElem);\n while (ruleElem.previousElementSibling !== null) {\n ruleElem = ruleElem.previousElementSibling;\n index++;\n }\n return rule.rules[index];\n };\n /**\n * Gets the group.\n *\n * @param {string | Element} target - 'target' to be passed to get group.\n * @returns {object} -Group\n */\n QueryBuilder.prototype.getGroup = function (target) {\n if (target instanceof Element && target.className.indexOf('e-group-container') < 1) {\n target = closest(target, '.e-group-container');\n }\n var groupId = (target instanceof Element) ? target.id : this.element.id + '_' + target;\n var rule = this.getParentGroup(groupId);\n return rule;\n };\n /**\n * Deletes the group or groups based on the group ID.\n *\n * @param {string[]} groupIdColl - 'groupIdColl' to be passed to delete groups.\n * @returns {void}\n */\n QueryBuilder.prototype.deleteGroups = function (groupIdColl) {\n var i;\n var len = groupIdColl.length;\n var groupID;\n for (i = 0; i < len; i++) {\n groupID = this.element.id + '_' + groupIdColl[i];\n this.deleteGroup(document.getElementById(groupID));\n }\n };\n /**\n * Return the Query from current rules collection.\n *\n * @returns {Promise} - Query from current rules collection\n * @blazorType object\n */\n QueryBuilder.prototype.getFilteredRecords = function () {\n var predicate = this.getPredicate(this.getValidRules(this.rule));\n var dataManagerQuery = isNullOrUndefined(predicate) ? new Query() : new Query().where(predicate);\n return this.dataManager.executeQuery(dataManagerQuery);\n };\n /**\n * Deletes the rule or rules based on the rule ID.\n *\n * @param {string[]} ruleIdColl - 'ruleIdColl' to be passed to delete rules.\n * @returns {void}.\n */\n QueryBuilder.prototype.deleteRules = function (ruleIdColl) {\n var i;\n var len = ruleIdColl.length;\n var ruleID;\n for (i = 0; i < len; i++) {\n ruleID = this.element.id + '_' + ruleIdColl[i];\n this.deleteRule(document.getElementById(ruleID));\n }\n };\n /**\n * Gets the query for Data Manager.\n *\n * @param {RuleModel} rule - 'rule' to be passed to get query.\n * @returns {string} - Query for Data Manager\n */\n QueryBuilder.prototype.getDataManagerQuery = function (rule) {\n var predicate = this.getPredicate(rule);\n var query;\n var fields = [];\n for (var i = 0, len = Object.keys(this.columns); i < len.length; i++) {\n fields.push(this.columns[i].field);\n }\n if (rule.rules.length) {\n query = new Query().select(fields).where(predicate);\n }\n else {\n query = new Query().select(fields);\n }\n return query;\n };\n /**\n * Get the predicate from collection of rules.\n *\n * @param {RuleModel} rule - 'rule' to be passed to get predicate.\n * @returns {Predicate} - Predicate from collection of rules\n */\n QueryBuilder.prototype.getPredicate = function (rule) {\n var ruleColl = rule.rules;\n var pred;\n var pred2;\n var ruleValue;\n var ignoreCase = false;\n var column;\n var ignoreOper = ['notcontains', 'notstartswith', 'notendswith'];\n if (!ruleColl) {\n return pred;\n }\n for (var i = 0, len = ruleColl.length; i < len; i++) {\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(ruleColl[i].operator) && !isNullOrUndefined(ruleColl[i].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('contains') < 0) {\n pred = isDateFilter ? this.datePredicate(ruleColl[i], ruleValue) :\n this.arrayPredicate(ruleColl[i]);\n }\n else {\n var value = ruleValue;\n if (value !== '' && ignoreOper.indexOf(oper) < 0) {\n pred = new Predicate(ruleColl[i].field, ruleColl[i].operator, ruleValue, ignoreCase);\n }\n }\n }\n else {\n if (ignoreOper.indexOf(oper) > -1) {\n continue;\n }\n if (isDateFilter || (oper.indexOf('in') > -1 || oper.indexOf('between') > -1 ||\n oper.indexOf('null') > -1 || oper.indexOf('empty') > -1) && oper.indexOf('contains') < 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, ruleColl[i].operator, ruleValue, ignoreCase);\n }\n else if (value !== '') {\n pred = new Predicate(ruleColl[i].field, ruleColl[i].operator, ruleValue, ignoreCase);\n }\n }\n else {\n var value = ruleValue;\n if (pred && value !== '') {\n pred = pred.or(ruleColl[i].field, ruleColl[i].operator, ruleValue, ignoreCase);\n }\n else if (value !== '') {\n pred = new Predicate(ruleColl[i].field, ruleColl[i].operator, ruleValue, ignoreCase);\n }\n }\n }\n }\n }\n }\n if (this.dataSource instanceof DataManager) {\n if (!isNullOrUndefined(pred) && (pred.operator === 'isnull' || pred.operator === 'isnotnull')) {\n pred.operator = pred.operator === 'isnull' ? 'equal' : 'notequal';\n }\n }\n return pred;\n };\n QueryBuilder.prototype.getLocale = function () {\n var gregorianFormat = '.dates.calendars.gregorian.days.format.short';\n var localeString = this.locale;\n var mainVal = 'main.';\n var cultureObj = getValue(mainVal + '' + this.locale + gregorianFormat, cldrData);\n if (!cultureObj) {\n localeString = 'en';\n }\n return localeString;\n };\n QueryBuilder.prototype.getColumn = function (field, col) {\n var columns = this.columns;\n var column;\n columns = col ? col : columns;\n for (var i = 0, iLen = columns.length; i < iLen; i++) {\n if (columns[i].field === field) {\n column = columns[i];\n break;\n }\n else if (columns[i].columns) {\n column = this.getColumn(field, columns[i].columns);\n if (column) {\n break;\n }\n }\n else if (field && field.indexOf(this.separator) > -1) {\n if (this.separator !== '' && columns[i].field === field.split(this.separator)[0]) {\n column = columns[i];\n break;\n }\n }\n }\n return column;\n };\n /* eslint-disable */\n /**\n * Return the operator bound to the column.\n *\n * @returns {[key: string]: Object}[] - Operator bound to the column\n */\n /* eslint-enable */\n QueryBuilder.prototype.getOperators = function (field) {\n var column = this.getColumn(field);\n return column.operators;\n };\n QueryBuilder.prototype.setTime = function (date, isStart) {\n if (isStart) {\n date.setHours(0, 0, 0);\n }\n else {\n date.setHours(23, 59, 59);\n }\n return date;\n };\n QueryBuilder.prototype.datePredicate = function (ruleColl, value, predicate, condition) {\n var pred;\n var startDate = this.setTime(new Date(value.getTime()), true);\n var endDate = this.setTime(value);\n switch (ruleColl.operator) {\n case 'equal':\n pred = new Predicate(ruleColl.field, 'greaterthanorequal', startDate);\n pred = pred.and(ruleColl.field, 'lessthanorequal', endDate);\n break;\n case 'notequal':\n pred = new Predicate(ruleColl.field, 'lessthan', startDate);\n pred = pred.or(ruleColl.field, 'greaterthan', endDate);\n break;\n case 'greaterthan':\n pred = new Predicate(ruleColl.field, 'greaterthan', endDate);\n break;\n case 'greaterthanorequal':\n pred = new Predicate(ruleColl.field, 'greaterthanorequal', startDate);\n break;\n case 'lessthan':\n pred = new Predicate(ruleColl.field, 'lessthan', startDate);\n break;\n case 'lessthanorequal':\n pred = new Predicate(ruleColl.field, 'lessthanorequal', endDate);\n break;\n }\n if (pred) {\n if (predicate) {\n if (condition === 'and') {\n predicate = predicate.and(pred);\n }\n else if (condition === 'or') {\n predicate = predicate.or(pred);\n }\n }\n else {\n predicate = pred;\n }\n }\n return predicate;\n };\n QueryBuilder.prototype.arrayPredicate = function (ruleColl, predicate, condition) {\n var value = ruleColl.value;\n var operator = ruleColl.operator.toString();\n var nullValue = ruleColl.value;\n var pred;\n var column = this.getColumn(ruleColl.field);\n var format = this.getFormat(column.format);\n if (operator.indexOf('null') > -1 || operator.indexOf('empty') > -1) {\n switch (operator) {\n case 'isnull':\n pred = new Predicate(ruleColl.field, 'isnull', nullValue);\n break;\n case 'isnotnull':\n pred = new Predicate(ruleColl.field, 'isnotnull', nullValue);\n break;\n case 'isempty':\n pred = new Predicate(ruleColl.field, 'equal', '');\n break;\n case 'isnotempty':\n pred = new Predicate(ruleColl.field, 'notequal', '');\n break;\n }\n }\n if (!(operator.indexOf('null') > -1 || operator.indexOf('empty') > -1)) {\n for (var j = 0, jLen = value.length; j < jLen; j++) {\n if (value[j] !== '' || ((operator === 'in' || operator === 'notin') && column.type === 'string')) {\n if (j === 0) {\n var gte = 'greaterthanorequal';\n switch (operator) {\n case 'between':\n if (column.type !== 'date') {\n pred = new Predicate(ruleColl.field, gte, value[j]);\n }\n else {\n pred = new Predicate(ruleColl.field, gte, value[j] ?\n (this.isTime(value[j]) ? this.getDate(value[j], format) :\n this.setTime(this.getDate(value[j], format), true)) : null);\n }\n break;\n case 'notbetween':\n if (column.type === 'date') {\n pred = new Predicate(ruleColl.field, 'lessthan', value[j] ?\n (this.isTime(value[j]) ? this.getDate(value[j], format) :\n this.setTime(this.getDate(value[j], format), true)) : null);\n }\n else {\n pred = new Predicate(ruleColl.field, 'lessthan', value[j]);\n }\n break;\n case 'in':\n pred = new Predicate(ruleColl.field, 'equal', value[j]);\n break;\n case 'notin':\n pred = new Predicate(ruleColl.field, 'notequal', value[j]);\n break;\n }\n }\n else {\n var gt = 'greaterthan';\n switch (ruleColl.operator) {\n case 'between':\n if (column.type === 'date') {\n pred = pred.and(ruleColl.field, 'lessthanorequal', value[j] ?\n (this.isTime(value[j]) ? this.getDate(value[j], format) :\n this.setTime(this.getDate(value[j], format))) : value[j]);\n }\n else {\n pred = pred.and(ruleColl.field, 'lessthanorequal', value[j]);\n }\n break;\n case 'notbetween':\n if (column.type === 'date') {\n pred = pred.or(ruleColl.field, gt, value[j] ?\n (this.isTime(value[j]) ? this.getDate(value[j], format) :\n this.setTime(this.getDate(value[j], format))) : value[j]);\n }\n else {\n pred = pred.or(ruleColl.field, 'greaterthan', value[j]);\n }\n break;\n case 'in':\n pred = pred.or(ruleColl.field, 'equal', value[j]);\n break;\n case 'notin':\n pred = pred.and(ruleColl.field, 'notequal', value[j]);\n break;\n }\n }\n }\n }\n }\n if (pred) {\n if (predicate) {\n if (condition === 'and') {\n predicate = predicate.and(pred);\n }\n else if (condition === 'or') {\n predicate = predicate.or(pred);\n }\n }\n else {\n predicate = pred;\n }\n }\n return predicate;\n };\n QueryBuilder.prototype.getDate = function (value, format) {\n var currDate = this.intl.parseDate(value, format);\n if (value.indexOf(':') > -1 && (value.indexOf('/') < 0 && value.indexOf(',') < 0\n && value.indexOf('-') < 0)) {\n currDate = new Date();\n // eslint-disable-next-line\n currDate.setHours(parseInt(value.split(':')[0]));\n // eslint-disable-next-line\n currDate.setMinutes(parseInt(value.split(':')[1]));\n if (value.split(':')[2]) {\n // eslint-disable-next-line\n currDate.setSeconds(parseInt(value.split(':')[2]));\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.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 orElem.disabled = false;\n andElem.disabled = false;\n if (rule.condition === 'or') {\n orElem.checked = true;\n }\n else {\n andElem.checked = true;\n }\n }\n else {\n // enable/disable conditions when rule condition is added\n this.disableRuleCondition(parentElem);\n }\n if (this.headerTemplate && isRoot) {\n parentElem = this.renderGroup(rule, rule.condition, this.element, rule.not, isRoot);\n }\n if (this.enableNotCondition && !this.headerTemplate) {\n var tglBtnElem = parentElem.querySelector('.e-qb-toggle');\n if (rule.not) {\n addClass([tglBtnElem], 'e-active-toggle');\n }\n else {\n removeClass([tglBtnElem], 'e-active-toggle');\n }\n }\n }\n if (rule.rules.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 parentElem = this.renderGroup(ruleColl[i], ruleColl[i].condition, parentElem, ruleColl[i].not);\n parentElem = this.importRules(ruleColl[i], parentElem, true);\n }\n else {\n this.renderRule(ruleColl[i], parentElem);\n }\n }\n }\n parentElem = closest(parentElem, '.e-rule-list');\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 return element[element.length - 1];\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-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-numerictextbox')) {\n var numericTextBoxObj = getInstance(elem[i], NumericTextBox);\n numericTextBoxObj.readonly = this.isReadonly;\n }\n else if (elem[i].classList.contains('e-textbox')) {\n var textBoxObj = getInstance(elem[i], TextBox);\n textBoxObj.readonly = this.isReadonly;\n }\n else if (elem[i].classList.contains('e-datepicker')) {\n var datePickerObj = getInstance(elem[i], DatePicker);\n datePickerObj.readonly = this.isReadonly;\n }\n else if (elem[i].classList.contains('e-multiselect')) {\n var multiSelectObj = getInstance(elem[i], MultiSelect);\n multiSelectObj.readonly = this.isReadonly;\n }\n else if (elem[i].classList.contains('e-radio')) {\n var radioButtonObj = getInstance(elem[i], RadioButton);\n if (!radioButtonObj.checked) {\n if (this.isReadonly) {\n elem[i].parentElement.style.display = 'none';\n }\n else {\n elem[i].parentElement.style.display = 'inherit';\n }\n }\n }\n }\n var deleteGroupElems = this.element.querySelectorAll('.e-deletegroup');\n var addRuleGroupElems = this.element.querySelectorAll('.e-addrulegroup');\n var removeRuleElems = this.element.querySelectorAll('.e-removerule');\n if (!this.isReadonly && this.ruleElem.classList.contains('e-readonly')) {\n this.ruleElem.classList.remove('e-readonly');\n }\n var elems = [deleteGroupElems, addRuleGroupElems, removeRuleElems];\n for (var i = 0; i < elems.length; i++) {\n elems[i].forEach(function (elem) {\n if (elem.classList.contains('e-readonly')) {\n elem.classList.remove('e-readonly');\n }\n else {\n elem.classList.add('e-readonly');\n }\n });\n }\n this.enableBtnGroup();\n };\n QueryBuilder.prototype.enableBtnGroup = function () {\n var _this = this;\n var elems = this.element.querySelectorAll('.e-btngroup-and-lbl, .e-btngroup-or-lbl, .e-qb-toggle');\n var not = false;\n elems.forEach(function (elem) {\n if (elem.classList.contains('e-qb-toggle') && !elem.classList.contains('e-active-toggle')\n && !elem.classList.contains('e-readonly')) {\n elem.classList.add('e-readonly');\n not = false;\n }\n else if (elem.classList.contains('e-qb-toggle') && elem.classList.contains('e-not-readonly')) {\n elem.classList.remove('e-not-readonly');\n }\n else if (elem.classList.contains('e-qb-toggle') && elem.classList.contains('e-readonly')) {\n elem.classList.remove('e-readonly');\n }\n else if (elem.classList.contains('e-active-toggle')) {\n elem.classList.add('e-not-readonly');\n not = true;\n }\n else if (elem.previousElementSibling.checked || elem.classList.contains('e-readonly')) {\n elem.classList.remove('e-readonly');\n if (not) {\n if (elem.textContent === 'AND') {\n elem.classList.add('e-readonly-and');\n }\n else {\n elem.classList.add('e-readonly-or');\n }\n }\n else {\n if (elem.textContent === 'AND' && _this.isReadonly) {\n elem.classList.remove('e-not');\n elem.classList.add('e-readonly-and');\n }\n else {\n if (_this.enableNotCondition) {\n elem.classList.add('e-not');\n }\n elem.classList.remove('e-readonly-and');\n }\n if (elem.textContent === 'OR' && _this.isReadonly) {\n elem.classList.add('e-readonly-or-not');\n }\n else {\n elem.classList.remove('e-readonly-or-not');\n }\n }\n }\n else if (elem.classList.contains('e-btn-disable')) {\n // do nothing\n }\n else {\n elem.classList.add('e-readonly');\n }\n });\n };\n QueryBuilder.prototype.isDateFunction = function (value) {\n var dateFunc = ['date', 'time', 'day', 'week', 'month', 'year', 'hour', 'minute', 'second', 'now', 'quarter', 'period', 'extract'];\n for (var i = 0, len = dateFunc.length; i < len; i++) {\n if (value.toLowerCase().indexOf(dateFunc[i]) > -1) {\n return true;\n }\n }\n return false;\n };\n QueryBuilder.prototype.getSqlString = function (rules, enableEscape, queryStr, sqlLocale) {\n var isRoot = false;\n if (!queryStr && queryStr !== '') {\n queryStr = '';\n isRoot = true;\n }\n else {\n queryStr += '(';\n }\n var condition = rules.condition;\n if (rules.not) {\n var rulesNotCondition = void 0;\n if (isRoot) {\n rulesNotCondition = sqlLocale ? this.l10n.getConstant('NOT').toUpperCase() + ' (' : 'NOT (';\n queryStr += rulesNotCondition;\n }\n else {\n rulesNotCondition = sqlLocale ? ' ' + this.l10n.getConstant('NOT').toUpperCase() + ' (' : ' NOT (';\n queryStr += rulesNotCondition;\n }\n }\n if (rules.rules) {\n for (var j = 0, jLen = rules.rules.length; j < jLen; j++) {\n if (rules.rules[j].rules) {\n queryStr = this.getSqlString(rules.rules[j], enableEscape, queryStr, sqlLocale);\n }\n else {\n var rule = rules.rules[j];\n var valueStr = '';\n var ruleOpertor = sqlLocale ? this.sqlOperators[rule.operator] : this.operators[rule.operator];\n if (rule.value instanceof Array) {\n if (rule.operator.toString().indexOf('between') > -1) {\n var ruleCondition = sqlLocale ? ' ' + this.l10n.getConstant('AND').toUpperCase() + ' ' : ' ' + 'AND' + ' ';\n if (rule.type === 'date' && !this.isDateFunction(rule.value[0])) {\n valueStr += '\"' + rule.value[0] + '\"' + ruleCondition + '\"' + rule.value[1] + '\"';\n }\n else {\n valueStr += rule.value[0] + ruleCondition + rule.value[1];\n }\n }\n else {\n if (typeof rule.value[0] === 'string' && rule.value !== null) {\n valueStr += '(\"' + rule.value[0] + '\"';\n for (var k = 1, kLen = rule.value.length; k < kLen; k++) {\n valueStr += ',\"' + rule.value[k] + '\"';\n }\n valueStr += ')';\n }\n else {\n valueStr += '(' + rule.value + ')';\n }\n }\n }\n else {\n if (rule.operator.toString().indexOf('startswith') > -1) {\n valueStr += rule.value ? '(\"' + rule.value + '%\")' : '(' + rule.value + ')';\n }\n else if (rule.operator.toString().indexOf('endswith') > -1) {\n valueStr += rule.value ? '(\"%' + rule.value + '\")' : '(' + rule.value + ')';\n }\n else if (rule.operator.toString().indexOf('contains') > -1) {\n valueStr += rule.value ? '(\"%' + rule.value + '%\")' : '(' + rule.value + ')';\n }\n else {\n if (rule.type === 'number' || typeof rule.value === 'boolean' || rule.value === null) {\n valueStr += rule.value;\n }\n else {\n valueStr += '\"' + rule.value + '\"';\n }\n }\n }\n if (rule.operator.toString().indexOf('null') > -1 || (rule.operator.toString().indexOf('empty') > -1)) {\n if (enableEscape) {\n rule.field = '`' + rule.field + '`';\n }\n else {\n if (rule.field.indexOf(' ') > -1) {\n rule.field = '\"' + rule.field + '\"';\n }\n }\n queryStr += rule.field + ' ' + ruleOpertor;\n }\n else {\n if (enableEscape) {\n rule.field = '`' + rule.field + '`';\n }\n else {\n if (rule.field.indexOf(' ') > -1) {\n rule.field = '\"' + rule.field + '\"';\n }\n }\n queryStr += rule.field + ' ' + ruleOpertor + ' ' + valueStr;\n }\n if (rule.condition && rule.condition !== '') {\n condition = rule.condition;\n }\n }\n if (j !== jLen - 1) {\n if (condition === '') {\n condition = rules.rules[j].condition;\n }\n condition = sqlLocale ? this.l10n.getConstant(condition.toUpperCase()).toUpperCase() : condition.toUpperCase();\n queryStr += ' ' + condition + ' ';\n }\n }\n }\n if (!isRoot) {\n queryStr += ')';\n }\n if (rules.not) {\n queryStr += ')';\n }\n return queryStr;\n };\n /**\n * Sets the rules from the sql query.\n *\n * @param {string} sqlString - 'sql String' to be passed to set the rule.\n * @param {boolean} sqlLocale - 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.rule = { condition: 'and', not: false, rules: [] };\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 {object} - 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 return this.getSqlString(this.getValidRules(rule), allowEscape, null, sqlLocale).replace(/\"/g, '\\'');\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\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\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\n regex = new RegExp('^(' + subOp[i] + ')' + regexStr, 'ig');\n if (regex.exec(sqlString)) {\n this.parser.push(['SubOperators', subOp[i].toLowerCase()]);\n return subOp[i].length;\n }\n }\n //Left Parenthesis\n if (/^\\(/.exec(sqlString)) {\n this.parser.push(['Left', '(']);\n return 1;\n }\n //Right Parenthesis\n if (/^\\)/.exec(sqlString)) {\n this.parser.push(['Right', ')']);\n return 1;\n }\n //Boolean\n if (/^(true|false)/.exec(sqlString)) {\n matchValue = /^(true|false)/.exec(sqlString)[0];\n this.parser.push(['String', matchValue]);\n return matchValue.length;\n }\n //Null\n if (/^null/.exec(sqlString)) {\n matchValue = /^null/.exec(sqlString)[0];\n this.parser.push(['String', null]);\n return matchValue.length;\n }\n // eslint-disable-next-line\n if (/^`?([a-z_][a-z0-9_.\\[\\]\\(\\)]{0,}(\\:(number|float|string|date|boolean))?)`?/i.exec(sqlString)) {\n // eslint-disable-next-line\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 // eslint-disable-next-line\n if (this.checkLiteral() && /^'?([a-z_][a-z0-9 _.\\[\\]\\(\\)]{0,}(\\:(number|float|string|date|boolean))?)'?/i.exec(sqlString)) {\n // eslint-disable-next-line\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\n matchValue = /^[0-9]+(\\.[0-9]+)?/.exec(sqlString)[0];\n this.parser.push(['Literal', matchValue]);\n return matchValue.length;\n }\n //String\n // eslint-disable-next-line\n if (/^'((?:[^\\\\']+?|\\\\.|'')*)'(?!')/.exec(sqlString)) {\n // eslint-disable-next-line\n matchValue = /^'((?:[^\\\\']+?|\\\\.|'')*)'(?!')/.exec(sqlString)[0];\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 this.parser.push(['String', matchValue]);\n return matchValue.length;\n }\n // Double String\n // eslint-disable-next-line\n if (/^\"([^\\\\\"]*(?:\\\\.[^\\\\\"]*)*)\"/.exec(sqlString)) {\n // eslint-disable-next-line\n matchValue = /^\"([^\\\\\"]*(?:\\\\.[^\\\\\"]*)*)\"/.exec(sqlString)[0];\n this.parser.push(['DoubleString', matchValue]);\n return matchValue.length;\n }\n //Number\n // eslint-disable-next-line\n if (/^[0-9]+(\\.[0-9]+)?/.exec(sqlString)) {\n // eslint-disable-next-line\n matchValue = /^[0-9]+(\\.[0-9]+)?/.exec(sqlString)[0];\n this.parser.push(['Number', matchValue]);\n return matchValue.length;\n }\n //Negative Number\n // eslint-disable-next-line\n if (/^-?[0-9]+(\\.[0-9]+)?/.exec(sqlString)) {\n // eslint-disable-next-line\n matchValue = /^-?[0-9]+(\\.[0-9]+)?/.exec(sqlString)[0];\n this.parser.push(['Number', matchValue]);\n return matchValue.length;\n }\n return 1;\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 if (lastParser[0] === 'Left' && (secParser && secParser[0] === 'Conditions')) {\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 // eslint-disable-next-line\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 (localeOperator[i] === 'notcontains') ? 'notcontains' : 'contains';\n }\n else if (value && value.indexOf('%') !== 0 && value.indexOf('%') === value.length - 1) {\n return (localeOperator[i] === 'notstartswith') ? 'notstartswith' : 'startswith';\n }\n else if (value && value.indexOf('%') === 0 && value.indexOf('%') !== value.length - 1) {\n return (localeOperator[i] === 'notendswith') ? 'notendswith' : 'endswith';\n }\n return localeOperator[i];\n }\n }\n return null;\n }\n if (value) {\n if (value.indexOf('%') === 0 && value[value.length - 1] === '%') {\n return (operator === 'not like') ? 'notcontains' : 'contains';\n }\n else if (value.indexOf('%') !== 0 && value.indexOf('%') === value.length - 1) {\n return (operator === 'not like') ? 'notstartswith' : 'startswith';\n }\n else if (value.indexOf('%') === 0 && value.indexOf('%') !== value.length - 1) {\n return (operator === 'not like') ? 'notendswith' : 'endswith';\n }\n }\n else {\n if (operator === 'not like') {\n return 'notequal';\n }\n else if (operator === 'like') {\n return 'equal';\n }\n }\n return operators[\"\" + operator];\n };\n QueryBuilder.prototype.getTypeFromColumn = function (rules) {\n var columnData = this.getColumn(rules.field);\n if (!isNullOrUndefined(columnData)) {\n return columnData.type;\n }\n return null;\n };\n QueryBuilder.prototype.getLabelFromColumn = function (field) {\n var label = '';\n var l = 0;\n if (this.separator !== '') {\n var fieldColl = field.split(this.separator);\n for (var i = 0; i < fieldColl.length; i++) {\n label += this.getLabelFromField(fieldColl, i + 1);\n l++;\n if (l < fieldColl.length) {\n label += this.separator;\n }\n }\n return label;\n }\n else {\n var labelItem = this.getColumn(field).label;\n return labelItem;\n }\n };\n QueryBuilder.prototype.getLabelFromField = function (field, startIdx) {\n var fieldName = '';\n var j = 0;\n for (var k = 0; k < startIdx; k++) {\n fieldName += field[k];\n j++;\n if (j < startIdx) {\n fieldName += this.separator;\n }\n }\n return this.getColumn(fieldName).label;\n };\n QueryBuilder.prototype.processParser = function (parser, rules, levelColl, sqlLocale) {\n var j;\n var jLen;\n var rule;\n var subRules;\n var numVal = [];\n var strVal = [];\n var k;\n var kLen;\n var l;\n var lLen;\n var grpCount;\n var operator;\n var isLeftOpened = false;\n for (var i = 0, iLen = parser.length; i < iLen; i++) {\n if (parser[i][0] === 'Literal') {\n rule = { label: parser[i][1], field: parser[i][1] };\n if (parser[i + 1][0] === 'SubOperators') {\n if (parser[i + 1][1].indexOf('null') > -1 || parser[i + 1][1].indexOf('empty') > -1) {\n rule.operator = this.getOperator(' ', parser[i + 1][1], sqlLocale);\n rule.value = null;\n rule.type = this.getTypeFromColumn(rule);\n }\n else {\n var oper = parser[i + 3][1] ? parser[i + 3][1].replace(/'/g, '') : parser[i + 3][1];\n rule.operator = this.getOperator(oper, parser[i + 1][1], sqlLocale);\n }\n operator = parser[i + 1][1];\n i++;\n j = i + 1;\n jLen = iLen;\n if (sqlLocale && rule.operator === 'contains' || rule.operator === 'startswith' || rule.operator === 'endswith') {\n operator = 'like';\n }\n else if (sqlLocale && rule.operator === 'notcontains' || rule.operator === 'notstartswith' || rule.operator === 'notendswith') {\n operator = 'not like';\n }\n else if (sqlLocale) {\n operator = rule.operator;\n }\n for (j = i + 1; j < jLen; j++) {\n if (operator.indexOf('between') < 0 && parser[j][0] === 'Left') {\n isLeftOpened = true;\n }\n else if (parser[j][0] === 'Right' && isLeftOpened) {\n i = j;\n isLeftOpened = false;\n break;\n }\n else {\n if (operator.indexOf('null') > -1 || operator.indexOf('empty') > -1) {\n break;\n }\n if (operator.indexOf('like') > -1 && parser[j][0] === 'String') {\n var val = parser[j][1];\n if (parser[j][1] && parser[j][1][0] === '\\'') {\n val = parser[j][1].substring(1, parser[j][1].length - 1);\n }\n val = val ? val.replace(/%/g, '') : parser[j][1];\n rule.value = val;\n rule.type = 'string';\n }\n else if (operator.indexOf('between') > -1) {\n if (parser[j][0] === 'Literal' || parser[j][0] === 'Left') {\n break;\n }\n if (parser[j][0] === 'Number') {\n numVal.push(Number(parser[j][1]));\n }\n else if (parser[j][0] === 'String') {\n var val = parser[j][1];\n if (parser[j][1] && parser[j][1][0] === '\\'') {\n val = parser[j][1].substring(1, parser[j][1].length - 1);\n }\n strVal.push(val);\n }\n }\n else {\n if (parser[j][0] === 'Number') {\n numVal.push(Number(parser[j][1]));\n }\n else if (parser[j][0] === 'String') {\n var val = parser[j][1];\n if (parser[j][1] && parser[j][1][0] === '\\'') {\n val = parser[j][1].substring(1, parser[j][1].length - 1);\n }\n strVal.push(val);\n }\n }\n rule.type = this.getTypeFromColumn(rule);\n }\n }\n if (operator.indexOf('like') < 0) {\n if (parser[j - 1][0] === 'Number') {\n rule.value = numVal;\n rule.type = 'number';\n }\n else if (parser[j - 1][0] === 'String') {\n rule.value = strVal;\n rule.type = 'string';\n }\n else if (operator.indexOf('between') > -1 && parser[j - 1][0] === 'Conditions') {\n if (strVal.length !== 0) {\n rule.value = strVal;\n rule.type = 'string';\n }\n else {\n rule.value = numVal;\n rule.type = 'number';\n }\n }\n numVal = [];\n strVal = [];\n rule.type = this.getTypeFromColumn(rule);\n }\n }\n else if (parser[i + 1][0] === 'Operators') {\n rule.operator = this.getOperator(parser[i + 2][1], parser[i + 1][1], sqlLocale);\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 rule.value = parser[i + 2][1] ? parser[i + 2][1].replace(/'/g, '') : parser[i + 2][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 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') {\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 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 __decorate([\n Event()\n ], QueryBuilder.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], QueryBuilder.prototype, \"actionBegin\", void 0);\n __decorate([\n Event()\n ], QueryBuilder.prototype, \"beforeChange\", void 0);\n __decorate([\n Event()\n ], QueryBuilder.prototype, \"change\", void 0);\n __decorate([\n Event()\n ], QueryBuilder.prototype, \"dataBound\", void 0);\n __decorate([\n Event()\n ], QueryBuilder.prototype, \"ruleChange\", void 0);\n __decorate([\n Property({ ruleDelete: true, groupInsert: true, groupDelete: true })\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('')\n ], QueryBuilder.prototype, \"separator\", void 0);\n __decorate([\n Complex({ condition: 'and', rules: [] }, Rule)\n ], QueryBuilder.prototype, \"rule\", 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"],"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","isLocale","isRefreshed","isNotified","isAddSuccess","isNotValueChange","isFieldChange","isFieldClose","isDestroy","isGetNestedData","MultiSelect","Inject","CheckBoxSelection","getPersistData","addOnPersist","reset","isImportRules","bodyElem","querySelector","inputElement","querySelectorAll","len","className","indexOf","getComponent","destroy","parentElement","innerHTML","grpContainer","createElement","attrs","class","grpHeader","grpBody","appendChild","headerTemplate","isRoot","enableNotCondition","removeClass","levelColl","id","rule","rules","disableRuleCondition","getWrapper","getModuleName","GetRootColumnName","field","separator","split","initialize","dataColl","columnKeys","keys","cols","categories","type","groupBy","isDate","validateObj","columns","columnSort","updateCustomOperator","isNaN","Date","parse","getTime","validation","category","l10n","getConstant","push","operators","customOperators","updateSubFieldsFromColumns","label","updateSubFields","trigger","col","data","sampCol","result","compField","resData","column","_loop_1","j","sqlIdx","operator_1","operColl","values","map","join","valueIdx","this_1","focusEventHandler","event","clickEventHandler","args","groupID","tagName","animation","Animation","duration","delay","renderSummary","summaryElem","document","getElementById","txtareaElem","animate","name","groupElem","style","display","textContent","getSqlFromRules","height","scrollHeight","actionButton","deleteRule","deleteGroup","closest","addGroupElement","mRules","extend","setGroupRules","renderSummaryCollapse","forIdValue","getAttribute","targetValue","replace","group","getGroup","ariaChecked","toggleElem","getElementsByClassName","addClass","cancel","toLowerCase","beforeSuccessCallBack","observedChangeArgs","beforeRules","getValidRules","getParentGroup","filterRules","selectBtn","showButtons","groupInsert","isNullOrUndefined","maxGroupCount","enableRtl","children","addRuleElement","appendRuleElem","parentId","action","ruleElem","elem","ruleListElem","select","setAttribute","ruleIdCounter","ruleTemplate","requestType","ruleID","ruleTemplateFn","templateParser","templateID","getOperators","operatorFields","isReact","isAngular","templateColl","nodeType","isVue3","append","cloneNode","renderReactTemplates","isRuleTemplate","isInitialLoad","addRuleSuccessCallBack","trgt","act","pId","isRlTmp","dropDownList","getColumn","newRule","operator","selectedColumn","passedRule","args_1","displayMode","previousElementSibling","updateAddedRule","fieldMode","ddlField","ddlValue","dataSource","placeholder","popupHeight","close","fieldClose","bind","change","changeField","open","popupOpen","fieldModel","DropDownList","appendTo","ddlVal","getDataByValue","changeRule","itemData","child","expanded","showClearButton","changeOnBlur","dropdowntree","DropDownTree","getLabelFromColumn","index","custom","changeRuleTemplate","operVal","parentGroup","previousColumn","detach","clearQBTemplate","renderToolTip","tooltip","Tooltip","content","position","cssClass","validateFields","dropDownTreeObj","isValid","allowValidation","excludeOprs","fieldElem","indexElem","valArray","dropDownObj","tempElem","ruleElemCln","validateRule","valElem","jLen","refreshLevelColl","obj","groupElement","level","refreshLevel","childElem","ruleList","iLen","groupCount","slice","groupTemplate","glueElem","inputElem","labelElem","grpActElem","groupBtn","groupHdrElem","grpBodyElem","rulesElem","role","clsName","filterElem","ruleDelete","delBtnElem","isGroup","isBtnClick","addGroupSuccess","eventTarget","dltGroupBtn","groupIdCounter","headerTemplateFn","andInpElem","orInpElem","andLblElem","orLblElem","btnGroupId","groupDelete","Button","iconCss","rippleEffect","selector","childElems","grpLen","addGroups","notElem","classList","add","args_2","notCondition","undefined","DropDownButton","items","beforeOpen","grpId","chgrpId","childGroupID","template","groupHdr","getRuleCollection","headerFn","notifyChange","grpElement","ruleElement","format","getFormat","intl","formatDate","templateChange","updateRules","eventsArgs","grpElem","validateValue","prevOper","arrOper","grpEle","destroyControls","changeValue","contains","dateElement","rbValue","parseInt","immediateModeDelay","window","clearInterval","timer","setInterval","filterValue","grID","rlID","ele","changeValueSuccessCallBack","ddl","item","popupObj","getItemData","customArgs","isInteracted","previousItemData","prevItemData","previousItem","e","previousValue","ddtElem","ddt","oldValue","dataBind","destroySubFields","subFieldElem","ddlArgs","ddlObj","changeFilter","flt","dl","rl","tmpRl","dArg","selectedField","fieldChangeSuccess","operatorElem","changeOperator","opr","selectedIndex","operatorChangeSuccess","changeRuleValues","tempRule","tooltipElem","createSubFields","nextElementSibling","remove","subFieldValue","subFilterCounter","insertBefore","ruleId","subFieldData","subField","toString","currOper","prevValue","parentElem","operatorList","oprElem","childElementCount","fieldObj","renderValues","ddlOperator","operatorModel","isField","popup","divElement","templateDestroy","templateElement","elemId","temp","templateElements","getValue","elementId","elements","getValues","original","fieldColl","dataObj","fieldStr","createNestedObject","lastIndex","k","getDistinctValues","nest","isNested","_loop_2","this_2","forEach","renderMultiSelect","selectedValue","ds","isFetched","isValues","fieldValue","selectedRule","multiSelectValue","dataManager","query","Query","mode","width","closePopup","actionBegin","multiSelectOpen","valueModel","multiSelectModel","multiSelectObj","DataManager","bindMultiSelectData","getMultiSelectData","dummyData","deferred","Deferred","executeQuery","multiselectObj","hideSpinner","createSpinner","showSpinner","then","actual","catch","reject","spinnerElem","Browser","isDevice","processTemplate","container","tempElements","write","setDefaultValue","isArryValue","isNumber","renderStringValue","idx","ruleValElem","selectedVal","columnData","isTemplate","isPublic","txtBox","input","textBoxModel","inputobj","TextBox","minWidth","renderNumberValue","selVal","txtInp","numericTxt","step","numericTextBoxModel","numeric","NumericTextBox","processValueString","numArr","strArr","kLen","parseDate","formatOpt","dParser","getDateParser","skeleton","renderControls","isRendered","length_1","processBoolValues","datepick","datePicker","place","formatObj","locale","getLocale","datePickerModel","DatePicker","orgValue","isCheck","radioBtn","checked","radioButtonModel","radiobutton","RadioButton","getOperatorIndex","getPreviousItemData","isRender","filtElem","getElementsByTagName","filtObj","isTempRendered","setColumnTemplate","inputLen","renderTemplate","observedActionArgs","actionBeginSuccessCallBack","Element","columnTemplateFn","valElemColl","updateValues","controlName","radioBtnObj","refresh","selectedDate","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","addRules","groups","importRules","initWrapper","trim","summaryView","notGroupRtl","readonly","enableReadonly","buttons","button","contentElem","textElem","styles","editElem","divElem","collapseElem","title","sortDirection","executeLocal","sortByDesc","sortBy","onChangeNotGroup","checkNotGroup","orgRule","onPropertyChanged","newProp","oldProp","_i","properties_1","enablePersistence","Internationalization","preRender","getUniqueID","defaultLocale","StartsWith","EndsWith","Contains","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","L10n","parser","stringOperator","dateOperator","booleanOperator","numberOperator","equal","notequal","greaterthan","greaterthanorequal","lessthan","in","notin","lessthanorequal","startswith","endswith","between","notbetween","isnull","isnotnull","isempty","isnotempty","notstartswith","notendswith","notcontains","sqlOperators","toUpperCase","render","stringOper","numberOper","concat","executeDataManager","take","initControl","renderComplete","templateCompiler","compile","error","wireEvents","wrapper","EventHandler","keyBoardHandler","isParent","groupLevel","groupId","deleteGroupSuccessCallBack","nextElem","prevElem","removeString","remRule","ruleElemColl","isTemplateRendered","isPlatformTemplate","splice","deleteRuleSuccessCallBack","clnruleElem","err","keyCode","preventDefault","clearTemplate","count","andElem","orElem","disabled","currentRule","getRules","ruleCondtion","isValidRule","customObj","isQuestion","notValue","setRules","getRule","HTMLElement","deleteGroups","groupIdColl","getFilteredRecords","predicate","getPredicate","dataManagerQuery","where","deleteRules","ruleIdColl","getDataManagerQuery","pred","pred2","ruleValue","ignoreCase","ignoreOper","and","or","isDateFilter","dateOperColl","matchCase","getDate","isTime","datePredicate","arrayPredicate","Predicate","localeString","cldrData","setTime","date","isStart","setHours","startDate","endDate","nullValue","gte","currDate","setMinutes","setSeconds","isReset","renderGroup","tglBtnElem","renderRule","getInstance","deleteGroupElems","addRuleGroupElems","removeRuleElems","elems","enableBtnGroup","isDateFunction","dateFunc","getSqlString","enableEscape","queryStr","sqlLocale","valueStr","ruleOpertor","ruleCondition","setRulesFromSql","sqlString","ruleModel","getRulesFromSql","sqlParser","processParser","allowEscape","str","st","parseSqlStrings","conditions","subOp","regexStr","matchValue","test","RegExp","exec","lastPasrser","checkLiteral","checkNumberLiteral","isClosed","lastParser","secParser","betweenParser","betweenOperator","getOperator","localeOperator","=","!=","<",">","<=",">=","not in","not between","is empty","is null","is not null","is not empty","getTypeFromColumn","l","getLabelFromField","startIdx","fieldName","subRules","lLen","grpCount","numVal","strVal","isLeftOpened","val","substring","pop","Event","Complex","NotifyPropertyChanges","Component"],"mappings":"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"}
1
+ {"version":3,"file":"ej2-querybuilder.umd.min.js","sources":["../src/query-builder/query-builder.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 */\nimport { Component, NotifyPropertyChanges, getComponent, Browser, compile, append } 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, 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 } 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 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(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' };\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 MultiSelect.Inject(CheckBoxSelection);\n return _this;\n }\n QueryBuilder.prototype.getPersistData = function () {\n return this.addOnPersist(['rule']);\n };\n /**\n * Clears the rules without root rule.\n *\n * @returns {void}.\n */\n QueryBuilder.prototype.reset = function () {\n this.isImportRules = false;\n var bodyElem = this.element.querySelector('.e-group-body');\n var inputElement = this.element.querySelectorAll('input.e-control');\n for (var i = 0, len = inputElement.length; i < len; i++) {\n if (inputElement[i].className.indexOf('e-tooltip') > -1) {\n getComponent(inputElement[i], 'tooltip').destroy();\n }\n else if (inputElement[i].parentElement.className.indexOf('e-tooltip') > -1) {\n getComponent(inputElement[i].parentElement, 'tooltip').destroy();\n }\n }\n if (bodyElem) {\n bodyElem.innerHTML = '';\n }\n else {\n var grpContainer = this.createElement('div', { attrs: { class: 'e-group-container' } });\n var grpHeader = this.createElement('div', { attrs: { class: 'e-group-header' } });\n var grpBody = this.createElement('div', { attrs: { class: 'e-group-body' } });\n grpContainer.appendChild(grpHeader).appendChild(grpBody);\n this.element.appendChild(grpContainer);\n bodyElem = this.element.querySelector('.e-group-body');\n }\n if (this.headerTemplate && this.isRoot) {\n this.element.innerHTML = '';\n this.isRoot = false;\n }\n if (this.enableNotCondition) {\n removeClass(this.element.querySelectorAll('.e-qb-toggle'), 'e-active-toggle');\n }\n bodyElem.appendChild(this.createElement('div', { attrs: { class: 'e-rule-list' } }));\n this.levelColl[this.element.id + '_group0'] = [0];\n this.rule = { condition: 'and', not: false, rules: [] };\n this.disableRuleCondition(bodyElem.parentElement);\n };\n QueryBuilder.prototype.getWrapper = function () {\n return this.element;\n };\n QueryBuilder.prototype.getModuleName = function () {\n return 'query-builder';\n };\n QueryBuilder.prototype.GetRootColumnName = function (field) {\n return this.separator ? field.split(this.separator)[0] : field;\n };\n QueryBuilder.prototype.initialize = function () {\n if (this.dataColl.length) {\n var columnKeys = Object.keys(this.dataColl[0]);\n var cols = [];\n var categories = [];\n var type = void 0;\n var groupBy = false;\n var isDate = false;\n var value = void 0;\n var validateObj = { isRequired: true, min: 0, max: Number.MAX_VALUE };\n if (this.columns.length) {\n this.columnSort();\n var columns = this.columns;\n for (var i = 0, len = columns.length; i < len; i++) {\n this.updateCustomOperator(columns[i]);\n if (!columns[i].type) {\n if (columnKeys.indexOf(columns[i].field) > -1) {\n value = this.dataColl[0][columns[i].field];\n type = typeof value;\n if (type === 'string') {\n isDate = !isNaN(Date.parse(value));\n }\n else if (type === 'object') {\n isDate = value instanceof Date && !isNaN(value.getTime());\n type = 'string';\n }\n columns[i].type = type;\n isDate = false;\n }\n type = 'string';\n }\n if (!columns[i].validation) {\n columns[i].validation = validateObj;\n }\n if (columns[i].category) {\n groupBy = true;\n }\n else {\n columns[i].category = this.l10n.getConstant('OtherFields');\n }\n if (categories.indexOf(columns[i].category) < 0) {\n categories.push(columns[i].category);\n }\n if (!columns[i].operators || this.isLocale) {\n columns[i].operators = this.customOperators[columns[i].type + 'Operator'];\n }\n }\n if (groupBy && (categories.length > 1 || categories[0] !== this.l10n.getConstant('OtherFields'))) {\n this.fields = { text: 'label', value: 'field', groupBy: 'category' };\n }\n this.updateSubFieldsFromColumns(this.columns);\n }\n else {\n for (var i = 0, len = columnKeys.length; i < len; i++) {\n value = this.dataColl[0][columnKeys[i]];\n type = typeof value;\n if (type === 'string') {\n isDate = !isNaN(Date.parse(value));\n }\n else if (type === 'object' && !Object.keys(value).length) {\n isDate = value instanceof Date && !isNaN(value.getTime());\n type = 'string';\n }\n cols[i] = { 'field': columnKeys[i], 'label': columnKeys[i], 'type': isDate ? 'date' : type,\n 'validation': validateObj };\n isDate = false;\n cols[i].operators = this.customOperators[cols[i].type + 'Operator'];\n if (type === 'object') {\n this.updateSubFields(value, cols[i]);\n }\n }\n this.columns = cols;\n }\n }\n else if (this.columns.length) {\n var columns = this.columns;\n for (var i = 0, len = columns.length; i < len; i++) {\n if (columns[i].category) {\n this.fields = { text: 'label', value: 'field', groupBy: 'category' };\n }\n else {\n columns[i].category = this.l10n.getConstant('OtherFields');\n }\n this.updateCustomOperator(columns[i]);\n if (!columns[i].operators || this.isLocale) {\n columns[i].operators = this.customOperators[columns[i].type + 'Operator'];\n }\n }\n this.updateSubFieldsFromColumns(this.columns);\n }\n this.trigger('dataBound', { type: 'dataBound' });\n };\n QueryBuilder.prototype.updateSubFieldsFromColumns = function (col, field) {\n for (var i = 0; i < col.length; i++) {\n if (this.separator !== '' && col[i].field.indexOf(this.separator) < 0) {\n col[i].field = field ? field + this.separator + col[i].field : col[i].field;\n }\n if (col[i].operators) {\n this.updateCustomOperator(col[i]);\n }\n else if (col[i].type && col[i].type !== 'object') {\n col[i].operators = this.customOperators[col[i].type + 'Operator'];\n }\n if (col[i].columns) {\n col[i].type = 'object';\n this.updateSubFieldsFromColumns(col[i].columns, col[i].field);\n }\n }\n };\n QueryBuilder.prototype.updateSubFields = function (value, col, data) {\n var sampCol;\n col.columns = [];\n var columnKeys = Object.keys(value);\n var field;\n var label;\n var type;\n var result;\n data = data ? data : this.dataColl[0];\n for (var i = 0, len = columnKeys.length; i < len; i++) {\n var compField = col.field.split('.');\n if (data) {\n result = data[compField[compField.length - 1]][columnKeys[i]];\n }\n else {\n result = this.dataColl[0][col.field][columnKeys[i]];\n }\n var resData = data[col.field.split(this.separator)[col.field.split(this.separator).length - 1]];\n type = typeof result;\n field = col.field + this.separator + columnKeys[i];\n label = columnKeys[i];\n type = (type === 'object' && !isNaN(Date.parse(result))) ? 'date' : type;\n sampCol = { field: field, label: label, type: type };\n if (type !== 'object') {\n sampCol.operators = this.customOperators[type + 'Operator'];\n }\n col.columns.push(sampCol);\n if (type === 'object') {\n this.updateSubFields(result, sampCol, resData);\n }\n }\n };\n QueryBuilder.prototype.updateCustomOperator = function (column) {\n if (column.operators) {\n var _loop_1 = function (j) {\n var sqlIdx = Object.keys(column.operators[j]).indexOf('sqlOperator');\n if (sqlIdx > -1) {\n var operator_1 = column.operators[j];\n var operColl = Object.keys(operator_1);\n var values = operColl.map(function (key) { return operator_1[\"\" + key]; }).join(',').split(',');\n var valueIdx = operColl.indexOf('value');\n this_1.operators[values[valueIdx]] = values[sqlIdx];\n }\n };\n var this_1 = this;\n for (var j = 0; j < column.operators.length; j++) {\n _loop_1(j);\n }\n }\n };\n QueryBuilder.prototype.focusEventHandler = function (event) {\n this.target = event.target;\n };\n QueryBuilder.prototype.clickEventHandler = function (event) {\n var _this = this;\n var target = event.target;\n var args;\n this.isImportRules = false;\n var groupID;\n if (target.tagName === 'SPAN') {\n target = target.parentElement;\n }\n if (target.className.indexOf('e-collapse-rule') > -1) {\n var animation = new Animation({ duration: 1000, delay: 0 });\n if (this.element.querySelectorAll('.e-summary-content').length < 1) {\n this.renderSummary();\n }\n var summaryElem = document.getElementById(this.element.id + '_summary_content');\n var txtareaElem = summaryElem.querySelector('.e-summary-text');\n animation.animate('.e-query-builder', { name: 'SlideLeftIn' });\n var groupElem = this.element.querySelector('.e-group-container');\n groupElem.style.display = 'none';\n txtareaElem.textContent = this.getSqlFromRules(this.rule);\n summaryElem.style.display = 'block';\n txtareaElem.style.height = txtareaElem.scrollHeight + 'px';\n }\n if (target.tagName === 'BUTTON' && target.className.indexOf('e-qb-toggle') < 0) {\n if (target.className.indexOf('e-removerule') > -1) {\n this.actionButton = target;\n this.deleteRule(target);\n }\n else if (target.className.indexOf('e-deletegroup') > -1) {\n this.actionButton = target;\n this.deleteGroup(closest(target, '.e-group-container'));\n }\n else if (target.className.indexOf('e-edit-rule') > -1) {\n var animation = new Animation({ duration: 1000, delay: 0 });\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 }\n }\n else if ((target.tagName === 'LABEL' && target.parentElement.className.indexOf('e-btn-group') > -1) ||\n target.className.indexOf('e-qb-toggle') > -1) {\n var element = closest(target, '.e-group-container');\n if (!this.headerTemplate) {\n var forIdValue = target.getAttribute('for');\n var targetValue = void 0;\n if (forIdValue) {\n targetValue = document.getElementById(forIdValue).getAttribute('value');\n }\n groupID = element.id.replace(this.element.id + '_', '');\n var group = this.getGroup(groupID);\n var ariaChecked = void 0;\n if (this.enableNotCondition) {\n if (target.className.indexOf('e-qb-toggle') > -1) {\n var toggleElem = element.getElementsByClassName('e-qb-toggle')[0];\n if (toggleElem.className.indexOf('e-active-toggle') > -1) {\n removeClass([toggleElem], 'e-active-toggle');\n ariaChecked = false;\n }\n else {\n addClass([toggleElem], 'e-active-toggle');\n ariaChecked = true;\n }\n targetValue = group.condition;\n }\n else {\n ariaChecked = group.not;\n }\n }\n args = { groupID: groupID, cancel: false, type: 'condition', value: targetValue.toLowerCase() };\n if (this.enableNotCondition) {\n args = { groupID: groupID, cancel: false, type: 'condition', value: targetValue.toLowerCase(),\n 'not': ariaChecked };\n }\n }\n if (!this.isImportRules) {\n this.trigger('beforeChange', args, function (observedChangeArgs) {\n _this.beforeSuccessCallBack(observedChangeArgs, target);\n });\n }\n else {\n this.beforeSuccessCallBack(args, target);\n }\n this.target = target;\n }\n };\n QueryBuilder.prototype.beforeSuccessCallBack = function (args, target) {\n if (!args.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 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 this.filterRules(beforeRules, this.getValidRules(this.rule), 'condition');\n }\n };\n QueryBuilder.prototype.selectBtn = function (target, event) {\n if (event.name === 'beforeOpen') {\n if (this.showButtons.groupInsert || isNullOrUndefined(this.showButtons.groupInsert)) {\n if (this.element.querySelectorAll('.e-group-container').length >= this.maxGroupCount + 1) {\n addClass([event.element.querySelector('li span.e-addgroup').parentElement], 'e-button-hide');\n }\n else {\n removeClass([event.element.querySelector('li span.e-addgroup').parentElement], 'e-button-hide');\n }\n if (this.enableRtl) {\n addClass([event.element.querySelector('li').parentElement], 'e-rtl');\n }\n }\n else {\n addClass([event.element.querySelector('li span.e-addgroup').parentElement], 'e-button-hide');\n }\n }\n else if (event.element.children[0].className.indexOf('e-addrule') > -1) {\n this.addRuleElement(closest(target, '.e-group-container'), {});\n }\n else if (event.element.children[0].className.indexOf('e-addgroup') > -1) {\n this.addGroupElement(true, closest(target, '.e-group-container'), '', true);\n }\n };\n QueryBuilder.prototype.appendRuleElem = function (target, column, type, parentId, action, rule) {\n var ruleElem;\n var elem;\n var ruleListElem = target.querySelector('.e-rule-list');\n var args;\n if (type === 'change') {\n ruleElem = select('#' + parentId, target);\n }\n else {\n ruleElem = this.createElement('div', { attrs: { class: 'e-rule-container' } });\n ruleElem.setAttribute('id', target.id + '_rule' + this.ruleIdCounter);\n ruleListElem.appendChild(ruleElem);\n this.ruleIdCounter++;\n }\n if (column && column.ruleTemplate && rule) {\n args = { requestType: 'template-initialize', ruleID: ruleElem.id, action: action, fields: this.fields, rule: rule };\n this.trigger('actionBegin', args);\n this.ruleTemplateFn = this.templateParser(column.ruleTemplate);\n var templateID = this.element.id + column.field;\n var template = void 0;\n args.fields = this.fields;\n args.columns = this.columns;\n if (rule.field === '') {\n rule.field = column.field;\n }\n args.operators = this.getOperators(rule.field);\n args.operatorFields = { text: 'key', value: 'value' };\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.isReact) {\n template = this.ruleTemplateFn(args, this, ruleElem.id, templateID)[0];\n elem = template;\n elem.className += ' e-rule-field';\n ruleElem.appendChild(elem);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n }\n else if (this.isAngular) {\n var templateColl = this.ruleTemplateFn(args, this, ruleElem.id, templateID);\n template = (templateColl[0].nodeType === 3) ? templateColl[1] : templateColl[0];\n elem = template;\n elem.className += ' e-rule-field';\n ruleElem.appendChild(elem);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n }\n else if (this.isVue3) {\n template = this.ruleTemplateFn(args, this, 'Template', templateID);\n elem = template;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n append(elem, ruleElem);\n ruleElem.children[ruleElem.children.length - 1].className += ' e-rule-field';\n }\n else {\n template = this.ruleTemplateFn(args, this, 'Template', templateID)[0];\n elem = template;\n elem.className += ' e-rule-field';\n ruleElem.appendChild(elem);\n }\n }\n else {\n elem = this.ruleElem.querySelector('.e-rule-field').cloneNode(true);\n ruleElem.appendChild(elem);\n }\n if (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) {\n this.trigger('beforeChange', args, function (observedChangeArgs) {\n _this.addRuleSuccessCallBack(observedChangeArgs, target, rule, column, action, parentId, isRuleTemplate);\n });\n }\n else {\n this.isInitialLoad = false;\n this.addRuleSuccessCallBack(args, target, rule, column, action, parentId, isRuleTemplate);\n }\n };\n QueryBuilder.prototype.addRuleSuccessCallBack = function (args, trgt, rule, col, act, pId, isRlTmp) {\n var height = (this.element.className.indexOf('e-device') > -1) ? '250px' : '200px';\n var ruleID;\n var column = (rule && rule.field) ? this.getColumn(rule.field) : col ? col : this.columns[0];\n var operators;\n var dropDownList;\n var ruleElem;\n var newRule = { 'label': '', 'field': '', 'type': '', 'operator': '' };\n if (!args.cancel) {\n if (column && column.ruleTemplate && rule.field) {\n this.selectedColumn = column;\n operators = this.selectedColumn.operators;\n newRule = { 'label': column.label, 'field': column.field, 'type': column.type, 'operator': operators[0].value };\n var passedRule = Object.keys(rule).length ? rule : newRule;\n ruleElem = this.appendRuleElem(trgt, column, act, pId, 'field', passedRule);\n var args_1 = { requestType: 'template-create', action: 'insert-rule', ruleID: ruleElem.id,\n fields: this.fields, rule: passedRule };\n this.trigger('actionBegin', args_1);\n }\n else {\n ruleElem = this.appendRuleElem(trgt, column, act, pId, 'field');\n ruleElem.querySelector('.e-filter-input').setAttribute('id', ruleElem.id + '_filterkey');\n var element = ruleElem.querySelector('button');\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 element = this.createElement('span', { attrs: { class: 'e-btn-icon e-icons e-delete-icon' } });\n ruleElem.querySelector('button').appendChild(element);\n }\n }\n if (this.displayMode === 'Vertical' || this.element.className.indexOf('e-device') > -1) {\n ruleElem.className = 'e-rule-container e-vertical-mode';\n }\n else {\n ruleElem.className = 'e-rule-container e-horizontal-mode';\n }\n if (ruleElem.previousElementSibling && ruleElem.previousElementSibling.className.indexOf('e-rule-container') > -1) {\n if (ruleElem.className.indexOf('e-joined-rule') < 0) {\n ruleElem.className += ' e-joined-rule';\n }\n if (ruleElem.previousElementSibling.className.indexOf('e-prev-joined-rule') < 0) {\n ruleElem.previousElementSibling.className += ' e-prev-joined-rule';\n }\n }\n if (ruleElem.previousElementSibling && ruleElem.previousElementSibling.className.indexOf('e-group-container') > -1 &&\n ruleElem.className.indexOf('e-separate-rule') < 0) {\n ruleElem.className += ' e-separate-rule';\n }\n if (!this.isImportRules) {\n this.updateAddedRule(trgt, rule, newRule, isRlTmp, pId);\n }\n if (!column || (column && !column.ruleTemplate) || !rule.field) {\n if (this.fieldMode === 'Default') {\n var ddlField = void 0;\n var ddlValue = void 0;\n if (this.separator && rule.field) {\n ddlValue = this.GetRootColumnName(rule.field);\n }\n else {\n ddlValue = this.isImportRules ? this.GetRootColumnName(rule.field) : rule.field;\n }\n ddlField = {\n dataSource: this.columns,\n fields: this.fields, placeholder: this.l10n.getConstant('SelectField'),\n popupHeight: ((this.columns.length > 5) ? height : 'auto'), close: this.fieldClose.bind(this, ruleElem.id + '_filterkey'),\n change: this.changeField.bind(this), value: rule ? ddlValue : null, open: this.popupOpen.bind(this, true)\n };\n if (this.fieldModel) {\n ddlField = __assign({}, ddlField, this.fieldModel);\n }\n dropDownList = new DropDownList(ddlField);\n dropDownList.appendTo('#' + ruleElem.id + '_filterkey');\n var ddlVal = void 0;\n if (this.separator && rule.field) {\n ddlVal = this.GetRootColumnName(rule.field);\n }\n else {\n ddlVal = this.isImportRules ? this.GetRootColumnName(rule.field) : dropDownList.value;\n }\n this.selectedColumn = dropDownList.getDataByValue(ddlVal);\n if (Object.keys(rule).length) {\n this.changeRule(rule, {\n element: dropDownList.element, itemData: this.selectedColumn\n });\n }\n }\n else {\n var ddlField = void 0;\n var ddlValue = this.isImportRules ? rule.field : rule.field;\n ddlField = {\n fields: { dataSource: this.columns,\n value: 'field', text: 'label', child: 'columns', expanded: 'expanded' },\n placeholder: this.l10n.getConstant('SelectField'), showClearButton: false,\n popupHeight: ((this.columns.length > 5) ? height : 'auto'), changeOnBlur: false,\n change: this.changeField.bind(this), value: !isNullOrUndefined(ddlValue) ? [ddlValue] : null,\n open: this.popupOpen.bind(this, false)\n };\n if (this.fieldModel) {\n ddlField = __assign({}, ddlField, this.fieldModel);\n }\n var dropdowntree = new DropDownTree(ddlField);\n dropdowntree.appendTo('#' + ruleElem.id + '_filterkey');\n if (!isNullOrUndefined(dropdowntree.value)) {\n var value = this.getLabelFromColumn(dropdowntree.value[0]);\n dropdowntree.element.value = value;\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var ddlVal = !isNullOrUndefined(rule.field) ?\n this.GetRootColumnName(rule.field) : dropdowntree.value;\n this.selectedColumn = this.getColumn(ddlVal);\n if (Object.keys(rule).length) {\n this.changeRule(rule, {\n element: dropdowntree.element, itemData: this.selectedColumn\n });\n }\n }\n }\n ruleID = ruleElem.id.replace(this.element.id + '_', '');\n if (!this.isImportRules) {\n this.trigger('change', { groupID: trgt.id.replace(this.element.id + '_', ''), ruleID: ruleID, type: 'insertRule' });\n }\n }\n };\n QueryBuilder.prototype.updateAddedRule = function (target, rule, newRule, isRuleTemplate, pId) {\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 index++;\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 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 }\n else {\n if (custom) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n newRule.custom = custom;\n }\n rules.rules.push(newRule);\n }\n }\n this.disableRuleCondition(target, rules);\n };\n QueryBuilder.prototype.changeRuleTemplate = function (column, element) {\n var operVal = this.selectedColumn.operators;\n if (column.ruleTemplate) {\n return;\n }\n else {\n var parentGroup = closest(element, '.e-group-container');\n var parentId = closest(element, '.e-rule-container').id;\n if (this.previousColumn && this.previousColumn.ruleTemplate) {\n detach(element.closest('[id=\"' + parentId + '\"]').querySelector('.e-rule-field'));\n this.clearQBTemplate([parentId]);\n }\n if (column) {\n var rule = { field: column.field, label: column.label, operator: operVal[0].value, value: '' };\n this.addRuleElement(parentGroup, rule, column, 'change', parentId, true);\n }\n }\n };\n QueryBuilder.prototype.renderToolTip = function (element) {\n var tooltip = new Tooltip({ content: this.l10n.getConstant('ValidationMessage'),\n position: 'BottomCenter', cssClass: 'e-querybuilder-error' });\n tooltip.appendTo(element);\n tooltip.open(element);\n };\n /**\n * Validate the conditions and it display errors for invalid fields.\n *\n * @returns {boolean} - Validation\n */\n QueryBuilder.prototype.validateFields = function () {\n var isValid = true;\n var dropDownTreeObj;\n if (this.allowValidation) {\n var excludeOprs = ['isnull', 'isnotnull', 'isempty', 'isnotempty'];\n var i = void 0;\n var len = void 0;\n var fieldElem = void 0;\n var indexElem = void 0;\n var valArray = [];\n var groupElem = void 0;\n var index = void 0;\n var dropDownObj = void 0;\n var tempElem = void 0;\n var rule = void 0;\n var ruleElemCln = this.element.querySelectorAll('.e-rule-container');\n for (i = 0, len = ruleElemCln.length; i < len; i++) {\n var validateRule = void 0;\n groupElem = closest(ruleElemCln[i], '.e-group-container');\n rule = this.getParentGroup(groupElem);\n index = 0;\n indexElem = tempElem = ruleElemCln[i];\n if (this.fieldMode === 'DropdownTree') {\n dropDownTreeObj = getComponent(ruleElemCln[i].querySelector('.e-rule-filter input.e-dropdowntree'), 'dropdowntree');\n if (dropDownTreeObj && dropDownTreeObj.value && dropDownTreeObj.value.length) {\n this.selectedColumn = this.getColumn(dropDownTreeObj.value[0]);\n validateRule = this.selectedColumn.validation;\n }\n }\n else {\n dropDownObj = getComponent(ruleElemCln[i].querySelector('.e-rule-filter input.e-dropdownlist'), 'dropdownlist');\n if (dropDownObj && dropDownObj.value) {\n this.selectedColumn = dropDownObj.getDataByValue(dropDownObj.value);\n validateRule = !isNullOrUndefined(dropDownObj.index) && this.selectedColumn.validation;\n }\n }\n fieldElem = tempElem.querySelector('.e-rule-field input.e-control');\n if (validateRule && validateRule.isRequired) {\n while (indexElem && indexElem.previousElementSibling !== null) {\n indexElem = indexElem.previousElementSibling;\n index++;\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) {\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) < 0 &&\n (isNullOrUndefined(rule.rules[index].value) &&\n rule.rules[index].type !== 'date') || rule.rules[index].value === '' ||\n (rule.rules[index].value instanceof Array && valArray.length < 1)) {\n var valElem = tempElem.querySelectorAll('.e-rule-value .e-control');\n isValid = false;\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 }\n }\n else if ((dropDownObj && dropDownObj.element && isNullOrUndefined(dropDownObj.index)) ||\n (dropDownTreeObj && dropDownTreeObj.element && (isNullOrUndefined(dropDownTreeObj.value) ||\n dropDownTreeObj.value.length < 1))) {\n if (fieldElem.parentElement.className.indexOf('e-tooltip') < 0) {\n this.renderToolTip(fieldElem.parentElement);\n }\n isValid = false;\n }\n }\n }\n return isValid;\n };\n QueryBuilder.prototype.refreshLevelColl = function () {\n this.levelColl = {};\n var groupElem = this.element.querySelector('.e-group-container');\n if (groupElem) {\n this.levelColl[groupElem.id] = [0];\n var obj = { groupElement: groupElem, level: [0] };\n this.refreshLevel(obj);\n }\n };\n QueryBuilder.prototype.refreshLevel = function (obj) {\n var ruleList = obj.groupElement.querySelector('.e-rule-list').children;\n var childElem;\n var groupElem = obj.groupElement;\n var i;\n var iLen = ruleList.length;\n var groupCount = 0;\n for (i = 0; i < iLen; i++) {\n childElem = ruleList[i];\n if (childElem.className.indexOf('e-group-container') > -1) {\n obj.level.push(groupCount);\n this.levelColl[childElem.id] = obj.level.slice();\n groupCount++;\n obj.groupElement = childElem;\n obj = this.refreshLevel(obj);\n }\n }\n var ruleListElem = closest(groupElem, '.e-rule-list');\n obj.groupElement = ruleListElem ? closest(ruleListElem, '.e-group-container') : groupElem;\n obj.level = this.levelColl[obj.groupElement.id].slice();\n return obj;\n };\n QueryBuilder.prototype.groupTemplate = function () {\n var glueElem;\n var inputElem;\n var labelElem;\n var grpActElem;\n var groupBtn;\n var groupElem = this.createElement('div', { attrs: { class: 'e-group-container' } });\n var groupHdrElem = this.createElement('div', { attrs: { class: 'e-group-header' } });\n var grpBodyElem = this.createElement('div', { attrs: { class: 'e-group-body' } });\n var rulesElem = this.createElement('div', { attrs: { class: 'e-rule-list' } });\n groupElem.appendChild(groupHdrElem);\n grpBodyElem.appendChild(rulesElem);\n groupElem.appendChild(grpBodyElem);\n // create button group in OR and AND process\n if (!this.headerTemplate) {\n glueElem = this.createElement('div', { attrs: { class: 'e-lib e-btn-group', role: 'group' } });\n if (this.enableNotCondition) {\n inputElem = this.createElement('button', { attrs: { type: 'button', class: 'e-qb-toggle' } });\n glueElem.appendChild(inputElem);\n }\n inputElem = this.createElement('input', { attrs: { type: 'radio', class: 'e-btngroup-and', value: 'AND' } });\n glueElem.appendChild(inputElem);\n labelElem = this.createElement('label', { attrs: { class: 'e-lib e-btn e-btngroup-and-lbl e-small' },\n innerHTML: this.l10n.getConstant('AND') });\n glueElem.appendChild(labelElem);\n inputElem = this.createElement('input', { attrs: { type: 'radio', class: 'e-btngroup-or', value: 'OR' } });\n glueElem.appendChild(inputElem);\n labelElem = this.createElement('label', { attrs: { class: 'e-lib e-btn e-btngroup-or-lbl e-small' },\n innerHTML: this.l10n.getConstant('OR') });\n glueElem.appendChild(labelElem);\n groupHdrElem.appendChild(glueElem);\n grpActElem = this.createElement('div', { attrs: { class: 'e-group-action' } });\n groupBtn = this.createElement('button', { attrs: { type: 'button', class: 'e-add-btn' } });\n grpActElem.appendChild(groupBtn);\n groupHdrElem.appendChild(grpActElem);\n }\n return groupElem;\n };\n QueryBuilder.prototype.ruleTemplate = function () {\n var tempElem;\n var clsName;\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 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.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(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) {\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 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 var groupElem = this.groupElem.cloneNode(true);\n groupElem.setAttribute('id', this.element.id + '_group' + this.groupIdCounter);\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 if (!this.headerTemplate) {\n groupElem.querySelector('.e-group-action').appendChild(dltGroupBtn);\n }\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 ruleList.appendChild(groupElem);\n var level = this.levelColl[target.id].slice(0);\n level.push(grpLen);\n this.levelColl[groupElem.id] = level;\n if (!this.isImportRules) {\n this.isAddSuccess = true;\n this.addGroups([], target.id.replace(this.element.id + '_', ''));\n this.isAddSuccess = false;\n if (isBtnClick) {\n this.addRuleElement(groupElem, {});\n }\n }\n }\n else {\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 var tglBtn = new Button({ content: this.l10n.getConstant('NOT'), cssClass: 'e-btn e-small' });\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 this.updatedRule = null;\n if (this.headerTemplate) {\n var args_2 = { requestType: 'header-template-create', ruleID: groupElem.id, condition: condition,\n notCondition: this.enableNotCondition ? not : undefined };\n this.trigger('actionBegin', args_2);\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 if (!this.isImportRules) {\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.headerTemplateFn = function (groupElem, not, condition, rule, groupID) {\n var template;\n var templateID = this.element.id + '_header';\n var args;\n var groupHdr = groupElem.querySelector('.e-group-header');\n if (this.headerTemplate) {\n args = { requestType: 'header-template-initialize', ruleID: groupElem.id,\n notCondition: this.enableNotCondition ? not : undefined, condition: condition, rule: this.getRuleCollection(rule, true), groupID: groupID };\n this.trigger('actionBegin', args);\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 groupHdr.appendChild(template);\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 groupHdr.appendChild(template);\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 // eslint-disable-next-line @typescript-eslint/no-explicit-any\n append(template, groupHdr);\n }\n else {\n template = this.headerFn(args, this, 'Template', templateID)[0];\n groupHdr.appendChild(template);\n }\n this.renderReactTemplates();\n }\n return groupElem;\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 rules.condition = value;\n return;\n }\n while (ruleElement && ruleElement.previousElementSibling !== null) {\n ruleElement = ruleElement.previousElementSibling;\n index++;\n }\n var rule = rules.rules[index];\n var column = this.getColumn(rule.field);\n var format = this.getFormat(column.format);\n if (column.type === 'date') {\n if (value instanceof Date) {\n value = this.intl.formatDate(value, format);\n }\n else if (value instanceof Array) {\n for (var i = 0; i < value.length; i++) {\n if (value[i] && value[i] instanceof Date) {\n value[i] = this.intl.formatDate(value[i], format);\n }\n }\n }\n }\n if (column.ruleTemplate) {\n this.templateChange(element, value, type);\n }\n else {\n this.isNotified = true;\n this.updateRules(element, value);\n this.isNotified = false;\n }\n };\n QueryBuilder.prototype.templateChange = function (element, value, type) {\n var grpElem = closest(element, '.e-group-container');\n var eventsArgs;\n var rules = this.getParentGroup(grpElem);\n var ruleElem = closest(element, '.e-rule-container');\n var index = 0;\n if (this.allowValidation) {\n this.validateValue(rules, ruleElem);\n }\n while (ruleElem && ruleElem.previousElementSibling !== null) {\n ruleElem = ruleElem.previousElementSibling;\n index++;\n }\n var rule = rules.rules[index];\n if (type === 'field') {\n this.selectedColumn = this.getColumn(value);\n }\n else if (rule) {\n this.selectedColumn = this.getColumn(rule.field);\n }\n var operVal;\n this.previousColumn = this.getColumn(rule.field);\n var beforeRules = this.getValidRules(this.rule);\n if (this.selectedColumn) {\n if (this.selectedColumn.operators) {\n operVal = this.selectedColumn.operators;\n }\n else {\n operVal = this.customOperators[this.selectedColumn.type + 'Operator'];\n }\n }\n var arrOper = ['in', 'notin', 'between', 'notbetween'];\n var prevOper;\n switch (type) {\n case 'field':\n rule.field = value;\n rule.label = this.selectedColumn.label;\n rule.type = this.selectedColumn.type;\n rule.value = '';\n rule.operator = operVal[0].value;\n break;\n case 'operator':\n prevOper = rule.operator;\n rule.operator = value;\n if (arrOper.indexOf(rule.operator) > -1) {\n rule.value = [];\n }\n else if (arrOper.indexOf(prevOper) > -1) {\n rule.value = '';\n }\n break;\n case 'value':\n rule.value = value;\n }\n this.changeRuleTemplate(this.selectedColumn, element);\n this.filterRules(beforeRules, this.getValidRules(this.rule), type);\n if (this.selectedColumn && this.selectedColumn.ruleTemplate) {\n if (type === 'field' || type === 'operator') {\n var grpEle = closest(element, '.e-rule-container');\n this.destroyControls(grpEle, true);\n detach(grpEle.querySelector('.e-rule-field'));\n var ruleElement = this.appendRuleElem(closest(grpEle, '.e-group-container'), this.selectedColumn, 'change', grpEle.id, type, rule);\n if (this.displayMode === 'Vertical' || this.element.className.indexOf('e-device') > -1) {\n ruleElement.className = 'e-rule-container e-vertical-mode';\n }\n else {\n ruleElement.className = 'e-rule-container e-horizontal-mode';\n }\n if (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 if (ruleElement.previousElementSibling && ruleElement.previousElementSibling.className.indexOf('e-group-container') > -1 &&\n ruleElement.className.indexOf('e-separate-rule') < 0) {\n ruleElement.className += ' e-separate-rule';\n }\n var args = { requestType: 'template-create', action: type, ruleID: grpEle.id,\n fields: this.fields, rule: rule };\n eventsArgs = { groupID: grpElem.id.replace(this.element.id + '_', ''), ruleID: grpEle.id.replace(this.element.id + '_', ''),\n value: rule.field, type: 'field' };\n this.trigger('actionBegin', args);\n this.trigger('change', eventsArgs);\n }\n }\n };\n QueryBuilder.prototype.changeValue = function (i, args) {\n var _this = this;\n var element;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (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 }\n else {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n element = args.element;\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 if (dateElement.element && dateElement.element.className.indexOf('e-datepicker') > -1) {\n element = dateElement.element;\n }\n var value;\n var rbValue;\n var dropDownObj;\n if (element.className.indexOf('e-radio') > -1) {\n // eslint-disable-next-line\n rbValue = parseInt(element.id.split('valuekey')[1], 0);\n dropDownObj =\n getComponent(closest(element, '.e-rule-container').querySelector('.e-filter-input'), 'dropdownlist');\n this.selectedColumn = dropDownObj.getDataByValue(dropDownObj.value);\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 }\n if (args.name === 'input' && this.immediateModeDelay) {\n window.clearInterval(this.timer);\n this.timer = window.setInterval(function () { _this.filterValue(groupID, ruleID, value, i, element); }, this.immediateModeDelay);\n }\n else {\n this.filterValue(groupID, ruleID, value, i, element);\n }\n };\n QueryBuilder.prototype.filterValue = function (grID, rlID, value, i, ele) {\n var _this = this;\n var eventsArgs = { groupID: grID, ruleID: rlID, value: value, cancel: false, type: 'value' };\n window.clearInterval(this.timer);\n if (!this.isImportRules) {\n this.trigger('beforeChange', eventsArgs, function (observedChangeArgs) {\n _this.changeValueSuccessCallBack(observedChangeArgs, ele, i, grID, rlID);\n });\n }\n else {\n this.changeValueSuccessCallBack(eventsArgs, ele, i, grID, rlID);\n }\n };\n QueryBuilder.prototype.changeValueSuccessCallBack = function (args, element, i, groupID, ruleID) {\n if (!args.cancel) {\n this.updateRules(element, args.value, i);\n if (!this.isImportRules) {\n this.trigger('change', { groupID: groupID, ruleID: ruleID, value: args.value, cancel: false, type: 'value' });\n }\n }\n };\n QueryBuilder.prototype.fieldClose = function (id) {\n if (this.isFieldChange || this.isDestroy) {\n return;\n }\n this.isFieldClose = true;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var ddl = getComponent(id, 'dropdownlist');\n var item = ddl.popupObj.element.querySelector('.e-active');\n var itemData = ddl.getItemData();\n ddl.value = itemData.value;\n var customArgs = { element: ddl.element, value: itemData.value, isInteracted: true,\n previousItemData: this.prevItemData, previousItem: null, item: item, itemData: itemData, event: null, e: null };\n if (ddl.previousValue !== ddl.value) {\n this.changeField(customArgs);\n }\n this.isFieldChange = false;\n };\n QueryBuilder.prototype.changeField = function (args) {\n if (args.isInteracted) {\n if (isNullOrUndefined(args.value)) {\n return;\n }\n this.isFieldChange = true;\n this.prevItemData = args.itemData;\n var fieldElem = closest(args.element, '.e-rule-filter') || closest(args.element, '.e-rule-sub-filter');\n var column = this.fieldMode === 'DropdownTree' ? this.getColumn(args.value[0]) : this.getColumn(args.value);\n if (this.fieldMode === 'DropdownTree' && fieldElem != null) {\n var ddtElem = fieldElem.querySelector('.e-dropdowntree.e-control');\n var ddt = getComponent(ddtElem, 'dropdowntree');\n if (column) {\n if (column.type === 'object') {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ddt.value = args.oldValue;\n ddt.dataBind();\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (isNullOrUndefined(args.oldValue)) {\n ddtElem.value = '';\n }\n else {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ddtElem.value = args.oldValue[0];\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 index++;\n }\n rules.rules[index].value = '';\n this.changeRule(rules.rules[index], args);\n }\n }\n };\n QueryBuilder.prototype.changeRule = function (rule, ddlArgs) {\n if (!ddlArgs.itemData) {\n if (this.fieldMode === 'DropdownTree') {\n var ddt = getComponent(ddlArgs.element, 'dropdowntree');\n if (ddt.value == null) {\n return;\n }\n }\n else {\n return;\n }\n }\n var tempRule = {};\n var filterElem = closest(ddlArgs.element, '.e-rule-filter');\n filterElem = filterElem ? filterElem : closest(ddlArgs.element, '.e-rule-sub-filter');\n var ddlObj = getComponent(ddlArgs.element, 'dropdownlist');\n if (this.fieldMode === 'DropdownTree' && filterElem != null) {\n ddlObj = getComponent(ddlArgs.element, 'dropdowntree');\n }\n var element = closest(ddlArgs.element, '.e-group-container');\n var groupID = element.id.replace(this.element.id + '_', '');\n this.changeFilter(filterElem, ddlObj, groupID, rule, tempRule, ddlArgs);\n };\n QueryBuilder.prototype.changeFilter = function (flt, dl, grID, rl, tmpRl, dArg) {\n var _this = this;\n if (flt) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var ddlValue = void 0;\n if (this.fieldMode === 'DropdownTree') {\n ddlValue = (dl.value[0]);\n }\n else {\n ddlValue = this.isImportRules ? this.GetRootColumnName(dl.value) : dl.value;\n }\n this.selectedColumn = this.getColumn(ddlValue);\n var ruleElem = closest(flt, '.e-rule-container');\n var ruleID = ruleElem.id.replace(this.element.id + '_', '');\n var eventsArgs = { groupID: grID, ruleID: ruleID, selectedField: this.fieldMode === 'DropdownTree' ?\n dl.value[0] : dl.value, cancel: false, type: 'field' };\n if (!this.isImportRules) {\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 subFieldData = Object.keys(this.selectedColumn.columns[0]);\n var ddlField;\n ddlField = {\n dataSource: this.selectedColumn.columns,\n fields: this.fields,\n placeholder: this.l10n.getConstant('SelectField'),\n popupHeight: ((subFieldData.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) > -1) {\n dropDownList.value = subField[i].field;\n this.selectedColumn = subField[i];\n subFieldValue = true;\n break;\n }\n }\n }\n this.subFilterCounter++;\n this.subFieldElem = subFieldElem;\n // eslint-disable-next-line\n ddlArgs.itemData = ddlArgs.itemData;\n if (!subFieldValue && this.selectedColumn.columns) {\n if (!subFieldValue && this.isImportRules) {\n dropDownList.value = null;\n }\n this.selectedColumn = this.selectedColumn.columns[0];\n }\n this.previousColumn = this.selectedColumn;\n if (!this.selectedColumn.columns) {\n this.changeRuleValues(tempElem, rule, tempRule, ddlArgs);\n }\n };\n QueryBuilder.prototype.operatorChangeSuccess = function (eventsArgs, filterElem, tempRule, rule, ddlArgs) {\n if (!eventsArgs.cancel) {\n var operatorElem = closest(ddlArgs.element, '.e-rule-operator');\n var valElem = operatorElem.nextElementSibling;\n var dropDownObj = getComponent(ddlArgs.element, 'dropdownlist');\n var prevOper = rule.operator ? rule.operator.toString().toLowerCase() : '';\n tempRule.operator = dropDownObj.value.toString();\n var currOper = tempRule.operator.toLowerCase();\n if (tempRule.operator.toLowerCase().indexOf('between') > -1 || (tempRule.operator.toLowerCase().indexOf('in') > -1\n && tempRule.operator.toLowerCase().indexOf('contains') < 0)) {\n filterElem = operatorElem.previousElementSibling;\n tempRule.type = rule.type;\n if (tempRule.operator.toLowerCase().indexOf('in') < 0 || prevOper.indexOf('in') < 0) {\n rule.value = [];\n }\n }\n else if (typeof rule.value === 'object' && rule.value != null) {\n rule.value = rule.value.length > 0 ? rule.value[0] : rule.type === 'number' ? 0 : '';\n }\n if (ddlArgs.previousItemData) {\n var prevValue = ddlArgs.previousItemData.value.toString().toLowerCase();\n if ((prevValue.indexOf('between') > -1 || (prevValue.indexOf('in') > -1 || (prevValue.indexOf('null') > -1)\n || (prevValue.indexOf('empty') > -1)) && prevValue.indexOf('contains') < 0)) {\n filterElem = operatorElem.previousElementSibling;\n tempRule.type = rule.type;\n }\n }\n if ((prevOper.indexOf('in') > -1 && prevOper.indexOf('in') < 5) && (currOper.indexOf('in') > -1\n && currOper.indexOf('in') < 5)) {\n filterElem = null;\n }\n if (tempRule.operator.indexOf('null') > -1 || (tempRule.operator.indexOf('empty') > -1)) {\n var parentElem = operatorElem.parentElement.querySelector('.e-rule-value');\n var tooltipElem = parentElem.querySelector('.e-tooltip.e-input-group');\n if (tooltipElem) {\n getComponent(tooltipElem, 'tooltip').destroy();\n }\n removeClass([parentElem], 'e-show');\n addClass([parentElem], 'e-hide');\n }\n if (valElem && this.getColumn(rule.field).template) {\n filterElem = operatorElem.previousElementSibling;\n }\n 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 this.renderValues(operatorElem, itemData, ddlArgs.previousItemData, true, rule, tempRule, ddlArgs.element);\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 value = operatorList[0].value;\n value = rule ? (rule.operator !== '' ? rule.operator : value) : value;\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: 0,\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 this.renderValues(operatorElem, this.selectedColumn, ddlArgs.previousItemData, false, rule, tempRule, ddlArgs.element);\n }\n }\n if (!this.isImportRules) {\n this.updateRules(ddlArgs.element, ddlArgs.item);\n }\n };\n QueryBuilder.prototype.popupOpen = function (isField, args) {\n if (this.enableRtl) {\n addClass([args.popup.element], 'e-rtl');\n }\n if (isField) {\n this.isFieldClose = false;\n }\n };\n QueryBuilder.prototype.destroyControls = function (target, isRuleTemplate) {\n var element = isRuleTemplate ? target : target.nextElementSibling;\n var inputElement = element.querySelectorAll('input.e-control');\n var divElement = element.querySelectorAll('div.e-control:not(.e-handle)');\n var columns = this.columns;\n for (var i = 0, len = inputElement.length; i < len; i++) {\n if (inputElement[i].classList.contains('e-textbox')) {\n getComponent(inputElement[i], 'textbox').destroy();\n detach(select('input#' + inputElement[i].id, element));\n }\n else if (inputElement[i].classList.contains('e-dropdownlist')) {\n if (this.allowValidation && inputElement[i].parentElement.className.indexOf('e-tooltip') > -1) {\n getComponent(inputElement[i].parentElement, 'tooltip').destroy();\n }\n getComponent(inputElement[i], 'dropdownlist').destroy();\n }\n else if (inputElement[i].classList.contains('e-radio')) {\n getComponent(inputElement[i], 'radio').destroy();\n }\n else if (inputElement[i].classList.contains('e-numerictextbox')) {\n getComponent(inputElement[i], 'numerictextbox').destroy();\n detach(select('input#' + inputElement[i].id, element));\n }\n else if (inputElement[i].classList.contains('e-datepicker')) {\n getComponent(inputElement[i], 'datepicker').destroy();\n }\n else if (inputElement[i].classList.contains('e-multiselect')) {\n getComponent(inputElement[i], 'multiselect').destroy();\n }\n else if (inputElement[i].className.indexOf('e-template') > -1) {\n var clsName = inputElement[i].className;\n for (var j = 0, jLen = columns.length; j < jLen; j++) {\n if (columns[j].template && clsName.indexOf(columns[j].field) > -1) {\n this.templateDestroy(columns[j], inputElement[i].id);\n break;\n }\n }\n }\n if (document.getElementById(inputElement[i].id)) {\n detach(inputElement[i]);\n }\n }\n for (var i = 0, len = divElement.length; i < len; i++) {\n if (divElement[i].className.indexOf('e-template') > -1) {\n var clsName = divElement[i].className;\n for (var j = 0, jLen = columns.length; j < jLen; j++) {\n if (columns[j].template && clsName.indexOf(columns[j].field) > -1) {\n this.templateDestroy(columns[j], divElement[i].id);\n break;\n }\n }\n }\n detach(divElement[i]);\n }\n var templateElement = element.querySelectorAll('.e-template:not(.e-control)');\n for (var i = 0, len = templateElement.length; i < len; i++) {\n detach(templateElement[i]);\n }\n };\n QueryBuilder.prototype.templateDestroy = function (column, elemId) {\n var template;\n if (typeof column.template !== 'string' || column.template.destroy === undefined) {\n template = column.template;\n }\n else {\n return;\n }\n var temp = template.destroy;\n if (template.destroy) {\n var templateElements = void 0;\n if (document.getElementById(elemId)) {\n templateElements = closest(document.getElementById(elemId), '.e-rule-field').querySelectorAll('.e-template');\n }\n if (typeof temp === 'string') {\n temp = getValue(temp, window);\n temp({ field: column.field, elementId: elemId, elements: templateElements });\n }\n else {\n template.destroy({ field: column.field, elementId: elemId, elements: templateElements });\n }\n }\n };\n /**\n * Return values bound to the column.\n *\n * @param {string} field - 'field' to be passed to get the field values.\n * @returns {object[]} - Values bound to the column\n */\n QueryBuilder.prototype.getValues = function (field) {\n var original = {};\n var result = [];\n var value;\n var fieldColl = [];\n if (this.separator.length > 0) {\n fieldColl = field.split(this.separator);\n }\n var dataSource = this.dataColl;\n if (this.dataColl[1]) {\n for (var i = 0, iLen = dataSource.length; i < iLen; i++) {\n var data = {};\n if (fieldColl.length > 1) {\n var dataObj = dataSource[i];\n var fieldStr = void 0;\n for (var j = 0, jLen = fieldColl.length; j < jLen; j++) {\n fieldStr = fieldColl[j];\n if (fieldColl.length === (j + 1)) {\n value = dataObj[\"\" + fieldStr];\n if (Number(dataObj[\"\" + fieldStr]) === dataObj[\"\" + fieldStr] && dataObj[\"\" + fieldStr] % 1 !== 0) {\n value = dataObj[\"\" + fieldStr].toString();\n }\n }\n else {\n dataObj = dataObj[\"\" + fieldStr];\n }\n }\n }\n else {\n value = dataSource[i][\"\" + field];\n if (Number(dataSource[i][\"\" + field]) === dataSource[i][\"\" + field] && dataSource[i][\"\" + field] % 1 !== 0) {\n value = dataSource[i][\"\" + field].toString();\n }\n }\n if (!(value in original)) {\n original[\"\" + value] = 1;\n if (fieldColl.length > 1) {\n this.createNestedObject(data, fieldColl, value);\n }\n else {\n data[\"\" + field] = value;\n }\n result.push(data);\n }\n }\n }\n return result;\n };\n QueryBuilder.prototype.createNestedObject = function (obj, fieldColl, value) {\n var key;\n var lastIndex = fieldColl.length - 1;\n for (var k = 0; k < lastIndex; ++k) {\n key = fieldColl[k];\n if (!(key in obj)) {\n obj[\"\" + key] = {};\n }\n obj = obj[\"\" + key];\n }\n obj[fieldColl[lastIndex]] = value;\n };\n QueryBuilder.prototype.getDistinctValues = function (dataSource, field) {\n var original = {};\n var result = [];\n var nest = [];\n var value = '';\n var isNested = field.indexOf(this.separator);\n var _loop_2 = function (i, iLen) {\n if (isNested === 0) {\n value = dataSource[i][\"\" + field];\n }\n else {\n nest = field.split(this_2.separator);\n // eslint-disable-next-line @typescript-eslint/tslint/config\n nest.forEach(function (element) {\n if (value) {\n value = value[\"\" + element];\n }\n else {\n value = dataSource[i][\"\" + element];\n }\n });\n }\n if (Number(dataSource[i][\"\" + field]) === dataSource[i][\"\" + field] && dataSource[i][\"\" + field] % 1 !== 0) {\n value = dataSource[i][\"\" + field].toString();\n }\n var data = {};\n if (!(value in original)) {\n original[\"\" + value] = 1;\n if (isNested === 0) {\n data[\"\" + field] = value;\n }\n else {\n data[nest[nest.length - 1]] = value;\n }\n result.push(data);\n }\n };\n var this_2 = this;\n for (var i = 0, iLen = dataSource.length; i < iLen; i++) {\n _loop_2(i, iLen);\n }\n return result;\n };\n QueryBuilder.prototype.renderMultiSelect = function (rule, parentId, i, selectedValue, values) {\n var isFetched = false;\n var ds;\n var isValues = false;\n this.isGetNestedData = false;\n if (this.dataColl[1]) {\n if (Object.keys(this.dataColl[1]).indexOf(rule.field) > -1) {\n isFetched = true;\n ds = this.getDistinctValues(this.dataColl, rule.field);\n }\n }\n isFetched = rule.columns ? false : isFetched;\n if (!this.dataColl.length && values.length) {\n isValues = true;\n }\n var fieldValue = this.selectedRule.field;\n var isNested = this.selectedRule.field.indexOf(this.separator);\n if (isNested !== 0 && this.fieldMode !== 'DropdownTree') {\n var nest = this.selectedRule.field.split(this.separator);\n fieldValue = nest[nest.length - 1];\n }\n var multiSelectValue;\n multiSelectValue = {\n dataSource: isValues ? values : (isFetched ? ds : this.dataManager),\n query: new Query([rule.field]),\n fields: { text: fieldValue, value: fieldValue },\n placeholder: this.l10n.getConstant('SelectValue'),\n value: selectedValue,\n mode: 'CheckBox',\n width: '100%',\n change: this.changeValue.bind(this, i),\n close: this.closePopup.bind(this, i),\n actionBegin: this.multiSelectOpen.bind(this, parentId + '_valuekey' + i),\n open: this.popupOpen.bind(this, false)\n };\n if (this.valueModel && this.valueModel.multiSelectModel) {\n multiSelectValue = __assign({}, multiSelectValue, this.valueModel.multiSelectModel);\n }\n var multiSelectObj = new MultiSelect(multiSelectValue);\n multiSelectObj.appendTo('#' + parentId + '_valuekey' + i);\n this.updateRules(multiSelectObj.element, selectedValue, 0);\n };\n QueryBuilder.prototype.multiSelectOpen = function (parentId, args) {\n if (this.dataSource instanceof DataManager) {\n var element = document.getElementById(parentId);\n var dropDownObj = getComponent(closest(element, '.e-rule-container').querySelector('.e-filter-input'), 'dropdownlist');\n this.selectedColumn = dropDownObj.getDataByValue(dropDownObj.value);\n var value = this.selectedColumn.field;\n var isFetched = false;\n if (this.dataColl[1]) {\n if (Object.keys(this.dataColl[1]).indexOf(value) > -1) {\n isFetched = true;\n }\n var isNest = value.indexOf(this.separator);\n if (isNest !== 0 && this.isGetNestedData) {\n isFetched = true;\n }\n }\n if (!isFetched) {\n args.cancel = true;\n this.bindMultiSelectData(element, value);\n }\n }\n };\n QueryBuilder.prototype.bindMultiSelectData = function (element, value) {\n this.getMultiSelectData(element, value);\n };\n QueryBuilder.prototype.getMultiSelectData = function (element, value) {\n var _this = this;\n var dummyData;\n var deferred = new Deferred();\n var data = this.dataManager.executeQuery(new Query().select(value));\n var multiselectObj = getComponent(element, 'multiselect');\n multiselectObj.hideSpinner();\n this.createSpinner(closest(element, '.e-multi-select-wrapper').parentElement);\n showSpinner(closest(element, '.e-multi-select-wrapper').parentElement);\n data.then(function (e) {\n if (e.actual && e.actual.result) {\n dummyData = e.actual.result;\n }\n else {\n dummyData = e.result;\n }\n _this.dataColl = extend(_this.dataColl, dummyData, [], true);\n multiselectObj.dataSource = _this.getDistinctValues(_this.dataColl, value);\n _this.isGetNestedData = true;\n hideSpinner(closest(element, '.e-multi-select-wrapper').parentElement);\n }).catch(function (e) {\n deferred.reject(e);\n });\n };\n QueryBuilder.prototype.createSpinner = function (element) {\n var spinnerElem = this.createElement('span', { attrs: { class: 'e-qb-spinner' } });\n element.appendChild(spinnerElem);\n createSpinner({ target: spinnerElem, width: Browser.isDevice ? '16px' : '14px' });\n };\n QueryBuilder.prototype.closePopup = function (i, args) {\n var element = document.getElementById(args.popup.element.id.replace('_popup', ''));\n if (element) {\n var value = getComponent(element, 'multiselect').value;\n this.updateRules(element, value, i);\n }\n };\n QueryBuilder.prototype.processTemplate = function (target, itemData, rule, tempRule) {\n var container = closest(target, '.e-rule-container');\n var tempElements = container.querySelectorAll('.e-template');\n var filterElem = container.querySelector('.e-rule-filter .e-filter-input');\n var ddlObj = this.fieldMode === 'DropdownTree' ? getComponent(filterElem, 'dropdowntree')\n : getComponent(container.querySelector('.e-rule-filter .e-filter-input'), 'dropdownlist');\n var column = this.fieldMode === 'DropdownTree' ? this.getColumn(ddlObj.value[0]) : this.getColumn(ddlObj.value);\n if (typeof itemData.template === 'string' || itemData.template.write === undefined) {\n var args = { rule: rule, ruleID: container.id, operator: tempRule.operator, field: column.field,\n requestType: 'value-template-create' };\n this.trigger('actionBegin', args);\n }\n else {\n var template = itemData.template;\n if (typeof template.write === 'string') {\n getValue(template.write, window)({ elements: tempElements.length > 1 ? tempElements : tempElements[0], values: rule.value,\n operator: tempRule.operator, field: column.field, dataSource: column.values });\n }\n else if (typeof itemData.template !== 'function') {\n itemData.template.write({ elements: tempElements.length > 1 ? tempElements : tempElements[0],\n values: rule.value, operator: tempRule.operator, field: column.field, dataSource: column.values });\n }\n }\n };\n QueryBuilder.prototype.getItemData = function (parentId) {\n var fieldObj = getComponent(document.getElementById(parentId + '_filterkey'), 'dropdownlist');\n if (this.fieldMode === 'DropdownTree') {\n fieldObj = getComponent(document.getElementById(parentId + '_filterkey'), 'dropdowntree');\n }\n return this.fieldMode === 'DropdownTree' ? this.getColumn(fieldObj.value[0]) : this.getColumn(fieldObj.value);\n };\n QueryBuilder.prototype.setDefaultValue = function (parentId, isArryValue, isNumber) {\n var itemData = this.getItemData(parentId);\n if (isNullOrUndefined(itemData.value)) {\n return isNumber ? isArryValue ? [0, 0] : 0 : isArryValue ? [] : '';\n }\n if (isArryValue) {\n if (!(itemData.value instanceof Array)) {\n return [itemData.value];\n }\n }\n else {\n if (itemData.value instanceof Array) {\n return itemData.value[0];\n }\n }\n return itemData.value;\n };\n QueryBuilder.prototype.renderStringValue = function (parentId, rule, operator, idx, ruleValElem) {\n var selectedVal;\n var columnData = this.getItemData(parentId);\n var selectedValue;\n var isTemplate = (typeof columnData.template === 'string');\n if (this.isImportRules || this.isPublic || isTemplate) {\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 ? rule.value : 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 ? rule.value : this.setDefaultValue(parentId, true, false);\n selectedValue = selectedVal.join(',');\n }\n var txtBox = void 0;\n txtBox = {\n placeholder: this.l10n.getConstant('SelectValue'),\n input: this.changeValue.bind(this, idx)\n };\n if (this.valueModel && this.valueModel.textBoxModel) {\n txtBox = __assign({}, txtBox, this.valueModel.textBoxModel);\n }\n var inputobj = new TextBox(txtBox);\n inputobj.appendTo('#' + parentId + '_valuekey' + idx);\n inputobj.value = selectedValue;\n inputobj.dataBind();\n }\n };\n QueryBuilder.prototype.renderNumberValue = function (parentId, rule, operator, idx, ruleValElem, itemData, length) {\n var columnData = this.getItemData(parentId);\n var isTemplate = (typeof columnData.template === 'string');\n var selectedVal = (this.isImportRules || this.isPublic || isTemplate) ? rule.value : this.setDefaultValue(parentId, false, true);\n if ((operator === 'in' || operator === 'notin') && (this.dataColl.length || columnData.values)) {\n selectedVal = this.isImportRules ? rule.value : 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 ? rule.value : 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 }\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 // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (!itemData.field && !itemData.key && itemData.value) {\n if (itemData.value instanceof Date) {\n selectedValue = itemData.value;\n }\n else {\n selectedValue = this.parseDate(itemData.value, itemData.format);\n }\n }\n if (!itemData.format && rule && rule.field !== '') {\n column = this.getColumn(rule.field);\n format = column.format;\n }\n if ((this.isImportRules || this.isPublic || isTemplate) && rule) {\n column = this.getColumn(rule.field);\n format = column.format;\n if (rule.value) {\n selVal = (length_1 > 1) ? rule.value[i] : rule.value;\n selectedValue = this.parseDate(selVal, column.format);\n }\n else {\n selectedValue = rule.value;\n }\n }\n if (format) {\n var formatObj = this.getFormat(format);\n if (formatObj.skeleton) {\n datePicker = {\n locale: this.getLocale(), value: selectedValue,\n placeholder: place, format: formatObj, change: this.changeValue.bind(this, i)\n };\n if (this.valueModel && this.valueModel.datePickerModel) {\n datePicker = __assign({}, datePicker, this.valueModel.datePickerModel);\n }\n datepick = new DatePicker(datePicker);\n }\n else {\n datePicker = {\n value: selectedValue, locale: this.getLocale(), placeholder: place,\n format: formatObj.format, change: this.changeValue.bind(this, i)\n };\n if (this.valueModel && this.valueModel.datePickerModel) {\n datePicker = __assign({}, datePicker, this.valueModel.datePickerModel);\n }\n datepick = new DatePicker(datePicker);\n }\n }\n else {\n datePicker = {\n locale: this.getLocale(), value: selectedValue,\n placeholder: place, change: this.changeValue.bind(this, i)\n };\n if (this.valueModel && this.valueModel.datePickerModel) {\n datePicker = __assign({}, datePicker, this.valueModel.datePickerModel);\n }\n datepick = new DatePicker(datePicker);\n }\n datepick.appendTo('#' + parentId + '_valuekey' + i);\n if (!rule.value) {\n var elem = document.getElementById(parentId + '_valuekey' + i);\n this.updateRules(elem, selectedValue, null, this.isNotValueChange);\n this.isNotValueChange = false;\n }\n }\n break;\n }\n }\n }\n }\n };\n QueryBuilder.prototype.processBoolValues = function (itemData, rule, parentId, i) {\n var isCheck = false;\n var value;\n var orgValue;\n if (isNullOrUndefined(rule.type) && itemData) {\n rule.type = itemData.type;\n }\n var label;\n if (itemData.values) {\n var values = itemData.values;\n if (rule.type === 'boolean' && !isNullOrUndefined(rule.value)) {\n isCheck = values[i].toLowerCase() === rule.value.toString().toLowerCase();\n }\n else if (itemData.value) {\n isCheck = values[i].toLowerCase() === itemData.value.toString().toLowerCase();\n }\n else if (i === 0) {\n isCheck = true;\n }\n orgValue = value = label = values[i];\n }\n else {\n var values = [true, false];\n if (rule.type === 'boolean' && !isNullOrUndefined(rule.value)) {\n isCheck = values[i].toString().toLowerCase() === rule.value.toString().toLowerCase();\n }\n else if (itemData.value) {\n isCheck = values[i].toString().toLowerCase() === itemData.value.toString().toLowerCase();\n }\n else if (i === 0) {\n isCheck = true;\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);\n }\n };\n QueryBuilder.prototype.getOperatorIndex = function (ddlObj, rule) {\n var i;\n var dataSource = ddlObj.dataSource;\n var len = dataSource.length;\n for (i = 0; i < len; i++) {\n if (rule.operator === ddlObj.dataSource[i].value) {\n return i;\n }\n }\n return 0;\n };\n QueryBuilder.prototype.getPreviousItemData = function (prevItemData, column) {\n if (this.isFieldClose && prevItemData) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n prevItemData = this.getColumn(prevItemData.value);\n }\n if (column && column.template && prevItemData && Object.keys(prevItemData).length < 4) {\n prevItemData.template = column.template;\n }\n return prevItemData;\n };\n QueryBuilder.prototype.renderValues = function (target, itemData, prevItemData, isRender, rule, tempRule, element) {\n var subFldElem = target.previousElementSibling;\n var filtElem = subFldElem.getElementsByTagName('input')[0];\n var filtObj = this.fieldMode === 'DropdownTree' ? getComponent(filtElem, 'dropdowntree')\n : getComponent(filtElem, 'dropdownlist');\n var column = this.fieldMode === 'DropdownTree' ? this.getColumn(filtObj.value[0])\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n : this.getColumn(filtObj.value);\n this.selectedRule = column;\n if (isRender) {\n var ddlObj = getComponent(target.querySelector('input'), 'dropdownlist');\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 ddlObj.dataBind();\n }\n }\n var operator = tempRule.operator.toString();\n var isTempRendered = false;\n if (!(operator.indexOf('null') > -1 || operator.indexOf('empty') > -1)) {\n var parentId = closest(target, '.e-rule-container').id;\n prevItemData = this.getPreviousItemData(prevItemData, column);\n if (prevItemData && prevItemData.template === undefined) {\n if (prevItemData.columns) {\n prevItemData = this.getColumn(rule.field);\n }\n }\n else if (this.fieldMode === 'DropdownTree' && prevItemData === undefined) {\n prevItemData = this.getColumn(rule.field);\n }\n if (prevItemData && prevItemData.template) {\n this.templateDestroy(prevItemData, parentId + '_valuekey0');\n var elem = select('#' + parentId + '_valuekey0', target.nextElementSibling);\n if (elem && !elem.classList.contains('e-control')) {\n detach(select('#' + parentId + '_valuekey0', target.nextElementSibling));\n }\n if (typeof prevItemData.template === 'string' || prevItemData.template.create === undefined) {\n if (target.nextElementSibling.classList.contains('e-template-value')) {\n this.clearQBTemplate([parentId]);\n }\n target.nextElementSibling.innerHTML = '';\n }\n }\n if (isRender) {\n this.validateValue(rule, closest(target, '.e-rule-container'));\n this.destroyControls(target);\n }\n if (column) {\n itemData.template = column.template;\n }\n if (itemData.template) {\n addClass([target.nextElementSibling], 'e-template-value');\n itemData.template = column.template;\n isTempRendered = this.setColumnTemplate(itemData, parentId, column.field, itemData.value ||\n operator, target, rule);\n }\n if (isTempRendered) {\n var parentElem = target.parentElement.querySelector('.e-rule-value');\n if (this.element.className.indexOf('e-device') > -1 || this.displayMode === 'Vertical') {\n parentElem.style.width = '100%';\n }\n else {\n parentElem.style.width = '200px';\n }\n }\n else {\n removeClass([target.nextElementSibling], 'e-template-value');\n var inputLen = 1;\n if (tempRule.type === 'boolean') {\n inputLen = this.selectedColumn.values ? this.selectedColumn.values.length : 2;\n }\n else {\n inputLen = (operator && operator.toLowerCase().indexOf('between') > -1) ? 2 : 1;\n }\n for (var i = 0; i < inputLen; i++) {\n var valElem = this.createElement('input', { attrs: { type: 'text', id: parentId + '_valuekey' + i } });\n target.nextElementSibling.appendChild(valElem);\n }\n }\n this.renderControls(target, itemData, rule, tempRule, isTempRendered);\n }\n else {\n var parentElem = target.parentElement.querySelector('.e-rule-value');\n if (parentElem) {\n removeClass([parentElem], 'e-show');\n addClass([parentElem], 'e-hide');\n }\n }\n };\n QueryBuilder.prototype.setColumnTemplate = function (itemData, ruleID, field, operator, target, rule) {\n var _this = this;\n var args;\n var isRendered = true;\n if (!itemData.template) {\n return true;\n }\n else {\n if (typeof itemData.template === 'string' || itemData.template.create === undefined) {\n args = { requestType: 'value-template-initialize', ruleID: ruleID, field: field, operator: operator, rule: rule,\n renderTemplate: true };\n this.trigger('actionBegin', args, function (observedActionArgs) {\n isRendered = _this.actionBeginSuccessCallBack(observedActionArgs, itemData, ruleID, field, target);\n });\n return isRendered;\n }\n else {\n var valElem = void 0;\n var template = itemData.template;\n if (typeof template.create === 'string') {\n valElem = getValue(template.create, window)({ field: field, operator: operator });\n }\n else {\n valElem = template.create({ field: field, operator: operator });\n }\n if (valElem instanceof Element) {\n valElem.id = ruleID + '_valuekey0';\n addClass([valElem], 'e-template');\n target.nextElementSibling.appendChild(valElem);\n if (field.indexOf(' ') < 0) {\n addClass([valElem], 'e-' + field);\n }\n }\n else if (valElem instanceof Array) {\n addClass(valElem, 'e-template');\n for (var i = 0, iLen = valElem.length; i < iLen; i++) {\n valElem[i].id = ruleID + '_valuekey' + i;\n target.nextElementSibling.appendChild(valElem[i]);\n }\n }\n addClass([target.nextElementSibling], 'e-template-value');\n return true;\n }\n }\n };\n QueryBuilder.prototype.actionBeginSuccessCallBack = function (args, itemData, ruleID, field, target) {\n if (args.renderTemplate) {\n var valElem = void 0;\n this.columnTemplateFn = this.templateParser(typeof itemData.template === 'function' ? itemData.template : itemData.template);\n var templateID = this.element.id + field;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.isReact) {\n valElem = this.columnTemplateFn(args, this, ruleID, templateID)[0];\n } // 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 }\n else {\n valElem = this.columnTemplateFn(args, this, 'Template', templateID)[0];\n }\n target.nextElementSibling.appendChild(valElem);\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 switch (controlName) {\n case 'checkbox':\n // eslint-disable-next-line\n var value = getComponent(element, controlName).value;\n rule.value = (value !== '') ? value : undefined;\n break;\n case 'textbox':\n rule.value = getComponent(element, controlName).value;\n break;\n case 'dropdownlist':\n rule.value = getComponent(element, controlName).value;\n break;\n case 'radio':\n // eslint-disable-next-line\n var 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 // eslint-disable-next-line\n var column = this.getColumn(rule.field);\n // eslint-disable-next-line\n var format = this.getFormat(column.format);\n // eslint-disable-next-line\n var 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 index++;\n }\n var operator = rule.rules[index].operator ? rule.rules[index].operator.toString() : '';\n ruleElem = closest(target, '.e-rule-container');\n var ruleID = ruleElem.id.replace(this.element.id + '_', '');\n if (closest(target, '.e-rule-filter') || closest(target, '.e-rule-sub-filter')) {\n if (this.subFieldElem) {\n target = this.subFieldElem;\n }\n dropDownObj = this.fieldMode === 'DropdownTree' ? getComponent(target, 'dropdowntree') :\n getComponent(target, 'dropdownlist');\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var column = this.fieldMode === 'DropdownTree' ? this.getColumn(dropDownObj.value[0])\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n : this.getColumn(dropDownObj.value);\n if (!this.isImportRules && rule.rules[index].field &&\n rule.rules[index].field.toLowerCase() !== column.field.toLowerCase()) {\n if (!(ruleElem.querySelectorAll('.e-template')) && !(operator.indexOf('null') > -1)\n || (operator.indexOf('empty') > -1)) {\n rule.rules[index].value = '';\n }\n }\n this.selectedColumn = this.getColumn(this.selectedColumn.field);\n rule.rules[index].field = this.selectedColumn.field;\n rule.rules[index].type = this.selectedColumn.type;\n rule.rules[index].label = this.selectedColumn.label;\n var ruleElement = closest(target, '.e-rule-filter');\n ruleElement = ruleElement ? ruleElement : closest(target, '.e-rule-sub-filter');\n var element = ruleElement.nextElementSibling.querySelector('input.e-control');\n element = element ? element : ruleElement.nextElementSibling.nextElementSibling.querySelector('input.e-control');\n operator = getComponent(element, 'dropdownlist').value.toString();\n rule.rules[index].operator = operator;\n // Value Fields\n var valueContainer = ruleElement.nextElementSibling.nextElementSibling;\n var elementCln = valueContainer.querySelectorAll('input.e-control');\n if (elementCln.length < 1) {\n elementCln = valueContainer.querySelectorAll('div.e-control');\n }\n if (elementCln.length < 1) {\n elementCln = valueContainer.querySelectorAll('.e-template');\n }\n eventsArgs = { groupID: groupID, ruleID: ruleID, value: rule.rules[index].field, type: 'field' };\n for (var i_1 = 0; i_1 < elementCln.length; i_1++) {\n if (operator.indexOf('null') > -1 || operator.indexOf('empty') > -1) {\n rule.rules[index].value = null;\n continue;\n }\n this.updateValues(elementCln[i_1], rule.rules[index]);\n }\n if (!this.isImportRules) {\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) {\n this.trigger('ruleChange', { previousRule: beforeRule, rule: afterRule, type: type });\n }\n }\n };\n QueryBuilder.prototype.ruleValueUpdate = function (target, selectedValue, rule, index, groupElem, ruleElem, i) {\n var eventsArgs;\n var oper;\n var arrOperator = ['in', 'between', 'notin', 'notbetween'];\n if (rule.rules[index].operator) {\n oper = rule.rules[index].operator.toString().toLowerCase();\n }\n if (selectedValue !== null) {\n if (target.className.indexOf('e-multiselect') > -1 && rule.rules[index].type === 'number' &&\n !this.isNotified) {\n var selVal = [];\n var dupSelectedValue = selectedValue;\n for (var k = 0, kLen = dupSelectedValue.length; k < kLen; k++) {\n if (typeof dupSelectedValue[k] === 'string') {\n selVal.push(parseFloat(dupSelectedValue[k]));\n }\n }\n if (selVal.length) {\n selectedValue = selVal;\n }\n }\n if (this.isNotified) {\n rule.rules[index].value = selectedValue;\n eventsArgs = { groupID: groupElem.id, ruleID: ruleElem.id, value: rule.rules[index].value, type: 'value' };\n if (!this.isImportRules) {\n this.trigger('change', eventsArgs);\n }\n }\n else if (target.className.indexOf('e-spin') > -1 || target.className.indexOf('e-numeric') > -1) {\n if (arrOperator.indexOf(oper) > -1) {\n rule.rules[index].value[i] = selectedValue;\n }\n else {\n rule.rules[index].value = selectedValue;\n }\n }\n else if (target.className.indexOf('e-radio') > -1) {\n rule.rules[index].value = selectedValue;\n }\n else if (target.className.indexOf('e-multiselect') > -1) {\n rule.rules[index].value = selectedValue;\n }\n else if (target.className.indexOf('e-textbox') > -1) {\n if (oper === 'in' || oper === 'notin') {\n if (rule.rules[index].type === 'string') {\n rule.rules[index].value = this.processValueString(selectedValue, rule.rules[index].type);\n }\n else {\n rule.rules[index].value = this.processValueString(selectedValue, rule.rules[index].type);\n }\n }\n else {\n rule.rules[index].value = selectedValue;\n }\n }\n else if (target.className.indexOf('e-datepicker') > -1) {\n var format = this.getFormat(this.getColumn(this.selectedColumn.field).format);\n if (format.type) {\n if (arrOperator.indexOf(oper) > -1) {\n if (typeof rule.rules[index].value === 'string') {\n rule.rules[index].value = [];\n }\n rule.rules[index].value[i] = this.intl.formatDate(selectedValue, format);\n }\n else {\n rule.rules[index].value = this.intl.formatDate(selectedValue, format);\n }\n }\n }\n this.validateValue(rule, ruleElem, index);\n }\n else {\n if (target.className.indexOf('e-datepicker') > -1) {\n if (arrOperator.indexOf(oper) > -1) {\n if (typeof rule.rules[index].value === 'string') {\n rule.rules[index].value = [];\n }\n rule.rules[index].value[i] = selectedValue;\n }\n else {\n rule.rules[index].value = selectedValue;\n }\n }\n else {\n rule.rules[index].value = selectedValue;\n }\n }\n };\n QueryBuilder.prototype.validateValue = function (rule, ruleElem, index) {\n if (!isNullOrUndefined(index)) {\n rule = rule.rules[index];\n }\n var isObject = typeof (rule.value) === 'object';\n if (this.allowValidation && (isNullOrUndefined(index) || (isObject ? rule.value.length > 0 : rule.value))) {\n var valElem = ruleElem.querySelectorAll('.e-rule-value .e-control');\n if (valElem.length > 0) {\n if (valElem[0].className.indexOf('e-tooltip') > -1) {\n getComponent(valElem[0], 'tooltip').destroy();\n }\n else if (valElem[0].parentElement.className.indexOf('e-tooltip') > -1) {\n getComponent(valElem[0].parentElement, 'tooltip').destroy();\n }\n if (valElem[1] && valElem[1].parentElement.className.indexOf('e-tooltip') > -1) {\n getComponent(valElem[1].parentElement, 'tooltip').destroy();\n }\n }\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 classList(this.element, [], ['e-rtl', 'e-responsive', 'e-device']);\n this.isDestroy = false;\n };\n /**\n * Adds single or multiple rules.\n *\n * @param {RuleModel[]} rule - 'rule collection' to be passed to add the rules.\n * @param {string} groupID - 'group id' to be passed to add the rule in groups.\n * @returns {void}.\n */\n QueryBuilder.prototype.addRules = function (rule, groupID) {\n groupID = this.element.id + '_' + groupID;\n this.isPublic = true;\n for (var i = 0, len = rule.length; i < len; i++) {\n this.addRuleElement(document.getElementById(groupID), rule[i]);\n }\n this.isPublic = false;\n };\n /**\n * Adds single or multiple groups, which contains the collection of rules.\n *\n * @param {RuleModel[]} groups - 'group collection' to be passed to add the groups.\n * @param {string} groupID - 'group id' to be passed to add the groups.\n * @returns {void}.\n */\n QueryBuilder.prototype.addGroups = function (groups, groupID) {\n if (this.isAddSuccess || this.element.querySelectorAll('.e-group-container').length <= this.maxGroupCount) {\n groupID = this.element.id + '_' + groupID;\n var groupElem = document.getElementById(groupID);\n var rule = this.getParentGroup(groupElem);\n var grouplen = groups.length;\n if (grouplen) {\n this.isPublic = true;\n for (var i = 0, len = groups.length; i < len; i++) {\n this.updatedRule = { condition: groups[i].condition, not: groups[i].not };\n this.importRules(groups[i], groupElem, false, groups[i].not);\n }\n this.isPublic = false;\n }\n else {\n var condition = 'and';\n var not = false;\n if (this.updatedRule) {\n condition = this.updatedRule.condition;\n not = this.updatedRule.not;\n }\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 if (!this.headerTemplate) {\n this.disableRuleCondition(groupElem, rule);\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.enableRtl) {\n addClass([this.element], 'e-rtl');\n }\n if (this.width) {\n this.element.style.width = this.width;\n }\n if (this.height) {\n this.element.style.height = this.height;\n }\n if (this.rule.rules.length) {\n this.isImportRules = true;\n }\n else {\n this.addGroupElement(false, this.element);\n }\n if (Browser.isDevice || this.displayMode === 'Vertical') {\n if (Browser.isDevice) {\n this.element.style.width = '100%';\n this.element.classList.add('e-device');\n }\n removeClass(this.element.querySelectorAll('.e-rule-container'), 'e-horizontal-mode');\n addClass(this.element.querySelectorAll('.e-rule-container'), 'e-vertical-mode');\n this.displayMode = 'Vertical';\n }\n else {\n this.displayMode = 'Horizontal';\n }\n if (this.summaryView) {\n if (this.isImportRules) {\n this.renderSummary();\n }\n else {\n this.renderSummaryCollapse();\n }\n }\n else {\n if (this.columns.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.length) {\n this.addRuleElement(this.element.querySelector('.e-group-container'), {});\n }\n this.notGroupRtl();\n if (this.readonly) {\n this.enableReadonly();\n }\n var buttons = this.element.querySelectorAll('label.e-btn');\n var button = void 0;\n for (var i = 0; i < buttons.length; i++) {\n button = buttons.item(i);\n rippleEffect(button, { selector: '.e-btn' });\n }\n }\n };\n QueryBuilder.prototype.renderSummary = function () {\n var contentElem = this.createElement('div', {\n attrs: {\n class: 'e-summary-content',\n id: this.element.id + '_summary_content'\n }\n });\n var textElem = this.createElement('textarea', { attrs: { class: 'e-summary-text', readonly: 'true' }, styles: 'max-height:500px' });\n var editElem = this.createElement('button', { attrs: { type: 'button', class: 'e-edit-rule e-css e-btn e-small e-flat e-primary' } });\n var divElem = this.createElement('div', { attrs: { class: 'e-summary-btndiv' } });\n contentElem.appendChild(textElem);\n textElem.textContent = this.getSqlFromRules(this.rule);\n editElem.textContent = this.l10n.getConstant('Edit');\n divElem.appendChild(editElem);\n contentElem.appendChild(divElem);\n this.element.appendChild(contentElem);\n };\n QueryBuilder.prototype.renderSummaryCollapse = function () {\n var collapseElem = this.createElement('div', {\n attrs: {\n class: 'e-collapse-rule e-icons',\n title: this.l10n.getConstant('SummaryViewTitle')\n }\n });\n this.element.querySelector('.e-group-header').appendChild(collapseElem);\n };\n QueryBuilder.prototype.columnSort = function () {\n if (this.sortDirection.toLowerCase() === 'descending') {\n this.columns = new DataManager(this.columns).executeLocal(new Query().sortByDesc('field'));\n }\n else if (this.sortDirection.toLowerCase() === 'ascending') {\n this.columns = new DataManager(this.columns).executeLocal(new Query().sortBy('field'));\n }\n };\n QueryBuilder.prototype.onChangeNotGroup = function () {\n this.element.innerHTML = '';\n this.groupIdCounter = 0;\n if (!this.headerTemplate) {\n if (this.enableNotCondition) {\n if (this.enableNotCondition) {\n var inputElem = this.createElement('button', { attrs: { type: 'button', class: 'e-qb-toggle' } });\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.rule = this.checkNotGroup(this.rule);\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 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 // eslint-disable-next-line\n var groupElem = this.element.querySelector('.e-group-container');\n // eslint-disable-next-line\n var summaryElem = this.element.querySelector('.e-summary-content');\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 (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 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 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 this.rule = newProp.rule;\n newProp.rule = this.getRuleCollection(this.rule, false);\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 }\n }\n };\n QueryBuilder.prototype.preRender = function () {\n this.element.id = this.element.id || getUniqueID('ej2-querybuilder');\n this.defaultLocale = {\n StartsWith: 'Starts With',\n EndsWith: 'Ends With',\n Contains: 'Contains',\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 };\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: 'endswith', key: this.l10n.getConstant('EndsWith') },\n { value: 'contains', key: this.l10n.getConstant('Contains') },\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 ],\n booleanOperator: [\n { value: 'equal', key: this.l10n.getConstant('Equal') },\n { value: 'notequal', key: this.l10n.getConstant('NotEqual') }\n ],\n numberOperator: [\n { value: 'equal', key: this.l10n.getConstant('Equal') },\n { value: 'greaterthanorequal', key: this.l10n.getConstant('GreaterThanOrEqual') },\n { value: 'greaterthan', key: this.l10n.getConstant('GreaterThan') },\n { value: 'between', key: this.l10n.getConstant('Between') },\n { value: 'lessthan', key: this.l10n.getConstant('LessThan') },\n { value: 'notbetween', key: this.l10n.getConstant('NotBetween') },\n { value: 'lessthanorequal', key: this.l10n.getConstant('LessThanOrEqual') },\n { value: 'notequal', key: this.l10n.getConstant('NotEqual') },\n { value: 'in', key: this.l10n.getConstant('In') },\n { value: 'notin', key: this.l10n.getConstant('NotIn') }\n ]\n };\n this.operators = {\n equal: '=', notequal: '!=', greaterthan: '>', greaterthanorequal: '>=', lessthan: '<', in: 'IN', notin: 'NOT IN',\n lessthanorequal: '<=', startswith: 'LIKE', endswith: 'LIKE', between: 'BETWEEN', notbetween: 'NOT BETWEEN', contains: 'LIKE',\n isnull: 'IS NULL', isnotnull: 'IS NOT NULL', isempty: 'IS EMPTY', isnotempty: 'IS NOT EMPTY', notstartswith: 'NOT LIKE',\n notendswith: 'NOT LIKE', notcontains: 'NOT LIKE'\n };\n this.sqlOperators = {\n equal: '=', notequal: '!=', greaterthan: '>', greaterthanorequal: '>=', lessthan: '<', in: this.l10n.getConstant('In').toUpperCase(),\n notin: this.l10n.getConstant('NotIn').toUpperCase(), lessthanorequal: '<=', startswith: this.l10n.getConstant('Like').toUpperCase(),\n endswith: this.l10n.getConstant('Like').toUpperCase(), between: this.l10n.getConstant('Between').toUpperCase(),\n notbetween: this.l10n.getConstant('NotBetween').toUpperCase(), contains: this.l10n.getConstant('Like').toUpperCase(),\n isnull: this.l10n.getConstant('IsNull').toUpperCase(), isnotnull: this.l10n.getConstant('IsNotNull').toUpperCase(),\n isempty: this.l10n.getConstant('IsEmpty').toUpperCase(), isnotempty: this.l10n.getConstant('IsNotEmpty').toUpperCase(),\n notstartswith: this.l10n.getConstant('NotLike').toUpperCase(), notendswith: this.l10n.getConstant('NotLike').toUpperCase(),\n notcontains: this.l10n.getConstant('NotLike').toUpperCase()\n };\n if (!this.fields) {\n this.fields = { text: 'label', value: 'field' };\n }\n };\n QueryBuilder.prototype.render = function () {\n this.levelColl = {};\n this.items = [\n {\n text: this.l10n.getConstant('AddGroup'),\n iconCss: 'e-icons e-add-icon e-addgroup'\n },\n {\n text: this.l10n.getConstant('AddCondition'),\n iconCss: 'e-icons e-add-icon e-addrule'\n }\n ];\n this.ruleElem = this.ruleTemplate();\n this.groupElem = this.groupTemplate();\n var stringOper = [\n { value: 'isnull', key: this.l10n.getConstant('IsNull') },\n { value: 'isnotnull', key: this.l10n.getConstant('IsNotNull') }\n ];\n var numberOper = [\n { value: 'isnull', key: this.l10n.getConstant('IsNull') },\n { value: 'isnotnull', key: this.l10n.getConstant('IsNotNull') }\n ];\n this.customOperators['stringOperator'] = this.customOperators['stringOperator'].concat(stringOper); // tslint:disable-line\n this.customOperators['numberOperator'] = this.customOperators['numberOperator'].concat(numberOper); // tslint:disable-line\n if (this.dataSource instanceof DataManager) {\n this.dataManager = this.dataSource;\n this.executeDataManager(new Query().take(1));\n }\n else {\n this.dataManager = new DataManager(this.dataSource);\n this.dataColl = this.dataManager.executeLocal(new Query());\n this.initControl();\n }\n this.renderComplete();\n };\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 };\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 };\n QueryBuilder.prototype.getParentGroup = function (target, isParent) {\n var groupLevel = (target instanceof Element) ? this.levelColl[target.id] : this.levelColl[\"\" + target];\n var len = isParent ? groupLevel.length - 1 : groupLevel.length;\n var rule = this.rule;\n for (var i = 0; i < len; i++) {\n rule = this.findGroupByIdx(groupLevel[i], rule, i === 0);\n }\n return rule;\n };\n /**\n * Delete the Group\n *\n * @param {Element | string} target - 'target' to be passed to delete the group.\n * @returns {void}\n */\n QueryBuilder.prototype.deleteGroup = function (target) {\n var _this = this;\n var groupElem = target;\n var groupId;\n if (typeof target === 'string') {\n groupId = this.element.id + '_' + target;\n target = document.getElementById(groupId);\n }\n else {\n groupId = groupElem.id.replace(this.element.id + '_', '');\n }\n var args = { groupID: groupId, cancel: false, type: 'deleteGroup' };\n if (!this.isImportRules) {\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 index++;\n }\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 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 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 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.isImportRules) {\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) {\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 clnruleElem = ruleElem;\n var nextElem = ruleElem.nextElementSibling;\n var prevElem = ruleElem.previousElementSibling;\n var index = 0;\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 index++;\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 detach(clnruleElem);\n }\n catch (err) {\n // eslint-disable-next-line no-ex-assign\n err = [];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var error = 'error';\n // eslint-disable-next-line\n err[error] = error;\n }\n // eslint-enable\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);\n }\n if (!this.isImportRules) {\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.rule = rule;\n rule = this.getRuleCollection(this.rule, false);\n this.importRules(this.rule, this.element.querySelector('.e-group-container'), true, this.rule.not, isRoot);\n this.isImportRules = false;\n };\n QueryBuilder.prototype.keyBoardHandler = function (e) {\n if (this.readonly && (e.keyCode === 38 || e.keyCode === 40 || e.keyCode === 13)) {\n e.preventDefault();\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) {\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 (rules && rules.condition === 'or') {\n orElem.checked = true;\n }\n else {\n andElem.checked = true;\n }\n }\n else {\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 * Get the valid rule or rules collection.\n *\n * @param {RuleModel} currentRule - 'currentRule' to be passed to get the valid rules.\n * @returns {RuleModel} - Valid rule or rules collection\n */\n QueryBuilder.prototype.getValidRules = function (currentRule) {\n if (!currentRule) {\n currentRule = this.getRules();\n }\n var ruleCondtion = currentRule.condition;\n var notCondition = currentRule.not;\n var ruleColl = extend([], currentRule.rules, [], true);\n var rule = this.getRuleCollection({ condition: ruleCondtion, rules: ruleColl, not: notCondition }, true);\n return rule;\n };\n QueryBuilder.prototype.getRuleCollection = function (rule, isValidRule) {\n if (isNullOrUndefined(rule)) {\n return null;\n }\n var orgRule;\n if (rule.rules && rule.rules.length && (Object.keys(rule.rules[0]).length > 6 || isValidRule)) {\n var jLen = rule.rules.length;\n for (var j = 0; j < jLen; j++) {\n orgRule = rule.rules[j];\n orgRule = this.getRuleCollection(orgRule, isValidRule);\n rule.rules[j] = orgRule;\n if (Object.keys(orgRule).length < 1 && isValidRule) {\n rule.rules.splice(j, 1);\n j--;\n jLen--;\n }\n }\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var customObj = rule.custom;\n if ((rule.field && rule.field !== '') && (isNullOrUndefined(customObj) || (customObj && (customObj.type !== 'question' &&\n customObj.type !== 'answer')))) {\n if (rule.operator) {\n if (rule.operator.toString().indexOf('null') > -1 || rule.operator.toString().indexOf('empty') > -1) {\n rule.value = null;\n }\n }\n if ((this.isRefreshed && this.enablePersistence) || (rule.field !== '' && rule.operator !== '' && (rule.value !== '' &&\n rule.value !== undefined)) || (customObj && customObj.isQuestion)) {\n var condition = rule.condition;\n rule = {\n 'label': rule.label, 'field': rule.field, 'operator': rule.operator, 'type': rule.type, 'value': rule.value\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 }\n else {\n rule = {};\n }\n }\n else {\n if (customObj && (customObj.type === 'question' || customObj.type === 'answer')) {\n var notValue = rule.not;\n rule = { 'label': rule.label, 'field': rule.field, 'operator': rule.operator, 'type': rule.type, 'value': rule.value,\n 'condition': rule.condition, 'rules': rule.rules\n };\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n rule.custom = customObj;\n if (this.enableNotCondition) {\n rule.not = notValue;\n }\n }\n else if ((isNullOrUndefined(rule.condition)) && isNullOrUndefined(rule.rules)) {\n rule = {};\n }\n else {\n 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 (customObj) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n rule.custom = customObj;\n }\n if (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 // 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 var groupElem = closest(ruleElem, '.e-group-container');\n var rule = this.getParentGroup(groupElem);\n while (ruleElem.previousElementSibling !== null) {\n ruleElem = ruleElem.previousElementSibling;\n index++;\n }\n return rule.rules[index];\n };\n /**\n * Gets the group.\n *\n * @param {string | Element} target - 'target' to be passed to get group.\n * @returns {object} -Group\n */\n QueryBuilder.prototype.getGroup = function (target) {\n if (target instanceof Element && target.className.indexOf('e-group-container') < 1) {\n target = closest(target, '.e-group-container');\n }\n var groupId = (target instanceof Element) ? target.id : this.element.id + '_' + target;\n var rule = this.getParentGroup(groupId);\n return rule;\n };\n /**\n * Deletes the group or groups based on the group ID.\n *\n * @param {string[]} groupIdColl - 'groupIdColl' to be passed to delete groups.\n * @returns {void}\n */\n QueryBuilder.prototype.deleteGroups = function (groupIdColl) {\n var i;\n var len = groupIdColl.length;\n var groupID;\n for (i = 0; i < len; i++) {\n groupID = this.element.id + '_' + groupIdColl[i];\n this.deleteGroup(document.getElementById(groupID));\n }\n };\n /**\n * Return the Query from current rules collection.\n *\n * @returns {Promise} - Query from current rules collection\n * @blazorType object\n */\n QueryBuilder.prototype.getFilteredRecords = function () {\n var predicate = this.getPredicate(this.getValidRules(this.rule));\n var dataManagerQuery = isNullOrUndefined(predicate) ? new Query() : new Query().where(predicate);\n return this.dataManager.executeQuery(dataManagerQuery);\n };\n /**\n * Deletes the rule or rules based on the rule ID.\n *\n * @param {string[]} ruleIdColl - 'ruleIdColl' to be passed to delete rules.\n * @returns {void}.\n */\n QueryBuilder.prototype.deleteRules = function (ruleIdColl) {\n var i;\n var len = ruleIdColl.length;\n var ruleID;\n for (i = 0; i < len; i++) {\n ruleID = this.element.id + '_' + ruleIdColl[i];\n this.deleteRule(document.getElementById(ruleID));\n }\n };\n /**\n * Gets the query for Data Manager.\n *\n * @param {RuleModel} rule - 'rule' to be passed to get query.\n * @returns {string} - Query for Data Manager\n */\n QueryBuilder.prototype.getDataManagerQuery = function (rule) {\n var predicate = this.getPredicate(rule);\n var query;\n var fields = [];\n for (var i = 0, len = Object.keys(this.columns); i < len.length; i++) {\n fields.push(this.columns[i].field);\n }\n if (rule.rules.length) {\n query = new Query().select(fields).where(predicate);\n }\n else {\n query = new Query().select(fields);\n }\n return query;\n };\n /**\n * Get the predicate from collection of rules.\n *\n * @param {RuleModel} rule - 'rule' to be passed to get predicate.\n * @returns {Predicate} - Predicate from collection of rules\n */\n QueryBuilder.prototype.getPredicate = function (rule) {\n var ruleColl = rule.rules;\n var pred;\n var pred2;\n var ruleValue;\n var ignoreCase = false;\n var column;\n var ignoreOper = ['notcontains', 'notstartswith', 'notendswith'];\n if (!ruleColl) {\n return pred;\n }\n for (var i = 0, len = ruleColl.length; i < len; i++) {\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(ruleColl[i].operator) && !isNullOrUndefined(ruleColl[i].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('contains') < 0) {\n pred = isDateFilter ? this.datePredicate(ruleColl[i], ruleValue) :\n this.arrayPredicate(ruleColl[i]);\n }\n else {\n var value = ruleValue;\n if (value !== '' && ignoreOper.indexOf(oper) < 0) {\n pred = new Predicate(ruleColl[i].field, ruleColl[i].operator, ruleValue, ignoreCase);\n }\n }\n }\n else {\n if (ignoreOper.indexOf(oper) > -1) {\n continue;\n }\n if (isDateFilter || (oper.indexOf('in') > -1 || oper.indexOf('between') > -1 ||\n oper.indexOf('null') > -1 || oper.indexOf('empty') > -1) && oper.indexOf('contains') < 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, ruleColl[i].operator, ruleValue, ignoreCase);\n }\n else if (value !== '') {\n pred = new Predicate(ruleColl[i].field, ruleColl[i].operator, ruleValue, ignoreCase);\n }\n }\n else {\n var value = ruleValue;\n if (pred && value !== '') {\n pred = pred.or(ruleColl[i].field, ruleColl[i].operator, ruleValue, ignoreCase);\n }\n else if (value !== '') {\n pred = new Predicate(ruleColl[i].field, ruleColl[i].operator, ruleValue, ignoreCase);\n }\n }\n }\n }\n }\n }\n if (this.dataSource instanceof DataManager) {\n if (!isNullOrUndefined(pred) && (pred.operator === 'isnull' || pred.operator === 'isnotnull')) {\n pred.operator = pred.operator === 'isnull' ? 'equal' : 'notequal';\n }\n }\n return pred;\n };\n QueryBuilder.prototype.getLocale = function () {\n var gregorianFormat = '.dates.calendars.gregorian.days.format.short';\n var localeString = this.locale;\n var mainVal = 'main.';\n var cultureObj = getValue(mainVal + '' + this.locale + gregorianFormat, cldrData);\n if (!cultureObj) {\n localeString = 'en';\n }\n return localeString;\n };\n QueryBuilder.prototype.getColumn = function (field, col) {\n var columns = this.columns;\n var column;\n columns = col ? col : columns;\n for (var i = 0, iLen = columns.length; i < iLen; i++) {\n if (columns[i].field === field) {\n column = columns[i];\n break;\n }\n else if (columns[i].columns) {\n column = this.getColumn(field, columns[i].columns);\n if (column) {\n break;\n }\n }\n else if (field && field.indexOf(this.separator) > -1) {\n if (this.separator !== '' && columns[i].field === field.split(this.separator)[0]) {\n column = columns[i];\n break;\n }\n }\n }\n return column;\n };\n /* eslint-disable */\n /**\n * Return the operator bound to the column.\n *\n * @returns {[key: string]: Object}[] - Operator bound to the column\n */\n /* eslint-enable */\n QueryBuilder.prototype.getOperators = function (field) {\n var column = this.getColumn(field);\n return column.operators;\n };\n QueryBuilder.prototype.setTime = function (date, isStart) {\n if (isStart) {\n date.setHours(0, 0, 0);\n }\n else {\n date.setHours(23, 59, 59);\n }\n return date;\n };\n QueryBuilder.prototype.datePredicate = function (ruleColl, value, predicate, condition) {\n var pred;\n var startDate = this.setTime(new Date(value.getTime()), true);\n var endDate = this.setTime(value);\n switch (ruleColl.operator) {\n case 'equal':\n pred = new Predicate(ruleColl.field, 'greaterthanorequal', startDate);\n pred = pred.and(ruleColl.field, 'lessthanorequal', endDate);\n break;\n case 'notequal':\n pred = new Predicate(ruleColl.field, 'lessthan', startDate);\n pred = pred.or(ruleColl.field, 'greaterthan', endDate);\n break;\n case 'greaterthan':\n pred = new Predicate(ruleColl.field, 'greaterthan', endDate);\n break;\n case 'greaterthanorequal':\n pred = new Predicate(ruleColl.field, 'greaterthanorequal', startDate);\n break;\n case 'lessthan':\n pred = new Predicate(ruleColl.field, 'lessthan', startDate);\n break;\n case 'lessthanorequal':\n pred = new Predicate(ruleColl.field, 'lessthanorequal', endDate);\n break;\n }\n if (pred) {\n if (predicate) {\n if (condition === 'and') {\n predicate = predicate.and(pred);\n }\n else if (condition === 'or') {\n predicate = predicate.or(pred);\n }\n }\n else {\n predicate = pred;\n }\n }\n return predicate;\n };\n QueryBuilder.prototype.arrayPredicate = function (ruleColl, predicate, condition) {\n var value = ruleColl.value;\n var operator = ruleColl.operator.toString();\n var nullValue = ruleColl.value;\n var pred;\n var column = this.getColumn(ruleColl.field);\n var format = this.getFormat(column.format);\n if (operator.indexOf('null') > -1 || operator.indexOf('empty') > -1) {\n switch (operator) {\n case 'isnull':\n pred = new Predicate(ruleColl.field, 'isnull', nullValue);\n break;\n case 'isnotnull':\n pred = new Predicate(ruleColl.field, 'isnotnull', nullValue);\n break;\n case 'isempty':\n pred = new Predicate(ruleColl.field, 'equal', '');\n break;\n case 'isnotempty':\n pred = new Predicate(ruleColl.field, 'notequal', '');\n break;\n }\n }\n if (!(operator.indexOf('null') > -1 || operator.indexOf('empty') > -1)) {\n for (var j = 0, jLen = value.length; j < jLen; j++) {\n if (value[j] !== '' || ((operator === 'in' || operator === 'notin') && column.type === 'string')) {\n if (j === 0) {\n var gte = 'greaterthanorequal';\n switch (operator) {\n case 'between':\n if (column.type !== 'date') {\n pred = new Predicate(ruleColl.field, gte, value[j]);\n }\n else {\n pred = new Predicate(ruleColl.field, gte, value[j] ?\n (this.isTime(value[j]) ? this.getDate(value[j], format) :\n this.setTime(this.getDate(value[j], format), true)) : null);\n }\n break;\n case 'notbetween':\n if (column.type === 'date') {\n pred = new Predicate(ruleColl.field, 'lessthan', value[j] ?\n (this.isTime(value[j]) ? this.getDate(value[j], format) :\n this.setTime(this.getDate(value[j], format), true)) : null);\n }\n else {\n pred = new Predicate(ruleColl.field, 'lessthan', value[j]);\n }\n break;\n case 'in':\n pred = new Predicate(ruleColl.field, 'equal', value[j]);\n break;\n case 'notin':\n pred = new Predicate(ruleColl.field, 'notequal', value[j]);\n break;\n }\n }\n else {\n var gt = 'greaterthan';\n switch (ruleColl.operator) {\n case 'between':\n if (column.type === 'date') {\n pred = pred.and(ruleColl.field, 'lessthanorequal', value[j] ?\n (this.isTime(value[j]) ? this.getDate(value[j], format) :\n this.setTime(this.getDate(value[j], format))) : value[j]);\n }\n else {\n pred = pred.and(ruleColl.field, 'lessthanorequal', value[j]);\n }\n break;\n case 'notbetween':\n if (column.type === 'date') {\n pred = pred.or(ruleColl.field, gt, value[j] ?\n (this.isTime(value[j]) ? this.getDate(value[j], format) :\n this.setTime(this.getDate(value[j], format))) : value[j]);\n }\n else {\n pred = pred.or(ruleColl.field, 'greaterthan', value[j]);\n }\n break;\n case 'in':\n pred = pred.or(ruleColl.field, 'equal', value[j]);\n break;\n case 'notin':\n pred = pred.and(ruleColl.field, 'notequal', value[j]);\n break;\n }\n }\n }\n }\n }\n if (pred) {\n if (predicate) {\n if (condition === 'and') {\n predicate = predicate.and(pred);\n }\n else if (condition === 'or') {\n predicate = predicate.or(pred);\n }\n }\n else {\n predicate = pred;\n }\n }\n return predicate;\n };\n QueryBuilder.prototype.getDate = function (value, format) {\n var currDate = this.intl.parseDate(value, format);\n if (value.indexOf(':') > -1 && (value.indexOf('/') < 0 && value.indexOf(',') < 0\n && value.indexOf('-') < 0)) {\n currDate = new Date();\n // eslint-disable-next-line\n currDate.setHours(parseInt(value.split(':')[0]));\n // eslint-disable-next-line\n currDate.setMinutes(parseInt(value.split(':')[1]));\n if (value.split(':')[2]) {\n // eslint-disable-next-line\n currDate.setSeconds(parseInt(value.split(':')[2]));\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.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 orElem.disabled = false;\n andElem.disabled = false;\n if (rule.condition === 'or') {\n orElem.checked = true;\n }\n else {\n andElem.checked = true;\n }\n }\n else {\n // enable/disable conditions when rule condition is added\n this.disableRuleCondition(parentElem);\n }\n if (this.headerTemplate && isRoot) {\n parentElem = this.renderGroup(rule, rule.condition, this.element, rule.not, isRoot);\n }\n if (this.enableNotCondition && !this.headerTemplate) {\n var tglBtnElem = parentElem.querySelector('.e-qb-toggle');\n if (rule.not) {\n addClass([tglBtnElem], 'e-active-toggle');\n }\n else {\n removeClass([tglBtnElem], 'e-active-toggle');\n }\n }\n }\n if (rule.rules.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 parentElem = this.renderGroup(ruleColl[i], ruleColl[i].condition, parentElem, ruleColl[i].not);\n parentElem = this.importRules(ruleColl[i], parentElem, true);\n }\n else {\n this.renderRule(ruleColl[i], parentElem);\n }\n }\n }\n parentElem = closest(parentElem, '.e-rule-list');\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 return element[element.length - 1];\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-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-numerictextbox')) {\n var numericTextBoxObj = getInstance(elem[i], NumericTextBox);\n numericTextBoxObj.readonly = this.isReadonly;\n }\n else if (elem[i].classList.contains('e-textbox')) {\n var textBoxObj = getInstance(elem[i], TextBox);\n textBoxObj.readonly = this.isReadonly;\n }\n else if (elem[i].classList.contains('e-datepicker')) {\n var datePickerObj = getInstance(elem[i], DatePicker);\n datePickerObj.readonly = this.isReadonly;\n }\n else if (elem[i].classList.contains('e-multiselect')) {\n var multiSelectObj = getInstance(elem[i], MultiSelect);\n multiSelectObj.readonly = this.isReadonly;\n }\n else if (elem[i].classList.contains('e-radio')) {\n var radioButtonObj = getInstance(elem[i], RadioButton);\n if (!radioButtonObj.checked) {\n if (this.isReadonly) {\n elem[i].parentElement.style.display = 'none';\n }\n else {\n elem[i].parentElement.style.display = 'inherit';\n }\n }\n }\n }\n var deleteGroupElems = this.element.querySelectorAll('.e-deletegroup');\n var addRuleGroupElems = this.element.querySelectorAll('.e-addrulegroup');\n var removeRuleElems = this.element.querySelectorAll('.e-removerule');\n if (!this.isReadonly && this.ruleElem.classList.contains('e-readonly')) {\n this.ruleElem.classList.remove('e-readonly');\n }\n var elems = [deleteGroupElems, addRuleGroupElems, removeRuleElems];\n for (var i = 0; i < elems.length; i++) {\n elems[i].forEach(function (elem) {\n if (elem.classList.contains('e-readonly')) {\n elem.classList.remove('e-readonly');\n }\n else {\n elem.classList.add('e-readonly');\n }\n });\n }\n this.enableBtnGroup();\n };\n QueryBuilder.prototype.enableBtnGroup = function () {\n var _this = this;\n var elems = this.element.querySelectorAll('.e-btngroup-and-lbl, .e-btngroup-or-lbl, .e-qb-toggle');\n var not = false;\n elems.forEach(function (elem) {\n if (elem.classList.contains('e-qb-toggle') && !elem.classList.contains('e-active-toggle')\n && !elem.classList.contains('e-readonly')) {\n elem.classList.add('e-readonly');\n not = false;\n }\n else if (elem.classList.contains('e-qb-toggle') && elem.classList.contains('e-not-readonly')) {\n elem.classList.remove('e-not-readonly');\n }\n else if (elem.classList.contains('e-qb-toggle') && elem.classList.contains('e-readonly')) {\n elem.classList.remove('e-readonly');\n }\n else if (elem.classList.contains('e-active-toggle')) {\n elem.classList.add('e-not-readonly');\n not = true;\n }\n else if (elem.previousElementSibling.checked || elem.classList.contains('e-readonly')) {\n elem.classList.remove('e-readonly');\n if (not) {\n if (elem.textContent === 'AND') {\n elem.classList.add('e-readonly-and');\n }\n else {\n elem.classList.add('e-readonly-or');\n }\n }\n else {\n if (elem.textContent === 'AND' && _this.isReadonly) {\n elem.classList.remove('e-not');\n elem.classList.add('e-readonly-and');\n }\n else {\n if (_this.enableNotCondition) {\n elem.classList.add('e-not');\n }\n elem.classList.remove('e-readonly-and');\n }\n if (elem.textContent === 'OR' && _this.isReadonly) {\n elem.classList.add('e-readonly-or-not');\n }\n else {\n elem.classList.remove('e-readonly-or-not');\n }\n }\n }\n else if (elem.classList.contains('e-btn-disable')) {\n // do nothing\n }\n else {\n elem.classList.add('e-readonly');\n }\n });\n };\n QueryBuilder.prototype.isDateFunction = function (value) {\n var dateFunc = ['date', 'time', 'day', 'week', 'month', 'year', 'hour', 'minute', 'second', 'now', 'quarter', 'period', 'extract'];\n for (var i = 0, len = dateFunc.length; i < len; i++) {\n if (value.toLowerCase().indexOf(dateFunc[i]) > -1) {\n return true;\n }\n }\n return false;\n };\n QueryBuilder.prototype.getSqlString = function (rules, enableEscape, queryStr, sqlLocale) {\n var isRoot = false;\n if (!queryStr && queryStr !== '') {\n queryStr = '';\n isRoot = true;\n }\n else {\n queryStr += '(';\n }\n var condition = rules.condition;\n if (rules.not) {\n var rulesNotCondition = void 0;\n if (isRoot) {\n rulesNotCondition = sqlLocale ? this.l10n.getConstant('NOT').toUpperCase() + ' (' : 'NOT (';\n queryStr += rulesNotCondition;\n }\n else {\n rulesNotCondition = sqlLocale ? ' ' + this.l10n.getConstant('NOT').toUpperCase() + ' (' : ' NOT (';\n queryStr += rulesNotCondition;\n }\n }\n if (rules.rules) {\n for (var j = 0, jLen = rules.rules.length; j < jLen; j++) {\n if (rules.rules[j].rules) {\n queryStr = this.getSqlString(rules.rules[j], enableEscape, queryStr, sqlLocale);\n }\n else {\n var rule = rules.rules[j];\n var valueStr = '';\n var ruleOpertor = sqlLocale ? this.sqlOperators[rule.operator] : this.operators[rule.operator];\n if (rule.value instanceof Array) {\n if (rule.operator.toString().indexOf('between') > -1) {\n var ruleCondition = sqlLocale ? ' ' + this.l10n.getConstant('AND').toUpperCase() + ' ' : ' ' + 'AND' + ' ';\n if (rule.type === 'date' && !this.isDateFunction(rule.value[0])) {\n valueStr += '\"' + rule.value[0] + '\"' + ruleCondition + '\"' + rule.value[1] + '\"';\n }\n else {\n valueStr += rule.value[0] + ruleCondition + rule.value[1];\n }\n }\n else {\n if (typeof rule.value[0] === 'string' && rule.value !== null) {\n valueStr += '(\"' + rule.value[0] + '\"';\n for (var k = 1, kLen = rule.value.length; k < kLen; k++) {\n valueStr += ',\"' + rule.value[k] + '\"';\n }\n valueStr += ')';\n }\n else {\n valueStr += '(' + rule.value + ')';\n }\n }\n }\n else {\n if (rule.operator.toString().indexOf('startswith') > -1) {\n valueStr += rule.value ? '(\"' + rule.value + '%\")' : '(' + rule.value + ')';\n }\n else if (rule.operator.toString().indexOf('endswith') > -1) {\n valueStr += rule.value ? '(\"%' + rule.value + '\")' : '(' + rule.value + ')';\n }\n else if (rule.operator.toString().indexOf('contains') > -1) {\n valueStr += rule.value ? '(\"%' + rule.value + '%\")' : '(' + rule.value + ')';\n }\n else {\n if (rule.type === 'number' || typeof rule.value === 'boolean' || rule.value === null) {\n valueStr += rule.value;\n }\n else {\n valueStr += '\"' + rule.value + '\"';\n }\n }\n }\n if (rule.operator.toString().indexOf('null') > -1 || (rule.operator.toString().indexOf('empty') > -1)) {\n if (enableEscape) {\n rule.field = '`' + rule.field + '`';\n }\n else {\n if (rule.field.indexOf(' ') > -1) {\n rule.field = '\"' + rule.field + '\"';\n }\n }\n queryStr += rule.field + ' ' + ruleOpertor;\n }\n else {\n if (enableEscape) {\n rule.field = '`' + rule.field + '`';\n }\n else {\n if (rule.field.indexOf(' ') > -1) {\n rule.field = '\"' + rule.field + '\"';\n }\n }\n queryStr += rule.field + ' ' + ruleOpertor + ' ' + valueStr;\n }\n if (rule.condition && rule.condition !== '') {\n condition = rule.condition;\n }\n }\n if (j !== jLen - 1) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var rule = rules.rules[j];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (condition === '' || (rule && rule.condition !== '' && rule.custom && rule.custom.isCustom)) {\n condition = rule.condition;\n }\n condition = sqlLocale ? this.l10n.getConstant(condition.toUpperCase()).toUpperCase() : condition.toUpperCase();\n queryStr += ' ' + condition + ' ';\n }\n }\n }\n if (!isRoot) {\n queryStr += ')';\n }\n if (rules.not) {\n queryStr += ')';\n }\n return queryStr;\n };\n /**\n * Sets the rules from the sql query.\n *\n * @param {string} sqlString - 'sql String' to be passed to set the rule.\n * @param {boolean} sqlLocale - 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.rule = { condition: 'and', not: false, rules: [] };\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 {object} - 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 return this.getSqlString(this.getValidRules(rule), allowEscape, null, sqlLocale).replace(/\"/g, '\\'');\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\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\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\n regex = new RegExp('^(' + subOp[i] + ')' + regexStr, 'ig');\n if (regex.exec(sqlString)) {\n this.parser.push(['SubOperators', subOp[i].toLowerCase()]);\n return subOp[i].length;\n }\n }\n //Left Parenthesis\n if (/^\\(/.exec(sqlString)) {\n this.parser.push(['Left', '(']);\n return 1;\n }\n //Right Parenthesis\n if (/^\\)/.exec(sqlString)) {\n this.parser.push(['Right', ')']);\n return 1;\n }\n //Boolean\n if (/^(true|false)/.exec(sqlString)) {\n matchValue = /^(true|false)/.exec(sqlString)[0];\n this.parser.push(['String', matchValue]);\n return matchValue.length;\n }\n //Null\n if (/^null/.exec(sqlString)) {\n matchValue = /^null/.exec(sqlString)[0];\n this.parser.push(['String', null]);\n return matchValue.length;\n }\n // eslint-disable-next-line\n if (/^`?([a-z_][a-z0-9_.\\[\\]\\(\\)]{0,}(\\:(number|float|string|date|boolean))?)`?/i.exec(sqlString)) {\n // eslint-disable-next-line\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 // eslint-disable-next-line\n if (this.checkLiteral() && /^'?([a-z_][a-z0-9 _.\\[\\]\\(\\)]{0,}(\\:(number|float|string|date|boolean))?)'?/i.exec(sqlString)) {\n // eslint-disable-next-line\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\n matchValue = /^[0-9]+(\\.[0-9]+)?/.exec(sqlString)[0];\n this.parser.push(['Literal', matchValue]);\n return matchValue.length;\n }\n //String\n // eslint-disable-next-line\n if (/^'((?:[^\\\\']+?|\\\\.|'')*)'(?!')/.exec(sqlString)) {\n // eslint-disable-next-line\n matchValue = /^'((?:[^\\\\']+?|\\\\.|'')*)'(?!')/.exec(sqlString)[0];\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 this.parser.push(['String', matchValue]);\n return matchValue.length;\n }\n // Double String\n // eslint-disable-next-line\n if (/^\"([^\\\\\"]*(?:\\\\.[^\\\\\"]*)*)\"/.exec(sqlString)) {\n // eslint-disable-next-line\n matchValue = /^\"([^\\\\\"]*(?:\\\\.[^\\\\\"]*)*)\"/.exec(sqlString)[0];\n this.parser.push(['DoubleString', matchValue]);\n return matchValue.length;\n }\n //Number\n // eslint-disable-next-line\n if (/^[0-9]+(\\.[0-9]+)?/.exec(sqlString)) {\n // eslint-disable-next-line\n matchValue = /^[0-9]+(\\.[0-9]+)?/.exec(sqlString)[0];\n this.parser.push(['Number', matchValue]);\n return matchValue.length;\n }\n //Negative Number\n // eslint-disable-next-line\n if (/^-?[0-9]+(\\.[0-9]+)?/.exec(sqlString)) {\n // eslint-disable-next-line\n matchValue = /^-?[0-9]+(\\.[0-9]+)?/.exec(sqlString)[0];\n this.parser.push(['Number', matchValue]);\n return matchValue.length;\n }\n return 1;\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 if (lastParser[0] === 'Left' && (secParser && secParser[0] === 'Conditions')) {\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 // eslint-disable-next-line\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 (localeOperator[i] === 'notcontains') ? 'notcontains' : 'contains';\n }\n else if (value && value.indexOf('%') !== 0 && value.indexOf('%') === value.length - 1) {\n return (localeOperator[i] === 'notstartswith') ? 'notstartswith' : 'startswith';\n }\n else if (value && value.indexOf('%') === 0 && value.indexOf('%') !== value.length - 1) {\n return (localeOperator[i] === 'notendswith') ? 'notendswith' : 'endswith';\n }\n return localeOperator[i];\n }\n }\n return null;\n }\n if (value) {\n if (value.indexOf('%') === 0 && value[value.length - 1] === '%') {\n return (operator === 'not like') ? 'notcontains' : 'contains';\n }\n else if (value.indexOf('%') !== 0 && value.indexOf('%') === value.length - 1) {\n return (operator === 'not like') ? 'notstartswith' : 'startswith';\n }\n else if (value.indexOf('%') === 0 && value.indexOf('%') !== value.length - 1) {\n return (operator === 'not like') ? 'notendswith' : 'endswith';\n }\n }\n else {\n if (operator === 'not like') {\n return 'notequal';\n }\n else if (operator === 'like') {\n return 'equal';\n }\n }\n return operators[\"\" + operator];\n };\n QueryBuilder.prototype.getTypeFromColumn = function (rules) {\n var columnData = this.getColumn(rules.field);\n if (!isNullOrUndefined(columnData)) {\n return columnData.type;\n }\n return null;\n };\n QueryBuilder.prototype.getLabelFromColumn = function (field) {\n var label = '';\n var l = 0;\n if (this.separator !== '') {\n var fieldColl = field.split(this.separator);\n for (var i = 0; i < fieldColl.length; i++) {\n label += this.getLabelFromField(fieldColl, i + 1);\n l++;\n if (l < fieldColl.length) {\n label += this.separator;\n }\n }\n return label;\n }\n else {\n var labelItem = this.getColumn(field).label;\n return labelItem;\n }\n };\n QueryBuilder.prototype.getLabelFromField = function (field, startIdx) {\n var fieldName = '';\n var j = 0;\n for (var k = 0; k < startIdx; k++) {\n fieldName += field[k];\n j++;\n if (j < startIdx) {\n fieldName += this.separator;\n }\n }\n return this.getColumn(fieldName).label;\n };\n QueryBuilder.prototype.processParser = function (parser, rules, levelColl, sqlLocale) {\n var j;\n var jLen;\n var rule;\n var subRules;\n var numVal = [];\n var strVal = [];\n var k;\n var kLen;\n var l;\n var lLen;\n var grpCount;\n var operator;\n var isLeftOpened = false;\n for (var i = 0, iLen = parser.length; i < iLen; i++) {\n if (parser[i][0] === 'Literal') {\n var column = this.getColumn(parser[i][1]);\n rule = { label: (column && column.label) ? column.label : parser[i][1], field: parser[i][1] };\n if (parser[i + 1][0] === 'SubOperators') {\n if (parser[i + 1][1].indexOf('null') > -1 || parser[i + 1][1].indexOf('empty') > -1) {\n rule.operator = this.getOperator(' ', parser[i + 1][1], sqlLocale);\n rule.value = null;\n rule.type = this.getTypeFromColumn(rule);\n }\n else {\n var oper = parser[i + 3][1] ? parser[i + 3][1].replace(/'/g, '') : parser[i + 3][1];\n rule.operator = this.getOperator(oper, parser[i + 1][1], sqlLocale);\n }\n operator = parser[i + 1][1];\n i++;\n j = i + 1;\n jLen = iLen;\n if (sqlLocale && rule.operator === 'contains' || rule.operator === 'startswith' || rule.operator === 'endswith') {\n operator = 'like';\n }\n else if (sqlLocale && rule.operator === 'notcontains' || rule.operator === 'notstartswith' || rule.operator === 'notendswith') {\n operator = 'not like';\n }\n else if (sqlLocale) {\n operator = rule.operator;\n }\n for (j = i + 1; j < jLen; j++) {\n if (operator.indexOf('between') < 0 && parser[j][0] === 'Left') {\n isLeftOpened = true;\n }\n else if (parser[j][0] === 'Right' && isLeftOpened) {\n i = j;\n isLeftOpened = false;\n break;\n }\n else {\n if (operator.indexOf('null') > -1 || operator.indexOf('empty') > -1) {\n break;\n }\n if (operator.indexOf('like') > -1 && parser[j][0] === 'String') {\n var val = parser[j][1];\n if (parser[j][1] && parser[j][1][0] === '\\'') {\n val = parser[j][1].substring(1, parser[j][1].length - 1);\n }\n val = val ? val.replace(/%/g, '') : parser[j][1];\n rule.value = val;\n rule.type = 'string';\n }\n else if (operator.indexOf('between') > -1) {\n if (parser[j][0] === 'Literal' || parser[j][0] === 'Left') {\n break;\n }\n if (parser[j][0] === 'Number') {\n numVal.push(Number(parser[j][1]));\n }\n else if (parser[j][0] === 'String') {\n var val = parser[j][1];\n if (parser[j][1] && parser[j][1][0] === '\\'') {\n val = parser[j][1].substring(1, parser[j][1].length - 1);\n }\n strVal.push(val);\n }\n }\n else {\n if (parser[j][0] === 'Number') {\n numVal.push(Number(parser[j][1]));\n }\n else if (parser[j][0] === 'String') {\n var val = parser[j][1];\n if (parser[j][1] && parser[j][1][0] === '\\'') {\n val = parser[j][1].substring(1, parser[j][1].length - 1);\n }\n strVal.push(val);\n }\n }\n rule.type = this.getTypeFromColumn(rule);\n }\n }\n if (operator.indexOf('like') < 0) {\n if (parser[j - 1][0] === 'Number') {\n rule.value = numVal;\n rule.type = 'number';\n }\n else if (parser[j - 1][0] === 'String') {\n rule.value = strVal;\n rule.type = 'string';\n }\n else if (operator.indexOf('between') > -1 && parser[j - 1][0] === 'Conditions') {\n if (strVal.length !== 0) {\n rule.value = strVal;\n rule.type = 'string';\n }\n else {\n rule.value = numVal;\n rule.type = 'number';\n }\n }\n numVal = [];\n strVal = [];\n rule.type = this.getTypeFromColumn(rule);\n }\n }\n else if (parser[i + 1][0] === 'Operators') {\n rule.operator = this.getOperator(parser[i + 2][1], parser[i + 1][1], sqlLocale);\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 rule.value = parser[i + 2][1] ? parser[i + 2][1].replace(/'/g, '') : parser[i + 2][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 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') {\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 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 __decorate([\n Event()\n ], QueryBuilder.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], QueryBuilder.prototype, \"actionBegin\", void 0);\n __decorate([\n Event()\n ], QueryBuilder.prototype, \"beforeChange\", void 0);\n __decorate([\n Event()\n ], QueryBuilder.prototype, \"change\", void 0);\n __decorate([\n Event()\n ], QueryBuilder.prototype, \"dataBound\", void 0);\n __decorate([\n Event()\n ], QueryBuilder.prototype, \"ruleChange\", void 0);\n __decorate([\n Property({ ruleDelete: true, groupInsert: true, groupDelete: true })\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('')\n ], QueryBuilder.prototype, \"separator\", void 0);\n __decorate([\n Complex({ condition: 'and', rules: [] }, Rule)\n ], QueryBuilder.prototype, \"rule\", 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"],"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","isLocale","isRefreshed","isNotified","isAddSuccess","isNotValueChange","isFieldChange","isFieldClose","isDestroy","isGetNestedData","MultiSelect","Inject","CheckBoxSelection","getPersistData","addOnPersist","reset","isImportRules","bodyElem","querySelector","inputElement","querySelectorAll","len","className","indexOf","getComponent","destroy","parentElement","innerHTML","grpContainer","createElement","attrs","class","grpHeader","grpBody","appendChild","headerTemplate","isRoot","enableNotCondition","removeClass","levelColl","id","rule","rules","disableRuleCondition","getWrapper","getModuleName","GetRootColumnName","field","separator","split","initialize","dataColl","columnKeys","keys","cols","categories","type","groupBy","isDate","validateObj","columns","columnSort","updateCustomOperator","isNaN","Date","parse","getTime","validation","category","l10n","getConstant","push","operators","customOperators","updateSubFieldsFromColumns","label","updateSubFields","trigger","col","data","sampCol","result","compField","resData","column","_loop_1","j","sqlIdx","operator_1","operColl","values","map","join","valueIdx","this_1","focusEventHandler","event","clickEventHandler","args","groupID","tagName","animation","Animation","duration","delay","renderSummary","summaryElem","document","getElementById","txtareaElem","animate","name","groupElem","style","display","textContent","getSqlFromRules","height","scrollHeight","actionButton","deleteRule","deleteGroup","closest","addGroupElement","mRules","extend","setGroupRules","renderSummaryCollapse","forIdValue","getAttribute","targetValue","replace","group","getGroup","ariaChecked","toggleElem","getElementsByClassName","addClass","cancel","toLowerCase","beforeSuccessCallBack","observedChangeArgs","beforeRules","getValidRules","getParentGroup","filterRules","selectBtn","showButtons","groupInsert","isNullOrUndefined","maxGroupCount","enableRtl","children","addRuleElement","appendRuleElem","parentId","action","ruleElem","elem","ruleListElem","select","setAttribute","ruleIdCounter","ruleTemplate","requestType","ruleID","ruleTemplateFn","templateParser","templateID","getOperators","operatorFields","isReact","isAngular","templateColl","nodeType","isVue3","append","cloneNode","renderReactTemplates","isRuleTemplate","isInitialLoad","addRuleSuccessCallBack","trgt","act","pId","isRlTmp","dropDownList","getColumn","newRule","operator","selectedColumn","passedRule","args_1","displayMode","previousElementSibling","updateAddedRule","fieldMode","ddlField","ddlValue","dataSource","placeholder","popupHeight","close","fieldClose","bind","change","changeField","open","popupOpen","fieldModel","DropDownList","appendTo","ddlVal","getDataByValue","changeRule","itemData","child","expanded","showClearButton","changeOnBlur","dropdowntree","DropDownTree","getLabelFromColumn","index","custom","changeRuleTemplate","operVal","parentGroup","previousColumn","detach","clearQBTemplate","renderToolTip","tooltip","Tooltip","content","position","cssClass","validateFields","dropDownTreeObj","isValid","allowValidation","excludeOprs","fieldElem","indexElem","valArray","dropDownObj","tempElem","ruleElemCln","validateRule","valElem","jLen","refreshLevelColl","obj","groupElement","level","refreshLevel","childElem","ruleList","iLen","groupCount","slice","groupTemplate","glueElem","inputElem","labelElem","grpActElem","groupBtn","groupHdrElem","grpBodyElem","rulesElem","role","clsName","filterElem","ruleDelete","delBtnElem","isGroup","isBtnClick","addGroupSuccess","eventTarget","dltGroupBtn","groupIdCounter","headerTemplateFn","andInpElem","orInpElem","andLblElem","orLblElem","btnGroupId","groupDelete","Button","iconCss","rippleEffect","selector","childElems","grpLen","addGroups","notElem","classList","add","args_2","notCondition","undefined","DropDownButton","items","beforeOpen","grpId","chgrpId","childGroupID","template","groupHdr","getRuleCollection","headerFn","notifyChange","grpElement","ruleElement","format","getFormat","intl","formatDate","templateChange","updateRules","eventsArgs","grpElem","validateValue","prevOper","arrOper","grpEle","destroyControls","changeValue","contains","dateElement","rbValue","parseInt","immediateModeDelay","window","clearInterval","timer","setInterval","filterValue","grID","rlID","ele","changeValueSuccessCallBack","ddl","item","popupObj","getItemData","customArgs","isInteracted","previousItemData","prevItemData","previousItem","e","previousValue","ddtElem","ddt","oldValue","dataBind","destroySubFields","subFieldElem","ddlArgs","ddlObj","changeFilter","flt","dl","rl","tmpRl","dArg","selectedField","fieldChangeSuccess","operatorElem","changeOperator","opr","selectedIndex","operatorChangeSuccess","changeRuleValues","tempRule","tooltipElem","createSubFields","nextElementSibling","remove","subFieldValue","subFilterCounter","insertBefore","ruleId","subFieldData","subField","toString","currOper","prevValue","parentElem","operatorList","oprElem","childElementCount","fieldObj","renderValues","ddlOperator","operatorModel","isField","popup","divElement","templateDestroy","templateElement","elemId","temp","templateElements","getValue","elementId","elements","getValues","original","fieldColl","dataObj","fieldStr","createNestedObject","lastIndex","k","getDistinctValues","nest","isNested","_loop_2","this_2","forEach","renderMultiSelect","selectedValue","ds","isFetched","isValues","fieldValue","selectedRule","multiSelectValue","dataManager","query","Query","mode","width","closePopup","actionBegin","multiSelectOpen","valueModel","multiSelectModel","multiSelectObj","DataManager","bindMultiSelectData","getMultiSelectData","dummyData","deferred","Deferred","executeQuery","multiselectObj","hideSpinner","createSpinner","showSpinner","then","actual","catch","reject","spinnerElem","Browser","isDevice","processTemplate","container","tempElements","write","setDefaultValue","isArryValue","isNumber","renderStringValue","idx","ruleValElem","selectedVal","columnData","isTemplate","isPublic","txtBox","input","textBoxModel","inputobj","TextBox","minWidth","renderNumberValue","selVal","txtInp","numericTxt","step","numericTextBoxModel","numeric","NumericTextBox","processValueString","numArr","strArr","kLen","parseDate","formatOpt","dParser","getDateParser","skeleton","renderControls","isRendered","length_1","processBoolValues","datepick","datePicker","place","formatObj","locale","getLocale","datePickerModel","DatePicker","orgValue","isCheck","radioBtn","checked","radioButtonModel","radiobutton","RadioButton","getOperatorIndex","getPreviousItemData","isRender","filtElem","getElementsByTagName","filtObj","isTempRendered","setColumnTemplate","inputLen","renderTemplate","observedActionArgs","actionBeginSuccessCallBack","Element","columnTemplateFn","valElemColl","updateValues","controlName","radioBtnObj","refresh","selectedDate","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","addRules","groups","importRules","initWrapper","trim","summaryView","notGroupRtl","readonly","enableReadonly","buttons","button","contentElem","textElem","styles","editElem","divElem","collapseElem","title","sortDirection","executeLocal","sortByDesc","sortBy","onChangeNotGroup","checkNotGroup","orgRule","onPropertyChanged","newProp","oldProp","_i","properties_1","enablePersistence","Internationalization","preRender","getUniqueID","defaultLocale","StartsWith","EndsWith","Contains","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","L10n","parser","stringOperator","dateOperator","booleanOperator","numberOperator","equal","notequal","greaterthan","greaterthanorequal","lessthan","in","notin","lessthanorequal","startswith","endswith","between","notbetween","isnull","isnotnull","isempty","isnotempty","notstartswith","notendswith","notcontains","sqlOperators","toUpperCase","render","stringOper","numberOper","concat","executeDataManager","take","initControl","renderComplete","templateCompiler","compile","error","wireEvents","wrapper","EventHandler","keyBoardHandler","isParent","groupLevel","groupId","deleteGroupSuccessCallBack","nextElem","prevElem","removeString","remRule","ruleElemColl","isTemplateRendered","isPlatformTemplate","splice","deleteRuleSuccessCallBack","clnruleElem","err","keyCode","preventDefault","clearTemplate","count","andElem","orElem","disabled","currentRule","getRules","ruleCondtion","isValidRule","customObj","isQuestion","notValue","setRules","getRule","HTMLElement","deleteGroups","groupIdColl","getFilteredRecords","predicate","getPredicate","dataManagerQuery","where","deleteRules","ruleIdColl","getDataManagerQuery","pred","pred2","ruleValue","ignoreCase","ignoreOper","and","or","isDateFilter","dateOperColl","matchCase","getDate","isTime","datePredicate","arrayPredicate","Predicate","localeString","cldrData","setTime","date","isStart","setHours","startDate","endDate","nullValue","gte","currDate","setMinutes","setSeconds","isReset","renderGroup","tglBtnElem","renderRule","getInstance","deleteGroupElems","addRuleGroupElems","removeRuleElems","elems","enableBtnGroup","isDateFunction","dateFunc","getSqlString","enableEscape","queryStr","sqlLocale","valueStr","ruleOpertor","ruleCondition","isCustom","setRulesFromSql","sqlString","ruleModel","getRulesFromSql","sqlParser","processParser","allowEscape","str","st","parseSqlStrings","conditions","subOp","regexStr","matchValue","test","RegExp","exec","lastPasrser","checkLiteral","checkNumberLiteral","isClosed","lastParser","secParser","betweenParser","betweenOperator","getOperator","localeOperator","=","!=","<",">","<=",">=","not in","not between","is empty","is null","is not null","is not empty","getTypeFromColumn","l","getLabelFromField","startIdx","fieldName","subRules","lLen","grpCount","numVal","strVal","isLeftOpened","val","substring","pop","Event","Complex","NotifyPropertyChanges","Component"],"mappings":"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"}