@syncfusion/ej2-querybuilder 28.2.3 → 29.1.39

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.
@@ -1 +1 @@
1
- {"version":3,"file":"ej2-querybuilder.min.js","sources":["../../src/query-builder/query-builder.js","../../src/query-builder/query-library.js","../../src/global.js"],"sourcesContent":["var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n/**\n * Query Builder Source\n */\n/* eslint-disable max-len */\nimport { Component, NotifyPropertyChanges, getComponent, Browser, compile, append, Draggable, remove } from '@syncfusion/ej2-base';\nimport { Property, ChildProperty, Complex, L10n, closest, extend, isNullOrUndefined, Collection, cldrData } from '@syncfusion/ej2-base';\nimport { getInstance, addClass, removeClass, rippleEffect, detach, classList } from '@syncfusion/ej2-base';\nimport { Internationalization, getUniqueID, select } from '@syncfusion/ej2-base';\nimport { Button, CheckBox, RadioButton } from '@syncfusion/ej2-buttons';\nimport { DropDownList, CheckBoxSelection, DropDownTree } from '@syncfusion/ej2-dropdowns';\nimport { MultiSelect } from '@syncfusion/ej2-dropdowns';\nimport { Event, EventHandler, getValue, Animation } from '@syncfusion/ej2-base';\nimport { Query, Predicate, DataManager, Deferred } from '@syncfusion/ej2-data';\nimport { TextBox, NumericTextBox } from '@syncfusion/ej2-inputs';\nimport { DatePicker } from '@syncfusion/ej2-calendars';\nimport { DropDownButton } from '@syncfusion/ej2-splitbuttons';\nimport { Tooltip, createSpinner, showSpinner, hideSpinner } from '@syncfusion/ej2-popups';\nimport { compile as templateCompiler, getNumericObject } from '@syncfusion/ej2-base';\n/**\n * Defines the Columns of Query Builder\n */\nvar Columns = /** @class */ (function (_super) {\n __extends(Columns, _super);\n function Columns() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], Columns.prototype, \"field\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"label\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"type\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"values\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"operators\", void 0);\n __decorate([\n Property()\n ], Columns.prototype, \"ruleTemplate\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"template\", void 0);\n __decorate([\n Property({ isRequired: true, min: 0, max: Number.MAX_VALUE })\n ], Columns.prototype, \"validation\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"format\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"step\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"value\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"category\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"columns\", void 0);\n return Columns;\n}(ChildProperty));\nexport { Columns };\n/**\n * Defines the rule of Query Builder\n */\nvar Rule = /** @class */ (function (_super) {\n __extends(Rule, _super);\n function Rule() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], Rule.prototype, \"condition\", void 0);\n __decorate([\n Collection([], Rule)\n ], Rule.prototype, \"rules\", void 0);\n __decorate([\n Property(null)\n ], Rule.prototype, \"field\", void 0);\n __decorate([\n Property(null)\n ], Rule.prototype, \"label\", void 0);\n __decorate([\n Property(null)\n ], Rule.prototype, \"type\", void 0);\n __decorate([\n Property(null)\n ], Rule.prototype, \"operator\", void 0);\n __decorate([\n Property(null)\n ], Rule.prototype, \"value\", void 0);\n __decorate([\n Property(false)\n ], Rule.prototype, \"not\", void 0);\n __decorate([\n Property(null)\n ], Rule.prototype, \"isLocked\", void 0);\n return Rule;\n}(ChildProperty));\nexport { Rule };\n/**\n * Defines the property for value.\n */\nvar Value = /** @class */ (function (_super) {\n __extends(Value, _super);\n function Value() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], Value.prototype, \"numericTextBoxModel\", void 0);\n __decorate([\n Property(null)\n ], Value.prototype, \"multiSelectModel\", void 0);\n __decorate([\n Property(null)\n ], Value.prototype, \"datePickerModel\", void 0);\n __decorate([\n Property(null)\n ], Value.prototype, \"textBoxModel\", void 0);\n __decorate([\n Property(null)\n ], Value.prototype, \"radioButtonModel\", void 0);\n return Value;\n}(ChildProperty));\nexport { Value };\n/**\n * Defines the ruleDelete, groupInsert, and groupDelete options of Query Builder.\n */\nvar ShowButtons = /** @class */ (function (_super) {\n __extends(ShowButtons, _super);\n function ShowButtons() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], ShowButtons.prototype, \"cloneRule\", void 0);\n __decorate([\n Property(false)\n ], ShowButtons.prototype, \"cloneGroup\", void 0);\n __decorate([\n Property(false)\n ], ShowButtons.prototype, \"lockRule\", void 0);\n __decorate([\n Property(false)\n ], ShowButtons.prototype, \"lockGroup\", void 0);\n __decorate([\n Property(true)\n ], ShowButtons.prototype, \"ruleDelete\", void 0);\n __decorate([\n Property(true)\n ], ShowButtons.prototype, \"groupInsert\", void 0);\n __decorate([\n Property(true)\n ], ShowButtons.prototype, \"groupDelete\", void 0);\n return ShowButtons;\n}(ChildProperty));\nexport { ShowButtons };\nvar QueryBuilder = /** @class */ (function (_super) {\n __extends(QueryBuilder, _super);\n function QueryBuilder(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.isReadonly = true;\n _this.fields = { text: 'label', value: 'field' };\n _this.updatedRule = { not: false, condition: 'and', isLocked: false };\n _this.isLocale = false;\n _this.isRefreshed = false;\n _this.isNotified = false;\n _this.isAddSuccess = false;\n _this.isNotValueChange = false;\n _this.isFieldChange = false;\n _this.isFieldClose = false;\n _this.isDestroy = false;\n _this.isGetNestedData = false;\n _this.isCustomOprCols = [];\n _this.groupCounter = 0;\n _this.lockItems = [];\n _this.groupIndex = -1;\n _this.ruleIndex = -1;\n _this.isLastGroup = false;\n _this.cloneGrpBtnClick = false;\n _this.isMiddleGroup = false;\n _this.cloneRuleBtnClick = false;\n _this.isValueEmpty = false;\n MultiSelect.Inject(CheckBoxSelection);\n return _this;\n }\n QueryBuilder.prototype.getPersistData = function () {\n return this.addOnPersist(['rule']);\n };\n /**\n * Clears the rules without root rule.\n *\n * @returns {void}.\n */\n QueryBuilder.prototype.reset = function () {\n this.isImportRules = false;\n var bodyElem = this.element.querySelector('.e-group-body');\n var inputElement = this.element.querySelectorAll('input.e-control');\n for (var i = 0, len = inputElement.length; i < len; i++) {\n if (inputElement[i].className.indexOf('e-tooltip') > -1) {\n getComponent(inputElement[i], 'tooltip').destroy();\n }\n else if (inputElement[i].parentElement.className.indexOf('e-tooltip') > -1) {\n getComponent(inputElement[i].parentElement, 'tooltip').destroy();\n }\n }\n if (bodyElem) {\n bodyElem.innerHTML = '';\n }\n else {\n var grpContainer = this.createElement('div', { attrs: { class: 'e-group-container' } });\n var grpHeader = this.createElement('div', { attrs: { class: 'e-group-header' } });\n var grpBody = this.createElement('div', { attrs: { class: 'e-group-body' } });\n grpContainer.appendChild(grpHeader).appendChild(grpBody);\n this.element.appendChild(grpContainer);\n bodyElem = this.element.querySelector('.e-group-body');\n }\n if (this.headerTemplate && this.isRoot) {\n this.element.innerHTML = '';\n this.isRoot = false;\n }\n if (this.enableNotCondition) {\n removeClass(this.element.querySelectorAll('.e-qb-toggle'), 'e-active-toggle');\n }\n bodyElem.appendChild(this.createElement('div', { attrs: { class: 'e-rule-list' } }));\n this.levelColl[this.element.id + '_group0'] = [0];\n this.setProperties({ rule: { condition: 'and', not: false, rules: [] } }, true);\n this.disableRuleCondition(bodyElem.parentElement);\n };\n QueryBuilder.prototype.getWrapper = function () {\n return this.element;\n };\n QueryBuilder.prototype.getModuleName = function () {\n return 'query-builder';\n };\n QueryBuilder.prototype.requiredModules = function () {\n var modules = [];\n modules.push({\n member: 'query-library',\n args: [this]\n });\n return modules;\n };\n QueryBuilder.prototype.GetRootColumnName = function (field) {\n return this.separator ? field.split(this.separator)[0] : field;\n };\n QueryBuilder.prototype.initialize = function () {\n if (this.dataColl.length) {\n var columnKeys = Object.keys(this.dataColl[0]);\n var cols = [];\n var categories = [];\n var type = void 0;\n var groupBy = false;\n var isDate = false;\n var value = void 0;\n var validateObj = { isRequired: true, min: 0, max: Number.MAX_VALUE };\n if (this.columns.length) {\n this.columnSort();\n var columns = this.columns;\n for (var i = 0, len = columns.length; i < len; i++) {\n this.updateCustomOperator(columns[i], 'initial');\n if (!columns[i].type) {\n if (columnKeys.indexOf(columns[i].field) > -1) {\n value = this.dataColl[0][columns[i].field];\n type = typeof value;\n if (type === 'string') {\n isDate = !isNaN(Date.parse(value));\n }\n else if (type === 'object') {\n isDate = value instanceof Date && !isNaN(value.getTime());\n type = 'string';\n }\n columns[i].type = type;\n isDate = false;\n }\n type = 'string';\n }\n if (!columns[i].validation) {\n columns[i].validation = validateObj;\n }\n if (columns[i].category) {\n groupBy = true;\n }\n else {\n columns[i].category = this.l10n.getConstant('OtherFields');\n }\n if (categories.indexOf(columns[i].category) < 0) {\n categories.push(columns[i].category);\n }\n if (!columns[i].operators ||\n (this.isLocale && this.isCustomOprCols.indexOf(columns[i].field) === -1)) {\n columns[i].operators = this.customOperators[columns[i].type + 'Operator'];\n }\n }\n if (groupBy && (categories.length > 1 || categories[0] !== this.l10n.getConstant('OtherFields'))) {\n this.fields = { text: 'label', value: 'field', groupBy: 'category' };\n }\n this.updateSubFieldsFromColumns(this.columns);\n }\n else {\n for (var i = 0, len = columnKeys.length; i < len; i++) {\n value = this.dataColl[0][columnKeys[i]];\n type = typeof value;\n if (type === 'string') {\n isDate = !isNaN(Date.parse(value));\n }\n else if (type === 'object' && !Object.keys(value).length) {\n isDate = value instanceof Date && !isNaN(value.getTime());\n type = 'string';\n }\n cols[i] = { 'field': columnKeys[i], 'label': columnKeys[i], 'type': isDate ? 'date' : type,\n 'validation': validateObj };\n isDate = false;\n cols[i].operators = this.customOperators[cols[i].type + 'Operator'];\n if (type === 'object') {\n this.updateSubFields(value, cols[i]);\n }\n }\n this.columns = cols;\n }\n }\n else if (this.columns && this.columns.length) {\n var columns = this.columns;\n for (var i = 0, len = columns.length; i < len; i++) {\n if (columns[i].category) {\n this.fields = { text: 'label', value: 'field', groupBy: 'category' };\n }\n else {\n columns[i].category = this.l10n.getConstant('OtherFields');\n }\n this.updateCustomOperator(columns[i], 'initial');\n if (!columns[i].operators ||\n (this.isLocale && this.isCustomOprCols.indexOf(columns[i].field) === -1)) {\n columns[i].operators = this.customOperators[columns[i].type + 'Operator'];\n }\n }\n this.updateSubFieldsFromColumns(this.columns);\n }\n this.trigger('dataBound', { type: 'dataBound' });\n };\n QueryBuilder.prototype.updateSubFieldsFromColumns = function (col, field) {\n for (var i = 0; i < col.length; i++) {\n if (this.separator !== '' && col[i].field.indexOf(this.separator) < 0) {\n col[i].field = field ? field + this.separator + col[i].field : col[i].field;\n }\n if (col[i].operators) {\n this.updateCustomOperator(col[i]);\n }\n else if (col[i].type && col[i].type !== 'object') {\n col[i].operators = this.customOperators[col[i].type + 'Operator'];\n }\n if (col[i].columns) {\n col[i].type = 'object';\n this.updateSubFieldsFromColumns(col[i].columns, col[i].field);\n }\n }\n };\n QueryBuilder.prototype.updateSubFields = function (value, col, data) {\n var sampCol;\n col.columns = [];\n var columnKeys = Object.keys(value);\n var field;\n var label;\n var type;\n var result;\n data = data ? data : this.dataColl[0];\n for (var i = 0, len = columnKeys.length; i < len; i++) {\n var compField = col.field.split('.');\n if (data) {\n result = data[compField[compField.length - 1]][columnKeys[i]];\n }\n else {\n result = this.dataColl[0][col.field][columnKeys[i]];\n }\n var resData = data[col.field.split(this.separator)[col.field.split(this.separator).length - 1]];\n type = typeof result;\n field = col.field + this.separator + columnKeys[i];\n label = columnKeys[i];\n type = (type === 'object' && !isNaN(Date.parse(result))) ? 'date' : type;\n sampCol = { field: field, label: label, type: type };\n if (type !== 'object') {\n sampCol.operators = this.customOperators[type + 'Operator'];\n }\n col.columns.push(sampCol);\n if (type === 'object') {\n this.updateSubFields(result, sampCol, resData);\n }\n }\n };\n QueryBuilder.prototype.updateCustomOperator = function (column, from) {\n if (column.operators) {\n if (!this.isLocale && from === 'initial' && !isNullOrUndefined(this.isCustomOprCols)) {\n this.isCustomOprCols.push(column.field);\n }\n var _loop_1 = function (j) {\n var sqlIdx = Object.keys(column.operators[j]).indexOf('sqlOperator');\n if (sqlIdx > -1) {\n var operator_1 = column.operators[j];\n var operColl = Object.keys(operator_1);\n var values = operColl.map(function (key) { return operator_1[\"\" + key]; }).join(',').split(',');\n var valueIdx = operColl.indexOf('value');\n this_1.operators[values[valueIdx]] = values[sqlIdx];\n }\n };\n var this_1 = this;\n for (var j = 0; j < column.operators.length; j++) {\n _loop_1(j);\n }\n }\n };\n QueryBuilder.prototype.focusEventHandler = function (event) {\n this.target = event.target;\n };\n QueryBuilder.prototype.clickEventHandler = function (event) {\n var _this = this;\n var target = event.target;\n var args;\n this.isImportRules = false;\n var groupID;\n if (target.tagName === 'SPAN') {\n target = target.parentElement;\n }\n if (typeof target.className === 'string' && target.className.indexOf('e-collapse-rule') > -1) {\n var animation = new Animation({ duration: 1000, delay: 0 });\n if (this.element.querySelectorAll('.e-summary-content').length < 1) {\n this.renderSummary();\n }\n var summaryElem = document.getElementById(this.element.id + '_summary_content');\n var txtareaElem = summaryElem.querySelector('.e-summary-text');\n animation.animate('.e-query-builder', { name: 'SlideLeftIn' });\n var groupElem = this.element.querySelector('.e-group-container');\n groupElem.style.display = 'none';\n txtareaElem.textContent = this.getSqlFromRules(this.rule);\n summaryElem.style.display = 'block';\n txtareaElem.style.height = txtareaElem.scrollHeight + 'px';\n }\n if (target.tagName === 'BUTTON' && typeof target.className === 'string' && target.className.indexOf('e-qb-toggle') < 0) {\n var animation = new Animation({ duration: 1000, delay: 0 });\n switch (true) {\n case target.className.indexOf('e-removerule') > -1:\n this.actionButton = target;\n this.deleteRule(target);\n break;\n case target.className.indexOf('e-clone-rule-btn') > -1:\n this.actionButton = target;\n this.cloneRuleBtnClick = true;\n this.ruleClone(target);\n break;\n case target.className.indexOf('e-lock-rule-btn') > -1:\n this.actionButton = target;\n this.ruleLock(target);\n break;\n case target.className.indexOf('e-lock-grp-btn') > -1:\n this.actionButton = target;\n this.groupLock(target);\n break;\n case target.className.indexOf('e-clone-grp-btn') > -1:\n this.actionButton = target;\n this.cloneGrpBtnClick = true;\n this.groupClone(closest(target, '.e-group-container'));\n break;\n case target.className.indexOf('e-deletegroup') > -1:\n this.actionButton = target;\n this.deleteGroup(closest(target, '.e-group-container'));\n break;\n case target.className.indexOf('e-edit-rule') > -1:\n animation.animate('.e-query-builder', { name: 'SlideLeftIn' });\n document.getElementById(this.element.id + '_summary_content').style.display = 'none';\n if (this.element.querySelectorAll('.e-group-container').length < 1) {\n this.addGroupElement(false, this.element, this.rule.condition, false, this.rule.not);\n var mRules = extend({}, this.rule, {}, true);\n this.setGroupRules(mRules);\n this.renderSummaryCollapse();\n }\n else {\n var groupElem = this.element.querySelector('.e-group-container');\n if (groupElem.querySelectorAll('.e-collapse-rule').length < 1) {\n this.renderSummaryCollapse();\n }\n groupElem.style.display = 'block';\n }\n break;\n }\n }\n else if ((target.tagName === 'LABEL' && target.parentElement.className.indexOf('e-btn-group') > -1) ||\n (typeof target.className === 'string' && target.className.indexOf('e-qb-toggle') > -1)) {\n var element = closest(target, '.e-group-container');\n if (!this.headerTemplate) {\n var forIdValue = target.getAttribute('for');\n var targetValue = void 0;\n if (forIdValue) {\n targetValue = document.getElementById(forIdValue).getAttribute('value');\n }\n else if (this.enableSeparateConnector) {\n targetValue = target.textContent;\n }\n groupID = element.id.replace(this.element.id + '_', '');\n var group = this.getGroup(groupID);\n var ariaChecked = void 0;\n if (this.enableNotCondition) {\n if (target.className.indexOf('e-qb-toggle') > -1) {\n var toggleElem = element.getElementsByClassName('e-qb-toggle')[0];\n if (toggleElem.className.indexOf('e-active-toggle') > -1) {\n removeClass([toggleElem], 'e-active-toggle');\n ariaChecked = false;\n }\n else {\n addClass([toggleElem], 'e-active-toggle');\n ariaChecked = true;\n }\n targetValue = group.condition;\n }\n else {\n ariaChecked = group.not;\n }\n }\n args = { groupID: groupID, cancel: false, type: 'condition', value: targetValue.toLowerCase() };\n if (this.enableNotCondition) {\n args = { groupID: groupID, cancel: false, type: 'condition', value: targetValue.toLowerCase(),\n 'not': ariaChecked };\n }\n }\n if (!this.isImportRules) {\n this.trigger('beforeChange', args, function (observedChangeArgs) {\n _this.beforeSuccessCallBack(observedChangeArgs, target);\n });\n }\n else {\n this.beforeSuccessCallBack(args, target);\n }\n this.target = target;\n }\n };\n QueryBuilder.prototype.beforeSuccessCallBack = function (args, target) {\n if (args && !args.cancel) {\n var element = closest(target, '.e-group-container');\n var groupID = element.id.replace(this.element.id + '_', '');\n var beforeRules = this.getValidRules(this.rule);\n var rule = this.getParentGroup(element);\n if (this.enableSeparateConnector) {\n if (isNullOrUndefined(closest(target, '.e-rule-container')) &&\n element.classList.contains('e-group-container')) {\n element = target.parentElement.previousElementSibling !== null ?\n target.parentElement.previousElementSibling : element;\n }\n else {\n element = closest(target, '.e-rule-container');\n }\n var id = element.id.replace(this.element.id + '_', '');\n if (element.classList.contains('e-rule-container')) {\n rule = this.getRule(element);\n rule.condition = args.value;\n }\n else if (element.classList.contains('e-group-container')) {\n rule = this.getGroup(element);\n rule.condition = args.value;\n }\n if (this.enableNotCondition) {\n rule.not = args.not;\n }\n if (!this.isImportRules) {\n this.trigger('change', { groupID: groupID, ruleID: id, type: 'condition', value: rule.condition });\n }\n }\n else {\n rule.condition = args.value;\n if (this.enableNotCondition) {\n rule.not = args.not;\n }\n if (!this.isImportRules) {\n this.trigger('change', { groupID: groupID, type: 'condition', value: rule.condition });\n }\n }\n this.filterRules(beforeRules, this.getValidRules(this.rule), 'condition');\n if (this.enableSeparateConnector) {\n var andElem = target.parentElement.querySelector('.e-btngroup-and');\n var orElem = target.parentElement.querySelector('.e-btngroup-or');\n if (andElem && orElem) {\n if (args.value === 'and') {\n andElem.checked = true;\n orElem.checked = false;\n }\n else if (args.value === 'or') {\n orElem.checked = true;\n andElem.checked = false;\n }\n }\n }\n }\n };\n QueryBuilder.prototype.selectBtn = function (target, event) {\n if (event.name === 'beforeOpen') {\n if (this.showButtons.groupInsert || isNullOrUndefined(this.showButtons.groupInsert)) {\n if (this.element.querySelectorAll('.e-group-container').length >= this.maxGroupCount + 1) {\n addClass([event.element.querySelector('li span.e-addgroup').parentElement], 'e-button-hide');\n }\n else {\n removeClass([event.element.querySelector('li span.e-addgroup').parentElement], 'e-button-hide');\n }\n if (this.enableRtl) {\n addClass([event.element.querySelector('li').parentElement], 'e-rtl');\n }\n }\n else {\n addClass([event.element.querySelector('li span.e-addgroup').parentElement], 'e-button-hide');\n }\n }\n else if (event.element.children[0].className.indexOf('e-addrule') > -1) {\n this.addRuleElement(closest(target, '.e-group-container'), {});\n }\n else if (event.element.children[0].className.indexOf('e-addgroup') > -1) {\n this.addGroupElement(true, closest(target, '.e-group-container'), '', true);\n }\n };\n QueryBuilder.prototype.appendRuleElem = function (target, column, type, parentId, action, rule) {\n var ruleElem;\n var elem;\n var ruleListElem = target.querySelector('.e-rule-list');\n var args;\n if (type === 'change') {\n ruleElem = select('#' + parentId, target);\n }\n else {\n ruleElem = this.createElement('div', { attrs: { class: 'e-rule-container' } });\n ruleElem.setAttribute('id', target.id + '_rule' + this.ruleIdCounter);\n if (this.showButtons.cloneRule && this.cloneRuleBtnClick) {\n if (this.ruleIndex < 0) {\n ruleListElem.appendChild(ruleElem);\n }\n else {\n if (this.enableSeparateConnector) {\n var index = -1;\n var tempRuleIndex = this.ruleIndex + 1;\n for (var i = 0; i < tempRuleIndex; i++) {\n if (i === ruleListElem.children.length) {\n break;\n }\n if (ruleListElem.children[i].classList.contains('e-rule-container')) {\n tempRuleIndex++;\n index++;\n }\n }\n ruleListElem.insertBefore(ruleElem, ruleListElem.children[this.ruleIndex + index + 1]); // added clone rule to next position\n }\n else {\n ruleListElem.insertBefore(ruleElem, ruleListElem.children[this.ruleIndex + 1]); // added clone rule to next position\n }\n }\n this.cloneRuleBtnClick = false;\n }\n else {\n ruleListElem.appendChild(ruleElem);\n }\n this.ruleIdCounter++;\n }\n if (column && column.ruleTemplate && rule) {\n args = { requestType: 'template-initialize', ruleID: ruleElem.id, action: action, fields: this.fields, rule: rule };\n this.trigger('actionBegin', args);\n this.ruleTemplateFn = this.templateParser(column.ruleTemplate);\n var templateID = this.element.id + column.field;\n var template = void 0;\n args.fields = this.fields;\n args.columns = this.columns;\n if (rule.field === '') {\n rule.field = column.field;\n }\n args.operators = this.getOperators(rule.field);\n args.operatorFields = { text: 'key', value: 'value' };\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.isReact) {\n template = this.ruleTemplateFn(args, this, ruleElem.id, templateID)[0];\n elem = template;\n elem.className += ' e-rule-field';\n ruleElem.appendChild(elem);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n }\n else if (this.isAngular) {\n var templateColl = this.ruleTemplateFn(args, this, ruleElem.id, templateID);\n template = (templateColl[0].nodeType === 3) ? templateColl[1] : templateColl[0];\n elem = template;\n elem.className += ' e-rule-field';\n ruleElem.appendChild(elem);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n }\n else if (this.isVue3) {\n template = this.ruleTemplateFn(args, this, 'Template', templateID);\n elem = template;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n append(elem, ruleElem);\n if (ruleElem.children.length) {\n ruleElem.children[ruleElem.children.length - 1].className += ' e-rule-field';\n }\n }\n else {\n template = this.ruleTemplateFn(args, this, 'Template', templateID)[0];\n elem = template;\n elem.className += ' e-rule-field';\n ruleElem.appendChild(elem);\n }\n }\n else {\n elem = this.ruleElem.querySelector('.e-rule-field').cloneNode(true);\n ruleElem.appendChild(elem);\n }\n if (this.showButtons.lockGroup) {\n removeClass(ruleElem.querySelectorAll('.e-lock-grp-btn'), 'e-button-hide');\n }\n if (this.showButtons.lockRule) {\n removeClass(ruleElem.querySelectorAll('.e-lock-rule-btn'), 'e-button-hide');\n }\n if (this.showButtons.cloneGroup) {\n removeClass(ruleElem.querySelectorAll('.e-clone-grp-btn'), 'e-button-hide');\n }\n if (this.showButtons.cloneRule) {\n removeClass(ruleElem.querySelectorAll('.e-clone-rule-btn'), 'e-button-hide');\n }\n if (this.showButtons.ruleDelete) {\n removeClass(ruleElem.querySelectorAll('.e-lock-grp-btn'), 'e-button-hide');\n }\n if (this.allowDragAndDrop) {\n removeClass(ruleElem.querySelectorAll('.e-drag-qb-rule'), 'e-hidden');\n }\n if (column && column.ruleTemplate && rule) {\n this.renderReactTemplates();\n }\n return ruleElem;\n };\n QueryBuilder.prototype.addRuleElement = function (target, rule, column, action, parentId, isRuleTemplate) {\n var _this = this;\n if (!target) {\n return;\n }\n var args = { groupID: target.id.replace(this.element.id + '_', ''), cancel: false, type: 'insertRule' };\n if (!this.isImportRules && !this.isInitialLoad && !this.prvtEvtTgrDaD) {\n this.trigger('beforeChange', args, function (observedChangeArgs) {\n _this.addRuleSuccessCallBack(observedChangeArgs, target, rule, column, action, parentId, isRuleTemplate);\n });\n }\n else {\n this.isInitialLoad = false;\n this.addRuleSuccessCallBack(args, target, rule, column, action, parentId, isRuleTemplate);\n }\n };\n QueryBuilder.prototype.addRuleSuccessCallBack = function (args, trgt, rule, col, act, pId, isRlTmp) {\n var height = (this.element.className.indexOf('e-device') > -1) ? '250px' : '200px';\n var ruleID;\n var column = (rule && rule.field) ? this.getColumn(rule.field) : col ? col : this.columns[0];\n var operators;\n var dropDownList;\n var ruleElem;\n var newRule = { 'label': '', 'field': '', 'type': '', 'operator': '' };\n if (!args.cancel) {\n if (column && column.ruleTemplate && rule.field) {\n this.selectedColumn = column;\n operators = this.selectedColumn.operators;\n newRule = { 'label': column.label, 'field': column.field, 'type': column.type, 'operator': operators[0].value };\n var passedRule = Object.keys(rule).length ? rule : newRule;\n ruleElem = this.appendRuleElem(trgt, column, act, pId, 'field', passedRule);\n var args_1 = { requestType: 'template-create', action: 'insert-rule', ruleID: ruleElem.id,\n fields: this.fields, rule: passedRule };\n this.trigger('actionBegin', args_1);\n }\n else {\n ruleElem = this.appendRuleElem(trgt, column, act, pId, 'field');\n ruleElem.querySelector('.e-filter-input').setAttribute('id', ruleElem.id + '_filterkey');\n var element = ruleElem.querySelector('.e-rule-delete');\n if (this.element.className.indexOf('e-device') > -1 || this.displayMode === 'Vertical') {\n element.textContent = this.l10n.getConstant('Remove');\n addClass([element], 'e-flat');\n addClass([element], 'e-primary');\n }\n else {\n addClass([element], 'e-round');\n addClass([element], 'e-icon-btn');\n element.setAttribute('title', this.l10n.getConstant('DeleteRule'));\n var spanElement = this.createElement('span', { attrs: { class: 'e-btn-icon e-icons e-delete-icon' } });\n ruleElem.querySelector('.e-rule-delete').appendChild(spanElement);\n }\n if (!this.showButtons.ruleDelete) {\n element.classList.add('e-button-hide');\n }\n }\n if (this.displayMode === 'Vertical' || this.element.className.indexOf('e-device') > -1) {\n ruleElem.className = 'e-rule-container e-vertical-mode';\n }\n else {\n ruleElem.className = 'e-rule-container e-horizontal-mode';\n }\n var previousRuleElem = ruleElem.previousElementSibling;\n if (this.enableSeparateConnector) {\n var prevRule = void 0;\n var ruleContainer = void 0;\n if (previousRuleElem && previousRuleElem.classList.contains('e-group-container')) {\n ruleContainer = previousRuleElem.querySelectorAll('.e-rule-container');\n previousRuleElem = ruleContainer[ruleContainer.length - 1];\n }\n if (previousRuleElem && previousRuleElem.classList.contains('e-rule-container')) {\n prevRule = this.getRule(previousRuleElem);\n }\n if (this.headerTemplate && previousRuleElem && prevRule) {\n this.headerTemplateFn(previousRuleElem, false, prevRule.condition, prevRule, previousRuleElem.id);\n }\n else if (isNullOrUndefined(previousRuleElem) && ruleElem.id !== this.element.id + '_group0_rule0') {\n var group = ruleElem.closest('.e-group-container');\n if (group && group.previousElementSibling) {\n var prevElem = group.previousElementSibling;\n var prevRuleContainer = prevElem.querySelectorAll('.e-rule-container');\n if (prevElem.classList.contains('e-group-container')) {\n prevElem = prevRuleContainer[prevRuleContainer.length - 1];\n }\n if (prevElem.classList.contains('e-rule-container')) {\n var prevRule_1 = this.getRule(prevElem);\n this.headerTemplateFn(prevElem, false, prevRule_1.condition, prevRule_1, prevElem.id, true);\n }\n }\n else {\n this.headerTemplateFn(ruleElem, false, rule.condition, rule, ruleElem.id, true);\n }\n }\n }\n else {\n if (previousRuleElem && previousRuleElem.className.indexOf('e-rule-container') > -1) {\n if (ruleElem.className.indexOf('e-joined-rule') < 0) {\n ruleElem.className += ' e-joined-rule';\n }\n if (previousRuleElem.className.indexOf('e-prev-joined-rule') < 0) {\n previousRuleElem.className += ' e-prev-joined-rule';\n }\n }\n }\n if (previousRuleElem && previousRuleElem.className.indexOf('e-group-container') > -1 &&\n ruleElem.className.indexOf('e-separate-rule') < 0) {\n ruleElem.className += ' e-separate-rule';\n }\n if (!this.isImportRules) {\n this.updateAddedRule(trgt, rule, newRule, isRlTmp, pId, this.enableSeparateConnector ? true : null);\n }\n if (!column || (column && !column.ruleTemplate) || !rule.field) {\n if (this.fieldMode === 'Default') {\n var ddlField = void 0;\n var ddlValue = void 0;\n if (this.separator && rule.field) {\n ddlValue = this.GetRootColumnName(rule.field);\n }\n else if (this.autoSelectField) {\n ddlValue = this.GetRootColumnName(rule.field);\n }\n else {\n ddlValue = this.isImportRules ? this.GetRootColumnName(rule.field) : rule.field;\n }\n ddlField = {\n dataSource: this.columns,\n fields: this.fields, placeholder: this.l10n.getConstant('SelectField'),\n popupHeight: ((this.columns.length > 5) ? height : 'auto'), close: this.fieldClose.bind(this, ruleElem.id + '_filterkey'),\n change: this.changeField.bind(this), value: rule ? ddlValue : null, open: this.popupOpen.bind(this, true), cssClass: 'qb-dropdownlist'\n };\n if (this.fieldModel) {\n ddlField = __assign({}, ddlField, this.fieldModel);\n }\n dropDownList = new DropDownList(ddlField);\n dropDownList.appendTo('#' + ruleElem.id + '_filterkey');\n var ddlVal = void 0;\n if (this.separator && rule.field) {\n ddlVal = this.GetRootColumnName(rule.field);\n }\n else {\n ddlVal = this.isImportRules ? this.GetRootColumnName(rule.field) :\n dropDownList.value;\n }\n this.selectedColumn = dropDownList.getDataByValue(ddlVal);\n if (Object.keys(rule).length) {\n this.changeRule(rule, {\n element: dropDownList.element, itemData: this.selectedColumn\n });\n }\n }\n else {\n var ddlField = void 0;\n var ddlValue = this.isImportRules ? rule.field : rule.field;\n this.dummyDropdownTreeDs = extend([], this.columns, [], true);\n this.updateDropdowntreeDS(this.dummyDropdownTreeDs);\n ddlField = {\n fields: { dataSource: this.dummyDropdownTreeDs,\n value: 'field', text: 'label', child: 'columns', expanded: 'expanded', selectable: 'selectable' },\n placeholder: this.l10n.getConstant('SelectField'), showClearButton: false,\n popupHeight: ((this.columns.length > 5) ? height : 'auto'), changeOnBlur: false,\n change: this.changeField.bind(this), value: !isNullOrUndefined(ddlValue) ? [ddlValue] : null,\n open: this.popupOpen.bind(this, false), treeSettings: { expandOn: 'Click' },\n cssClass: 'e-qb-ddt', filtering: this.dropdownTreeFiltering.bind(this), close: this.dropdownTreeClose.bind(this)\n };\n if (this.fieldModel) {\n ddlField = __assign({}, ddlField, this.fieldModel);\n }\n var dropdowntree = new DropDownTree(ddlField);\n dropdowntree.appendTo('#' + ruleElem.id + '_filterkey');\n if (!isNullOrUndefined(dropdowntree.value)) {\n var value = this.getLabelFromColumn(dropdowntree.value[0]);\n dropdowntree.element.value = value;\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var ddlVal = !isNullOrUndefined(rule.field) ?\n this.GetRootColumnName(rule.field) : dropdowntree.value;\n this.selectedColumn = this.getColumn(ddlVal);\n if (Object.keys(rule).length) {\n this.changeRule(rule, {\n element: dropdowntree.element, itemData: this.selectedColumn\n });\n }\n }\n }\n ruleID = ruleElem.id.replace(this.element.id + '_', '');\n if (rule && rule.isLocked) {\n var lockRuleTarget = ruleElem.querySelector('.e-lock-rule-btn');\n this.ruleLock(lockRuleTarget);\n }\n if (!this.isImportRules && !this.prvtEvtTgrDaD) {\n this.trigger('change', { groupID: trgt.id.replace(this.element.id + '_', ''), ruleID: ruleID, type: 'insertRule' });\n }\n }\n if (this.enableSeparateConnector && isNullOrUndefined(rule.condition) && ruleID) {\n rule = this.getRule(ruleID);\n }\n if (this.enableSeparateConnector) {\n var prevElem = ruleElem.previousElementSibling;\n var ruleContainer = void 0;\n while (prevElem && !prevElem.classList.contains('e-rule-container')) {\n if (prevElem.classList.contains('e-group-container')) {\n ruleContainer = prevElem.querySelectorAll('.e-rule-container');\n prevElem = ruleContainer[ruleContainer.length - 1];\n break;\n }\n prevElem = prevElem.previousElementSibling;\n }\n if (this.headerTemplate && prevElem) {\n var prevRule = this.getRule(prevElem);\n var args_2 = { requestType: 'rule-template-create', ruleID: prevElem.id, condition: prevRule.condition,\n notCondition: this.enableNotCondition ? true : undefined };\n this.trigger('actionBegin', args_2);\n }\n else if (isNullOrUndefined(prevElem) && ruleElem.id !== this.element.id + '_group0_rule0') {\n var group = ruleElem.closest('.e-group-container');\n if (group && group.previousElementSibling && group.previousElementSibling.previousElementSibling) {\n var prevElem_1 = group.previousElementSibling.previousElementSibling;\n if (prevElem_1.classList.contains('e-group-container')) {\n var ruleContainer_1 = prevElem_1.querySelectorAll('.e-rule-container');\n prevElem_1 = ruleContainer_1[ruleContainer_1.length - 1];\n }\n if (prevElem_1.classList.contains('e-rule-container')) {\n var prevRule = this.getRule(prevElem_1);\n var args_3 = { requestType: 'rule-template-create', ruleID: prevElem_1.id,\n condition: prevRule.condition, notCondition: this.enableNotCondition ? true : undefined };\n this.trigger('actionBegin', args_3);\n }\n }\n }\n this.setMultiConnector(ruleElem);\n }\n };\n QueryBuilder.prototype.dropdownTreeFiltering = function (args) {\n var _this = this;\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var proxy = this;\n var ruleElemID = '';\n var srcElement = args.event.srcElement;\n var isClearIcon = srcElement.classList.contains('e-clear-icon');\n var inputElem = isClearIcon ? srcElement.parentElement.querySelector('.e-textbox') : srcElement;\n ruleElemID = inputElem.id.split('_filterkey')[0];\n var ruleElem = document.getElementById(ruleElemID);\n this.ddTree = getComponent(ruleElem.querySelector('input.e-dropdowntree'), 'dropdowntree');\n var hierarchicalData = extend([], this.columns, [], true);\n // Cancel the default filtering.\n args.cancel = true;\n if (args.text === '') {\n this.changeDataSource(hierarchicalData);\n }\n else {\n var matchedDataSource = hierarchicalData\n .map(function (data) { return _this.nestedChildFilter(args.text, data); })\n .filter(function (filteredChild) { return filteredChild !== null; });\n this.changeDataSource(matchedDataSource);\n setTimeout(function () {\n if (!isNullOrUndefined(proxy.ddTree) && !isNullOrUndefined(proxy.ddTree.treeObj)) {\n proxy.ddTree.treeObj.expandAll();\n }\n }, 100);\n }\n };\n QueryBuilder.prototype.changeDataSource = function (data) {\n this.updateDropdowntreeDS(data);\n this.ddTree.treeObj.fields = {\n dataSource: data,\n value: 'field',\n text: 'label',\n child: 'columns',\n expanded: 'expanded'\n };\n this.ddTree.treeObj.refresh();\n };\n QueryBuilder.prototype.nestedChildFilter = function (value, node) {\n var _this = this;\n var children = node[this.ddTree.fields.child];\n if (!children) {\n return this.isMatchedNode(value, node) ? node : null;\n }\n var matchedChildren = children\n .map(function (child) { return _this.nestedChildFilter(value, child); })\n .filter(function (filteredChild) { return filteredChild !== null; });\n if (matchedChildren.length) {\n node[this.ddTree.fields.child] = matchedChildren;\n return node;\n }\n else {\n node[this.ddTree.fields.child] = children;\n return this.isMatchedNode(value, node) ? node : null;\n }\n };\n QueryBuilder.prototype.isMatchedNode = function (value, node) {\n var checkValue = node[this.ddTree.fields.text].toLowerCase();\n value = value ? value.toLowerCase() : '';\n return checkValue.indexOf(value) !== -1;\n };\n QueryBuilder.prototype.dropdownTreeClose = function () {\n if (this.ddTree) {\n this.changeDataSource(extend([], this.columns, [], true));\n }\n this.ddTree = null;\n };\n QueryBuilder.prototype.updateDropdowntreeDS = function (columns) {\n for (var i = 0; i < columns.length; i++) {\n if (columns[parseInt(i.toString(), 10)].type === 'object') {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.isAngular && columns[parseInt(i.toString(), 10)].template) {\n delete columns[parseInt(i.toString(), 10)].template;\n }\n columns[parseInt(i.toString(), 10)].selectable = false;\n this.updateDropdowntreeDS(columns[parseInt(i.toString(), 10)].columns);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n }\n else if (this.isAngular && columns[parseInt(i.toString(), 10)].template) {\n delete columns[parseInt(i.toString(), 10)].template;\n }\n }\n };\n QueryBuilder.prototype.updateAddedRule = function (target, rule, newRule, isRuleTemplate, pId, isNewRuleAdded) {\n var ruleElem;\n var index = 0;\n var groupElem;\n var rules;\n if (isRuleTemplate) {\n ruleElem = select('#' + pId, target);\n groupElem = closest(target, '.e-group-container');\n rules = this.getParentGroup(groupElem);\n while (ruleElem && ruleElem.previousElementSibling !== null) {\n ruleElem = ruleElem.previousElementSibling;\n var enableSeparateCondition = this.enableSeparateConnector && ((!this.headerTemplate && !ruleElem.classList.contains('e-btn-group')) ||\n (this.headerTemplate && (ruleElem.classList.contains('e-rule-container') ||\n ruleElem.classList.contains('e-group-container'))));\n if (!this.enableSeparateConnector || enableSeparateCondition) {\n index++;\n }\n }\n rules.rules[index] = rule;\n }\n else {\n groupElem = closest(target, '.e-group-container');\n rules = this.getParentGroup(groupElem);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var custom = rule.custom;\n if (Object.keys(rule).length) {\n if (this.ruleIndex < 0) {\n rules.rules.push({\n 'field': rule.field, 'type': rule.type, 'label': rule.label, 'operator': rule.operator, value: rule.value\n });\n if (custom) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n rules.rules[rules.rules.length - 1].custom = custom;\n }\n if (this.enableSeparateConnector) {\n rules.rules[rules.rules.length - 1].condition = rule.condition ? rule.condition : newRule.condition;\n }\n }\n else {\n rules.rules.splice(this.ruleIndex + 1, 0, {\n 'field': rule.field, 'type': rule.type, 'label': rule.label, 'operator': rule.operator, value: rule.value\n });\n if (custom) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n rules.rules[this.ruleIndex + 1].custom = custom;\n }\n if (this.enableSeparateConnector) {\n rules.rules[this.ruleIndex + 1].condition = rule.condition ? rule.condition : newRule.condition;\n }\n }\n }\n else {\n if (custom) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n newRule.custom = custom;\n }\n if (this.autoSelectField) {\n rule.field = newRule.field = this.rule.rules[0].field;\n }\n rules.rules.push(newRule);\n }\n }\n this.disableRuleCondition(target, rules, isNewRuleAdded);\n };\n QueryBuilder.prototype.changeRuleTemplate = function (column, element) {\n var operVal = this.selectedColumn.operators;\n if (column.ruleTemplate) {\n return;\n }\n else {\n var parentGroup = closest(element, '.e-group-container');\n var parentId = closest(element, '.e-rule-container').id;\n if (this.previousColumn && this.previousColumn.ruleTemplate) {\n detach(element.closest('[id=\"' + parentId + '\"]').querySelector('.e-rule-field'));\n this.clearQBTemplate([parentId]);\n }\n if (column) {\n var rule = { field: column.field, label: column.label, operator: operVal[0].value, value: '' };\n this.addRuleElement(parentGroup, rule, column, 'change', parentId, true);\n }\n }\n };\n QueryBuilder.prototype.renderToolTip = function (element) {\n var tooltip = new Tooltip({ content: this.l10n.getConstant('ValidationMessage'), isSticky: true,\n position: 'BottomCenter', cssClass: 'e-querybuilder-error', afterClose: function () {\n tooltip.destroy();\n }, beforeOpen: function (args) {\n var tooltipCloseElement = args.element.querySelector('.e-tooltip-close');\n if (tooltipCloseElement) {\n tooltipCloseElement.style.display = 'none';\n }\n } });\n tooltip.appendTo(element);\n tooltip.open(element);\n };\n /**\n * Validate the conditions and it display errors for invalid fields.\n *\n * @returns {boolean} - Validation\n */\n QueryBuilder.prototype.validateFields = function () {\n var isValid = true;\n var dropDownTreeObj;\n if (this.allowValidation) {\n var excludeOprs = ['isnull', 'isnotnull', 'isempty', 'isnotempty'];\n var i = void 0;\n var len = void 0;\n var fieldElem = void 0;\n var indexElem = void 0;\n var valArray = [];\n var groupElem = void 0;\n var index = void 0;\n var dropDownObj = void 0;\n var tempElem = void 0;\n var rule = void 0;\n var ruleElemCln = this.element.querySelectorAll('.e-rule-container');\n for (i = 0, len = ruleElemCln.length; i < len; i++) {\n var validateRule = void 0;\n groupElem = closest(ruleElemCln[i], '.e-group-container');\n rule = this.getParentGroup(groupElem);\n index = 0;\n indexElem = tempElem = ruleElemCln[i];\n if (this.fieldMode === 'DropdownTree') {\n dropDownTreeObj = getComponent(ruleElemCln[i].querySelector('.e-rule-filter input.e-dropdowntree'), 'dropdowntree');\n if (dropDownTreeObj && dropDownTreeObj.value && dropDownTreeObj.value.length) {\n this.selectedColumn = this.getColumn(dropDownTreeObj.value[0]);\n validateRule = this.selectedColumn.validation;\n }\n }\n else {\n dropDownObj = getComponent(ruleElemCln[i].querySelector('.e-rule-filter input.e-dropdownlist'), 'dropdownlist');\n if (dropDownObj && dropDownObj.value) {\n this.selectedColumn = dropDownObj.getDataByValue(dropDownObj.value);\n validateRule = !isNullOrUndefined(dropDownObj.value) && this.selectedColumn.validation;\n }\n }\n fieldElem = tempElem.querySelector('.e-rule-field input.e-control');\n if (validateRule && validateRule.isRequired) {\n while (indexElem && indexElem.previousElementSibling !== null) {\n indexElem = indexElem.previousElementSibling;\n var separateCondition = this.enableSeparateConnector && ((!this.headerTemplate && !indexElem.classList.contains('e-btn-group')) ||\n (this.headerTemplate && (indexElem.classList.contains('e-rule-container') || indexElem.classList.contains('e-group-container'))));\n if (!this.enableSeparateConnector || separateCondition) {\n index++;\n }\n }\n fieldElem = tempElem.querySelector('.e-rule-operator .e-control');\n if (!rule.rules[index].operator) {\n if (fieldElem.parentElement.className.indexOf('e-tooltip') < 0 && fieldElem.className.indexOf('e-tooltip') < 0) {\n this.renderToolTip(fieldElem.parentElement);\n }\n isValid = false;\n }\n if (rule.rules[index].value instanceof Array) {\n valArray = rule.rules[index].value;\n }\n if (excludeOprs.indexOf(rule.rules[index].operator) < -1 &&\n (isNullOrUndefined(rule.rules[index].value) &&\n rule.rules[index].type !== 'date') || rule.rules[index].value === '' || rule.rules[index].value === null ||\n (rule.rules[index].value instanceof Array && valArray.length < 1)) {\n var valElem = tempElem.querySelectorAll('.e-rule-value .e-control');\n if (excludeOprs.indexOf(rule.rules[index].operator) < 0) {\n isValid = false;\n }\n for (var j = 0, jLen = valElem.length; j < jLen; j++) {\n var element = valElem[j];\n var elem = void 0;\n if (element.parentElement.className.indexOf('e-searcher') > -1) {\n elem = closest(element, '.e-multi-select-wrapper');\n if (elem.className.indexOf('e-tooltip') < 0) {\n this.renderToolTip(elem);\n }\n }\n else if (valElem[j].parentElement.className.indexOf('e-tooltip') < 0 && valElem[j].className.indexOf('e-tooltip') < 0) {\n this.renderToolTip(valElem[j].parentElement);\n }\n j++;\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n }\n else if (rule.rules[index].type === 'date' && (rule.rules[index].value === null || rule.rules[index].value.indexOf(null) > -1)) {\n var valElem = tempElem.querySelectorAll('.e-rule-value .e-control');\n if (excludeOprs.indexOf(rule.rules[index].operator) < 0) {\n isValid = false;\n }\n for (var j = 0, jLen = valElem.length; j < jLen; j++) {\n if (valElem[j].parentElement.className.indexOf('e-tooltip') < 0 && valElem[j].className.indexOf('e-tooltip') < 0 && (isNullOrUndefined(rule.rules[index].value) || rule.rules[index].value[j] == null)) {\n this.renderToolTip(valElem[j].parentElement);\n }\n }\n }\n }\n else if ((dropDownObj && dropDownObj.element && isNullOrUndefined(dropDownObj.value)) ||\n (dropDownTreeObj && dropDownTreeObj.element && (isNullOrUndefined(dropDownTreeObj.value) ||\n dropDownTreeObj.value.length < 1))) {\n if (fieldElem.parentElement.className.indexOf('e-tooltip') < 0) {\n this.renderToolTip(fieldElem.parentElement);\n }\n isValid = false;\n }\n }\n }\n return isValid;\n };\n QueryBuilder.prototype.refreshLevelColl = function () {\n this.levelColl = {};\n var groupElem = this.element.querySelector('.e-group-container');\n if (groupElem) {\n this.levelColl[groupElem.id] = [0];\n var obj = { groupElement: groupElem, level: [0] };\n this.refreshLevel(obj);\n }\n };\n QueryBuilder.prototype.refreshLevel = function (obj) {\n var ruleList = obj.groupElement.querySelector('.e-rule-list').children;\n var childElem;\n var groupElem = obj.groupElement;\n var i;\n var iLen = ruleList.length;\n var groupCount = 0;\n for (i = 0; i < iLen; i++) {\n childElem = ruleList[i];\n if (childElem.className.indexOf('e-group-container') > -1) {\n obj.level.push(groupCount);\n this.levelColl[childElem.id] = obj.level.slice();\n groupCount++;\n obj.groupElement = childElem;\n obj = this.refreshLevel(obj);\n }\n }\n var ruleListElem = closest(groupElem, '.e-rule-list');\n obj.groupElement = ruleListElem ? closest(ruleListElem, '.e-group-container') : groupElem;\n obj.level = this.levelColl[obj.groupElement.id].slice();\n return obj;\n };\n QueryBuilder.prototype.groupTemplate = function (isConnector) {\n var glueElem;\n var inputElem;\n var dragClsName;\n var labelElem;\n var grpActElem;\n var groupBtn;\n var groupElem = this.createElement('div', { attrs: { class: 'e-group-container' } });\n var groupHdrElem = this.createElement('div', { attrs: { class: 'e-group-header' } });\n var grpBodyElem = this.createElement('div', { attrs: { class: 'e-group-body' } });\n var rulesElem = this.createElement('div', { attrs: { class: 'e-rule-list' } });\n groupElem.appendChild(groupHdrElem);\n grpBodyElem.appendChild(rulesElem);\n groupElem.appendChild(grpBodyElem);\n // create button group in OR and AND process\n if (!this.headerTemplate) {\n if (this.allowDragAndDrop) {\n dragClsName = 'e-icons e-drag-qb-rule';\n }\n else {\n dragClsName = 'e-icons e-drag-qb-rule e-hidden';\n }\n var spanDragElement = this.createElement('span', { attrs: { class: dragClsName, 'aria-lable': 'drag handle',\n title: 'drag handle' } });\n groupHdrElem.appendChild(spanDragElement);\n var className = this.enableSeparateConnector && !isConnector ? 'e-lib e-btn-group e-qb-toggle-btn' : 'e-lib e-btn-group';\n glueElem = this.createElement('div', { attrs: { class: className, role: 'group' } });\n if (this.enableSeparateConnector) {\n glueElem.classList.add('e-multi-connector');\n }\n if (this.enableNotCondition) {\n if (this.enableSeparateConnector) {\n inputElem = this.createElement('input', { attrs: { type: 'checkbox', class: 'e-qb-toggle' } });\n }\n else {\n inputElem = this.createElement('button', { attrs: { type: 'button', class: 'e-qb-toggle' } });\n }\n glueElem.appendChild(inputElem);\n }\n inputElem = this.createElement('input', { attrs: { type: 'radio', class: 'e-btngroup-and', value: 'AND' } });\n glueElem.appendChild(inputElem);\n labelElem = this.createElement('label', { attrs: { class: 'e-lib e-btn e-btngroup-and-lbl e-small' },\n innerHTML: this.l10n.getConstant('AND') });\n glueElem.appendChild(labelElem);\n inputElem = this.createElement('input', { attrs: { type: 'radio', class: 'e-btngroup-or', value: 'OR' } });\n glueElem.appendChild(inputElem);\n labelElem = this.createElement('label', { attrs: { class: 'e-lib e-btn e-btngroup-or-lbl e-small' },\n innerHTML: this.l10n.getConstant('OR') });\n glueElem.appendChild(labelElem);\n groupHdrElem.appendChild(glueElem);\n grpActElem = this.createElement('div', { attrs: { class: 'e-group-action' } });\n if (this.enableSeparateConnector) {\n groupBtn = this.createElement('button', { attrs: { type: 'button', class: 'e-add-condition-btn' } });\n grpActElem.appendChild(groupBtn);\n groupBtn = this.createElement('button', { attrs: { type: 'button', class: 'e-add-group-btn' } });\n grpActElem.appendChild(groupBtn);\n }\n else {\n groupBtn = this.createElement('button', { attrs: { type: 'button', class: 'e-add-btn' } });\n grpActElem.appendChild(groupBtn);\n }\n groupHdrElem.appendChild(grpActElem);\n }\n return groupElem;\n };\n QueryBuilder.prototype.ruleTemplate = function () {\n var tempElem;\n var clsName;\n var cloneClsName;\n var lockClsName;\n var dragClsName;\n var ruleElem = this.createElement('div');\n var fieldElem = this.createElement('div', { attrs: { class: 'e-rule-field' } });\n tempElem = this.createElement('div', { attrs: { class: 'e-rule-filter' } });\n if (this.allowDragAndDrop) {\n dragClsName = 'e-icons e-drag-qb-rule';\n }\n else {\n dragClsName = 'e-icons e-drag-qb-rule e-hidden';\n }\n var spanDragElement = this.createElement('span', { attrs: { class: dragClsName, 'aria-lable': 'drag handle',\n title: 'drag handle' } });\n fieldElem.appendChild(spanDragElement);\n var filterElem = this.createElement('input', { attrs: { type: 'text', class: 'e-filter-input' } });\n tempElem.appendChild(filterElem);\n fieldElem.appendChild(tempElem);\n tempElem = this.createElement('div', { attrs: { class: 'e-rule-operator' } });\n fieldElem.appendChild(tempElem);\n tempElem = this.createElement('div', { attrs: { class: 'e-rule-value' } });\n fieldElem.appendChild(tempElem);\n tempElem = this.createElement('div', { attrs: { class: 'e-rule-value-delete' } });\n if (this.showButtons.cloneRule) {\n cloneClsName = 'e-clone-rule-btn e-clone-rule e-css e-btn e-small e-round e-icon-btn';\n }\n else {\n cloneClsName = 'e-clone-rule-btn e-clone-rule e-css e-btn e-small e-round e-icon-btn e-button-hide';\n }\n if (this.showButtons.lockRule) {\n lockClsName = 'e-lock-rule-btn e-lock-rule e-css e-btn e-small e-round e-icons e-icon-btn';\n }\n else {\n lockClsName = 'e-lock-rule-btn e-lock-rule e-css e-btn e-small e-round e-icons e-icon-btn e-button-hide';\n }\n var cloneRuleBtnElem = this.createElement('button', { attrs: { title: this.l10n.getConstant('CloneRule'), type: 'button', class: cloneClsName } });\n var spanElement = this.createElement('span', { attrs: { class: 'e-btn-icon e-icons e-copy' } });\n cloneRuleBtnElem.appendChild(spanElement);\n var cloneLockBtnElem = this.createElement('button', { attrs: { title: this.l10n.getConstant('LockRule'), type: 'button', class: lockClsName } });\n spanElement = this.createElement('span', { attrs: { class: 'e-btn-icon e-icons e-unlock' } });\n cloneLockBtnElem.appendChild(spanElement);\n if (this.showButtons.ruleDelete || isNullOrUndefined(this.showButtons.ruleDelete)) {\n clsName = 'e-removerule e-rule-delete e-css e-btn e-small';\n }\n else {\n clsName = 'e-removerule e-rule-delete e-css e-btn e-small e-button-hide';\n }\n var delBtnElem = this.createElement('button', { attrs: { type: 'button', class: clsName } });\n tempElem.appendChild(cloneRuleBtnElem);\n tempElem.appendChild(cloneLockBtnElem);\n tempElem.appendChild(delBtnElem);\n fieldElem.appendChild(tempElem);\n ruleElem.appendChild(fieldElem);\n return ruleElem;\n };\n QueryBuilder.prototype.addGroupElement = function (isGroup, target, condition, isBtnClick, not, isRoot, rule) {\n var _this = this;\n var args = { groupID: target.id.replace(this.element.id + '_', ''), cancel: false, type: 'insertGroup' };\n if (!this.isImportRules && !this.isInitialLoad && !this.prvtEvtTgrDaD) {\n this.trigger('beforeChange', args, function (observedChangeArgs) {\n _this.addGroupSuccess(observedChangeArgs, isGroup, target, condition, isBtnClick, not, isRoot, rule);\n });\n }\n else {\n this.isInitialLoad = false;\n this.addGroupSuccess(args, isGroup, target, condition, isBtnClick, not, isRoot, rule);\n }\n };\n QueryBuilder.prototype.addGroupSuccess = function (args, isGroup, eventTarget, condition, isBtnClick, not, isRoot, rule) {\n var _this = this;\n if (!args.cancel && (this.element.querySelectorAll('.e-group-container').length <= this.maxGroupCount)) {\n var target = eventTarget;\n var dltGroupBtn = void 0;\n var groupID = '';\n if (target.className.indexOf('e-group-container') < 0) {\n groupID = target.querySelector('.e-group-container') && target.querySelector('.e-group-container').id;\n }\n else {\n groupID = target.id;\n }\n if (this.enableSeparateConnector) {\n this.groupElem = this.groupTemplate();\n }\n var groupElem = this.groupElem.cloneNode(true);\n groupElem.setAttribute('id', this.element.id + '_group' + this.groupIdCounter);\n if (this.groupIdCounter === 0 && this.allowDragAndDrop && groupElem.querySelector('.e-drag-qb-rule')) {\n if (groupElem && groupElem.children[0]) {\n groupElem.children[0].classList.add('e-parent-header');\n }\n addClass([groupElem.querySelector('.e-drag-qb-rule')], 'e-hidden');\n }\n if (this.headerTemplate) {\n if (isRoot) {\n isGroup = false;\n groupElem.setAttribute('id', this.element.id + '_group0');\n this.headerTemplateFn(groupElem, not, condition, rule, groupID);\n this.groupIdCounter = 0;\n }\n else {\n this.headerTemplateFn(groupElem, not, condition, rule, groupID);\n }\n }\n this.groupIdCounter++;\n if (!this.headerTemplate) {\n var andInpElem = groupElem.querySelector('.e-btngroup-and');\n var orInpElem = groupElem.querySelector('.e-btngroup-or');\n var andLblElem = groupElem.querySelector('.e-btngroup-and-lbl');\n var orLblElem = groupElem.querySelector('.e-btngroup-or-lbl');\n andInpElem.setAttribute('id', this.element.id + '_and' + this.btnGroupId);\n orInpElem.setAttribute('id', this.element.id + '_or' + this.btnGroupId);\n andInpElem.setAttribute('name', this.element.id + '_and' + this.btnGroupId);\n orInpElem.setAttribute('name', this.element.id + '_and' + this.btnGroupId);\n andLblElem.setAttribute('for', this.element.id + '_and' + this.btnGroupId);\n orLblElem.setAttribute('for', this.element.id + '_or' + this.btnGroupId);\n this.btnGroupId++;\n }\n if (isGroup) {\n var clsName = void 0;\n if (this.showButtons.groupDelete || isNullOrUndefined(this.showButtons.groupDelete)) {\n clsName = 'e-deletegroup';\n }\n else {\n clsName = 'e-deletegroup e-button-hide';\n }\n dltGroupBtn = this.createElement('button', { attrs: { type: 'button', class: clsName } });\n var button = new Button({ iconCss: 'e-icons e-delete-icon', cssClass: 'e-small e-round' });\n button.appendTo(dltGroupBtn);\n dltGroupBtn.setAttribute('title', this.l10n.getConstant('DeleteGroup'));\n rippleEffect(dltGroupBtn, { selector: '.deletegroup' });\n var ruleList = target.querySelector('.e-rule-list');\n var childElems = ruleList.children;\n var grpLen = 0;\n for (var j = 0, jLen = childElems.length; j < jLen; j++) {\n if (childElems[j].className.indexOf('e-group-container') > -1) {\n grpLen += 1;\n }\n }\n if (this.showButtons.cloneGroup && this.cloneGrpBtnClick) {\n if (this.groupIndex === (childElems.length - 1)) {\n ruleList.appendChild(groupElem);\n this.isLastGroup = true;\n }\n else {\n if (this.enableSeparateConnector) {\n var index = 0;\n var tempGroupIndex = this.groupIndex + 1;\n for (var i = 0; i < tempGroupIndex; i++) {\n if (childElems[i].classList.contains('e-rule-container')) {\n tempGroupIndex++;\n index++;\n }\n }\n if (index > 0) {\n index--;\n }\n var idx = this.groupIndex + index + 1;\n childElems[idx].parentNode.insertBefore(groupElem, childElems[idx]);\n }\n else {\n var idx = this.groupIndex + 1;\n childElems[idx].parentNode.insertBefore(groupElem, childElems[idx]);\n }\n this.isMiddleGroup = true;\n }\n }\n else {\n ruleList.appendChild(groupElem);\n }\n var level = this.levelColl[target.id].slice(0);\n level.push(grpLen);\n this.levelColl[groupElem.id] = level;\n if (this.groupIndex > -1) {\n this.refreshLevelColl();\n }\n if (!this.isImportRules) {\n this.isAddSuccess = true;\n this.addGroups([], target.id.replace(this.element.id + '_', ''));\n this.isAddSuccess = false;\n if (isBtnClick && this.addRuleToNewGroups) {\n this.addRuleElement(groupElem, {});\n }\n }\n if (!this.headerTemplate) {\n var lockClsName = '';\n if (this.showButtons.cloneGroup) {\n lockClsName = 'e-clone-grp-btn e-css e-btn e-small e-round e-icons e-icon-btn';\n }\n else {\n lockClsName = 'e-clone-grp-btn e-css e-btn e-small e-round e-icons e-icon-btn e-button-hide';\n }\n var cloneBtnElem = this.createElement('button', { attrs: { title: this.l10n.getConstant('CloneGroup'), type: 'button', class: lockClsName } });\n var spanElement = this.createElement('span', { attrs: { class: 'e-btn-icon e-icons e-copy' } });\n cloneBtnElem.appendChild(spanElement);\n groupElem.querySelector('.e-group-action').appendChild(cloneBtnElem);\n if (this.showButtons.lockGroup) {\n lockClsName = 'e-lock-grp-btn e-css e-btn e-small e-round e-icons e-icon-btn';\n }\n else {\n lockClsName = 'e-lock-grp-btn e-css e-btn e-small e-round e-icons e-icon-btn e-button-hide';\n }\n var lockBtnElem = this.createElement('button', { attrs: { title: this.l10n.getConstant('LockGroup'), type: 'button', class: lockClsName } });\n var lockSpanElement = this.createElement('span', { attrs: { class: 'e-btn-icon e-icons e-unlock' } });\n lockBtnElem.appendChild(lockSpanElement);\n groupElem.querySelector('.e-group-action').appendChild(lockBtnElem);\n groupElem.querySelector('.e-group-action').appendChild(dltGroupBtn);\n }\n }\n else {\n if (!this.headerTemplate) {\n var lockClsName = '';\n if (this.showButtons.lockGroup) {\n lockClsName = 'e-lock-grp-btn e-css e-btn e-small e-round e-icons e-icon-btn';\n }\n else {\n lockClsName = 'e-lock-grp-btn e-css e-btn e-small e-round e-icons e-icon-btn e-button-hide';\n }\n var lockBtnElem = this.createElement('button', { attrs: { title: this.l10n.getConstant('LockGroup'), type: 'button', class: lockClsName } });\n var spanElement = this.createElement('span', { attrs: { class: 'e-btn-icon e-icons e-unlock' } });\n lockBtnElem.appendChild(spanElement);\n groupElem.querySelector('.e-group-action').appendChild(lockBtnElem);\n }\n target.appendChild(groupElem);\n this.levelColl[groupElem.id] = [0];\n }\n if (this.enableNotCondition) {\n if (!this.headerTemplate) {\n var notElem = groupElem.querySelector('.e-qb-toggle');\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var tglBtn = void 0;\n if (this.enableSeparateConnector) {\n tglBtn = new CheckBox({ label: this.l10n.getConstant('NOT'), cssClass: 'e-qb-toggle' });\n }\n else {\n tglBtn = new Button({ content: this.l10n.getConstant('NOT'), cssClass: 'e-btn e-small' });\n }\n tglBtn.appendTo(notElem);\n groupElem.querySelector('.e-btngroup-and-lbl').classList.add('e-not');\n if (this.updatedRule && this.updatedRule.not) {\n addClass([notElem], 'e-active-toggle');\n }\n }\n }\n if (this.enableSeparateConnector && !this.headerTemplate) {\n var andElem = groupElem.querySelector('.e-btngroup-and');\n var orElem = groupElem.querySelector('.e-btngroup-or');\n var btnGroup = groupElem.querySelector('.e-btn-group');\n for (var i = 0; i < btnGroup.childNodes.length; i++) {\n if (groupElem.querySelector('.e-btn-group').childNodes[i].textContent.toLowerCase() === 'not') {\n if (!this.enableNotCondition) {\n btnGroup.childNodes[i].style.display = 'none';\n }\n else {\n btnGroup.childNodes[i].classList.add('e-multiconnector');\n }\n }\n else {\n btnGroup.childNodes[i].style.display = 'none';\n }\n }\n var prevSibling = groupElem.previousElementSibling;\n if (prevSibling) {\n if (isNullOrUndefined(this.headerTemplate)) {\n groupElem.parentElement.insertBefore(this.groupTemplate(true).querySelector('.e-btn-group'), groupElem);\n var notElem = groupElem.previousElementSibling.childNodes[0];\n if (notElem.classList.contains('e-qb-toggle')) {\n notElem.style.display = 'none';\n }\n }\n if (!this.isImportRules) {\n var groupElement = groupElem.previousElementSibling;\n var newAndElem = groupElement.querySelector('.e-btngroup-and');\n var newOrElem = groupElement.querySelector('.e-btngroup-or');\n if (!andElem.checked && !orElem.checked) {\n var nextSibling = groupElem.nextElementSibling;\n if (nextSibling && nextSibling.classList.contains('e-btn-group')) {\n andElem = nextSibling.querySelector('.e-btngroup-and');\n orElem = nextSibling.querySelector('.e-btngroup-or');\n newAndElem.checked = andElem.checked;\n newOrElem.checked = orElem.checked;\n }\n }\n else if (this.enableSeparateConnector) {\n if (andElem.checked) {\n newAndElem.checked = true;\n }\n if (orElem.checked) {\n newOrElem.checked = true;\n }\n }\n }\n }\n }\n this.updatedRule = null;\n if (this.headerTemplate) {\n var args_4 = { requestType: 'header-template-create', ruleID: groupElem.id, condition: condition,\n notCondition: this.enableNotCondition ? not : undefined };\n this.trigger('actionBegin', args_4);\n }\n else {\n if (this.enableSeparateConnector) {\n var conditionBtn_1 = groupElem.querySelector('.e-add-condition-btn');\n var btnObj = new Button({ cssClass: this.element.id + '_addConditionbtn', content: this.l10n.getConstant('AddCondition') });\n btnObj.appendTo(conditionBtn_1);\n btnObj.element.onclick = function () {\n _this.addRuleElement(closest(conditionBtn_1, '.e-group-container'), {});\n };\n var groupBtn_1 = groupElem.querySelector('.e-add-group-btn');\n btnObj = new Button({ cssClass: this.element.id + '_addGroupbtn', content: this.l10n.getConstant('AddGroup') });\n btnObj.appendTo(groupBtn_1);\n btnObj.element.onclick = function () {\n _this.addGroupElement(true, closest(groupBtn_1, '.e-group-container'), '', true);\n };\n }\n else {\n var groupBtn = groupElem.querySelector('.e-add-btn');\n var btnObj = new DropDownButton({\n items: this.items,\n cssClass: 'e-round e-small e-caret-hide e-addrulegroup',\n iconCss: 'e-icons e-add-icon',\n beforeOpen: this.selectBtn.bind(this, groupBtn),\n select: this.selectBtn.bind(this, groupBtn)\n });\n btnObj.appendTo(groupBtn);\n groupBtn.setAttribute('title', this.l10n.getConstant('AddButton'));\n }\n }\n if (!this.isImportRules && !this.prvtEvtTgrDaD) {\n var grpId = target.id.replace(this.element.id + '_', '');\n var chgrpId = groupElem.id.replace(this.element.id + '_', '');\n this.trigger('change', { groupID: grpId, type: 'insertGroup', childGroupID: chgrpId });\n }\n }\n };\n QueryBuilder.prototype.setMultiConnector = function (trgt) {\n if (this.enableSeparateConnector && !this.headerTemplate) {\n if (trgt.previousElementSibling && this.groupElem.querySelector('.e-btn-group')) {\n trgt.parentElement.insertBefore(this.groupTemplate(true).querySelector('.e-btn-group'), trgt);\n var notElem = trgt.previousElementSibling.childNodes[0];\n if (notElem.classList.contains('e-qb-toggle')) {\n notElem.style.display = 'none';\n }\n this.addHeaderDiv(trgt);\n }\n }\n };\n QueryBuilder.prototype.addHeaderDiv = function (elem) {\n var prevRule;\n var prevElem = elem.previousElementSibling.previousElementSibling;\n if (prevElem) {\n if (prevElem.id.indexOf('rule') > -1) {\n prevRule = this.getRule(prevElem);\n }\n else {\n prevRule = this.getGroup(prevElem);\n }\n if (isNullOrUndefined(prevRule.condition)) {\n prevRule.condition = 'and';\n }\n var orElem = elem.previousElementSibling.querySelector('.e-btngroup-or');\n var andElem = elem.previousElementSibling.querySelector('.e-btngroup-and');\n orElem.disabled = false;\n andElem.disabled = false;\n if (prevRule.condition === 'or') {\n orElem.checked = true;\n }\n else {\n andElem.checked = true;\n }\n }\n };\n QueryBuilder.prototype.headerTemplateFn = function (groupElem, not, condition, rule, groupID, isInitialRule) {\n var template;\n var templateID = this.element.id + '_header';\n var args;\n var groupHdr = groupElem.querySelector('.e-group-header');\n if (this.enableSeparateConnector && groupElem.id.indexOf('rule') !== -1) {\n groupHdr = groupElem;\n }\n if (this.headerTemplate) {\n args = { requestType: 'header-template-initialize', ruleID: groupElem.id,\n notCondition: this.enableNotCondition ? not : undefined,\n condition: condition, rule: this.getRuleCollection(rule, false), groupID: groupID };\n this.trigger('actionBegin', args);\n if (this.enableSeparateConnector && groupElem.id.indexOf('rule') !== -1) {\n args.requestType = 'rule-template-create';\n }\n this.headerFn = this.templateParser(this.headerTemplate);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.isReact) {\n template = this.headerFn(args, this, groupElem.id, templateID)[0];\n if (this.enableSeparateConnector && isInitialRule) {\n this.enableSeparateConnectorInitialRule(groupElem, template);\n }\n else if (this.enableSeparateConnector && groupElem.id.indexOf('rule') !== -1) {\n groupHdr.parentElement.insertBefore(template, groupHdr.nextElementSibling);\n }\n else {\n groupHdr.appendChild(template);\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n }\n else if (this.isAngular) {\n var templateColl = this.headerFn(args, this, groupElem.id, templateID);\n template = (templateColl[0].nodeType === 3) ? templateColl[1] : templateColl[0];\n if (this.enableSeparateConnector && isInitialRule) {\n this.enableSeparateConnectorInitialRule(groupElem, template);\n }\n else if (this.enableSeparateConnector && groupElem.id.indexOf('rule') !== -1) {\n groupHdr.parentElement.insertBefore(template, groupHdr.nextElementSibling);\n }\n else {\n groupHdr.appendChild(template);\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n }\n else if (this.isVue3) {\n template = this.headerFn(args, this, groupElem.id, templateID);\n if (this.enableSeparateConnector && (isInitialRule || groupElem.id.indexOf('rule') !== -1)) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n for (var i = 0; i < template.length; i++) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (template[i].nodeName === 'DIV') {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n template = template[i];\n break;\n }\n }\n }\n if (this.enableSeparateConnector && isInitialRule) {\n this.enableSeparateConnectorInitialRule(groupElem, template);\n }\n else if (this.enableSeparateConnector && groupElem.id.indexOf('rule') !== -1) {\n groupHdr.parentElement.insertBefore(template, groupHdr.nextElementSibling);\n }\n else {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n append(template, groupHdr);\n }\n }\n else {\n template = this.headerFn(args, this, 'Template', templateID)[0];\n if (this.enableSeparateConnector && isInitialRule) {\n this.enableSeparateConnectorInitialRule(groupElem, template);\n }\n else if (this.enableSeparateConnector && groupElem.id.indexOf('rule') !== -1) {\n groupHdr.parentElement.insertBefore(template, groupHdr.nextElementSibling);\n }\n else {\n groupHdr.appendChild(template);\n }\n }\n this.renderReactTemplates();\n }\n return groupElem;\n };\n QueryBuilder.prototype.enableSeparateConnectorInitialRule = function (groupElem, template) {\n var elem = groupElem.nextElementSibling ? groupElem.nextElementSibling : groupElem;\n var group = elem.closest('.e-group-container');\n if (!groupElem.nextElementSibling && group) {\n group = group.nextElementSibling ? group.nextElementSibling : group;\n }\n if (group) {\n group.parentElement.insertBefore(template, group);\n }\n };\n /**\n * Notify the changes to component.\n *\n * @param {string | number | boolean | Date | string[] | number[] | Date[]} value - 'value' to be passed to update the rule value.\n * @param {Element} element - 'element' to be passed to update the rule.\n * @param {string} type - 'type' to be passed to update the rule .\n * @returns {void}.\n */\n QueryBuilder.prototype.notifyChange = function (value, element, type) {\n var grpElement = closest(element, '.e-group-container');\n var rules = this.getParentGroup(grpElement);\n var ruleElement = closest(element, '.e-rule-container');\n var index = 0;\n if (type === 'not') {\n rules.not = value;\n return;\n }\n if (type === 'condition') {\n if (this.enableSeparateConnector) {\n ruleElement = element.parentElement.previousElementSibling;\n if (ruleElement && ruleElement.classList.contains('e-group-container')) {\n ruleElement = ruleElement.querySelectorAll('.e-rule-container')[ruleElement.querySelectorAll('.e-rule-container').length - 1];\n }\n if (ruleElement && ruleElement.classList.contains('e-rule-container')) {\n rules = this.getRule(ruleElement);\n }\n rules.condition = value;\n }\n else {\n rules.condition = value;\n }\n return;\n }\n while (ruleElement && ruleElement.previousElementSibling !== null) {\n ruleElement = ruleElement.previousElementSibling;\n if (!this.enableSeparateConnector || (this.enableSeparateConnector &&\n ((!this.headerTemplate && !ruleElement.classList.contains('e-btn-group')) ||\n this.headerTemplate && (ruleElement.classList.contains('e-rule-container') ||\n ruleElement.classList.contains('e-group-container'))))) {\n index++;\n }\n }\n var rule = rules.rules[index];\n var column = this.getColumn(rule.field);\n var format = this.getFormat(column.format);\n if (column.type === 'date') {\n if (value instanceof Date) {\n value = this.intl.formatDate(value, format);\n }\n else if (value instanceof Array) {\n for (var i = 0; i < value.length; i++) {\n if (value[i] && value[i] instanceof Date) {\n value[i] = this.intl.formatDate(value[i], format);\n }\n }\n }\n }\n if (column.ruleTemplate) {\n this.templateChange(element, value, type);\n }\n else {\n this.isNotified = true;\n this.updateRules(element, value);\n this.isNotified = false;\n }\n };\n QueryBuilder.prototype.templateChange = function (element, value, type) {\n var grpElem = closest(element, '.e-group-container');\n var eventsArgs;\n var rules = this.getParentGroup(grpElem);\n var ruleElem = closest(element, '.e-rule-container');\n var index = 0;\n if (this.allowValidation) {\n this.validateValue(rules, ruleElem);\n }\n while (ruleElem && ruleElem.previousElementSibling !== null) {\n ruleElem = ruleElem.previousElementSibling;\n if (!this.enableSeparateConnector || (this.enableSeparateConnector &&\n ((!this.headerTemplate && !ruleElem.classList.contains('e-btn-group')) ||\n this.headerTemplate && (ruleElem.classList.contains('e-rule-container') ||\n ruleElem.classList.contains('e-group-container'))))) {\n index++;\n }\n }\n var rule = rules.rules[index];\n if (type === 'field') {\n this.selectedColumn = this.getColumn(value);\n }\n else if (rule) {\n this.selectedColumn = this.getColumn(rule.field);\n }\n var operVal;\n this.previousColumn = this.getColumn(rule.field);\n var beforeRules = this.getValidRules(this.rule);\n if (this.selectedColumn) {\n if (this.selectedColumn.operators) {\n operVal = this.selectedColumn.operators;\n }\n else {\n operVal = this.customOperators[this.selectedColumn.type + 'Operator'];\n }\n }\n var arrOper = ['in', 'notin', 'between', 'notbetween'];\n var prevOper;\n switch (type) {\n case 'field':\n rule.field = value;\n rule.label = this.selectedColumn.label;\n rule.type = this.selectedColumn.type;\n rule.value = '';\n rule.operator = operVal[0].value;\n break;\n case 'operator':\n prevOper = rule.operator;\n rule.operator = value;\n if (arrOper.indexOf(rule.operator) > -1) {\n rule.value = [];\n }\n else if (arrOper.indexOf(prevOper) > -1) {\n rule.value = '';\n }\n break;\n case 'value':\n rule.value = value;\n }\n this.changeRuleTemplate(this.selectedColumn, element);\n this.filterRules(beforeRules, this.getValidRules(this.rule), type);\n if (this.selectedColumn && this.selectedColumn.ruleTemplate) {\n if (type === 'field' || type === 'operator') {\n var grpEle = closest(element, '.e-rule-container');\n this.destroyControls(grpEle, true);\n detach(grpEle.querySelector('.e-rule-field'));\n var ruleElement = this.appendRuleElem(closest(grpEle, '.e-group-container'), this.selectedColumn, 'change', grpEle.id, type, rule);\n if (this.displayMode === 'Vertical' || this.element.className.indexOf('e-device') > -1) {\n ruleElement.className = 'e-rule-container e-vertical-mode';\n }\n else {\n ruleElement.className = 'e-rule-container e-horizontal-mode';\n }\n if (!this.enableSeparateConnector) {\n if (ruleElement.previousElementSibling && ruleElement.previousElementSibling.className.indexOf('e-rule-container') > -1) {\n if (ruleElement.className.indexOf('e-joined-rule') < 0) {\n ruleElement.className += ' e-joined-rule';\n }\n if (ruleElement.previousElementSibling.className.indexOf('e-prev-joined-rule') < 0) {\n ruleElement.previousElementSibling.className += ' e-prev-joined-rule';\n }\n }\n }\n if (ruleElement.previousElementSibling && ruleElement.previousElementSibling.className.indexOf('e-group-container') > -1 &&\n ruleElement.className.indexOf('e-separate-rule') < 0) {\n ruleElement.className += ' e-separate-rule';\n }\n var args = { requestType: 'template-create', action: type, ruleID: grpEle.id,\n fields: this.fields, rule: rule };\n eventsArgs = { groupID: grpElem.id.replace(this.element.id + '_', ''), ruleID: grpEle.id.replace(this.element.id + '_', ''),\n value: rule.field, type: 'field' };\n this.trigger('actionBegin', args);\n this.trigger('change', eventsArgs);\n }\n }\n };\n QueryBuilder.prototype.changeValue = function (i, args) {\n var _this = this;\n var element;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if ((this.isNumInput && typeof args.value === 'number') || (args.type === 'input' && args.target && args.target.classList.contains('e-numerictextbox'))\n && (this.selectedColumn.validation && (this.selectedColumn.validation.max !== Number.MAX_VALUE || this.selectedColumn.validation.min > 0))) {\n this.isNumInput = false;\n return;\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (args.element && args.element.classList.contains('e-multiselect')) {\n var multiSelectArgs = args;\n element = multiSelectArgs.element;\n }\n else if (args.event) {\n element = args.event.target;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n }\n else if (args.type === 'input' && args.target && args.target.classList.contains('e-numerictextbox')) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n element = args.currentTarget;\n }\n else {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n element = args.element;\n }\n if (!element) {\n return;\n }\n if (element.className.indexOf('e-day') > -1 || element.className.indexOf('e-today') > -1 || element.className.indexOf('e-cell') > -1) {\n var calenderArgs = args;\n element = calenderArgs.element;\n }\n var groupElem = closest(element, '.e-group-container');\n var ruleElem = closest(element, '.e-rule-container');\n var groupID = groupElem && groupElem.id.replace(this.element.id + '_', '');\n var ruleID = ruleElem.id.replace(this.element.id + '_', '');\n var dateElement = args;\n var dropDownObj;\n if (dateElement.element && dateElement.element.className.indexOf('e-datepicker') > -1) {\n element = dateElement.element;\n dropDownObj = getComponent(closest(element, '.e-rule-container').querySelector('.e-filter-input'), 'dropdownlist');\n if (dropDownObj) {\n this.selectedColumn = dropDownObj.getDataByValue(dropDownObj.value);\n }\n dropDownObj = getComponent(closest(element, '.e-rule-container').querySelector('.e-filter-input'), 'dropdowntree');\n if (dropDownObj) {\n this.selectedColumn = this.getColumn(dropDownObj.value[0]);\n }\n }\n var value;\n var rbValue;\n if (element.className.indexOf('e-radio') > -1) {\n rbValue = parseInt(element.id.split('valuekey')[1], 10);\n if (this.fieldMode === 'Default') {\n dropDownObj = getComponent(closest(element, '.e-rule-container').querySelector('.e-filter-input'), 'dropdownlist');\n this.selectedColumn = dropDownObj.getDataByValue(dropDownObj.value);\n if (this.selectedColumn.columns) {\n dropDownObj = getComponent(closest(element, '.e-rule-container').querySelector('.e-rule-sub-filter .e-dropdownlist'), 'dropdownlist');\n this.selectedColumn = this.getColumn(dropDownObj.value);\n }\n }\n else {\n dropDownObj = getComponent(closest(element, '.e-rule-container').querySelector('.e-filter-input'), 'dropdowntree');\n this.selectedColumn = this.getColumn(dropDownObj.value[0]);\n }\n if (this.selectedColumn.values) {\n value = this.selectedColumn.values[rbValue];\n }\n else {\n var valColl = [true, false];\n value = valColl[rbValue];\n }\n }\n else if (element.className.indexOf('e-multiselect') > -1) {\n value = getComponent(element, 'multiselect').value;\n }\n else {\n value = args.value;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (args.type === 'input' && args.target && args.target.classList.contains('e-numerictextbox')) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n value = Number(args.currentTarget.value);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var elem = args.currentTarget;\n var numericTextBoxObj = getInstance(elem, NumericTextBox);\n var decimalSeparator = getValue('decimal', getNumericObject(this.locale));\n if (isNaN(value) && elem.value.indexOf(decimalSeparator) !== -1) {\n value = this.intl.getNumberParser({ format: 'n' })(elem.value);\n }\n if (!isNaN(value)) {\n numericTextBoxObj.value = value;\n }\n this.isNumInput = true;\n }\n }\n if (args.name === 'input' && this.immediateModeDelay) {\n window.clearInterval(this.timer);\n this.timer = window.setInterval(function () { _this.filterValue(groupID, ruleID, value, i, element); }, this.immediateModeDelay);\n }\n else {\n this.filterValue(groupID, ruleID, value, i, element);\n }\n };\n QueryBuilder.prototype.filterValue = function (grID, rlID, value, i, ele) {\n var _this = this;\n var eventsArgs = { groupID: grID, ruleID: rlID, value: value, cancel: false, type: 'value' };\n window.clearInterval(this.timer);\n if (!this.isImportRules) {\n this.trigger('beforeChange', eventsArgs, function (observedChangeArgs) {\n _this.changeValueSuccessCallBack(observedChangeArgs, ele, i, grID, rlID);\n });\n }\n else {\n this.changeValueSuccessCallBack(eventsArgs, ele, i, grID, rlID);\n }\n };\n QueryBuilder.prototype.changeValueSuccessCallBack = function (args, element, i, groupID, ruleID) {\n if (!args.cancel) {\n this.updateRules(element, args.value, i);\n if (!this.isImportRules) {\n this.trigger('change', { groupID: groupID, ruleID: ruleID, value: args.value, cancel: false, type: 'value' });\n }\n }\n };\n QueryBuilder.prototype.fieldClose = function (id) {\n if (this.isFieldChange || this.isDestroy) {\n return;\n }\n this.isFieldClose = true;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var ddl = getComponent(id, 'dropdownlist');\n var item = ddl.popupObj && ddl.popupObj.element.querySelector('.e-active');\n var itemData = ddl.getItemData();\n ddl.value = itemData.value;\n var customArgs = { element: ddl.element, value: itemData.value, isInteracted: true,\n previousItemData: this.prevItemData, previousItem: null, item: item, itemData: itemData, event: null, e: null };\n if (ddl.previousValue !== ddl.value) {\n this.changeField(customArgs);\n }\n this.isFieldChange = false;\n };\n QueryBuilder.prototype.changeField = function (args) {\n if (args.isInteracted) {\n if (isNullOrUndefined(args.value)) {\n return;\n }\n this.isFieldChange = true;\n this.prevItemData = args.itemData;\n var fieldElem = closest(args.element, '.e-rule-filter') || closest(args.element, '.e-rule-sub-filter');\n var column = this.fieldMode === 'DropdownTree' ? this.getColumn(args.value[0]) : this.getColumn(args.value);\n if (this.fieldMode === 'DropdownTree' && fieldElem !== null) {\n var ddtElem = fieldElem.querySelector('.e-dropdowntree.e-control');\n var ddt = getComponent(ddtElem, 'dropdowntree');\n if (column) {\n if (column.type === 'object') {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ddt.value = args.oldValue;\n ddt.dataBind();\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (isNullOrUndefined(args.oldValue)) {\n ddtElem.value = '';\n }\n else {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var result = this.getLabelFromColumn(args.oldValue[0]);\n ddtElem.value = result;\n }\n return;\n }\n else {\n if (!isNullOrUndefined(args.value[0])) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ddt.value = args.value[0];\n ddt.dataBind();\n var result = this.getLabelFromColumn(args.value[0]);\n ddtElem.value = result;\n }\n }\n }\n else {\n return;\n }\n }\n this.destroySubFields(fieldElem);\n this.subFieldElem = null;\n this.isNotValueChange = true;\n if (column && column.ruleTemplate) {\n this.templateChange(args.element, column.field, 'field');\n }\n else if (column && column.columns && column.columns[0].ruleTemplate) {\n this.templateChange(args.element, column.columns[0].field, 'field');\n }\n else {\n var groupElem = closest(args.element, '.e-group-container');\n var rules = this.getParentGroup(groupElem);\n var ruleElem = closest(args.element, '.e-rule-container');\n var index = 0;\n while (ruleElem && ruleElem.previousElementSibling !== null) {\n ruleElem = ruleElem.previousElementSibling;\n if (!this.enableSeparateConnector || (this.enableSeparateConnector &&\n ((!this.headerTemplate && !ruleElem.classList.contains('e-btn-group')) ||\n this.headerTemplate && (ruleElem.classList.contains('e-rule-container') ||\n ruleElem.classList.contains('e-group-container'))))) {\n index++;\n }\n }\n rules.rules[index].value = '';\n this.changeRule(rules.rules[index], args);\n }\n }\n };\n QueryBuilder.prototype.changeRule = function (rule, ddlArgs) {\n if (!ddlArgs.itemData) {\n if (this.fieldMode === 'DropdownTree') {\n var ddt = getComponent(ddlArgs.element, 'dropdowntree');\n if (ddt.value == null) {\n return;\n }\n }\n else {\n return;\n }\n }\n var tempRule = {};\n var filterElem = closest(ddlArgs.element, '.e-rule-filter');\n filterElem = filterElem ? filterElem : closest(ddlArgs.element, '.e-rule-sub-filter');\n var ddlObj = getComponent(ddlArgs.element, 'dropdownlist');\n if (this.fieldMode === 'DropdownTree' && filterElem !== null) {\n ddlObj = getComponent(ddlArgs.element, 'dropdowntree');\n }\n var element = closest(ddlArgs.element, '.e-group-container');\n var groupID = element.id.replace(this.element.id + '_', '');\n this.changeFilter(filterElem, ddlObj, groupID, rule, tempRule, ddlArgs);\n };\n QueryBuilder.prototype.changeFilter = function (flt, dl, grID, rl, tmpRl, dArg) {\n var _this = this;\n if (flt) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var ddlValue = void 0;\n if (this.fieldMode === 'DropdownTree') {\n ddlValue = (dl.value[0]);\n }\n else {\n ddlValue = this.isImportRules ? this.GetRootColumnName(dl.value) : dl.value;\n }\n this.selectedColumn = this.getColumn(ddlValue);\n var ruleElem = closest(flt, '.e-rule-container');\n var ruleID = ruleElem.id.replace(this.element.id + '_', '');\n var eventsArgs = { groupID: grID, ruleID: ruleID, selectedField: this.fieldMode === 'DropdownTree' ?\n dl.value[0] : dl.value, cancel: false, type: 'field' };\n if (!this.isImportRules && !this.prvtEvtTgrDaD) {\n this.trigger('beforeChange', eventsArgs, function (observedChangeArgs) {\n _this.fieldChangeSuccess(observedChangeArgs, tmpRl, flt, rl, dArg);\n });\n }\n else {\n this.fieldChangeSuccess(eventsArgs, tmpRl, flt, rl, dArg);\n }\n }\n else {\n var operatorElem = closest(dArg.element, '.e-rule-operator');\n this.changeOperator(flt, operatorElem, dl, grID, rl, tmpRl, dArg);\n }\n };\n QueryBuilder.prototype.changeOperator = function (\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n flt, opr, dl, grID, rl, tmpRl, dArg) {\n var _this = this;\n var ruleElem;\n var ruleID;\n var eventsArgs;\n if (opr) {\n ruleElem = closest(opr, '.e-rule-container');\n ruleID = ruleElem.id.replace(this.element.id + '_', '');\n eventsArgs = { groupID: grID, ruleID: ruleID, selectedIndex: dl.index, cancel: false, type: 'operator' };\n if (!this.isImportRules) {\n this.trigger('beforeChange', eventsArgs, function (observedChangeArgs) {\n _this.operatorChangeSuccess(observedChangeArgs, flt, tmpRl, rl, dArg);\n });\n }\n else {\n this.operatorChangeSuccess(eventsArgs, flt, tmpRl, rl, dArg);\n }\n }\n else {\n this.changeRuleValues(flt, rl, tmpRl, dArg);\n }\n };\n QueryBuilder.prototype.fieldChangeSuccess = function (args, tempRule, filterElem, rule, ddlArgs) {\n var ruleElem = closest(filterElem, '.e-rule-container');\n var operatorElem = closest(ddlArgs.element, '.e-rule-operator');\n var element = closest(ddlArgs.element, '.e-group-container');\n var groupID = element.id.replace(this.element.id + '_', '');\n var ddlObj = getComponent(ddlArgs.element, 'dropdownlist');\n var tooltipElem = ruleElem.querySelectorAll('.e-tooltip.e-input-group');\n for (var i = 0; i < tooltipElem.length; i++) {\n getComponent(tooltipElem[i], 'tooltip').destroy();\n }\n if (!args.cancel) {\n if (isNullOrUndefined(this.selectedColumn)) {\n return;\n }\n tempRule.type = this.selectedColumn.type;\n if (ruleElem.querySelector('.e-template')) {\n rule.value = '';\n }\n if (this.selectedColumn.type === 'object' && this.fieldMode === 'Default') {\n tempRule.type = this.selectedColumn.columns[0].type;\n while (this.selectedColumn.columns) {\n this.createSubFields(filterElem, rule, tempRule, ddlArgs);\n }\n }\n else {\n this.destroySubFields(filterElem);\n this.changeOperator(filterElem, operatorElem, ddlObj, groupID, rule, tempRule, ddlArgs);\n }\n }\n else {\n this.changeOperator(filterElem, operatorElem, ddlObj, groupID, rule, tempRule, ddlArgs);\n }\n };\n QueryBuilder.prototype.destroySubFields = function (filterElem) {\n while (filterElem && filterElem.nextElementSibling.classList.contains('e-rule-sub-filter')) {\n this.destroyControls(filterElem);\n filterElem.nextElementSibling.remove();\n }\n };\n QueryBuilder.prototype.createSubFields = function (filterElem, rule, tempRule, ddlArgs) {\n var subFieldValue = false;\n var fieldElem = closest(filterElem, '.e-rule-field');\n var tempElem = this.createElement('div', { attrs: { class: 'e-rule-sub-filter', id: 'subfilter' + this.subFilterCounter } });\n fieldElem.insertBefore(tempElem, fieldElem.querySelector('.e-rule-operator'));\n var ruleId = closest(tempElem, '.e-rule-container').id;\n var subFieldElem = this.createElement('input', { attrs: { type: 'text', id: ruleId + '_subfilterkey' + this.subFilterCounter } });\n tempElem.appendChild(subFieldElem);\n var height = (this.element.className.indexOf('e-device') > -1) ? '250px' : '200px';\n var ddlField;\n ddlField = {\n dataSource: this.selectedColumn.columns,\n fields: this.fields,\n placeholder: this.l10n.getConstant('SelectField'),\n popupHeight: ((this.selectedColumn.columns.length > 5) ? height : 'auto'),\n change: this.changeField.bind(this),\n index: 0,\n open: this.popupOpen.bind(this, false)\n };\n if (this.fieldModel) {\n ddlField = __assign({}, ddlField, this.fieldModel);\n }\n var dropDownList = new DropDownList(ddlField);\n dropDownList.appendTo('#' + ruleId + '_subfilterkey' + this.subFilterCounter);\n if (this.isImportRules || (this.previousColumn && this.previousColumn.ruleTemplate &&\n this.GetRootColumnName(rule.field) === this.GetRootColumnName(this.previousColumn.field))) {\n var subField = this.selectedColumn.columns;\n for (var i = 0; i < subField.length; i++) {\n if (rule.field === subField[i].field || rule.field.indexOf(subField[i].field + this.separator) > -1) {\n dropDownList.value = subField[i].field;\n this.selectedColumn = subField[i];\n subFieldValue = true;\n break;\n }\n }\n }\n this.subFilterCounter++;\n this.subFieldElem = subFieldElem;\n // eslint-disable-next-line\n ddlArgs.itemData = ddlArgs.itemData;\n if (!subFieldValue && this.selectedColumn.columns) {\n if (!subFieldValue && this.isImportRules) {\n dropDownList.value = null;\n }\n this.selectedColumn = this.selectedColumn.columns[0];\n }\n this.previousColumn = this.selectedColumn;\n if (!this.selectedColumn.columns) {\n this.changeRuleValues(tempElem, rule, tempRule, ddlArgs);\n }\n };\n QueryBuilder.prototype.operatorChangeSuccess = function (eventsArgs, filterElem, tempRule, rule, ddlArgs) {\n if (!eventsArgs.cancel) {\n var operatorElem = closest(ddlArgs.element, '.e-rule-operator');\n var valElem = operatorElem.nextElementSibling;\n var dropDownObj = getComponent(ddlArgs.element, 'dropdownlist');\n var prevOper = rule.operator ? rule.operator.toString().toLowerCase() : '';\n tempRule.operator = dropDownObj.value.toString();\n var currOper = tempRule.operator.toLowerCase();\n if (tempRule.operator.toLowerCase().indexOf('between') > -1 || (tempRule.operator.toLowerCase().indexOf('in') > -1\n && tempRule.operator.toLowerCase().indexOf('contains') < 0)) {\n filterElem = operatorElem.previousElementSibling;\n tempRule.type = rule.type;\n if (tempRule.operator.toLowerCase().indexOf('in') < 0 || prevOper.indexOf('in') < 0) {\n rule.value = [];\n }\n }\n else if (typeof rule.value === 'object' && rule.value !== null) {\n rule.value = rule.value.length > 0 ? rule.value[0] : rule.type === 'number' ? 0 : '';\n }\n if (ddlArgs.previousItemData) {\n var prevValue = ddlArgs.previousItemData.value.toString().toLowerCase();\n if ((prevValue.indexOf('between') > -1 || (prevValue.indexOf('in') > -1 || (prevValue.indexOf('null') > -1)\n || (prevValue.indexOf('empty') > -1)) && prevValue.indexOf('contains') < 0)) {\n filterElem = operatorElem.previousElementSibling;\n tempRule.type = rule.type;\n }\n }\n if ((prevOper.indexOf('in') > -1 && prevOper.indexOf('in') < 5) && (currOper.indexOf('in') > -1\n && currOper.indexOf('in') < 5)) {\n filterElem = null;\n }\n if (tempRule.operator.indexOf('null') > -1 || (tempRule.operator.indexOf('empty') > -1)) {\n var parentElem = operatorElem.parentElement.querySelector('.e-rule-value');\n var tooltipElem = parentElem.querySelector('.e-tooltip.e-input-group');\n if (tooltipElem) {\n getComponent(tooltipElem, 'tooltip').destroy();\n }\n removeClass([parentElem], 'e-show');\n addClass([parentElem], 'e-hide');\n }\n if (valElem && this.getColumn(rule.field).template) {\n filterElem = operatorElem.previousElementSibling;\n }\n if (valElem.children.length === 0) {\n filterElem = operatorElem.previousElementSibling;\n }\n this.changeRuleValues(filterElem, rule, tempRule, ddlArgs);\n }\n };\n QueryBuilder.prototype.changeRuleValues = function (filterElem, rule, tempRule, ddlArgs) {\n var operatorElem = closest(ddlArgs.element, '.e-rule-operator');\n var isSub;\n var ddlObj;\n var operatorList;\n var oprElem;\n if (filterElem) {\n operatorElem = filterElem.nextElementSibling;\n if (filterElem.classList.contains('e-rule-sub-filter')) {\n tempRule.type = this.selectedColumn.type;\n isSub = operatorElem.classList.contains('e-rule-sub-filter');\n operatorElem = isSub ? operatorElem.nextElementSibling : operatorElem;\n }\n addClass([operatorElem], 'e-operator');\n if (operatorElem.childElementCount) {\n ddlObj = getComponent(operatorElem.querySelector('.e-dropdownlist'), 'dropdownlist');\n tempRule.operator = ddlObj.value;\n var fieldObj = void 0;\n if (this.fieldMode === 'DropdownTree') {\n fieldObj = getComponent(filterElem.querySelector('.e-dropdowntree'), 'dropdowntree');\n }\n else {\n fieldObj = getComponent(filterElem.querySelector('.e-dropdownlist'), 'dropdownlist');\n }\n tempRule.type = this.fieldMode === 'DropdownTree' ? this.getColumn(fieldObj.value[0]).type :\n this.getColumn(fieldObj.value).type;\n var itemData = ddlArgs.itemData;\n if (ddlObj.value !== '') {\n this.renderValues(operatorElem, itemData, ddlArgs.previousItemData, true, rule, tempRule, ddlArgs.element);\n }\n }\n else {\n var ruleId = closest(operatorElem, '.e-rule-container').id;\n oprElem = this.createElement('input', { attrs: { type: 'text', id: ruleId + '_operatorkey' } });\n operatorElem.appendChild(oprElem);\n if (this.selectedColumn.operators) {\n operatorList = this.selectedColumn.operators;\n }\n else if (ddlArgs.itemData) {\n operatorList = this.customOperators[this.selectedColumn.type + 'Operator'];\n }\n var height = (this.element.className.indexOf('e-device') > -1) ? '250px' : '200px';\n var operator_2;\n if (rule.operator) {\n operatorList.forEach(function (obj) {\n if ('value' in obj && typeof obj.value === 'string' && obj.value.toLowerCase() === rule.operator.toLowerCase()) {\n operator_2 = obj.value;\n }\n });\n }\n var value = operator_2 ? operator_2 : operatorList[0].value;\n var ddlIdx = 0;\n if (!this.autoSelectOperator) {\n value = '';\n ddlIdx = -1;\n }\n if (this.isImportRules || (this.ruleIndex > -1 || this.groupIndex > -1 || this.prvtEvtTgrDaD)) {\n value = rule ? (rule.operator ? rule.operator : value) : value;\n }\n var ddlOperator = void 0;\n ddlOperator = {\n dataSource: operatorList,\n fields: { text: 'key', value: 'value' },\n placeholder: this.l10n.getConstant('SelectOperator'),\n popupHeight: ((operatorList.length > 5) ? height : 'auto'),\n change: this.changeField.bind(this),\n index: ddlIdx,\n value: value,\n open: this.popupOpen.bind(this, false)\n };\n if (this.operatorModel) {\n ddlOperator = __assign({}, ddlOperator, this.operatorModel);\n }\n var dropDownList = new DropDownList(ddlOperator);\n dropDownList.appendTo('#' + ruleId + '_operatorkey');\n tempRule.operator = (rule && rule.operator !== '' && !isNullOrUndefined(rule.operator)) ? rule.operator : operatorList[0].value;\n if (this.isImportRules) {\n tempRule.type = this.selectedColumn.type;\n tempRule.operator = rule.operator;\n }\n if (!isNullOrUndefined(value) && value !== '') {\n this.renderValues(operatorElem, this.selectedColumn, ddlArgs.previousItemData, false, rule, tempRule, ddlArgs.element);\n }\n else if (this.autoSelectField && this.autoSelectOperator) {\n this.renderValues(operatorElem, this.selectedColumn, ddlArgs.previousItemData, false, rule, tempRule, ddlArgs.element);\n }\n }\n }\n if (!this.isImportRules) {\n this.updateRules(ddlArgs.element, ddlArgs.item);\n }\n };\n QueryBuilder.prototype.popupOpen = function (isField, args) {\n if (this.enableRtl) {\n addClass([args.popup.element], 'e-rtl');\n }\n if (isField) {\n this.isFieldClose = false;\n }\n };\n QueryBuilder.prototype.destroyControls = function (target, isRuleTemplate) {\n var element = isRuleTemplate ? target : target.nextElementSibling;\n var inputElement = element.querySelectorAll('input.e-control');\n var divElement = element.querySelectorAll('div.e-control:not(.e-handle)');\n var columns = this.columns;\n for (var i = 0, len = inputElement.length; i < len; i++) {\n if (inputElement[i].classList.contains('e-textbox')) {\n getComponent(inputElement[i], 'textbox').destroy();\n detach(select('input#' + inputElement[i].id, element));\n }\n else if (inputElement[i].classList.contains('e-dropdownlist')) {\n if (this.allowValidation && inputElement[i].parentElement.className.indexOf('e-tooltip') > -1) {\n getComponent(inputElement[i].parentElement, 'tooltip').destroy();\n }\n getComponent(inputElement[i], 'dropdownlist').destroy();\n }\n else if (inputElement[i].classList.contains('e-radio')) {\n getComponent(inputElement[i], 'radio').destroy();\n }\n else if (inputElement[i].classList.contains('e-numerictextbox')) {\n getComponent(inputElement[i], 'numerictextbox').destroy();\n detach(select('input#' + inputElement[i].id, element));\n }\n else if (inputElement[i].classList.contains('e-datepicker')) {\n getComponent(inputElement[i], 'datepicker').destroy();\n }\n else if (inputElement[i].classList.contains('e-multiselect')) {\n getComponent(inputElement[i], 'multiselect').destroy();\n }\n else if (inputElement[i].className.indexOf('e-template') > -1) {\n var clsName = inputElement[i].className;\n for (var j = 0, jLen = columns.length; j < jLen; j++) {\n if (columns[j].template && clsName.indexOf(columns[j].field) > -1) {\n this.templateDestroy(columns[j], inputElement[i].id);\n break;\n }\n }\n }\n if (document.getElementById(inputElement[i].id)) {\n detach(inputElement[i]);\n }\n }\n for (var i = 0, len = divElement.length; i < len; i++) {\n if (divElement[i].className.indexOf('e-template') > -1) {\n var clsName = divElement[i].className;\n for (var j = 0, jLen = columns.length; j < jLen; j++) {\n if (columns[j].template && clsName.indexOf(columns[j].field) > -1) {\n this.templateDestroy(columns[j], divElement[i].id);\n break;\n }\n }\n }\n detach(divElement[i]);\n }\n var templateElement = element.querySelectorAll('.e-template:not(.e-control)');\n for (var i = 0, len = templateElement.length; i < len; i++) {\n detach(templateElement[i]);\n }\n };\n QueryBuilder.prototype.templateDestroy = function (column, elemId) {\n var template;\n if (typeof column.template !== 'string' || column.template.destroy === undefined) {\n template = column.template;\n }\n else {\n return;\n }\n var temp = template.destroy;\n if (template.destroy) {\n var templateElements = void 0;\n if (document.getElementById(elemId)) {\n templateElements = closest(document.getElementById(elemId), '.e-rule-field').querySelectorAll('.e-template');\n }\n if (typeof temp === 'string') {\n temp = getValue(temp, window);\n temp({ field: column.field, elementId: elemId, elements: templateElements });\n }\n else {\n template.destroy({ field: column.field, elementId: elemId, elements: templateElements });\n }\n }\n };\n /**\n * Return values bound to the column.\n *\n * @param {string} field - 'field' to be passed to get the field values.\n * @returns {object[]} - Values bound to the column\n */\n QueryBuilder.prototype.getValues = function (field) {\n var original = {};\n var result = [];\n var value;\n var fieldColl = [];\n if (this.separator.length > 0) {\n fieldColl = field.split(this.separator);\n }\n var dataSource = this.dataColl;\n if (this.dataColl[1]) {\n for (var i = 0, iLen = dataSource.length; i < iLen; i++) {\n var data = {};\n if (fieldColl.length > 1) {\n var dataObj = dataSource[i];\n var fieldStr = void 0;\n for (var j = 0, jLen = fieldColl.length; j < jLen; j++) {\n fieldStr = fieldColl[j];\n if (fieldColl.length === (j + 1)) {\n value = dataObj[\"\" + fieldStr];\n if (Number(dataObj[\"\" + fieldStr]) === dataObj[\"\" + fieldStr] && dataObj[\"\" + fieldStr] % 1 !== 0) {\n value = dataObj[\"\" + fieldStr].toString();\n }\n }\n else {\n dataObj = dataObj[\"\" + fieldStr];\n }\n }\n }\n else {\n value = dataSource[i][\"\" + field];\n if (Number(dataSource[i][\"\" + field]) === dataSource[i][\"\" + field] && dataSource[i][\"\" + field] % 1 !== 0) {\n value = dataSource[i][\"\" + field].toString();\n }\n }\n if (!(value in original)) {\n original[\"\" + value] = 1;\n if (fieldColl.length > 1) {\n this.createNestedObject(data, fieldColl, value);\n }\n else {\n data[\"\" + field] = value;\n }\n result.push(data);\n }\n }\n }\n return result;\n };\n QueryBuilder.prototype.createNestedObject = function (obj, fieldColl, value) {\n var key;\n var lastIndex = fieldColl.length - 1;\n for (var k = 0; k < lastIndex; ++k) {\n key = fieldColl[k];\n if (!(key in obj)) {\n obj[\"\" + key] = {};\n }\n obj = obj[\"\" + key];\n }\n obj[fieldColl[lastIndex]] = value;\n };\n QueryBuilder.prototype.getDistinctValues = function (dataSource, field) {\n var original = {};\n var result = [];\n var nest = [];\n var value = '';\n var isNested = field.indexOf(this.separator);\n var _loop_2 = function (i, iLen) {\n value = '';\n if (isNested === 0) {\n value = dataSource[i][\"\" + field];\n }\n else {\n nest = field.split(this_2.separator);\n // eslint-disable-next-line @typescript-eslint/tslint/config\n nest.forEach(function (element) {\n if (value) {\n value = value[\"\" + element];\n }\n else {\n value = dataSource[i][\"\" + element];\n }\n });\n }\n if (Number(dataSource[i][\"\" + field]) === dataSource[i][\"\" + field] && dataSource[i][\"\" + field] % 1 !== 0) {\n value = dataSource[i][\"\" + field].toString();\n }\n var data = {};\n if (!(value in original)) {\n original[\"\" + value] = 1;\n if (isNested === 0) {\n data[\"\" + field] = value;\n }\n else {\n data[nest[nest.length - 1]] = value;\n }\n result.push(data);\n }\n };\n var this_2 = this;\n for (var i = 0, iLen = dataSource.length; i < iLen; i++) {\n _loop_2(i, iLen);\n }\n return result;\n };\n QueryBuilder.prototype.renderMultiSelect = function (rule, parentId, i, selectedValue, values) {\n var isFetched = false;\n var ds;\n var isValues = false;\n this.isGetNestedData = false;\n if (this.dataColl[1]) {\n if (Object.keys(this.dataColl[1]).indexOf(rule.field) > -1) {\n isFetched = true;\n ds = this.getDistinctValues(this.dataColl, rule.field);\n }\n }\n isFetched = rule.columns ? false : isFetched;\n if (!this.dataColl.length && values.length) {\n isValues = true;\n }\n var multiSelectValue;\n multiSelectValue = {\n dataSource: isValues ? values : (isFetched ? ds : this.dataManager),\n query: new Query([rule.field]),\n fields: { text: this.selectedRule.field, value: this.selectedRule.field },\n placeholder: this.l10n.getConstant('SelectValue'),\n value: selectedValue,\n mode: 'CheckBox',\n width: '100%',\n change: this.changeValue.bind(this, i),\n close: this.closePopup.bind(this, i),\n actionBegin: this.multiSelectOpen.bind(this, parentId + '_valuekey' + i),\n open: this.popupOpen.bind(this, false)\n };\n if (this.valueModel && this.valueModel.multiSelectModel) {\n multiSelectValue = __assign({}, multiSelectValue, this.valueModel.multiSelectModel);\n }\n var multiSelectObj = new MultiSelect(multiSelectValue);\n multiSelectObj.appendTo('#' + parentId + '_valuekey' + i);\n this.updateRules(multiSelectObj.element, selectedValue, 0);\n };\n QueryBuilder.prototype.multiSelectOpen = function (parentId, args) {\n if (this.dataSource instanceof DataManager) {\n var element = document.getElementById(parentId);\n var dropDownObj = getComponent(closest(element, '.e-rule-container').querySelector('.e-filter-input'), this.fieldMode === 'DropdownTree' ? 'dropdowntree' : 'dropdownlist');\n if (this.fieldMode === 'DropdownTree') {\n this.selectedColumn = this.getColumn(dropDownObj.value[0]);\n }\n else {\n this.selectedColumn = dropDownObj.getDataByValue(dropDownObj.value);\n }\n var value = this.selectedColumn.field;\n var isFetched = false;\n if (this.dataColl[1]) {\n if (Object.keys(this.dataColl[1]).indexOf(value) > -1) {\n isFetched = true;\n }\n var isNest = value.indexOf(this.separator);\n if (isNest !== 0 && this.isGetNestedData) {\n isFetched = true;\n }\n }\n if (!isFetched) {\n args.cancel = true;\n this.bindMultiSelectData(element, value);\n }\n }\n };\n QueryBuilder.prototype.bindMultiSelectData = function (element, value) {\n this.getMultiSelectData(element, value);\n };\n QueryBuilder.prototype.getMultiSelectData = function (element, value) {\n var _this = this;\n var dummyData;\n var deferred = new Deferred();\n var data = this.dataManager.executeQuery(new Query().select(value));\n var multiselectObj = getComponent(element, 'multiselect');\n multiselectObj.hideSpinner();\n this.createSpinner(closest(element, '.e-multi-select-wrapper').parentElement);\n showSpinner(closest(element, '.e-multi-select-wrapper').parentElement);\n data.then(function (e) {\n if (e.actual && e.actual.result) {\n dummyData = e.actual.result;\n }\n else {\n dummyData = e.result;\n }\n _this.dataColl = extend(_this.dataColl, dummyData, [], true);\n multiselectObj.dataSource = _this.getDistinctValues(_this.dataColl, value);\n _this.isGetNestedData = true;\n hideSpinner(closest(element, '.e-multi-select-wrapper').parentElement);\n }).catch(function (e) {\n deferred.reject(e);\n });\n };\n QueryBuilder.prototype.createSpinner = function (element) {\n var spinnerElem = this.createElement('span', { attrs: { class: 'e-qb-spinner' } });\n element.appendChild(spinnerElem);\n createSpinner({ target: spinnerElem, width: Browser.isDevice ? '16px' : '14px' });\n };\n QueryBuilder.prototype.closePopup = function (i, args) {\n var element = document.getElementById(args.popup.element.id.replace('_popup', ''));\n if (element) {\n var ms = getComponent(element, 'multiselect');\n if (ms) {\n var value = ms.value;\n this.updateRules(element, value, i);\n }\n }\n };\n QueryBuilder.prototype.processTemplate = function (target, itemData, rule, tempRule) {\n var container = closest(target, '.e-rule-container');\n var tempElements = container.querySelectorAll('.e-template');\n var filterElem = container.querySelector('.e-rule-filter .e-filter-input');\n var ddlObj = this.fieldMode === 'DropdownTree' ? getComponent(filterElem, 'dropdowntree')\n : getComponent(container.querySelector('.e-rule-filter .e-filter-input'), 'dropdownlist');\n var column = this.fieldMode === 'DropdownTree' ? this.getColumn(ddlObj.value[0]) : this.getColumn(ddlObj.value);\n if (typeof itemData.template === 'string' || itemData.template.write === undefined) {\n var args = { rule: rule, ruleID: container.id, operator: tempRule.operator, field: column.field,\n requestType: 'value-template-create' };\n this.trigger('actionBegin', args);\n }\n else {\n var template = itemData.template;\n if (typeof template.write === 'string') {\n getValue(template.write, window)({ elements: tempElements.length > 1 ? tempElements : tempElements[0], values: rule.value,\n operator: tempRule.operator, field: column.field, dataSource: column.values });\n }\n else if (typeof itemData.template !== 'function') {\n itemData.template.write({ elements: tempElements.length > 1 ? tempElements : tempElements[0],\n values: rule.value, operator: tempRule.operator, field: column.field, dataSource: column.values });\n }\n }\n };\n QueryBuilder.prototype.getItemData = function (parentId) {\n var fieldObj = getComponent(document.getElementById(parentId + '_filterkey'), 'dropdownlist');\n var parentFieldObj = this.element.querySelector(\"#\" + parentId);\n if (this.fieldMode === 'DropdownTree') {\n fieldObj = getComponent(document.getElementById(parentId + '_filterkey'), 'dropdowntree');\n }\n else if (parentFieldObj) {\n var subFieldObjList = parentFieldObj.querySelectorAll('.e-rule-sub-filter');\n if (subFieldObjList.length > 0) {\n var lastSubFieldObj = subFieldObjList[subFieldObjList.length - 1].querySelector('.e-dropdownlist');\n fieldObj = getComponent(lastSubFieldObj, 'dropdownlist');\n }\n }\n return this.fieldMode === 'DropdownTree' ? this.getColumn(fieldObj.value[0]) : this.getColumn(fieldObj.value);\n };\n QueryBuilder.prototype.setDefaultValue = function (parentId, isArryValue, isNumber) {\n var itemData = this.getItemData(parentId);\n if (isNullOrUndefined(itemData.value)) {\n return isNumber ? isArryValue ? [0, 0] : 0 : isArryValue ? [] : '';\n }\n if (isArryValue) {\n if (!(itemData.value instanceof Array)) {\n return [itemData.value];\n }\n }\n else {\n if (itemData.value instanceof Array) {\n return itemData.value[0];\n }\n }\n return itemData.value;\n };\n QueryBuilder.prototype.renderStringValue = function (parentId, rule, operator, idx, ruleValElem) {\n var selectedVal;\n var columnData = this.getItemData(parentId);\n var selectedValue;\n var isTemplate = (typeof columnData.template === 'string');\n if (this.isImportRules || this.ruleIndex > -1 || this.groupIndex > -1 || this.isPublic || isTemplate || rule.value !== '') {\n selectedValue = rule.value;\n }\n else {\n selectedValue = this.setDefaultValue(parentId, false, false);\n }\n if ((operator === 'in' || operator === 'notin') && (this.dataColl.length || columnData.values)) {\n selectedVal = (this.isImportRules || this.ruleIndex > -1 || this.groupIndex > -1 || this.isPublic) ? rule.value :\n this.setDefaultValue(parentId, true, false);\n this.renderMultiSelect(columnData, parentId, idx, selectedVal, columnData.values);\n if (this.displayMode === 'Vertical' || this.element.className.indexOf('e-device') > -1) {\n ruleValElem.style.width = '100%';\n }\n else {\n ruleValElem.style.width = null;\n ruleValElem.style.minWidth = '200px';\n }\n }\n else {\n if (operator === 'in' || operator === 'notin') {\n selectedVal = (this.isImportRules || this.ruleIndex > -1 || this.groupIndex > -1) ? rule.value :\n this.setDefaultValue(parentId, true, false);\n selectedValue = selectedVal.join(',');\n }\n if (operator === 'between' || operator === 'notbetween') {\n if (selectedValue.length > 1) {\n selectedValue = selectedValue[idx];\n }\n }\n var txtBox = void 0;\n txtBox = {\n placeholder: this.l10n.getConstant('SelectValue'),\n input: this.changeValue.bind(this, idx)\n };\n if (this.valueModel && this.valueModel.textBoxModel) {\n txtBox = __assign({}, txtBox, this.valueModel.textBoxModel);\n }\n var inputobj = new TextBox(txtBox);\n inputobj.appendTo('#' + parentId + '_valuekey' + idx);\n inputobj.value = selectedValue;\n inputobj.dataBind();\n }\n };\n QueryBuilder.prototype.renderNumberValue = function (parentId, rule, operator, idx, ruleValElem, itemData, length) {\n var columnData = this.getItemData(parentId);\n var isTemplate = (typeof columnData.template === 'string');\n var selectedVal = (this.isImportRules || this.ruleIndex > -1 || this.groupIndex > -1 || this.isPublic || isTemplate ||\n typeof rule.value === 'number') ? rule.value : this.setDefaultValue(parentId, false, true);\n if ((operator === 'in' || operator === 'notin') && (this.dataColl.length || columnData.values)) {\n selectedVal = (this.isImportRules || this.ruleIndex > -1 || this.groupIndex > -1 || this.isPublic) ? rule.value :\n this.setDefaultValue(parentId, true, false);\n this.renderMultiSelect(columnData, parentId, idx, selectedVal, columnData.values);\n if (this.element.className.indexOf('e-device') > -1 || this.displayMode === 'Vertical') {\n ruleValElem.style.width = '100%';\n }\n else {\n ruleValElem.style.minWidth = '200px';\n ruleValElem.style.width = null;\n }\n }\n else if (operator === 'in' || operator === 'notin') {\n selectedVal = (this.isImportRules || this.ruleIndex > -1 || this.groupIndex > -1) ? rule.value :\n this.setDefaultValue(parentId, true, false);\n var selVal = selectedVal.join(',');\n var txtInp = void 0;\n txtInp = {\n placeholder: this.l10n.getConstant('SelectValue'),\n input: this.changeValue.bind(this, idx)\n };\n if (this.valueModel && this.valueModel.textBoxModel) {\n txtInp = __assign({}, txtInp, this.valueModel.textBoxModel);\n }\n var input = new TextBox(txtInp);\n input.appendTo('#' + parentId + '_valuekey' + idx);\n input.value = selVal;\n input.dataBind();\n }\n else {\n itemData = columnData;\n var min = (itemData.validation && itemData.validation.min) ? itemData.validation.min : 0;\n var max = (itemData.validation && itemData.validation.max) ? itemData.validation.max : Number.MAX_VALUE;\n var format = itemData.format ? itemData.format : 'n';\n if (length > 1 && rule) {\n selectedVal = rule.value[idx] ? rule.value[idx] : this.setDefaultValue(parentId, true, true);\n }\n var numericTxt = void 0;\n numericTxt = {\n value: (selectedVal instanceof Array) ? selectedVal[idx] : selectedVal,\n format: format, min: min, max: max, width: '100%',\n step: itemData.step ? itemData.step : 1,\n change: this.changeValue.bind(this, idx)\n };\n if (this.valueModel && this.valueModel.numericTextBoxModel) {\n numericTxt = __assign({}, numericTxt, this.valueModel.numericTextBoxModel);\n }\n var numeric = new NumericTextBox(numericTxt);\n numeric.appendTo('#' + parentId + '_valuekey' + idx);\n numeric.element.setAttribute('aria-label', itemData.label + ' ' + 'Value');\n numeric.element.oninput = this.changeValue.bind(this, idx);\n }\n };\n QueryBuilder.prototype.processValueString = function (value, type) {\n var numArr = [];\n var strArr = value.split(',');\n if (type === 'string') {\n return strArr;\n }\n else {\n for (var k = 0, kLen = strArr.length; k < kLen; k++) {\n numArr.push(Number(strArr[k]));\n }\n return numArr;\n }\n };\n QueryBuilder.prototype.parseDate = function (value, format) {\n var formatOpt;\n var selectedValue;\n if (format) {\n var dParser = this.intl.getDateParser({ skeleton: 'full', type: 'dateTime' });\n formatOpt = this.getFormat(format);\n selectedValue = dParser(value);\n if (isNullOrUndefined(selectedValue)) {\n selectedValue = this.intl.parseDate(value, formatOpt);\n }\n }\n else {\n selectedValue = new Date(value);\n }\n return selectedValue;\n };\n QueryBuilder.prototype.renderControls = function (target, itemData, rule, tempRule, isRendered) {\n addClass([target.parentElement.querySelector('.e-rule-value')], 'e-value');\n removeClass([target.parentElement.querySelector('.e-rule-value')], 'e-hide');\n addClass([target.parentElement.querySelector('.e-rule-value')], 'e-show');\n if (itemData.template && (itemData.template.create || isRendered)) {\n this.processTemplate(target, itemData, rule, tempRule);\n }\n else {\n var length_1;\n if (tempRule.type === 'boolean') {\n length_1 = this.selectedColumn.values ? this.selectedColumn.values.length : 2;\n }\n else {\n length_1 = tempRule.operator && tempRule.operator.toString().toLowerCase().indexOf('between') > -1 ? 2 : 1;\n }\n var parentId = closest(target, '.e-rule-container').id;\n var ruleValElem = void 0;\n var operator = tempRule.operator.toString();\n if (target.className.indexOf('e-rule-operator') > -1 || target.className.indexOf('e-rule-filter') > -1) {\n ruleValElem = target.parentElement.querySelector('.e-rule-value');\n if (this.element.className.indexOf('e-device') > -1 || this.displayMode === 'Vertical') {\n ruleValElem.style.width = '100%';\n }\n else {\n if (operator !== 'in' && operator !== 'notin') {\n addClass([ruleValElem], 'e-custom-value');\n }\n else {\n removeClass([ruleValElem], 'e-custom-value');\n }\n }\n for (var i = 0; i < length_1; i++) {\n switch (tempRule.type) {\n case 'string':\n {\n this.renderStringValue(parentId, rule, operator, i, ruleValElem);\n }\n break;\n case 'number':\n {\n this.renderNumberValue(parentId, rule, operator, i, ruleValElem, itemData, length_1);\n }\n break;\n case 'boolean':\n this.processBoolValues(itemData, rule, parentId, i);\n break;\n case 'date':\n {\n var selectedValue = new Date();\n var selVal = void 0;\n var column = void 0;\n var format = itemData.format;\n var datepick = void 0;\n var datePicker = void 0;\n var place = this.l10n.getConstant('SelectValue');\n var isTemplate = (typeof itemData.template === 'string');\n if (rule.value && !isNullOrUndefined(format)) {\n selVal = (length_1 > 1) ? rule.value[i] : rule.value;\n selectedValue = this.parseDate(selVal, format) || new Date();\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (!itemData.field && !itemData.key && itemData.value) {\n if (itemData.value instanceof Date) {\n selectedValue = itemData.value;\n }\n else {\n selectedValue = this.parseDate(itemData.value, itemData.format);\n }\n }\n if (!itemData.format && rule && rule.field !== '') {\n column = this.getColumn(rule.field);\n format = column.format;\n }\n if ((this.isImportRules || this.isPublic || isTemplate) && rule) {\n column = this.getColumn(rule.field);\n format = column.format;\n if (rule.value) {\n selVal = (length_1 > 1) ? rule.value[i] : rule.value;\n selectedValue = this.parseDate(selVal, column.format);\n }\n else {\n selectedValue = rule.value;\n }\n }\n if (format) {\n var formatObj = this.getFormat(format);\n if (formatObj.skeleton) {\n datePicker = {\n locale: this.getLocale(), value: selectedValue,\n placeholder: place, format: formatObj, change: this.changeValue.bind(this, i)\n };\n if (this.valueModel && this.valueModel.datePickerModel) {\n datePicker = __assign({}, datePicker, this.valueModel.datePickerModel);\n }\n datepick = new DatePicker(datePicker);\n }\n else {\n datePicker = {\n value: selectedValue, locale: this.getLocale(), placeholder: place,\n format: formatObj.format, change: this.changeValue.bind(this, i)\n };\n if (this.valueModel && this.valueModel.datePickerModel) {\n datePicker = __assign({}, datePicker, this.valueModel.datePickerModel);\n }\n datepick = new DatePicker(datePicker);\n }\n }\n else {\n datePicker = {\n locale: this.getLocale(), value: selectedValue,\n placeholder: place, change: this.changeValue.bind(this, i)\n };\n if (this.valueModel && this.valueModel.datePickerModel) {\n datePicker = __assign({}, datePicker, this.valueModel.datePickerModel);\n }\n datepick = new DatePicker(datePicker);\n }\n datepick.appendTo('#' + parentId + '_valuekey' + i);\n if (!rule.value) {\n var elem = document.getElementById(parentId + '_valuekey' + i);\n this.updateRules(elem, selectedValue, null, this.isNotValueChange);\n this.isNotValueChange = false;\n }\n }\n break;\n }\n }\n }\n }\n };\n QueryBuilder.prototype.processBoolValues = function (itemData, rule, parentId, i) {\n var isCheck = false;\n var value;\n var orgValue;\n if (isNullOrUndefined(rule.type) && itemData) {\n rule.type = itemData.type;\n }\n var label;\n if (itemData.values) {\n var values = itemData.values;\n if (rule.type === 'boolean' && !isNullOrUndefined(rule.value)) {\n isCheck = values[i].toLowerCase() === rule.value.toString().toLowerCase();\n }\n else if (itemData.value) {\n isCheck = values[i].toLowerCase() === itemData.value.toString().toLowerCase();\n }\n else if (i === 0) {\n isCheck = true;\n }\n orgValue = value = label = values[i];\n }\n else {\n var values = [true, false];\n if (rule.type === 'boolean' && !isNullOrUndefined(rule.value)) {\n isCheck = values[i].toString().toLowerCase() === rule.value.toString().toLowerCase();\n }\n else if (itemData.value) {\n isCheck = values[i].toString().toLowerCase() === itemData.value.toString().toLowerCase();\n }\n else if (i === 0) {\n if (typeof rule.value === 'boolean') {\n isCheck = rule.value ? true : false;\n }\n else {\n isCheck = true;\n }\n }\n if (typeof rule.value === 'boolean' && i === 1) {\n isCheck = !rule.value ? true : false;\n }\n value = values[i].toString();\n orgValue = values[i];\n label = this.l10n.getConstant(['True', 'False'][i]);\n }\n var radioBtn;\n radioBtn = {\n label: label, name: parentId + 'default', checked: isCheck, value: value,\n change: this.changeValue.bind(this, i)\n };\n if (this.valueModel && this.valueModel.radioButtonModel) {\n radioBtn = __assign({}, radioBtn, this.valueModel.radioButtonModel);\n }\n var radiobutton = new RadioButton(radioBtn);\n radiobutton.appendTo('#' + parentId + '_valuekey' + i);\n if (isCheck) {\n this.updateRules(radiobutton.element, orgValue, 0, true);\n }\n };\n QueryBuilder.prototype.getOperatorIndex = function (ddlObj, rule) {\n var i;\n var dataSource = ddlObj.dataSource;\n var len = dataSource.length;\n for (i = 0; i < len; i++) {\n if (rule.operator === ddlObj.dataSource[i].value) {\n return i;\n }\n }\n return 0;\n };\n QueryBuilder.prototype.getPreviousItemData = function (prevItemData, column) {\n if (this.isFieldClose && prevItemData) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n prevItemData = this.getColumn(prevItemData.value ? prevItemData.value : prevItemData.field);\n }\n if (column && column.template && prevItemData && Object.keys(prevItemData).length < 4) {\n prevItemData.template = column.template;\n }\n return prevItemData;\n };\n QueryBuilder.prototype.renderValues = function (target, itemData, prevItemData, isRender, rule, tempRule, element) {\n var subFldElem = target.previousElementSibling;\n var filtElem = subFldElem.getElementsByTagName('input')[0];\n var filtObj = this.fieldMode === 'DropdownTree' ? getComponent(filtElem, 'dropdowntree')\n : getComponent(filtElem, 'dropdownlist');\n var column = this.fieldMode === 'DropdownTree' ? this.getColumn(filtObj.value[0])\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n : this.getColumn(filtObj.value);\n this.selectedRule = column;\n var ddlObj = getComponent(target.querySelector('input'), 'dropdownlist');\n if (isRender) {\n itemData = element.id.indexOf('operator') > -1 ? itemData : this.selectedRule;\n if (itemData.operators) {\n ddlObj.value = null;\n ddlObj.dataBind();\n ddlObj.dataSource = itemData.operators;\n ddlObj.index = this.getOperatorIndex(ddlObj, rule);\n ddlObj.value = tempRule.operator = ddlObj.dataSource[ddlObj.index].value;\n if (!this.autoSelectOperator) {\n ddlObj.index = -1;\n tempRule.operator = ddlObj.value = '';\n }\n else {\n ddlObj.dataBind();\n }\n }\n }\n var operator = tempRule.operator.toString();\n var isTempRendered = false;\n if (!(operator.indexOf('null') > -1 || operator.indexOf('isempty') > -1 || operator.indexOf('isnotempty') > -1)) {\n var parentId = closest(target, '.e-rule-container').id;\n prevItemData = this.getPreviousItemData(prevItemData, column);\n if (prevItemData && prevItemData.template === undefined) {\n if (prevItemData.columns) {\n prevItemData = this.getColumn(rule.field);\n }\n }\n else if (this.fieldMode === 'DropdownTree' && prevItemData === undefined) {\n prevItemData = this.getColumn(rule.field);\n }\n if (prevItemData && prevItemData.template) {\n this.templateDestroy(prevItemData, parentId + '_valuekey0');\n var elem = select('#' + parentId + '_valuekey0', target.nextElementSibling);\n if (elem && !elem.classList.contains('e-control')) {\n detach(select('#' + parentId + '_valuekey0', target.nextElementSibling));\n }\n if (typeof prevItemData.template === 'string' || prevItemData.template.create === undefined) {\n if (target.nextElementSibling.classList.contains('e-template-value')) {\n this.clearQBTemplate([parentId]);\n }\n target.nextElementSibling.innerHTML = '';\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.isAngular && !isNullOrUndefined(prevItemData.key) && this.fieldMode === 'DropdownTree') {\n delete prevItemData.template;\n }\n }\n if (isRender) {\n this.validateValue(rule, closest(target, '.e-rule-container'));\n this.destroyControls(target);\n }\n if (this.isImportRules || (ddlObj && ddlObj.value !== '')) {\n if (column) {\n itemData.template = column.template;\n }\n if (itemData.template) {\n addClass([target.nextElementSibling], 'e-template-value');\n itemData.template = column.template;\n isTempRendered = this.setColumnTemplate(itemData, parentId, column.field, itemData.value ||\n operator, target, rule);\n }\n if (isTempRendered) {\n var parentElem = target.parentElement.querySelector('.e-rule-value');\n if (this.element.className.indexOf('e-device') > -1 || this.displayMode === 'Vertical') {\n parentElem.style.width = '100%';\n }\n else {\n parentElem.style.width = '200px';\n }\n }\n else {\n removeClass([target.nextElementSibling], 'e-template-value');\n var inputLen = 1;\n if (tempRule.type === 'boolean') {\n inputLen = this.selectedColumn.values ? this.selectedColumn.values.length : 2;\n }\n else {\n inputLen = (operator && operator.toLowerCase().indexOf('between') > -1) ? 2 : 1;\n }\n for (var i = 0; i < inputLen; i++) {\n var valElem = this.createElement('input', { attrs: { type: 'text', id: parentId + '_valuekey' + i } });\n target.nextElementSibling.appendChild(valElem);\n }\n }\n this.renderControls(target, itemData, rule, tempRule, isTempRendered);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.isAngular && !isNullOrUndefined(itemData.key) && itemData.template && this.fieldMode === 'DropdownTree') {\n delete itemData.template;\n }\n }\n }\n else {\n var parentElem = target.parentElement.querySelector('.e-rule-value');\n if (parentElem) {\n removeClass([parentElem], 'e-show');\n addClass([parentElem], 'e-hide');\n }\n }\n };\n QueryBuilder.prototype.setColumnTemplate = function (itemData, ruleID, field, operator, target, rule) {\n var _this = this;\n var args;\n var isRendered = true;\n if (!itemData.template) {\n return true;\n }\n else {\n if (typeof itemData.template === 'string' || itemData.template.create === undefined) {\n args = { requestType: 'value-template-initialize', ruleID: ruleID, field: field, operator: operator, rule: rule,\n renderTemplate: true };\n this.trigger('actionBegin', args, function (observedActionArgs) {\n isRendered = _this.actionBeginSuccessCallBack(observedActionArgs, itemData, ruleID, field, target);\n });\n return isRendered;\n }\n else {\n var valElem = void 0;\n var template = itemData.template;\n if (typeof template.create === 'string') {\n valElem = getValue(template.create, window)({ field: field, operator: operator });\n }\n else {\n valElem = template.create({ field: field, operator: operator });\n }\n if (valElem instanceof Element) {\n valElem.id = ruleID + '_valuekey0';\n addClass([valElem], 'e-template');\n target.nextElementSibling.appendChild(valElem);\n if (field.indexOf(' ') < 0) {\n addClass([valElem], 'e-' + field);\n }\n }\n else if (valElem instanceof Array) {\n addClass(valElem, 'e-template');\n for (var i = 0, iLen = valElem.length; i < iLen; i++) {\n valElem[i].id = ruleID + '_valuekey' + i;\n target.nextElementSibling.appendChild(valElem[i]);\n }\n }\n addClass([target.nextElementSibling], 'e-template-value');\n return true;\n }\n }\n };\n QueryBuilder.prototype.actionBeginSuccessCallBack = function (args, itemData, ruleID, field, target) {\n if (args.renderTemplate) {\n var valElem = void 0;\n this.columnTemplateFn = this.templateParser(typeof itemData.template === 'function' ? itemData.template : itemData.template);\n var templateID = this.element.id + field;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.isReact) {\n valElem = this.columnTemplateFn(args, this, ruleID, templateID)[0];\n target.nextElementSibling.appendChild(valElem);\n } // eslint-disable-next-line @typescript-eslint/no-explicit-any\n else if (this.isAngular) {\n var valElemColl = this.columnTemplateFn(args, this, ruleID, templateID);\n valElem = (valElemColl[0].nodeType === 3) ? valElemColl[1] : valElemColl[0];\n target.nextElementSibling.appendChild(valElem);\n } // eslint-disable-next-line @typescript-eslint/no-explicit-any\n else if (this.isVue3) {\n valElem = this.columnTemplateFn(args, this, 'Template', templateID);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n append(valElem, target.nextElementSibling);\n }\n else {\n valElem = this.columnTemplateFn(args, this, 'Template', templateID)[0];\n target.nextElementSibling.appendChild(valElem);\n }\n addClass([target.nextElementSibling], 'e-template-value');\n this.renderReactTemplates();\n return true;\n }\n else {\n return false;\n }\n };\n QueryBuilder.prototype.updateValues = function (element, rule) {\n var idx = 1;\n if (element.className.indexOf('e-template') > -1) {\n idx = 3;\n }\n var controlName = element.className.split(' e-')[idx];\n var i = parseInt(element.id.slice(-1), 2);\n var column;\n var format;\n var selectedDate;\n var value;\n var radioBtnObj;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var textboxValue;\n switch (controlName) {\n case 'checkbox':\n value = getComponent(element, controlName).value;\n rule.value = (value !== '') ? value : undefined;\n break;\n case 'textbox':\n textboxValue = getComponent(element, controlName).value;\n if (rule.operator.indexOf('between') > -1) {\n if (typeof rule.value === 'string') {\n rule.value = [];\n }\n rule.value[i] = textboxValue;\n }\n else {\n rule.value = textboxValue;\n }\n break;\n case 'dropdownlist':\n rule.value = getComponent(element, controlName).value;\n break;\n case 'radio':\n radioBtnObj = getComponent(element, controlName);\n if (radioBtnObj.checked) {\n if (typeof rule.value === 'boolean') {\n rule.value = radioBtnObj.value === 'true';\n }\n else {\n if (this.getColumn(rule.field).values) {\n rule.value = radioBtnObj.value;\n }\n else {\n rule.value = radioBtnObj.value === 'true';\n }\n }\n }\n radioBtnObj.refresh();\n break;\n case 'numerictextbox':\n if (rule.operator.indexOf('between') > -1) {\n if (typeof rule.value === 'string') {\n rule.value = [];\n }\n rule.value[i] = getComponent(element, controlName).value;\n }\n else {\n rule.value = getComponent(element, controlName).value;\n }\n break;\n case 'datepicker':\n column = this.getColumn(rule.field);\n format = this.getFormat(column.format);\n selectedDate = getComponent(element, controlName).value;\n if (rule.operator.indexOf('between') > -1) {\n if (typeof rule.value === 'string') {\n rule.value = [];\n }\n rule.value[i] = this.intl.formatDate(selectedDate, format);\n }\n else if (isNullOrUndefined(format.format) && selectedDate) {\n rule.value = this.intl.formatDate(selectedDate);\n }\n else if (selectedDate) {\n rule.value = this.intl.formatDate(selectedDate, format);\n }\n else {\n rule.value = selectedDate;\n }\n break;\n case 'multiselect':\n rule.value = getComponent(element, controlName).value;\n break;\n }\n };\n QueryBuilder.prototype.updateRules = function (target, selectedValue, i, isNotTrigger) {\n var groupElem = closest(target, '.e-group-container');\n var rule = this.getParentGroup(groupElem);\n var ruleElem = closest(target, '.e-rule-container');\n var index = 0;\n var dropDownObj;\n var eventsArgs;\n var groupID = groupElem.id.replace(this.element.id + '_', '');\n var beforeRules = this.getValidRules(this.rule);\n while (ruleElem && ruleElem.previousElementSibling !== null) {\n ruleElem = ruleElem.previousElementSibling;\n if (!this.enableSeparateConnector || (this.enableSeparateConnector &&\n ((!this.headerTemplate && !ruleElem.classList.contains('e-btn-group')) ||\n this.headerTemplate && (ruleElem.classList.contains('e-rule-container') ||\n ruleElem.classList.contains('e-group-container'))))) {\n index++;\n }\n }\n var operator = rule.rules[index].operator ? rule.rules[index].operator.toString() : '';\n ruleElem = closest(target, '.e-rule-container');\n var ruleID = ruleElem.id.replace(this.element.id + '_', '');\n if (closest(target, '.e-rule-filter') || closest(target, '.e-rule-sub-filter')) {\n if (this.subFieldElem) {\n target = this.subFieldElem;\n }\n dropDownObj = this.fieldMode === 'DropdownTree' ? getComponent(target, 'dropdowntree') :\n getComponent(target, 'dropdownlist');\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var column = this.fieldMode === 'DropdownTree' ? this.getColumn(dropDownObj.value[0])\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n : this.getColumn(dropDownObj.value);\n if (!this.isImportRules && rule.rules[index].field &&\n rule.rules[index].field.toLowerCase() !== column.field.toLowerCase()) {\n if (!(ruleElem.querySelectorAll('.e-template')) && !(operator.indexOf('null') > -1)\n || (operator.indexOf('empty') > -1)) {\n rule.rules[index].value = '';\n }\n }\n this.selectedColumn = this.getColumn(this.selectedColumn.field);\n rule.rules[index].field = this.selectedColumn.field;\n rule.rules[index].type = this.selectedColumn.type;\n rule.rules[index].label = this.selectedColumn.label;\n var ruleElement = closest(target, '.e-rule-filter');\n ruleElement = ruleElement ? ruleElement : closest(target, '.e-rule-sub-filter');\n var element = ruleElement.nextElementSibling.querySelector('input.e-control');\n element = element ? element : ruleElement.nextElementSibling.nextElementSibling.querySelector('input.e-control');\n operator = getComponent(element, 'dropdownlist').value.toString();\n rule.rules[index].operator = operator;\n // Value Fields\n var valueContainer = ruleElement.nextElementSibling.nextElementSibling;\n var elementCln = valueContainer.querySelectorAll('input.e-control');\n if (elementCln.length < 1) {\n elementCln = valueContainer.querySelectorAll('div.e-control');\n }\n if (elementCln.length < 1) {\n elementCln = valueContainer.querySelectorAll('.e-template');\n }\n eventsArgs = { groupID: groupID, ruleID: ruleID, value: rule.rules[index].field, type: 'field' };\n for (var i_1 = 0; i_1 < elementCln.length; i_1++) {\n if (operator.indexOf('null') > -1 || operator.indexOf('empty') > -1) {\n rule.rules[index].value = null;\n continue;\n }\n this.updateValues(elementCln[i_1], rule.rules[index]);\n }\n if (!this.isImportRules && !this.prvtEvtTgrDaD) {\n this.trigger('change', eventsArgs);\n }\n if (this.allowValidation && rule.rules[index].field && target.parentElement.className.indexOf('e-tooltip') > -1) {\n getComponent(target.parentElement, 'tooltip').destroy();\n }\n this.filterRules(beforeRules, this.getValidRules(this.rule), 'field');\n }\n else if (closest(target, '.e-rule-operator')) {\n dropDownObj = getComponent(target, 'dropdownlist');\n rule.rules[index].operator = dropDownObj.value.toString();\n var inputElem = ruleElem.querySelectorAll('.e-rule-value input.e-control');\n eventsArgs = { groupID: groupID, ruleID: ruleID, value: dropDownObj.value, type: 'operator' };\n if (this.allowValidation && rule.rules[index].operator && target.parentElement.className.indexOf('e-tooltip') > -1) {\n getComponent(target.parentElement, 'tooltip').destroy();\n }\n if (inputElem.length > 1 && !(inputElem[0].className.indexOf('e-template') > -1)) {\n rule.rules[index].value = [];\n }\n for (var i_2 = 0; i_2 < inputElem.length; i_2++) {\n if (rule.rules[index].operator.indexOf('null') > -1 || rule.rules[index].operator.indexOf('empty') > -1) {\n rule.rules[index].value = null;\n continue;\n }\n else if (inputElem[i_2].classList.contains('e-template')) {\n continue;\n }\n this.updateValues(inputElem[i_2], rule.rules[index]);\n }\n if (!this.isImportRules) {\n this.trigger('change', eventsArgs);\n }\n this.filterRules(beforeRules, this.getValidRules(this.rule), 'operator');\n }\n else if (closest(target, '.e-rule-value')) {\n this.ruleValueUpdate(target, selectedValue, rule, index, groupElem, ruleElem, i);\n if (!isNotTrigger) {\n this.filterRules(beforeRules, this.getValidRules(this.rule), 'value');\n }\n }\n };\n QueryBuilder.prototype.filterRules = function (beforeRule, afterRule, type) {\n var beforeRuleStr = JSON.stringify({ condition: beforeRule.condition, not: beforeRule.not, rule: beforeRule.rules });\n var afetrRuleStr = JSON.stringify({ condition: afterRule.condition, not: afterRule.not, rule: afterRule.rules });\n if (beforeRuleStr !== afetrRuleStr) {\n if (!this.isImportRules && !this.prvtEvtTgrDaD) {\n this.trigger('ruleChange', { previousRule: beforeRule, rule: afterRule, type: type });\n }\n }\n };\n QueryBuilder.prototype.ruleValueUpdate = function (target, selectedValue, rule, index, groupElem, ruleElem, i) {\n var eventsArgs;\n var oper;\n var arrOperator = ['in', 'between', 'notin', 'notbetween'];\n if (rule.rules[index].operator) {\n oper = rule.rules[index].operator.toString().toLowerCase();\n }\n if (selectedValue !== null) {\n if (target.className.indexOf('e-multiselect') > -1 && rule.rules[index].type === 'number' &&\n !this.isNotified) {\n var selVal = [];\n var dupSelectedValue = selectedValue;\n for (var k = 0, kLen = dupSelectedValue.length; k < kLen; k++) {\n if (typeof dupSelectedValue[k] === 'string') {\n selVal.push(parseFloat(dupSelectedValue[k]));\n }\n }\n if (selVal.length) {\n selectedValue = selVal;\n }\n }\n if (this.isNotified) {\n rule.rules[index].value = selectedValue;\n eventsArgs = { groupID: groupElem.id, ruleID: ruleElem.id, value: rule.rules[index].value, type: 'value' };\n if (!this.isImportRules) {\n this.trigger('change', eventsArgs);\n }\n }\n else if (target.className.indexOf('e-spin') > -1 || target.className.indexOf('e-numeric') > -1) {\n if (arrOperator.indexOf(oper) > -1) {\n rule.rules[index].value[i] = selectedValue;\n }\n else {\n rule.rules[index].value = selectedValue;\n }\n }\n else if (target.className.indexOf('e-radio') > -1) {\n rule.rules[index].value = selectedValue;\n }\n else if (target.className.indexOf('e-multiselect') > -1) {\n rule.rules[index].value = selectedValue;\n }\n else if (target.className.indexOf('e-textbox') > -1) {\n if (oper === 'in' || oper === 'notin') {\n if (rule.rules[index].type === 'string') {\n rule.rules[index].value = this.processValueString(selectedValue, rule.rules[index].type);\n }\n else {\n rule.rules[index].value = this.processValueString(selectedValue, rule.rules[index].type);\n }\n }\n else if (oper === 'between' || oper === 'notbetween') {\n if (typeof rule.rules[index].value === 'string') {\n rule.rules[index].value = [];\n }\n rule.rules[index].value[i] = selectedValue;\n }\n else {\n rule.rules[index].value = selectedValue;\n }\n }\n else if (target.className.indexOf('e-datepicker') > -1) {\n var format = this.getFormat(this.getColumn(this.selectedColumn.field).format);\n if (format.type) {\n if (arrOperator.indexOf(oper) > -1) {\n if (typeof rule.rules[index].value === 'string') {\n rule.rules[index].value = [];\n }\n rule.rules[index].value[i] = this.intl.formatDate(selectedValue, format);\n }\n else {\n rule.rules[index].value = this.intl.formatDate(selectedValue, format);\n }\n }\n }\n this.validateValue(rule, ruleElem, index);\n }\n else {\n if (target.className.indexOf('e-datepicker') > -1) {\n if (arrOperator.indexOf(oper) > -1) {\n if (typeof rule.rules[index].value === 'string') {\n rule.rules[index].value = [];\n }\n rule.rules[index].value[i] = selectedValue;\n }\n else {\n rule.rules[index].value = selectedValue;\n }\n }\n else {\n rule.rules[index].value = selectedValue;\n }\n }\n };\n QueryBuilder.prototype.validateValue = function (rule, ruleElem, index) {\n if (!isNullOrUndefined(index)) {\n rule = rule.rules[index];\n }\n var isObject = typeof (rule.value) === 'object';\n if (this.allowValidation && (isNullOrUndefined(index) || (isObject ? rule.value.length > 0 : rule.value))) {\n var valElem = ruleElem.querySelectorAll('.e-rule-value .e-control');\n if (valElem.length > 0) {\n if (valElem[0].className.indexOf('e-tooltip') > -1) {\n getComponent(valElem[0], 'tooltip').destroy();\n }\n else if (valElem[0].parentElement.className.indexOf('e-tooltip') > -1) {\n getComponent(valElem[0].parentElement, 'tooltip').destroy();\n }\n if (valElem[1] && valElem[1].parentElement.className.indexOf('e-tooltip') > -1) {\n getComponent(valElem[1].parentElement, 'tooltip').destroy();\n }\n if (valElem[2] && valElem[2].parentElement.className.indexOf('e-tooltip') > -1) {\n getComponent(valElem[2].parentElement, 'tooltip').destroy();\n }\n }\n }\n };\n QueryBuilder.prototype.getFormat = function (format) {\n var formatOptions;\n if (format) {\n if (typeof (format) === 'string') {\n formatOptions = { type: 'dateTime' };\n if (format === 'short' || format === 'yMd') {\n formatOptions.type = 'date';\n formatOptions.skeleton = format;\n }\n else {\n formatOptions.format = format;\n }\n }\n else {\n formatOptions = { type: 'dateTime', skeleton: format.skeleton };\n }\n }\n else {\n formatOptions = { type: 'date', skeleton: 'yMd' };\n }\n return formatOptions;\n };\n QueryBuilder.prototype.findGroupByIdx = function (groupIdx, rule, isRoot) {\n var ruleColl = rule.rules;\n var dupRuleColl = [];\n if (!isRoot) {\n for (var j = 0, jLen = ruleColl.length; j < jLen; j++) {\n rule = ruleColl[j];\n if (rule.rules) {\n dupRuleColl.push(rule);\n }\n }\n return dupRuleColl[groupIdx];\n }\n return rule;\n };\n /**\n * Removes the component from the DOM and detaches all its related event handlers.\n * Also it maintains the initial input element from the DOM.\n *\n * @method destroy\n * @returns {void}\n */\n QueryBuilder.prototype.destroy = function () {\n this.isDestroy = true;\n var queryElement = this.element;\n if (!queryElement) {\n return;\n }\n var element;\n var i;\n var len;\n var tooltip;\n _super.prototype.destroy.call(this);\n element = this.element.querySelectorAll('.e-addrulegroup');\n len = element.length;\n for (i = 0; i < len; i++) {\n getComponent(element[i], 'dropdown-btn').destroy();\n detach(element[i]);\n }\n tooltip = this.element.querySelectorAll('.e-rule-filter .e-control.e-tooltip');\n for (i = 0; i < tooltip.length; i++) {\n getComponent(tooltip[i], 'tooltip').destroy();\n }\n element = this.element.querySelectorAll('.e-rule-filter .e-control:not(.e-tooltip)');\n len = element.length;\n for (i = 0; i < len; i++) {\n if (getComponent(element[i], 'dropdownlist')) {\n getComponent(element[i], 'dropdownlist').destroy();\n }\n else {\n getComponent(element[i], 'dropdowntree').destroy();\n }\n detach(element[i]);\n }\n tooltip = this.element.querySelectorAll('.e-rule-operator .e-control.e-tooltip');\n for (i = 0; i < tooltip.length; i++) {\n getComponent(tooltip[i], 'tooltip').destroy();\n }\n element = this.element.querySelectorAll('.e-rule-operator .e-control:not(.e-tooltip)');\n len = element.length;\n for (i = 0; i < len; i++) {\n if (getComponent(element[i], 'dropdownlist')) {\n getComponent(element[i], 'dropdownlist').destroy();\n detach(element[i]);\n }\n }\n tooltip = this.element.querySelectorAll('.e-rule-value .e-control.e-tooltip');\n for (i = 0; i < tooltip.length; i++) {\n getComponent(tooltip[i], 'tooltip').destroy();\n }\n this.isImportRules = false;\n this.unWireEvents();\n this.levelColl[this.element.id + '_group0'] = [0];\n this.element.innerHTML = '';\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.portals && this.portals.length) {\n this.clearQBTemplate();\n }\n var popupElement = document.querySelectorAll('.qb-dropdownlist.e-popup');\n if (popupElement) {\n for (i = 0; i < popupElement.length; i++) {\n popupElement[i].remove();\n }\n }\n classList(this.element, [], ['e-rtl', 'e-responsive', 'e-device']);\n this.isDestroy = false;\n };\n /**\n * Adds single or multiple rules.\n *\n * @param {RuleModel[]} rule - 'rule collection' to be passed to add the rules.\n * @param {string} groupID - 'group id' to be passed to add the rule in groups.\n * @returns {void}.\n */\n QueryBuilder.prototype.addRules = function (rule, groupID) {\n groupID = this.element.id + '_' + groupID;\n this.isPublic = true;\n for (var i = 0, len = rule.length; i < len; i++) {\n this.addRuleElement(document.getElementById(groupID), rule[i]);\n }\n this.isPublic = false;\n };\n /**\n * Adds single or multiple groups, which contains the collection of rules.\n *\n * @param {RuleModel[]} groups - 'group collection' to be passed to add the groups.\n * @param {string} groupID - 'group id' to be passed to add the groups.\n * @returns {void}.\n */\n QueryBuilder.prototype.addGroups = function (groups, groupID) {\n if (this.isAddSuccess || this.element.querySelectorAll('.e-group-container').length <= this.maxGroupCount) {\n groupID = this.element.id + '_' + groupID;\n var groupElem = document.getElementById(groupID);\n var rule = this.getParentGroup(groupElem);\n var grouplen = groups.length;\n if (grouplen) {\n this.isPublic = true;\n for (var i = 0, len = groups.length; i < len; i++) {\n this.updatedRule = { isLocked: groups[i].isLocked, condition: groups[i].condition,\n not: groups[i].not };\n this.importRules(groups[i], groupElem, false, groups[i].not);\n }\n this.isPublic = false;\n }\n else {\n var condition = 'and';\n var not = false;\n var isLocked = false;\n if (this.updatedRule) {\n condition = this.updatedRule.condition;\n not = this.updatedRule.not;\n isLocked = this.updatedRule.isLocked;\n }\n if (this.groupIndex < 0) {\n if (this.enableNotCondition) {\n rule.rules.push({ 'condition': condition, 'not': not, rules: [] });\n }\n else {\n rule.rules.push({ 'condition': condition, rules: [] });\n }\n }\n else {\n if (this.enableNotCondition) {\n rule.rules.splice(this.groupIndex + 1, 0, { condition: condition, not: not, rules: [], isLocked: isLocked });\n }\n else {\n rule.rules.splice(this.groupIndex + 1, 0, { condition: condition, rules: [], isLocked: isLocked });\n }\n }\n }\n if (!this.headerTemplate) {\n this.disableRuleCondition(groupElem, rule, null, this.enableSeparateConnector ? true : null);\n }\n }\n };\n QueryBuilder.prototype.initWrapper = function () {\n this.isInitialLoad = true;\n if (this.cssClass) {\n addClass([this.element], this.cssClass.replace(/\\s+/g, ' ').trim().split(' '));\n }\n if (this.enableSeparateConnector) {\n addClass([this.element], 'e-multi-connector');\n }\n if (this.enableRtl) {\n addClass([this.element], 'e-rtl');\n }\n if (this.width) {\n this.element.style.width = this.width;\n }\n if (this.height) {\n this.element.style.height = this.height;\n }\n if (this.rule.rules.length) {\n this.isImportRules = true;\n }\n else {\n this.addGroupElement(false, this.element);\n }\n if (Browser.isDevice || this.displayMode === 'Vertical') {\n if (Browser.isDevice) {\n this.element.style.width = '100%';\n this.element.classList.add('e-device');\n }\n removeClass(this.element.querySelectorAll('.e-rule-container'), 'e-horizontal-mode');\n addClass(this.element.querySelectorAll('.e-rule-container'), 'e-vertical-mode');\n this.displayMode = 'Vertical';\n }\n else {\n this.displayMode = 'Horizontal';\n }\n if (this.summaryView) {\n if (this.isImportRules) {\n this.renderSummary();\n }\n else {\n this.renderSummaryCollapse();\n }\n }\n else {\n if (this.columns && this.columns.length && this.isImportRules) {\n this.addGroupElement(false, this.element, this.rule.condition, false, this.rule.not, false, this.rule);\n var mRules = extend({}, this.rule, {}, true);\n this.isRefreshed = true;\n this.setGroupRules(mRules);\n this.isRefreshed = false;\n }\n else if (this.columns && this.columns.length) {\n this.addRuleElement(this.element.querySelector('.e-group-container'), {});\n }\n this.notGroupRtl();\n if (this.readonly) {\n this.enableReadonly();\n }\n var buttons = this.element.querySelectorAll('label.e-btn');\n var button = void 0;\n for (var i = 0; i < buttons.length; i++) {\n button = buttons.item(i);\n rippleEffect(button, { selector: '.e-btn' });\n }\n }\n };\n QueryBuilder.prototype.renderSummary = function () {\n var contentElem = this.createElement('div', {\n attrs: {\n class: 'e-summary-content',\n id: this.element.id + '_summary_content'\n }\n });\n var textElem = this.createElement('textarea', { attrs: { class: 'e-summary-text', readonly: 'true' }, styles: 'max-height:500px' });\n var editElem = this.createElement('button', { attrs: { type: 'button', class: 'e-edit-rule e-css e-btn e-small e-flat e-primary' } });\n var divElem = this.createElement('div', { attrs: { class: 'e-summary-btndiv' } });\n contentElem.appendChild(textElem);\n textElem.textContent = this.getSqlFromRules(this.rule);\n editElem.textContent = this.l10n.getConstant('Edit');\n divElem.appendChild(editElem);\n contentElem.appendChild(divElem);\n this.element.appendChild(contentElem);\n };\n QueryBuilder.prototype.renderSummaryCollapse = function () {\n var collapseElem = this.createElement('div', {\n attrs: {\n class: 'e-collapse-rule e-icons',\n title: this.l10n.getConstant('SummaryViewTitle')\n }\n });\n this.element.querySelector('.e-group-header').appendChild(collapseElem);\n };\n QueryBuilder.prototype.columnSort = function () {\n if (this.sortDirection.toLowerCase() === 'descending') {\n this.columns = new DataManager(this.columns).executeLocal(new Query().sortByDesc('field'));\n }\n else if (this.sortDirection.toLowerCase() === 'ascending') {\n this.columns = new DataManager(this.columns).executeLocal(new Query().sortBy('field'));\n }\n };\n QueryBuilder.prototype.onChangeNotGroup = function () {\n this.element.innerHTML = '';\n this.groupIdCounter = 0;\n if (!this.headerTemplate) {\n if (this.enableNotCondition) {\n var inputElem = this.createElement('button', { attrs: { type: 'button', class: 'e-qb-toggle' } });\n if (this.groupElem.querySelector('.e-btn-group')) {\n this.groupElem.querySelector('.e-btn-group').insertBefore(inputElem, this.groupElem.querySelector('.e-btngroup-and'));\n }\n }\n else {\n this.groupElem.querySelector('.e-qb-toggle').remove();\n }\n }\n this.setProperties({ rule: this.checkNotGroup(this.rule) }, true);\n this.initWrapper();\n };\n QueryBuilder.prototype.notGroupRtl = function () {\n if (this.enableRtl) {\n addClass(this.element.querySelectorAll('.e-btn-group'), 'e-rtl');\n }\n else {\n removeClass(this.element.querySelectorAll('.e-btn-group'), 'e-rtl');\n }\n };\n QueryBuilder.prototype.checkNotGroup = function (rule) {\n var orgRule;\n if (rule.rules) {\n for (var i = 0; i < rule.rules.length; i++) {\n orgRule = rule.rules[i];\n orgRule = this.checkNotGroup(orgRule);\n rule.rules[i] = orgRule;\n }\n }\n if (!isNullOrUndefined(rule.not)) {\n if (this.enableNotCondition) {\n rule.not = false;\n }\n delete rule.not;\n }\n else if (this.enableNotCondition && !isNullOrUndefined(rule.condition)) {\n rule.not = false;\n }\n return rule;\n };\n QueryBuilder.prototype.onPropertyChanged = function (newProp, oldProp) {\n var properties = Object.keys(newProp);\n var groupElem = this.element.querySelector('.e-group-container');\n var summaryElem = this.element.querySelector('.e-summary-content');\n for (var _i = 0, properties_1 = properties; _i < properties_1.length; _i++) {\n var prop = properties_1[_i];\n switch (prop) {\n case 'summaryView':\n if (newProp.summaryView) {\n groupElem.style.display = 'none';\n if (this.element.querySelectorAll('.e-summary-content').length < 1) {\n this.renderSummary();\n summaryElem = this.element.querySelector('.e-summary-content');\n }\n else {\n this.element.querySelector('.e-summary-text').textContent = this.getSqlFromRules(this.rule);\n }\n summaryElem.style.display = 'block';\n }\n else {\n if (groupElem.querySelectorAll('.e-collapse-rule').length > -1) {\n this.renderSummaryCollapse();\n }\n groupElem.style.display = 'block';\n summaryElem.style.display = 'none';\n }\n break;\n case 'displayMode':\n this.refresh();\n break;\n case 'showButtons':\n if (!isNullOrUndefined(newProp.showButtons.lockGroup)) {\n if (newProp.showButtons.lockGroup) {\n removeClass(this.element.querySelectorAll('.e-lock-grp-btn'), 'e-button-hide');\n }\n else {\n addClass(this.element.querySelectorAll('.e-lock-grp-btn'), 'e-button-hide');\n }\n }\n if (!isNullOrUndefined(newProp.showButtons.lockRule)) {\n if (newProp.showButtons.lockRule) {\n removeClass(this.element.querySelectorAll('.e-lock-rule-btn'), 'e-button-hide');\n }\n else {\n addClass(this.element.querySelectorAll('.e-lock-rule-btn'), 'e-button-hide');\n }\n }\n if (!isNullOrUndefined(newProp.showButtons.cloneGroup)) {\n if (newProp.showButtons.cloneGroup) {\n removeClass(this.element.querySelectorAll('.e-clone-grp-btn'), 'e-button-hide');\n }\n else {\n addClass(this.element.querySelectorAll('.e-clone-grp-btn'), 'e-button-hide');\n }\n }\n if (!isNullOrUndefined(newProp.showButtons.cloneRule)) {\n if (newProp.showButtons.cloneRule) {\n removeClass(this.element.querySelectorAll('.e-clone-rule-btn'), 'e-button-hide');\n }\n else {\n addClass(this.element.querySelectorAll('.e-clone-rule-btn'), 'e-button-hide');\n }\n }\n if (!isNullOrUndefined(newProp.showButtons.ruleDelete)) {\n if (newProp.showButtons.ruleDelete) {\n removeClass(this.element.querySelectorAll('.e-rule-delete'), 'e-button-hide');\n }\n else {\n addClass(this.element.querySelectorAll('.e-rule-delete'), 'e-button-hide');\n }\n }\n if (!isNullOrUndefined(newProp.showButtons.groupDelete)) {\n if (newProp.showButtons.groupDelete) {\n removeClass(this.element.querySelectorAll('.e-deletegroup'), 'e-button-hide');\n }\n else {\n addClass(this.element.querySelectorAll('.e-deletegroup'), 'e-button-hide');\n }\n }\n break;\n case 'cssClass':\n if (oldProp.cssClass) {\n removeClass([this.element], oldProp.cssClass.split(' '));\n }\n if (newProp.cssClass) {\n addClass([this.element], newProp.cssClass.replace(/\\s+/g, ' ').trim().split(' '));\n }\n break;\n case 'enableRtl':\n if (newProp.enableRtl) {\n addClass([this.element], 'e-rtl');\n this.notGroupRtl();\n }\n else {\n removeClass([this.element], 'e-rtl');\n this.notGroupRtl();\n }\n break;\n case 'enablePersistence':\n this.enablePersistence = newProp.enablePersistence;\n break;\n case 'dataSource':\n this.dataSource = newProp.dataSource;\n this.refresh();\n break;\n case 'columns':\n this.columns = newProp.columns;\n this.columnSort();\n this.updateSubFieldsFromColumns(this.columns);\n break;\n case 'sortDirection':\n this.sortDirection = newProp.sortDirection;\n this.columnSort();\n break;\n case 'maxGroupCount':\n this.maxGroupCount = newProp.maxGroupCount;\n break;\n case 'height':\n this.height = newProp.height;\n this.element.style.height = this.height;\n break;\n case 'rule':\n if (this.rule.rules.length === 0 && !isNullOrUndefined(this.rule)) {\n this.reset();\n }\n this.setProperties({ rule: newProp.rule }, true);\n newProp.rule = this.getRuleCollection(this.rule, false);\n this.setRules(this.rule);\n break;\n case 'width':\n this.width = newProp.width;\n this.element.style.width = this.width;\n break;\n case 'locale':\n this.locale = newProp.locale;\n this.intl = new Internationalization(this.locale);\n this.isLocale = true;\n this.refresh();\n this.isLocale = false;\n break;\n case 'enableNotCondition':\n this.onChangeNotGroup();\n break;\n case 'readonly':\n this.isReadonly = newProp.readonly;\n this.enableReadonly();\n break;\n case 'allowDragAndDrop':\n this.allowDragAndDrop = newProp.allowDragAndDrop;\n this.refresh();\n break;\n case 'enableSeparateConnector':\n this.enableSeparateConnector = newProp.enableSeparateConnector;\n this.refresh();\n break;\n }\n }\n };\n QueryBuilder.prototype.preRender = function () {\n this.element.id = this.element.id || getUniqueID('ej2-querybuilder');\n this.defaultLocale = {\n StartsWith: 'Starts With',\n DoesNotStartWith: 'Does Not Start With',\n EndsWith: 'Ends With',\n DoesNotEndWith: 'Does Not End With',\n Contains: 'Contains',\n DoesNotContain: 'Does Not Contain',\n NotLike: 'Not Like',\n Like: 'Like',\n Equal: 'Equal',\n NotEqual: 'Not Equal',\n LessThan: 'Less Than',\n LessThanOrEqual: 'Less Than Or Equal',\n GreaterThan: 'Greater Than',\n GreaterThanOrEqual: 'Greater Than Or Equal',\n Between: 'Between',\n NotBetween: 'Not Between',\n In: 'In',\n NotIn: 'Not In',\n Remove: 'REMOVE',\n SelectField: 'Select a field',\n SelectOperator: 'Select operator',\n DeleteRule: 'Remove this condition',\n DeleteGroup: 'Delete group',\n AddGroup: 'Add Group',\n AddCondition: 'Add Condition',\n Edit: 'EDIT',\n ValidationMessage: 'This field is required',\n SummaryViewTitle: 'Summary View',\n OtherFields: 'Other Fields',\n AND: 'AND',\n OR: 'OR',\n NOT: 'NOT',\n SelectValue: 'Enter Value',\n IsEmpty: 'Is Empty',\n IsNotEmpty: 'Is Not Empty',\n IsNull: 'Is Null',\n IsNotNull: 'Is Not Null',\n True: 'true',\n False: 'false',\n AddButton: 'Add Group/Condition',\n CloneGroup: 'Clone Group',\n LockGroup: 'Lock Group',\n CloneRule: 'Clone Rule',\n LockRule: 'Lock Rule',\n UnlockRule: 'Unlock Rule',\n UnlockGroup: 'Unlock Group'\n };\n this.l10n = new L10n('querybuilder', this.defaultLocale, this.locale);\n this.intl = new Internationalization(this.locale);\n this.groupIdCounter = 0;\n this.subFilterCounter = 0;\n this.ruleIdCounter = 0;\n this.btnGroupId = 0;\n this.isImportRules = false;\n this.parser = [];\n this.customOperators = {\n stringOperator: [\n { value: 'startswith', key: this.l10n.getConstant('StartsWith') },\n { value: 'notstartswith', key: this.l10n.getConstant('DoesNotStartWith') },\n { value: 'endswith', key: this.l10n.getConstant('EndsWith') },\n { value: 'notendswith', key: this.l10n.getConstant('DoesNotEndWith') },\n { value: 'contains', key: this.l10n.getConstant('Contains') },\n { value: 'notcontains', key: this.l10n.getConstant('DoesNotContain') },\n { value: 'equal', key: this.l10n.getConstant('Equal') },\n { value: 'notequal', key: this.l10n.getConstant('NotEqual') },\n { value: 'in', key: this.l10n.getConstant('In') },\n { value: 'notin', key: this.l10n.getConstant('NotIn') },\n { value: 'isempty', key: this.l10n.getConstant('IsEmpty') },\n { value: 'isnotempty', key: this.l10n.getConstant('IsNotEmpty') }\n ],\n dateOperator: [\n { value: 'equal', key: this.l10n.getConstant('Equal') },\n { value: 'greaterthan', key: this.l10n.getConstant('GreaterThan') },\n { value: 'greaterthanorequal', key: this.l10n.getConstant('GreaterThanOrEqual') },\n { value: 'lessthan', key: this.l10n.getConstant('LessThan') },\n { value: 'lessthanorequal', key: this.l10n.getConstant('LessThanOrEqual') },\n { value: 'notequal', key: this.l10n.getConstant('NotEqual') },\n { value: 'between', key: this.l10n.getConstant('Between') },\n { value: 'notbetween', key: this.l10n.getConstant('NotBetween') }\n ],\n booleanOperator: [\n { value: 'equal', key: this.l10n.getConstant('Equal') },\n { value: 'notequal', key: this.l10n.getConstant('NotEqual') }\n ],\n numberOperator: [\n { value: 'equal', key: this.l10n.getConstant('Equal') },\n { value: 'greaterthanorequal', key: this.l10n.getConstant('GreaterThanOrEqual') },\n { value: 'greaterthan', key: this.l10n.getConstant('GreaterThan') },\n { value: 'between', key: this.l10n.getConstant('Between') },\n { value: 'lessthan', key: this.l10n.getConstant('LessThan') },\n { value: 'notbetween', key: this.l10n.getConstant('NotBetween') },\n { value: 'lessthanorequal', key: this.l10n.getConstant('LessThanOrEqual') },\n { value: 'notequal', key: this.l10n.getConstant('NotEqual') },\n { value: 'in', key: this.l10n.getConstant('In') },\n { value: 'notin', key: this.l10n.getConstant('NotIn') }\n ]\n };\n this.operators = {\n equal: '=', notequal: '!=', greaterthan: '>', greaterthanorequal: '>=', lessthan: '<', in: 'IN', notin: 'NOT IN',\n lessthanorequal: '<=', startswith: 'LIKE', endswith: 'LIKE', between: 'BETWEEN', notbetween: 'NOT BETWEEN', contains: 'LIKE',\n isnull: 'IS NULL', isnotnull: 'IS NOT NULL', isempty: 'IS EMPTY', isnotempty: 'IS NOT EMPTY', notstartswith: 'NOT LIKE',\n notendswith: 'NOT LIKE', notcontains: 'NOT LIKE'\n };\n this.sqlOperators = {\n equal: '=', notequal: '!=', greaterthan: '>', greaterthanorequal: '>=', lessthan: '<', in: this.l10n.getConstant('In').toUpperCase(),\n notin: this.l10n.getConstant('NotIn').toUpperCase(), lessthanorequal: '<=', startswith: this.l10n.getConstant('Like').toUpperCase(),\n endswith: this.l10n.getConstant('Like').toUpperCase(), between: this.l10n.getConstant('Between').toUpperCase(),\n notbetween: this.l10n.getConstant('NotBetween').toUpperCase(), contains: this.l10n.getConstant('Like').toUpperCase(),\n isnull: this.l10n.getConstant('IsNull').toUpperCase(), isnotnull: this.l10n.getConstant('IsNotNull').toUpperCase(),\n isempty: this.l10n.getConstant('IsEmpty').toUpperCase(), isnotempty: this.l10n.getConstant('IsNotEmpty').toUpperCase(),\n notstartswith: this.l10n.getConstant('NotLike').toUpperCase(), notendswith: this.l10n.getConstant('NotLike').toUpperCase(),\n notcontains: this.l10n.getConstant('NotLike').toUpperCase()\n };\n if (!this.fields) {\n this.fields = { text: 'label', value: 'field' };\n }\n };\n QueryBuilder.prototype.render = function () {\n this.levelColl = {};\n this.items = [\n {\n text: this.l10n.getConstant('AddGroup'),\n iconCss: 'e-icons e-add-icon e-addgroup'\n },\n {\n text: this.l10n.getConstant('AddCondition'),\n iconCss: 'e-icons e-add-icon e-addrule'\n }\n ];\n this.ruleElem = this.ruleTemplate();\n this.groupElem = this.groupTemplate();\n var stringOper = [\n { value: 'isnull', key: this.l10n.getConstant('IsNull') },\n { value: 'isnotnull', key: this.l10n.getConstant('IsNotNull') }\n ];\n var numberOper = [\n { value: 'isnull', key: this.l10n.getConstant('IsNull') },\n { value: 'isnotnull', key: this.l10n.getConstant('IsNotNull') }\n ];\n this.customOperators['stringOperator'] = this.customOperators['stringOperator'].concat(stringOper); // tslint:disable-line\n this.customOperators['numberOperator'] = this.customOperators['numberOperator'].concat(numberOper); // tslint:disable-line\n if (this.dataSource instanceof DataManager) {\n this.dataManager = this.dataSource;\n this.executeDataManager(new Query().take(1));\n }\n else {\n this.dataManager = new DataManager(this.dataSource);\n this.dataColl = this.dataManager.executeLocal(new Query());\n this.initControl();\n }\n this.renderComplete();\n if (this.allowDragAndDrop) {\n this.initializeDrag();\n }\n };\n QueryBuilder.prototype.initializeDrag = function () {\n this.draggable = new Draggable(this.element, {\n dragTarget: '.e-drag-qb-rule',\n distance: 5,\n helper: this.helper.bind(this),\n dragStart: this.dragStartHandler.bind(this),\n drag: this.dragHandler.bind(this),\n dragStop: this.dragStopHandler.bind(this),\n isReplaceDragEle: true,\n isPreventSelect: false,\n abort: '.e-parent-header',\n isDragScroll: true\n });\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n QueryBuilder.prototype.helper = function (e) {\n var target = this.draggable.currentStateTarget;\n if (!target.classList.contains('e-drag-qb-rule') || (target.classList.contains('e-drag-qb-rule') && closest(target, '.e-disable'))) {\n return false;\n }\n var visualElement = this.createElement('div', {\n className: 'e-cloneproperties e-draganddrop e-dragclone',\n styles: 'height:\"auto\", z-index:2, width:' + this.element.offsetWidth\n });\n var cloneElement;\n if (this.draggable.currentStateTarget.parentElement.classList.contains('e-group-header')) {\n cloneElement = closest(target, '.e-group-container').cloneNode(true);\n closest(target, '.e-group-container').classList.add('e-qb-dragging-rule');\n }\n else {\n visualElement.classList.add('e-group-body');\n cloneElement = this.createElement('div', { className: 'e-rule-container' });\n var ruleElement = closest(target, '.e-rule-field').cloneNode(true);\n cloneElement.appendChild(ruleElement);\n closest(target, '.e-rule-field').classList.add('e-qb-dragging-rule');\n }\n visualElement.appendChild(cloneElement);\n var childElements = visualElement.querySelectorAll('*');\n childElements.forEach(function (child) {\n child.removeAttribute('id');\n });\n this.element.appendChild(visualElement);\n return visualElement;\n };\n QueryBuilder.prototype.dragStartHandler = function (e) {\n this.draggedRule = e.target;\n this.isDragEventPrevent = false;\n document.body.classList.add('e-prevent-select');\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this.dragElement = e.dragElement;\n var rule = closest(e.target, '.e-rule-container');\n var group = closest(e.target, '.e-group-container');\n var dragEventArgs = { dragRuleID: rule !== null ? rule.id : group.id, dragGroupID: group.id, cancel: false };\n this.trigger('dragStart', dragEventArgs);\n this.isDragEventPrevent = dragEventArgs.cancel;\n };\n QueryBuilder.prototype.dragHandler = function (e) {\n if (this.isDragEventPrevent) {\n return;\n }\n var borderLineElem = this.element.querySelectorAll('.e-drag-rule-bottom-line');\n borderLineElem.forEach(function (ele) {\n ele.classList.remove('e-drag-rule-bottom-line');\n });\n borderLineElem = this.element.querySelectorAll('.e-drag-rule-top-line');\n borderLineElem.forEach(function (ele) {\n ele.classList.remove('e-drag-rule-top-line');\n });\n if (isNullOrUndefined(e.target)) {\n return;\n }\n if (e.target.nodeName === 'HTML' || closest(e.target, '.e-qb-dragging-rule') || closest(e.target, '.e-group-header') ||\n !closest(e.target, '#' + this.element.id) || closest(e.target, '.e-disable') || (e.target.parentElement && e.target.parentElement.classList.contains('e-btn-group') && this.enableSeparateConnector)) {\n this.dragElement.classList.add('e-notallowedcur');\n return;\n }\n else {\n this.dragElement.classList.remove('e-notallowedcur');\n }\n var targetElem = closest(e.target, '.e-rule-container');\n var grpElem = closest(e.target, '.e-group-container');\n if (targetElem) {\n var rect = targetElem.getBoundingClientRect();\n var mouseY = e.event.clientY || e.event.changedTouches[0].clientY;\n var distanceToTop = mouseY - rect.top;\n var distanceToBottom = rect.bottom - mouseY;\n var threshold = 20; // Adjust as needed\n if (distanceToTop < threshold) {\n targetElem.classList.add('e-drag-rule-top-line');\n }\n else if (distanceToBottom < threshold) {\n targetElem.classList.add('e-drag-rule-bottom-line');\n }\n }\n else if (e.target.classList.contains('e-rule-list') && e.target.children.length === 0) {\n e.target.classList.add('e-drag-rule-bottom-line');\n }\n else if (e.target.classList.contains('e-rule-list') && e.target.children[0].classList.contains('e-group-container')) {\n var rect = e.target.children[0].getBoundingClientRect();\n var mouseY = e.event.clientY || e.event.changedTouches[0].clientY;\n var distanceToTop = mouseY - rect.top;\n var threshold = 20; // Adjust as needed\n if (distanceToTop < threshold) {\n e.target.classList.add('e-drag-rule-top-line');\n }\n }\n else if (closest(e.target, '.e-group-container') || e.target.classList.contains('e-group-container')) {\n if (!grpElem) {\n grpElem = e.target;\n }\n if (grpElem.id.indexOf('group0') > -1) {\n var rect = e.target.getBoundingClientRect();\n var mouseY = e.event.clientY || e.event.changedTouches[0].clientY;\n var distanceToBottom = rect.bottom - mouseY;\n var threshold = 20; // Adjust as needed\n if (distanceToBottom < threshold) {\n e.target.classList.add('e-drag-rule-bottom-line');\n }\n }\n }\n var dragEventArgs = { dragRuleID: targetElem !== null ? targetElem.id : grpElem !== null ? grpElem.id : null,\n dragGroupID: grpElem !== null ? grpElem.id : null, cancel: false };\n this.trigger('drag', dragEventArgs);\n this.isDragEventPrevent = dragEventArgs.cancel;\n };\n QueryBuilder.prototype.dragStopHandler = function (e) {\n var _this = this;\n if (this.isDragEventPrevent) {\n return;\n }\n var targetGroup = closest(e.target, '.e-rule-container');\n if (isNullOrUndefined(targetGroup) && e.target.parentElement &&\n e.target.parentElement.classList.contains('e-btn-group') && this.enableSeparateConnector) {\n targetGroup = closest(e.target.parentElement.previousElementSibling, '.e-rule-container');\n }\n var isPreventelem;\n if (!isNullOrUndefined(e.helper)) {\n isPreventelem = closest(e.helper, '.e-notallowedcur');\n }\n var prevRule;\n if (!isPreventelem) {\n var targetGrp = closest(e.target, '.e-group-container');\n var dropEventArgs = { cancel: false, dropRuleID: targetGroup !== null ? targetGroup.id\n : targetGrp !== null ? targetGrp.id : null, dropGroupID: targetGrp !== null ? targetGrp.id : null };\n this.trigger('drop', dropEventArgs);\n if (dropEventArgs.cancel) {\n isPreventelem = true;\n }\n prevRule = this.getValidRules();\n }\n this.prvtEvtTgrDaD = true;\n var tgrt = this.enableSeparateConnector && e.target.parentElement &&\n e.target.parentElement.classList.contains('e-btn-group') ? e.target.parentElement.previousElementSibling : e.target;\n if (targetGroup && !isPreventelem) {\n var groupId_1 = targetGroup.id.split(this.element.id + '_')[1].split('_')[0];\n if (this.draggable.currentStateTarget.parentElement.classList.contains('e-rule-field') ||\n this.draggable.currentStateTarget.parentElement.classList.contains('e-group-header')) {\n var rule = void 0;\n if (this.draggable.currentStateTarget.parentElement.classList.contains('e-group-header')) {\n rule = this.getGroup(this.draggedRule);\n this.deleteGroup(closest(this.draggedRule, '.e-group-container'));\n }\n else {\n rule = this.getRule(this.draggedRule);\n this.deleteRule(this.draggedRule);\n }\n var groupRule = extend([], this.getGroup(targetGroup), [], true);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (groupRule.properties) {\n groupRule = groupRule.properties;\n }\n var groupElem = closest(targetGroup, '.e-group-container');\n var nestGrpElem = groupElem.querySelectorAll('.e-group-container');\n nestGrpElem.forEach(function (ele) {\n if (_this.element.querySelector('#' + ele.id)) {\n _this.deleteGroup(ele);\n }\n });\n var ruleElems = groupElem.querySelectorAll('.e-rule-container');\n var ruleIds = [];\n var dropInd = void 0;\n for (var i = 0; i < ruleElems.length; i++) {\n if (ruleElems[i].classList.contains('e-drag-rule-top-line') ||\n ruleElems[i].classList.contains('e-drag-rule-bottom-line')) {\n dropInd = i;\n }\n ruleIds.push(ruleElems[i].id.split(this.element.id + '_')[1]);\n }\n this.deleteRules(ruleIds);\n if (targetGroup.classList.contains('e-drag-rule-top-line')) {\n groupRule.rules.splice(dropInd, 0, rule);\n }\n else {\n groupRule.rules.splice(dropInd + 1, 0, rule);\n }\n groupRule.rules.forEach(function (rule) {\n if (_this.enableSeparateConnector) {\n if (!rule.rules) {\n _this.addRules([rule], groupId_1);\n }\n else {\n _this.addGroups([rule], groupId_1);\n }\n }\n else {\n if (rule.condition) {\n _this.addGroups([rule], groupId_1);\n }\n else {\n _this.addRules([rule], groupId_1);\n }\n }\n });\n }\n }\n else if (tgrt.classList.contains('e-rule-list') && tgrt.children.length === 0 && !isPreventelem) {\n var groupElem = closest(tgrt, '.e-group-container');\n var groupId = groupElem.id.split(this.element.id + '_')[1].split('_')[0];\n var rule = void 0;\n if (this.draggable.currentStateTarget.parentElement.classList.contains('e-group-header')) {\n rule = this.getGroup(this.draggedRule);\n this.deleteGroup(closest(this.draggedRule, '.e-group-container'));\n }\n else {\n rule = this.getRule(this.draggedRule);\n this.deleteRule(this.draggedRule);\n }\n if (this.enableSeparateConnector) {\n if (!rule.rules) {\n this.addRules([rule], groupId);\n }\n else {\n this.addGroups([rule], groupId);\n }\n }\n else {\n if (rule.condition) {\n this.addGroups([rule], groupId);\n }\n else {\n this.addRules([rule], groupId);\n }\n }\n }\n else if (tgrt.classList.contains('e-rule-list') && tgrt.children[0].classList.contains('e-group-container') && !isPreventelem) {\n var groupElem = closest(tgrt, '.e-group-container');\n var groupId_2 = groupElem.id.split(this.element.id + '_')[1].split('_')[0];\n var rule = void 0;\n if (this.draggable.currentStateTarget.parentElement.classList.contains('e-group-header')) {\n rule = this.getGroup(this.draggedRule);\n this.deleteGroup(closest(this.draggedRule, '.e-group-container'));\n }\n else {\n rule = this.getRule(this.draggedRule);\n this.deleteRule(this.draggedRule);\n }\n var groupRule = extend([], this.getGroup(tgrt), [], true);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (groupRule.properties) {\n groupRule = groupRule.properties;\n }\n var groupElems = tgrt.querySelectorAll('.e-group-container');\n groupElems.forEach(function (ele) {\n if (_this.element.querySelector('#' + ele.id)) {\n _this.deleteGroup(ele);\n }\n });\n var ruleElems = groupElem.querySelectorAll('.e-rule-container');\n ruleElems.forEach(function (ele) {\n if (_this.element.querySelector('#' + ele.id)) {\n _this.deleteRule(ele);\n }\n });\n if (this.draggable.currentStateTarget.parentElement.classList.contains('e-group-header')) {\n this.addGroups([rule], groupId_2);\n }\n else {\n this.addRules([rule], groupId_2);\n }\n groupRule.rules.forEach(function (rule) {\n if (_this.enableSeparateConnector) {\n if (!rule.rules) {\n _this.addRules([rule], groupId_2);\n }\n else {\n _this.addGroups([rule], groupId_2);\n }\n }\n else {\n if (rule.condition) {\n _this.addGroups([rule], groupId_2);\n }\n else {\n _this.addRules([rule], groupId_2);\n }\n }\n });\n }\n else if ((closest(e.target, '.e-group-container') || e.target.classList.contains('e-group-container')) && !isPreventelem) {\n var rule = void 0;\n targetGroup = closest(e.target, '.e-group-container');\n if (!targetGroup && e.target.classList.contains('e-group-container')) {\n targetGroup = e.target;\n }\n var groupId = targetGroup.id.split(this.element.id + '_')[1].split('_')[0];\n if (groupId === 'group0') {\n if (this.draggable.currentStateTarget.parentElement.classList.contains('e-group-header')) {\n rule = this.getGroup(this.draggedRule);\n this.deleteGroup(closest(this.draggedRule, '.e-group-container'));\n }\n else {\n rule = this.getRule(this.draggedRule);\n this.deleteRule(this.draggedRule);\n }\n if (this.enableSeparateConnector) {\n if (!rule.rules) {\n this.addRules([rule], groupId);\n }\n else {\n this.addGroups([rule], groupId);\n }\n }\n else {\n if (rule.condition) {\n this.addGroups([rule], groupId);\n }\n else {\n this.addRules([rule], groupId);\n }\n }\n }\n }\n if (!isPreventelem) {\n this.trigger('ruleChange', { previousRule: prevRule, rule: this.getValidRules(), type: 'drag-and-drop' });\n }\n this.prvtEvtTgrDaD = false;\n document.body.classList.remove('e-prevent-select');\n var borderLineElem = this.element.querySelectorAll('.e-drag-rule-bottom-line');\n borderLineElem.forEach(function (ele) {\n ele.classList.remove('e-drag-rule-bottom-line');\n });\n borderLineElem = this.element.querySelectorAll('.e-drag-rule-top-line');\n borderLineElem.forEach(function (ele) {\n ele.classList.remove('e-drag-rule-top-line');\n });\n borderLineElem = this.element.querySelectorAll('.e-qb-dragging-rule');\n borderLineElem.forEach(function (ele) {\n ele.classList.remove('e-qb-dragging-rule');\n });\n if (e.helper && e.helper.classList.contains('e-cloneproperties') && document.querySelector('.' + e.helper.classList[0])) {\n remove(e.helper);\n }\n if (this.enableSeparateConnector) {\n this.refresh();\n }\n };\n QueryBuilder.prototype.templateParser = function (template) {\n if (template) {\n try {\n if (typeof template !== 'function' && document.querySelectorAll(template).length) {\n return templateCompiler(document.querySelector(template).innerHTML.trim());\n }\n else {\n return compile(template);\n }\n }\n catch (error) {\n return templateCompiler(template);\n }\n }\n return undefined;\n };\n QueryBuilder.prototype.executeDataManager = function (query) {\n var _this = this;\n var data = this.dataManager.executeQuery(query);\n var deferred = new Deferred();\n data.then(function (e) {\n if (e.actual && e.actual.result) {\n _this.dataColl = e.actual.result;\n }\n else {\n _this.dataColl = e.result;\n }\n _this.initControl();\n }).catch(function (e) {\n deferred.reject(e);\n });\n };\n QueryBuilder.prototype.initControl = function () {\n this.initialize();\n this.initWrapper();\n this.wireEvents();\n };\n QueryBuilder.prototype.wireEvents = function () {\n var wrapper = this.getWrapper();\n EventHandler.add(wrapper, 'click', this.clickEventHandler, this);\n EventHandler.add(wrapper, 'focusout', this.focusEventHandler, this);\n EventHandler.add(wrapper, 'focusin', this.focusEventHandler, this);\n EventHandler.add(this.element, 'keydown', this.keyBoardHandler, this);\n EventHandler.add(document, 'keydown', this.keyBoardHandler, this);\n };\n QueryBuilder.prototype.unWireEvents = function () {\n var wrapper = this.getWrapper();\n EventHandler.remove(wrapper, 'click', this.clickEventHandler);\n EventHandler.remove(wrapper, 'focusout', this.focusEventHandler);\n EventHandler.remove(wrapper, 'focusin', this.focusEventHandler);\n EventHandler.remove(this.element, 'keydown', this.keyBoardHandler);\n EventHandler.remove(document, 'keydown', this.keyBoardHandler);\n };\n QueryBuilder.prototype.getParentGroup = function (target, isParent) {\n var groupLevel = (target instanceof Element) ? this.levelColl[target.id] : this.levelColl[\"\" + target];\n var len = isParent ? groupLevel.length - 1 : groupLevel.length;\n var rule = this.rule;\n for (var i = 0; i < len; i++) {\n rule = this.findGroupByIdx(groupLevel[i], rule, i === 0);\n }\n return rule;\n };\n /**\n * Delete the Group\n *\n * @param {Element | string} target - 'target' to be passed to delete the group.\n * @returns {void}\n */\n QueryBuilder.prototype.deleteGroup = function (target) {\n var _this = this;\n var groupElem = target;\n var groupId;\n if (typeof target === 'string') {\n groupId = this.element.id + '_' + target;\n target = document.getElementById(groupId);\n groupId = groupId.replace(this.element.id + '_', '');\n }\n else {\n groupId = groupElem.id.replace(this.element.id + '_', '');\n }\n if (groupId === 'group0' || !target) {\n return;\n }\n var args = { groupID: groupId, cancel: false, type: 'deleteGroup' };\n if (!this.isImportRules && !this.prvtEvtTgrDaD) {\n this.trigger('beforeChange', args, function (observedChangeArgs) {\n _this.deleteGroupSuccessCallBack(observedChangeArgs, target);\n });\n }\n else {\n this.deleteGroupSuccessCallBack(args, target);\n }\n };\n QueryBuilder.prototype.deleteGroupSuccessCallBack = function (args, target) {\n if (!args.cancel) {\n var groupElem = target;\n var rule = this.getParentGroup(groupElem, true);\n var index = 0;\n var i = void 0;\n var len = void 0;\n var beforeRules = this.getValidRules(this.rule);\n var nextElem = groupElem.nextElementSibling;\n var prevElem = groupElem.previousElementSibling;\n var element = groupElem.querySelectorAll('.e-group-container');\n var valElem = groupElem.querySelectorAll('.e-tooltip');\n len = valElem.length;\n for (i = 0; i < len; i++) {\n getComponent(valElem[i], 'tooltip').destroy();\n }\n for (i = 0, len = element.length; i < len; i++) {\n delete this.levelColl[element[i].id];\n }\n while (groupElem.previousElementSibling !== null) {\n groupElem = groupElem.previousElementSibling;\n if (!this.enableSeparateConnector || (this.enableSeparateConnector &&\n ((!this.headerTemplate && !groupElem.classList.contains('e-btn-group')) ||\n this.headerTemplate && (groupElem.classList.contains('e-rule-container') ||\n groupElem.classList.contains('e-group-container'))))) {\n index++;\n }\n }\n if (!this.enableSeparateConnector) {\n if (nextElem && nextElem.className.indexOf('e-separate-rule') > -1) {\n removeClass([nextElem], 'e-separate-rule');\n addClass([nextElem], 'e-joined-rule');\n if (prevElem && prevElem.className.indexOf('e-rule-container') > -1) {\n addClass([prevElem], 'e-prev-joined-rule');\n }\n }\n }\n var elem = groupElem.parentElement.parentElement.parentElement;\n var removeString = [];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.isReact || this.isAngular) {\n var remRule = rule.rules[index];\n var ruleElemColl = target.querySelectorAll('.e-rule-container');\n if (remRule && remRule.rules) {\n for (var r = 0; r < remRule.rules.length; r++) {\n var column = this.getColumn(remRule.rules[r].field);\n if (ruleElemColl[r]) {\n var isTemplateRendered = ruleElemColl[r].querySelector('.e-template-value');\n if (column && (column.ruleTemplate || (this.isPlatformTemplate(column) && isTemplateRendered))) {\n removeString.push(ruleElemColl[r].id);\n }\n }\n }\n }\n }\n detach(target);\n if (this.headerTemplate) {\n this.clearQBTemplate([target.id]);\n }\n if (removeString.length) {\n this.clearQBTemplate(removeString);\n }\n rule.rules.splice(index, 1);\n delete this.levelColl[args.groupID];\n this.refreshLevelColl();\n this.disableRuleCondition(elem, rule);\n if (this.enableSeparateConnector && prevElem && ((!this.headerTemplate && prevElem.classList.contains('e-btn-group')) ||\n (this.headerTemplate && prevElem.classList.contains('e-custom-group-btn')))) {\n detach(prevElem);\n }\n if (!this.isImportRules && !this.prvtEvtTgrDaD) {\n this.trigger('change', args);\n }\n this.filterRules(beforeRules, this.getValidRules(this.rule), 'deleteGroup');\n }\n };\n QueryBuilder.prototype.isPlatformTemplate = function (column) {\n var isTemp = false;\n isTemp = column.template && (typeof column.template === 'string' || column.template.create === undefined);\n return isTemp;\n };\n QueryBuilder.prototype.deleteRule = function (target) {\n var _this = this;\n var groupElem = closest(target, '.e-group-container');\n var groupID = groupElem.id.replace(this.element.id + '_', '');\n var ruleID = closest(target, '.e-rule-container').id.replace(this.element.id + '_', '');\n var args = { groupID: groupID, ruleID: ruleID, cancel: false, type: 'deleteRule' };\n if (!this.isImportRules && !this.prvtEvtTgrDaD) {\n this.trigger('beforeChange', args, function (observedChangeArgs) {\n _this.deleteRuleSuccessCallBack(observedChangeArgs, target);\n });\n }\n else {\n this.deleteRuleSuccessCallBack(args, target);\n }\n };\n QueryBuilder.prototype.deleteRuleSuccessCallBack = function (args, target) {\n if (!args.cancel) {\n var groupElem = closest(target, '.e-group-container');\n var rule = this.getParentGroup(groupElem);\n var ruleElem = closest(target, '.e-rule-container');\n var beforeRules = this.getValidRules(this.rule);\n var prevElem = ruleElem.previousElementSibling;\n var index = 0;\n var clnruleElem = ruleElem;\n var nextElem = ruleElem.nextElementSibling;\n var valElem = ruleElem.querySelectorAll('.e-tooltip');\n var i = void 0;\n var len = valElem.length;\n for (i = 0; i < len; i++) {\n getComponent(valElem[i], 'tooltip').destroy();\n }\n while (ruleElem.previousElementSibling !== null) {\n ruleElem = ruleElem.previousElementSibling;\n if (!this.enableSeparateConnector || (this.enableSeparateConnector &&\n ((!this.headerTemplate && !ruleElem.classList.contains('e-btn-group')) ||\n this.headerTemplate && (ruleElem.classList.contains('e-rule-container') ||\n ruleElem.classList.contains('e-group-container'))))) {\n index++;\n }\n }\n var column = this.getColumn(rule.rules[index].field);\n if (column && column.template && clnruleElem.querySelector('.e-template')) {\n this.templateDestroy(column, clnruleElem.querySelector('.e-template').id);\n }\n if (!prevElem || prevElem.className.indexOf('e-rule-container') < 0) {\n if (nextElem) {\n removeClass([nextElem], 'e-joined-rule');\n }\n }\n if (!nextElem || nextElem.className.indexOf('e-rule-container') < 0) {\n if (prevElem) {\n removeClass([prevElem], 'e-prev-joined-rule');\n }\n }\n var isTemplateRendered = clnruleElem.querySelector('.e-template-value');\n // eslint-disable\n try {\n if (this.enableSeparateConnector && (clnruleElem.previousElementSibling || clnruleElem.nextElementSibling)) {\n var previousElem = clnruleElem.previousElementSibling;\n var nextElem_1 = clnruleElem.nextElementSibling;\n if (isNullOrUndefined(nextElem_1) && ((!this.headerTemplate && previousElem.classList.contains('e-btn-group'))\n || (this.headerTemplate && previousElem.classList.contains('e-custom-group-btn')))) {\n if (previousElem && previousElem.previousElementSibling && previousElem.previousElementSibling.classList.contains('e-rule-container')) {\n var rule_1 = this.getRule(previousElem.previousElementSibling);\n rule_1.condition = null;\n }\n detach(previousElem);\n }\n else if ((!this.headerTemplate && nextElem_1.classList.contains('e-btn-group'))\n || (this.headerTemplate && nextElem_1.classList.contains('e-custom-group-btn'))) {\n detach(nextElem_1);\n }\n }\n detach(clnruleElem);\n }\n catch (err) {\n return;\n }\n if (column && column.ruleTemplate) {\n this.clearQBTemplate([clnruleElem.id]);\n }\n if (column && this.isPlatformTemplate(column) && isTemplateRendered) {\n this.clearQBTemplate([clnruleElem.id]);\n }\n rule.rules.splice(index, 1);\n if (!(rule.rules[0] && rule.rules[0].rules)) {\n this.disableRuleCondition(groupElem, rule, this.enableSeparateConnector ? true : false);\n }\n var tooltipElem = this.element.querySelectorAll('.e-tooltip');\n for (var i_3 = 0; i_3 < tooltipElem.length; i_3++) {\n getComponent(tooltipElem[i_3], 'tooltip').refresh(tooltipElem[i_3]);\n }\n if (!this.isImportRules && !this.prvtEvtTgrDaD) {\n this.trigger('change', args);\n }\n this.filterRules(beforeRules, this.getValidRules(this.rule), 'deleteRule');\n }\n };\n QueryBuilder.prototype.setGroupRules = function (rule, isRoot) {\n if (this.headerTemplate && isRoot) {\n this.isRoot = true;\n }\n this.reset();\n this.groupIdCounter = 1;\n this.ruleIdCounter = 0;\n this.isImportRules = true;\n this.setProperties({ rule: rule }, true);\n rule = this.getRuleCollection(this.rule, false);\n this.importRules(this.rule, this.element.querySelector('.e-group-container'), true, this.rule.not, isRoot);\n if (rule.isLocked) {\n var lockGrpTarget = this.element.querySelector('.e-group-container').querySelector('.e-lock-grp-btn');\n this.groupLock(lockGrpTarget);\n }\n this.isImportRules = false;\n };\n QueryBuilder.prototype.keyBoardHandler = function (e) {\n if (e.currentTarget === this.element && this.readonly && (e.keyCode === 38 || e.keyCode === 40 || e.keyCode === 13)) {\n e.preventDefault();\n }\n else if (e.code === 'Escape' && this.allowDragAndDrop) {\n this.isDragEventPrevent = true;\n document.body.classList.remove('e-prevent-select');\n var borderLineElem = this.element.querySelectorAll('.e-drag-rule-bottom-line');\n borderLineElem.forEach(function (ele) {\n ele.classList.remove('e-drag-rule-bottom-line');\n });\n borderLineElem = this.element.querySelectorAll('.e-drag-rule-top-line');\n borderLineElem.forEach(function (ele) {\n ele.classList.remove('e-drag-rule-top-line');\n });\n borderLineElem = this.element.querySelectorAll('.e-qb-dragging-rule');\n borderLineElem.forEach(function (ele) {\n ele.classList.remove('e-qb-dragging-rule');\n });\n var dragElemnet = this.element.querySelector('.e-cloneproperties');\n if (dragElemnet) {\n remove(dragElemnet);\n }\n if (this.enableSeparateConnector) {\n this.refresh();\n }\n }\n };\n QueryBuilder.prototype.clearQBTemplate = function (ruleElemColl) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.isReact || this.isAngular) {\n this.clearTemplate(ruleElemColl);\n }\n };\n QueryBuilder.prototype.disableRuleCondition = function (groupElem, rules, isNewRuleAdded, isNewGroup) {\n if (!this.headerTemplate) {\n if (this.readonly) {\n return;\n }\n var count = groupElem.querySelector('.e-rule-list').childElementCount;\n var andElem = groupElem.querySelector('.e-btngroup-and');\n var orElem = groupElem.querySelector('.e-btngroup-or');\n if (count > 1) {\n andElem.disabled = false;\n orElem.disabled = false;\n if (orElem.nextElementSibling.classList.contains('e-btn-disable') ||\n andElem.nextElementSibling.classList.contains('e-btn-disable')) {\n orElem.nextElementSibling.classList.remove('e-btn-disable');\n andElem.nextElementSibling.classList.remove('e-btn-disable');\n }\n if (this.enableSeparateConnector && !isNewRuleAdded) {\n var index = 0;\n var element = void 0;\n // eslint-disable-next-line no-constant-condition\n while (true) {\n var andGroup = groupElem.parentElement.querySelectorAll('.e-btngroup-and');\n var orGroup = groupElem.parentElement.querySelectorAll('.e-btngroup-or');\n andElem = andGroup[andGroup.length - (1 + index)];\n orElem = orGroup[orGroup.length - (1 + index)];\n element = andGroup[andGroup.length - (1 + index)];\n if (element && element.parentElement && element.parentElement.style.display === 'none') {\n index++;\n }\n else {\n break;\n }\n }\n var elem = groupElem.previousElementSibling;\n while (elem && !elem.classList.contains('e-rule-container')) {\n if (elem.classList.contains('e-group-container')) {\n elem = elem.querySelectorAll('.e-rule-container')[elem.querySelectorAll('.e-rule-container').length - 1];\n break;\n }\n elem = elem.previousElementSibling;\n }\n if (isNewGroup && groupElem.classList.contains('e-group-container')) {\n elem = groupElem;\n var prevRule = this.getGroup(elem);\n if (prevRule.condition === 'or') {\n orElem.checked = true;\n }\n else {\n andElem.checked = true;\n }\n }\n else if (elem && elem.classList.contains('e-rule-container')) {\n var ruleID = elem.id.replace(this.element.id + '_', '');\n var prevRule = this.getRule(ruleID);\n if (prevRule.condition === 'or') {\n orElem.checked = true;\n }\n else {\n andElem.checked = true;\n }\n }\n }\n else if (!isNewRuleAdded) {\n if (rules && rules.condition === 'or') {\n orElem.checked = true;\n }\n else {\n andElem.checked = true;\n }\n }\n }\n else {\n if (this.enableSeparateConnector && !isNewRuleAdded) {\n var index = 0;\n var element = void 0;\n // eslint-disable-next-line no-constant-condition\n while (true) {\n var andGroup = groupElem.parentElement.querySelectorAll('.e-btngroup-and');\n var orGroup = groupElem.parentElement.querySelectorAll('.e-btngroup-or');\n andElem = andGroup[andGroup.length - (1 + index)];\n orElem = orGroup[orGroup.length - (1 + index)];\n element = andGroup[andGroup.length - (1 + index)];\n if (element && element.parentElement && element.parentElement.style.display === 'none') {\n index++;\n }\n else {\n break;\n }\n }\n var elem = void 0;\n var tempElem = groupElem.previousElementSibling;\n while (tempElem) {\n if (tempElem.classList.contains('e-group-container')) {\n tempElem = tempElem.querySelectorAll('.e-rule-container')[tempElem.querySelectorAll('.e-rule-container').length - 1];\n }\n if (tempElem.classList.contains('e-rule-container')) {\n elem = tempElem;\n break;\n }\n tempElem = tempElem.previousElementSibling;\n }\n if (isNullOrUndefined(elem) && groupElem.querySelectorAll('.e-rule-container')[groupElem.querySelectorAll('.e-rule-container').length - 1]) {\n elem = groupElem.querySelectorAll('.e-rule-container')[groupElem.querySelectorAll('.e-rule-container').length - 1];\n }\n if (isNewGroup && groupElem.classList.contains('e-group-container')) {\n elem = groupElem;\n var prevRule = this.getGroup(elem);\n if (prevRule.condition === 'or') {\n orElem.checked = true;\n }\n else {\n andElem.checked = true;\n }\n }\n else if (elem) {\n var ruleID = elem.id.replace(this.element.id + '_', '');\n var prevRule = this.getRule(ruleID);\n if (prevRule.condition === 'or' && orElem) {\n orElem.checked = true;\n }\n else if (andElem) {\n andElem.checked = true;\n }\n }\n }\n else if (!isNewRuleAdded && !isNullOrUndefined(andElem)) {\n andElem.checked = false;\n andElem.disabled = true;\n orElem.checked = false;\n orElem.disabled = true;\n if (rules) {\n orElem.nextElementSibling.classList.add('e-btn-disable');\n andElem.nextElementSibling.classList.add('e-btn-disable');\n }\n }\n }\n }\n };\n /**\n * Get the valid rule or rules collection.\n *\n * @param {RuleModel} currentRule - 'currentRule' to be passed to get the valid rules.\n * @returns {RuleModel} - Valid rule or rules collection\n */\n QueryBuilder.prototype.getValidRules = function (currentRule) {\n this.isValueEmpty = true;\n if (!currentRule) {\n currentRule = this.getRules();\n }\n var ruleCondtion = currentRule.condition;\n var notCondition = currentRule.not;\n var ruleColl = extend([], currentRule.rules, [], true);\n var rule = !isNullOrUndefined(currentRule.isLocked) ?\n this.getRuleCollection({ condition: ruleCondtion, rules: ruleColl, not: notCondition, isLocked: currentRule.isLocked }, true) :\n this.getRuleCollection({ condition: ruleCondtion, rules: ruleColl, not: notCondition }, true);\n this.isValueEmpty = false;\n return rule;\n };\n QueryBuilder.prototype.getRuleCollection = function (rule, isValidRule) {\n if (isNullOrUndefined(rule)) {\n return null;\n }\n var orgRule;\n if (rule.rules && rule.rules.length && (Object.keys(rule.rules[0]).length > 6 || isValidRule)) {\n var jLen = rule.rules.length;\n for (var j = 0; j < jLen; j++) {\n orgRule = rule.rules[j];\n orgRule = this.getRuleCollection(orgRule, isValidRule);\n rule.rules[j] = orgRule;\n if (Object.keys(orgRule).length < 1 && isValidRule) {\n rule.rules.splice(j, 1);\n j--;\n jLen--;\n }\n }\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var customObj = rule.custom;\n if ((rule.field && rule.field !== '') && (isNullOrUndefined(customObj) || (customObj && (customObj.type !== 'question' &&\n customObj.type !== 'answer')))) {\n if (rule.operator) {\n if (rule.operator.toString().indexOf('null') > -1 || rule.operator.toString().indexOf('empty') > -1) {\n rule.value = null;\n }\n }\n if ((this.isRefreshed && this.enablePersistence) || (rule.field !== '' && rule.operator !== '' &&\n (this.isValueEmpty ? rule.value !== '' && rule.value !== undefined : rule.value !== undefined)) ||\n (customObj && customObj.isQuestion)) {\n var condition = rule.condition;\n var lockedRule = rule.isLocked;\n rule = { 'label': rule.label, 'field': rule.field, 'operator': rule.operator, 'type': rule.type, 'value': rule.value };\n if (!isNullOrUndefined(lockedRule)) {\n rule.isLocked = lockedRule;\n }\n if (condition) {\n rule.condition = condition;\n }\n if (customObj) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n rule.custom = customObj;\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if ((rule.operator === 'in' || rule.operator === 'notin') && rule.value && rule.value.length === 0) {\n rule = {};\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if ((rule.operator === 'between' || rule.operator === 'notbetween') && Array.isArray(rule.value) && (rule.value.length < 2 || rule.value.some(function (val) { return val === '' || val === null; }))) {\n rule = {};\n }\n }\n else {\n rule = {};\n }\n }\n else {\n if (customObj && (customObj.type === 'question' || customObj.type === 'answer')) {\n var notValue = rule.not;\n rule = { 'label': rule.label, 'field': rule.field, 'operator': rule.operator, 'type': rule.type, 'value': rule.value,\n 'condition': rule.condition, 'rules': rule.rules\n };\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n rule.custom = customObj;\n if (this.enableNotCondition) {\n rule.not = notValue;\n }\n }\n else if ((isNullOrUndefined(rule.condition)) && isNullOrUndefined(rule.rules)) {\n rule = {};\n }\n else {\n var isLocked = rule.isLocked;\n if (this.enableNotCondition) {\n rule = { 'condition': rule.condition, 'rules': rule.rules, 'not': rule.not };\n }\n else {\n rule = { 'condition': rule.condition, 'rules': rule.rules };\n }\n if (!isNullOrUndefined(isLocked)) {\n rule.isLocked = isLocked;\n }\n if (customObj) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n rule.custom = customObj;\n }\n if (rule.rules && rule.rules.length === 0) {\n rule = {};\n }\n }\n }\n return rule;\n };\n /**\n * Set the rule or rules collection.\n *\n * @param {RuleModel} rule - 'rule' to be passed to set rules.\n * @returns {void}.\n */\n QueryBuilder.prototype.setRules = function (rule) {\n var mRules = extend({}, rule, {}, true);\n if (this.headerTemplate) {\n this.setGroupRules(mRules, true);\n }\n else {\n this.setGroupRules(mRules);\n }\n };\n /**\n * Gets the rule or rule collection.\n *\n * @returns {object} - Rule or rule collection\n */\n QueryBuilder.prototype.getRules = function () {\n var rule;\n if (this.enableNotCondition) {\n rule = { condition: this.rule.condition, rules: this.rule.rules, not: this.rule.not };\n }\n else {\n rule = { condition: this.rule.condition, rules: this.rule.rules };\n }\n if (!isNullOrUndefined(this.rule.isLocked)) {\n rule.isLocked = this.rule.isLocked;\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.rule.custom) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n rule.custom = this.rule.custom;\n }\n return rule;\n };\n /**\n * Gets the rule.\n *\n * @param {string | HTMLElement} elem - 'elem' to be passed to get rule.\n * @returns {object} - Rule\n */\n QueryBuilder.prototype.getRule = function (elem) {\n var ruleElem;\n var ruleId;\n var index = 0;\n if (elem instanceof HTMLElement) {\n ruleElem = closest(elem, '.e-rule-container');\n }\n else {\n ruleId = this.element.id + '_' + elem;\n ruleElem = document.getElementById(ruleId);\n }\n if (isNullOrUndefined(ruleElem)) {\n return null;\n }\n var groupElem = closest(ruleElem, '.e-group-container');\n var rule = this.getParentGroup(groupElem);\n while (ruleElem.previousElementSibling !== null) {\n ruleElem = ruleElem.previousElementSibling;\n if (!this.enableSeparateConnector || (this.enableSeparateConnector &&\n ((!this.headerTemplate && !ruleElem.classList.contains('e-btn-group')) ||\n this.headerTemplate && (ruleElem.classList.contains('e-rule-container') ||\n ruleElem.classList.contains('e-group-container'))))) {\n index++;\n }\n }\n return rule.rules[index];\n };\n /**\n * Gets the group.\n *\n * @param {string | Element} target - 'target' to be passed to get group.\n * @returns {object} -Group\n */\n QueryBuilder.prototype.getGroup = function (target) {\n if (target instanceof Element && target.className.indexOf('e-group-container') < 1) {\n target = closest(target, '.e-group-container');\n }\n var groupId = (target instanceof Element) ? target.id : this.element.id + '_' + target;\n var rule = this.getParentGroup(groupId);\n return rule;\n };\n /**\n * Deletes the group or groups based on the group ID.\n *\n * @param {string[]} groupIdColl - 'groupIdColl' to be passed to delete groups.\n * @returns {void}\n */\n QueryBuilder.prototype.deleteGroups = function (groupIdColl) {\n var i;\n var len = groupIdColl.length;\n var groupID;\n for (i = 0; i < len; i++) {\n if (groupIdColl[i] === 'group0') {\n continue;\n }\n groupID = this.element.id + '_' + groupIdColl[i];\n this.deleteGroup(document.getElementById(groupID));\n }\n };\n /**\n * Return the Query from current rules collection.\n *\n * @returns {Promise} - Query from current rules collection\n * @blazorType object\n */\n QueryBuilder.prototype.getFilteredRecords = function () {\n var predicate = this.getPredicate(this.getValidRules(this.rule));\n var dataManagerQuery = isNullOrUndefined(predicate) ? new Query() : new Query().where(predicate);\n return this.dataManager.executeQuery(dataManagerQuery);\n };\n /**\n * Deletes the rule or rules based on the rule ID.\n *\n * @param {string[]} ruleIdColl - 'ruleIdColl' to be passed to delete rules.\n * @returns {void}.\n */\n QueryBuilder.prototype.deleteRules = function (ruleIdColl) {\n var i;\n var len = ruleIdColl.length;\n var ruleID;\n for (i = 0; i < len; i++) {\n ruleID = this.element.id + '_' + ruleIdColl[i];\n this.deleteRule(document.getElementById(ruleID));\n }\n };\n /**\n * Gets the query for Data Manager.\n *\n * @param {RuleModel} rule - 'rule' to be passed to get query.\n * @returns {string} - Query for Data Manager\n */\n QueryBuilder.prototype.getDataManagerQuery = function (rule) {\n var predicate = this.getPredicate(rule);\n var query;\n var fields = [];\n for (var i = 0, len = Object.keys(this.columns); i < len.length; i++) {\n fields.push(this.columns[i].field);\n }\n if (rule.rules.length) {\n query = new Query().select(fields).where(predicate);\n }\n else {\n query = new Query().select(fields);\n }\n return query;\n };\n /**\n * Get the predicate from collection of rules.\n *\n * @param {RuleModel} rule - 'rule' to be passed to get predicate.\n * @returns {Predicate} - Predicate from collection of rules\n */\n QueryBuilder.prototype.getPredicate = function (rule) {\n var ruleColl = rule.rules;\n var pred;\n var pred2;\n var ruleValue;\n var ignoreCase = false;\n var column;\n if (!ruleColl) {\n return pred;\n }\n for (var i = 0, len = ruleColl.length; i < len; i++) {\n var operator = ruleColl[i].operator;\n if (operator === 'notstartswith') {\n operator = 'doesnotstartwith';\n }\n else if (operator === 'notendswith') {\n operator = 'doesnotendwith';\n }\n else if (operator === 'notcontains') {\n operator = 'doesnotcontain';\n }\n var keys = Object.keys(ruleColl[i]);\n ignoreCase = false;\n if (keys.indexOf('rules') > -1 && ruleColl[i].rules) {\n pred2 = this.getPredicate(ruleColl[i]);\n if (pred2) {\n if (pred) {\n if (rule.condition === 'and') {\n pred = pred.and(pred2);\n }\n else {\n pred = pred.or(pred2);\n }\n }\n else {\n pred = pred2;\n }\n }\n }\n else if (!isNullOrUndefined(operator) && !isNullOrUndefined(operator.length)) {\n var oper = ruleColl[i].operator.toLowerCase();\n var isDateFilter = false;\n var dateOperColl = ['equal', 'notequal', 'greaterthan', 'greaterthanorequal', 'lessthan', 'lessthanorequal'];\n if (ruleColl[i].type === 'string') {\n ignoreCase = this.matchCase ? false : true;\n }\n if (ruleColl[i].type === 'date' && dateOperColl.indexOf(oper) > -1) {\n ignoreCase = true;\n }\n column = this.getColumn(ruleColl[i].field);\n if (oper.indexOf('null') > -1 || oper.indexOf('empty') > -1) {\n ruleColl[i].value = null;\n }\n else if (ruleColl[i].type === 'date' && !(ruleColl[i].value instanceof Array)) {\n var format = this.getFormat(column.format);\n if (!isNullOrUndefined(ruleColl[i].value)) {\n ruleValue = this.getDate(ruleColl[i].value, format);\n if (dateOperColl.indexOf(oper) > -1 && !this.isTime(ruleColl[i].value)) {\n isDateFilter = true;\n }\n }\n else {\n ruleValue = null;\n }\n }\n else {\n ruleValue = ruleColl[i].value;\n }\n if (i === 0) {\n if (isDateFilter || (oper.indexOf('in') > -1 || oper.indexOf('between') > -1 || oper.indexOf('null') > -1 ||\n oper.indexOf('empty') > -1) && (oper.indexOf('contain') < 0)) {\n pred = isDateFilter ? this.datePredicate(ruleColl[i], ruleValue) :\n this.arrayPredicate(ruleColl[i]);\n }\n else {\n var value = ruleValue;\n if (value !== '') {\n pred = new Predicate(ruleColl[i].field, operator, ruleValue, ignoreCase);\n }\n }\n }\n else {\n if (isDateFilter || (oper.indexOf('in') > -1 || oper.indexOf('between') > -1 ||\n oper.indexOf('null') > -1 || oper.indexOf('empty') > -1) && oper.indexOf('contain') < 0) {\n pred = isDateFilter ? this.datePredicate(ruleColl[i], ruleValue, pred, rule.condition) :\n this.arrayPredicate(ruleColl[i], pred, rule.condition);\n }\n else {\n if (rule.condition === 'and') {\n var value = ruleValue;\n if (pred && value !== '') {\n pred\n = pred.and(ruleColl[i].field, operator, ruleValue, ignoreCase);\n }\n else if (value !== '') {\n pred = new Predicate(ruleColl[i].field, operator, ruleValue, ignoreCase);\n }\n }\n else {\n var value = ruleValue;\n if (pred && value !== '') {\n pred = pred.or(ruleColl[i].field, operator, ruleValue, ignoreCase);\n }\n else if (value !== '') {\n pred = new Predicate(ruleColl[i].field, operator, ruleValue, ignoreCase);\n }\n }\n }\n }\n }\n }\n if (this.dataSource instanceof DataManager) {\n if (!isNullOrUndefined(pred) && (pred.operator === 'isnull' || pred.operator === 'isnotnull')) {\n pred.operator = pred.operator === 'isnull' ? 'equal' : 'notequal';\n }\n }\n return pred;\n };\n QueryBuilder.prototype.getLocale = function () {\n var gregorianFormat = '.dates.calendars.gregorian.days.format.short';\n var localeString = this.locale;\n var mainVal = 'main.';\n var cultureObj = getValue(mainVal + '' + this.locale + gregorianFormat, cldrData);\n if (!cultureObj) {\n localeString = 'en';\n }\n return localeString;\n };\n QueryBuilder.prototype.getColumn = function (field, col) {\n var columns = this.columns;\n var column;\n columns = col ? col : columns;\n for (var i = 0, iLen = columns.length; i < iLen; i++) {\n if (columns[i].field === field) {\n column = columns[i];\n break;\n }\n else if (columns[i].columns) {\n column = this.getColumn(field, columns[i].columns);\n if (column) {\n break;\n }\n }\n else if (field && field.indexOf(this.separator) > -1) {\n if (this.separator !== '' && columns[i].field === field.split(this.separator)[0]) {\n column = columns[i];\n break;\n }\n }\n }\n return column;\n };\n /* eslint-disable */\n /**\n * Return the operator bound to the column.\n *\n * @returns {[key: string]: Object}[] - Operator bound to the column\n */\n /* eslint-enable */\n QueryBuilder.prototype.getOperators = function (field) {\n var column = this.getColumn(field);\n return column.operators;\n };\n QueryBuilder.prototype.setTime = function (date, isStart) {\n if (isStart) {\n date.setHours(0, 0, 0);\n }\n else {\n date.setHours(23, 59, 59);\n }\n return date;\n };\n QueryBuilder.prototype.datePredicate = function (ruleColl, value, predicate, condition) {\n var pred;\n var startDate = this.setTime(new Date(value.getTime()), true);\n var endDate = this.setTime(value);\n switch (ruleColl.operator) {\n case 'equal':\n pred = new Predicate(ruleColl.field, 'greaterthanorequal', startDate);\n pred = pred.and(ruleColl.field, 'lessthanorequal', endDate);\n break;\n case 'notequal':\n pred = new Predicate(ruleColl.field, 'lessthan', startDate);\n pred = pred.or(ruleColl.field, 'greaterthan', endDate);\n break;\n case 'greaterthan':\n pred = new Predicate(ruleColl.field, 'greaterthan', endDate);\n break;\n case 'greaterthanorequal':\n pred = new Predicate(ruleColl.field, 'greaterthanorequal', startDate);\n break;\n case 'lessthan':\n pred = new Predicate(ruleColl.field, 'lessthan', startDate);\n break;\n case 'lessthanorequal':\n pred = new Predicate(ruleColl.field, 'lessthanorequal', endDate);\n break;\n }\n if (pred) {\n if (predicate) {\n if (condition === 'and') {\n predicate = predicate.and(pred);\n }\n else if (condition === 'or') {\n predicate = predicate.or(pred);\n }\n }\n else {\n predicate = pred;\n }\n }\n return predicate;\n };\n QueryBuilder.prototype.arrayPredicate = function (ruleColl, predicate, condition) {\n var value = ruleColl.value;\n var operator = ruleColl.operator.toString();\n var nullValue = ruleColl.value;\n var pred;\n var column = this.getColumn(ruleColl.field);\n var format = this.getFormat(column.format);\n if (operator.indexOf('null') > -1 || operator.indexOf('empty') > -1) {\n switch (operator) {\n case 'isnull':\n pred = new Predicate(ruleColl.field, 'isnull', nullValue);\n break;\n case 'isnotnull':\n pred = new Predicate(ruleColl.field, 'isnotnull', nullValue);\n break;\n case 'isempty':\n pred = new Predicate(ruleColl.field, 'equal', '');\n break;\n case 'isnotempty':\n pred = new Predicate(ruleColl.field, 'notequal', '');\n break;\n }\n }\n if (!(operator.indexOf('null') > -1 || operator.indexOf('empty') > -1)) {\n for (var j = 0, jLen = value.length; j < jLen; j++) {\n if (value[j] !== '' || ((operator === 'in' || operator === 'notin') && column.type === 'string')) {\n if (j === 0) {\n var gte = 'greaterthanorequal';\n switch (operator) {\n case 'between':\n if (column.type !== 'date') {\n pred = new Predicate(ruleColl.field, gte, value[j]);\n }\n else {\n pred = new Predicate(ruleColl.field, gte, value[j] ?\n (this.isTime(value[j]) ? this.getDate(value[j], format) :\n this.setTime(this.getDate(value[j], format), true)) : null);\n }\n break;\n case 'notbetween':\n if (column.type === 'date') {\n pred = new Predicate(ruleColl.field, 'lessthan', value[j] ?\n (this.isTime(value[j]) ? this.getDate(value[j], format) :\n this.setTime(this.getDate(value[j], format), true)) : null);\n }\n else {\n pred = new Predicate(ruleColl.field, 'lessthan', value[j]);\n }\n break;\n case 'in':\n pred = new Predicate(ruleColl.field, 'equal', value[j]);\n break;\n case 'notin':\n pred = new Predicate(ruleColl.field, 'notequal', value[j]);\n break;\n }\n }\n else {\n var gt = 'greaterthan';\n switch (ruleColl.operator) {\n case 'between':\n if (column.type === 'date') {\n pred = pred.and(ruleColl.field, 'lessthanorequal', value[j] ?\n (this.isTime(value[j]) ? this.getDate(value[j], format) :\n this.setTime(this.getDate(value[j], format))) : value[j]);\n }\n else {\n pred = pred.and(ruleColl.field, 'lessthanorequal', value[j]);\n }\n break;\n case 'notbetween':\n if (column.type === 'date') {\n pred = pred.or(ruleColl.field, gt, value[j] ?\n (this.isTime(value[j]) ? this.getDate(value[j], format) :\n this.setTime(this.getDate(value[j], format))) : value[j]);\n }\n else {\n pred = pred.or(ruleColl.field, 'greaterthan', value[j]);\n }\n break;\n case 'in':\n pred = pred.or(ruleColl.field, 'equal', value[j]);\n break;\n case 'notin':\n pred = pred.and(ruleColl.field, 'notequal', value[j]);\n break;\n }\n }\n }\n }\n }\n if (pred) {\n if (predicate) {\n if (condition === 'and') {\n predicate = predicate.and(pred);\n }\n else if (condition === 'or') {\n predicate = predicate.or(pred);\n }\n }\n else {\n predicate = pred;\n }\n }\n return predicate;\n };\n QueryBuilder.prototype.getDate = function (value, format) {\n var currDate = this.intl.parseDate(value, format);\n if (value.indexOf(':') > -1 && (value.indexOf('/') < 0 && value.indexOf(',') < 0\n && value.indexOf('-') < 0)) {\n currDate = new Date();\n currDate.setHours(parseInt(value.split(':')[0], 10));\n currDate.setMinutes(parseInt(value.split(':')[1], 10));\n if (value.split(':')[2]) {\n currDate.setSeconds(parseInt(value.split(':')[2], 10));\n }\n }\n return currDate;\n };\n QueryBuilder.prototype.isTime = function (value) {\n if (value && value.indexOf(':') > -1) {\n return true;\n }\n return false;\n };\n QueryBuilder.prototype.importRules = function (rule, parentElem, isReset, not, isRoot) {\n if (!isReset) {\n parentElem = this.renderGroup(rule, rule.condition, parentElem, not);\n }\n else {\n if (rule.rules && rule.rules.length > 1 && !this.headerTemplate) {\n // enable/disable conditions when rule group is added\n var orElem = parentElem.querySelector('.e-btngroup-or');\n var andElem = parentElem.querySelector('.e-btngroup-and');\n if (this.enableSeparateConnector && parentElem.previousElementSibling) {\n orElem = parentElem.previousElementSibling.querySelector('.e-btngroup-or');\n andElem = parentElem.previousElementSibling.querySelector('.e-btngroup-and');\n }\n orElem.disabled = false;\n andElem.disabled = false;\n if (this.enableSeparateConnector) {\n var elem = parentElem.previousElementSibling;\n while (elem && !elem.classList.contains('e-rule-container')) {\n if (elem.classList.contains('e-group-container')) {\n elem = elem.querySelectorAll('.e-rule-container')[elem.querySelectorAll('.e-rule-container').length - 1];\n break;\n }\n elem = elem.previousElementSibling;\n }\n if (elem && elem.classList.contains('e-rule-container')) {\n var ruleID = elem.id.replace(this.element.id + '_', '');\n var prevRule = this.getRule(ruleID);\n if (prevRule.condition === 'or') {\n orElem.checked = true;\n }\n else {\n andElem.checked = true;\n }\n }\n }\n else {\n if (rule.condition === 'or') {\n orElem.checked = true;\n }\n else {\n andElem.checked = true;\n }\n }\n }\n else {\n // enable/disable conditions when rule condition is added\n this.disableRuleCondition(parentElem);\n }\n if (this.headerTemplate && isRoot) {\n parentElem = this.renderGroup(rule, rule.condition, this.element, rule.not, isRoot);\n }\n if (this.enableNotCondition && !this.headerTemplate) {\n var tglBtnElem = parentElem.querySelector('.e-qb-toggle');\n if (rule.not) {\n addClass([tglBtnElem], 'e-active-toggle');\n }\n else {\n removeClass([tglBtnElem], 'e-active-toggle');\n }\n }\n }\n if (rule.rules && rule.rules.length === 0 && this.headerTemplate) {\n rule.rules[0] = { 'label': '', 'field': '', 'operator': '', 'type': '', 'value': '' };\n }\n var ruleColl = rule.rules;\n if (!isNullOrUndefined(ruleColl)) {\n for (var i = 0, len = ruleColl.length; i < len; i++) {\n var keys = Object.keys(ruleColl[i]);\n if (!isNullOrUndefined(ruleColl[i].rules) && keys.indexOf('rules') > -1 && (ruleColl[i].rules.length !== 0)) {\n if (this.element.querySelectorAll('.e-group-container').length > this.maxGroupCount) {\n return null;\n }\n parentElem = this.renderGroup(ruleColl[i], ruleColl[i].condition, parentElem, ruleColl[i].not);\n parentElem = this.importRules(ruleColl[i], parentElem, true);\n }\n else {\n this.renderRule(ruleColl[i], parentElem);\n }\n if (!isNullOrUndefined(ruleColl[i].rules) && ruleColl[i].isLocked) {\n var lockGrpTarget = parentElem.querySelector('.e-rule-list').children[i].querySelector('.e-lock-grp-btn');\n this.groupLock(lockGrpTarget);\n }\n }\n }\n if (parentElem) {\n parentElem = closest(parentElem, '.e-rule-list');\n }\n if (parentElem) {\n parentElem = closest(parentElem, '.e-group-container');\n }\n return parentElem;\n };\n QueryBuilder.prototype.renderGroup = function (rule, condition, parentElem, not, isRoot) {\n this.addGroupElement(true, parentElem, condition, false, not, isRoot, rule); //Child group\n var element = parentElem.querySelectorAll('.e-group-container');\n var cloneElem = parentElem.querySelector('.e-rule-list').children;\n if (this.showButtons.cloneGroup && this.cloneGrpBtnClick && this.isMiddleGroup) {\n this.isMiddleGroup = false;\n this.cloneGrpBtnClick = false;\n var index = 0;\n var tempGroupIndex = this.groupIndex + 1;\n if (this.enableSeparateConnector) {\n for (var i = 0; i < tempGroupIndex; i++) {\n if (cloneElem[i].classList.contains('e-rule-container')) {\n tempGroupIndex++;\n index++;\n }\n }\n }\n return cloneElem[this.groupIndex + index + 1]; // group added in the middle\n }\n else if (this.showButtons.cloneGroup && this.cloneGrpBtnClick && this.isLastGroup) {\n this.isLastGroup = false;\n this.cloneGrpBtnClick = false;\n return cloneElem[cloneElem.length - 1]; // group added in the end\n }\n else {\n return element[element.length - 1];\n }\n };\n QueryBuilder.prototype.renderRule = function (rule, parentElem) {\n if (parentElem.className.indexOf('e-group-container') > -1) {\n this.addRuleElement(parentElem, rule); //Create rule\n }\n else {\n this.addRuleElement(parentElem.querySelector('.e-group-container'), rule); //Create group\n }\n };\n QueryBuilder.prototype.enableReadonly = function () {\n var target = this.element;\n var elem = target.querySelectorAll('.e-dropdownlist, .e-dropdowntree, .e-numerictextbox, .e-textbox, .e-datepicker, .e-multiselect .e-lib, .e-radio');\n for (var i = 0; i < elem.length; i++) {\n if (elem[i].classList.contains('e-dropdownlist')) {\n var dropDownObj = getInstance(elem[i], DropDownList);\n dropDownObj.readonly = this.isReadonly;\n }\n else if (elem[i].classList.contains('e-dropdowntree')) {\n var dropDownTreeObj = getComponent(elem[i], 'dropdowntree');\n dropDownTreeObj.readonly = this.isReadonly;\n }\n else if (elem[i].classList.contains('e-numerictextbox')) {\n var numericTextBoxObj = getInstance(elem[i], NumericTextBox);\n numericTextBoxObj.readonly = this.isReadonly;\n }\n else if (elem[i].classList.contains('e-textbox')) {\n var textBoxObj = getInstance(elem[i], TextBox);\n textBoxObj.readonly = this.isReadonly;\n }\n else if (elem[i].classList.contains('e-datepicker')) {\n var datePickerObj = getInstance(elem[i], DatePicker);\n datePickerObj.readonly = this.isReadonly;\n }\n else if (elem[i].classList.contains('e-multiselect')) {\n var multiSelectObj = getInstance(elem[i], MultiSelect);\n multiSelectObj.readonly = this.isReadonly;\n }\n else if (elem[i].classList.contains('e-radio')) {\n var radioButtonObj = getInstance(elem[i], RadioButton);\n if (!radioButtonObj.checked) {\n if (this.isReadonly) {\n elem[i].parentElement.style.display = 'none';\n }\n else {\n elem[i].parentElement.style.display = 'inherit';\n }\n }\n }\n }\n var deleteGroupElems = this.element.querySelectorAll('.e-deletegroup');\n var addRuleGroupElems = this.element.querySelectorAll('.e-addrulegroup');\n var removeRuleElems = this.element.querySelectorAll('.e-removerule');\n if (!this.isReadonly && this.ruleElem.classList.contains('e-readonly')) {\n this.ruleElem.classList.remove('e-readonly');\n }\n var elems = [deleteGroupElems, addRuleGroupElems, removeRuleElems];\n for (var i = 0; i < elems.length; i++) {\n elems[i].forEach(function (elem) {\n if (elem.classList.contains('e-readonly')) {\n elem.classList.remove('e-readonly');\n }\n else {\n elem.classList.add('e-readonly');\n }\n });\n }\n this.enableBtnGroup();\n };\n QueryBuilder.prototype.enableBtnGroup = function () {\n var _this = this;\n var elems = this.element.querySelectorAll('.e-btngroup-and-lbl, .e-btngroup-or-lbl, .e-qb-toggle');\n var not = false;\n elems.forEach(function (elem) {\n if (elem.classList.contains('e-qb-toggle') && !elem.classList.contains('e-active-toggle')\n && !elem.classList.contains('e-readonly')) {\n elem.classList.add('e-readonly');\n not = false;\n }\n else if (elem.classList.contains('e-qb-toggle') && elem.classList.contains('e-not-readonly')) {\n elem.classList.remove('e-not-readonly');\n }\n else if (elem.classList.contains('e-qb-toggle') && elem.classList.contains('e-readonly')) {\n elem.classList.remove('e-readonly');\n }\n else if (elem.classList.contains('e-active-toggle')) {\n elem.classList.add('e-not-readonly');\n not = true;\n }\n else if (elem.previousElementSibling.checked || elem.classList.contains('e-readonly')) {\n elem.classList.remove('e-readonly');\n if (not) {\n if (elem.textContent === 'AND') {\n elem.classList.add('e-readonly-and');\n }\n else {\n elem.classList.add('e-readonly-or');\n }\n }\n else {\n if (elem.textContent === 'AND' && _this.isReadonly) {\n elem.classList.remove('e-not');\n elem.classList.add('e-readonly-and');\n }\n else {\n if (_this.enableNotCondition) {\n elem.classList.add('e-not');\n }\n elem.classList.remove('e-readonly-and');\n }\n if (elem.textContent === 'OR' && _this.isReadonly) {\n elem.classList.add('e-readonly-or-not');\n }\n else {\n elem.classList.remove('e-readonly-or-not');\n }\n }\n }\n else if (elem.classList.contains('e-btn-disable')) {\n // do nothing\n }\n else {\n elem.classList.add('e-readonly');\n }\n });\n };\n QueryBuilder.prototype.isDateFunction = function (value) {\n var dateFunc = ['date', 'time', 'day', 'week', 'month', 'year', 'hour', 'minute', 'second', 'now', 'quarter', 'period', 'extract'];\n for (var i = 0, len = dateFunc.length; i < len; i++) {\n if (value.toLowerCase().indexOf(dateFunc[i]) > -1) {\n return true;\n }\n }\n return false;\n };\n QueryBuilder.prototype.getSqlString = function (rules, enableEscape, queryStr, sqlLocale) {\n var isRoot = false;\n if (!queryStr && queryStr !== '') {\n queryStr = '';\n isRoot = true;\n }\n else {\n queryStr += '(';\n }\n var condition = rules.condition;\n if (rules.not) {\n var rulesNotCondition = void 0;\n if (isRoot) {\n rulesNotCondition = sqlLocale ? this.l10n.getConstant('NOT').toUpperCase() + ' (' : 'NOT (';\n queryStr += rulesNotCondition;\n }\n else {\n rulesNotCondition = sqlLocale ? ' ' + this.l10n.getConstant('NOT').toUpperCase() + ' (' : ' NOT (';\n queryStr += rulesNotCondition;\n }\n }\n if (rules.rules) {\n for (var j = 0, jLen = rules.rules.length; j < jLen; j++) {\n if (rules.rules[j].rules) {\n queryStr = this.getSqlString(rules.rules[j], enableEscape, queryStr, sqlLocale);\n if (this.enableSeparateConnector) {\n condition = rules.rules[j].condition;\n }\n }\n else {\n var rule = rules.rules[j];\n var valueStr = '';\n var ruleOpertor = sqlLocale ? this.sqlOperators[rule.operator] : this.operators[rule.operator];\n if (rule.value instanceof Array) {\n if (rule.operator.toString().indexOf('between') > -1) {\n var ruleCondition = sqlLocale ? ' ' + this.l10n.getConstant('AND').toUpperCase() + ' ' : ' ' + 'AND' + ' ';\n if (rule.type === 'date' && !this.isDateFunction(rule.value[0])) {\n valueStr += '\"' + rule.value[0] + '\"' + ruleCondition + '\"' + rule.value[1] + '\"';\n }\n else {\n valueStr += rule.value[0] + ruleCondition + rule.value[1];\n }\n }\n else {\n if (typeof rule.value[0] === 'string' && rule.value !== null) {\n valueStr += '(\"' + rule.value[0] + '\"';\n for (var k = 1, kLen = rule.value.length; k < kLen; k++) {\n valueStr += ',\"' + rule.value[k] + '\"';\n }\n valueStr += ')';\n }\n else {\n valueStr += '(' + rule.value + ')';\n }\n }\n }\n else {\n if (rule.operator.toString().indexOf('startswith') > -1) {\n valueStr += rule.value ? '(\"' + rule.value + '%\")' : '(' + rule.value + ')';\n }\n else if (rule.operator.toString().indexOf('endswith') > -1) {\n valueStr += rule.value ? '(\"%' + rule.value + '\")' : '(' + rule.value + ')';\n }\n else if (rule.operator.toString().indexOf('contains') > -1) {\n valueStr += rule.value ? '(\"%' + rule.value + '%\")' : '(' + rule.value + ')';\n }\n else {\n if (rule.type === 'number' || typeof rule.value === 'boolean' ||\n (rule.value === null && (rule.operator.toString().indexOf('empty') < -1))) {\n valueStr += rule.value;\n }\n else if (rule.operator.toString().indexOf('empty') > -1) {\n valueStr += '\"\"';\n }\n else {\n valueStr += '\"' + rule.value + '\"';\n }\n }\n }\n if (rule.operator.toString().indexOf('null') > -1) {\n if (enableEscape) {\n rule.field = '`' + rule.field + '`';\n }\n else {\n if (rule.field.indexOf(' ') > -1) {\n rule.field = '\"' + rule.field + '\"';\n }\n }\n queryStr += rule.field + ' ' + ruleOpertor;\n }\n else {\n var custOper = ruleOpertor;\n if (rule.operator === 'isempty') {\n custOper = '=';\n }\n else if (rule.operator === 'isnotempty') {\n custOper = '!=';\n }\n if (enableEscape) {\n rule.field = '`' + rule.field + '`';\n }\n else {\n if (rule.field.indexOf(' ') > -1) {\n rule.field = '\"' + rule.field + '\"';\n }\n }\n queryStr += rule.field + ' ' + custOper + ' ' + valueStr;\n }\n if (rule.condition && rule.condition !== '') {\n condition = rule.condition;\n }\n }\n if (j !== jLen - 1) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var rule = rules.rules[j];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (condition === '' || (rule && rule.condition !== '' && rule.custom && rule.custom.isCustom)) {\n condition = rule.condition;\n }\n if (condition) {\n condition = sqlLocale ? this.l10n.getConstant(condition.toUpperCase()).toUpperCase() : condition.toUpperCase();\n queryStr += ' ' + condition + ' ';\n }\n }\n }\n }\n if (!isRoot) {\n queryStr += ')';\n }\n if (rules.not) {\n queryStr += ')';\n }\n return queryStr;\n };\n /**\n * Sets the rules from the sql query.\n *\n * @param {string} sqlString - 'sql String' to be passed to set the rule.\n * @param {boolean} sqlLocale - Optional. Set `true` if Localization for Sql query.\n * @returns {void}\n */\n QueryBuilder.prototype.setRulesFromSql = function (sqlString, sqlLocale) {\n sqlString = sqlString.replace(/`/g, '');\n var ruleModel = this.getRulesFromSql(sqlString, sqlLocale);\n this.setRules({ condition: ruleModel.condition, not: ruleModel.not, rules: ruleModel.rules });\n };\n /**\n * Get the rules from SQL query.\n *\n * @param {string} sqlString - 'sql String' to be passed to get the rule.\n * @param {boolean} sqlLocale - Set `true` if Localization for Sql query.\n * @returns {object} - Rules from SQL query\n */\n QueryBuilder.prototype.getRulesFromSql = function (sqlString, sqlLocale) {\n this.parser = [];\n this.sqlParser(sqlString, sqlLocale);\n this.setProperties({ rule: { condition: 'and', not: false, rules: [] } }, true);\n var rule = this.processParser(this.parser, this.rule, [0], sqlLocale);\n if (this.enableNotCondition) {\n return { condition: rule.condition, not: rule.not, rules: rule.rules };\n }\n else {\n return { condition: rule.condition, rules: rule.rules };\n }\n };\n /**\n * Gets the sql query from rules.\n *\n * @param {RuleModel} rule - 'rule' to be passed to get the sql.\n * @param {boolean} allowEscape - Set `true` if it exclude the escape character.\n * @param {boolean} sqlLocale - Set `true` if Localization for Sql query.\n * @returns {string} - Sql query from rules.\n */\n QueryBuilder.prototype.getSqlFromRules = function (rule, allowEscape, sqlLocale) {\n if (!rule) {\n rule = this.getValidRules();\n }\n rule = this.getRuleCollection(rule, false);\n var sqlString = this.getSqlString(this.getValidRules(rule), allowEscape, null, sqlLocale).replace(/\"/g, '\\'');\n return sqlString;\n };\n /**\n * Gets the parameter SQL query from rules.\n *\n * @param {RuleModel} rule – Specify the rule to be passed to get the parameter sql string.\n * @returns {ParameterizedSql} – Parameterized SQL query from rules.\n */\n QueryBuilder.prototype.getParameterizedSql = function (rule) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.moduleLoader.loadedModules.length) {\n if (!rule) {\n rule = this.getValidRules();\n }\n var obj = { sql: null };\n this.notify('query-library', { prop: 'getParameterSql', onPropertyChange: false, value: { rule: rule, obj: obj } });\n return obj['sql'];\n }\n else {\n console.warn('[WARNING] :: Module \"query-library\" is not available in QueryBuilder component! You either misspelled the module name or forgot to load it.');\n }\n return null;\n };\n /**\n * Sets the rules from the parameter sql query.\n *\n * @param { ParameterizedSql} sqlQuery – Specifies the parameter SQL to be passed to set the rule and load it to the query builder.\n * @returns {void}\n */\n QueryBuilder.prototype.setParameterizedSql = function (sqlQuery) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.moduleLoader.loadedModules.length) {\n var obj = { sql: null };\n this.notify('query-library', { prop: 'convertParamSqlToSql', onPropertyChange: false, value: { sql: sqlQuery, obj: obj } });\n var sql = obj['sql'];\n if (sql) {\n sql = sql.replace(/`/g, '');\n var ruleModel = this.getRulesFromSql(sql);\n this.setRules({ condition: ruleModel.condition, not: ruleModel.not, rules: ruleModel.rules });\n }\n }\n else {\n console.warn('[WARNING] :: Module \"query-library\" is not available in QueryBuilder component! You either misspelled the module name or forgot to load it.');\n }\n };\n /**\n * Gets the named parameter SQL query from rules.\n *\n * @param {RuleModel} rule – Specify the rule to be passed to get the named parameter SQL string.\n * @returns {ParameterizedNamedSql} – Parameterized Named SQL query from rules.\n */\n QueryBuilder.prototype.getParameterizedNamedSql = function (rule) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.moduleLoader.loadedModules.length) {\n if (!rule) {\n rule = this.getValidRules();\n }\n var obj = { sql: null };\n this.notify('query-library', { prop: 'getNamedParameterSql', onPropertyChange: false, value: { rule: rule, obj: obj } });\n return obj['sql'];\n }\n else {\n console.warn('[WARNING] :: Module \"query-library\" is not available in QueryBuilder component! You either misspelled the module name or forgot to load it.');\n }\n return null;\n };\n /**\n * Sets the rules from the named parameter SQL query.\n *\n * @param { ParameterizedNamedSql } sqlQuery – Specifies the named parameter SQL to be passed to set the rule and load it to the query builder.\n * @returns {void}\n */\n QueryBuilder.prototype.setParameterizedNamedSql = function (sqlQuery) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.moduleLoader.loadedModules.length) {\n var obj = { sql: null };\n this.notify('query-library', { prop: 'convertNamedParamSqlToSql', onPropertyChange: false, value: { sql: sqlQuery, obj: obj } });\n var sql = obj['sql'];\n if (sql) {\n sql = sql.replace(/`/g, '');\n var ruleModel = this.getRulesFromSql(sql);\n this.setRules({ condition: ruleModel.condition, not: ruleModel.not, rules: ruleModel.rules });\n }\n }\n else {\n console.warn('[WARNING] :: Module \"query-library\" is not available in QueryBuilder component! You either misspelled the module name or forgot to load it.');\n }\n };\n /**\n * Set the rules from Mongo query.\n *\n * @param {string} mongoQuery - 'sql String' to be passed to get the rule.\n * @param {boolean} mongoLocale - Set `true` if Localization for Mongo query.\n * @returns {void}\n */\n QueryBuilder.prototype.setMongoQuery = function (mongoQuery, mongoLocale) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.moduleLoader.loadedModules.length) {\n this.rule = { condition: 'and', not: false, rules: [] };\n this.notify('query-library', { prop: 'mongoParser', onPropertyChange: false, value: { mongoQuery: JSON.parse(mongoQuery), rule: this.rule, mongoLocale: mongoLocale } });\n }\n else {\n console.warn('[WARNING] :: Module \"query-library\" is not available in QueryBuilder component! You either misspelled the module name or forgot to load it.');\n }\n };\n /**\n * Gets the Mongo query from rules.\n *\n * @param {RuleModel} rule - 'rule' to be passed to get the sql.\n * @returns {object} - Sql query from rules.\n */\n QueryBuilder.prototype.getMongoQuery = function (rule) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.moduleLoader.loadedModules.length) {\n if (!rule) {\n rule = this.getValidRules();\n }\n var obj = { mongoQuery: null };\n this.notify('query-library', { prop: 'getMongoFromRules', onPropertyChange: false, value: { rule: rule, mongoQuery: '', obj: obj } });\n return obj['mongoQuery'];\n }\n else {\n console.warn('[WARNING] :: Module \"query-library\" is not available in QueryBuilder component! You either misspelled the module name or forgot to load it.');\n }\n return '';\n };\n /**\n * Clones the rule based on the rule ID to the specific group.\n *\n * @param {string} ruleID - Specifies the ruleID that needs to be cloned.\n * @param {string} groupID - Specifies the groupID in which the rule to be cloned.\n * @param {number} index - Specifies the index to insert the cloned rule inside the group.\n * @returns {void}\n */\n QueryBuilder.prototype.cloneRule = function (ruleID, groupID, index) {\n var getRule = this.getRule(ruleID.replace(this.element.id + '_', ''));\n var isCloneRule = this.showButtons.cloneRule;\n groupID = groupID.replace(this.element.id + '_', '');\n this.ruleIndex = index;\n this.cloneRuleBtnClick = true;\n this.showButtons.cloneRule = true;\n this.addRules([{\n 'label': getRule.label, 'field': getRule.field, 'type': getRule.type, 'operator': getRule.operator,\n 'value': getRule.value, 'condition': getRule.condition\n }], groupID);\n this.ruleIndex = -1;\n this.cloneRuleBtnClick = false;\n this.showButtons.cloneRule = isCloneRule;\n isCloneRule = false;\n };\n /**\n * Clones the group based on the group ID to the specific group.\n *\n * @param {string} groupID - Specifies the groupID that needs to be cloned.\n * @param {string} parentGroupID - Specifies the parentGroupID in which the group to be cloned.\n * @param {number} index - Specifies the index to insert the cloned group inside the parent group.\n * @returns {void}\n */\n QueryBuilder.prototype.cloneGroup = function (groupID, parentGroupID, index) {\n parentGroupID = parentGroupID.replace(this.element.id + '_', '');\n var group = this.getGroup(parentGroupID);\n var isCloneGroup = this.showButtons.cloneGroup;\n groupID = groupID.replace(this.element.id + '_', '');\n this.groupIndex = index;\n this.cloneGrpBtnClick = true;\n this.showButtons.cloneGroup = true;\n this.addGroups([{ 'condition': group.condition, 'not': group.not, 'rules': group.rules }], groupID);\n this.groupIndex = -1;\n this.cloneGrpBtnClick = false;\n this.showButtons.cloneGroup = isCloneGroup;\n isCloneGroup = false;\n };\n /**\n * Locks the rule based on the rule ID.\n *\n * @param {string} ruleID - Specifies the ruleID that needs to be locked.\n * @returns {void}\n */\n QueryBuilder.prototype.lockRule = function (ruleID) {\n if (ruleID.indexOf(this.element.id) < 0) {\n ruleID = this.element.id + '_' + ruleID;\n }\n var target = document.getElementById(ruleID).querySelectorAll('.e-lock-rule-btn')[0];\n this.ruleLock(target);\n };\n /**\n * Locks the group based on the group ID\n *\n * @param {string} groupID - Specifies the groupID that needs to be locked.\n * @returns {void}\n */\n QueryBuilder.prototype.lockGroup = function (groupID) {\n if (groupID.indexOf(this.element.id) < 0) {\n groupID = this.element.id + '_' + groupID;\n }\n var target = document.getElementById(groupID).querySelectorAll('.e-lock-grp-btn')[0];\n this.groupLock(target);\n };\n QueryBuilder.prototype.sqlParser = function (sqlString, sqlLocale) {\n var st = 0;\n var str;\n do {\n str = sqlString.slice(st);\n st += this.parseSqlStrings(str, sqlLocale);\n } while (str !== '');\n return this.parser;\n };\n QueryBuilder.prototype.parseSqlStrings = function (sqlString, sqlLocale) {\n var operators = ['=', '!=', '<=', '>=', '<', '>'];\n var conditions;\n if (sqlLocale) {\n conditions = [this.l10n.getConstant('AND').toUpperCase(), this.l10n.getConstant('OR').toUpperCase(), this.l10n.getConstant('NOT').toUpperCase()];\n }\n else {\n conditions = ['AND', 'OR', 'NOT'];\n }\n var subOp;\n if (sqlLocale) {\n subOp = [this.l10n.getConstant('In').toUpperCase(), this.l10n.getConstant('NotIn').toUpperCase(),\n this.l10n.getConstant('Like').toUpperCase(), this.l10n.getConstant('NotLike').toUpperCase(),\n this.l10n.getConstant('Between').toUpperCase(), this.l10n.getConstant('NotBetween').toUpperCase(),\n this.l10n.getConstant('IsNull').toUpperCase(), this.l10n.getConstant('IsNotNull').toUpperCase(),\n this.l10n.getConstant('IsEmpty').toUpperCase(), this.l10n.getConstant('IsNotEmpty').toUpperCase()];\n }\n else {\n subOp = ['IN', 'NOT IN', 'LIKE', 'NOT LIKE', 'BETWEEN', 'NOT BETWEEN', 'IS NULL', 'IS NOT NULL', 'IS EMPTY', 'IS NOT EMPTY'];\n }\n var regexStr;\n var regex;\n var matchValue;\n for (var i = 0, iLen = operators.length; i < iLen; i++) {\n regexStr = /^\\w+$/.test(operators[i]) ? '\\\\b' : '';\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var regExp = RegExp;\n regex = new regExp('^(' + operators[i] + ')' + regexStr, 'ig');\n if (regex.exec(sqlString)) {\n this.parser.push(['Operators', operators[i].toLowerCase()]);\n return operators[i].length;\n }\n }\n var lastPasrser = this.parser[this.parser.length - 1];\n if (!lastPasrser || (lastPasrser && lastPasrser[0] !== 'Literal')) {\n for (var i = 0, iLen = conditions.length; i < iLen; i++) {\n regexStr = /^\\w+$/.test(conditions[i]) ? '\\\\b' : '';\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var regExp = RegExp;\n regex = new regExp('^(' + conditions[i] + ')' + regexStr, 'ig');\n if (regex.exec(sqlString)) {\n this.parser.push(['Conditions', conditions[i].toLowerCase()]);\n return conditions[i].length;\n }\n }\n }\n for (var i = 0, iLen = subOp.length; i < iLen; i++) {\n regexStr = /^\\w+$/.test(subOp[i]) ? '\\\\b' : '';\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var regExp = RegExp;\n regex = new regExp('^(' + subOp[i] + ')' + regexStr, 'ig');\n if (regex.exec(sqlString)) {\n this.parser.push(['SubOperators', subOp[i].toLowerCase()]);\n return subOp[i].length;\n }\n }\n //Left Parenthesis\n if (/^\\(/.exec(sqlString)) {\n this.parser.push(['Left', '(']);\n return 1;\n }\n //Right Parenthesis\n if (/^\\)/.exec(sqlString)) {\n this.parser.push(['Right', ')']);\n return 1;\n }\n //Boolean\n if (/^(true|false)/.exec(sqlString)) {\n matchValue = /^(true|false)/.exec(sqlString)[0];\n this.parser.push(['String', matchValue]);\n return matchValue.length;\n }\n //Null\n if (/^null/.exec(sqlString)) {\n matchValue = /^null/.exec(sqlString)[0];\n this.parser.push(['String', null]);\n return matchValue.length;\n }\n if (/^`?([a-z_][a-z0-9_.\\\\[\\]\\\\(\\\\)]{0,}(\\\\:(number|float|string|date|boolean))?)`?/i.exec(sqlString)) {\n matchValue = /^`?([a-z_][a-z0-9_.\\\\[\\]\\\\(\\\\)]{0,}(\\\\:(number|float|string|date|boolean))?)`?/i.exec(sqlString)[1];\n this.parser.push(['Literal', matchValue]);\n return matchValue.length;\n }\n if (this.checkLiteral() && /^'?([a-z_][a-z0-9 _.\\\\[\\]\\\\(\\\\)-]{0,}(\\\\:(number|float|string|date|boolean))?)'?/i.exec(sqlString)) {\n matchValue = /^'?([a-z_][a-z0-9 _.\\\\[\\]\\\\(\\\\)-]{0,}(\\\\:(number|float|string|date|boolean))?)'?/i.exec(sqlString)[1];\n this.parser.push(['Literal', matchValue]);\n return matchValue.length + 2;\n }\n if (this.checkNumberLiteral(sqlString, sqlLocale)) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var regExValue = /^[0-9]+(\\.[0-9]+)$/.exec(sqlString);\n if (regExValue) {\n matchValue = regExValue[0];\n this.parser.push(['Literal', matchValue]);\n return matchValue.length;\n }\n }\n //String\n var singleString = this.getSingleQuoteString(sqlString);\n if (singleString !== '') {\n matchValue = singleString;\n if (matchValue[matchValue.length - 2] === '(') {\n var isClosed = false;\n for (var j = matchValue.length; j < sqlString.length; j++) {\n matchValue += sqlString[j];\n if (sqlString[j] === ')') {\n isClosed = true;\n }\n if (isClosed && sqlString[j] === '\\'') {\n break;\n }\n }\n }\n else if (sqlString[matchValue.length] && (sqlString[matchValue.length] !== ')') &&\n !this.checkCondition(sqlString, matchValue)) {\n matchValue = this.combineSingleQuoteString(sqlString, matchValue);\n }\n // end\n this.parser.push(['String', matchValue]);\n return matchValue.length;\n }\n // Double String\n var doubleString = this.getDoubleQuoteString(sqlString);\n if (doubleString !== '') {\n matchValue = doubleString;\n this.parser.push(['DoubleString', matchValue]);\n return matchValue.length;\n }\n //Number\n if (/^\\d*\\.?\\d+/.exec(sqlString)) {\n matchValue = /^\\d*\\.?\\d+/.exec(sqlString)[0];\n this.parser.push(['Number', matchValue]);\n return matchValue.length;\n }\n //Negative Number\n if (/^-?\\d*\\.?\\d+/.exec(sqlString)) {\n matchValue = /^-?\\d*\\.?\\d+/.exec(sqlString)[0];\n this.parser.push(['Number', matchValue]);\n return matchValue.length;\n }\n return 1;\n };\n QueryBuilder.prototype.getDoubleQuoteString = function (sqlString) {\n var start = sqlString.indexOf('\"');\n if (start === 0) {\n var end = sqlString.indexOf('\"', start + 1);\n if (end !== -1) {\n return sqlString.substring(start, end + 1);\n }\n }\n return '';\n };\n QueryBuilder.prototype.checkCondition = function (sqlString, matchValue) {\n if (sqlString.slice(matchValue.length + 1, matchValue.length + 4) === 'AND' ||\n sqlString.slice(matchValue.length + 1, matchValue.length + 3) === 'OR') {\n return true;\n }\n return false;\n };\n QueryBuilder.prototype.getSingleQuoteString = function (sqlString, isBetween) {\n var start = sqlString.indexOf('\\'');\n if ((start !== -1 && isBetween) || (start === 0 && !isBetween)) {\n var end = sqlString.indexOf('\\'', start + 1);\n if (end !== -1) {\n return sqlString.substring(start, end + 1);\n }\n }\n return '';\n };\n QueryBuilder.prototype.combineSingleQuoteString = function (sqlString, matchValue) {\n if (sqlString[matchValue.length] && (sqlString[matchValue.length] !== ')') &&\n !this.checkCondition(sqlString, matchValue) && sqlString[matchValue.length] !== ',') {\n var tempMatchValue = matchValue.substring(0, matchValue.length - 1);\n var tempStr = sqlString.replace(tempMatchValue, '');\n var singleString = this.getSingleQuoteString(tempStr, true);\n if (singleString !== '') {\n var parsedValue = singleString.substring(1, singleString.length);\n matchValue += parsedValue;\n matchValue = this.combineSingleQuoteString(sqlString, matchValue);\n }\n }\n return matchValue;\n };\n QueryBuilder.prototype.checkLiteral = function () {\n var lastParser = this.parser[this.parser.length - 1];\n if (!lastParser) {\n return true;\n }\n else {\n var secParser = this.parser[this.parser.length - 2];\n var betweenParser = this.parser[this.parser.length - 3];\n if (lastParser[0] === 'Left' && (secParser && secParser[0] === 'Conditions')) {\n return true;\n }\n var betweenOperator = 'between';\n if (lastParser[0] === 'Conditions' && (betweenParser && betweenParser[1].indexOf(betweenOperator) < 0)) {\n return true;\n }\n }\n return false;\n };\n QueryBuilder.prototype.checkNumberLiteral = function (sqlString, sqlLocale) {\n var lastParser = this.parser[this.parser.length - 1];\n if (!lastParser) {\n return true;\n }\n else {\n if (/^[0-9]+(?:\\.[0-9]+)$/.exec(sqlString)) {\n var secParser = this.parser[this.parser.length - 2];\n var betweenParser = this.parser[this.parser.length - 3];\n if (lastParser[0] === 'Left' && (secParser && secParser[0] === 'Conditions')) {\n return true;\n }\n var betweenOperator = sqlLocale ? this.l10n.getConstant('Between').toLowerCase() : 'between';\n if (lastParser[0] === 'Conditions' && (betweenParser && betweenParser[1].indexOf(betweenOperator) < 0)) {\n return true;\n }\n }\n }\n return false;\n };\n QueryBuilder.prototype.getOperator = function (value, operator, sqlLocale) {\n var operators = {\n '=': 'equal', '!=': 'notequal', '<': 'lessthan', '>': 'greaterthan', '<=': 'lessthanorequal',\n '>=': 'greaterthanorequal', 'in': 'in', 'not in': 'notin', 'between': 'between', 'not between': 'notbetween',\n 'is empty': 'isempty', 'is null': 'isnull', 'is not null': 'isnotnull', 'is not empty': 'isnotempty'\n };\n if (sqlLocale) {\n var localeOperator = Object.keys(this.sqlOperators);\n for (var i = 0; i < localeOperator.length; i++) {\n if (this.sqlOperators[localeOperator[i]] === operator.toUpperCase()) {\n if (value && value.indexOf('%') === 0 && value[value.length - 1] === '%') {\n return (operator.toUpperCase() === 'NOT LIKE') ? 'notcontains' : 'contains';\n }\n else if (value && value.indexOf('%') !== 0 && value.indexOf('%') === value.length - 1) {\n return (operator.toUpperCase() === 'NOT LIKE') ? 'notstartswith' : 'startswith';\n }\n else if (value && value.indexOf('%') === 0 && value.indexOf('%') !== value.length - 1) {\n return (operator.toUpperCase() === 'NOT LIKE') ? 'notendswith' : 'endswith';\n }\n return localeOperator[i];\n }\n }\n return null;\n }\n if (value) {\n if (value.indexOf('%') === 0 && value[value.length - 1] === '%') {\n return (operator === 'not like') ? 'notcontains' : 'contains';\n }\n else if (value.indexOf('%') !== 0 && value.indexOf('%') === value.length - 1) {\n return (operator === 'not like') ? 'notstartswith' : 'startswith';\n }\n else if (value.indexOf('%') === 0 && value.indexOf('%') !== value.length - 1) {\n return (operator === 'not like') ? 'notendswith' : 'endswith';\n }\n }\n else {\n if (operator === 'not like') {\n return 'notequal';\n }\n else if (operator === 'like') {\n return 'equal';\n }\n }\n return operators[\"\" + operator];\n };\n QueryBuilder.prototype.getTypeFromColumn = function (rules) {\n var columnData = this.getColumn(rules.field);\n if (!isNullOrUndefined(columnData)) {\n return columnData.type;\n }\n return null;\n };\n QueryBuilder.prototype.getLabelFromColumn = function (field) {\n var label = '';\n var l = 0;\n if (this.separator !== '') {\n var fieldColl = field.split(this.separator);\n for (var i = 0; i < fieldColl.length; i++) {\n label += this.getLabelFromField(fieldColl, i + 1);\n l++;\n if (l < fieldColl.length) {\n label += this.separator;\n }\n }\n return label;\n }\n else {\n var labelItem = this.getColumn(field).label;\n return labelItem;\n }\n };\n QueryBuilder.prototype.getLabelFromField = function (field, startIdx) {\n var fieldName = '';\n var j = 0;\n for (var k = 0; k < startIdx; k++) {\n fieldName += field[k];\n j++;\n if (j < startIdx) {\n fieldName += this.separator;\n }\n }\n return this.getColumn(fieldName).label;\n };\n QueryBuilder.prototype.processParser = function (parser, rules, levelColl, sqlLocale) {\n var j;\n var jLen;\n var rule;\n var subRules;\n var numVal = [];\n var strVal = [];\n var k;\n var kLen;\n var l;\n var lLen;\n var grpCount;\n var operator;\n var isLeftOpened = false;\n var isNotOpened = false;\n for (var i = 0, iLen = parser.length; i < iLen; i++) {\n if (parser[i][0] === 'Literal') {\n var column = this.getColumn(parser[i][1]);\n rule = { label: (column && column.label) ? column.label : parser[i][1], field: parser[i][1] };\n if (parser[i + 1][0] === 'SubOperators') {\n if (parser[i + 1][1].indexOf('null') > -1 || parser[i + 1][1].indexOf('empty') > -1) {\n rule.operator = this.getOperator(' ', parser[i + 1][1], sqlLocale);\n rule.value = null;\n rule.type = this.getTypeFromColumn(rule);\n }\n else {\n var oper = parser[i + 3][1] ? parser[i + 3][1].replace(/'/g, '') : parser[i + 3][1];\n rule.operator = this.getOperator(oper, parser[i + 1][1], sqlLocale);\n }\n operator = parser[i + 1][1];\n i++;\n j = i + 1;\n jLen = iLen;\n if (sqlLocale && rule.operator === 'contains' || rule.operator === 'startswith' || rule.operator === 'endswith') {\n operator = 'like';\n }\n else if (sqlLocale && rule.operator === 'notcontains' || rule.operator === 'notstartswith' || rule.operator === 'notendswith') {\n operator = 'not like';\n }\n else if (sqlLocale) {\n operator = rule.operator;\n }\n for (j = i + 1; j < jLen; j++) {\n if (operator.indexOf('between') < 0 && parser[j][0] === 'Left') {\n isLeftOpened = true;\n }\n else if (parser[j][0] === 'Right' && isLeftOpened) {\n i = j;\n isLeftOpened = false;\n break;\n }\n else {\n if (operator.indexOf('null') > -1 || operator.indexOf('empty') > -1) {\n break;\n }\n if (operator.indexOf('like') > -1 && parser[j][0] === 'String') {\n var val = parser[j][1];\n if (parser[j][1] && parser[j][1][0] === '\\'') {\n val = parser[j][1].substring(1, parser[j][1].length - 1);\n }\n val = val ? val.replace(/%/g, '') : parser[j][1];\n rule.value = val;\n rule.type = 'string';\n }\n else if (operator.indexOf('between') > -1) {\n if (parser[j][0] === 'Literal' || parser[j][0] === 'Left') {\n break;\n }\n if (parser[j][0] === 'Number') {\n numVal.push(Number(parser[j][1]));\n }\n else if (parser[j][0] === 'String') {\n var val = parser[j][1];\n if (parser[j][1] && parser[j][1][0] === '\\'') {\n val = parser[j][1].substring(1, parser[j][1].length - 1);\n }\n strVal.push(val);\n }\n }\n else {\n if (parser[j][0] === 'Number') {\n numVal.push(Number(parser[j][1]));\n }\n else if (parser[j][0] === 'String') {\n var val = parser[j][1];\n if (parser[j][1] && parser[j][1][0] === '\\'') {\n val = parser[j][1].substring(1, parser[j][1].length - 1);\n }\n strVal.push(val);\n }\n }\n rule.type = this.getTypeFromColumn(rule);\n }\n }\n if (operator.indexOf('like') < 0) {\n if (parser[j - 1][0] === 'Number') {\n rule.value = numVal;\n rule.type = 'number';\n }\n else if (parser[j - 1][0] === 'String') {\n rule.value = strVal;\n rule.type = 'string';\n }\n else if (operator.indexOf('between') > -1 && parser[j - 1][0] === 'Conditions') {\n if (strVal.length !== 0) {\n rule.value = strVal;\n rule.type = 'string';\n }\n else {\n rule.value = numVal;\n rule.type = 'number';\n }\n }\n numVal = [];\n strVal = [];\n rule.type = this.getTypeFromColumn(rule);\n }\n if (this.enableSeparateConnector && parser[i + 1][0] === 'Conditions') {\n rule.condition = parser[i + 1][1];\n }\n }\n else if (parser[i + 1][0] === 'Operators') {\n rule.operator = this.getOperator(parser[i + 2][1], parser[i + 1][1], sqlLocale);\n if (rule.operator === 'equal' && parser[i + 2][0] === 'String' && parser[i + 2][1] === '\\'\\'') {\n rule.operator = 'isempty';\n }\n else if (rule.operator === 'notequal' && parser[i + 2][0] === 'String' && parser[i + 2][1] === '\\'\\'') {\n rule.operator = 'isnotempty';\n }\n if (parser[i + 2][0] === 'Number') {\n rule.type = 'number';\n rule.value = Number(parser[i + 2][1]);\n }\n else {\n rule.type = 'string';\n var val = parser[i + 2][1];\n if (val && val[0] === '\\'') {\n val = val.substring(1, val.length - 1);\n }\n rule.value = val;\n }\n if (this.enableSeparateConnector && parser[i + 3][0] === 'Conditions') {\n rule.condition = parser[i + 3][1];\n }\n rule.type = this.getTypeFromColumn(rule);\n }\n rules.rules.push(rule);\n }\n else if (parser[i][0] === 'Left') {\n if (!(parser[0][0] === 'Left') && (parser[i - 1][1] === 'not' || sqlLocale && this.l10n.getConstant('NOT').toLowerCase() === parser[i - 1][1])) {\n isNotOpened = true;\n continue;\n }\n this.parser = parser.splice(i + 1, iLen - (i + 1));\n if (this.enableNotCondition) {\n subRules = { condition: 'and', rules: [], not: false };\n }\n else {\n subRules = { condition: 'and', rules: [] };\n }\n grpCount = 0;\n kLen = rules.rules.length;\n for (k = 0; k < kLen; k++) { //To get the group position\n if (rules.rules[k].rules) {\n grpCount++;\n }\n }\n levelColl.push(grpCount);\n rules.rules.push(subRules);\n subRules = this.processParser(this.parser, subRules, levelColl, sqlLocale);\n return rules;\n }\n else if (parser[i][0] === 'Conditions' && !this.enableSeparateConnector) {\n if (parser[i][1] === 'not' || (sqlLocale && this.l10n.getConstant('NOT').toLowerCase() === parser[i][1])) {\n rules.not = true;\n }\n else {\n rules.condition = parser[i][1];\n }\n }\n else if (parser[i][0] === 'Right') {\n if (isNotOpened && parser[i + 1][0] === 'Right') {\n isNotOpened = false;\n continue;\n }\n this.parser = parser.splice(i + 1, iLen - (i + 1));\n levelColl.pop(); //To get the parent Group\n rules = this.rule;\n lLen = levelColl.length;\n for (l = 0; l < lLen; l++) {\n rules = this.findGroupByIdx(levelColl[l], rules, l === 0);\n }\n return this.processParser(this.parser, rules, levelColl, sqlLocale);\n }\n }\n return rules;\n };\n /**\n * Clone the Group\n *\n * @param {Element | string} target - 'target' to be passed to clone the group.\n * @returns {void}\n */\n QueryBuilder.prototype.groupClone = function (target) {\n var groupElem = target.closest('.e-rule-list').closest('.e-group-container');\n var targetGrpId = target.id.replace(this.element.id + '_', '');\n var groupId = groupElem.id.replace(this.element.id + '_', '');\n var group = this.getGroup(targetGrpId);\n this.groupIndex = Array.prototype.indexOf.call(target.closest('.e-rule-list').children, target.closest('.e-group-container'));\n this.addGroups([{ 'condition': group.condition, 'not': group.not, 'rules': group.rules }], groupId);\n this.groupIndex = -1;\n };\n QueryBuilder.prototype.ruleClone = function (target) {\n var ruleElem = closest(target, '.e-rule-container');\n var groupElem = target.closest('.e-rule-list').closest('.e-group-container');\n var getRule = this.getRule(target);\n var groupId = groupElem.id.replace(this.element.id + '_', '');\n var ruleElemColl = groupElem.querySelectorAll('.e-rule-container');\n for (var i = 0, iLen = ruleElemColl.length; i < iLen; i++) {\n if (ruleElem.id === ruleElemColl[i].id) {\n this.ruleIndex = i;\n }\n }\n if (this.enableSeparateConnector) {\n this.addRules([{ 'label': getRule.label, 'field': getRule.field, 'type': getRule.type, 'operator': getRule.operator,\n 'value': getRule.value, 'condition': getRule.condition }], groupId);\n }\n else {\n this.addRules([{ 'label': getRule.label, 'field': getRule.field, 'type': getRule.type, 'operator': getRule.operator,\n 'value': getRule.value }], groupId);\n }\n this.ruleIndex = -1;\n };\n QueryBuilder.prototype.ruleLock = function (target) {\n var ruleElem = closest(target, '.e-rule-container');\n var rule = this.getRule(ruleElem.id.replace(this.element.id + '_', ''));\n if (ruleElem.classList.contains('e-disable')) {\n rule.isLocked = false;\n this.lockItems = this.lockItems.filter(function (lockItem) { return lockItem !== ruleElem.id; });\n ruleElem.classList.remove('e-disable');\n this.disableRuleControls(target, ruleElem, false);\n target.children[0].classList.add('e-unlock');\n target.children[0].classList.remove('e-lock');\n target.setAttribute('title', this.l10n.getConstant('LockRule'));\n }\n else {\n rule.isLocked = true;\n if (this.lockItems.indexOf(ruleElem.id) < 0) {\n this.lockItems.splice(this.lockItems.length - 1, 0, ruleElem.id);\n }\n ruleElem.classList.add('e-disable');\n this.disableRuleControls(target, ruleElem, true);\n target.children[0].classList.add('e-lock');\n target.children[0].classList.remove('e-unlock');\n target.setAttribute('title', this.l10n.getConstant('UnlockRule'));\n }\n };\n QueryBuilder.prototype.groupLock = function (target) {\n var groupElem = closest(target, '.e-group-container');\n var group = this.getGroup(groupElem.id.replace(this.element.id + '_', ''));\n var isRoot = groupElem.id.indexOf('group0') > -1;\n if (groupElem.classList.contains('e-disable')) {\n if (isRoot) {\n var newGroup = {};\n newGroup.condition = group.condition;\n newGroup.not = group.not;\n newGroup.isLocked = false;\n this.setProperties({ rule: newGroup }, true);\n }\n else {\n group.isLocked = false;\n }\n this.lockItems = this.lockItems.filter(function (lockItem) { return lockItem !== groupElem.id; });\n groupElem.classList.remove('e-disable');\n this.disableHeaderControls(target, groupElem, false);\n target.children[0].classList.add('e-unlock');\n target.children[0].classList.remove('e-lock');\n target.setAttribute('title', this.l10n.getConstant('LockGroup'));\n this.updateLockItems();\n }\n else {\n if (isRoot) {\n var newGroup = {};\n newGroup.condition = group.condition;\n newGroup.not = group.not;\n newGroup.isLocked = true;\n this.setProperties({ rule: newGroup }, true);\n }\n else {\n group.isLocked = true;\n }\n if (this.lockItems.indexOf(groupElem.id) < 0) {\n this.lockItems.splice(this.lockItems.length - 1, 0, groupElem.id);\n }\n groupElem.classList.add('e-disable');\n this.disableHeaderControls(target, groupElem, true);\n target.children[0].classList.add('e-lock');\n target.children[0].classList.remove('e-unlock');\n target.setAttribute('title', this.l10n.getConstant('UnlockGroup'));\n }\n };\n QueryBuilder.prototype.updateLockItems = function () {\n for (var i = 0; i < this.lockItems.length; i++) {\n var idColl = this.lockItems[i].split('_');\n if (idColl.length > 2) {\n var ruleElem = this.element.querySelector('#' + this.lockItems[i]);\n var target = ruleElem.querySelector('.e-lock-rule-btn');\n ruleElem = closest(target, '.e-rule-container');\n if (!ruleElem.classList.contains('e-disable')) {\n this.ruleLock(target);\n }\n }\n else {\n var groupElem = this.element.querySelector('#' + this.lockItems[i]);\n var target = groupElem.querySelector('.e-lock-grp-btn');\n groupElem = closest(target, '.e-group-container');\n if (!groupElem.classList.contains('e-disable')) {\n this.groupLock(target);\n }\n }\n }\n };\n QueryBuilder.prototype.disableHeaderControls = function (target, groupElem, isDisabled) {\n var andElem = groupElem.querySelectorAll('.e-btngroup-and');\n var orElem = groupElem.querySelectorAll('.e-btngroup-or');\n var notElem = groupElem.querySelectorAll('.e-qb-toggle');\n var addElem = groupElem.querySelectorAll('.e-add-btn');\n var deleteGrpElem = groupElem.querySelectorAll('.e-deletegroup');\n var lockElem = groupElem.querySelectorAll('.e-lock-grp-btn');\n var cloneElem = groupElem.querySelectorAll('.e-clone-grp-btn');\n var groupContElem = groupElem.querySelectorAll('.e-group-container');\n var addCondition = groupElem.querySelectorAll('.e-add-condition-btn');\n var addGroup = groupElem.querySelectorAll('.e-add-group-btn');\n for (var i = 0; i < andElem.length; i++) {\n if (isDisabled) {\n if (groupContElem[i] && groupContElem[i].classList.contains('e-disable')) {\n groupContElem[i].classList.add('e-disable');\n }\n andElem[i].disabled = true;\n orElem[i].disabled = true;\n if (addElem[i]) {\n addElem[i].disabled = true;\n }\n if (addCondition[i]) {\n addCondition[i].disabled = true;\n }\n if (addGroup[i]) {\n addGroup[i].disabled = true;\n }\n if (notElem[i]) {\n notElem[i].disabled = true;\n }\n if (deleteGrpElem[i]) {\n deleteGrpElem[i].disabled = true;\n }\n if (cloneElem[i]) {\n cloneElem[i].disabled = true;\n }\n andElem[i].parentElement.classList.add('e-disabled');\n if (lockElem[i] && lockElem[i] !== target) {\n lockElem[i].disabled = true;\n lockElem[i].children[0].classList.remove('e-unlock');\n lockElem[i].children[0].classList.add('e-lock');\n }\n }\n else {\n if (groupContElem[i]) {\n groupContElem[i].classList.remove('e-disable');\n }\n andElem[i].disabled = false;\n orElem[i].disabled = false;\n if (addElem[i]) {\n addElem[i].disabled = false;\n }\n if (addCondition[i]) {\n addCondition[i].disabled = false;\n }\n if (addGroup[i]) {\n addGroup[i].disabled = false;\n }\n if (lockElem[i]) {\n lockElem[i].disabled = false;\n }\n if (notElem[i]) {\n notElem[i].disabled = false;\n }\n if (deleteGrpElem[i]) {\n deleteGrpElem[i].disabled = false;\n }\n if (cloneElem[i]) {\n cloneElem[i].disabled = false;\n }\n andElem[i].parentElement.classList.remove('e-disabled');\n if (lockElem[i]) {\n lockElem[i].children[0].classList.remove('e-lock');\n }\n if (lockElem[i]) {\n lockElem[i].children[0].classList.add('e-unlock');\n }\n }\n }\n this.disableRuleControls(target, groupElem, isDisabled);\n };\n QueryBuilder.prototype.disableRuleControls = function (target, groupElem, isDisabled) {\n var ddlElement = groupElem.querySelectorAll('.e-control.e-dropdownlist');\n var numericElement = groupElem.querySelectorAll('.e-control.e-numerictextbox');\n var textElement = groupElem.querySelectorAll('.e-control.e-textbox');\n var dateElement = groupElem.querySelectorAll('.e-control.e-datepicker');\n var checkboxElement = groupElem.querySelectorAll('.e-control.e-checkbox');\n var radioBtnElement = groupElem.querySelectorAll('.e-control.e-radio');\n var multiSelectElement = groupElem.querySelectorAll('.e-control.e-multiselect');\n var deleteElem = groupElem.querySelectorAll('.e-rule-delete');\n var lockElem = groupElem.querySelectorAll('.e-lock-rule');\n var cloneElem = groupElem.querySelectorAll('.e-clone-rule');\n var ruleElem = groupElem.querySelectorAll('.e-rule-container');\n for (var i = 0; i < deleteElem.length; i++) {\n if (isDisabled) {\n if (ruleElem[i] && ruleElem[i].classList.contains('e-disable')) {\n ruleElem[i].classList.add('e-disable');\n }\n deleteElem[i].disabled = true;\n if (cloneElem[i]) {\n cloneElem[i].disabled = true;\n }\n if (lockElem[i] !== target) {\n lockElem[i].disabled = true;\n lockElem[i].children[0].classList.remove('e-unlock');\n lockElem[i].children[0].classList.add('e-lock');\n }\n }\n else {\n if (ruleElem[i]) {\n ruleElem[i].classList.remove('e-disable');\n }\n if (cloneElem[i]) {\n cloneElem[i].disabled = false;\n }\n deleteElem[i].disabled = false;\n lockElem[i].disabled = false;\n lockElem[i].children[0].classList.remove('e-lock');\n lockElem[i].children[0].classList.add('e-unlock');\n }\n }\n var dropDownObj;\n var numericObj;\n var textObj;\n var dateObj;\n var checkBoxObj;\n var radioBtnObj;\n var multiSelectObj;\n for (var i = 0; i < ddlElement.length; i++) {\n dropDownObj = getComponent(ddlElement[i], 'dropdownlist');\n if (isDisabled) {\n dropDownObj.enabled = false;\n }\n else {\n dropDownObj.enabled = true;\n }\n }\n for (var i = 0; i < numericElement.length; i++) {\n numericObj = getComponent(numericElement[i], 'numerictextbox');\n if (isDisabled) {\n numericObj.enabled = false;\n }\n else {\n numericObj.enabled = true;\n }\n }\n for (var i = 0; i < textElement.length; i++) {\n textObj = getComponent(textElement[i], 'textbox');\n if (isDisabled) {\n textObj.enabled = false;\n }\n else {\n textObj.enabled = true;\n }\n }\n for (var i = 0; i < dateElement.length; i++) {\n dateObj = getComponent(dateElement[i], 'datepicker');\n if (isDisabled) {\n dateObj.enabled = false;\n }\n else {\n dateObj.enabled = true;\n }\n }\n for (var i = 0; i < checkboxElement.length; i++) {\n checkBoxObj = getComponent(checkboxElement[i], 'checkbox');\n if (isDisabled) {\n checkBoxObj.disabled = true;\n }\n else {\n checkBoxObj.disabled = false;\n }\n }\n for (var i = 0; i < radioBtnElement.length; i++) {\n radioBtnObj = getComponent(radioBtnElement[i], 'radio');\n if (isDisabled) {\n radioBtnObj.disabled = true;\n }\n else {\n radioBtnObj.disabled = false;\n }\n }\n for (var i = 0; i < multiSelectElement.length; i++) {\n multiSelectObj = getComponent(multiSelectElement[i], 'multiselect');\n if (isDisabled) {\n multiSelectObj.enabled = false;\n }\n else {\n multiSelectObj.enabled = true;\n }\n }\n };\n __decorate([\n Event()\n ], QueryBuilder.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], QueryBuilder.prototype, \"actionBegin\", void 0);\n __decorate([\n Event()\n ], QueryBuilder.prototype, \"beforeChange\", void 0);\n __decorate([\n Event()\n ], QueryBuilder.prototype, \"change\", void 0);\n __decorate([\n Event()\n ], QueryBuilder.prototype, \"dataBound\", void 0);\n __decorate([\n Event()\n ], QueryBuilder.prototype, \"ruleChange\", void 0);\n __decorate([\n Event()\n ], QueryBuilder.prototype, \"dragStart\", void 0);\n __decorate([\n Event()\n ], QueryBuilder.prototype, \"drag\", void 0);\n __decorate([\n Event()\n ], QueryBuilder.prototype, \"drop\", void 0);\n __decorate([\n Complex({}, ShowButtons)\n ], QueryBuilder.prototype, \"showButtons\", void 0);\n __decorate([\n Property(false)\n ], QueryBuilder.prototype, \"summaryView\", void 0);\n __decorate([\n Property(false)\n ], QueryBuilder.prototype, \"allowValidation\", void 0);\n __decorate([\n Property('Default')\n ], QueryBuilder.prototype, \"fieldMode\", void 0);\n __decorate([\n Property([])\n ], QueryBuilder.prototype, \"columns\", void 0);\n __decorate([\n Property(null)\n ], QueryBuilder.prototype, \"fieldModel\", void 0);\n __decorate([\n Property(null)\n ], QueryBuilder.prototype, \"operatorModel\", void 0);\n __decorate([\n Property(null)\n ], QueryBuilder.prototype, \"valueModel\", void 0);\n __decorate([\n Property()\n ], QueryBuilder.prototype, \"headerTemplate\", void 0);\n __decorate([\n Property('')\n ], QueryBuilder.prototype, \"cssClass\", void 0);\n __decorate([\n Property([])\n ], QueryBuilder.prototype, \"dataSource\", void 0);\n __decorate([\n Property('Horizontal')\n ], QueryBuilder.prototype, \"displayMode\", void 0);\n __decorate([\n Property(false)\n ], QueryBuilder.prototype, \"enablePersistence\", void 0);\n __decorate([\n Property('Default')\n ], QueryBuilder.prototype, \"sortDirection\", void 0);\n __decorate([\n Property(5)\n ], QueryBuilder.prototype, \"maxGroupCount\", void 0);\n __decorate([\n Property('auto')\n ], QueryBuilder.prototype, \"height\", void 0);\n __decorate([\n Property('auto')\n ], QueryBuilder.prototype, \"width\", void 0);\n __decorate([\n Property(false)\n ], QueryBuilder.prototype, \"matchCase\", void 0);\n __decorate([\n Property(0)\n ], QueryBuilder.prototype, \"immediateModeDelay\", void 0);\n __decorate([\n Property(false)\n ], QueryBuilder.prototype, \"enableNotCondition\", void 0);\n __decorate([\n Property(false)\n ], QueryBuilder.prototype, \"readonly\", void 0);\n __decorate([\n Property(true)\n ], QueryBuilder.prototype, \"addRuleToNewGroups\", void 0);\n __decorate([\n Property(false)\n ], QueryBuilder.prototype, \"autoSelectField\", void 0);\n __decorate([\n Property(true)\n ], QueryBuilder.prototype, \"autoSelectOperator\", void 0);\n __decorate([\n Property('')\n ], QueryBuilder.prototype, \"separator\", void 0);\n __decorate([\n Property(false)\n ], QueryBuilder.prototype, \"enableSeparateConnector\", void 0);\n __decorate([\n Complex({ condition: 'and', rules: [] }, Rule)\n ], QueryBuilder.prototype, \"rule\", void 0);\n __decorate([\n Property(false)\n ], QueryBuilder.prototype, \"allowDragAndDrop\", void 0);\n QueryBuilder = __decorate([\n NotifyPropertyChanges\n ], QueryBuilder);\n return QueryBuilder;\n}(Component));\nexport { QueryBuilder };\nvar LevelColl = /** @class */ (function () {\n function LevelColl() {\n }\n return LevelColl;\n}());\n","import { extend, isNullOrUndefined } from '@syncfusion/ej2-base';\nvar QueryLibrary = /** @class */ (function () {\n function QueryLibrary(parent) {\n this.parent = parent;\n this.addEventListener();\n }\n QueryLibrary.prototype.destroy = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.removeEventListener();\n };\n QueryLibrary.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on('query-library', this.queryLibrary, this);\n this.parent.on('destroyed', this.destroy, this);\n };\n QueryLibrary.prototype.removeEventListener = function () {\n this.parent.off('query-library', this.queryLibrary);\n this.parent.off('destroyed', this.destroy);\n };\n QueryLibrary.prototype.queryLibrary = function (args) {\n switch (args.prop) {\n case 'getMongoFromRules':\n args.value['obj']['mongoQuery'] = this.getMongoFromRules(args.value['rule'], args.value['mongoQuery']);\n break;\n case 'mongoParser':\n this.mongoParser(args.value['mongoQuery'], args.value['rule'], args.value['mongoLocale']);\n break;\n case 'getParameterSql':\n args.value['obj']['sql'] = this.getParameterSql(args.value['rule']);\n break;\n case 'getNamedParameterSql':\n args.value['obj']['sql'] = this.getNamedParameterSql(args.value['rule']);\n break;\n case 'convertParamSqlToSql':\n args.value['obj']['sql'] = this.convertParamSqlToSql(args.value['sql']);\n break;\n case 'convertNamedParamSqlToSql':\n args.value['obj']['sql'] = this.convertNamedParamSqlToSql(args.value['sql']);\n break;\n }\n };\n QueryLibrary.prototype.getMongoFromRules = function (rule, mongoQuery) {\n mongoQuery = '{';\n if (rule.condition === 'or') {\n mongoQuery += '\"$or\":[';\n mongoQuery = this.convertMongoQuery(rule.rules, mongoQuery) + ']';\n }\n else {\n mongoQuery += '\"$and\":[';\n mongoQuery = this.convertMongoQuery(rule.rules, mongoQuery) + ']';\n }\n mongoQuery += '}';\n return mongoQuery;\n };\n QueryLibrary.prototype.getOperatorFromMongoOperator = function (operator) {\n var operatorValue;\n switch (operator) {\n case '$ne':\n operatorValue = 'notequal';\n break;\n case '$gt':\n operatorValue = 'greaterthan';\n break;\n case '$gte':\n operatorValue = 'greaterthanorequal';\n break;\n case '$lt':\n operatorValue = 'lessthan';\n break;\n case '$lte':\n operatorValue = 'lessthanorequal';\n break;\n case '$nin':\n operatorValue = 'notin';\n break;\n }\n return operatorValue;\n };\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n QueryLibrary.prototype.convertMongoQuery = function (rules, mongoQuery) {\n var _this = this;\n var i = 0;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n rules.forEach(function (item) {\n i++;\n mongoQuery += '{';\n if (item.rules !== undefined) {\n if (item.condition === 'or') {\n mongoQuery += ' \"$or\":[';\n mongoQuery = _this.convertMongoQuery(item.rules, mongoQuery) + ']';\n }\n else {\n mongoQuery += ' \"$and\":[';\n mongoQuery = _this.convertMongoQuery(item.rules, mongoQuery) + ']';\n }\n }\n var itVal = item.type === 'string' && item.operator !== 'in' && item.operator !== 'notin' && item.value && item.value.trim() !== '' ? item.value.replace(/'/g, '\\\\') : '';\n if (item.type === 'string' && (item.operator === 'in' || item.operator === 'notin') && item.value && item.value.length === 1) {\n itVal = item.value[0].replace(/'/g, '\\\\');\n }\n var field = item.field ? item.field.substring(0) : '';\n switch (item.operator) {\n case 'contains':\n mongoQuery += '\"' + field + '\":{\"$regex\":\"' + itVal + '\"}';\n break;\n case 'notcontains':\n mongoQuery += '\"' + field + '\":{\"$not\":{\"$regex\":\"' + item.value + '\"}}';\n break;\n case 'startswith':\n mongoQuery += '\"' + field + '\":{\"$regex\":\"^' + itVal + '\"}';\n break;\n case 'notstartswith':\n mongoQuery += '\"' + field + '\":{\"$not\":{\"$regex\":\"^' + item.value + '\"}}';\n break;\n case 'endswith':\n mongoQuery += '\"' + field + '\":{\"$regex\":\"' + itVal + '$\"}';\n break;\n case 'notendswith':\n mongoQuery += '\"' + field + '\":{\"$not\":{\"$regex\":\"' + item.value + '$\"}}';\n break;\n case 'isnull':\n mongoQuery += '\"' + field + '\": null';\n break;\n case 'isnotnull':\n mongoQuery += '\"' + field + '\":{\"$ne\": null}';\n break;\n case 'isempty':\n mongoQuery += '\"' + field + '\": \"\"';\n break;\n case 'isnotempty':\n mongoQuery += '\"' + field + '\":{\"$ne\": \"\"}';\n break;\n case 'equal':\n if (item.type === 'string') {\n mongoQuery += '\"' + field + '\":\"' + itVal + '\"';\n }\n else if (item.type === 'date') {\n mongoQuery += '\"' + field + '\":\"' + item.value + '\"';\n }\n else if (item.type === 'boolean') {\n mongoQuery += '\"' + field + '\":' + item.value + '';\n }\n else {\n mongoQuery += '\"' + field + '\":' + item.value + '';\n }\n break;\n case 'notequal':\n if (item.type === 'string') {\n mongoQuery += '\"' + field + '\":{\"$ne\":\"' + itVal + '\"}';\n }\n else if (item.type === 'date') {\n mongoQuery += '\"' + field + '\":{\"$ne\":\"' + item.value + '\"}';\n }\n else {\n mongoQuery += '\"' + field + '\":{\"$ne\":' + item.value + '}';\n }\n break;\n case 'in':\n if (item.type === 'string') {\n if (item.value.length > 1) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var s = item.value.map(function (x, j) { return (j < item.value.length ? \"\\\"\" + x + \"\\\"\" : ''); }).toString();\n s = s.endsWith(',') ? s.substring(0, s.length - 1) : s;\n mongoQuery += '\"' + field + '\": { \"$in\": [' + s + ']}';\n }\n else {\n mongoQuery += '\"' + field + '\": { \"$in\": [\"' + itVal + '\"]}';\n }\n }\n else if (item.type === 'number') {\n if (item.value.length > 1) {\n mongoQuery += '\"' + field + '\": { \"$in\": [' + item.value.toString() + ']}';\n }\n else {\n mongoQuery += '\"' + field + '\": { \"$in\": [' + item.value + ']}';\n }\n }\n break;\n case 'notin':\n if (item.type === 'string') {\n if (item.value.length > 1) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var s = item.value.map(function (x, j) { return (j < item.value.length ? \"\\\"\" + x + \"\\\"\" : ''); }).toString();\n s = s.endsWith(',') ? s.substring(0, s.length - 1) : s;\n mongoQuery += '\"' + field + '\": { \"$nin\": [' + s + ']}';\n }\n else {\n mongoQuery += '\"' + field + '\": { \"$nin\": [\"' + itVal + '\"]}';\n }\n }\n else if (item.type === 'number') {\n if (item.value.length > 1) {\n mongoQuery += '\"' + field + '\": { \"$nin\": [' + item.value.toString() + ']}';\n }\n else {\n mongoQuery += '\"' + field + '\": { \"$nin\": [' + item.value + ']}';\n }\n }\n break;\n case 'greaterthan':\n if (item.type === 'number') {\n mongoQuery += '\"' + field + '\": { \"$gt\": ' + item.value + '}';\n }\n else {\n mongoQuery += '\"' + field + '\": { \"$gt\": \"' + item.value + '\"}';\n }\n break;\n case 'greaterthanorequal':\n if (item.type === 'number') {\n mongoQuery += '\"' + field + '\": { \"$gte\": ' + item.value + '}';\n }\n else {\n mongoQuery += '\"' + field + '\": { \"$gte\": \"' + item.value + '\"}';\n }\n break;\n case 'between':\n if (item.type === 'number') {\n mongoQuery += '\"' + field + '\": {\"$gte\":' + item.value[0] + ', \"$lte\":' + item.value[1] + '}';\n }\n else {\n mongoQuery += '\"' + field + '\": {\"$gte\": \"' + item.value[0] + '\", \"$lte\": \"' + item.value[1] + '\"}';\n }\n break;\n case 'notbetween':\n if (item.type === 'number') {\n mongoQuery += '\"$or\":[{\"' + field + '\": {\"$lt\":' + item.value[0] + '}}, {\"' + field + '\": {\"$gt\":' + item.value[1] + '}}]';\n }\n else {\n mongoQuery += '\"$or\":[{\"' + field + '\": {\"$lt\": \"' + item.value[0] + '\"}}, {\"' + field + '\": {\"$gt\": \"' + item.value[1] + '\"}}]';\n }\n break;\n case 'lessthan':\n if (item.type === 'number') {\n mongoQuery += '\"' + field + '\": { \"$lt\": ' + item.value + '}';\n }\n else {\n mongoQuery += '\"' + field + '\": { \"$lt\": \"' + item.value + '\"}';\n }\n break;\n case 'lessthanorequal':\n if (item.type === 'number') {\n mongoQuery += '\"' + field + '\": { \"$lte\": ' + item.value + '}';\n }\n else {\n mongoQuery += '\"' + field + '\": { \"$lte\": \"' + item.value + '\"}';\n }\n break;\n }\n mongoQuery += '}';\n if (rules.length !== i) {\n mongoQuery += ',';\n }\n });\n return mongoQuery;\n };\n QueryLibrary.prototype.mongoParser = function (mongoQuery, rule, mongoLocale) {\n var mongoList;\n if (Object.keys(mongoQuery).indexOf('$and') > -1) {\n mongoList = mongoQuery['$and'];\n rule.condition = 'and';\n }\n else if (Object.keys(mongoQuery).indexOf('$or') > -1) {\n mongoList = mongoQuery['$or'];\n rule.condition = 'or';\n }\n rule.rules = [];\n this.mongoRecursion(mongoList, rule.rules, mongoLocale);\n };\n QueryLibrary.prototype.mongoRecursion = function (mongoList, rules, mongoLocale) {\n var operatorValue;\n var type;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var stringValue;\n var key;\n var betweenValue;\n var fieldType;\n var condition;\n var value;\n var subRules;\n var rule;\n var keyObj;\n var ruleValue;\n for (var i = 0, len = mongoList.length; i < len; i++) {\n var betweenOperatorArray = [];\n var inOperatorArray = [];\n condition = Object.keys(mongoList[i])[0];\n value = mongoList[i][condition];\n if (condition === '$and') {\n if (this.parent.enableNotCondition) {\n subRules = { condition: condition.replace('$', ''), rules: [], not: false };\n }\n else {\n subRules = { condition: condition.replace('$', ''), rules: [] };\n }\n rules.push(subRules);\n this.mongoRecursion(mongoList[i][condition], rules[rules.length - 1].rules, mongoLocale);\n }\n else if (condition === '$or') {\n var notBetween = void 0;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var innerObject = [];\n var keys = [];\n var firstKey = [];\n var secondKey = [];\n var innerKeys = [];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var firstValue = [];\n var secondValue = [];\n var innerFirstValue = [];\n var innerSecondValue = [];\n if (Array.isArray(value) && value.length === 2) {\n keys = Object.keys(value);\n innerFirstValue = value[keys[0]];\n innerSecondValue = value[keys[1]];\n if (typeof innerFirstValue === 'object') {\n innerObject = Object.keys(innerFirstValue)[0];\n innerKeys = Object.keys(innerFirstValue[Object.keys(innerFirstValue)[0]]);\n firstKey = innerKeys[0];\n secondKey = Object.keys(innerSecondValue[Object.keys(innerSecondValue)[0]])[0];\n if (firstKey === '$lt' && secondKey === '$gt') {\n operatorValue = 'notbetween';\n // eslint-disable-next-line security/detect-object-injection\n firstValue = innerFirstValue[innerObject][firstKey];\n // eslint-disable-next-line security/detect-object-injection\n secondValue = innerSecondValue[innerObject][secondKey];\n type = typeof firstValue === 'number' ? 'number' : 'date';\n ruleValue = [firstValue, secondValue];\n rule = { field: innerObject, label: innerObject, value: ruleValue, operator: operatorValue, type: type };\n rules.push(rule);\n notBetween = true;\n }\n }\n }\n if (!notBetween) {\n if (this.parent.enableNotCondition) {\n subRules = { condition: condition.replace('$', ''), rules: [], not: false };\n }\n else {\n subRules = { condition: condition.replace('$', ''), rules: [] };\n }\n rules.push(subRules);\n this.mongoRecursion(mongoList[i][condition], rules[rules.length - 1].rules, mongoLocale);\n }\n }\n else {\n value = mongoList[i][condition];\n if (value === null) { // isnull operator\n operatorValue = 'isnull';\n }\n if (typeof value === 'boolean') { // boolean type values\n operatorValue = 'equal';\n type = 'boolean';\n ruleValue = value;\n }\n if (typeof (value) === 'number') {\n ruleValue = value;\n type = 'number';\n operatorValue = 'equal';\n }\n else if (typeof (value) === 'object' && value !== null) {\n keyObj = Object.keys(value);\n for (var i_1 = 0; i_1 < keyObj.length; i_1++) {\n key = keyObj[i_1];\n stringValue = (value)[keyObj[i_1]];\n if (key === '$ne' && isNullOrUndefined(stringValue)) { // not null operator\n operatorValue = 'isnotnull';\n ruleValue = null;\n }\n if (key === '$ne' && typeof stringValue === 'boolean') { // not equal operator for boolean\n operatorValue = 'notequal';\n ruleValue = stringValue;\n type = 'boolean';\n }\n if (keyObj.length >= 2 && keyObj[i_1]) {\n if (typeof (stringValue) == 'object') { // between and notbetween operators\n operatorValue = 'notbetween';\n condition = Object.keys(stringValue)[0];\n betweenValue = [Object.keys(stringValue[condition])[0]];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n betweenOperatorArray.push(stringValue[condition][betweenValue]);\n type = 'number';\n }\n else {\n operatorValue = 'between';\n betweenOperatorArray.push(stringValue);\n }\n if (typeof (stringValue) === 'number') {\n type = 'number';\n }\n }\n else if (typeof (stringValue) === 'object' && stringValue !== null) { // \"in\" and \"notin\" operator\n if (key === '$not' && Object.keys(stringValue)[0] === '$regex') {\n if (stringValue['$regex'].indexOf('^') > -1) {\n operatorValue = 'notstartswith';\n ruleValue = stringValue['$regex'].replace('^', '');\n }\n else if (stringValue['$regex'].indexOf('$') > -1) {\n operatorValue = 'notendswith';\n ruleValue = stringValue['$regex'].replace('$', '');\n }\n else {\n operatorValue = 'notcontains';\n ruleValue = stringValue['$regex'];\n }\n }\n else {\n operatorValue = key === '$in' ? 'in' : 'notin';\n inOperatorArray = stringValue;\n type = typeof (stringValue[0]) === 'number' ? 'number' : 'string';\n }\n }\n else if (typeof (stringValue) === 'number') { // number type values\n operatorValue = this.getOperatorFromMongoOperator(key);\n type = 'number';\n ruleValue = stringValue;\n }\n if (typeof (stringValue) === 'string') { // string type values\n if (key === '$regex') {\n operatorValue = 'contains';\n ruleValue = stringValue;\n type = 'string';\n }\n if (key === '$ne') { // not equal\n if (stringValue !== null && stringValue.length > 0 && isNaN(Date.parse(stringValue))) {\n operatorValue = 'notequal';\n ruleValue = stringValue;\n }\n else if (isNullOrUndefined(stringValue)) { // is not null operator\n operatorValue = 'isnotnull';\n ruleValue = stringValue;\n }\n else if (stringValue === '') { // is not empty operator\n operatorValue = 'isnotempty';\n ruleValue = stringValue;\n }\n type = 'string';\n }\n if (stringValue.indexOf('^') > -1) {\n operatorValue = 'startswith';\n ruleValue = stringValue.replace('^', '');\n type = 'string';\n }\n if (stringValue.indexOf('$') > -1 && key !== '$not') {\n operatorValue = 'endswith';\n ruleValue = stringValue.replace('$', '');\n type = 'string';\n }\n for (var _i = 0, _a = this.parent.columns; _i < _a.length; _i++) {\n var column = _a[_i];\n if (column.field === condition) {\n fieldType = column.type;\n break;\n }\n }\n if (!isNaN(Date.parse(stringValue)) || fieldType === 'date') { // Date type operators\n operatorValue = operatorValue || this.getOperatorFromMongoOperator(key);\n type = 'date';\n ruleValue = stringValue;\n }\n }\n }\n }\n else if (value && typeof (value) === 'string' && !isNaN(Date.parse(value))) {\n operatorValue = 'equal';\n ruleValue = value;\n type = 'date';\n }\n else if (typeof (value) === 'string' && value !== '' && value !== 'true' && value !== 'false') {\n operatorValue = 'equal';\n ruleValue = value;\n type = 'string';\n }\n else if (typeof (value) === 'string' && value === '') {\n operatorValue = 'isempty';\n ruleValue = value;\n type = 'string';\n }\n if (betweenOperatorArray && betweenOperatorArray.length > 1) { // between opertor value\n rule = { field: condition, label: condition, value: betweenOperatorArray, operator: operatorValue, type: type };\n }\n else if (inOperatorArray && inOperatorArray.length > 1) { // in operator value\n rule = { field: condition, label: condition, value: inOperatorArray, operator: operatorValue, type: type };\n }\n else {\n rule = { field: condition, label: condition, value: ruleValue, operator: operatorValue, type: type };\n }\n rules.push(rule);\n operatorValue = '';\n }\n }\n };\n QueryLibrary.prototype.convertParamSqlToSql = function (sql) {\n var paramSql = sql.sql;\n var paramValues = sql.params;\n var parts = paramSql.split('?');\n var normalSql = parts[0];\n for (var i = 0; i < paramValues.length; i++) {\n normalSql += (typeof (paramValues[i]) === 'string' ? \"'\" + paramValues[i] + \"'\" + parts[i + 1] : paramValues[i] + parts[i + 1]);\n }\n if (normalSql.length >= 2 && normalSql[0] === '(' && normalSql[normalSql.length - 1] === ')') {\n normalSql = normalSql.slice(1, -1);\n }\n normalSql = normalSql.replace(/!= ''(?! =)/g, 'IS NOT EMPTY').replace(/= ''/g, 'IS EMPTY');\n return normalSql;\n };\n QueryLibrary.prototype.convertNamedParamSqlToSql = function (sql) {\n var namedParamSql = sql.sql;\n var params = sql.params;\n var normalSql = namedParamSql;\n Object.keys(params).forEach(function (paramName) {\n var paramValue = params[paramName];\n paramName = ':' + paramName;\n normalSql = normalSql.replace(paramName, typeof (paramValue) === 'string' ? \"'\" + paramValue + \"'\" : String(paramValue));\n });\n if (normalSql.length >= 2 && normalSql[0] === '(' && normalSql[normalSql.length - 1] === ')') {\n normalSql = normalSql.slice(1, -1);\n }\n normalSql = normalSql.replace(/!= ''(?! =)/g, 'IS NOT EMPTY').replace(/= ''/g, 'IS EMPTY');\n return normalSql;\n };\n QueryLibrary.prototype.getParameterSql = function (qbrule) {\n var qbRule = extend({}, qbrule, null, true);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var value = this.updateRuleValue(qbRule, false);\n return this.getParameterSQLVal(this.parent.getSqlFromRules(qbRule), value['ruleVal']);\n };\n QueryLibrary.prototype.getNamedParameterSql = function (qbrule) {\n var qbRule = extend({}, qbrule, null, true);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var value = this.updateRuleValue(qbRule, true);\n return this.getNamedParameterSQLVal(this.parent.getSqlFromRules(qbRule), value['namedRuleVal']);\n };\n QueryLibrary.prototype.getParameterSQLVal = function (content, ruleValue) {\n var replacedString = content.replace(/[%']/g, '');\n return { sql: '(' + replacedString + ')', params: ruleValue };\n };\n QueryLibrary.prototype.getNamedParameterSQLVal = function (content, ruleValue) {\n var replacedString = content.replace(/[%']/g, '');\n return { sql: '(' + replacedString + ')', params: ruleValue };\n };\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n QueryLibrary.prototype.updateRuleValue = function (rule, isNamedParameter) {\n var ruleVal = [];\n var namedRuleVal = {};\n var namedParameters = [];\n return this.updateValue(rule.rules, isNamedParameter, ruleVal, namedRuleVal, namedParameters);\n };\n QueryLibrary.prototype.updateValue = function (rules, isNamedParameter, ruleVal, \n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n namedRuleVal, namedParameters) {\n if (isNullOrUndefined(rules)) {\n return { ruleVal: ruleVal, namedRuleVal: namedRuleVal };\n }\n for (var i = 0; i < rules.length; i++) {\n if (rules[i].rules) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var value = this.updateValue(rules[i].rules, isNamedParameter, ruleVal, namedRuleVal, namedParameters);\n ruleVal = value['ruleVal'];\n namedRuleVal = value['namedRuleVal'];\n }\n else {\n var namedField = void 0;\n if (rules[i].value instanceof Array) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n for (var j = 0; j < (rules[i].value).length; j++) {\n if (isNamedParameter) {\n namedField = this.getNamedParameter(rules[i].field, namedParameters);\n }\n if (!isNullOrUndefined(rules[i].value[j])) {\n if (rules[i].type === 'string' || rules[i].type === 'date') {\n if (isNamedParameter) {\n namedRuleVal[namedField] = rules[i].value[j];\n }\n else {\n ruleVal.push(rules[i].value[j]);\n }\n }\n else {\n if (isNamedParameter) {\n namedRuleVal[namedField] = rules[i].value[j];\n }\n else {\n ruleVal.push(rules[i].value[j]);\n }\n }\n }\n if (isNamedParameter) {\n rules[i].value[j] = ':' + namedField;\n }\n else {\n rules[i].value[j] = '?';\n }\n }\n }\n else {\n if (isNamedParameter) {\n namedField = this.getNamedParameter(rules[i].field, namedParameters);\n }\n if (rules[i].operator.indexOf('null') < 1) {\n if (rules[i].type !== 'string' || (rules[i].type === 'string' && (rules[i].value !== '' || rules[i].value === 0))) {\n if (rules[i].type === 'string' || rules[i].type === 'date') {\n if (rules[i].operator.indexOf('empty') < 1) {\n var value = rules[i].value.toString();\n switch (rules[i].operator) {\n case 'startswith':\n case 'notstartswith':\n value = value + '%';\n break;\n case 'endswith':\n case 'notendswith':\n value = '%' + value;\n break;\n case 'contains':\n case 'notcontains':\n value = '%' + value + '%';\n break;\n }\n if (isNamedParameter) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n namedRuleVal[namedField] = value;\n }\n else {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ruleVal.push(value);\n }\n }\n else {\n if (isNamedParameter) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n namedRuleVal[namedField] = '';\n }\n else {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ruleVal.push('');\n }\n if (rules[i].operator === 'isempty') {\n rules[i].operator = 'equal';\n }\n else {\n rules[i].operator = 'notequal';\n }\n }\n }\n else {\n if (!isNullOrUndefined(rules[i].value)) {\n if (isNamedParameter) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n namedRuleVal[namedField] = rules[i].value;\n }\n else {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ruleVal.push(rules[i].value);\n }\n }\n }\n if (isNamedParameter) {\n rules[i].value = ':' + namedField;\n }\n else {\n rules[i].value = '?';\n }\n }\n }\n }\n }\n }\n return { ruleVal: ruleVal, namedRuleVal: namedRuleVal };\n };\n QueryLibrary.prototype.getNamedParameter = function (field, namedParameters) {\n var newField = null;\n if (namedParameters.length > 0) {\n for (var i = namedParameters.length - 1; i >= 0; i--) {\n var currField = namedParameters[i];\n if (currField.indexOf(field) > -1) {\n var idx = parseInt(currField.split('_')[1], 10) + 1;\n newField = field + '_' + idx;\n namedParameters.push(newField);\n break;\n }\n }\n }\n if (!newField) {\n newField = field + '_1';\n namedParameters.push(newField);\n }\n return newField;\n };\n QueryLibrary.prototype.getModuleName = function () {\n return 'query-library';\n };\n return QueryLibrary;\n}());\nexport { QueryLibrary };\n","import * as index from './index';\nindex.QueryBuilder.Inject(index.QueryLibrary);\nexport * from './index';\n"],"names":["__extends","extendStatics","d","b","Object","setPrototypeOf","__proto__","Array","p","hasOwnProperty","__","this","constructor","prototype","create","__assign","assign","t","s","i","n","arguments","length","call","apply","__decorate","decorators","target","key","desc","c","r","getOwnPropertyDescriptor","Reflect","decorate","defineProperty","Columns","_super","Property","isRequired","min","max","Number","MAX_VALUE","ChildProperty","Rule","Collection","Value","ShowButtons","QueryBuilder","options","element","_this","isReadonly","fields","text","value","updatedRule","not","condition","isLocked","isLocale","isRefreshed","isNotified","isAddSuccess","isNotValueChange","isFieldChange","isFieldClose","isDestroy","isGetNestedData","isCustomOprCols","groupCounter","lockItems","groupIndex","ruleIndex","isLastGroup","cloneGrpBtnClick","isMiddleGroup","cloneRuleBtnClick","isValueEmpty","MultiSelect","Inject","CheckBoxSelection","getPersistData","addOnPersist","reset","isImportRules","bodyElem","querySelector","inputElement","querySelectorAll","len","className","indexOf","getComponent","destroy","parentElement","innerHTML","grpContainer","createElement","attrs","class","grpHeader","grpBody","appendChild","headerTemplate","isRoot","enableNotCondition","removeClass","levelColl","id","setProperties","rule","rules","disableRuleCondition","getWrapper","getModuleName","requiredModules","modules","push","member","args","GetRootColumnName","field","separator","split","initialize","dataColl","columnKeys","keys","cols","categories","type","groupBy","isDate","validateObj","columns","columnSort","updateCustomOperator","isNaN","Date","parse","getTime","validation","category","l10n","getConstant","operators","customOperators","updateSubFieldsFromColumns","label","updateSubFields","trigger","col","data","sampCol","result","compField","resData","column","from","isNullOrUndefined","this_1","j","sqlIdx","operator_1","operColl","values","map","join","valueIdx","focusEventHandler","event","clickEventHandler","groupID","tagName","animation","Animation","duration","delay","renderSummary","summaryElem","document","getElementById","txtareaElem","animate","name","groupElem","style","display","textContent","getSqlFromRules","height","scrollHeight","actionButton","deleteRule","ruleClone","ruleLock","groupLock","groupClone","closest","deleteGroup","addGroupElement","mRules","extend","setGroupRules","renderSummaryCollapse","forIdValue","getAttribute","targetValue","enableSeparateConnector","replace","group","getGroup","ariaChecked","toggleElem","getElementsByClassName","addClass","cancel","toLowerCase","beforeSuccessCallBack","observedChangeArgs","beforeRules","getValidRules","getParentGroup","classList","contains","previousElementSibling","getRule","ruleID","filterRules","andElem","orElem","checked","selectBtn","showButtons","groupInsert","maxGroupCount","enableRtl","children","addRuleElement","appendRuleElem","parentId","action","ruleElem","elem","ruleListElem","select","setAttribute","ruleIdCounter","cloneRule","index","tempRuleIndex","insertBefore","ruleTemplate","requestType","ruleTemplateFn","templateParser","templateID","getOperators","operatorFields","isReact","isAngular","templateColl","nodeType","isVue3","append","cloneNode","lockGroup","lockRule","cloneGroup","ruleDelete","allowDragAndDrop","renderReactTemplates","isRuleTemplate","isInitialLoad","prvtEvtTgrDaD","addRuleSuccessCallBack","trgt","act","pId","isRlTmp","dropDownList","getColumn","newRule","operator","selectedColumn","passedRule","args_1","displayMode","spanElement","add","previousRuleElem","prevRule","ruleContainer","headerTemplateFn","prevRuleContainer","prevElem","prevRule_1","updateAddedRule","fieldMode","ddlField","ddlValue","autoSelectField","dataSource","placeholder","popupHeight","close","fieldClose","bind","change","changeField","open","popupOpen","cssClass","fieldModel","DropDownList","appendTo","ddlVal","getDataByValue","changeRule","itemData","dummyDropdownTreeDs","updateDropdowntreeDS","child","expanded","selectable","showClearButton","changeOnBlur","treeSettings","expandOn","filtering","dropdownTreeFiltering","dropdownTreeClose","dropdowntree","DropDownTree","getLabelFromColumn","lockRuleTarget","args_2","notCondition","undefined","prevElem_1","ruleContainer_1","args_3","setMultiConnector","proxy","ruleElemID","srcElement","ddTree","hierarchicalData","changeDataSource","matchedDataSource","nestedChildFilter","filter","filteredChild","setTimeout","treeObj","expandAll","refresh","node","isMatchedNode","matchedChildren","checkValue","parseInt","toString","template","isNewRuleAdded","enableSeparateCondition","custom","splice","changeRuleTemplate","operVal","parentGroup","previousColumn","detach","clearQBTemplate","renderToolTip","tooltip","Tooltip","content","isSticky","position","afterClose","beforeOpen","tooltipCloseElement","validateFields","dropDownTreeObj","isValid","allowValidation","excludeOprs","fieldElem","indexElem","valArray","dropDownObj","tempElem","ruleElemCln","validateRule","separateCondition","valElem","jLen","refreshLevelColl","obj","groupElement","level","refreshLevel","childElem","ruleList","iLen","groupCount","slice","groupTemplate","isConnector","glueElem","inputElem","dragClsName","labelElem","grpActElem","groupBtn","groupHdrElem","grpBodyElem","rulesElem","spanDragElement","aria-lable","title","role","clsName","cloneClsName","lockClsName","filterElem","cloneRuleBtnElem","cloneLockBtnElem","delBtnElem","isGroup","isBtnClick","addGroupSuccess","eventTarget","dltGroupBtn","groupIdCounter","andInpElem","orInpElem","andLblElem","orLblElem","btnGroupId","groupDelete","Button","iconCss","rippleEffect","selector","childElems","grpLen","tempGroupIndex","idx","parentNode","addGroups","addRuleToNewGroups","cloneBtnElem","lockBtnElem","lockSpanElement","notElem","CheckBox","btnGroup","childNodes","newAndElem","newOrElem","nextSibling","nextElementSibling","args_4","conditionBtn_1","btnObj","onclick","groupBtn_1","DropDownButton","items","grpId","chgrpId","childGroupID","addHeaderDiv","disabled","isInitialRule","groupHdr","getRuleCollection","headerFn","enableSeparateConnectorInitialRule","nodeName","notifyChange","grpElement","ruleElement","format","getFormat","intl","formatDate","templateChange","updateRules","eventsArgs","grpElem","validateValue","prevOper","arrOper","grpEle","destroyControls","changeValue","isNumInput","currentTarget","dateElement","rbValue","numericTextBoxObj","getInstance","NumericTextBox","decimalSeparator","getValue","getNumericObject","locale","getNumberParser","immediateModeDelay","window","clearInterval","timer","setInterval","filterValue","grID","rlID","ele","changeValueSuccessCallBack","ddl","item","popupObj","getItemData","customArgs","isInteracted","previousItemData","prevItemData","previousItem","e","previousValue","ddtElem","ddt","oldValue","dataBind","destroySubFields","subFieldElem","ddlArgs","tempRule","ddlObj","changeFilter","flt","dl","rl","tmpRl","dArg","selectedField","fieldChangeSuccess","operatorElem","changeOperator","opr","selectedIndex","operatorChangeSuccess","changeRuleValues","tooltipElem","createSubFields","remove","subFieldValue","subFilterCounter","ruleId","subField","currOper","prevValue","parentElem","operatorList","oprElem","childElementCount","fieldObj","renderValues","operator_2","forEach","ddlIdx","autoSelectOperator","ddlOperator","operatorModel","isField","popup","divElement","templateDestroy","templateElement","elemId","temp","templateElements","elementId","elements","getValues","original","fieldColl","dataObj","fieldStr","createNestedObject","lastIndex","k","getDistinctValues","nest","isNested","this_2","renderMultiSelect","selectedValue","ds","isFetched","isValues","multiSelectValue","dataManager","query","Query","selectedRule","mode","width","closePopup","actionBegin","multiSelectOpen","valueModel","multiSelectModel","multiSelectObj","DataManager","bindMultiSelectData","getMultiSelectData","dummyData","deferred","Deferred","executeQuery","multiselectObj","hideSpinner","createSpinner","showSpinner","then","actual","catch","reject","spinnerElem","Browser","isDevice","ms","processTemplate","container","tempElements","write","parentFieldObj","subFieldObjList","lastSubFieldObj","setDefaultValue","isArryValue","isNumber","renderStringValue","ruleValElem","selectedVal","columnData","isTemplate","isPublic","txtBox","input","textBoxModel","inputobj","TextBox","minWidth","renderNumberValue","selVal","txtInp","numericTxt","step","numericTextBoxModel","numeric","oninput","processValueString","numArr","strArr","kLen","parseDate","formatOpt","dParser","getDateParser","skeleton","renderControls","isRendered","length_1","processBoolValues","datepick","datePicker","place","formatObj","getLocale","datePickerModel","DatePicker","orgValue","isCheck","radioBtn","radioButtonModel","radiobutton","RadioButton","getOperatorIndex","getPreviousItemData","isRender","filtElem","getElementsByTagName","filtObj","isTempRendered","setColumnTemplate","inputLen","renderTemplate","observedActionArgs","actionBeginSuccessCallBack","Element","columnTemplateFn","valElemColl","updateValues","selectedDate","radioBtnObj","textboxValue","controlName","isNotTrigger","valueContainer","elementCln","i_1","i_2","ruleValueUpdate","beforeRule","afterRule","JSON","stringify","previousRule","oper","arrOperator","dupSelectedValue","parseFloat","isObject","formatOptions","findGroupByIdx","groupIdx","ruleColl","dupRuleColl","unWireEvents","portals","popupElement","addRules","groups","importRules","initWrapper","trim","summaryView","notGroupRtl","readonly","enableReadonly","buttons","button","contentElem","textElem","styles","editElem","divElem","collapseElem","sortDirection","executeLocal","sortByDesc","sortBy","onChangeNotGroup","checkNotGroup","orgRule","onPropertyChanged","newProp","oldProp","properties","_i","properties_1","enablePersistence","setRules","Internationalization","preRender","getUniqueID","defaultLocale","StartsWith","DoesNotStartWith","EndsWith","DoesNotEndWith","Contains","DoesNotContain","NotLike","Like","Equal","NotEqual","LessThan","LessThanOrEqual","GreaterThan","GreaterThanOrEqual","Between","NotBetween","In","NotIn","Remove","SelectField","SelectOperator","DeleteRule","DeleteGroup","AddGroup","AddCondition","Edit","ValidationMessage","SummaryViewTitle","OtherFields","AND","OR","NOT","SelectValue","IsEmpty","IsNotEmpty","IsNull","IsNotNull","True","False","AddButton","CloneGroup","LockGroup","CloneRule","LockRule","UnlockRule","UnlockGroup","L10n","parser","stringOperator","dateOperator","booleanOperator","numberOperator","equal","notequal","greaterthan","greaterthanorequal","lessthan","in","notin","lessthanorequal","startswith","endswith","between","notbetween","isnull","isnotnull","isempty","isnotempty","notstartswith","notendswith","notcontains","sqlOperators","toUpperCase","render","stringOper","numberOper","concat","executeDataManager","take","initControl","renderComplete","initializeDrag","draggable","Draggable","dragTarget","distance","helper","dragStart","dragStartHandler","drag","dragHandler","dragStop","dragStopHandler","isReplaceDragEle","isPreventSelect","abort","isDragScroll","currentStateTarget","cloneElement","visualElement","offsetWidth","removeAttribute","draggedRule","isDragEventPrevent","body","dragElement","dragEventArgs","dragRuleID","dragGroupID","borderLineElem","targetElem","rect","getBoundingClientRect","distanceToTop","mouseY","clientY","changedTouches","top","distanceToBottom","bottom","threshold","targetGroup","isPreventelem","targetGrp","dropEventArgs","dropRuleID","dropGroupID","tgrt","groupId_1","groupRule","ruleElems","ruleIds","dropInd","deleteRules","groupId","groupId_2","templateCompiler","compile","error","wireEvents","wrapper","EventHandler","keyBoardHandler","isParent","groupLevel","deleteGroupSuccessCallBack","nextElem","removeString","remRule","ruleElemColl","isTemplateRendered","isPlatformTemplate","deleteRuleSuccessCallBack","clnruleElem","previousElem","nextElem_1","err","i_3","lockGrpTarget","keyCode","code","dragElemnet","preventDefault","clearTemplate","isNewGroup","count","andGroup","orGroup","currentRule","getRules","ruleCondtion","isValidRule","customObj","isQuestion","lockedRule","isArray","some","val","notValue","HTMLElement","deleteGroups","groupIdColl","getFilteredRecords","predicate","getPredicate","dataManagerQuery","where","ruleIdColl","getDataManagerQuery","pred","pred2","ruleValue","ignoreCase","and","or","isDateFilter","dateOperColl","matchCase","getDate","isTime","datePredicate","arrayPredicate","Predicate","localeString","cldrData","setTime","date","isStart","setHours","startDate","endDate","nullValue","gte","currDate","setMinutes","setSeconds","isReset","renderGroup","tglBtnElem","renderRule","cloneElem","deleteGroupElems","addRuleGroupElems","removeRuleElems","elems","enableBtnGroup","isDateFunction","dateFunc","getSqlString","enableEscape","queryStr","sqlLocale","valueStr","ruleOpertor","ruleCondition","custOper","isCustom","setRulesFromSql","sqlString","ruleModel","getRulesFromSql","sqlParser","processParser","allowEscape","getParameterizedSql","moduleLoader","loadedModules","sql","notify","prop","onPropertyChange","console","warn","setParameterizedSql","sqlQuery","getParameterizedNamedSql","setParameterizedNamedSql","setMongoQuery","mongoQuery","mongoLocale","getMongoQuery","isCloneRule","parentGroupID","isCloneGroup","str","st","parseSqlStrings","conditions","subOp","regexStr","matchValue","test","regExp","RegExp","exec","lastPasrser","checkLiteral","checkNumberLiteral","regExValue","singleString","getSingleQuoteString","isClosed","checkCondition","combineSingleQuoteString","doubleString","getDoubleQuoteString","start","end","substring","isBetween","tempMatchValue","tempStr","lastParser","secParser","betweenParser","betweenOperator","getOperator","=","!=","<",">","<=",">=","not in","not between","is empty","is null","is not null","is not empty","localeOperator","getTypeFromColumn","l","getLabelFromField","startIdx","fieldName","subRules","lLen","grpCount","numVal","strVal","isLeftOpened","isNotOpened","pop","targetGrpId","lockItem","disableRuleControls","newGroup","disableHeaderControls","updateLockItems","isDisabled","addElem","deleteGrpElem","lockElem","groupContElem","addCondition","addGroup","ddlElement","numericElement","textElement","checkboxElement","radioBtnElement","multiSelectElement","deleteElem","enabled","Event","Complex","NotifyPropertyChanges","Component","QueryLibrary","parent","addEventListener","isDestroyed","removeEventListener","on","queryLibrary","off","getMongoFromRules","mongoParser","getParameterSql","getNamedParameterSql","convertParamSqlToSql","convertNamedParamSqlToSql","convertMongoQuery","getOperatorFromMongoOperator","operatorValue","itVal","x","endsWith","mongoList","mongoRecursion","stringValue","betweenValue","fieldType","keyObj","betweenOperatorArray","inOperatorArray","notBetween","innerObject","firstKey","secondKey","firstValue","innerFirstValue","innerSecondValue","_a","paramSql","paramValues","params","parts","normalSql","namedParamSql","paramName","paramValue","String","qbrule","qbRule","updateRuleValue","getParameterSQLVal","getNamedParameterSQLVal","isNamedParameter","ruleVal","namedRuleVal","namedParameters","updateValue","namedField","getNamedParameter","newField","currField","index.QueryLibrary"],"mappings":"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"}
1
+ {"version":3,"file":"ej2-querybuilder.min.js","sources":["../../src/query-builder/query-builder.js","../../src/query-builder/query-library.js","../../src/global.js"],"sourcesContent":["var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n/**\n * Query Builder Source\n */\n/* eslint-disable max-len */\nimport { Component, NotifyPropertyChanges, getComponent, Browser, compile, append, Draggable, remove } from '@syncfusion/ej2-base';\nimport { Property, ChildProperty, Complex, L10n, closest, extend, isNullOrUndefined, Collection, cldrData } from '@syncfusion/ej2-base';\nimport { getInstance, addClass, removeClass, rippleEffect, detach, classList } from '@syncfusion/ej2-base';\nimport { Internationalization, getUniqueID, select } from '@syncfusion/ej2-base';\nimport { Button, CheckBox, RadioButton } from '@syncfusion/ej2-buttons';\nimport { DropDownList, CheckBoxSelection, DropDownTree } from '@syncfusion/ej2-dropdowns';\nimport { MultiSelect } from '@syncfusion/ej2-dropdowns';\nimport { Event, EventHandler, getValue, Animation } from '@syncfusion/ej2-base';\nimport { Query, Predicate, DataManager, Deferred } from '@syncfusion/ej2-data';\nimport { TextBox, NumericTextBox } from '@syncfusion/ej2-inputs';\nimport { DatePicker } from '@syncfusion/ej2-calendars';\nimport { DropDownButton } from '@syncfusion/ej2-splitbuttons';\nimport { Tooltip, createSpinner, showSpinner, hideSpinner } from '@syncfusion/ej2-popups';\nimport { compile as templateCompiler, getNumericObject } from '@syncfusion/ej2-base';\n/**\n * Defines the Columns of Query Builder\n */\nvar Columns = /** @class */ (function (_super) {\n __extends(Columns, _super);\n function Columns() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], Columns.prototype, \"field\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"label\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"type\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"values\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"operators\", void 0);\n __decorate([\n Property()\n ], Columns.prototype, \"ruleTemplate\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"template\", void 0);\n __decorate([\n Property({ isRequired: true, min: 0, max: Number.MAX_VALUE })\n ], Columns.prototype, \"validation\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"format\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"step\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"value\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"category\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"columns\", void 0);\n return Columns;\n}(ChildProperty));\nexport { Columns };\n/**\n * Defines the rule of Query Builder\n */\nvar Rule = /** @class */ (function (_super) {\n __extends(Rule, _super);\n function Rule() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], Rule.prototype, \"condition\", void 0);\n __decorate([\n Collection([], Rule)\n ], Rule.prototype, \"rules\", void 0);\n __decorate([\n Property(null)\n ], Rule.prototype, \"field\", void 0);\n __decorate([\n Property(null)\n ], Rule.prototype, \"label\", void 0);\n __decorate([\n Property(null)\n ], Rule.prototype, \"type\", void 0);\n __decorate([\n Property(null)\n ], Rule.prototype, \"operator\", void 0);\n __decorate([\n Property(null)\n ], Rule.prototype, \"value\", void 0);\n __decorate([\n Property(false)\n ], Rule.prototype, \"not\", void 0);\n __decorate([\n Property(null)\n ], Rule.prototype, \"isLocked\", void 0);\n return Rule;\n}(ChildProperty));\nexport { Rule };\n/**\n * Defines the property for value.\n */\nvar Value = /** @class */ (function (_super) {\n __extends(Value, _super);\n function Value() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], Value.prototype, \"numericTextBoxModel\", void 0);\n __decorate([\n Property(null)\n ], Value.prototype, \"multiSelectModel\", void 0);\n __decorate([\n Property(null)\n ], Value.prototype, \"datePickerModel\", void 0);\n __decorate([\n Property(null)\n ], Value.prototype, \"textBoxModel\", void 0);\n __decorate([\n Property(null)\n ], Value.prototype, \"radioButtonModel\", void 0);\n return Value;\n}(ChildProperty));\nexport { Value };\n/**\n * Defines the ruleDelete, groupInsert, and groupDelete options of Query Builder.\n */\nvar ShowButtons = /** @class */ (function (_super) {\n __extends(ShowButtons, _super);\n function ShowButtons() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], ShowButtons.prototype, \"cloneRule\", void 0);\n __decorate([\n Property(false)\n ], ShowButtons.prototype, \"cloneGroup\", void 0);\n __decorate([\n Property(false)\n ], ShowButtons.prototype, \"lockRule\", void 0);\n __decorate([\n Property(false)\n ], ShowButtons.prototype, \"lockGroup\", void 0);\n __decorate([\n Property(true)\n ], ShowButtons.prototype, \"ruleDelete\", void 0);\n __decorate([\n Property(true)\n ], ShowButtons.prototype, \"groupInsert\", void 0);\n __decorate([\n Property(true)\n ], ShowButtons.prototype, \"groupDelete\", void 0);\n return ShowButtons;\n}(ChildProperty));\nexport { ShowButtons };\nvar QueryBuilder = /** @class */ (function (_super) {\n __extends(QueryBuilder, _super);\n function QueryBuilder(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.isReadonly = true;\n _this.fields = { text: 'label', value: 'field' };\n _this.updatedRule = { not: false, condition: 'and', isLocked: false };\n _this.isLocale = false;\n _this.isRefreshed = false;\n _this.isNotified = false;\n _this.isAddSuccess = false;\n _this.isNotValueChange = false;\n _this.isFieldChange = false;\n _this.isFieldClose = false;\n _this.isDestroy = false;\n _this.isGetNestedData = false;\n _this.isCustomOprCols = [];\n _this.groupCounter = 0;\n _this.lockItems = [];\n _this.groupIndex = -1;\n _this.ruleIndex = -1;\n _this.isLastGroup = false;\n _this.cloneGrpBtnClick = false;\n _this.isMiddleGroup = false;\n _this.cloneRuleBtnClick = false;\n _this.isValueEmpty = false;\n MultiSelect.Inject(CheckBoxSelection);\n return _this;\n }\n QueryBuilder.prototype.getPersistData = function () {\n return this.addOnPersist(['rule']);\n };\n /**\n * Clears the rules without root rule.\n *\n * @returns {void}.\n */\n QueryBuilder.prototype.reset = function () {\n this.isImportRules = false;\n var bodyElem = this.element.querySelector('.e-group-body');\n var inputElement = this.element.querySelectorAll('input.e-control');\n for (var i = 0, len = inputElement.length; i < len; i++) {\n if (inputElement[i].className.indexOf('e-tooltip') > -1) {\n getComponent(inputElement[i], 'tooltip').destroy();\n }\n else if (inputElement[i].parentElement.className.indexOf('e-tooltip') > -1) {\n getComponent(inputElement[i].parentElement, 'tooltip').destroy();\n }\n }\n if (bodyElem) {\n bodyElem.innerHTML = '';\n }\n else {\n var grpContainer = this.createElement('div', { attrs: { class: 'e-group-container' } });\n var grpHeader = this.createElement('div', { attrs: { class: 'e-group-header' } });\n var grpBody = this.createElement('div', { attrs: { class: 'e-group-body' } });\n grpContainer.appendChild(grpHeader).appendChild(grpBody);\n this.element.appendChild(grpContainer);\n bodyElem = this.element.querySelector('.e-group-body');\n }\n if (this.headerTemplate && this.isRoot) {\n this.element.innerHTML = '';\n this.isRoot = false;\n }\n if (this.enableNotCondition) {\n removeClass(this.element.querySelectorAll('.e-qb-toggle'), 'e-active-toggle');\n }\n bodyElem.appendChild(this.createElement('div', { attrs: { class: 'e-rule-list' } }));\n this.levelColl[this.element.id + '_group0'] = [0];\n this.setProperties({ rule: { condition: 'and', not: false, rules: [] } }, true);\n this.disableRuleCondition(bodyElem.parentElement);\n };\n QueryBuilder.prototype.getWrapper = function () {\n return this.element;\n };\n QueryBuilder.prototype.getModuleName = function () {\n return 'query-builder';\n };\n QueryBuilder.prototype.requiredModules = function () {\n var modules = [];\n modules.push({\n member: 'query-library',\n args: [this]\n });\n return modules;\n };\n QueryBuilder.prototype.GetRootColumnName = function (field) {\n if (!isNullOrUndefined(field)) {\n return this.separator ? field.split(this.separator)[0] : field;\n }\n return '';\n };\n QueryBuilder.prototype.initialize = function () {\n if (this.dataColl.length) {\n var columnKeys = Object.keys(this.dataColl[0]);\n var cols = [];\n var categories = [];\n var type = void 0;\n var groupBy = false;\n var isDate = false;\n var value = void 0;\n var validateObj = { isRequired: true, min: 0, max: Number.MAX_VALUE };\n if (this.columns.length) {\n this.columnSort();\n var columns = this.columns;\n for (var i = 0, len = columns.length; i < len; i++) {\n this.updateCustomOperator(columns[i], 'initial');\n if (!columns[i].type) {\n if (columnKeys.indexOf(columns[i].field) > -1) {\n value = this.dataColl[0][columns[i].field];\n type = typeof value;\n if (type === 'string') {\n isDate = !isNaN(Date.parse(value));\n }\n else if (type === 'object') {\n isDate = value instanceof Date && !isNaN(value.getTime());\n type = 'string';\n }\n columns[i].type = type;\n isDate = false;\n }\n type = 'string';\n }\n if (!columns[i].validation) {\n columns[i].validation = validateObj;\n }\n if (columns[i].category) {\n groupBy = true;\n }\n else {\n columns[i].category = this.l10n.getConstant('OtherFields');\n }\n if (categories.indexOf(columns[i].category) < 0) {\n categories.push(columns[i].category);\n }\n if (!columns[i].operators ||\n (this.isLocale && this.isCustomOprCols.indexOf(columns[i].field) === -1)) {\n columns[i].operators = this.customOperators[columns[i].type + 'Operator'];\n }\n }\n if (groupBy && (categories.length > 1 || categories[0] !== this.l10n.getConstant('OtherFields'))) {\n this.fields = { text: 'label', value: 'field', groupBy: 'category' };\n }\n this.updateSubFieldsFromColumns(this.columns);\n }\n else {\n for (var i = 0, len = columnKeys.length; i < len; i++) {\n value = this.dataColl[0][columnKeys[i]];\n type = typeof value;\n if (type === 'string') {\n isDate = !isNaN(Date.parse(value));\n }\n else if (type === 'object' && !Object.keys(value).length) {\n isDate = value instanceof Date && !isNaN(value.getTime());\n type = 'string';\n }\n cols[i] = { 'field': columnKeys[i], 'label': columnKeys[i], 'type': isDate ? 'date' : type,\n 'validation': validateObj };\n isDate = false;\n cols[i].operators = this.customOperators[cols[i].type + 'Operator'];\n if (type === 'object') {\n this.updateSubFields(value, cols[i]);\n }\n }\n this.columns = cols;\n }\n }\n else if (this.columns && this.columns.length) {\n var columns = this.columns;\n for (var i = 0, len = columns.length; i < len; i++) {\n if (columns[i].category) {\n this.fields = { text: 'label', value: 'field', groupBy: 'category' };\n }\n else {\n columns[i].category = this.l10n.getConstant('OtherFields');\n }\n this.updateCustomOperator(columns[i], 'initial');\n if (!columns[i].operators ||\n (this.isLocale && this.isCustomOprCols.indexOf(columns[i].field) === -1)) {\n columns[i].operators = this.customOperators[columns[i].type + 'Operator'];\n }\n }\n this.updateSubFieldsFromColumns(this.columns);\n }\n this.trigger('dataBound', { type: 'dataBound' });\n };\n QueryBuilder.prototype.updateSubFieldsFromColumns = function (col, field) {\n for (var i = 0; i < col.length; i++) {\n if (this.separator !== '' && col[i].field.indexOf(this.separator) < 0) {\n col[i].field = field ? field + this.separator + col[i].field : col[i].field;\n }\n if (col[i].operators) {\n this.updateCustomOperator(col[i]);\n }\n else if (col[i].type && col[i].type !== 'object') {\n col[i].operators = this.customOperators[col[i].type + 'Operator'];\n }\n if (col[i].columns) {\n col[i].type = 'object';\n this.updateSubFieldsFromColumns(col[i].columns, col[i].field);\n }\n }\n };\n QueryBuilder.prototype.updateSubFields = function (value, col, data) {\n var sampCol;\n col.columns = [];\n var columnKeys = Object.keys(value);\n var field;\n var label;\n var type;\n var result;\n data = data ? data : this.dataColl[0];\n for (var i = 0, len = columnKeys.length; i < len; i++) {\n var compField = col.field.split('.');\n if (data) {\n result = data[compField[compField.length - 1]][columnKeys[i]];\n }\n else {\n result = this.dataColl[0][col.field][columnKeys[i]];\n }\n var resData = data[col.field.split(this.separator)[col.field.split(this.separator).length - 1]];\n type = typeof result;\n field = col.field + this.separator + columnKeys[i];\n label = columnKeys[i];\n type = (type === 'object' && !isNaN(Date.parse(result))) ? 'date' : type;\n sampCol = { field: field, label: label, type: type };\n if (type !== 'object') {\n sampCol.operators = this.customOperators[type + 'Operator'];\n }\n col.columns.push(sampCol);\n if (type === 'object') {\n this.updateSubFields(result, sampCol, resData);\n }\n }\n };\n QueryBuilder.prototype.updateCustomOperator = function (column, from) {\n if (column.operators) {\n if (!this.isLocale && from === 'initial' && !isNullOrUndefined(this.isCustomOprCols)) {\n this.isCustomOprCols.push(column.field);\n }\n var _loop_1 = function (j) {\n var sqlIdx = Object.keys(column.operators[j]).indexOf('sqlOperator');\n if (sqlIdx > -1) {\n var operator_1 = column.operators[j];\n var operColl = Object.keys(operator_1);\n var values = operColl.map(function (key) { return operator_1[\"\" + key]; }).join(',').split(',');\n var valueIdx = operColl.indexOf('value');\n this_1.operators[values[valueIdx]] = values[sqlIdx];\n }\n };\n var this_1 = this;\n for (var j = 0; j < column.operators.length; j++) {\n _loop_1(j);\n }\n }\n };\n QueryBuilder.prototype.focusEventHandler = function (event) {\n this.target = event.target;\n };\n QueryBuilder.prototype.clickEventHandler = function (event) {\n var _this = this;\n var target = event.target;\n var args;\n this.isImportRules = false;\n var groupID;\n if (target.tagName === 'SPAN') {\n target = target.parentElement;\n }\n if (typeof target.className === 'string' && target.className.indexOf('e-collapse-rule') > -1) {\n var animation = new Animation({ duration: 1000, delay: 0 });\n if (this.element.querySelectorAll('.e-summary-content').length < 1) {\n this.renderSummary();\n }\n var summaryElem = document.getElementById(this.element.id + '_summary_content');\n var txtareaElem = summaryElem.querySelector('.e-summary-text');\n animation.animate('.e-query-builder', { name: 'SlideLeftIn' });\n var groupElem = this.element.querySelector('.e-group-container');\n groupElem.style.display = 'none';\n txtareaElem.textContent = this.getSqlFromRules(this.rule);\n summaryElem.style.display = 'block';\n txtareaElem.style.height = txtareaElem.scrollHeight + 'px';\n }\n if (target.tagName === 'BUTTON' && typeof target.className === 'string' && target.className.indexOf('e-qb-toggle') < 0) {\n var animation = new Animation({ duration: 1000, delay: 0 });\n switch (true) {\n case target.className.indexOf('e-removerule') > -1:\n this.actionButton = target;\n this.deleteRule(target);\n break;\n case target.className.indexOf('e-clone-rule-btn') > -1:\n this.actionButton = target;\n this.cloneRuleBtnClick = true;\n this.ruleClone(target);\n break;\n case target.className.indexOf('e-lock-rule-btn') > -1:\n this.actionButton = target;\n this.ruleLock(target);\n break;\n case target.className.indexOf('e-lock-grp-btn') > -1:\n this.actionButton = target;\n this.groupLock(target);\n break;\n case target.className.indexOf('e-clone-grp-btn') > -1:\n this.actionButton = target;\n this.cloneGrpBtnClick = true;\n this.groupClone(closest(target, '.e-group-container'));\n break;\n case target.className.indexOf('e-deletegroup') > -1:\n this.actionButton = target;\n this.deleteGroup(closest(target, '.e-group-container'));\n break;\n case target.className.indexOf('e-edit-rule') > -1:\n animation.animate('.e-query-builder', { name: 'SlideLeftIn' });\n document.getElementById(this.element.id + '_summary_content').style.display = 'none';\n if (this.element.querySelectorAll('.e-group-container').length < 1) {\n this.addGroupElement(false, this.element, this.rule.condition, false, this.rule.not);\n var mRules = extend({}, this.rule, {}, true);\n this.setGroupRules(mRules);\n this.renderSummaryCollapse();\n }\n else {\n var groupElem = this.element.querySelector('.e-group-container');\n if (groupElem.querySelectorAll('.e-collapse-rule').length < 1) {\n this.renderSummaryCollapse();\n }\n groupElem.style.display = 'block';\n }\n break;\n }\n }\n else if ((target.tagName === 'LABEL' && target.parentElement.className.indexOf('e-btn-group') > -1) ||\n (typeof target.className === 'string' && target.className.indexOf('e-qb-toggle') > -1)) {\n var element = closest(target, '.e-group-container');\n if (!this.headerTemplate) {\n var forIdValue = target.getAttribute('for');\n var targetValue = void 0;\n if (forIdValue) {\n targetValue = document.getElementById(forIdValue).getAttribute('value');\n }\n else if (this.enableSeparateConnector) {\n targetValue = target.textContent;\n }\n groupID = element.id.replace(this.element.id + '_', '');\n var group = this.getGroup(groupID);\n var ariaChecked = void 0;\n if (this.enableNotCondition) {\n if (target.className.indexOf('e-qb-toggle') > -1) {\n var toggleElem = element.getElementsByClassName('e-qb-toggle')[0];\n if (toggleElem.className.indexOf('e-active-toggle') > -1) {\n removeClass([toggleElem], 'e-active-toggle');\n ariaChecked = false;\n }\n else {\n addClass([toggleElem], 'e-active-toggle');\n ariaChecked = true;\n }\n targetValue = group.condition;\n }\n else {\n ariaChecked = group.not;\n }\n }\n args = { groupID: groupID, cancel: false, type: 'condition', value: targetValue.toLowerCase() };\n if (this.enableNotCondition) {\n args = { groupID: groupID, cancel: false, type: 'condition', value: targetValue.toLowerCase(),\n 'not': ariaChecked };\n }\n }\n if (!this.isImportRules) {\n this.trigger('beforeChange', args, function (observedChangeArgs) {\n _this.beforeSuccessCallBack(observedChangeArgs, target);\n });\n }\n else {\n this.beforeSuccessCallBack(args, target);\n }\n this.target = target;\n }\n };\n QueryBuilder.prototype.beforeSuccessCallBack = function (args, target) {\n if (args && !args.cancel) {\n var element = closest(target, '.e-group-container');\n var groupID = element.id.replace(this.element.id + '_', '');\n var beforeRules = this.getValidRules(this.rule);\n var rule = this.getParentGroup(element);\n if (this.enableSeparateConnector) {\n if (isNullOrUndefined(closest(target, '.e-rule-container')) &&\n element.classList.contains('e-group-container')) {\n element = target.parentElement.previousElementSibling !== null ?\n target.parentElement.previousElementSibling : element;\n }\n else {\n element = closest(target, '.e-rule-container');\n }\n var id = element.id.replace(this.element.id + '_', '');\n if (element.classList.contains('e-rule-container')) {\n rule = this.getRule(element);\n rule.condition = args.value;\n }\n else if (element.classList.contains('e-group-container')) {\n rule = this.getGroup(element);\n rule.condition = args.value;\n }\n if (this.enableNotCondition) {\n rule.not = args.not;\n }\n if (!this.isImportRules) {\n this.trigger('change', { groupID: groupID, ruleID: id, type: 'condition', value: rule.condition });\n }\n }\n else {\n rule.condition = args.value;\n if (this.enableNotCondition) {\n rule.not = args.not;\n }\n if (!this.isImportRules) {\n this.trigger('change', { groupID: groupID, type: 'condition', value: rule.condition });\n }\n }\n this.filterRules(beforeRules, this.getValidRules(this.rule), 'condition');\n if (this.enableSeparateConnector) {\n var andElem = target.parentElement.querySelector('.e-btngroup-and');\n var orElem = target.parentElement.querySelector('.e-btngroup-or');\n if (andElem && orElem) {\n if (args.value === 'and') {\n andElem.checked = true;\n orElem.checked = false;\n }\n else if (args.value === 'or') {\n orElem.checked = true;\n andElem.checked = false;\n }\n }\n }\n }\n };\n QueryBuilder.prototype.selectBtn = function (target, event) {\n if (event.name === 'beforeOpen') {\n if (this.showButtons.groupInsert || isNullOrUndefined(this.showButtons.groupInsert)) {\n if (this.element.querySelectorAll('.e-group-container').length >= this.maxGroupCount + 1) {\n addClass([event.element.querySelector('li span.e-addgroup').parentElement], 'e-button-hide');\n }\n else {\n removeClass([event.element.querySelector('li span.e-addgroup').parentElement], 'e-button-hide');\n }\n if (this.enableRtl) {\n addClass([event.element.querySelector('li').parentElement], 'e-rtl');\n }\n }\n else {\n addClass([event.element.querySelector('li span.e-addgroup').parentElement], 'e-button-hide');\n }\n }\n else if (event.element.children[0].className.indexOf('e-addrule') > -1) {\n this.addRuleElement(closest(target, '.e-group-container'), {});\n }\n else if (event.element.children[0].className.indexOf('e-addgroup') > -1) {\n this.addGroupElement(true, closest(target, '.e-group-container'), '', true);\n }\n };\n QueryBuilder.prototype.appendRuleElem = function (target, column, type, parentId, action, rule) {\n var ruleElem;\n var elem;\n var ruleListElem = target.querySelector('.e-rule-list');\n var args;\n if (type === 'change') {\n ruleElem = select('#' + parentId, target);\n }\n else {\n ruleElem = this.createElement('div', { attrs: { class: 'e-rule-container' } });\n ruleElem.setAttribute('id', target.id + '_rule' + this.ruleIdCounter);\n if (this.showButtons.cloneRule && this.cloneRuleBtnClick) {\n if (this.ruleIndex < 0) {\n ruleListElem.appendChild(ruleElem);\n }\n else {\n if (this.enableSeparateConnector) {\n var index = -1;\n var tempRuleIndex = this.ruleIndex + 1;\n for (var i = 0; i < tempRuleIndex; i++) {\n if (i === ruleListElem.children.length) {\n break;\n }\n if (ruleListElem.children[i].classList.contains('e-rule-container')) {\n tempRuleIndex++;\n index++;\n }\n }\n ruleListElem.insertBefore(ruleElem, ruleListElem.children[this.ruleIndex + index + 1]); // added clone rule to next position\n }\n else {\n ruleListElem.insertBefore(ruleElem, ruleListElem.children[this.ruleIndex + 1]); // added clone rule to next position\n }\n }\n this.cloneRuleBtnClick = false;\n }\n else {\n ruleListElem.appendChild(ruleElem);\n }\n this.ruleIdCounter++;\n }\n if (column && column.ruleTemplate && rule) {\n args = { requestType: 'template-initialize', ruleID: ruleElem.id, action: action, fields: this.fields, rule: rule };\n this.trigger('actionBegin', args);\n this.ruleTemplateFn = this.templateParser(column.ruleTemplate);\n var templateID = this.element.id + column.field;\n var template = void 0;\n args.fields = this.fields;\n args.columns = this.columns;\n if (rule.field === '') {\n rule.field = column.field;\n }\n args.operators = this.getOperators(rule.field);\n args.operatorFields = { text: 'key', value: 'value' };\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.isReact) {\n template = this.ruleTemplateFn(args, this, ruleElem.id, templateID)[0];\n elem = template;\n elem.className += ' e-rule-field';\n ruleElem.appendChild(elem);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n }\n else if (this.isAngular) {\n var templateColl = this.ruleTemplateFn(args, this, ruleElem.id, templateID);\n template = (templateColl[0].nodeType === 3) ? templateColl[1] : templateColl[0];\n elem = template;\n elem.className += ' e-rule-field';\n ruleElem.appendChild(elem);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n }\n else if (this.isVue3) {\n template = this.ruleTemplateFn(args, this, 'Template', templateID);\n elem = template;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n append(elem, ruleElem);\n if (ruleElem.children.length) {\n ruleElem.children[ruleElem.children.length - 1].className += ' e-rule-field';\n }\n }\n else {\n template = this.ruleTemplateFn(args, this, 'Template', templateID)[0];\n elem = template;\n elem.className += ' e-rule-field';\n ruleElem.appendChild(elem);\n }\n }\n else {\n elem = this.ruleElem.querySelector('.e-rule-field').cloneNode(true);\n ruleElem.appendChild(elem);\n }\n if (this.showButtons.lockGroup) {\n removeClass(ruleElem.querySelectorAll('.e-lock-grp-btn'), 'e-button-hide');\n }\n if (this.showButtons.lockRule) {\n removeClass(ruleElem.querySelectorAll('.e-lock-rule-btn'), 'e-button-hide');\n }\n if (this.showButtons.cloneGroup) {\n removeClass(ruleElem.querySelectorAll('.e-clone-grp-btn'), 'e-button-hide');\n }\n if (this.showButtons.cloneRule) {\n removeClass(ruleElem.querySelectorAll('.e-clone-rule-btn'), 'e-button-hide');\n }\n if (this.showButtons.ruleDelete) {\n removeClass(ruleElem.querySelectorAll('.e-lock-grp-btn'), 'e-button-hide');\n }\n if (this.allowDragAndDrop) {\n removeClass(ruleElem.querySelectorAll('.e-drag-qb-rule'), 'e-hidden');\n }\n if (column && column.ruleTemplate && rule) {\n this.renderReactTemplates();\n }\n return ruleElem;\n };\n QueryBuilder.prototype.addRuleElement = function (target, rule, column, action, parentId, isRuleTemplate) {\n var _this = this;\n if (!target) {\n return;\n }\n var args = { groupID: target.id.replace(this.element.id + '_', ''), cancel: false, type: 'insertRule' };\n if (!this.isImportRules && !this.isInitialLoad && !this.prvtEvtTgrDaD) {\n this.trigger('beforeChange', args, function (observedChangeArgs) {\n _this.addRuleSuccessCallBack(observedChangeArgs, target, rule, column, action, parentId, isRuleTemplate);\n });\n }\n else {\n this.isInitialLoad = false;\n this.addRuleSuccessCallBack(args, target, rule, column, action, parentId, isRuleTemplate);\n }\n };\n QueryBuilder.prototype.addRuleSuccessCallBack = function (args, trgt, rule, col, act, pId, isRlTmp) {\n var height = (this.element.className.indexOf('e-device') > -1) ? '250px' : '200px';\n var ruleID;\n var column = (rule && rule.field) ? this.getColumn(rule.field) : col ? col : this.columns[0];\n var operators;\n var dropDownList;\n var ruleElem;\n var newRule = { 'label': '', 'field': '', 'type': '', 'operator': '' };\n if (!args.cancel) {\n if (column && column.ruleTemplate && rule.field) {\n this.selectedColumn = column;\n operators = this.selectedColumn.operators;\n newRule = { 'label': column.label, 'field': column.field, 'type': column.type, 'operator': operators[0].value };\n var passedRule = Object.keys(rule).length ? rule : newRule;\n ruleElem = this.appendRuleElem(trgt, column, act, pId, 'field', passedRule);\n var args_1 = { requestType: 'template-create', action: 'insert-rule', ruleID: ruleElem.id,\n fields: this.fields, rule: passedRule };\n this.trigger('actionBegin', args_1);\n }\n else {\n ruleElem = this.appendRuleElem(trgt, column, act, pId, 'field');\n ruleElem.querySelector('.e-filter-input').setAttribute('id', ruleElem.id + '_filterkey');\n var element = ruleElem.querySelector('.e-rule-delete');\n if (this.element.className.indexOf('e-device') > -1 || this.displayMode === 'Vertical') {\n element.textContent = this.l10n.getConstant('Remove');\n addClass([element], 'e-flat');\n addClass([element], 'e-primary');\n }\n else {\n addClass([element], 'e-round');\n addClass([element], 'e-icon-btn');\n element.setAttribute('title', this.l10n.getConstant('DeleteRule'));\n var spanElement = this.createElement('span', { attrs: { class: 'e-btn-icon e-icons e-delete-icon' } });\n ruleElem.querySelector('.e-rule-delete').appendChild(spanElement);\n }\n if (!this.showButtons.ruleDelete) {\n element.classList.add('e-button-hide');\n }\n }\n if (this.displayMode === 'Vertical' || this.element.className.indexOf('e-device') > -1) {\n ruleElem.className = 'e-rule-container e-vertical-mode';\n }\n else {\n ruleElem.className = 'e-rule-container e-horizontal-mode';\n }\n var previousRuleElem = ruleElem.previousElementSibling;\n if (this.enableSeparateConnector) {\n var prevRule = void 0;\n var ruleContainer = void 0;\n if (previousRuleElem && previousRuleElem.classList.contains('e-group-container')) {\n ruleContainer = previousRuleElem.querySelectorAll('.e-rule-container');\n previousRuleElem = ruleContainer[ruleContainer.length - 1];\n }\n if (previousRuleElem && previousRuleElem.classList.contains('e-rule-container')) {\n prevRule = this.getRule(previousRuleElem);\n }\n if (this.headerTemplate && previousRuleElem && prevRule) {\n this.headerTemplateFn(previousRuleElem, false, prevRule.condition, prevRule, previousRuleElem.id);\n }\n else if (isNullOrUndefined(previousRuleElem) && ruleElem.id !== this.element.id + '_group0_rule0') {\n var group = ruleElem.closest('.e-group-container');\n if (group && group.previousElementSibling) {\n var prevElem = group.previousElementSibling;\n var prevRuleContainer = prevElem.querySelectorAll('.e-rule-container');\n if (prevElem.classList.contains('e-group-container')) {\n prevElem = prevRuleContainer[prevRuleContainer.length - 1];\n }\n if (prevElem.classList.contains('e-rule-container')) {\n var prevRule_1 = this.getRule(prevElem);\n this.headerTemplateFn(prevElem, false, prevRule_1.condition, prevRule_1, prevElem.id, true);\n }\n }\n else {\n this.headerTemplateFn(ruleElem, false, rule.condition, rule, ruleElem.id, true);\n }\n }\n }\n else {\n if (previousRuleElem && previousRuleElem.className.indexOf('e-rule-container') > -1) {\n if (ruleElem.className.indexOf('e-joined-rule') < 0) {\n ruleElem.className += ' e-joined-rule';\n }\n if (previousRuleElem.className.indexOf('e-prev-joined-rule') < 0) {\n previousRuleElem.className += ' e-prev-joined-rule';\n }\n }\n }\n if (previousRuleElem && previousRuleElem.className.indexOf('e-group-container') > -1 &&\n ruleElem.className.indexOf('e-separate-rule') < 0) {\n ruleElem.className += ' e-separate-rule';\n }\n if (!this.isImportRules) {\n this.updateAddedRule(trgt, rule, newRule, isRlTmp, pId, this.enableSeparateConnector ? true : null);\n }\n if (!column || (column && !column.ruleTemplate) || !rule.field) {\n if (this.fieldMode === 'Default') {\n var ddlField = void 0;\n var ddlValue = void 0;\n if (this.separator && rule.field) {\n ddlValue = this.GetRootColumnName(rule.field);\n }\n else if (this.autoSelectField) {\n ddlValue = this.GetRootColumnName(rule.field);\n }\n else {\n ddlValue = this.isImportRules ? this.GetRootColumnName(rule.field) : rule.field;\n }\n ddlField = {\n dataSource: this.columns,\n fields: this.fields, placeholder: this.l10n.getConstant('SelectField'),\n popupHeight: ((this.columns.length > 5) ? height : 'auto'), close: this.fieldClose.bind(this, ruleElem.id + '_filterkey'),\n change: this.changeField.bind(this), value: rule ? ddlValue : null, open: this.popupOpen.bind(this, true), cssClass: 'qb-dropdownlist'\n };\n if (this.fieldModel) {\n ddlField = __assign({}, ddlField, this.fieldModel);\n }\n dropDownList = new DropDownList(ddlField);\n dropDownList.appendTo('#' + ruleElem.id + '_filterkey');\n var ddlVal = void 0;\n if (this.separator && rule.field) {\n ddlVal = this.GetRootColumnName(rule.field);\n }\n else {\n ddlVal = this.isImportRules ? this.GetRootColumnName(rule.field) :\n dropDownList.value;\n }\n this.selectedColumn = dropDownList.getDataByValue(ddlVal);\n if (Object.keys(rule).length) {\n this.changeRule(rule, {\n element: dropDownList.element, itemData: this.selectedColumn\n });\n }\n }\n else {\n var ddlField = void 0;\n var ddlValue = this.isImportRules ? rule.field : rule.field;\n this.dummyDropdownTreeDs = extend([], this.columns, [], true);\n this.updateDropdowntreeDS(this.dummyDropdownTreeDs);\n ddlField = {\n fields: { dataSource: this.dummyDropdownTreeDs,\n value: 'field', text: 'label', child: 'columns', expanded: 'expanded', selectable: 'selectable' },\n placeholder: this.l10n.getConstant('SelectField'), showClearButton: false,\n popupHeight: ((this.columns.length > 5) ? height : 'auto'), changeOnBlur: false,\n change: this.changeField.bind(this), value: !isNullOrUndefined(ddlValue) ? [ddlValue] : null,\n open: this.popupOpen.bind(this, false), treeSettings: { expandOn: 'Click' },\n cssClass: 'e-qb-ddt', filtering: this.dropdownTreeFiltering.bind(this), close: this.dropdownTreeClose.bind(this)\n };\n if (this.fieldModel) {\n ddlField = __assign({}, ddlField, this.fieldModel);\n }\n var dropdowntree = new DropDownTree(ddlField);\n dropdowntree.appendTo('#' + ruleElem.id + '_filterkey');\n if (!isNullOrUndefined(dropdowntree.value)) {\n var value = this.getLabelFromColumn(dropdowntree.value[0]);\n dropdowntree.element.value = value;\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var ddlVal = !isNullOrUndefined(rule.field) ?\n this.GetRootColumnName(rule.field) : dropdowntree.value;\n this.selectedColumn = this.getColumn(ddlVal);\n if (Object.keys(rule).length) {\n this.changeRule(rule, {\n element: dropdowntree.element, itemData: this.selectedColumn\n });\n }\n }\n }\n ruleID = ruleElem.id.replace(this.element.id + '_', '');\n if (rule && rule.isLocked) {\n var lockRuleTarget = ruleElem.querySelector('.e-lock-rule-btn');\n this.ruleLock(lockRuleTarget);\n }\n if (!this.isImportRules && !this.prvtEvtTgrDaD) {\n this.trigger('change', { groupID: trgt.id.replace(this.element.id + '_', ''), ruleID: ruleID, type: 'insertRule' });\n }\n }\n if (this.enableSeparateConnector && isNullOrUndefined(rule.condition) && ruleID) {\n rule = this.getRule(ruleID);\n }\n if (this.enableSeparateConnector) {\n var prevElem = ruleElem.previousElementSibling;\n var ruleContainer = void 0;\n while (prevElem && !prevElem.classList.contains('e-rule-container')) {\n if (prevElem.classList.contains('e-group-container')) {\n ruleContainer = prevElem.querySelectorAll('.e-rule-container');\n prevElem = ruleContainer[ruleContainer.length - 1];\n break;\n }\n prevElem = prevElem.previousElementSibling;\n }\n if (this.headerTemplate && prevElem) {\n var prevRule = this.getRule(prevElem);\n var args_2 = { requestType: 'rule-template-create', ruleID: prevElem.id, condition: prevRule.condition,\n notCondition: this.enableNotCondition ? true : undefined };\n this.trigger('actionBegin', args_2);\n }\n else if (isNullOrUndefined(prevElem) && ruleElem.id !== this.element.id + '_group0_rule0') {\n var group = ruleElem.closest('.e-group-container');\n if (group && group.previousElementSibling && group.previousElementSibling.previousElementSibling) {\n var prevElem_1 = group.previousElementSibling.previousElementSibling;\n if (prevElem_1.classList.contains('e-group-container')) {\n var ruleContainer_1 = prevElem_1.querySelectorAll('.e-rule-container');\n prevElem_1 = ruleContainer_1[ruleContainer_1.length - 1];\n }\n if (prevElem_1.classList.contains('e-rule-container')) {\n var prevRule = this.getRule(prevElem_1);\n var args_3 = { requestType: 'rule-template-create', ruleID: prevElem_1.id,\n condition: prevRule.condition, notCondition: this.enableNotCondition ? true : undefined };\n this.trigger('actionBegin', args_3);\n }\n }\n }\n this.setMultiConnector(ruleElem);\n }\n };\n QueryBuilder.prototype.dropdownTreeFiltering = function (args) {\n var _this = this;\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var proxy = this;\n var ruleElemID = '';\n var srcElement = args.event.srcElement;\n var isClearIcon = srcElement.classList.contains('e-clear-icon');\n var inputElem = isClearIcon ? srcElement.parentElement.querySelector('.e-textbox') : srcElement;\n ruleElemID = inputElem.id.split('_filterkey')[0];\n var ruleElem = document.getElementById(ruleElemID);\n this.ddTree = getComponent(ruleElem.querySelector('input.e-dropdowntree'), 'dropdowntree');\n var hierarchicalData = extend([], this.columns, [], true);\n // Cancel the default filtering.\n args.cancel = true;\n if (args.text === '') {\n this.changeDataSource(hierarchicalData);\n }\n else {\n var matchedDataSource = hierarchicalData\n .map(function (data) { return _this.nestedChildFilter(args.text, data); })\n .filter(function (filteredChild) { return filteredChild !== null; });\n this.changeDataSource(matchedDataSource);\n setTimeout(function () {\n if (!isNullOrUndefined(proxy.ddTree) && !isNullOrUndefined(proxy.ddTree.treeObj)) {\n proxy.ddTree.treeObj.expandAll();\n }\n }, 100);\n }\n };\n QueryBuilder.prototype.changeDataSource = function (data) {\n this.updateDropdowntreeDS(data);\n this.ddTree.treeObj.fields = {\n dataSource: data,\n value: 'field',\n text: 'label',\n child: 'columns',\n expanded: 'expanded'\n };\n this.ddTree.treeObj.refresh();\n };\n QueryBuilder.prototype.nestedChildFilter = function (value, node) {\n var _this = this;\n var children = node[this.ddTree.fields.child];\n if (!children) {\n return this.isMatchedNode(value, node) ? node : null;\n }\n var matchedChildren = children\n .map(function (child) { return _this.nestedChildFilter(value, child); })\n .filter(function (filteredChild) { return filteredChild !== null; });\n if (matchedChildren.length) {\n node[this.ddTree.fields.child] = matchedChildren;\n return node;\n }\n else {\n node[this.ddTree.fields.child] = children;\n return this.isMatchedNode(value, node) ? node : null;\n }\n };\n QueryBuilder.prototype.isMatchedNode = function (value, node) {\n var checkValue = node[this.ddTree.fields.text].toLowerCase();\n value = value ? value.toLowerCase() : '';\n return checkValue.indexOf(value) !== -1;\n };\n QueryBuilder.prototype.dropdownTreeClose = function () {\n if (this.ddTree) {\n this.changeDataSource(extend([], this.columns, [], true));\n }\n this.ddTree = null;\n };\n QueryBuilder.prototype.updateDropdowntreeDS = function (columns) {\n for (var i = 0; i < columns.length; i++) {\n if (columns[parseInt(i.toString(), 10)].type === 'object') {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.isAngular && columns[parseInt(i.toString(), 10)].template) {\n delete columns[parseInt(i.toString(), 10)].template;\n }\n columns[parseInt(i.toString(), 10)].selectable = false;\n this.updateDropdowntreeDS(columns[parseInt(i.toString(), 10)].columns);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n }\n else if (this.isAngular && columns[parseInt(i.toString(), 10)].template) {\n delete columns[parseInt(i.toString(), 10)].template;\n }\n }\n };\n QueryBuilder.prototype.updateAddedRule = function (target, rule, newRule, isRuleTemplate, pId, isNewRuleAdded) {\n var ruleElem;\n var index = 0;\n var groupElem;\n var rules;\n if (isRuleTemplate) {\n ruleElem = select('#' + pId, target);\n groupElem = closest(target, '.e-group-container');\n rules = this.getParentGroup(groupElem);\n while (ruleElem && ruleElem.previousElementSibling !== null) {\n ruleElem = ruleElem.previousElementSibling;\n var enableSeparateCondition = this.enableSeparateConnector && ((!this.headerTemplate && !ruleElem.classList.contains('e-btn-group')) ||\n (this.headerTemplate && (ruleElem.classList.contains('e-rule-container') ||\n ruleElem.classList.contains('e-group-container'))));\n if (!this.enableSeparateConnector || enableSeparateCondition) {\n index++;\n }\n }\n rules.rules[index] = rule;\n }\n else {\n groupElem = closest(target, '.e-group-container');\n rules = this.getParentGroup(groupElem);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var custom = rule.custom;\n if (Object.keys(rule).length) {\n if (this.ruleIndex < 0) {\n rules.rules.push({\n 'field': rule.field, 'type': rule.type, 'label': rule.label, 'operator': rule.operator, value: rule.value\n });\n if (custom) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n rules.rules[rules.rules.length - 1].custom = custom;\n }\n if (this.enableSeparateConnector) {\n rules.rules[rules.rules.length - 1].condition = rule.condition ? rule.condition : newRule.condition;\n }\n }\n else {\n rules.rules.splice(this.ruleIndex + 1, 0, {\n 'field': rule.field, 'type': rule.type, 'label': rule.label, 'operator': rule.operator, value: rule.value\n });\n if (custom) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n rules.rules[this.ruleIndex + 1].custom = custom;\n }\n if (this.enableSeparateConnector) {\n rules.rules[this.ruleIndex + 1].condition = rule.condition ? rule.condition : newRule.condition;\n }\n }\n }\n else {\n if (custom) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n newRule.custom = custom;\n }\n if (this.autoSelectField) {\n rule.field = newRule.field = this.rule.rules[0].field;\n }\n rules.rules.push(newRule);\n }\n }\n this.disableRuleCondition(target, rules, isNewRuleAdded);\n };\n QueryBuilder.prototype.changeRuleTemplate = function (column, element) {\n var operVal = this.selectedColumn.operators;\n if (column.ruleTemplate) {\n return;\n }\n else {\n var parentGroup = closest(element, '.e-group-container');\n var parentId = closest(element, '.e-rule-container').id;\n if (this.previousColumn && this.previousColumn.ruleTemplate) {\n detach(element.closest('[id=\"' + parentId + '\"]').querySelector('.e-rule-field'));\n this.clearQBTemplate([parentId]);\n }\n if (column) {\n var rule = { field: column.field, label: column.label, operator: operVal[0].value, value: '' };\n this.addRuleElement(parentGroup, rule, column, 'change', parentId, true);\n }\n }\n };\n QueryBuilder.prototype.renderToolTip = function (element) {\n var tooltip = new Tooltip({ content: this.l10n.getConstant('ValidationMessage'), isSticky: true,\n position: 'BottomCenter', cssClass: 'e-querybuilder-error', afterClose: function () {\n tooltip.destroy();\n }, beforeOpen: function (args) {\n var tooltipCloseElement = args.element.querySelector('.e-tooltip-close');\n if (tooltipCloseElement) {\n tooltipCloseElement.style.display = 'none';\n }\n } });\n tooltip.appendTo(element);\n tooltip.open(element);\n };\n /**\n * Validate the conditions and it display errors for invalid fields.\n *\n * @returns {boolean} - Validation\n */\n QueryBuilder.prototype.validateFields = function () {\n var isValid = true;\n var dropDownTreeObj;\n if (this.allowValidation) {\n var excludeOprs = ['isnull', 'isnotnull', 'isempty', 'isnotempty'];\n var i = void 0;\n var len = void 0;\n var fieldElem = void 0;\n var indexElem = void 0;\n var valArray = [];\n var groupElem = void 0;\n var index = void 0;\n var dropDownObj = void 0;\n var tempElem = void 0;\n var rule = void 0;\n var ruleElemCln = this.element.querySelectorAll('.e-rule-container');\n for (i = 0, len = ruleElemCln.length; i < len; i++) {\n var validateRule = void 0;\n groupElem = closest(ruleElemCln[i], '.e-group-container');\n rule = this.getParentGroup(groupElem);\n index = 0;\n indexElem = tempElem = ruleElemCln[i];\n if (this.fieldMode === 'DropdownTree') {\n dropDownTreeObj = getComponent(ruleElemCln[i].querySelector('.e-rule-filter input.e-dropdowntree'), 'dropdowntree');\n if (dropDownTreeObj && dropDownTreeObj.value && dropDownTreeObj.value.length) {\n this.selectedColumn = this.getColumn(dropDownTreeObj.value[0]);\n validateRule = this.selectedColumn.validation;\n }\n }\n else {\n dropDownObj = getComponent(ruleElemCln[i].querySelector('.e-rule-filter input.e-dropdownlist'), 'dropdownlist');\n if (dropDownObj && dropDownObj.value) {\n this.selectedColumn = dropDownObj.getDataByValue(dropDownObj.value);\n validateRule = !isNullOrUndefined(dropDownObj.value) && this.selectedColumn.validation;\n }\n }\n fieldElem = tempElem.querySelector('.e-rule-field input.e-control');\n if (validateRule && validateRule.isRequired) {\n while (indexElem && indexElem.previousElementSibling !== null) {\n indexElem = indexElem.previousElementSibling;\n var separateCondition = this.enableSeparateConnector && ((!this.headerTemplate && !indexElem.classList.contains('e-btn-group')) ||\n (this.headerTemplate && (indexElem.classList.contains('e-rule-container') || indexElem.classList.contains('e-group-container'))));\n if (!this.enableSeparateConnector || separateCondition) {\n index++;\n }\n }\n fieldElem = tempElem.querySelector('.e-rule-operator .e-control');\n if (!rule.rules[index].operator) {\n if (fieldElem.parentElement.className.indexOf('e-tooltip') < 0 && fieldElem.className.indexOf('e-tooltip') < 0) {\n this.renderToolTip(fieldElem.parentElement);\n }\n isValid = false;\n }\n if (rule.rules[index].value instanceof Array) {\n valArray = rule.rules[index].value;\n }\n if (excludeOprs.indexOf(rule.rules[index].operator) < -1 &&\n (isNullOrUndefined(rule.rules[index].value) &&\n rule.rules[index].type !== 'date') || rule.rules[index].value === '' || rule.rules[index].value === null ||\n (rule.rules[index].value instanceof Array && valArray.length < 1)) {\n var valElem = tempElem.querySelectorAll('.e-rule-value .e-control');\n if (excludeOprs.indexOf(rule.rules[index].operator) < 0) {\n isValid = false;\n }\n for (var j = 0, jLen = valElem.length; j < jLen; j++) {\n var element = valElem[j];\n var elem = void 0;\n if (element.parentElement.className.indexOf('e-searcher') > -1) {\n elem = closest(element, '.e-multi-select-wrapper');\n if (elem.className.indexOf('e-tooltip') < 0) {\n this.renderToolTip(elem);\n }\n }\n else if (valElem[j].parentElement.className.indexOf('e-tooltip') < 0 && valElem[j].className.indexOf('e-tooltip') < 0) {\n this.renderToolTip(valElem[j].parentElement);\n }\n j++;\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n }\n else if (rule.rules[index].type === 'date' && (rule.rules[index].value === null || rule.rules[index].value.indexOf(null) > -1)) {\n var valElem = tempElem.querySelectorAll('.e-rule-value .e-control');\n if (excludeOprs.indexOf(rule.rules[index].operator) < 0) {\n isValid = false;\n }\n for (var j = 0, jLen = valElem.length; j < jLen; j++) {\n if (valElem[j].parentElement.className.indexOf('e-tooltip') < 0 && valElem[j].className.indexOf('e-tooltip') < 0 && (isNullOrUndefined(rule.rules[index].value) || rule.rules[index].value[j] == null)) {\n this.renderToolTip(valElem[j].parentElement);\n }\n }\n }\n }\n else if ((dropDownObj && dropDownObj.element && isNullOrUndefined(dropDownObj.value)) ||\n (dropDownTreeObj && dropDownTreeObj.element && (isNullOrUndefined(dropDownTreeObj.value) ||\n dropDownTreeObj.value.length < 1))) {\n if (fieldElem.parentElement.className.indexOf('e-tooltip') < 0) {\n this.renderToolTip(fieldElem.parentElement);\n }\n isValid = false;\n }\n }\n }\n return isValid;\n };\n QueryBuilder.prototype.refreshLevelColl = function () {\n this.levelColl = {};\n var groupElem = this.element.querySelector('.e-group-container');\n if (groupElem) {\n this.levelColl[groupElem.id] = [0];\n var obj = { groupElement: groupElem, level: [0] };\n this.refreshLevel(obj);\n }\n };\n QueryBuilder.prototype.refreshLevel = function (obj) {\n var ruleList = obj.groupElement.querySelector('.e-rule-list').children;\n var childElem;\n var groupElem = obj.groupElement;\n var i;\n var iLen = ruleList.length;\n var groupCount = 0;\n for (i = 0; i < iLen; i++) {\n childElem = ruleList[i];\n if (childElem.className.indexOf('e-group-container') > -1) {\n obj.level.push(groupCount);\n this.levelColl[childElem.id] = obj.level.slice();\n groupCount++;\n obj.groupElement = childElem;\n obj = this.refreshLevel(obj);\n }\n }\n var ruleListElem = closest(groupElem, '.e-rule-list');\n obj.groupElement = ruleListElem ? closest(ruleListElem, '.e-group-container') : groupElem;\n obj.level = this.levelColl[obj.groupElement.id].slice();\n return obj;\n };\n QueryBuilder.prototype.groupTemplate = function (isConnector) {\n var glueElem;\n var inputElem;\n var dragClsName;\n var labelElem;\n var grpActElem;\n var groupBtn;\n var groupElem = this.createElement('div', { attrs: { class: 'e-group-container' } });\n var groupHdrElem = this.createElement('div', { attrs: { class: 'e-group-header' } });\n var grpBodyElem = this.createElement('div', { attrs: { class: 'e-group-body' } });\n var rulesElem = this.createElement('div', { attrs: { class: 'e-rule-list' } });\n groupElem.appendChild(groupHdrElem);\n grpBodyElem.appendChild(rulesElem);\n groupElem.appendChild(grpBodyElem);\n // create button group in OR and AND process\n if (!this.headerTemplate) {\n if (this.allowDragAndDrop) {\n dragClsName = 'e-icons e-drag-qb-rule';\n }\n else {\n dragClsName = 'e-icons e-drag-qb-rule e-hidden';\n }\n var spanDragElement = this.createElement('span', { attrs: { class: dragClsName, 'aria-lable': 'drag handle',\n title: 'drag handle' } });\n groupHdrElem.appendChild(spanDragElement);\n var className = this.enableSeparateConnector && !isConnector ? 'e-lib e-btn-group e-qb-toggle-btn' : 'e-lib e-btn-group';\n glueElem = this.createElement('div', { attrs: { class: className, role: 'group' } });\n if (this.enableSeparateConnector) {\n glueElem.classList.add('e-multi-connector');\n }\n if (this.enableNotCondition) {\n if (this.enableSeparateConnector) {\n inputElem = this.createElement('input', { attrs: { type: 'checkbox', class: 'e-qb-toggle' } });\n }\n else {\n inputElem = this.createElement('button', { attrs: { type: 'button', class: 'e-qb-toggle' } });\n }\n glueElem.appendChild(inputElem);\n }\n inputElem = this.createElement('input', { attrs: { type: 'radio', class: 'e-btngroup-and', value: 'AND' } });\n glueElem.appendChild(inputElem);\n labelElem = this.createElement('label', { attrs: { class: 'e-lib e-btn e-btngroup-and-lbl e-small' },\n innerHTML: this.l10n.getConstant('AND') });\n glueElem.appendChild(labelElem);\n inputElem = this.createElement('input', { attrs: { type: 'radio', class: 'e-btngroup-or', value: 'OR' } });\n glueElem.appendChild(inputElem);\n labelElem = this.createElement('label', { attrs: { class: 'e-lib e-btn e-btngroup-or-lbl e-small' },\n innerHTML: this.l10n.getConstant('OR') });\n glueElem.appendChild(labelElem);\n groupHdrElem.appendChild(glueElem);\n grpActElem = this.createElement('div', { attrs: { class: 'e-group-action' } });\n if (this.enableSeparateConnector) {\n groupBtn = this.createElement('button', { attrs: { type: 'button', class: 'e-add-condition-btn' } });\n grpActElem.appendChild(groupBtn);\n groupBtn = this.createElement('button', { attrs: { type: 'button', class: 'e-add-group-btn' } });\n grpActElem.appendChild(groupBtn);\n }\n else {\n groupBtn = this.createElement('button', { attrs: { type: 'button', class: 'e-add-btn' } });\n grpActElem.appendChild(groupBtn);\n }\n groupHdrElem.appendChild(grpActElem);\n }\n return groupElem;\n };\n QueryBuilder.prototype.ruleTemplate = function () {\n var tempElem;\n var clsName;\n var cloneClsName;\n var lockClsName;\n var dragClsName;\n var ruleElem = this.createElement('div');\n var fieldElem = this.createElement('div', { attrs: { class: 'e-rule-field' } });\n tempElem = this.createElement('div', { attrs: { class: 'e-rule-filter' } });\n if (this.allowDragAndDrop) {\n dragClsName = 'e-icons e-drag-qb-rule';\n }\n else {\n dragClsName = 'e-icons e-drag-qb-rule e-hidden';\n }\n var spanDragElement = this.createElement('span', { attrs: { class: dragClsName, 'aria-lable': 'drag handle',\n title: 'drag handle' } });\n fieldElem.appendChild(spanDragElement);\n var filterElem = this.createElement('input', { attrs: { type: 'text', class: 'e-filter-input' } });\n tempElem.appendChild(filterElem);\n fieldElem.appendChild(tempElem);\n tempElem = this.createElement('div', { attrs: { class: 'e-rule-operator' } });\n fieldElem.appendChild(tempElem);\n tempElem = this.createElement('div', { attrs: { class: 'e-rule-value' } });\n fieldElem.appendChild(tempElem);\n tempElem = this.createElement('div', { attrs: { class: 'e-rule-value-delete' } });\n if (this.showButtons.cloneRule) {\n cloneClsName = 'e-clone-rule-btn e-clone-rule e-css e-btn e-small e-round e-icon-btn';\n }\n else {\n cloneClsName = 'e-clone-rule-btn e-clone-rule e-css e-btn e-small e-round e-icon-btn e-button-hide';\n }\n if (this.showButtons.lockRule) {\n lockClsName = 'e-lock-rule-btn e-lock-rule e-css e-btn e-small e-round e-icons e-icon-btn';\n }\n else {\n lockClsName = 'e-lock-rule-btn e-lock-rule e-css e-btn e-small e-round e-icons e-icon-btn e-button-hide';\n }\n var cloneRuleBtnElem = this.createElement('button', { attrs: { title: this.l10n.getConstant('CloneRule'), type: 'button', class: cloneClsName } });\n var spanElement = this.createElement('span', { attrs: { class: 'e-btn-icon e-icons e-copy' } });\n cloneRuleBtnElem.appendChild(spanElement);\n var cloneLockBtnElem = this.createElement('button', { attrs: { title: this.l10n.getConstant('LockRule'), type: 'button', class: lockClsName } });\n spanElement = this.createElement('span', { attrs: { class: 'e-btn-icon e-icons e-unlock' } });\n cloneLockBtnElem.appendChild(spanElement);\n if (this.showButtons.ruleDelete || isNullOrUndefined(this.showButtons.ruleDelete)) {\n clsName = 'e-removerule e-rule-delete e-css e-btn e-small';\n }\n else {\n clsName = 'e-removerule e-rule-delete e-css e-btn e-small e-button-hide';\n }\n var delBtnElem = this.createElement('button', { attrs: { type: 'button', class: clsName } });\n tempElem.appendChild(cloneRuleBtnElem);\n tempElem.appendChild(cloneLockBtnElem);\n tempElem.appendChild(delBtnElem);\n fieldElem.appendChild(tempElem);\n ruleElem.appendChild(fieldElem);\n return ruleElem;\n };\n QueryBuilder.prototype.addGroupElement = function (isGroup, target, condition, isBtnClick, not, isRoot, rule) {\n var _this = this;\n var args = { groupID: target.id.replace(this.element.id + '_', ''), cancel: false, type: 'insertGroup' };\n if (!this.isImportRules && !this.isInitialLoad && !this.prvtEvtTgrDaD) {\n this.trigger('beforeChange', args, function (observedChangeArgs) {\n _this.addGroupSuccess(observedChangeArgs, isGroup, target, condition, isBtnClick, not, isRoot, rule);\n });\n }\n else {\n this.isInitialLoad = false;\n this.addGroupSuccess(args, isGroup, target, condition, isBtnClick, not, isRoot, rule);\n }\n };\n QueryBuilder.prototype.addGroupSuccess = function (args, isGroup, eventTarget, condition, isBtnClick, not, isRoot, rule) {\n var _this = this;\n if (!args.cancel && (this.element.querySelectorAll('.e-group-container').length <= this.maxGroupCount)) {\n var target = eventTarget;\n var dltGroupBtn = void 0;\n var groupID = '';\n if (target.className.indexOf('e-group-container') < 0) {\n groupID = target.querySelector('.e-group-container') && target.querySelector('.e-group-container').id;\n }\n else {\n groupID = target.id;\n }\n if (this.enableSeparateConnector) {\n this.groupElem = this.groupTemplate();\n }\n var groupElem = this.groupElem.cloneNode(true);\n groupElem.setAttribute('id', this.element.id + '_group' + this.groupIdCounter);\n if (this.groupIdCounter === 0 && this.allowDragAndDrop && groupElem.querySelector('.e-drag-qb-rule')) {\n if (groupElem && groupElem.children[0]) {\n groupElem.children[0].classList.add('e-parent-header');\n }\n addClass([groupElem.querySelector('.e-drag-qb-rule')], 'e-hidden');\n }\n if (this.headerTemplate) {\n if (isRoot) {\n isGroup = false;\n groupElem.setAttribute('id', this.element.id + '_group0');\n this.headerTemplateFn(groupElem, not, condition, rule, groupID);\n this.groupIdCounter = 0;\n }\n else {\n this.headerTemplateFn(groupElem, not, condition, rule, groupID);\n }\n }\n this.groupIdCounter++;\n if (!this.headerTemplate) {\n var andInpElem = groupElem.querySelector('.e-btngroup-and');\n var orInpElem = groupElem.querySelector('.e-btngroup-or');\n var andLblElem = groupElem.querySelector('.e-btngroup-and-lbl');\n var orLblElem = groupElem.querySelector('.e-btngroup-or-lbl');\n andInpElem.setAttribute('id', this.element.id + '_and' + this.btnGroupId);\n orInpElem.setAttribute('id', this.element.id + '_or' + this.btnGroupId);\n andInpElem.setAttribute('name', this.element.id + '_and' + this.btnGroupId);\n orInpElem.setAttribute('name', this.element.id + '_and' + this.btnGroupId);\n andLblElem.setAttribute('for', this.element.id + '_and' + this.btnGroupId);\n orLblElem.setAttribute('for', this.element.id + '_or' + this.btnGroupId);\n this.btnGroupId++;\n }\n if (isGroup) {\n var clsName = void 0;\n if (this.showButtons.groupDelete || isNullOrUndefined(this.showButtons.groupDelete)) {\n clsName = 'e-deletegroup';\n }\n else {\n clsName = 'e-deletegroup e-button-hide';\n }\n dltGroupBtn = this.createElement('button', { attrs: { type: 'button', class: clsName } });\n var button = new Button({ iconCss: 'e-icons e-delete-icon', cssClass: 'e-small e-round' });\n button.appendTo(dltGroupBtn);\n dltGroupBtn.setAttribute('title', this.l10n.getConstant('DeleteGroup'));\n rippleEffect(dltGroupBtn, { selector: '.deletegroup' });\n var ruleList = target.querySelector('.e-rule-list');\n var childElems = ruleList.children;\n var grpLen = 0;\n for (var j = 0, jLen = childElems.length; j < jLen; j++) {\n if (childElems[j].className.indexOf('e-group-container') > -1) {\n grpLen += 1;\n }\n }\n if (this.showButtons.cloneGroup && this.cloneGrpBtnClick) {\n if (this.groupIndex === (childElems.length - 1)) {\n ruleList.appendChild(groupElem);\n this.isLastGroup = true;\n }\n else {\n if (this.enableSeparateConnector) {\n var index = 0;\n var tempGroupIndex = this.groupIndex + 1;\n for (var i = 0; i < tempGroupIndex; i++) {\n if (childElems[i].classList.contains('e-rule-container')) {\n tempGroupIndex++;\n index++;\n }\n }\n if (index > 0) {\n index--;\n }\n var idx = this.groupIndex + index + 1;\n childElems[idx].parentNode.insertBefore(groupElem, childElems[idx]);\n }\n else {\n var idx = this.groupIndex + 1;\n childElems[idx].parentNode.insertBefore(groupElem, childElems[idx]);\n }\n this.isMiddleGroup = true;\n }\n }\n else {\n ruleList.appendChild(groupElem);\n }\n var level = this.levelColl[target.id].slice(0);\n level.push(grpLen);\n this.levelColl[groupElem.id] = level;\n if (this.groupIndex > -1) {\n this.refreshLevelColl();\n }\n if (!this.isImportRules) {\n this.isAddSuccess = true;\n this.addGroups([], target.id.replace(this.element.id + '_', ''));\n this.isAddSuccess = false;\n if (isBtnClick && this.addRuleToNewGroups) {\n this.addRuleElement(groupElem, {});\n }\n }\n if (!this.headerTemplate) {\n var lockClsName = '';\n if (this.showButtons.cloneGroup) {\n lockClsName = 'e-clone-grp-btn e-css e-btn e-small e-round e-icons e-icon-btn';\n }\n else {\n lockClsName = 'e-clone-grp-btn e-css e-btn e-small e-round e-icons e-icon-btn e-button-hide';\n }\n var cloneBtnElem = this.createElement('button', { attrs: { title: this.l10n.getConstant('CloneGroup'), type: 'button', class: lockClsName } });\n var spanElement = this.createElement('span', { attrs: { class: 'e-btn-icon e-icons e-copy' } });\n cloneBtnElem.appendChild(spanElement);\n groupElem.querySelector('.e-group-action').appendChild(cloneBtnElem);\n if (this.showButtons.lockGroup) {\n lockClsName = 'e-lock-grp-btn e-css e-btn e-small e-round e-icons e-icon-btn';\n }\n else {\n lockClsName = 'e-lock-grp-btn e-css e-btn e-small e-round e-icons e-icon-btn e-button-hide';\n }\n var lockBtnElem = this.createElement('button', { attrs: { title: this.l10n.getConstant('LockGroup'), type: 'button', class: lockClsName } });\n var lockSpanElement = this.createElement('span', { attrs: { class: 'e-btn-icon e-icons e-unlock' } });\n lockBtnElem.appendChild(lockSpanElement);\n groupElem.querySelector('.e-group-action').appendChild(lockBtnElem);\n groupElem.querySelector('.e-group-action').appendChild(dltGroupBtn);\n }\n }\n else {\n if (!this.headerTemplate) {\n var lockClsName = '';\n if (this.showButtons.lockGroup) {\n lockClsName = 'e-lock-grp-btn e-css e-btn e-small e-round e-icons e-icon-btn';\n }\n else {\n lockClsName = 'e-lock-grp-btn e-css e-btn e-small e-round e-icons e-icon-btn e-button-hide';\n }\n var lockBtnElem = this.createElement('button', { attrs: { title: this.l10n.getConstant('LockGroup'), type: 'button', class: lockClsName } });\n var spanElement = this.createElement('span', { attrs: { class: 'e-btn-icon e-icons e-unlock' } });\n lockBtnElem.appendChild(spanElement);\n groupElem.querySelector('.e-group-action').appendChild(lockBtnElem);\n }\n target.appendChild(groupElem);\n this.levelColl[groupElem.id] = [0];\n }\n if (this.enableNotCondition) {\n if (!this.headerTemplate) {\n var notElem = groupElem.querySelector('.e-qb-toggle');\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var tglBtn = void 0;\n if (this.enableSeparateConnector) {\n tglBtn = new CheckBox({ label: this.l10n.getConstant('NOT'), cssClass: 'e-qb-toggle' });\n }\n else {\n tglBtn = new Button({ content: this.l10n.getConstant('NOT'), cssClass: 'e-btn e-small' });\n }\n tglBtn.appendTo(notElem);\n groupElem.querySelector('.e-btngroup-and-lbl').classList.add('e-not');\n if (this.updatedRule && this.updatedRule.not) {\n addClass([notElem], 'e-active-toggle');\n }\n }\n }\n if (this.enableSeparateConnector && !this.headerTemplate) {\n var andElem = groupElem.querySelector('.e-btngroup-and');\n var orElem = groupElem.querySelector('.e-btngroup-or');\n var btnGroup = groupElem.querySelector('.e-btn-group');\n for (var i = 0; i < btnGroup.childNodes.length; i++) {\n if (groupElem.querySelector('.e-btn-group').childNodes[i].textContent.toLowerCase() === 'not') {\n if (!this.enableNotCondition) {\n btnGroup.childNodes[i].style.display = 'none';\n }\n else {\n btnGroup.childNodes[i].classList.add('e-multiconnector');\n }\n }\n else {\n btnGroup.childNodes[i].style.display = 'none';\n }\n }\n var prevSibling = groupElem.previousElementSibling;\n if (prevSibling) {\n if (isNullOrUndefined(this.headerTemplate)) {\n groupElem.parentElement.insertBefore(this.groupTemplate(true).querySelector('.e-btn-group'), groupElem);\n var notElem = groupElem.previousElementSibling.childNodes[0];\n if (notElem.classList.contains('e-qb-toggle')) {\n notElem.style.display = 'none';\n }\n }\n if (!this.isImportRules) {\n var groupElement = groupElem.previousElementSibling;\n var newAndElem = groupElement.querySelector('.e-btngroup-and');\n var newOrElem = groupElement.querySelector('.e-btngroup-or');\n if (!andElem.checked && !orElem.checked) {\n var nextSibling = groupElem.nextElementSibling;\n if (nextSibling && nextSibling.classList.contains('e-btn-group')) {\n andElem = nextSibling.querySelector('.e-btngroup-and');\n orElem = nextSibling.querySelector('.e-btngroup-or');\n newAndElem.checked = andElem.checked;\n newOrElem.checked = orElem.checked;\n }\n }\n else if (this.enableSeparateConnector) {\n if (andElem.checked) {\n newAndElem.checked = true;\n }\n if (orElem.checked) {\n newOrElem.checked = true;\n }\n }\n }\n }\n }\n this.updatedRule = null;\n if (this.headerTemplate) {\n var args_4 = { requestType: 'header-template-create', ruleID: groupElem.id, condition: condition,\n notCondition: this.enableNotCondition ? not : undefined };\n this.trigger('actionBegin', args_4);\n }\n else {\n if (this.enableSeparateConnector) {\n var conditionBtn_1 = groupElem.querySelector('.e-add-condition-btn');\n var btnObj = new Button({ cssClass: this.element.id + '_addConditionbtn', content: this.l10n.getConstant('AddCondition') });\n btnObj.appendTo(conditionBtn_1);\n btnObj.element.onclick = function () {\n _this.addRuleElement(closest(conditionBtn_1, '.e-group-container'), {});\n };\n var groupBtn_1 = groupElem.querySelector('.e-add-group-btn');\n btnObj = new Button({ cssClass: this.element.id + '_addGroupbtn', content: this.l10n.getConstant('AddGroup') });\n btnObj.appendTo(groupBtn_1);\n btnObj.element.onclick = function () {\n _this.addGroupElement(true, closest(groupBtn_1, '.e-group-container'), '', true);\n };\n }\n else {\n var groupBtn = groupElem.querySelector('.e-add-btn');\n var btnObj = new DropDownButton({\n items: this.items,\n cssClass: 'e-round e-small e-caret-hide e-addrulegroup',\n iconCss: 'e-icons e-add-icon',\n beforeOpen: this.selectBtn.bind(this, groupBtn),\n select: this.selectBtn.bind(this, groupBtn)\n });\n btnObj.appendTo(groupBtn);\n groupBtn.setAttribute('title', this.l10n.getConstant('AddButton'));\n }\n }\n if (!this.isImportRules && !this.prvtEvtTgrDaD) {\n var grpId = target.id.replace(this.element.id + '_', '');\n var chgrpId = groupElem.id.replace(this.element.id + '_', '');\n this.trigger('change', { groupID: grpId, type: 'insertGroup', childGroupID: chgrpId });\n }\n }\n };\n QueryBuilder.prototype.setMultiConnector = function (trgt) {\n if (this.enableSeparateConnector && !this.headerTemplate) {\n if (trgt.previousElementSibling && this.groupElem.querySelector('.e-btn-group')) {\n trgt.parentElement.insertBefore(this.groupTemplate(true).querySelector('.e-btn-group'), trgt);\n var notElem = trgt.previousElementSibling.childNodes[0];\n if (notElem.classList.contains('e-qb-toggle')) {\n notElem.style.display = 'none';\n }\n this.addHeaderDiv(trgt);\n }\n }\n };\n QueryBuilder.prototype.addHeaderDiv = function (elem) {\n var prevRule;\n var prevElem = elem.previousElementSibling.previousElementSibling;\n if (prevElem) {\n if (prevElem.id.indexOf('rule') > -1) {\n prevRule = this.getRule(prevElem);\n }\n else {\n prevRule = this.getGroup(prevElem);\n }\n if (isNullOrUndefined(prevRule.condition)) {\n prevRule.condition = 'and';\n }\n var orElem = elem.previousElementSibling.querySelector('.e-btngroup-or');\n var andElem = elem.previousElementSibling.querySelector('.e-btngroup-and');\n orElem.disabled = false;\n andElem.disabled = false;\n if (prevRule.condition === 'or') {\n orElem.checked = true;\n }\n else {\n andElem.checked = true;\n }\n }\n };\n QueryBuilder.prototype.headerTemplateFn = function (groupElem, not, condition, rule, groupID, isInitialRule) {\n var template;\n var templateID = this.element.id + '_header';\n var args;\n var groupHdr = groupElem.querySelector('.e-group-header');\n if (this.enableSeparateConnector && groupElem.id.indexOf('rule') !== -1) {\n groupHdr = groupElem;\n }\n if (this.headerTemplate) {\n args = { requestType: 'header-template-initialize', ruleID: groupElem.id,\n notCondition: this.enableNotCondition ? not : undefined,\n condition: condition, rule: this.getRuleCollection(rule, false), groupID: groupID };\n this.trigger('actionBegin', args);\n if (this.enableSeparateConnector && groupElem.id.indexOf('rule') !== -1) {\n args.requestType = 'rule-template-create';\n }\n this.headerFn = this.templateParser(this.headerTemplate);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.isReact) {\n template = this.headerFn(args, this, groupElem.id, templateID)[0];\n if (this.enableSeparateConnector && isInitialRule) {\n this.enableSeparateConnectorInitialRule(groupElem, template);\n }\n else if (this.enableSeparateConnector && groupElem.id.indexOf('rule') !== -1) {\n groupHdr.parentElement.insertBefore(template, groupHdr.nextElementSibling);\n }\n else {\n groupHdr.appendChild(template);\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n }\n else if (this.isAngular) {\n var templateColl = this.headerFn(args, this, groupElem.id, templateID);\n template = (templateColl[0].nodeType === 3) ? templateColl[1] : templateColl[0];\n if (this.enableSeparateConnector && isInitialRule) {\n this.enableSeparateConnectorInitialRule(groupElem, template);\n }\n else if (this.enableSeparateConnector && groupElem.id.indexOf('rule') !== -1) {\n groupHdr.parentElement.insertBefore(template, groupHdr.nextElementSibling);\n }\n else {\n groupHdr.appendChild(template);\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n }\n else if (this.isVue3) {\n template = this.headerFn(args, this, groupElem.id, templateID);\n if (this.enableSeparateConnector && (isInitialRule || groupElem.id.indexOf('rule') !== -1)) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n for (var i = 0; i < template.length; i++) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (template[i].nodeName === 'DIV') {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n template = template[i];\n break;\n }\n }\n }\n if (this.enableSeparateConnector && isInitialRule) {\n this.enableSeparateConnectorInitialRule(groupElem, template);\n }\n else if (this.enableSeparateConnector && groupElem.id.indexOf('rule') !== -1) {\n groupHdr.parentElement.insertBefore(template, groupHdr.nextElementSibling);\n }\n else {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n append(template, groupHdr);\n }\n }\n else {\n template = this.headerFn(args, this, 'Template', templateID)[0];\n if (this.enableSeparateConnector && isInitialRule) {\n this.enableSeparateConnectorInitialRule(groupElem, template);\n }\n else if (this.enableSeparateConnector && groupElem.id.indexOf('rule') !== -1) {\n groupHdr.parentElement.insertBefore(template, groupHdr.nextElementSibling);\n }\n else {\n groupHdr.appendChild(template);\n }\n }\n this.renderReactTemplates();\n }\n return groupElem;\n };\n QueryBuilder.prototype.enableSeparateConnectorInitialRule = function (groupElem, template) {\n var elem = groupElem.nextElementSibling ? groupElem.nextElementSibling : groupElem;\n var group = elem.closest('.e-group-container');\n if (!groupElem.nextElementSibling && group) {\n group = group.nextElementSibling ? group.nextElementSibling : group;\n }\n if (group) {\n group.parentElement.insertBefore(template, group);\n }\n };\n /**\n * Notify the changes to component.\n *\n * @param {string | number | boolean | Date | string[] | number[] | Date[]} value - 'value' to be passed to update the rule value.\n * @param {Element} element - 'element' to be passed to update the rule.\n * @param {string} type - 'type' to be passed to update the rule .\n * @returns {void}.\n */\n QueryBuilder.prototype.notifyChange = function (value, element, type) {\n var grpElement = closest(element, '.e-group-container');\n var rules = this.getParentGroup(grpElement);\n var ruleElement = closest(element, '.e-rule-container');\n var index = 0;\n if (type === 'not') {\n rules.not = value;\n return;\n }\n if (type === 'condition') {\n if (this.enableSeparateConnector) {\n ruleElement = element.parentElement.previousElementSibling;\n if (ruleElement && ruleElement.classList.contains('e-group-container')) {\n ruleElement = ruleElement.querySelectorAll('.e-rule-container')[ruleElement.querySelectorAll('.e-rule-container').length - 1];\n }\n if (ruleElement && ruleElement.classList.contains('e-rule-container')) {\n rules = this.getRule(ruleElement);\n }\n rules.condition = value;\n }\n else {\n rules.condition = value;\n }\n return;\n }\n while (ruleElement && ruleElement.previousElementSibling !== null) {\n ruleElement = ruleElement.previousElementSibling;\n if (!this.enableSeparateConnector || (this.enableSeparateConnector &&\n ((!this.headerTemplate && !ruleElement.classList.contains('e-btn-group')) ||\n this.headerTemplate && (ruleElement.classList.contains('e-rule-container') ||\n ruleElement.classList.contains('e-group-container'))))) {\n index++;\n }\n }\n var rule = rules.rules[index];\n var column = this.getColumn(rule.field);\n var format = this.getFormat(column.format);\n if (column.type === 'date') {\n if (value instanceof Date) {\n value = this.intl.formatDate(value, format);\n }\n else if (value instanceof Array) {\n for (var i = 0; i < value.length; i++) {\n if (value[i] && value[i] instanceof Date) {\n value[i] = this.intl.formatDate(value[i], format);\n }\n }\n }\n }\n if (column.ruleTemplate) {\n this.templateChange(element, value, type);\n }\n else {\n this.isNotified = true;\n this.updateRules(element, value);\n this.isNotified = false;\n }\n };\n QueryBuilder.prototype.templateChange = function (element, value, type) {\n var grpElem = closest(element, '.e-group-container');\n var eventsArgs;\n var rules = this.getParentGroup(grpElem);\n var ruleElem = closest(element, '.e-rule-container');\n var index = 0;\n if (this.allowValidation) {\n this.validateValue(rules, ruleElem);\n }\n while (ruleElem && ruleElem.previousElementSibling !== null) {\n ruleElem = ruleElem.previousElementSibling;\n if (!this.enableSeparateConnector || (this.enableSeparateConnector &&\n ((!this.headerTemplate && !ruleElem.classList.contains('e-btn-group')) ||\n this.headerTemplate && (ruleElem.classList.contains('e-rule-container') ||\n ruleElem.classList.contains('e-group-container'))))) {\n index++;\n }\n }\n var rule = rules.rules[index];\n if (type === 'field') {\n this.selectedColumn = this.getColumn(value);\n }\n else if (rule) {\n this.selectedColumn = this.getColumn(rule.field);\n }\n var operVal;\n this.previousColumn = this.getColumn(rule.field);\n var beforeRules = this.getValidRules(this.rule);\n if (this.selectedColumn) {\n if (this.selectedColumn.operators) {\n operVal = this.selectedColumn.operators;\n }\n else {\n operVal = this.customOperators[this.selectedColumn.type + 'Operator'];\n }\n }\n var arrOper = ['in', 'notin', 'between', 'notbetween'];\n var prevOper;\n switch (type) {\n case 'field':\n rule.field = value;\n rule.label = this.selectedColumn.label;\n rule.type = this.selectedColumn.type;\n rule.value = '';\n rule.operator = operVal[0].value;\n break;\n case 'operator':\n prevOper = rule.operator;\n rule.operator = value;\n if (arrOper.indexOf(rule.operator) > -1) {\n rule.value = [];\n }\n else if (arrOper.indexOf(prevOper) > -1) {\n rule.value = '';\n }\n break;\n case 'value':\n rule.value = value;\n }\n this.changeRuleTemplate(this.selectedColumn, element);\n this.filterRules(beforeRules, this.getValidRules(this.rule), type);\n if (this.selectedColumn && this.selectedColumn.ruleTemplate) {\n if (type === 'field' || type === 'operator') {\n var grpEle = closest(element, '.e-rule-container');\n this.destroyControls(grpEle, true);\n detach(grpEle.querySelector('.e-rule-field'));\n var ruleElement = this.appendRuleElem(closest(grpEle, '.e-group-container'), this.selectedColumn, 'change', grpEle.id, type, rule);\n if (this.displayMode === 'Vertical' || this.element.className.indexOf('e-device') > -1) {\n ruleElement.className = 'e-rule-container e-vertical-mode';\n }\n else {\n ruleElement.className = 'e-rule-container e-horizontal-mode';\n }\n if (!this.enableSeparateConnector) {\n if (ruleElement.previousElementSibling && ruleElement.previousElementSibling.className.indexOf('e-rule-container') > -1) {\n if (ruleElement.className.indexOf('e-joined-rule') < 0) {\n ruleElement.className += ' e-joined-rule';\n }\n if (ruleElement.previousElementSibling.className.indexOf('e-prev-joined-rule') < 0) {\n ruleElement.previousElementSibling.className += ' e-prev-joined-rule';\n }\n }\n }\n if (ruleElement.previousElementSibling && ruleElement.previousElementSibling.className.indexOf('e-group-container') > -1 &&\n ruleElement.className.indexOf('e-separate-rule') < 0) {\n ruleElement.className += ' e-separate-rule';\n }\n var args = { requestType: 'template-create', action: type, ruleID: grpEle.id,\n fields: this.fields, rule: rule };\n eventsArgs = { groupID: grpElem.id.replace(this.element.id + '_', ''), ruleID: grpEle.id.replace(this.element.id + '_', ''),\n value: rule.field, type: 'field' };\n this.trigger('actionBegin', args);\n this.trigger('change', eventsArgs);\n }\n }\n };\n QueryBuilder.prototype.changeValue = function (i, args) {\n var _this = this;\n var element;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if ((this.isNumInput && typeof args.value === 'number') || (args.type === 'input' && args.target && args.target.classList.contains('e-numerictextbox'))\n && (this.selectedColumn.validation && (this.selectedColumn.validation.max !== Number.MAX_VALUE || this.selectedColumn.validation.min > 0))) {\n this.isNumInput = false;\n return;\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (args.element && args.element.classList.contains('e-multiselect')) {\n var multiSelectArgs = args;\n element = multiSelectArgs.element;\n }\n else if (args.event) {\n element = args.event.target;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n }\n else if (args.type === 'input' && args.target && args.target.classList.contains('e-numerictextbox')) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n element = args.currentTarget;\n }\n else {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n element = args.element;\n }\n if (!element) {\n return;\n }\n if (element.className.indexOf('e-day') > -1 || element.className.indexOf('e-today') > -1 || element.className.indexOf('e-cell') > -1) {\n var calenderArgs = args;\n element = calenderArgs.element;\n }\n var groupElem = closest(element, '.e-group-container');\n var ruleElem = closest(element, '.e-rule-container');\n var groupID = groupElem && groupElem.id.replace(this.element.id + '_', '');\n var ruleID = ruleElem.id.replace(this.element.id + '_', '');\n var dateElement = args;\n var dropDownObj;\n if (dateElement.element && dateElement.element.className.indexOf('e-datepicker') > -1) {\n element = dateElement.element;\n dropDownObj = getComponent(closest(element, '.e-rule-container').querySelector('.e-filter-input'), 'dropdownlist');\n if (dropDownObj) {\n this.selectedColumn = dropDownObj.getDataByValue(dropDownObj.value);\n }\n dropDownObj = getComponent(closest(element, '.e-rule-container').querySelector('.e-filter-input'), 'dropdowntree');\n if (dropDownObj) {\n this.selectedColumn = this.getColumn(dropDownObj.value[0]);\n }\n }\n var value;\n var rbValue;\n if (element.className.indexOf('e-radio') > -1) {\n rbValue = parseInt(element.id.split('valuekey')[1], 10);\n if (this.fieldMode === 'Default') {\n dropDownObj = getComponent(closest(element, '.e-rule-container').querySelector('.e-filter-input'), 'dropdownlist');\n this.selectedColumn = dropDownObj.getDataByValue(dropDownObj.value);\n if (this.selectedColumn.columns) {\n dropDownObj = getComponent(closest(element, '.e-rule-container').querySelector('.e-rule-sub-filter .e-dropdownlist'), 'dropdownlist');\n this.selectedColumn = this.getColumn(dropDownObj.value);\n }\n }\n else {\n dropDownObj = getComponent(closest(element, '.e-rule-container').querySelector('.e-filter-input'), 'dropdowntree');\n this.selectedColumn = this.getColumn(dropDownObj.value[0]);\n }\n if (this.selectedColumn.values) {\n value = this.selectedColumn.values[rbValue];\n }\n else {\n var valColl = [true, false];\n value = valColl[rbValue];\n }\n }\n else if (element.className.indexOf('e-multiselect') > -1) {\n value = getComponent(element, 'multiselect').value;\n }\n else {\n value = args.value;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (args.type === 'input' && args.target && args.target.classList.contains('e-numerictextbox')) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n value = Number(args.currentTarget.value);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var elem = args.currentTarget;\n var numericTextBoxObj = getInstance(elem, NumericTextBox);\n var decimalSeparator = getValue('decimal', getNumericObject(this.locale));\n if (isNaN(value) && elem.value.indexOf(decimalSeparator) !== -1) {\n value = this.intl.getNumberParser({ format: 'n' })(elem.value);\n }\n if (!isNaN(value)) {\n numericTextBoxObj.value = value;\n }\n this.isNumInput = true;\n }\n }\n if (args.name === 'input' && this.immediateModeDelay) {\n window.clearInterval(this.timer);\n this.timer = window.setInterval(function () { _this.filterValue(groupID, ruleID, value, i, element); }, this.immediateModeDelay);\n }\n else {\n this.filterValue(groupID, ruleID, value, i, element);\n }\n };\n QueryBuilder.prototype.filterValue = function (grID, rlID, value, i, ele) {\n var _this = this;\n var eventsArgs = { groupID: grID, ruleID: rlID, value: value, cancel: false, type: 'value' };\n window.clearInterval(this.timer);\n if (!this.isImportRules) {\n this.trigger('beforeChange', eventsArgs, function (observedChangeArgs) {\n _this.changeValueSuccessCallBack(observedChangeArgs, ele, i, grID, rlID);\n });\n }\n else {\n this.changeValueSuccessCallBack(eventsArgs, ele, i, grID, rlID);\n }\n };\n QueryBuilder.prototype.changeValueSuccessCallBack = function (args, element, i, groupID, ruleID) {\n if (!args.cancel) {\n this.updateRules(element, args.value, i);\n if (!this.isImportRules) {\n this.trigger('change', { groupID: groupID, ruleID: ruleID, value: args.value, cancel: false, type: 'value' });\n }\n }\n };\n QueryBuilder.prototype.fieldClose = function (id) {\n if (this.isFieldChange || this.isDestroy) {\n return;\n }\n this.isFieldClose = true;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var ddl = getComponent(id, 'dropdownlist');\n var item = ddl.popupObj && ddl.popupObj.element.querySelector('.e-active');\n var itemData = ddl.getItemData();\n ddl.value = itemData.value;\n var customArgs = { element: ddl.element, value: itemData.value, isInteracted: true,\n previousItemData: this.prevItemData, previousItem: null, item: item, itemData: itemData, event: null, e: null };\n if (ddl.previousValue !== ddl.value) {\n this.changeField(customArgs);\n }\n this.isFieldChange = false;\n };\n QueryBuilder.prototype.changeField = function (args) {\n if (args.isInteracted) {\n if (isNullOrUndefined(args.value)) {\n return;\n }\n this.isFieldChange = true;\n this.prevItemData = args.itemData;\n var fieldElem = closest(args.element, '.e-rule-filter') || closest(args.element, '.e-rule-sub-filter');\n var column = this.fieldMode === 'DropdownTree' ? this.getColumn(args.value[0]) : this.getColumn(args.value);\n if (this.fieldMode === 'DropdownTree' && fieldElem !== null) {\n var ddtElem = fieldElem.querySelector('.e-dropdowntree.e-control');\n var ddt = getComponent(ddtElem, 'dropdowntree');\n if (column) {\n if (column.type === 'object') {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ddt.value = args.oldValue;\n ddt.dataBind();\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (isNullOrUndefined(args.oldValue)) {\n ddtElem.value = '';\n }\n else {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var result = this.getLabelFromColumn(args.oldValue[0]);\n ddtElem.value = result;\n }\n return;\n }\n else {\n if (!isNullOrUndefined(args.value[0])) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ddt.value = args.value[0];\n ddt.dataBind();\n var result = this.getLabelFromColumn(args.value[0]);\n ddtElem.value = result;\n }\n }\n }\n else {\n return;\n }\n }\n this.destroySubFields(fieldElem);\n this.subFieldElem = null;\n this.isNotValueChange = true;\n if (column && column.ruleTemplate) {\n this.templateChange(args.element, column.field, 'field');\n }\n else if (column && column.columns && column.columns[0].ruleTemplate) {\n this.templateChange(args.element, column.columns[0].field, 'field');\n }\n else {\n var groupElem = closest(args.element, '.e-group-container');\n var rules = this.getParentGroup(groupElem);\n var ruleElem = closest(args.element, '.e-rule-container');\n var index = 0;\n while (ruleElem && ruleElem.previousElementSibling !== null) {\n ruleElem = ruleElem.previousElementSibling;\n if (!this.enableSeparateConnector || (this.enableSeparateConnector &&\n ((!this.headerTemplate && !ruleElem.classList.contains('e-btn-group')) ||\n this.headerTemplate && (ruleElem.classList.contains('e-rule-container') ||\n ruleElem.classList.contains('e-group-container'))))) {\n index++;\n }\n }\n rules.rules[index].value = '';\n this.changeRule(rules.rules[index], args);\n }\n }\n };\n QueryBuilder.prototype.changeRule = function (rule, ddlArgs) {\n if (!ddlArgs.itemData) {\n if (this.fieldMode === 'DropdownTree') {\n var ddt = getComponent(ddlArgs.element, 'dropdowntree');\n if (ddt.value == null) {\n return;\n }\n }\n else {\n return;\n }\n }\n var tempRule = {};\n var filterElem = closest(ddlArgs.element, '.e-rule-filter');\n filterElem = filterElem ? filterElem : closest(ddlArgs.element, '.e-rule-sub-filter');\n var ddlObj = getComponent(ddlArgs.element, 'dropdownlist');\n if (this.fieldMode === 'DropdownTree' && filterElem !== null) {\n ddlObj = getComponent(ddlArgs.element, 'dropdowntree');\n }\n var element = closest(ddlArgs.element, '.e-group-container');\n var groupID = element.id.replace(this.element.id + '_', '');\n this.changeFilter(filterElem, ddlObj, groupID, rule, tempRule, ddlArgs);\n };\n QueryBuilder.prototype.changeFilter = function (flt, dl, grID, rl, tmpRl, dArg) {\n var _this = this;\n if (flt) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var ddlValue = void 0;\n if (this.fieldMode === 'DropdownTree') {\n ddlValue = (dl.value[0]);\n }\n else {\n ddlValue = this.isImportRules ? this.GetRootColumnName(dl.value) : dl.value;\n }\n this.selectedColumn = this.getColumn(ddlValue);\n var ruleElem = closest(flt, '.e-rule-container');\n var ruleID = ruleElem.id.replace(this.element.id + '_', '');\n var eventsArgs = { groupID: grID, ruleID: ruleID, selectedField: this.fieldMode === 'DropdownTree' ?\n dl.value[0] : dl.value, cancel: false, type: 'field' };\n if (!this.isImportRules && !this.prvtEvtTgrDaD) {\n this.trigger('beforeChange', eventsArgs, function (observedChangeArgs) {\n _this.fieldChangeSuccess(observedChangeArgs, tmpRl, flt, rl, dArg);\n });\n }\n else {\n this.fieldChangeSuccess(eventsArgs, tmpRl, flt, rl, dArg);\n }\n }\n else {\n var operatorElem = closest(dArg.element, '.e-rule-operator');\n this.changeOperator(flt, operatorElem, dl, grID, rl, tmpRl, dArg);\n }\n };\n QueryBuilder.prototype.changeOperator = function (\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n flt, opr, dl, grID, rl, tmpRl, dArg) {\n var _this = this;\n var ruleElem;\n var ruleID;\n var eventsArgs;\n if (opr) {\n ruleElem = closest(opr, '.e-rule-container');\n ruleID = ruleElem.id.replace(this.element.id + '_', '');\n eventsArgs = { groupID: grID, ruleID: ruleID, selectedIndex: dl.index, cancel: false, type: 'operator' };\n if (!this.isImportRules) {\n this.trigger('beforeChange', eventsArgs, function (observedChangeArgs) {\n _this.operatorChangeSuccess(observedChangeArgs, flt, tmpRl, rl, dArg);\n });\n }\n else {\n this.operatorChangeSuccess(eventsArgs, flt, tmpRl, rl, dArg);\n }\n }\n else {\n this.changeRuleValues(flt, rl, tmpRl, dArg);\n }\n };\n QueryBuilder.prototype.fieldChangeSuccess = function (args, tempRule, filterElem, rule, ddlArgs) {\n var ruleElem = closest(filterElem, '.e-rule-container');\n var operatorElem = closest(ddlArgs.element, '.e-rule-operator');\n var element = closest(ddlArgs.element, '.e-group-container');\n var groupID = element.id.replace(this.element.id + '_', '');\n var ddlObj = getComponent(ddlArgs.element, 'dropdownlist');\n var tooltipElem = ruleElem.querySelectorAll('.e-tooltip.e-input-group');\n for (var i = 0; i < tooltipElem.length; i++) {\n getComponent(tooltipElem[i], 'tooltip').destroy();\n }\n if (!args.cancel) {\n if (isNullOrUndefined(this.selectedColumn)) {\n return;\n }\n tempRule.type = this.selectedColumn.type;\n if (ruleElem.querySelector('.e-template')) {\n rule.value = '';\n }\n if (this.selectedColumn.type === 'object' && this.fieldMode === 'Default') {\n tempRule.type = this.selectedColumn.columns[0].type;\n while (this.selectedColumn.columns) {\n this.createSubFields(filterElem, rule, tempRule, ddlArgs);\n }\n }\n else {\n this.destroySubFields(filterElem);\n this.changeOperator(filterElem, operatorElem, ddlObj, groupID, rule, tempRule, ddlArgs);\n }\n }\n else {\n this.changeOperator(filterElem, operatorElem, ddlObj, groupID, rule, tempRule, ddlArgs);\n }\n };\n QueryBuilder.prototype.destroySubFields = function (filterElem) {\n while (filterElem && filterElem.nextElementSibling.classList.contains('e-rule-sub-filter')) {\n this.destroyControls(filterElem);\n filterElem.nextElementSibling.remove();\n }\n };\n QueryBuilder.prototype.createSubFields = function (filterElem, rule, tempRule, ddlArgs) {\n var subFieldValue = false;\n var fieldElem = closest(filterElem, '.e-rule-field');\n var tempElem = this.createElement('div', { attrs: { class: 'e-rule-sub-filter', id: 'subfilter' + this.subFilterCounter } });\n fieldElem.insertBefore(tempElem, fieldElem.querySelector('.e-rule-operator'));\n var ruleId = closest(tempElem, '.e-rule-container').id;\n var subFieldElem = this.createElement('input', { attrs: { type: 'text', id: ruleId + '_subfilterkey' + this.subFilterCounter } });\n tempElem.appendChild(subFieldElem);\n var height = (this.element.className.indexOf('e-device') > -1) ? '250px' : '200px';\n var ddlField;\n ddlField = {\n dataSource: this.selectedColumn.columns,\n fields: this.fields,\n placeholder: this.l10n.getConstant('SelectField'),\n popupHeight: ((this.selectedColumn.columns.length > 5) ? height : 'auto'),\n change: this.changeField.bind(this),\n index: 0,\n open: this.popupOpen.bind(this, false)\n };\n if (this.fieldModel) {\n ddlField = __assign({}, ddlField, this.fieldModel);\n }\n var dropDownList = new DropDownList(ddlField);\n dropDownList.appendTo('#' + ruleId + '_subfilterkey' + this.subFilterCounter);\n if (this.isImportRules || (this.previousColumn && this.previousColumn.ruleTemplate &&\n this.GetRootColumnName(rule.field) === this.GetRootColumnName(this.previousColumn.field))) {\n var subField = this.selectedColumn.columns;\n for (var i = 0; i < subField.length; i++) {\n if (rule.field === subField[i].field || rule.field.indexOf(subField[i].field + this.separator) > -1) {\n dropDownList.value = subField[i].field;\n this.selectedColumn = subField[i];\n subFieldValue = true;\n break;\n }\n }\n }\n this.subFilterCounter++;\n this.subFieldElem = subFieldElem;\n // eslint-disable-next-line\n ddlArgs.itemData = ddlArgs.itemData;\n if (!subFieldValue && this.selectedColumn.columns) {\n if (!subFieldValue && this.isImportRules) {\n dropDownList.value = null;\n }\n this.selectedColumn = this.selectedColumn.columns[0];\n }\n this.previousColumn = this.selectedColumn;\n if (!this.selectedColumn.columns) {\n this.changeRuleValues(tempElem, rule, tempRule, ddlArgs);\n }\n };\n QueryBuilder.prototype.operatorChangeSuccess = function (eventsArgs, filterElem, tempRule, rule, ddlArgs) {\n if (!eventsArgs.cancel) {\n var operatorElem = closest(ddlArgs.element, '.e-rule-operator');\n var valElem = operatorElem.nextElementSibling;\n var dropDownObj = getComponent(ddlArgs.element, 'dropdownlist');\n var prevOper = rule.operator ? rule.operator.toString().toLowerCase() : '';\n tempRule.operator = dropDownObj.value.toString();\n var currOper = tempRule.operator.toLowerCase();\n if (tempRule.operator.toLowerCase().indexOf('between') > -1 || (tempRule.operator.toLowerCase().indexOf('in') > -1\n && tempRule.operator.toLowerCase().indexOf('contains') < 0)) {\n filterElem = operatorElem.previousElementSibling;\n tempRule.type = rule.type;\n if (tempRule.operator.toLowerCase().indexOf('in') < 0 || prevOper.indexOf('in') < 0) {\n rule.value = [];\n }\n }\n else if (typeof rule.value === 'object' && rule.value !== null) {\n rule.value = rule.value.length > 0 ? rule.value[0] : rule.type === 'number' ? 0 : '';\n }\n if (ddlArgs.previousItemData) {\n var prevValue = ddlArgs.previousItemData.value.toString().toLowerCase();\n if ((prevValue.indexOf('between') > -1 || (prevValue.indexOf('in') > -1 || (prevValue.indexOf('null') > -1)\n || (prevValue.indexOf('empty') > -1)) && prevValue.indexOf('contains') < 0)) {\n filterElem = operatorElem.previousElementSibling;\n tempRule.type = rule.type;\n }\n }\n if ((prevOper.indexOf('in') > -1 && prevOper.indexOf('in') < 5) && (currOper.indexOf('in') > -1\n && currOper.indexOf('in') < 5)) {\n filterElem = null;\n }\n if (tempRule.operator.indexOf('null') > -1 || (tempRule.operator.indexOf('empty') > -1)) {\n var parentElem = operatorElem.parentElement.querySelector('.e-rule-value');\n var tooltipElem = parentElem.querySelector('.e-tooltip.e-input-group');\n if (tooltipElem) {\n getComponent(tooltipElem, 'tooltip').destroy();\n }\n removeClass([parentElem], 'e-show');\n addClass([parentElem], 'e-hide');\n }\n if (valElem && this.getColumn(rule.field).template) {\n filterElem = operatorElem.previousElementSibling;\n }\n if (valElem.children.length === 0) {\n filterElem = operatorElem.previousElementSibling;\n }\n this.changeRuleValues(filterElem, rule, tempRule, ddlArgs);\n }\n };\n QueryBuilder.prototype.changeRuleValues = function (filterElem, rule, tempRule, ddlArgs) {\n var operatorElem = closest(ddlArgs.element, '.e-rule-operator');\n var isSub;\n var ddlObj;\n var operatorList;\n var oprElem;\n if (filterElem) {\n operatorElem = filterElem.nextElementSibling;\n if (filterElem.classList.contains('e-rule-sub-filter')) {\n tempRule.type = this.selectedColumn.type;\n isSub = operatorElem.classList.contains('e-rule-sub-filter');\n operatorElem = isSub ? operatorElem.nextElementSibling : operatorElem;\n }\n addClass([operatorElem], 'e-operator');\n if (operatorElem.childElementCount) {\n ddlObj = getComponent(operatorElem.querySelector('.e-dropdownlist'), 'dropdownlist');\n tempRule.operator = ddlObj.value;\n var fieldObj = void 0;\n if (this.fieldMode === 'DropdownTree') {\n fieldObj = getComponent(filterElem.querySelector('.e-dropdowntree'), 'dropdowntree');\n }\n else {\n fieldObj = getComponent(filterElem.querySelector('.e-dropdownlist'), 'dropdownlist');\n }\n tempRule.type = this.fieldMode === 'DropdownTree' ? this.getColumn(fieldObj.value[0]).type :\n this.getColumn(fieldObj.value).type;\n var itemData = ddlArgs.itemData;\n if (ddlObj.value !== '') {\n this.renderValues(operatorElem, itemData, ddlArgs.previousItemData, true, rule, tempRule, ddlArgs.element);\n }\n }\n else {\n var ruleId = closest(operatorElem, '.e-rule-container').id;\n oprElem = this.createElement('input', { attrs: { type: 'text', id: ruleId + '_operatorkey' } });\n operatorElem.appendChild(oprElem);\n if (this.selectedColumn.operators) {\n operatorList = this.selectedColumn.operators;\n }\n else if (ddlArgs.itemData) {\n operatorList = this.customOperators[this.selectedColumn.type + 'Operator'];\n }\n var height = (this.element.className.indexOf('e-device') > -1) ? '250px' : '200px';\n var operator_2;\n if (rule.operator) {\n operatorList.forEach(function (obj) {\n if ('value' in obj && typeof obj.value === 'string' && obj.value.toLowerCase() === rule.operator.toLowerCase()) {\n operator_2 = obj.value;\n }\n });\n }\n var value = operator_2 ? operator_2 : operatorList[0].value;\n var ddlIdx = 0;\n if (!this.autoSelectOperator) {\n value = '';\n ddlIdx = -1;\n }\n if (this.isImportRules || (this.ruleIndex > -1 || this.groupIndex > -1 || this.prvtEvtTgrDaD)) {\n value = rule ? (rule.operator ? rule.operator : value) : value;\n }\n var ddlOperator = void 0;\n ddlOperator = {\n dataSource: operatorList,\n fields: { text: 'key', value: 'value' },\n placeholder: this.l10n.getConstant('SelectOperator'),\n popupHeight: ((operatorList.length > 5) ? height : 'auto'),\n change: this.changeField.bind(this),\n index: ddlIdx,\n value: value,\n open: this.popupOpen.bind(this, false)\n };\n if (this.operatorModel) {\n ddlOperator = __assign({}, ddlOperator, this.operatorModel);\n }\n var dropDownList = new DropDownList(ddlOperator);\n dropDownList.appendTo('#' + ruleId + '_operatorkey');\n tempRule.operator = (rule && rule.operator !== '' && !isNullOrUndefined(rule.operator)) ? rule.operator : operatorList[0].value;\n if (this.isImportRules) {\n tempRule.type = this.selectedColumn.type;\n tempRule.operator = rule.operator;\n }\n if (!isNullOrUndefined(value) && value !== '') {\n this.renderValues(operatorElem, this.selectedColumn, ddlArgs.previousItemData, false, rule, tempRule, ddlArgs.element);\n }\n else if (this.autoSelectField && this.autoSelectOperator) {\n this.renderValues(operatorElem, this.selectedColumn, ddlArgs.previousItemData, false, rule, tempRule, ddlArgs.element);\n }\n }\n }\n if (!this.isImportRules) {\n this.updateRules(ddlArgs.element, ddlArgs.item);\n }\n };\n QueryBuilder.prototype.popupOpen = function (isField, args) {\n if (this.enableRtl) {\n addClass([args.popup.element], 'e-rtl');\n }\n if (isField) {\n this.isFieldClose = false;\n }\n };\n QueryBuilder.prototype.destroyControls = function (target, isRuleTemplate) {\n var element = isRuleTemplate ? target : target.nextElementSibling;\n var inputElement = element.querySelectorAll('input.e-control');\n var divElement = element.querySelectorAll('div.e-control:not(.e-handle)');\n var columns = this.columns;\n for (var i = 0, len = inputElement.length; i < len; i++) {\n if (inputElement[i].classList.contains('e-textbox')) {\n getComponent(inputElement[i], 'textbox').destroy();\n detach(select('input#' + inputElement[i].id, element));\n }\n else if (inputElement[i].classList.contains('e-dropdownlist')) {\n if (this.allowValidation && inputElement[i].parentElement.className.indexOf('e-tooltip') > -1) {\n getComponent(inputElement[i].parentElement, 'tooltip').destroy();\n }\n getComponent(inputElement[i], 'dropdownlist').destroy();\n }\n else if (inputElement[i].classList.contains('e-radio')) {\n getComponent(inputElement[i], 'radio').destroy();\n }\n else if (inputElement[i].classList.contains('e-numerictextbox')) {\n getComponent(inputElement[i], 'numerictextbox').destroy();\n detach(select('input#' + inputElement[i].id, element));\n }\n else if (inputElement[i].classList.contains('e-datepicker')) {\n getComponent(inputElement[i], 'datepicker').destroy();\n }\n else if (inputElement[i].classList.contains('e-multiselect')) {\n getComponent(inputElement[i], 'multiselect').destroy();\n }\n else if (inputElement[i].className.indexOf('e-template') > -1) {\n var clsName = inputElement[i].className;\n for (var j = 0, jLen = columns.length; j < jLen; j++) {\n if (columns[j].template && clsName.indexOf(columns[j].field) > -1) {\n this.templateDestroy(columns[j], inputElement[i].id);\n break;\n }\n }\n }\n if (document.getElementById(inputElement[i].id)) {\n detach(inputElement[i]);\n }\n }\n for (var i = 0, len = divElement.length; i < len; i++) {\n if (divElement[i].className.indexOf('e-template') > -1) {\n var clsName = divElement[i].className;\n for (var j = 0, jLen = columns.length; j < jLen; j++) {\n if (columns[j].template && clsName.indexOf(columns[j].field) > -1) {\n this.templateDestroy(columns[j], divElement[i].id);\n break;\n }\n }\n }\n detach(divElement[i]);\n }\n var templateElement = element.querySelectorAll('.e-template:not(.e-control)');\n for (var i = 0, len = templateElement.length; i < len; i++) {\n detach(templateElement[i]);\n }\n };\n QueryBuilder.prototype.templateDestroy = function (column, elemId) {\n var template;\n if (typeof column.template !== 'string' || column.template.destroy === undefined) {\n template = column.template;\n }\n else {\n return;\n }\n var temp = template.destroy;\n if (template.destroy) {\n var templateElements = void 0;\n if (document.getElementById(elemId)) {\n templateElements = closest(document.getElementById(elemId), '.e-rule-field').querySelectorAll('.e-template');\n }\n if (typeof temp === 'string') {\n temp = getValue(temp, window);\n temp({ field: column.field, elementId: elemId, elements: templateElements });\n }\n else {\n template.destroy({ field: column.field, elementId: elemId, elements: templateElements });\n }\n }\n };\n /**\n * Return values bound to the column.\n *\n * @param {string} field - 'field' to be passed to get the field values.\n * @returns {object[]} - Values bound to the column\n */\n QueryBuilder.prototype.getValues = function (field) {\n var original = {};\n var result = [];\n var value;\n var fieldColl = [];\n if (this.separator.length > 0) {\n fieldColl = field.split(this.separator);\n }\n var dataSource = this.dataColl;\n if (this.dataColl[1]) {\n for (var i = 0, iLen = dataSource.length; i < iLen; i++) {\n var data = {};\n if (fieldColl.length > 1) {\n var dataObj = dataSource[i];\n var fieldStr = void 0;\n for (var j = 0, jLen = fieldColl.length; j < jLen; j++) {\n fieldStr = fieldColl[j];\n if (fieldColl.length === (j + 1)) {\n value = dataObj[\"\" + fieldStr];\n if (Number(dataObj[\"\" + fieldStr]) === dataObj[\"\" + fieldStr] && dataObj[\"\" + fieldStr] % 1 !== 0) {\n value = dataObj[\"\" + fieldStr].toString();\n }\n }\n else {\n dataObj = dataObj[\"\" + fieldStr];\n }\n }\n }\n else {\n value = dataSource[i][\"\" + field];\n if (Number(dataSource[i][\"\" + field]) === dataSource[i][\"\" + field] && dataSource[i][\"\" + field] % 1 !== 0) {\n value = dataSource[i][\"\" + field].toString();\n }\n }\n if (!(value in original)) {\n original[\"\" + value] = 1;\n if (fieldColl.length > 1) {\n this.createNestedObject(data, fieldColl, value);\n }\n else {\n data[\"\" + field] = value;\n }\n result.push(data);\n }\n }\n }\n return result;\n };\n QueryBuilder.prototype.createNestedObject = function (obj, fieldColl, value) {\n var key;\n var lastIndex = fieldColl.length - 1;\n for (var k = 0; k < lastIndex; ++k) {\n key = fieldColl[k];\n if (!(key in obj)) {\n obj[\"\" + key] = {};\n }\n obj = obj[\"\" + key];\n }\n obj[fieldColl[lastIndex]] = value;\n };\n QueryBuilder.prototype.getDistinctValues = function (dataSource, field) {\n var original = {};\n var result = [];\n var nest = [];\n var value = '';\n var isNested = field.indexOf(this.separator);\n var _loop_2 = function (i, iLen) {\n value = '';\n if (isNested === 0) {\n value = dataSource[i][\"\" + field];\n }\n else {\n nest = field.split(this_2.separator);\n // eslint-disable-next-line @typescript-eslint/tslint/config\n nest.forEach(function (element) {\n if (value) {\n value = value[\"\" + element];\n }\n else {\n value = dataSource[i][\"\" + element];\n }\n });\n }\n if (Number(dataSource[i][\"\" + field]) === dataSource[i][\"\" + field] && dataSource[i][\"\" + field] % 1 !== 0) {\n value = dataSource[i][\"\" + field].toString();\n }\n var data = {};\n if (!(value in original)) {\n original[\"\" + value] = 1;\n if (isNested === 0) {\n data[\"\" + field] = value;\n }\n else {\n data[nest[nest.length - 1]] = value;\n }\n result.push(data);\n }\n };\n var this_2 = this;\n for (var i = 0, iLen = dataSource.length; i < iLen; i++) {\n _loop_2(i, iLen);\n }\n return result;\n };\n QueryBuilder.prototype.renderMultiSelect = function (rule, parentId, i, selectedValue, values) {\n var isFetched = false;\n var ds;\n var isValues = false;\n this.isGetNestedData = false;\n if (this.dataColl[1]) {\n if (Object.keys(this.dataColl[1]).indexOf(rule.field) > -1) {\n isFetched = true;\n ds = this.getDistinctValues(this.dataColl, rule.field);\n }\n }\n isFetched = rule.columns ? false : isFetched;\n if (!this.dataColl.length && values.length) {\n isValues = true;\n }\n var multiSelectValue;\n multiSelectValue = {\n dataSource: isValues ? values : (isFetched ? ds : this.dataManager),\n query: new Query([rule.field]),\n fields: { text: this.selectedRule.field, value: this.selectedRule.field },\n placeholder: this.l10n.getConstant('SelectValue'),\n value: selectedValue,\n mode: 'CheckBox',\n width: '100%',\n change: this.changeValue.bind(this, i),\n close: this.closePopup.bind(this, i),\n actionBegin: this.multiSelectOpen.bind(this, parentId + '_valuekey' + i),\n open: this.popupOpen.bind(this, false)\n };\n if (this.valueModel && this.valueModel.multiSelectModel) {\n multiSelectValue = __assign({}, multiSelectValue, this.valueModel.multiSelectModel);\n }\n var multiSelectObj = new MultiSelect(multiSelectValue);\n multiSelectObj.appendTo('#' + parentId + '_valuekey' + i);\n this.updateRules(multiSelectObj.element, selectedValue, 0);\n };\n QueryBuilder.prototype.multiSelectOpen = function (parentId, args) {\n if (this.dataSource instanceof DataManager) {\n var element = document.getElementById(parentId);\n var dropDownObj = getComponent(closest(element, '.e-rule-container').querySelector('.e-filter-input'), this.fieldMode === 'DropdownTree' ? 'dropdowntree' : 'dropdownlist');\n if (this.fieldMode === 'DropdownTree') {\n this.selectedColumn = this.getColumn(dropDownObj.value[0]);\n }\n else {\n this.selectedColumn = dropDownObj.getDataByValue(dropDownObj.value);\n }\n var value = this.selectedColumn.field;\n var isFetched = false;\n if (this.dataColl[1]) {\n if (Object.keys(this.dataColl[1]).indexOf(value) > -1) {\n isFetched = true;\n }\n var isNest = value.indexOf(this.separator);\n if (isNest !== 0 && this.isGetNestedData) {\n isFetched = true;\n }\n }\n if (!isFetched) {\n args.cancel = true;\n this.bindMultiSelectData(element, value);\n }\n }\n };\n QueryBuilder.prototype.bindMultiSelectData = function (element, value) {\n this.getMultiSelectData(element, value);\n };\n QueryBuilder.prototype.getMultiSelectData = function (element, value) {\n var _this = this;\n var dummyData;\n var deferred = new Deferred();\n var data = this.dataManager.executeQuery(new Query().select(value));\n var multiselectObj = getComponent(element, 'multiselect');\n multiselectObj.hideSpinner();\n this.createSpinner(closest(element, '.e-multi-select-wrapper').parentElement);\n showSpinner(closest(element, '.e-multi-select-wrapper').parentElement);\n data.then(function (e) {\n if (e.actual && e.actual.result) {\n dummyData = e.actual.result;\n }\n else {\n dummyData = e.result;\n }\n _this.dataColl = extend(_this.dataColl, dummyData, [], true);\n multiselectObj.dataSource = _this.getDistinctValues(_this.dataColl, value);\n _this.isGetNestedData = true;\n hideSpinner(closest(element, '.e-multi-select-wrapper').parentElement);\n }).catch(function (e) {\n deferred.reject(e);\n });\n };\n QueryBuilder.prototype.createSpinner = function (element) {\n var spinnerElem = this.createElement('span', { attrs: { class: 'e-qb-spinner' } });\n element.appendChild(spinnerElem);\n createSpinner({ target: spinnerElem, width: Browser.isDevice ? '16px' : '14px' });\n };\n QueryBuilder.prototype.closePopup = function (i, args) {\n var element = document.getElementById(args.popup.element.id.replace('_popup', ''));\n if (element) {\n var ms = getComponent(element, 'multiselect');\n if (ms) {\n var value = ms.value;\n this.updateRules(element, value, i);\n }\n }\n };\n QueryBuilder.prototype.processTemplate = function (target, itemData, rule, tempRule) {\n var container = closest(target, '.e-rule-container');\n var tempElements = container.querySelectorAll('.e-template');\n var filterElem = container.querySelector('.e-rule-filter .e-filter-input');\n var ddlObj = this.fieldMode === 'DropdownTree' ? getComponent(filterElem, 'dropdowntree')\n : getComponent(container.querySelector('.e-rule-filter .e-filter-input'), 'dropdownlist');\n var column = this.fieldMode === 'DropdownTree' ? this.getColumn(ddlObj.value[0]) : this.getColumn(ddlObj.value);\n if (typeof itemData.template === 'string' || itemData.template.write === undefined) {\n var args = { rule: rule, ruleID: container.id, operator: tempRule.operator, field: column.field,\n requestType: 'value-template-create' };\n this.trigger('actionBegin', args);\n }\n else {\n var template = itemData.template;\n if (typeof template.write === 'string') {\n getValue(template.write, window)({ elements: tempElements.length > 1 ? tempElements : tempElements[0], values: rule.value,\n operator: tempRule.operator, field: column.field, dataSource: column.values });\n }\n else if (typeof itemData.template !== 'function') {\n itemData.template.write({ elements: tempElements.length > 1 ? tempElements : tempElements[0],\n values: rule.value, operator: tempRule.operator, field: column.field, dataSource: column.values });\n }\n }\n };\n QueryBuilder.prototype.getItemData = function (parentId) {\n var fieldObj = getComponent(document.getElementById(parentId + '_filterkey'), 'dropdownlist');\n var parentFieldObj = this.element.querySelector(\"#\" + parentId);\n if (this.fieldMode === 'DropdownTree') {\n fieldObj = getComponent(document.getElementById(parentId + '_filterkey'), 'dropdowntree');\n }\n else if (parentFieldObj) {\n var subFieldObjList = parentFieldObj.querySelectorAll('.e-rule-sub-filter');\n if (subFieldObjList.length > 0) {\n var lastSubFieldObj = subFieldObjList[subFieldObjList.length - 1].querySelector('.e-dropdownlist');\n fieldObj = getComponent(lastSubFieldObj, 'dropdownlist');\n }\n }\n return this.fieldMode === 'DropdownTree' ? this.getColumn(fieldObj.value[0]) : this.getColumn(fieldObj.value);\n };\n QueryBuilder.prototype.setDefaultValue = function (parentId, isArryValue, isNumber) {\n var itemData = this.getItemData(parentId);\n if (isNullOrUndefined(itemData.value)) {\n return isNumber ? isArryValue ? [0, 0] : 0 : isArryValue ? [] : '';\n }\n if (isArryValue) {\n if (!(itemData.value instanceof Array)) {\n return [itemData.value];\n }\n }\n else {\n if (itemData.value instanceof Array) {\n return itemData.value[0];\n }\n }\n return itemData.value;\n };\n QueryBuilder.prototype.renderStringValue = function (parentId, rule, operator, idx, ruleValElem) {\n var selectedVal;\n var columnData = this.getItemData(parentId);\n var selectedValue;\n var isTemplate = (typeof columnData.template === 'string');\n if (this.isImportRules || this.ruleIndex > -1 || this.groupIndex > -1 || this.isPublic || isTemplate || rule.value !== '') {\n selectedValue = rule.value;\n }\n else {\n selectedValue = this.setDefaultValue(parentId, false, false);\n }\n if ((operator === 'in' || operator === 'notin') && (this.dataColl.length || columnData.values)) {\n selectedVal = (this.isImportRules || this.ruleIndex > -1 || this.groupIndex > -1 || this.isPublic) ? rule.value :\n this.setDefaultValue(parentId, true, false);\n this.renderMultiSelect(columnData, parentId, idx, selectedVal, columnData.values);\n if (this.displayMode === 'Vertical' || this.element.className.indexOf('e-device') > -1) {\n ruleValElem.style.width = '100%';\n }\n else {\n ruleValElem.style.width = null;\n ruleValElem.style.minWidth = '200px';\n }\n }\n else {\n if (operator === 'in' || operator === 'notin') {\n selectedVal = (this.isImportRules || this.ruleIndex > -1 || this.groupIndex > -1) ? rule.value :\n this.setDefaultValue(parentId, true, false);\n selectedValue = selectedVal.join(',');\n }\n if (operator === 'between' || operator === 'notbetween') {\n if (selectedValue.length > 1) {\n selectedValue = selectedValue[idx];\n }\n }\n var txtBox = void 0;\n txtBox = {\n placeholder: this.l10n.getConstant('SelectValue'),\n input: this.changeValue.bind(this, idx)\n };\n if (this.valueModel && this.valueModel.textBoxModel) {\n txtBox = __assign({}, txtBox, this.valueModel.textBoxModel);\n }\n var inputobj = new TextBox(txtBox);\n inputobj.appendTo('#' + parentId + '_valuekey' + idx);\n inputobj.value = selectedValue;\n inputobj.dataBind();\n }\n };\n QueryBuilder.prototype.renderNumberValue = function (parentId, rule, operator, idx, ruleValElem, itemData, length) {\n var columnData = this.getItemData(parentId);\n var isTemplate = (typeof columnData.template === 'string');\n var selectedVal = (this.isImportRules || this.ruleIndex > -1 || this.groupIndex > -1 || this.isPublic || isTemplate ||\n typeof rule.value === 'number') ? rule.value : this.setDefaultValue(parentId, false, true);\n if ((operator === 'in' || operator === 'notin') && (this.dataColl.length || columnData.values)) {\n selectedVal = (this.isImportRules || this.ruleIndex > -1 || this.groupIndex > -1 || this.isPublic) ? rule.value :\n this.setDefaultValue(parentId, true, false);\n this.renderMultiSelect(columnData, parentId, idx, selectedVal, columnData.values);\n if (this.element.className.indexOf('e-device') > -1 || this.displayMode === 'Vertical') {\n ruleValElem.style.width = '100%';\n }\n else {\n ruleValElem.style.minWidth = '200px';\n ruleValElem.style.width = null;\n }\n }\n else if (operator === 'in' || operator === 'notin') {\n selectedVal = (this.isImportRules || this.ruleIndex > -1 || this.groupIndex > -1) ? rule.value :\n this.setDefaultValue(parentId, true, false);\n var selVal = selectedVal.join(',');\n var txtInp = void 0;\n txtInp = {\n placeholder: this.l10n.getConstant('SelectValue'),\n input: this.changeValue.bind(this, idx)\n };\n if (this.valueModel && this.valueModel.textBoxModel) {\n txtInp = __assign({}, txtInp, this.valueModel.textBoxModel);\n }\n var input = new TextBox(txtInp);\n input.appendTo('#' + parentId + '_valuekey' + idx);\n input.value = selVal;\n input.dataBind();\n }\n else {\n itemData = columnData;\n var min = (itemData.validation && itemData.validation.min) ? itemData.validation.min : 0;\n var max = (itemData.validation && itemData.validation.max) ? itemData.validation.max : Number.MAX_VALUE;\n var format = itemData.format ? itemData.format : 'n';\n if (length > 1 && rule) {\n selectedVal = rule.value[idx] ? rule.value[idx] : this.setDefaultValue(parentId, true, true);\n }\n var numericTxt = void 0;\n numericTxt = {\n value: (selectedVal instanceof Array) ? selectedVal[idx] : selectedVal,\n format: format, min: min, max: max, width: '100%',\n step: itemData.step ? itemData.step : 1,\n change: this.changeValue.bind(this, idx)\n };\n if (this.valueModel && this.valueModel.numericTextBoxModel) {\n numericTxt = __assign({}, numericTxt, this.valueModel.numericTextBoxModel);\n }\n var numeric = new NumericTextBox(numericTxt);\n numeric.appendTo('#' + parentId + '_valuekey' + idx);\n numeric.element.setAttribute('aria-label', itemData.label + ' ' + 'Value');\n numeric.element.oninput = this.changeValue.bind(this, idx);\n }\n };\n QueryBuilder.prototype.processValueString = function (value, type) {\n var numArr = [];\n var strArr = value.split(',');\n if (type === 'string') {\n return strArr;\n }\n else {\n for (var k = 0, kLen = strArr.length; k < kLen; k++) {\n numArr.push(Number(strArr[k]));\n }\n return numArr;\n }\n };\n QueryBuilder.prototype.parseDate = function (value, format) {\n var formatOpt;\n var selectedValue;\n if (format) {\n var dParser = this.intl.getDateParser({ skeleton: 'full', type: 'dateTime' });\n formatOpt = this.getFormat(format);\n selectedValue = dParser(value);\n if (isNullOrUndefined(selectedValue)) {\n selectedValue = this.intl.parseDate(value, formatOpt);\n }\n }\n else {\n selectedValue = new Date(value);\n }\n return selectedValue;\n };\n QueryBuilder.prototype.renderControls = function (target, itemData, rule, tempRule, isRendered) {\n addClass([target.parentElement.querySelector('.e-rule-value')], 'e-value');\n removeClass([target.parentElement.querySelector('.e-rule-value')], 'e-hide');\n addClass([target.parentElement.querySelector('.e-rule-value')], 'e-show');\n if (itemData.template && (itemData.template.create || isRendered)) {\n this.processTemplate(target, itemData, rule, tempRule);\n }\n else {\n var length_1;\n if (tempRule.type === 'boolean') {\n length_1 = this.selectedColumn.values ? this.selectedColumn.values.length : 2;\n }\n else {\n length_1 = tempRule.operator && tempRule.operator.toString().toLowerCase().indexOf('between') > -1 ? 2 : 1;\n }\n var parentId = closest(target, '.e-rule-container').id;\n var ruleValElem = void 0;\n var operator = tempRule.operator.toString();\n if (target.className.indexOf('e-rule-operator') > -1 || target.className.indexOf('e-rule-filter') > -1) {\n ruleValElem = target.parentElement.querySelector('.e-rule-value');\n if (this.element.className.indexOf('e-device') > -1 || this.displayMode === 'Vertical') {\n ruleValElem.style.width = '100%';\n }\n else {\n if (operator !== 'in' && operator !== 'notin') {\n addClass([ruleValElem], 'e-custom-value');\n }\n else {\n removeClass([ruleValElem], 'e-custom-value');\n }\n }\n for (var i = 0; i < length_1; i++) {\n switch (tempRule.type) {\n case 'string':\n {\n this.renderStringValue(parentId, rule, operator, i, ruleValElem);\n }\n break;\n case 'number':\n {\n this.renderNumberValue(parentId, rule, operator, i, ruleValElem, itemData, length_1);\n }\n break;\n case 'boolean':\n this.processBoolValues(itemData, rule, parentId, i);\n break;\n case 'date':\n {\n var selectedValue = new Date();\n var selVal = void 0;\n var column = void 0;\n var format = itemData.format;\n var datepick = void 0;\n var datePicker = void 0;\n var place = this.l10n.getConstant('SelectValue');\n var isTemplate = (typeof itemData.template === 'string');\n if (rule.value && !isNullOrUndefined(format)) {\n selVal = (length_1 > 1) ? rule.value[i] : rule.value;\n selectedValue = this.parseDate(selVal, format) || new Date();\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (!itemData.field && !itemData.key && itemData.value) {\n if (itemData.value instanceof Date) {\n selectedValue = itemData.value;\n }\n else {\n selectedValue = this.parseDate(itemData.value, itemData.format);\n }\n }\n if (!itemData.format && rule && rule.field !== '') {\n column = this.getColumn(rule.field);\n format = column.format;\n }\n if ((this.isImportRules || this.isPublic || isTemplate) && rule) {\n column = this.getColumn(rule.field);\n format = column.format;\n if (rule.value) {\n selVal = (length_1 > 1) ? rule.value[i] : rule.value;\n selectedValue = this.parseDate(selVal, column.format);\n }\n else {\n selectedValue = rule.value;\n }\n }\n if (format) {\n var formatObj = this.getFormat(format);\n if (formatObj.skeleton) {\n datePicker = {\n locale: this.getLocale(), value: selectedValue,\n placeholder: place, format: formatObj, change: this.changeValue.bind(this, i)\n };\n if (this.valueModel && this.valueModel.datePickerModel) {\n datePicker = __assign({}, datePicker, this.valueModel.datePickerModel);\n }\n datepick = new DatePicker(datePicker);\n }\n else {\n datePicker = {\n value: selectedValue, locale: this.getLocale(), placeholder: place,\n format: formatObj.format, change: this.changeValue.bind(this, i)\n };\n if (this.valueModel && this.valueModel.datePickerModel) {\n datePicker = __assign({}, datePicker, this.valueModel.datePickerModel);\n }\n datepick = new DatePicker(datePicker);\n }\n }\n else {\n datePicker = {\n locale: this.getLocale(), value: selectedValue,\n placeholder: place, change: this.changeValue.bind(this, i)\n };\n if (this.valueModel && this.valueModel.datePickerModel) {\n datePicker = __assign({}, datePicker, this.valueModel.datePickerModel);\n }\n datepick = new DatePicker(datePicker);\n }\n datepick.appendTo('#' + parentId + '_valuekey' + i);\n if (!rule.value) {\n var elem = document.getElementById(parentId + '_valuekey' + i);\n this.updateRules(elem, selectedValue, null, this.isNotValueChange);\n this.isNotValueChange = false;\n }\n }\n break;\n }\n }\n }\n }\n };\n QueryBuilder.prototype.processBoolValues = function (itemData, rule, parentId, i) {\n var isCheck = false;\n var value;\n var orgValue;\n if (isNullOrUndefined(rule.type) && itemData) {\n rule.type = itemData.type;\n }\n var label;\n if (itemData.values) {\n var values = itemData.values;\n if (rule.type === 'boolean' && !isNullOrUndefined(rule.value)) {\n isCheck = values[i].toLowerCase() === rule.value.toString().toLowerCase();\n }\n else if (itemData.value) {\n isCheck = values[i].toLowerCase() === itemData.value.toString().toLowerCase();\n }\n else if (i === 0) {\n isCheck = true;\n }\n orgValue = value = label = values[i];\n }\n else {\n var values = [true, false];\n if (rule.type === 'boolean' && !isNullOrUndefined(rule.value)) {\n isCheck = values[i].toString().toLowerCase() === rule.value.toString().toLowerCase();\n }\n else if (itemData.value) {\n isCheck = values[i].toString().toLowerCase() === itemData.value.toString().toLowerCase();\n }\n else if (i === 0) {\n if (typeof rule.value === 'boolean') {\n isCheck = rule.value ? true : false;\n }\n else {\n isCheck = true;\n }\n }\n if (typeof rule.value === 'boolean' && i === 1) {\n isCheck = !rule.value ? true : false;\n }\n value = values[i].toString();\n orgValue = values[i];\n label = this.l10n.getConstant(['True', 'False'][i]);\n }\n var radioBtn;\n radioBtn = {\n label: label, name: parentId + 'default', checked: isCheck, value: value,\n change: this.changeValue.bind(this, i)\n };\n if (this.valueModel && this.valueModel.radioButtonModel) {\n radioBtn = __assign({}, radioBtn, this.valueModel.radioButtonModel);\n }\n var radiobutton = new RadioButton(radioBtn);\n radiobutton.appendTo('#' + parentId + '_valuekey' + i);\n if (isCheck) {\n this.updateRules(radiobutton.element, orgValue, 0, true);\n }\n };\n QueryBuilder.prototype.getOperatorIndex = function (ddlObj, rule) {\n var i;\n var dataSource = ddlObj.dataSource;\n var len = dataSource.length;\n for (i = 0; i < len; i++) {\n if (rule.operator === ddlObj.dataSource[i].value) {\n return i;\n }\n }\n return 0;\n };\n QueryBuilder.prototype.getPreviousItemData = function (prevItemData, column) {\n if (this.isFieldClose && prevItemData) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n prevItemData = this.getColumn(prevItemData.value ? prevItemData.value : prevItemData.field);\n }\n if (column && column.template && prevItemData && Object.keys(prevItemData).length < 4) {\n prevItemData.template = column.template;\n }\n return prevItemData;\n };\n QueryBuilder.prototype.renderValues = function (target, itemData, prevItemData, isRender, rule, tempRule, element) {\n var subFldElem = target.previousElementSibling;\n var filtElem = subFldElem.getElementsByTagName('input')[0];\n var filtObj = this.fieldMode === 'DropdownTree' ? getComponent(filtElem, 'dropdowntree')\n : getComponent(filtElem, 'dropdownlist');\n var column = this.fieldMode === 'DropdownTree' ? this.getColumn(filtObj.value[0])\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n : this.getColumn(filtObj.value);\n this.selectedRule = column;\n var ddlObj = getComponent(target.querySelector('input'), 'dropdownlist');\n if (isRender) {\n itemData = element.id.indexOf('operator') > -1 ? itemData : this.selectedRule;\n if (itemData.operators) {\n ddlObj.value = null;\n ddlObj.dataBind();\n ddlObj.dataSource = itemData.operators;\n ddlObj.index = this.getOperatorIndex(ddlObj, rule);\n ddlObj.value = tempRule.operator = ddlObj.dataSource[ddlObj.index].value;\n if (!this.autoSelectOperator) {\n ddlObj.index = -1;\n tempRule.operator = ddlObj.value = '';\n }\n else {\n ddlObj.dataBind();\n }\n }\n }\n var operator = tempRule.operator.toString();\n var isTempRendered = false;\n if (!(operator.indexOf('null') > -1 || operator.indexOf('isempty') > -1 || operator.indexOf('isnotempty') > -1)) {\n var parentId = closest(target, '.e-rule-container').id;\n prevItemData = this.getPreviousItemData(prevItemData, column);\n if (prevItemData && prevItemData.template === undefined) {\n if (prevItemData.columns) {\n prevItemData = this.getColumn(rule.field);\n }\n }\n else if (this.fieldMode === 'DropdownTree' && prevItemData === undefined) {\n prevItemData = this.getColumn(rule.field);\n }\n if (prevItemData && prevItemData.template) {\n this.templateDestroy(prevItemData, parentId + '_valuekey0');\n var elem = select('#' + parentId + '_valuekey0', target.nextElementSibling);\n if (elem && !elem.classList.contains('e-control')) {\n detach(select('#' + parentId + '_valuekey0', target.nextElementSibling));\n }\n if (typeof prevItemData.template === 'string' || prevItemData.template.create === undefined) {\n if (target.nextElementSibling.classList.contains('e-template-value')) {\n this.clearQBTemplate([parentId]);\n }\n target.nextElementSibling.innerHTML = '';\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.isAngular && !isNullOrUndefined(prevItemData.key) && this.fieldMode === 'DropdownTree') {\n delete prevItemData.template;\n }\n }\n if (isRender) {\n this.validateValue(rule, closest(target, '.e-rule-container'));\n this.destroyControls(target);\n }\n if (this.isImportRules || (ddlObj && ddlObj.value !== '')) {\n if (column) {\n itemData.template = column.template;\n }\n if (itemData.template) {\n addClass([target.nextElementSibling], 'e-template-value');\n itemData.template = column.template;\n isTempRendered = this.setColumnTemplate(itemData, parentId, column.field, itemData.value ||\n operator, target, rule);\n }\n if (isTempRendered) {\n var parentElem = target.parentElement.querySelector('.e-rule-value');\n if (this.element.className.indexOf('e-device') > -1 || this.displayMode === 'Vertical') {\n parentElem.style.width = '100%';\n }\n else {\n parentElem.style.width = '200px';\n }\n }\n else {\n removeClass([target.nextElementSibling], 'e-template-value');\n var inputLen = 1;\n if (tempRule.type === 'boolean') {\n inputLen = this.selectedColumn.values ? this.selectedColumn.values.length : 2;\n }\n else {\n inputLen = (operator && operator.toLowerCase().indexOf('between') > -1) ? 2 : 1;\n }\n for (var i = 0; i < inputLen; i++) {\n var valElem = this.createElement('input', { attrs: { type: 'text', id: parentId + '_valuekey' + i } });\n target.nextElementSibling.appendChild(valElem);\n }\n }\n this.renderControls(target, itemData, rule, tempRule, isTempRendered);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.isAngular && !isNullOrUndefined(itemData.key) && itemData.template && this.fieldMode === 'DropdownTree') {\n delete itemData.template;\n }\n }\n }\n else {\n var parentElem = target.parentElement.querySelector('.e-rule-value');\n if (parentElem) {\n removeClass([parentElem], 'e-show');\n addClass([parentElem], 'e-hide');\n }\n }\n };\n QueryBuilder.prototype.setColumnTemplate = function (itemData, ruleID, field, operator, target, rule) {\n var _this = this;\n var args;\n var isRendered = true;\n if (!itemData.template) {\n return true;\n }\n else {\n if (typeof itemData.template === 'string' || itemData.template.create === undefined) {\n args = { requestType: 'value-template-initialize', ruleID: ruleID, field: field, operator: operator, rule: rule,\n renderTemplate: true };\n this.trigger('actionBegin', args, function (observedActionArgs) {\n isRendered = _this.actionBeginSuccessCallBack(observedActionArgs, itemData, ruleID, field, target);\n });\n return isRendered;\n }\n else {\n var valElem = void 0;\n var template = itemData.template;\n if (typeof template.create === 'string') {\n valElem = getValue(template.create, window)({ field: field, operator: operator });\n }\n else {\n valElem = template.create({ field: field, operator: operator });\n }\n if (valElem instanceof Element) {\n valElem.id = ruleID + '_valuekey0';\n addClass([valElem], 'e-template');\n target.nextElementSibling.appendChild(valElem);\n if (field.indexOf(' ') < 0) {\n addClass([valElem], 'e-' + field);\n }\n }\n else if (valElem instanceof Array) {\n addClass(valElem, 'e-template');\n for (var i = 0, iLen = valElem.length; i < iLen; i++) {\n valElem[i].id = ruleID + '_valuekey' + i;\n target.nextElementSibling.appendChild(valElem[i]);\n }\n }\n addClass([target.nextElementSibling], 'e-template-value');\n return true;\n }\n }\n };\n QueryBuilder.prototype.actionBeginSuccessCallBack = function (args, itemData, ruleID, field, target) {\n if (args.renderTemplate) {\n var valElem = void 0;\n this.columnTemplateFn = this.templateParser(typeof itemData.template === 'function' ? itemData.template : itemData.template);\n var templateID = this.element.id + field;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.isReact) {\n valElem = this.columnTemplateFn(args, this, ruleID, templateID)[0];\n target.nextElementSibling.appendChild(valElem);\n } // eslint-disable-next-line @typescript-eslint/no-explicit-any\n else if (this.isAngular) {\n var valElemColl = this.columnTemplateFn(args, this, ruleID, templateID);\n valElem = (valElemColl[0].nodeType === 3) ? valElemColl[1] : valElemColl[0];\n target.nextElementSibling.appendChild(valElem);\n } // eslint-disable-next-line @typescript-eslint/no-explicit-any\n else if (this.isVue3) {\n valElem = this.columnTemplateFn(args, this, 'Template', templateID);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n append(valElem, target.nextElementSibling);\n }\n else {\n valElem = this.columnTemplateFn(args, this, 'Template', templateID)[0];\n target.nextElementSibling.appendChild(valElem);\n }\n addClass([target.nextElementSibling], 'e-template-value');\n this.renderReactTemplates();\n return true;\n }\n else {\n return false;\n }\n };\n QueryBuilder.prototype.updateValues = function (element, rule) {\n var idx = 1;\n if (element.className.indexOf('e-template') > -1) {\n idx = 3;\n }\n var controlName = element.className.split(' e-')[idx];\n var i = parseInt(element.id.slice(-1), 2);\n var column;\n var format;\n var selectedDate;\n var value;\n var radioBtnObj;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var textboxValue;\n switch (controlName) {\n case 'checkbox':\n value = getComponent(element, controlName).value;\n rule.value = (value !== '') ? value : undefined;\n break;\n case 'textbox':\n textboxValue = getComponent(element, controlName).value;\n if (rule.operator.indexOf('between') > -1) {\n if (typeof rule.value === 'string') {\n rule.value = [];\n }\n rule.value[i] = textboxValue;\n }\n else {\n rule.value = textboxValue;\n }\n break;\n case 'dropdownlist':\n rule.value = getComponent(element, controlName).value;\n break;\n case 'radio':\n radioBtnObj = getComponent(element, controlName);\n if (radioBtnObj.checked) {\n if (typeof rule.value === 'boolean') {\n rule.value = radioBtnObj.value === 'true';\n }\n else {\n if (this.getColumn(rule.field).values) {\n rule.value = radioBtnObj.value;\n }\n else {\n rule.value = radioBtnObj.value === 'true';\n }\n }\n }\n radioBtnObj.refresh();\n break;\n case 'numerictextbox':\n if (rule.operator.indexOf('between') > -1) {\n if (typeof rule.value === 'string') {\n rule.value = [];\n }\n rule.value[i] = getComponent(element, controlName).value;\n }\n else {\n rule.value = getComponent(element, controlName).value;\n }\n break;\n case 'datepicker':\n column = this.getColumn(rule.field);\n format = this.getFormat(column.format);\n selectedDate = getComponent(element, controlName).value;\n if (rule.operator.indexOf('between') > -1) {\n if (typeof rule.value === 'string') {\n rule.value = [];\n }\n rule.value[i] = this.intl.formatDate(selectedDate, format);\n }\n else if (isNullOrUndefined(format.format) && selectedDate) {\n rule.value = this.intl.formatDate(selectedDate);\n }\n else if (selectedDate) {\n rule.value = this.intl.formatDate(selectedDate, format);\n }\n else {\n rule.value = selectedDate;\n }\n break;\n case 'multiselect':\n rule.value = getComponent(element, controlName).value;\n break;\n }\n };\n QueryBuilder.prototype.updateRules = function (target, selectedValue, i, isNotTrigger) {\n var groupElem = closest(target, '.e-group-container');\n var rule = this.getParentGroup(groupElem);\n var ruleElem = closest(target, '.e-rule-container');\n var index = 0;\n var dropDownObj;\n var eventsArgs;\n var groupID = groupElem.id.replace(this.element.id + '_', '');\n var beforeRules = this.getValidRules(this.rule);\n while (ruleElem && ruleElem.previousElementSibling !== null) {\n ruleElem = ruleElem.previousElementSibling;\n if (!this.enableSeparateConnector || (this.enableSeparateConnector &&\n ((!this.headerTemplate && !ruleElem.classList.contains('e-btn-group')) ||\n this.headerTemplate && (ruleElem.classList.contains('e-rule-container') ||\n ruleElem.classList.contains('e-group-container'))))) {\n index++;\n }\n }\n var operator = rule.rules[index].operator ? rule.rules[index].operator.toString() : '';\n ruleElem = closest(target, '.e-rule-container');\n var ruleID = ruleElem.id.replace(this.element.id + '_', '');\n if (closest(target, '.e-rule-filter') || closest(target, '.e-rule-sub-filter')) {\n if (this.subFieldElem) {\n target = this.subFieldElem;\n }\n dropDownObj = this.fieldMode === 'DropdownTree' ? getComponent(target, 'dropdowntree') :\n getComponent(target, 'dropdownlist');\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var column = this.fieldMode === 'DropdownTree' ? this.getColumn(dropDownObj.value[0])\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n : this.getColumn(dropDownObj.value);\n if (!this.isImportRules && rule.rules[index].field &&\n rule.rules[index].field.toLowerCase() !== column.field.toLowerCase()) {\n if (!(ruleElem.querySelectorAll('.e-template')) && !(operator.indexOf('null') > -1)\n || (operator.indexOf('empty') > -1)) {\n rule.rules[index].value = '';\n }\n }\n this.selectedColumn = this.getColumn(this.selectedColumn.field);\n rule.rules[index].field = this.selectedColumn.field;\n rule.rules[index].type = this.selectedColumn.type;\n rule.rules[index].label = this.selectedColumn.label;\n var ruleElement = closest(target, '.e-rule-filter');\n ruleElement = ruleElement ? ruleElement : closest(target, '.e-rule-sub-filter');\n var element = ruleElement.nextElementSibling.querySelector('input.e-control');\n element = element ? element : ruleElement.nextElementSibling.nextElementSibling.querySelector('input.e-control');\n operator = getComponent(element, 'dropdownlist').value.toString();\n rule.rules[index].operator = operator;\n // Value Fields\n var valueContainer = ruleElement.nextElementSibling.nextElementSibling;\n var elementCln = valueContainer.querySelectorAll('input.e-control');\n if (elementCln.length < 1) {\n elementCln = valueContainer.querySelectorAll('div.e-control');\n }\n if (elementCln.length < 1) {\n elementCln = valueContainer.querySelectorAll('.e-template');\n }\n eventsArgs = { groupID: groupID, ruleID: ruleID, value: rule.rules[index].field, type: 'field' };\n for (var i_1 = 0; i_1 < elementCln.length; i_1++) {\n if (operator.indexOf('null') > -1 || operator.indexOf('empty') > -1) {\n rule.rules[index].value = null;\n continue;\n }\n this.updateValues(elementCln[i_1], rule.rules[index]);\n }\n if (!this.isImportRules && !this.prvtEvtTgrDaD) {\n this.trigger('change', eventsArgs);\n }\n if (this.allowValidation && rule.rules[index].field && target.parentElement.className.indexOf('e-tooltip') > -1) {\n getComponent(target.parentElement, 'tooltip').destroy();\n }\n this.filterRules(beforeRules, this.getValidRules(this.rule), 'field');\n }\n else if (closest(target, '.e-rule-operator')) {\n dropDownObj = getComponent(target, 'dropdownlist');\n rule.rules[index].operator = dropDownObj.value.toString();\n var inputElem = ruleElem.querySelectorAll('.e-rule-value input.e-control');\n eventsArgs = { groupID: groupID, ruleID: ruleID, value: dropDownObj.value, type: 'operator' };\n if (this.allowValidation && rule.rules[index].operator && target.parentElement.className.indexOf('e-tooltip') > -1) {\n getComponent(target.parentElement, 'tooltip').destroy();\n }\n if (inputElem.length > 1 && !(inputElem[0].className.indexOf('e-template') > -1)) {\n rule.rules[index].value = [];\n }\n for (var i_2 = 0; i_2 < inputElem.length; i_2++) {\n if (rule.rules[index].operator.indexOf('null') > -1 || rule.rules[index].operator.indexOf('empty') > -1) {\n rule.rules[index].value = null;\n continue;\n }\n else if (inputElem[i_2].classList.contains('e-template')) {\n continue;\n }\n this.updateValues(inputElem[i_2], rule.rules[index]);\n }\n if (!this.isImportRules) {\n this.trigger('change', eventsArgs);\n }\n this.filterRules(beforeRules, this.getValidRules(this.rule), 'operator');\n }\n else if (closest(target, '.e-rule-value')) {\n this.ruleValueUpdate(target, selectedValue, rule, index, groupElem, ruleElem, i);\n if (!isNotTrigger) {\n this.filterRules(beforeRules, this.getValidRules(this.rule), 'value');\n }\n }\n };\n QueryBuilder.prototype.filterRules = function (beforeRule, afterRule, type) {\n var beforeRuleStr = JSON.stringify({ condition: beforeRule.condition, not: beforeRule.not, rule: beforeRule.rules });\n var afetrRuleStr = JSON.stringify({ condition: afterRule.condition, not: afterRule.not, rule: afterRule.rules });\n if (beforeRuleStr !== afetrRuleStr) {\n if (!this.isImportRules && !this.prvtEvtTgrDaD) {\n this.trigger('ruleChange', { previousRule: beforeRule, rule: afterRule, type: type });\n }\n }\n };\n QueryBuilder.prototype.ruleValueUpdate = function (target, selectedValue, rule, index, groupElem, ruleElem, i) {\n var eventsArgs;\n var oper;\n var arrOperator = ['in', 'between', 'notin', 'notbetween'];\n if (rule.rules[index].operator) {\n oper = rule.rules[index].operator.toString().toLowerCase();\n }\n if (selectedValue !== null) {\n if (target.className.indexOf('e-multiselect') > -1 && rule.rules[index].type === 'number' &&\n !this.isNotified) {\n var selVal = [];\n var dupSelectedValue = selectedValue;\n for (var k = 0, kLen = dupSelectedValue.length; k < kLen; k++) {\n if (typeof dupSelectedValue[k] === 'string') {\n selVal.push(parseFloat(dupSelectedValue[k]));\n }\n }\n if (selVal.length) {\n selectedValue = selVal;\n }\n }\n if (this.isNotified) {\n rule.rules[index].value = selectedValue;\n eventsArgs = { groupID: groupElem.id, ruleID: ruleElem.id, value: rule.rules[index].value, type: 'value' };\n if (!this.isImportRules) {\n this.trigger('change', eventsArgs);\n }\n }\n else if (target.className.indexOf('e-spin') > -1 || target.className.indexOf('e-numeric') > -1) {\n if (arrOperator.indexOf(oper) > -1) {\n rule.rules[index].value[i] = selectedValue;\n }\n else {\n rule.rules[index].value = selectedValue;\n }\n }\n else if (target.className.indexOf('e-radio') > -1) {\n rule.rules[index].value = selectedValue;\n }\n else if (target.className.indexOf('e-multiselect') > -1) {\n rule.rules[index].value = selectedValue;\n }\n else if (target.className.indexOf('e-textbox') > -1) {\n if (oper === 'in' || oper === 'notin') {\n if (rule.rules[index].type === 'string') {\n rule.rules[index].value = this.processValueString(selectedValue, rule.rules[index].type);\n }\n else {\n rule.rules[index].value = this.processValueString(selectedValue, rule.rules[index].type);\n }\n }\n else if (oper === 'between' || oper === 'notbetween') {\n if (typeof rule.rules[index].value === 'string') {\n rule.rules[index].value = [];\n }\n rule.rules[index].value[i] = selectedValue;\n }\n else {\n rule.rules[index].value = selectedValue;\n }\n }\n else if (target.className.indexOf('e-datepicker') > -1) {\n var format = this.getFormat(this.getColumn(this.selectedColumn.field).format);\n if (format.type) {\n if (arrOperator.indexOf(oper) > -1) {\n if (typeof rule.rules[index].value === 'string') {\n rule.rules[index].value = [];\n }\n rule.rules[index].value[i] = this.intl.formatDate(selectedValue, format);\n }\n else {\n rule.rules[index].value = this.intl.formatDate(selectedValue, format);\n }\n }\n }\n this.validateValue(rule, ruleElem, index);\n }\n else {\n if (target.className.indexOf('e-datepicker') > -1) {\n if (arrOperator.indexOf(oper) > -1) {\n if (typeof rule.rules[index].value === 'string') {\n rule.rules[index].value = [];\n }\n rule.rules[index].value[i] = selectedValue;\n }\n else {\n rule.rules[index].value = selectedValue;\n }\n }\n else {\n rule.rules[index].value = selectedValue;\n }\n }\n };\n QueryBuilder.prototype.validateValue = function (rule, ruleElem, index) {\n if (!isNullOrUndefined(index)) {\n rule = rule.rules[index];\n }\n var isObject = typeof (rule.value) === 'object';\n if (this.allowValidation && (isNullOrUndefined(index) || (isObject ? rule.value.length > 0 : rule.value))) {\n var valElem = ruleElem.querySelectorAll('.e-rule-value .e-control');\n if (valElem.length > 0) {\n if (valElem[0].className.indexOf('e-tooltip') > -1) {\n getComponent(valElem[0], 'tooltip').destroy();\n }\n else if (valElem[0].parentElement.className.indexOf('e-tooltip') > -1) {\n getComponent(valElem[0].parentElement, 'tooltip').destroy();\n }\n if (valElem[1] && valElem[1].parentElement.className.indexOf('e-tooltip') > -1) {\n getComponent(valElem[1].parentElement, 'tooltip').destroy();\n }\n if (valElem[2] && valElem[2].parentElement.className.indexOf('e-tooltip') > -1) {\n getComponent(valElem[2].parentElement, 'tooltip').destroy();\n }\n }\n }\n };\n QueryBuilder.prototype.getFormat = function (format) {\n var formatOptions;\n if (format) {\n if (typeof (format) === 'string') {\n formatOptions = { type: 'dateTime' };\n if (format === 'short' || format === 'yMd') {\n formatOptions.type = 'date';\n formatOptions.skeleton = format;\n }\n else {\n formatOptions.format = format;\n }\n }\n else {\n formatOptions = { type: 'dateTime', skeleton: format.skeleton };\n }\n }\n else {\n formatOptions = { type: 'date', skeleton: 'yMd' };\n }\n return formatOptions;\n };\n QueryBuilder.prototype.findGroupByIdx = function (groupIdx, rule, isRoot) {\n var ruleColl = rule.rules;\n var dupRuleColl = [];\n if (!isRoot) {\n for (var j = 0, jLen = ruleColl.length; j < jLen; j++) {\n rule = ruleColl[j];\n if (rule.rules) {\n dupRuleColl.push(rule);\n }\n }\n return dupRuleColl[groupIdx];\n }\n return rule;\n };\n /**\n * Removes the component from the DOM and detaches all its related event handlers.\n * Also it maintains the initial input element from the DOM.\n *\n * @method destroy\n * @returns {void}\n */\n QueryBuilder.prototype.destroy = function () {\n this.isDestroy = true;\n var queryElement = this.element;\n if (!queryElement) {\n return;\n }\n var element;\n var i;\n var len;\n var tooltip;\n _super.prototype.destroy.call(this);\n element = this.element.querySelectorAll('.e-addrulegroup');\n len = element.length;\n for (i = 0; i < len; i++) {\n getComponent(element[i], 'dropdown-btn').destroy();\n detach(element[i]);\n }\n tooltip = this.element.querySelectorAll('.e-rule-filter .e-control.e-tooltip');\n for (i = 0; i < tooltip.length; i++) {\n getComponent(tooltip[i], 'tooltip').destroy();\n }\n element = this.element.querySelectorAll('.e-rule-filter .e-control:not(.e-tooltip)');\n len = element.length;\n for (i = 0; i < len; i++) {\n if (getComponent(element[i], 'dropdownlist')) {\n getComponent(element[i], 'dropdownlist').destroy();\n }\n else {\n getComponent(element[i], 'dropdowntree').destroy();\n }\n detach(element[i]);\n }\n tooltip = this.element.querySelectorAll('.e-rule-operator .e-control.e-tooltip');\n for (i = 0; i < tooltip.length; i++) {\n getComponent(tooltip[i], 'tooltip').destroy();\n }\n element = this.element.querySelectorAll('.e-rule-operator .e-control:not(.e-tooltip)');\n len = element.length;\n for (i = 0; i < len; i++) {\n if (getComponent(element[i], 'dropdownlist')) {\n getComponent(element[i], 'dropdownlist').destroy();\n detach(element[i]);\n }\n }\n tooltip = this.element.querySelectorAll('.e-rule-value .e-control.e-tooltip');\n for (i = 0; i < tooltip.length; i++) {\n getComponent(tooltip[i], 'tooltip').destroy();\n }\n this.isImportRules = false;\n this.unWireEvents();\n this.levelColl[this.element.id + '_group0'] = [0];\n this.element.innerHTML = '';\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.portals && this.portals.length) {\n this.clearQBTemplate();\n }\n var popupElement = document.querySelectorAll('.qb-dropdownlist.e-popup');\n if (popupElement) {\n for (i = 0; i < popupElement.length; i++) {\n popupElement[i].remove();\n }\n }\n classList(this.element, [], ['e-rtl', 'e-responsive', 'e-device']);\n this.isDestroy = false;\n };\n /**\n * Adds single or multiple rules.\n *\n * @param {RuleModel[]} rule - 'rule collection' to be passed to add the rules.\n * @param {string} groupID - 'group id' to be passed to add the rule in groups.\n * @returns {void}.\n */\n QueryBuilder.prototype.addRules = function (rule, groupID) {\n groupID = this.element.id + '_' + groupID;\n this.isPublic = true;\n for (var i = 0, len = rule.length; i < len; i++) {\n this.addRuleElement(document.getElementById(groupID), rule[i]);\n }\n this.isPublic = false;\n };\n /**\n * Adds single or multiple groups, which contains the collection of rules.\n *\n * @param {RuleModel[]} groups - 'group collection' to be passed to add the groups.\n * @param {string} groupID - 'group id' to be passed to add the groups.\n * @returns {void}.\n */\n QueryBuilder.prototype.addGroups = function (groups, groupID) {\n if (this.isAddSuccess || this.element.querySelectorAll('.e-group-container').length <= this.maxGroupCount) {\n groupID = this.element.id + '_' + groupID;\n var groupElem = document.getElementById(groupID);\n var rule = this.getParentGroup(groupElem);\n var grouplen = groups.length;\n if (grouplen) {\n this.isPublic = true;\n for (var i = 0, len = groups.length; i < len; i++) {\n this.updatedRule = { isLocked: groups[i].isLocked, condition: groups[i].condition,\n not: groups[i].not };\n this.importRules(groups[i], groupElem, false, groups[i].not);\n }\n this.isPublic = false;\n }\n else {\n var condition = 'and';\n var not = false;\n var isLocked = false;\n if (this.updatedRule) {\n condition = this.updatedRule.condition;\n not = this.updatedRule.not;\n isLocked = this.updatedRule.isLocked;\n }\n if (this.groupIndex < 0) {\n if (this.enableNotCondition) {\n rule.rules.push({ 'condition': condition, 'not': not, rules: [] });\n }\n else {\n rule.rules.push({ 'condition': condition, rules: [] });\n }\n }\n else {\n if (this.enableNotCondition) {\n rule.rules.splice(this.groupIndex + 1, 0, { condition: condition, not: not, rules: [], isLocked: isLocked });\n }\n else {\n rule.rules.splice(this.groupIndex + 1, 0, { condition: condition, rules: [], isLocked: isLocked });\n }\n }\n }\n if (!this.headerTemplate) {\n this.disableRuleCondition(groupElem, rule, null, this.enableSeparateConnector ? true : null);\n }\n }\n };\n QueryBuilder.prototype.initWrapper = function () {\n this.isInitialLoad = true;\n if (this.cssClass) {\n addClass([this.element], this.cssClass.replace(/\\s+/g, ' ').trim().split(' '));\n }\n if (this.enableSeparateConnector) {\n addClass([this.element], 'e-multi-connector');\n }\n if (this.enableRtl) {\n addClass([this.element], 'e-rtl');\n }\n if (this.width) {\n this.element.style.width = this.width;\n }\n if (this.height) {\n this.element.style.height = this.height;\n }\n if (this.rule.rules.length) {\n this.isImportRules = true;\n }\n else {\n this.addGroupElement(false, this.element);\n }\n if (Browser.isDevice || this.displayMode === 'Vertical') {\n if (Browser.isDevice) {\n this.element.style.width = '100%';\n this.element.classList.add('e-device');\n }\n removeClass(this.element.querySelectorAll('.e-rule-container'), 'e-horizontal-mode');\n addClass(this.element.querySelectorAll('.e-rule-container'), 'e-vertical-mode');\n this.displayMode = 'Vertical';\n }\n else {\n this.displayMode = 'Horizontal';\n }\n if (this.summaryView) {\n if (this.isImportRules) {\n this.renderSummary();\n }\n else {\n this.renderSummaryCollapse();\n }\n }\n else {\n if (this.columns && this.columns.length && this.isImportRules) {\n this.addGroupElement(false, this.element, this.rule.condition, false, this.rule.not, false, this.rule);\n var mRules = extend({}, this.rule, {}, true);\n this.isRefreshed = true;\n this.setGroupRules(mRules);\n this.isRefreshed = false;\n }\n else if (this.columns && this.columns.length) {\n this.addRuleElement(this.element.querySelector('.e-group-container'), {});\n }\n this.notGroupRtl();\n if (this.readonly) {\n this.enableReadonly();\n }\n var buttons = this.element.querySelectorAll('label.e-btn');\n var button = void 0;\n for (var i = 0; i < buttons.length; i++) {\n button = buttons.item(i);\n rippleEffect(button, { selector: '.e-btn' });\n }\n }\n };\n QueryBuilder.prototype.renderSummary = function () {\n var contentElem = this.createElement('div', {\n attrs: {\n class: 'e-summary-content',\n id: this.element.id + '_summary_content'\n }\n });\n var textElem = this.createElement('textarea', { attrs: { class: 'e-summary-text', readonly: 'true' }, styles: 'max-height:500px' });\n var editElem = this.createElement('button', { attrs: { type: 'button', class: 'e-edit-rule e-css e-btn e-small e-flat e-primary' } });\n var divElem = this.createElement('div', { attrs: { class: 'e-summary-btndiv' } });\n contentElem.appendChild(textElem);\n textElem.textContent = this.getSqlFromRules(this.rule);\n editElem.textContent = this.l10n.getConstant('Edit');\n divElem.appendChild(editElem);\n contentElem.appendChild(divElem);\n this.element.appendChild(contentElem);\n };\n QueryBuilder.prototype.renderSummaryCollapse = function () {\n var collapseElem = this.createElement('div', {\n attrs: {\n class: 'e-collapse-rule e-icons',\n title: this.l10n.getConstant('SummaryViewTitle')\n }\n });\n this.element.querySelector('.e-group-header').appendChild(collapseElem);\n };\n QueryBuilder.prototype.columnSort = function () {\n if (this.sortDirection.toLowerCase() === 'descending') {\n this.columns = new DataManager(this.columns).executeLocal(new Query().sortByDesc('field'));\n }\n else if (this.sortDirection.toLowerCase() === 'ascending') {\n this.columns = new DataManager(this.columns).executeLocal(new Query().sortBy('field'));\n }\n };\n QueryBuilder.prototype.onChangeNotGroup = function () {\n this.element.innerHTML = '';\n this.groupIdCounter = 0;\n if (!this.headerTemplate) {\n if (this.enableNotCondition) {\n var inputElem = this.createElement('button', { attrs: { type: 'button', class: 'e-qb-toggle' } });\n if (this.groupElem.querySelector('.e-btn-group')) {\n this.groupElem.querySelector('.e-btn-group').insertBefore(inputElem, this.groupElem.querySelector('.e-btngroup-and'));\n }\n }\n else {\n this.groupElem.querySelector('.e-qb-toggle').remove();\n }\n }\n this.setProperties({ rule: this.checkNotGroup(this.rule) }, true);\n this.initWrapper();\n };\n QueryBuilder.prototype.notGroupRtl = function () {\n if (this.enableRtl) {\n addClass(this.element.querySelectorAll('.e-btn-group'), 'e-rtl');\n }\n else {\n removeClass(this.element.querySelectorAll('.e-btn-group'), 'e-rtl');\n }\n };\n QueryBuilder.prototype.checkNotGroup = function (rule) {\n var orgRule;\n if (rule.rules) {\n for (var i = 0; i < rule.rules.length; i++) {\n orgRule = rule.rules[i];\n orgRule = this.checkNotGroup(orgRule);\n rule.rules[i] = orgRule;\n }\n }\n if (!isNullOrUndefined(rule.not)) {\n if (this.enableNotCondition) {\n rule.not = false;\n }\n delete rule.not;\n }\n else if (this.enableNotCondition && !isNullOrUndefined(rule.condition)) {\n rule.not = false;\n }\n return rule;\n };\n QueryBuilder.prototype.onPropertyChanged = function (newProp, oldProp) {\n var properties = Object.keys(newProp);\n var groupElem = this.element.querySelector('.e-group-container');\n var summaryElem = this.element.querySelector('.e-summary-content');\n for (var _i = 0, properties_1 = properties; _i < properties_1.length; _i++) {\n var prop = properties_1[_i];\n switch (prop) {\n case 'summaryView':\n if (newProp.summaryView) {\n groupElem.style.display = 'none';\n if (this.element.querySelectorAll('.e-summary-content').length < 1) {\n this.renderSummary();\n summaryElem = this.element.querySelector('.e-summary-content');\n }\n else {\n this.element.querySelector('.e-summary-text').textContent = this.getSqlFromRules(this.rule);\n }\n summaryElem.style.display = 'block';\n }\n else {\n if (groupElem.querySelectorAll('.e-collapse-rule').length > -1) {\n this.renderSummaryCollapse();\n }\n groupElem.style.display = 'block';\n summaryElem.style.display = 'none';\n }\n break;\n case 'displayMode':\n this.refresh();\n break;\n case 'showButtons':\n if (!isNullOrUndefined(newProp.showButtons.lockGroup)) {\n if (newProp.showButtons.lockGroup) {\n removeClass(this.element.querySelectorAll('.e-lock-grp-btn'), 'e-button-hide');\n }\n else {\n addClass(this.element.querySelectorAll('.e-lock-grp-btn'), 'e-button-hide');\n }\n }\n if (!isNullOrUndefined(newProp.showButtons.lockRule)) {\n if (newProp.showButtons.lockRule) {\n removeClass(this.element.querySelectorAll('.e-lock-rule-btn'), 'e-button-hide');\n }\n else {\n addClass(this.element.querySelectorAll('.e-lock-rule-btn'), 'e-button-hide');\n }\n }\n if (!isNullOrUndefined(newProp.showButtons.cloneGroup)) {\n if (newProp.showButtons.cloneGroup) {\n removeClass(this.element.querySelectorAll('.e-clone-grp-btn'), 'e-button-hide');\n }\n else {\n addClass(this.element.querySelectorAll('.e-clone-grp-btn'), 'e-button-hide');\n }\n }\n if (!isNullOrUndefined(newProp.showButtons.cloneRule)) {\n if (newProp.showButtons.cloneRule) {\n removeClass(this.element.querySelectorAll('.e-clone-rule-btn'), 'e-button-hide');\n }\n else {\n addClass(this.element.querySelectorAll('.e-clone-rule-btn'), 'e-button-hide');\n }\n }\n if (!isNullOrUndefined(newProp.showButtons.ruleDelete)) {\n if (newProp.showButtons.ruleDelete) {\n removeClass(this.element.querySelectorAll('.e-rule-delete'), 'e-button-hide');\n }\n else {\n addClass(this.element.querySelectorAll('.e-rule-delete'), 'e-button-hide');\n }\n }\n if (!isNullOrUndefined(newProp.showButtons.groupDelete)) {\n if (newProp.showButtons.groupDelete) {\n removeClass(this.element.querySelectorAll('.e-deletegroup'), 'e-button-hide');\n }\n else {\n addClass(this.element.querySelectorAll('.e-deletegroup'), 'e-button-hide');\n }\n }\n break;\n case 'cssClass':\n if (oldProp.cssClass) {\n removeClass([this.element], oldProp.cssClass.split(' '));\n }\n if (newProp.cssClass) {\n addClass([this.element], newProp.cssClass.replace(/\\s+/g, ' ').trim().split(' '));\n }\n break;\n case 'enableRtl':\n if (newProp.enableRtl) {\n addClass([this.element], 'e-rtl');\n this.notGroupRtl();\n }\n else {\n removeClass([this.element], 'e-rtl');\n this.notGroupRtl();\n }\n break;\n case 'enablePersistence':\n this.enablePersistence = newProp.enablePersistence;\n break;\n case 'dataSource':\n this.dataSource = newProp.dataSource;\n this.refresh();\n break;\n case 'columns':\n this.columns = newProp.columns;\n this.columnSort();\n this.updateSubFieldsFromColumns(this.columns);\n break;\n case 'sortDirection':\n this.sortDirection = newProp.sortDirection;\n this.columnSort();\n break;\n case 'maxGroupCount':\n this.maxGroupCount = newProp.maxGroupCount;\n break;\n case 'height':\n this.height = newProp.height;\n this.element.style.height = this.height;\n break;\n case 'rule':\n if (this.rule.rules.length === 0 && !isNullOrUndefined(this.rule)) {\n this.reset();\n }\n this.setProperties({ rule: newProp.rule }, true);\n newProp.rule = this.getRuleCollection(this.rule, false);\n this.setRules(this.rule);\n break;\n case 'width':\n this.width = newProp.width;\n this.element.style.width = this.width;\n break;\n case 'locale':\n this.locale = newProp.locale;\n this.intl = new Internationalization(this.locale);\n this.isLocale = true;\n this.refresh();\n this.isLocale = false;\n break;\n case 'enableNotCondition':\n this.onChangeNotGroup();\n break;\n case 'readonly':\n this.isReadonly = newProp.readonly;\n this.enableReadonly();\n break;\n case 'allowDragAndDrop':\n this.allowDragAndDrop = newProp.allowDragAndDrop;\n this.refresh();\n break;\n case 'enableSeparateConnector':\n this.enableSeparateConnector = newProp.enableSeparateConnector;\n this.refresh();\n break;\n }\n }\n };\n QueryBuilder.prototype.preRender = function () {\n this.element.id = this.element.id || getUniqueID('ej2-querybuilder');\n this.defaultLocale = {\n StartsWith: 'Starts With',\n DoesNotStartWith: 'Does Not Start With',\n EndsWith: 'Ends With',\n DoesNotEndWith: 'Does Not End With',\n Contains: 'Contains',\n DoesNotContain: 'Does Not Contain',\n NotLike: 'Not Like',\n Like: 'Like',\n Equal: 'Equal',\n NotEqual: 'Not Equal',\n LessThan: 'Less Than',\n LessThanOrEqual: 'Less Than Or Equal',\n GreaterThan: 'Greater Than',\n GreaterThanOrEqual: 'Greater Than Or Equal',\n Between: 'Between',\n NotBetween: 'Not Between',\n In: 'In',\n NotIn: 'Not In',\n Remove: 'REMOVE',\n SelectField: 'Select a field',\n SelectOperator: 'Select operator',\n DeleteRule: 'Remove this condition',\n DeleteGroup: 'Delete group',\n AddGroup: 'Add Group',\n AddCondition: 'Add Condition',\n Edit: 'EDIT',\n ValidationMessage: 'This field is required',\n SummaryViewTitle: 'Summary View',\n OtherFields: 'Other Fields',\n AND: 'AND',\n OR: 'OR',\n NOT: 'NOT',\n SelectValue: 'Enter Value',\n IsEmpty: 'Is Empty',\n IsNotEmpty: 'Is Not Empty',\n IsNull: 'Is Null',\n IsNotNull: 'Is Not Null',\n True: 'true',\n False: 'false',\n AddButton: 'Add Group/Condition',\n CloneGroup: 'Clone Group',\n LockGroup: 'Lock Group',\n CloneRule: 'Clone Rule',\n LockRule: 'Lock Rule',\n UnlockRule: 'Unlock Rule',\n UnlockGroup: 'Unlock Group'\n };\n this.l10n = new L10n('querybuilder', this.defaultLocale, this.locale);\n this.intl = new Internationalization(this.locale);\n this.groupIdCounter = 0;\n this.subFilterCounter = 0;\n this.ruleIdCounter = 0;\n this.btnGroupId = 0;\n this.isImportRules = false;\n this.parser = [];\n this.customOperators = {\n stringOperator: [\n { value: 'startswith', key: this.l10n.getConstant('StartsWith') },\n { value: 'notstartswith', key: this.l10n.getConstant('DoesNotStartWith') },\n { value: 'endswith', key: this.l10n.getConstant('EndsWith') },\n { value: 'notendswith', key: this.l10n.getConstant('DoesNotEndWith') },\n { value: 'contains', key: this.l10n.getConstant('Contains') },\n { value: 'notcontains', key: this.l10n.getConstant('DoesNotContain') },\n { value: 'equal', key: this.l10n.getConstant('Equal') },\n { value: 'notequal', key: this.l10n.getConstant('NotEqual') },\n { value: 'in', key: this.l10n.getConstant('In') },\n { value: 'notin', key: this.l10n.getConstant('NotIn') },\n { value: 'isempty', key: this.l10n.getConstant('IsEmpty') },\n { value: 'isnotempty', key: this.l10n.getConstant('IsNotEmpty') }\n ],\n dateOperator: [\n { value: 'equal', key: this.l10n.getConstant('Equal') },\n { value: 'greaterthan', key: this.l10n.getConstant('GreaterThan') },\n { value: 'greaterthanorequal', key: this.l10n.getConstant('GreaterThanOrEqual') },\n { value: 'lessthan', key: this.l10n.getConstant('LessThan') },\n { value: 'lessthanorequal', key: this.l10n.getConstant('LessThanOrEqual') },\n { value: 'notequal', key: this.l10n.getConstant('NotEqual') },\n { value: 'between', key: this.l10n.getConstant('Between') },\n { value: 'notbetween', key: this.l10n.getConstant('NotBetween') }\n ],\n booleanOperator: [\n { value: 'equal', key: this.l10n.getConstant('Equal') },\n { value: 'notequal', key: this.l10n.getConstant('NotEqual') }\n ],\n numberOperator: [\n { value: 'equal', key: this.l10n.getConstant('Equal') },\n { value: 'greaterthanorequal', key: this.l10n.getConstant('GreaterThanOrEqual') },\n { value: 'greaterthan', key: this.l10n.getConstant('GreaterThan') },\n { value: 'between', key: this.l10n.getConstant('Between') },\n { value: 'lessthan', key: this.l10n.getConstant('LessThan') },\n { value: 'notbetween', key: this.l10n.getConstant('NotBetween') },\n { value: 'lessthanorequal', key: this.l10n.getConstant('LessThanOrEqual') },\n { value: 'notequal', key: this.l10n.getConstant('NotEqual') },\n { value: 'in', key: this.l10n.getConstant('In') },\n { value: 'notin', key: this.l10n.getConstant('NotIn') }\n ]\n };\n this.operators = {\n equal: '=', notequal: '!=', greaterthan: '>', greaterthanorequal: '>=', lessthan: '<', in: 'IN', notin: 'NOT IN',\n lessthanorequal: '<=', startswith: 'LIKE', endswith: 'LIKE', between: 'BETWEEN', notbetween: 'NOT BETWEEN', contains: 'LIKE',\n isnull: 'IS NULL', isnotnull: 'IS NOT NULL', isempty: 'IS EMPTY', isnotempty: 'IS NOT EMPTY', notstartswith: 'NOT LIKE',\n notendswith: 'NOT LIKE', notcontains: 'NOT LIKE'\n };\n this.sqlOperators = {\n equal: '=', notequal: '!=', greaterthan: '>', greaterthanorequal: '>=', lessthan: '<', in: this.l10n.getConstant('In').toUpperCase(),\n notin: this.l10n.getConstant('NotIn').toUpperCase(), lessthanorequal: '<=', startswith: this.l10n.getConstant('Like').toUpperCase(),\n endswith: this.l10n.getConstant('Like').toUpperCase(), between: this.l10n.getConstant('Between').toUpperCase(),\n notbetween: this.l10n.getConstant('NotBetween').toUpperCase(), contains: this.l10n.getConstant('Like').toUpperCase(),\n isnull: this.l10n.getConstant('IsNull').toUpperCase(), isnotnull: this.l10n.getConstant('IsNotNull').toUpperCase(),\n isempty: this.l10n.getConstant('IsEmpty').toUpperCase(), isnotempty: this.l10n.getConstant('IsNotEmpty').toUpperCase(),\n notstartswith: this.l10n.getConstant('NotLike').toUpperCase(), notendswith: this.l10n.getConstant('NotLike').toUpperCase(),\n notcontains: this.l10n.getConstant('NotLike').toUpperCase()\n };\n if (!this.fields) {\n this.fields = { text: 'label', value: 'field' };\n }\n };\n QueryBuilder.prototype.render = function () {\n this.levelColl = {};\n this.items = [\n {\n text: this.l10n.getConstant('AddGroup'),\n iconCss: 'e-icons e-add-icon e-addgroup'\n },\n {\n text: this.l10n.getConstant('AddCondition'),\n iconCss: 'e-icons e-add-icon e-addrule'\n }\n ];\n this.ruleElem = this.ruleTemplate();\n this.groupElem = this.groupTemplate();\n var stringOper = [\n { value: 'isnull', key: this.l10n.getConstant('IsNull') },\n { value: 'isnotnull', key: this.l10n.getConstant('IsNotNull') }\n ];\n var numberOper = [\n { value: 'isnull', key: this.l10n.getConstant('IsNull') },\n { value: 'isnotnull', key: this.l10n.getConstant('IsNotNull') }\n ];\n this.customOperators['stringOperator'] = this.customOperators['stringOperator'].concat(stringOper); // tslint:disable-line\n this.customOperators['numberOperator'] = this.customOperators['numberOperator'].concat(numberOper); // tslint:disable-line\n if (this.dataSource instanceof DataManager) {\n this.dataManager = this.dataSource;\n this.executeDataManager(new Query().take(1));\n }\n else {\n this.dataManager = new DataManager(this.dataSource);\n this.dataColl = this.dataManager.executeLocal(new Query());\n this.initControl();\n }\n this.renderComplete();\n if (this.allowDragAndDrop) {\n this.initializeDrag();\n }\n };\n QueryBuilder.prototype.initializeDrag = function () {\n this.draggable = new Draggable(this.element, {\n dragTarget: '.e-drag-qb-rule',\n distance: 5,\n helper: this.helper.bind(this),\n dragStart: this.dragStartHandler.bind(this),\n drag: this.dragHandler.bind(this),\n dragStop: this.dragStopHandler.bind(this),\n isReplaceDragEle: true,\n isPreventSelect: false,\n abort: '.e-parent-header',\n isDragScroll: true\n });\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n QueryBuilder.prototype.helper = function (e) {\n var target = this.draggable.currentStateTarget;\n if (!target.classList.contains('e-drag-qb-rule') || (target.classList.contains('e-drag-qb-rule') && closest(target, '.e-disable'))) {\n return false;\n }\n var visualElement = this.createElement('div', {\n className: 'e-cloneproperties e-draganddrop e-dragclone',\n styles: 'height:\"auto\", z-index:2, width:' + this.element.offsetWidth\n });\n var cloneElement;\n if (this.draggable.currentStateTarget.parentElement.classList.contains('e-group-header')) {\n cloneElement = closest(target, '.e-group-container').cloneNode(true);\n closest(target, '.e-group-container').classList.add('e-qb-dragging-rule');\n }\n else {\n visualElement.classList.add('e-group-body');\n cloneElement = this.createElement('div', { className: 'e-rule-container' });\n var ruleElement = closest(target, '.e-rule-field').cloneNode(true);\n cloneElement.appendChild(ruleElement);\n closest(target, '.e-rule-field').classList.add('e-qb-dragging-rule');\n }\n visualElement.appendChild(cloneElement);\n var childElements = visualElement.querySelectorAll('*');\n childElements.forEach(function (child) {\n child.removeAttribute('id');\n });\n this.element.appendChild(visualElement);\n return visualElement;\n };\n QueryBuilder.prototype.dragStartHandler = function (e) {\n this.draggedRule = e.target;\n this.isDragEventPrevent = false;\n document.body.classList.add('e-prevent-select');\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this.dragElement = e.dragElement;\n var rule = closest(e.target, '.e-rule-container');\n var group = closest(e.target, '.e-group-container');\n var dragEventArgs = { dragRuleID: rule !== null ? rule.id : group.id, dragGroupID: group.id, cancel: false };\n this.trigger('dragStart', dragEventArgs);\n this.isDragEventPrevent = dragEventArgs.cancel;\n };\n QueryBuilder.prototype.dragHandler = function (e) {\n if (this.isDragEventPrevent) {\n return;\n }\n var borderLineElem = this.element.querySelectorAll('.e-drag-rule-bottom-line');\n borderLineElem.forEach(function (ele) {\n ele.classList.remove('e-drag-rule-bottom-line');\n });\n borderLineElem = this.element.querySelectorAll('.e-drag-rule-top-line');\n borderLineElem.forEach(function (ele) {\n ele.classList.remove('e-drag-rule-top-line');\n });\n if (isNullOrUndefined(e.target)) {\n return;\n }\n if (e.target.nodeName === 'HTML' || closest(e.target, '.e-qb-dragging-rule') || closest(e.target, '.e-group-header') ||\n !closest(e.target, '#' + this.element.id) || closest(e.target, '.e-disable') || (e.target.parentElement && e.target.parentElement.classList.contains('e-btn-group') && this.enableSeparateConnector)) {\n this.dragElement.classList.add('e-notallowedcur');\n return;\n }\n else {\n this.dragElement.classList.remove('e-notallowedcur');\n }\n var targetElem = closest(e.target, '.e-rule-container');\n var grpElem = closest(e.target, '.e-group-container');\n if (targetElem) {\n var rect = targetElem.getBoundingClientRect();\n var mouseY = e.event.clientY || e.event.changedTouches[0].clientY;\n var distanceToTop = mouseY - rect.top;\n var distanceToBottom = rect.bottom - mouseY;\n var threshold = 20; // Adjust as needed\n if (distanceToTop < threshold) {\n targetElem.classList.add('e-drag-rule-top-line');\n }\n else if (distanceToBottom < threshold) {\n targetElem.classList.add('e-drag-rule-bottom-line');\n }\n }\n else if (e.target.classList.contains('e-rule-list') && e.target.children.length === 0) {\n e.target.classList.add('e-drag-rule-bottom-line');\n }\n else if (e.target.classList.contains('e-rule-list') && e.target.children[0].classList.contains('e-group-container')) {\n var rect = e.target.children[0].getBoundingClientRect();\n var mouseY = e.event.clientY || e.event.changedTouches[0].clientY;\n var distanceToTop = mouseY - rect.top;\n var threshold = 20; // Adjust as needed\n if (distanceToTop < threshold) {\n e.target.classList.add('e-drag-rule-top-line');\n }\n }\n else if (closest(e.target, '.e-group-container') || e.target.classList.contains('e-group-container')) {\n if (!grpElem) {\n grpElem = e.target;\n }\n if (grpElem.id.indexOf('group0') > -1) {\n var rect = e.target.getBoundingClientRect();\n var mouseY = e.event.clientY || e.event.changedTouches[0].clientY;\n var distanceToBottom = rect.bottom - mouseY;\n var threshold = 20; // Adjust as needed\n if (distanceToBottom < threshold) {\n e.target.classList.add('e-drag-rule-bottom-line');\n }\n }\n }\n var dragEventArgs = { dragRuleID: targetElem !== null ? targetElem.id : grpElem !== null ? grpElem.id : null,\n dragGroupID: grpElem !== null ? grpElem.id : null, cancel: false };\n this.trigger('drag', dragEventArgs);\n this.isDragEventPrevent = dragEventArgs.cancel;\n };\n QueryBuilder.prototype.dragStopHandler = function (e) {\n var _this = this;\n if (this.isDragEventPrevent) {\n return;\n }\n var targetGroup = closest(e.target, '.e-rule-container');\n if (isNullOrUndefined(targetGroup) && e.target.parentElement &&\n e.target.parentElement.classList.contains('e-btn-group') && this.enableSeparateConnector) {\n targetGroup = closest(e.target.parentElement.previousElementSibling, '.e-rule-container');\n }\n var isPreventelem;\n if (!isNullOrUndefined(e.helper)) {\n isPreventelem = closest(e.helper, '.e-notallowedcur');\n }\n var prevRule;\n if (!isPreventelem) {\n var targetGrp = closest(e.target, '.e-group-container');\n var dropEventArgs = { cancel: false, dropRuleID: targetGroup !== null ? targetGroup.id\n : targetGrp !== null ? targetGrp.id : null, dropGroupID: targetGrp !== null ? targetGrp.id : null };\n this.trigger('drop', dropEventArgs);\n if (dropEventArgs.cancel) {\n isPreventelem = true;\n }\n prevRule = this.getValidRules();\n }\n this.prvtEvtTgrDaD = true;\n var tgrt = this.enableSeparateConnector && e.target.parentElement &&\n e.target.parentElement.classList.contains('e-btn-group') ? e.target.parentElement.previousElementSibling : e.target;\n if (targetGroup && !isPreventelem) {\n var groupId_1 = targetGroup.id.split(this.element.id + '_')[1].split('_')[0];\n if (this.draggable.currentStateTarget.parentElement.classList.contains('e-rule-field') ||\n this.draggable.currentStateTarget.parentElement.classList.contains('e-group-header')) {\n var rule = void 0;\n if (this.draggable.currentStateTarget.parentElement.classList.contains('e-group-header')) {\n rule = this.getGroup(this.draggedRule);\n this.deleteGroup(closest(this.draggedRule, '.e-group-container'));\n }\n else {\n rule = this.getRule(this.draggedRule);\n this.deleteRule(this.draggedRule);\n }\n var groupRule = extend([], this.getGroup(targetGroup), [], true);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (groupRule.properties) {\n groupRule = groupRule.properties;\n }\n var groupElem = closest(targetGroup, '.e-group-container');\n var nestGrpElem = groupElem.querySelectorAll('.e-group-container');\n nestGrpElem.forEach(function (ele) {\n if (_this.element.querySelector('#' + ele.id)) {\n _this.deleteGroup(ele);\n }\n });\n var ruleElems = groupElem.querySelectorAll('.e-rule-container');\n var ruleIds = [];\n var dropInd = void 0;\n for (var i = 0; i < ruleElems.length; i++) {\n if (ruleElems[i].classList.contains('e-drag-rule-top-line') ||\n ruleElems[i].classList.contains('e-drag-rule-bottom-line')) {\n dropInd = i;\n }\n ruleIds.push(ruleElems[i].id.split(this.element.id + '_')[1]);\n }\n this.deleteRules(ruleIds);\n if (targetGroup.classList.contains('e-drag-rule-top-line')) {\n groupRule.rules.splice(dropInd, 0, rule);\n }\n else {\n groupRule.rules.splice(dropInd + 1, 0, rule);\n }\n groupRule.rules.forEach(function (rule) {\n if (_this.enableSeparateConnector) {\n if (!rule.rules) {\n _this.addRules([rule], groupId_1);\n }\n else {\n _this.addGroups([rule], groupId_1);\n }\n }\n else {\n if (rule.condition) {\n _this.addGroups([rule], groupId_1);\n }\n else {\n _this.addRules([rule], groupId_1);\n }\n }\n });\n }\n }\n else if (tgrt.classList.contains('e-rule-list') && tgrt.children.length === 0 && !isPreventelem) {\n var groupElem = closest(tgrt, '.e-group-container');\n var groupId = groupElem.id.split(this.element.id + '_')[1].split('_')[0];\n var rule = void 0;\n if (this.draggable.currentStateTarget.parentElement.classList.contains('e-group-header')) {\n rule = this.getGroup(this.draggedRule);\n this.deleteGroup(closest(this.draggedRule, '.e-group-container'));\n }\n else {\n rule = this.getRule(this.draggedRule);\n this.deleteRule(this.draggedRule);\n }\n if (this.enableSeparateConnector) {\n if (!rule.rules) {\n this.addRules([rule], groupId);\n }\n else {\n this.addGroups([rule], groupId);\n }\n }\n else {\n if (rule.condition) {\n this.addGroups([rule], groupId);\n }\n else {\n this.addRules([rule], groupId);\n }\n }\n }\n else if (tgrt.classList.contains('e-rule-list') && tgrt.children[0].classList.contains('e-group-container') && !isPreventelem) {\n var groupElem = closest(tgrt, '.e-group-container');\n var groupId_2 = groupElem.id.split(this.element.id + '_')[1].split('_')[0];\n var rule = void 0;\n if (this.draggable.currentStateTarget.parentElement.classList.contains('e-group-header')) {\n rule = this.getGroup(this.draggedRule);\n this.deleteGroup(closest(this.draggedRule, '.e-group-container'));\n }\n else {\n rule = this.getRule(this.draggedRule);\n this.deleteRule(this.draggedRule);\n }\n var groupRule = extend([], this.getGroup(tgrt), [], true);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (groupRule.properties) {\n groupRule = groupRule.properties;\n }\n var groupElems = tgrt.querySelectorAll('.e-group-container');\n groupElems.forEach(function (ele) {\n if (_this.element.querySelector('#' + ele.id)) {\n _this.deleteGroup(ele);\n }\n });\n var ruleElems = groupElem.querySelectorAll('.e-rule-container');\n ruleElems.forEach(function (ele) {\n if (_this.element.querySelector('#' + ele.id)) {\n _this.deleteRule(ele);\n }\n });\n if (this.draggable.currentStateTarget.parentElement.classList.contains('e-group-header')) {\n this.addGroups([rule], groupId_2);\n }\n else {\n this.addRules([rule], groupId_2);\n }\n groupRule.rules.forEach(function (rule) {\n if (_this.enableSeparateConnector) {\n if (!rule.rules) {\n _this.addRules([rule], groupId_2);\n }\n else {\n _this.addGroups([rule], groupId_2);\n }\n }\n else {\n if (rule.condition) {\n _this.addGroups([rule], groupId_2);\n }\n else {\n _this.addRules([rule], groupId_2);\n }\n }\n });\n }\n else if ((closest(e.target, '.e-group-container') || e.target.classList.contains('e-group-container')) && !isPreventelem) {\n var rule = void 0;\n targetGroup = closest(e.target, '.e-group-container');\n if (!targetGroup && e.target.classList.contains('e-group-container')) {\n targetGroup = e.target;\n }\n var groupId = targetGroup.id.split(this.element.id + '_')[1].split('_')[0];\n if (groupId === 'group0') {\n if (this.draggable.currentStateTarget.parentElement.classList.contains('e-group-header')) {\n rule = this.getGroup(this.draggedRule);\n this.deleteGroup(closest(this.draggedRule, '.e-group-container'));\n }\n else {\n rule = this.getRule(this.draggedRule);\n this.deleteRule(this.draggedRule);\n }\n if (this.enableSeparateConnector) {\n if (!rule.rules) {\n this.addRules([rule], groupId);\n }\n else {\n this.addGroups([rule], groupId);\n }\n }\n else {\n if (rule.condition) {\n this.addGroups([rule], groupId);\n }\n else {\n this.addRules([rule], groupId);\n }\n }\n }\n }\n if (!isPreventelem) {\n this.trigger('ruleChange', { previousRule: prevRule, rule: this.getValidRules(), type: 'drag-and-drop' });\n }\n this.prvtEvtTgrDaD = false;\n document.body.classList.remove('e-prevent-select');\n var borderLineElem = this.element.querySelectorAll('.e-drag-rule-bottom-line');\n borderLineElem.forEach(function (ele) {\n ele.classList.remove('e-drag-rule-bottom-line');\n });\n borderLineElem = this.element.querySelectorAll('.e-drag-rule-top-line');\n borderLineElem.forEach(function (ele) {\n ele.classList.remove('e-drag-rule-top-line');\n });\n borderLineElem = this.element.querySelectorAll('.e-qb-dragging-rule');\n borderLineElem.forEach(function (ele) {\n ele.classList.remove('e-qb-dragging-rule');\n });\n if (e.helper && e.helper.classList.contains('e-cloneproperties') && document.querySelector('.' + e.helper.classList[0])) {\n remove(e.helper);\n }\n if (this.enableSeparateConnector) {\n this.refresh();\n }\n };\n QueryBuilder.prototype.templateParser = function (template) {\n if (template) {\n try {\n if (typeof template !== 'function' && document.querySelectorAll(template).length) {\n return templateCompiler(document.querySelector(template).innerHTML.trim());\n }\n else {\n return compile(template);\n }\n }\n catch (error) {\n return templateCompiler(template);\n }\n }\n return undefined;\n };\n QueryBuilder.prototype.executeDataManager = function (query) {\n var _this = this;\n var data = this.dataManager.executeQuery(query);\n var deferred = new Deferred();\n data.then(function (e) {\n if (e.actual && e.actual.result) {\n _this.dataColl = e.actual.result;\n }\n else {\n _this.dataColl = e.result;\n }\n _this.initControl();\n }).catch(function (e) {\n deferred.reject(e);\n });\n };\n QueryBuilder.prototype.initControl = function () {\n this.initialize();\n this.initWrapper();\n this.wireEvents();\n };\n QueryBuilder.prototype.wireEvents = function () {\n var wrapper = this.getWrapper();\n EventHandler.add(wrapper, 'click', this.clickEventHandler, this);\n EventHandler.add(wrapper, 'focusout', this.focusEventHandler, this);\n EventHandler.add(wrapper, 'focusin', this.focusEventHandler, this);\n EventHandler.add(this.element, 'keydown', this.keyBoardHandler, this);\n EventHandler.add(document, 'keydown', this.keyBoardHandler, this);\n };\n QueryBuilder.prototype.unWireEvents = function () {\n var wrapper = this.getWrapper();\n EventHandler.remove(wrapper, 'click', this.clickEventHandler);\n EventHandler.remove(wrapper, 'focusout', this.focusEventHandler);\n EventHandler.remove(wrapper, 'focusin', this.focusEventHandler);\n EventHandler.remove(this.element, 'keydown', this.keyBoardHandler);\n EventHandler.remove(document, 'keydown', this.keyBoardHandler);\n };\n QueryBuilder.prototype.getParentGroup = function (target, isParent) {\n var groupLevel = (target instanceof Element) ? this.levelColl[target.id] : this.levelColl[\"\" + target];\n var len = isParent ? groupLevel.length - 1 : groupLevel.length;\n var rule = this.rule;\n for (var i = 0; i < len; i++) {\n rule = this.findGroupByIdx(groupLevel[i], rule, i === 0);\n }\n return rule;\n };\n /**\n * Delete the Group\n *\n * @param {Element | string} target - 'target' to be passed to delete the group.\n * @returns {void}\n */\n QueryBuilder.prototype.deleteGroup = function (target) {\n var _this = this;\n var groupElem = target;\n var groupId;\n if (typeof target === 'string') {\n groupId = this.element.id + '_' + target;\n target = document.getElementById(groupId);\n groupId = groupId.replace(this.element.id + '_', '');\n }\n else {\n groupId = groupElem.id.replace(this.element.id + '_', '');\n }\n if (groupId === 'group0' || !target) {\n return;\n }\n var args = { groupID: groupId, cancel: false, type: 'deleteGroup' };\n if (!this.isImportRules && !this.prvtEvtTgrDaD) {\n this.trigger('beforeChange', args, function (observedChangeArgs) {\n _this.deleteGroupSuccessCallBack(observedChangeArgs, target);\n });\n }\n else {\n this.deleteGroupSuccessCallBack(args, target);\n }\n };\n QueryBuilder.prototype.deleteGroupSuccessCallBack = function (args, target) {\n if (!args.cancel) {\n var groupElem = target;\n var rule = this.getParentGroup(groupElem, true);\n var index = 0;\n var i = void 0;\n var len = void 0;\n var beforeRules = this.getValidRules(this.rule);\n var nextElem = groupElem.nextElementSibling;\n var prevElem = groupElem.previousElementSibling;\n var element = groupElem.querySelectorAll('.e-group-container');\n var valElem = groupElem.querySelectorAll('.e-tooltip');\n len = valElem.length;\n for (i = 0; i < len; i++) {\n getComponent(valElem[i], 'tooltip').destroy();\n }\n for (i = 0, len = element.length; i < len; i++) {\n delete this.levelColl[element[i].id];\n }\n while (groupElem.previousElementSibling !== null) {\n groupElem = groupElem.previousElementSibling;\n if (!this.enableSeparateConnector || (this.enableSeparateConnector &&\n ((!this.headerTemplate && !groupElem.classList.contains('e-btn-group')) ||\n this.headerTemplate && (groupElem.classList.contains('e-rule-container') ||\n groupElem.classList.contains('e-group-container'))))) {\n index++;\n }\n }\n if (!this.enableSeparateConnector) {\n if (nextElem && nextElem.className.indexOf('e-separate-rule') > -1) {\n removeClass([nextElem], 'e-separate-rule');\n addClass([nextElem], 'e-joined-rule');\n if (prevElem && prevElem.className.indexOf('e-rule-container') > -1) {\n addClass([prevElem], 'e-prev-joined-rule');\n }\n }\n }\n var elem = groupElem.parentElement.parentElement.parentElement;\n var removeString = [];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.isReact || this.isAngular) {\n var remRule = rule.rules[index];\n var ruleElemColl = target.querySelectorAll('.e-rule-container');\n if (remRule && remRule.rules) {\n for (var r = 0; r < remRule.rules.length; r++) {\n var column = this.getColumn(remRule.rules[r].field);\n if (ruleElemColl[r]) {\n var isTemplateRendered = ruleElemColl[r].querySelector('.e-template-value');\n if (column && (column.ruleTemplate || (this.isPlatformTemplate(column) && isTemplateRendered))) {\n removeString.push(ruleElemColl[r].id);\n }\n }\n }\n }\n }\n detach(target);\n if (this.headerTemplate) {\n this.clearQBTemplate([target.id]);\n }\n if (removeString.length) {\n this.clearQBTemplate(removeString);\n }\n rule.rules.splice(index, 1);\n delete this.levelColl[args.groupID];\n this.refreshLevelColl();\n this.disableRuleCondition(elem, rule);\n if (this.enableSeparateConnector && prevElem && ((!this.headerTemplate && prevElem.classList.contains('e-btn-group')) ||\n (this.headerTemplate && prevElem.classList.contains('e-custom-group-btn')))) {\n detach(prevElem);\n }\n if (!this.isImportRules && !this.prvtEvtTgrDaD) {\n this.trigger('change', args);\n }\n this.filterRules(beforeRules, this.getValidRules(this.rule), 'deleteGroup');\n }\n };\n QueryBuilder.prototype.isPlatformTemplate = function (column) {\n var isTemp = false;\n isTemp = column.template && (typeof column.template === 'string' || column.template.create === undefined);\n return isTemp;\n };\n QueryBuilder.prototype.deleteRule = function (target) {\n var _this = this;\n var groupElem = closest(target, '.e-group-container');\n var groupID = groupElem.id.replace(this.element.id + '_', '');\n var ruleID = closest(target, '.e-rule-container').id.replace(this.element.id + '_', '');\n var args = { groupID: groupID, ruleID: ruleID, cancel: false, type: 'deleteRule' };\n if (!this.isImportRules && !this.prvtEvtTgrDaD) {\n this.trigger('beforeChange', args, function (observedChangeArgs) {\n _this.deleteRuleSuccessCallBack(observedChangeArgs, target);\n });\n }\n else {\n this.deleteRuleSuccessCallBack(args, target);\n }\n };\n QueryBuilder.prototype.deleteRuleSuccessCallBack = function (args, target) {\n if (!args.cancel) {\n var groupElem = closest(target, '.e-group-container');\n var rule = this.getParentGroup(groupElem);\n var ruleElem = closest(target, '.e-rule-container');\n var beforeRules = this.getValidRules(this.rule);\n var prevElem = ruleElem.previousElementSibling;\n var index = 0;\n var clnruleElem = ruleElem;\n var nextElem = ruleElem.nextElementSibling;\n var valElem = ruleElem.querySelectorAll('.e-tooltip');\n var i = void 0;\n var len = valElem.length;\n for (i = 0; i < len; i++) {\n getComponent(valElem[i], 'tooltip').destroy();\n }\n while (ruleElem.previousElementSibling !== null) {\n ruleElem = ruleElem.previousElementSibling;\n if (!this.enableSeparateConnector || (this.enableSeparateConnector &&\n ((!this.headerTemplate && !ruleElem.classList.contains('e-btn-group')) ||\n this.headerTemplate && (ruleElem.classList.contains('e-rule-container') ||\n ruleElem.classList.contains('e-group-container'))))) {\n index++;\n }\n }\n var column = this.getColumn(rule.rules[index].field);\n if (column && column.template && clnruleElem.querySelector('.e-template')) {\n this.templateDestroy(column, clnruleElem.querySelector('.e-template').id);\n }\n if (!prevElem || prevElem.className.indexOf('e-rule-container') < 0) {\n if (nextElem) {\n removeClass([nextElem], 'e-joined-rule');\n }\n }\n if (!nextElem || nextElem.className.indexOf('e-rule-container') < 0) {\n if (prevElem) {\n removeClass([prevElem], 'e-prev-joined-rule');\n }\n }\n var isTemplateRendered = clnruleElem.querySelector('.e-template-value');\n // eslint-disable\n try {\n if (this.enableSeparateConnector && (clnruleElem.previousElementSibling || clnruleElem.nextElementSibling)) {\n var previousElem = clnruleElem.previousElementSibling;\n var nextElem_1 = clnruleElem.nextElementSibling;\n if (isNullOrUndefined(nextElem_1) && ((!this.headerTemplate && previousElem.classList.contains('e-btn-group'))\n || (this.headerTemplate && previousElem.classList.contains('e-custom-group-btn')))) {\n if (previousElem && previousElem.previousElementSibling && previousElem.previousElementSibling.classList.contains('e-rule-container')) {\n var rule_1 = this.getRule(previousElem.previousElementSibling);\n rule_1.condition = null;\n }\n detach(previousElem);\n }\n else if ((!this.headerTemplate && nextElem_1.classList.contains('e-btn-group'))\n || (this.headerTemplate && nextElem_1.classList.contains('e-custom-group-btn'))) {\n detach(nextElem_1);\n }\n }\n detach(clnruleElem);\n }\n catch (err) {\n return;\n }\n if (column && column.ruleTemplate) {\n this.clearQBTemplate([clnruleElem.id]);\n }\n if (column && this.isPlatformTemplate(column) && isTemplateRendered) {\n this.clearQBTemplate([clnruleElem.id]);\n }\n rule.rules.splice(index, 1);\n if (!(rule.rules[0] && rule.rules[0].rules)) {\n this.disableRuleCondition(groupElem, rule, this.enableSeparateConnector ? true : false);\n }\n var tooltipElem = this.element.querySelectorAll('.e-tooltip');\n for (var i_3 = 0; i_3 < tooltipElem.length; i_3++) {\n getComponent(tooltipElem[i_3], 'tooltip').refresh(tooltipElem[i_3]);\n }\n if (!this.isImportRules && !this.prvtEvtTgrDaD) {\n this.trigger('change', args);\n }\n this.filterRules(beforeRules, this.getValidRules(this.rule), 'deleteRule');\n }\n };\n QueryBuilder.prototype.setGroupRules = function (rule, isRoot) {\n if (this.headerTemplate && isRoot) {\n this.isRoot = true;\n }\n this.reset();\n this.groupIdCounter = 1;\n this.ruleIdCounter = 0;\n this.isImportRules = true;\n this.setProperties({ rule: rule }, true);\n rule = this.getRuleCollection(this.rule, false);\n this.importRules(this.rule, this.element.querySelector('.e-group-container'), true, this.rule.not, isRoot);\n if (rule.isLocked) {\n var lockGrpTarget = this.element.querySelector('.e-group-container').querySelector('.e-lock-grp-btn');\n this.groupLock(lockGrpTarget);\n }\n this.isImportRules = false;\n };\n QueryBuilder.prototype.keyBoardHandler = function (e) {\n if (e.currentTarget === this.element && this.readonly && (e.keyCode === 38 || e.keyCode === 40 || e.keyCode === 13)) {\n e.preventDefault();\n }\n else if (e.code === 'Escape' && this.allowDragAndDrop) {\n this.isDragEventPrevent = true;\n document.body.classList.remove('e-prevent-select');\n var borderLineElem = this.element.querySelectorAll('.e-drag-rule-bottom-line');\n borderLineElem.forEach(function (ele) {\n ele.classList.remove('e-drag-rule-bottom-line');\n });\n borderLineElem = this.element.querySelectorAll('.e-drag-rule-top-line');\n borderLineElem.forEach(function (ele) {\n ele.classList.remove('e-drag-rule-top-line');\n });\n borderLineElem = this.element.querySelectorAll('.e-qb-dragging-rule');\n borderLineElem.forEach(function (ele) {\n ele.classList.remove('e-qb-dragging-rule');\n });\n var dragElemnet = this.element.querySelector('.e-cloneproperties');\n if (dragElemnet) {\n remove(dragElemnet);\n }\n if (this.enableSeparateConnector) {\n this.refresh();\n }\n }\n };\n QueryBuilder.prototype.clearQBTemplate = function (ruleElemColl) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.isReact || this.isAngular) {\n this.clearTemplate(ruleElemColl);\n }\n };\n QueryBuilder.prototype.disableRuleCondition = function (groupElem, rules, isNewRuleAdded, isNewGroup) {\n if (!this.headerTemplate) {\n if (this.readonly) {\n return;\n }\n var count = groupElem.querySelector('.e-rule-list').childElementCount;\n var andElem = groupElem.querySelector('.e-btngroup-and');\n var orElem = groupElem.querySelector('.e-btngroup-or');\n if (count > 1) {\n andElem.disabled = false;\n orElem.disabled = false;\n if (orElem.nextElementSibling.classList.contains('e-btn-disable') ||\n andElem.nextElementSibling.classList.contains('e-btn-disable')) {\n orElem.nextElementSibling.classList.remove('e-btn-disable');\n andElem.nextElementSibling.classList.remove('e-btn-disable');\n }\n if (this.enableSeparateConnector && !isNewRuleAdded) {\n var index = 0;\n var element = void 0;\n // eslint-disable-next-line no-constant-condition\n while (true) {\n var andGroup = groupElem.parentElement.querySelectorAll('.e-btngroup-and');\n var orGroup = groupElem.parentElement.querySelectorAll('.e-btngroup-or');\n andElem = andGroup[andGroup.length - (1 + index)];\n orElem = orGroup[orGroup.length - (1 + index)];\n element = andGroup[andGroup.length - (1 + index)];\n if (element && element.parentElement && element.parentElement.style.display === 'none') {\n index++;\n }\n else {\n break;\n }\n }\n var elem = groupElem.previousElementSibling;\n while (elem && !elem.classList.contains('e-rule-container')) {\n if (elem.classList.contains('e-group-container')) {\n elem = elem.querySelectorAll('.e-rule-container')[elem.querySelectorAll('.e-rule-container').length - 1];\n break;\n }\n elem = elem.previousElementSibling;\n }\n if (isNewGroup && groupElem.classList.contains('e-group-container')) {\n elem = groupElem;\n var prevRule = this.getGroup(elem);\n if (prevRule.condition === 'or') {\n orElem.checked = true;\n }\n else {\n andElem.checked = true;\n }\n }\n else if (elem && elem.classList.contains('e-rule-container')) {\n var ruleID = elem.id.replace(this.element.id + '_', '');\n var prevRule = this.getRule(ruleID);\n if (prevRule.condition === 'or') {\n orElem.checked = true;\n }\n else {\n andElem.checked = true;\n }\n }\n }\n else if (!isNewRuleAdded) {\n if (rules && rules.condition === 'or') {\n orElem.checked = true;\n }\n else {\n andElem.checked = true;\n }\n }\n }\n else {\n if (this.enableSeparateConnector && !isNewRuleAdded) {\n var index = 0;\n var element = void 0;\n // eslint-disable-next-line no-constant-condition\n while (true) {\n var andGroup = groupElem.parentElement.querySelectorAll('.e-btngroup-and');\n var orGroup = groupElem.parentElement.querySelectorAll('.e-btngroup-or');\n andElem = andGroup[andGroup.length - (1 + index)];\n orElem = orGroup[orGroup.length - (1 + index)];\n element = andGroup[andGroup.length - (1 + index)];\n if (element && element.parentElement && element.parentElement.style.display === 'none') {\n index++;\n }\n else {\n break;\n }\n }\n var elem = void 0;\n var tempElem = groupElem.previousElementSibling;\n while (tempElem) {\n if (tempElem.classList.contains('e-group-container')) {\n tempElem = tempElem.querySelectorAll('.e-rule-container')[tempElem.querySelectorAll('.e-rule-container').length - 1];\n }\n if (tempElem.classList.contains('e-rule-container')) {\n elem = tempElem;\n break;\n }\n tempElem = tempElem.previousElementSibling;\n }\n if (isNullOrUndefined(elem) && groupElem.querySelectorAll('.e-rule-container')[groupElem.querySelectorAll('.e-rule-container').length - 1]) {\n elem = groupElem.querySelectorAll('.e-rule-container')[groupElem.querySelectorAll('.e-rule-container').length - 1];\n }\n if (isNewGroup && groupElem.classList.contains('e-group-container')) {\n elem = groupElem;\n var prevRule = this.getGroup(elem);\n if (prevRule.condition === 'or') {\n orElem.checked = true;\n }\n else {\n andElem.checked = true;\n }\n }\n else if (elem) {\n var ruleID = elem.id.replace(this.element.id + '_', '');\n var prevRule = this.getRule(ruleID);\n if (prevRule.condition === 'or' && orElem) {\n orElem.checked = true;\n }\n else if (andElem) {\n andElem.checked = true;\n }\n }\n }\n else if (!isNewRuleAdded && !isNullOrUndefined(andElem)) {\n andElem.checked = false;\n andElem.disabled = true;\n orElem.checked = false;\n orElem.disabled = true;\n if (rules) {\n orElem.nextElementSibling.classList.add('e-btn-disable');\n andElem.nextElementSibling.classList.add('e-btn-disable');\n }\n }\n }\n }\n };\n /**\n * Get the valid rule or rules collection.\n *\n * @param {RuleModel} currentRule - 'currentRule' to be passed to get the valid rules.\n * @returns {RuleModel} - Valid rule or rules collection\n */\n QueryBuilder.prototype.getValidRules = function (currentRule) {\n this.isValueEmpty = true;\n if (!currentRule) {\n currentRule = this.getRules();\n }\n var ruleCondtion = currentRule.condition;\n var notCondition = currentRule.not;\n var ruleColl = extend([], currentRule.rules, [], true);\n var rule = !isNullOrUndefined(currentRule.isLocked) ?\n this.getRuleCollection({ condition: ruleCondtion, rules: ruleColl, not: notCondition, isLocked: currentRule.isLocked }, true) :\n this.getRuleCollection({ condition: ruleCondtion, rules: ruleColl, not: notCondition }, true);\n this.isValueEmpty = false;\n return rule;\n };\n QueryBuilder.prototype.getRuleCollection = function (rule, isValidRule) {\n if (isNullOrUndefined(rule)) {\n return null;\n }\n var orgRule;\n if (rule.rules && rule.rules.length && (Object.keys(rule.rules[0]).length > 6 || isValidRule)) {\n var jLen = rule.rules.length;\n for (var j = 0; j < jLen; j++) {\n orgRule = rule.rules[j];\n orgRule = this.getRuleCollection(orgRule, isValidRule);\n rule.rules[j] = orgRule;\n if (Object.keys(orgRule).length < 1 && isValidRule) {\n rule.rules.splice(j, 1);\n j--;\n jLen--;\n }\n }\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var customObj = rule.custom;\n if ((rule.field && rule.field !== '') && (isNullOrUndefined(customObj) || (customObj && (customObj.type !== 'question' &&\n customObj.type !== 'answer')))) {\n if (rule.operator) {\n if (rule.operator.toString().indexOf('null') > -1 || rule.operator.toString().indexOf('empty') > -1) {\n rule.value = null;\n }\n }\n if ((this.isRefreshed && this.enablePersistence) || (rule.field !== '' && rule.operator !== '' &&\n (this.isValueEmpty ? rule.value !== '' && rule.value !== undefined : rule.value !== undefined)) ||\n (customObj && customObj.isQuestion)) {\n var condition = rule.condition;\n var lockedRule = rule.isLocked;\n rule = { 'label': rule.label, 'field': rule.field, 'operator': rule.operator, 'type': rule.type, 'value': rule.value };\n if (!isNullOrUndefined(lockedRule)) {\n rule.isLocked = lockedRule;\n }\n if (condition) {\n rule.condition = condition;\n }\n if (customObj) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n rule.custom = customObj;\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if ((rule.operator === 'in' || rule.operator === 'notin') && rule.value && rule.value.length === 0) {\n rule = {};\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if ((rule.operator === 'between' || rule.operator === 'notbetween') && Array.isArray(rule.value) && (rule.value.length < 2 || rule.value.some(function (val) { return val === '' || val === null; }))) {\n rule = {};\n }\n }\n else {\n rule = {};\n }\n }\n else {\n if (customObj && (customObj.type === 'question' || customObj.type === 'answer')) {\n var notValue = rule.not;\n rule = { 'label': rule.label, 'field': rule.field, 'operator': rule.operator, 'type': rule.type, 'value': rule.value,\n 'condition': rule.condition, 'rules': rule.rules\n };\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n rule.custom = customObj;\n if (this.enableNotCondition) {\n rule.not = notValue;\n }\n }\n else if ((isNullOrUndefined(rule.condition)) && isNullOrUndefined(rule.rules)) {\n rule = {};\n }\n else {\n var isLocked = rule.isLocked;\n if (this.enableNotCondition) {\n rule = { 'condition': rule.condition, 'rules': rule.rules, 'not': rule.not };\n }\n else {\n rule = { 'condition': rule.condition, 'rules': rule.rules };\n }\n if (!isNullOrUndefined(isLocked)) {\n rule.isLocked = isLocked;\n }\n if (customObj) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n rule.custom = customObj;\n }\n if (rule.rules && rule.rules.length === 0) {\n rule = {};\n }\n }\n }\n return rule;\n };\n /**\n * Set the rule or rules collection.\n *\n * @param {RuleModel} rule - 'rule' to be passed to set rules.\n * @returns {void}.\n */\n QueryBuilder.prototype.setRules = function (rule) {\n var mRules = extend({}, rule, {}, true);\n if (this.headerTemplate) {\n this.setGroupRules(mRules, true);\n }\n else {\n this.setGroupRules(mRules);\n }\n };\n /**\n * Gets the rule or rule collection.\n *\n * @returns {object} - Rule or rule collection\n */\n QueryBuilder.prototype.getRules = function () {\n var rule;\n if (this.enableNotCondition) {\n rule = { condition: this.rule.condition, rules: this.rule.rules, not: this.rule.not };\n }\n else {\n rule = { condition: this.rule.condition, rules: this.rule.rules };\n }\n if (!isNullOrUndefined(this.rule.isLocked)) {\n rule.isLocked = this.rule.isLocked;\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.rule.custom) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n rule.custom = this.rule.custom;\n }\n return rule;\n };\n /**\n * Gets the rule.\n *\n * @param {string | HTMLElement} elem - 'elem' to be passed to get rule.\n * @returns {object} - Rule\n */\n QueryBuilder.prototype.getRule = function (elem) {\n var ruleElem;\n var ruleId;\n var index = 0;\n if (elem instanceof HTMLElement) {\n ruleElem = closest(elem, '.e-rule-container');\n }\n else {\n ruleId = this.element.id + '_' + elem;\n ruleElem = document.getElementById(ruleId);\n }\n if (isNullOrUndefined(ruleElem)) {\n return null;\n }\n var groupElem = closest(ruleElem, '.e-group-container');\n var rule = this.getParentGroup(groupElem);\n while (ruleElem.previousElementSibling !== null) {\n ruleElem = ruleElem.previousElementSibling;\n if (!this.enableSeparateConnector || (this.enableSeparateConnector &&\n ((!this.headerTemplate && !ruleElem.classList.contains('e-btn-group')) ||\n this.headerTemplate && (ruleElem.classList.contains('e-rule-container') ||\n ruleElem.classList.contains('e-group-container'))))) {\n index++;\n }\n }\n return rule.rules[index];\n };\n /**\n * Gets the group.\n *\n * @param {string | Element} target - 'target' to be passed to get group.\n * @returns {object} -Group\n */\n QueryBuilder.prototype.getGroup = function (target) {\n if (target instanceof Element && target.className.indexOf('e-group-container') < 1) {\n target = closest(target, '.e-group-container');\n }\n var groupId = (target instanceof Element) ? target.id : this.element.id + '_' + target;\n var rule = this.getParentGroup(groupId);\n return rule;\n };\n /**\n * Deletes the group or groups based on the group ID.\n *\n * @param {string[]} groupIdColl - 'groupIdColl' to be passed to delete groups.\n * @returns {void}\n */\n QueryBuilder.prototype.deleteGroups = function (groupIdColl) {\n var i;\n var len = groupIdColl.length;\n var groupID;\n for (i = 0; i < len; i++) {\n if (groupIdColl[i] === 'group0') {\n continue;\n }\n groupID = this.element.id + '_' + groupIdColl[i];\n this.deleteGroup(document.getElementById(groupID));\n }\n };\n /**\n * Return the Query from current rules collection.\n *\n * @returns {Promise} - Query from current rules collection\n * @blazorType object\n */\n QueryBuilder.prototype.getFilteredRecords = function () {\n var predicate = this.getPredicate(this.getValidRules(this.rule));\n var dataManagerQuery = isNullOrUndefined(predicate) ? new Query() : new Query().where(predicate);\n return this.dataManager.executeQuery(dataManagerQuery);\n };\n /**\n * Deletes the rule or rules based on the rule ID.\n *\n * @param {string[]} ruleIdColl - 'ruleIdColl' to be passed to delete rules.\n * @returns {void}.\n */\n QueryBuilder.prototype.deleteRules = function (ruleIdColl) {\n var i;\n var len = ruleIdColl.length;\n var ruleID;\n for (i = 0; i < len; i++) {\n ruleID = this.element.id + '_' + ruleIdColl[i];\n this.deleteRule(document.getElementById(ruleID));\n }\n };\n /**\n * Gets the query for Data Manager.\n *\n * @param {RuleModel} rule - 'rule' to be passed to get query.\n * @returns {string} - Query for Data Manager\n */\n QueryBuilder.prototype.getDataManagerQuery = function (rule) {\n var predicate = this.getPredicate(rule);\n var query;\n var fields = [];\n for (var i = 0, len = Object.keys(this.columns); i < len.length; i++) {\n fields.push(this.columns[i].field);\n }\n if (rule.rules.length) {\n query = new Query().select(fields).where(predicate);\n }\n else {\n query = new Query().select(fields);\n }\n return query;\n };\n /**\n * Get the predicate from collection of rules.\n *\n * @param {RuleModel} rule - 'rule' to be passed to get predicate.\n * @returns {Predicate} - Predicate from collection of rules\n */\n QueryBuilder.prototype.getPredicate = function (rule) {\n var ruleColl = rule.rules;\n var pred;\n var pred2;\n var ruleValue;\n var ignoreCase = false;\n var column;\n if (!ruleColl) {\n return pred;\n }\n for (var i = 0, len = ruleColl.length; i < len; i++) {\n var operator = ruleColl[i].operator;\n if (operator === 'notstartswith') {\n operator = 'doesnotstartwith';\n }\n else if (operator === 'notendswith') {\n operator = 'doesnotendwith';\n }\n else if (operator === 'notcontains') {\n operator = 'doesnotcontain';\n }\n var keys = Object.keys(ruleColl[i]);\n ignoreCase = false;\n if (keys.indexOf('rules') > -1 && ruleColl[i].rules) {\n pred2 = this.getPredicate(ruleColl[i]);\n if (pred2) {\n if (pred) {\n if (rule.condition === 'and') {\n pred = pred.and(pred2);\n }\n else {\n pred = pred.or(pred2);\n }\n }\n else {\n pred = pred2;\n }\n }\n }\n else if (!isNullOrUndefined(operator) && !isNullOrUndefined(operator.length)) {\n var oper = ruleColl[i].operator.toLowerCase();\n var isDateFilter = false;\n var dateOperColl = ['equal', 'notequal', 'greaterthan', 'greaterthanorequal', 'lessthan', 'lessthanorequal'];\n if (ruleColl[i].type === 'string') {\n ignoreCase = this.matchCase ? false : true;\n }\n if (ruleColl[i].type === 'date' && dateOperColl.indexOf(oper) > -1) {\n ignoreCase = true;\n }\n column = this.getColumn(ruleColl[i].field);\n if (oper.indexOf('null') > -1 || oper.indexOf('empty') > -1) {\n ruleColl[i].value = null;\n }\n else if (ruleColl[i].type === 'date' && !(ruleColl[i].value instanceof Array)) {\n var format = this.getFormat(column.format);\n if (!isNullOrUndefined(ruleColl[i].value)) {\n ruleValue = this.getDate(ruleColl[i].value, format);\n if (dateOperColl.indexOf(oper) > -1 && !this.isTime(ruleColl[i].value)) {\n isDateFilter = true;\n }\n }\n else {\n ruleValue = null;\n }\n }\n else {\n ruleValue = ruleColl[i].value;\n }\n if (i === 0) {\n if (isDateFilter || (oper.indexOf('in') > -1 || oper.indexOf('between') > -1 || oper.indexOf('null') > -1 ||\n oper.indexOf('empty') > -1) && (oper.indexOf('contain') < 0)) {\n pred = isDateFilter ? this.datePredicate(ruleColl[i], ruleValue) :\n this.arrayPredicate(ruleColl[i]);\n }\n else {\n var value = ruleValue;\n if (value !== '') {\n pred = new Predicate(ruleColl[i].field, operator, ruleValue, ignoreCase);\n }\n }\n }\n else {\n if (isDateFilter || (oper.indexOf('in') > -1 || oper.indexOf('between') > -1 ||\n oper.indexOf('null') > -1 || oper.indexOf('empty') > -1) && oper.indexOf('contain') < 0) {\n pred = isDateFilter ? this.datePredicate(ruleColl[i], ruleValue, pred, rule.condition) :\n this.arrayPredicate(ruleColl[i], pred, rule.condition);\n }\n else {\n if (rule.condition === 'and') {\n var value = ruleValue;\n if (pred && value !== '') {\n pred\n = pred.and(ruleColl[i].field, operator, ruleValue, ignoreCase);\n }\n else if (value !== '') {\n pred = new Predicate(ruleColl[i].field, operator, ruleValue, ignoreCase);\n }\n }\n else {\n var value = ruleValue;\n if (pred && value !== '') {\n pred = pred.or(ruleColl[i].field, operator, ruleValue, ignoreCase);\n }\n else if (value !== '') {\n pred = new Predicate(ruleColl[i].field, operator, ruleValue, ignoreCase);\n }\n }\n }\n }\n }\n }\n if (this.dataSource instanceof DataManager) {\n if (!isNullOrUndefined(pred) && (pred.operator === 'isnull' || pred.operator === 'isnotnull')) {\n pred.operator = pred.operator === 'isnull' ? 'equal' : 'notequal';\n }\n }\n return pred;\n };\n QueryBuilder.prototype.getLocale = function () {\n var gregorianFormat = '.dates.calendars.gregorian.days.format.short';\n var localeString = this.locale;\n var mainVal = 'main.';\n var cultureObj = getValue(mainVal + '' + this.locale + gregorianFormat, cldrData);\n if (!cultureObj) {\n localeString = 'en';\n }\n return localeString;\n };\n QueryBuilder.prototype.getColumn = function (field, col) {\n var columns = this.columns;\n var column;\n columns = col ? col : columns;\n for (var i = 0, iLen = columns.length; i < iLen; i++) {\n if (columns[i].field === field) {\n column = columns[i];\n break;\n }\n else if (columns[i].columns) {\n column = this.getColumn(field, columns[i].columns);\n if (column) {\n break;\n }\n }\n else if (field && field.indexOf(this.separator) > -1) {\n if (this.separator !== '' && columns[i].field === field.split(this.separator)[0]) {\n column = columns[i];\n break;\n }\n }\n }\n return column;\n };\n /* eslint-disable */\n /**\n * Return the operator bound to the column.\n *\n * @returns {[key: string]: Object}[] - Operator bound to the column\n */\n /* eslint-enable */\n QueryBuilder.prototype.getOperators = function (field) {\n var column = this.getColumn(field);\n return column.operators;\n };\n QueryBuilder.prototype.setTime = function (date, isStart) {\n if (isStart) {\n date.setHours(0, 0, 0);\n }\n else {\n date.setHours(23, 59, 59);\n }\n return date;\n };\n QueryBuilder.prototype.datePredicate = function (ruleColl, value, predicate, condition) {\n var pred;\n var startDate = this.setTime(new Date(value.getTime()), true);\n var endDate = this.setTime(value);\n switch (ruleColl.operator) {\n case 'equal':\n pred = new Predicate(ruleColl.field, 'greaterthanorequal', startDate);\n pred = pred.and(ruleColl.field, 'lessthanorequal', endDate);\n break;\n case 'notequal':\n pred = new Predicate(ruleColl.field, 'lessthan', startDate);\n pred = pred.or(ruleColl.field, 'greaterthan', endDate);\n break;\n case 'greaterthan':\n pred = new Predicate(ruleColl.field, 'greaterthan', endDate);\n break;\n case 'greaterthanorequal':\n pred = new Predicate(ruleColl.field, 'greaterthanorequal', startDate);\n break;\n case 'lessthan':\n pred = new Predicate(ruleColl.field, 'lessthan', startDate);\n break;\n case 'lessthanorequal':\n pred = new Predicate(ruleColl.field, 'lessthanorequal', endDate);\n break;\n }\n if (pred) {\n if (predicate) {\n if (condition === 'and') {\n predicate = predicate.and(pred);\n }\n else if (condition === 'or') {\n predicate = predicate.or(pred);\n }\n }\n else {\n predicate = pred;\n }\n }\n return predicate;\n };\n QueryBuilder.prototype.arrayPredicate = function (ruleColl, predicate, condition) {\n var value = ruleColl.value;\n var operator = ruleColl.operator.toString();\n var nullValue = ruleColl.value;\n var pred;\n var column = this.getColumn(ruleColl.field);\n var format = this.getFormat(column.format);\n if (operator.indexOf('null') > -1 || operator.indexOf('empty') > -1) {\n switch (operator) {\n case 'isnull':\n pred = new Predicate(ruleColl.field, 'isnull', nullValue);\n break;\n case 'isnotnull':\n pred = new Predicate(ruleColl.field, 'isnotnull', nullValue);\n break;\n case 'isempty':\n pred = new Predicate(ruleColl.field, 'equal', '');\n break;\n case 'isnotempty':\n pred = new Predicate(ruleColl.field, 'notequal', '');\n break;\n }\n }\n if (!(operator.indexOf('null') > -1 || operator.indexOf('empty') > -1)) {\n for (var j = 0, jLen = value.length; j < jLen; j++) {\n if (value[j] !== '' || ((operator === 'in' || operator === 'notin') && column.type === 'string')) {\n if (j === 0) {\n var gte = 'greaterthanorequal';\n switch (operator) {\n case 'between':\n if (column.type !== 'date') {\n pred = new Predicate(ruleColl.field, gte, value[j]);\n }\n else {\n pred = new Predicate(ruleColl.field, gte, value[j] ?\n (this.isTime(value[j]) ? this.getDate(value[j], format) :\n this.setTime(this.getDate(value[j], format), true)) : null);\n }\n break;\n case 'notbetween':\n if (column.type === 'date') {\n pred = new Predicate(ruleColl.field, 'lessthan', value[j] ?\n (this.isTime(value[j]) ? this.getDate(value[j], format) :\n this.setTime(this.getDate(value[j], format), true)) : null);\n }\n else {\n pred = new Predicate(ruleColl.field, 'lessthan', value[j]);\n }\n break;\n case 'in':\n pred = new Predicate(ruleColl.field, 'equal', value[j]);\n break;\n case 'notin':\n pred = new Predicate(ruleColl.field, 'notequal', value[j]);\n break;\n }\n }\n else {\n var gt = 'greaterthan';\n switch (ruleColl.operator) {\n case 'between':\n if (column.type === 'date') {\n pred = pred.and(ruleColl.field, 'lessthanorequal', value[j] ?\n (this.isTime(value[j]) ? this.getDate(value[j], format) :\n this.setTime(this.getDate(value[j], format))) : value[j]);\n }\n else {\n pred = pred.and(ruleColl.field, 'lessthanorequal', value[j]);\n }\n break;\n case 'notbetween':\n if (column.type === 'date') {\n pred = pred.or(ruleColl.field, gt, value[j] ?\n (this.isTime(value[j]) ? this.getDate(value[j], format) :\n this.setTime(this.getDate(value[j], format))) : value[j]);\n }\n else {\n pred = pred.or(ruleColl.field, 'greaterthan', value[j]);\n }\n break;\n case 'in':\n pred = pred.or(ruleColl.field, 'equal', value[j]);\n break;\n case 'notin':\n pred = pred.and(ruleColl.field, 'notequal', value[j]);\n break;\n }\n }\n }\n }\n }\n if (pred) {\n if (predicate) {\n if (condition === 'and') {\n predicate = predicate.and(pred);\n }\n else if (condition === 'or') {\n predicate = predicate.or(pred);\n }\n }\n else {\n predicate = pred;\n }\n }\n return predicate;\n };\n QueryBuilder.prototype.getDate = function (value, format) {\n var currDate = this.intl.parseDate(value, format);\n if (value.indexOf(':') > -1 && (value.indexOf('/') < 0 && value.indexOf(',') < 0\n && value.indexOf('-') < 0)) {\n currDate = new Date();\n currDate.setHours(parseInt(value.split(':')[0], 10));\n currDate.setMinutes(parseInt(value.split(':')[1], 10));\n if (value.split(':')[2]) {\n currDate.setSeconds(parseInt(value.split(':')[2], 10));\n }\n }\n return currDate;\n };\n QueryBuilder.prototype.isTime = function (value) {\n if (value && value.indexOf(':') > -1) {\n return true;\n }\n return false;\n };\n QueryBuilder.prototype.importRules = function (rule, parentElem, isReset, not, isRoot) {\n if (!isReset) {\n parentElem = this.renderGroup(rule, rule.condition, parentElem, not);\n }\n else {\n if (rule.rules && rule.rules.length > 1 && !this.headerTemplate) {\n // enable/disable conditions when rule group is added\n var orElem = parentElem.querySelector('.e-btngroup-or');\n var andElem = parentElem.querySelector('.e-btngroup-and');\n if (this.enableSeparateConnector && parentElem.previousElementSibling) {\n orElem = parentElem.previousElementSibling.querySelector('.e-btngroup-or');\n andElem = parentElem.previousElementSibling.querySelector('.e-btngroup-and');\n }\n orElem.disabled = false;\n andElem.disabled = false;\n if (this.enableSeparateConnector) {\n var elem = parentElem.previousElementSibling;\n while (elem && !elem.classList.contains('e-rule-container')) {\n if (elem.classList.contains('e-group-container')) {\n elem = elem.querySelectorAll('.e-rule-container')[elem.querySelectorAll('.e-rule-container').length - 1];\n break;\n }\n elem = elem.previousElementSibling;\n }\n if (elem && elem.classList.contains('e-rule-container')) {\n var ruleID = elem.id.replace(this.element.id + '_', '');\n var prevRule = this.getRule(ruleID);\n if (prevRule.condition === 'or') {\n orElem.checked = true;\n }\n else {\n andElem.checked = true;\n }\n }\n }\n else {\n if (rule.condition === 'or') {\n orElem.checked = true;\n }\n else {\n andElem.checked = true;\n }\n }\n }\n else {\n // enable/disable conditions when rule condition is added\n this.disableRuleCondition(parentElem);\n }\n if (this.headerTemplate && isRoot) {\n parentElem = this.renderGroup(rule, rule.condition, this.element, rule.not, isRoot);\n }\n if (this.enableNotCondition && !this.headerTemplate) {\n var tglBtnElem = parentElem.querySelector('.e-qb-toggle');\n if (rule.not) {\n addClass([tglBtnElem], 'e-active-toggle');\n }\n else {\n removeClass([tglBtnElem], 'e-active-toggle');\n }\n }\n }\n if (rule.rules && rule.rules.length === 0 && this.headerTemplate) {\n rule.rules[0] = { 'label': '', 'field': '', 'operator': '', 'type': '', 'value': '' };\n }\n var ruleColl = rule.rules;\n if (!isNullOrUndefined(ruleColl)) {\n for (var i = 0, len = ruleColl.length; i < len; i++) {\n var keys = Object.keys(ruleColl[i]);\n if (!isNullOrUndefined(ruleColl[i].rules) && keys.indexOf('rules') > -1 && (ruleColl[i].rules.length !== 0)) {\n if (this.element.querySelectorAll('.e-group-container').length > this.maxGroupCount) {\n return null;\n }\n parentElem = this.renderGroup(ruleColl[i], ruleColl[i].condition, parentElem, ruleColl[i].not);\n parentElem = this.importRules(ruleColl[i], parentElem, true);\n }\n else {\n this.renderRule(ruleColl[i], parentElem);\n }\n if (!isNullOrUndefined(ruleColl[i].rules) && ruleColl[i].isLocked) {\n var lockGrpTarget = parentElem.querySelector('.e-rule-list').children[i].querySelector('.e-lock-grp-btn');\n this.groupLock(lockGrpTarget);\n }\n }\n }\n if (parentElem) {\n parentElem = closest(parentElem, '.e-rule-list');\n }\n if (parentElem) {\n parentElem = closest(parentElem, '.e-group-container');\n }\n return parentElem;\n };\n QueryBuilder.prototype.renderGroup = function (rule, condition, parentElem, not, isRoot) {\n this.addGroupElement(true, parentElem, condition, false, not, isRoot, rule); //Child group\n var element = parentElem.querySelectorAll('.e-group-container');\n var cloneElem = parentElem.querySelector('.e-rule-list').children;\n if (this.showButtons.cloneGroup && this.cloneGrpBtnClick && this.isMiddleGroup) {\n this.isMiddleGroup = false;\n this.cloneGrpBtnClick = false;\n var index = 0;\n var tempGroupIndex = this.groupIndex + 1;\n if (this.enableSeparateConnector) {\n for (var i = 0; i < tempGroupIndex; i++) {\n if (cloneElem[i].classList.contains('e-rule-container')) {\n tempGroupIndex++;\n index++;\n }\n }\n }\n return cloneElem[this.groupIndex + index + 1]; // group added in the middle\n }\n else if (this.showButtons.cloneGroup && this.cloneGrpBtnClick && this.isLastGroup) {\n this.isLastGroup = false;\n this.cloneGrpBtnClick = false;\n return cloneElem[cloneElem.length - 1]; // group added in the end\n }\n else {\n return element[element.length - 1];\n }\n };\n QueryBuilder.prototype.renderRule = function (rule, parentElem) {\n if (parentElem.className.indexOf('e-group-container') > -1) {\n this.addRuleElement(parentElem, rule); //Create rule\n }\n else {\n this.addRuleElement(parentElem.querySelector('.e-group-container'), rule); //Create group\n }\n };\n QueryBuilder.prototype.enableReadonly = function () {\n var target = this.element;\n var elem = target.querySelectorAll('.e-dropdownlist, .e-dropdowntree, .e-numerictextbox, .e-textbox, .e-datepicker, .e-multiselect .e-lib, .e-radio');\n for (var i = 0; i < elem.length; i++) {\n if (elem[i].classList.contains('e-dropdownlist')) {\n var dropDownObj = getInstance(elem[i], DropDownList);\n dropDownObj.readonly = this.isReadonly;\n }\n else if (elem[i].classList.contains('e-dropdowntree')) {\n var dropDownTreeObj = getComponent(elem[i], 'dropdowntree');\n dropDownTreeObj.readonly = this.isReadonly;\n }\n else if (elem[i].classList.contains('e-numerictextbox')) {\n var numericTextBoxObj = getInstance(elem[i], NumericTextBox);\n numericTextBoxObj.readonly = this.isReadonly;\n }\n else if (elem[i].classList.contains('e-textbox')) {\n var textBoxObj = getInstance(elem[i], TextBox);\n textBoxObj.readonly = this.isReadonly;\n }\n else if (elem[i].classList.contains('e-datepicker')) {\n var datePickerObj = getInstance(elem[i], DatePicker);\n datePickerObj.readonly = this.isReadonly;\n }\n else if (elem[i].classList.contains('e-multiselect')) {\n var multiSelectObj = getInstance(elem[i], MultiSelect);\n multiSelectObj.readonly = this.isReadonly;\n }\n else if (elem[i].classList.contains('e-radio')) {\n var radioButtonObj = getInstance(elem[i], RadioButton);\n if (!radioButtonObj.checked) {\n if (this.isReadonly) {\n elem[i].parentElement.style.display = 'none';\n }\n else {\n elem[i].parentElement.style.display = 'inherit';\n }\n }\n }\n }\n var deleteGroupElems = this.element.querySelectorAll('.e-deletegroup');\n var addRuleGroupElems = this.element.querySelectorAll('.e-addrulegroup');\n var removeRuleElems = this.element.querySelectorAll('.e-removerule');\n if (!this.isReadonly && this.ruleElem.classList.contains('e-readonly')) {\n this.ruleElem.classList.remove('e-readonly');\n }\n var elems = [deleteGroupElems, addRuleGroupElems, removeRuleElems];\n for (var i = 0; i < elems.length; i++) {\n elems[i].forEach(function (elem) {\n if (elem.classList.contains('e-readonly')) {\n elem.classList.remove('e-readonly');\n }\n else {\n elem.classList.add('e-readonly');\n }\n });\n }\n this.enableBtnGroup();\n };\n QueryBuilder.prototype.enableBtnGroup = function () {\n var _this = this;\n var elems = this.element.querySelectorAll('.e-btngroup-and-lbl, .e-btngroup-or-lbl, .e-qb-toggle');\n var not = false;\n elems.forEach(function (elem) {\n if (elem.classList.contains('e-qb-toggle') && !elem.classList.contains('e-active-toggle')\n && !elem.classList.contains('e-readonly')) {\n elem.classList.add('e-readonly');\n not = false;\n }\n else if (elem.classList.contains('e-qb-toggle') && elem.classList.contains('e-not-readonly')) {\n elem.classList.remove('e-not-readonly');\n }\n else if (elem.classList.contains('e-qb-toggle') && elem.classList.contains('e-readonly')) {\n elem.classList.remove('e-readonly');\n }\n else if (elem.classList.contains('e-active-toggle')) {\n elem.classList.add('e-not-readonly');\n not = true;\n }\n else if (elem.previousElementSibling.checked || elem.classList.contains('e-readonly')) {\n elem.classList.remove('e-readonly');\n if (not) {\n if (elem.textContent === 'AND') {\n elem.classList.add('e-readonly-and');\n }\n else {\n elem.classList.add('e-readonly-or');\n }\n }\n else {\n if (elem.textContent === 'AND' && _this.isReadonly) {\n elem.classList.remove('e-not');\n elem.classList.add('e-readonly-and');\n }\n else {\n if (_this.enableNotCondition) {\n elem.classList.add('e-not');\n }\n elem.classList.remove('e-readonly-and');\n }\n if (elem.textContent === 'OR' && _this.isReadonly) {\n elem.classList.add('e-readonly-or-not');\n }\n else {\n elem.classList.remove('e-readonly-or-not');\n }\n }\n }\n else if (elem.classList.contains('e-btn-disable')) {\n // do nothing\n }\n else {\n elem.classList.add('e-readonly');\n }\n });\n };\n QueryBuilder.prototype.isDateFunction = function (value) {\n var dateFunc = ['date', 'time', 'day', 'week', 'month', 'year', 'hour', 'minute', 'second', 'now', 'quarter', 'period', 'extract'];\n for (var i = 0, len = dateFunc.length; i < len; i++) {\n if (value.toLowerCase().indexOf(dateFunc[i]) > -1) {\n return true;\n }\n }\n return false;\n };\n QueryBuilder.prototype.getSqlString = function (rules, enableEscape, queryStr, sqlLocale) {\n var isRoot = false;\n if (!queryStr && queryStr !== '') {\n queryStr = '';\n isRoot = true;\n }\n else {\n queryStr += '(';\n }\n var condition = rules.condition;\n if (rules.not) {\n var rulesNotCondition = void 0;\n if (isRoot) {\n rulesNotCondition = sqlLocale ? this.l10n.getConstant('NOT').toUpperCase() + ' (' : 'NOT (';\n queryStr += rulesNotCondition;\n }\n else {\n rulesNotCondition = sqlLocale ? ' ' + this.l10n.getConstant('NOT').toUpperCase() + ' (' : ' NOT (';\n queryStr += rulesNotCondition;\n }\n }\n if (rules.rules) {\n for (var j = 0, jLen = rules.rules.length; j < jLen; j++) {\n if (rules.rules[j].rules) {\n queryStr = this.getSqlString(rules.rules[j], enableEscape, queryStr, sqlLocale);\n if (this.enableSeparateConnector) {\n condition = rules.rules[j].condition;\n }\n }\n else {\n var rule = rules.rules[j];\n var valueStr = '';\n var ruleOpertor = sqlLocale ? this.sqlOperators[rule.operator] : this.operators[rule.operator];\n if (rule.value instanceof Array) {\n if (rule.operator.toString().indexOf('between') > -1) {\n var ruleCondition = sqlLocale ? ' ' + this.l10n.getConstant('AND').toUpperCase() + ' ' : ' ' + 'AND' + ' ';\n if (rule.type === 'date' && !this.isDateFunction(rule.value[0])) {\n valueStr += '\"' + rule.value[0] + '\"' + ruleCondition + '\"' + rule.value[1] + '\"';\n }\n else {\n valueStr += rule.value[0] + ruleCondition + rule.value[1];\n }\n }\n else {\n if (typeof rule.value[0] === 'string' && rule.value !== null) {\n valueStr += '(\"' + rule.value[0] + '\"';\n for (var k = 1, kLen = rule.value.length; k < kLen; k++) {\n valueStr += ',\"' + rule.value[k] + '\"';\n }\n valueStr += ')';\n }\n else {\n valueStr += '(' + rule.value + ')';\n }\n }\n }\n else {\n if (rule.operator.toString().indexOf('startswith') > -1) {\n valueStr += rule.value ? '(\"' + rule.value + '%\")' : '(' + rule.value + ')';\n }\n else if (rule.operator.toString().indexOf('endswith') > -1) {\n valueStr += rule.value ? '(\"%' + rule.value + '\")' : '(' + rule.value + ')';\n }\n else if (rule.operator.toString().indexOf('contains') > -1) {\n valueStr += rule.value ? '(\"%' + rule.value + '%\")' : '(' + rule.value + ')';\n }\n else {\n if (rule.type === 'number' || typeof rule.value === 'boolean' ||\n (rule.value === null && (rule.operator.toString().indexOf('empty') < -1))) {\n valueStr += rule.value;\n }\n else if (rule.operator.toString().indexOf('empty') > -1) {\n valueStr += '\"\"';\n }\n else {\n valueStr += '\"' + rule.value + '\"';\n }\n }\n }\n if (rule.operator.toString().indexOf('null') > -1) {\n if (enableEscape) {\n rule.field = '`' + rule.field + '`';\n }\n else {\n if (rule.field.indexOf(' ') > -1) {\n rule.field = '\"' + rule.field + '\"';\n }\n }\n queryStr += rule.field + ' ' + ruleOpertor;\n }\n else {\n var custOper = ruleOpertor;\n if (rule.operator === 'isempty') {\n custOper = '=';\n }\n else if (rule.operator === 'isnotempty') {\n custOper = '!=';\n }\n if (enableEscape) {\n rule.field = '`' + rule.field + '`';\n }\n else {\n if (rule.field.indexOf(' ') > -1) {\n rule.field = '\"' + rule.field + '\"';\n }\n }\n queryStr += rule.field + ' ' + custOper + ' ' + valueStr;\n }\n if (rule.condition && rule.condition !== '') {\n condition = rule.condition;\n }\n }\n if (j !== jLen - 1) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var rule = rules.rules[j];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (condition === '' || (rule && rule.condition !== '' && rule.custom && rule.custom.isCustom)) {\n condition = rule.condition;\n }\n if (condition) {\n condition = sqlLocale ? this.l10n.getConstant(condition.toUpperCase()).toUpperCase() : condition.toUpperCase();\n queryStr += ' ' + condition + ' ';\n }\n }\n }\n }\n if (!isRoot) {\n queryStr += ')';\n }\n if (rules.not) {\n queryStr += ')';\n }\n return queryStr;\n };\n /**\n * Sets the rules from the sql query.\n *\n * @param {string} sqlString - 'sql String' to be passed to set the rule.\n * @param {boolean} sqlLocale - Optional. Set `true` if Localization for Sql query.\n * @returns {void}\n */\n QueryBuilder.prototype.setRulesFromSql = function (sqlString, sqlLocale) {\n sqlString = sqlString.replace(/`/g, '');\n var ruleModel = this.getRulesFromSql(sqlString, sqlLocale);\n this.setRules({ condition: ruleModel.condition, not: ruleModel.not, rules: ruleModel.rules });\n };\n /**\n * Get the rules from SQL query.\n *\n * @param {string} sqlString - 'sql String' to be passed to get the rule.\n * @param {boolean} sqlLocale - Set `true` if Localization for Sql query.\n * @returns {object} - Rules from SQL query\n */\n QueryBuilder.prototype.getRulesFromSql = function (sqlString, sqlLocale) {\n this.parser = [];\n this.sqlParser(sqlString, sqlLocale);\n this.setProperties({ rule: { condition: 'and', not: false, rules: [] } }, true);\n var rule = this.processParser(this.parser, this.rule, [0], sqlLocale);\n if (this.enableNotCondition) {\n return { condition: rule.condition, not: rule.not, rules: rule.rules };\n }\n else {\n return { condition: rule.condition, rules: rule.rules };\n }\n };\n /**\n * Gets the sql query from rules.\n *\n * @param {RuleModel} rule - 'rule' to be passed to get the sql.\n * @param {boolean} allowEscape - Set `true` if it exclude the escape character.\n * @param {boolean} sqlLocale - Set `true` if Localization for Sql query.\n * @returns {string} - Sql query from rules.\n */\n QueryBuilder.prototype.getSqlFromRules = function (rule, allowEscape, sqlLocale) {\n if (!rule) {\n rule = this.getValidRules();\n }\n rule = this.getRuleCollection(rule, false);\n var sqlString = this.getSqlString(this.getValidRules(rule), allowEscape, null, sqlLocale).replace(/\"/g, '\\'');\n return sqlString;\n };\n /**\n * Gets the parameter SQL query from rules.\n *\n * @param {RuleModel} rule – Specify the rule to be passed to get the parameter sql string.\n * @returns {ParameterizedSql} – Parameterized SQL query from rules.\n */\n QueryBuilder.prototype.getParameterizedSql = function (rule) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.moduleLoader.loadedModules.length) {\n if (!rule) {\n rule = this.getValidRules();\n }\n var obj = { sql: null };\n this.notify('query-library', { prop: 'getParameterSql', onPropertyChange: false, value: { rule: rule, obj: obj } });\n return obj['sql'];\n }\n else {\n console.warn('[WARNING] :: Module \"query-library\" is not available in QueryBuilder component! You either misspelled the module name or forgot to load it.');\n }\n return null;\n };\n /**\n * Sets the rules from the parameter sql query.\n *\n * @param { ParameterizedSql} sqlQuery – Specifies the parameter SQL to be passed to set the rule and load it to the query builder.\n * @returns {void}\n */\n QueryBuilder.prototype.setParameterizedSql = function (sqlQuery) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.moduleLoader.loadedModules.length) {\n var obj = { sql: null };\n this.notify('query-library', { prop: 'convertParamSqlToSql', onPropertyChange: false, value: { sql: sqlQuery, obj: obj } });\n var sql = obj['sql'];\n if (sql) {\n sql = sql.replace(/`/g, '');\n var ruleModel = this.getRulesFromSql(sql);\n this.setRules({ condition: ruleModel.condition, not: ruleModel.not, rules: ruleModel.rules });\n }\n }\n else {\n console.warn('[WARNING] :: Module \"query-library\" is not available in QueryBuilder component! You either misspelled the module name or forgot to load it.');\n }\n };\n /**\n * Gets the named parameter SQL query from rules.\n *\n * @param {RuleModel} rule – Specify the rule to be passed to get the named parameter SQL string.\n * @returns {ParameterizedNamedSql} – Parameterized Named SQL query from rules.\n */\n QueryBuilder.prototype.getParameterizedNamedSql = function (rule) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.moduleLoader.loadedModules.length) {\n if (!rule) {\n rule = this.getValidRules();\n }\n var obj = { sql: null };\n this.notify('query-library', { prop: 'getNamedParameterSql', onPropertyChange: false, value: { rule: rule, obj: obj } });\n return obj['sql'];\n }\n else {\n console.warn('[WARNING] :: Module \"query-library\" is not available in QueryBuilder component! You either misspelled the module name or forgot to load it.');\n }\n return null;\n };\n /**\n * Sets the rules from the named parameter SQL query.\n *\n * @param { ParameterizedNamedSql } sqlQuery – Specifies the named parameter SQL to be passed to set the rule and load it to the query builder.\n * @returns {void}\n */\n QueryBuilder.prototype.setParameterizedNamedSql = function (sqlQuery) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.moduleLoader.loadedModules.length) {\n var obj = { sql: null };\n this.notify('query-library', { prop: 'convertNamedParamSqlToSql', onPropertyChange: false, value: { sql: sqlQuery, obj: obj } });\n var sql = obj['sql'];\n if (sql) {\n sql = sql.replace(/`/g, '');\n var ruleModel = this.getRulesFromSql(sql);\n this.setRules({ condition: ruleModel.condition, not: ruleModel.not, rules: ruleModel.rules });\n }\n }\n else {\n console.warn('[WARNING] :: Module \"query-library\" is not available in QueryBuilder component! You either misspelled the module name or forgot to load it.');\n }\n };\n /**\n * Set the rules from Mongo query.\n *\n * @param {string} mongoQuery - 'sql String' to be passed to get the rule.\n * @param {boolean} mongoLocale - Set `true` if Localization for Mongo query.\n * @returns {void}\n */\n QueryBuilder.prototype.setMongoQuery = function (mongoQuery, mongoLocale) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.moduleLoader.loadedModules.length) {\n this.rule = { condition: 'and', not: false, rules: [] };\n this.notify('query-library', { prop: 'mongoParser', onPropertyChange: false, value: { mongoQuery: JSON.parse(mongoQuery), rule: this.rule, mongoLocale: mongoLocale } });\n }\n else {\n console.warn('[WARNING] :: Module \"query-library\" is not available in QueryBuilder component! You either misspelled the module name or forgot to load it.');\n }\n };\n /**\n * Gets the Mongo query from rules.\n *\n * @param {RuleModel} rule - 'rule' to be passed to get the sql.\n * @returns {object} - Sql query from rules.\n */\n QueryBuilder.prototype.getMongoQuery = function (rule) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.moduleLoader.loadedModules.length) {\n if (!rule) {\n rule = this.getValidRules();\n }\n var obj = { mongoQuery: null };\n this.notify('query-library', { prop: 'getMongoFromRules', onPropertyChange: false, value: { rule: rule, mongoQuery: '', obj: obj } });\n return obj['mongoQuery'];\n }\n else {\n console.warn('[WARNING] :: Module \"query-library\" is not available in QueryBuilder component! You either misspelled the module name or forgot to load it.');\n }\n return '';\n };\n /**\n * Clones the rule based on the rule ID to the specific group.\n *\n * @param {string} ruleID - Specifies the ruleID that needs to be cloned.\n * @param {string} groupID - Specifies the groupID in which the rule to be cloned.\n * @param {number} index - Specifies the index to insert the cloned rule inside the group.\n * @returns {void}\n */\n QueryBuilder.prototype.cloneRule = function (ruleID, groupID, index) {\n var getRule = this.getRule(ruleID.replace(this.element.id + '_', ''));\n var isCloneRule = this.showButtons.cloneRule;\n groupID = groupID.replace(this.element.id + '_', '');\n this.ruleIndex = index;\n this.cloneRuleBtnClick = true;\n this.showButtons.cloneRule = true;\n this.addRules([{\n 'label': getRule.label, 'field': getRule.field, 'type': getRule.type, 'operator': getRule.operator,\n 'value': getRule.value, 'condition': getRule.condition\n }], groupID);\n this.ruleIndex = -1;\n this.cloneRuleBtnClick = false;\n this.showButtons.cloneRule = isCloneRule;\n isCloneRule = false;\n };\n /**\n * Clones the group based on the group ID to the specific group.\n *\n * @param {string} groupID - Specifies the groupID that needs to be cloned.\n * @param {string} parentGroupID - Specifies the parentGroupID in which the group to be cloned.\n * @param {number} index - Specifies the index to insert the cloned group inside the parent group.\n * @returns {void}\n */\n QueryBuilder.prototype.cloneGroup = function (groupID, parentGroupID, index) {\n parentGroupID = parentGroupID.replace(this.element.id + '_', '');\n var group = this.getGroup(parentGroupID);\n var isCloneGroup = this.showButtons.cloneGroup;\n groupID = groupID.replace(this.element.id + '_', '');\n this.groupIndex = index;\n this.cloneGrpBtnClick = true;\n this.showButtons.cloneGroup = true;\n this.addGroups([{ 'condition': group.condition, 'not': group.not, 'rules': group.rules }], groupID);\n this.groupIndex = -1;\n this.cloneGrpBtnClick = false;\n this.showButtons.cloneGroup = isCloneGroup;\n isCloneGroup = false;\n };\n /**\n * Locks the rule based on the rule ID.\n *\n * @param {string} ruleID - Specifies the ruleID that needs to be locked.\n * @returns {void}\n */\n QueryBuilder.prototype.lockRule = function (ruleID) {\n if (ruleID.indexOf(this.element.id) < 0) {\n ruleID = this.element.id + '_' + ruleID;\n }\n var target = document.getElementById(ruleID).querySelectorAll('.e-lock-rule-btn')[0];\n this.ruleLock(target);\n };\n /**\n * Locks the group based on the group ID\n *\n * @param {string} groupID - Specifies the groupID that needs to be locked.\n * @returns {void}\n */\n QueryBuilder.prototype.lockGroup = function (groupID) {\n if (groupID.indexOf(this.element.id) < 0) {\n groupID = this.element.id + '_' + groupID;\n }\n var target = document.getElementById(groupID).querySelectorAll('.e-lock-grp-btn')[0];\n this.groupLock(target);\n };\n QueryBuilder.prototype.sqlParser = function (sqlString, sqlLocale) {\n var st = 0;\n var str;\n do {\n str = sqlString.slice(st);\n st += this.parseSqlStrings(str, sqlLocale);\n } while (str !== '');\n return this.parser;\n };\n QueryBuilder.prototype.parseSqlStrings = function (sqlString, sqlLocale) {\n var operators = ['=', '!=', '<=', '>=', '<', '>'];\n var conditions;\n if (sqlLocale) {\n conditions = [this.l10n.getConstant('AND').toUpperCase(), this.l10n.getConstant('OR').toUpperCase(), this.l10n.getConstant('NOT').toUpperCase()];\n }\n else {\n conditions = ['AND', 'OR', 'NOT'];\n }\n var subOp;\n if (sqlLocale) {\n subOp = [this.l10n.getConstant('In').toUpperCase(), this.l10n.getConstant('NotIn').toUpperCase(),\n this.l10n.getConstant('Like').toUpperCase(), this.l10n.getConstant('NotLike').toUpperCase(),\n this.l10n.getConstant('Between').toUpperCase(), this.l10n.getConstant('NotBetween').toUpperCase(),\n this.l10n.getConstant('IsNull').toUpperCase(), this.l10n.getConstant('IsNotNull').toUpperCase(),\n this.l10n.getConstant('IsEmpty').toUpperCase(), this.l10n.getConstant('IsNotEmpty').toUpperCase()];\n }\n else {\n subOp = ['IN', 'NOT IN', 'LIKE', 'NOT LIKE', 'BETWEEN', 'NOT BETWEEN', 'IS NULL', 'IS NOT NULL', 'IS EMPTY', 'IS NOT EMPTY'];\n }\n var regexStr;\n var regex;\n var matchValue;\n for (var i = 0, iLen = operators.length; i < iLen; i++) {\n regexStr = /^\\w+$/.test(operators[i]) ? '\\\\b' : '';\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var regExp = RegExp;\n regex = new regExp('^(' + operators[i] + ')' + regexStr, 'ig');\n if (regex.exec(sqlString)) {\n this.parser.push(['Operators', operators[i].toLowerCase()]);\n return operators[i].length;\n }\n }\n var lastPasrser = this.parser[this.parser.length - 1];\n if (!lastPasrser || (lastPasrser && lastPasrser[0] !== 'Literal')) {\n for (var i = 0, iLen = conditions.length; i < iLen; i++) {\n regexStr = /^\\w+$/.test(conditions[i]) ? '\\\\b' : '';\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var regExp = RegExp;\n regex = new regExp('^(' + conditions[i] + ')' + regexStr, 'ig');\n if (regex.exec(sqlString)) {\n this.parser.push(['Conditions', conditions[i].toLowerCase()]);\n return conditions[i].length;\n }\n }\n }\n for (var i = 0, iLen = subOp.length; i < iLen; i++) {\n regexStr = /^\\w+$/.test(subOp[i]) ? '\\\\b' : '';\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var regExp = RegExp;\n regex = new regExp('^(' + subOp[i] + ')' + regexStr, 'ig');\n if (regex.exec(sqlString)) {\n this.parser.push(['SubOperators', subOp[i].toLowerCase()]);\n return subOp[i].length;\n }\n }\n //Left Parenthesis\n if (/^\\(/.exec(sqlString)) {\n this.parser.push(['Left', '(']);\n return 1;\n }\n //Right Parenthesis\n if (/^\\)/.exec(sqlString)) {\n this.parser.push(['Right', ')']);\n return 1;\n }\n //Boolean\n if (/^(true|false)/.exec(sqlString)) {\n matchValue = /^(true|false)/.exec(sqlString)[0];\n this.parser.push(['String', matchValue]);\n return matchValue.length;\n }\n //Null\n if (/^null/.exec(sqlString)) {\n matchValue = /^null/.exec(sqlString)[0];\n this.parser.push(['String', null]);\n return matchValue.length;\n }\n if (/^`?([a-z_][a-z0-9_.\\\\[\\]\\\\(\\\\)]{0,}(\\\\:(number|float|string|date|boolean))?)`?/i.exec(sqlString)) {\n matchValue = /^`?([a-z_][a-z0-9_.\\\\[\\]\\\\(\\\\)]{0,}(\\\\:(number|float|string|date|boolean))?)`?/i.exec(sqlString)[1];\n this.parser.push(['Literal', matchValue]);\n return matchValue.length;\n }\n if (this.checkLiteral() && /^'?([a-z_][a-z0-9 _.\\\\[\\]\\\\(\\\\)-]{0,}(\\\\:(number|float|string|date|boolean))?)'?/i.exec(sqlString)) {\n matchValue = /^'?([a-z_][a-z0-9 _.\\\\[\\]\\\\(\\\\)-]{0,}(\\\\:(number|float|string|date|boolean))?)'?/i.exec(sqlString)[1];\n this.parser.push(['Literal', matchValue]);\n return matchValue.length + 2;\n }\n if (this.checkNumberLiteral(sqlString, sqlLocale)) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var regExValue = /^[0-9]+(\\.[0-9]+)$/.exec(sqlString);\n if (regExValue) {\n matchValue = regExValue[0];\n this.parser.push(['Literal', matchValue]);\n return matchValue.length;\n }\n }\n //String\n var singleString = this.getSingleQuoteString(sqlString);\n if (singleString !== '') {\n matchValue = singleString;\n if (matchValue[matchValue.length - 2] === '(') {\n var isClosed = false;\n for (var j = matchValue.length; j < sqlString.length; j++) {\n matchValue += sqlString[j];\n if (sqlString[j] === ')') {\n isClosed = true;\n }\n if (isClosed && sqlString[j] === '\\'') {\n break;\n }\n }\n }\n else if (sqlString[matchValue.length] && (sqlString[matchValue.length] !== ')') &&\n !this.checkCondition(sqlString, matchValue)) {\n matchValue = this.combineSingleQuoteString(sqlString, matchValue);\n }\n // end\n this.parser.push(['String', matchValue]);\n return matchValue.length;\n }\n // Double String\n var doubleString = this.getDoubleQuoteString(sqlString);\n if (doubleString !== '') {\n matchValue = doubleString;\n this.parser.push(['DoubleString', matchValue]);\n return matchValue.length;\n }\n //Number\n if (/^\\d*\\.?\\d+/.exec(sqlString)) {\n matchValue = /^\\d*\\.?\\d+/.exec(sqlString)[0];\n this.parser.push(['Number', matchValue]);\n return matchValue.length;\n }\n //Negative Number\n if (/^-?\\d*\\.?\\d+/.exec(sqlString)) {\n matchValue = /^-?\\d*\\.?\\d+/.exec(sqlString)[0];\n this.parser.push(['Number', matchValue]);\n return matchValue.length;\n }\n return 1;\n };\n QueryBuilder.prototype.getDoubleQuoteString = function (sqlString) {\n var start = sqlString.indexOf('\"');\n if (start === 0) {\n var end = sqlString.indexOf('\"', start + 1);\n if (end !== -1) {\n return sqlString.substring(start, end + 1);\n }\n }\n return '';\n };\n QueryBuilder.prototype.checkCondition = function (sqlString, matchValue) {\n if (sqlString.slice(matchValue.length + 1, matchValue.length + 4) === 'AND' ||\n sqlString.slice(matchValue.length + 1, matchValue.length + 3) === 'OR') {\n return true;\n }\n return false;\n };\n QueryBuilder.prototype.getSingleQuoteString = function (sqlString, isBetween) {\n var start = sqlString.indexOf('\\'');\n if ((start !== -1 && isBetween) || (start === 0 && !isBetween)) {\n var end = sqlString.indexOf('\\'', start + 1);\n if (end !== -1) {\n return sqlString.substring(start, end + 1);\n }\n }\n return '';\n };\n QueryBuilder.prototype.combineSingleQuoteString = function (sqlString, matchValue) {\n if (sqlString[matchValue.length] && (sqlString[matchValue.length] !== ')') &&\n !this.checkCondition(sqlString, matchValue) && sqlString[matchValue.length] !== ',') {\n var tempMatchValue = matchValue.substring(0, matchValue.length - 1);\n var tempStr = sqlString.replace(tempMatchValue, '');\n var singleString = this.getSingleQuoteString(tempStr, true);\n if (singleString !== '') {\n var parsedValue = singleString.substring(1, singleString.length);\n matchValue += parsedValue;\n matchValue = this.combineSingleQuoteString(sqlString, matchValue);\n }\n }\n return matchValue;\n };\n QueryBuilder.prototype.checkLiteral = function () {\n var lastParser = this.parser[this.parser.length - 1];\n if (!lastParser) {\n return true;\n }\n else {\n var secParser = this.parser[this.parser.length - 2];\n var betweenParser = this.parser[this.parser.length - 3];\n if (lastParser[0] === 'Left' && (secParser && secParser[0] === 'Conditions')) {\n return true;\n }\n var betweenOperator = 'between';\n if (lastParser[0] === 'Conditions' && (betweenParser && betweenParser[1].indexOf(betweenOperator) < 0)) {\n return true;\n }\n }\n return false;\n };\n QueryBuilder.prototype.checkNumberLiteral = function (sqlString, sqlLocale) {\n var lastParser = this.parser[this.parser.length - 1];\n if (!lastParser) {\n return true;\n }\n else {\n if (/^[0-9]+(?:\\.[0-9]+)$/.exec(sqlString)) {\n var secParser = this.parser[this.parser.length - 2];\n var betweenParser = this.parser[this.parser.length - 3];\n if (lastParser[0] === 'Left' && (secParser && secParser[0] === 'Conditions')) {\n return true;\n }\n var betweenOperator = sqlLocale ? this.l10n.getConstant('Between').toLowerCase() : 'between';\n if (lastParser[0] === 'Conditions' && (betweenParser && betweenParser[1].indexOf(betweenOperator) < 0)) {\n return true;\n }\n }\n }\n return false;\n };\n QueryBuilder.prototype.getOperator = function (value, operator, sqlLocale) {\n var operators = {\n '=': 'equal', '!=': 'notequal', '<': 'lessthan', '>': 'greaterthan', '<=': 'lessthanorequal',\n '>=': 'greaterthanorequal', 'in': 'in', 'not in': 'notin', 'between': 'between', 'not between': 'notbetween',\n 'is empty': 'isempty', 'is null': 'isnull', 'is not null': 'isnotnull', 'is not empty': 'isnotempty'\n };\n if (sqlLocale) {\n var localeOperator = Object.keys(this.sqlOperators);\n for (var i = 0; i < localeOperator.length; i++) {\n if (this.sqlOperators[localeOperator[i]] === operator.toUpperCase()) {\n if (value && value.indexOf('%') === 0 && value[value.length - 1] === '%') {\n return (operator.toUpperCase() === 'NOT LIKE') ? 'notcontains' : 'contains';\n }\n else if (value && value.indexOf('%') !== 0 && value.indexOf('%') === value.length - 1) {\n return (operator.toUpperCase() === 'NOT LIKE') ? 'notstartswith' : 'startswith';\n }\n else if (value && value.indexOf('%') === 0 && value.indexOf('%') !== value.length - 1) {\n return (operator.toUpperCase() === 'NOT LIKE') ? 'notendswith' : 'endswith';\n }\n return localeOperator[i];\n }\n }\n return null;\n }\n if (value) {\n if (value.indexOf('%') === 0 && value[value.length - 1] === '%') {\n return (operator === 'not like') ? 'notcontains' : 'contains';\n }\n else if (value.indexOf('%') !== 0 && value.indexOf('%') === value.length - 1) {\n return (operator === 'not like') ? 'notstartswith' : 'startswith';\n }\n else if (value.indexOf('%') === 0 && value.indexOf('%') !== value.length - 1) {\n return (operator === 'not like') ? 'notendswith' : 'endswith';\n }\n }\n else {\n if (operator === 'not like') {\n return 'notequal';\n }\n else if (operator === 'like') {\n return 'equal';\n }\n }\n return operators[\"\" + operator];\n };\n QueryBuilder.prototype.getTypeFromColumn = function (rules) {\n var columnData = this.getColumn(rules.field);\n if (!isNullOrUndefined(columnData)) {\n return columnData.type;\n }\n return null;\n };\n QueryBuilder.prototype.getLabelFromColumn = function (field) {\n var label = '';\n var l = 0;\n if (this.separator !== '') {\n var fieldColl = field.split(this.separator);\n for (var i = 0; i < fieldColl.length; i++) {\n label += this.getLabelFromField(fieldColl, i + 1);\n l++;\n if (l < fieldColl.length) {\n label += this.separator;\n }\n }\n return label;\n }\n else {\n var labelItem = this.getColumn(field).label;\n return labelItem;\n }\n };\n QueryBuilder.prototype.getLabelFromField = function (field, startIdx) {\n var fieldName = '';\n var j = 0;\n for (var k = 0; k < startIdx; k++) {\n fieldName += field[k];\n j++;\n if (j < startIdx) {\n fieldName += this.separator;\n }\n }\n return this.getColumn(fieldName).label;\n };\n QueryBuilder.prototype.processParser = function (parser, rules, levelColl, sqlLocale) {\n var j;\n var jLen;\n var rule;\n var subRules;\n var numVal = [];\n var strVal = [];\n var k;\n var kLen;\n var l;\n var lLen;\n var grpCount;\n var operator;\n var isLeftOpened = false;\n var isNotOpened = false;\n for (var i = 0, iLen = parser.length; i < iLen; i++) {\n if (parser[i][0] === 'Literal') {\n var column = this.getColumn(parser[i][1]);\n rule = { label: (column && column.label) ? column.label : parser[i][1], field: parser[i][1] };\n if (parser[i + 1][0] === 'SubOperators') {\n if (parser[i + 1][1].indexOf('null') > -1 || parser[i + 1][1].indexOf('empty') > -1) {\n rule.operator = this.getOperator(' ', parser[i + 1][1], sqlLocale);\n rule.value = null;\n rule.type = this.getTypeFromColumn(rule);\n }\n else {\n var oper = parser[i + 3][1] ? parser[i + 3][1].replace(/'/g, '') : parser[i + 3][1];\n rule.operator = this.getOperator(oper, parser[i + 1][1], sqlLocale);\n }\n operator = parser[i + 1][1];\n i++;\n j = i + 1;\n jLen = iLen;\n if (sqlLocale && rule.operator === 'contains' || rule.operator === 'startswith' || rule.operator === 'endswith') {\n operator = 'like';\n }\n else if (sqlLocale && rule.operator === 'notcontains' || rule.operator === 'notstartswith' || rule.operator === 'notendswith') {\n operator = 'not like';\n }\n else if (sqlLocale) {\n operator = rule.operator;\n }\n for (j = i + 1; j < jLen; j++) {\n if (operator.indexOf('between') < 0 && parser[j][0] === 'Left') {\n isLeftOpened = true;\n }\n else if (parser[j][0] === 'Right' && isLeftOpened) {\n i = j;\n isLeftOpened = false;\n break;\n }\n else {\n if (operator.indexOf('null') > -1 || operator.indexOf('empty') > -1) {\n break;\n }\n if (operator.indexOf('like') > -1 && parser[j][0] === 'String') {\n var val = parser[j][1];\n if (parser[j][1] && parser[j][1][0] === '\\'') {\n val = parser[j][1].substring(1, parser[j][1].length - 1);\n }\n val = val ? val.replace(/%/g, '') : parser[j][1];\n rule.value = val;\n rule.type = 'string';\n }\n else if (operator.indexOf('between') > -1) {\n if (parser[j][0] === 'Literal' || parser[j][0] === 'Left') {\n break;\n }\n if (parser[j][0] === 'Number') {\n numVal.push(Number(parser[j][1]));\n }\n else if (parser[j][0] === 'String') {\n var val = parser[j][1];\n if (parser[j][1] && parser[j][1][0] === '\\'') {\n val = parser[j][1].substring(1, parser[j][1].length - 1);\n }\n strVal.push(val);\n }\n }\n else {\n if (parser[j][0] === 'Number') {\n numVal.push(Number(parser[j][1]));\n }\n else if (parser[j][0] === 'String') {\n var val = parser[j][1];\n if (parser[j][1] && parser[j][1][0] === '\\'') {\n val = parser[j][1].substring(1, parser[j][1].length - 1);\n }\n strVal.push(val);\n }\n }\n rule.type = this.getTypeFromColumn(rule);\n }\n }\n if (operator.indexOf('like') < 0) {\n if (parser[j - 1][0] === 'Number') {\n rule.value = numVal;\n rule.type = 'number';\n }\n else if (parser[j - 1][0] === 'String') {\n rule.value = strVal;\n rule.type = 'string';\n }\n else if (operator.indexOf('between') > -1 && parser[j - 1][0] === 'Conditions') {\n if (strVal.length !== 0) {\n rule.value = strVal;\n rule.type = 'string';\n }\n else {\n rule.value = numVal;\n rule.type = 'number';\n }\n }\n numVal = [];\n strVal = [];\n rule.type = this.getTypeFromColumn(rule);\n }\n if (this.enableSeparateConnector && parser[i + 1][0] === 'Conditions') {\n rule.condition = parser[i + 1][1];\n }\n }\n else if (parser[i + 1][0] === 'Operators') {\n rule.operator = this.getOperator(parser[i + 2][1], parser[i + 1][1], sqlLocale);\n if (rule.operator === 'equal' && parser[i + 2][0] === 'String' && parser[i + 2][1] === '\\'\\'') {\n rule.operator = 'isempty';\n }\n else if (rule.operator === 'notequal' && parser[i + 2][0] === 'String' && parser[i + 2][1] === '\\'\\'') {\n rule.operator = 'isnotempty';\n }\n if (parser[i + 2][0] === 'Number') {\n rule.type = 'number';\n rule.value = Number(parser[i + 2][1]);\n }\n else {\n rule.type = 'string';\n var val = parser[i + 2][1];\n if (val && val[0] === '\\'') {\n val = val.substring(1, val.length - 1);\n }\n rule.value = val;\n }\n if (this.enableSeparateConnector && parser[i + 3][0] === 'Conditions') {\n rule.condition = parser[i + 3][1];\n }\n rule.type = this.getTypeFromColumn(rule);\n }\n rules.rules.push(rule);\n }\n else if (parser[i][0] === 'Left') {\n if (!(parser[0][0] === 'Left') && (parser[i - 1][1] === 'not' || sqlLocale && this.l10n.getConstant('NOT').toLowerCase() === parser[i - 1][1])) {\n isNotOpened = true;\n continue;\n }\n this.parser = parser.splice(i + 1, iLen - (i + 1));\n if (this.enableNotCondition) {\n subRules = { condition: 'and', rules: [], not: false };\n }\n else {\n subRules = { condition: 'and', rules: [] };\n }\n grpCount = 0;\n kLen = rules.rules.length;\n for (k = 0; k < kLen; k++) { //To get the group position\n if (rules.rules[k].rules) {\n grpCount++;\n }\n }\n levelColl.push(grpCount);\n rules.rules.push(subRules);\n subRules = this.processParser(this.parser, subRules, levelColl, sqlLocale);\n return rules;\n }\n else if (parser[i][0] === 'Conditions' && !this.enableSeparateConnector) {\n if (parser[i][1] === 'not' || (sqlLocale && this.l10n.getConstant('NOT').toLowerCase() === parser[i][1])) {\n rules.not = true;\n }\n else {\n rules.condition = parser[i][1];\n }\n }\n else if (parser[i][0] === 'Right') {\n if (isNotOpened && parser[i + 1][0] === 'Right') {\n isNotOpened = false;\n continue;\n }\n this.parser = parser.splice(i + 1, iLen - (i + 1));\n levelColl.pop(); //To get the parent Group\n rules = this.rule;\n lLen = levelColl.length;\n for (l = 0; l < lLen; l++) {\n rules = this.findGroupByIdx(levelColl[l], rules, l === 0);\n }\n return this.processParser(this.parser, rules, levelColl, sqlLocale);\n }\n }\n return rules;\n };\n /**\n * Clone the Group\n *\n * @param {Element | string} target - 'target' to be passed to clone the group.\n * @returns {void}\n */\n QueryBuilder.prototype.groupClone = function (target) {\n var groupElem = target.closest('.e-rule-list').closest('.e-group-container');\n var targetGrpId = target.id.replace(this.element.id + '_', '');\n var groupId = groupElem.id.replace(this.element.id + '_', '');\n var group = this.getGroup(targetGrpId);\n this.groupIndex = Array.prototype.indexOf.call(target.closest('.e-rule-list').children, target.closest('.e-group-container'));\n this.addGroups([{ 'condition': group.condition, 'not': group.not, 'rules': group.rules }], groupId);\n this.groupIndex = -1;\n };\n QueryBuilder.prototype.ruleClone = function (target) {\n var ruleElem = closest(target, '.e-rule-container');\n var groupElem = target.closest('.e-rule-list').closest('.e-group-container');\n var getRule = this.getRule(target);\n var groupId = groupElem.id.replace(this.element.id + '_', '');\n var ruleElemColl = groupElem.querySelectorAll('.e-rule-container');\n for (var i = 0, iLen = ruleElemColl.length; i < iLen; i++) {\n if (ruleElem.id === ruleElemColl[i].id) {\n this.ruleIndex = i;\n }\n }\n if (this.enableSeparateConnector) {\n this.addRules([{ 'label': getRule.label, 'field': getRule.field, 'type': getRule.type, 'operator': getRule.operator,\n 'value': getRule.value, 'condition': getRule.condition }], groupId);\n }\n else {\n this.addRules([{ 'label': getRule.label, 'field': getRule.field, 'type': getRule.type, 'operator': getRule.operator,\n 'value': getRule.value }], groupId);\n }\n this.ruleIndex = -1;\n };\n QueryBuilder.prototype.ruleLock = function (target) {\n var ruleElem = closest(target, '.e-rule-container');\n var rule = this.getRule(ruleElem.id.replace(this.element.id + '_', ''));\n if (ruleElem.classList.contains('e-disable')) {\n rule.isLocked = false;\n this.lockItems = this.lockItems.filter(function (lockItem) { return lockItem !== ruleElem.id; });\n ruleElem.classList.remove('e-disable');\n this.disableRuleControls(target, ruleElem, false);\n target.children[0].classList.add('e-unlock');\n target.children[0].classList.remove('e-lock');\n target.setAttribute('title', this.l10n.getConstant('LockRule'));\n }\n else {\n rule.isLocked = true;\n if (this.lockItems.indexOf(ruleElem.id) < 0) {\n this.lockItems.splice(this.lockItems.length - 1, 0, ruleElem.id);\n }\n ruleElem.classList.add('e-disable');\n this.disableRuleControls(target, ruleElem, true);\n target.children[0].classList.add('e-lock');\n target.children[0].classList.remove('e-unlock');\n target.setAttribute('title', this.l10n.getConstant('UnlockRule'));\n }\n };\n QueryBuilder.prototype.groupLock = function (target) {\n var groupElem = closest(target, '.e-group-container');\n var group = this.getGroup(groupElem.id.replace(this.element.id + '_', ''));\n var isRoot = groupElem.id.indexOf('group0') > -1;\n if (groupElem.classList.contains('e-disable')) {\n if (isRoot) {\n var newGroup = {};\n newGroup.condition = group.condition;\n newGroup.not = group.not;\n newGroup.isLocked = false;\n this.setProperties({ rule: newGroup }, true);\n }\n else {\n group.isLocked = false;\n }\n this.lockItems = this.lockItems.filter(function (lockItem) { return lockItem !== groupElem.id; });\n groupElem.classList.remove('e-disable');\n this.disableHeaderControls(target, groupElem, false);\n target.children[0].classList.add('e-unlock');\n target.children[0].classList.remove('e-lock');\n target.setAttribute('title', this.l10n.getConstant('LockGroup'));\n this.updateLockItems();\n }\n else {\n if (isRoot) {\n var newGroup = {};\n newGroup.condition = group.condition;\n newGroup.not = group.not;\n newGroup.isLocked = true;\n this.setProperties({ rule: newGroup }, true);\n }\n else {\n group.isLocked = true;\n }\n if (this.lockItems.indexOf(groupElem.id) < 0) {\n this.lockItems.splice(this.lockItems.length - 1, 0, groupElem.id);\n }\n groupElem.classList.add('e-disable');\n this.disableHeaderControls(target, groupElem, true);\n target.children[0].classList.add('e-lock');\n target.children[0].classList.remove('e-unlock');\n target.setAttribute('title', this.l10n.getConstant('UnlockGroup'));\n }\n };\n QueryBuilder.prototype.updateLockItems = function () {\n for (var i = 0; i < this.lockItems.length; i++) {\n var idColl = this.lockItems[i].split('_');\n if (idColl.length > 2) {\n var ruleElem = this.element.querySelector('#' + this.lockItems[i]);\n var target = ruleElem.querySelector('.e-lock-rule-btn');\n ruleElem = closest(target, '.e-rule-container');\n if (!ruleElem.classList.contains('e-disable')) {\n this.ruleLock(target);\n }\n }\n else {\n var groupElem = this.element.querySelector('#' + this.lockItems[i]);\n var target = groupElem.querySelector('.e-lock-grp-btn');\n groupElem = closest(target, '.e-group-container');\n if (!groupElem.classList.contains('e-disable')) {\n this.groupLock(target);\n }\n }\n }\n };\n QueryBuilder.prototype.disableHeaderControls = function (target, groupElem, isDisabled) {\n var andElem = groupElem.querySelectorAll('.e-btngroup-and');\n var orElem = groupElem.querySelectorAll('.e-btngroup-or');\n var notElem = groupElem.querySelectorAll('.e-qb-toggle');\n var addElem = groupElem.querySelectorAll('.e-add-btn');\n var deleteGrpElem = groupElem.querySelectorAll('.e-deletegroup');\n var lockElem = groupElem.querySelectorAll('.e-lock-grp-btn');\n var cloneElem = groupElem.querySelectorAll('.e-clone-grp-btn');\n var groupContElem = groupElem.querySelectorAll('.e-group-container');\n var addCondition = groupElem.querySelectorAll('.e-add-condition-btn');\n var addGroup = groupElem.querySelectorAll('.e-add-group-btn');\n for (var i = 0; i < andElem.length; i++) {\n if (isDisabled) {\n if (groupContElem[i] && groupContElem[i].classList.contains('e-disable')) {\n groupContElem[i].classList.add('e-disable');\n }\n andElem[i].disabled = true;\n orElem[i].disabled = true;\n if (addElem[i]) {\n addElem[i].disabled = true;\n }\n if (addCondition[i]) {\n addCondition[i].disabled = true;\n }\n if (addGroup[i]) {\n addGroup[i].disabled = true;\n }\n if (notElem[i]) {\n notElem[i].disabled = true;\n }\n if (deleteGrpElem[i]) {\n deleteGrpElem[i].disabled = true;\n }\n if (cloneElem[i]) {\n cloneElem[i].disabled = true;\n }\n andElem[i].parentElement.classList.add('e-disabled');\n if (lockElem[i] && lockElem[i] !== target) {\n lockElem[i].disabled = true;\n lockElem[i].children[0].classList.remove('e-unlock');\n lockElem[i].children[0].classList.add('e-lock');\n }\n }\n else {\n if (groupContElem[i]) {\n groupContElem[i].classList.remove('e-disable');\n }\n andElem[i].disabled = false;\n orElem[i].disabled = false;\n if (addElem[i]) {\n addElem[i].disabled = false;\n }\n if (addCondition[i]) {\n addCondition[i].disabled = false;\n }\n if (addGroup[i]) {\n addGroup[i].disabled = false;\n }\n if (lockElem[i]) {\n lockElem[i].disabled = false;\n }\n if (notElem[i]) {\n notElem[i].disabled = false;\n }\n if (deleteGrpElem[i]) {\n deleteGrpElem[i].disabled = false;\n }\n if (cloneElem[i]) {\n cloneElem[i].disabled = false;\n }\n andElem[i].parentElement.classList.remove('e-disabled');\n if (lockElem[i]) {\n lockElem[i].children[0].classList.remove('e-lock');\n }\n if (lockElem[i]) {\n lockElem[i].children[0].classList.add('e-unlock');\n }\n }\n }\n this.disableRuleControls(target, groupElem, isDisabled);\n };\n QueryBuilder.prototype.disableRuleControls = function (target, groupElem, isDisabled) {\n var ddlElement = groupElem.querySelectorAll('.e-control.e-dropdownlist');\n var numericElement = groupElem.querySelectorAll('.e-control.e-numerictextbox');\n var textElement = groupElem.querySelectorAll('.e-control.e-textbox');\n var dateElement = groupElem.querySelectorAll('.e-control.e-datepicker');\n var checkboxElement = groupElem.querySelectorAll('.e-control.e-checkbox');\n var radioBtnElement = groupElem.querySelectorAll('.e-control.e-radio');\n var multiSelectElement = groupElem.querySelectorAll('.e-control.e-multiselect');\n var deleteElem = groupElem.querySelectorAll('.e-rule-delete');\n var lockElem = groupElem.querySelectorAll('.e-lock-rule');\n var cloneElem = groupElem.querySelectorAll('.e-clone-rule');\n var ruleElem = groupElem.querySelectorAll('.e-rule-container');\n for (var i = 0; i < deleteElem.length; i++) {\n if (isDisabled) {\n if (ruleElem[i] && ruleElem[i].classList.contains('e-disable')) {\n ruleElem[i].classList.add('e-disable');\n }\n deleteElem[i].disabled = true;\n if (cloneElem[i]) {\n cloneElem[i].disabled = true;\n }\n if (lockElem[i] !== target) {\n lockElem[i].disabled = true;\n lockElem[i].children[0].classList.remove('e-unlock');\n lockElem[i].children[0].classList.add('e-lock');\n }\n }\n else {\n if (ruleElem[i]) {\n ruleElem[i].classList.remove('e-disable');\n }\n if (cloneElem[i]) {\n cloneElem[i].disabled = false;\n }\n deleteElem[i].disabled = false;\n lockElem[i].disabled = false;\n lockElem[i].children[0].classList.remove('e-lock');\n lockElem[i].children[0].classList.add('e-unlock');\n }\n }\n var dropDownObj;\n var numericObj;\n var textObj;\n var dateObj;\n var checkBoxObj;\n var radioBtnObj;\n var multiSelectObj;\n for (var i = 0; i < ddlElement.length; i++) {\n dropDownObj = getComponent(ddlElement[i], 'dropdownlist');\n if (isDisabled) {\n dropDownObj.enabled = false;\n }\n else {\n dropDownObj.enabled = true;\n }\n }\n for (var i = 0; i < numericElement.length; i++) {\n numericObj = getComponent(numericElement[i], 'numerictextbox');\n if (isDisabled) {\n numericObj.enabled = false;\n }\n else {\n numericObj.enabled = true;\n }\n }\n for (var i = 0; i < textElement.length; i++) {\n textObj = getComponent(textElement[i], 'textbox');\n if (isDisabled) {\n textObj.enabled = false;\n }\n else {\n textObj.enabled = true;\n }\n }\n for (var i = 0; i < dateElement.length; i++) {\n dateObj = getComponent(dateElement[i], 'datepicker');\n if (isDisabled) {\n dateObj.enabled = false;\n }\n else {\n dateObj.enabled = true;\n }\n }\n for (var i = 0; i < checkboxElement.length; i++) {\n checkBoxObj = getComponent(checkboxElement[i], 'checkbox');\n if (isDisabled) {\n checkBoxObj.disabled = true;\n }\n else {\n checkBoxObj.disabled = false;\n }\n }\n for (var i = 0; i < radioBtnElement.length; i++) {\n radioBtnObj = getComponent(radioBtnElement[i], 'radio');\n if (isDisabled) {\n radioBtnObj.disabled = true;\n }\n else {\n radioBtnObj.disabled = false;\n }\n }\n for (var i = 0; i < multiSelectElement.length; i++) {\n multiSelectObj = getComponent(multiSelectElement[i], 'multiselect');\n if (isDisabled) {\n multiSelectObj.enabled = false;\n }\n else {\n multiSelectObj.enabled = true;\n }\n }\n };\n __decorate([\n Event()\n ], QueryBuilder.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], QueryBuilder.prototype, \"actionBegin\", void 0);\n __decorate([\n Event()\n ], QueryBuilder.prototype, \"beforeChange\", void 0);\n __decorate([\n Event()\n ], QueryBuilder.prototype, \"change\", void 0);\n __decorate([\n Event()\n ], QueryBuilder.prototype, \"dataBound\", void 0);\n __decorate([\n Event()\n ], QueryBuilder.prototype, \"ruleChange\", void 0);\n __decorate([\n Event()\n ], QueryBuilder.prototype, \"dragStart\", void 0);\n __decorate([\n Event()\n ], QueryBuilder.prototype, \"drag\", void 0);\n __decorate([\n Event()\n ], QueryBuilder.prototype, \"drop\", void 0);\n __decorate([\n Complex({}, ShowButtons)\n ], QueryBuilder.prototype, \"showButtons\", void 0);\n __decorate([\n Property(false)\n ], QueryBuilder.prototype, \"summaryView\", void 0);\n __decorate([\n Property(false)\n ], QueryBuilder.prototype, \"allowValidation\", void 0);\n __decorate([\n Property('Default')\n ], QueryBuilder.prototype, \"fieldMode\", void 0);\n __decorate([\n Property([])\n ], QueryBuilder.prototype, \"columns\", void 0);\n __decorate([\n Property(null)\n ], QueryBuilder.prototype, \"fieldModel\", void 0);\n __decorate([\n Property(null)\n ], QueryBuilder.prototype, \"operatorModel\", void 0);\n __decorate([\n Property(null)\n ], QueryBuilder.prototype, \"valueModel\", void 0);\n __decorate([\n Property()\n ], QueryBuilder.prototype, \"headerTemplate\", void 0);\n __decorate([\n Property('')\n ], QueryBuilder.prototype, \"cssClass\", void 0);\n __decorate([\n Property([])\n ], QueryBuilder.prototype, \"dataSource\", void 0);\n __decorate([\n Property('Horizontal')\n ], QueryBuilder.prototype, \"displayMode\", void 0);\n __decorate([\n Property(false)\n ], QueryBuilder.prototype, \"enablePersistence\", void 0);\n __decorate([\n Property('Default')\n ], QueryBuilder.prototype, \"sortDirection\", void 0);\n __decorate([\n Property(5)\n ], QueryBuilder.prototype, \"maxGroupCount\", void 0);\n __decorate([\n Property('auto')\n ], QueryBuilder.prototype, \"height\", void 0);\n __decorate([\n Property('auto')\n ], QueryBuilder.prototype, \"width\", void 0);\n __decorate([\n Property(false)\n ], QueryBuilder.prototype, \"matchCase\", void 0);\n __decorate([\n Property(0)\n ], QueryBuilder.prototype, \"immediateModeDelay\", void 0);\n __decorate([\n Property(false)\n ], QueryBuilder.prototype, \"enableNotCondition\", void 0);\n __decorate([\n Property(false)\n ], QueryBuilder.prototype, \"readonly\", void 0);\n __decorate([\n Property(true)\n ], QueryBuilder.prototype, \"addRuleToNewGroups\", void 0);\n __decorate([\n Property(false)\n ], QueryBuilder.prototype, \"autoSelectField\", void 0);\n __decorate([\n Property(true)\n ], QueryBuilder.prototype, \"autoSelectOperator\", void 0);\n __decorate([\n Property('')\n ], QueryBuilder.prototype, \"separator\", void 0);\n __decorate([\n Property(false)\n ], QueryBuilder.prototype, \"enableSeparateConnector\", void 0);\n __decorate([\n Complex({ condition: 'and', rules: [] }, Rule)\n ], QueryBuilder.prototype, \"rule\", void 0);\n __decorate([\n Property(false)\n ], QueryBuilder.prototype, \"allowDragAndDrop\", void 0);\n QueryBuilder = __decorate([\n NotifyPropertyChanges\n ], QueryBuilder);\n return QueryBuilder;\n}(Component));\nexport { QueryBuilder };\nvar LevelColl = /** @class */ (function () {\n function LevelColl() {\n }\n return LevelColl;\n}());\n","import { extend, isNullOrUndefined } from '@syncfusion/ej2-base';\nvar QueryLibrary = /** @class */ (function () {\n function QueryLibrary(parent) {\n this.parent = parent;\n this.addEventListener();\n }\n QueryLibrary.prototype.destroy = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.removeEventListener();\n };\n QueryLibrary.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on('query-library', this.queryLibrary, this);\n this.parent.on('destroyed', this.destroy, this);\n };\n QueryLibrary.prototype.removeEventListener = function () {\n this.parent.off('query-library', this.queryLibrary);\n this.parent.off('destroyed', this.destroy);\n };\n QueryLibrary.prototype.queryLibrary = function (args) {\n switch (args.prop) {\n case 'getMongoFromRules':\n args.value['obj']['mongoQuery'] = this.getMongoFromRules(args.value['rule'], args.value['mongoQuery']);\n break;\n case 'mongoParser':\n this.mongoParser(args.value['mongoQuery'], args.value['rule'], args.value['mongoLocale']);\n break;\n case 'getParameterSql':\n args.value['obj']['sql'] = this.getParameterSql(args.value['rule']);\n break;\n case 'getNamedParameterSql':\n args.value['obj']['sql'] = this.getNamedParameterSql(args.value['rule']);\n break;\n case 'convertParamSqlToSql':\n args.value['obj']['sql'] = this.convertParamSqlToSql(args.value['sql']);\n break;\n case 'convertNamedParamSqlToSql':\n args.value['obj']['sql'] = this.convertNamedParamSqlToSql(args.value['sql']);\n break;\n }\n };\n QueryLibrary.prototype.getMongoFromRules = function (rule, mongoQuery) {\n mongoQuery = '{';\n if (rule.condition === 'or') {\n mongoQuery += '\"$or\":[';\n mongoQuery = this.convertMongoQuery(rule.rules, mongoQuery) + ']';\n }\n else {\n mongoQuery += '\"$and\":[';\n mongoQuery = this.convertMongoQuery(rule.rules, mongoQuery) + ']';\n }\n mongoQuery += '}';\n return mongoQuery;\n };\n QueryLibrary.prototype.getOperatorFromMongoOperator = function (operator) {\n var operatorValue;\n switch (operator) {\n case '$ne':\n operatorValue = 'notequal';\n break;\n case '$gt':\n operatorValue = 'greaterthan';\n break;\n case '$gte':\n operatorValue = 'greaterthanorequal';\n break;\n case '$lt':\n operatorValue = 'lessthan';\n break;\n case '$lte':\n operatorValue = 'lessthanorequal';\n break;\n case '$nin':\n operatorValue = 'notin';\n break;\n }\n return operatorValue;\n };\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n QueryLibrary.prototype.convertMongoQuery = function (rules, mongoQuery) {\n var _this = this;\n var i = 0;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n rules.forEach(function (item) {\n i++;\n mongoQuery += '{';\n if (item.rules !== undefined) {\n if (item.condition === 'or') {\n mongoQuery += ' \"$or\":[';\n mongoQuery = _this.convertMongoQuery(item.rules, mongoQuery) + ']';\n }\n else {\n mongoQuery += ' \"$and\":[';\n mongoQuery = _this.convertMongoQuery(item.rules, mongoQuery) + ']';\n }\n }\n var itVal = item.type === 'string' && item.operator !== 'in' && item.operator !== 'notin' && item.value && item.value.trim() !== '' ? item.value.replace(/'/g, '\\\\') : '';\n if (item.type === 'string' && (item.operator === 'in' || item.operator === 'notin') && item.value && item.value.length === 1) {\n itVal = item.value[0].replace(/'/g, '\\\\');\n }\n var field = item.field ? item.field.substring(0) : '';\n switch (item.operator) {\n case 'contains':\n mongoQuery += '\"' + field + '\":{\"$regex\":\"' + itVal + '\"}';\n break;\n case 'notcontains':\n mongoQuery += '\"' + field + '\":{\"$not\":{\"$regex\":\"' + item.value + '\"}}';\n break;\n case 'startswith':\n mongoQuery += '\"' + field + '\":{\"$regex\":\"^' + itVal + '\"}';\n break;\n case 'notstartswith':\n mongoQuery += '\"' + field + '\":{\"$not\":{\"$regex\":\"^' + item.value + '\"}}';\n break;\n case 'endswith':\n mongoQuery += '\"' + field + '\":{\"$regex\":\"' + itVal + '$\"}';\n break;\n case 'notendswith':\n mongoQuery += '\"' + field + '\":{\"$not\":{\"$regex\":\"' + item.value + '$\"}}';\n break;\n case 'isnull':\n mongoQuery += '\"' + field + '\": null';\n break;\n case 'isnotnull':\n mongoQuery += '\"' + field + '\":{\"$ne\": null}';\n break;\n case 'isempty':\n mongoQuery += '\"' + field + '\": \"\"';\n break;\n case 'isnotempty':\n mongoQuery += '\"' + field + '\":{\"$ne\": \"\"}';\n break;\n case 'equal':\n if (item.type === 'string') {\n mongoQuery += '\"' + field + '\":\"' + itVal + '\"';\n }\n else if (item.type === 'date') {\n mongoQuery += '\"' + field + '\":\"' + item.value + '\"';\n }\n else if (item.type === 'boolean') {\n mongoQuery += '\"' + field + '\":' + item.value + '';\n }\n else {\n mongoQuery += '\"' + field + '\":' + item.value + '';\n }\n break;\n case 'notequal':\n if (item.type === 'string') {\n mongoQuery += '\"' + field + '\":{\"$ne\":\"' + itVal + '\"}';\n }\n else if (item.type === 'date') {\n mongoQuery += '\"' + field + '\":{\"$ne\":\"' + item.value + '\"}';\n }\n else {\n mongoQuery += '\"' + field + '\":{\"$ne\":' + item.value + '}';\n }\n break;\n case 'in':\n if (item.type === 'string') {\n if (item.value.length > 1) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var s = item.value.map(function (x, j) { return (j < item.value.length ? \"\\\"\" + x + \"\\\"\" : ''); }).toString();\n s = s.endsWith(',') ? s.substring(0, s.length - 1) : s;\n mongoQuery += '\"' + field + '\": { \"$in\": [' + s + ']}';\n }\n else {\n mongoQuery += '\"' + field + '\": { \"$in\": [\"' + itVal + '\"]}';\n }\n }\n else if (item.type === 'number') {\n if (item.value.length > 1) {\n mongoQuery += '\"' + field + '\": { \"$in\": [' + item.value.toString() + ']}';\n }\n else {\n mongoQuery += '\"' + field + '\": { \"$in\": [' + item.value + ']}';\n }\n }\n break;\n case 'notin':\n if (item.type === 'string') {\n if (item.value.length > 1) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var s = item.value.map(function (x, j) { return (j < item.value.length ? \"\\\"\" + x + \"\\\"\" : ''); }).toString();\n s = s.endsWith(',') ? s.substring(0, s.length - 1) : s;\n mongoQuery += '\"' + field + '\": { \"$nin\": [' + s + ']}';\n }\n else {\n mongoQuery += '\"' + field + '\": { \"$nin\": [\"' + itVal + '\"]}';\n }\n }\n else if (item.type === 'number') {\n if (item.value.length > 1) {\n mongoQuery += '\"' + field + '\": { \"$nin\": [' + item.value.toString() + ']}';\n }\n else {\n mongoQuery += '\"' + field + '\": { \"$nin\": [' + item.value + ']}';\n }\n }\n break;\n case 'greaterthan':\n if (item.type === 'number') {\n mongoQuery += '\"' + field + '\": { \"$gt\": ' + item.value + '}';\n }\n else {\n mongoQuery += '\"' + field + '\": { \"$gt\": \"' + item.value + '\"}';\n }\n break;\n case 'greaterthanorequal':\n if (item.type === 'number') {\n mongoQuery += '\"' + field + '\": { \"$gte\": ' + item.value + '}';\n }\n else {\n mongoQuery += '\"' + field + '\": { \"$gte\": \"' + item.value + '\"}';\n }\n break;\n case 'between':\n if (item.type === 'number') {\n mongoQuery += '\"' + field + '\": {\"$gte\":' + item.value[0] + ', \"$lte\":' + item.value[1] + '}';\n }\n else {\n mongoQuery += '\"' + field + '\": {\"$gte\": \"' + item.value[0] + '\", \"$lte\": \"' + item.value[1] + '\"}';\n }\n break;\n case 'notbetween':\n if (item.type === 'number') {\n mongoQuery += '\"$or\":[{\"' + field + '\": {\"$lt\":' + item.value[0] + '}}, {\"' + field + '\": {\"$gt\":' + item.value[1] + '}}]';\n }\n else {\n mongoQuery += '\"$or\":[{\"' + field + '\": {\"$lt\": \"' + item.value[0] + '\"}}, {\"' + field + '\": {\"$gt\": \"' + item.value[1] + '\"}}]';\n }\n break;\n case 'lessthan':\n if (item.type === 'number') {\n mongoQuery += '\"' + field + '\": { \"$lt\": ' + item.value + '}';\n }\n else {\n mongoQuery += '\"' + field + '\": { \"$lt\": \"' + item.value + '\"}';\n }\n break;\n case 'lessthanorequal':\n if (item.type === 'number') {\n mongoQuery += '\"' + field + '\": { \"$lte\": ' + item.value + '}';\n }\n else {\n mongoQuery += '\"' + field + '\": { \"$lte\": \"' + item.value + '\"}';\n }\n break;\n }\n mongoQuery += '}';\n if (rules.length !== i) {\n mongoQuery += ',';\n }\n });\n return mongoQuery;\n };\n QueryLibrary.prototype.mongoParser = function (mongoQuery, rule, mongoLocale) {\n var mongoList;\n if (Object.keys(mongoQuery).indexOf('$and') > -1) {\n mongoList = mongoQuery['$and'];\n rule.condition = 'and';\n }\n else if (Object.keys(mongoQuery).indexOf('$or') > -1) {\n mongoList = mongoQuery['$or'];\n rule.condition = 'or';\n }\n rule.rules = [];\n this.mongoRecursion(mongoList, rule.rules, mongoLocale);\n };\n QueryLibrary.prototype.mongoRecursion = function (mongoList, rules, mongoLocale) {\n var operatorValue;\n var type;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var stringValue;\n var key;\n var betweenValue;\n var fieldType;\n var condition;\n var value;\n var subRules;\n var rule;\n var keyObj;\n var ruleValue;\n for (var i = 0, len = mongoList.length; i < len; i++) {\n var betweenOperatorArray = [];\n var inOperatorArray = [];\n condition = Object.keys(mongoList[i])[0];\n value = mongoList[i][condition];\n if (condition === '$and') {\n if (this.parent.enableNotCondition) {\n subRules = { condition: condition.replace('$', ''), rules: [], not: false };\n }\n else {\n subRules = { condition: condition.replace('$', ''), rules: [] };\n }\n rules.push(subRules);\n this.mongoRecursion(mongoList[i][condition], rules[rules.length - 1].rules, mongoLocale);\n }\n else if (condition === '$or') {\n var notBetween = void 0;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var innerObject = [];\n var keys = [];\n var firstKey = [];\n var secondKey = [];\n var innerKeys = [];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var firstValue = [];\n var secondValue = [];\n var innerFirstValue = [];\n var innerSecondValue = [];\n if (Array.isArray(value) && value.length === 2) {\n keys = Object.keys(value);\n innerFirstValue = value[keys[0]];\n innerSecondValue = value[keys[1]];\n if (typeof innerFirstValue === 'object') {\n innerObject = Object.keys(innerFirstValue)[0];\n innerKeys = Object.keys(innerFirstValue[Object.keys(innerFirstValue)[0]]);\n firstKey = innerKeys[0];\n secondKey = Object.keys(innerSecondValue[Object.keys(innerSecondValue)[0]])[0];\n if (firstKey === '$lt' && secondKey === '$gt') {\n operatorValue = 'notbetween';\n // eslint-disable-next-line security/detect-object-injection\n firstValue = innerFirstValue[innerObject][firstKey];\n // eslint-disable-next-line security/detect-object-injection\n secondValue = innerSecondValue[innerObject][secondKey];\n type = typeof firstValue === 'number' ? 'number' : 'date';\n ruleValue = [firstValue, secondValue];\n rule = { field: innerObject, label: innerObject, value: ruleValue, operator: operatorValue, type: type };\n rules.push(rule);\n notBetween = true;\n }\n }\n }\n if (!notBetween) {\n if (this.parent.enableNotCondition) {\n subRules = { condition: condition.replace('$', ''), rules: [], not: false };\n }\n else {\n subRules = { condition: condition.replace('$', ''), rules: [] };\n }\n rules.push(subRules);\n this.mongoRecursion(mongoList[i][condition], rules[rules.length - 1].rules, mongoLocale);\n }\n }\n else {\n value = mongoList[i][condition];\n if (value === null) { // isnull operator\n operatorValue = 'isnull';\n }\n if (typeof value === 'boolean') { // boolean type values\n operatorValue = 'equal';\n type = 'boolean';\n ruleValue = value;\n }\n if (typeof (value) === 'number') {\n ruleValue = value;\n type = 'number';\n operatorValue = 'equal';\n }\n else if (typeof (value) === 'object' && value !== null) {\n keyObj = Object.keys(value);\n for (var i_1 = 0; i_1 < keyObj.length; i_1++) {\n key = keyObj[i_1];\n stringValue = (value)[keyObj[i_1]];\n if (key === '$ne' && isNullOrUndefined(stringValue)) { // not null operator\n operatorValue = 'isnotnull';\n ruleValue = null;\n }\n if (key === '$ne' && typeof stringValue === 'boolean') { // not equal operator for boolean\n operatorValue = 'notequal';\n ruleValue = stringValue;\n type = 'boolean';\n }\n if (keyObj.length >= 2 && keyObj[i_1]) {\n if (typeof (stringValue) == 'object') { // between and notbetween operators\n operatorValue = 'notbetween';\n condition = Object.keys(stringValue)[0];\n betweenValue = [Object.keys(stringValue[condition])[0]];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n betweenOperatorArray.push(stringValue[condition][betweenValue]);\n type = 'number';\n }\n else {\n operatorValue = 'between';\n betweenOperatorArray.push(stringValue);\n }\n if (typeof (stringValue) === 'number') {\n type = 'number';\n }\n }\n else if (typeof (stringValue) === 'object' && stringValue !== null) { // \"in\" and \"notin\" operator\n if (key === '$not' && Object.keys(stringValue)[0] === '$regex') {\n if (stringValue['$regex'].indexOf('^') > -1) {\n operatorValue = 'notstartswith';\n ruleValue = stringValue['$regex'].replace('^', '');\n }\n else if (stringValue['$regex'].indexOf('$') > -1) {\n operatorValue = 'notendswith';\n ruleValue = stringValue['$regex'].replace('$', '');\n }\n else {\n operatorValue = 'notcontains';\n ruleValue = stringValue['$regex'];\n }\n }\n else {\n operatorValue = key === '$in' ? 'in' : 'notin';\n inOperatorArray = stringValue;\n type = typeof (stringValue[0]) === 'number' ? 'number' : 'string';\n }\n }\n else if (typeof (stringValue) === 'number') { // number type values\n operatorValue = this.getOperatorFromMongoOperator(key);\n type = 'number';\n ruleValue = stringValue;\n }\n if (typeof (stringValue) === 'string') { // string type values\n if (key === '$regex') {\n operatorValue = 'contains';\n ruleValue = stringValue;\n type = 'string';\n }\n if (key === '$ne') { // not equal\n if (stringValue !== null && stringValue.length > 0 && isNaN(Date.parse(stringValue))) {\n operatorValue = 'notequal';\n ruleValue = stringValue;\n }\n else if (isNullOrUndefined(stringValue)) { // is not null operator\n operatorValue = 'isnotnull';\n ruleValue = stringValue;\n }\n else if (stringValue === '') { // is not empty operator\n operatorValue = 'isnotempty';\n ruleValue = stringValue;\n }\n type = 'string';\n }\n if (stringValue.indexOf('^') > -1) {\n operatorValue = 'startswith';\n ruleValue = stringValue.replace('^', '');\n type = 'string';\n }\n if (stringValue.indexOf('$') > -1 && key !== '$not') {\n operatorValue = 'endswith';\n ruleValue = stringValue.replace('$', '');\n type = 'string';\n }\n for (var _i = 0, _a = this.parent.columns; _i < _a.length; _i++) {\n var column = _a[_i];\n if (column.field === condition) {\n fieldType = column.type;\n break;\n }\n }\n if (!isNaN(Date.parse(stringValue)) || fieldType === 'date') { // Date type operators\n operatorValue = operatorValue || this.getOperatorFromMongoOperator(key);\n type = 'date';\n ruleValue = stringValue;\n }\n }\n }\n }\n else if (value && typeof (value) === 'string' && !isNaN(Date.parse(value))) {\n operatorValue = 'equal';\n ruleValue = value;\n type = 'date';\n }\n else if (typeof (value) === 'string' && value !== '' && value !== 'true' && value !== 'false') {\n operatorValue = 'equal';\n ruleValue = value;\n type = 'string';\n }\n else if (typeof (value) === 'string' && value === '') {\n operatorValue = 'isempty';\n ruleValue = value;\n type = 'string';\n }\n if (betweenOperatorArray && betweenOperatorArray.length > 1) { // between opertor value\n rule = { field: condition, label: condition, value: betweenOperatorArray, operator: operatorValue, type: type };\n }\n else if (inOperatorArray && inOperatorArray.length > 1) { // in operator value\n rule = { field: condition, label: condition, value: inOperatorArray, operator: operatorValue, type: type };\n }\n else {\n rule = { field: condition, label: condition, value: ruleValue, operator: operatorValue, type: type };\n }\n rules.push(rule);\n operatorValue = '';\n }\n }\n };\n QueryLibrary.prototype.convertParamSqlToSql = function (sql) {\n var paramSql = sql.sql;\n var paramValues = sql.params;\n var parts = paramSql.split('?');\n var normalSql = parts[0];\n for (var i = 0; i < paramValues.length; i++) {\n normalSql += (typeof (paramValues[i]) === 'string' ? \"'\" + paramValues[i] + \"'\" + parts[i + 1] : paramValues[i] + parts[i + 1]);\n }\n if (normalSql.length >= 2 && normalSql[0] === '(' && normalSql[normalSql.length - 1] === ')') {\n normalSql = normalSql.slice(1, -1);\n }\n normalSql = normalSql.replace(/!= ''(?! =)/g, 'IS NOT EMPTY').replace(/= ''/g, 'IS EMPTY');\n return normalSql;\n };\n QueryLibrary.prototype.convertNamedParamSqlToSql = function (sql) {\n var namedParamSql = sql.sql;\n var params = sql.params;\n var normalSql = namedParamSql;\n Object.keys(params).forEach(function (paramName) {\n var paramValue = params[paramName];\n paramName = ':' + paramName;\n normalSql = normalSql.replace(paramName, typeof (paramValue) === 'string' ? \"'\" + paramValue + \"'\" : String(paramValue));\n });\n if (normalSql.length >= 2 && normalSql[0] === '(' && normalSql[normalSql.length - 1] === ')') {\n normalSql = normalSql.slice(1, -1);\n }\n normalSql = normalSql.replace(/!= ''(?! =)/g, 'IS NOT EMPTY').replace(/= ''/g, 'IS EMPTY');\n return normalSql;\n };\n QueryLibrary.prototype.getParameterSql = function (qbrule) {\n var qbRule = extend({}, qbrule, null, true);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var value = this.updateRuleValue(qbRule, false);\n return this.getParameterSQLVal(this.parent.getSqlFromRules(qbRule), value['ruleVal']);\n };\n QueryLibrary.prototype.getNamedParameterSql = function (qbrule) {\n var qbRule = extend({}, qbrule, null, true);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var value = this.updateRuleValue(qbRule, true);\n return this.getNamedParameterSQLVal(this.parent.getSqlFromRules(qbRule), value['namedRuleVal']);\n };\n QueryLibrary.prototype.getParameterSQLVal = function (content, ruleValue) {\n var replacedString = content.replace(/[%']/g, '');\n return { sql: '(' + replacedString + ')', params: ruleValue };\n };\n QueryLibrary.prototype.getNamedParameterSQLVal = function (content, ruleValue) {\n var replacedString = content.replace(/[%']/g, '');\n return { sql: '(' + replacedString + ')', params: ruleValue };\n };\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n QueryLibrary.prototype.updateRuleValue = function (rule, isNamedParameter) {\n var ruleVal = [];\n var namedRuleVal = {};\n var namedParameters = [];\n return this.updateValue(rule.rules, isNamedParameter, ruleVal, namedRuleVal, namedParameters);\n };\n QueryLibrary.prototype.updateValue = function (rules, isNamedParameter, ruleVal, \n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n namedRuleVal, namedParameters) {\n if (isNullOrUndefined(rules)) {\n return { ruleVal: ruleVal, namedRuleVal: namedRuleVal };\n }\n for (var i = 0; i < rules.length; i++) {\n if (rules[i].rules) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var value = this.updateValue(rules[i].rules, isNamedParameter, ruleVal, namedRuleVal, namedParameters);\n ruleVal = value['ruleVal'];\n namedRuleVal = value['namedRuleVal'];\n }\n else {\n var namedField = void 0;\n if (rules[i].value instanceof Array) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n for (var j = 0; j < (rules[i].value).length; j++) {\n if (isNamedParameter) {\n namedField = this.getNamedParameter(rules[i].field, namedParameters);\n }\n if (!isNullOrUndefined(rules[i].value[j])) {\n if (rules[i].type === 'string' || rules[i].type === 'date') {\n if (isNamedParameter) {\n namedRuleVal[namedField] = rules[i].value[j];\n }\n else {\n ruleVal.push(rules[i].value[j]);\n }\n }\n else {\n if (isNamedParameter) {\n namedRuleVal[namedField] = rules[i].value[j];\n }\n else {\n ruleVal.push(rules[i].value[j]);\n }\n }\n }\n if (isNamedParameter) {\n rules[i].value[j] = ':' + namedField;\n }\n else {\n rules[i].value[j] = '?';\n }\n }\n }\n else {\n if (isNamedParameter) {\n namedField = this.getNamedParameter(rules[i].field, namedParameters);\n }\n if (rules[i].operator.indexOf('null') < 1) {\n if (rules[i].type !== 'string' || (rules[i].type === 'string' && (rules[i].value !== '' || rules[i].value === 0))) {\n if (rules[i].type === 'string' || rules[i].type === 'date') {\n if (rules[i].operator.indexOf('empty') < 1) {\n var value = rules[i].value.toString();\n switch (rules[i].operator) {\n case 'startswith':\n case 'notstartswith':\n value = value + '%';\n break;\n case 'endswith':\n case 'notendswith':\n value = '%' + value;\n break;\n case 'contains':\n case 'notcontains':\n value = '%' + value + '%';\n break;\n }\n if (isNamedParameter) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n namedRuleVal[namedField] = value;\n }\n else {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ruleVal.push(value);\n }\n }\n else {\n if (isNamedParameter) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n namedRuleVal[namedField] = '';\n }\n else {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ruleVal.push('');\n }\n if (rules[i].operator === 'isempty') {\n rules[i].operator = 'equal';\n }\n else {\n rules[i].operator = 'notequal';\n }\n }\n }\n else {\n if (!isNullOrUndefined(rules[i].value)) {\n if (isNamedParameter) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n namedRuleVal[namedField] = rules[i].value;\n }\n else {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ruleVal.push(rules[i].value);\n }\n }\n }\n if (isNamedParameter) {\n rules[i].value = ':' + namedField;\n }\n else {\n rules[i].value = '?';\n }\n }\n }\n }\n }\n }\n return { ruleVal: ruleVal, namedRuleVal: namedRuleVal };\n };\n QueryLibrary.prototype.getNamedParameter = function (field, namedParameters) {\n var newField = null;\n if (namedParameters.length > 0) {\n for (var i = namedParameters.length - 1; i >= 0; i--) {\n var currField = namedParameters[i];\n if (currField.indexOf(field) > -1) {\n var idx = parseInt(currField.split('_')[1], 10) + 1;\n newField = field + '_' + idx;\n namedParameters.push(newField);\n break;\n }\n }\n }\n if (!newField) {\n newField = field + '_1';\n namedParameters.push(newField);\n }\n return newField;\n };\n QueryLibrary.prototype.getModuleName = function () {\n return 'query-library';\n };\n return QueryLibrary;\n}());\nexport { QueryLibrary };\n","import * as index from './index';\nindex.QueryBuilder.Inject(index.QueryLibrary);\nexport * from './index';\n"],"names":["__extends","extendStatics","d","b","Object","setPrototypeOf","__proto__","Array","p","hasOwnProperty","__","this","constructor","prototype","create","__assign","assign","t","s","i","n","arguments","length","call","apply","__decorate","decorators","target","key","desc","c","r","getOwnPropertyDescriptor","Reflect","decorate","defineProperty","Columns","_super","Property","isRequired","min","max","Number","MAX_VALUE","ChildProperty","Rule","Collection","Value","ShowButtons","QueryBuilder","options","element","_this","isReadonly","fields","text","value","updatedRule","not","condition","isLocked","isLocale","isRefreshed","isNotified","isAddSuccess","isNotValueChange","isFieldChange","isFieldClose","isDestroy","isGetNestedData","isCustomOprCols","groupCounter","lockItems","groupIndex","ruleIndex","isLastGroup","cloneGrpBtnClick","isMiddleGroup","cloneRuleBtnClick","isValueEmpty","MultiSelect","Inject","CheckBoxSelection","getPersistData","addOnPersist","reset","isImportRules","bodyElem","querySelector","inputElement","querySelectorAll","len","className","indexOf","getComponent","destroy","parentElement","innerHTML","grpContainer","createElement","attrs","class","grpHeader","grpBody","appendChild","headerTemplate","isRoot","enableNotCondition","removeClass","levelColl","id","setProperties","rule","rules","disableRuleCondition","getWrapper","getModuleName","requiredModules","modules","push","member","args","GetRootColumnName","field","isNullOrUndefined","separator","split","initialize","dataColl","columnKeys","keys","cols","categories","type","groupBy","isDate","validateObj","columns","columnSort","updateCustomOperator","isNaN","Date","parse","getTime","validation","category","l10n","getConstant","operators","customOperators","updateSubFieldsFromColumns","label","updateSubFields","trigger","col","data","sampCol","result","compField","resData","column","from","this_1","j","sqlIdx","operator_1","operColl","values","map","join","valueIdx","focusEventHandler","event","clickEventHandler","groupID","tagName","animation","Animation","duration","delay","renderSummary","summaryElem","document","getElementById","txtareaElem","animate","name","groupElem","style","display","textContent","getSqlFromRules","height","scrollHeight","actionButton","deleteRule","ruleClone","ruleLock","groupLock","groupClone","closest","deleteGroup","addGroupElement","mRules","extend","setGroupRules","renderSummaryCollapse","forIdValue","getAttribute","targetValue","enableSeparateConnector","replace","group","getGroup","ariaChecked","toggleElem","getElementsByClassName","addClass","cancel","toLowerCase","beforeSuccessCallBack","observedChangeArgs","beforeRules","getValidRules","getParentGroup","classList","contains","previousElementSibling","getRule","ruleID","filterRules","andElem","orElem","checked","selectBtn","showButtons","groupInsert","maxGroupCount","enableRtl","children","addRuleElement","appendRuleElem","parentId","action","ruleElem","elem","ruleListElem","select","setAttribute","ruleIdCounter","cloneRule","index","tempRuleIndex","insertBefore","ruleTemplate","requestType","ruleTemplateFn","templateParser","templateID","getOperators","operatorFields","isReact","isAngular","templateColl","nodeType","isVue3","append","cloneNode","lockGroup","lockRule","cloneGroup","ruleDelete","allowDragAndDrop","renderReactTemplates","isRuleTemplate","isInitialLoad","prvtEvtTgrDaD","addRuleSuccessCallBack","trgt","act","pId","isRlTmp","dropDownList","getColumn","newRule","operator","selectedColumn","passedRule","args_1","displayMode","spanElement","add","previousRuleElem","prevRule","ruleContainer","headerTemplateFn","prevRuleContainer","prevElem","prevRule_1","updateAddedRule","fieldMode","ddlField","ddlValue","autoSelectField","dataSource","placeholder","popupHeight","close","fieldClose","bind","change","changeField","open","popupOpen","cssClass","fieldModel","DropDownList","appendTo","ddlVal","getDataByValue","changeRule","itemData","dummyDropdownTreeDs","updateDropdowntreeDS","child","expanded","selectable","showClearButton","changeOnBlur","treeSettings","expandOn","filtering","dropdownTreeFiltering","dropdownTreeClose","dropdowntree","DropDownTree","getLabelFromColumn","lockRuleTarget","args_2","notCondition","undefined","prevElem_1","ruleContainer_1","args_3","setMultiConnector","proxy","ruleElemID","srcElement","ddTree","hierarchicalData","changeDataSource","matchedDataSource","nestedChildFilter","filter","filteredChild","setTimeout","treeObj","expandAll","refresh","node","isMatchedNode","matchedChildren","checkValue","parseInt","toString","template","isNewRuleAdded","enableSeparateCondition","custom","splice","changeRuleTemplate","operVal","parentGroup","previousColumn","detach","clearQBTemplate","renderToolTip","tooltip","Tooltip","content","isSticky","position","afterClose","beforeOpen","tooltipCloseElement","validateFields","dropDownTreeObj","isValid","allowValidation","excludeOprs","fieldElem","indexElem","valArray","dropDownObj","tempElem","ruleElemCln","validateRule","separateCondition","valElem","jLen","refreshLevelColl","obj","groupElement","level","refreshLevel","childElem","ruleList","iLen","groupCount","slice","groupTemplate","isConnector","glueElem","inputElem","dragClsName","labelElem","grpActElem","groupBtn","groupHdrElem","grpBodyElem","rulesElem","spanDragElement","aria-lable","title","role","clsName","cloneClsName","lockClsName","filterElem","cloneRuleBtnElem","cloneLockBtnElem","delBtnElem","isGroup","isBtnClick","addGroupSuccess","eventTarget","dltGroupBtn","groupIdCounter","andInpElem","orInpElem","andLblElem","orLblElem","btnGroupId","groupDelete","Button","iconCss","rippleEffect","selector","childElems","grpLen","tempGroupIndex","idx","parentNode","addGroups","addRuleToNewGroups","cloneBtnElem","lockBtnElem","lockSpanElement","notElem","CheckBox","btnGroup","childNodes","newAndElem","newOrElem","nextSibling","nextElementSibling","args_4","conditionBtn_1","btnObj","onclick","groupBtn_1","DropDownButton","items","grpId","chgrpId","childGroupID","addHeaderDiv","disabled","isInitialRule","groupHdr","getRuleCollection","headerFn","enableSeparateConnectorInitialRule","nodeName","notifyChange","grpElement","ruleElement","format","getFormat","intl","formatDate","templateChange","updateRules","eventsArgs","grpElem","validateValue","prevOper","arrOper","grpEle","destroyControls","changeValue","isNumInput","currentTarget","dateElement","rbValue","numericTextBoxObj","getInstance","NumericTextBox","decimalSeparator","getValue","getNumericObject","locale","getNumberParser","immediateModeDelay","window","clearInterval","timer","setInterval","filterValue","grID","rlID","ele","changeValueSuccessCallBack","ddl","item","popupObj","getItemData","customArgs","isInteracted","previousItemData","prevItemData","previousItem","e","previousValue","ddtElem","ddt","oldValue","dataBind","destroySubFields","subFieldElem","ddlArgs","tempRule","ddlObj","changeFilter","flt","dl","rl","tmpRl","dArg","selectedField","fieldChangeSuccess","operatorElem","changeOperator","opr","selectedIndex","operatorChangeSuccess","changeRuleValues","tooltipElem","createSubFields","remove","subFieldValue","subFilterCounter","ruleId","subField","currOper","prevValue","parentElem","operatorList","oprElem","childElementCount","fieldObj","renderValues","operator_2","forEach","ddlIdx","autoSelectOperator","ddlOperator","operatorModel","isField","popup","divElement","templateDestroy","templateElement","elemId","temp","templateElements","elementId","elements","getValues","original","fieldColl","dataObj","fieldStr","createNestedObject","lastIndex","k","getDistinctValues","nest","isNested","this_2","renderMultiSelect","selectedValue","ds","isFetched","isValues","multiSelectValue","dataManager","query","Query","selectedRule","mode","width","closePopup","actionBegin","multiSelectOpen","valueModel","multiSelectModel","multiSelectObj","DataManager","bindMultiSelectData","getMultiSelectData","dummyData","deferred","Deferred","executeQuery","multiselectObj","hideSpinner","createSpinner","showSpinner","then","actual","catch","reject","spinnerElem","Browser","isDevice","ms","processTemplate","container","tempElements","write","parentFieldObj","subFieldObjList","lastSubFieldObj","setDefaultValue","isArryValue","isNumber","renderStringValue","ruleValElem","selectedVal","columnData","isTemplate","isPublic","txtBox","input","textBoxModel","inputobj","TextBox","minWidth","renderNumberValue","selVal","txtInp","numericTxt","step","numericTextBoxModel","numeric","oninput","processValueString","numArr","strArr","kLen","parseDate","formatOpt","dParser","getDateParser","skeleton","renderControls","isRendered","length_1","processBoolValues","datepick","datePicker","place","formatObj","getLocale","datePickerModel","DatePicker","orgValue","isCheck","radioBtn","radioButtonModel","radiobutton","RadioButton","getOperatorIndex","getPreviousItemData","isRender","filtElem","getElementsByTagName","filtObj","isTempRendered","setColumnTemplate","inputLen","renderTemplate","observedActionArgs","actionBeginSuccessCallBack","Element","columnTemplateFn","valElemColl","updateValues","selectedDate","radioBtnObj","textboxValue","controlName","isNotTrigger","valueContainer","elementCln","i_1","i_2","ruleValueUpdate","beforeRule","afterRule","JSON","stringify","previousRule","oper","arrOperator","dupSelectedValue","parseFloat","isObject","formatOptions","findGroupByIdx","groupIdx","ruleColl","dupRuleColl","unWireEvents","portals","popupElement","addRules","groups","importRules","initWrapper","trim","summaryView","notGroupRtl","readonly","enableReadonly","buttons","button","contentElem","textElem","styles","editElem","divElem","collapseElem","sortDirection","executeLocal","sortByDesc","sortBy","onChangeNotGroup","checkNotGroup","orgRule","onPropertyChanged","newProp","oldProp","properties","_i","properties_1","enablePersistence","setRules","Internationalization","preRender","getUniqueID","defaultLocale","StartsWith","DoesNotStartWith","EndsWith","DoesNotEndWith","Contains","DoesNotContain","NotLike","Like","Equal","NotEqual","LessThan","LessThanOrEqual","GreaterThan","GreaterThanOrEqual","Between","NotBetween","In","NotIn","Remove","SelectField","SelectOperator","DeleteRule","DeleteGroup","AddGroup","AddCondition","Edit","ValidationMessage","SummaryViewTitle","OtherFields","AND","OR","NOT","SelectValue","IsEmpty","IsNotEmpty","IsNull","IsNotNull","True","False","AddButton","CloneGroup","LockGroup","CloneRule","LockRule","UnlockRule","UnlockGroup","L10n","parser","stringOperator","dateOperator","booleanOperator","numberOperator","equal","notequal","greaterthan","greaterthanorequal","lessthan","in","notin","lessthanorequal","startswith","endswith","between","notbetween","isnull","isnotnull","isempty","isnotempty","notstartswith","notendswith","notcontains","sqlOperators","toUpperCase","render","stringOper","numberOper","concat","executeDataManager","take","initControl","renderComplete","initializeDrag","draggable","Draggable","dragTarget","distance","helper","dragStart","dragStartHandler","drag","dragHandler","dragStop","dragStopHandler","isReplaceDragEle","isPreventSelect","abort","isDragScroll","currentStateTarget","cloneElement","visualElement","offsetWidth","removeAttribute","draggedRule","isDragEventPrevent","body","dragElement","dragEventArgs","dragRuleID","dragGroupID","borderLineElem","targetElem","rect","getBoundingClientRect","distanceToTop","mouseY","clientY","changedTouches","top","distanceToBottom","bottom","threshold","targetGroup","isPreventelem","targetGrp","dropEventArgs","dropRuleID","dropGroupID","tgrt","groupId_1","groupRule","ruleElems","ruleIds","dropInd","deleteRules","groupId","groupId_2","templateCompiler","compile","error","wireEvents","wrapper","EventHandler","keyBoardHandler","isParent","groupLevel","deleteGroupSuccessCallBack","nextElem","removeString","remRule","ruleElemColl","isTemplateRendered","isPlatformTemplate","deleteRuleSuccessCallBack","clnruleElem","previousElem","nextElem_1","err","i_3","lockGrpTarget","keyCode","code","dragElemnet","preventDefault","clearTemplate","isNewGroup","count","andGroup","orGroup","currentRule","getRules","ruleCondtion","isValidRule","customObj","isQuestion","lockedRule","isArray","some","val","notValue","HTMLElement","deleteGroups","groupIdColl","getFilteredRecords","predicate","getPredicate","dataManagerQuery","where","ruleIdColl","getDataManagerQuery","pred","pred2","ruleValue","ignoreCase","and","or","isDateFilter","dateOperColl","matchCase","getDate","isTime","datePredicate","arrayPredicate","Predicate","localeString","cldrData","setTime","date","isStart","setHours","startDate","endDate","nullValue","gte","currDate","setMinutes","setSeconds","isReset","renderGroup","tglBtnElem","renderRule","cloneElem","deleteGroupElems","addRuleGroupElems","removeRuleElems","elems","enableBtnGroup","isDateFunction","dateFunc","getSqlString","enableEscape","queryStr","sqlLocale","valueStr","ruleOpertor","ruleCondition","custOper","isCustom","setRulesFromSql","sqlString","ruleModel","getRulesFromSql","sqlParser","processParser","allowEscape","getParameterizedSql","moduleLoader","loadedModules","sql","notify","prop","onPropertyChange","console","warn","setParameterizedSql","sqlQuery","getParameterizedNamedSql","setParameterizedNamedSql","setMongoQuery","mongoQuery","mongoLocale","getMongoQuery","isCloneRule","parentGroupID","isCloneGroup","str","st","parseSqlStrings","conditions","subOp","regexStr","matchValue","test","regExp","RegExp","exec","lastPasrser","checkLiteral","checkNumberLiteral","regExValue","singleString","getSingleQuoteString","isClosed","checkCondition","combineSingleQuoteString","doubleString","getDoubleQuoteString","start","end","substring","isBetween","tempMatchValue","tempStr","lastParser","secParser","betweenParser","betweenOperator","getOperator","=","!=","<",">","<=",">=","not in","not between","is empty","is null","is not null","is not empty","localeOperator","getTypeFromColumn","l","getLabelFromField","startIdx","fieldName","subRules","lLen","grpCount","numVal","strVal","isLeftOpened","isNotOpened","pop","targetGrpId","lockItem","disableRuleControls","newGroup","disableHeaderControls","updateLockItems","isDisabled","addElem","deleteGrpElem","lockElem","groupContElem","addCondition","addGroup","ddlElement","numericElement","textElement","checkboxElement","radioBtnElement","multiSelectElement","deleteElem","enabled","Event","Complex","NotifyPropertyChanges","Component","QueryLibrary","parent","addEventListener","isDestroyed","removeEventListener","on","queryLibrary","off","getMongoFromRules","mongoParser","getParameterSql","getNamedParameterSql","convertParamSqlToSql","convertNamedParamSqlToSql","convertMongoQuery","getOperatorFromMongoOperator","operatorValue","itVal","x","endsWith","mongoList","mongoRecursion","stringValue","betweenValue","fieldType","keyObj","betweenOperatorArray","inOperatorArray","notBetween","innerObject","firstKey","secondKey","firstValue","innerFirstValue","innerSecondValue","_a","paramSql","paramValues","params","parts","normalSql","namedParamSql","paramName","paramValue","String","qbrule","qbRule","updateRuleValue","getParameterSQLVal","getNamedParameterSQLVal","isNamedParameter","ruleVal","namedRuleVal","namedParameters","updateValue","namedField","getNamedParameter","newField","currField","index.QueryLibrary"],"mappings":"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"}