@syncfusion/ej2-querybuilder 33.1.49 → 33.2.4

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 _this.isPropChange = false;\n _this.isRuleClicked = false;\n _this.groupCloned = false;\n _this.isRequestSent = false;\n MultiSelect.Inject(CheckBoxSelection);\n return _this;\n }\n QueryBuilder.prototype.getPersistData = function () {\n return this.addOnPersist(['rule']);\n };\n /**\n * Clears the rules without root rule.\n *\n * @returns {void}.\n */\n QueryBuilder.prototype.reset = function () {\n this.isImportRules = false;\n var bodyElem = this.element.querySelector('.e-group-body');\n var inputElements = this.element.querySelectorAll('input.e-control');\n var batchSize = 20;\n var currentIndex = 0;\n var processBatch = function () {\n var endIndex = Math.min(currentIndex + batchSize, inputElements.length);\n for (var i = currentIndex; i < endIndex; i++) {\n var element = inputElements[i];\n try {\n if (element.className.indexOf('e-tooltip') > -1) {\n var tooltip = getComponent(element, 'tooltip');\n if (tooltip) {\n tooltip.destroy();\n }\n }\n else if (element.parentElement && element.parentElement.className.indexOf('e-tooltip') > -1) {\n var tooltip = getComponent(element.parentElement, 'tooltip');\n if (tooltip) {\n tooltip.destroy();\n }\n }\n }\n catch (e) {\n console.warn('Error destroying tooltip:', e);\n }\n }\n currentIndex = endIndex;\n if (currentIndex < inputElements.length) {\n requestAnimationFrame(processBatch);\n }\n };\n if (inputElements.length > 0) {\n processBatch();\n }\n if (bodyElem) {\n bodyElem.textContent = '';\n }\n else {\n var fragment = document.createDocumentFragment();\n var grpContainer = this.createElement('div', { attrs: { class: 'e-group-container' } });\n var grpHeader = this.createElement('div', { attrs: { class: 'e-group-header' } });\n var grpBody = this.createElement('div', { attrs: { class: 'e-group-body' } });\n grpContainer.appendChild(grpHeader);\n grpContainer.appendChild(grpBody);\n fragment.appendChild(grpContainer);\n this.element.appendChild(fragment);\n bodyElem = this.element.querySelector('.e-group-body');\n }\n if (this.headerTemplate && this.isRoot) {\n this.element.textContent = '';\n this.isRoot = false;\n }\n if (this.enableNotCondition) {\n var toggleElements = this.element.querySelectorAll('.e-qb-toggle');\n for (var i = 0; i < toggleElements.length; i++) {\n removeClass([toggleElements[i]], 'e-active-toggle');\n }\n }\n if (bodyElem) {\n bodyElem.appendChild(this.createElement('div', { attrs: { class: 'e-rule-list' } }));\n }\n this.levelColl[this.element.id + '_group0'] = [0];\n this.setProperties({ rule: { condition: 'and', not: false, rules: [] } }, true);\n if (bodyElem && bodyElem.parentElement) {\n this.disableRuleCondition(bodyElem.parentElement);\n }\n };\n QueryBuilder.prototype.getWrapper = function () {\n return this.element;\n };\n QueryBuilder.prototype.getModuleName = function () {\n return 'query-builder';\n };\n QueryBuilder.prototype.requiredModules = function () {\n var modules = [];\n modules.push({\n member: 'query-library',\n args: [this]\n });\n return modules;\n };\n QueryBuilder.prototype.GetRootColumnName = function (field) {\n if (!isNullOrUndefined(field)) {\n return this.separator ? field.split(this.separator)[0] : field;\n }\n return '';\n };\n QueryBuilder.prototype.initialize = function () {\n var _this = this;\n if (this.dataColl.length) {\n var columnKeys_1 = Object.keys(this.dataColl[0]);\n var cols = [];\n var categories_1 = [];\n var type_1;\n var groupBy_1 = false;\n var isDate_1 = false;\n var value_1;\n var validateObj_1 = { isRequired: true, min: 0, max: Number.MAX_VALUE };\n if (this.columns.length) {\n this.columnSort();\n var columns = this.columns;\n columns.forEach(function (column) {\n _this.updateCustomOperator(column, 'initial');\n if (!column.type) {\n if (columnKeys_1.indexOf(column.field) > -1) {\n value_1 = _this.dataColl[0][column.field];\n type_1 = typeof value_1;\n if (type_1 === 'string') {\n isDate_1 = !isNaN(Date.parse(value_1));\n }\n else if (type_1 === 'object') {\n isDate_1 = value_1 instanceof Date && !isNaN(value_1.getTime());\n type_1 = 'string';\n }\n column.type = type_1;\n isDate_1 = false;\n }\n type_1 = 'string';\n }\n if (!column.validation) {\n column.validation = validateObj_1;\n }\n if (column.category) {\n groupBy_1 = true;\n }\n else {\n column.category = _this.l10n.getConstant('OtherFields');\n }\n if (categories_1.indexOf(column.category) < 0) {\n categories_1.push(column.category);\n }\n if (!column.operators ||\n (_this.isLocale && _this.isCustomOprCols.indexOf(column.field) === -1)) {\n column.operators = _this.customOperators[column.type + 'Operator'];\n }\n });\n if (groupBy_1 && (categories_1.length > 1 || categories_1[0] !== this.l10n.getConstant('OtherFields'))) {\n this.fields = { text: 'label', value: 'field', groupBy: 'category' };\n }\n this.updateSubFieldsFromColumns(this.columns);\n }\n else {\n for (var i = 0, len = columnKeys_1.length; i < len; i++) {\n value_1 = this.dataColl[0][columnKeys_1[i]];\n type_1 = typeof value_1;\n if (type_1 === 'string') {\n isDate_1 = !isNaN(Date.parse(value_1));\n }\n else if (type_1 === 'object' && !Object.keys(value_1).length) {\n isDate_1 = value_1 instanceof Date && !isNaN(value_1.getTime());\n type_1 = 'string';\n }\n cols[i] = {\n 'field': columnKeys_1[i], 'label': columnKeys_1[i], 'type': isDate_1 ? 'date' : type_1,\n 'validation': validateObj_1\n };\n isDate_1 = false;\n cols[i].operators = this.customOperators[cols[i].type + 'Operator'];\n if (type_1 === 'object') {\n this.updateSubFields(value_1, cols[i]);\n }\n }\n this.columns = cols;\n }\n }\n else if (this.columns && this.columns.length) {\n if (this.sortDirection !== 'Default') {\n this.columnSort();\n }\n this.processColumnsInBatches();\n if (this.columns.length > 50) {\n setTimeout(function () {\n _this.updateSubFieldsFromColumns(_this.columns);\n }, 0);\n }\n else {\n this.updateSubFieldsFromColumns(this.columns);\n }\n }\n this.trigger('dataBound', { type: 'dataBound' });\n };\n QueryBuilder.prototype.processColumnsInBatches = function () {\n var _this = this;\n var columns = this.columns;\n var batchSize = 10;\n var processedCount = 0;\n var processBatch = function () {\n var endIdx = Math.min(processedCount + batchSize, columns.length);\n for (var i = processedCount; i < endIdx; i++) {\n if (columns[i].category && columns[i].category !== _this.l10n.getConstant('OtherFields')) {\n _this.fields = { text: 'label', value: 'field', groupBy: 'category' };\n }\n else {\n columns[i].category = _this.l10n.getConstant('OtherFields');\n }\n _this.updateCustomOperator(columns[i], 'initial');\n if (!columns[i].operators ||\n (_this.isLocale && _this.isCustomOprCols.indexOf(columns[i].field) === -1)) {\n columns[i].operators = _this.customOperators[columns[i].type + 'Operator'];\n }\n }\n processedCount = endIdx;\n if (processedCount < columns.length) {\n requestAnimationFrame(processBatch);\n }\n };\n processBatch();\n };\n QueryBuilder.prototype.updateSubFieldsFromColumns = function (col, field) {\n if (col.length > 50) {\n this.updateSubFieldsLarge(col, field);\n return;\n }\n for (var i = 0; i < col.length; i++) {\n if (this.separator !== '' && col[i].field.indexOf(this.separator) < 0) {\n col[i].field = field ? field + this.separator + col[i].field : col[i].field;\n }\n if (col[i].operators) {\n this.updateCustomOperator(col[i]);\n }\n else if (col[i].type && col[i].type !== 'object') {\n col[i].operators = this.customOperators[col[i].type + 'Operator'];\n }\n if (col[i].columns) {\n col[i].type = 'object';\n this.updateSubFieldsFromColumns(col[i].columns, col[i].field);\n }\n }\n };\n QueryBuilder.prototype.updateSubFieldsLarge = function (col, field) {\n var _this = this;\n var i = 0;\n var colLength = col.length;\n var processNextBatch = function () {\n var endIdx = Math.min(i + 10, colLength);\n for (; i < endIdx; i++) {\n if (_this.separator !== '' && col[i].field.indexOf(_this.separator) < 0) {\n col[i].field = field ? field + _this.separator + col[i].field : col[i].field;\n }\n if (col[i].operators) {\n _this.updateCustomOperator(col[i]);\n }\n else if (col[i].type && col[i].type !== 'object') {\n col[i].operators = _this.customOperators[col[i].type + 'Operator'];\n }\n }\n if (i < colLength) {\n requestAnimationFrame(processNextBatch);\n }\n else {\n setTimeout(function () {\n for (var j = 0; j < colLength; j++) {\n if (col[j].columns) {\n col[j].type = 'object';\n _this.updateSubFieldsFromColumns(col[j].columns, col[j].field);\n }\n }\n }, 0);\n }\n };\n processNextBatch();\n };\n QueryBuilder.prototype.updateSubFields = function (value, col, data) {\n var sampCol;\n col.columns = [];\n var columnKeys = Object.keys(value);\n var field;\n var label;\n var type;\n var result;\n data = data ? data : this.dataColl[0];\n for (var i = 0, len = columnKeys.length; i < len; i++) {\n var compField = col.field.split('.');\n if (data) {\n result = data[compField[compField.length - 1]][columnKeys[i]];\n }\n else {\n result = this.dataColl[0][col.field][columnKeys[i]];\n }\n var resData = data[col.field.split(this.separator)[col.field.split(this.separator).length - 1]];\n type = typeof result;\n field = col.field + this.separator + columnKeys[i];\n label = columnKeys[i];\n type = (type === 'object' && !isNaN(Date.parse(result))) ? 'date' : type;\n sampCol = { field: field, label: label, type: type };\n if (type !== 'object') {\n sampCol.operators = this.customOperators[type + 'Operator'];\n }\n col.columns.push(sampCol);\n if (type === 'object') {\n this.updateSubFields(result, sampCol, resData);\n }\n }\n };\n QueryBuilder.prototype.updateCustomOperator = function (column, from) {\n if (column.operators) {\n if (!this.isLocale && from === 'initial' && !isNullOrUndefined(this.isCustomOprCols)) {\n this.isCustomOprCols.push(column.field);\n }\n var _loop_1 = function (j) {\n var sqlIdx = Object.keys(column.operators[j]).indexOf('sqlOperator');\n if (sqlIdx > -1) {\n var operator_1 = column.operators[j];\n var operColl = Object.keys(operator_1);\n var values = operColl.map(function (key) { return operator_1[\"\" + key]; }).join(',').split(',');\n var valueIdx = operColl.indexOf('value');\n this_1.operators[values[valueIdx]] = values[sqlIdx];\n }\n };\n var this_1 = this;\n for (var j = 0; j < column.operators.length; j++) {\n _loop_1(j);\n }\n }\n };\n QueryBuilder.prototype.focusEventHandler = function (event) {\n this.target = event.target;\n };\n QueryBuilder.prototype.clickEventHandler = function (event) {\n var _this = this;\n var target = event.target;\n var args;\n this.isImportRules = false;\n var groupID;\n if (target.tagName === 'SPAN') {\n target = target.parentElement;\n }\n if (typeof target.className === 'string' && target.className.indexOf('e-collapse-rule') > -1) {\n var animation = new Animation({ duration: 1000, delay: 0 });\n if (this.element.querySelectorAll('.e-summary-content').length < 1) {\n this.renderSummary();\n }\n var summaryElem = document.getElementById(this.element.id + '_summary_content');\n var txtareaElem = summaryElem.querySelector('.e-summary-text');\n animation.animate('.e-query-builder', { name: 'SlideLeftIn' });\n var groupElem = this.element.querySelector('.e-group-container');\n groupElem.style.display = 'none';\n txtareaElem.textContent = this.getSqlFromRules(this.rule);\n summaryElem.style.display = 'block';\n txtareaElem.style.height = txtareaElem.scrollHeight + 'px';\n }\n if (target.tagName === 'BUTTON' && typeof target.className === 'string' && target.className.indexOf('e-qb-toggle') < 0) {\n var animation = new Animation({ duration: 1000, delay: 0 });\n switch (true) {\n case target.className.indexOf('e-removerule') > -1:\n this.actionButton = target;\n this.deleteRule(target);\n break;\n case target.className.indexOf('e-clone-rule-btn') > -1:\n this.actionButton = target;\n this.cloneRuleBtnClick = true;\n this.isRuleClicked = true;\n this.ruleClone(target);\n break;\n case target.className.indexOf('e-lock-rule-btn') > -1:\n this.actionButton = target;\n this.ruleLock(target);\n break;\n case target.className.indexOf('e-lock-grp-btn') > -1:\n this.actionButton = target;\n this.groupLock(target);\n break;\n case target.className.indexOf('e-clone-grp-btn') > -1:\n this.actionButton = target;\n this.cloneGrpBtnClick = this.groupCloned = true;\n this.isRuleClicked = true;\n this.groupClone(closest(target, '.e-group-container'));\n break;\n case target.className.indexOf('e-deletegroup') > -1:\n this.actionButton = target;\n this.deleteGroup(closest(target, '.e-group-container'));\n break;\n case target.className.indexOf('e-edit-rule') > -1:\n animation.animate('.e-query-builder', { name: 'SlideLeftIn' });\n document.getElementById(this.element.id + '_summary_content').style.display = 'none';\n if (this.element.querySelectorAll('.e-group-container').length < 1) {\n this.addGroupElement(false, this.element, this.rule.condition, false, this.rule.not);\n var mRules = extend({}, this.rule, {}, true);\n this.setGroupRules(mRules);\n this.renderSummaryCollapse();\n }\n else {\n var groupElem = this.element.querySelector('.e-group-container');\n if (groupElem.querySelectorAll('.e-collapse-rule').length < 1) {\n this.renderSummaryCollapse();\n }\n groupElem.style.display = 'block';\n }\n break;\n }\n }\n else if ((target.tagName === 'LABEL' && target.parentElement.className.indexOf('e-btn-group') > -1) ||\n (typeof target.className === 'string' && target.className.indexOf('e-qb-toggle') > -1)) {\n var element = closest(target, '.e-group-container');\n if (!this.headerTemplate) {\n var forIdValue = target.getAttribute('for');\n var targetValue = void 0;\n if (forIdValue) {\n targetValue = document.getElementById(forIdValue).getAttribute('value');\n }\n else if (this.enableSeparateConnector) {\n if (target.classList.contains('e-btngroup-or-lbl')) {\n targetValue = 'or';\n }\n else if (target.classList.contains('e-btngroup-and-lbl')) {\n targetValue = 'and';\n }\n else {\n targetValue = target.textContent;\n }\n }\n groupID = element.id.replace(this.element.id + '_', '');\n var group = this.getGroup(groupID);\n var ariaChecked = void 0;\n if (this.enableNotCondition) {\n if (target.className.indexOf('e-qb-toggle') > -1) {\n var toggleElem = element.getElementsByClassName('e-qb-toggle')[0];\n if (toggleElem.className.indexOf('e-active-toggle') > -1) {\n removeClass([toggleElem], 'e-active-toggle');\n ariaChecked = false;\n }\n else {\n addClass([toggleElem], 'e-active-toggle');\n ariaChecked = true;\n }\n targetValue = group.condition;\n }\n else {\n ariaChecked = group.not;\n }\n }\n args = { groupID: groupID, cancel: false, type: 'condition', value: targetValue.toLowerCase() };\n if (this.enableNotCondition) {\n args = {\n groupID: groupID, cancel: false, type: 'condition', value: targetValue.toLowerCase(),\n 'not': ariaChecked\n };\n }\n }\n if (!this.isImportRules) {\n this.trigger('beforeChange', args, function (observedChangeArgs) {\n _this.beforeSuccessCallBack(observedChangeArgs, target);\n });\n }\n else {\n this.beforeSuccessCallBack(args, target);\n }\n this.target = target;\n }\n };\n QueryBuilder.prototype.beforeSuccessCallBack = function (args, target) {\n if (args && !args.cancel) {\n var element = closest(target, '.e-group-container');\n var groupID = element.id.replace(this.element.id + '_', '');\n var beforeRules = this.getValidRules(this.rule);\n var rule = this.getParentGroup(element);\n if (this.enableSeparateConnector) {\n if (isNullOrUndefined(closest(target, '.e-rule-container')) &&\n element.classList.contains('e-group-container')) {\n element = target.parentElement.previousElementSibling !== null ?\n target.parentElement.previousElementSibling : element;\n }\n else {\n element = closest(target, '.e-rule-container');\n }\n var id = element.id.replace(this.element.id + '_', '');\n if (element.classList.contains('e-rule-container')) {\n rule = this.getRule(element);\n rule.condition = args.value;\n }\n else if (element.classList.contains('e-group-container')) {\n rule = this.getGroup(element);\n rule.condition = args.value;\n }\n if (this.enableNotCondition) {\n rule.not = args.not;\n }\n if (!this.isImportRules) {\n this.trigger('change', { groupID: groupID, ruleID: id, type: 'condition', value: rule.condition });\n }\n }\n else {\n rule.condition = args.value;\n if (this.enableNotCondition) {\n rule.not = args.not;\n }\n if (!this.isImportRules) {\n this.trigger('change', { groupID: groupID, type: 'condition', value: rule.condition });\n }\n }\n this.filterRules(beforeRules, this.getValidRules(this.rule), 'condition');\n if (this.enableSeparateConnector) {\n var andElem = target.parentElement.querySelector('.e-btngroup-and');\n var orElem = target.parentElement.querySelector('.e-btngroup-or');\n if (andElem && orElem) {\n if (args.value === 'and') {\n andElem.checked = true;\n orElem.checked = false;\n }\n else if (args.value === 'or') {\n orElem.checked = true;\n andElem.checked = false;\n }\n }\n }\n }\n };\n QueryBuilder.prototype.selectBtn = function (target, event) {\n if (event.name === 'beforeOpen') {\n if (this.showButtons.groupInsert || isNullOrUndefined(this.showButtons.groupInsert)) {\n if (this.element.querySelectorAll('.e-group-container').length >= this.maxGroupCount + 1) {\n addClass([event.element.querySelector('li span.e-addgroup').parentElement], 'e-button-hide');\n }\n else {\n removeClass([event.element.querySelector('li span.e-addgroup').parentElement], 'e-button-hide');\n }\n if (this.enableRtl) {\n addClass([event.element.querySelector('li').parentElement], 'e-rtl');\n }\n }\n else {\n addClass([event.element.querySelector('li span.e-addgroup').parentElement], 'e-button-hide');\n }\n }\n else if (event.element.children[0].className.indexOf('e-addrule') > -1) {\n this.isRuleClicked = true;\n this.addRuleElement(closest(target, '.e-group-container'), {});\n }\n else if (event.element.children[0].className.indexOf('e-addgroup') > -1) {\n this.isRuleClicked = true;\n this.addGroupElement(true, closest(target, '.e-group-container'), '', true);\n }\n };\n QueryBuilder.prototype.appendRuleElem = function (target, column, type, parentId, action, rule) {\n var ruleElem;\n var elem;\n var ruleListElem = target && target.querySelector('.e-rule-list');\n var args;\n if (type === 'change') {\n ruleElem = select('#' + parentId, target);\n }\n else {\n ruleElem = this.createElement('div', { attrs: { class: 'e-rule-container' } });\n ruleElem.setAttribute('id', target.id + '_rule' + this.ruleIdCounter);\n if (this.showButtons.cloneRule && this.cloneRuleBtnClick) {\n if (this.ruleIndex < 0) {\n ruleListElem.appendChild(ruleElem);\n }\n else {\n if (this.enableSeparateConnector) {\n var index = -1;\n var tempRuleIndex = this.ruleIndex + 1;\n for (var i = 0; i < tempRuleIndex; i++) {\n if (i === ruleListElem.children.length) {\n break;\n }\n if (ruleListElem.children[i].classList.contains('e-rule-container')) {\n tempRuleIndex++;\n index++;\n }\n }\n ruleListElem.insertBefore(ruleElem, ruleListElem.children[this.ruleIndex + index + 1]); // added clone rule to next position\n }\n else {\n ruleListElem.insertBefore(ruleElem, ruleListElem.children[this.ruleIndex + 1]); // added clone rule to next position\n }\n }\n this.cloneRuleBtnClick = false;\n }\n else {\n ruleListElem.appendChild(ruleElem);\n }\n this.ruleIdCounter++;\n }\n if (column && column.ruleTemplate && rule) {\n args = { requestType: 'template-initialize', ruleID: ruleElem.id, action: action, fields: this.fields, rule: rule };\n this.trigger('actionBegin', args);\n this.ruleTemplateFn = this.templateParser(column.ruleTemplate);\n var templateID = this.element.id + column.field;\n var template = void 0;\n args.fields = this.fields;\n args.columns = this.columns;\n if (rule.field === '') {\n rule.field = column.field;\n }\n args.operators = this.getOperators(rule.field);\n args.operatorFields = { text: 'key', value: 'value' };\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.isReact) {\n template = this.ruleTemplateFn(args, this, ruleElem.id, templateID)[0];\n elem = template;\n elem.className += ' e-rule-field';\n ruleElem.appendChild(elem);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n }\n else if (this.isAngular) {\n var templateColl = this.ruleTemplateFn(args, this, ruleElem.id, templateID);\n template = (templateColl[0].nodeType === 3) ? templateColl[1] : templateColl[0];\n elem = template;\n elem.className += ' e-rule-field';\n ruleElem.appendChild(elem);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n }\n else if (this.isVue3) {\n template = this.ruleTemplateFn(args, this, 'Template', templateID);\n elem = template;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n append(elem, ruleElem);\n if (ruleElem.children.length) {\n ruleElem.children[ruleElem.children.length - 1].className += ' e-rule-field';\n }\n }\n else {\n template = this.ruleTemplateFn(args, this, 'Template', templateID)[0];\n elem = template;\n elem.className += ' e-rule-field';\n ruleElem.appendChild(elem);\n }\n }\n else {\n elem = this.ruleElem.querySelector('.e-rule-field').cloneNode(true);\n ruleElem.appendChild(elem);\n }\n if (this.showButtons.lockGroup) {\n removeClass(ruleElem.querySelectorAll('.e-lock-grp-btn'), 'e-button-hide');\n }\n if (this.showButtons.lockRule) {\n removeClass(ruleElem.querySelectorAll('.e-lock-rule-btn'), 'e-button-hide');\n }\n if (this.showButtons.cloneGroup) {\n removeClass(ruleElem.querySelectorAll('.e-clone-grp-btn'), 'e-button-hide');\n }\n if (this.showButtons.cloneRule) {\n removeClass(ruleElem.querySelectorAll('.e-clone-rule-btn'), 'e-button-hide');\n }\n if (this.showButtons.ruleDelete) {\n removeClass(ruleElem.querySelectorAll('.e-lock-grp-btn'), 'e-button-hide');\n }\n if (this.allowDragAndDrop) {\n removeClass(ruleElem.querySelectorAll('.e-drag-qb-rule'), 'e-hidden');\n }\n if (column && column.ruleTemplate && rule) {\n this.renderReactTemplates();\n }\n return ruleElem;\n };\n QueryBuilder.prototype.addRuleElement = function (target, rule, column, action, parentId, isRuleTemplate) {\n var _this = this;\n if (!target) {\n return;\n }\n var args = { groupID: target.id.replace(this.element.id + '_', ''), cancel: false, type: 'insertRule' };\n if (!this.isImportRules && !this.isInitialLoad && !this.prvtEvtTgrDaD) {\n this.trigger('beforeChange', args, function (observedChangeArgs) {\n _this.addRuleSuccessCallBack(observedChangeArgs, target, rule, column, action, parentId, isRuleTemplate);\n });\n }\n else {\n this.isInitialLoad = false;\n this.addRuleSuccessCallBack(args, target, rule, column, action, parentId, isRuleTemplate);\n }\n };\n QueryBuilder.prototype.addRuleSuccessCallBack = function (args, trgt, rule, col, act, pId, isRlTmp) {\n var _this = this;\n var isVertical = this.element.className.indexOf('e-device') > -1 || this.displayMode === 'Vertical';\n var height = isVertical ? '250px' : '200px';\n var ruleID;\n var column = (rule && rule.field) ? this.getColumn(rule.field) : col ? col : this.columns[0];\n var operators;\n var dropDownList;\n var ruleElem;\n var newRule = { 'label': '', 'field': '', 'type': '', 'operator': '' };\n if (!args.cancel) {\n if (column && column.ruleTemplate && rule.field) {\n this.selectedColumn = column;\n operators = this.selectedColumn.operators;\n newRule = {\n 'label': column.label,\n 'field': column.field,\n 'type': column.type,\n 'operator': operators[0].value\n };\n var passedRule_1 = Object.keys(rule).length ? rule : newRule;\n ruleElem = this.appendRuleElem(trgt, column, act, pId, 'field', passedRule_1);\n var actionArgs = {\n requestType: 'template-initialize',\n ruleID: ruleElem.id,\n action: 'insert-rule',\n fields: this.fields,\n rule: passedRule_1\n };\n this.trigger('actionBegin', actionArgs);\n setTimeout(function () {\n var createArgs = {\n requestType: 'template-create',\n ruleID: ruleElem.id,\n action: 'insert-rule',\n fields: _this.fields,\n rule: passedRule_1\n };\n _this.trigger('actionBegin', createArgs);\n }, 0);\n }\n else {\n ruleElem = this.appendRuleElem(trgt, column, act, pId, 'field');\n ruleElem.querySelector('.e-filter-input').setAttribute('id', ruleElem.id + '_filterkey');\n var element = ruleElem.querySelector('.e-rule-delete');\n if (this.element.className.indexOf('e-device') > -1 || this.displayMode === 'Vertical') {\n element.textContent = this.l10n.getConstant('Remove');\n addClass([element], 'e-flat');\n addClass([element], 'e-primary');\n }\n else {\n addClass([element], 'e-round');\n addClass([element], 'e-icon-btn');\n element.setAttribute('title', this.l10n.getConstant('DeleteRule'));\n var spanElement = this.createElement('span', {\n attrs: { class: 'e-btn-icon e-icons e-delete-icon' }\n });\n element.appendChild(spanElement);\n }\n if (!this.showButtons.ruleDelete) {\n element.classList.add('e-button-hide');\n }\n }\n ruleElem.className = 'e-rule-container ' + (isVertical ? 'e-vertical-mode' : 'e-horizontal-mode');\n var previousRuleElem = ruleElem.previousElementSibling;\n this.processAdjacentElements(ruleElem, previousRuleElem, rule);\n if (!this.isImportRules) {\n this.updateAddedRule(trgt, rule, newRule, isRlTmp, pId, this.enableSeparateConnector ? true : null);\n }\n if (this.rule.condition === '' && (this.isRuleClicked || this.rule.rules.length > 1)) {\n this.rule.condition = 'and';\n }\n this.isRuleClicked = false;\n var ruleCount = this.rule.rules.length;\n if (!column || (column && !column.ruleTemplate) || !rule.field) {\n if (ruleCount > 20) {\n setTimeout(function () {\n _this.applyFieldComponent(ruleElem, rule, height);\n }, 0);\n }\n else {\n this.applyFieldComponent(ruleElem, rule, height);\n }\n }\n ruleID = ruleElem.id.replace(this.element.id + '_', '');\n if (rule && rule.isLocked) {\n var lockRuleTarget = ruleElem.querySelector('.e-lock-rule-btn');\n this.ruleLock(lockRuleTarget);\n }\n if (!this.isImportRules && !this.prvtEvtTgrDaD) {\n this.trigger('change', {\n groupID: trgt.id.replace(this.element.id + '_', ''),\n ruleID: ruleID,\n type: 'insertRule'\n });\n }\n }\n if (this.enableSeparateConnector && isNullOrUndefined(rule.condition) && ruleID) {\n rule = this.getRule(ruleID);\n }\n if (this.enableSeparateConnector) {\n this.processConnectorElements(ruleElem);\n }\n };\n QueryBuilder.prototype.processAdjacentElements = function (ruleElem, previousRuleElem, rule) {\n if (this.enableSeparateConnector) {\n if (previousRuleElem && previousRuleElem.classList.contains('e-group-container')) {\n var ruleContainer = previousRuleElem.querySelectorAll('.e-rule-container');\n previousRuleElem = ruleContainer[ruleContainer.length - 1];\n }\n if (previousRuleElem && previousRuleElem.classList.contains('e-rule-container')) {\n var prevRule = this.getRule(previousRuleElem);\n if (this.headerTemplate) {\n this.headerTemplateFn(previousRuleElem, false, prevRule.condition, prevRule, previousRuleElem.id);\n }\n }\n else if (isNullOrUndefined(previousRuleElem) && ruleElem.id !== this.element.id + '_group0_rule0') {\n this.handleOrphanedRuleElement(ruleElem, rule);\n }\n }\n else {\n if (previousRuleElem && previousRuleElem.className.indexOf('e-rule-container') > -1) {\n ruleElem.classList.add('e-joined-rule');\n previousRuleElem.classList.add('e-prev-joined-rule');\n }\n }\n if (previousRuleElem && previousRuleElem.className.indexOf('e-group-container') > -1 &&\n ruleElem.className.indexOf('e-separate-rule') < 0) {\n ruleElem.className += ' e-separate-rule';\n }\n };\n QueryBuilder.prototype.handleOrphanedRuleElement = function (ruleElem, rule) {\n var group = ruleElem.closest('.e-group-container');\n if (group && group.previousElementSibling) {\n var prevElem = group.previousElementSibling;\n var prevRuleContainer = prevElem.querySelectorAll('.e-rule-container');\n if (prevElem.classList.contains('e-group-container')) {\n prevElem = prevRuleContainer[prevRuleContainer.length - 1];\n }\n if (prevElem.classList.contains('e-rule-container')) {\n var prevRule = this.getRule(prevElem);\n this.headerTemplateFn(prevElem, false, prevRule.condition, prevRule, prevElem.id, true);\n }\n }\n else {\n this.headerTemplateFn(ruleElem, false, rule.condition, rule, ruleElem.id, true);\n }\n };\n QueryBuilder.prototype.processConnectorElements = function (ruleElem) {\n var prevElem = ruleElem.previousElementSibling;\n var ruleContainer;\n while (prevElem && !prevElem.classList.contains('e-rule-container')) {\n if (prevElem.classList.contains('e-group-container')) {\n ruleContainer = prevElem.querySelectorAll('.e-rule-container');\n prevElem = ruleContainer[ruleContainer.length - 1];\n break;\n }\n prevElem = prevElem.previousElementSibling;\n }\n if (this.headerTemplate && prevElem) {\n var prevRule = this.getRule(prevElem);\n var args = {\n requestType: 'rule-template-create',\n ruleID: prevElem.id,\n condition: prevRule.condition,\n notCondition: this.enableNotCondition ? true : undefined\n };\n this.trigger('actionBegin', args);\n }\n else if (isNullOrUndefined(prevElem) && ruleElem.id !== this.element.id + '_group0_rule0') {\n this.handleOrphanedConnectorElement(ruleElem);\n }\n this.setMultiConnector(ruleElem);\n };\n QueryBuilder.prototype.handleOrphanedConnectorElement = function (ruleElem) {\n var group = ruleElem.closest('.e-group-container');\n if (group && group.previousElementSibling && group.previousElementSibling.previousElementSibling) {\n var prevElem = group.previousElementSibling.previousElementSibling;\n if (prevElem.classList.contains('e-group-container')) {\n var ruleContainer = prevElem.querySelectorAll('.e-rule-container');\n prevElem = ruleContainer[ruleContainer.length - 1];\n }\n if (prevElem.classList.contains('e-rule-container')) {\n var prevRule = this.getRule(prevElem);\n var args = {\n requestType: 'rule-template-create',\n ruleID: prevElem.id,\n condition: prevRule.condition,\n notCondition: this.enableNotCondition ? true : undefined\n };\n this.trigger('actionBegin', args);\n }\n }\n };\n QueryBuilder.prototype.applyFieldComponent = function (ruleElem, rule, height) {\n if (this.fieldMode === 'Default') {\n this.applyDropdownListComponent(ruleElem, rule, height);\n }\n else {\n this.applyDropdownTreeComponent(ruleElem, rule, height);\n }\n };\n QueryBuilder.prototype.applyDropdownListComponent = function (ruleElem, rule, height) {\n var ddlField;\n var ddlValue;\n if (this.separator && rule.field) {\n ddlValue = this.GetRootColumnName(rule.field);\n }\n else if (this.autoSelectField) {\n ddlValue = this.GetRootColumnName(rule.field);\n }\n else {\n ddlValue = this.isImportRules ? this.GetRootColumnName(rule.field) : rule.field;\n }\n ddlField = {\n dataSource: this.columns,\n fields: this.fields,\n placeholder: this.l10n.getConstant('SelectField'),\n popupHeight: ((this.columns.length > 5) ? height : 'auto'),\n close: this.fieldClose.bind(this, ruleElem.id + '_filterkey'),\n change: this.changeField.bind(this),\n value: rule ? ddlValue : null,\n open: this.popupOpen.bind(this, true),\n cssClass: 'qb-dropdownlist'\n };\n if (this.fieldModel) {\n ddlField = __assign({}, ddlField, this.fieldModel);\n }\n var dropDownList = new DropDownList(ddlField);\n dropDownList.appendTo('#' + ruleElem.id + '_filterkey');\n var ddlVal;\n if (this.separator && rule.field) {\n ddlVal = this.GetRootColumnName(rule.field);\n }\n else {\n ddlVal = this.isImportRules ? this.GetRootColumnName(rule.field) : dropDownList.value;\n }\n this.selectedColumn = dropDownList.getDataByValue(ddlVal);\n if (Object.keys(rule).length) {\n this.changeRule(rule, {\n element: dropDownList.element,\n itemData: this.selectedColumn\n });\n }\n };\n QueryBuilder.prototype.applyDropdownTreeComponent = function (ruleElem, rule, height) {\n var ddlField;\n var ddlValue = this.isImportRules ? rule.field : rule.field;\n this.dummyDropdownTreeDs = extend([], this.columns, [], true);\n this.updateDropdowntreeDS(this.dummyDropdownTreeDs);\n ddlField = {\n fields: {\n dataSource: this.dummyDropdownTreeDs,\n value: 'field',\n text: 'label',\n child: 'columns',\n expanded: 'expanded',\n selectable: 'selectable'\n },\n placeholder: this.l10n.getConstant('SelectField'),\n showClearButton: false,\n popupHeight: ((this.columns.length > 5) ? height : 'auto'),\n changeOnBlur: false,\n change: this.changeField.bind(this),\n value: !isNullOrUndefined(ddlValue) ? [ddlValue] : null,\n open: this.popupOpen.bind(this, false),\n treeSettings: { expandOn: 'Click' },\n cssClass: 'e-qb-ddt',\n filtering: this.dropdownTreeFiltering.bind(this),\n close: this.dropdownTreeClose.bind(this)\n };\n if (this.fieldModel) {\n ddlField = __assign({}, ddlField, this.fieldModel);\n }\n var dropdowntree = new DropDownTree(ddlField);\n dropdowntree.appendTo('#' + ruleElem.id + '_filterkey');\n if (!isNullOrUndefined(dropdowntree.value)) {\n var value = this.getLabelFromColumn(dropdowntree.value[0]);\n dropdowntree.element.value = value;\n }\n var ddlVal = !isNullOrUndefined(rule.field) ?\n this.GetRootColumnName(rule.field) : dropdowntree.value;\n this.selectedColumn = this.getColumn(ddlVal);\n if (Object.keys(rule).length) {\n this.changeRule(rule, {\n element: dropdowntree.element,\n itemData: this.selectedColumn\n });\n }\n };\n QueryBuilder.prototype.dropdownTreeFiltering = function (args) {\n var _this = this;\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var proxy = this;\n var ruleElemID = '';\n var srcElement = args.event.srcElement;\n var isClearIcon = srcElement.classList.contains('e-clear-icon');\n var inputElem = isClearIcon ? srcElement.parentElement.querySelector('.e-textbox') : srcElement;\n ruleElemID = inputElem.id.split('_filterkey')[0];\n var ruleElem = document.getElementById(ruleElemID);\n this.ddTree = getComponent(ruleElem.querySelector('input.e-dropdowntree'), 'dropdowntree');\n var hierarchicalData = extend([], this.columns, [], true);\n args.cancel = true;\n if (args.text === '') {\n this.changeDataSource(hierarchicalData);\n }\n else {\n var matchedDataSource = hierarchicalData\n .map(function (data) { return _this.nestedChildFilter(args.text, data); })\n .filter(function (filteredChild) { return filteredChild !== null; });\n this.changeDataSource(matchedDataSource);\n setTimeout(function () {\n if (!isNullOrUndefined(proxy.ddTree) && !isNullOrUndefined(proxy.ddTree.treeObj)) {\n proxy.ddTree.treeObj.expandAll();\n }\n }, 100);\n }\n };\n QueryBuilder.prototype.changeDataSource = function (data) {\n this.updateDropdowntreeDS(data);\n this.ddTree.treeObj.fields = {\n dataSource: data,\n value: 'field',\n text: 'label',\n child: 'columns',\n expanded: 'expanded'\n };\n this.ddTree.treeObj.refresh();\n };\n QueryBuilder.prototype.nestedChildFilter = function (value, node) {\n var _this = this;\n var children = node[this.ddTree.fields.child];\n if (!children) {\n return this.isMatchedNode(value, node) ? node : null;\n }\n var matchedChildren = children\n .map(function (child) { return _this.nestedChildFilter(value, child); })\n .filter(function (filteredChild) { return filteredChild !== null; });\n if (matchedChildren.length) {\n node[this.ddTree.fields.child] = matchedChildren;\n return node;\n }\n else {\n node[this.ddTree.fields.child] = children;\n return this.isMatchedNode(value, node) ? node : null;\n }\n };\n QueryBuilder.prototype.isMatchedNode = function (value, node) {\n var checkValue = node[this.ddTree.fields.text].toLowerCase();\n value = value ? value.toLowerCase() : '';\n return checkValue.indexOf(value) !== -1;\n };\n QueryBuilder.prototype.dropdownTreeClose = function () {\n if (this.ddTree) {\n this.changeDataSource(extend([], this.columns, [], true));\n }\n this.ddTree = null;\n };\n QueryBuilder.prototype.updateDropdowntreeDS = function (columns) {\n for (var i = 0; i < columns.length; i++) {\n if (columns[parseInt(i.toString(), 10)].type === 'object') {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.isAngular && columns[parseInt(i.toString(), 10)].template) {\n delete columns[parseInt(i.toString(), 10)].template;\n }\n columns[parseInt(i.toString(), 10)].selectable = false;\n this.updateDropdowntreeDS(columns[parseInt(i.toString(), 10)].columns);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n }\n else if (this.isAngular && columns[parseInt(i.toString(), 10)].template) {\n delete columns[parseInt(i.toString(), 10)].template;\n }\n }\n };\n QueryBuilder.prototype.updateAddedRule = function (target, rule, newRule, isRuleTemplate, pId, isNewRuleAdded) {\n var ruleElem;\n var index = 0;\n var groupElem;\n var rules;\n if (isRuleTemplate) {\n ruleElem = select('#' + pId, target);\n groupElem = closest(target, '.e-group-container');\n rules = this.getParentGroup(groupElem);\n while (ruleElem && ruleElem.previousElementSibling !== null) {\n ruleElem = ruleElem.previousElementSibling;\n var enableSeparateCondition = this.enableSeparateConnector && ((!this.headerTemplate && !ruleElem.classList.contains('e-btn-group')) ||\n (this.headerTemplate && (ruleElem.classList.contains('e-rule-container') ||\n ruleElem.classList.contains('e-group-container'))));\n if (!this.enableSeparateConnector || enableSeparateCondition) {\n index++;\n }\n }\n rules.rules[index] = rule;\n }\n else {\n groupElem = closest(target, '.e-group-container');\n rules = this.getParentGroup(groupElem);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var custom = rule.custom;\n if (Object.keys(rule).length) {\n if (this.ruleIndex < 0) {\n rules.rules.push({\n 'field': rule.field, 'type': rule.type, 'label': rule.label, 'operator': rule.operator, value: rule.value\n });\n if (custom) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n rules.rules[rules.rules.length - 1].custom = custom;\n }\n if (this.enableSeparateConnector) {\n rules.rules[rules.rules.length - 1].condition = rule.condition ? rule.condition : newRule.condition;\n }\n }\n else {\n rules.rules.splice(this.ruleIndex + 1, 0, {\n 'field': rule.field, 'type': rule.type, 'label': rule.label, 'operator': rule.operator, value: rule.value\n });\n if (custom) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n rules.rules[this.ruleIndex + 1].custom = custom;\n }\n if (this.enableSeparateConnector) {\n rules.rules[this.ruleIndex + 1].condition = rule.condition ? rule.condition : newRule.condition;\n }\n }\n }\n else {\n if (custom) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n newRule.custom = custom;\n }\n if (this.autoSelectField) {\n rule.field = newRule.field = this.rule.rules[0].field;\n }\n rules.rules.push(newRule);\n }\n }\n this.disableRuleCondition(target, rules, isNewRuleAdded);\n };\n QueryBuilder.prototype.changeRuleTemplate = function (column, element) {\n if (column && column.ruleTemplate) {\n return;\n }\n else {\n var parentGroup = closest(element, '.e-group-container');\n var parentId = closest(element, '.e-rule-container').id;\n if (this.previousColumn && this.previousColumn.ruleTemplate) {\n detach(element.closest('[id=\"' + parentId + '\"]').querySelector('.e-rule-field'));\n this.clearQBTemplate([parentId]);\n }\n if (column) {\n var operVal = this.selectedColumn.operators;\n var rule = { field: column.field, label: column.label, operator: operVal[0].value, value: '' };\n this.addRuleElement(parentGroup, rule, column, 'change', parentId, true);\n }\n else {\n var rule = { field: '', label: '', operator: '', value: '' };\n this.addRuleElement(parentGroup, rule, column, 'change', parentId, true);\n }\n }\n };\n QueryBuilder.prototype.renderToolTip = function (element) {\n var tooltip = new Tooltip({\n content: this.l10n.getConstant('ValidationMessage'),\n position: 'BottomCenter', cssClass: 'e-querybuilder-error', afterClose: function () {\n tooltip.destroy();\n }, beforeOpen: function (args) {\n var tooltipCloseElement = args.element.querySelector('.e-tooltip-close');\n if (tooltipCloseElement) {\n tooltipCloseElement.style.display = 'none';\n }\n }\n });\n tooltip.appendTo(element);\n tooltip.open(element);\n };\n /**\n * Validate the conditions and it display errors for invalid fields.\n *\n * @returns {boolean} - Validation\n */\n QueryBuilder.prototype.validateFields = function () {\n var isValid = true;\n var dropDownTreeObj;\n if (this.allowValidation) {\n var excludeOprs = ['isnull', 'isnotnull', 'isempty', 'isnotempty'];\n var i = void 0;\n var len = void 0;\n var fieldElem = void 0;\n var indexElem = void 0;\n var valArray = [];\n var groupElem = void 0;\n var index = void 0;\n var dropDownObj = void 0;\n var tempElem = void 0;\n var rule = void 0;\n var ruleElemCln = this.element.querySelectorAll('.e-rule-container');\n for (i = 0, len = ruleElemCln.length; i < len; i++) {\n var validateRule = void 0;\n groupElem = closest(ruleElemCln[i], '.e-group-container');\n rule = this.getParentGroup(groupElem);\n index = 0;\n indexElem = tempElem = ruleElemCln[i];\n if (this.fieldMode === 'DropdownTree') {\n dropDownTreeObj = getComponent(ruleElemCln[i].querySelector('.e-rule-filter input.e-dropdowntree'), 'dropdowntree');\n if (dropDownTreeObj && dropDownTreeObj.value && dropDownTreeObj.value.length) {\n this.selectedColumn = this.getColumn(dropDownTreeObj.value[0]);\n validateRule = this.selectedColumn.validation;\n }\n }\n else {\n dropDownObj = getComponent(ruleElemCln[i].querySelector('.e-rule-filter input.e-dropdownlist'), 'dropdownlist');\n if (dropDownObj && dropDownObj.value) {\n this.selectedColumn = dropDownObj.getDataByValue(dropDownObj.value);\n validateRule = !isNullOrUndefined(dropDownObj.value) && this.selectedColumn.validation;\n }\n }\n fieldElem = tempElem.querySelector('.e-rule-field input.e-control');\n if (validateRule && validateRule.isRequired) {\n while (indexElem && indexElem.previousElementSibling !== null) {\n indexElem = indexElem.previousElementSibling;\n var separateCondition = this.enableSeparateConnector && ((!this.headerTemplate && !indexElem.classList.contains('e-btn-group')) ||\n (this.headerTemplate && (indexElem.classList.contains('e-rule-container') || indexElem.classList.contains('e-group-container'))));\n if (!this.enableSeparateConnector || separateCondition) {\n index++;\n }\n }\n fieldElem = tempElem.querySelector('.e-rule-operator .e-control');\n if (!rule.rules[index].operator) {\n if (fieldElem.parentElement.className.indexOf('e-tooltip') < 0 && fieldElem.className.indexOf('e-tooltip') < 0) {\n this.renderToolTip(fieldElem.parentElement);\n }\n isValid = false;\n }\n if (rule.rules[index].value instanceof Array) {\n valArray = rule.rules[index].value;\n }\n if (excludeOprs.indexOf(rule.rules[index].operator) < 0 && ((isNullOrUndefined(rule.rules[index].value) &&\n rule.rules[index].type !== 'date') || rule.rules[index].value === '' || rule.rules[index].value === null ||\n (rule.rules[index].value instanceof Array && valArray.length < 1))) {\n var valElem = tempElem.querySelectorAll('.e-rule-value .e-control');\n if (excludeOprs.indexOf(rule.rules[index].operator) < 0) {\n isValid = false;\n }\n for (var j = 0, jLen = valElem.length; j < jLen; j++) {\n var element = valElem[j];\n var elem = void 0;\n if (element.parentElement.className.indexOf('e-searcher') > -1) {\n elem = closest(element, '.e-multi-select-wrapper');\n if (elem.className.indexOf('e-tooltip') < 0) {\n this.renderToolTip(elem);\n }\n }\n else if (valElem[j].parentElement.className.indexOf('e-tooltip') < 0 && valElem[j].className.indexOf('e-tooltip') < 0) {\n this.renderToolTip(valElem[j].parentElement);\n }\n j++;\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n }\n else if (rule.rules[index].type === 'date' && (rule.rules[index].value === null || rule.rules[index].value.indexOf(null) > -1)) {\n var valElem = tempElem.querySelectorAll('.e-rule-value .e-control');\n if (excludeOprs.indexOf(rule.rules[index].operator) < 0) {\n isValid = false;\n }\n for (var j = 0, jLen = valElem.length; j < jLen; j++) {\n if (valElem[j].parentElement.className.indexOf('e-tooltip') < 0 && valElem[j].className.indexOf('e-tooltip') < 0 && (isNullOrUndefined(rule.rules[index].value) || rule.rules[index].value[j] == null)) {\n this.renderToolTip(valElem[j].parentElement);\n }\n }\n }\n }\n else if ((dropDownObj && dropDownObj.element && isNullOrUndefined(dropDownObj.value)) ||\n (dropDownTreeObj && dropDownTreeObj.element && (isNullOrUndefined(dropDownTreeObj.value) ||\n dropDownTreeObj.value.length < 1))) {\n if (fieldElem.parentElement.className.indexOf('e-tooltip') < 0) {\n this.renderToolTip(fieldElem.parentElement);\n }\n isValid = false;\n }\n }\n }\n return isValid;\n };\n QueryBuilder.prototype.refreshLevelColl = function () {\n this.levelColl = {};\n var groupElem = this.element.querySelector('.e-group-container');\n if (groupElem) {\n this.levelColl[groupElem.id] = [0];\n var obj = { groupElement: groupElem, level: [0] };\n this.refreshLevel(obj);\n }\n };\n QueryBuilder.prototype.refreshLevel = function (obj) {\n var ruleList = obj.groupElement.querySelector('.e-rule-list').children;\n var childElem;\n var groupElem = obj.groupElement;\n var i;\n var iLen = ruleList.length;\n var groupCount = 0;\n for (i = 0; i < iLen; i++) {\n childElem = ruleList[i];\n if (childElem.className.indexOf('e-group-container') > -1) {\n obj.level.push(groupCount);\n this.levelColl[childElem.id] = obj.level.slice();\n groupCount++;\n obj.groupElement = childElem;\n obj = this.refreshLevel(obj);\n }\n }\n var ruleListElem = closest(groupElem, '.e-rule-list');\n obj.groupElement = ruleListElem ? closest(ruleListElem, '.e-group-container') : groupElem;\n obj.level = this.levelColl[obj.groupElement.id].slice();\n return obj;\n };\n QueryBuilder.prototype.groupTemplate = function (isConnector) {\n var glueElem;\n var inputElem;\n var dragClsName;\n var labelElem;\n var grpActElem;\n var groupBtn;\n var groupElem = this.createElement('div', { attrs: { class: 'e-group-container' } });\n var groupHdrElem = this.createElement('div', { attrs: { class: 'e-group-header' } });\n var grpBodyElem = this.createElement('div', { attrs: { class: 'e-group-body' } });\n var rulesElem = this.createElement('div', { attrs: { class: 'e-rule-list' } });\n groupElem.appendChild(groupHdrElem);\n grpBodyElem.appendChild(rulesElem);\n groupElem.appendChild(grpBodyElem);\n if (!this.headerTemplate) {\n if (this.allowDragAndDrop) {\n dragClsName = 'e-icons e-drag-qb-rule';\n }\n else {\n dragClsName = 'e-icons e-drag-qb-rule e-hidden';\n }\n var spanDragElement = this.createElement('span', {\n attrs: {\n class: dragClsName, 'aria-label': 'drag handle',\n title: 'drag handle'\n }\n });\n groupHdrElem.appendChild(spanDragElement);\n var className = this.enableSeparateConnector && !isConnector ? 'e-lib e-btn-group e-qb-toggle-btn' : 'e-lib e-btn-group';\n glueElem = this.createElement('div', { attrs: { class: className, role: 'group' } });\n if (this.enableSeparateConnector) {\n glueElem.classList.add('e-multi-connector');\n }\n if (this.enableNotCondition) {\n if (this.enableSeparateConnector) {\n inputElem = this.createElement('input', { attrs: { type: 'checkbox', class: 'e-qb-toggle' } });\n }\n else {\n inputElem = this.createElement('button', { attrs: { type: 'button', class: 'e-qb-toggle' } });\n }\n glueElem.appendChild(inputElem);\n }\n inputElem = this.createElement('input', { attrs: { type: 'radio', class: 'e-btngroup-and', value: 'AND' } });\n glueElem.appendChild(inputElem);\n labelElem = this.createElement('label', {\n attrs: { class: 'e-lib e-btn e-btngroup-and-lbl e-small' },\n innerHTML: this.l10n.getConstant('AND')\n });\n glueElem.appendChild(labelElem);\n inputElem = this.createElement('input', { attrs: { type: 'radio', class: 'e-btngroup-or', value: 'OR' } });\n glueElem.appendChild(inputElem);\n labelElem = this.createElement('label', {\n attrs: { class: 'e-lib e-btn e-btngroup-or-lbl e-small' },\n innerHTML: this.l10n.getConstant('OR')\n });\n glueElem.appendChild(labelElem);\n groupHdrElem.appendChild(glueElem);\n grpActElem = this.createElement('div', { attrs: { class: 'e-group-action' } });\n if (this.enableSeparateConnector) {\n groupBtn = this.createElement('button', { attrs: { type: 'button', class: 'e-add-condition-btn' } });\n grpActElem.appendChild(groupBtn);\n groupBtn = this.createElement('button', { attrs: { type: 'button', class: 'e-add-group-btn' } });\n grpActElem.appendChild(groupBtn);\n }\n else {\n groupBtn = this.createElement('button', { attrs: { type: 'button', class: 'e-add-btn' } });\n grpActElem.appendChild(groupBtn);\n }\n groupHdrElem.appendChild(grpActElem);\n }\n return groupElem;\n };\n QueryBuilder.prototype.ruleTemplate = function () {\n var tempElem;\n var clsName;\n var cloneClsName;\n var lockClsName;\n var dragClsName;\n var ruleElem = this.createElement('div');\n var fieldElem = this.createElement('div', { attrs: { class: 'e-rule-field' } });\n tempElem = this.createElement('div', { attrs: { class: 'e-rule-filter' } });\n if (this.allowDragAndDrop) {\n dragClsName = 'e-icons e-drag-qb-rule';\n }\n else {\n dragClsName = 'e-icons e-drag-qb-rule e-hidden';\n }\n var spanDragElement = this.createElement('span', {\n attrs: {\n class: dragClsName, 'aria-label': 'drag handle',\n title: 'drag handle'\n }\n });\n fieldElem.appendChild(spanDragElement);\n var filterElem = this.createElement('input', { attrs: { type: 'text', class: 'e-filter-input' } });\n tempElem.appendChild(filterElem);\n fieldElem.appendChild(tempElem);\n tempElem = this.createElement('div', { attrs: { class: 'e-rule-operator' } });\n fieldElem.appendChild(tempElem);\n tempElem = this.createElement('div', { attrs: { class: 'e-rule-value' } });\n fieldElem.appendChild(tempElem);\n tempElem = this.createElement('div', { attrs: { class: 'e-rule-value-delete' } });\n if (this.showButtons.cloneRule) {\n cloneClsName = 'e-clone-rule-btn e-clone-rule e-css e-btn e-small e-round e-icon-btn';\n }\n else {\n cloneClsName = 'e-clone-rule-btn e-clone-rule e-css e-btn e-small e-round e-icon-btn e-button-hide';\n }\n if (this.showButtons.lockRule) {\n lockClsName = 'e-lock-rule-btn e-lock-rule e-css e-btn e-small e-round e-icons e-icon-btn';\n }\n else {\n lockClsName = 'e-lock-rule-btn e-lock-rule e-css e-btn e-small e-round e-icons e-icon-btn e-button-hide';\n }\n var cloneRuleBtnElem = this.createElement('button', { attrs: { title: this.l10n.getConstant('CloneRule'), type: 'button', class: cloneClsName } });\n var spanElement = this.createElement('span', { attrs: { class: 'e-btn-icon e-icons e-copy' } });\n cloneRuleBtnElem.appendChild(spanElement);\n var cloneLockBtnElem = this.createElement('button', { attrs: { title: this.l10n.getConstant('LockRule'), type: 'button', class: lockClsName } });\n spanElement = this.createElement('span', { attrs: { class: 'e-btn-icon e-icons e-unlock' } });\n cloneLockBtnElem.appendChild(spanElement);\n if (this.showButtons.ruleDelete || isNullOrUndefined(this.showButtons.ruleDelete)) {\n clsName = 'e-removerule e-rule-delete e-css e-btn e-small';\n }\n else {\n clsName = 'e-removerule e-rule-delete e-css e-btn e-small e-button-hide';\n }\n var delBtnElem = this.createElement('button', { attrs: { type: 'button', class: clsName } });\n tempElem.appendChild(cloneRuleBtnElem);\n tempElem.appendChild(cloneLockBtnElem);\n tempElem.appendChild(delBtnElem);\n fieldElem.appendChild(tempElem);\n ruleElem.appendChild(fieldElem);\n return ruleElem;\n };\n QueryBuilder.prototype.addGroupElement = function (isGroup, target, condition, isBtnClick, not, isRoot, rule) {\n var _this = this;\n var args = { groupID: target.id.replace(this.element.id + '_', ''), cancel: false, type: 'insertGroup' };\n if (!this.isImportRules && !this.isInitialLoad && !this.prvtEvtTgrDaD) {\n this.trigger('beforeChange', args, function (observedChangeArgs) {\n _this.addGroupSuccess(observedChangeArgs, isGroup, target, condition, isBtnClick, not, isRoot, rule);\n });\n }\n else {\n this.isInitialLoad = false;\n this.addGroupSuccess(args, isGroup, target, condition, isBtnClick, not, isRoot, rule);\n }\n };\n QueryBuilder.prototype.addGroupSuccess = function (args, isGroup, eventTarget, condition, isBtnClick, not, isRoot, rule) {\n var _this = this;\n if (!args.cancel && (this.element.querySelectorAll('.e-group-container').length <= this.maxGroupCount)) {\n var target = eventTarget;\n var dltGroupBtn = void 0;\n var groupID = '';\n if (target.className.indexOf('e-group-container') < 0) {\n groupID = target.querySelector('.e-group-container') && target.querySelector('.e-group-container').id;\n }\n else {\n groupID = target.id;\n }\n if (this.enableSeparateConnector) {\n this.groupElem = this.groupTemplate();\n }\n var groupElem = this.groupElem.cloneNode(true);\n groupElem.setAttribute('id', this.element.id + '_group' + this.groupIdCounter);\n if (this.groupIdCounter === 0 && this.allowDragAndDrop && groupElem.querySelector('.e-drag-qb-rule')) {\n if (groupElem && groupElem.children[0]) {\n groupElem.children[0].classList.add('e-parent-header');\n }\n addClass([groupElem.querySelector('.e-drag-qb-rule')], 'e-hidden');\n }\n if (this.headerTemplate) {\n if (isRoot) {\n isGroup = false;\n groupElem.setAttribute('id', this.element.id + '_group0');\n this.headerTemplateFn(groupElem, not, condition, rule, groupID);\n this.groupIdCounter = 0;\n }\n else {\n this.headerTemplateFn(groupElem, not, condition, rule, groupID);\n }\n }\n this.groupIdCounter++;\n if (!this.headerTemplate) {\n var andInpElem = groupElem.querySelector('.e-btngroup-and');\n var orInpElem = groupElem.querySelector('.e-btngroup-or');\n var andLblElem = groupElem.querySelector('.e-btngroup-and-lbl');\n var orLblElem = groupElem.querySelector('.e-btngroup-or-lbl');\n andInpElem.setAttribute('id', this.element.id + '_and' + this.btnGroupId);\n orInpElem.setAttribute('id', this.element.id + '_or' + this.btnGroupId);\n andInpElem.setAttribute('name', this.element.id + '_and' + this.btnGroupId);\n orInpElem.setAttribute('name', this.element.id + '_and' + this.btnGroupId);\n andLblElem.setAttribute('for', this.element.id + '_and' + this.btnGroupId);\n orLblElem.setAttribute('for', this.element.id + '_or' + this.btnGroupId);\n this.btnGroupId++;\n }\n if (isGroup) {\n var clsName = void 0;\n if (this.showButtons.groupDelete || isNullOrUndefined(this.showButtons.groupDelete)) {\n clsName = 'e-deletegroup';\n }\n else {\n clsName = 'e-deletegroup e-button-hide';\n }\n dltGroupBtn = this.createElement('button', { attrs: { type: 'button', class: clsName } });\n var button = new Button({ iconCss: 'e-icons e-delete-icon', cssClass: 'e-small e-round' });\n button.appendTo(dltGroupBtn);\n dltGroupBtn.setAttribute('title', this.l10n.getConstant('DeleteGroup'));\n rippleEffect(dltGroupBtn, { selector: '.deletegroup' });\n var ruleList = target.querySelector('.e-rule-list');\n var childElems = ruleList.children;\n var grpLen = 0;\n for (var j = 0, jLen = childElems.length; j < jLen; j++) {\n if (childElems[j].className.indexOf('e-group-container') > -1) {\n grpLen += 1;\n }\n }\n if (this.showButtons.cloneGroup && this.cloneGrpBtnClick) {\n if (this.groupIndex === (childElems.length - 1)) {\n ruleList.appendChild(groupElem);\n this.isLastGroup = true;\n }\n else {\n if (this.enableSeparateConnector) {\n var index = 0;\n var tempGroupIndex = this.groupIndex + 1;\n for (var i = 0; i < tempGroupIndex; i++) {\n if (childElems[i].classList.contains('e-rule-container')) {\n tempGroupIndex++;\n index++;\n }\n }\n if (index > 0) {\n index--;\n }\n var idx = this.groupIndex + index + 1;\n childElems[idx].parentNode.insertBefore(groupElem, childElems[idx]);\n }\n else {\n var idx = this.groupIndex + 1;\n childElems[idx].parentNode.insertBefore(groupElem, childElems[idx]);\n }\n this.isMiddleGroup = true;\n }\n }\n else {\n ruleList.appendChild(groupElem);\n }\n var level = this.levelColl[target.id].slice(0);\n level.push(grpLen);\n this.levelColl[groupElem.id] = level;\n if (this.groupIndex > -1) {\n this.refreshLevelColl();\n }\n if (!this.isImportRules) {\n this.isAddSuccess = true;\n this.addGroups([], target.id.replace(this.element.id + '_', ''));\n this.isAddSuccess = false;\n if (isBtnClick && this.addRuleToNewGroups) {\n this.addRuleElement(groupElem, {});\n }\n }\n if (!this.headerTemplate) {\n var lockClsName = '';\n if (this.showButtons.cloneGroup) {\n lockClsName = 'e-clone-grp-btn e-css e-btn e-small e-round e-icons e-icon-btn';\n }\n else {\n lockClsName = 'e-clone-grp-btn e-css e-btn e-small e-round e-icons e-icon-btn e-button-hide';\n }\n var cloneBtnElem = this.createElement('button', { attrs: { title: this.l10n.getConstant('CloneGroup'), type: 'button', class: lockClsName } });\n var spanElement = this.createElement('span', { attrs: { class: 'e-btn-icon e-icons e-copy' } });\n cloneBtnElem.appendChild(spanElement);\n groupElem.querySelector('.e-group-action').appendChild(cloneBtnElem);\n if (this.showButtons.lockGroup) {\n lockClsName = 'e-lock-grp-btn e-css e-btn e-small e-round e-icons e-icon-btn';\n }\n else {\n lockClsName = 'e-lock-grp-btn e-css e-btn e-small e-round e-icons e-icon-btn e-button-hide';\n }\n var lockBtnElem = this.createElement('button', { attrs: { title: this.l10n.getConstant('LockGroup'), type: 'button', class: lockClsName } });\n var lockSpanElement = this.createElement('span', { attrs: { class: 'e-btn-icon e-icons e-unlock' } });\n lockBtnElem.appendChild(lockSpanElement);\n groupElem.querySelector('.e-group-action').appendChild(lockBtnElem);\n groupElem.querySelector('.e-group-action').appendChild(dltGroupBtn);\n }\n }\n else {\n if (!this.headerTemplate) {\n var lockClsName = '';\n if (this.showButtons.lockGroup) {\n lockClsName = 'e-lock-grp-btn e-css e-btn e-small e-round e-icons e-icon-btn';\n }\n else {\n lockClsName = 'e-lock-grp-btn e-css e-btn e-small e-round e-icons e-icon-btn e-button-hide';\n }\n var lockBtnElem = this.createElement('button', { attrs: { title: this.l10n.getConstant('LockGroup'), type: 'button', class: lockClsName } });\n var spanElement = this.createElement('span', { attrs: { class: 'e-btn-icon e-icons e-unlock' } });\n lockBtnElem.appendChild(spanElement);\n groupElem.querySelector('.e-group-action').appendChild(lockBtnElem);\n }\n target.appendChild(groupElem);\n this.levelColl[groupElem.id] = [0];\n }\n if (this.enableNotCondition) {\n if (!this.headerTemplate) {\n var notElem = groupElem.querySelector('.e-qb-toggle');\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var tglBtn = void 0;\n if (this.enableSeparateConnector) {\n tglBtn = new CheckBox({ label: this.l10n.getConstant('NOT'), cssClass: 'e-qb-toggle' });\n }\n else {\n tglBtn = new Button({ content: this.l10n.getConstant('NOT'), cssClass: 'e-btn e-small' });\n }\n tglBtn.appendTo(notElem);\n groupElem.querySelector('.e-btngroup-and-lbl').classList.add('e-not');\n if (this.updatedRule && this.updatedRule.not) {\n addClass([notElem], 'e-active-toggle');\n }\n }\n }\n if (this.enableSeparateConnector && !this.headerTemplate) {\n var andElem = groupElem.querySelector('.e-btngroup-and');\n var orElem = groupElem.querySelector('.e-btngroup-or');\n var btnGroup = groupElem.querySelector('.e-btn-group');\n for (var i = 0; i < btnGroup.childNodes.length; i++) {\n if (groupElem.querySelector('.e-btn-group').childNodes[i].textContent.toLowerCase() === 'not') {\n if (!this.enableNotCondition) {\n btnGroup.childNodes[i].style.display = 'none';\n }\n else {\n btnGroup.childNodes[i].classList.add('e-multiconnector');\n }\n }\n else {\n btnGroup.childNodes[i].style.display = 'none';\n }\n }\n var prevSibling = groupElem.previousElementSibling;\n if (prevSibling) {\n if (isNullOrUndefined(this.headerTemplate)) {\n groupElem.parentElement.insertBefore(this.groupTemplate(true).querySelector('.e-btn-group'), groupElem);\n var notElem = groupElem.previousElementSibling.childNodes[0];\n if (notElem.classList.contains('e-qb-toggle')) {\n notElem.style.display = 'none';\n }\n }\n if (!this.isImportRules) {\n var groupElement = groupElem.previousElementSibling;\n var newAndElem = groupElement.querySelector('.e-btngroup-and');\n var newOrElem = groupElement.querySelector('.e-btngroup-or');\n if (!andElem.checked && !orElem.checked) {\n var nextSibling = groupElem.nextElementSibling;\n if (nextSibling && nextSibling.classList.contains('e-btn-group')) {\n andElem = nextSibling.querySelector('.e-btngroup-and');\n orElem = nextSibling.querySelector('.e-btngroup-or');\n newAndElem.checked = andElem.checked;\n newOrElem.checked = orElem.checked;\n }\n }\n else if (this.enableSeparateConnector) {\n if (andElem.checked) {\n newAndElem.checked = true;\n }\n if (orElem.checked) {\n newOrElem.checked = true;\n }\n }\n }\n }\n }\n this.updatedRule = null;\n if (this.headerTemplate) {\n var args_1 = {\n requestType: 'header-template-create', ruleID: groupElem.id, condition: condition,\n notCondition: this.enableNotCondition ? not : undefined\n };\n this.trigger('actionBegin', args_1);\n }\n else {\n if (this.enableSeparateConnector) {\n var conditionBtn_1 = groupElem.querySelector('.e-add-condition-btn');\n var btnObj = new Button({ cssClass: this.element.id + '_addConditionbtn', content: this.l10n.getConstant('AddCondition') });\n btnObj.appendTo(conditionBtn_1);\n btnObj.element.onclick = function () {\n _this.addRuleElement(closest(conditionBtn_1, '.e-group-container'), {});\n };\n var groupBtn_1 = groupElem.querySelector('.e-add-group-btn');\n btnObj = new Button({ cssClass: this.element.id + '_addGroupbtn', content: this.l10n.getConstant('AddGroup') });\n btnObj.appendTo(groupBtn_1);\n btnObj.element.onclick = function () {\n _this.addGroupElement(true, closest(groupBtn_1, '.e-group-container'), '', true);\n };\n }\n else {\n var groupBtn = groupElem.querySelector('.e-add-btn');\n var btnObj = new DropDownButton({\n items: this.items,\n cssClass: 'e-round e-small e-caret-hide e-addrulegroup',\n iconCss: 'e-icons e-add-icon',\n beforeOpen: this.selectBtn.bind(this, groupBtn),\n select: this.selectBtn.bind(this, groupBtn)\n });\n btnObj.appendTo(groupBtn);\n groupBtn.setAttribute('title', this.l10n.getConstant('AddButton'));\n }\n }\n if (!this.isImportRules && !this.prvtEvtTgrDaD) {\n var grpId = target.id.replace(this.element.id + '_', '');\n var chgrpId = groupElem.id.replace(this.element.id + '_', '');\n this.trigger('change', { groupID: grpId, type: 'insertGroup', childGroupID: chgrpId });\n }\n }\n };\n QueryBuilder.prototype.setMultiConnector = function (trgt) {\n if (this.enableSeparateConnector && !this.headerTemplate && trgt.previousElementSibling) {\n var btnGroupElem = this.groupTemplate(true).querySelector('.e-btn-group');\n if (btnGroupElem) {\n trgt.parentElement.insertBefore(btnGroupElem, trgt);\n var notElem = trgt.previousElementSibling.childNodes[0];\n if (notElem.classList.contains('e-qb-toggle')) {\n notElem.style.display = 'none';\n }\n this.addHeaderDiv(trgt);\n }\n }\n };\n QueryBuilder.prototype.addHeaderDiv = function (elem) {\n var prevRule;\n var prevElem = elem.previousElementSibling.previousElementSibling;\n if (prevElem) {\n if (prevElem.id.indexOf('rule') > -1) {\n prevRule = this.getRule(prevElem);\n }\n else {\n prevRule = this.getGroup(prevElem);\n }\n if (!isNullOrUndefined(prevRule) && isNullOrUndefined(prevRule.condition)) {\n prevRule.condition = 'and';\n }\n var orElem = elem.previousElementSibling.querySelector('.e-btngroup-or');\n var andElem = elem.previousElementSibling.querySelector('.e-btngroup-and');\n orElem.disabled = false;\n andElem.disabled = false;\n if (!isNullOrUndefined(prevRule) && prevRule.condition === 'or') {\n orElem.checked = true;\n }\n else {\n andElem.checked = true;\n }\n }\n };\n QueryBuilder.prototype.headerTemplateFn = function (groupElem, not, condition, rule, groupID, isInitialRule) {\n var template;\n var templateID = this.element.id + '_header';\n var args;\n var groupHdr = groupElem.querySelector('.e-group-header');\n if (this.enableSeparateConnector && groupElem.id.indexOf('rule') !== -1) {\n groupHdr = groupElem;\n }\n if (this.headerTemplate) {\n args = {\n requestType: 'header-template-initialize', ruleID: groupElem.id,\n notCondition: this.enableNotCondition ? not : undefined,\n condition: condition, rule: this.getRuleCollection(rule, false), groupID: groupID\n };\n this.trigger('actionBegin', args);\n if (this.enableSeparateConnector && groupElem.id.indexOf('rule') !== -1) {\n args.requestType = 'rule-template-create';\n }\n this.headerFn = this.templateParser(this.headerTemplate);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.isReact) {\n template = this.headerFn(args, this, groupElem.id, templateID)[0];\n if (this.enableSeparateConnector && isInitialRule) {\n this.enableSeparateConnectorInitialRule(groupElem, template);\n }\n else if (this.enableSeparateConnector && groupElem.id.indexOf('rule') !== -1) {\n groupHdr.parentElement.insertBefore(template, groupHdr.nextElementSibling);\n }\n else {\n groupHdr.appendChild(template);\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n }\n else if (this.isAngular) {\n var templateColl = this.headerFn(args, this, groupElem.id, templateID);\n template = (templateColl[0].nodeType === 3) ? templateColl[1] : templateColl[0];\n if (this.enableSeparateConnector && isInitialRule) {\n this.enableSeparateConnectorInitialRule(groupElem, template);\n }\n else if (this.enableSeparateConnector && groupElem.id.indexOf('rule') !== -1) {\n groupHdr.parentElement.insertBefore(template, groupHdr.nextElementSibling);\n }\n else {\n groupHdr.appendChild(template);\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n }\n else if (this.isVue3) {\n template = this.headerFn(args, this, groupElem.id, templateID);\n if (this.enableSeparateConnector && (isInitialRule || groupElem.id.indexOf('rule') !== -1)) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n for (var i = 0; i < template.length; i++) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (template[i].nodeName === 'DIV') {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n template = template[i];\n break;\n }\n }\n }\n if (this.enableSeparateConnector && isInitialRule) {\n this.enableSeparateConnectorInitialRule(groupElem, template);\n }\n else if (this.enableSeparateConnector && groupElem.id.indexOf('rule') !== -1) {\n groupHdr.parentElement.insertBefore(template, groupHdr.nextElementSibling);\n }\n else {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n append(template, groupHdr);\n }\n }\n else {\n template = this.headerFn(args, this, 'Template', templateID)[0];\n if (this.enableSeparateConnector && isInitialRule) {\n this.enableSeparateConnectorInitialRule(groupElem, template);\n }\n else if (this.enableSeparateConnector && groupElem.id.indexOf('rule') !== -1) {\n groupHdr.parentElement.insertBefore(template, groupHdr.nextElementSibling);\n }\n else {\n groupHdr.appendChild(template);\n }\n }\n this.renderReactTemplates();\n }\n return groupElem;\n };\n QueryBuilder.prototype.enableSeparateConnectorInitialRule = function (groupElem, template) {\n var elem = groupElem.nextElementSibling ? groupElem.nextElementSibling : groupElem;\n var group = elem.closest('.e-group-container');\n if (!groupElem.nextElementSibling && group) {\n group = group.nextElementSibling ? group.nextElementSibling : group;\n }\n if (group) {\n group.parentElement.insertBefore(template, group);\n }\n };\n /**\n * Notify the changes to component.\n *\n * @param {string | number | boolean | Date | string[] | number[] | Date[]} value - 'value' to be passed to update the rule value.\n * @param {Element} element - 'element' to be passed to update the rule.\n * @param {string} type - 'type' to be passed to update the rule .\n * @returns {void}.\n */\n QueryBuilder.prototype.notifyChange = function (value, element, type) {\n var grpElement = closest(element, '.e-group-container');\n var rules = this.getParentGroup(grpElement);\n var ruleElement = closest(element, '.e-rule-container');\n var index = 0;\n if (type === 'not') {\n rules.not = value;\n return;\n }\n if (type === 'condition') {\n if (this.enableSeparateConnector) {\n ruleElement = element.parentElement.previousElementSibling;\n if (ruleElement && ruleElement.classList.contains('e-group-container')) {\n ruleElement = ruleElement.querySelectorAll('.e-rule-container')[ruleElement.querySelectorAll('.e-rule-container').length - 1];\n }\n if (ruleElement && ruleElement.classList.contains('e-rule-container')) {\n rules = this.getRule(ruleElement);\n }\n rules.condition = value;\n }\n else {\n rules.condition = value;\n }\n return;\n }\n while (ruleElement && ruleElement.previousElementSibling !== null) {\n ruleElement = ruleElement.previousElementSibling;\n if (!this.enableSeparateConnector || (this.enableSeparateConnector &&\n ((!this.headerTemplate && !ruleElement.classList.contains('e-btn-group')) ||\n this.headerTemplate && (ruleElement.classList.contains('e-rule-container') ||\n ruleElement.classList.contains('e-group-container'))))) {\n index++;\n }\n }\n var rule = rules.rules[index];\n var column = this.getColumn(rule.field);\n var format = this.getFormat(column.format);\n if (column.type === 'date') {\n if (value instanceof Date) {\n value = this.intl.formatDate(value, format);\n }\n else if (value instanceof Array) {\n for (var i = 0; i < value.length; i++) {\n if (value[i] && value[i] instanceof Date) {\n value[i] = this.intl.formatDate(value[i], format);\n }\n }\n }\n }\n if (column.ruleTemplate) {\n this.templateChange(element, value, type);\n }\n else {\n this.isNotified = true;\n this.updateRules(element, value);\n this.isNotified = false;\n }\n };\n QueryBuilder.prototype.templateChange = function (element, value, type) {\n var grpElem = closest(element, '.e-group-container');\n var eventsArgs;\n var rules = grpElem && this.getParentGroup(grpElem);\n var ruleElem = closest(element, '.e-rule-container');\n var index = 0;\n if (this.allowValidation) {\n this.validateValue(rules, ruleElem);\n }\n while (ruleElem && ruleElem.previousElementSibling !== null) {\n ruleElem = ruleElem.previousElementSibling;\n if (!this.enableSeparateConnector || (this.enableSeparateConnector &&\n ((!this.headerTemplate && !ruleElem.classList.contains('e-btn-group')) ||\n this.headerTemplate && (ruleElem.classList.contains('e-rule-container') ||\n ruleElem.classList.contains('e-group-container'))))) {\n index++;\n }\n }\n var rule = rules && rules.rules[index];\n if (type === 'field') {\n this.selectedColumn = this.getColumn(value);\n }\n else if (rule) {\n this.selectedColumn = this.getColumn(rule.field);\n }\n var operVal;\n this.previousColumn = rule && this.getColumn(rule.field);\n var beforeRules = this.getValidRules(this.rule);\n if (this.selectedColumn) {\n if (this.selectedColumn.operators) {\n operVal = this.selectedColumn.operators;\n }\n else {\n operVal = this.customOperators[this.selectedColumn.type + 'Operator'];\n }\n }\n var arrOper = ['in', 'notin', 'between', 'notbetween'];\n var prevOper;\n switch (type) {\n case 'field':\n if (isNullOrUndefined(value)) {\n if (!isNullOrUndefined(rule)) {\n rule.field = '';\n rule.label = '';\n rule.type = '';\n rule.value = '';\n rule.operator = '';\n }\n else {\n return;\n }\n }\n else {\n rule.field = value;\n rule.label = this.selectedColumn.label;\n rule.type = this.selectedColumn.type;\n rule.value = '';\n rule.operator = operVal[0].value;\n }\n break;\n case 'operator':\n prevOper = rule.operator;\n rule.operator = value;\n if (arrOper.indexOf(rule.operator) > -1) {\n rule.value = [];\n }\n else if (arrOper.indexOf(prevOper) > -1) {\n rule.value = '';\n }\n break;\n case 'value':\n rule.value = value;\n }\n this.changeRuleTemplate(this.selectedColumn, element);\n this.filterRules(beforeRules, this.getValidRules(this.rule), type);\n if (this.selectedColumn && this.selectedColumn.ruleTemplate) {\n if (type === 'field' || type === 'operator') {\n var grpEle = closest(element, '.e-rule-container');\n this.destroyControls(grpEle, true);\n detach(grpEle.querySelector('.e-rule-field'));\n var ruleElement = this.appendRuleElem(closest(grpEle, '.e-group-container'), this.selectedColumn, 'change', grpEle.id, type, rule);\n if (this.displayMode === 'Vertical' || this.element.className.indexOf('e-device') > -1) {\n ruleElement.className = 'e-rule-container e-vertical-mode';\n }\n else {\n ruleElement.className = 'e-rule-container e-horizontal-mode';\n }\n if (!this.enableSeparateConnector) {\n if (ruleElement.previousElementSibling && ruleElement.previousElementSibling.className.indexOf('e-rule-container') > -1) {\n if (ruleElement.className.indexOf('e-joined-rule') < 0) {\n ruleElement.className += ' e-joined-rule';\n }\n if (ruleElement.previousElementSibling.className.indexOf('e-prev-joined-rule') < 0) {\n ruleElement.previousElementSibling.className += ' e-prev-joined-rule';\n }\n }\n }\n if (ruleElement.previousElementSibling && ruleElement.previousElementSibling.className.indexOf('e-group-container') > -1 &&\n ruleElement.className.indexOf('e-separate-rule') < 0) {\n ruleElement.className += ' e-separate-rule';\n }\n var args = {\n requestType: 'template-create', action: type, ruleID: grpEle.id,\n fields: this.fields, rule: rule\n };\n eventsArgs = {\n groupID: grpElem.id.replace(this.element.id + '_', ''), ruleID: grpEle.id.replace(this.element.id + '_', ''),\n value: rule.field, type: 'field'\n };\n this.trigger('actionBegin', args);\n this.trigger('change', eventsArgs);\n }\n }\n };\n QueryBuilder.prototype.changeValue = function (i, args) {\n var _this = this;\n var element;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if ((this.isNumInput && typeof args.value === 'number') || (args.type === 'input' && args.target && args.target.classList.contains('e-numerictextbox'))\n && (this.selectedColumn.validation && (this.selectedColumn.validation.max !== Number.MAX_VALUE || this.selectedColumn.validation.min > 0))) {\n this.isNumInput = false;\n return;\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (args.element && args.element.classList.contains('e-multiselect')) {\n var multiSelectArgs = args;\n element = multiSelectArgs.element;\n }\n else if (args.event) {\n element = args.event.target;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n }\n else if (args.type === 'input' && args.target && args.target.classList.contains('e-numerictextbox')) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n element = args.currentTarget;\n }\n else {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n element = args.element;\n }\n if (!element) {\n return;\n }\n if (element.className.indexOf('e-day') > -1 || element.className.indexOf('e-today') > -1 || element.className.indexOf('e-cell') > -1) {\n var calenderArgs = args;\n element = calenderArgs.element;\n }\n var groupElem = closest(element, '.e-group-container');\n var ruleElem = closest(element, '.e-rule-container');\n var groupID = groupElem && groupElem.id.replace(this.element.id + '_', '');\n var ruleID = ruleElem.id.replace(this.element.id + '_', '');\n var dateElement = args;\n var dropDownObj;\n if (dateElement.element && dateElement.element.className.indexOf('e-datepicker') > -1) {\n element = dateElement.element;\n dropDownObj = getComponent(closest(element, '.e-rule-container').querySelector('.e-filter-input'), 'dropdownlist');\n if (dropDownObj) {\n this.selectedColumn = dropDownObj.getDataByValue(dropDownObj.value);\n }\n dropDownObj = getComponent(closest(element, '.e-rule-container').querySelector('.e-filter-input'), 'dropdowntree');\n if (dropDownObj) {\n this.selectedColumn = this.getColumn(dropDownObj.value[0]);\n }\n }\n var value;\n var rbValue;\n if (element.className.indexOf('e-radio') > -1) {\n rbValue = parseInt(element.id.split('valuekey')[1], 10);\n if (this.fieldMode === 'Default') {\n dropDownObj = getComponent(closest(element, '.e-rule-container').querySelector('.e-filter-input'), 'dropdownlist');\n this.selectedColumn = dropDownObj.getDataByValue(dropDownObj.value);\n if (this.selectedColumn.columns) {\n dropDownObj = getComponent(closest(element, '.e-rule-container').querySelector('.e-rule-sub-filter .e-dropdownlist'), 'dropdownlist');\n this.selectedColumn = this.getColumn(dropDownObj.value);\n }\n }\n else {\n dropDownObj = getComponent(closest(element, '.e-rule-container').querySelector('.e-filter-input'), 'dropdowntree');\n this.selectedColumn = this.getColumn(dropDownObj.value[0]);\n }\n if (this.selectedColumn.values) {\n value = this.selectedColumn.values[rbValue];\n }\n else {\n var valColl = [true, false];\n value = valColl[rbValue];\n }\n }\n else if (element.className.indexOf('e-multiselect') > -1) {\n value = getComponent(element, 'multiselect').value;\n }\n else {\n value = args.value;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (args.type === 'input' && args.target && args.target.classList.contains('e-numerictextbox')) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n value = Number(args.currentTarget.value);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var elem = args.currentTarget;\n var numericTextBoxObj = getInstance(elem, NumericTextBox);\n var decimalSeparator = getValue('decimal', getNumericObject(this.locale));\n if (isNaN(value) && elem.value.indexOf(decimalSeparator) !== -1) {\n value = this.intl.getNumberParser({ format: 'n' })(elem.value);\n }\n if (!isNaN(value)) {\n numericTextBoxObj.value = value;\n }\n this.isNumInput = true;\n }\n }\n if (args.name === 'input' && this.immediateModeDelay) {\n window.clearInterval(this.timer);\n this.timer = window.setInterval(function () { _this.filterValue(groupID, ruleID, value, i, element); }, this.immediateModeDelay);\n }\n else {\n this.filterValue(groupID, ruleID, value, i, element);\n }\n };\n QueryBuilder.prototype.filterValue = function (grID, rlID, value, i, ele) {\n var _this = this;\n var eventsArgs = { groupID: grID, ruleID: rlID, value: value, cancel: false, type: 'value' };\n window.clearInterval(this.timer);\n if (!this.isImportRules) {\n this.trigger('beforeChange', eventsArgs, function (observedChangeArgs) {\n _this.changeValueSuccessCallBack(observedChangeArgs, ele, i, grID, rlID);\n });\n }\n else {\n this.changeValueSuccessCallBack(eventsArgs, ele, i, grID, rlID);\n }\n };\n QueryBuilder.prototype.changeValueSuccessCallBack = function (args, element, i, groupID, ruleID) {\n if (!args.cancel) {\n this.updateRules(element, args.value, i);\n this.setSecondDateMinFromFirst(element, i);\n if (!this.isImportRules) {\n this.trigger('change', { groupID: groupID, ruleID: ruleID, value: args.value, cancel: false, type: 'value' });\n }\n }\n };\n QueryBuilder.prototype.setSecondDateMinFromFirst = function (element, valueIndex) {\n if (valueIndex !== 0) {\n return;\n }\n var ruleElem = closest(element, '.e-rule-container');\n if (!ruleElem) {\n return;\n }\n var operatorDropdownElement = ruleElem.querySelector('.e-rule-operator .e-dropdownlist');\n if (!operatorDropdownElement) {\n return;\n }\n var operatorDropdown = getComponent(operatorDropdownElement, 'dropdownlist');\n var operatorValue = operatorDropdown && operatorDropdown.value ? operatorDropdown.value.toString().toLowerCase() : '';\n if (operatorValue.indexOf('between') < 0) {\n return;\n }\n var firstDateElement = document.getElementById(ruleElem.id + '_valuekey0');\n var secondDateElement = document.getElementById(ruleElem.id + '_valuekey1');\n if (!firstDateElement || !secondDateElement) {\n return;\n }\n var firstDatePicker = getComponent(firstDateElement, 'datepicker');\n var secondDatePicker = getComponent(secondDateElement, 'datepicker');\n if (!firstDatePicker || !secondDatePicker || !(firstDatePicker.value instanceof Date)) {\n return;\n }\n var nextDay = new Date(firstDatePicker.value.getTime());\n nextDay.setDate(nextDay.getDate() + 1);\n secondDatePicker.min = nextDay;\n if (secondDatePicker.value instanceof Date && secondDatePicker.value.getTime() < nextDay.getTime()) {\n secondDatePicker.value = nextDay;\n }\n };\n QueryBuilder.prototype.fieldClose = function (id) {\n if (this.isFieldChange || this.isDestroy) {\n return;\n }\n this.isFieldClose = true;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var ddl = getComponent(id, 'dropdownlist');\n var item = ddl.popupObj && ddl.popupObj.element.querySelector('.e-active');\n var itemData = ddl.getItemData();\n ddl.value = itemData.value;\n var customArgs = {\n element: ddl.element, value: itemData.value, isInteracted: true,\n previousItemData: this.prevItemData, previousItem: null, item: item, itemData: itemData, event: null, e: null\n };\n if (ddl.previousValue !== ddl.value) {\n this.changeField(customArgs);\n }\n this.isFieldChange = false;\n };\n QueryBuilder.prototype.changeField = function (args) {\n if (args.isInteracted) {\n if (isNullOrUndefined(args.value)) {\n return;\n }\n this.isFieldChange = true;\n this.prevItemData = args.itemData;\n var fieldElem = closest(args.element, '.e-rule-filter') || closest(args.element, '.e-rule-sub-filter');\n var column = this.fieldMode === 'DropdownTree' ? this.getColumn(args.value[0]) : this.getColumn(args.value);\n if (this.fieldMode === 'DropdownTree' && fieldElem !== null) {\n var ddtElem = fieldElem.querySelector('.e-dropdowntree.e-control');\n var ddt = getComponent(ddtElem, 'dropdowntree');\n if (column) {\n if (column.type === 'object') {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ddt.value = args.oldValue;\n ddt.dataBind();\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (isNullOrUndefined(args.oldValue)) {\n ddtElem.value = '';\n }\n else {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var result = this.getLabelFromColumn(args.oldValue[0]);\n ddtElem.value = result;\n }\n return;\n }\n else {\n if (!isNullOrUndefined(args.value[0])) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ddt.value = args.value[0];\n ddt.dataBind();\n var result = this.getLabelFromColumn(args.value[0]);\n ddtElem.value = result;\n }\n }\n }\n else {\n return;\n }\n }\n this.destroySubFields(fieldElem);\n this.subFieldElem = null;\n this.isNotValueChange = true;\n if (column && column.ruleTemplate) {\n this.templateChange(args.element, column.field, 'field');\n }\n else if (column && column.columns && column.columns[0].ruleTemplate) {\n this.templateChange(args.element, column.columns[0].field, 'field');\n }\n else {\n var groupElem = closest(args.element, '.e-group-container');\n var rules = this.getParentGroup(groupElem);\n var ruleElem = closest(args.element, '.e-rule-container');\n var index = 0;\n while (ruleElem && ruleElem.previousElementSibling !== null) {\n ruleElem = ruleElem.previousElementSibling;\n if (!this.enableSeparateConnector || (this.enableSeparateConnector &&\n ((!this.headerTemplate && !ruleElem.classList.contains('e-btn-group')) ||\n this.headerTemplate && (ruleElem.classList.contains('e-rule-container') ||\n ruleElem.classList.contains('e-group-container'))))) {\n index++;\n }\n }\n rules.rules[index].value = '';\n this.changeRule(rules.rules[index], args);\n }\n }\n };\n QueryBuilder.prototype.changeRule = function (rule, ddlArgs) {\n if (!ddlArgs.itemData) {\n if (this.fieldMode === 'DropdownTree') {\n var ddt = getComponent(ddlArgs.element, 'dropdowntree');\n if (ddt.value == null) {\n return;\n }\n }\n else {\n return;\n }\n }\n var tempRule = {};\n var filterElem = closest(ddlArgs.element, '.e-rule-filter');\n filterElem = filterElem ? filterElem : closest(ddlArgs.element, '.e-rule-sub-filter');\n var ddlObj = getComponent(ddlArgs.element, 'dropdownlist');\n if (this.fieldMode === 'DropdownTree' && filterElem !== null) {\n ddlObj = getComponent(ddlArgs.element, 'dropdowntree');\n }\n var element = closest(ddlArgs.element, '.e-group-container');\n var groupID = element.id.replace(this.element.id + '_', '');\n this.changeFilter(filterElem, ddlObj, groupID, rule, tempRule, ddlArgs);\n };\n QueryBuilder.prototype.changeFilter = function (flt, dl, grID, rl, tmpRl, dArg) {\n var _this = this;\n if (flt) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var ddlValue = void 0;\n if (this.fieldMode === 'DropdownTree') {\n ddlValue = (dl.value[0]);\n }\n else {\n ddlValue = this.isImportRules ? this.GetRootColumnName(dl.value) : dl.value;\n }\n this.selectedColumn = this.getColumn(ddlValue);\n var ruleElem = closest(flt, '.e-rule-container');\n var ruleID = ruleElem.id.replace(this.element.id + '_', '');\n var eventsArgs = {\n groupID: grID, ruleID: ruleID, selectedField: this.fieldMode === 'DropdownTree' ?\n dl.value[0] : dl.value, cancel: false, type: 'field'\n };\n if (!this.isImportRules && !this.prvtEvtTgrDaD) {\n this.trigger('beforeChange', eventsArgs, function (observedChangeArgs) {\n _this.fieldChangeSuccess(observedChangeArgs, tmpRl, flt, rl, dArg);\n });\n }\n else {\n this.fieldChangeSuccess(eventsArgs, tmpRl, flt, rl, dArg);\n }\n }\n else {\n var operatorElem = closest(dArg.element, '.e-rule-operator');\n this.changeOperator(flt, operatorElem, dl, grID, rl, tmpRl, dArg);\n }\n };\n QueryBuilder.prototype.changeOperator = function (\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n flt, opr, dl, grID, rl, tmpRl, dArg) {\n var _this = this;\n var ruleElem;\n var ruleID;\n var eventsArgs;\n if (opr) {\n ruleElem = closest(opr, '.e-rule-container');\n ruleID = ruleElem.id.replace(this.element.id + '_', '');\n eventsArgs = { groupID: grID, ruleID: ruleID, selectedIndex: dl.index, cancel: false, type: 'operator' };\n if (!this.isImportRules) {\n this.trigger('beforeChange', eventsArgs, function (observedChangeArgs) {\n _this.operatorChangeSuccess(observedChangeArgs, flt, tmpRl, rl, dArg);\n });\n }\n else {\n this.operatorChangeSuccess(eventsArgs, flt, tmpRl, rl, dArg);\n }\n }\n else {\n this.changeRuleValues(flt, rl, tmpRl, dArg);\n }\n };\n QueryBuilder.prototype.fieldChangeSuccess = function (args, tempRule, filterElem, rule, ddlArgs) {\n var ruleElem = closest(filterElem, '.e-rule-container');\n var operatorElem = closest(ddlArgs.element, '.e-rule-operator');\n var element = closest(ddlArgs.element, '.e-group-container');\n var groupID = element.id.replace(this.element.id + '_', '');\n var ddlObj = getComponent(ddlArgs.element, 'dropdownlist');\n var tooltipElem = ruleElem.querySelectorAll('.e-tooltip.e-input-group');\n for (var i = 0; i < tooltipElem.length; i++) {\n getComponent(tooltipElem[i], 'tooltip').destroy();\n }\n if (!args.cancel) {\n if (isNullOrUndefined(this.selectedColumn)) {\n return;\n }\n tempRule.type = this.selectedColumn.type;\n if (ruleElem.querySelector('.e-template')) {\n rule.value = '';\n }\n if (this.selectedColumn.type === 'object' && this.fieldMode === 'Default') {\n tempRule.type = this.selectedColumn.columns[0].type;\n while (this.selectedColumn.columns) {\n this.createSubFields(filterElem, rule, tempRule, ddlArgs);\n }\n }\n else {\n this.destroySubFields(filterElem);\n this.changeOperator(filterElem, operatorElem, ddlObj, groupID, rule, tempRule, ddlArgs);\n }\n }\n else {\n this.changeOperator(filterElem, operatorElem, ddlObj, groupID, rule, tempRule, ddlArgs);\n }\n };\n QueryBuilder.prototype.destroySubFields = function (filterElem) {\n while (filterElem && filterElem.nextElementSibling.classList.contains('e-rule-sub-filter')) {\n this.destroyControls(filterElem);\n filterElem.nextElementSibling.remove();\n }\n };\n QueryBuilder.prototype.createSubFields = function (filterElem, rule, tempRule, ddlArgs) {\n var subFieldValue = false;\n var fieldElem = closest(filterElem, '.e-rule-field');\n var tempElem = this.createElement('div', { attrs: { class: 'e-rule-sub-filter', id: 'subfilter' + this.subFilterCounter } });\n fieldElem.insertBefore(tempElem, fieldElem.querySelector('.e-rule-operator'));\n var ruleId = closest(tempElem, '.e-rule-container').id;\n var subFieldElem = this.createElement('input', { attrs: { type: 'text', id: ruleId + '_subfilterkey' + this.subFilterCounter } });\n tempElem.appendChild(subFieldElem);\n var height = (this.element.className.indexOf('e-device') > -1) ? '250px' : '200px';\n var ddlField;\n ddlField = {\n dataSource: this.selectedColumn.columns,\n fields: this.fields,\n placeholder: this.l10n.getConstant('SelectField'),\n popupHeight: ((this.selectedColumn.columns.length > 5) ? height : 'auto'),\n change: this.changeField.bind(this),\n index: 0,\n open: this.popupOpen.bind(this, false)\n };\n if (this.fieldModel) {\n ddlField = __assign({}, ddlField, this.fieldModel);\n }\n var dropDownList = new DropDownList(ddlField);\n dropDownList.appendTo('#' + ruleId + '_subfilterkey' + this.subFilterCounter);\n if (this.isImportRules || (this.previousColumn && this.previousColumn.ruleTemplate &&\n this.GetRootColumnName(rule.field) === this.GetRootColumnName(this.previousColumn.field))) {\n var subField = this.selectedColumn.columns;\n for (var i = 0; i < subField.length; i++) {\n if (rule.field === subField[i].field || rule.field.indexOf(subField[i].field + this.separator) > -1) {\n dropDownList.value = subField[i].field;\n this.selectedColumn = subField[i];\n subFieldValue = true;\n break;\n }\n }\n }\n this.subFilterCounter++;\n this.subFieldElem = subFieldElem;\n // eslint-disable-next-line\n ddlArgs.itemData = ddlArgs.itemData;\n if (!subFieldValue && this.selectedColumn.columns) {\n if (!subFieldValue && this.isImportRules) {\n dropDownList.value = null;\n }\n this.selectedColumn = this.selectedColumn.columns[0];\n }\n this.previousColumn = this.selectedColumn;\n if (!this.selectedColumn.columns) {\n this.changeRuleValues(tempElem, rule, tempRule, ddlArgs);\n }\n };\n QueryBuilder.prototype.operatorChangeSuccess = function (eventsArgs, filterElem, tempRule, rule, ddlArgs) {\n if (!eventsArgs.cancel) {\n var operatorElem = closest(ddlArgs.element, '.e-rule-operator');\n var valElem = operatorElem.nextElementSibling;\n var dropDownObj = getComponent(ddlArgs.element, 'dropdownlist');\n var prevOper = rule.operator ? rule.operator.toString().toLowerCase() : '';\n tempRule.operator = dropDownObj.value.toString();\n var currOper = tempRule.operator.toLowerCase();\n if (tempRule.operator.toLowerCase().indexOf('between') > -1 || (tempRule.operator.toLowerCase().indexOf('in') > -1\n && tempRule.operator.toLowerCase().indexOf('contains') < 0)) {\n filterElem = operatorElem.previousElementSibling;\n tempRule.type = rule.type;\n if (tempRule.operator.toLowerCase().indexOf('in') < 0 || prevOper.indexOf('in') < 0) {\n rule.value = [];\n }\n }\n else if (typeof rule.value === 'object' && rule.value !== null) {\n rule.value = rule.value.length > 0 ? rule.value[0] : rule.type === 'number' ? 0 : '';\n }\n if (ddlArgs.previousItemData) {\n var prevValue = ddlArgs.previousItemData.value.toString().toLowerCase();\n if ((prevValue.indexOf('between') > -1 || (prevValue.indexOf('in') > -1 || (prevValue.indexOf('null') > -1)\n || (prevValue.indexOf('empty') > -1)) && prevValue.indexOf('contains') < 0)) {\n filterElem = operatorElem.previousElementSibling;\n tempRule.type = rule.type;\n }\n }\n if ((prevOper.indexOf('in') > -1 && prevOper.indexOf('in') < 5) && (currOper.indexOf('in') > -1\n && currOper.indexOf('in') < 5)) {\n filterElem = null;\n }\n if (tempRule.operator.indexOf('null') > -1 || (tempRule.operator.indexOf('empty') > -1)) {\n var parentElem = operatorElem.parentElement.querySelector('.e-rule-value');\n var tooltipElem = parentElem.querySelector('.e-tooltip.e-input-group');\n if (tooltipElem) {\n getComponent(tooltipElem, 'tooltip').destroy();\n }\n else if (prevOper.indexOf('in') > -1) {\n tooltipElem = parentElem.querySelector('.e-tooltip');\n if (tooltipElem) {\n getComponent(tooltipElem, 'tooltip').destroy();\n }\n }\n removeClass([parentElem], 'e-show');\n addClass([parentElem], 'e-hide');\n }\n if (valElem && this.getColumn(rule.field).template) {\n filterElem = operatorElem.previousElementSibling;\n }\n if (valElem.children.length === 0) {\n filterElem = operatorElem.previousElementSibling;\n }\n this.changeRuleValues(filterElem, rule, tempRule, ddlArgs);\n }\n };\n QueryBuilder.prototype.changeRuleValues = function (filterElem, rule, tempRule, ddlArgs) {\n var operatorElem = closest(ddlArgs.element, '.e-rule-operator');\n var isSub;\n var ddlObj;\n var operatorList;\n var oprElem;\n if (filterElem) {\n operatorElem = filterElem.nextElementSibling;\n if (filterElem.classList.contains('e-rule-sub-filter')) {\n tempRule.type = this.selectedColumn.type;\n isSub = operatorElem.classList.contains('e-rule-sub-filter');\n operatorElem = isSub ? operatorElem.nextElementSibling : operatorElem;\n }\n addClass([operatorElem], 'e-operator');\n if (operatorElem.childElementCount) {\n ddlObj = getComponent(operatorElem.querySelector('.e-dropdownlist'), 'dropdownlist');\n tempRule.operator = ddlObj.value;\n var fieldObj = void 0;\n if (this.fieldMode === 'DropdownTree') {\n fieldObj = getComponent(filterElem.querySelector('.e-dropdowntree'), 'dropdowntree');\n }\n else {\n fieldObj = getComponent(filterElem.querySelector('.e-dropdownlist'), 'dropdownlist');\n }\n tempRule.type = this.fieldMode === 'DropdownTree' ? this.getColumn(fieldObj.value[0]).type :\n this.getColumn(fieldObj.value).type;\n var itemData = ddlArgs.itemData;\n if (ddlObj.value !== '') {\n this.renderValues(operatorElem, itemData, ddlArgs.previousItemData, true, rule, tempRule, ddlArgs.element);\n }\n }\n else {\n var ruleId = closest(operatorElem, '.e-rule-container').id;\n oprElem = this.createElement('input', { attrs: { type: 'text', id: ruleId + '_operatorkey' } });\n operatorElem.appendChild(oprElem);\n if (this.selectedColumn.operators) {\n operatorList = this.selectedColumn.operators;\n }\n else if (ddlArgs.itemData) {\n operatorList = this.customOperators[this.selectedColumn.type + 'Operator'];\n }\n var height = (this.element.className.indexOf('e-device') > -1) ? '250px' : '200px';\n var operator_2;\n if (rule.operator) {\n operatorList.forEach(function (obj) {\n if ('value' in obj && typeof obj.value === 'string' && obj.value.toLowerCase() === rule.operator.toLowerCase()) {\n operator_2 = obj.value;\n }\n });\n }\n var value = operator_2 ? operator_2 : operatorList[0].value;\n var ddlIdx = 0;\n if (!this.autoSelectOperator) {\n value = '';\n ddlIdx = -1;\n }\n if (this.isImportRules || (this.ruleIndex > -1 || this.groupIndex > -1 || this.prvtEvtTgrDaD)) {\n value = rule ? (rule.operator ? rule.operator : value) : value;\n }\n var ddlOperator = void 0;\n ddlOperator = {\n dataSource: operatorList,\n fields: { text: 'key', value: 'value' },\n placeholder: this.l10n.getConstant('SelectOperator'),\n popupHeight: ((operatorList.length > 5) ? height : 'auto'),\n change: this.changeField.bind(this),\n index: ddlIdx,\n value: value,\n open: this.popupOpen.bind(this, false)\n };\n if (this.operatorModel) {\n ddlOperator = __assign({}, ddlOperator, this.operatorModel);\n }\n var dropDownList = new DropDownList(ddlOperator);\n dropDownList.appendTo('#' + ruleId + '_operatorkey');\n tempRule.operator = (rule && rule.operator !== '' && !isNullOrUndefined(rule.operator)) ? rule.operator : operatorList[0].value;\n if (this.isImportRules) {\n tempRule.type = this.selectedColumn.type;\n tempRule.operator = rule.operator;\n }\n if (!isNullOrUndefined(value) && value !== '') {\n this.renderValues(operatorElem, this.selectedColumn, ddlArgs.previousItemData, false, rule, tempRule, ddlArgs.element);\n }\n else if (this.autoSelectField && this.autoSelectOperator) {\n this.renderValues(operatorElem, this.selectedColumn, ddlArgs.previousItemData, false, rule, tempRule, ddlArgs.element);\n }\n }\n }\n if (!this.isImportRules) {\n this.updateRules(ddlArgs.element, ddlArgs.item);\n }\n };\n QueryBuilder.prototype.popupOpen = function (isField, args) {\n if (this.enableRtl) {\n addClass([args.popup.element], 'e-rtl');\n }\n if (isField) {\n this.isFieldClose = false;\n }\n };\n QueryBuilder.prototype.destroyControls = function (target, isRuleTemplate) {\n var element = isRuleTemplate ? target : target.nextElementSibling;\n var inputElement = element.querySelectorAll('input.e-control');\n var divElement = element.querySelectorAll('div.e-control:not(.e-handle)');\n var columns = this.columns;\n for (var i = 0, len = inputElement.length; i < len; i++) {\n if (inputElement[i].classList.contains('e-textbox')) {\n getComponent(inputElement[i], 'textbox').destroy();\n detach(select('input#' + inputElement[i].id, element));\n }\n else if (inputElement[i].classList.contains('e-dropdownlist')) {\n if (this.allowValidation && inputElement[i].parentElement.className.indexOf('e-tooltip') > -1) {\n getComponent(inputElement[i].parentElement, 'tooltip').destroy();\n }\n getComponent(inputElement[i], 'dropdownlist').destroy();\n }\n else if (inputElement[i].classList.contains('e-radio')) {\n getComponent(inputElement[i], 'radio').destroy();\n }\n else if (inputElement[i].classList.contains('e-numerictextbox')) {\n getComponent(inputElement[i], 'numerictextbox').destroy();\n detach(select('input#' + inputElement[i].id, element));\n }\n else if (inputElement[i].classList.contains('e-datepicker')) {\n getComponent(inputElement[i], 'datepicker').destroy();\n }\n else if (inputElement[i].classList.contains('e-multiselect')) {\n getComponent(inputElement[i], 'multiselect').destroy();\n }\n else if (inputElement[i].className.indexOf('e-template') > -1) {\n var clsName = inputElement[i].className;\n for (var j = 0, jLen = columns.length; j < jLen; j++) {\n if (columns[j].template && clsName.indexOf(columns[j].field) > -1) {\n this.templateDestroy(columns[j], inputElement[i].id);\n break;\n }\n }\n }\n if (document.getElementById(inputElement[i].id)) {\n detach(inputElement[i]);\n }\n }\n for (var i = 0, len = divElement.length; i < len; i++) {\n if (divElement[i].className.indexOf('e-template') > -1) {\n var clsName = divElement[i].className;\n for (var j = 0, jLen = columns.length; j < jLen; j++) {\n if (columns[j].template && clsName.indexOf(columns[j].field) > -1) {\n this.templateDestroy(columns[j], divElement[i].id);\n break;\n }\n }\n }\n detach(divElement[i]);\n }\n var templateElement = element.querySelectorAll('.e-template:not(.e-control)');\n for (var i = 0, len = templateElement.length; i < len; i++) {\n detach(templateElement[i]);\n }\n };\n QueryBuilder.prototype.templateDestroy = function (column, elemId) {\n var template;\n if (typeof column.template !== 'string' || column.template.destroy === undefined) {\n template = column.template;\n }\n else {\n return;\n }\n var temp = template.destroy;\n if (template.destroy) {\n var templateElements = void 0;\n if (document.getElementById(elemId)) {\n templateElements = closest(document.getElementById(elemId), '.e-rule-field').querySelectorAll('.e-template');\n }\n if (typeof temp === 'string') {\n temp = getValue(temp, window);\n temp({ field: column.field, elementId: elemId, elements: templateElements });\n }\n else {\n template.destroy({ field: column.field, elementId: elemId, elements: templateElements });\n }\n }\n };\n /**\n * Return values bound to the column.\n *\n * @param {string} field - 'field' to be passed to get the field values.\n * @returns {object[]} - Values bound to the column\n */\n QueryBuilder.prototype.getValues = function (field) {\n var original = {};\n var result = [];\n var value;\n var fieldColl = [];\n if (this.separator.length > 0) {\n fieldColl = field.split(this.separator);\n }\n var dataSource = this.dataColl;\n if (this.dataColl[1]) {\n for (var i = 0, iLen = dataSource.length; i < iLen; i++) {\n var data = {};\n if (fieldColl.length > 1) {\n var dataObj = dataSource[i];\n var fieldStr = void 0;\n for (var j = 0, jLen = fieldColl.length; j < jLen; j++) {\n fieldStr = fieldColl[j];\n if (fieldColl.length === (j + 1)) {\n value = dataObj[\"\" + fieldStr];\n if (Number(dataObj[\"\" + fieldStr]) === dataObj[\"\" + fieldStr] && dataObj[\"\" + fieldStr] % 1 !== 0) {\n value = dataObj[\"\" + fieldStr].toString();\n }\n }\n else {\n dataObj = dataObj[\"\" + fieldStr];\n }\n }\n }\n else {\n value = dataSource[i][\"\" + field];\n if (Number(dataSource[i][\"\" + field]) === dataSource[i][\"\" + field] && dataSource[i][\"\" + field] % 1 !== 0) {\n value = dataSource[i][\"\" + field].toString();\n }\n }\n if (!(value in original)) {\n original[\"\" + value] = 1;\n if (fieldColl.length > 1) {\n this.createNestedObject(data, fieldColl, value);\n }\n else {\n data[\"\" + field] = value;\n }\n result.push(data);\n }\n }\n }\n return result;\n };\n QueryBuilder.prototype.createNestedObject = function (obj, fieldColl, value) {\n var key;\n var lastIndex = fieldColl.length - 1;\n for (var k = 0; k < lastIndex; ++k) {\n key = fieldColl[k];\n if (!(key in obj)) {\n obj[\"\" + key] = {};\n }\n obj = obj[\"\" + key];\n }\n obj[fieldColl[lastIndex]] = value;\n };\n QueryBuilder.prototype.getDistinctValues = function (dataSource, field) {\n var original = {};\n var result = [];\n var nest = [];\n var value = '';\n var isNested = field.indexOf(this.separator);\n var _loop_2 = function (i, iLen) {\n value = '';\n if (isNested === 0) {\n value = dataSource[i][\"\" + field];\n }\n else {\n nest = field.split(this_2.separator);\n // eslint-disable-next-line @typescript-eslint/tslint/config\n nest.forEach(function (element) {\n if (value) {\n value = value[\"\" + element];\n }\n else {\n value = dataSource[i][\"\" + element];\n }\n });\n }\n if (Number(dataSource[i][\"\" + field]) === dataSource[i][\"\" + field] && dataSource[i][\"\" + field] % 1 !== 0) {\n value = dataSource[i][\"\" + field].toString();\n }\n var data = {};\n if (!(value in original) && value) {\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[0]) {\n if (Object.keys(this.dataColl[0]).indexOf(rule.field) > -1) {\n isFetched = true;\n ds = this.getDistinctValues(this.dataColl, rule.field);\n }\n }\n isFetched = rule.columns ? false : isFetched;\n if (!this.dataColl.length && values.length) {\n isValues = true;\n }\n var multiSelectValue;\n var multiSelectUserQuery = (this.valueModel && this.valueModel.multiSelectModel && this.valueModel.multiSelectModel.query)\n ? this.valueModel.multiSelectModel.query\n : null;\n var multiSelectQuery = (multiSelectUserQuery && typeof multiSelectUserQuery.clone === 'function')\n ? multiSelectUserQuery.clone()\n : new Query();\n var selectedField = rule.field;\n if (selectedField) {\n multiSelectQuery.select([selectedField]);\n }\n var resolvedQuery = new Query([rule.field]);\n if (!isValues && !isFetched && (this.dataManager instanceof DataManager || this.dataSource instanceof DataManager)) {\n resolvedQuery = multiSelectQuery;\n }\n multiSelectValue = {\n dataSource: isValues ? values : (isFetched ? ds : this.dataManager),\n query: resolvedQuery,\n fields: { text: this.selectedRule.field, value: this.selectedRule.field },\n placeholder: this.l10n.getConstant('SelectValue'),\n value: selectedValue,\n mode: 'CheckBox',\n width: '100%',\n change: this.changeValue.bind(this, i),\n close: this.closePopup.bind(this, i),\n actionBegin: this.multiSelectOpen.bind(this, parentId + '_valuekey' + i),\n open: this.popupOpen.bind(this, false)\n };\n if (this.valueModel && this.valueModel.multiSelectModel) {\n multiSelectValue = __assign({}, multiSelectValue, this.valueModel.multiSelectModel);\n }\n var multiSelectObj = new MultiSelect(multiSelectValue);\n multiSelectObj.appendTo('#' + parentId + '_valuekey' + i);\n this.updateRules(multiSelectObj.element, selectedValue, 0);\n };\n QueryBuilder.prototype.multiSelectOpen = function (parentId, args) {\n if (this.dataSource instanceof DataManager) {\n var element = document.getElementById(parentId);\n var dropDownObj = getComponent(closest(element, '.e-rule-container').querySelector('.e-filter-input'), this.fieldMode === 'DropdownTree' ? 'dropdowntree' : 'dropdownlist');\n if (this.fieldMode === 'DropdownTree') {\n this.selectedColumn = this.getColumn(dropDownObj.value[0]);\n }\n else {\n this.selectedColumn = dropDownObj.getDataByValue(dropDownObj.value);\n }\n var value = this.selectedColumn.field;\n var isFetched = false;\n if (this.dataColl[0]) {\n if (Object.keys(this.dataColl[0]).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 var multiselectObj = getComponent(element, 'multiselect');\n if (!multiselectObj) {\n return;\n }\n var incomingQuery = (args.query) ? args.query : null;\n var existingQuery = multiselectObj.query ? multiselectObj.query : null;\n if (!this.areQueriesSame(existingQuery, incomingQuery)) {\n multiselectObj.query = null;\n args.query = null;\n }\n }\n };\n QueryBuilder.prototype.areQueriesSame = function (query1, query2) {\n if ((query1 === null || query1 === undefined) && (query2 === null || query2 === undefined)) {\n return true;\n }\n if ((query1 === null || query1 === undefined) || (query2 === null || query2 === undefined)) {\n return false;\n }\n return JSON.stringify(query1) === JSON.stringify(query2);\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 multiselectObj = getComponent(element, 'multiselect');\n var userQuery = multiselectObj.query ? multiselectObj.query : null;\n var dataQuery = (userQuery && typeof userQuery.clone === 'function')\n ? userQuery.clone()\n : new Query();\n dataQuery.select([value]);\n if (!this.isRequestSent) {\n var data = this.dataManager.executeQuery(dataQuery);\n this.isRequestSent = true;\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 _this.isRequestSent = false;\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 var newData = _this.getDistinctValues(_this.dataColl, value);\n var current = multiselectObj.dataSource;\n if ((current.length !== newData.length &&\n (JSON.stringify(current) !== JSON.stringify(newData)))) {\n multiselectObj.dataSource = newData;\n }\n _this.isGetNestedData = true;\n hideSpinner(closest(element, '.e-multi-select-wrapper').parentElement);\n }).catch(function (e) {\n _this.isRequestSent = false;\n deferred.reject(e);\n });\n }\n };\n QueryBuilder.prototype.createSpinner = function (element) {\n var spinnerElem = this.createElement('span', { attrs: { class: 'e-qb-spinner' } });\n element.appendChild(spinnerElem);\n createSpinner({ target: spinnerElem, width: Browser.isDevice ? '16px' : '14px' });\n };\n QueryBuilder.prototype.closePopup = function (i, args) {\n var element = document.getElementById(args.popup.element.id.replace('_popup', ''));\n if (element) {\n var ms = getComponent(element, 'multiselect');\n if (ms) {\n var value = ms.value;\n this.updateRules(element, value, i);\n }\n }\n };\n QueryBuilder.prototype.processTemplate = function (target, itemData, rule, tempRule) {\n var container = closest(target, '.e-rule-container');\n var tempElements = container.querySelectorAll('.e-template');\n var filterElem = container.querySelector('.e-rule-filter .e-filter-input');\n var ddlObj = this.fieldMode === 'DropdownTree' ? getComponent(filterElem, 'dropdowntree')\n : getComponent(container.querySelector('.e-rule-filter .e-filter-input'), 'dropdownlist');\n var column = this.fieldMode === 'DropdownTree' ? this.getColumn(ddlObj.value[0]) : this.getColumn(ddlObj.value);\n if (target && target.nextElementSibling) {\n target.nextElementSibling.style.position = 'relative';\n target.nextElementSibling.classList.add('e-querybuilder-spinner');\n }\n var onComplete = function () {\n if (target && target.nextElementSibling && target.nextElementSibling.classList.contains('e-querybuilder-spinner')) {\n target.nextElementSibling.classList.remove('e-querybuilder-spinner');\n }\n };\n if (typeof itemData.template === 'string' || itemData.template.write === undefined) {\n var args = {\n rule: rule, ruleID: container.id, operator: tempRule.operator, field: column.field,\n requestType: 'value-template-create'\n };\n this.trigger('actionBegin', args);\n onComplete();\n }\n else {\n var template = itemData.template;\n var templateArgs = {\n elements: tempElements.length > 1 ? tempElements : tempElements[0],\n values: rule.value,\n operator: tempRule.operator,\n field: column.field,\n dataSource: column.values,\n onComplete: onComplete\n };\n var writeResult = void 0;\n if (typeof template.write === 'string') {\n writeResult = getValue(template.write, window)(templateArgs);\n }\n else if (typeof itemData.template !== 'function') {\n writeResult = itemData.template.write(templateArgs);\n }\n if (writeResult && typeof writeResult.then === 'function') {\n writeResult.then(function () { return onComplete(); });\n }\n else {\n setTimeout(function () { return onComplete(); }, 100);\n }\n }\n };\n QueryBuilder.prototype.getItemData = function (parentId) {\n var fieldObj = getComponent(document.getElementById(parentId + '_filterkey'), 'dropdownlist');\n var parentFieldObj = this.element.querySelector(\"#\" + parentId);\n if (this.fieldMode === 'DropdownTree') {\n fieldObj = getComponent(document.getElementById(parentId + '_filterkey'), 'dropdowntree');\n }\n else if (parentFieldObj) {\n var subFieldObjList = parentFieldObj.querySelectorAll('.e-rule-sub-filter');\n if (subFieldObjList.length > 0) {\n var lastSubFieldObj = subFieldObjList[subFieldObjList.length - 1].querySelector('.e-dropdownlist');\n fieldObj = getComponent(lastSubFieldObj, 'dropdownlist');\n }\n }\n return this.fieldMode === 'DropdownTree' ? this.getColumn(fieldObj.value[0]) : this.getColumn(fieldObj.value);\n };\n QueryBuilder.prototype.setDefaultValue = function (parentId, isArryValue, isNumber) {\n var itemData = this.getItemData(parentId);\n if (isNullOrUndefined(itemData.value)) {\n return isNumber ? isArryValue ? [0, 0] : 0 : isArryValue ? [] : '';\n }\n if (isArryValue) {\n if (!(itemData.value instanceof Array)) {\n return [itemData.value];\n }\n }\n else {\n if (itemData.value instanceof Array) {\n return itemData.value[0];\n }\n }\n return itemData.value;\n };\n QueryBuilder.prototype.renderStringValue = function (parentId, rule, operator, idx, ruleValElem) {\n var selectedVal;\n var columnData = this.getItemData(parentId);\n var selectedValue;\n var isTemplate = (typeof columnData.template === 'string');\n if (this.isImportRules || this.ruleIndex > -1 || this.groupIndex > -1 || this.isPublic || isTemplate || rule.value !== '') {\n selectedValue = rule.value;\n }\n else {\n selectedValue = this.setDefaultValue(parentId, false, false);\n }\n if ((operator === 'in' || operator === 'notin') && (this.dataColl.length || columnData.values)) {\n selectedVal = (this.isImportRules || this.ruleIndex > -1 || this.groupIndex > -1 || this.isPublic) ? rule.value :\n this.setDefaultValue(parentId, true, false);\n this.renderMultiSelect(columnData, parentId, idx, selectedVal, columnData.values);\n if (this.displayMode === 'Vertical' || this.element.className.indexOf('e-device') > -1) {\n ruleValElem.style.width = '100%';\n }\n else {\n ruleValElem.style.width = null;\n ruleValElem.style.minWidth = '200px';\n }\n }\n else {\n if (operator === 'in' || operator === 'notin') {\n selectedVal = (this.isImportRules || this.ruleIndex > -1 || this.groupIndex > -1) ? rule.value :\n this.setDefaultValue(parentId, true, false);\n selectedValue = selectedVal.join(',');\n }\n if (operator === 'between' || operator === 'notbetween') {\n if (selectedValue.length > 1) {\n selectedValue = selectedValue[idx];\n }\n }\n var txtBox = void 0;\n txtBox = {\n placeholder: this.l10n.getConstant('SelectValue'),\n input: this.changeValue.bind(this, idx)\n };\n if (this.valueModel && this.valueModel.textBoxModel) {\n txtBox = __assign({}, txtBox, this.valueModel.textBoxModel);\n }\n var inputobj = new TextBox(txtBox);\n inputobj.appendTo('#' + parentId + '_valuekey' + idx);\n inputobj.value = selectedValue;\n inputobj.dataBind();\n }\n };\n QueryBuilder.prototype.renderNumberValue = function (parentId, rule, operator, idx, ruleValElem, itemData, length) {\n var columnData = this.getItemData(parentId);\n var isTemplate = (typeof columnData.template === 'string');\n var selectedVal = (this.isImportRules || this.ruleIndex > -1 || this.groupIndex > -1 || this.isPublic || isTemplate ||\n typeof rule.value === 'number') ? rule.value : this.setDefaultValue(parentId, false, true);\n if ((operator === 'in' || operator === 'notin') && (this.dataColl.length || columnData.values)) {\n selectedVal = (this.isImportRules || this.ruleIndex > -1 || this.groupIndex > -1 || this.isPublic) ? rule.value :\n this.setDefaultValue(parentId, true, false);\n this.renderMultiSelect(columnData, parentId, idx, selectedVal, columnData.values);\n if (this.element.className.indexOf('e-device') > -1 || this.displayMode === 'Vertical') {\n ruleValElem.style.width = '100%';\n }\n else {\n ruleValElem.style.minWidth = '200px';\n ruleValElem.style.width = null;\n }\n }\n else if (operator === 'in' || operator === 'notin') {\n selectedVal = (this.isImportRules || this.ruleIndex > -1 || this.groupIndex > -1) ? rule.value :\n this.setDefaultValue(parentId, true, false);\n var selVal = selectedVal.join(',');\n var txtInp = void 0;\n txtInp = {\n placeholder: this.l10n.getConstant('SelectValue'),\n input: this.changeValue.bind(this, idx)\n };\n if (this.valueModel && this.valueModel.textBoxModel) {\n txtInp = __assign({}, txtInp, this.valueModel.textBoxModel);\n }\n var input = new TextBox(txtInp);\n input.appendTo('#' + parentId + '_valuekey' + idx);\n input.value = selVal;\n input.dataBind();\n }\n else {\n itemData = columnData;\n var min = (itemData.validation && itemData.validation.min) ? itemData.validation.min : 0;\n var max = (itemData.validation && itemData.validation.max) ? itemData.validation.max : Number.MAX_VALUE;\n var format = itemData.format ? itemData.format : 'n';\n if (length > 1 && rule) {\n selectedVal = rule.value[idx] ? rule.value[idx] : this.setDefaultValue(parentId, true, true);\n }\n var numericTxt = void 0;\n numericTxt = {\n value: (selectedVal instanceof Array) ? selectedVal[idx] : selectedVal,\n format: format, min: min, max: max, width: '100%',\n step: itemData.step ? itemData.step : 1,\n change: this.changeValue.bind(this, idx)\n };\n if (this.valueModel && this.valueModel.numericTextBoxModel) {\n numericTxt = __assign({}, numericTxt, this.valueModel.numericTextBoxModel);\n }\n var numeric = new NumericTextBox(numericTxt);\n numeric.appendTo('#' + parentId + '_valuekey' + idx);\n numeric.element.setAttribute('aria-label', itemData.label + ' ' + 'Value');\n numeric.element.oninput = this.changeValue.bind(this, idx);\n }\n };\n QueryBuilder.prototype.processValueString = function (value, type) {\n var numArr = [];\n var strArr = value.split(',');\n if (type === 'string') {\n return strArr;\n }\n else {\n for (var k = 0, kLen = strArr.length; k < kLen; k++) {\n numArr.push(Number(strArr[k]));\n }\n return numArr;\n }\n };\n QueryBuilder.prototype.parseDate = function (value, format) {\n var formatOpt;\n var selectedValue;\n if (format) {\n var dParser = this.intl.getDateParser({ skeleton: 'full', type: 'dateTime' });\n formatOpt = this.getFormat(format);\n selectedValue = dParser(value);\n if (isNullOrUndefined(selectedValue)) {\n selectedValue = this.intl.parseDate(value, formatOpt);\n }\n }\n else {\n selectedValue = new Date(value);\n }\n return selectedValue;\n };\n QueryBuilder.prototype.renderControls = function (target, itemData, rule, tempRule, isRendered) {\n addClass([target.parentElement.querySelector('.e-rule-value')], 'e-value');\n removeClass([target.parentElement.querySelector('.e-rule-value')], 'e-hide');\n addClass([target.parentElement.querySelector('.e-rule-value')], 'e-show');\n if (itemData.template && (itemData.template.create || isRendered)) {\n this.processTemplate(target, itemData, rule, tempRule);\n }\n else {\n var length_1;\n if (tempRule.type === 'boolean') {\n length_1 = this.selectedColumn.values ? this.selectedColumn.values.length : 2;\n }\n else {\n length_1 = tempRule.operator && tempRule.operator.toString().toLowerCase().indexOf('between') > -1 ? 2 : 1;\n }\n var parentId = closest(target, '.e-rule-container').id;\n var ruleValElem = void 0;\n var operator = tempRule.operator.toString();\n if (target.className.indexOf('e-rule-operator') > -1 || target.className.indexOf('e-rule-filter') > -1) {\n ruleValElem = target.parentElement.querySelector('.e-rule-value');\n if (this.element.className.indexOf('e-device') > -1 || this.displayMode === 'Vertical') {\n ruleValElem.style.width = '100%';\n }\n else {\n if (operator !== 'in' && operator !== 'notin') {\n addClass([ruleValElem], 'e-custom-value');\n }\n else {\n removeClass([ruleValElem], 'e-custom-value');\n }\n }\n for (var i = 0; i < length_1; i++) {\n switch (tempRule.type) {\n case 'string':\n {\n this.renderStringValue(parentId, rule, operator, i, ruleValElem);\n }\n break;\n case 'number':\n {\n this.renderNumberValue(parentId, rule, operator, i, ruleValElem, itemData, length_1);\n }\n break;\n case 'boolean':\n this.processBoolValues(itemData, rule, parentId, i);\n break;\n case 'date':\n {\n var selectedValue = new Date();\n var selVal = void 0;\n var column = void 0;\n var format = itemData.format;\n var datepick = void 0;\n var datePicker = void 0;\n var place = this.l10n.getConstant('SelectValue');\n var isTemplate = (typeof itemData.template === 'string');\n if (rule.value && !isNullOrUndefined(format)) {\n selVal = (length_1 > 1) ? rule.value[i] : rule.value;\n selectedValue = this.parseDate(selVal, format) || new Date();\n }\n if (!isNullOrUndefined(itemData) && itemData.value && !isTemplate) {\n var parsedDate = this.parseDate(itemData.value.toString(), itemData.format);\n if (parsedDate && !isNaN(parsedDate.getTime())) {\n selectedValue = parsedDate;\n }\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (!itemData.field && !itemData.key && itemData.value) {\n if (itemData.value instanceof Date) {\n selectedValue = itemData.value;\n }\n else {\n selectedValue = this.parseDate(itemData.value, itemData.format);\n }\n }\n if (!itemData.format && rule && rule.field !== '') {\n column = this.getColumn(rule.field);\n format = column.format;\n }\n if ((this.isImportRules || this.isPublic || isTemplate) && rule) {\n column = this.getColumn(rule.field);\n format = column.format;\n if (rule.value) {\n selVal = (length_1 > 1) ? rule.value[i] : rule.value;\n selectedValue = this.parseDate(selVal, column.format);\n }\n else {\n selectedValue = rule.value;\n }\n }\n if (format) {\n var formatObj = this.getFormat(format);\n if (formatObj.skeleton) {\n datePicker = {\n locale: this.getLocale(), value: selectedValue,\n placeholder: place, format: formatObj, change: this.changeValue.bind(this, i)\n };\n if (this.valueModel && this.valueModel.datePickerModel) {\n datePicker = __assign({}, datePicker, this.valueModel.datePickerModel);\n }\n datepick = new DatePicker(datePicker);\n }\n else {\n datePicker = {\n value: selectedValue, locale: this.getLocale(), placeholder: place,\n format: formatObj.format, change: this.changeValue.bind(this, i)\n };\n if (!isNullOrUndefined(column) && !isNullOrUndefined(column.values) && column.values.length > 0) {\n var parsedDate = this.parseDate(column.values[i], format);\n if (!isNullOrUndefined(parsedDate) && parsedDate instanceof Date) {\n datePicker.value = parsedDate;\n if (i === 1) {\n var parsedMinDate = this.parseDate(column.values[0], format);\n if (parsedMinDate instanceof Date && !isNaN(parsedMinDate.getTime())) {\n parsedMinDate.setDate(parsedMinDate.getDate() + 1);\n datePicker.min = parsedMinDate;\n }\n }\n }\n }\n if (this.valueModel && this.valueModel.datePickerModel) {\n datePicker = __assign({}, datePicker, this.valueModel.datePickerModel);\n }\n datepick = new DatePicker(datePicker);\n }\n }\n else {\n datePicker = {\n locale: this.getLocale(), value: selectedValue,\n placeholder: place, change: this.changeValue.bind(this, i)\n };\n if (this.valueModel && this.valueModel.datePickerModel) {\n datePicker = __assign({}, datePicker, this.valueModel.datePickerModel);\n }\n datepick = new DatePicker(datePicker);\n }\n datepick.appendTo('#' + parentId + '_valuekey' + i);\n if (!rule.value) {\n var elem = document.getElementById(parentId + '_valuekey' + i);\n this.updateRules(elem, selectedValue, null, this.isNotValueChange);\n this.isNotValueChange = false;\n }\n }\n break;\n }\n }\n }\n }\n };\n QueryBuilder.prototype.processBoolValues = function (itemData, rule, parentId, i) {\n var isCheck = false;\n var value;\n var orgValue;\n if (isNullOrUndefined(rule.type) && itemData) {\n rule.type = itemData.type;\n }\n var label;\n if (itemData.values) {\n var values = itemData.values;\n if (rule.type === 'boolean' && !isNullOrUndefined(rule.value)) {\n isCheck = values[i].toLowerCase() === rule.value.toString().toLowerCase();\n }\n else if (itemData.value) {\n isCheck = values[i].toLowerCase() === itemData.value.toString().toLowerCase();\n }\n else if (i === 0) {\n isCheck = true;\n }\n orgValue = value = label = values[i];\n }\n else {\n var values = [true, false];\n if (rule.type === 'boolean' && !isNullOrUndefined(rule.value)) {\n isCheck = values[i].toString().toLowerCase() === rule.value.toString().toLowerCase();\n }\n else if (itemData.value) {\n isCheck = values[i].toString().toLowerCase() === itemData.value.toString().toLowerCase();\n }\n else if (i === 0) {\n if (typeof rule.value === 'boolean') {\n isCheck = rule.value ? true : false;\n }\n else {\n isCheck = true;\n }\n }\n if (typeof rule.value === 'boolean' && i === 1) {\n isCheck = !rule.value ? true : false;\n }\n value = values[i].toString();\n orgValue = values[i];\n label = this.l10n.getConstant(['True', 'False'][i]);\n }\n var radioBtn;\n radioBtn = {\n label: label, name: parentId + 'default', checked: isCheck, value: value,\n change: this.changeValue.bind(this, i)\n };\n if (this.valueModel && this.valueModel.radioButtonModel) {\n radioBtn = __assign({}, radioBtn, this.valueModel.radioButtonModel);\n }\n var radiobutton = new RadioButton(radioBtn);\n radiobutton.appendTo('#' + parentId + '_valuekey' + i);\n if (isCheck) {\n this.updateRules(radiobutton.element, orgValue, 0, true);\n }\n };\n QueryBuilder.prototype.getOperatorIndex = function (ddlObj, rule) {\n var i;\n var dataSource = ddlObj.dataSource;\n var len = dataSource.length;\n for (i = 0; i < len; i++) {\n if (rule.operator === ddlObj.dataSource[i].value) {\n return i;\n }\n }\n return 0;\n };\n QueryBuilder.prototype.getPreviousItemData = function (prevItemData, column) {\n if (this.isFieldClose && prevItemData) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n prevItemData = this.getColumn(prevItemData.value ? prevItemData.value : prevItemData.field);\n }\n if (column && column.template && prevItemData && Object.keys(prevItemData).length < 4) {\n prevItemData.template = column.template;\n }\n return prevItemData;\n };\n QueryBuilder.prototype.renderValues = function (target, itemData, prevItemData, isRender, rule, tempRule, element) {\n var subFldElem = target.previousElementSibling;\n var filtElem = subFldElem.getElementsByTagName('input')[0];\n var filtObj = this.fieldMode === 'DropdownTree' ? getComponent(filtElem, 'dropdowntree')\n : getComponent(filtElem, 'dropdownlist');\n var column = this.fieldMode === 'DropdownTree' ? this.getColumn(filtObj.value[0])\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n : this.getColumn(filtObj.value);\n this.selectedRule = column;\n var ddlObj = getComponent(target.querySelector('input'), 'dropdownlist');\n if (isRender) {\n itemData = element.id.indexOf('operator') > -1 ? itemData : this.selectedRule;\n if (itemData.operators) {\n ddlObj.value = null;\n ddlObj.dataBind();\n ddlObj.dataSource = itemData.operators;\n ddlObj.index = this.getOperatorIndex(ddlObj, rule);\n ddlObj.value = tempRule.operator = ddlObj.dataSource[ddlObj.index].value;\n if (!this.autoSelectOperator) {\n ddlObj.index = -1;\n tempRule.operator = ddlObj.value = '';\n }\n else {\n ddlObj.dataBind();\n }\n }\n }\n var operator = tempRule.operator.toString();\n var isTempRendered = false;\n if (!(operator.indexOf('null') > -1 || operator.indexOf('isempty') > -1 || operator.indexOf('isnotempty') > -1)) {\n var parentId = closest(target, '.e-rule-container').id;\n prevItemData = this.getPreviousItemData(prevItemData, column);\n if (prevItemData && prevItemData.template === undefined) {\n if (prevItemData.columns) {\n prevItemData = this.getColumn(rule.field);\n }\n }\n else if (this.fieldMode === 'DropdownTree' && prevItemData === undefined) {\n prevItemData = this.getColumn(rule.field);\n }\n if (prevItemData && prevItemData.template) {\n this.templateDestroy(prevItemData, parentId + '_valuekey0');\n var elem = select('#' + parentId + '_valuekey0', target.nextElementSibling);\n if (elem && !elem.classList.contains('e-control')) {\n detach(select('#' + parentId + '_valuekey0', target.nextElementSibling));\n }\n if (typeof prevItemData.template === 'string' || prevItemData.template.create === undefined) {\n if (target.nextElementSibling.classList.contains('e-template-value')) {\n this.clearQBTemplate([parentId]);\n }\n target.nextElementSibling.innerHTML = '';\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.isAngular && !isNullOrUndefined(prevItemData.key) && this.fieldMode === 'DropdownTree') {\n delete prevItemData.template;\n }\n }\n if (isRender) {\n this.validateValue(rule, closest(target, '.e-rule-container'));\n this.destroyControls(target);\n }\n if (this.isImportRules || (ddlObj && ddlObj.value !== '')) {\n if (column) {\n itemData.template = column.template;\n }\n if (itemData.template) {\n addClass([target.nextElementSibling], 'e-template-value');\n itemData.template = column.template;\n isTempRendered = this.setColumnTemplate(itemData, parentId, column.field, itemData.value ||\n operator, target, rule);\n }\n if (isTempRendered) {\n var parentElem = target.parentElement.querySelector('.e-rule-value');\n if (this.element.className.indexOf('e-device') > -1 || this.displayMode === 'Vertical') {\n parentElem.style.width = '100%';\n }\n else {\n parentElem.style.width = '200px';\n }\n }\n else {\n removeClass([target.nextElementSibling], 'e-template-value');\n var inputLen = 1;\n if (tempRule.type === 'boolean') {\n inputLen = this.selectedColumn.values ? this.selectedColumn.values.length : 2;\n }\n else {\n inputLen = (operator && operator.toLowerCase().indexOf('between') > -1) ? 2 : 1;\n }\n for (var i = 0; i < inputLen; i++) {\n var valElem = this.createElement('input', { attrs: { type: 'text', id: parentId + '_valuekey' + i } });\n target.nextElementSibling.appendChild(valElem);\n }\n }\n this.renderControls(target, itemData, rule, tempRule, isTempRendered);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.isAngular && !isNullOrUndefined(itemData.key) && itemData.template && this.fieldMode === 'DropdownTree') {\n delete itemData.template;\n }\n }\n }\n else {\n var parentElem = target.parentElement.querySelector('.e-rule-value');\n if (parentElem) {\n removeClass([parentElem], 'e-show');\n addClass([parentElem], 'e-hide');\n }\n }\n };\n QueryBuilder.prototype.setColumnTemplate = function (itemData, ruleID, field, operator, target, rule) {\n var _this = this;\n var args;\n var isRendered = true;\n if (!itemData.template) {\n return true;\n }\n else {\n if (typeof itemData.template === 'string' || itemData.template.create === undefined) {\n args = {\n requestType: 'value-template-initialize', ruleID: ruleID, field: field, operator: operator, rule: rule,\n renderTemplate: true\n };\n this.trigger('actionBegin', args, function (observedActionArgs) {\n isRendered = _this.actionBeginSuccessCallBack(observedActionArgs, itemData, ruleID, field, target);\n });\n return isRendered;\n }\n else {\n var valElem = void 0;\n var template = itemData.template;\n if (typeof template.create === 'string') {\n valElem = getValue(template.create, window)({ field: field, operator: operator });\n }\n else {\n valElem = template.create({ field: field, operator: operator });\n }\n if (valElem instanceof Element) {\n valElem.id = ruleID + '_valuekey0';\n addClass([valElem], 'e-template');\n target.nextElementSibling.appendChild(valElem);\n if (field.indexOf(' ') < 0) {\n addClass([valElem], 'e-' + field);\n }\n }\n else if (valElem instanceof Array) {\n addClass(valElem, 'e-template');\n for (var i = 0, iLen = valElem.length; i < iLen; i++) {\n valElem[i].id = ruleID + '_valuekey' + i;\n target.nextElementSibling.appendChild(valElem[i]);\n }\n }\n addClass([target.nextElementSibling], 'e-template-value');\n return true;\n }\n }\n };\n QueryBuilder.prototype.actionBeginSuccessCallBack = function (args, itemData, ruleID, field, target) {\n if (args.renderTemplate) {\n var valElem = void 0;\n this.columnTemplateFn = this.templateParser(typeof itemData.template === 'function' ? itemData.template : itemData.template);\n var templateID = this.element.id + field;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.isReact) {\n valElem = this.columnTemplateFn(args, this, ruleID, templateID)[0];\n target.nextElementSibling.appendChild(valElem);\n } // eslint-disable-next-line @typescript-eslint/no-explicit-any\n else if (this.isAngular) {\n var valElemColl = this.columnTemplateFn(args, this, ruleID, templateID);\n valElem = (valElemColl[0].nodeType === 3) ? valElemColl[1] : valElemColl[0];\n target.nextElementSibling.appendChild(valElem);\n } // eslint-disable-next-line @typescript-eslint/no-explicit-any\n else if (this.isVue3) {\n valElem = this.columnTemplateFn(args, this, 'Template', templateID);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n append(valElem, target.nextElementSibling);\n }\n else {\n valElem = this.columnTemplateFn(args, this, 'Template', templateID)[0];\n target.nextElementSibling.appendChild(valElem);\n }\n addClass([target.nextElementSibling], 'e-template-value');\n this.renderReactTemplates();\n return true;\n }\n else {\n return false;\n }\n };\n QueryBuilder.prototype.updateValues = function (element, rule) {\n var idx = 1;\n if (element.className.indexOf('e-template') > -1) {\n idx = 3;\n }\n var controlName = element.className.split(' e-')[idx];\n var i = parseInt(element.id.slice(-1), 2);\n var column;\n var format;\n var selectedDate;\n var value;\n var radioBtnObj;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var textboxValue;\n switch (controlName) {\n case 'checkbox':\n value = getComponent(element, controlName).value;\n rule.value = (value !== '') ? value : undefined;\n break;\n case 'textbox':\n textboxValue = getComponent(element, controlName).value;\n if (rule.operator.indexOf('between') > -1) {\n if (typeof rule.value === 'string') {\n rule.value = [];\n }\n rule.value[i] = textboxValue;\n }\n else if (['in', 'notin'].some(function (op) { return rule.operator.indexOf(op) !== -1; })\n && rule.operator.indexOf('contains') === -1) {\n rule.value = textboxValue ?\n (rule.type === 'string' ? textboxValue.split(',').map(function (val) { return val.trim(); }) :\n textboxValue.split(',').map(Number)) : [];\n }\n else {\n rule.value = textboxValue;\n }\n break;\n case 'dropdownlist':\n rule.value = getComponent(element, controlName).value;\n break;\n case 'radio':\n radioBtnObj = getComponent(element, controlName);\n if (radioBtnObj.checked) {\n if (typeof rule.value === 'boolean') {\n rule.value = radioBtnObj.value === 'true';\n }\n else {\n if (this.getColumn(rule.field).values) {\n rule.value = radioBtnObj.value;\n }\n else {\n rule.value = radioBtnObj.value === 'true';\n }\n }\n }\n radioBtnObj.refresh();\n break;\n case 'numerictextbox':\n if (rule.operator.indexOf('between') > -1) {\n if (typeof rule.value === 'string') {\n rule.value = [];\n }\n rule.value[i] = getComponent(element, controlName).value;\n }\n else {\n rule.value = getComponent(element, controlName).value;\n }\n break;\n case 'datepicker':\n column = this.getColumn(rule.field);\n format = this.getFormat(column.format);\n selectedDate = getComponent(element, controlName).value;\n if (rule.operator.indexOf('between') > -1) {\n if (typeof rule.value === 'string') {\n rule.value = [];\n }\n rule.value[i] = this.intl.formatDate(selectedDate, format);\n }\n else if (isNullOrUndefined(format.format) && selectedDate) {\n rule.value = this.intl.formatDate(selectedDate);\n }\n else if (selectedDate) {\n rule.value = this.intl.formatDate(selectedDate, format);\n }\n else {\n rule.value = selectedDate;\n }\n break;\n case 'multiselect':\n rule.value = getComponent(element, controlName).value;\n break;\n }\n };\n QueryBuilder.prototype.updateRules = function (target, selectedValue, i, isNotTrigger) {\n var groupElem = closest(target, '.e-group-container');\n var rule = this.getParentGroup(groupElem);\n var ruleElem = closest(target, '.e-rule-container');\n var index = 0;\n var dropDownObj;\n var eventsArgs;\n var groupID = groupElem.id.replace(this.element.id + '_', '');\n var beforeRules = this.getValidRules(this.rule);\n while (ruleElem && ruleElem.previousElementSibling !== null) {\n ruleElem = ruleElem.previousElementSibling;\n if (!this.enableSeparateConnector || (this.enableSeparateConnector &&\n ((!this.headerTemplate && !ruleElem.classList.contains('e-btn-group')) ||\n this.headerTemplate && (ruleElem.classList.contains('e-rule-container') ||\n ruleElem.classList.contains('e-group-container'))))) {\n index++;\n }\n }\n var operator = rule.rules[index].operator ? rule.rules[index].operator.toString() : '';\n ruleElem = closest(target, '.e-rule-container');\n var ruleID = ruleElem.id.replace(this.element.id + '_', '');\n if (closest(target, '.e-rule-filter') || closest(target, '.e-rule-sub-filter')) {\n if (this.subFieldElem) {\n target = this.subFieldElem;\n }\n dropDownObj = this.fieldMode === 'DropdownTree' ? getComponent(target, 'dropdowntree') :\n getComponent(target, 'dropdownlist');\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var column = this.fieldMode === 'DropdownTree' ? this.getColumn(dropDownObj.value[0])\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n : this.getColumn(dropDownObj.value);\n if (!this.isImportRules && rule.rules[index].field &&\n rule.rules[index].field.toLowerCase() !== column.field.toLowerCase()) {\n if (!(ruleElem.querySelectorAll('.e-template')) && !(operator.indexOf('null') > -1)\n || (operator.indexOf('empty') > -1)) {\n rule.rules[index].value = '';\n }\n }\n this.selectedColumn = this.getColumn(this.selectedColumn.field);\n rule.rules[index].field = this.selectedColumn.field;\n rule.rules[index].type = this.selectedColumn.type;\n rule.rules[index].label = this.selectedColumn.label;\n var ruleElement = closest(target, '.e-rule-filter');\n ruleElement = ruleElement ? ruleElement : closest(target, '.e-rule-sub-filter');\n var element = ruleElement.nextElementSibling.querySelector('input.e-control');\n element = element ? element : ruleElement.nextElementSibling.nextElementSibling.querySelector('input.e-control');\n operator = getComponent(element, 'dropdownlist').value.toString();\n rule.rules[index].operator = operator;\n var valueContainer = ruleElement.nextElementSibling.nextElementSibling;\n var elementCln = valueContainer.querySelectorAll('input.e-control');\n if (elementCln.length < 1) {\n elementCln = valueContainer.querySelectorAll('div.e-control');\n }\n if (elementCln.length < 1) {\n elementCln = valueContainer.querySelectorAll('.e-template');\n }\n eventsArgs = { groupID: groupID, ruleID: ruleID, value: rule.rules[index].field, type: 'field' };\n for (var i_1 = 0; i_1 < elementCln.length; i_1++) {\n if (operator.indexOf('null') > -1 || operator.indexOf('empty') > -1) {\n rule.rules[index].value = null;\n continue;\n }\n this.updateValues(elementCln[i_1], rule.rules[index]);\n }\n if (!this.isImportRules && !this.prvtEvtTgrDaD) {\n this.trigger('change', eventsArgs);\n }\n if (this.allowValidation && rule.rules[index].field && target.parentElement.className.indexOf('e-tooltip') > -1) {\n getComponent(target.parentElement, 'tooltip').destroy();\n }\n this.filterRules(beforeRules, this.getValidRules(this.rule), 'field');\n }\n else if (closest(target, '.e-rule-operator')) {\n dropDownObj = getComponent(target, 'dropdownlist');\n rule.rules[index].operator = dropDownObj.value.toString();\n var inputElem = ruleElem.querySelectorAll('.e-rule-value input.e-control');\n eventsArgs = { groupID: groupID, ruleID: ruleID, value: dropDownObj.value, type: 'operator' };\n if (this.allowValidation && rule.rules[index].operator && target.parentElement.className.indexOf('e-tooltip') > -1) {\n getComponent(target.parentElement, 'tooltip').destroy();\n }\n if (inputElem.length > 1 && !(inputElem[0].className.indexOf('e-template') > -1)) {\n rule.rules[index].value = [];\n }\n for (var i_2 = 0; i_2 < inputElem.length; i_2++) {\n if (rule.rules[index].operator.indexOf('null') > -1 || rule.rules[index].operator.indexOf('empty') > -1) {\n rule.rules[index].value = null;\n continue;\n }\n else if (inputElem[i_2].classList.contains('e-template')) {\n continue;\n }\n this.updateValues(inputElem[i_2], rule.rules[index]);\n }\n if (!this.isImportRules) {\n this.trigger('change', eventsArgs);\n }\n this.filterRules(beforeRules, this.getValidRules(this.rule), 'operator');\n }\n else if (closest(target, '.e-rule-value')) {\n this.ruleValueUpdate(target, selectedValue, rule, index, groupElem, ruleElem, i);\n if (!isNotTrigger) {\n this.filterRules(beforeRules, this.getValidRules(this.rule), 'value');\n }\n }\n };\n QueryBuilder.prototype.filterRules = function (beforeRule, afterRule, type) {\n var beforeRuleStr = JSON.stringify({ condition: beforeRule.condition, not: beforeRule.not, rule: beforeRule.rules });\n var afetrRuleStr = JSON.stringify({ condition: afterRule.condition, not: afterRule.not, rule: afterRule.rules });\n if (beforeRuleStr !== afetrRuleStr) {\n if (!this.isImportRules && !this.prvtEvtTgrDaD) {\n this.trigger('ruleChange', { previousRule: beforeRule, rule: afterRule, type: type });\n }\n }\n };\n QueryBuilder.prototype.ruleValueUpdate = function (target, selectedValue, rule, index, groupElem, ruleElem, i) {\n var eventsArgs;\n var oper;\n var arrOperator = ['in', 'between', 'notin', 'notbetween'];\n if (rule.rules[index].operator) {\n oper = rule.rules[index].operator.toString().toLowerCase();\n }\n if (selectedValue !== null) {\n if (target.className.indexOf('e-multiselect') > -1 && rule.rules[index].type === 'number' &&\n !this.isNotified) {\n var selVal = [];\n var dupSelectedValue = selectedValue;\n for (var k = 0, kLen = dupSelectedValue.length; k < kLen; k++) {\n if (typeof dupSelectedValue[k] === 'string') {\n selVal.push(parseFloat(dupSelectedValue[k]));\n }\n }\n if (selVal.length) {\n selectedValue = selVal;\n }\n }\n if (this.isNotified) {\n rule.rules[index].value = selectedValue;\n eventsArgs = { groupID: groupElem.id, ruleID: ruleElem.id, value: rule.rules[index].value, type: 'value' };\n if (!this.isImportRules) {\n this.trigger('change', eventsArgs);\n }\n }\n else if (target.className.indexOf('e-spin') > -1 || target.className.indexOf('e-numeric') > -1) {\n if (arrOperator.indexOf(oper) > -1) {\n rule.rules[index].value[i] = selectedValue;\n }\n else {\n rule.rules[index].value = selectedValue;\n }\n }\n else if (target.className.indexOf('e-radio') > -1) {\n rule.rules[index].value = selectedValue;\n }\n else if (target.className.indexOf('e-multiselect') > -1) {\n rule.rules[index].value = selectedValue;\n }\n else if (target.className.indexOf('e-textbox') > -1) {\n if (oper === 'in' || oper === 'notin') {\n if (rule.rules[index].type === 'string') {\n rule.rules[index].value = this.processValueString(selectedValue, rule.rules[index].type);\n }\n else {\n rule.rules[index].value = this.processValueString(selectedValue, rule.rules[index].type);\n }\n }\n else if (oper === 'between' || oper === 'notbetween') {\n if (typeof rule.rules[index].value === 'string') {\n rule.rules[index].value = [];\n }\n rule.rules[index].value[i] = selectedValue;\n }\n else {\n rule.rules[index].value = selectedValue;\n }\n }\n else if (target.className.indexOf('e-datepicker') > -1) {\n var format = this.getFormat(this.getColumn(this.selectedColumn.field).format);\n if (format.type) {\n if (arrOperator.indexOf(oper) > -1) {\n if (typeof rule.rules[index].value === 'string') {\n rule.rules[index].value = [];\n }\n rule.rules[index].value[i] = this.intl.formatDate(selectedValue, format);\n }\n else {\n rule.rules[index].value = this.intl.formatDate(selectedValue, format);\n }\n }\n }\n this.validateValue(rule, ruleElem, index);\n }\n else {\n if (target.className.indexOf('e-datepicker') > -1) {\n if (arrOperator.indexOf(oper) > -1) {\n if (typeof rule.rules[index].value === 'string') {\n rule.rules[index].value = [];\n }\n rule.rules[index].value[i] = selectedValue;\n }\n else {\n rule.rules[index].value = selectedValue;\n }\n }\n else {\n rule.rules[index].value = selectedValue;\n }\n }\n };\n QueryBuilder.prototype.validateValue = function (rule, ruleElem, index) {\n if (isNullOrUndefined(rule) && isNullOrUndefined(ruleElem)) {\n return;\n }\n if (!isNullOrUndefined(index)) {\n rule = rule.rules[index];\n }\n var isObject = typeof (rule.value) === 'object';\n if (this.allowValidation && (isNullOrUndefined(index) || (isObject ? rule.value.length > 0 : rule.value))) {\n var valElem = ruleElem.querySelectorAll('.e-rule-value .e-control');\n if (valElem.length > 0) {\n if (valElem[0].className.indexOf('e-tooltip') > -1) {\n getComponent(valElem[0], 'tooltip').destroy();\n }\n else if (valElem[0].parentElement.className.indexOf('e-tooltip') > -1) {\n getComponent(valElem[0].parentElement, 'tooltip').destroy();\n }\n if (valElem[1] && valElem[1].parentElement.className.indexOf('e-tooltip') > -1) {\n getComponent(valElem[1].parentElement, 'tooltip').destroy();\n }\n if (valElem[2] && valElem[2].parentElement.className.indexOf('e-tooltip') > -1) {\n getComponent(valElem[2].parentElement, 'tooltip').destroy();\n }\n }\n }\n };\n QueryBuilder.prototype.getFormat = function (format) {\n var formatOptions;\n if (format) {\n if (typeof (format) === 'string') {\n formatOptions = { type: 'dateTime' };\n if (format === 'short' || format === 'yMd') {\n formatOptions.type = 'date';\n formatOptions.skeleton = format;\n }\n else {\n formatOptions.format = format;\n }\n }\n else {\n formatOptions = { type: 'dateTime', skeleton: format.skeleton };\n }\n }\n else {\n formatOptions = { type: 'date', skeleton: 'yMd' };\n }\n return formatOptions;\n };\n QueryBuilder.prototype.findGroupByIdx = function (groupIdx, rule, isRoot) {\n var ruleColl = rule.rules;\n var dupRuleColl = [];\n if (!isRoot) {\n for (var j = 0, jLen = ruleColl.length; j < jLen; j++) {\n rule = ruleColl[j];\n if (rule.rules) {\n dupRuleColl.push(rule);\n }\n }\n return dupRuleColl[groupIdx];\n }\n return rule;\n };\n /**\n * Removes the component from the DOM and detaches all its related event handlers.\n * Also it maintains the initial input element from the DOM.\n *\n * @method destroy\n * @returns {void}\n */\n QueryBuilder.prototype.destroy = function () {\n this.isDestroy = true;\n var queryElement = this.element;\n if (!queryElement) {\n return;\n }\n var element;\n var i;\n var len;\n var tooltip;\n _super.prototype.destroy.call(this);\n element = this.element.querySelectorAll('.e-addrulegroup');\n len = element.length;\n for (i = 0; i < len; i++) {\n getComponent(element[i], 'dropdown-btn').destroy();\n detach(element[i]);\n }\n tooltip = this.element.querySelectorAll('.e-rule-filter .e-control.e-tooltip');\n for (i = 0; i < tooltip.length; i++) {\n getComponent(tooltip[i], 'tooltip').destroy();\n }\n element = this.element.querySelectorAll('.e-rule-filter .e-control:not(.e-tooltip)');\n len = element.length;\n for (i = 0; i < len; i++) {\n if (getComponent(element[i], 'dropdownlist')) {\n getComponent(element[i], 'dropdownlist').destroy();\n }\n else {\n getComponent(element[i], 'dropdowntree').destroy();\n }\n detach(element[i]);\n }\n tooltip = this.element.querySelectorAll('.e-rule-operator .e-control.e-tooltip');\n for (i = 0; i < tooltip.length; i++) {\n getComponent(tooltip[i], 'tooltip').destroy();\n }\n element = this.element.querySelectorAll('.e-rule-operator .e-control:not(.e-tooltip)');\n len = element.length;\n for (i = 0; i < len; i++) {\n if (getComponent(element[i], 'dropdownlist')) {\n getComponent(element[i], 'dropdownlist').destroy();\n detach(element[i]);\n }\n }\n tooltip = this.element.querySelectorAll('.e-rule-value .e-control.e-tooltip');\n for (i = 0; i < tooltip.length; i++) {\n getComponent(tooltip[i], 'tooltip').destroy();\n }\n this.isImportRules = false;\n this.unWireEvents();\n this.levelColl[this.element.id + '_group0'] = [0];\n this.element.innerHTML = '';\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.portals && this.portals.length) {\n this.clearQBTemplate();\n }\n var qbDdlElems = this.element.querySelectorAll('.qb-dropdownlist');\n if (qbDdlElems && qbDdlElems.length > 0) {\n for (i = 0; i < qbDdlElems.length; i++) {\n var ddlElem = qbDdlElems[i];\n if (this.element.contains(ddlElem)) {\n var targetInput = ddlElem.tagName === 'INPUT' ? ddlElem : ddlElem.querySelector('input');\n if (targetInput) {\n var ddlInst = getComponent(targetInput, 'dropdownlist');\n if (ddlInst) {\n if (ddlInst.close) {\n ddlInst.close = null;\n }\n if (ddlInst.open) {\n ddlInst.open = null;\n }\n if (ddlInst.change) {\n ddlInst.change = null;\n }\n ddlInst.destroy();\n }\n }\n }\n }\n }\n // Cleanup orphaned popup elements\n var popupElement = this.element.querySelectorAll('.e-popup.e-dropdownlist');\n if (popupElement && popupElement.length > 0) {\n for (i = 0; i < popupElement.length; i++) {\n popupElement[i].remove();\n }\n }\n classList(this.element, [], ['e-rtl', 'e-responsive', 'e-device']);\n this.isDestroy = false;\n _super.prototype.destroy.call(this);\n };\n /**\n * Adds single or multiple rules.\n *\n * @param {RuleModel[]} rule - 'rule collection' to be passed to add the rules.\n * @param {string} groupID - 'group id' to be passed to add the rule in groups.\n * @returns {void}.\n */\n QueryBuilder.prototype.addRules = function (rule, groupID) {\n groupID = this.element.id + '_' + groupID;\n this.isPublic = true;\n for (var i = 0, len = rule.length; i < len; i++) {\n this.addRuleElement(document.getElementById(groupID), rule[i]);\n }\n this.isPublic = false;\n };\n /**\n * Adds single or multiple groups, which contains the collection of rules.\n *\n * @param {RuleModel[]} groups - 'group collection' to be passed to add the groups.\n * @param {string} groupID - 'group id' to be passed to add the groups.\n * @returns {void}.\n */\n QueryBuilder.prototype.addGroups = function (groups, groupID) {\n if (this.isAddSuccess || this.element.querySelectorAll('.e-group-container').length <= this.maxGroupCount) {\n groupID = this.element.id + '_' + groupID;\n var groupElem = document.getElementById(groupID);\n var temp = this.groupIndex;\n var rule = this.getParentGroup(groupElem);\n var grouplen = groups.length;\n if (grouplen) {\n this.isPublic = true;\n for (var i = 0, len = groups.length; i < len; i++) {\n this.updatedRule = {\n isLocked: groups[i].isLocked, condition: groups[i].condition,\n not: groups[i].not\n };\n this.importRules(groups[i], groupElem, false, groups[i].not);\n }\n this.isPublic = false;\n }\n else {\n var condition = 'and';\n var not = false;\n var isLocked = false;\n if (this.updatedRule) {\n condition = this.updatedRule.condition;\n not = this.updatedRule.not;\n isLocked = this.updatedRule.isLocked;\n }\n if (this.groupCloned && this.target instanceof HTMLElement &&\n this.getGroup(this.target).rules.length > 1) {\n var parent_1 = this.element.querySelector('#' + groupID);\n var allContainers = parent_1.querySelectorAll(':scope > .e-group-body > .e-rule-list > [class*=\"-container\"]');\n var topLevelGroups = parent_1.querySelectorAll(':scope > .e-group-body > .e-rule-list > .e-group-container');\n if (topLevelGroups.length > 0 && groupID !== 'querybuilder_group0' && !(this.isAngular && groupID === this.initialID + '_group0')) {\n var lastGroupIndex = -1;\n var lastGroup = topLevelGroups[topLevelGroups.length - 1];\n for (var i = 0; i < allContainers.length; i++) {\n if (allContainers[i] === lastGroup) {\n lastGroupIndex = i;\n break;\n }\n }\n this.groupIndex = lastGroupIndex - 1;\n }\n }\n if (this.groupIndex < 0) {\n if (this.enableNotCondition) {\n rule.rules.push({ 'condition': condition, 'not': not, rules: [] });\n }\n else {\n rule.rules.push({ 'condition': condition, rules: [] });\n }\n }\n else {\n if (this.enableNotCondition) {\n rule.rules.splice(this.groupIndex + 1, 0, { condition: condition, not: not, rules: [], isLocked: isLocked });\n }\n else {\n rule.rules.splice(this.groupIndex + 1, 0, { condition: condition, rules: [], isLocked: isLocked });\n }\n }\n if (this.groupCloned) {\n this.groupIndex = temp;\n }\n }\n if (!this.headerTemplate) {\n this.disableRuleCondition(groupElem, rule, null, this.enableSeparateConnector ? true : null);\n }\n }\n };\n QueryBuilder.prototype.initWrapper = function () {\n this.isInitialLoad = true;\n if (this.cssClass) {\n addClass([this.element], this.cssClass.replace(/\\s+/g, ' ').trim().split(' '));\n }\n if (this.enableSeparateConnector) {\n addClass([this.element], 'e-multi-connector');\n }\n if (this.enableRtl) {\n addClass([this.element], 'e-rtl');\n }\n if (this.width) {\n this.element.style.width = this.width;\n }\n if (this.height) {\n this.element.style.height = this.height;\n }\n if (this.rule.rules.length) {\n this.isImportRules = true;\n }\n else {\n this.addGroupElement(false, this.element);\n }\n if (Browser.isDevice || (window.innerWidth < 768 && !this.isPropChange) || this.displayMode === 'Vertical') {\n if (Browser.isDevice || window.innerWidth < 768) {\n this.element.style.width = '100%';\n this.element.classList.add('e-device');\n }\n removeClass(this.element.querySelectorAll('.e-rule-container'), 'e-horizontal-mode');\n addClass(this.element.querySelectorAll('.e-rule-container'), 'e-vertical-mode');\n this.displayMode = 'Vertical';\n }\n else {\n this.displayMode = 'Horizontal';\n }\n if (this.summaryView) {\n if (this.isImportRules) {\n this.renderSummary();\n }\n else {\n this.renderSummaryCollapse();\n }\n }\n else {\n if (this.columns && this.columns.length && this.isImportRules) {\n this.addGroupElement(false, this.element, this.rule.condition, false, this.rule.not, false, this.rule);\n var mRules = extend({}, this.rule, {}, true);\n this.isRefreshed = true;\n this.setGroupRules(mRules);\n this.isRefreshed = false;\n }\n else if (this.columns && this.columns.length) {\n this.addRuleElement(this.element.querySelector('.e-group-container'), {});\n }\n this.notGroupRtl();\n if (this.readonly) {\n this.enableReadonly();\n }\n var buttons = this.element.querySelectorAll('label.e-btn');\n var button = void 0;\n for (var i = 0; i < buttons.length; i++) {\n button = buttons.item(i);\n rippleEffect(button, { selector: '.e-btn' });\n }\n }\n };\n QueryBuilder.prototype.renderSummary = function () {\n var contentElem = this.createElement('div', {\n attrs: {\n class: 'e-summary-content',\n id: this.element.id + '_summary_content'\n }\n });\n var textElem = this.createElement('textarea', { attrs: { class: 'e-summary-text', readonly: 'true' }, styles: 'max-height:500px' });\n var editElem = this.createElement('button', { attrs: { type: 'button', class: 'e-edit-rule e-css e-btn e-small e-flat e-primary' } });\n var divElem = this.createElement('div', { attrs: { class: 'e-summary-btndiv' } });\n contentElem.appendChild(textElem);\n textElem.textContent = this.getSqlFromRules(this.rule);\n editElem.textContent = this.l10n.getConstant('Edit');\n divElem.appendChild(editElem);\n contentElem.appendChild(divElem);\n this.element.appendChild(contentElem);\n };\n QueryBuilder.prototype.renderSummaryCollapse = function () {\n var collapseElem = this.createElement('div', {\n attrs: {\n class: 'e-collapse-rule e-icons',\n title: this.l10n.getConstant('SummaryViewTitle')\n }\n });\n this.element.querySelector('.e-group-header').appendChild(collapseElem);\n };\n QueryBuilder.prototype.columnSort = function () {\n if (this.sortDirection && this.sortDirection.toLowerCase() === 'descending') {\n this.columns = new DataManager(this.columns).executeLocal(new Query().sortByDesc('field'));\n }\n else if (this.sortDirection && this.sortDirection.toLowerCase() === 'ascending') {\n this.columns = new DataManager(this.columns).executeLocal(new Query().sortBy('field'));\n }\n };\n QueryBuilder.prototype.onChangeNotGroup = function () {\n this.element.innerHTML = '';\n this.groupIdCounter = 0;\n if (!this.headerTemplate) {\n if (this.enableNotCondition) {\n var inputElem = this.createElement('button', { attrs: { type: 'button', class: 'e-qb-toggle' } });\n if (this.groupElem.querySelector('.e-btn-group')) {\n this.groupElem.querySelector('.e-btn-group').insertBefore(inputElem, this.groupElem.querySelector('.e-btngroup-and'));\n }\n }\n else {\n this.groupElem.querySelector('.e-qb-toggle').remove();\n }\n }\n this.setProperties({ rule: this.checkNotGroup(this.rule) }, true);\n this.initWrapper();\n };\n QueryBuilder.prototype.notGroupRtl = function () {\n if (this.enableRtl) {\n addClass(this.element.querySelectorAll('.e-btn-group'), 'e-rtl');\n }\n else {\n removeClass(this.element.querySelectorAll('.e-btn-group'), 'e-rtl');\n }\n };\n QueryBuilder.prototype.checkNotGroup = function (rule) {\n var orgRule;\n if (rule.rules) {\n for (var i = 0; i < rule.rules.length; i++) {\n orgRule = rule.rules[i];\n orgRule = this.checkNotGroup(orgRule);\n rule.rules[i] = orgRule;\n }\n }\n if (!isNullOrUndefined(rule.not)) {\n if (this.enableNotCondition) {\n rule.not = false;\n }\n delete rule.not;\n }\n else if (this.enableNotCondition && !isNullOrUndefined(rule.condition)) {\n rule.not = false;\n }\n return rule;\n };\n QueryBuilder.prototype.onPropertyChanged = function (newProp, oldProp) {\n var properties = Object.keys(newProp);\n this.isPropChange = true;\n var groupElem = this.element.querySelector('.e-group-container');\n var summaryElem = this.element.querySelector('.e-summary-content');\n for (var _i = 0, properties_1 = properties; _i < properties_1.length; _i++) {\n var prop = properties_1[_i];\n switch (prop) {\n case 'summaryView':\n if (newProp.summaryView) {\n groupElem.style.display = 'none';\n if (this.element.querySelectorAll('.e-summary-content').length < 1) {\n this.renderSummary();\n summaryElem = this.element.querySelector('.e-summary-content');\n }\n else {\n this.element.querySelector('.e-summary-text').textContent = this.getSqlFromRules(this.rule);\n }\n summaryElem.style.display = 'block';\n }\n else {\n if (groupElem.querySelectorAll('.e-collapse-rule').length > -1) {\n this.renderSummaryCollapse();\n }\n groupElem.style.display = 'block';\n summaryElem.style.display = 'none';\n }\n break;\n case 'displayMode':\n this.refresh();\n break;\n case 'showButtons':\n if (!isNullOrUndefined(newProp.showButtons.lockGroup)) {\n if (newProp.showButtons.lockGroup) {\n removeClass(this.element.querySelectorAll('.e-lock-grp-btn'), 'e-button-hide');\n }\n else {\n addClass(this.element.querySelectorAll('.e-lock-grp-btn'), 'e-button-hide');\n }\n }\n if (!isNullOrUndefined(newProp.showButtons.lockRule)) {\n if (newProp.showButtons.lockRule) {\n removeClass(this.element.querySelectorAll('.e-lock-rule-btn'), 'e-button-hide');\n }\n else {\n addClass(this.element.querySelectorAll('.e-lock-rule-btn'), 'e-button-hide');\n }\n }\n if (!isNullOrUndefined(newProp.showButtons.cloneGroup)) {\n if (newProp.showButtons.cloneGroup) {\n removeClass(this.element.querySelectorAll('.e-clone-grp-btn'), 'e-button-hide');\n }\n else {\n addClass(this.element.querySelectorAll('.e-clone-grp-btn'), 'e-button-hide');\n }\n }\n if (!isNullOrUndefined(newProp.showButtons.cloneRule)) {\n if (newProp.showButtons.cloneRule) {\n removeClass(this.element.querySelectorAll('.e-clone-rule-btn'), 'e-button-hide');\n }\n else {\n addClass(this.element.querySelectorAll('.e-clone-rule-btn'), 'e-button-hide');\n }\n }\n if (!isNullOrUndefined(newProp.showButtons.ruleDelete)) {\n if (newProp.showButtons.ruleDelete) {\n removeClass(this.element.querySelectorAll('.e-rule-delete'), 'e-button-hide');\n }\n else {\n addClass(this.element.querySelectorAll('.e-rule-delete'), 'e-button-hide');\n }\n }\n if (!isNullOrUndefined(newProp.showButtons.groupDelete)) {\n if (newProp.showButtons.groupDelete) {\n removeClass(this.element.querySelectorAll('.e-deletegroup'), 'e-button-hide');\n }\n else {\n addClass(this.element.querySelectorAll('.e-deletegroup'), 'e-button-hide');\n }\n }\n break;\n case 'cssClass':\n if (oldProp.cssClass) {\n removeClass([this.element], oldProp.cssClass.split(' '));\n }\n if (newProp.cssClass) {\n addClass([this.element], newProp.cssClass.replace(/\\s+/g, ' ').trim().split(' '));\n }\n break;\n case 'enableRtl':\n if (newProp.enableRtl) {\n addClass([this.element], 'e-rtl');\n this.notGroupRtl();\n }\n else {\n removeClass([this.element], 'e-rtl');\n this.notGroupRtl();\n }\n break;\n case 'enablePersistence':\n this.enablePersistence = newProp.enablePersistence;\n break;\n case 'dataSource':\n this.dataSource = newProp.dataSource;\n this.refresh();\n break;\n case 'columns':\n this.columns = newProp.columns;\n this.columnSort();\n this.updateSubFieldsFromColumns(this.columns);\n break;\n case 'sortDirection':\n this.sortDirection = newProp.sortDirection;\n this.columnSort();\n break;\n case 'maxGroupCount':\n this.maxGroupCount = newProp.maxGroupCount;\n break;\n case 'height':\n this.height = newProp.height;\n this.element.style.height = this.height;\n break;\n case 'rule':\n if (this.rule.rules.length === 0 && !isNullOrUndefined(this.rule)) {\n this.reset();\n }\n this.setProperties({ rule: newProp.rule }, true);\n newProp.rule = this.getRuleCollection(this.rule, false);\n this.setRules(this.rule);\n break;\n case 'width':\n this.width = newProp.width;\n this.element.style.width = this.width;\n break;\n case 'locale':\n this.locale = newProp.locale;\n this.intl = new Internationalization(this.locale);\n this.isLocale = true;\n this.refresh();\n this.isLocale = false;\n break;\n case 'enableNotCondition':\n this.onChangeNotGroup();\n break;\n case 'readonly':\n this.isReadonly = newProp.readonly;\n this.enableReadonly();\n break;\n case 'allowDragAndDrop':\n this.allowDragAndDrop = newProp.allowDragAndDrop;\n this.refresh();\n break;\n case 'enableSeparateConnector':\n this.enableSeparateConnector = newProp.enableSeparateConnector;\n this.refresh();\n break;\n }\n }\n this.isPropChange = false;\n };\n QueryBuilder.prototype.preRender = function () {\n this.element.id = this.element.id || getUniqueID('ej2-querybuilder');\n this.initialID = this.element.id;\n this.defaultLocale = {\n StartsWith: 'Starts With',\n DoesNotStartWith: 'Does Not Start With',\n EndsWith: 'Ends With',\n DoesNotEndWith: 'Does Not End With',\n Contains: 'Contains',\n DoesNotContain: 'Does Not Contain',\n NotLike: 'Not Like',\n Like: 'Like',\n Equal: 'Equal',\n NotEqual: 'Not Equal',\n LessThan: 'Less Than',\n LessThanOrEqual: 'Less Than Or Equal',\n GreaterThan: 'Greater Than',\n GreaterThanOrEqual: 'Greater Than Or Equal',\n Between: 'Between',\n NotBetween: 'Not Between',\n In: 'In',\n NotIn: 'Not In',\n Remove: 'REMOVE',\n SelectField: 'Select a field',\n SelectOperator: 'Select operator',\n DeleteRule: 'Remove this condition',\n DeleteGroup: 'Delete group',\n AddGroup: 'Add Group',\n AddCondition: 'Add Condition',\n Edit: 'EDIT',\n ValidationMessage: 'This field is required',\n SummaryViewTitle: 'Summary View',\n OtherFields: 'Other Fields',\n AND: 'AND',\n OR: 'OR',\n NOT: 'NOT',\n SelectValue: 'Enter Value',\n IsEmpty: 'Is Empty',\n IsNotEmpty: 'Is Not Empty',\n IsNull: 'Is Null',\n IsNotNull: 'Is Not Null',\n True: 'true',\n False: 'false',\n AddButton: 'Add Group/Condition',\n CloneGroup: 'Clone Group',\n LockGroup: 'Lock Group',\n CloneRule: 'Clone Rule',\n LockRule: 'Lock Rule',\n UnlockRule: 'Unlock Rule',\n UnlockGroup: 'Unlock Group'\n };\n this.l10n = new L10n('querybuilder', this.defaultLocale, this.locale);\n this.intl = new Internationalization(this.locale);\n this.groupIdCounter = 0;\n this.subFilterCounter = 0;\n this.ruleIdCounter = 0;\n this.btnGroupId = 0;\n this.isImportRules = false;\n this.parser = [];\n this.customOperators = {\n stringOperator: [\n { value: 'startswith', key: this.l10n.getConstant('StartsWith') },\n { value: 'notstartswith', key: this.l10n.getConstant('DoesNotStartWith') },\n { value: 'endswith', key: this.l10n.getConstant('EndsWith') },\n { value: 'notendswith', key: this.l10n.getConstant('DoesNotEndWith') },\n { value: 'contains', key: this.l10n.getConstant('Contains') },\n { value: 'notcontains', key: this.l10n.getConstant('DoesNotContain') },\n { value: 'equal', key: this.l10n.getConstant('Equal') },\n { value: 'notequal', key: this.l10n.getConstant('NotEqual') },\n { value: 'in', key: this.l10n.getConstant('In') },\n { value: 'notin', key: this.l10n.getConstant('NotIn') },\n { value: 'isempty', key: this.l10n.getConstant('IsEmpty') },\n { value: 'isnotempty', key: this.l10n.getConstant('IsNotEmpty') }\n ],\n dateOperator: [\n { value: 'equal', key: this.l10n.getConstant('Equal') },\n { value: 'greaterthan', key: this.l10n.getConstant('GreaterThan') },\n { value: 'greaterthanorequal', key: this.l10n.getConstant('GreaterThanOrEqual') },\n { value: 'lessthan', key: this.l10n.getConstant('LessThan') },\n { value: 'lessthanorequal', key: this.l10n.getConstant('LessThanOrEqual') },\n { value: 'notequal', key: this.l10n.getConstant('NotEqual') },\n { value: 'between', key: this.l10n.getConstant('Between') },\n { value: 'notbetween', key: this.l10n.getConstant('NotBetween') }\n ],\n booleanOperator: [\n { value: 'equal', key: this.l10n.getConstant('Equal') },\n { value: 'notequal', key: this.l10n.getConstant('NotEqual') }\n ],\n numberOperator: [\n { value: 'equal', key: this.l10n.getConstant('Equal') },\n { value: 'greaterthanorequal', key: this.l10n.getConstant('GreaterThanOrEqual') },\n { value: 'greaterthan', key: this.l10n.getConstant('GreaterThan') },\n { value: 'between', key: this.l10n.getConstant('Between') },\n { value: 'lessthan', key: this.l10n.getConstant('LessThan') },\n { value: 'notbetween', key: this.l10n.getConstant('NotBetween') },\n { value: 'lessthanorequal', key: this.l10n.getConstant('LessThanOrEqual') },\n { value: 'notequal', key: this.l10n.getConstant('NotEqual') },\n { value: 'in', key: this.l10n.getConstant('In') },\n { value: 'notin', key: this.l10n.getConstant('NotIn') }\n ]\n };\n this.operators = {\n equal: '=', notequal: '!=', greaterthan: '>', greaterthanorequal: '>=', lessthan: '<', in: 'IN', notin: 'NOT IN',\n lessthanorequal: '<=', startswith: 'LIKE', endswith: 'LIKE', between: 'BETWEEN', notbetween: 'NOT BETWEEN', contains: 'LIKE',\n isnull: 'IS NULL', isnotnull: 'IS NOT NULL', isempty: 'IS EMPTY', isnotempty: 'IS NOT EMPTY', notstartswith: 'NOT LIKE',\n notendswith: 'NOT LIKE', notcontains: 'NOT LIKE'\n };\n this.sqlOperators = {\n equal: '=', notequal: '!=', greaterthan: '>', greaterthanorequal: '>=', lessthan: '<', in: this.l10n.getConstant('In').toUpperCase(),\n notin: this.l10n.getConstant('NotIn').toUpperCase(), lessthanorequal: '<=', startswith: this.l10n.getConstant('Like').toUpperCase(),\n endswith: this.l10n.getConstant('Like').toUpperCase(), between: this.l10n.getConstant('Between').toUpperCase(),\n notbetween: this.l10n.getConstant('NotBetween').toUpperCase(), contains: this.l10n.getConstant('Like').toUpperCase(),\n isnull: this.l10n.getConstant('IsNull').toUpperCase(), isnotnull: this.l10n.getConstant('IsNotNull').toUpperCase(),\n isempty: this.l10n.getConstant('IsEmpty').toUpperCase(), isnotempty: this.l10n.getConstant('IsNotEmpty').toUpperCase(),\n notstartswith: this.l10n.getConstant('NotLike').toUpperCase(), notendswith: this.l10n.getConstant('NotLike').toUpperCase(),\n notcontains: this.l10n.getConstant('NotLike').toUpperCase()\n };\n if (!this.fields) {\n this.fields = { text: 'label', value: 'field' };\n }\n };\n QueryBuilder.prototype.render = function () {\n this.levelColl = {};\n this.items = [\n {\n text: this.l10n.getConstant('AddGroup'),\n iconCss: 'e-icons e-add-icon e-addgroup'\n },\n {\n text: this.l10n.getConstant('AddCondition'),\n iconCss: 'e-icons e-add-icon e-addrule'\n }\n ];\n this.ruleElem = this.ruleTemplate();\n this.groupElem = this.groupTemplate();\n var stringOper = [\n { value: 'isnull', key: this.l10n.getConstant('IsNull') },\n { value: 'isnotnull', key: this.l10n.getConstant('IsNotNull') }\n ];\n var numberOper = [\n { value: 'isnull', key: this.l10n.getConstant('IsNull') },\n { value: 'isnotnull', key: this.l10n.getConstant('IsNotNull') }\n ];\n this.customOperators['stringOperator'] = this.customOperators['stringOperator'].concat(stringOper); // tslint:disable-line\n this.customOperators['numberOperator'] = this.customOperators['numberOperator'].concat(numberOper); // tslint:disable-line\n if (this.dataSource instanceof DataManager) {\n this.dataManager = this.dataSource;\n if (this.columns && this.columns.length) {\n this.dataColl = this.columns;\n this.initControl();\n }\n else {\n this.executeDataManager(new Query().take(1));\n }\n }\n else {\n this.dataManager = new DataManager(this.dataSource);\n this.dataColl = this.dataManager.executeLocal(new Query());\n this.initControl();\n }\n this.renderComplete();\n if (this.allowDragAndDrop) {\n this.initializeDrag();\n }\n };\n QueryBuilder.prototype.initializeDrag = function () {\n this.draggable = new Draggable(this.element, {\n dragTarget: '.e-drag-qb-rule',\n distance: 5,\n helper: this.helper.bind(this),\n dragStart: this.dragStartHandler.bind(this),\n drag: this.dragHandler.bind(this),\n dragStop: this.dragStopHandler.bind(this),\n isReplaceDragEle: true,\n isPreventSelect: false,\n abort: '.e-parent-header',\n isDragScroll: true,\n enableAutoScroll: true\n });\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n QueryBuilder.prototype.helper = function (e) {\n var target = this.draggable.currentStateTarget;\n if (!target.classList.contains('e-drag-qb-rule') || (target.classList.contains('e-drag-qb-rule') && closest(target, '.e-disable'))) {\n return false;\n }\n var visualElement = this.createElement('div', {\n className: 'e-cloneproperties e-draganddrop e-dragclone',\n styles: 'height:\"auto\", z-index:2, width:' + this.element.offsetWidth\n });\n var cloneElement;\n if (this.draggable.currentStateTarget.parentElement.classList.contains('e-group-header')) {\n cloneElement = closest(target, '.e-group-container').cloneNode(true);\n closest(target, '.e-group-container').classList.add('e-qb-dragging-rule');\n }\n else {\n visualElement.classList.add('e-group-body');\n cloneElement = this.createElement('div', { className: 'e-rule-container' });\n var ruleElement = closest(target, '.e-rule-field').cloneNode(true);\n cloneElement.appendChild(ruleElement);\n closest(target, '.e-rule-field').classList.add('e-qb-dragging-rule');\n }\n visualElement.appendChild(cloneElement);\n var childElements = visualElement.querySelectorAll('*');\n childElements.forEach(function (child) {\n child.removeAttribute('id');\n });\n this.element.appendChild(visualElement);\n return visualElement;\n };\n QueryBuilder.prototype.dragStartHandler = function (e) {\n this.draggedRule = e.target;\n this.isDragEventPrevent = false;\n document.body.classList.add('e-prevent-select');\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this.dragElement = e.dragElement;\n var rule = closest(e.target, '.e-rule-container');\n var group = closest(e.target, '.e-group-container');\n var dragEventArgs = { dragRuleID: rule !== null ? rule.id : group.id, dragGroupID: group.id, cancel: false };\n this.trigger('dragStart', dragEventArgs);\n this.isDragEventPrevent = dragEventArgs.cancel;\n };\n QueryBuilder.prototype.dragHandler = function (e) {\n if (this.isDragEventPrevent) {\n return;\n }\n var borderLineElem = this.element.querySelectorAll('.e-drag-rule-bottom-line');\n borderLineElem.forEach(function (ele) {\n ele.classList.remove('e-drag-rule-bottom-line');\n });\n borderLineElem = this.element.querySelectorAll('.e-drag-rule-top-line');\n borderLineElem.forEach(function (ele) {\n ele.classList.remove('e-drag-rule-top-line');\n });\n if (isNullOrUndefined(e.target)) {\n return;\n }\n if (e.target.nodeName === 'HTML' || closest(e.target, '.e-qb-dragging-rule') || closest(e.target, '.e-group-header') ||\n !closest(e.target, '#' + this.element.id) || closest(e.target, '.e-disable') || (e.target.parentElement && e.target.parentElement.classList.contains('e-btn-group') && this.enableSeparateConnector)) {\n this.dragElement.classList.add('e-notallowedcur');\n return;\n }\n else {\n this.dragElement.classList.remove('e-notallowedcur');\n }\n var targetElem = closest(e.target, '.e-rule-container');\n var grpElem = closest(e.target, '.e-group-container');\n if (targetElem) {\n var rect = targetElem.getBoundingClientRect();\n var mouseY = e.event.clientY || e.event.changedTouches[0].clientY;\n var distanceToTop = mouseY - rect.top;\n var distanceToBottom = rect.bottom - mouseY;\n var threshold = 20; // Adjust as needed\n if (distanceToTop < threshold) {\n targetElem.classList.add('e-drag-rule-top-line');\n }\n else if (distanceToBottom < threshold) {\n targetElem.classList.add('e-drag-rule-bottom-line');\n }\n }\n else if (e.target.classList.contains('e-rule-list') && e.target.children.length === 0) {\n e.target.classList.add('e-drag-rule-bottom-line');\n }\n else if (e.target.classList.contains('e-rule-list') && e.target.children[0].classList.contains('e-group-container')) {\n var rect = e.target.children[0].getBoundingClientRect();\n var mouseY = e.event.clientY || e.event.changedTouches[0].clientY;\n var distanceToTop = mouseY - rect.top;\n var threshold = 20; // Adjust as needed\n if (distanceToTop < threshold) {\n e.target.classList.add('e-drag-rule-top-line');\n }\n }\n else if (closest(e.target, '.e-group-container') || e.target.classList.contains('e-group-container')) {\n if (!grpElem) {\n grpElem = e.target;\n }\n if (grpElem.id.indexOf('group0') > -1) {\n var rect = e.target.getBoundingClientRect();\n var mouseY = e.event.clientY || e.event.changedTouches[0].clientY;\n var distanceToBottom = rect.bottom - mouseY;\n var threshold = 20; // Adjust as needed\n if (distanceToBottom < threshold) {\n e.target.classList.add('e-drag-rule-bottom-line');\n }\n }\n }\n var dragEventArgs = {\n dragRuleID: targetElem !== null ? targetElem.id : grpElem !== null ? grpElem.id : null,\n dragGroupID: grpElem !== null ? grpElem.id : null, cancel: false\n };\n this.trigger('drag', dragEventArgs);\n this.isDragEventPrevent = dragEventArgs.cancel;\n };\n QueryBuilder.prototype.dragStopHandler = function (e) {\n var _this = this;\n if (this.isDragEventPrevent) {\n return;\n }\n var targetGroup = closest(e.target, '.e-rule-container');\n if (isNullOrUndefined(targetGroup) && e.target.parentElement &&\n e.target.parentElement.classList.contains('e-btn-group') && this.enableSeparateConnector) {\n targetGroup = closest(e.target.parentElement.previousElementSibling, '.e-rule-container');\n }\n var isPreventelem;\n if (!isNullOrUndefined(e.helper)) {\n isPreventelem = closest(e.helper, '.e-notallowedcur');\n }\n var prevRule;\n if (!isPreventelem) {\n var targetGrp = closest(e.target, '.e-group-container');\n var dropEventArgs = {\n cancel: false, dropRuleID: targetGroup !== null ? targetGroup.id\n : targetGrp !== null ? targetGrp.id : null, dropGroupID: targetGrp !== null ? targetGrp.id : null\n };\n this.trigger('drop', dropEventArgs);\n if (dropEventArgs.cancel) {\n isPreventelem = true;\n }\n prevRule = this.getValidRules();\n }\n this.prvtEvtTgrDaD = true;\n var tgrt = this.enableSeparateConnector && e.target.parentElement &&\n e.target.parentElement.classList.contains('e-btn-group') ? e.target.parentElement.previousElementSibling : e.target;\n if (targetGroup && !isPreventelem) {\n var groupId_1 = targetGroup.id.split(this.element.id + '_')[1].split('_')[0];\n if (this.draggable.currentStateTarget.parentElement.classList.contains('e-rule-field') ||\n this.draggable.currentStateTarget.parentElement.classList.contains('e-group-header')) {\n var rule = void 0;\n if (this.draggable.currentStateTarget.parentElement.classList.contains('e-group-header')) {\n rule = this.getGroup(this.draggedRule);\n this.deleteGroup(closest(this.draggedRule, '.e-group-container'));\n }\n else {\n rule = this.getRule(this.draggedRule);\n this.deleteRule(this.draggedRule);\n }\n var groupRule = extend([], this.getGroup(targetGroup), [], true);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (groupRule.properties) {\n groupRule = groupRule.properties;\n }\n var groupElem = closest(targetGroup, '.e-group-container');\n var nestGrpElem = groupElem.querySelectorAll('.e-group-container');\n nestGrpElem.forEach(function (ele) {\n if (_this.element.querySelector('#' + ele.id)) {\n _this.deleteGroup(ele);\n }\n });\n var ruleElems = groupElem.querySelectorAll('.e-rule-container');\n var ruleIds = [];\n var dropInd = void 0;\n for (var i = 0; i < ruleElems.length; i++) {\n if (ruleElems[i].classList.contains('e-drag-rule-top-line') ||\n ruleElems[i].classList.contains('e-drag-rule-bottom-line')) {\n dropInd = i;\n }\n ruleIds.push(ruleElems[i].id.split(this.element.id + '_')[1]);\n }\n this.deleteRules(ruleIds);\n if (targetGroup.classList.contains('e-drag-rule-top-line')) {\n groupRule.rules.splice(dropInd, 0, rule);\n }\n else {\n groupRule.rules.splice(dropInd + 1, 0, rule);\n }\n groupRule.rules.forEach(function (rule) {\n if (_this.enableSeparateConnector) {\n if (!rule.rules) {\n _this.addRules([rule], groupId_1);\n }\n else {\n _this.addGroups([rule], groupId_1);\n }\n }\n else {\n if (rule.condition) {\n _this.addGroups([rule], groupId_1);\n }\n else {\n _this.addRules([rule], groupId_1);\n }\n }\n });\n }\n }\n else if (tgrt.classList.contains('e-rule-list') && tgrt.children.length === 0 && !isPreventelem) {\n var groupElem = closest(tgrt, '.e-group-container');\n var groupId = groupElem.id.split(this.element.id + '_')[1].split('_')[0];\n var rule = void 0;\n if (this.draggable.currentStateTarget.parentElement.classList.contains('e-group-header')) {\n rule = this.getGroup(this.draggedRule);\n this.deleteGroup(closest(this.draggedRule, '.e-group-container'));\n }\n else {\n rule = this.getRule(this.draggedRule);\n this.deleteRule(this.draggedRule);\n }\n if (this.enableSeparateConnector) {\n if (!rule.rules) {\n this.addRules([rule], groupId);\n }\n else {\n this.addGroups([rule], groupId);\n }\n }\n else {\n if (rule.condition) {\n this.addGroups([rule], groupId);\n }\n else {\n this.addRules([rule], groupId);\n }\n }\n }\n else if (tgrt.classList.contains('e-rule-list') && tgrt.children[0].classList.contains('e-group-container') && !isPreventelem) {\n var groupElem = closest(tgrt, '.e-group-container');\n var groupId_2 = groupElem.id.split(this.element.id + '_')[1].split('_')[0];\n var rule = void 0;\n if (this.draggable.currentStateTarget.parentElement.classList.contains('e-group-header')) {\n rule = this.getGroup(this.draggedRule);\n this.deleteGroup(closest(this.draggedRule, '.e-group-container'));\n }\n else {\n rule = this.getRule(this.draggedRule);\n this.deleteRule(this.draggedRule);\n }\n var groupRule = extend([], this.getGroup(tgrt), [], true);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (groupRule.properties) {\n groupRule = groupRule.properties;\n }\n var groupElems = tgrt.querySelectorAll('.e-group-container');\n groupElems.forEach(function (ele) {\n if (_this.element.querySelector('#' + ele.id)) {\n _this.deleteGroup(ele);\n }\n });\n var ruleElems = groupElem.querySelectorAll('.e-rule-container');\n ruleElems.forEach(function (ele) {\n if (_this.element.querySelector('#' + ele.id)) {\n _this.deleteRule(ele);\n }\n });\n if (this.draggable.currentStateTarget.parentElement.classList.contains('e-group-header')) {\n this.addGroups([rule], groupId_2);\n }\n else {\n this.addRules([rule], groupId_2);\n }\n groupRule.rules.forEach(function (rule) {\n if (_this.enableSeparateConnector) {\n if (!rule.rules) {\n _this.addRules([rule], groupId_2);\n }\n else {\n _this.addGroups([rule], groupId_2);\n }\n }\n else {\n if (rule.condition) {\n _this.addGroups([rule], groupId_2);\n }\n else {\n _this.addRules([rule], groupId_2);\n }\n }\n });\n }\n else if ((closest(e.target, '.e-group-container') || e.target.classList.contains('e-group-container')) && !isPreventelem) {\n var rule = void 0;\n targetGroup = closest(e.target, '.e-group-container');\n if (!targetGroup && e.target.classList.contains('e-group-container')) {\n targetGroup = e.target;\n }\n var groupId = targetGroup.id.split(this.element.id + '_')[1].split('_')[0];\n if (groupId === 'group0') {\n if (this.draggable.currentStateTarget.parentElement.classList.contains('e-group-header')) {\n rule = this.getGroup(this.draggedRule);\n this.deleteGroup(closest(this.draggedRule, '.e-group-container'));\n }\n else {\n rule = this.getRule(this.draggedRule);\n this.deleteRule(this.draggedRule);\n }\n if (this.enableSeparateConnector) {\n if (!rule.rules) {\n this.addRules([rule], groupId);\n }\n else {\n this.addGroups([rule], groupId);\n }\n }\n else {\n if (rule.condition) {\n this.addGroups([rule], groupId);\n }\n else {\n this.addRules([rule], groupId);\n }\n }\n }\n }\n if (!isPreventelem) {\n this.trigger('ruleChange', { previousRule: prevRule, rule: this.getValidRules(), type: 'drag-and-drop' });\n }\n this.prvtEvtTgrDaD = false;\n document.body.classList.remove('e-prevent-select');\n var borderLineElem = this.element.querySelectorAll('.e-drag-rule-bottom-line');\n borderLineElem.forEach(function (ele) {\n ele.classList.remove('e-drag-rule-bottom-line');\n });\n borderLineElem = this.element.querySelectorAll('.e-drag-rule-top-line');\n borderLineElem.forEach(function (ele) {\n ele.classList.remove('e-drag-rule-top-line');\n });\n borderLineElem = this.element.querySelectorAll('.e-qb-dragging-rule');\n borderLineElem.forEach(function (ele) {\n ele.classList.remove('e-qb-dragging-rule');\n });\n if (e.helper && e.helper.classList.contains('e-cloneproperties') && document.querySelector('.' + e.helper.classList[0])) {\n remove(e.helper);\n }\n if (this.enableSeparateConnector) {\n this.refresh();\n }\n };\n QueryBuilder.prototype.templateParser = function (template) {\n if (template) {\n try {\n if (typeof template !== 'function' && document.querySelectorAll(template).length) {\n return templateCompiler(document.querySelector(template).innerHTML.trim());\n }\n else {\n return compile(template);\n }\n }\n catch (error) {\n return templateCompiler(template);\n }\n }\n return undefined;\n };\n QueryBuilder.prototype.executeDataManager = function (query) {\n var _this = this;\n var data = this.dataManager.executeQuery(query);\n var deferred = new Deferred();\n data.then(function (e) {\n if (e.actual && e.actual.result) {\n _this.dataColl = e.actual.result;\n }\n else {\n _this.dataColl = e.result;\n }\n _this.initControl();\n }).catch(function (e) {\n deferred.reject(e);\n });\n };\n QueryBuilder.prototype.initControl = function () {\n this.initialize();\n this.initWrapper();\n this.wireEvents();\n };\n QueryBuilder.prototype.wireEvents = function () {\n var wrapper = this.getWrapper();\n EventHandler.add(wrapper, 'click', this.clickEventHandler, this);\n EventHandler.add(wrapper, 'focusout', this.focusEventHandler, this);\n EventHandler.add(wrapper, 'focusin', this.focusEventHandler, this);\n EventHandler.add(this.element, 'keydown', this.keyBoardHandler, this);\n if (this.allowDragAndDrop) {\n EventHandler.add(document, 'keydown', this.keyBoardHandler, this);\n }\n this.boundResizeHandler = this.windowResizeHandler.bind(this);\n window.addEventListener('resize', this.boundResizeHandler);\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 if (this.boundResizeHandler) {\n window.removeEventListener('resize', this.boundResizeHandler);\n this.boundResizeHandler = null;\n }\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.clearQBTemplate();\n this.reset();\n this.groupIdCounter = 1;\n this.ruleIdCounter = 0;\n this.isImportRules = true;\n this.setProperties({ rule: rule }, true);\n rule = this.getRuleCollection(this.rule, false);\n this.importRules(this.rule, this.element.querySelector('.e-group-container'), true, this.rule.not, isRoot);\n if (rule.isLocked) {\n var lockGrpTarget = this.element.querySelector('.e-group-container').querySelector('.e-lock-grp-btn');\n this.groupLock(lockGrpTarget);\n }\n this.isImportRules = false;\n };\n QueryBuilder.prototype.keyBoardHandler = function (e) {\n if (e.currentTarget === this.element && this.readonly && (e.keyCode === 38 || e.keyCode === 40 || e.keyCode === 13)) {\n e.preventDefault();\n }\n else if (e.code === 'Escape' && this.allowDragAndDrop) {\n this.isDragEventPrevent = true;\n document.body.classList.remove('e-prevent-select');\n var borderLineElem = this.element.querySelectorAll('.e-drag-rule-bottom-line');\n borderLineElem.forEach(function (ele) {\n ele.classList.remove('e-drag-rule-bottom-line');\n });\n borderLineElem = this.element.querySelectorAll('.e-drag-rule-top-line');\n borderLineElem.forEach(function (ele) {\n ele.classList.remove('e-drag-rule-top-line');\n });\n borderLineElem = this.element.querySelectorAll('.e-qb-dragging-rule');\n borderLineElem.forEach(function (ele) {\n ele.classList.remove('e-qb-dragging-rule');\n });\n var dragElemnet = this.element.querySelector('.e-cloneproperties');\n if (dragElemnet) {\n remove(dragElemnet);\n }\n if (this.enableSeparateConnector) {\n this.refresh();\n }\n }\n };\n QueryBuilder.prototype.windowResizeHandler = function () {\n if (Browser.isDevice || window.innerWidth < 768) {\n this.displayMode = 'Vertical';\n }\n else {\n this.displayMode = 'Horizontal';\n }\n };\n QueryBuilder.prototype.clearQBTemplate = function (ruleElemColl) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.isReact || this.isAngular) {\n this.clearTemplate(ruleElemColl);\n }\n };\n QueryBuilder.prototype.disableRuleCondition = function (groupElem, rules, isNewRuleAdded, isNewGroup) {\n if (!this.headerTemplate) {\n if (this.readonly) {\n return;\n }\n var count = groupElem.querySelector('.e-rule-list').childElementCount;\n var andElem = groupElem.querySelector('.e-btngroup-and');\n var orElem = groupElem.querySelector('.e-btngroup-or');\n if (count > 1) {\n andElem.disabled = false;\n orElem.disabled = false;\n if (orElem.nextElementSibling.classList.contains('e-btn-disable') ||\n andElem.nextElementSibling.classList.contains('e-btn-disable')) {\n orElem.nextElementSibling.classList.remove('e-btn-disable');\n andElem.nextElementSibling.classList.remove('e-btn-disable');\n }\n if (this.enableSeparateConnector && !isNewRuleAdded) {\n var index = 0;\n var element = void 0;\n // eslint-disable-next-line no-constant-condition\n while (true) {\n var andGroup = groupElem.parentElement.querySelectorAll('.e-btngroup-and');\n var orGroup = groupElem.parentElement.querySelectorAll('.e-btngroup-or');\n andElem = andGroup[andGroup.length - (1 + index)];\n orElem = orGroup[orGroup.length - (1 + index)];\n element = andGroup[andGroup.length - (1 + index)];\n if (element && element.parentElement && element.parentElement.style.display === 'none') {\n index++;\n }\n else {\n break;\n }\n }\n var elem = groupElem.previousElementSibling;\n while (elem && !elem.classList.contains('e-rule-container')) {\n if (elem.classList.contains('e-group-container')) {\n elem = elem.querySelectorAll('.e-rule-container')[elem.querySelectorAll('.e-rule-container').length - 1];\n break;\n }\n elem = elem.previousElementSibling;\n }\n if (isNewGroup && groupElem.classList.contains('e-group-container')) {\n elem = groupElem;\n var prevRule = this.getGroup(elem);\n if (prevRule.condition === 'or') {\n orElem.checked = true;\n }\n else {\n andElem.checked = true;\n }\n }\n else if (elem && elem.classList.contains('e-rule-container')) {\n var ruleID = elem.id.replace(this.element.id + '_', '');\n var prevRule = this.getRule(ruleID);\n if (prevRule.condition === 'or') {\n orElem.checked = true;\n }\n else {\n andElem.checked = true;\n }\n }\n }\n else if (!isNewRuleAdded) {\n if (rules && rules.condition === 'or') {\n orElem.checked = true;\n }\n else {\n andElem.checked = true;\n }\n }\n }\n else {\n if (this.enableSeparateConnector && !isNewRuleAdded) {\n var index = 0;\n var element = void 0;\n // eslint-disable-next-line no-constant-condition\n while (true) {\n var andGroup = groupElem.parentElement.querySelectorAll('.e-btngroup-and');\n var orGroup = groupElem.parentElement.querySelectorAll('.e-btngroup-or');\n andElem = andGroup[andGroup.length - (1 + index)];\n orElem = orGroup[orGroup.length - (1 + index)];\n if (this.isImportRules) {\n andElem = groupElem.parentElement.querySelector('.e-btn-group.e-multi-connector .e-btngroup-and');\n orElem = groupElem.parentElement.querySelector('.e-btn-group.e-multi-connector .e-btngroup-or');\n }\n element = andGroup[andGroup.length - (1 + index)];\n if (element && element.parentElement && element.parentElement.style.display === 'none') {\n index++;\n }\n else {\n break;\n }\n }\n var elem = void 0;\n var tempElem = groupElem.previousElementSibling;\n while (tempElem) {\n if (tempElem.classList.contains('e-group-container')) {\n tempElem = tempElem.querySelectorAll('.e-rule-container')[tempElem.querySelectorAll('.e-rule-container').length - 1];\n }\n if (tempElem.classList.contains('e-rule-container')) {\n elem = tempElem;\n break;\n }\n tempElem = tempElem.previousElementSibling;\n }\n if (isNullOrUndefined(elem) && groupElem.querySelectorAll('.e-rule-container')[groupElem.querySelectorAll('.e-rule-container').length - 1]) {\n elem = groupElem.querySelectorAll('.e-rule-container')[groupElem.querySelectorAll('.e-rule-container').length - 1];\n }\n if (isNewGroup && groupElem.classList.contains('e-group-container')) {\n elem = groupElem;\n var prevRule = this.getGroup(elem);\n if (prevRule.condition === 'or') {\n orElem.checked = true;\n }\n else {\n andElem.checked = true;\n }\n }\n else if (elem) {\n var ruleID = elem.id.replace(this.element.id + '_', '');\n var prevRule = this.getRule(ruleID);\n if (prevRule.condition === 'or' && orElem) {\n orElem.checked = true;\n }\n else if (andElem) {\n andElem.checked = true;\n }\n }\n }\n else if (!isNewRuleAdded && !isNullOrUndefined(andElem)) {\n andElem.checked = false;\n andElem.disabled = true;\n orElem.checked = false;\n orElem.disabled = true;\n if (rules) {\n orElem.nextElementSibling.classList.add('e-btn-disable');\n andElem.nextElementSibling.classList.add('e-btn-disable');\n }\n }\n }\n }\n };\n /**\n * Get the valid rule or rules collection.\n *\n * @param {RuleModel} currentRule - 'currentRule' to be passed to get the valid rules.\n * @returns {RuleModel} - Valid rule or rules collection\n */\n QueryBuilder.prototype.getValidRules = function (currentRule) {\n this.isValueEmpty = true;\n if (!currentRule) {\n currentRule = this.getRules();\n }\n var ruleCondtion = currentRule.condition;\n var notCondition = currentRule.not;\n var ruleColl = extend([], currentRule.rules, [], true);\n var rule = !isNullOrUndefined(currentRule.isLocked) ?\n this.getRuleCollection({ condition: ruleCondtion, rules: ruleColl, not: notCondition, isLocked: currentRule.isLocked }, true) :\n this.getRuleCollection({ condition: ruleCondtion, rules: ruleColl, not: notCondition }, true);\n this.isValueEmpty = false;\n return rule;\n };\n QueryBuilder.prototype.getRuleCollection = function (rule, isValidRule) {\n if (isNullOrUndefined(rule)) {\n return null;\n }\n var orgRule;\n if (rule.rules && rule.rules.length && (Object.keys(rule.rules[0]).length > 6 || isValidRule)) {\n var jLen = rule.rules.length;\n for (var j = 0; j < jLen; j++) {\n orgRule = rule.rules[j];\n orgRule = this.getRuleCollection(orgRule, isValidRule);\n rule.rules[j] = orgRule;\n if (Object.keys(orgRule).length < 1 && isValidRule) {\n rule.rules.splice(j, 1);\n j--;\n jLen--;\n }\n }\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var customObj = rule.custom;\n if ((rule.field && rule.field !== '') && (isNullOrUndefined(customObj) || (customObj && (customObj.type !== 'question' &&\n customObj.type !== 'answer')))) {\n if (rule.operator) {\n if (rule.operator.toString().indexOf('null') > -1 || rule.operator.toString().indexOf('empty') > -1) {\n rule.value = null;\n }\n }\n if ((this.isRefreshed && this.enablePersistence) || (rule.field !== '' && rule.operator !== '' &&\n (this.isValueEmpty ? rule.value !== '' && rule.value !== undefined : rule.value !== undefined)) ||\n (customObj && customObj.isQuestion)) {\n var condition = rule.condition;\n var lockedRule = rule.isLocked;\n rule = { 'label': rule.label, 'field': rule.field, 'operator': rule.operator, 'type': rule.type, 'value': rule.value };\n if (!isNullOrUndefined(lockedRule)) {\n rule.isLocked = lockedRule;\n }\n if (condition) {\n rule.condition = condition;\n }\n if (customObj) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n rule.custom = customObj;\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if ((rule.operator === 'in' || rule.operator === 'notin') && rule.value && rule.value.length === 0) {\n rule = {};\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if ((rule.operator === 'between' || rule.operator === 'notbetween') && Array.isArray(rule.value) && (rule.value.length < 2 || rule.value.some(function (val) { return val === '' || val === null; }))) {\n rule = {};\n }\n }\n else {\n rule = {};\n }\n }\n else {\n if (customObj && (customObj.type === 'question' || customObj.type === 'answer')) {\n var notValue = rule.not;\n rule = {\n 'label': rule.label, 'field': rule.field, 'operator': rule.operator, 'type': rule.type, 'value': rule.value,\n 'condition': rule.condition, 'rules': rule.rules\n };\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n rule.custom = customObj;\n if (this.enableNotCondition) {\n rule.not = notValue;\n }\n }\n else if ((isNullOrUndefined(rule.condition)) && isNullOrUndefined(rule.rules)) {\n rule = {};\n }\n else {\n var isLocked = rule.isLocked;\n if (this.enableNotCondition) {\n rule = { 'condition': rule.condition, 'rules': rule.rules, 'not': rule.not };\n }\n else {\n rule = { 'condition': rule.condition, 'rules': rule.rules };\n }\n if (!isNullOrUndefined(isLocked)) {\n rule.isLocked = isLocked;\n }\n if (customObj) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n rule.custom = customObj;\n }\n if (rule.rules && rule.rules.length === 0) {\n rule = {};\n }\n }\n }\n return rule;\n };\n /**\n * Set the rule or rules collection.\n *\n * @param {RuleModel} rule - 'rule' to be passed to set rules.\n * @returns {void}.\n */\n QueryBuilder.prototype.setRules = function (rule) {\n var mRules = extend({}, rule, {}, true);\n if (this.headerTemplate) {\n this.setGroupRules(mRules, true);\n }\n else {\n this.setGroupRules(mRules);\n }\n };\n /**\n * Gets the rule or rule collection.\n *\n * @returns {object} - Rule or rule collection\n */\n QueryBuilder.prototype.getRules = function () {\n var rule;\n if (this.enableNotCondition) {\n rule = { condition: this.rule.condition, rules: this.rule.rules, not: this.rule.not };\n }\n else {\n rule = { condition: this.rule.condition, rules: this.rule.rules };\n }\n if (!isNullOrUndefined(this.rule.isLocked)) {\n rule.isLocked = this.rule.isLocked;\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.rule.custom) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n rule.custom = this.rule.custom;\n }\n return rule;\n };\n /**\n * Gets the rule.\n *\n * @param {string | HTMLElement} elem - 'elem' to be passed to get rule.\n * @returns {object} - Rule\n */\n QueryBuilder.prototype.getRule = function (elem) {\n var ruleElem;\n var ruleId;\n var index = 0;\n if (elem instanceof HTMLElement) {\n ruleElem = closest(elem, '.e-rule-container');\n }\n else {\n ruleId = this.element.id + '_' + elem;\n ruleElem = document.getElementById(ruleId);\n }\n if (isNullOrUndefined(ruleElem)) {\n return null;\n }\n var groupElem = closest(ruleElem, '.e-group-container');\n var rule = this.getParentGroup(groupElem);\n while (ruleElem.previousElementSibling !== null) {\n ruleElem = ruleElem.previousElementSibling;\n if (!this.enableSeparateConnector || (this.enableSeparateConnector &&\n ((!this.headerTemplate && !ruleElem.classList.contains('e-btn-group')) ||\n this.headerTemplate && (ruleElem.classList.contains('e-rule-container') ||\n ruleElem.classList.contains('e-group-container'))))) {\n index++;\n }\n }\n return rule.rules[index];\n };\n /**\n * Gets the group.\n *\n * @param {string | Element} target - 'target' to be passed to get group.\n * @returns {object} -Group\n */\n QueryBuilder.prototype.getGroup = function (target) {\n if (target instanceof Element && target.className.indexOf('e-group-container') < 1) {\n target = closest(target, '.e-group-container');\n }\n var groupId = (target instanceof Element) ? target.id : this.element.id + '_' + target;\n var rule = this.getParentGroup(groupId);\n return rule;\n };\n /**\n * Deletes the group or groups based on the group ID.\n *\n * @param {string[]} groupIdColl - 'groupIdColl' to be passed to delete groups.\n * @returns {void}\n */\n QueryBuilder.prototype.deleteGroups = function (groupIdColl) {\n var i;\n var len = groupIdColl.length;\n var groupID;\n for (i = 0; i < len; i++) {\n if (groupIdColl[i] === 'group0') {\n continue;\n }\n groupID = this.element.id + '_' + groupIdColl[i];\n this.deleteGroup(document.getElementById(groupID));\n }\n };\n /**\n * Return the Query from current rules collection.\n *\n * @returns {Promise} - Query from current rules collection\n * @blazorType object\n */\n QueryBuilder.prototype.getFilteredRecords = function () {\n var predicate = this.getPredicate(this.getValidRules(this.rule));\n var dataManagerQuery = isNullOrUndefined(predicate) ? new Query() : new Query().where(predicate);\n return this.dataManager.executeQuery(dataManagerQuery);\n };\n /**\n * Deletes the rule or rules based on the rule ID.\n *\n * @param {string[]} ruleIdColl - 'ruleIdColl' to be passed to delete rules.\n * @returns {void}.\n */\n QueryBuilder.prototype.deleteRules = function (ruleIdColl) {\n var i;\n var len = ruleIdColl.length;\n var ruleID;\n for (i = 0; i < len; i++) {\n ruleID = this.element.id + '_' + ruleIdColl[i];\n this.deleteRule(document.getElementById(ruleID));\n }\n };\n /**\n * Gets the query for Data Manager.\n *\n * @param {RuleModel} rule - 'rule' to be passed to get query.\n * @returns {string} - Query for Data Manager\n */\n QueryBuilder.prototype.getDataManagerQuery = function (rule) {\n var predicate = this.getPredicate(rule);\n var query;\n var fields = [];\n for (var i = 0, len = Object.keys(this.columns); i < len.length; i++) {\n fields.push(this.columns[i].field);\n }\n if (rule.rules.length) {\n query = new Query().select(fields).where(predicate);\n }\n else {\n query = new Query().select(fields);\n }\n return query;\n };\n /**\n * Get the predicate from collection of rules.\n *\n * @param {RuleModel} rule - 'rule' to be passed to get predicate.\n * @returns {Predicate} - Predicate from collection of rules\n */\n QueryBuilder.prototype.getPredicate = function (rule) {\n var ruleColl = rule.rules;\n var pred;\n var pred2;\n var ruleValue;\n var ignoreCase = false;\n var column;\n if (!ruleColl) {\n return pred;\n }\n for (var i = 0, len = ruleColl.length; i < len; i++) {\n var operator = ruleColl[i].operator;\n if (operator === 'notstartswith') {\n operator = 'doesnotstartwith';\n }\n else if (operator === 'notendswith') {\n operator = 'doesnotendwith';\n }\n else if (operator === 'notcontains') {\n operator = 'doesnotcontain';\n }\n var keys = Object.keys(ruleColl[i]);\n ignoreCase = false;\n if (keys.indexOf('rules') > -1 && ruleColl[i].rules) {\n pred2 = this.getPredicate(ruleColl[i]);\n if (pred2) {\n if (pred) {\n if (rule.condition === 'and') {\n pred = pred.and(pred2);\n }\n else {\n pred = pred.or(pred2);\n }\n }\n else {\n pred = pred2;\n }\n }\n }\n else if (!isNullOrUndefined(operator) && !isNullOrUndefined(operator.length)) {\n var oper = ruleColl[i].operator.toLowerCase();\n var isDateFilter = false;\n var dateOperColl = ['equal', 'notequal', 'greaterthan', 'greaterthanorequal', 'lessthan', 'lessthanorequal'];\n if (ruleColl[i].type === 'string') {\n ignoreCase = this.matchCase ? false : true;\n }\n if (ruleColl[i].type === 'date' && dateOperColl.indexOf(oper) > -1) {\n ignoreCase = true;\n }\n column = this.getColumn(ruleColl[i].field);\n if (oper.indexOf('null') > -1 || oper.indexOf('empty') > -1) {\n ruleColl[i].value = null;\n }\n else if (ruleColl[i].type === 'date' && !(ruleColl[i].value instanceof Array)) {\n var format = this.getFormat(column.format);\n if (!isNullOrUndefined(ruleColl[i].value)) {\n ruleValue = this.getDate(ruleColl[i].value, format);\n if (dateOperColl.indexOf(oper) > -1 && !this.isTime(ruleColl[i].value)) {\n isDateFilter = true;\n }\n }\n else {\n ruleValue = null;\n }\n }\n else {\n ruleValue = ruleColl[i].value;\n }\n if (i === 0) {\n if (isDateFilter || (oper.indexOf('in') > -1 || oper.indexOf('between') > -1 || oper.indexOf('null') > -1 ||\n oper.indexOf('empty') > -1) && (oper.indexOf('contain') < 0)) {\n pred = isDateFilter ? this.datePredicate(ruleColl[i], ruleValue) :\n this.arrayPredicate(ruleColl[i]);\n }\n else {\n var value = ruleValue;\n if (value !== '') {\n pred = new Predicate(ruleColl[i].field, operator, ruleValue, ignoreCase);\n }\n }\n }\n else {\n if (isDateFilter || (oper.indexOf('in') > -1 || oper.indexOf('between') > -1 ||\n oper.indexOf('null') > -1 || oper.indexOf('empty') > -1) && oper.indexOf('contain') < 0) {\n pred = isDateFilter ? this.datePredicate(ruleColl[i], ruleValue, pred, rule.condition) :\n this.arrayPredicate(ruleColl[i], pred, rule.condition);\n }\n else {\n if (rule.condition === 'and') {\n var value = ruleValue;\n if (pred && value !== '') {\n pred\n = pred.and(ruleColl[i].field, operator, ruleValue, ignoreCase);\n }\n else if (value !== '') {\n pred = new Predicate(ruleColl[i].field, operator, ruleValue, ignoreCase);\n }\n }\n else {\n var value = ruleValue;\n if (pred && value !== '') {\n pred = pred.or(ruleColl[i].field, operator, ruleValue, ignoreCase);\n }\n else if (value !== '') {\n pred = new Predicate(ruleColl[i].field, operator, ruleValue, ignoreCase);\n }\n }\n }\n }\n }\n }\n if (this.dataSource instanceof DataManager) {\n if (!isNullOrUndefined(pred) && (pred.operator === 'isnull' || pred.operator === 'isnotnull')) {\n pred.operator = pred.operator === 'isnull' ? 'equal' : 'notequal';\n }\n }\n return pred;\n };\n QueryBuilder.prototype.getLocale = function () {\n var gregorianFormat = '.dates.calendars.gregorian.days.format.short';\n var localeString = this.locale;\n var mainVal = 'main.';\n var cultureObj = getValue(mainVal + '' + this.locale + gregorianFormat, cldrData);\n if (!cultureObj) {\n localeString = 'en';\n }\n return localeString;\n };\n QueryBuilder.prototype.getColumn = function (field, col) {\n var columns = this.columns;\n var column;\n columns = col ? col : columns;\n var fieldParts = this.separator !== '' ? (field ? field.split(this.separator) : []) : [field];\n var rootField = fieldParts && fieldParts.length > 0 ? fieldParts[0] : null;\n for (var i = 0; i < columns.length; i++) {\n if (columns[i].field === field) {\n column = columns[i];\n break;\n }\n }\n if (!column && this.separator !== '') {\n for (var i = 0; i < columns.length; i++) {\n if (columns[i].field === rootField) {\n if (columns[i].columns) {\n var subField = field.substring(rootField.length + this.separator.length);\n if (subField) {\n column = this.getColumn(subField, columns[i].columns);\n }\n else {\n column = columns[i];\n }\n }\n else {\n column = columns[i];\n }\n break;\n }\n }\n }\n if (!column) {\n for (var i = 0; i < columns.length; i++) {\n if (columns[i].columns) {\n column = this.getColumn(field, columns[i].columns);\n if (column) {\n break;\n }\n }\n }\n }\n return column;\n };\n /* eslint-disable */\n /**\n * Return the operator bound to the column.\n *\n * @returns {[key: string]: Object}[] - Operator bound to the column\n */\n /* eslint-enable */\n QueryBuilder.prototype.getOperators = function (field) {\n var column = this.getColumn(field);\n return column.operators;\n };\n QueryBuilder.prototype.setTime = function (date, isStart) {\n if (isStart) {\n date.setHours(0, 0, 0);\n }\n else {\n date.setHours(23, 59, 59);\n }\n return date;\n };\n QueryBuilder.prototype.datePredicate = function (ruleColl, value, predicate, condition) {\n var pred;\n var startDate = this.setTime(new Date(value.getTime()), true);\n var endDate = this.setTime(value);\n switch (ruleColl.operator) {\n case 'equal':\n pred = new Predicate(ruleColl.field, 'greaterthanorequal', startDate);\n pred = pred.and(ruleColl.field, 'lessthanorequal', endDate);\n break;\n case 'notequal':\n pred = new Predicate(ruleColl.field, 'lessthan', startDate);\n pred = pred.or(ruleColl.field, 'greaterthan', endDate);\n break;\n case 'greaterthan':\n pred = new Predicate(ruleColl.field, 'greaterthan', endDate);\n break;\n case 'greaterthanorequal':\n pred = new Predicate(ruleColl.field, 'greaterthanorequal', startDate);\n break;\n case 'lessthan':\n pred = new Predicate(ruleColl.field, 'lessthan', startDate);\n break;\n case 'lessthanorequal':\n pred = new Predicate(ruleColl.field, 'lessthanorequal', endDate);\n break;\n }\n if (pred) {\n if (predicate) {\n if (condition === 'and') {\n predicate = predicate.and(pred);\n }\n else if (condition === 'or') {\n predicate = predicate.or(pred);\n }\n }\n else {\n predicate = pred;\n }\n }\n return predicate;\n };\n QueryBuilder.prototype.arrayPredicate = function (ruleColl, predicate, condition) {\n var value = ruleColl.value;\n var operator = ruleColl.operator.toString();\n var nullValue = ruleColl.value;\n var pred;\n var column = this.getColumn(ruleColl.field);\n var format = this.getFormat(column.format);\n if (operator.indexOf('null') > -1 || operator.indexOf('empty') > -1) {\n switch (operator) {\n case 'isnull':\n pred = new Predicate(ruleColl.field, 'isnull', nullValue);\n break;\n case 'isnotnull':\n pred = new Predicate(ruleColl.field, 'isnotnull', nullValue);\n break;\n case 'isempty':\n pred = new Predicate(ruleColl.field, 'equal', '');\n break;\n case 'isnotempty':\n pred = new Predicate(ruleColl.field, 'notequal', '');\n break;\n }\n }\n if (!(operator.indexOf('null') > -1 || operator.indexOf('empty') > -1)) {\n for (var j = 0, jLen = value.length; j < jLen; j++) {\n if (value[j] !== '' || ((operator === 'in' || operator === 'notin') && column.type === 'string')) {\n if (j === 0) {\n var gte = 'greaterthanorequal';\n switch (operator) {\n case 'between':\n if (column.type !== 'date') {\n pred = new Predicate(ruleColl.field, gte, value[j]);\n }\n else {\n pred = new Predicate(ruleColl.field, gte, value[j] ?\n (this.isTime(value[j]) ? this.getDate(value[j], format) :\n this.setTime(this.getDate(value[j], format), true)) : null);\n }\n break;\n case 'notbetween':\n if (column.type === 'date') {\n pred = new Predicate(ruleColl.field, 'lessthan', value[j] ?\n (this.isTime(value[j]) ? this.getDate(value[j], format) :\n this.setTime(this.getDate(value[j], format), true)) : null);\n }\n else {\n pred = new Predicate(ruleColl.field, 'lessthan', value[j]);\n }\n break;\n case 'in':\n pred = new Predicate(ruleColl.field, 'equal', value[j]);\n break;\n case 'notin':\n pred = new Predicate(ruleColl.field, 'notequal', value[j]);\n break;\n }\n }\n else {\n var gt = 'greaterthan';\n switch (ruleColl.operator) {\n case 'between':\n if (column.type === 'date') {\n pred = pred.and(ruleColl.field, 'lessthanorequal', value[j] ?\n (this.isTime(value[j]) ? this.getDate(value[j], format) :\n this.setTime(this.getDate(value[j], format))) : value[j]);\n }\n else {\n pred = pred.and(ruleColl.field, 'lessthanorequal', value[j]);\n }\n break;\n case 'notbetween':\n if (column.type === 'date') {\n pred = pred.or(ruleColl.field, gt, value[j] ?\n (this.isTime(value[j]) ? this.getDate(value[j], format) :\n this.setTime(this.getDate(value[j], format))) : value[j]);\n }\n else {\n pred = pred.or(ruleColl.field, 'greaterthan', value[j]);\n }\n break;\n case 'in':\n pred = pred.or(ruleColl.field, 'equal', value[j]);\n break;\n case 'notin':\n pred = pred.and(ruleColl.field, 'notequal', value[j]);\n break;\n }\n }\n }\n }\n }\n if (pred) {\n if (predicate) {\n if (condition === 'and') {\n predicate = predicate.and(pred);\n }\n else if (condition === 'or') {\n predicate = predicate.or(pred);\n }\n }\n else {\n predicate = pred;\n }\n }\n return predicate;\n };\n QueryBuilder.prototype.getDate = function (value, format) {\n var currDate = this.intl.parseDate(value, format);\n if (value.indexOf(':') > -1 && (value.indexOf('/') < 0 && value.indexOf(',') < 0\n && value.indexOf('-') < 0)) {\n currDate = new Date();\n currDate.setHours(parseInt(value.split(':')[0], 10));\n currDate.setMinutes(parseInt(value.split(':')[1], 10));\n if (value.split(':')[2]) {\n currDate.setSeconds(parseInt(value.split(':')[2], 10));\n }\n }\n return currDate;\n };\n QueryBuilder.prototype.isTime = function (value) {\n if (value && value.indexOf(':') > -1) {\n return true;\n }\n return false;\n };\n QueryBuilder.prototype.importRules = function (rule, parentElem, isReset, not, isRoot) {\n if (!isReset) {\n parentElem = this.renderGroup(rule, rule.condition, parentElem, not);\n }\n else {\n if (rule.rules && rule.rules.length > 1 && !this.headerTemplate) {\n // enable/disable conditions when rule group is added\n var orElem = parentElem.querySelector('.e-btngroup-or');\n var andElem = parentElem.querySelector('.e-btngroup-and');\n if (this.enableSeparateConnector && parentElem.previousElementSibling) {\n orElem = parentElem.previousElementSibling.querySelector('.e-btngroup-or');\n andElem = parentElem.previousElementSibling.querySelector('.e-btngroup-and');\n }\n orElem.disabled = false;\n andElem.disabled = false;\n if (this.enableSeparateConnector) {\n var elem = parentElem.previousElementSibling;\n while (elem && !elem.classList.contains('e-rule-container')) {\n if (elem.classList.contains('e-group-container')) {\n elem = elem.querySelectorAll('.e-rule-container')[elem.querySelectorAll('.e-rule-container').length - 1];\n break;\n }\n elem = elem.previousElementSibling;\n }\n if (elem && elem.classList.contains('e-rule-container')) {\n var ruleID = elem.id.replace(this.element.id + '_', '');\n var prevRule = this.getRule(ruleID);\n if (prevRule.condition === 'or') {\n orElem.checked = true;\n }\n else {\n andElem.checked = true;\n }\n }\n }\n else {\n if (rule.condition === 'or') {\n orElem.checked = true;\n }\n else {\n andElem.checked = true;\n }\n }\n }\n else {\n // enable/disable conditions when rule condition is added\n this.disableRuleCondition(parentElem);\n }\n if (this.headerTemplate && isRoot) {\n parentElem = this.renderGroup(rule, rule.condition, this.element, rule.not, isRoot);\n }\n if (this.enableNotCondition && !this.headerTemplate) {\n var tglBtnElem = parentElem.querySelector('.e-qb-toggle');\n if (rule.not) {\n addClass([tglBtnElem], 'e-active-toggle');\n if (this.enableSeparateConnector) {\n getComponent(tglBtnElem.querySelector('.e-checkbox'), 'checkbox').checked = rule.not;\n }\n }\n else {\n removeClass([tglBtnElem], 'e-active-toggle');\n }\n }\n }\n if (rule.rules && rule.rules.length === 0 && this.headerTemplate) {\n rule.rules[0] = { 'label': '', 'field': '', 'operator': '', 'type': '', 'value': '' };\n }\n var ruleColl = rule.rules;\n if (!isNullOrUndefined(ruleColl)) {\n for (var i = 0, len = ruleColl.length; i < len; i++) {\n var keys = Object.keys(ruleColl[i]);\n if (!isNullOrUndefined(ruleColl[i].rules) && keys.indexOf('rules') > -1 && (ruleColl[i].rules.length !== 0)) {\n if (this.element.querySelectorAll('.e-group-container').length > this.maxGroupCount) {\n return null;\n }\n parentElem = this.renderGroup(ruleColl[i], ruleColl[i].condition, parentElem, ruleColl[i].not);\n parentElem = this.importRules(ruleColl[i], parentElem, true);\n }\n else if (!isNullOrUndefined(ruleColl[i].rules)) {\n parentElem = this.renderGroup(ruleColl[i], ruleColl[i].condition, parentElem, ruleColl[i].not);\n var andElem = parentElem.querySelector('.e-btngroup-and');\n var orElem = parentElem.querySelector('.e-btngroup-or');\n andElem.disabled = true;\n orElem.disabled = true;\n }\n else {\n this.renderRule(ruleColl[i], parentElem);\n }\n if (!isNullOrUndefined(ruleColl[i].rules) && ruleColl[i].isLocked) {\n var lockGrpTarget = parentElem.querySelector('.e-rule-list').children[i].querySelector('.e-lock-grp-btn');\n this.groupLock(lockGrpTarget);\n }\n }\n }\n if (parentElem) {\n parentElem = closest(parentElem, '.e-rule-list');\n }\n if (parentElem) {\n parentElem = closest(parentElem, '.e-group-container');\n }\n return parentElem;\n };\n QueryBuilder.prototype.renderGroup = function (rule, condition, parentElem, not, isRoot) {\n this.addGroupElement(true, parentElem, condition, false, not, isRoot, rule); //Child group\n var element = parentElem.querySelectorAll('.e-group-container');\n var cloneElem = parentElem.querySelector('.e-rule-list').children;\n if (this.showButtons.cloneGroup && this.cloneGrpBtnClick && this.isMiddleGroup) {\n this.isMiddleGroup = false;\n this.cloneGrpBtnClick = false;\n var index = 0;\n var tempGroupIndex = this.groupIndex + 1;\n if (this.enableSeparateConnector) {\n for (var i = 0; i < tempGroupIndex; i++) {\n if (cloneElem[i].classList.contains('e-rule-container')) {\n tempGroupIndex++;\n index++;\n }\n }\n }\n return cloneElem[this.groupIndex + index + 1]; // group added in the middle\n }\n else if (this.showButtons.cloneGroup && this.cloneGrpBtnClick && this.isLastGroup) {\n this.isLastGroup = false;\n this.cloneGrpBtnClick = false;\n return cloneElem[cloneElem.length - 1]; // group added in the end\n }\n else {\n return element[element.length - 1];\n }\n };\n QueryBuilder.prototype.renderRule = function (rule, parentElem) {\n if (parentElem.className.indexOf('e-group-container') > -1) {\n this.addRuleElement(parentElem, rule); //Create rule\n }\n else {\n this.addRuleElement(parentElem.querySelector('.e-group-container'), rule); //Create group\n }\n };\n QueryBuilder.prototype.enableReadonly = function () {\n var target = this.element;\n var elem = target.querySelectorAll('.e-dropdownlist, .e-dropdowntree, .e-numerictextbox, .e-textbox, .e-datepicker, .e-multiselect .e-lib, .e-radio');\n for (var i = 0; i < elem.length; i++) {\n if (elem[i].classList.contains('e-dropdownlist')) {\n var dropDownObj = getInstance(elem[i], DropDownList);\n dropDownObj.readonly = this.isReadonly;\n }\n else if (elem[i].classList.contains('e-dropdowntree')) {\n var dropDownTreeObj = getComponent(elem[i], 'dropdowntree');\n dropDownTreeObj.readonly = this.isReadonly;\n }\n else if (elem[i].classList.contains('e-numerictextbox')) {\n var numericTextBoxObj = getInstance(elem[i], NumericTextBox);\n numericTextBoxObj.readonly = this.isReadonly;\n }\n else if (elem[i].classList.contains('e-textbox')) {\n var textBoxObj = getInstance(elem[i], TextBox);\n textBoxObj.readonly = this.isReadonly;\n }\n else if (elem[i].classList.contains('e-datepicker')) {\n var datePickerObj = getInstance(elem[i], DatePicker);\n datePickerObj.readonly = this.isReadonly;\n }\n else if (elem[i].classList.contains('e-multiselect')) {\n var multiSelectObj = getInstance(elem[i], MultiSelect);\n multiSelectObj.readonly = this.isReadonly;\n }\n else if (elem[i].classList.contains('e-radio')) {\n var radioButtonObj = getInstance(elem[i], RadioButton);\n if (!radioButtonObj.checked) {\n if (this.isReadonly) {\n elem[i].parentElement.style.display = 'none';\n }\n else {\n elem[i].parentElement.style.display = 'inherit';\n }\n }\n }\n }\n var deleteGroupElems = this.element.querySelectorAll('.e-deletegroup');\n var addRuleGroupElems = this.element.querySelectorAll('.e-addrulegroup');\n var removeRuleElems = this.element.querySelectorAll('.e-removerule');\n if (!this.isReadonly && this.ruleElem.classList.contains('e-readonly')) {\n this.ruleElem.classList.remove('e-readonly');\n }\n var elems = [deleteGroupElems, addRuleGroupElems, removeRuleElems];\n for (var i = 0; i < elems.length; i++) {\n elems[i].forEach(function (elem) {\n if (elem.classList.contains('e-readonly')) {\n elem.classList.remove('e-readonly');\n }\n else {\n elem.classList.add('e-readonly');\n }\n });\n }\n this.enableBtnGroup();\n };\n QueryBuilder.prototype.enableBtnGroup = function () {\n var _this = this;\n var elems = this.element.querySelectorAll('.e-btngroup-and-lbl, .e-btngroup-or-lbl, .e-qb-toggle');\n var not = false;\n elems.forEach(function (elem) {\n if (elem.classList.contains('e-qb-toggle') && !elem.classList.contains('e-active-toggle')\n && !elem.classList.contains('e-readonly')) {\n elem.classList.add('e-readonly');\n not = false;\n }\n else if (elem.classList.contains('e-qb-toggle') && elem.classList.contains('e-not-readonly')) {\n elem.classList.remove('e-not-readonly');\n }\n else if (elem.classList.contains('e-qb-toggle') && elem.classList.contains('e-readonly')) {\n elem.classList.remove('e-readonly');\n }\n else if (elem.classList.contains('e-active-toggle')) {\n elem.classList.add('e-not-readonly');\n not = true;\n }\n else if (elem.previousElementSibling.checked || elem.classList.contains('e-readonly')) {\n elem.classList.remove('e-readonly');\n if (not) {\n if (elem.textContent === 'AND') {\n elem.classList.add('e-readonly-and');\n }\n else {\n elem.classList.add('e-readonly-or');\n }\n }\n else {\n if (elem.textContent === 'AND' && _this.isReadonly) {\n elem.classList.remove('e-not');\n elem.classList.add('e-readonly-and');\n }\n else {\n if (_this.enableNotCondition) {\n elem.classList.add('e-not');\n }\n elem.classList.remove('e-readonly-and');\n }\n if (elem.textContent === 'OR' && _this.isReadonly) {\n elem.classList.add('e-readonly-or-not');\n }\n else {\n elem.classList.remove('e-readonly-or-not');\n }\n }\n }\n else if (elem.classList.contains('e-btn-disable')) {\n // do nothing\n }\n else {\n elem.classList.add('e-readonly');\n }\n });\n };\n QueryBuilder.prototype.isDateFunction = function (value) {\n var dateFunc = ['date', 'time', 'day', 'week', 'month', 'year', 'hour', 'minute', 'second', 'now', 'quarter', 'period', 'extract'];\n for (var i = 0, len = dateFunc.length; i < len; i++) {\n if (value.toLowerCase().indexOf(dateFunc[i]) > -1) {\n return true;\n }\n }\n return false;\n };\n QueryBuilder.prototype.getSqlString = function (rules, enableEscape, queryStr, sqlLocale) {\n var _this = this;\n var isRoot = false;\n if (!queryStr && queryStr !== '') {\n queryStr = '';\n isRoot = true;\n }\n else {\n queryStr += '(';\n }\n if (rules.not) {\n var notPrefix = sqlLocale ? this.l10n.getConstant('NOT').toUpperCase() + ' ' : 'NOT ';\n queryStr += isRoot ? notPrefix + '(' : ' ' + notPrefix + '(';\n }\n if (rules.rules && rules.rules.length) {\n queryStr += rules.rules.reduce(function (result, rule, j) {\n var ruleStr = '';\n if (rule.rules) {\n ruleStr = _this.getSqlString(rule, enableEscape, '', sqlLocale);\n if (_this.enableSeparateConnector) {\n rules.condition = rule.condition;\n }\n }\n else {\n var ruleOpertor = sqlLocale ? _this.sqlOperators[rule.operator] : _this.operators[rule.operator];\n var valueStr = '';\n if (rule.value instanceof Array) {\n if (rule.operator.toString().indexOf('between') > -1) {\n var ruleCondition = sqlLocale ? ' ' + _this.l10n.getConstant('AND').toUpperCase() + ' ' : ' AND ';\n if (rule.type === 'date' && !_this.isDateFunction(rule.value[0])) {\n valueStr = \"\\\"\" + rule.value[0] + \"\\\"\" + ruleCondition + \"\\\"\" + rule.value[1] + \"\\\"\";\n }\n else {\n valueStr = \"\" + rule.value[0] + ruleCondition + rule.value[1];\n }\n }\n else {\n if (typeof rule.value[0] === 'string' && rule.value !== null) {\n var valueArray = rule.value;\n valueStr = '(\"' + valueArray.join('\",\"') + '\")';\n }\n else {\n valueStr = \"(\" + rule.value + \")\";\n }\n }\n }\n else {\n if (rule.operator.toString().indexOf('startswith') > -1) {\n valueStr = rule.value ? \"(\\\"\" + rule.value + \"%\\\")\" : \"(\" + rule.value + \")\";\n }\n else if (rule.operator.toString().indexOf('endswith') > -1) {\n valueStr = rule.value ? \"(\\\"%\" + rule.value + \"\\\")\" : \"(\" + rule.value + \")\";\n }\n else if (rule.operator.toString().indexOf('contains') > -1) {\n valueStr = rule.value ? \"(\\\"%\" + rule.value + \"%\\\")\" : \"(\" + rule.value + \")\";\n }\n else {\n if (rule.type === 'number' || typeof rule.value === 'boolean' ||\n (rule.value === null && (rule.operator.toString().indexOf('empty') < -1))) {\n valueStr = \"\" + rule.value;\n }\n else if (rule.operator.toString().indexOf('empty') > -1) {\n valueStr = '\"\"';\n }\n else {\n valueStr = \"\\\"\" + rule.value + \"\\\"\";\n }\n }\n }\n var fieldName = rule.field;\n if (enableEscape) {\n fieldName = '`' + fieldName + '`';\n }\n else if (fieldName.indexOf(' ') > -1) {\n fieldName = '\"' + fieldName + '\"';\n }\n if (rule.operator.toString().indexOf('null') > -1) {\n ruleStr = fieldName + ' ' + ruleOpertor;\n }\n else {\n var custOper = ruleOpertor;\n if (rule.operator === 'isempty') {\n custOper = '=';\n }\n else if (rule.operator === 'isnotempty') {\n custOper = '!=';\n }\n ruleStr = fieldName + ' ' + custOper + ' ' + valueStr;\n }\n }\n if (j !== rules.rules.length - 1) {\n var condition = rules.condition;\n if (condition === '' || (rule && rule.condition !== '' && rule.custom && rule.custom.isCustom)) {\n condition = rule.condition;\n }\n if (condition) {\n condition = sqlLocale ? _this.l10n.getConstant(condition.toUpperCase()).toUpperCase() : condition.toUpperCase();\n ruleStr += ' ' + condition + ' ';\n }\n }\n return result + ruleStr;\n }, '');\n }\n if (!isRoot) {\n queryStr += ')';\n }\n if (rules.not) {\n queryStr += ')';\n }\n return queryStr;\n };\n /**\n * Sets the rules from the sql query.\n *\n * @param {string} sqlString - 'sql String' to be passed to set the rule.\n * @param {boolean} sqlLocale - Optional. Set `true` if Localization for Sql query.\n * @returns {void}\n */\n QueryBuilder.prototype.setRulesFromSql = function (sqlString, sqlLocale) {\n sqlString = sqlString.replace(/`/g, '');\n var ruleModel = this.getRulesFromSql(sqlString, sqlLocale);\n this.setRules({ condition: ruleModel.condition, not: ruleModel.not, rules: ruleModel.rules });\n };\n /**\n * Get the rules from SQL query.\n *\n * @param {string} sqlString - 'sql String' to be passed to get the rule.\n * @param {boolean} sqlLocale - Set `true` if Localization for Sql query.\n * @returns {object} - Rules from SQL query\n */\n QueryBuilder.prototype.getRulesFromSql = function (sqlString, sqlLocale) {\n this.parser = [];\n this.sqlParser(sqlString, sqlLocale);\n this.setProperties({ rule: { condition: 'and', not: false, rules: [] } }, true);\n var rule = this.processParser(this.parser, this.rule, [0], sqlLocale);\n if (this.enableNotCondition) {\n return { condition: rule.condition, not: rule.not, rules: rule.rules };\n }\n else {\n return { condition: rule.condition, rules: rule.rules };\n }\n };\n /**\n * Gets the sql query from rules.\n *\n * @param {RuleModel} rule - 'rule' to be passed to get the sql.\n * @param {boolean} allowEscape - Set `true` if it exclude the escape character.\n * @param {boolean} sqlLocale - Set `true` if Localization for Sql query.\n * @returns {string} - Sql query from rules.\n */\n QueryBuilder.prototype.getSqlFromRules = function (rule, allowEscape, sqlLocale) {\n if (!rule) {\n rule = this.getValidRules();\n }\n rule = this.getRuleCollection(rule, false);\n var sqlString = this.getSqlString(this.getValidRules(rule), allowEscape, null, sqlLocale).replace(/\"/g, '\\'');\n return sqlString;\n };\n /**\n * Gets the parameter SQL query from rules.\n *\n * @param {RuleModel} rule – Specify the rule to be passed to get the parameter sql string.\n * @returns {ParameterizedSql} – Parameterized SQL query from rules.\n */\n QueryBuilder.prototype.getParameterizedSql = function (rule) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.moduleLoader.loadedModules.length) {\n if (!rule) {\n rule = this.getValidRules();\n }\n var obj = { sql: null };\n this.notify('query-library', { prop: 'getParameterSql', onPropertyChange: false, value: { rule: rule, obj: obj } });\n return obj['sql'];\n }\n else {\n console.warn('[WARNING] :: Module \"query-library\" is not available in QueryBuilder component! You either misspelled the module name or forgot to load it.');\n }\n return null;\n };\n /**\n * Sets the rules from the parameter sql query.\n *\n * @param { ParameterizedSql} sqlQuery – Specifies the parameter SQL to be passed to set the rule and load it to the query builder.\n * @returns {void}\n */\n QueryBuilder.prototype.setParameterizedSql = function (sqlQuery) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.moduleLoader.loadedModules.length) {\n var obj = { sql: null };\n this.notify('query-library', { prop: 'convertParamSqlToSql', onPropertyChange: false, value: { sql: sqlQuery, obj: obj } });\n var sql = obj['sql'];\n if (sql) {\n sql = sql.replace(/`/g, '');\n var ruleModel = this.getRulesFromSql(sql);\n this.setRules({ condition: ruleModel.condition, not: ruleModel.not, rules: ruleModel.rules });\n }\n }\n else {\n console.warn('[WARNING] :: Module \"query-library\" is not available in QueryBuilder component! You either misspelled the module name or forgot to load it.');\n }\n };\n /**\n * Gets the named parameter SQL query from rules.\n *\n * @param {RuleModel} rule – Specify the rule to be passed to get the named parameter SQL string.\n * @returns {ParameterizedNamedSql} – Parameterized Named SQL query from rules.\n */\n QueryBuilder.prototype.getParameterizedNamedSql = function (rule) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.moduleLoader.loadedModules.length) {\n if (!rule) {\n rule = this.getValidRules();\n }\n var obj = { sql: null };\n this.notify('query-library', { prop: 'getNamedParameterSql', onPropertyChange: false, value: { rule: rule, obj: obj } });\n return obj['sql'];\n }\n else {\n console.warn('[WARNING] :: Module \"query-library\" is not available in QueryBuilder component! You either misspelled the module name or forgot to load it.');\n }\n return null;\n };\n /**\n * Sets the rules from the named parameter SQL query.\n *\n * @param { ParameterizedNamedSql } sqlQuery – Specifies the named parameter SQL to be passed to set the rule and load it to the query builder.\n * @returns {void}\n */\n QueryBuilder.prototype.setParameterizedNamedSql = function (sqlQuery) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.moduleLoader.loadedModules.length) {\n var obj = { sql: null };\n this.notify('query-library', { prop: 'convertNamedParamSqlToSql', onPropertyChange: false, value: { sql: sqlQuery, obj: obj } });\n var sql = obj['sql'];\n if (sql) {\n sql = sql.replace(/`/g, '');\n var ruleModel = this.getRulesFromSql(sql);\n this.setRules({ condition: ruleModel.condition, not: ruleModel.not, rules: ruleModel.rules });\n }\n }\n else {\n console.warn('[WARNING] :: Module \"query-library\" is not available in QueryBuilder component! You either misspelled the module name or forgot to load it.');\n }\n };\n /**\n * Set the rules from Mongo query.\n *\n * @param {string} mongoQuery - 'sql String' to be passed to get the rule.\n * @param {boolean} mongoLocale - Set `true` if Localization for Mongo query.\n * @returns {void}\n */\n QueryBuilder.prototype.setMongoQuery = function (mongoQuery, mongoLocale) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.moduleLoader.loadedModules.length) {\n this.rule = { condition: 'and', not: false, rules: [] };\n this.notify('query-library', { prop: 'mongoParser', onPropertyChange: false, value: { mongoQuery: JSON.parse(mongoQuery), rule: this.rule, mongoLocale: mongoLocale } });\n }\n else {\n console.warn('[WARNING] :: Module \"query-library\" is not available in QueryBuilder component! You either misspelled the module name or forgot to load it.');\n }\n };\n /**\n * Gets the Mongo query from rules.\n *\n * @param {RuleModel} rule - 'rule' to be passed to get the sql.\n * @returns {object} - Sql query from rules.\n */\n QueryBuilder.prototype.getMongoQuery = function (rule) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.moduleLoader.loadedModules.length) {\n if (!rule) {\n rule = this.getValidRules();\n }\n var obj = { mongoQuery: null };\n this.notify('query-library', { prop: 'getMongoFromRules', onPropertyChange: false, value: { rule: rule, mongoQuery: '', obj: obj } });\n return obj['mongoQuery'];\n }\n else {\n console.warn('[WARNING] :: Module \"query-library\" is not available in QueryBuilder component! You either misspelled the module name or forgot to load it.');\n }\n return '';\n };\n /**\n * Clones the rule based on the rule ID to the specific group.\n *\n * @param {string} ruleID - Specifies the ruleID that needs to be cloned.\n * @param {string} groupID - Specifies the groupID in which the rule to be cloned.\n * @param {number} index - Specifies the index to insert the cloned rule inside the group.\n * @returns {void}\n */\n QueryBuilder.prototype.cloneRule = function (ruleID, groupID, index) {\n var getRule = this.getRule(ruleID.replace(this.element.id + '_', ''));\n var isCloneRule = this.showButtons.cloneRule;\n groupID = groupID.replace(this.element.id + '_', '');\n this.ruleIndex = index;\n this.cloneRuleBtnClick = true;\n this.showButtons.cloneRule = true;\n this.addRules([{\n 'label': getRule.label, 'field': getRule.field, 'type': getRule.type, 'operator': getRule.operator,\n 'value': getRule.value, 'condition': getRule.condition\n }], groupID);\n this.ruleIndex = -1;\n this.cloneRuleBtnClick = false;\n this.showButtons.cloneRule = isCloneRule;\n isCloneRule = false;\n };\n /**\n * Clones the group based on the group ID to the specific group.\n *\n * @param {string} groupID - Specifies the groupID that needs to be cloned.\n * @param {string} parentGroupID - Specifies the parentGroupID in which the group to be cloned.\n * @param {number} index - Specifies the index to insert the cloned group inside the parent group.\n * @returns {void}\n */\n QueryBuilder.prototype.cloneGroup = function (groupID, parentGroupID, index) {\n parentGroupID = parentGroupID.replace(this.element.id + '_', '');\n var group = this.getGroup(parentGroupID);\n var isCloneGroup = this.showButtons.cloneGroup;\n groupID = groupID.replace(this.element.id + '_', '');\n this.groupIndex = index;\n this.cloneGrpBtnClick = this.groupCloned = true;\n this.showButtons.cloneGroup = true;\n this.addGroups([{ 'condition': group.condition, 'not': group.not, 'rules': group.rules }], groupID);\n this.groupIndex = -1;\n this.cloneGrpBtnClick = false;\n this.showButtons.cloneGroup = isCloneGroup;\n isCloneGroup = this.groupCloned = false;\n };\n /**\n * Locks the rule based on the rule ID.\n *\n * @param {string} ruleID - Specifies the ruleID that needs to be locked.\n * @returns {void}\n */\n QueryBuilder.prototype.lockRule = function (ruleID) {\n if (ruleID.indexOf(this.element.id) < 0) {\n ruleID = this.element.id + '_' + ruleID;\n }\n var target = document.getElementById(ruleID).querySelectorAll('.e-lock-rule-btn')[0];\n this.ruleLock(target);\n };\n /**\n * Locks the group based on the group ID\n *\n * @param {string} groupID - Specifies the groupID that needs to be locked.\n * @returns {void}\n */\n QueryBuilder.prototype.lockGroup = function (groupID) {\n if (groupID.indexOf(this.element.id) < 0) {\n groupID = this.element.id + '_' + groupID;\n }\n var target = document.getElementById(groupID).querySelectorAll('.e-lock-grp-btn')[0];\n this.groupLock(target);\n };\n QueryBuilder.prototype.sqlParser = function (sqlString, sqlLocale) {\n var st = 0;\n var str;\n do {\n str = sqlString.slice(st);\n st += this.parseSqlStrings(str, sqlLocale);\n } while (str !== '');\n return this.parser;\n };\n QueryBuilder.prototype.parseSqlStrings = function (sqlString, sqlLocale) {\n var operators = ['=', '!=', '<=', '>=', '<', '>'];\n var conditions;\n if (sqlLocale) {\n conditions = [this.l10n.getConstant('AND').toUpperCase(), this.l10n.getConstant('OR').toUpperCase(), this.l10n.getConstant('NOT').toUpperCase()];\n }\n else {\n conditions = ['AND', 'OR', 'NOT'];\n }\n var subOp;\n if (sqlLocale) {\n subOp = [this.l10n.getConstant('In').toUpperCase(), this.l10n.getConstant('NotIn').toUpperCase(),\n this.l10n.getConstant('Like').toUpperCase(), this.l10n.getConstant('NotLike').toUpperCase(),\n this.l10n.getConstant('Between').toUpperCase(), this.l10n.getConstant('NotBetween').toUpperCase(),\n this.l10n.getConstant('IsNull').toUpperCase(), this.l10n.getConstant('IsNotNull').toUpperCase(),\n this.l10n.getConstant('IsEmpty').toUpperCase(), this.l10n.getConstant('IsNotEmpty').toUpperCase()];\n }\n else {\n subOp = ['IN', 'NOT IN', 'LIKE', 'NOT LIKE', 'BETWEEN', 'NOT BETWEEN', 'IS NULL', 'IS NOT NULL', 'IS EMPTY', 'IS NOT EMPTY'];\n }\n var regexStr;\n var regex;\n var matchValue;\n for (var i = 0, iLen = operators.length; i < iLen; i++) {\n regexStr = /^\\w+$/.test(operators[i]) ? '\\\\b' : '';\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var regExp = RegExp;\n regex = new regExp('^(' + operators[i] + ')' + regexStr, 'ig');\n if (regex.exec(sqlString)) {\n this.parser.push(['Operators', operators[i].toLowerCase()]);\n return operators[i].length;\n }\n }\n var lastPasrser = this.parser[this.parser.length - 1];\n if (!lastPasrser || (lastPasrser && lastPasrser[0] !== 'Literal')) {\n for (var i = 0, iLen = conditions.length; i < iLen; i++) {\n regexStr = /^\\w+$/.test(conditions[i]) ? '\\\\b' : '';\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var regExp = RegExp;\n regex = new regExp('^(' + conditions[i] + ')' + regexStr, 'ig');\n if (regex.exec(sqlString)) {\n this.parser.push(['Conditions', conditions[i].toLowerCase()]);\n return conditions[i].length;\n }\n }\n }\n for (var i = 0, iLen = subOp.length; i < iLen; i++) {\n regexStr = /^\\w+$/.test(subOp[i]) ? '\\\\b' : '';\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var regExp = RegExp;\n regex = new regExp('^(' + subOp[i] + ')' + regexStr, 'ig');\n if (regex.exec(sqlString)) {\n this.parser.push(['SubOperators', subOp[i].toLowerCase()]);\n return subOp[i].length;\n }\n }\n if (/^\\(/.exec(sqlString)) {\n this.parser.push(['Left', '(']);\n return 1;\n }\n if (/^\\)/.exec(sqlString)) {\n this.parser.push(['Right', ')']);\n return 1;\n }\n if (/^(true|false)/.exec(sqlString)) {\n matchValue = /^(true|false)/.exec(sqlString)[0];\n this.parser.push(['String', matchValue]);\n return matchValue.length;\n }\n if (/^null/.exec(sqlString)) {\n matchValue = /^null/.exec(sqlString)[0];\n this.parser.push(['String', null]);\n return matchValue.length;\n }\n if (/^`?([a-z_][a-z0-9_.\\\\[\\]\\\\(\\\\)]{0,}(\\\\:(number|float|string|date|boolean))?)`?/i.exec(sqlString)) {\n matchValue = /^`?([a-z_][a-z0-9_.\\\\[\\]\\\\(\\\\)]{0,}(\\\\:(number|float|string|date|boolean))?)`?/i.exec(sqlString)[1];\n this.parser.push(['Literal', matchValue]);\n return matchValue.length;\n }\n if (this.checkLiteral() && /^'?([a-z_][a-z0-9 _.\\\\[\\]\\\\(\\\\)-]{0,}(\\\\:(number|float|string|date|boolean))?)'?/i.exec(sqlString)) {\n matchValue = /^'?([a-z_][a-z0-9 _.\\\\[\\]\\\\(\\\\)-]{0,}(\\\\:(number|float|string|date|boolean))?)'?/i.exec(sqlString)[1];\n this.parser.push(['Literal', matchValue]);\n return matchValue.length + 2;\n }\n if (this.checkNumberLiteral(sqlString, sqlLocale)) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var regExValue = /^[0-9]+(\\.[0-9]+)$/.exec(sqlString);\n if (regExValue) {\n matchValue = regExValue[0];\n this.parser.push(['Literal', matchValue]);\n return matchValue.length;\n }\n }\n var singleString = this.getSingleQuoteString(sqlString);\n if (singleString !== '') {\n matchValue = singleString;\n if (matchValue[matchValue.length - 2] === '(') {\n var isClosed = false;\n for (var j = matchValue.length; j < sqlString.length; j++) {\n matchValue += sqlString[j];\n if (sqlString[j] === ')') {\n isClosed = true;\n }\n if (isClosed && sqlString[j] === '\\'') {\n break;\n }\n }\n }\n else if (sqlString[matchValue.length] && (sqlString[matchValue.length] !== ')') &&\n !this.checkCondition(sqlString, matchValue)) {\n matchValue = this.combineSingleQuoteString(sqlString, matchValue);\n }\n this.parser.push(['String', matchValue]);\n return matchValue.length;\n }\n var doubleString = this.getDoubleQuoteString(sqlString);\n if (doubleString !== '') {\n matchValue = doubleString;\n this.parser.push(['DoubleString', matchValue]);\n return matchValue.length;\n }\n if (/^\\d*\\.?\\d+/.exec(sqlString)) {\n matchValue = /^\\d*\\.?\\d+/.exec(sqlString)[0];\n this.parser.push(['Number', matchValue]);\n return matchValue.length;\n }\n if (/^-?\\d*\\.?\\d+/.exec(sqlString)) {\n matchValue = /^-?\\d*\\.?\\d+/.exec(sqlString)[0];\n this.parser.push(['Number', matchValue]);\n return matchValue.length;\n }\n return 1;\n };\n QueryBuilder.prototype.getDoubleQuoteString = function (sqlString) {\n var start = sqlString.indexOf('\"');\n if (start === 0) {\n var end = sqlString.indexOf('\"', start + 1);\n if (end !== -1) {\n return sqlString.substring(start, end + 1);\n }\n }\n return '';\n };\n QueryBuilder.prototype.checkCondition = function (sqlString, matchValue) {\n if (sqlString.slice(matchValue.length + 1, matchValue.length + 4) === 'AND' ||\n sqlString.slice(matchValue.length + 1, matchValue.length + 3) === 'OR') {\n return true;\n }\n return false;\n };\n QueryBuilder.prototype.getSingleQuoteString = function (sqlString, isBetween) {\n var start = sqlString.indexOf('\\'');\n if ((start !== -1 && isBetween) || (start === 0 && !isBetween)) {\n var end = sqlString.indexOf('\\'', start + 1);\n if (end !== -1) {\n return sqlString.substring(start, end + 1);\n }\n }\n return '';\n };\n QueryBuilder.prototype.combineSingleQuoteString = function (sqlString, matchValue) {\n if (sqlString[matchValue.length] && (sqlString[matchValue.length] !== ')') &&\n !this.checkCondition(sqlString, matchValue) && sqlString[matchValue.length] !== ',') {\n var tempMatchValue = matchValue.substring(0, matchValue.length - 1);\n var tempStr = sqlString.replace(tempMatchValue, '');\n var singleString = this.getSingleQuoteString(tempStr, true);\n if (singleString !== '') {\n var parsedValue = singleString.substring(1, singleString.length);\n matchValue += parsedValue;\n matchValue = this.combineSingleQuoteString(sqlString, matchValue);\n }\n }\n return matchValue;\n };\n QueryBuilder.prototype.checkLiteral = function () {\n var lastParser = this.parser[this.parser.length - 1];\n if (!lastParser) {\n return true;\n }\n else {\n var secParser = this.parser[this.parser.length - 2];\n var betweenParser = this.parser[this.parser.length - 3];\n if (lastParser[0] === 'Left' && (secParser && secParser[0] === 'Conditions')) {\n return true;\n }\n var betweenOperator = 'between';\n if (lastParser[0] === 'Conditions' && (betweenParser && betweenParser[1].indexOf(betweenOperator) < 0)) {\n return true;\n }\n }\n return false;\n };\n QueryBuilder.prototype.checkNumberLiteral = function (sqlString, sqlLocale) {\n var lastParser = this.parser[this.parser.length - 1];\n if (!lastParser) {\n return true;\n }\n else {\n if (/^[0-9]+(?:\\.[0-9]+)$/.exec(sqlString)) {\n var secParser = this.parser[this.parser.length - 2];\n var betweenParser = this.parser[this.parser.length - 3];\n if (lastParser[0] === 'Left' && (secParser && secParser[0] === 'Conditions')) {\n return true;\n }\n var betweenOperator = sqlLocale ? this.l10n.getConstant('Between').toLowerCase() : 'between';\n if (lastParser[0] === 'Conditions' && (betweenParser && betweenParser[1].indexOf(betweenOperator) < 0)) {\n return true;\n }\n }\n }\n return false;\n };\n QueryBuilder.prototype.getOperator = function (value, operator, sqlLocale) {\n var operators = {\n '=': 'equal', '!=': 'notequal', '<': 'lessthan', '>': 'greaterthan', '<=': 'lessthanorequal',\n '>=': 'greaterthanorequal', 'in': 'in', 'not in': 'notin', 'between': 'between', 'not between': 'notbetween',\n 'is empty': 'isempty', 'is null': 'isnull', 'is not null': 'isnotnull', 'is not empty': 'isnotempty'\n };\n if (sqlLocale) {\n var localeOperator = Object.keys(this.sqlOperators);\n for (var i = 0; i < localeOperator.length; i++) {\n if (this.sqlOperators[localeOperator[i]] === operator.toUpperCase()) {\n if (value && value.indexOf('%') === 0 && value[value.length - 1] === '%') {\n return (operator.toUpperCase() === 'NOT LIKE') ? 'notcontains' : 'contains';\n }\n else if (value && value.indexOf('%') !== 0 && value.indexOf('%') === value.length - 1) {\n return (operator.toUpperCase() === 'NOT LIKE') ? 'notstartswith' : 'startswith';\n }\n else if (value && value.indexOf('%') === 0 && value.indexOf('%') !== value.length - 1) {\n return (operator.toUpperCase() === 'NOT LIKE') ? 'notendswith' : 'endswith';\n }\n return localeOperator[i];\n }\n }\n return null;\n }\n if (value) {\n if (value.indexOf('%') === 0 && value[value.length - 1] === '%') {\n return (operator === 'not like') ? 'notcontains' : 'contains';\n }\n else if (value.indexOf('%') !== 0 && value.indexOf('%') === value.length - 1) {\n return (operator === 'not like') ? 'notstartswith' : 'startswith';\n }\n else if (value.indexOf('%') === 0 && value.indexOf('%') !== value.length - 1) {\n return (operator === 'not like') ? 'notendswith' : 'endswith';\n }\n }\n else {\n if (operator === 'not like') {\n return 'notequal';\n }\n else if (operator === 'like') {\n return 'equal';\n }\n }\n return operators[\"\" + operator];\n };\n QueryBuilder.prototype.getTypeFromColumn = function (rules) {\n var columnData = this.getColumn(rules.field);\n if (!isNullOrUndefined(columnData)) {\n return columnData.type;\n }\n return null;\n };\n QueryBuilder.prototype.getLabelFromColumn = function (field) {\n var label = '';\n var l = 0;\n if (this.separator !== '') {\n var fieldColl = field.split(this.separator);\n for (var i = 0; i < fieldColl.length; i++) {\n label += this.getLabelFromField(fieldColl, i + 1);\n l++;\n if (l < fieldColl.length) {\n label += this.separator;\n }\n }\n return label;\n }\n else {\n var labelItem = this.getColumn(field).label;\n return labelItem;\n }\n };\n QueryBuilder.prototype.getLabelFromField = function (field, startIdx) {\n var fieldName = '';\n var j = 0;\n for (var k = 0; k < startIdx; k++) {\n fieldName += field[k];\n j++;\n if (j < startIdx) {\n fieldName += this.separator;\n }\n }\n return this.getColumn(fieldName) ? this.getColumn(fieldName).label : '';\n };\n QueryBuilder.prototype.processParser = function (parser, rules, levelColl, sqlLocale) {\n var j;\n var jLen;\n var rule;\n var subRules;\n var numVal = [];\n var strVal = [];\n var k;\n var kLen;\n var l;\n var lLen;\n var grpCount;\n var operator;\n var isLeftOpened = false;\n var isNotOpened = false;\n for (var i = 0, iLen = parser.length; i < iLen; i++) {\n if (parser[i][0] === 'Literal') {\n var column = this.getColumn(parser[i][1]);\n rule = { label: (column && column.label) ? column.label : parser[i][1], field: parser[i][1] };\n if (parser[i + 1][0] === 'SubOperators') {\n if (parser[i + 1][1].indexOf('null') > -1 || parser[i + 1][1].indexOf('empty') > -1) {\n rule.operator = this.getOperator(' ', parser[i + 1][1], sqlLocale);\n rule.value = null;\n rule.type = this.getTypeFromColumn(rule);\n }\n else {\n if (parser.length === 3 && parser[2][0] === 'String' && (parser[2][1]).indexOf('%') !== -1) {\n var oper = parser[i + 2][1] ? parser[i + 2][1].replace(/'/g, '') : parser[i + 2][1];\n rule.operator = this.getOperator(oper, parser[i + 1][1], sqlLocale);\n }\n else {\n var oper = parser[i + 3][1] ? parser[i + 3][1].replace(/'/g, '') : parser[i + 3][1];\n rule.operator = this.getOperator(oper, parser[i + 1][1], sqlLocale);\n }\n }\n operator = parser[i + 1][1];\n i++;\n j = i + 1;\n jLen = iLen;\n if (sqlLocale && rule.operator === 'contains' || rule.operator === 'startswith' || rule.operator === 'endswith') {\n operator = 'like';\n }\n else if (sqlLocale && rule.operator === 'notcontains' || rule.operator === 'notstartswith' || rule.operator === 'notendswith') {\n operator = 'not like';\n }\n else if (sqlLocale) {\n operator = rule.operator;\n }\n for (j = i + 1; j < jLen; j++) {\n if (operator.indexOf('between') < 0 && parser[j][0] === 'Left') {\n isLeftOpened = true;\n }\n else if (parser[j][0] === 'Right' && isLeftOpened) {\n i = j;\n isLeftOpened = false;\n break;\n }\n else {\n if (operator.indexOf('null') > -1 || operator.indexOf('empty') > -1) {\n break;\n }\n if (operator.indexOf('like') > -1 && parser[j][0] === 'String') {\n var val = parser[j][1];\n if (parser[j][1] && parser[j][1][0] === '\\'') {\n val = parser[j][1].substring(1, parser[j][1].length - 1);\n }\n val = val ? val.replace(/%/g, '') : parser[j][1];\n rule.value = val;\n rule.type = 'string';\n }\n else if (operator.indexOf('between') > -1) {\n if (parser[j][0] === 'Literal' || parser[j][0] === 'Left') {\n break;\n }\n if (parser[j][0] === 'Number') {\n numVal.push(Number(parser[j][1]));\n }\n else if (parser[j][0] === 'String') {\n var val = parser[j][1];\n if (parser[j][1] && parser[j][1][0] === '\\'') {\n val = parser[j][1].substring(1, parser[j][1].length - 1);\n }\n strVal.push(val);\n }\n }\n else {\n if (parser[j][0] === 'Number') {\n numVal.push(Number(parser[j][1]));\n }\n else if (parser[j][0] === 'String') {\n var val = parser[j][1];\n if (parser[j][1] && parser[j][1][0] === '\\'') {\n val = parser[j][1].substring(1, parser[j][1].length - 1);\n }\n strVal.push(val);\n }\n }\n rule.type = this.getTypeFromColumn(rule);\n }\n }\n if (operator.indexOf('like') < 0) {\n if (parser[j - 1][0] === 'Number') {\n rule.value = numVal;\n rule.type = 'number';\n }\n else if (parser[j - 1][0] === 'String') {\n rule.value = strVal;\n rule.type = 'string';\n }\n else if (operator.indexOf('between') > -1 && parser[j - 1][0] === 'Conditions') {\n if (strVal.length !== 0) {\n rule.value = strVal;\n rule.type = 'string';\n }\n else {\n rule.value = numVal;\n rule.type = 'number';\n }\n }\n numVal = [];\n strVal = [];\n rule.type = this.getTypeFromColumn(rule);\n }\n if (this.enableSeparateConnector && parser[i + 1][0] === 'Conditions') {\n rule.condition = parser[i + 1][1];\n }\n }\n else if (parser[i + 1][0] === 'Operators') {\n rule.operator = this.getOperator(parser[i + 2][1], parser[i + 1][1], sqlLocale);\n if (rule.operator === 'equal' && parser[i + 2][0] === 'String' && parser[i + 2][1] === '\\'\\'') {\n rule.operator = 'isempty';\n }\n else if (rule.operator === 'notequal' && parser[i + 2][0] === 'String' && parser[i + 2][1] === '\\'\\'') {\n rule.operator = 'isnotempty';\n }\n if (parser[i + 2][0] === 'Number') {\n rule.type = 'number';\n rule.value = Number(parser[i + 2][1]);\n }\n else {\n rule.type = 'string';\n var val = parser[i + 2][1];\n if (val && val[0] === '\\'') {\n val = val.substring(1, val.length - 1);\n }\n rule.value = val;\n }\n if (this.enableSeparateConnector && parser[i + 3][0] === 'Conditions') {\n rule.condition = parser[i + 3][1];\n }\n rule.type = this.getTypeFromColumn(rule);\n }\n rules.rules.push(rule);\n }\n else if (parser[i][0] === 'Left') {\n if (!(parser[0][0] === 'Left') && (parser[i - 1][1] === 'not' || sqlLocale && this.l10n.getConstant('NOT').toLowerCase() === parser[i - 1][1])) {\n isNotOpened = true;\n continue;\n }\n this.parser = parser.splice(i + 1, iLen - (i + 1));\n if (this.enableNotCondition) {\n subRules = { condition: 'and', rules: [], not: false };\n }\n else {\n subRules = { condition: 'and', rules: [] };\n }\n grpCount = 0;\n kLen = rules.rules.length;\n for (k = 0; k < kLen; k++) { //To get the group position\n if (rules.rules[k].rules) {\n grpCount++;\n }\n }\n levelColl.push(grpCount);\n rules.rules.push(subRules);\n subRules = this.processParser(this.parser, subRules, levelColl, sqlLocale);\n return rules;\n }\n else if (parser[i][0] === 'Conditions' && !this.enableSeparateConnector) {\n if (parser[i][1] === 'not' || (sqlLocale && this.l10n.getConstant('NOT').toLowerCase() === parser[i][1])) {\n rules.not = true;\n }\n else {\n rules.condition = parser[i][1];\n }\n }\n else if (parser[i][0] === 'Right') {\n if (isNotOpened && parser[i + 1][0] === 'Right') {\n isNotOpened = false;\n continue;\n }\n this.parser = parser.splice(i + 1, iLen - (i + 1));\n levelColl.pop(); //To get the parent Group\n rules = this.rule;\n lLen = levelColl.length;\n for (l = 0; l < lLen; l++) {\n rules = this.findGroupByIdx(levelColl[l], rules, l === 0);\n }\n return this.processParser(this.parser, rules, levelColl, sqlLocale);\n }\n }\n return rules;\n };\n /**\n * Clone the Group\n *\n * @param {Element | string} target - 'target' to be passed to clone the group.\n * @returns {void}\n */\n QueryBuilder.prototype.groupClone = function (target) {\n var groupElem = target.closest('.e-rule-list').closest('.e-group-container');\n var targetGrpId = target.id.replace(this.element.id + '_', '');\n var groupId = groupElem.id.replace(this.element.id + '_', '');\n var group = this.getGroup(targetGrpId);\n this.groupIndex = Array.prototype.indexOf.call(target.closest('.e-rule-list').children, target.closest('.e-group-container'));\n this.addGroups([{ 'condition': group.condition, 'not': group.not, 'rules': group.rules }], groupId);\n this.groupIndex = -1;\n this.groupCloned = false;\n };\n QueryBuilder.prototype.ruleClone = function (target) {\n var ruleElem = closest(target, '.e-rule-container');\n var groupElem = target.closest('.e-rule-list').closest('.e-group-container');\n var getRule = this.getRule(target);\n var groupId = groupElem.id.replace(this.element.id + '_', '');\n var ruleElemColl = groupElem.querySelectorAll('.e-rule-container');\n for (var i = 0, iLen = ruleElemColl.length; i < iLen; i++) {\n if (ruleElem.id === ruleElemColl[i].id) {\n this.ruleIndex = i;\n }\n }\n if (this.enableSeparateConnector) {\n this.addRules([{\n 'label': getRule.label, 'field': getRule.field, 'type': getRule.type, 'operator': getRule.operator,\n 'value': getRule.value, 'condition': getRule.condition\n }], groupId);\n }\n else {\n this.addRules([{\n 'label': getRule.label, 'field': getRule.field, 'type': getRule.type, 'operator': getRule.operator,\n 'value': getRule.value\n }], groupId);\n }\n this.ruleIndex = -1;\n };\n QueryBuilder.prototype.ruleLock = function (target) {\n var ruleElem = closest(target, '.e-rule-container');\n var rule = this.getRule(ruleElem.id.replace(this.element.id + '_', ''));\n if (ruleElem.classList.contains('e-disable')) {\n rule.isLocked = false;\n this.lockItems = this.lockItems.filter(function (lockItem) { return lockItem !== ruleElem.id; });\n ruleElem.classList.remove('e-disable');\n this.disableRuleControls(target, ruleElem, false);\n target.children[0].classList.add('e-unlock');\n target.children[0].classList.remove('e-lock');\n target.setAttribute('title', this.l10n.getConstant('LockRule'));\n }\n else {\n rule.isLocked = true;\n if (this.lockItems.indexOf(ruleElem.id) < 0) {\n this.lockItems.splice(this.lockItems.length - 1, 0, ruleElem.id);\n }\n ruleElem.classList.add('e-disable');\n this.disableRuleControls(target, ruleElem, true);\n target.children[0].classList.add('e-lock');\n target.children[0].classList.remove('e-unlock');\n target.setAttribute('title', this.l10n.getConstant('UnlockRule'));\n }\n };\n QueryBuilder.prototype.groupLock = function (target) {\n var groupElem = closest(target, '.e-group-container');\n var group = this.getGroup(groupElem.id.replace(this.element.id + '_', ''));\n var isRoot = groupElem.id.indexOf('group0') > -1;\n if (groupElem.classList.contains('e-disable')) {\n if (isRoot) {\n var newGroup = {};\n newGroup.condition = group.condition;\n newGroup.not = group.not;\n newGroup.isLocked = false;\n this.setProperties({ rule: newGroup }, true);\n }\n else {\n group.isLocked = false;\n }\n this.lockItems = this.lockItems.filter(function (lockItem) { return lockItem !== groupElem.id; });\n groupElem.classList.remove('e-disable');\n this.disableHeaderControls(target, groupElem, false);\n target.children[0].classList.add('e-unlock');\n target.children[0].classList.remove('e-lock');\n target.setAttribute('title', this.l10n.getConstant('LockGroup'));\n this.updateLockItems();\n }\n else {\n if (isRoot) {\n var newGroup = {};\n newGroup.condition = group.condition;\n newGroup.not = group.not;\n newGroup.isLocked = true;\n this.setProperties({ rule: newGroup }, true);\n }\n else {\n group.isLocked = true;\n }\n if (this.lockItems.indexOf(groupElem.id) < 0) {\n this.lockItems.splice(this.lockItems.length - 1, 0, groupElem.id);\n }\n groupElem.classList.add('e-disable');\n this.disableHeaderControls(target, groupElem, true);\n target.children[0].classList.add('e-lock');\n target.children[0].classList.remove('e-unlock');\n target.setAttribute('title', this.l10n.getConstant('UnlockGroup'));\n }\n };\n QueryBuilder.prototype.updateLockItems = function () {\n for (var i = 0; i < this.lockItems.length; i++) {\n var idColl = this.lockItems[i].split('_');\n if (idColl.length > 2) {\n var ruleElem = this.element.querySelector('#' + this.lockItems[i]);\n var target = ruleElem.querySelector('.e-lock-rule-btn');\n ruleElem = closest(target, '.e-rule-container');\n if (!ruleElem.classList.contains('e-disable')) {\n this.ruleLock(target);\n }\n }\n else {\n var groupElem = this.element.querySelector('#' + this.lockItems[i]);\n var target = groupElem.querySelector('.e-lock-grp-btn');\n groupElem = closest(target, '.e-group-container');\n if (!groupElem.classList.contains('e-disable')) {\n this.groupLock(target);\n }\n }\n }\n };\n QueryBuilder.prototype.disableHeaderControls = function (target, groupElem, isDisabled) {\n var andElem = groupElem.querySelectorAll('.e-btngroup-and');\n var orElem = groupElem.querySelectorAll('.e-btngroup-or');\n var notElem = groupElem.querySelectorAll('.e-qb-toggle');\n var addElem = groupElem.querySelectorAll('.e-add-btn');\n var deleteGrpElem = groupElem.querySelectorAll('.e-deletegroup');\n var lockElem = groupElem.querySelectorAll('.e-lock-grp-btn');\n var cloneElem = groupElem.querySelectorAll('.e-clone-grp-btn');\n var groupContElem = groupElem.querySelectorAll('.e-group-container');\n var addCondition = groupElem.querySelectorAll('.e-add-condition-btn');\n var addGroup = groupElem.querySelectorAll('.e-add-group-btn');\n for (var i = 0; i < andElem.length; i++) {\n if (isDisabled) {\n if (groupContElem[i] && groupContElem[i].classList.contains('e-disable')) {\n groupContElem[i].classList.add('e-disable');\n }\n andElem[i].disabled = true;\n orElem[i].disabled = true;\n if (addElem[i]) {\n addElem[i].disabled = true;\n }\n if (addCondition[i]) {\n addCondition[i].disabled = true;\n }\n if (addGroup[i]) {\n addGroup[i].disabled = true;\n }\n if (notElem[i]) {\n notElem[i].disabled = true;\n }\n if (deleteGrpElem[i]) {\n deleteGrpElem[i].disabled = true;\n }\n if (cloneElem[i]) {\n cloneElem[i].disabled = true;\n }\n andElem[i].parentElement.classList.add('e-disabled');\n if (lockElem[i] && lockElem[i] !== target) {\n lockElem[i].disabled = true;\n lockElem[i].children[0].classList.remove('e-unlock');\n lockElem[i].children[0].classList.add('e-lock');\n }\n }\n else {\n if (groupContElem[i]) {\n groupContElem[i].classList.remove('e-disable');\n }\n andElem[i].disabled = false;\n orElem[i].disabled = false;\n if (addElem[i]) {\n addElem[i].disabled = false;\n }\n if (addCondition[i]) {\n addCondition[i].disabled = false;\n }\n if (addGroup[i]) {\n addGroup[i].disabled = false;\n }\n if (lockElem[i]) {\n lockElem[i].disabled = false;\n }\n if (notElem[i]) {\n notElem[i].disabled = false;\n }\n if (deleteGrpElem[i]) {\n deleteGrpElem[i].disabled = false;\n }\n if (cloneElem[i]) {\n cloneElem[i].disabled = false;\n }\n andElem[i].parentElement.classList.remove('e-disabled');\n if (lockElem[i]) {\n lockElem[i].children[0].classList.remove('e-lock');\n }\n if (lockElem[i]) {\n lockElem[i].children[0].classList.add('e-unlock');\n }\n }\n }\n this.disableRuleControls(target, groupElem, isDisabled);\n };\n QueryBuilder.prototype.disableRuleControls = function (target, groupElem, isDisabled) {\n var disableComponents = function (elements, componentGetter, isDisabled) {\n elements.forEach(function (element) {\n var component = componentGetter(element);\n if ('enabled' in component) {\n component.enabled = !isDisabled;\n }\n else if ('disabled' in component) {\n component.disabled = isDisabled;\n }\n });\n };\n var elements = {\n ddl: groupElem.querySelectorAll('.e-control.e-dropdownlist'),\n numeric: groupElem.querySelectorAll('.e-control.e-numerictextbox'),\n text: groupElem.querySelectorAll('.e-control.e-textbox'),\n date: groupElem.querySelectorAll('.e-control.e-datepicker'),\n checkbox: groupElem.querySelectorAll('.e-control.e-checkbox'),\n radio: groupElem.querySelectorAll('.e-control.e-radio'),\n multiSelect: groupElem.querySelectorAll('.e-control.e-multiselect'),\n deleteElem: groupElem.querySelectorAll('.e-rule-delete'),\n lockElem: groupElem.querySelectorAll('.e-lock-rule'),\n cloneElem: groupElem.querySelectorAll('.e-clone-rule'),\n ruleElem: groupElem.querySelectorAll('.e-rule-container'),\n ddTree: groupElem.querySelectorAll('.e-control.e-dropdowntree')\n };\n elements.deleteElem.forEach(function (elem, i) {\n if (isDisabled) {\n if (elements.ruleElem[i] && elements.ruleElem[i].classList.contains('e-disable')) {\n elements.ruleElem[i].classList.add('e-disable');\n }\n elements.deleteElem[i].disabled = true;\n if (elements.cloneElem[i]) {\n elements.cloneElem[i].disabled = true;\n }\n if (elements.lockElem[i] !== target) {\n elements.lockElem[i].disabled = true;\n elements.lockElem[i].children[0].classList.remove('e-unlock');\n elements.lockElem[i].children[0].classList.add('e-lock');\n }\n }\n else {\n if (elements.ruleElem[i]) {\n elements.ruleElem[i].classList.remove('e-disable');\n }\n if (elements.cloneElem[i]) {\n elements.cloneElem[i].disabled = false;\n }\n elements.deleteElem[i].disabled = false;\n elements.lockElem[i].disabled = false;\n elements.lockElem[i].children[0].classList.remove('e-lock');\n elements.lockElem[i].children[0].classList.add('e-unlock');\n }\n });\n disableComponents(elements.ddl, function (elem) { return getComponent(elem, 'dropdownlist'); }, isDisabled);\n disableComponents(elements.numeric, function (elem) { return getComponent(elem, 'numerictextbox'); }, isDisabled);\n disableComponents(elements.text, function (elem) { return getComponent(elem, 'textbox'); }, isDisabled);\n disableComponents(elements.date, function (elem) { return getComponent(elem, 'datepicker'); }, isDisabled);\n disableComponents(elements.checkbox, function (elem) { return getComponent(elem, 'checkbox'); }, isDisabled);\n disableComponents(elements.radio, function (elem) { return getComponent(elem, 'radio'); }, isDisabled);\n disableComponents(elements.multiSelect, function (elem) { return getComponent(elem, 'multiselect'); }, isDisabled);\n disableComponents(elements.ddTree, function (elem) { return getComponent(elem, 'dropdowntree'); }, isDisabled);\n };\n __decorate([\n Event()\n ], QueryBuilder.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], QueryBuilder.prototype, \"destroyed\", void 0);\n __decorate([\n Event()\n ], QueryBuilder.prototype, \"actionBegin\", void 0);\n __decorate([\n Event()\n ], QueryBuilder.prototype, \"beforeChange\", void 0);\n __decorate([\n Event()\n ], QueryBuilder.prototype, \"change\", void 0);\n __decorate([\n Event()\n ], QueryBuilder.prototype, \"dataBound\", void 0);\n __decorate([\n Event()\n ], QueryBuilder.prototype, \"ruleChange\", void 0);\n __decorate([\n Event()\n ], QueryBuilder.prototype, \"dragStart\", void 0);\n __decorate([\n Event()\n ], QueryBuilder.prototype, \"drag\", void 0);\n __decorate([\n Event()\n ], QueryBuilder.prototype, \"drop\", void 0);\n __decorate([\n Complex({}, ShowButtons)\n ], QueryBuilder.prototype, \"showButtons\", void 0);\n __decorate([\n Property(false)\n ], QueryBuilder.prototype, \"summaryView\", void 0);\n __decorate([\n Property(false)\n ], QueryBuilder.prototype, \"allowValidation\", void 0);\n __decorate([\n Property('Default')\n ], QueryBuilder.prototype, \"fieldMode\", void 0);\n __decorate([\n Property([])\n ], QueryBuilder.prototype, \"columns\", void 0);\n __decorate([\n Property(null)\n ], QueryBuilder.prototype, \"fieldModel\", void 0);\n __decorate([\n Property(null)\n ], QueryBuilder.prototype, \"operatorModel\", void 0);\n __decorate([\n Property(null)\n ], QueryBuilder.prototype, \"valueModel\", void 0);\n __decorate([\n Property()\n ], QueryBuilder.prototype, \"headerTemplate\", void 0);\n __decorate([\n Property('')\n ], QueryBuilder.prototype, \"cssClass\", void 0);\n __decorate([\n Property([])\n ], QueryBuilder.prototype, \"dataSource\", void 0);\n __decorate([\n Property('Horizontal')\n ], QueryBuilder.prototype, \"displayMode\", void 0);\n __decorate([\n Property(false)\n ], QueryBuilder.prototype, \"enablePersistence\", void 0);\n __decorate([\n Property('Default')\n ], QueryBuilder.prototype, \"sortDirection\", void 0);\n __decorate([\n Property(5)\n ], QueryBuilder.prototype, \"maxGroupCount\", void 0);\n __decorate([\n Property('auto')\n ], QueryBuilder.prototype, \"height\", void 0);\n __decorate([\n Property('auto')\n ], QueryBuilder.prototype, \"width\", void 0);\n __decorate([\n Property(false)\n ], QueryBuilder.prototype, \"matchCase\", void 0);\n __decorate([\n Property(0)\n ], QueryBuilder.prototype, \"immediateModeDelay\", void 0);\n __decorate([\n Property(false)\n ], QueryBuilder.prototype, \"enableNotCondition\", void 0);\n __decorate([\n Property(false)\n ], QueryBuilder.prototype, \"readonly\", void 0);\n __decorate([\n Property(true)\n ], QueryBuilder.prototype, \"addRuleToNewGroups\", void 0);\n __decorate([\n Property(false)\n ], QueryBuilder.prototype, \"autoSelectField\", void 0);\n __decorate([\n Property(true)\n ], QueryBuilder.prototype, \"autoSelectOperator\", void 0);\n __decorate([\n Property('')\n ], QueryBuilder.prototype, \"separator\", void 0);\n __decorate([\n Property(false)\n ], QueryBuilder.prototype, \"enableSeparateConnector\", void 0);\n __decorate([\n Complex({ condition: 'and', rules: [] }, Rule)\n ], QueryBuilder.prototype, \"rule\", void 0);\n __decorate([\n Property(false)\n ], QueryBuilder.prototype, \"allowDragAndDrop\", void 0);\n QueryBuilder = __decorate([\n NotifyPropertyChanges\n ], QueryBuilder);\n return QueryBuilder;\n}(Component));\nexport { QueryBuilder };\nvar LevelColl = /** @class */ (function () {\n function LevelColl() {\n }\n return LevelColl;\n}());\n","import { extend, isNullOrUndefined } from '@syncfusion/ej2-base';\nvar QueryLibrary = /** @class */ (function () {\n function QueryLibrary(parent) {\n this.parent = parent;\n this.addEventListener();\n }\n QueryLibrary.prototype.destroy = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.removeEventListener();\n };\n QueryLibrary.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on('query-library', this.queryLibrary, this);\n this.parent.on('destroyed', this.destroy, this);\n };\n QueryLibrary.prototype.removeEventListener = function () {\n this.parent.off('query-library', this.queryLibrary);\n this.parent.off('destroyed', this.destroy);\n };\n QueryLibrary.prototype.queryLibrary = function (args) {\n switch (args.prop) {\n case 'getMongoFromRules':\n args.value['obj']['mongoQuery'] = this.getMongoFromRules(args.value['rule'], args.value['mongoQuery']);\n break;\n case 'mongoParser':\n this.mongoParser(args.value['mongoQuery'], args.value['rule'], args.value['mongoLocale']);\n break;\n case 'getParameterSql':\n args.value['obj']['sql'] = this.getParameterSql(args.value['rule']);\n break;\n case 'getNamedParameterSql':\n args.value['obj']['sql'] = this.getNamedParameterSql(args.value['rule']);\n break;\n case 'convertParamSqlToSql':\n args.value['obj']['sql'] = this.convertParamSqlToSql(args.value['sql']);\n break;\n case 'convertNamedParamSqlToSql':\n args.value['obj']['sql'] = this.convertNamedParamSqlToSql(args.value['sql']);\n break;\n }\n };\n QueryLibrary.prototype.getMongoFromRules = function (rule, mongoQuery) {\n mongoQuery = '{';\n if (rule.condition === 'or') {\n mongoQuery += '\"$or\":[';\n mongoQuery = this.convertMongoQuery(rule.rules, mongoQuery) + ']';\n }\n else {\n mongoQuery += '\"$and\":[';\n mongoQuery = this.convertMongoQuery(rule.rules, mongoQuery) + ']';\n }\n mongoQuery += '}';\n return mongoQuery;\n };\n QueryLibrary.prototype.getOperatorFromMongoOperator = function (operator) {\n var operatorValue;\n switch (operator) {\n case '$ne':\n operatorValue = 'notequal';\n break;\n case '$gt':\n operatorValue = 'greaterthan';\n break;\n case '$gte':\n operatorValue = 'greaterthanorequal';\n break;\n case '$lt':\n operatorValue = 'lessthan';\n break;\n case '$lte':\n operatorValue = 'lessthanorequal';\n break;\n case '$nin':\n operatorValue = 'notin';\n break;\n }\n return operatorValue;\n };\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n QueryLibrary.prototype.convertMongoQuery = function (rules, mongoQuery) {\n var _this = this;\n var i = 0;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n rules.forEach(function (item) {\n i++;\n mongoQuery += '{';\n if (item.rules !== undefined) {\n if (item.condition === 'or') {\n mongoQuery += ' \"$or\":[';\n mongoQuery = _this.convertMongoQuery(item.rules, mongoQuery) + ']';\n }\n else {\n mongoQuery += ' \"$and\":[';\n mongoQuery = _this.convertMongoQuery(item.rules, mongoQuery) + ']';\n }\n }\n var itVal = item.type === 'string' && item.operator !== 'in' && item.operator !== 'notin' && item.value && item.value.trim() !== '' ? item.value.replace(/'/g, '\\\\') : '';\n if (item.type === 'string' && (item.operator === 'in' || item.operator === 'notin') && item.value && item.value.length === 1) {\n itVal = item.value[0].replace(/'/g, '\\\\');\n }\n var field = item.field ? item.field.substring(0) : '';\n switch (item.operator) {\n case 'contains':\n mongoQuery += '\"' + field + '\":{\"$regex\":\"' + itVal + '\"}';\n break;\n case 'notcontains':\n mongoQuery += '\"' + field + '\":{\"$not\":{\"$regex\":\"' + item.value + '\"}}';\n break;\n case 'startswith':\n mongoQuery += '\"' + field + '\":{\"$regex\":\"^' + itVal + '\"}';\n break;\n case 'notstartswith':\n mongoQuery += '\"' + field + '\":{\"$not\":{\"$regex\":\"^' + item.value + '\"}}';\n break;\n case 'endswith':\n mongoQuery += '\"' + field + '\":{\"$regex\":\"' + itVal + '$\"}';\n break;\n case 'notendswith':\n mongoQuery += '\"' + field + '\":{\"$not\":{\"$regex\":\"' + item.value + '$\"}}';\n break;\n case 'isnull':\n mongoQuery += '\"' + field + '\": null';\n break;\n case 'isnotnull':\n mongoQuery += '\"' + field + '\":{\"$ne\": null}';\n break;\n case 'isempty':\n mongoQuery += '\"' + field + '\": \"\"';\n break;\n case 'isnotempty':\n mongoQuery += '\"' + field + '\":{\"$ne\": \"\"}';\n break;\n case 'equal':\n if (item.type === 'string') {\n mongoQuery += '\"' + field + '\":\"' + itVal + '\"';\n }\n else if (item.type === 'date') {\n mongoQuery += '\"' + field + '\":\"' + item.value + '\"';\n }\n else if (item.type === 'boolean') {\n mongoQuery += '\"' + field + '\":' + item.value + '';\n }\n else {\n mongoQuery += '\"' + field + '\":' + item.value + '';\n }\n break;\n case 'notequal':\n if (item.type === 'string') {\n mongoQuery += '\"' + field + '\":{\"$ne\":\"' + itVal + '\"}';\n }\n else if (item.type === 'date') {\n mongoQuery += '\"' + field + '\":{\"$ne\":\"' + item.value + '\"}';\n }\n else {\n mongoQuery += '\"' + field + '\":{\"$ne\":' + item.value + '}';\n }\n break;\n case 'in':\n if (item.type === 'string') {\n if (item.value.length > 1) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var s = item.value.map(function (x, j) { return (j < item.value.length ? \"\\\"\" + x + \"\\\"\" : ''); }).toString();\n s = s.endsWith(',') ? s.substring(0, s.length - 1) : s;\n mongoQuery += '\"' + field + '\": { \"$in\": [' + s + ']}';\n }\n else {\n mongoQuery += '\"' + field + '\": { \"$in\": [\"' + itVal + '\"]}';\n }\n }\n else if (item.type === 'number') {\n if (item.value.length > 1) {\n mongoQuery += '\"' + field + '\": { \"$in\": [' + item.value.toString() + ']}';\n }\n else {\n mongoQuery += '\"' + field + '\": { \"$in\": [' + item.value + ']}';\n }\n }\n break;\n case 'notin':\n if (item.type === 'string') {\n if (item.value.length > 1) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var s = item.value.map(function (x, j) { return (j < item.value.length ? \"\\\"\" + x + \"\\\"\" : ''); }).toString();\n s = s.endsWith(',') ? s.substring(0, s.length - 1) : s;\n mongoQuery += '\"' + field + '\": { \"$nin\": [' + s + ']}';\n }\n else {\n mongoQuery += '\"' + field + '\": { \"$nin\": [\"' + itVal + '\"]}';\n }\n }\n else if (item.type === 'number') {\n if (item.value.length > 1) {\n mongoQuery += '\"' + field + '\": { \"$nin\": [' + item.value.toString() + ']}';\n }\n else {\n mongoQuery += '\"' + field + '\": { \"$nin\": [' + item.value + ']}';\n }\n }\n break;\n case 'greaterthan':\n if (item.type === 'number') {\n mongoQuery += '\"' + field + '\": { \"$gt\": ' + item.value + '}';\n }\n else {\n mongoQuery += '\"' + field + '\": { \"$gt\": \"' + item.value + '\"}';\n }\n break;\n case 'greaterthanorequal':\n if (item.type === 'number') {\n mongoQuery += '\"' + field + '\": { \"$gte\": ' + item.value + '}';\n }\n else {\n mongoQuery += '\"' + field + '\": { \"$gte\": \"' + item.value + '\"}';\n }\n break;\n case 'between':\n if (item.type === 'number') {\n mongoQuery += '\"' + field + '\": {\"$gte\":' + item.value[0] + ', \"$lte\":' + item.value[1] + '}';\n }\n else {\n mongoQuery += '\"' + field + '\": {\"$gte\": \"' + item.value[0] + '\", \"$lte\": \"' + item.value[1] + '\"}';\n }\n break;\n case 'notbetween':\n if (item.type === 'number') {\n mongoQuery += '\"$or\":[{\"' + field + '\": {\"$lt\":' + item.value[0] + '}}, {\"' + field + '\": {\"$gt\":' + item.value[1] + '}}]';\n }\n else {\n mongoQuery += '\"$or\":[{\"' + field + '\": {\"$lt\": \"' + item.value[0] + '\"}}, {\"' + field + '\": {\"$gt\": \"' + item.value[1] + '\"}}]';\n }\n break;\n case 'lessthan':\n if (item.type === 'number') {\n mongoQuery += '\"' + field + '\": { \"$lt\": ' + item.value + '}';\n }\n else {\n mongoQuery += '\"' + field + '\": { \"$lt\": \"' + item.value + '\"}';\n }\n break;\n case 'lessthanorequal':\n if (item.type === 'number') {\n mongoQuery += '\"' + field + '\": { \"$lte\": ' + item.value + '}';\n }\n else {\n mongoQuery += '\"' + field + '\": { \"$lte\": \"' + item.value + '\"}';\n }\n break;\n }\n mongoQuery += '}';\n if (rules.length !== i) {\n mongoQuery += ',';\n }\n });\n return mongoQuery;\n };\n QueryLibrary.prototype.mongoParser = function (mongoQuery, rule, mongoLocale) {\n var mongoList;\n if (Object.keys(mongoQuery).indexOf('$and') > -1) {\n mongoList = mongoQuery['$and'];\n rule.condition = 'and';\n }\n else if (Object.keys(mongoQuery).indexOf('$or') > -1) {\n mongoList = mongoQuery['$or'];\n rule.condition = 'or';\n }\n rule.rules = [];\n this.mongoRecursion(mongoList, rule.rules, mongoLocale);\n };\n QueryLibrary.prototype.mongoRecursion = function (mongoList, rules, mongoLocale) {\n var operatorValue;\n var type;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var stringValue;\n var key;\n var betweenValue;\n var fieldType;\n var condition;\n var value;\n var subRules;\n var rule;\n var keyObj;\n var ruleValue;\n for (var i = 0, len = mongoList.length; i < len; i++) {\n var betweenOperatorArray = [];\n var inOperatorArray = [];\n condition = Object.keys(mongoList[i])[0];\n value = mongoList[i][condition];\n if (condition === '$and') {\n if (this.parent.enableNotCondition) {\n subRules = { condition: condition.replace('$', ''), rules: [], not: false };\n }\n else {\n subRules = { condition: condition.replace('$', ''), rules: [] };\n }\n rules.push(subRules);\n this.mongoRecursion(mongoList[i][condition], rules[rules.length - 1].rules, mongoLocale);\n }\n else if (condition === '$or') {\n var notBetween = void 0;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var innerObject = [];\n var keys = [];\n var firstKey = [];\n var secondKey = [];\n var innerKeys = [];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var firstValue = [];\n var secondValue = [];\n var innerFirstValue = [];\n var innerSecondValue = [];\n if (Array.isArray(value) && value.length === 2) {\n keys = Object.keys(value);\n innerFirstValue = value[keys[0]];\n innerSecondValue = value[keys[1]];\n if (typeof innerFirstValue === 'object') {\n innerObject = Object.keys(innerFirstValue)[0];\n innerKeys = Object.keys(innerFirstValue[Object.keys(innerFirstValue)[0]]);\n firstKey = innerKeys[0];\n secondKey = Object.keys(innerSecondValue[Object.keys(innerSecondValue)[0]])[0];\n if (firstKey === '$lt' && secondKey === '$gt') {\n operatorValue = 'notbetween';\n // eslint-disable-next-line security/detect-object-injection\n firstValue = innerFirstValue[innerObject][firstKey];\n // eslint-disable-next-line security/detect-object-injection\n secondValue = innerSecondValue[innerObject][secondKey];\n type = typeof firstValue === 'number' ? 'number' : 'date';\n ruleValue = [firstValue, secondValue];\n rule = { field: innerObject, label: innerObject, value: ruleValue, operator: operatorValue, type: type };\n rules.push(rule);\n notBetween = true;\n }\n }\n }\n if (!notBetween) {\n if (this.parent.enableNotCondition) {\n subRules = { condition: condition.replace('$', ''), rules: [], not: false };\n }\n else {\n subRules = { condition: condition.replace('$', ''), rules: [] };\n }\n rules.push(subRules);\n this.mongoRecursion(mongoList[i][condition], rules[rules.length - 1].rules, mongoLocale);\n }\n }\n else {\n value = mongoList[i][condition];\n if (value === null) { // isnull operator\n operatorValue = 'isnull';\n }\n if (typeof value === 'boolean') { // boolean type values\n operatorValue = 'equal';\n type = 'boolean';\n ruleValue = value;\n }\n if (typeof (value) === 'number') {\n ruleValue = value;\n type = 'number';\n operatorValue = 'equal';\n }\n else if (typeof (value) === 'object' && value !== null) {\n keyObj = Object.keys(value);\n for (var i_1 = 0; i_1 < keyObj.length; i_1++) {\n key = keyObj[i_1];\n stringValue = (value)[keyObj[i_1]];\n if (key === '$ne' && isNullOrUndefined(stringValue)) { // not null operator\n operatorValue = 'isnotnull';\n ruleValue = null;\n }\n if (key === '$ne' && typeof stringValue === 'boolean') { // not equal operator for boolean\n operatorValue = 'notequal';\n ruleValue = stringValue;\n type = 'boolean';\n }\n if (keyObj.length >= 2 && keyObj[i_1]) {\n if (typeof (stringValue) == 'object') { // between and notbetween operators\n operatorValue = 'notbetween';\n condition = Object.keys(stringValue)[0];\n betweenValue = [Object.keys(stringValue[condition])[0]];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n betweenOperatorArray.push(stringValue[condition][betweenValue]);\n type = 'number';\n }\n else {\n operatorValue = 'between';\n betweenOperatorArray.push(stringValue);\n }\n if (typeof (stringValue) === 'number') {\n type = 'number';\n }\n }\n else if (typeof (stringValue) === 'object' && stringValue !== null) { // \"in\" and \"notin\" operator\n if (key === '$not' && Object.keys(stringValue)[0] === '$regex') {\n if (stringValue['$regex'].indexOf('^') > -1) {\n operatorValue = 'notstartswith';\n ruleValue = stringValue['$regex'].replace('^', '');\n }\n else if (stringValue['$regex'].indexOf('$') > -1) {\n operatorValue = 'notendswith';\n ruleValue = stringValue['$regex'].replace('$', '');\n }\n else {\n operatorValue = 'notcontains';\n ruleValue = stringValue['$regex'];\n }\n }\n else {\n operatorValue = key === '$in' ? 'in' : 'notin';\n inOperatorArray = stringValue;\n type = typeof (stringValue[0]) === 'number' ? 'number' : 'string';\n }\n }\n else if (typeof (stringValue) === 'number') { // number type values\n operatorValue = this.getOperatorFromMongoOperator(key);\n type = 'number';\n ruleValue = stringValue;\n }\n if (typeof (stringValue) === 'string') { // string type values\n if (key === '$regex') {\n operatorValue = 'contains';\n ruleValue = stringValue;\n type = 'string';\n }\n if (key === '$ne') { // not equal\n if (stringValue !== null && stringValue.length > 0 && isNaN(Date.parse(stringValue))) {\n operatorValue = 'notequal';\n ruleValue = stringValue;\n }\n else if (isNullOrUndefined(stringValue)) { // is not null operator\n operatorValue = 'isnotnull';\n ruleValue = stringValue;\n }\n else if (stringValue === '') { // is not empty operator\n operatorValue = 'isnotempty';\n ruleValue = stringValue;\n }\n type = 'string';\n }\n if (stringValue.indexOf('^') > -1) {\n operatorValue = 'startswith';\n ruleValue = stringValue.replace('^', '');\n type = 'string';\n }\n if (stringValue.indexOf('$') > -1 && key !== '$not') {\n operatorValue = 'endswith';\n ruleValue = stringValue.replace('$', '');\n type = 'string';\n }\n for (var _i = 0, _a = this.parent.columns; _i < _a.length; _i++) {\n var column = _a[_i];\n if (column.field === condition) {\n fieldType = column.type;\n break;\n }\n }\n if (!isNaN(Date.parse(stringValue)) || fieldType === 'date') { // Date type operators\n operatorValue = operatorValue || this.getOperatorFromMongoOperator(key);\n type = 'date';\n ruleValue = stringValue;\n }\n }\n }\n }\n else if (value && typeof (value) === 'string' && !isNaN(Date.parse(value))) {\n operatorValue = 'equal';\n ruleValue = value;\n type = 'date';\n }\n else if (typeof (value) === 'string' && value !== '' && value !== 'true' && value !== 'false') {\n operatorValue = 'equal';\n ruleValue = value;\n type = 'string';\n }\n else if (typeof (value) === 'string' && value === '') {\n operatorValue = 'isempty';\n ruleValue = value;\n type = 'string';\n }\n if (betweenOperatorArray && betweenOperatorArray.length > 1) { // between opertor value\n rule = { field: condition, label: condition, value: betweenOperatorArray, operator: operatorValue, type: type };\n }\n else if (inOperatorArray && inOperatorArray.length > 1) { // in operator value\n rule = { field: condition, label: condition, value: inOperatorArray, operator: operatorValue, type: type };\n }\n else {\n rule = { field: condition, label: condition, value: ruleValue, operator: operatorValue, type: type };\n }\n rules.push(rule);\n operatorValue = '';\n }\n }\n };\n QueryLibrary.prototype.convertParamSqlToSql = function (sql) {\n var paramSql = sql.sql;\n var paramValues = sql.params;\n var parts = paramSql.split('?');\n var normalSql = parts[0];\n for (var i = 0; i < paramValues.length; i++) {\n normalSql += (typeof (paramValues[i]) === 'string' ? \"'\" + paramValues[i] + \"'\" + parts[i + 1] : paramValues[i] + parts[i + 1]);\n }\n if (normalSql.length >= 2 && normalSql[0] === '(' && normalSql[normalSql.length - 1] === ')') {\n normalSql = normalSql.slice(1, -1);\n }\n normalSql = normalSql.replace(/!= ''(?! =)/g, 'IS NOT EMPTY').replace(/= ''/g, 'IS EMPTY');\n return normalSql;\n };\n QueryLibrary.prototype.convertNamedParamSqlToSql = function (sql) {\n var namedParamSql = sql.sql;\n var params = sql.params;\n var normalSql = namedParamSql;\n Object.keys(params).forEach(function (paramName) {\n var paramValue = params[paramName];\n paramName = ':' + paramName;\n normalSql = normalSql.replace(paramName, typeof (paramValue) === 'string' ? \"'\" + paramValue + \"'\" : String(paramValue));\n });\n if (normalSql.length >= 2 && normalSql[0] === '(' && normalSql[normalSql.length - 1] === ')') {\n normalSql = normalSql.slice(1, -1);\n }\n normalSql = normalSql.replace(/!= ''(?! =)/g, 'IS NOT EMPTY').replace(/= ''/g, 'IS EMPTY');\n return normalSql;\n };\n QueryLibrary.prototype.getParameterSql = function (qbrule) {\n var qbRule = extend({}, qbrule, null, true);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var value = this.updateRuleValue(qbRule, false);\n return this.getParameterSQLVal(this.parent.getSqlFromRules(qbRule), value['ruleVal']);\n };\n QueryLibrary.prototype.getNamedParameterSql = function (qbrule) {\n var qbRule = extend({}, qbrule, null, true);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var value = this.updateRuleValue(qbRule, true);\n return this.getNamedParameterSQLVal(this.parent.getSqlFromRules(qbRule), value['namedRuleVal']);\n };\n QueryLibrary.prototype.getParameterSQLVal = function (content, ruleValue) {\n var replacedString = content.replace(/[%']/g, '');\n return { sql: '(' + replacedString + ')', params: ruleValue };\n };\n QueryLibrary.prototype.getNamedParameterSQLVal = function (content, ruleValue) {\n var replacedString = content.replace(/[%']/g, '');\n return { sql: '(' + replacedString + ')', params: ruleValue };\n };\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n QueryLibrary.prototype.updateRuleValue = function (rule, isNamedParameter) {\n var ruleVal = [];\n var namedRuleVal = {};\n var namedParameters = [];\n return this.updateValue(rule.rules, isNamedParameter, ruleVal, namedRuleVal, namedParameters);\n };\n QueryLibrary.prototype.updateValue = function (rules, isNamedParameter, ruleVal, \n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n namedRuleVal, namedParameters) {\n if (isNullOrUndefined(rules)) {\n return { ruleVal: ruleVal, namedRuleVal: namedRuleVal };\n }\n for (var i = 0; i < rules.length; i++) {\n if (rules[i].rules) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var value = this.updateValue(rules[i].rules, isNamedParameter, ruleVal, namedRuleVal, namedParameters);\n ruleVal = value['ruleVal'];\n namedRuleVal = value['namedRuleVal'];\n }\n else {\n var namedField = void 0;\n if (rules[i].value instanceof Array) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n for (var j = 0; j < (rules[i].value).length; j++) {\n if (isNamedParameter) {\n namedField = this.getNamedParameter(rules[i].field, namedParameters);\n }\n if (!isNullOrUndefined(rules[i].value[j])) {\n if (rules[i].type === 'string' || rules[i].type === 'date') {\n if (isNamedParameter) {\n namedRuleVal[namedField] = rules[i].value[j];\n }\n else {\n ruleVal.push(rules[i].value[j]);\n }\n }\n else {\n if (isNamedParameter) {\n namedRuleVal[namedField] = rules[i].value[j];\n }\n else {\n ruleVal.push(rules[i].value[j]);\n }\n }\n }\n if (isNamedParameter) {\n rules[i].value[j] = ':' + namedField;\n }\n else {\n rules[i].value[j] = '?';\n }\n }\n }\n else {\n if (isNamedParameter) {\n namedField = this.getNamedParameter(rules[i].field, namedParameters);\n }\n if (rules[i].operator.indexOf('null') < 1) {\n if (rules[i].type !== 'string' || (rules[i].type === 'string' && (rules[i].value !== '' || rules[i].value === 0))) {\n if (rules[i].type === 'string' || rules[i].type === 'date') {\n if (rules[i].operator.indexOf('empty') < 1) {\n var value = rules[i].value.toString();\n switch (rules[i].operator) {\n case 'startswith':\n case 'notstartswith':\n value = value + '%';\n break;\n case 'endswith':\n case 'notendswith':\n value = '%' + value;\n break;\n case 'contains':\n case 'notcontains':\n value = '%' + value + '%';\n break;\n }\n if (isNamedParameter) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n namedRuleVal[namedField] = value;\n }\n else {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ruleVal.push(value);\n }\n }\n else {\n if (isNamedParameter) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n namedRuleVal[namedField] = '';\n }\n else {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ruleVal.push('');\n }\n if (rules[i].operator === 'isempty') {\n rules[i].operator = 'equal';\n }\n else {\n rules[i].operator = 'notequal';\n }\n }\n }\n else {\n if (!isNullOrUndefined(rules[i].value)) {\n if (isNamedParameter) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n namedRuleVal[namedField] = rules[i].value;\n }\n else {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ruleVal.push(rules[i].value);\n }\n }\n }\n if (isNamedParameter) {\n rules[i].value = ':' + namedField;\n }\n else {\n rules[i].value = '?';\n }\n }\n }\n }\n }\n }\n return { ruleVal: ruleVal, namedRuleVal: namedRuleVal };\n };\n QueryLibrary.prototype.getNamedParameter = function (field, namedParameters) {\n var newField = null;\n if (namedParameters.length > 0) {\n for (var i = namedParameters.length - 1; i >= 0; i--) {\n var currField = namedParameters[i];\n if (currField.indexOf(field) > -1) {\n var idx = parseInt(currField.split('_')[1], 10) + 1;\n newField = field + '_' + idx;\n namedParameters.push(newField);\n break;\n }\n }\n }\n if (!newField) {\n newField = field + '_1';\n namedParameters.push(newField);\n }\n return newField;\n };\n QueryLibrary.prototype.getModuleName = function () {\n return 'query-library';\n };\n return QueryLibrary;\n}());\nexport { QueryLibrary };\n","import * as index from './index';\nindex.QueryBuilder.Inject(index.QueryLibrary);\nexport * from './index';\n"],"names":["__extends","extendStatics","d","b","Object","setPrototypeOf","__proto__","Array","p","hasOwnProperty","__","this","constructor","prototype","create","__assign","assign","t","s","i","n","arguments","length","call","apply","__decorate","decorators","target","key","desc","c","r","getOwnPropertyDescriptor","Reflect","decorate","defineProperty","Columns","_super","Property","isRequired","min","max","Number","MAX_VALUE","ChildProperty","Rule","Collection","Value","ShowButtons","QueryBuilder","options","element","_this","isReadonly","fields","text","value","updatedRule","not","condition","isLocked","isLocale","isRefreshed","isNotified","isAddSuccess","isNotValueChange","isFieldChange","isFieldClose","isDestroy","isGetNestedData","isCustomOprCols","groupCounter","lockItems","groupIndex","ruleIndex","isLastGroup","cloneGrpBtnClick","isMiddleGroup","cloneRuleBtnClick","isValueEmpty","isPropChange","isRuleClicked","groupCloned","isRequestSent","MultiSelect","Inject","CheckBoxSelection","getPersistData","addOnPersist","reset","isImportRules","bodyElem","querySelector","inputElements","querySelectorAll","currentIndex","processBatch","endIndex","Math","className","indexOf","tooltip","getComponent","destroy","parentElement","e","console","warn","requestAnimationFrame","textContent","fragment","document","createDocumentFragment","grpContainer","createElement","attrs","class","grpHeader","grpBody","appendChild","headerTemplate","isRoot","enableNotCondition","toggleElements","removeClass","levelColl","id","setProperties","rule","rules","disableRuleCondition","getWrapper","getModuleName","requiredModules","modules","push","member","args","GetRootColumnName","field","isNullOrUndefined","separator","split","initialize","dataColl","type_1","value_1","columnKeys_1","keys","cols","categories_1","groupBy_1","isDate_1","validateObj_1","columns","columnSort","forEach","column","updateCustomOperator","type","isNaN","Date","parse","getTime","validation","category","l10n","getConstant","operators","customOperators","groupBy","updateSubFieldsFromColumns","len","label","updateSubFields","sortDirection","processColumnsInBatches","setTimeout","trigger","processedCount","endIdx","col","updateSubFieldsLarge","colLength","processNextBatch","j","data","sampCol","result","columnKeys","compField","resData","from","this_1","sqlIdx","operator_1","operColl","values","map","join","valueIdx","focusEventHandler","event","clickEventHandler","groupID","tagName","animation","Animation","duration","delay","renderSummary","summaryElem","getElementById","txtareaElem","animate","name","groupElem","style","display","getSqlFromRules","height","scrollHeight","actionButton","deleteRule","ruleClone","ruleLock","groupLock","groupClone","closest","deleteGroup","addGroupElement","mRules","extend","setGroupRules","renderSummaryCollapse","forIdValue","getAttribute","targetValue","enableSeparateConnector","classList","contains","replace","group","getGroup","ariaChecked","toggleElem","getElementsByClassName","addClass","cancel","toLowerCase","beforeSuccessCallBack","observedChangeArgs","beforeRules","getValidRules","getParentGroup","previousElementSibling","getRule","ruleID","filterRules","andElem","orElem","checked","selectBtn","showButtons","groupInsert","maxGroupCount","enableRtl","children","addRuleElement","appendRuleElem","parentId","action","ruleElem","elem","ruleListElem","select","setAttribute","ruleIdCounter","cloneRule","index","tempRuleIndex","insertBefore","ruleTemplate","requestType","ruleTemplateFn","templateParser","templateID","getOperators","operatorFields","isReact","isAngular","templateColl","nodeType","isVue3","append","cloneNode","lockGroup","lockRule","cloneGroup","ruleDelete","allowDragAndDrop","renderReactTemplates","isRuleTemplate","isInitialLoad","prvtEvtTgrDaD","addRuleSuccessCallBack","trgt","act","pId","isRlTmp","isVertical","displayMode","getColumn","newRule","operator","selectedColumn","passedRule_1","actionArgs","createArgs","spanElement","add","previousRuleElem","processAdjacentElements","updateAddedRule","ruleCount","applyFieldComponent","lockRuleTarget","processConnectorElements","ruleContainer","prevRule","headerTemplateFn","handleOrphanedRuleElement","prevElem","prevRuleContainer","notCondition","undefined","handleOrphanedConnectorElement","setMultiConnector","fieldMode","applyDropdownListComponent","applyDropdownTreeComponent","ddlField","ddlValue","autoSelectField","dataSource","placeholder","popupHeight","close","fieldClose","bind","change","changeField","open","popupOpen","cssClass","fieldModel","dropDownList","DropDownList","appendTo","ddlVal","getDataByValue","changeRule","itemData","dummyDropdownTreeDs","updateDropdowntreeDS","child","expanded","selectable","showClearButton","changeOnBlur","treeSettings","expandOn","filtering","dropdownTreeFiltering","dropdownTreeClose","dropdowntree","DropDownTree","getLabelFromColumn","proxy","ruleElemID","srcElement","ddTree","hierarchicalData","changeDataSource","matchedDataSource","nestedChildFilter","filter","filteredChild","treeObj","expandAll","refresh","node","isMatchedNode","matchedChildren","checkValue","parseInt","toString","template","isNewRuleAdded","enableSeparateCondition","custom","splice","changeRuleTemplate","parentGroup","previousColumn","detach","clearQBTemplate","operVal","renderToolTip","Tooltip","content","position","afterClose","beforeOpen","tooltipCloseElement","validateFields","dropDownTreeObj","isValid","allowValidation","excludeOprs","fieldElem","indexElem","valArray","dropDownObj","tempElem","ruleElemCln","validateRule","separateCondition","valElem","jLen","refreshLevelColl","obj","groupElement","level","refreshLevel","childElem","ruleList","iLen","groupCount","slice","groupTemplate","isConnector","glueElem","inputElem","dragClsName","labelElem","grpActElem","groupBtn","groupHdrElem","grpBodyElem","rulesElem","spanDragElement","aria-label","title","role","innerHTML","clsName","cloneClsName","lockClsName","filterElem","cloneRuleBtnElem","cloneLockBtnElem","delBtnElem","isGroup","isBtnClick","addGroupSuccess","eventTarget","dltGroupBtn","groupIdCounter","andInpElem","orInpElem","andLblElem","orLblElem","btnGroupId","groupDelete","Button","iconCss","rippleEffect","selector","childElems","grpLen","tempGroupIndex","idx","parentNode","addGroups","addRuleToNewGroups","cloneBtnElem","lockBtnElem","lockSpanElement","notElem","CheckBox","btnGroup","childNodes","newAndElem","newOrElem","nextSibling","nextElementSibling","args_1","conditionBtn_1","btnObj","onclick","groupBtn_1","DropDownButton","items","grpId","chgrpId","childGroupID","btnGroupElem","addHeaderDiv","disabled","isInitialRule","groupHdr","getRuleCollection","headerFn","enableSeparateConnectorInitialRule","nodeName","notifyChange","grpElement","ruleElement","format","getFormat","intl","formatDate","templateChange","updateRules","eventsArgs","grpElem","validateValue","prevOper","arrOper","grpEle","destroyControls","changeValue","isNumInput","currentTarget","dateElement","rbValue","numericTextBoxObj","getInstance","NumericTextBox","decimalSeparator","getValue","getNumericObject","locale","getNumberParser","immediateModeDelay","window","clearInterval","timer","setInterval","filterValue","grID","rlID","ele","changeValueSuccessCallBack","setSecondDateMinFromFirst","valueIndex","operatorDropdownElement","operatorDropdown","firstDateElement","secondDateElement","firstDatePicker","secondDatePicker","nextDay","setDate","getDate","ddl","item","popupObj","getItemData","customArgs","isInteracted","previousItemData","prevItemData","previousItem","previousValue","ddtElem","ddt","oldValue","dataBind","destroySubFields","subFieldElem","ddlArgs","tempRule","ddlObj","changeFilter","flt","dl","rl","tmpRl","dArg","selectedField","fieldChangeSuccess","operatorElem","changeOperator","opr","selectedIndex","operatorChangeSuccess","changeRuleValues","tooltipElem","createSubFields","remove","subFieldValue","subFilterCounter","ruleId","subField","currOper","prevValue","parentElem","operatorList","oprElem","childElementCount","fieldObj","renderValues","operator_2","ddlIdx","autoSelectOperator","ddlOperator","operatorModel","isField","popup","inputElement","divElement","templateDestroy","templateElement","elemId","temp","templateElements","elementId","elements","getValues","original","fieldColl","dataObj","fieldStr","createNestedObject","lastIndex","k","getDistinctValues","nest","isNested","this_2","renderMultiSelect","selectedValue","ds","isFetched","isValues","multiSelectValue","multiSelectUserQuery","valueModel","multiSelectModel","query","multiSelectQuery","clone","Query","resolvedQuery","dataManager","DataManager","selectedRule","mode","width","closePopup","actionBegin","multiSelectOpen","multiSelectObj","bindMultiSelectData","multiselectObj","incomingQuery","existingQuery","areQueriesSame","query1","query2","JSON","stringify","getMultiSelectData","dummyData","deferred","Deferred","userQuery","dataQuery","executeQuery","hideSpinner","createSpinner","showSpinner","then","actual","newData","current","catch","reject","spinnerElem","Browser","isDevice","ms","processTemplate","container","tempElements","onComplete","write","templateArgs","writeResult","parentFieldObj","subFieldObjList","lastSubFieldObj","setDefaultValue","isArryValue","isNumber","renderStringValue","ruleValElem","selectedVal","columnData","isTemplate","isPublic","txtBox","input","textBoxModel","inputobj","TextBox","minWidth","renderNumberValue","selVal","txtInp","numericTxt","step","numericTextBoxModel","numeric","oninput","processValueString","numArr","strArr","kLen","parseDate","formatOpt","dParser","getDateParser","skeleton","renderControls","isRendered","length_1","processBoolValues","datepick","datePicker","place","parsedDate","formatObj","getLocale","datePickerModel","DatePicker","parsedMinDate","orgValue","isCheck","radioBtn","radioButtonModel","radiobutton","RadioButton","getOperatorIndex","getPreviousItemData","isRender","filtElem","getElementsByTagName","filtObj","isTempRendered","setColumnTemplate","inputLen","renderTemplate","observedActionArgs","actionBeginSuccessCallBack","Element","columnTemplateFn","valElemColl","updateValues","selectedDate","radioBtnObj","textboxValue","controlName","some","op","val","trim","isNotTrigger","valueContainer","elementCln","i_1","i_2","ruleValueUpdate","beforeRule","afterRule","previousRule","oper","arrOperator","dupSelectedValue","parseFloat","isObject","formatOptions","findGroupByIdx","groupIdx","ruleColl","dupRuleColl","unWireEvents","portals","qbDdlElems","ddlElem","targetInput","ddlInst","popupElement","addRules","groups","importRules","HTMLElement","parent_1","allContainers","topLevelGroups","initialID","lastGroupIndex","lastGroup","initWrapper","innerWidth","summaryView","notGroupRtl","readonly","enableReadonly","buttons","button","contentElem","textElem","styles","editElem","divElem","collapseElem","executeLocal","sortByDesc","sortBy","onChangeNotGroup","checkNotGroup","orgRule","onPropertyChanged","newProp","oldProp","properties","_i","properties_1","enablePersistence","setRules","Internationalization","preRender","getUniqueID","defaultLocale","StartsWith","DoesNotStartWith","EndsWith","DoesNotEndWith","Contains","DoesNotContain","NotLike","Like","Equal","NotEqual","LessThan","LessThanOrEqual","GreaterThan","GreaterThanOrEqual","Between","NotBetween","In","NotIn","Remove","SelectField","SelectOperator","DeleteRule","DeleteGroup","AddGroup","AddCondition","Edit","ValidationMessage","SummaryViewTitle","OtherFields","AND","OR","NOT","SelectValue","IsEmpty","IsNotEmpty","IsNull","IsNotNull","True","False","AddButton","CloneGroup","LockGroup","CloneRule","LockRule","UnlockRule","UnlockGroup","L10n","parser","stringOperator","dateOperator","booleanOperator","numberOperator","equal","notequal","greaterthan","greaterthanorequal","lessthan","in","notin","lessthanorequal","startswith","endswith","between","notbetween","isnull","isnotnull","isempty","isnotempty","notstartswith","notendswith","notcontains","sqlOperators","toUpperCase","render","stringOper","numberOper","concat","initControl","executeDataManager","take","renderComplete","initializeDrag","draggable","Draggable","dragTarget","distance","helper","dragStart","dragStartHandler","drag","dragHandler","dragStop","dragStopHandler","isReplaceDragEle","isPreventSelect","abort","isDragScroll","enableAutoScroll","currentStateTarget","cloneElement","visualElement","offsetWidth","removeAttribute","draggedRule","isDragEventPrevent","body","dragElement","dragEventArgs","dragRuleID","dragGroupID","borderLineElem","targetElem","rect","getBoundingClientRect","distanceToTop","mouseY","clientY","changedTouches","top","distanceToBottom","bottom","threshold","targetGroup","isPreventelem","targetGrp","dropEventArgs","dropRuleID","dropGroupID","tgrt","groupId_1","groupRule","ruleElems","ruleIds","dropInd","deleteRules","groupId","groupId_2","templateCompiler","compile","error","wireEvents","wrapper","EventHandler","keyBoardHandler","boundResizeHandler","windowResizeHandler","addEventListener","removeEventListener","isParent","groupLevel","deleteGroupSuccessCallBack","nextElem","removeString","remRule","ruleElemColl","isTemplateRendered","isPlatformTemplate","deleteRuleSuccessCallBack","clnruleElem","previousElem","nextElem_1","err","i_3","lockGrpTarget","keyCode","code","dragElemnet","preventDefault","clearTemplate","isNewGroup","count","andGroup","orGroup","currentRule","getRules","ruleCondtion","isValidRule","customObj","isQuestion","lockedRule","isArray","notValue","deleteGroups","groupIdColl","getFilteredRecords","predicate","getPredicate","dataManagerQuery","where","ruleIdColl","getDataManagerQuery","pred","pred2","ruleValue","ignoreCase","and","or","isDateFilter","dateOperColl","matchCase","isTime","datePredicate","arrayPredicate","Predicate","localeString","cldrData","fieldParts","rootField","substring","setTime","date","isStart","setHours","startDate","endDate","nullValue","gte","currDate","setMinutes","setSeconds","isReset","renderGroup","tglBtnElem","renderRule","cloneElem","deleteGroupElems","addRuleGroupElems","removeRuleElems","elems","enableBtnGroup","isDateFunction","dateFunc","getSqlString","enableEscape","queryStr","sqlLocale","notPrefix","reduce","ruleStr","ruleOpertor","valueStr","ruleCondition","fieldName","custOper","isCustom","setRulesFromSql","sqlString","ruleModel","getRulesFromSql","sqlParser","processParser","allowEscape","getParameterizedSql","moduleLoader","loadedModules","sql","notify","prop","onPropertyChange","setParameterizedSql","sqlQuery","getParameterizedNamedSql","setParameterizedNamedSql","setMongoQuery","mongoQuery","mongoLocale","getMongoQuery","isCloneRule","parentGroupID","isCloneGroup","str","st","parseSqlStrings","conditions","subOp","regexStr","matchValue","test","regExp","RegExp","exec","lastPasrser","checkLiteral","checkNumberLiteral","regExValue","singleString","getSingleQuoteString","isClosed","checkCondition","combineSingleQuoteString","doubleString","getDoubleQuoteString","start","end","isBetween","tempMatchValue","tempStr","lastParser","secParser","betweenParser","betweenOperator","getOperator","=","!=","<",">","<=",">=","not in","not between","is empty","is null","is not null","is not empty","localeOperator","getTypeFromColumn","l","getLabelFromField","startIdx","subRules","lLen","grpCount","numVal","strVal","isLeftOpened","isNotOpened","pop","targetGrpId","lockItem","disableRuleControls","newGroup","disableHeaderControls","updateLockItems","isDisabled","addElem","deleteGrpElem","lockElem","groupContElem","addCondition","addGroup","disableComponents","componentGetter","component","enabled","checkbox","radio","multiSelect","deleteElem","Event","Complex","NotifyPropertyChanges","Component","QueryLibrary","parent","isDestroyed","on","queryLibrary","off","getMongoFromRules","mongoParser","getParameterSql","getNamedParameterSql","convertParamSqlToSql","convertNamedParamSqlToSql","convertMongoQuery","getOperatorFromMongoOperator","operatorValue","itVal","x","endsWith","mongoList","mongoRecursion","stringValue","betweenValue","fieldType","keyObj","betweenOperatorArray","inOperatorArray","notBetween","innerObject","firstKey","secondKey","firstValue","innerFirstValue","innerSecondValue","_a","paramSql","paramValues","params","parts","normalSql","namedParamSql","paramName","paramValue","String","qbrule","qbRule","updateRuleValue","getParameterSQLVal","getNamedParameterSQLVal","isNamedParameter","ruleVal","namedRuleVal","namedParameters","updateValue","namedField","getNamedParameter","newField","currField","index.QueryLibrary"],"mappings":"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"}
1
+ {"version":3,"file":"ej2-querybuilder.min.js","sources":["../../src/query-builder/query-builder.js","../../src/query-builder/query-library.js","../../src/global.js"],"sourcesContent":["var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n/**\n * Query Builder Source\n */\n/* eslint-disable max-len */\nimport { Component, NotifyPropertyChanges, getComponent, Browser, compile, append, Draggable, remove } from '@syncfusion/ej2-base';\nimport { Property, ChildProperty, Complex, L10n, closest, extend, isNullOrUndefined, Collection, cldrData } from '@syncfusion/ej2-base';\nimport { getInstance, addClass, removeClass, rippleEffect, detach, classList } from '@syncfusion/ej2-base';\nimport { Internationalization, getUniqueID, select } from '@syncfusion/ej2-base';\nimport { Button, CheckBox, RadioButton } from '@syncfusion/ej2-buttons';\nimport { DropDownList, CheckBoxSelection, DropDownTree } from '@syncfusion/ej2-dropdowns';\nimport { MultiSelect } from '@syncfusion/ej2-dropdowns';\nimport { Event, EventHandler, getValue, Animation } from '@syncfusion/ej2-base';\nimport { Query, Predicate, DataManager, Deferred } from '@syncfusion/ej2-data';\nimport { TextBox, NumericTextBox } from '@syncfusion/ej2-inputs';\nimport { DatePicker } from '@syncfusion/ej2-calendars';\nimport { DropDownButton } from '@syncfusion/ej2-splitbuttons';\nimport { Tooltip, createSpinner, showSpinner, hideSpinner } from '@syncfusion/ej2-popups';\nimport { compile as templateCompiler, getNumericObject } from '@syncfusion/ej2-base';\n/**\n * Defines the Columns of Query Builder\n */\nvar Columns = /** @class */ (function (_super) {\n __extends(Columns, _super);\n function Columns() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], Columns.prototype, \"field\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"label\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"type\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"values\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"operators\", void 0);\n __decorate([\n Property()\n ], Columns.prototype, \"ruleTemplate\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"template\", void 0);\n __decorate([\n Property({ isRequired: true, min: 0, max: Number.MAX_VALUE })\n ], Columns.prototype, \"validation\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"format\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"step\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"value\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"category\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"columns\", void 0);\n return Columns;\n}(ChildProperty));\nexport { Columns };\n/**\n * Defines the rule of Query Builder\n */\nvar Rule = /** @class */ (function (_super) {\n __extends(Rule, _super);\n function Rule() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], Rule.prototype, \"condition\", void 0);\n __decorate([\n Collection([], Rule)\n ], Rule.prototype, \"rules\", void 0);\n __decorate([\n Property(null)\n ], Rule.prototype, \"field\", void 0);\n __decorate([\n Property(null)\n ], Rule.prototype, \"label\", void 0);\n __decorate([\n Property(null)\n ], Rule.prototype, \"type\", void 0);\n __decorate([\n Property(null)\n ], Rule.prototype, \"operator\", void 0);\n __decorate([\n Property(null)\n ], Rule.prototype, \"value\", void 0);\n __decorate([\n Property(false)\n ], Rule.prototype, \"not\", void 0);\n __decorate([\n Property(null)\n ], Rule.prototype, \"isLocked\", void 0);\n return Rule;\n}(ChildProperty));\nexport { Rule };\n/**\n * Defines the property for value.\n */\nvar Value = /** @class */ (function (_super) {\n __extends(Value, _super);\n function Value() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], Value.prototype, \"numericTextBoxModel\", void 0);\n __decorate([\n Property(null)\n ], Value.prototype, \"multiSelectModel\", void 0);\n __decorate([\n Property(null)\n ], Value.prototype, \"datePickerModel\", void 0);\n __decorate([\n Property(null)\n ], Value.prototype, \"textBoxModel\", void 0);\n __decorate([\n Property(null)\n ], Value.prototype, \"radioButtonModel\", void 0);\n return Value;\n}(ChildProperty));\nexport { Value };\n/**\n * Defines the ruleDelete, groupInsert, and groupDelete options of Query Builder.\n */\nvar ShowButtons = /** @class */ (function (_super) {\n __extends(ShowButtons, _super);\n function ShowButtons() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], ShowButtons.prototype, \"cloneRule\", void 0);\n __decorate([\n Property(false)\n ], ShowButtons.prototype, \"cloneGroup\", void 0);\n __decorate([\n Property(false)\n ], ShowButtons.prototype, \"lockRule\", void 0);\n __decorate([\n Property(false)\n ], ShowButtons.prototype, \"lockGroup\", void 0);\n __decorate([\n Property(true)\n ], ShowButtons.prototype, \"ruleDelete\", void 0);\n __decorate([\n Property(true)\n ], ShowButtons.prototype, \"groupInsert\", void 0);\n __decorate([\n Property(true)\n ], ShowButtons.prototype, \"groupDelete\", void 0);\n return ShowButtons;\n}(ChildProperty));\nexport { ShowButtons };\nvar QueryBuilder = /** @class */ (function (_super) {\n __extends(QueryBuilder, _super);\n function QueryBuilder(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.isReadonly = true;\n _this.fields = { text: 'label', value: 'field' };\n _this.updatedRule = { not: false, condition: 'and', isLocked: false };\n _this.isLocale = false;\n _this.isRefreshed = false;\n _this.isNotified = false;\n _this.isAddSuccess = false;\n _this.isNotValueChange = false;\n _this.isFieldChange = false;\n _this.isFieldClose = false;\n _this.isDestroy = false;\n _this.isGetNestedData = false;\n _this.isCustomOprCols = [];\n _this.groupCounter = 0;\n _this.lockItems = [];\n _this.groupIndex = -1;\n _this.ruleIndex = -1;\n _this.isLastGroup = false;\n _this.cloneGrpBtnClick = false;\n _this.isMiddleGroup = false;\n _this.cloneRuleBtnClick = false;\n _this.isValueEmpty = false;\n _this.isPropChange = false;\n _this.isRuleClicked = false;\n _this.groupCloned = false;\n _this.isRequestSent = false;\n _this.isPopupScroll = false;\n MultiSelect.Inject(CheckBoxSelection);\n return _this;\n }\n QueryBuilder.prototype.getPersistData = function () {\n return this.addOnPersist(['rule']);\n };\n /**\n * Clears the rules without root rule.\n *\n * @returns {void}.\n */\n QueryBuilder.prototype.reset = function () {\n this.isImportRules = false;\n var bodyElem = this.element.querySelector('.e-group-body');\n var inputElements = this.element.querySelectorAll('input.e-control');\n var batchSize = 20;\n var currentIndex = 0;\n var processBatch = function () {\n var endIndex = Math.min(currentIndex + batchSize, inputElements.length);\n for (var i = currentIndex; i < endIndex; i++) {\n var element = inputElements[i];\n try {\n if (element.className.indexOf('e-tooltip') > -1) {\n var tooltip = getComponent(element, 'tooltip');\n if (tooltip) {\n tooltip.destroy();\n }\n }\n else if (element.parentElement && element.parentElement.className.indexOf('e-tooltip') > -1) {\n var tooltip = getComponent(element.parentElement, 'tooltip');\n if (tooltip) {\n tooltip.destroy();\n }\n }\n }\n catch (e) {\n console.warn('Error destroying tooltip:', e);\n }\n }\n currentIndex = endIndex;\n if (currentIndex < inputElements.length) {\n requestAnimationFrame(processBatch);\n }\n };\n if (inputElements.length > 0) {\n processBatch();\n }\n if (bodyElem) {\n bodyElem.textContent = '';\n }\n else {\n var fragment = document.createDocumentFragment();\n var grpContainer = this.createElement('div', { attrs: { class: 'e-group-container' } });\n var grpHeader = this.createElement('div', { attrs: { class: 'e-group-header' } });\n var grpBody = this.createElement('div', { attrs: { class: 'e-group-body' } });\n grpContainer.appendChild(grpHeader);\n grpContainer.appendChild(grpBody);\n fragment.appendChild(grpContainer);\n this.element.appendChild(fragment);\n bodyElem = this.element.querySelector('.e-group-body');\n }\n if (this.headerTemplate && this.isRoot) {\n this.element.textContent = '';\n this.isRoot = false;\n }\n if (this.enableNotCondition) {\n var toggleElements = this.element.querySelectorAll('.e-qb-toggle');\n for (var i = 0; i < toggleElements.length; i++) {\n removeClass([toggleElements[i]], 'e-active-toggle');\n }\n }\n if (bodyElem) {\n bodyElem.appendChild(this.createElement('div', { attrs: { class: 'e-rule-list' } }));\n }\n this.levelColl[this.element.id + '_group0'] = [0];\n this.setProperties({ rule: { condition: 'and', not: false, rules: [] } }, true);\n if (bodyElem && bodyElem.parentElement) {\n this.disableRuleCondition(bodyElem.parentElement);\n }\n };\n QueryBuilder.prototype.getWrapper = function () {\n return this.element;\n };\n QueryBuilder.prototype.getModuleName = function () {\n return 'query-builder';\n };\n QueryBuilder.prototype.requiredModules = function () {\n var modules = [];\n modules.push({\n member: 'query-library',\n args: [this]\n });\n return modules;\n };\n QueryBuilder.prototype.GetRootColumnName = function (field) {\n if (!isNullOrUndefined(field)) {\n return this.separator ? field.split(this.separator)[0] : field;\n }\n return '';\n };\n QueryBuilder.prototype.initialize = function () {\n var _this = this;\n if (this.dataColl.length) {\n var columnKeys_1 = Object.keys(this.dataColl[0]);\n var cols = [];\n var categories_1 = [];\n var type_1;\n var groupBy_1 = false;\n var isDate_1 = false;\n var value_1;\n var validateObj_1 = { isRequired: true, min: 0, max: Number.MAX_VALUE };\n if (this.columns.length) {\n this.columnSort();\n var columns = this.columns;\n columns.forEach(function (column) {\n _this.updateCustomOperator(column, 'initial');\n if (!column.type) {\n if (columnKeys_1.indexOf(column.field) > -1) {\n value_1 = _this.dataColl[0][column.field];\n type_1 = typeof value_1;\n if (type_1 === 'string') {\n isDate_1 = !isNaN(Date.parse(value_1));\n }\n else if (type_1 === 'object') {\n isDate_1 = value_1 instanceof Date && !isNaN(value_1.getTime());\n type_1 = 'string';\n }\n column.type = type_1;\n isDate_1 = false;\n }\n type_1 = 'string';\n }\n if (!column.validation) {\n column.validation = validateObj_1;\n }\n if (column.category) {\n groupBy_1 = true;\n }\n else {\n column.category = _this.l10n.getConstant('OtherFields');\n }\n if (categories_1.indexOf(column.category) < 0) {\n categories_1.push(column.category);\n }\n if (!column.operators ||\n (_this.isLocale && _this.isCustomOprCols.indexOf(column.field) === -1)) {\n column.operators = _this.customOperators[column.type + 'Operator'];\n }\n });\n if (groupBy_1 && (categories_1.length > 1 || categories_1[0] !== this.l10n.getConstant('OtherFields'))) {\n this.fields = { text: 'label', value: 'field', groupBy: 'category' };\n }\n this.updateSubFieldsFromColumns(this.columns);\n }\n else {\n for (var i = 0, len = columnKeys_1.length; i < len; i++) {\n value_1 = this.dataColl[0][columnKeys_1[i]];\n type_1 = typeof value_1;\n if (type_1 === 'string') {\n isDate_1 = !isNaN(Date.parse(value_1));\n }\n else if (type_1 === 'object' && !Object.keys(value_1).length) {\n isDate_1 = value_1 instanceof Date && !isNaN(value_1.getTime());\n type_1 = 'string';\n }\n cols[i] = {\n 'field': columnKeys_1[i], 'label': columnKeys_1[i], 'type': isDate_1 ? 'date' : type_1,\n 'validation': validateObj_1\n };\n isDate_1 = false;\n cols[i].operators = this.customOperators[cols[i].type + 'Operator'];\n if (type_1 === 'object') {\n this.updateSubFields(value_1, cols[i]);\n }\n }\n this.columns = cols;\n }\n }\n else if (this.columns && this.columns.length) {\n if (this.sortDirection !== 'Default') {\n this.columnSort();\n }\n this.processColumnsInBatches();\n if (this.columns.length > 50) {\n setTimeout(function () {\n _this.updateSubFieldsFromColumns(_this.columns);\n }, 0);\n }\n else {\n this.updateSubFieldsFromColumns(this.columns);\n }\n }\n this.trigger('dataBound', { type: 'dataBound' });\n };\n QueryBuilder.prototype.processColumnsInBatches = function () {\n var _this = this;\n var columns = this.columns;\n var batchSize = 10;\n var processedCount = 0;\n var processBatch = function () {\n var endIdx = Math.min(processedCount + batchSize, columns.length);\n for (var i = processedCount; i < endIdx; i++) {\n if (columns[i].category && columns[i].category !== _this.l10n.getConstant('OtherFields')) {\n _this.fields = { text: 'label', value: 'field', groupBy: 'category' };\n }\n else {\n columns[i].category = _this.l10n.getConstant('OtherFields');\n }\n _this.updateCustomOperator(columns[i], 'initial');\n if (!columns[i].operators ||\n (_this.isLocale && _this.isCustomOprCols.indexOf(columns[i].field) === -1)) {\n columns[i].operators = _this.customOperators[columns[i].type + 'Operator'];\n }\n }\n processedCount = endIdx;\n if (processedCount < columns.length) {\n requestAnimationFrame(processBatch);\n }\n };\n processBatch();\n };\n QueryBuilder.prototype.updateSubFieldsFromColumns = function (col, field) {\n if (col.length > 50) {\n this.updateSubFieldsLarge(col, field);\n return;\n }\n for (var i = 0; i < col.length; i++) {\n if (this.separator !== '' && col[i].field.indexOf(this.separator) < 0) {\n col[i].field = field ? field + this.separator + col[i].field : col[i].field;\n }\n if (col[i].operators) {\n this.updateCustomOperator(col[i]);\n }\n else if (col[i].type && col[i].type !== 'object') {\n col[i].operators = this.customOperators[col[i].type + 'Operator'];\n }\n if (col[i].columns) {\n col[i].type = 'object';\n this.updateSubFieldsFromColumns(col[i].columns, col[i].field);\n }\n }\n };\n QueryBuilder.prototype.updateSubFieldsLarge = function (col, field) {\n var _this = this;\n var i = 0;\n var colLength = col.length;\n var processNextBatch = function () {\n var endIdx = Math.min(i + 10, colLength);\n for (; i < endIdx; i++) {\n if (_this.separator !== '' && col[i].field.indexOf(_this.separator) < 0) {\n col[i].field = field ? field + _this.separator + col[i].field : col[i].field;\n }\n if (col[i].operators) {\n _this.updateCustomOperator(col[i]);\n }\n else if (col[i].type && col[i].type !== 'object') {\n col[i].operators = _this.customOperators[col[i].type + 'Operator'];\n }\n }\n if (i < colLength) {\n requestAnimationFrame(processNextBatch);\n }\n else {\n setTimeout(function () {\n for (var j = 0; j < colLength; j++) {\n if (col[j].columns) {\n col[j].type = 'object';\n _this.updateSubFieldsFromColumns(col[j].columns, col[j].field);\n }\n }\n }, 0);\n }\n };\n processNextBatch();\n };\n QueryBuilder.prototype.updateSubFields = function (value, col, data) {\n var sampCol;\n col.columns = [];\n var columnKeys = Object.keys(value);\n var field;\n var label;\n var type;\n var result;\n data = data ? data : this.dataColl[0];\n for (var i = 0, len = columnKeys.length; i < len; i++) {\n var compField = col.field.split('.');\n if (data) {\n result = data[compField[compField.length - 1]][columnKeys[i]];\n }\n else {\n result = this.dataColl[0][col.field][columnKeys[i]];\n }\n var resData = data[col.field.split(this.separator)[col.field.split(this.separator).length - 1]];\n type = typeof result;\n field = col.field + this.separator + columnKeys[i];\n label = columnKeys[i];\n type = (type === 'object' && !isNaN(Date.parse(result))) ? 'date' : type;\n sampCol = { field: field, label: label, type: type };\n if (type !== 'object') {\n sampCol.operators = this.customOperators[type + 'Operator'];\n }\n col.columns.push(sampCol);\n if (type === 'object') {\n this.updateSubFields(result, sampCol, resData);\n }\n }\n };\n QueryBuilder.prototype.updateCustomOperator = function (column, from) {\n if (column.operators) {\n if (!this.isLocale && from === 'initial' && !isNullOrUndefined(this.isCustomOprCols)) {\n this.isCustomOprCols.push(column.field);\n }\n var _loop_1 = function (j) {\n var sqlIdx = Object.keys(column.operators[j]).indexOf('sqlOperator');\n if (sqlIdx > -1) {\n var operator_1 = column.operators[j];\n var operColl = Object.keys(operator_1);\n var values = operColl.map(function (key) { return operator_1[\"\" + key]; }).join(',').split(',');\n var valueIdx = operColl.indexOf('value');\n this_1.operators[values[valueIdx]] = values[sqlIdx];\n }\n };\n var this_1 = this;\n for (var j = 0; j < column.operators.length; j++) {\n _loop_1(j);\n }\n }\n };\n QueryBuilder.prototype.focusEventHandler = function (event) {\n this.target = event.target;\n };\n QueryBuilder.prototype.clickEventHandler = function (event) {\n var _this = this;\n var target = event.target;\n var args;\n this.isImportRules = false;\n var groupID;\n if (target.tagName === 'SPAN') {\n target = target.parentElement;\n }\n if (typeof target.className === 'string' && target.className.indexOf('e-collapse-rule') > -1) {\n var animation = new Animation({ duration: 1000, delay: 0 });\n if (this.element.querySelectorAll('.e-summary-content').length < 1) {\n this.renderSummary();\n }\n var summaryElem = document.getElementById(this.element.id + '_summary_content');\n var txtareaElem = summaryElem.querySelector('.e-summary-text');\n animation.animate('.e-query-builder', { name: 'SlideLeftIn' });\n var groupElem = this.element.querySelector('.e-group-container');\n groupElem.style.display = 'none';\n txtareaElem.textContent = this.getSqlFromRules(this.rule);\n summaryElem.style.display = 'block';\n txtareaElem.style.height = txtareaElem.scrollHeight + 'px';\n }\n if (target.tagName === 'BUTTON' && typeof target.className === 'string' && target.className.indexOf('e-qb-toggle') < 0) {\n var animation = new Animation({ duration: 1000, delay: 0 });\n switch (true) {\n case target.className.indexOf('e-removerule') > -1:\n this.actionButton = target;\n this.deleteRule(target);\n break;\n case target.className.indexOf('e-clone-rule-btn') > -1:\n this.actionButton = target;\n this.cloneRuleBtnClick = true;\n this.isRuleClicked = true;\n this.ruleClone(target);\n break;\n case target.className.indexOf('e-lock-rule-btn') > -1:\n this.actionButton = target;\n this.ruleLock(target);\n break;\n case target.className.indexOf('e-lock-grp-btn') > -1:\n this.actionButton = target;\n this.groupLock(target);\n break;\n case target.className.indexOf('e-clone-grp-btn') > -1:\n this.actionButton = target;\n this.cloneGrpBtnClick = this.groupCloned = true;\n this.isRuleClicked = true;\n this.groupClone(closest(target, '.e-group-container'));\n break;\n case target.className.indexOf('e-deletegroup') > -1:\n this.actionButton = target;\n this.deleteGroup(closest(target, '.e-group-container'));\n break;\n case target.className.indexOf('e-edit-rule') > -1:\n animation.animate('.e-query-builder', { name: 'SlideLeftIn' });\n document.getElementById(this.element.id + '_summary_content').style.display = 'none';\n if (this.element.querySelectorAll('.e-group-container').length < 1) {\n this.addGroupElement(false, this.element, this.rule.condition, false, this.rule.not);\n var mRules = extend({}, this.rule, {}, true);\n this.setGroupRules(mRules);\n this.renderSummaryCollapse();\n }\n else {\n var groupElem = this.element.querySelector('.e-group-container');\n if (groupElem.querySelectorAll('.e-collapse-rule').length < 1) {\n this.renderSummaryCollapse();\n }\n groupElem.style.display = 'block';\n }\n break;\n }\n }\n else if ((target.tagName === 'LABEL' && target.parentElement.className.indexOf('e-btn-group') > -1) ||\n (typeof target.className === 'string' && target.className.indexOf('e-qb-toggle') > -1)) {\n var element = closest(target, '.e-group-container');\n if (!this.headerTemplate) {\n var forIdValue = target.getAttribute('for');\n var targetValue = void 0;\n if (forIdValue) {\n targetValue = document.getElementById(forIdValue).getAttribute('value');\n }\n else if (this.enableSeparateConnector) {\n if (target.classList.contains('e-btngroup-or-lbl')) {\n targetValue = 'or';\n }\n else if (target.classList.contains('e-btngroup-and-lbl')) {\n targetValue = 'and';\n }\n else {\n targetValue = target.textContent;\n }\n }\n groupID = element.id.replace(this.element.id + '_', '');\n var group = this.getGroup(groupID);\n var ariaChecked = void 0;\n if (this.enableNotCondition) {\n if (target.className.indexOf('e-qb-toggle') > -1) {\n var toggleElem = element.getElementsByClassName('e-qb-toggle')[0];\n if (toggleElem.className.indexOf('e-active-toggle') > -1) {\n removeClass([toggleElem], 'e-active-toggle');\n ariaChecked = false;\n }\n else {\n addClass([toggleElem], 'e-active-toggle');\n ariaChecked = true;\n }\n targetValue = group.condition;\n }\n else {\n ariaChecked = group.not;\n }\n }\n args = { groupID: groupID, cancel: false, type: 'condition', value: targetValue.toLowerCase() };\n if (this.enableNotCondition) {\n args = {\n groupID: groupID, cancel: false, type: 'condition', value: targetValue.toLowerCase(),\n 'not': ariaChecked\n };\n }\n }\n if (!this.isImportRules) {\n this.trigger('beforeChange', args, function (observedChangeArgs) {\n _this.beforeSuccessCallBack(observedChangeArgs, target);\n });\n }\n else {\n this.beforeSuccessCallBack(args, target);\n }\n this.target = target;\n }\n };\n QueryBuilder.prototype.beforeSuccessCallBack = function (args, target) {\n if (args && !args.cancel) {\n var element = closest(target, '.e-group-container');\n var groupID = element.id.replace(this.element.id + '_', '');\n var beforeRules = this.getValidRules(this.rule);\n var rule = this.getParentGroup(element);\n if (this.enableSeparateConnector) {\n if (isNullOrUndefined(closest(target, '.e-rule-container')) &&\n element.classList.contains('e-group-container')) {\n element = target.parentElement.previousElementSibling !== null ?\n target.parentElement.previousElementSibling : element;\n }\n else {\n element = closest(target, '.e-rule-container');\n }\n var id = element.id.replace(this.element.id + '_', '');\n if (element.classList.contains('e-rule-container')) {\n rule = this.getRule(element);\n rule.condition = args.value;\n }\n else if (element.classList.contains('e-group-container')) {\n rule = this.getGroup(element);\n rule.condition = args.value;\n }\n if (this.enableNotCondition) {\n rule.not = args.not;\n }\n if (!this.isImportRules) {\n this.trigger('change', { groupID: groupID, ruleID: id, type: 'condition', value: rule.condition });\n }\n }\n else {\n rule.condition = args.value;\n if (this.enableNotCondition) {\n rule.not = args.not;\n }\n if (!this.isImportRules) {\n this.trigger('change', { groupID: groupID, type: 'condition', value: rule.condition });\n }\n }\n this.filterRules(beforeRules, this.getValidRules(this.rule), 'condition');\n if (this.enableSeparateConnector) {\n var andElem = target.parentElement.querySelector('.e-btngroup-and');\n var orElem = target.parentElement.querySelector('.e-btngroup-or');\n if (andElem && orElem) {\n if (args.value === 'and') {\n andElem.checked = true;\n orElem.checked = false;\n }\n else if (args.value === 'or') {\n orElem.checked = true;\n andElem.checked = false;\n }\n }\n }\n }\n };\n QueryBuilder.prototype.selectBtn = function (target, event) {\n if (event.name === 'beforeOpen') {\n if (this.showButtons.groupInsert || isNullOrUndefined(this.showButtons.groupInsert)) {\n if (this.element.querySelectorAll('.e-group-container').length >= this.maxGroupCount + 1) {\n addClass([event.element.querySelector('li span.e-addgroup').parentElement], 'e-button-hide');\n }\n else {\n removeClass([event.element.querySelector('li span.e-addgroup').parentElement], 'e-button-hide');\n }\n if (this.enableRtl) {\n addClass([event.element.querySelector('li').parentElement], 'e-rtl');\n }\n }\n else {\n addClass([event.element.querySelector('li span.e-addgroup').parentElement], 'e-button-hide');\n }\n }\n else if (event.element.children[0].className.indexOf('e-addrule') > -1) {\n this.isRuleClicked = true;\n this.addRuleElement(closest(target, '.e-group-container'), {});\n }\n else if (event.element.children[0].className.indexOf('e-addgroup') > -1) {\n this.isRuleClicked = true;\n this.addGroupElement(true, closest(target, '.e-group-container'), '', true);\n }\n };\n QueryBuilder.prototype.appendRuleElem = function (target, column, type, parentId, action, rule) {\n var ruleElem;\n var elem;\n var ruleListElem = target && target.querySelector('.e-rule-list');\n var args;\n if (type === 'change') {\n ruleElem = select('#' + parentId, target);\n }\n else {\n ruleElem = this.createElement('div', { attrs: { class: 'e-rule-container' } });\n ruleElem.setAttribute('id', target.id + '_rule' + this.ruleIdCounter);\n if (this.showButtons.cloneRule && this.cloneRuleBtnClick) {\n if (this.ruleIndex < 0) {\n ruleListElem.appendChild(ruleElem);\n }\n else {\n if (this.enableSeparateConnector) {\n var index = -1;\n var tempRuleIndex = this.ruleIndex + 1;\n for (var i = 0; i < tempRuleIndex; i++) {\n if (i === ruleListElem.children.length) {\n break;\n }\n if (ruleListElem.children[i].classList.contains('e-rule-container')) {\n tempRuleIndex++;\n index++;\n }\n }\n ruleListElem.insertBefore(ruleElem, ruleListElem.children[this.ruleIndex + index + 1]); // added clone rule to next position\n }\n else {\n ruleListElem.insertBefore(ruleElem, ruleListElem.children[this.ruleIndex + 1]); // added clone rule to next position\n }\n }\n this.cloneRuleBtnClick = false;\n }\n else {\n ruleListElem.appendChild(ruleElem);\n }\n this.ruleIdCounter++;\n }\n if (column && column.ruleTemplate && rule) {\n args = { requestType: 'template-initialize', ruleID: ruleElem.id, action: action, fields: this.fields, rule: rule };\n this.trigger('actionBegin', args);\n this.ruleTemplateFn = this.templateParser(column.ruleTemplate);\n var templateID = this.element.id + column.field;\n var template = void 0;\n args.fields = this.fields;\n args.columns = this.columns;\n if (rule.field === '') {\n rule.field = column.field;\n }\n args.operators = this.getOperators(rule.field);\n args.operatorFields = { text: 'key', value: 'value' };\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.isReact) {\n template = this.ruleTemplateFn(args, this, ruleElem.id, templateID)[0];\n elem = template;\n elem.className += ' e-rule-field';\n ruleElem.appendChild(elem);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n }\n else if (this.isAngular) {\n var templateColl = this.ruleTemplateFn(args, this, ruleElem.id, templateID);\n template = (templateColl[0].nodeType === 3) ? templateColl[1] : templateColl[0];\n elem = template;\n elem.className += ' e-rule-field';\n ruleElem.appendChild(elem);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n }\n else if (this.isVue3) {\n template = this.ruleTemplateFn(args, this, 'Template', templateID);\n elem = template;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n append(elem, ruleElem);\n if (ruleElem.children.length) {\n ruleElem.children[ruleElem.children.length - 1].className += ' e-rule-field';\n }\n }\n else {\n template = this.ruleTemplateFn(args, this, 'Template', templateID)[0];\n elem = template;\n elem.className += ' e-rule-field';\n ruleElem.appendChild(elem);\n }\n }\n else {\n elem = this.ruleElem.querySelector('.e-rule-field').cloneNode(true);\n ruleElem.appendChild(elem);\n }\n if (this.showButtons.lockGroup) {\n removeClass(ruleElem.querySelectorAll('.e-lock-grp-btn'), 'e-button-hide');\n }\n if (this.showButtons.lockRule) {\n removeClass(ruleElem.querySelectorAll('.e-lock-rule-btn'), 'e-button-hide');\n }\n if (this.showButtons.cloneGroup) {\n removeClass(ruleElem.querySelectorAll('.e-clone-grp-btn'), 'e-button-hide');\n }\n if (this.showButtons.cloneRule) {\n removeClass(ruleElem.querySelectorAll('.e-clone-rule-btn'), 'e-button-hide');\n }\n if (this.showButtons.ruleDelete) {\n removeClass(ruleElem.querySelectorAll('.e-lock-grp-btn'), 'e-button-hide');\n }\n if (this.allowDragAndDrop) {\n removeClass(ruleElem.querySelectorAll('.e-drag-qb-rule'), 'e-hidden');\n }\n if (column && column.ruleTemplate && rule) {\n this.renderReactTemplates();\n }\n return ruleElem;\n };\n QueryBuilder.prototype.addRuleElement = function (target, rule, column, action, parentId, isRuleTemplate) {\n var _this = this;\n if (!target) {\n return;\n }\n var args = { groupID: target.id.replace(this.element.id + '_', ''), cancel: false, type: 'insertRule' };\n if (!this.isImportRules && !this.isInitialLoad && !this.prvtEvtTgrDaD) {\n this.trigger('beforeChange', args, function (observedChangeArgs) {\n _this.addRuleSuccessCallBack(observedChangeArgs, target, rule, column, action, parentId, isRuleTemplate);\n });\n }\n else {\n this.isInitialLoad = false;\n this.addRuleSuccessCallBack(args, target, rule, column, action, parentId, isRuleTemplate);\n }\n };\n QueryBuilder.prototype.addRuleSuccessCallBack = function (args, trgt, rule, col, act, pId, isRlTmp) {\n var _this = this;\n var isVertical = this.element.className.indexOf('e-device') > -1 || this.displayMode === 'Vertical';\n var height = isVertical ? '250px' : '200px';\n var ruleID;\n var column = (rule && rule.field) ? this.getColumn(rule.field) : col ? col : this.columns[0];\n var operators;\n var dropDownList;\n var ruleElem;\n var newRule = { 'label': '', 'field': '', 'type': '', 'operator': '' };\n if (!args.cancel) {\n if (column && column.ruleTemplate && rule.field) {\n this.selectedColumn = column;\n operators = this.selectedColumn.operators;\n newRule = {\n 'label': column.label,\n 'field': column.field,\n 'type': column.type,\n 'operator': operators[0].value\n };\n var passedRule_1 = Object.keys(rule).length ? rule : newRule;\n ruleElem = this.appendRuleElem(trgt, column, act, pId, 'field', passedRule_1);\n var actionArgs = {\n requestType: 'template-initialize',\n ruleID: ruleElem.id,\n action: 'insert-rule',\n fields: this.fields,\n rule: passedRule_1\n };\n this.trigger('actionBegin', actionArgs);\n setTimeout(function () {\n var createArgs = {\n requestType: 'template-create',\n ruleID: ruleElem.id,\n action: 'insert-rule',\n fields: _this.fields,\n rule: passedRule_1\n };\n _this.trigger('actionBegin', createArgs);\n }, 0);\n }\n else {\n ruleElem = this.appendRuleElem(trgt, column, act, pId, 'field');\n ruleElem.querySelector('.e-filter-input').setAttribute('id', ruleElem.id + '_filterkey');\n var element = ruleElem.querySelector('.e-rule-delete');\n if (this.element.className.indexOf('e-device') > -1 || this.displayMode === 'Vertical') {\n element.textContent = this.l10n.getConstant('Remove');\n addClass([element], 'e-flat');\n addClass([element], 'e-primary');\n }\n else {\n addClass([element], 'e-round');\n addClass([element], 'e-icon-btn');\n element.setAttribute('title', this.l10n.getConstant('DeleteRule'));\n var spanElement = this.createElement('span', {\n attrs: { class: 'e-btn-icon e-icons e-delete-icon' }\n });\n element.appendChild(spanElement);\n }\n if (!this.showButtons.ruleDelete) {\n element.classList.add('e-button-hide');\n }\n }\n ruleElem.className = 'e-rule-container ' + (isVertical ? 'e-vertical-mode' : 'e-horizontal-mode');\n var previousRuleElem = ruleElem.previousElementSibling;\n this.processAdjacentElements(ruleElem, previousRuleElem, rule);\n if (!this.isImportRules) {\n this.updateAddedRule(trgt, rule, newRule, isRlTmp, pId, this.enableSeparateConnector ? true : null);\n }\n if (this.rule.condition === '' && (this.isRuleClicked || this.rule.rules.length > 1)) {\n this.rule.condition = 'and';\n }\n this.isRuleClicked = false;\n var ruleCount = this.rule.rules.length;\n if (!column || (column && !column.ruleTemplate) || !rule.field) {\n if (ruleCount > 20) {\n setTimeout(function () {\n _this.applyFieldComponent(ruleElem, rule, height);\n }, 0);\n }\n else {\n this.applyFieldComponent(ruleElem, rule, height);\n }\n }\n ruleID = ruleElem.id.replace(this.element.id + '_', '');\n if (rule && rule.isLocked) {\n var lockRuleTarget = ruleElem.querySelector('.e-lock-rule-btn');\n this.ruleLock(lockRuleTarget);\n }\n if (!this.isImportRules && !this.prvtEvtTgrDaD) {\n this.trigger('change', {\n groupID: trgt.id.replace(this.element.id + '_', ''),\n ruleID: ruleID,\n type: 'insertRule'\n });\n }\n }\n if (this.enableSeparateConnector && isNullOrUndefined(rule.condition) && ruleID) {\n rule = this.getRule(ruleID);\n }\n if (this.enableSeparateConnector) {\n this.processConnectorElements(ruleElem);\n }\n };\n QueryBuilder.prototype.processAdjacentElements = function (ruleElem, previousRuleElem, rule) {\n if (this.enableSeparateConnector) {\n if (previousRuleElem && previousRuleElem.classList.contains('e-group-container')) {\n var ruleContainer = previousRuleElem.querySelectorAll('.e-rule-container');\n previousRuleElem = ruleContainer[ruleContainer.length - 1];\n }\n if (previousRuleElem && previousRuleElem.classList.contains('e-rule-container')) {\n var prevRule = this.getRule(previousRuleElem);\n if (this.headerTemplate) {\n this.headerTemplateFn(previousRuleElem, false, prevRule.condition, prevRule, previousRuleElem.id);\n }\n }\n else if (isNullOrUndefined(previousRuleElem) && ruleElem.id !== this.element.id + '_group0_rule0') {\n this.handleOrphanedRuleElement(ruleElem, rule);\n }\n }\n else {\n if (previousRuleElem && previousRuleElem.className.indexOf('e-rule-container') > -1) {\n ruleElem.classList.add('e-joined-rule');\n previousRuleElem.classList.add('e-prev-joined-rule');\n }\n }\n if (previousRuleElem && previousRuleElem.className.indexOf('e-group-container') > -1 &&\n ruleElem.className.indexOf('e-separate-rule') < 0) {\n ruleElem.className += ' e-separate-rule';\n }\n };\n QueryBuilder.prototype.handleOrphanedRuleElement = function (ruleElem, rule) {\n var group = ruleElem.closest('.e-group-container');\n if (group && group.previousElementSibling) {\n var prevElem = group.previousElementSibling;\n var prevRuleContainer = prevElem.querySelectorAll('.e-rule-container');\n if (prevElem.classList.contains('e-group-container')) {\n prevElem = prevRuleContainer[prevRuleContainer.length - 1];\n }\n if (prevElem.classList.contains('e-rule-container')) {\n var prevRule = this.getRule(prevElem);\n this.headerTemplateFn(prevElem, false, prevRule.condition, prevRule, prevElem.id, true);\n }\n }\n else {\n this.headerTemplateFn(ruleElem, false, rule.condition, rule, ruleElem.id, true);\n }\n };\n QueryBuilder.prototype.processConnectorElements = function (ruleElem) {\n var prevElem = ruleElem.previousElementSibling;\n var ruleContainer;\n while (prevElem && !prevElem.classList.contains('e-rule-container')) {\n if (prevElem.classList.contains('e-group-container')) {\n ruleContainer = prevElem.querySelectorAll('.e-rule-container');\n prevElem = ruleContainer[ruleContainer.length - 1];\n break;\n }\n prevElem = prevElem.previousElementSibling;\n }\n if (this.headerTemplate && prevElem) {\n var prevRule = this.getRule(prevElem);\n var args = {\n requestType: 'rule-template-create',\n ruleID: prevElem.id,\n condition: prevRule.condition,\n notCondition: this.enableNotCondition ? true : undefined\n };\n this.trigger('actionBegin', args);\n }\n else if (isNullOrUndefined(prevElem) && ruleElem.id !== this.element.id + '_group0_rule0') {\n this.handleOrphanedConnectorElement(ruleElem);\n }\n this.setMultiConnector(ruleElem);\n };\n QueryBuilder.prototype.handleOrphanedConnectorElement = function (ruleElem) {\n var group = ruleElem.closest('.e-group-container');\n if (group && group.previousElementSibling && group.previousElementSibling.previousElementSibling) {\n var prevElem = group.previousElementSibling.previousElementSibling;\n if (prevElem.classList.contains('e-group-container')) {\n var ruleContainer = prevElem.querySelectorAll('.e-rule-container');\n prevElem = ruleContainer[ruleContainer.length - 1];\n }\n if (prevElem.classList.contains('e-rule-container')) {\n var prevRule = this.getRule(prevElem);\n var args = {\n requestType: 'rule-template-create',\n ruleID: prevElem.id,\n condition: prevRule.condition,\n notCondition: this.enableNotCondition ? true : undefined\n };\n this.trigger('actionBegin', args);\n }\n }\n };\n QueryBuilder.prototype.applyFieldComponent = function (ruleElem, rule, height) {\n if (this.fieldMode === 'Default') {\n this.applyDropdownListComponent(ruleElem, rule, height);\n }\n else {\n this.applyDropdownTreeComponent(ruleElem, rule, height);\n }\n };\n QueryBuilder.prototype.applyDropdownListComponent = function (ruleElem, rule, height) {\n var ddlField;\n var ddlValue;\n if (this.separator && rule.field) {\n ddlValue = this.GetRootColumnName(rule.field);\n }\n else if (this.autoSelectField) {\n ddlValue = this.GetRootColumnName(rule.field);\n }\n else {\n ddlValue = this.isImportRules ? this.GetRootColumnName(rule.field) : rule.field;\n }\n ddlField = {\n dataSource: this.columns,\n fields: this.fields,\n placeholder: this.l10n.getConstant('SelectField'),\n popupHeight: ((this.columns.length > 5) ? height : 'auto'),\n close: this.fieldClose.bind(this, ruleElem.id + '_filterkey'),\n change: this.changeField.bind(this),\n value: rule ? ddlValue : null,\n open: this.popupOpen.bind(this, true),\n cssClass: 'qb-dropdownlist'\n };\n if (this.fieldModel) {\n ddlField = __assign({}, ddlField, this.fieldModel);\n }\n var dropDownList = new DropDownList(ddlField);\n dropDownList.appendTo('#' + ruleElem.id + '_filterkey');\n var ddlVal;\n if (this.separator && rule.field) {\n ddlVal = this.GetRootColumnName(rule.field);\n }\n else {\n ddlVal = this.isImportRules ? this.GetRootColumnName(rule.field) : dropDownList.value;\n }\n this.selectedColumn = dropDownList.getDataByValue(ddlVal);\n if (Object.keys(rule).length) {\n this.changeRule(rule, {\n element: dropDownList.element,\n itemData: this.selectedColumn\n });\n }\n };\n QueryBuilder.prototype.applyDropdownTreeComponent = function (ruleElem, rule, height) {\n var ddlField;\n var ddlValue = this.isImportRules ? rule.field : rule.field;\n this.dummyDropdownTreeDs = extend([], this.columns, [], true);\n this.updateDropdowntreeDS(this.dummyDropdownTreeDs);\n ddlField = {\n fields: {\n dataSource: this.dummyDropdownTreeDs,\n value: 'field',\n text: 'label',\n child: 'columns',\n expanded: 'expanded',\n selectable: 'selectable'\n },\n placeholder: this.l10n.getConstant('SelectField'),\n showClearButton: false,\n popupHeight: ((this.columns.length > 5) ? height : 'auto'),\n changeOnBlur: false,\n change: this.changeField.bind(this),\n value: !isNullOrUndefined(ddlValue) ? [ddlValue] : null,\n open: this.popupOpen.bind(this, false),\n treeSettings: { expandOn: 'Click' },\n cssClass: 'e-qb-ddt',\n filtering: this.dropdownTreeFiltering.bind(this),\n close: this.dropdownTreeClose.bind(this)\n };\n if (this.fieldModel) {\n ddlField = __assign({}, ddlField, this.fieldModel);\n }\n var dropdowntree = new DropDownTree(ddlField);\n dropdowntree.appendTo('#' + ruleElem.id + '_filterkey');\n if (!isNullOrUndefined(dropdowntree.value)) {\n var value = this.getLabelFromColumn(dropdowntree.value[0]);\n dropdowntree.element.value = value;\n }\n var ddlVal = !isNullOrUndefined(rule.field) ?\n this.GetRootColumnName(rule.field) : dropdowntree.value;\n this.selectedColumn = this.getColumn(ddlVal);\n if (Object.keys(rule).length) {\n this.changeRule(rule, {\n element: dropdowntree.element,\n itemData: this.selectedColumn\n });\n }\n };\n QueryBuilder.prototype.dropdownTreeFiltering = function (args) {\n var _this = this;\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var proxy = this;\n var ruleElemID = '';\n var srcElement = args.event.srcElement;\n var isClearIcon = srcElement.classList.contains('e-clear-icon');\n var inputElem = isClearIcon ? srcElement.parentElement.querySelector('.e-textbox') : srcElement;\n ruleElemID = inputElem.id.split('_filterkey')[0];\n var ruleElem = document.getElementById(ruleElemID);\n this.ddTree = getComponent(ruleElem.querySelector('input.e-dropdowntree'), 'dropdowntree');\n var hierarchicalData = extend([], this.columns, [], true);\n args.cancel = true;\n if (args.text === '') {\n this.changeDataSource(hierarchicalData);\n }\n else {\n var matchedDataSource = hierarchicalData\n .map(function (data) { return _this.nestedChildFilter(args.text, data); })\n .filter(function (filteredChild) { return filteredChild !== null; });\n this.changeDataSource(matchedDataSource);\n setTimeout(function () {\n if (!isNullOrUndefined(proxy.ddTree) && !isNullOrUndefined(proxy.ddTree.treeObj)) {\n proxy.ddTree.treeObj.expandAll();\n }\n }, 100);\n }\n };\n QueryBuilder.prototype.changeDataSource = function (data) {\n this.updateDropdowntreeDS(data);\n this.ddTree.treeObj.fields = {\n dataSource: data,\n value: 'field',\n text: 'label',\n child: 'columns',\n expanded: 'expanded'\n };\n this.ddTree.treeObj.refresh();\n };\n QueryBuilder.prototype.nestedChildFilter = function (value, node) {\n var _this = this;\n var children = node[this.ddTree.fields.child];\n if (!children) {\n return this.isMatchedNode(value, node) ? node : null;\n }\n var matchedChildren = children\n .map(function (child) { return _this.nestedChildFilter(value, child); })\n .filter(function (filteredChild) { return filteredChild !== null; });\n if (matchedChildren.length) {\n node[this.ddTree.fields.child] = matchedChildren;\n return node;\n }\n else {\n node[this.ddTree.fields.child] = children;\n return this.isMatchedNode(value, node) ? node : null;\n }\n };\n QueryBuilder.prototype.isMatchedNode = function (value, node) {\n var checkValue = node[this.ddTree.fields.text].toLowerCase();\n value = value ? value.toLowerCase() : '';\n return checkValue.indexOf(value) !== -1;\n };\n QueryBuilder.prototype.dropdownTreeClose = function () {\n if (this.ddTree) {\n this.changeDataSource(extend([], this.columns, [], true));\n }\n this.ddTree = null;\n };\n QueryBuilder.prototype.updateDropdowntreeDS = function (columns) {\n for (var i = 0; i < columns.length; i++) {\n if (columns[parseInt(i.toString(), 10)].type === 'object') {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.isAngular && columns[parseInt(i.toString(), 10)].template) {\n delete columns[parseInt(i.toString(), 10)].template;\n }\n columns[parseInt(i.toString(), 10)].selectable = false;\n this.updateDropdowntreeDS(columns[parseInt(i.toString(), 10)].columns);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n }\n else if (this.isAngular && columns[parseInt(i.toString(), 10)].template) {\n delete columns[parseInt(i.toString(), 10)].template;\n }\n }\n };\n QueryBuilder.prototype.updateAddedRule = function (target, rule, newRule, isRuleTemplate, pId, isNewRuleAdded) {\n var ruleElem;\n var index = 0;\n var groupElem;\n var rules;\n if (isRuleTemplate) {\n ruleElem = select('#' + pId, target);\n groupElem = closest(target, '.e-group-container');\n rules = this.getParentGroup(groupElem);\n while (ruleElem && ruleElem.previousElementSibling !== null) {\n ruleElem = ruleElem.previousElementSibling;\n var enableSeparateCondition = this.enableSeparateConnector && ((!this.headerTemplate && !ruleElem.classList.contains('e-btn-group')) ||\n (this.headerTemplate && (ruleElem.classList.contains('e-rule-container') ||\n ruleElem.classList.contains('e-group-container'))));\n if (!this.enableSeparateConnector || enableSeparateCondition) {\n index++;\n }\n }\n rules.rules[index] = rule;\n }\n else {\n groupElem = closest(target, '.e-group-container');\n rules = this.getParentGroup(groupElem);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var custom = rule.custom;\n if (Object.keys(rule).length) {\n if (this.ruleIndex < 0) {\n rules.rules.push({\n 'field': rule.field, 'type': rule.type, 'label': rule.label, 'operator': rule.operator, value: rule.value\n });\n if (custom) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n rules.rules[rules.rules.length - 1].custom = custom;\n }\n if (this.enableSeparateConnector) {\n rules.rules[rules.rules.length - 1].condition = rule.condition ? rule.condition : newRule.condition;\n }\n }\n else {\n rules.rules.splice(this.ruleIndex + 1, 0, {\n 'field': rule.field, 'type': rule.type, 'label': rule.label, 'operator': rule.operator, value: rule.value\n });\n if (custom) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n rules.rules[this.ruleIndex + 1].custom = custom;\n }\n if (this.enableSeparateConnector) {\n rules.rules[this.ruleIndex + 1].condition = rule.condition ? rule.condition : newRule.condition;\n }\n }\n }\n else {\n if (custom) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n newRule.custom = custom;\n }\n if (this.autoSelectField) {\n rule.field = newRule.field = this.rule.rules[0].field;\n }\n rules.rules.push(newRule);\n }\n }\n this.disableRuleCondition(target, rules, isNewRuleAdded);\n };\n QueryBuilder.prototype.changeRuleTemplate = function (column, element) {\n if (column && column.ruleTemplate) {\n return;\n }\n else {\n var parentGroup = closest(element, '.e-group-container');\n var parentId = closest(element, '.e-rule-container').id;\n if (this.previousColumn && this.previousColumn.ruleTemplate) {\n detach(element.closest('[id=\"' + parentId + '\"]').querySelector('.e-rule-field'));\n this.clearQBTemplate([parentId]);\n }\n if (column) {\n var operVal = this.selectedColumn.operators;\n var rule = { field: column.field, label: column.label, operator: operVal[0].value, value: '' };\n this.addRuleElement(parentGroup, rule, column, 'change', parentId, true);\n }\n else {\n var rule = { field: '', label: '', operator: '', value: '' };\n this.addRuleElement(parentGroup, rule, column, 'change', parentId, true);\n }\n }\n };\n QueryBuilder.prototype.renderToolTip = function (element) {\n var _this = this;\n var tooltip = new Tooltip({\n content: this.l10n.getConstant('ValidationMessage'),\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 }, beforeClose: function (args) {\n if (_this.isPopupScroll) {\n args.cancel = true;\n }\n }\n });\n tooltip.appendTo(element);\n tooltip.open(element);\n };\n /**\n * Validate the conditions and it display errors for invalid fields.\n *\n * @returns {boolean} - Validation\n */\n QueryBuilder.prototype.validateFields = function () {\n var isValid = true;\n var dropDownTreeObj;\n if (this.allowValidation) {\n var excludeOprs = ['isnull', 'isnotnull', 'isempty', 'isnotempty'];\n var i = void 0;\n var len = void 0;\n var fieldElem = void 0;\n var indexElem = void 0;\n var valArray = [];\n var groupElem = void 0;\n var index = void 0;\n var dropDownObj = void 0;\n var tempElem = void 0;\n var rule = void 0;\n var ruleElemCln = this.element.querySelectorAll('.e-rule-container');\n for (i = 0, len = ruleElemCln.length; i < len; i++) {\n var validateRule = void 0;\n groupElem = closest(ruleElemCln[i], '.e-group-container');\n rule = this.getParentGroup(groupElem);\n index = 0;\n indexElem = tempElem = ruleElemCln[i];\n if (this.fieldMode === 'DropdownTree') {\n dropDownTreeObj = getComponent(ruleElemCln[i].querySelector('.e-rule-filter input.e-dropdowntree'), 'dropdowntree');\n if (dropDownTreeObj && dropDownTreeObj.value && dropDownTreeObj.value.length) {\n this.selectedColumn = this.getColumn(dropDownTreeObj.value[0]);\n validateRule = this.selectedColumn.validation;\n }\n }\n else {\n dropDownObj = getComponent(ruleElemCln[i].querySelector('.e-rule-filter input.e-dropdownlist'), 'dropdownlist');\n if (dropDownObj && dropDownObj.value) {\n this.selectedColumn = dropDownObj.getDataByValue(dropDownObj.value);\n validateRule = !isNullOrUndefined(dropDownObj.value) && this.selectedColumn.validation;\n }\n }\n fieldElem = tempElem.querySelector('.e-rule-field input.e-control');\n if (validateRule && validateRule.isRequired) {\n while (indexElem && indexElem.previousElementSibling !== null) {\n indexElem = indexElem.previousElementSibling;\n var separateCondition = this.enableSeparateConnector && ((!this.headerTemplate && !indexElem.classList.contains('e-btn-group')) ||\n (this.headerTemplate && (indexElem.classList.contains('e-rule-container') || indexElem.classList.contains('e-group-container'))));\n if (!this.enableSeparateConnector || separateCondition) {\n index++;\n }\n }\n fieldElem = tempElem.querySelector('.e-rule-operator .e-control');\n if (!rule.rules[index].operator) {\n if (fieldElem.parentElement.className.indexOf('e-tooltip') < 0 && fieldElem.className.indexOf('e-tooltip') < 0) {\n this.renderToolTip(fieldElem.parentElement);\n }\n isValid = false;\n }\n if (rule.rules[index].value instanceof Array) {\n valArray = rule.rules[index].value;\n }\n if (excludeOprs.indexOf(rule.rules[index].operator) < 0 && ((isNullOrUndefined(rule.rules[index].value) &&\n rule.rules[index].type !== 'date') || rule.rules[index].value === '' || rule.rules[index].value === null ||\n (rule.rules[index].value instanceof Array && valArray.length < 1))) {\n var valElem = tempElem.querySelectorAll('.e-rule-value .e-control');\n if (excludeOprs.indexOf(rule.rules[index].operator) < 0) {\n isValid = false;\n }\n for (var j = 0, jLen = valElem.length; j < jLen; j++) {\n var element = valElem[j];\n var elem = void 0;\n if (element.parentElement.className.indexOf('e-searcher') > -1) {\n elem = closest(element, '.e-multi-select-wrapper');\n if (elem.className.indexOf('e-tooltip') < 0) {\n this.renderToolTip(elem);\n }\n }\n else if (valElem[j].parentElement.className.indexOf('e-tooltip') < 0 && valElem[j].className.indexOf('e-tooltip') < 0) {\n this.renderToolTip(valElem[j].parentElement);\n }\n j++;\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n }\n else if (rule.rules[index].type === 'date' && (rule.rules[index].value === null || rule.rules[index].value.indexOf(null) > -1)) {\n var valElem = tempElem.querySelectorAll('.e-rule-value .e-control');\n if (excludeOprs.indexOf(rule.rules[index].operator) < 0) {\n isValid = false;\n }\n for (var j = 0, jLen = valElem.length; j < jLen; j++) {\n if (valElem[j].parentElement.className.indexOf('e-tooltip') < 0 && valElem[j].className.indexOf('e-tooltip') < 0 && (isNullOrUndefined(rule.rules[index].value) || rule.rules[index].value[j] == null)) {\n this.renderToolTip(valElem[j].parentElement);\n }\n }\n }\n }\n else if ((dropDownObj && dropDownObj.element && isNullOrUndefined(dropDownObj.value)) ||\n (dropDownTreeObj && dropDownTreeObj.element && (isNullOrUndefined(dropDownTreeObj.value) ||\n dropDownTreeObj.value.length < 1))) {\n if (fieldElem.parentElement.className.indexOf('e-tooltip') < 0) {\n this.renderToolTip(fieldElem.parentElement);\n }\n isValid = false;\n }\n }\n }\n return isValid;\n };\n QueryBuilder.prototype.refreshLevelColl = function () {\n this.levelColl = {};\n var groupElem = this.element.querySelector('.e-group-container');\n if (groupElem) {\n this.levelColl[groupElem.id] = [0];\n var obj = { groupElement: groupElem, level: [0] };\n this.refreshLevel(obj);\n }\n };\n QueryBuilder.prototype.refreshLevel = function (obj) {\n var ruleList = obj.groupElement.querySelector('.e-rule-list').children;\n var childElem;\n var groupElem = obj.groupElement;\n var i;\n var iLen = ruleList.length;\n var groupCount = 0;\n for (i = 0; i < iLen; i++) {\n childElem = ruleList[i];\n if (childElem.className.indexOf('e-group-container') > -1) {\n obj.level.push(groupCount);\n this.levelColl[childElem.id] = obj.level.slice();\n groupCount++;\n obj.groupElement = childElem;\n obj = this.refreshLevel(obj);\n }\n }\n var ruleListElem = closest(groupElem, '.e-rule-list');\n obj.groupElement = ruleListElem ? closest(ruleListElem, '.e-group-container') : groupElem;\n obj.level = this.levelColl[obj.groupElement.id].slice();\n return obj;\n };\n QueryBuilder.prototype.groupTemplate = function (isConnector) {\n var glueElem;\n var inputElem;\n var dragClsName;\n var labelElem;\n var grpActElem;\n var groupBtn;\n var groupElem = this.createElement('div', { attrs: { class: 'e-group-container' } });\n var groupHdrElem = this.createElement('div', { attrs: { class: 'e-group-header' } });\n var grpBodyElem = this.createElement('div', { attrs: { class: 'e-group-body' } });\n var rulesElem = this.createElement('div', { attrs: { class: 'e-rule-list' } });\n groupElem.appendChild(groupHdrElem);\n grpBodyElem.appendChild(rulesElem);\n groupElem.appendChild(grpBodyElem);\n if (!this.headerTemplate) {\n if (this.allowDragAndDrop) {\n dragClsName = 'e-icons e-drag-qb-rule';\n }\n else {\n dragClsName = 'e-icons e-drag-qb-rule e-hidden';\n }\n var spanDragElement = this.createElement('span', {\n attrs: {\n class: dragClsName, 'aria-label': 'drag handle',\n title: 'drag handle'\n }\n });\n groupHdrElem.appendChild(spanDragElement);\n var className = this.enableSeparateConnector && !isConnector ? 'e-lib e-btn-group e-qb-toggle-btn' : 'e-lib e-btn-group';\n glueElem = this.createElement('div', { attrs: { class: className, role: 'group' } });\n if (this.enableSeparateConnector) {\n glueElem.classList.add('e-multi-connector');\n }\n if (this.enableNotCondition) {\n if (this.enableSeparateConnector) {\n inputElem = this.createElement('input', { attrs: { type: 'checkbox', class: 'e-qb-toggle' } });\n }\n else {\n inputElem = this.createElement('button', { attrs: { type: 'button', class: 'e-qb-toggle' } });\n }\n glueElem.appendChild(inputElem);\n }\n inputElem = this.createElement('input', { attrs: { type: 'radio', class: 'e-btngroup-and', value: 'AND' } });\n glueElem.appendChild(inputElem);\n labelElem = this.createElement('label', {\n attrs: { class: 'e-lib e-btn e-btngroup-and-lbl e-small' },\n innerHTML: this.l10n.getConstant('AND')\n });\n glueElem.appendChild(labelElem);\n inputElem = this.createElement('input', { attrs: { type: 'radio', class: 'e-btngroup-or', value: 'OR' } });\n glueElem.appendChild(inputElem);\n labelElem = this.createElement('label', {\n attrs: { class: 'e-lib e-btn e-btngroup-or-lbl e-small' },\n innerHTML: this.l10n.getConstant('OR')\n });\n glueElem.appendChild(labelElem);\n groupHdrElem.appendChild(glueElem);\n grpActElem = this.createElement('div', { attrs: { class: 'e-group-action' } });\n if (this.enableSeparateConnector) {\n groupBtn = this.createElement('button', { attrs: { type: 'button', class: 'e-add-condition-btn' } });\n grpActElem.appendChild(groupBtn);\n groupBtn = this.createElement('button', { attrs: { type: 'button', class: 'e-add-group-btn' } });\n grpActElem.appendChild(groupBtn);\n }\n else {\n groupBtn = this.createElement('button', { attrs: { type: 'button', class: 'e-add-btn' } });\n grpActElem.appendChild(groupBtn);\n }\n groupHdrElem.appendChild(grpActElem);\n }\n return groupElem;\n };\n QueryBuilder.prototype.ruleTemplate = function () {\n var tempElem;\n var clsName;\n var cloneClsName;\n var lockClsName;\n var dragClsName;\n var ruleElem = this.createElement('div');\n var fieldElem = this.createElement('div', { attrs: { class: 'e-rule-field' } });\n tempElem = this.createElement('div', { attrs: { class: 'e-rule-filter' } });\n if (this.allowDragAndDrop) {\n dragClsName = 'e-icons e-drag-qb-rule';\n }\n else {\n dragClsName = 'e-icons e-drag-qb-rule e-hidden';\n }\n var spanDragElement = this.createElement('span', {\n attrs: {\n class: dragClsName, 'aria-label': 'drag handle',\n title: 'drag handle'\n }\n });\n fieldElem.appendChild(spanDragElement);\n var filterElem = this.createElement('input', { attrs: { type: 'text', class: 'e-filter-input' } });\n tempElem.appendChild(filterElem);\n fieldElem.appendChild(tempElem);\n tempElem = this.createElement('div', { attrs: { class: 'e-rule-operator' } });\n fieldElem.appendChild(tempElem);\n tempElem = this.createElement('div', { attrs: { class: 'e-rule-value' } });\n fieldElem.appendChild(tempElem);\n tempElem = this.createElement('div', { attrs: { class: 'e-rule-value-delete' } });\n if (this.showButtons.cloneRule) {\n cloneClsName = 'e-clone-rule-btn e-clone-rule e-css e-btn e-small e-round e-icon-btn';\n }\n else {\n cloneClsName = 'e-clone-rule-btn e-clone-rule e-css e-btn e-small e-round e-icon-btn e-button-hide';\n }\n if (this.showButtons.lockRule) {\n lockClsName = 'e-lock-rule-btn e-lock-rule e-css e-btn e-small e-round e-icons e-icon-btn';\n }\n else {\n lockClsName = 'e-lock-rule-btn e-lock-rule e-css e-btn e-small e-round e-icons e-icon-btn e-button-hide';\n }\n var cloneRuleBtnElem = this.createElement('button', { attrs: { title: this.l10n.getConstant('CloneRule'), type: 'button', class: cloneClsName } });\n var spanElement = this.createElement('span', { attrs: { class: 'e-btn-icon e-icons e-copy' } });\n cloneRuleBtnElem.appendChild(spanElement);\n var cloneLockBtnElem = this.createElement('button', { attrs: { title: this.l10n.getConstant('LockRule'), type: 'button', class: lockClsName } });\n spanElement = this.createElement('span', { attrs: { class: 'e-btn-icon e-icons e-unlock' } });\n cloneLockBtnElem.appendChild(spanElement);\n if (this.showButtons.ruleDelete || isNullOrUndefined(this.showButtons.ruleDelete)) {\n clsName = 'e-removerule e-rule-delete e-css e-btn e-small';\n }\n else {\n clsName = 'e-removerule e-rule-delete e-css e-btn e-small e-button-hide';\n }\n var delBtnElem = this.createElement('button', { attrs: { type: 'button', class: clsName } });\n tempElem.appendChild(cloneRuleBtnElem);\n tempElem.appendChild(cloneLockBtnElem);\n tempElem.appendChild(delBtnElem);\n fieldElem.appendChild(tempElem);\n ruleElem.appendChild(fieldElem);\n return ruleElem;\n };\n QueryBuilder.prototype.addGroupElement = function (isGroup, target, condition, isBtnClick, not, isRoot, rule) {\n var _this = this;\n var args = { groupID: target.id.replace(this.element.id + '_', ''), cancel: false, type: 'insertGroup' };\n if (!this.isImportRules && !this.isInitialLoad && !this.prvtEvtTgrDaD) {\n this.trigger('beforeChange', args, function (observedChangeArgs) {\n _this.addGroupSuccess(observedChangeArgs, isGroup, target, condition, isBtnClick, not, isRoot, rule);\n });\n }\n else {\n this.isInitialLoad = false;\n this.addGroupSuccess(args, isGroup, target, condition, isBtnClick, not, isRoot, rule);\n }\n };\n QueryBuilder.prototype.addGroupSuccess = function (args, isGroup, eventTarget, condition, isBtnClick, not, isRoot, rule) {\n var _this = this;\n if (!args.cancel && (this.element.querySelectorAll('.e-group-container').length <= this.maxGroupCount)) {\n var target = eventTarget;\n var dltGroupBtn = void 0;\n var groupID = '';\n if (target.className.indexOf('e-group-container') < 0) {\n groupID = target.querySelector('.e-group-container') && target.querySelector('.e-group-container').id;\n }\n else {\n groupID = target.id;\n }\n if (this.enableSeparateConnector) {\n this.groupElem = this.groupTemplate();\n }\n var groupElem = this.groupElem.cloneNode(true);\n groupElem.setAttribute('id', this.element.id + '_group' + this.groupIdCounter);\n if (this.groupIdCounter === 0 && this.allowDragAndDrop && groupElem.querySelector('.e-drag-qb-rule')) {\n if (groupElem && groupElem.children[0]) {\n groupElem.children[0].classList.add('e-parent-header');\n }\n addClass([groupElem.querySelector('.e-drag-qb-rule')], 'e-hidden');\n }\n if (this.headerTemplate) {\n if (isRoot) {\n isGroup = false;\n groupElem.setAttribute('id', this.element.id + '_group0');\n this.headerTemplateFn(groupElem, not, condition, rule, groupID);\n this.groupIdCounter = 0;\n }\n else {\n this.headerTemplateFn(groupElem, not, condition, rule, groupID);\n }\n }\n this.groupIdCounter++;\n if (!this.headerTemplate) {\n var andInpElem = groupElem.querySelector('.e-btngroup-and');\n var orInpElem = groupElem.querySelector('.e-btngroup-or');\n var andLblElem = groupElem.querySelector('.e-btngroup-and-lbl');\n var orLblElem = groupElem.querySelector('.e-btngroup-or-lbl');\n andInpElem.setAttribute('id', this.element.id + '_and' + this.btnGroupId);\n orInpElem.setAttribute('id', this.element.id + '_or' + this.btnGroupId);\n andInpElem.setAttribute('name', this.element.id + '_and' + this.btnGroupId);\n orInpElem.setAttribute('name', this.element.id + '_and' + this.btnGroupId);\n andLblElem.setAttribute('for', this.element.id + '_and' + this.btnGroupId);\n orLblElem.setAttribute('for', this.element.id + '_or' + this.btnGroupId);\n this.btnGroupId++;\n }\n if (isGroup) {\n var clsName = void 0;\n if (this.showButtons.groupDelete || isNullOrUndefined(this.showButtons.groupDelete)) {\n clsName = 'e-deletegroup';\n }\n else {\n clsName = 'e-deletegroup e-button-hide';\n }\n dltGroupBtn = this.createElement('button', { attrs: { type: 'button', class: clsName } });\n var button = new Button({ iconCss: 'e-icons e-delete-icon', cssClass: 'e-small e-round' });\n button.appendTo(dltGroupBtn);\n dltGroupBtn.setAttribute('title', this.l10n.getConstant('DeleteGroup'));\n rippleEffect(dltGroupBtn, { selector: '.deletegroup' });\n var ruleList = target.querySelector('.e-rule-list');\n var childElems = ruleList.children;\n var grpLen = 0;\n for (var j = 0, jLen = childElems.length; j < jLen; j++) {\n if (childElems[j].className.indexOf('e-group-container') > -1) {\n grpLen += 1;\n }\n }\n if (this.showButtons.cloneGroup && this.cloneGrpBtnClick) {\n if (this.groupIndex === (childElems.length - 1)) {\n ruleList.appendChild(groupElem);\n this.isLastGroup = true;\n }\n else {\n if (this.enableSeparateConnector) {\n var index = 0;\n var tempGroupIndex = this.groupIndex + 1;\n for (var i = 0; i < tempGroupIndex; i++) {\n if (childElems[i].classList.contains('e-rule-container')) {\n tempGroupIndex++;\n index++;\n }\n }\n if (index > 0) {\n index--;\n }\n var idx = this.groupIndex + index + 1;\n childElems[idx].parentNode.insertBefore(groupElem, childElems[idx]);\n }\n else {\n var idx = this.groupIndex + 1;\n childElems[idx].parentNode.insertBefore(groupElem, childElems[idx]);\n }\n this.isMiddleGroup = true;\n }\n }\n else {\n ruleList.appendChild(groupElem);\n }\n var level = this.levelColl[target.id].slice(0);\n level.push(grpLen);\n this.levelColl[groupElem.id] = level;\n if (this.groupIndex > -1) {\n this.refreshLevelColl();\n }\n if (!this.isImportRules) {\n this.isAddSuccess = true;\n this.addGroups([], target.id.replace(this.element.id + '_', ''));\n this.isAddSuccess = false;\n if (isBtnClick && this.addRuleToNewGroups) {\n this.addRuleElement(groupElem, {});\n }\n }\n if (!this.headerTemplate) {\n var lockClsName = '';\n if (this.showButtons.cloneGroup) {\n lockClsName = 'e-clone-grp-btn e-css e-btn e-small e-round e-icons e-icon-btn';\n }\n else {\n lockClsName = 'e-clone-grp-btn e-css e-btn e-small e-round e-icons e-icon-btn e-button-hide';\n }\n var cloneBtnElem = this.createElement('button', { attrs: { title: this.l10n.getConstant('CloneGroup'), type: 'button', class: lockClsName } });\n var spanElement = this.createElement('span', { attrs: { class: 'e-btn-icon e-icons e-copy' } });\n cloneBtnElem.appendChild(spanElement);\n groupElem.querySelector('.e-group-action').appendChild(cloneBtnElem);\n if (this.showButtons.lockGroup) {\n lockClsName = 'e-lock-grp-btn e-css e-btn e-small e-round e-icons e-icon-btn';\n }\n else {\n lockClsName = 'e-lock-grp-btn e-css e-btn e-small e-round e-icons e-icon-btn e-button-hide';\n }\n var lockBtnElem = this.createElement('button', { attrs: { title: this.l10n.getConstant('LockGroup'), type: 'button', class: lockClsName } });\n var lockSpanElement = this.createElement('span', { attrs: { class: 'e-btn-icon e-icons e-unlock' } });\n lockBtnElem.appendChild(lockSpanElement);\n groupElem.querySelector('.e-group-action').appendChild(lockBtnElem);\n groupElem.querySelector('.e-group-action').appendChild(dltGroupBtn);\n }\n }\n else {\n if (!this.headerTemplate) {\n var lockClsName = '';\n if (this.showButtons.lockGroup) {\n lockClsName = 'e-lock-grp-btn e-css e-btn e-small e-round e-icons e-icon-btn';\n }\n else {\n lockClsName = 'e-lock-grp-btn e-css e-btn e-small e-round e-icons e-icon-btn e-button-hide';\n }\n var lockBtnElem = this.createElement('button', { attrs: { title: this.l10n.getConstant('LockGroup'), type: 'button', class: lockClsName } });\n var spanElement = this.createElement('span', { attrs: { class: 'e-btn-icon e-icons e-unlock' } });\n lockBtnElem.appendChild(spanElement);\n groupElem.querySelector('.e-group-action').appendChild(lockBtnElem);\n }\n target.appendChild(groupElem);\n this.levelColl[groupElem.id] = [0];\n }\n if (this.enableNotCondition) {\n if (!this.headerTemplate) {\n var notElem = groupElem.querySelector('.e-qb-toggle');\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var tglBtn = void 0;\n if (this.enableSeparateConnector) {\n tglBtn = new CheckBox({ label: this.l10n.getConstant('NOT'), cssClass: 'e-qb-toggle' });\n }\n else {\n tglBtn = new Button({ content: this.l10n.getConstant('NOT'), cssClass: 'e-btn e-small' });\n }\n tglBtn.appendTo(notElem);\n groupElem.querySelector('.e-btngroup-and-lbl').classList.add('e-not');\n if (this.updatedRule && this.updatedRule.not) {\n addClass([notElem], 'e-active-toggle');\n }\n }\n }\n if (this.enableSeparateConnector && !this.headerTemplate) {\n var andElem = groupElem.querySelector('.e-btngroup-and');\n var orElem = groupElem.querySelector('.e-btngroup-or');\n var btnGroup = groupElem.querySelector('.e-btn-group');\n for (var i = 0; i < btnGroup.childNodes.length; i++) {\n if (groupElem.querySelector('.e-btn-group').childNodes[i].textContent.toLowerCase() === 'not') {\n if (!this.enableNotCondition) {\n btnGroup.childNodes[i].style.display = 'none';\n }\n else {\n btnGroup.childNodes[i].classList.add('e-multiconnector');\n }\n }\n else {\n btnGroup.childNodes[i].style.display = 'none';\n }\n }\n var prevSibling = groupElem.previousElementSibling;\n if (prevSibling) {\n if (isNullOrUndefined(this.headerTemplate)) {\n groupElem.parentElement.insertBefore(this.groupTemplate(true).querySelector('.e-btn-group'), groupElem);\n var notElem = groupElem.previousElementSibling.childNodes[0];\n if (notElem.classList.contains('e-qb-toggle')) {\n notElem.style.display = 'none';\n }\n }\n if (!this.isImportRules) {\n var groupElement = groupElem.previousElementSibling;\n var newAndElem = groupElement.querySelector('.e-btngroup-and');\n var newOrElem = groupElement.querySelector('.e-btngroup-or');\n if (!andElem.checked && !orElem.checked) {\n var nextSibling = groupElem.nextElementSibling;\n if (nextSibling && nextSibling.classList.contains('e-btn-group')) {\n andElem = nextSibling.querySelector('.e-btngroup-and');\n orElem = nextSibling.querySelector('.e-btngroup-or');\n newAndElem.checked = andElem.checked;\n newOrElem.checked = orElem.checked;\n }\n }\n else if (this.enableSeparateConnector) {\n if (andElem.checked) {\n newAndElem.checked = true;\n }\n if (orElem.checked) {\n newOrElem.checked = true;\n }\n }\n }\n }\n }\n this.updatedRule = null;\n if (this.headerTemplate) {\n var args_1 = {\n requestType: 'header-template-create', ruleID: groupElem.id, condition: condition,\n notCondition: this.enableNotCondition ? not : undefined\n };\n this.trigger('actionBegin', args_1);\n }\n else {\n if (this.enableSeparateConnector) {\n var conditionBtn_1 = groupElem.querySelector('.e-add-condition-btn');\n var btnObj = new Button({ cssClass: this.element.id + '_addConditionbtn', content: this.l10n.getConstant('AddCondition') });\n btnObj.appendTo(conditionBtn_1);\n btnObj.element.onclick = function () {\n _this.addRuleElement(closest(conditionBtn_1, '.e-group-container'), {});\n };\n var groupBtn_1 = groupElem.querySelector('.e-add-group-btn');\n btnObj = new Button({ cssClass: this.element.id + '_addGroupbtn', content: this.l10n.getConstant('AddGroup') });\n btnObj.appendTo(groupBtn_1);\n btnObj.element.onclick = function () {\n _this.addGroupElement(true, closest(groupBtn_1, '.e-group-container'), '', true);\n };\n }\n else {\n var groupBtn = groupElem.querySelector('.e-add-btn');\n var btnObj = new DropDownButton({\n items: this.items,\n cssClass: 'e-round e-small e-caret-hide e-addrulegroup',\n iconCss: 'e-icons e-add-icon',\n beforeOpen: this.selectBtn.bind(this, groupBtn),\n select: this.selectBtn.bind(this, groupBtn)\n });\n btnObj.appendTo(groupBtn);\n groupBtn.setAttribute('title', this.l10n.getConstant('AddButton'));\n }\n }\n if (!this.isImportRules && !this.prvtEvtTgrDaD) {\n var grpId = target.id.replace(this.element.id + '_', '');\n var chgrpId = groupElem.id.replace(this.element.id + '_', '');\n this.trigger('change', { groupID: grpId, type: 'insertGroup', childGroupID: chgrpId });\n }\n }\n };\n QueryBuilder.prototype.setMultiConnector = function (trgt) {\n if (this.enableSeparateConnector && !this.headerTemplate && trgt.previousElementSibling) {\n var btnGroupElem = this.groupTemplate(true).querySelector('.e-btn-group');\n if (btnGroupElem) {\n trgt.parentElement.insertBefore(btnGroupElem, trgt);\n var notElem = trgt.previousElementSibling.childNodes[0];\n if (notElem.classList.contains('e-qb-toggle')) {\n notElem.style.display = 'none';\n }\n this.addHeaderDiv(trgt);\n }\n }\n };\n QueryBuilder.prototype.addHeaderDiv = function (elem) {\n var prevRule;\n var prevElem = elem.previousElementSibling.previousElementSibling;\n if (prevElem) {\n if (prevElem.id.indexOf('rule') > -1) {\n prevRule = this.getRule(prevElem);\n }\n else {\n prevRule = this.getGroup(prevElem);\n }\n if (!isNullOrUndefined(prevRule) && isNullOrUndefined(prevRule.condition)) {\n prevRule.condition = 'and';\n }\n var orElem = elem.previousElementSibling.querySelector('.e-btngroup-or');\n var andElem = elem.previousElementSibling.querySelector('.e-btngroup-and');\n orElem.disabled = false;\n andElem.disabled = false;\n if (!isNullOrUndefined(prevRule) && prevRule.condition === 'or') {\n orElem.checked = true;\n }\n else {\n andElem.checked = true;\n }\n }\n };\n QueryBuilder.prototype.headerTemplateFn = function (groupElem, not, condition, rule, groupID, isInitialRule) {\n var template;\n var templateID = this.element.id + '_header';\n var args;\n var groupHdr = groupElem.querySelector('.e-group-header');\n if (this.enableSeparateConnector && groupElem.id.indexOf('rule') !== -1) {\n groupHdr = groupElem;\n }\n if (this.headerTemplate) {\n args = {\n requestType: 'header-template-initialize', ruleID: groupElem.id,\n notCondition: this.enableNotCondition ? not : undefined,\n condition: condition, rule: this.getRuleCollection(rule, false), groupID: groupID\n };\n this.trigger('actionBegin', args);\n if (this.enableSeparateConnector && groupElem.id.indexOf('rule') !== -1) {\n args.requestType = 'rule-template-create';\n }\n this.headerFn = this.templateParser(this.headerTemplate);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.isReact) {\n template = this.headerFn(args, this, groupElem.id, templateID)[0];\n if (this.enableSeparateConnector && isInitialRule) {\n this.enableSeparateConnectorInitialRule(groupElem, template);\n }\n else if (this.enableSeparateConnector && groupElem.id.indexOf('rule') !== -1) {\n groupHdr.parentElement.insertBefore(template, groupHdr.nextElementSibling);\n }\n else {\n groupHdr.appendChild(template);\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n }\n else if (this.isAngular) {\n var templateColl = this.headerFn(args, this, groupElem.id, templateID);\n template = (templateColl[0].nodeType === 3) ? templateColl[1] : templateColl[0];\n if (this.enableSeparateConnector && isInitialRule) {\n this.enableSeparateConnectorInitialRule(groupElem, template);\n }\n else if (this.enableSeparateConnector && groupElem.id.indexOf('rule') !== -1) {\n groupHdr.parentElement.insertBefore(template, groupHdr.nextElementSibling);\n }\n else {\n groupHdr.appendChild(template);\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n }\n else if (this.isVue3) {\n template = this.headerFn(args, this, groupElem.id, templateID);\n if (this.enableSeparateConnector && (isInitialRule || groupElem.id.indexOf('rule') !== -1)) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n for (var i = 0; i < template.length; i++) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (template[i].nodeName === 'DIV') {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n template = template[i];\n break;\n }\n }\n }\n if (this.enableSeparateConnector && isInitialRule) {\n this.enableSeparateConnectorInitialRule(groupElem, template);\n }\n else if (this.enableSeparateConnector && groupElem.id.indexOf('rule') !== -1) {\n groupHdr.parentElement.insertBefore(template, groupHdr.nextElementSibling);\n }\n else {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n append(template, groupHdr);\n }\n }\n else {\n template = this.headerFn(args, this, 'Template', templateID)[0];\n if (this.enableSeparateConnector && isInitialRule) {\n this.enableSeparateConnectorInitialRule(groupElem, template);\n }\n else if (this.enableSeparateConnector && groupElem.id.indexOf('rule') !== -1) {\n groupHdr.parentElement.insertBefore(template, groupHdr.nextElementSibling);\n }\n else {\n groupHdr.appendChild(template);\n }\n }\n this.renderReactTemplates();\n }\n return groupElem;\n };\n QueryBuilder.prototype.enableSeparateConnectorInitialRule = function (groupElem, template) {\n var elem = groupElem.nextElementSibling ? groupElem.nextElementSibling : groupElem;\n var group = elem.closest('.e-group-container');\n if (!groupElem.nextElementSibling && group) {\n group = group.nextElementSibling ? group.nextElementSibling : group;\n }\n if (group) {\n group.parentElement.insertBefore(template, group);\n }\n };\n /**\n * Notify the changes to component.\n *\n * @param {string | number | boolean | Date | string[] | number[] | Date[]} value - 'value' to be passed to update the rule value.\n * @param {Element} element - 'element' to be passed to update the rule.\n * @param {string} type - 'type' to be passed to update the rule .\n * @returns {void}.\n */\n QueryBuilder.prototype.notifyChange = function (value, element, type) {\n var grpElement = closest(element, '.e-group-container');\n var rules = this.getParentGroup(grpElement);\n var ruleElement = closest(element, '.e-rule-container');\n var index = 0;\n if (type === 'not') {\n rules.not = value;\n return;\n }\n if (type === 'condition') {\n if (this.enableSeparateConnector) {\n ruleElement = element.parentElement.previousElementSibling;\n if (ruleElement && ruleElement.classList.contains('e-group-container')) {\n ruleElement = ruleElement.querySelectorAll('.e-rule-container')[ruleElement.querySelectorAll('.e-rule-container').length - 1];\n }\n if (ruleElement && ruleElement.classList.contains('e-rule-container')) {\n rules = this.getRule(ruleElement);\n }\n rules.condition = value;\n }\n else {\n rules.condition = value;\n }\n return;\n }\n while (ruleElement && ruleElement.previousElementSibling !== null) {\n ruleElement = ruleElement.previousElementSibling;\n if (!this.enableSeparateConnector || (this.enableSeparateConnector &&\n ((!this.headerTemplate && !ruleElement.classList.contains('e-btn-group')) ||\n this.headerTemplate && (ruleElement.classList.contains('e-rule-container') ||\n ruleElement.classList.contains('e-group-container'))))) {\n index++;\n }\n }\n var rule = rules.rules[index];\n var column = this.getColumn(rule.field);\n var format = this.getFormat(column.format);\n if (column.type === 'date') {\n if (value instanceof Date) {\n value = this.intl.formatDate(value, format);\n }\n else if (value instanceof Array) {\n for (var i = 0; i < value.length; i++) {\n if (value[i] && value[i] instanceof Date) {\n value[i] = this.intl.formatDate(value[i], format);\n }\n }\n }\n }\n if (column.ruleTemplate) {\n this.templateChange(element, value, type);\n }\n else {\n this.isNotified = true;\n this.updateRules(element, value);\n this.isNotified = false;\n }\n };\n QueryBuilder.prototype.templateChange = function (element, value, type) {\n var grpElem = closest(element, '.e-group-container');\n var eventsArgs;\n var rules = grpElem && this.getParentGroup(grpElem);\n var ruleElem = closest(element, '.e-rule-container');\n var index = 0;\n if (this.allowValidation) {\n this.validateValue(rules, ruleElem);\n }\n while (ruleElem && ruleElem.previousElementSibling !== null) {\n ruleElem = ruleElem.previousElementSibling;\n if (!this.enableSeparateConnector || (this.enableSeparateConnector &&\n ((!this.headerTemplate && !ruleElem.classList.contains('e-btn-group')) ||\n this.headerTemplate && (ruleElem.classList.contains('e-rule-container') ||\n ruleElem.classList.contains('e-group-container'))))) {\n index++;\n }\n }\n var rule = rules && rules.rules[index];\n if (type === 'field') {\n this.selectedColumn = this.getColumn(value);\n }\n else if (rule) {\n this.selectedColumn = this.getColumn(rule.field);\n }\n var operVal;\n this.previousColumn = rule && this.getColumn(rule.field);\n var beforeRules = this.getValidRules(this.rule);\n if (this.selectedColumn) {\n if (this.selectedColumn.operators) {\n operVal = this.selectedColumn.operators;\n }\n else {\n operVal = this.customOperators[this.selectedColumn.type + 'Operator'];\n }\n }\n var arrOper = ['in', 'notin', 'between', 'notbetween'];\n var prevOper;\n switch (type) {\n case 'field':\n if (isNullOrUndefined(value)) {\n if (!isNullOrUndefined(rule)) {\n rule.field = '';\n rule.label = '';\n rule.type = '';\n rule.value = '';\n rule.operator = '';\n }\n else {\n return;\n }\n }\n else {\n rule.field = value;\n rule.label = this.selectedColumn.label;\n rule.type = this.selectedColumn.type;\n rule.value = '';\n rule.operator = operVal[0].value;\n }\n break;\n case 'operator':\n prevOper = rule.operator;\n rule.operator = value;\n if (arrOper.indexOf(rule.operator) > -1) {\n rule.value = [];\n }\n else if (arrOper.indexOf(prevOper) > -1) {\n rule.value = '';\n }\n break;\n case 'value':\n rule.value = value;\n }\n this.changeRuleTemplate(this.selectedColumn, element);\n this.filterRules(beforeRules, this.getValidRules(this.rule), type);\n if (this.selectedColumn && this.selectedColumn.ruleTemplate) {\n if (type === 'field' || type === 'operator') {\n var grpEle = closest(element, '.e-rule-container');\n this.destroyControls(grpEle, true);\n detach(grpEle.querySelector('.e-rule-field'));\n var ruleElement = this.appendRuleElem(closest(grpEle, '.e-group-container'), this.selectedColumn, 'change', grpEle.id, type, rule);\n if (this.displayMode === 'Vertical' || this.element.className.indexOf('e-device') > -1) {\n ruleElement.className = 'e-rule-container e-vertical-mode';\n }\n else {\n ruleElement.className = 'e-rule-container e-horizontal-mode';\n }\n if (!this.enableSeparateConnector) {\n if (ruleElement.previousElementSibling && ruleElement.previousElementSibling.className.indexOf('e-rule-container') > -1) {\n if (ruleElement.className.indexOf('e-joined-rule') < 0) {\n ruleElement.className += ' e-joined-rule';\n }\n if (ruleElement.previousElementSibling.className.indexOf('e-prev-joined-rule') < 0) {\n ruleElement.previousElementSibling.className += ' e-prev-joined-rule';\n }\n }\n }\n if (ruleElement.previousElementSibling && ruleElement.previousElementSibling.className.indexOf('e-group-container') > -1 &&\n ruleElement.className.indexOf('e-separate-rule') < 0) {\n ruleElement.className += ' e-separate-rule';\n }\n var args = {\n requestType: 'template-create', action: type, ruleID: grpEle.id,\n fields: this.fields, rule: rule\n };\n eventsArgs = {\n groupID: grpElem.id.replace(this.element.id + '_', ''), ruleID: grpEle.id.replace(this.element.id + '_', ''),\n value: rule.field, type: 'field'\n };\n this.trigger('actionBegin', args);\n this.trigger('change', eventsArgs);\n }\n }\n };\n QueryBuilder.prototype.changeValue = function (i, args) {\n var _this = this;\n var element;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if ((this.isNumInput && typeof args.value === 'number') || (args.type === 'input' && args.target && args.target.classList.contains('e-numerictextbox'))\n && (this.selectedColumn.validation && (this.selectedColumn.validation.max !== Number.MAX_VALUE || this.selectedColumn.validation.min > 0))) {\n this.isNumInput = false;\n return;\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (args.element && args.element.classList.contains('e-multiselect')) {\n var multiSelectArgs = args;\n element = multiSelectArgs.element;\n }\n else if (args.event) {\n element = args.event.target;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n }\n else if (args.type === 'input' && args.target && args.target.classList.contains('e-numerictextbox')) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n element = args.currentTarget;\n }\n else {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n element = args.element;\n }\n if (!element) {\n return;\n }\n if (element.className.indexOf('e-day') > -1 || element.className.indexOf('e-today') > -1 || element.className.indexOf('e-cell') > -1) {\n var calenderArgs = args;\n element = calenderArgs.element;\n }\n var groupElem = closest(element, '.e-group-container');\n var ruleElem = closest(element, '.e-rule-container');\n var groupID = groupElem && groupElem.id.replace(this.element.id + '_', '');\n var ruleID = ruleElem.id.replace(this.element.id + '_', '');\n var dateElement = args;\n var dropDownObj;\n if (dateElement.element && dateElement.element.className.indexOf('e-datepicker') > -1) {\n element = dateElement.element;\n dropDownObj = getComponent(closest(element, '.e-rule-container').querySelector('.e-filter-input'), 'dropdownlist');\n if (dropDownObj) {\n this.selectedColumn = dropDownObj.getDataByValue(dropDownObj.value);\n }\n dropDownObj = getComponent(closest(element, '.e-rule-container').querySelector('.e-filter-input'), 'dropdowntree');\n if (dropDownObj) {\n this.selectedColumn = this.getColumn(dropDownObj.value[0]);\n }\n }\n var value;\n var rbValue;\n if (element.className.indexOf('e-radio') > -1) {\n rbValue = parseInt(element.id.split('valuekey')[1], 10);\n if (this.fieldMode === 'Default') {\n dropDownObj = getComponent(closest(element, '.e-rule-container').querySelector('.e-filter-input'), 'dropdownlist');\n this.selectedColumn = dropDownObj.getDataByValue(dropDownObj.value);\n if (this.selectedColumn.columns) {\n dropDownObj = getComponent(closest(element, '.e-rule-container').querySelector('.e-rule-sub-filter .e-dropdownlist'), 'dropdownlist');\n this.selectedColumn = this.getColumn(dropDownObj.value);\n }\n }\n else {\n dropDownObj = getComponent(closest(element, '.e-rule-container').querySelector('.e-filter-input'), 'dropdowntree');\n this.selectedColumn = this.getColumn(dropDownObj.value[0]);\n }\n if (this.selectedColumn.values) {\n value = this.selectedColumn.values[rbValue];\n }\n else {\n var valColl = [true, false];\n value = valColl[rbValue];\n }\n }\n else if (element.className.indexOf('e-multiselect') > -1) {\n value = getComponent(element, 'multiselect').value;\n }\n else {\n value = args.value;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (args.type === 'input' && args.target && args.target.classList.contains('e-numerictextbox')) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n value = Number(args.currentTarget.value);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var elem = args.currentTarget;\n var numericTextBoxObj = getInstance(elem, NumericTextBox);\n var decimalSeparator = getValue('decimal', getNumericObject(this.locale));\n if (isNaN(value) && elem.value.indexOf(decimalSeparator) !== -1) {\n value = this.intl.getNumberParser({ format: 'n' })(elem.value);\n }\n if (!isNaN(value)) {\n numericTextBoxObj.value = value;\n }\n this.isNumInput = true;\n }\n }\n if (args.name === 'input' && this.immediateModeDelay) {\n window.clearInterval(this.timer);\n this.timer = window.setInterval(function () { _this.filterValue(groupID, ruleID, value, i, element); }, this.immediateModeDelay);\n }\n else {\n this.filterValue(groupID, ruleID, value, i, element);\n }\n };\n QueryBuilder.prototype.filterValue = function (grID, rlID, value, i, ele) {\n var _this = this;\n var eventsArgs = { groupID: grID, ruleID: rlID, value: value, cancel: false, type: 'value' };\n window.clearInterval(this.timer);\n if (!this.isImportRules) {\n this.trigger('beforeChange', eventsArgs, function (observedChangeArgs) {\n _this.changeValueSuccessCallBack(observedChangeArgs, ele, i, grID, rlID);\n });\n }\n else {\n this.changeValueSuccessCallBack(eventsArgs, ele, i, grID, rlID);\n }\n };\n QueryBuilder.prototype.changeValueSuccessCallBack = function (args, element, i, groupID, ruleID) {\n if (!args.cancel) {\n this.updateRules(element, args.value, i);\n this.setSecondDateMinFromFirst(element, i);\n if (!this.isImportRules) {\n this.trigger('change', { groupID: groupID, ruleID: ruleID, value: args.value, cancel: false, type: 'value' });\n }\n }\n };\n QueryBuilder.prototype.setSecondDateMinFromFirst = function (element, valueIndex) {\n if (valueIndex !== 0) {\n return;\n }\n var ruleElem = closest(element, '.e-rule-container');\n if (!ruleElem) {\n return;\n }\n var operatorDropdownElement = ruleElem.querySelector('.e-rule-operator .e-dropdownlist');\n if (!operatorDropdownElement) {\n return;\n }\n var operatorDropdown = getComponent(operatorDropdownElement, 'dropdownlist');\n var operatorValue = operatorDropdown && operatorDropdown.value ? operatorDropdown.value.toString().toLowerCase() : '';\n if (operatorValue.indexOf('between') < 0) {\n return;\n }\n var firstDateElement = document.getElementById(ruleElem.id + '_valuekey0');\n var secondDateElement = document.getElementById(ruleElem.id + '_valuekey1');\n if (!firstDateElement || !secondDateElement) {\n return;\n }\n var firstDatePicker = getComponent(firstDateElement, 'datepicker');\n var secondDatePicker = getComponent(secondDateElement, 'datepicker');\n if (!firstDatePicker || !secondDatePicker || !(firstDatePicker.value instanceof Date)) {\n return;\n }\n var nextDay = new Date(firstDatePicker.value.getTime());\n nextDay.setDate(nextDay.getDate() + 1);\n secondDatePicker.min = nextDay;\n if (secondDatePicker.value instanceof Date && secondDatePicker.value.getTime() < nextDay.getTime()) {\n secondDatePicker.value = nextDay;\n }\n };\n QueryBuilder.prototype.fieldClose = function (id) {\n if (this.isFieldChange || this.isDestroy) {\n return;\n }\n this.isFieldClose = true;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var ddl = getComponent(id, 'dropdownlist');\n var item = ddl.popupObj && ddl.popupObj.element.querySelector('.e-active');\n var itemData = ddl.getItemData();\n ddl.value = itemData.value;\n var customArgs = {\n element: ddl.element, value: itemData.value, isInteracted: true,\n previousItemData: this.prevItemData, previousItem: null, item: item, itemData: itemData, event: null, e: null\n };\n if (ddl.previousValue !== ddl.value) {\n this.changeField(customArgs);\n }\n this.isFieldChange = false;\n };\n QueryBuilder.prototype.changeField = function (args) {\n if (args.isInteracted) {\n if (isNullOrUndefined(args.value)) {\n return;\n }\n this.isFieldChange = true;\n this.prevItemData = args.itemData;\n var fieldElem = closest(args.element, '.e-rule-filter') || closest(args.element, '.e-rule-sub-filter');\n var column = this.fieldMode === 'DropdownTree' ? this.getColumn(args.value[0]) : this.getColumn(args.value);\n if (this.fieldMode === 'DropdownTree' && fieldElem !== null) {\n var ddtElem = fieldElem.querySelector('.e-dropdowntree.e-control');\n var ddt = getComponent(ddtElem, 'dropdowntree');\n if (column) {\n if (column.type === 'object') {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ddt.value = args.oldValue;\n ddt.dataBind();\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (isNullOrUndefined(args.oldValue)) {\n ddtElem.value = '';\n }\n else {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var result = this.getLabelFromColumn(args.oldValue[0]);\n ddtElem.value = result;\n }\n return;\n }\n else {\n if (!isNullOrUndefined(args.value[0])) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ddt.value = args.value[0];\n ddt.dataBind();\n var result = this.getLabelFromColumn(args.value[0]);\n ddtElem.value = result;\n }\n }\n }\n else {\n return;\n }\n }\n this.destroySubFields(fieldElem);\n this.subFieldElem = null;\n this.isNotValueChange = true;\n if (column && column.ruleTemplate) {\n this.templateChange(args.element, column.field, 'field');\n }\n else if (column && column.columns && column.columns[0].ruleTemplate) {\n this.templateChange(args.element, column.columns[0].field, 'field');\n }\n else {\n var groupElem = closest(args.element, '.e-group-container');\n var rules = this.getParentGroup(groupElem);\n var ruleElem = closest(args.element, '.e-rule-container');\n var index = 0;\n while (ruleElem && ruleElem.previousElementSibling !== null) {\n ruleElem = ruleElem.previousElementSibling;\n if (!this.enableSeparateConnector || (this.enableSeparateConnector &&\n ((!this.headerTemplate && !ruleElem.classList.contains('e-btn-group')) ||\n this.headerTemplate && (ruleElem.classList.contains('e-rule-container') ||\n ruleElem.classList.contains('e-group-container'))))) {\n index++;\n }\n }\n rules.rules[index].value = '';\n this.changeRule(rules.rules[index], args);\n }\n }\n };\n QueryBuilder.prototype.changeRule = function (rule, ddlArgs) {\n if (!ddlArgs.itemData) {\n if (this.fieldMode === 'DropdownTree') {\n var ddt = getComponent(ddlArgs.element, 'dropdowntree');\n if (ddt.value == null) {\n return;\n }\n }\n else {\n return;\n }\n }\n var tempRule = {};\n var filterElem = closest(ddlArgs.element, '.e-rule-filter');\n filterElem = filterElem ? filterElem : closest(ddlArgs.element, '.e-rule-sub-filter');\n var ddlObj = getComponent(ddlArgs.element, 'dropdownlist');\n if (this.fieldMode === 'DropdownTree' && filterElem !== null) {\n ddlObj = getComponent(ddlArgs.element, 'dropdowntree');\n }\n var element = closest(ddlArgs.element, '.e-group-container');\n var groupID = element.id.replace(this.element.id + '_', '');\n this.changeFilter(filterElem, ddlObj, groupID, rule, tempRule, ddlArgs);\n };\n QueryBuilder.prototype.changeFilter = function (flt, dl, grID, rl, tmpRl, dArg) {\n var _this = this;\n if (flt) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var ddlValue = void 0;\n if (this.fieldMode === 'DropdownTree') {\n ddlValue = (dl.value[0]);\n }\n else {\n ddlValue = this.isImportRules ? this.GetRootColumnName(dl.value) : dl.value;\n }\n this.selectedColumn = this.getColumn(ddlValue);\n var ruleElem = closest(flt, '.e-rule-container');\n var ruleID = ruleElem.id.replace(this.element.id + '_', '');\n var eventsArgs = {\n groupID: grID, ruleID: ruleID, selectedField: this.fieldMode === 'DropdownTree' ?\n dl.value[0] : dl.value, cancel: false, type: 'field'\n };\n if (!this.isImportRules && !this.prvtEvtTgrDaD) {\n this.trigger('beforeChange', eventsArgs, function (observedChangeArgs) {\n _this.fieldChangeSuccess(observedChangeArgs, tmpRl, flt, rl, dArg);\n });\n }\n else {\n this.fieldChangeSuccess(eventsArgs, tmpRl, flt, rl, dArg);\n }\n }\n else {\n var operatorElem = closest(dArg.element, '.e-rule-operator');\n this.changeOperator(flt, operatorElem, dl, grID, rl, tmpRl, dArg);\n }\n };\n QueryBuilder.prototype.changeOperator = function (\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n flt, opr, dl, grID, rl, tmpRl, dArg) {\n var _this = this;\n var ruleElem;\n var ruleID;\n var eventsArgs;\n if (opr) {\n ruleElem = closest(opr, '.e-rule-container');\n ruleID = ruleElem.id.replace(this.element.id + '_', '');\n eventsArgs = { groupID: grID, ruleID: ruleID, selectedIndex: dl.index, cancel: false, type: 'operator' };\n if (!this.isImportRules) {\n this.trigger('beforeChange', eventsArgs, function (observedChangeArgs) {\n _this.operatorChangeSuccess(observedChangeArgs, flt, tmpRl, rl, dArg);\n });\n }\n else {\n this.operatorChangeSuccess(eventsArgs, flt, tmpRl, rl, dArg);\n }\n }\n else {\n this.changeRuleValues(flt, rl, tmpRl, dArg);\n }\n };\n QueryBuilder.prototype.fieldChangeSuccess = function (args, tempRule, filterElem, rule, ddlArgs) {\n var ruleElem = closest(filterElem, '.e-rule-container');\n var operatorElem = closest(ddlArgs.element, '.e-rule-operator');\n var element = closest(ddlArgs.element, '.e-group-container');\n var groupID = element.id.replace(this.element.id + '_', '');\n var ddlObj = getComponent(ddlArgs.element, 'dropdownlist');\n var tooltipElem = ruleElem.querySelectorAll('.e-tooltip.e-input-group');\n for (var i = 0; i < tooltipElem.length; i++) {\n getComponent(tooltipElem[i], 'tooltip').destroy();\n }\n if (!args.cancel) {\n if (isNullOrUndefined(this.selectedColumn)) {\n return;\n }\n tempRule.type = this.selectedColumn.type;\n if (ruleElem.querySelector('.e-template')) {\n rule.value = '';\n }\n if (this.selectedColumn.type === 'object' && this.fieldMode === 'Default') {\n tempRule.type = this.selectedColumn.columns[0].type;\n while (this.selectedColumn.columns) {\n this.createSubFields(filterElem, rule, tempRule, ddlArgs);\n }\n }\n else {\n this.destroySubFields(filterElem);\n this.changeOperator(filterElem, operatorElem, ddlObj, groupID, rule, tempRule, ddlArgs);\n }\n }\n else {\n this.changeOperator(filterElem, operatorElem, ddlObj, groupID, rule, tempRule, ddlArgs);\n }\n };\n QueryBuilder.prototype.destroySubFields = function (filterElem) {\n while (filterElem && filterElem.nextElementSibling.classList.contains('e-rule-sub-filter')) {\n this.destroyControls(filterElem);\n filterElem.nextElementSibling.remove();\n }\n };\n QueryBuilder.prototype.createSubFields = function (filterElem, rule, tempRule, ddlArgs) {\n var subFieldValue = false;\n var fieldElem = closest(filterElem, '.e-rule-field');\n var tempElem = this.createElement('div', { attrs: { class: 'e-rule-sub-filter', id: 'subfilter' + this.subFilterCounter } });\n fieldElem.insertBefore(tempElem, fieldElem.querySelector('.e-rule-operator'));\n var ruleId = closest(tempElem, '.e-rule-container').id;\n var subFieldElem = this.createElement('input', { attrs: { type: 'text', id: ruleId + '_subfilterkey' + this.subFilterCounter } });\n tempElem.appendChild(subFieldElem);\n var height = (this.element.className.indexOf('e-device') > -1) ? '250px' : '200px';\n var ddlField;\n ddlField = {\n dataSource: this.selectedColumn.columns,\n fields: this.fields,\n placeholder: this.l10n.getConstant('SelectField'),\n popupHeight: ((this.selectedColumn.columns.length > 5) ? height : 'auto'),\n change: this.changeField.bind(this),\n index: 0,\n open: this.popupOpen.bind(this, false)\n };\n if (this.fieldModel) {\n ddlField = __assign({}, ddlField, this.fieldModel);\n }\n var dropDownList = new DropDownList(ddlField);\n dropDownList.appendTo('#' + ruleId + '_subfilterkey' + this.subFilterCounter);\n if (this.isImportRules || (this.previousColumn && this.previousColumn.ruleTemplate &&\n this.GetRootColumnName(rule.field) === this.GetRootColumnName(this.previousColumn.field))) {\n var subField = this.selectedColumn.columns;\n for (var i = 0; i < subField.length; i++) {\n if (rule.field === subField[i].field || rule.field.indexOf(subField[i].field + this.separator) > -1) {\n dropDownList.value = subField[i].field;\n this.selectedColumn = subField[i];\n subFieldValue = true;\n break;\n }\n }\n }\n this.subFilterCounter++;\n this.subFieldElem = subFieldElem;\n // eslint-disable-next-line\n ddlArgs.itemData = ddlArgs.itemData;\n if (!subFieldValue && this.selectedColumn.columns) {\n if (!subFieldValue && this.isImportRules) {\n dropDownList.value = null;\n }\n this.selectedColumn = this.selectedColumn.columns[0];\n }\n this.previousColumn = this.selectedColumn;\n if (!this.selectedColumn.columns) {\n this.changeRuleValues(tempElem, rule, tempRule, ddlArgs);\n }\n };\n QueryBuilder.prototype.operatorChangeSuccess = function (eventsArgs, filterElem, tempRule, rule, ddlArgs) {\n if (!eventsArgs.cancel) {\n var operatorElem = closest(ddlArgs.element, '.e-rule-operator');\n var valElem = operatorElem.nextElementSibling;\n var dropDownObj = getComponent(ddlArgs.element, 'dropdownlist');\n var prevOper = rule.operator ? rule.operator.toString().toLowerCase() : '';\n tempRule.operator = dropDownObj.value.toString();\n var currOper = tempRule.operator.toLowerCase();\n if (tempRule.operator.toLowerCase().indexOf('between') > -1 || (tempRule.operator.toLowerCase().indexOf('in') > -1\n && tempRule.operator.toLowerCase().indexOf('contains') < 0)) {\n filterElem = operatorElem.previousElementSibling;\n tempRule.type = rule.type;\n if (tempRule.operator.toLowerCase().indexOf('in') < 0 || prevOper.indexOf('in') < 0) {\n rule.value = [];\n }\n }\n else if (typeof rule.value === 'object' && rule.value !== null) {\n rule.value = rule.value.length > 0 ? rule.value[0] : rule.type === 'number' ? 0 : '';\n }\n if (ddlArgs.previousItemData) {\n var prevValue = ddlArgs.previousItemData.value.toString().toLowerCase();\n if ((prevValue.indexOf('between') > -1 || (prevValue.indexOf('in') > -1 || (prevValue.indexOf('null') > -1)\n || (prevValue.indexOf('empty') > -1)) && prevValue.indexOf('contains') < 0)) {\n filterElem = operatorElem.previousElementSibling;\n tempRule.type = rule.type;\n }\n }\n if ((prevOper.indexOf('in') > -1 && prevOper.indexOf('in') < 5) && (currOper.indexOf('in') > -1\n && currOper.indexOf('in') < 5)) {\n filterElem = null;\n }\n if (tempRule.operator.indexOf('null') > -1 || (tempRule.operator.indexOf('empty') > -1)) {\n var parentElem = operatorElem.parentElement.querySelector('.e-rule-value');\n var tooltipElem = parentElem.querySelector('.e-tooltip.e-input-group');\n if (tooltipElem) {\n getComponent(tooltipElem, 'tooltip').destroy();\n }\n else if (prevOper.indexOf('in') > -1) {\n tooltipElem = parentElem.querySelector('.e-tooltip');\n if (tooltipElem) {\n getComponent(tooltipElem, 'tooltip').destroy();\n }\n }\n removeClass([parentElem], 'e-show');\n addClass([parentElem], 'e-hide');\n }\n if (valElem && this.getColumn(rule.field).template) {\n filterElem = operatorElem.previousElementSibling;\n }\n if (valElem.children.length === 0) {\n filterElem = operatorElem.previousElementSibling;\n }\n this.changeRuleValues(filterElem, rule, tempRule, ddlArgs);\n }\n };\n QueryBuilder.prototype.changeRuleValues = function (filterElem, rule, tempRule, ddlArgs) {\n var operatorElem = closest(ddlArgs.element, '.e-rule-operator');\n var isSub;\n var ddlObj;\n var operatorList;\n var oprElem;\n if (filterElem) {\n operatorElem = filterElem.nextElementSibling;\n if (filterElem.classList.contains('e-rule-sub-filter')) {\n tempRule.type = this.selectedColumn.type;\n isSub = operatorElem.classList.contains('e-rule-sub-filter');\n operatorElem = isSub ? operatorElem.nextElementSibling : operatorElem;\n }\n addClass([operatorElem], 'e-operator');\n if (operatorElem.childElementCount) {\n ddlObj = getComponent(operatorElem.querySelector('.e-dropdownlist'), 'dropdownlist');\n tempRule.operator = ddlObj.value;\n var fieldObj = void 0;\n if (this.fieldMode === 'DropdownTree') {\n fieldObj = getComponent(filterElem.querySelector('.e-dropdowntree'), 'dropdowntree');\n }\n else {\n fieldObj = getComponent(filterElem.querySelector('.e-dropdownlist'), 'dropdownlist');\n }\n tempRule.type = this.fieldMode === 'DropdownTree' ? this.getColumn(fieldObj.value[0]).type :\n this.getColumn(fieldObj.value).type;\n var itemData = ddlArgs.itemData;\n if (ddlObj.value !== '') {\n this.renderValues(operatorElem, itemData, ddlArgs.previousItemData, true, rule, tempRule, ddlArgs.element);\n }\n }\n else {\n var ruleId = closest(operatorElem, '.e-rule-container').id;\n oprElem = this.createElement('input', { attrs: { type: 'text', id: ruleId + '_operatorkey' } });\n operatorElem.appendChild(oprElem);\n if (this.selectedColumn.operators) {\n operatorList = this.selectedColumn.operators;\n }\n else if (ddlArgs.itemData) {\n operatorList = this.customOperators[this.selectedColumn.type + 'Operator'];\n }\n var height = (this.element.className.indexOf('e-device') > -1) ? '250px' : '200px';\n var operator_2;\n if (rule.operator) {\n operatorList.forEach(function (obj) {\n if ('value' in obj && typeof obj.value === 'string' && obj.value.toLowerCase() === rule.operator.toLowerCase()) {\n operator_2 = obj.value;\n }\n });\n }\n var value = operator_2 ? operator_2 : operatorList[0].value;\n var ddlIdx = 0;\n if (!this.autoSelectOperator) {\n value = '';\n ddlIdx = -1;\n }\n if (this.isImportRules || (this.ruleIndex > -1 || this.groupIndex > -1 || this.prvtEvtTgrDaD)) {\n value = rule ? (rule.operator ? rule.operator : value) : value;\n }\n var ddlOperator = void 0;\n ddlOperator = {\n dataSource: operatorList,\n fields: { text: 'key', value: 'value' },\n placeholder: this.l10n.getConstant('SelectOperator'),\n popupHeight: ((operatorList.length > 5) ? height : 'auto'),\n change: this.changeField.bind(this),\n index: ddlIdx,\n value: value,\n open: this.popupOpen.bind(this, false)\n };\n if (this.operatorModel) {\n ddlOperator = __assign({}, ddlOperator, this.operatorModel);\n }\n var dropDownList = new DropDownList(ddlOperator);\n dropDownList.appendTo('#' + ruleId + '_operatorkey');\n tempRule.operator = (rule && rule.operator !== '' && !isNullOrUndefined(rule.operator)) ? rule.operator : operatorList[0].value;\n if (this.isImportRules) {\n tempRule.type = this.selectedColumn.type;\n tempRule.operator = rule.operator;\n }\n if (!isNullOrUndefined(value) && value !== '') {\n this.renderValues(operatorElem, this.selectedColumn, ddlArgs.previousItemData, false, rule, tempRule, ddlArgs.element);\n }\n else if (this.autoSelectField && this.autoSelectOperator) {\n this.renderValues(operatorElem, this.selectedColumn, ddlArgs.previousItemData, false, rule, tempRule, ddlArgs.element);\n }\n }\n }\n if (!this.isImportRules) {\n this.updateRules(ddlArgs.element, ddlArgs.item);\n }\n };\n QueryBuilder.prototype.popupOpen = function (isField, args) {\n if (this.enableRtl) {\n addClass([args.popup.element], 'e-rtl');\n }\n if (isField) {\n this.isFieldClose = false;\n }\n };\n QueryBuilder.prototype.destroyControls = function (target, isRuleTemplate) {\n var element = isRuleTemplate ? target : target.nextElementSibling;\n var inputElement = element.querySelectorAll('input.e-control');\n var divElement = element.querySelectorAll('div.e-control:not(.e-handle)');\n var columns = this.columns;\n for (var i = 0, len = inputElement.length; i < len; i++) {\n if (inputElement[i].classList.contains('e-textbox')) {\n getComponent(inputElement[i], 'textbox').destroy();\n detach(select('input#' + inputElement[i].id, element));\n }\n else if (inputElement[i].classList.contains('e-dropdownlist')) {\n if (this.allowValidation && inputElement[i].parentElement.className.indexOf('e-tooltip') > -1) {\n getComponent(inputElement[i].parentElement, 'tooltip').destroy();\n }\n getComponent(inputElement[i], 'dropdownlist').destroy();\n }\n else if (inputElement[i].classList.contains('e-radio')) {\n getComponent(inputElement[i], 'radio').destroy();\n }\n else if (inputElement[i].classList.contains('e-numerictextbox')) {\n getComponent(inputElement[i], 'numerictextbox').destroy();\n detach(select('input#' + inputElement[i].id, element));\n }\n else if (inputElement[i].classList.contains('e-datepicker')) {\n getComponent(inputElement[i], 'datepicker').destroy();\n }\n else if (inputElement[i].classList.contains('e-multiselect')) {\n getComponent(inputElement[i], 'multiselect').destroy();\n }\n else if (inputElement[i].className.indexOf('e-template') > -1) {\n var clsName = inputElement[i].className;\n for (var j = 0, jLen = columns.length; j < jLen; j++) {\n if (columns[j].template && clsName.indexOf(columns[j].field) > -1) {\n this.templateDestroy(columns[j], inputElement[i].id);\n break;\n }\n }\n }\n if (document.getElementById(inputElement[i].id)) {\n detach(inputElement[i]);\n }\n }\n for (var i = 0, len = divElement.length; i < len; i++) {\n if (divElement[i].className.indexOf('e-template') > -1) {\n var clsName = divElement[i].className;\n for (var j = 0, jLen = columns.length; j < jLen; j++) {\n if (columns[j].template && clsName.indexOf(columns[j].field) > -1) {\n this.templateDestroy(columns[j], divElement[i].id);\n break;\n }\n }\n }\n detach(divElement[i]);\n }\n var templateElement = element.querySelectorAll('.e-template:not(.e-control)');\n for (var i = 0, len = templateElement.length; i < len; i++) {\n detach(templateElement[i]);\n }\n };\n QueryBuilder.prototype.templateDestroy = function (column, elemId) {\n var template;\n if (typeof column.template !== 'string' || column.template.destroy === undefined) {\n template = column.template;\n }\n else {\n return;\n }\n var temp = template.destroy;\n if (template.destroy) {\n var templateElements = void 0;\n if (document.getElementById(elemId)) {\n templateElements = closest(document.getElementById(elemId), '.e-rule-field').querySelectorAll('.e-template');\n }\n if (typeof temp === 'string') {\n temp = getValue(temp, window);\n temp({ field: column.field, elementId: elemId, elements: templateElements });\n }\n else {\n template.destroy({ field: column.field, elementId: elemId, elements: templateElements });\n }\n }\n };\n /**\n * Return values bound to the column.\n *\n * @param {string} field - 'field' to be passed to get the field values.\n * @returns {object[]} - Values bound to the column\n */\n QueryBuilder.prototype.getValues = function (field) {\n var original = {};\n var result = [];\n var value;\n var fieldColl = [];\n if (this.separator.length > 0) {\n fieldColl = field.split(this.separator);\n }\n var dataSource = this.dataColl;\n if (this.dataColl[1]) {\n for (var i = 0, iLen = dataSource.length; i < iLen; i++) {\n var data = {};\n if (fieldColl.length > 1) {\n var dataObj = dataSource[i];\n var fieldStr = void 0;\n for (var j = 0, jLen = fieldColl.length; j < jLen; j++) {\n fieldStr = fieldColl[j];\n if (fieldColl.length === (j + 1)) {\n value = dataObj[\"\" + fieldStr];\n if (Number(dataObj[\"\" + fieldStr]) === dataObj[\"\" + fieldStr] && dataObj[\"\" + fieldStr] % 1 !== 0) {\n value = dataObj[\"\" + fieldStr].toString();\n }\n }\n else {\n dataObj = dataObj[\"\" + fieldStr];\n }\n }\n }\n else {\n value = dataSource[i][\"\" + field];\n if (Number(dataSource[i][\"\" + field]) === dataSource[i][\"\" + field] && dataSource[i][\"\" + field] % 1 !== 0) {\n value = dataSource[i][\"\" + field].toString();\n }\n }\n if (!(value in original)) {\n original[\"\" + value] = 1;\n if (fieldColl.length > 1) {\n this.createNestedObject(data, fieldColl, value);\n }\n else {\n data[\"\" + field] = value;\n }\n result.push(data);\n }\n }\n }\n return result;\n };\n QueryBuilder.prototype.createNestedObject = function (obj, fieldColl, value) {\n var key;\n var lastIndex = fieldColl.length - 1;\n for (var k = 0; k < lastIndex; ++k) {\n key = fieldColl[k];\n if (!(key in obj)) {\n obj[\"\" + key] = {};\n }\n obj = obj[\"\" + key];\n }\n obj[fieldColl[lastIndex]] = value;\n };\n QueryBuilder.prototype.getDistinctValues = function (dataSource, field) {\n var original = {};\n var result = [];\n var nest = [];\n var value = '';\n var isNested = field.indexOf(this.separator);\n var _loop_2 = function (i, iLen) {\n value = '';\n if (isNested === 0) {\n value = dataSource[i][\"\" + field];\n }\n else {\n nest = field.split(this_2.separator);\n // eslint-disable-next-line @typescript-eslint/tslint/config\n nest.forEach(function (element) {\n if (value) {\n value = value[\"\" + element];\n }\n else {\n value = dataSource[i][\"\" + element];\n }\n });\n }\n if (Number(dataSource[i][\"\" + field]) === dataSource[i][\"\" + field] && dataSource[i][\"\" + field] % 1 !== 0) {\n value = dataSource[i][\"\" + field].toString();\n }\n var data = {};\n if (!(value in original) && value) {\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[0]) {\n if (Object.keys(this.dataColl[0]).indexOf(rule.field) > -1) {\n isFetched = true;\n ds = this.getDistinctValues(this.dataColl, rule.field);\n }\n }\n isFetched = rule.columns ? false : isFetched;\n if (!this.dataColl.length && values.length) {\n isValues = true;\n }\n var multiSelectValue;\n var multiSelectUserQuery = (this.valueModel && this.valueModel.multiSelectModel && this.valueModel.multiSelectModel.query)\n ? this.valueModel.multiSelectModel.query\n : null;\n var multiSelectQuery = (multiSelectUserQuery && typeof multiSelectUserQuery.clone === 'function')\n ? multiSelectUserQuery.clone()\n : new Query();\n var selectedField = rule.field;\n if (selectedField) {\n multiSelectQuery.select([selectedField]);\n }\n var resolvedQuery = new Query([rule.field]);\n if (!isValues && !isFetched && (this.dataManager instanceof DataManager || this.dataSource instanceof DataManager)) {\n resolvedQuery = multiSelectQuery;\n }\n multiSelectValue = {\n dataSource: isValues ? values : (isFetched ? ds : this.dataManager),\n query: resolvedQuery,\n fields: { text: this.selectedRule.field, value: this.selectedRule.field },\n placeholder: this.l10n.getConstant('SelectValue'),\n value: selectedValue,\n mode: 'CheckBox',\n width: '100%',\n change: this.changeValue.bind(this, i),\n close: this.closePopup.bind(this, i),\n actionBegin: this.multiSelectOpen.bind(this, parentId + '_valuekey' + i),\n open: this.popupOpen.bind(this, false)\n };\n if (this.valueModel && this.valueModel.multiSelectModel) {\n multiSelectValue = __assign({}, multiSelectValue, this.valueModel.multiSelectModel);\n }\n var multiSelectObj = new MultiSelect(multiSelectValue);\n multiSelectObj.appendTo('#' + parentId + '_valuekey' + i);\n this.updateRules(multiSelectObj.element, selectedValue, 0);\n };\n QueryBuilder.prototype.multiSelectOpen = function (parentId, args) {\n if (this.dataSource instanceof DataManager) {\n var element = document.getElementById(parentId);\n var dropDownObj = getComponent(closest(element, '.e-rule-container').querySelector('.e-filter-input'), this.fieldMode === 'DropdownTree' ? 'dropdowntree' : 'dropdownlist');\n if (this.fieldMode === 'DropdownTree') {\n this.selectedColumn = this.getColumn(dropDownObj.value[0]);\n }\n else {\n this.selectedColumn = dropDownObj.getDataByValue(dropDownObj.value);\n }\n var value = this.selectedColumn.field;\n var isFetched = false;\n if (this.dataColl[0]) {\n if (Object.keys(this.dataColl[0]).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 var multiselectObj = getComponent(element, 'multiselect');\n if (!multiselectObj) {\n return;\n }\n var incomingQuery = (args.query) ? args.query : null;\n var existingQuery = multiselectObj.query ? multiselectObj.query : null;\n if (!this.areQueriesSame(existingQuery, incomingQuery)) {\n multiselectObj.query = null;\n args.query = null;\n }\n }\n };\n QueryBuilder.prototype.areQueriesSame = function (query1, query2) {\n if ((query1 === null || query1 === undefined) && (query2 === null || query2 === undefined)) {\n return true;\n }\n if ((query1 === null || query1 === undefined) || (query2 === null || query2 === undefined)) {\n return false;\n }\n return JSON.stringify(query1) === JSON.stringify(query2);\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 multiselectObj = getComponent(element, 'multiselect');\n var userQuery = multiselectObj.query ? multiselectObj.query : null;\n var dataQuery = (userQuery && typeof userQuery.clone === 'function')\n ? userQuery.clone()\n : new Query();\n dataQuery.select([value]);\n if (!this.isRequestSent) {\n var data = this.dataManager.executeQuery(dataQuery);\n this.isRequestSent = true;\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 _this.isRequestSent = false;\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 var newData = _this.getDistinctValues(_this.dataColl, value);\n var current = multiselectObj.dataSource;\n if ((current.length !== newData.length &&\n (JSON.stringify(current) !== JSON.stringify(newData)))) {\n multiselectObj.dataSource = newData;\n }\n _this.isGetNestedData = true;\n hideSpinner(closest(element, '.e-multi-select-wrapper').parentElement);\n }).catch(function (e) {\n _this.isRequestSent = false;\n deferred.reject(e);\n });\n }\n };\n QueryBuilder.prototype.createSpinner = function (element) {\n var spinnerElem = this.createElement('span', { attrs: { class: 'e-qb-spinner' } });\n element.appendChild(spinnerElem);\n createSpinner({ target: spinnerElem, width: Browser.isDevice ? '16px' : '14px' });\n };\n QueryBuilder.prototype.closePopup = function (i, args) {\n var element = document.getElementById(args.popup.element.id.replace('_popup', ''));\n if (element) {\n var ms = getComponent(element, 'multiselect');\n if (ms) {\n var value = ms.value;\n this.updateRules(element, value, i);\n }\n }\n };\n QueryBuilder.prototype.processTemplate = function (target, itemData, rule, tempRule) {\n var container = closest(target, '.e-rule-container');\n var tempElements = container.querySelectorAll('.e-template');\n var filterElem = container.querySelector('.e-rule-filter .e-filter-input');\n var ddlObj = this.fieldMode === 'DropdownTree' ? getComponent(filterElem, 'dropdowntree')\n : getComponent(container.querySelector('.e-rule-filter .e-filter-input'), 'dropdownlist');\n var column = this.fieldMode === 'DropdownTree' ? this.getColumn(ddlObj.value[0]) : this.getColumn(ddlObj.value);\n if (target && target.nextElementSibling) {\n target.nextElementSibling.style.position = 'relative';\n target.nextElementSibling.classList.add('e-querybuilder-spinner');\n }\n var onComplete = function () {\n if (target && target.nextElementSibling && target.nextElementSibling.classList.contains('e-querybuilder-spinner')) {\n target.nextElementSibling.classList.remove('e-querybuilder-spinner');\n }\n };\n if (typeof itemData.template === 'string' || itemData.template.write === undefined) {\n var args = {\n rule: rule, ruleID: container.id, operator: tempRule.operator, field: column.field,\n requestType: 'value-template-create'\n };\n this.trigger('actionBegin', args);\n onComplete();\n }\n else {\n var template = itemData.template;\n var templateArgs = {\n elements: tempElements.length > 1 ? tempElements : tempElements[0],\n values: rule.value,\n operator: tempRule.operator,\n field: column.field,\n dataSource: column.values,\n onComplete: onComplete\n };\n var writeResult = void 0;\n if (typeof template.write === 'string') {\n writeResult = getValue(template.write, window)(templateArgs);\n }\n else if (typeof itemData.template !== 'function') {\n writeResult = itemData.template.write(templateArgs);\n }\n if (writeResult && typeof writeResult.then === 'function') {\n writeResult.then(function () { return onComplete(); });\n }\n else {\n setTimeout(function () { return onComplete(); }, 100);\n }\n }\n };\n QueryBuilder.prototype.getItemData = function (parentId) {\n var fieldObj = getComponent(document.getElementById(parentId + '_filterkey'), 'dropdownlist');\n var parentFieldObj = this.element.querySelector(\"#\" + parentId);\n if (this.fieldMode === 'DropdownTree') {\n fieldObj = getComponent(document.getElementById(parentId + '_filterkey'), 'dropdowntree');\n }\n else if (parentFieldObj) {\n var subFieldObjList = parentFieldObj.querySelectorAll('.e-rule-sub-filter');\n if (subFieldObjList.length > 0) {\n var lastSubFieldObj = subFieldObjList[subFieldObjList.length - 1].querySelector('.e-dropdownlist');\n fieldObj = getComponent(lastSubFieldObj, 'dropdownlist');\n }\n }\n return this.fieldMode === 'DropdownTree' ? this.getColumn(fieldObj.value[0]) : this.getColumn(fieldObj.value);\n };\n QueryBuilder.prototype.setDefaultValue = function (parentId, isArryValue, isNumber) {\n var itemData = this.getItemData(parentId);\n if (isNullOrUndefined(itemData.value)) {\n return isNumber ? isArryValue ? [0, 0] : 0 : isArryValue ? [] : '';\n }\n if (isArryValue) {\n if (!(itemData.value instanceof Array)) {\n return [itemData.value];\n }\n }\n else {\n if (itemData.value instanceof Array) {\n return itemData.value[0];\n }\n }\n return itemData.value;\n };\n QueryBuilder.prototype.renderStringValue = function (parentId, rule, operator, idx, ruleValElem) {\n var selectedVal;\n var columnData = this.getItemData(parentId);\n var selectedValue;\n var isTemplate = (typeof columnData.template === 'string');\n if (this.isImportRules || this.ruleIndex > -1 || this.groupIndex > -1 || this.isPublic || isTemplate || rule.value !== '') {\n selectedValue = rule.value;\n }\n else {\n selectedValue = this.setDefaultValue(parentId, false, false);\n }\n if ((operator === 'in' || operator === 'notin') && (this.dataColl.length || columnData.values)) {\n selectedVal = (this.isImportRules || this.ruleIndex > -1 || this.groupIndex > -1 || this.isPublic) ? rule.value :\n this.setDefaultValue(parentId, true, false);\n this.renderMultiSelect(columnData, parentId, idx, selectedVal, columnData.values);\n if (this.displayMode === 'Vertical' || this.element.className.indexOf('e-device') > -1) {\n ruleValElem.style.width = '100%';\n }\n else {\n ruleValElem.style.width = null;\n ruleValElem.style.minWidth = '200px';\n }\n }\n else {\n if (operator === 'in' || operator === 'notin') {\n selectedVal = (this.isImportRules || this.ruleIndex > -1 || this.groupIndex > -1) ? rule.value :\n this.setDefaultValue(parentId, true, false);\n selectedValue = selectedVal.join(',');\n }\n if (operator === 'between' || operator === 'notbetween') {\n if (selectedValue.length > 1) {\n selectedValue = selectedValue[idx];\n }\n }\n var txtBox = void 0;\n txtBox = {\n placeholder: this.l10n.getConstant('SelectValue'),\n input: this.changeValue.bind(this, idx)\n };\n if (this.valueModel && this.valueModel.textBoxModel) {\n txtBox = __assign({}, txtBox, this.valueModel.textBoxModel);\n }\n var inputobj = new TextBox(txtBox);\n inputobj.appendTo('#' + parentId + '_valuekey' + idx);\n inputobj.value = selectedValue;\n inputobj.dataBind();\n }\n };\n QueryBuilder.prototype.renderNumberValue = function (parentId, rule, operator, idx, ruleValElem, itemData, length) {\n var columnData = this.getItemData(parentId);\n var isTemplate = (typeof columnData.template === 'string');\n var selectedVal = (this.isImportRules || this.ruleIndex > -1 || this.groupIndex > -1 || this.isPublic || isTemplate ||\n typeof rule.value === 'number') ? rule.value : this.setDefaultValue(parentId, false, true);\n if ((operator === 'in' || operator === 'notin') && (this.dataColl.length || columnData.values)) {\n selectedVal = (this.isImportRules || this.ruleIndex > -1 || this.groupIndex > -1 || this.isPublic) ? rule.value :\n this.setDefaultValue(parentId, true, false);\n this.renderMultiSelect(columnData, parentId, idx, selectedVal, columnData.values);\n if (this.element.className.indexOf('e-device') > -1 || this.displayMode === 'Vertical') {\n ruleValElem.style.width = '100%';\n }\n else {\n ruleValElem.style.minWidth = '200px';\n ruleValElem.style.width = null;\n }\n }\n else if (operator === 'in' || operator === 'notin') {\n selectedVal = (this.isImportRules || this.ruleIndex > -1 || this.groupIndex > -1) ? rule.value :\n this.setDefaultValue(parentId, true, false);\n var selVal = selectedVal.join(',');\n var txtInp = void 0;\n txtInp = {\n placeholder: this.l10n.getConstant('SelectValue'),\n input: this.changeValue.bind(this, idx)\n };\n if (this.valueModel && this.valueModel.textBoxModel) {\n txtInp = __assign({}, txtInp, this.valueModel.textBoxModel);\n }\n var input = new TextBox(txtInp);\n input.appendTo('#' + parentId + '_valuekey' + idx);\n input.value = selVal;\n input.dataBind();\n }\n else {\n itemData = columnData;\n var min = (itemData.validation && itemData.validation.min) ? itemData.validation.min : 0;\n var max = (itemData.validation && itemData.validation.max) ? itemData.validation.max : Number.MAX_VALUE;\n var format = itemData.format ? itemData.format : 'n';\n if (length > 1 && rule) {\n selectedVal = rule.value[idx] ? rule.value[idx] : this.setDefaultValue(parentId, true, true);\n }\n var numericTxt = void 0;\n numericTxt = {\n value: (selectedVal instanceof Array) ? selectedVal[idx] : selectedVal,\n format: format, min: min, max: max, width: '100%',\n step: itemData.step ? itemData.step : 1,\n change: this.changeValue.bind(this, idx)\n };\n if (this.valueModel && this.valueModel.numericTextBoxModel) {\n numericTxt = __assign({}, numericTxt, this.valueModel.numericTextBoxModel);\n }\n var numeric = new NumericTextBox(numericTxt);\n numeric.appendTo('#' + parentId + '_valuekey' + idx);\n numeric.element.setAttribute('aria-label', itemData.label + ' ' + 'Value');\n numeric.element.oninput = this.changeValue.bind(this, idx);\n }\n };\n QueryBuilder.prototype.processValueString = function (value, type) {\n var numArr = [];\n var strArr = value.split(',');\n if (type === 'string') {\n return strArr;\n }\n else {\n for (var k = 0, kLen = strArr.length; k < kLen; k++) {\n numArr.push(Number(strArr[k]));\n }\n return numArr;\n }\n };\n QueryBuilder.prototype.parseDate = function (value, format) {\n var formatOpt;\n var selectedValue;\n if (format) {\n var dParser = this.intl.getDateParser({ skeleton: 'full', type: 'dateTime' });\n formatOpt = this.getFormat(format);\n selectedValue = dParser(value);\n if (isNullOrUndefined(selectedValue)) {\n selectedValue = this.intl.parseDate(value, formatOpt);\n }\n }\n else {\n selectedValue = new Date(value);\n }\n return selectedValue;\n };\n QueryBuilder.prototype.renderControls = function (target, itemData, rule, tempRule, isRendered) {\n addClass([target.parentElement.querySelector('.e-rule-value')], 'e-value');\n removeClass([target.parentElement.querySelector('.e-rule-value')], 'e-hide');\n addClass([target.parentElement.querySelector('.e-rule-value')], 'e-show');\n if (itemData.template && (itemData.template.create || isRendered)) {\n this.processTemplate(target, itemData, rule, tempRule);\n }\n else {\n var length_1;\n if (tempRule.type === 'boolean') {\n length_1 = this.selectedColumn.values ? this.selectedColumn.values.length : 2;\n }\n else {\n length_1 = tempRule.operator && tempRule.operator.toString().toLowerCase().indexOf('between') > -1 ? 2 : 1;\n }\n var parentId = closest(target, '.e-rule-container').id;\n var ruleValElem = void 0;\n var operator = tempRule.operator.toString();\n if (target.className.indexOf('e-rule-operator') > -1 || target.className.indexOf('e-rule-filter') > -1) {\n ruleValElem = target.parentElement.querySelector('.e-rule-value');\n if (this.element.className.indexOf('e-device') > -1 || this.displayMode === 'Vertical') {\n ruleValElem.style.width = '100%';\n }\n else {\n if (operator !== 'in' && operator !== 'notin') {\n addClass([ruleValElem], 'e-custom-value');\n }\n else {\n removeClass([ruleValElem], 'e-custom-value');\n }\n }\n for (var i = 0; i < length_1; i++) {\n switch (tempRule.type) {\n case 'string':\n {\n this.renderStringValue(parentId, rule, operator, i, ruleValElem);\n }\n break;\n case 'number':\n {\n this.renderNumberValue(parentId, rule, operator, i, ruleValElem, itemData, length_1);\n }\n break;\n case 'boolean':\n this.processBoolValues(itemData, rule, parentId, i);\n break;\n case 'date':\n {\n var selectedValue = new Date();\n var selVal = void 0;\n var column = void 0;\n var format = itemData.format;\n var datepick = void 0;\n var datePicker = void 0;\n var place = this.l10n.getConstant('SelectValue');\n var isTemplate = (typeof itemData.template === 'string');\n if (rule.value && !isNullOrUndefined(format)) {\n selVal = (length_1 > 1) ? rule.value[i] : rule.value;\n selectedValue = this.parseDate(selVal, format) || new Date();\n }\n if (!isNullOrUndefined(itemData) && itemData.value && !isTemplate) {\n var parsedDate = this.parseDate(itemData.value.toString(), itemData.format);\n if (parsedDate && !isNaN(parsedDate.getTime())) {\n selectedValue = parsedDate;\n }\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (!itemData.field && !itemData.key && itemData.value) {\n if (itemData.value instanceof Date) {\n selectedValue = itemData.value;\n }\n else {\n selectedValue = this.parseDate(itemData.value, itemData.format);\n }\n }\n if (!itemData.format && rule && rule.field !== '') {\n column = this.getColumn(rule.field);\n format = column.format;\n }\n if ((this.isImportRules || this.isPublic || isTemplate) && rule) {\n column = this.getColumn(rule.field);\n format = column.format;\n if (rule.value) {\n selVal = (length_1 > 1) ? rule.value[i] : rule.value;\n selectedValue = this.parseDate(selVal, column.format);\n }\n else {\n selectedValue = rule.value;\n }\n }\n if (format) {\n var formatObj = this.getFormat(format);\n if (formatObj.skeleton) {\n datePicker = {\n locale: this.getLocale(), value: selectedValue,\n placeholder: place, format: formatObj, change: this.changeValue.bind(this, i)\n };\n if (this.valueModel && this.valueModel.datePickerModel) {\n datePicker = __assign({}, datePicker, this.valueModel.datePickerModel);\n }\n datepick = new DatePicker(datePicker);\n }\n else {\n datePicker = {\n value: selectedValue, locale: this.getLocale(), placeholder: place,\n format: formatObj.format, change: this.changeValue.bind(this, i)\n };\n if (!isNullOrUndefined(column) && !isNullOrUndefined(column.values) && column.values.length > 0) {\n var parsedDate = this.parseDate(column.values[i], format);\n if (!isNullOrUndefined(parsedDate) && parsedDate instanceof Date) {\n datePicker.value = parsedDate;\n if (i === 1) {\n var parsedMinDate = this.parseDate(column.values[0], format);\n if (parsedMinDate instanceof Date && !isNaN(parsedMinDate.getTime())) {\n parsedMinDate.setDate(parsedMinDate.getDate() + 1);\n datePicker.min = parsedMinDate;\n }\n }\n }\n }\n if (this.valueModel && this.valueModel.datePickerModel) {\n datePicker = __assign({}, datePicker, this.valueModel.datePickerModel);\n }\n datepick = new DatePicker(datePicker);\n }\n }\n else {\n datePicker = {\n locale: this.getLocale(), value: selectedValue,\n placeholder: place, change: this.changeValue.bind(this, i)\n };\n if (this.valueModel && this.valueModel.datePickerModel) {\n datePicker = __assign({}, datePicker, this.valueModel.datePickerModel);\n }\n datepick = new DatePicker(datePicker);\n }\n datepick.appendTo('#' + parentId + '_valuekey' + i);\n if (!rule.value) {\n var elem = document.getElementById(parentId + '_valuekey' + i);\n this.updateRules(elem, selectedValue, null, this.isNotValueChange);\n this.isNotValueChange = false;\n }\n }\n break;\n }\n }\n }\n }\n };\n QueryBuilder.prototype.processBoolValues = function (itemData, rule, parentId, i) {\n var isCheck = false;\n var value;\n var orgValue;\n if (isNullOrUndefined(rule.type) && itemData) {\n rule.type = itemData.type;\n }\n var label;\n if (itemData.values) {\n var values = itemData.values;\n if (rule.type === 'boolean' && !isNullOrUndefined(rule.value)) {\n isCheck = values[i].toLowerCase() === rule.value.toString().toLowerCase();\n }\n else if (itemData.value) {\n isCheck = values[i].toLowerCase() === itemData.value.toString().toLowerCase();\n }\n else if (i === 0) {\n isCheck = true;\n }\n orgValue = value = label = values[i];\n }\n else {\n var values = [true, false];\n if (rule.type === 'boolean' && !isNullOrUndefined(rule.value)) {\n isCheck = values[i].toString().toLowerCase() === rule.value.toString().toLowerCase();\n }\n else if (itemData.value) {\n isCheck = values[i].toString().toLowerCase() === itemData.value.toString().toLowerCase();\n }\n else if (i === 0) {\n if (typeof rule.value === 'boolean') {\n isCheck = rule.value ? true : false;\n }\n else {\n isCheck = true;\n }\n }\n if (typeof rule.value === 'boolean' && i === 1) {\n isCheck = !rule.value ? true : false;\n }\n value = values[i].toString();\n orgValue = values[i];\n label = this.l10n.getConstant(['True', 'False'][i]);\n }\n var radioBtn;\n radioBtn = {\n label: label, name: parentId + 'default', checked: isCheck, value: value,\n change: this.changeValue.bind(this, i)\n };\n if (this.valueModel && this.valueModel.radioButtonModel) {\n radioBtn = __assign({}, radioBtn, this.valueModel.radioButtonModel);\n }\n var radiobutton = new RadioButton(radioBtn);\n radiobutton.appendTo('#' + parentId + '_valuekey' + i);\n if (isCheck) {\n this.updateRules(radiobutton.element, orgValue, 0, true);\n }\n };\n QueryBuilder.prototype.getOperatorIndex = function (ddlObj, rule) {\n var i;\n var dataSource = ddlObj.dataSource;\n var len = dataSource.length;\n for (i = 0; i < len; i++) {\n if (rule.operator === ddlObj.dataSource[i].value) {\n return i;\n }\n }\n return 0;\n };\n QueryBuilder.prototype.getPreviousItemData = function (prevItemData, column) {\n if (this.isFieldClose && prevItemData) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n prevItemData = this.getColumn(prevItemData.value ? prevItemData.value : prevItemData.field);\n }\n if (column && column.template && prevItemData && Object.keys(prevItemData).length < 4) {\n prevItemData.template = column.template;\n }\n return prevItemData;\n };\n QueryBuilder.prototype.renderValues = function (target, itemData, prevItemData, isRender, rule, tempRule, element) {\n var subFldElem = target.previousElementSibling;\n var filtElem = subFldElem.getElementsByTagName('input')[0];\n var filtObj = this.fieldMode === 'DropdownTree' ? getComponent(filtElem, 'dropdowntree')\n : getComponent(filtElem, 'dropdownlist');\n var column = this.fieldMode === 'DropdownTree' ? this.getColumn(filtObj.value[0])\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n : this.getColumn(filtObj.value);\n this.selectedRule = column;\n var ddlObj = getComponent(target.querySelector('input'), 'dropdownlist');\n if (isRender) {\n itemData = element.id.indexOf('operator') > -1 ? itemData : this.selectedRule;\n if (itemData.operators) {\n ddlObj.value = null;\n ddlObj.dataBind();\n ddlObj.dataSource = itemData.operators;\n ddlObj.index = this.getOperatorIndex(ddlObj, rule);\n ddlObj.value = tempRule.operator = ddlObj.dataSource[ddlObj.index].value;\n if (!this.autoSelectOperator) {\n ddlObj.index = -1;\n tempRule.operator = ddlObj.value = '';\n }\n else {\n ddlObj.dataBind();\n }\n }\n }\n var operator = tempRule.operator.toString();\n var isTempRendered = false;\n if (!(operator.indexOf('null') > -1 || operator.indexOf('isempty') > -1 || operator.indexOf('isnotempty') > -1)) {\n var parentId = closest(target, '.e-rule-container').id;\n prevItemData = this.getPreviousItemData(prevItemData, column);\n if (prevItemData && prevItemData.template === undefined) {\n if (prevItemData.columns) {\n prevItemData = this.getColumn(rule.field);\n }\n }\n else if (this.fieldMode === 'DropdownTree' && prevItemData === undefined) {\n prevItemData = this.getColumn(rule.field);\n }\n if (prevItemData && prevItemData.template) {\n this.templateDestroy(prevItemData, parentId + '_valuekey0');\n var elem = select('#' + parentId + '_valuekey0', target.nextElementSibling);\n if (elem && !elem.classList.contains('e-control')) {\n detach(select('#' + parentId + '_valuekey0', target.nextElementSibling));\n }\n if (typeof prevItemData.template === 'string' || prevItemData.template.create === undefined) {\n if (target.nextElementSibling.classList.contains('e-template-value')) {\n this.clearQBTemplate([parentId]);\n }\n target.nextElementSibling.innerHTML = '';\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.isAngular && !isNullOrUndefined(prevItemData.key) && this.fieldMode === 'DropdownTree') {\n delete prevItemData.template;\n }\n }\n if (isRender) {\n this.validateValue(rule, closest(target, '.e-rule-container'));\n this.destroyControls(target);\n }\n if (this.isImportRules || (ddlObj && ddlObj.value !== '')) {\n if (column) {\n itemData.template = column.template;\n }\n if (itemData.template) {\n addClass([target.nextElementSibling], 'e-template-value');\n itemData.template = column.template;\n isTempRendered = this.setColumnTemplate(itemData, parentId, column.field, itemData.value ||\n operator, target, rule);\n }\n if (isTempRendered) {\n var parentElem = target.parentElement.querySelector('.e-rule-value');\n if (this.element.className.indexOf('e-device') > -1 || this.displayMode === 'Vertical') {\n parentElem.style.width = '100%';\n }\n else {\n parentElem.style.width = '200px';\n }\n }\n else {\n removeClass([target.nextElementSibling], 'e-template-value');\n var inputLen = 1;\n if (tempRule.type === 'boolean') {\n inputLen = this.selectedColumn.values ? this.selectedColumn.values.length : 2;\n }\n else {\n inputLen = (operator && operator.toLowerCase().indexOf('between') > -1) ? 2 : 1;\n }\n for (var i = 0; i < inputLen; i++) {\n var valElem = this.createElement('input', { attrs: { type: 'text', id: parentId + '_valuekey' + i } });\n target.nextElementSibling.appendChild(valElem);\n }\n }\n this.renderControls(target, itemData, rule, tempRule, isTempRendered);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.isAngular && !isNullOrUndefined(itemData.key) && itemData.template && this.fieldMode === 'DropdownTree') {\n delete itemData.template;\n }\n }\n }\n else {\n var parentElem = target.parentElement.querySelector('.e-rule-value');\n if (parentElem) {\n removeClass([parentElem], 'e-show');\n addClass([parentElem], 'e-hide');\n }\n }\n };\n QueryBuilder.prototype.setColumnTemplate = function (itemData, ruleID, field, operator, target, rule) {\n var _this = this;\n var args;\n var isRendered = true;\n if (!itemData.template) {\n return true;\n }\n else {\n if (typeof itemData.template === 'string' || itemData.template.create === undefined) {\n args = {\n requestType: 'value-template-initialize', ruleID: ruleID, field: field, operator: operator, rule: rule,\n renderTemplate: true\n };\n this.trigger('actionBegin', args, function (observedActionArgs) {\n isRendered = _this.actionBeginSuccessCallBack(observedActionArgs, itemData, ruleID, field, target);\n });\n return isRendered;\n }\n else {\n var valElem = void 0;\n var template = itemData.template;\n if (typeof template.create === 'string') {\n valElem = getValue(template.create, window)({ field: field, operator: operator });\n }\n else {\n valElem = template.create({ field: field, operator: operator });\n }\n if (valElem instanceof Element) {\n valElem.id = ruleID + '_valuekey0';\n addClass([valElem], 'e-template');\n target.nextElementSibling.appendChild(valElem);\n if (field.indexOf(' ') < 0) {\n addClass([valElem], 'e-' + field);\n }\n }\n else if (valElem instanceof Array) {\n addClass(valElem, 'e-template');\n for (var i = 0, iLen = valElem.length; i < iLen; i++) {\n valElem[i].id = ruleID + '_valuekey' + i;\n target.nextElementSibling.appendChild(valElem[i]);\n }\n }\n addClass([target.nextElementSibling], 'e-template-value');\n return true;\n }\n }\n };\n QueryBuilder.prototype.actionBeginSuccessCallBack = function (args, itemData, ruleID, field, target) {\n if (args.renderTemplate) {\n var valElem = void 0;\n this.columnTemplateFn = this.templateParser(typeof itemData.template === 'function' ? itemData.template : itemData.template);\n var templateID = this.element.id + field;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.isReact) {\n valElem = this.columnTemplateFn(args, this, ruleID, templateID)[0];\n target.nextElementSibling.appendChild(valElem);\n } // eslint-disable-next-line @typescript-eslint/no-explicit-any\n else if (this.isAngular) {\n var valElemColl = this.columnTemplateFn(args, this, ruleID, templateID);\n valElem = (valElemColl[0].nodeType === 3) ? valElemColl[1] : valElemColl[0];\n target.nextElementSibling.appendChild(valElem);\n } // eslint-disable-next-line @typescript-eslint/no-explicit-any\n else if (this.isVue3) {\n valElem = this.columnTemplateFn(args, this, 'Template', templateID);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n append(valElem, target.nextElementSibling);\n }\n else {\n valElem = this.columnTemplateFn(args, this, 'Template', templateID)[0];\n target.nextElementSibling.appendChild(valElem);\n }\n addClass([target.nextElementSibling], 'e-template-value');\n this.renderReactTemplates();\n return true;\n }\n else {\n return false;\n }\n };\n QueryBuilder.prototype.updateValues = function (element, rule) {\n var idx = 1;\n if (element.className.indexOf('e-template') > -1) {\n idx = 3;\n }\n var controlName = element.className.split(' e-')[idx];\n var i = parseInt(element.id.slice(-1), 2);\n var column;\n var format;\n var selectedDate;\n var value;\n var radioBtnObj;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var textboxValue;\n switch (controlName) {\n case 'checkbox':\n value = getComponent(element, controlName).value;\n rule.value = (value !== '') ? value : undefined;\n break;\n case 'textbox':\n textboxValue = getComponent(element, controlName).value;\n if (rule.operator.indexOf('between') > -1) {\n if (typeof rule.value === 'string') {\n rule.value = [];\n }\n rule.value[i] = textboxValue;\n }\n else if (['in', 'notin'].some(function (op) { return rule.operator.indexOf(op) !== -1; })\n && rule.operator.indexOf('contains') === -1) {\n rule.value = textboxValue ?\n (rule.type === 'string' ? textboxValue.split(',').map(function (val) { return val.trim(); }) :\n textboxValue.split(',').map(Number)) : [];\n }\n else {\n rule.value = textboxValue;\n }\n break;\n case 'dropdownlist':\n rule.value = getComponent(element, controlName).value;\n break;\n case 'radio':\n radioBtnObj = getComponent(element, controlName);\n if (radioBtnObj.checked) {\n if (typeof rule.value === 'boolean') {\n rule.value = radioBtnObj.value === 'true';\n }\n else {\n if (this.getColumn(rule.field).values) {\n rule.value = radioBtnObj.value;\n }\n else {\n rule.value = radioBtnObj.value === 'true';\n }\n }\n }\n radioBtnObj.refresh();\n break;\n case 'numerictextbox':\n if (rule.operator.indexOf('between') > -1) {\n if (typeof rule.value === 'string') {\n rule.value = [];\n }\n rule.value[i] = getComponent(element, controlName).value;\n }\n else {\n rule.value = getComponent(element, controlName).value;\n }\n break;\n case 'datepicker':\n column = this.getColumn(rule.field);\n format = this.getFormat(column.format);\n selectedDate = getComponent(element, controlName).value;\n if (rule.operator.indexOf('between') > -1) {\n if (typeof rule.value === 'string') {\n rule.value = [];\n }\n rule.value[i] = this.intl.formatDate(selectedDate, format);\n }\n else if (isNullOrUndefined(format.format) && selectedDate) {\n rule.value = this.intl.formatDate(selectedDate);\n }\n else if (selectedDate) {\n rule.value = this.intl.formatDate(selectedDate, format);\n }\n else {\n rule.value = selectedDate;\n }\n break;\n case 'multiselect':\n rule.value = getComponent(element, controlName).value;\n break;\n }\n };\n QueryBuilder.prototype.updateRules = function (target, selectedValue, i, isNotTrigger) {\n var groupElem = closest(target, '.e-group-container');\n var rule = this.getParentGroup(groupElem);\n var ruleElem = closest(target, '.e-rule-container');\n var index = 0;\n var dropDownObj;\n var eventsArgs;\n var groupID = groupElem.id.replace(this.element.id + '_', '');\n var beforeRules = this.getValidRules(this.rule);\n while (ruleElem && ruleElem.previousElementSibling !== null) {\n ruleElem = ruleElem.previousElementSibling;\n if (!this.enableSeparateConnector || (this.enableSeparateConnector &&\n ((!this.headerTemplate && !ruleElem.classList.contains('e-btn-group')) ||\n this.headerTemplate && (ruleElem.classList.contains('e-rule-container') ||\n ruleElem.classList.contains('e-group-container'))))) {\n index++;\n }\n }\n var operator = rule.rules[index].operator ? rule.rules[index].operator.toString() : '';\n ruleElem = closest(target, '.e-rule-container');\n var ruleID = ruleElem.id.replace(this.element.id + '_', '');\n if (closest(target, '.e-rule-filter') || closest(target, '.e-rule-sub-filter')) {\n if (this.subFieldElem) {\n target = this.subFieldElem;\n }\n dropDownObj = this.fieldMode === 'DropdownTree' ? getComponent(target, 'dropdowntree') :\n getComponent(target, 'dropdownlist');\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var column = this.fieldMode === 'DropdownTree' ? this.getColumn(dropDownObj.value[0])\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n : this.getColumn(dropDownObj.value);\n if (!this.isImportRules && rule.rules[index].field &&\n rule.rules[index].field.toLowerCase() !== column.field.toLowerCase()) {\n if (!(ruleElem.querySelectorAll('.e-template')) && !(operator.indexOf('null') > -1)\n || (operator.indexOf('empty') > -1)) {\n rule.rules[index].value = '';\n }\n }\n this.selectedColumn = this.getColumn(this.selectedColumn.field);\n rule.rules[index].field = this.selectedColumn.field;\n rule.rules[index].type = this.selectedColumn.type;\n rule.rules[index].label = this.selectedColumn.label;\n var ruleElement = closest(target, '.e-rule-filter');\n ruleElement = ruleElement ? ruleElement : closest(target, '.e-rule-sub-filter');\n var element = ruleElement.nextElementSibling.querySelector('input.e-control');\n element = element ? element : ruleElement.nextElementSibling.nextElementSibling.querySelector('input.e-control');\n operator = getComponent(element, 'dropdownlist').value.toString();\n rule.rules[index].operator = operator;\n var valueContainer = ruleElement.nextElementSibling.nextElementSibling;\n var elementCln = valueContainer.querySelectorAll('input.e-control');\n if (elementCln.length < 1) {\n elementCln = valueContainer.querySelectorAll('div.e-control');\n }\n if (elementCln.length < 1) {\n elementCln = valueContainer.querySelectorAll('.e-template');\n }\n eventsArgs = { groupID: groupID, ruleID: ruleID, value: rule.rules[index].field, type: 'field' };\n for (var i_1 = 0; i_1 < elementCln.length; i_1++) {\n if (operator.indexOf('null') > -1 || operator.indexOf('empty') > -1) {\n rule.rules[index].value = null;\n continue;\n }\n this.updateValues(elementCln[i_1], rule.rules[index]);\n }\n if (!this.isImportRules && !this.prvtEvtTgrDaD) {\n this.trigger('change', eventsArgs);\n }\n if (this.allowValidation && rule.rules[index].field && target.parentElement.className.indexOf('e-tooltip') > -1) {\n getComponent(target.parentElement, 'tooltip').destroy();\n }\n this.filterRules(beforeRules, this.getValidRules(this.rule), 'field');\n }\n else if (closest(target, '.e-rule-operator')) {\n dropDownObj = getComponent(target, 'dropdownlist');\n rule.rules[index].operator = dropDownObj.value.toString();\n var inputElem = ruleElem.querySelectorAll('.e-rule-value input.e-control');\n eventsArgs = { groupID: groupID, ruleID: ruleID, value: dropDownObj.value, type: 'operator' };\n if (this.allowValidation && rule.rules[index].operator && target.parentElement.className.indexOf('e-tooltip') > -1) {\n getComponent(target.parentElement, 'tooltip').destroy();\n }\n if (inputElem.length > 1 && !(inputElem[0].className.indexOf('e-template') > -1)) {\n rule.rules[index].value = [];\n }\n for (var i_2 = 0; i_2 < inputElem.length; i_2++) {\n if (rule.rules[index].operator.indexOf('null') > -1 || rule.rules[index].operator.indexOf('empty') > -1) {\n rule.rules[index].value = null;\n continue;\n }\n else if (inputElem[i_2].classList.contains('e-template')) {\n continue;\n }\n this.updateValues(inputElem[i_2], rule.rules[index]);\n }\n if (!this.isImportRules) {\n this.trigger('change', eventsArgs);\n }\n this.filterRules(beforeRules, this.getValidRules(this.rule), 'operator');\n }\n else if (closest(target, '.e-rule-value')) {\n this.ruleValueUpdate(target, selectedValue, rule, index, groupElem, ruleElem, i);\n if (!isNotTrigger) {\n this.filterRules(beforeRules, this.getValidRules(this.rule), 'value');\n }\n }\n };\n QueryBuilder.prototype.filterRules = function (beforeRule, afterRule, type) {\n var beforeRuleStr = JSON.stringify({ condition: beforeRule.condition, not: beforeRule.not, rule: beforeRule.rules });\n var afetrRuleStr = JSON.stringify({ condition: afterRule.condition, not: afterRule.not, rule: afterRule.rules });\n if (beforeRuleStr !== afetrRuleStr) {\n if (!this.isImportRules && !this.prvtEvtTgrDaD) {\n this.trigger('ruleChange', { previousRule: beforeRule, rule: afterRule, type: type });\n }\n }\n };\n QueryBuilder.prototype.ruleValueUpdate = function (target, selectedValue, rule, index, groupElem, ruleElem, i) {\n var eventsArgs;\n var oper;\n var arrOperator = ['in', 'between', 'notin', 'notbetween'];\n if (rule.rules[index].operator) {\n oper = rule.rules[index].operator.toString().toLowerCase();\n }\n if (selectedValue !== null) {\n if (target.className.indexOf('e-multiselect') > -1 && rule.rules[index].type === 'number' &&\n !this.isNotified) {\n var selVal = [];\n var dupSelectedValue = selectedValue;\n for (var k = 0, kLen = dupSelectedValue.length; k < kLen; k++) {\n if (typeof dupSelectedValue[k] === 'string') {\n selVal.push(parseFloat(dupSelectedValue[k]));\n }\n }\n if (selVal.length) {\n selectedValue = selVal;\n }\n }\n if (this.isNotified) {\n rule.rules[index].value = selectedValue;\n eventsArgs = { groupID: groupElem.id, ruleID: ruleElem.id, value: rule.rules[index].value, type: 'value' };\n if (!this.isImportRules) {\n this.trigger('change', eventsArgs);\n }\n }\n else if (target.className.indexOf('e-spin') > -1 || target.className.indexOf('e-numeric') > -1) {\n if (arrOperator.indexOf(oper) > -1) {\n rule.rules[index].value[i] = selectedValue;\n }\n else {\n rule.rules[index].value = selectedValue;\n }\n }\n else if (target.className.indexOf('e-radio') > -1) {\n rule.rules[index].value = selectedValue;\n }\n else if (target.className.indexOf('e-multiselect') > -1) {\n rule.rules[index].value = selectedValue;\n }\n else if (target.className.indexOf('e-textbox') > -1) {\n if (oper === 'in' || oper === 'notin') {\n if (rule.rules[index].type === 'string') {\n rule.rules[index].value = this.processValueString(selectedValue, rule.rules[index].type);\n }\n else {\n rule.rules[index].value = this.processValueString(selectedValue, rule.rules[index].type);\n }\n }\n else if (oper === 'between' || oper === 'notbetween') {\n if (typeof rule.rules[index].value === 'string') {\n rule.rules[index].value = [];\n }\n rule.rules[index].value[i] = selectedValue;\n }\n else {\n rule.rules[index].value = selectedValue;\n }\n }\n else if (target.className.indexOf('e-datepicker') > -1) {\n var format = this.getFormat(this.getColumn(this.selectedColumn.field).format);\n if (format.type) {\n if (arrOperator.indexOf(oper) > -1) {\n if (typeof rule.rules[index].value === 'string') {\n rule.rules[index].value = [];\n }\n rule.rules[index].value[i] = this.intl.formatDate(selectedValue, format);\n }\n else {\n rule.rules[index].value = this.intl.formatDate(selectedValue, format);\n }\n }\n }\n this.validateValue(rule, ruleElem, index);\n }\n else {\n if (target.className.indexOf('e-datepicker') > -1) {\n if (arrOperator.indexOf(oper) > -1) {\n if (typeof rule.rules[index].value === 'string') {\n rule.rules[index].value = [];\n }\n rule.rules[index].value[i] = selectedValue;\n }\n else {\n rule.rules[index].value = selectedValue;\n }\n }\n else {\n rule.rules[index].value = selectedValue;\n }\n }\n };\n QueryBuilder.prototype.validateValue = function (rule, ruleElem, index) {\n if (isNullOrUndefined(rule) && isNullOrUndefined(ruleElem)) {\n return;\n }\n if (!isNullOrUndefined(index)) {\n rule = rule.rules[index];\n }\n var isObject = typeof (rule.value) === 'object';\n if (this.allowValidation && (isNullOrUndefined(index) || (isObject ? rule.value.length > 0 : rule.value))) {\n var valElem = ruleElem.querySelectorAll('.e-rule-value .e-control');\n if (valElem.length > 0) {\n if (valElem[0].className.indexOf('e-tooltip') > -1) {\n getComponent(valElem[0], 'tooltip').destroy();\n }\n else if (valElem[0].parentElement.className.indexOf('e-tooltip') > -1) {\n getComponent(valElem[0].parentElement, 'tooltip').destroy();\n }\n if (valElem[1] && valElem[1].parentElement.className.indexOf('e-tooltip') > -1) {\n getComponent(valElem[1].parentElement, 'tooltip').destroy();\n }\n if (valElem[2] && valElem[2].parentElement.className.indexOf('e-tooltip') > -1) {\n getComponent(valElem[2].parentElement, 'tooltip').destroy();\n }\n }\n }\n };\n QueryBuilder.prototype.getFormat = function (format) {\n var formatOptions;\n if (format) {\n if (typeof (format) === 'string') {\n formatOptions = { type: 'dateTime' };\n if (format === 'short' || format === 'yMd') {\n formatOptions.type = 'date';\n formatOptions.skeleton = format;\n }\n else {\n formatOptions.format = format;\n }\n }\n else {\n formatOptions = { type: 'dateTime', skeleton: format.skeleton };\n }\n }\n else {\n formatOptions = { type: 'date', skeleton: 'yMd' };\n }\n return formatOptions;\n };\n QueryBuilder.prototype.findGroupByIdx = function (groupIdx, rule, isRoot) {\n var ruleColl = rule.rules;\n var dupRuleColl = [];\n if (!isRoot) {\n for (var j = 0, jLen = ruleColl.length; j < jLen; j++) {\n rule = ruleColl[j];\n if (rule.rules) {\n dupRuleColl.push(rule);\n }\n }\n return dupRuleColl[groupIdx];\n }\n return rule;\n };\n /**\n * Removes the component from the DOM and detaches all its related event handlers.\n * Also it maintains the initial input element from the DOM.\n *\n * @method destroy\n * @returns {void}\n */\n QueryBuilder.prototype.destroy = function () {\n this.isDestroy = true;\n var queryElement = this.element;\n if (!queryElement) {\n return;\n }\n var element;\n var i;\n var len;\n var tooltip;\n _super.prototype.destroy.call(this);\n element = this.element.querySelectorAll('.e-addrulegroup');\n len = element.length;\n for (i = 0; i < len; i++) {\n getComponent(element[i], 'dropdown-btn').destroy();\n detach(element[i]);\n }\n tooltip = this.element.querySelectorAll('.e-rule-filter .e-control.e-tooltip');\n for (i = 0; i < tooltip.length; i++) {\n getComponent(tooltip[i], 'tooltip').destroy();\n }\n element = this.element.querySelectorAll('.e-rule-filter .e-control:not(.e-tooltip)');\n len = element.length;\n for (i = 0; i < len; i++) {\n if (getComponent(element[i], 'dropdownlist')) {\n getComponent(element[i], 'dropdownlist').destroy();\n }\n else {\n getComponent(element[i], 'dropdowntree').destroy();\n }\n detach(element[i]);\n }\n tooltip = this.element.querySelectorAll('.e-rule-operator .e-control.e-tooltip');\n for (i = 0; i < tooltip.length; i++) {\n getComponent(tooltip[i], 'tooltip').destroy();\n }\n element = this.element.querySelectorAll('.e-rule-operator .e-control:not(.e-tooltip)');\n len = element.length;\n for (i = 0; i < len; i++) {\n if (getComponent(element[i], 'dropdownlist')) {\n getComponent(element[i], 'dropdownlist').destroy();\n detach(element[i]);\n }\n }\n tooltip = this.element.querySelectorAll('.e-rule-value .e-control.e-tooltip');\n for (i = 0; i < tooltip.length; i++) {\n getComponent(tooltip[i], 'tooltip').destroy();\n }\n this.isImportRules = false;\n this.unWireEvents();\n this.levelColl[this.element.id + '_group0'] = [0];\n this.element.innerHTML = '';\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.portals && this.portals.length) {\n this.clearQBTemplate();\n }\n var qbDdlElems = this.element.querySelectorAll('.qb-dropdownlist');\n if (qbDdlElems && qbDdlElems.length > 0) {\n for (i = 0; i < qbDdlElems.length; i++) {\n var ddlElem = qbDdlElems[i];\n if (this.element.contains(ddlElem)) {\n var targetInput = ddlElem.tagName === 'INPUT' ? ddlElem : ddlElem.querySelector('input');\n if (targetInput) {\n var ddlInst = getComponent(targetInput, 'dropdownlist');\n if (ddlInst) {\n if (ddlInst.close) {\n ddlInst.close = null;\n }\n if (ddlInst.open) {\n ddlInst.open = null;\n }\n if (ddlInst.change) {\n ddlInst.change = null;\n }\n ddlInst.destroy();\n }\n }\n }\n }\n }\n // Cleanup orphaned popup elements\n var popupElement = this.element.querySelectorAll('.e-popup.e-dropdownlist');\n if (popupElement && popupElement.length > 0) {\n for (i = 0; i < popupElement.length; i++) {\n popupElement[i].remove();\n }\n }\n classList(this.element, [], ['e-rtl', 'e-responsive', 'e-device']);\n this.isDestroy = false;\n _super.prototype.destroy.call(this);\n };\n /**\n * Adds single or multiple rules.\n *\n * @param {RuleModel[]} rule - 'rule collection' to be passed to add the rules.\n * @param {string} groupID - 'group id' to be passed to add the rule in groups.\n * @returns {void}.\n */\n QueryBuilder.prototype.addRules = function (rule, groupID) {\n groupID = this.element.id + '_' + groupID;\n this.isPublic = true;\n for (var i = 0, len = rule.length; i < len; i++) {\n this.addRuleElement(document.getElementById(groupID), rule[i]);\n }\n this.isPublic = false;\n };\n /**\n * Adds single or multiple groups, which contains the collection of rules.\n *\n * @param {RuleModel[]} groups - 'group collection' to be passed to add the groups.\n * @param {string} groupID - 'group id' to be passed to add the groups.\n * @returns {void}.\n */\n QueryBuilder.prototype.addGroups = function (groups, groupID) {\n if (this.isAddSuccess || this.element.querySelectorAll('.e-group-container').length <= this.maxGroupCount) {\n groupID = this.element.id + '_' + groupID;\n var groupElem = document.getElementById(groupID);\n var temp = this.groupIndex;\n var rule = this.getParentGroup(groupElem);\n var grouplen = groups.length;\n if (grouplen) {\n this.isPublic = true;\n for (var i = 0, len = groups.length; i < len; i++) {\n this.updatedRule = {\n isLocked: groups[i].isLocked, condition: groups[i].condition,\n not: groups[i].not\n };\n this.importRules(groups[i], groupElem, false, groups[i].not);\n }\n this.isPublic = false;\n }\n else {\n var condition = 'and';\n var not = false;\n var isLocked = false;\n if (this.updatedRule) {\n condition = this.updatedRule.condition;\n not = this.updatedRule.not;\n isLocked = this.updatedRule.isLocked;\n }\n if (this.groupCloned && this.target instanceof HTMLElement &&\n this.getGroup(this.target).rules.length > 1) {\n var parent_1 = this.element.querySelector('#' + groupID);\n var allContainers = parent_1.querySelectorAll(':scope > .e-group-body > .e-rule-list > [class*=\"-container\"]');\n var topLevelGroups = parent_1.querySelectorAll(':scope > .e-group-body > .e-rule-list > .e-group-container');\n if (topLevelGroups.length > 0 && groupID !== 'querybuilder_group0' && !(this.isAngular && groupID === this.initialID + '_group0')) {\n var lastGroupIndex = -1;\n var lastGroup = topLevelGroups[topLevelGroups.length - 1];\n for (var i = 0; i < allContainers.length; i++) {\n if (allContainers[i] === lastGroup) {\n lastGroupIndex = i;\n break;\n }\n }\n this.groupIndex = lastGroupIndex - 1;\n }\n }\n if (this.groupIndex < 0) {\n if (this.enableNotCondition) {\n rule.rules.push({ 'condition': condition, 'not': not, rules: [] });\n }\n else {\n rule.rules.push({ 'condition': condition, rules: [] });\n }\n }\n else {\n if (this.enableNotCondition) {\n rule.rules.splice(this.groupIndex + 1, 0, { condition: condition, not: not, rules: [], isLocked: isLocked });\n }\n else {\n rule.rules.splice(this.groupIndex + 1, 0, { condition: condition, rules: [], isLocked: isLocked });\n }\n }\n if (this.groupCloned) {\n this.groupIndex = temp;\n }\n }\n if (!this.headerTemplate) {\n this.disableRuleCondition(groupElem, rule, null, this.enableSeparateConnector ? true : null);\n }\n }\n };\n QueryBuilder.prototype.initWrapper = function () {\n this.isInitialLoad = true;\n if (this.cssClass) {\n addClass([this.element], this.cssClass.replace(/\\s+/g, ' ').trim().split(' '));\n }\n if (this.enableSeparateConnector) {\n addClass([this.element], 'e-multi-connector');\n }\n if (this.enableRtl) {\n addClass([this.element], 'e-rtl');\n }\n if (this.width) {\n this.element.style.width = this.width;\n }\n if (this.height) {\n this.element.style.height = this.height;\n }\n if (this.rule.rules.length) {\n this.isImportRules = true;\n }\n else {\n this.addGroupElement(false, this.element);\n }\n if (Browser.isDevice || (window.innerWidth < 768 && !this.isPropChange) || this.displayMode === 'Vertical') {\n if (Browser.isDevice || window.innerWidth < 768) {\n this.element.style.width = '100%';\n this.element.classList.add('e-device');\n }\n removeClass(this.element.querySelectorAll('.e-rule-container'), 'e-horizontal-mode');\n addClass(this.element.querySelectorAll('.e-rule-container'), 'e-vertical-mode');\n this.displayMode = 'Vertical';\n }\n else {\n this.displayMode = 'Horizontal';\n }\n if (this.summaryView) {\n if (this.isImportRules) {\n this.renderSummary();\n }\n else {\n this.renderSummaryCollapse();\n }\n }\n else {\n if (this.columns && this.columns.length && this.isImportRules) {\n this.addGroupElement(false, this.element, this.rule.condition, false, this.rule.not, false, this.rule);\n var mRules = extend({}, this.rule, {}, true);\n this.isRefreshed = true;\n this.setGroupRules(mRules);\n this.isRefreshed = false;\n }\n else if (this.columns && this.columns.length) {\n this.addRuleElement(this.element.querySelector('.e-group-container'), {});\n }\n this.notGroupRtl();\n if (this.readonly) {\n this.enableReadonly();\n }\n var buttons = this.element.querySelectorAll('label.e-btn');\n var button = void 0;\n for (var i = 0; i < buttons.length; i++) {\n button = buttons.item(i);\n rippleEffect(button, { selector: '.e-btn' });\n }\n }\n };\n QueryBuilder.prototype.renderSummary = function () {\n var contentElem = this.createElement('div', {\n attrs: {\n class: 'e-summary-content',\n id: this.element.id + '_summary_content'\n }\n });\n var textElem = this.createElement('textarea', { attrs: { class: 'e-summary-text', readonly: 'true' }, styles: 'max-height:500px' });\n var editElem = this.createElement('button', { attrs: { type: 'button', class: 'e-edit-rule e-css e-btn e-small e-flat e-primary' } });\n var divElem = this.createElement('div', { attrs: { class: 'e-summary-btndiv' } });\n contentElem.appendChild(textElem);\n textElem.textContent = this.getSqlFromRules(this.rule);\n editElem.textContent = this.l10n.getConstant('Edit');\n divElem.appendChild(editElem);\n contentElem.appendChild(divElem);\n this.element.appendChild(contentElem);\n };\n QueryBuilder.prototype.renderSummaryCollapse = function () {\n var collapseElem = this.createElement('div', {\n attrs: {\n class: 'e-collapse-rule e-icons',\n title: this.l10n.getConstant('SummaryViewTitle')\n }\n });\n this.element.querySelector('.e-group-header').appendChild(collapseElem);\n };\n QueryBuilder.prototype.columnSort = function () {\n if (this.sortDirection && this.sortDirection.toLowerCase() === 'descending') {\n this.columns = new DataManager(this.columns).executeLocal(new Query().sortByDesc('field'));\n }\n else if (this.sortDirection && this.sortDirection.toLowerCase() === 'ascending') {\n this.columns = new DataManager(this.columns).executeLocal(new Query().sortBy('field'));\n }\n };\n QueryBuilder.prototype.onChangeNotGroup = function () {\n this.element.innerHTML = '';\n this.groupIdCounter = 0;\n if (!this.headerTemplate) {\n if (this.enableNotCondition) {\n var inputElem = this.createElement('button', { attrs: { type: 'button', class: 'e-qb-toggle' } });\n if (this.groupElem.querySelector('.e-btn-group')) {\n this.groupElem.querySelector('.e-btn-group').insertBefore(inputElem, this.groupElem.querySelector('.e-btngroup-and'));\n }\n }\n else {\n this.groupElem.querySelector('.e-qb-toggle').remove();\n }\n }\n this.setProperties({ rule: this.checkNotGroup(this.rule) }, true);\n this.initWrapper();\n };\n QueryBuilder.prototype.notGroupRtl = function () {\n if (this.enableRtl) {\n addClass(this.element.querySelectorAll('.e-btn-group'), 'e-rtl');\n }\n else {\n removeClass(this.element.querySelectorAll('.e-btn-group'), 'e-rtl');\n }\n };\n QueryBuilder.prototype.checkNotGroup = function (rule) {\n var orgRule;\n if (rule.rules) {\n for (var i = 0; i < rule.rules.length; i++) {\n orgRule = rule.rules[i];\n orgRule = this.checkNotGroup(orgRule);\n rule.rules[i] = orgRule;\n }\n }\n if (!isNullOrUndefined(rule.not)) {\n if (this.enableNotCondition) {\n rule.not = false;\n }\n delete rule.not;\n }\n else if (this.enableNotCondition && !isNullOrUndefined(rule.condition)) {\n rule.not = false;\n }\n return rule;\n };\n QueryBuilder.prototype.onPropertyChanged = function (newProp, oldProp) {\n var properties = Object.keys(newProp);\n this.isPropChange = true;\n var groupElem = this.element.querySelector('.e-group-container');\n var summaryElem = this.element.querySelector('.e-summary-content');\n for (var _i = 0, properties_1 = properties; _i < properties_1.length; _i++) {\n var prop = properties_1[_i];\n switch (prop) {\n case 'summaryView':\n if (newProp.summaryView) {\n groupElem.style.display = 'none';\n if (this.element.querySelectorAll('.e-summary-content').length < 1) {\n this.renderSummary();\n summaryElem = this.element.querySelector('.e-summary-content');\n }\n else {\n this.element.querySelector('.e-summary-text').textContent = this.getSqlFromRules(this.rule);\n }\n summaryElem.style.display = 'block';\n }\n else {\n if (groupElem.querySelectorAll('.e-collapse-rule').length > -1) {\n this.renderSummaryCollapse();\n }\n groupElem.style.display = 'block';\n summaryElem.style.display = 'none';\n }\n break;\n case 'displayMode':\n this.refresh();\n break;\n case 'showButtons':\n if (!isNullOrUndefined(newProp.showButtons.lockGroup)) {\n if (newProp.showButtons.lockGroup) {\n removeClass(this.element.querySelectorAll('.e-lock-grp-btn'), 'e-button-hide');\n }\n else {\n addClass(this.element.querySelectorAll('.e-lock-grp-btn'), 'e-button-hide');\n }\n }\n if (!isNullOrUndefined(newProp.showButtons.lockRule)) {\n if (newProp.showButtons.lockRule) {\n removeClass(this.element.querySelectorAll('.e-lock-rule-btn'), 'e-button-hide');\n }\n else {\n addClass(this.element.querySelectorAll('.e-lock-rule-btn'), 'e-button-hide');\n }\n }\n if (!isNullOrUndefined(newProp.showButtons.cloneGroup)) {\n if (newProp.showButtons.cloneGroup) {\n removeClass(this.element.querySelectorAll('.e-clone-grp-btn'), 'e-button-hide');\n }\n else {\n addClass(this.element.querySelectorAll('.e-clone-grp-btn'), 'e-button-hide');\n }\n }\n if (!isNullOrUndefined(newProp.showButtons.cloneRule)) {\n if (newProp.showButtons.cloneRule) {\n removeClass(this.element.querySelectorAll('.e-clone-rule-btn'), 'e-button-hide');\n }\n else {\n addClass(this.element.querySelectorAll('.e-clone-rule-btn'), 'e-button-hide');\n }\n }\n if (!isNullOrUndefined(newProp.showButtons.ruleDelete)) {\n if (newProp.showButtons.ruleDelete) {\n removeClass(this.element.querySelectorAll('.e-rule-delete'), 'e-button-hide');\n }\n else {\n addClass(this.element.querySelectorAll('.e-rule-delete'), 'e-button-hide');\n }\n }\n if (!isNullOrUndefined(newProp.showButtons.groupDelete)) {\n if (newProp.showButtons.groupDelete) {\n removeClass(this.element.querySelectorAll('.e-deletegroup'), 'e-button-hide');\n }\n else {\n addClass(this.element.querySelectorAll('.e-deletegroup'), 'e-button-hide');\n }\n }\n break;\n case 'cssClass':\n if (oldProp.cssClass) {\n removeClass([this.element], oldProp.cssClass.split(' '));\n }\n if (newProp.cssClass) {\n addClass([this.element], newProp.cssClass.replace(/\\s+/g, ' ').trim().split(' '));\n }\n break;\n case 'enableRtl':\n if (newProp.enableRtl) {\n addClass([this.element], 'e-rtl');\n this.notGroupRtl();\n }\n else {\n removeClass([this.element], 'e-rtl');\n this.notGroupRtl();\n }\n break;\n case 'enablePersistence':\n this.enablePersistence = newProp.enablePersistence;\n break;\n case 'dataSource':\n this.dataSource = newProp.dataSource;\n this.refresh();\n break;\n case 'columns':\n this.columns = newProp.columns;\n this.columnSort();\n this.updateSubFieldsFromColumns(this.columns);\n break;\n case 'sortDirection':\n this.sortDirection = newProp.sortDirection;\n this.columnSort();\n break;\n case 'maxGroupCount':\n this.maxGroupCount = newProp.maxGroupCount;\n break;\n case 'height':\n this.height = newProp.height;\n this.element.style.height = this.height;\n break;\n case 'rule':\n if (this.rule.rules.length === 0 && !isNullOrUndefined(this.rule)) {\n this.reset();\n }\n this.setProperties({ rule: newProp.rule }, true);\n newProp.rule = this.getRuleCollection(this.rule, false);\n this.setRules(this.rule);\n break;\n case 'width':\n this.width = newProp.width;\n this.element.style.width = this.width;\n break;\n case 'locale':\n this.locale = newProp.locale;\n this.intl = new Internationalization(this.locale);\n this.isLocale = true;\n this.refresh();\n this.isLocale = false;\n break;\n case 'enableNotCondition':\n this.onChangeNotGroup();\n break;\n case 'readonly':\n this.isReadonly = newProp.readonly;\n this.enableReadonly();\n break;\n case 'allowDragAndDrop':\n this.allowDragAndDrop = newProp.allowDragAndDrop;\n this.refresh();\n break;\n case 'enableSeparateConnector':\n this.enableSeparateConnector = newProp.enableSeparateConnector;\n this.refresh();\n break;\n }\n }\n this.isPropChange = false;\n };\n QueryBuilder.prototype.preRender = function () {\n this.element.id = this.element.id || getUniqueID('ej2-querybuilder');\n this.initialID = this.element.id;\n this.defaultLocale = {\n StartsWith: 'Starts With',\n DoesNotStartWith: 'Does Not Start With',\n EndsWith: 'Ends With',\n DoesNotEndWith: 'Does Not End With',\n Contains: 'Contains',\n DoesNotContain: 'Does Not Contain',\n NotLike: 'Not Like',\n Like: 'Like',\n Equal: 'Equal',\n NotEqual: 'Not Equal',\n LessThan: 'Less Than',\n LessThanOrEqual: 'Less Than Or Equal',\n GreaterThan: 'Greater Than',\n GreaterThanOrEqual: 'Greater Than Or Equal',\n Between: 'Between',\n NotBetween: 'Not Between',\n In: 'In',\n NotIn: 'Not In',\n Remove: 'REMOVE',\n SelectField: 'Select a field',\n SelectOperator: 'Select operator',\n DeleteRule: 'Remove this condition',\n DeleteGroup: 'Delete group',\n AddGroup: 'Add Group',\n AddCondition: 'Add Condition',\n Edit: 'EDIT',\n ValidationMessage: 'This field is required',\n SummaryViewTitle: 'Summary View',\n OtherFields: 'Other Fields',\n AND: 'AND',\n OR: 'OR',\n NOT: 'NOT',\n SelectValue: 'Enter Value',\n IsEmpty: 'Is Empty',\n IsNotEmpty: 'Is Not Empty',\n IsNull: 'Is Null',\n IsNotNull: 'Is Not Null',\n True: 'true',\n False: 'false',\n AddButton: 'Add Group/Condition',\n CloneGroup: 'Clone Group',\n LockGroup: 'Lock Group',\n CloneRule: 'Clone Rule',\n LockRule: 'Lock Rule',\n UnlockRule: 'Unlock Rule',\n UnlockGroup: 'Unlock Group'\n };\n this.l10n = new L10n('querybuilder', this.defaultLocale, this.locale);\n this.intl = new Internationalization(this.locale);\n this.groupIdCounter = 0;\n this.subFilterCounter = 0;\n this.ruleIdCounter = 0;\n this.btnGroupId = 0;\n this.isImportRules = false;\n this.parser = [];\n this.customOperators = {\n stringOperator: [\n { value: 'startswith', key: this.l10n.getConstant('StartsWith') },\n { value: 'notstartswith', key: this.l10n.getConstant('DoesNotStartWith') },\n { value: 'endswith', key: this.l10n.getConstant('EndsWith') },\n { value: 'notendswith', key: this.l10n.getConstant('DoesNotEndWith') },\n { value: 'contains', key: this.l10n.getConstant('Contains') },\n { value: 'notcontains', key: this.l10n.getConstant('DoesNotContain') },\n { value: 'equal', key: this.l10n.getConstant('Equal') },\n { value: 'notequal', key: this.l10n.getConstant('NotEqual') },\n { value: 'in', key: this.l10n.getConstant('In') },\n { value: 'notin', key: this.l10n.getConstant('NotIn') },\n { value: 'isempty', key: this.l10n.getConstant('IsEmpty') },\n { value: 'isnotempty', key: this.l10n.getConstant('IsNotEmpty') }\n ],\n dateOperator: [\n { value: 'equal', key: this.l10n.getConstant('Equal') },\n { value: 'greaterthan', key: this.l10n.getConstant('GreaterThan') },\n { value: 'greaterthanorequal', key: this.l10n.getConstant('GreaterThanOrEqual') },\n { value: 'lessthan', key: this.l10n.getConstant('LessThan') },\n { value: 'lessthanorequal', key: this.l10n.getConstant('LessThanOrEqual') },\n { value: 'notequal', key: this.l10n.getConstant('NotEqual') },\n { value: 'between', key: this.l10n.getConstant('Between') },\n { value: 'notbetween', key: this.l10n.getConstant('NotBetween') }\n ],\n booleanOperator: [\n { value: 'equal', key: this.l10n.getConstant('Equal') },\n { value: 'notequal', key: this.l10n.getConstant('NotEqual') }\n ],\n numberOperator: [\n { value: 'equal', key: this.l10n.getConstant('Equal') },\n { value: 'greaterthanorequal', key: this.l10n.getConstant('GreaterThanOrEqual') },\n { value: 'greaterthan', key: this.l10n.getConstant('GreaterThan') },\n { value: 'between', key: this.l10n.getConstant('Between') },\n { value: 'lessthan', key: this.l10n.getConstant('LessThan') },\n { value: 'notbetween', key: this.l10n.getConstant('NotBetween') },\n { value: 'lessthanorequal', key: this.l10n.getConstant('LessThanOrEqual') },\n { value: 'notequal', key: this.l10n.getConstant('NotEqual') },\n { value: 'in', key: this.l10n.getConstant('In') },\n { value: 'notin', key: this.l10n.getConstant('NotIn') }\n ]\n };\n this.operators = {\n equal: '=', notequal: '!=', greaterthan: '>', greaterthanorequal: '>=', lessthan: '<', in: 'IN', notin: 'NOT IN',\n lessthanorequal: '<=', startswith: 'LIKE', endswith: 'LIKE', between: 'BETWEEN', notbetween: 'NOT BETWEEN', contains: 'LIKE',\n isnull: 'IS NULL', isnotnull: 'IS NOT NULL', isempty: 'IS EMPTY', isnotempty: 'IS NOT EMPTY', notstartswith: 'NOT LIKE',\n notendswith: 'NOT LIKE', notcontains: 'NOT LIKE'\n };\n this.sqlOperators = {\n equal: '=', notequal: '!=', greaterthan: '>', greaterthanorequal: '>=', lessthan: '<', in: this.l10n.getConstant('In').toUpperCase(),\n notin: this.l10n.getConstant('NotIn').toUpperCase(), lessthanorequal: '<=', startswith: this.l10n.getConstant('Like').toUpperCase(),\n endswith: this.l10n.getConstant('Like').toUpperCase(), between: this.l10n.getConstant('Between').toUpperCase(),\n notbetween: this.l10n.getConstant('NotBetween').toUpperCase(), contains: this.l10n.getConstant('Like').toUpperCase(),\n isnull: this.l10n.getConstant('IsNull').toUpperCase(), isnotnull: this.l10n.getConstant('IsNotNull').toUpperCase(),\n isempty: this.l10n.getConstant('IsEmpty').toUpperCase(), isnotempty: this.l10n.getConstant('IsNotEmpty').toUpperCase(),\n notstartswith: this.l10n.getConstant('NotLike').toUpperCase(), notendswith: this.l10n.getConstant('NotLike').toUpperCase(),\n notcontains: this.l10n.getConstant('NotLike').toUpperCase()\n };\n if (!this.fields) {\n this.fields = { text: 'label', value: 'field' };\n }\n };\n QueryBuilder.prototype.render = function () {\n this.levelColl = {};\n this.items = [\n {\n text: this.l10n.getConstant('AddGroup'),\n iconCss: 'e-icons e-add-icon e-addgroup'\n },\n {\n text: this.l10n.getConstant('AddCondition'),\n iconCss: 'e-icons e-add-icon e-addrule'\n }\n ];\n this.ruleElem = this.ruleTemplate();\n this.groupElem = this.groupTemplate();\n var stringOper = [\n { value: 'isnull', key: this.l10n.getConstant('IsNull') },\n { value: 'isnotnull', key: this.l10n.getConstant('IsNotNull') }\n ];\n var numberOper = [\n { value: 'isnull', key: this.l10n.getConstant('IsNull') },\n { value: 'isnotnull', key: this.l10n.getConstant('IsNotNull') }\n ];\n this.customOperators['stringOperator'] = this.customOperators['stringOperator'].concat(stringOper); // tslint:disable-line\n this.customOperators['numberOperator'] = this.customOperators['numberOperator'].concat(numberOper); // tslint:disable-line\n if (this.dataSource instanceof DataManager) {\n this.dataManager = this.dataSource;\n if (this.columns && this.columns.length) {\n this.dataColl = this.columns;\n this.initControl();\n }\n else {\n this.executeDataManager(new Query().take(1));\n }\n }\n else {\n this.dataManager = new DataManager(this.dataSource);\n this.dataColl = this.dataManager.executeLocal(new Query());\n this.initControl();\n }\n this.renderComplete();\n if (this.allowDragAndDrop) {\n this.initializeDrag();\n }\n };\n QueryBuilder.prototype.initializeDrag = function () {\n this.draggable = new Draggable(this.element, {\n dragTarget: '.e-drag-qb-rule',\n distance: 5,\n helper: this.helper.bind(this),\n dragStart: this.dragStartHandler.bind(this),\n drag: this.dragHandler.bind(this),\n dragStop: this.dragStopHandler.bind(this),\n isReplaceDragEle: true,\n isPreventSelect: false,\n abort: '.e-parent-header',\n isDragScroll: true,\n enableAutoScroll: true\n });\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n QueryBuilder.prototype.helper = function (e) {\n var target = this.draggable.currentStateTarget;\n if (!target.classList.contains('e-drag-qb-rule') || (target.classList.contains('e-drag-qb-rule') && closest(target, '.e-disable'))) {\n return false;\n }\n var visualElement = this.createElement('div', {\n className: 'e-cloneproperties e-draganddrop e-dragclone',\n styles: 'height:\"auto\", z-index:2, width:' + this.element.offsetWidth\n });\n var cloneElement;\n if (this.draggable.currentStateTarget.parentElement.classList.contains('e-group-header')) {\n cloneElement = closest(target, '.e-group-container').cloneNode(true);\n closest(target, '.e-group-container').classList.add('e-qb-dragging-rule');\n }\n else {\n visualElement.classList.add('e-group-body');\n cloneElement = this.createElement('div', { className: 'e-rule-container' });\n var ruleElement = closest(target, '.e-rule-field').cloneNode(true);\n cloneElement.appendChild(ruleElement);\n closest(target, '.e-rule-field').classList.add('e-qb-dragging-rule');\n }\n visualElement.appendChild(cloneElement);\n var childElements = visualElement.querySelectorAll('*');\n childElements.forEach(function (child) {\n child.removeAttribute('id');\n });\n this.element.appendChild(visualElement);\n return visualElement;\n };\n QueryBuilder.prototype.dragStartHandler = function (e) {\n this.draggedRule = e.target;\n this.isDragEventPrevent = false;\n document.body.classList.add('e-prevent-select');\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this.dragElement = e.dragElement;\n var rule = closest(e.target, '.e-rule-container');\n var group = closest(e.target, '.e-group-container');\n var dragEventArgs = { dragRuleID: rule !== null ? rule.id : group.id, dragGroupID: group.id, cancel: false };\n this.trigger('dragStart', dragEventArgs);\n this.isDragEventPrevent = dragEventArgs.cancel;\n };\n QueryBuilder.prototype.dragHandler = function (e) {\n if (this.isDragEventPrevent) {\n return;\n }\n var borderLineElem = this.element.querySelectorAll('.e-drag-rule-bottom-line');\n borderLineElem.forEach(function (ele) {\n ele.classList.remove('e-drag-rule-bottom-line');\n });\n borderLineElem = this.element.querySelectorAll('.e-drag-rule-top-line');\n borderLineElem.forEach(function (ele) {\n ele.classList.remove('e-drag-rule-top-line');\n });\n if (isNullOrUndefined(e.target)) {\n return;\n }\n if (e.target.nodeName === 'HTML' || closest(e.target, '.e-qb-dragging-rule') || closest(e.target, '.e-group-header') ||\n !closest(e.target, '#' + this.element.id) || closest(e.target, '.e-disable') || (e.target.parentElement && e.target.parentElement.classList.contains('e-btn-group') && this.enableSeparateConnector)) {\n this.dragElement.classList.add('e-notallowedcur');\n return;\n }\n else {\n this.dragElement.classList.remove('e-notallowedcur');\n }\n var targetElem = closest(e.target, '.e-rule-container');\n var grpElem = closest(e.target, '.e-group-container');\n if (targetElem) {\n var rect = targetElem.getBoundingClientRect();\n var mouseY = e.event.clientY || e.event.changedTouches[0].clientY;\n var distanceToTop = mouseY - rect.top;\n var distanceToBottom = rect.bottom - mouseY;\n var threshold = 20; // Adjust as needed\n if (distanceToTop < threshold) {\n targetElem.classList.add('e-drag-rule-top-line');\n }\n else if (distanceToBottom < threshold) {\n targetElem.classList.add('e-drag-rule-bottom-line');\n }\n }\n else if (e.target.classList.contains('e-rule-list') && e.target.children.length === 0) {\n e.target.classList.add('e-drag-rule-bottom-line');\n }\n else if (e.target.classList.contains('e-rule-list') && e.target.children[0].classList.contains('e-group-container')) {\n var rect = e.target.children[0].getBoundingClientRect();\n var mouseY = e.event.clientY || e.event.changedTouches[0].clientY;\n var distanceToTop = mouseY - rect.top;\n var threshold = 20; // Adjust as needed\n if (distanceToTop < threshold) {\n e.target.classList.add('e-drag-rule-top-line');\n }\n }\n else if (closest(e.target, '.e-group-container') || e.target.classList.contains('e-group-container')) {\n if (!grpElem) {\n grpElem = e.target;\n }\n if (grpElem.id.indexOf('group0') > -1) {\n var rect = e.target.getBoundingClientRect();\n var mouseY = e.event.clientY || e.event.changedTouches[0].clientY;\n var distanceToBottom = rect.bottom - mouseY;\n var threshold = 20; // Adjust as needed\n if (distanceToBottom < threshold) {\n e.target.classList.add('e-drag-rule-bottom-line');\n }\n }\n }\n var dragEventArgs = {\n dragRuleID: targetElem !== null ? targetElem.id : grpElem !== null ? grpElem.id : null,\n dragGroupID: grpElem !== null ? grpElem.id : null, cancel: false\n };\n this.trigger('drag', dragEventArgs);\n this.isDragEventPrevent = dragEventArgs.cancel;\n };\n QueryBuilder.prototype.dragStopHandler = function (e) {\n var _this = this;\n if (this.isDragEventPrevent) {\n return;\n }\n var targetGroup = closest(e.target, '.e-rule-container');\n if (isNullOrUndefined(targetGroup) && e.target.parentElement &&\n e.target.parentElement.classList.contains('e-btn-group') && this.enableSeparateConnector) {\n targetGroup = closest(e.target.parentElement.previousElementSibling, '.e-rule-container');\n }\n var isPreventelem;\n if (!isNullOrUndefined(e.helper)) {\n isPreventelem = closest(e.helper, '.e-notallowedcur');\n }\n var prevRule;\n if (!isPreventelem) {\n var targetGrp = closest(e.target, '.e-group-container');\n var dropEventArgs = {\n cancel: false, dropRuleID: targetGroup !== null ? targetGroup.id\n : targetGrp !== null ? targetGrp.id : null, dropGroupID: targetGrp !== null ? targetGrp.id : null\n };\n this.trigger('drop', dropEventArgs);\n if (dropEventArgs.cancel) {\n isPreventelem = true;\n }\n prevRule = this.getValidRules();\n }\n this.prvtEvtTgrDaD = true;\n var tgrt = this.enableSeparateConnector && e.target.parentElement &&\n e.target.parentElement.classList.contains('e-btn-group') ? e.target.parentElement.previousElementSibling : e.target;\n if (targetGroup && !isPreventelem) {\n var groupId_1 = targetGroup.id.split(this.element.id + '_')[1].split('_')[0];\n if (this.draggable.currentStateTarget.parentElement.classList.contains('e-rule-field') ||\n this.draggable.currentStateTarget.parentElement.classList.contains('e-group-header')) {\n var rule = void 0;\n if (this.draggable.currentStateTarget.parentElement.classList.contains('e-group-header')) {\n rule = this.getGroup(this.draggedRule);\n this.deleteGroup(closest(this.draggedRule, '.e-group-container'));\n }\n else {\n rule = this.getRule(this.draggedRule);\n this.deleteRule(this.draggedRule);\n }\n var groupRule = extend([], this.getGroup(targetGroup), [], true);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (groupRule.properties) {\n groupRule = groupRule.properties;\n }\n var groupElem = closest(targetGroup, '.e-group-container');\n var cloneGroupElem = groupElem.cloneNode(true);\n var isRuleArea = false;\n if (closest(e.target, '.e-group-container') && closest(e.target, '.e-group-container').id === this.initialID + '_group0') {\n isRuleArea = true;\n }\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 // Calculate index considering both groups and rules in the overall rules collection\n var overallDropIndex = 0;\n var ruleListElem = cloneGroupElem.querySelector('.e-rule-list');\n if (ruleListElem) {\n var droppedElement = void 0;\n for (var j = 0; j < ruleListElem.children.length; j++) {\n var child = ruleListElem.children[j];\n if (child.classList.contains('e-drag-rule-top-line') || child.classList.contains('e-drag-rule-bottom-line')) {\n droppedElement = child;\n overallDropIndex = j;\n break;\n }\n }\n }\n if (targetGroup.classList.contains('e-drag-rule-top-line')) {\n groupRule.rules.splice(isRuleArea ? overallDropIndex : dropInd, 0, rule);\n }\n else {\n groupRule.rules.splice(isRuleArea ? overallDropIndex + 1 : 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.scrollEventHandler = function (e) {\n var target = e.target;\n if (target && ((target.closest && target.closest('.e-popup')))) {\n this.isPopupScroll = true;\n }\n else {\n this.isPopupScroll = false;\n }\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 this.boundScrollHandler = this.scrollEventHandler.bind(this);\n document.addEventListener('wheel', this.boundScrollHandler);\n document.addEventListener('scroll', this.boundScrollHandler);\n if (this.allowDragAndDrop) {\n EventHandler.add(document, 'keydown', this.keyBoardHandler, this);\n }\n this.boundResizeHandler = this.windowResizeHandler.bind(this);\n window.addEventListener('resize', this.boundResizeHandler);\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 document.removeEventListener('wheel', this.boundScrollHandler);\n document.removeEventListener('scroll', this.boundScrollHandler);\n this.boundScrollHandler = null;\n EventHandler.remove(document, 'keydown', this.keyBoardHandler);\n if (this.boundResizeHandler) {\n window.removeEventListener('resize', this.boundResizeHandler);\n this.boundResizeHandler = null;\n }\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.clearQBTemplate();\n this.reset();\n this.groupIdCounter = 1;\n this.ruleIdCounter = 0;\n this.isImportRules = true;\n this.setProperties({ rule: rule }, true);\n rule = this.getRuleCollection(this.rule, false);\n this.importRules(this.rule, this.element.querySelector('.e-group-container'), true, this.rule.not, isRoot);\n if (rule.isLocked) {\n var lockGrpTarget = this.element.querySelector('.e-group-container').querySelector('.e-lock-grp-btn');\n this.groupLock(lockGrpTarget);\n }\n this.isImportRules = false;\n };\n QueryBuilder.prototype.keyBoardHandler = function (e) {\n if (e.currentTarget === this.element && this.readonly && (e.keyCode === 38 || e.keyCode === 40 || e.keyCode === 13)) {\n e.preventDefault();\n }\n else if (e.code === 'Escape' && this.allowDragAndDrop) {\n this.isDragEventPrevent = true;\n document.body.classList.remove('e-prevent-select');\n var borderLineElem = this.element.querySelectorAll('.e-drag-rule-bottom-line');\n borderLineElem.forEach(function (ele) {\n ele.classList.remove('e-drag-rule-bottom-line');\n });\n borderLineElem = this.element.querySelectorAll('.e-drag-rule-top-line');\n borderLineElem.forEach(function (ele) {\n ele.classList.remove('e-drag-rule-top-line');\n });\n borderLineElem = this.element.querySelectorAll('.e-qb-dragging-rule');\n borderLineElem.forEach(function (ele) {\n ele.classList.remove('e-qb-dragging-rule');\n });\n var dragElemnet = this.element.querySelector('.e-cloneproperties');\n if (dragElemnet) {\n remove(dragElemnet);\n }\n if (this.enableSeparateConnector) {\n this.refresh();\n }\n }\n };\n QueryBuilder.prototype.windowResizeHandler = function () {\n if (Browser.isDevice || window.innerWidth < 768) {\n this.displayMode = 'Vertical';\n }\n else {\n this.displayMode = 'Horizontal';\n }\n };\n QueryBuilder.prototype.clearQBTemplate = function (ruleElemColl) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.isReact || this.isAngular) {\n this.clearTemplate(ruleElemColl);\n }\n };\n QueryBuilder.prototype.disableRuleCondition = function (groupElem, rules, isNewRuleAdded, isNewGroup) {\n if (!this.headerTemplate) {\n if (this.readonly) {\n return;\n }\n var count = groupElem.querySelector('.e-rule-list').childElementCount;\n var andElem = groupElem.querySelector('.e-btngroup-and');\n var orElem = groupElem.querySelector('.e-btngroup-or');\n if (count > 1) {\n andElem.disabled = false;\n orElem.disabled = false;\n if (orElem.nextElementSibling.classList.contains('e-btn-disable') ||\n andElem.nextElementSibling.classList.contains('e-btn-disable')) {\n orElem.nextElementSibling.classList.remove('e-btn-disable');\n andElem.nextElementSibling.classList.remove('e-btn-disable');\n }\n if (this.enableSeparateConnector && !isNewRuleAdded) {\n var index = 0;\n var element = void 0;\n // eslint-disable-next-line no-constant-condition\n while (true) {\n var andGroup = groupElem.parentElement.querySelectorAll('.e-btngroup-and');\n var orGroup = groupElem.parentElement.querySelectorAll('.e-btngroup-or');\n andElem = andGroup[andGroup.length - (1 + index)];\n orElem = orGroup[orGroup.length - (1 + index)];\n element = andGroup[andGroup.length - (1 + index)];\n if (element && element.parentElement && element.parentElement.style.display === 'none') {\n index++;\n }\n else {\n break;\n }\n }\n var elem = groupElem.previousElementSibling;\n while (elem && !elem.classList.contains('e-rule-container')) {\n if (elem.classList.contains('e-group-container')) {\n elem = elem.querySelectorAll('.e-rule-container')[elem.querySelectorAll('.e-rule-container').length - 1];\n break;\n }\n elem = elem.previousElementSibling;\n }\n if (isNewGroup && groupElem.classList.contains('e-group-container')) {\n elem = groupElem;\n var prevRule = this.getGroup(elem);\n if (prevRule.condition === 'or') {\n orElem.checked = true;\n }\n else {\n andElem.checked = true;\n }\n }\n else if (elem && elem.classList.contains('e-rule-container')) {\n var ruleID = elem.id.replace(this.element.id + '_', '');\n var prevRule = this.getRule(ruleID);\n if (prevRule.condition === 'or') {\n orElem.checked = true;\n }\n else {\n andElem.checked = true;\n }\n }\n }\n else if (!isNewRuleAdded) {\n if (rules && rules.condition === 'or') {\n orElem.checked = true;\n }\n else {\n andElem.checked = true;\n }\n }\n }\n else {\n if (this.enableSeparateConnector && !isNewRuleAdded) {\n var index = 0;\n var element = void 0;\n // eslint-disable-next-line no-constant-condition\n while (true) {\n var andGroup = groupElem.parentElement.querySelectorAll('.e-btngroup-and');\n var orGroup = groupElem.parentElement.querySelectorAll('.e-btngroup-or');\n andElem = andGroup[andGroup.length - (1 + index)];\n orElem = orGroup[orGroup.length - (1 + index)];\n if (this.isImportRules) {\n andElem = groupElem.parentElement.querySelector('.e-btn-group.e-multi-connector .e-btngroup-and');\n orElem = groupElem.parentElement.querySelector('.e-btn-group.e-multi-connector .e-btngroup-or');\n }\n element = andGroup[andGroup.length - (1 + index)];\n if (element && element.parentElement && element.parentElement.style.display === 'none') {\n index++;\n }\n else {\n break;\n }\n }\n var elem = void 0;\n var tempElem = groupElem.previousElementSibling;\n while (tempElem) {\n if (tempElem.classList.contains('e-group-container')) {\n tempElem = tempElem.querySelectorAll('.e-rule-container')[tempElem.querySelectorAll('.e-rule-container').length - 1];\n }\n if (tempElem.classList.contains('e-rule-container')) {\n elem = tempElem;\n break;\n }\n tempElem = tempElem.previousElementSibling;\n }\n if (isNullOrUndefined(elem) && groupElem.querySelectorAll('.e-rule-container')[groupElem.querySelectorAll('.e-rule-container').length - 1]) {\n elem = groupElem.querySelectorAll('.e-rule-container')[groupElem.querySelectorAll('.e-rule-container').length - 1];\n }\n if (isNewGroup && groupElem.classList.contains('e-group-container')) {\n elem = groupElem;\n var prevRule = this.getGroup(elem);\n if (prevRule.condition === 'or') {\n orElem.checked = true;\n }\n else {\n andElem.checked = true;\n }\n }\n else if (elem) {\n var ruleID = elem.id.replace(this.element.id + '_', '');\n var prevRule = this.getRule(ruleID);\n if (prevRule.condition === 'or' && orElem) {\n orElem.checked = true;\n }\n else if (andElem) {\n andElem.checked = true;\n }\n }\n }\n else if (!isNewRuleAdded && !isNullOrUndefined(andElem)) {\n andElem.checked = false;\n andElem.disabled = true;\n orElem.checked = false;\n orElem.disabled = true;\n if (rules) {\n orElem.nextElementSibling.classList.add('e-btn-disable');\n andElem.nextElementSibling.classList.add('e-btn-disable');\n }\n }\n }\n }\n };\n /**\n * Get the valid rule or rules collection.\n *\n * @param {RuleModel} currentRule - 'currentRule' to be passed to get the valid rules.\n * @returns {RuleModel} - Valid rule or rules collection\n */\n QueryBuilder.prototype.getValidRules = function (currentRule) {\n this.isValueEmpty = true;\n if (!currentRule) {\n currentRule = this.getRules();\n }\n var ruleCondtion = currentRule.condition;\n var notCondition = currentRule.not;\n var ruleColl = extend([], currentRule.rules, [], true);\n var rule = !isNullOrUndefined(currentRule.isLocked) ?\n this.getRuleCollection({ condition: ruleCondtion, rules: ruleColl, not: notCondition, isLocked: currentRule.isLocked }, true) :\n this.getRuleCollection({ condition: ruleCondtion, rules: ruleColl, not: notCondition }, true);\n this.isValueEmpty = false;\n return rule;\n };\n QueryBuilder.prototype.getRuleCollection = function (rule, isValidRule) {\n if (isNullOrUndefined(rule)) {\n return null;\n }\n var orgRule;\n if (rule.rules && rule.rules.length && (Object.keys(rule.rules[0]).length > 6 || isValidRule)) {\n var jLen = rule.rules.length;\n for (var j = 0; j < jLen; j++) {\n orgRule = rule.rules[j];\n orgRule = this.getRuleCollection(orgRule, isValidRule);\n rule.rules[j] = orgRule;\n if (Object.keys(orgRule).length < 1 && isValidRule) {\n rule.rules.splice(j, 1);\n j--;\n jLen--;\n }\n }\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var customObj = rule.custom;\n if ((rule.field && rule.field !== '') && (isNullOrUndefined(customObj) || (customObj && (customObj.type !== 'question' &&\n customObj.type !== 'answer')))) {\n if (rule.operator) {\n if (rule.operator.toString().indexOf('null') > -1 || rule.operator.toString().indexOf('empty') > -1) {\n rule.value = null;\n }\n }\n if ((this.isRefreshed && this.enablePersistence) || (rule.field !== '' && rule.operator !== '' &&\n (this.isValueEmpty ? rule.value !== '' && rule.value !== undefined : rule.value !== undefined)) ||\n (customObj && customObj.isQuestion)) {\n var condition = rule.condition;\n var lockedRule = rule.isLocked;\n rule = { 'label': rule.label, 'field': rule.field, 'operator': rule.operator, 'type': rule.type, 'value': rule.value };\n if (!isNullOrUndefined(lockedRule)) {\n rule.isLocked = lockedRule;\n }\n if (condition) {\n rule.condition = condition;\n }\n if (customObj) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n rule.custom = customObj;\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if ((rule.operator === 'in' || rule.operator === 'notin') && rule.value && rule.value.length === 0) {\n rule = {};\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if ((rule.operator === 'between' || rule.operator === 'notbetween') && Array.isArray(rule.value) && (rule.value.length < 2 || rule.value.some(function (val) { return val === '' || val === null; }))) {\n rule = {};\n }\n }\n else {\n rule = {};\n }\n }\n else {\n if (customObj && (customObj.type === 'question' || customObj.type === 'answer')) {\n var notValue = rule.not;\n rule = {\n 'label': rule.label, 'field': rule.field, 'operator': rule.operator, 'type': rule.type, 'value': rule.value,\n 'condition': rule.condition, 'rules': rule.rules\n };\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n rule.custom = customObj;\n if (this.enableNotCondition) {\n rule.not = notValue;\n }\n }\n else if ((isNullOrUndefined(rule.condition)) && isNullOrUndefined(rule.rules)) {\n rule = {};\n }\n else {\n var isLocked = rule.isLocked;\n if (this.enableNotCondition) {\n rule = { 'condition': rule.condition, 'rules': rule.rules, 'not': rule.not };\n }\n else {\n rule = { 'condition': rule.condition, 'rules': rule.rules };\n }\n if (!isNullOrUndefined(isLocked)) {\n rule.isLocked = isLocked;\n }\n if (customObj) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n rule.custom = customObj;\n }\n if (rule.rules && rule.rules.length === 0) {\n rule = {};\n }\n }\n }\n return rule;\n };\n /**\n * Set the rule or rules collection.\n *\n * @param {RuleModel} rule - 'rule' to be passed to set rules.\n * @returns {void}.\n */\n QueryBuilder.prototype.setRules = function (rule) {\n var mRules = extend({}, rule, {}, true);\n if (this.headerTemplate) {\n this.setGroupRules(mRules, true);\n }\n else {\n this.setGroupRules(mRules);\n }\n };\n /**\n * Gets the rule or rule collection.\n *\n * @returns {object} - Rule or rule collection\n */\n QueryBuilder.prototype.getRules = function () {\n var rule;\n if (this.enableNotCondition) {\n rule = { condition: this.rule.condition, rules: this.rule.rules, not: this.rule.not };\n }\n else {\n rule = { condition: this.rule.condition, rules: this.rule.rules };\n }\n if (!isNullOrUndefined(this.rule.isLocked)) {\n rule.isLocked = this.rule.isLocked;\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.rule.custom) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n rule.custom = this.rule.custom;\n }\n return rule;\n };\n /**\n * Gets the rule.\n *\n * @param {string | HTMLElement} elem - 'elem' to be passed to get rule.\n * @returns {object} - Rule\n */\n QueryBuilder.prototype.getRule = function (elem) {\n var ruleElem;\n var ruleId;\n var index = 0;\n if (elem instanceof HTMLElement) {\n ruleElem = closest(elem, '.e-rule-container');\n }\n else {\n ruleId = this.element.id + '_' + elem;\n ruleElem = document.getElementById(ruleId);\n }\n if (isNullOrUndefined(ruleElem)) {\n return null;\n }\n var groupElem = closest(ruleElem, '.e-group-container');\n var rule = this.getParentGroup(groupElem);\n while (ruleElem.previousElementSibling !== null) {\n ruleElem = ruleElem.previousElementSibling;\n if (!this.enableSeparateConnector || (this.enableSeparateConnector &&\n ((!this.headerTemplate && !ruleElem.classList.contains('e-btn-group')) ||\n this.headerTemplate && (ruleElem.classList.contains('e-rule-container') ||\n ruleElem.classList.contains('e-group-container'))))) {\n index++;\n }\n }\n return rule.rules[index];\n };\n /**\n * Gets the group.\n *\n * @param {string | Element} target - 'target' to be passed to get group.\n * @returns {object} -Group\n */\n QueryBuilder.prototype.getGroup = function (target) {\n if (target instanceof Element && target.className.indexOf('e-group-container') < 1) {\n target = closest(target, '.e-group-container');\n }\n var groupId = (target instanceof Element) ? target.id : this.element.id + '_' + target;\n var rule = this.getParentGroup(groupId);\n return rule;\n };\n /**\n * Deletes the group or groups based on the group ID.\n *\n * @param {string[]} groupIdColl - 'groupIdColl' to be passed to delete groups.\n * @returns {void}\n */\n QueryBuilder.prototype.deleteGroups = function (groupIdColl) {\n var i;\n var len = groupIdColl.length;\n var groupID;\n for (i = 0; i < len; i++) {\n if (groupIdColl[i] === 'group0') {\n continue;\n }\n groupID = this.element.id + '_' + groupIdColl[i];\n this.deleteGroup(document.getElementById(groupID));\n }\n };\n /**\n * Return the Query from current rules collection.\n *\n * @returns {Promise} - Query from current rules collection\n * @blazorType object\n */\n QueryBuilder.prototype.getFilteredRecords = function () {\n var predicate = this.getPredicate(this.getValidRules(this.rule));\n var dataManagerQuery = isNullOrUndefined(predicate) ? new Query() : new Query().where(predicate);\n return this.dataManager.executeQuery(dataManagerQuery);\n };\n /**\n * Deletes the rule or rules based on the rule ID.\n *\n * @param {string[]} ruleIdColl - 'ruleIdColl' to be passed to delete rules.\n * @returns {void}.\n */\n QueryBuilder.prototype.deleteRules = function (ruleIdColl) {\n var i;\n var len = ruleIdColl.length;\n var ruleID;\n for (i = 0; i < len; i++) {\n ruleID = this.element.id + '_' + ruleIdColl[i];\n this.deleteRule(document.getElementById(ruleID));\n }\n };\n /**\n * Gets the query for Data Manager.\n *\n * @param {RuleModel} rule - 'rule' to be passed to get query.\n * @returns {string} - Query for Data Manager\n */\n QueryBuilder.prototype.getDataManagerQuery = function (rule) {\n var predicate = this.getPredicate(rule);\n var query;\n var fields = [];\n for (var i = 0, len = Object.keys(this.columns); i < len.length; i++) {\n fields.push(this.columns[i].field);\n }\n if (rule.rules.length) {\n query = new Query().select(fields).where(predicate);\n }\n else {\n query = new Query().select(fields);\n }\n return query;\n };\n /**\n * Get the predicate from collection of rules.\n *\n * @param {RuleModel} rule - 'rule' to be passed to get predicate.\n * @returns {Predicate} - Predicate from collection of rules\n */\n QueryBuilder.prototype.getPredicate = function (rule) {\n var ruleColl = rule.rules;\n var pred;\n var pred2;\n var ruleValue;\n var ignoreCase = false;\n var column;\n if (!ruleColl) {\n return pred;\n }\n for (var i = 0, len = ruleColl.length; i < len; i++) {\n var operator = ruleColl[i].operator;\n if (operator === 'notstartswith') {\n operator = 'doesnotstartwith';\n }\n else if (operator === 'notendswith') {\n operator = 'doesnotendwith';\n }\n else if (operator === 'notcontains') {\n operator = 'doesnotcontain';\n }\n var keys = Object.keys(ruleColl[i]);\n ignoreCase = false;\n if (keys.indexOf('rules') > -1 && ruleColl[i].rules) {\n pred2 = this.getPredicate(ruleColl[i]);\n if (pred2) {\n if (pred) {\n if (rule.condition === 'and') {\n pred = pred.and(pred2);\n }\n else {\n pred = pred.or(pred2);\n }\n }\n else {\n pred = pred2;\n }\n }\n }\n else if (!isNullOrUndefined(operator) && !isNullOrUndefined(operator.length)) {\n var oper = ruleColl[i].operator.toLowerCase();\n var isDateFilter = false;\n var dateOperColl = ['equal', 'notequal', 'greaterthan', 'greaterthanorequal', 'lessthan', 'lessthanorequal'];\n if (ruleColl[i].type === 'string') {\n ignoreCase = this.matchCase ? false : true;\n }\n if (ruleColl[i].type === 'date' && dateOperColl.indexOf(oper) > -1) {\n ignoreCase = true;\n }\n column = this.getColumn(ruleColl[i].field);\n if (oper.indexOf('null') > -1 || oper.indexOf('empty') > -1) {\n ruleColl[i].value = null;\n }\n else if (ruleColl[i].type === 'date' && !(ruleColl[i].value instanceof Array)) {\n var format = this.getFormat(column.format);\n if (!isNullOrUndefined(ruleColl[i].value)) {\n ruleValue = this.getDate(ruleColl[i].value, format);\n if (dateOperColl.indexOf(oper) > -1 && !this.isTime(ruleColl[i].value)) {\n isDateFilter = true;\n }\n }\n else {\n ruleValue = null;\n }\n }\n else {\n ruleValue = ruleColl[i].value;\n }\n if (i === 0) {\n if (isDateFilter || (oper.indexOf('in') > -1 || oper.indexOf('between') > -1 || oper.indexOf('null') > -1 ||\n oper.indexOf('empty') > -1) && (oper.indexOf('contain') < 0)) {\n pred = isDateFilter ? this.datePredicate(ruleColl[i], ruleValue) :\n this.arrayPredicate(ruleColl[i]);\n }\n else {\n var value = ruleValue;\n if (value !== '') {\n pred = new Predicate(ruleColl[i].field, operator, ruleValue, ignoreCase);\n }\n }\n }\n else {\n if (isDateFilter || (oper.indexOf('in') > -1 || oper.indexOf('between') > -1 ||\n oper.indexOf('null') > -1 || oper.indexOf('empty') > -1) && oper.indexOf('contain') < 0) {\n pred = isDateFilter ? this.datePredicate(ruleColl[i], ruleValue, pred, rule.condition) :\n this.arrayPredicate(ruleColl[i], pred, rule.condition);\n }\n else {\n if (rule.condition === 'and') {\n var value = ruleValue;\n if (pred && value !== '') {\n pred\n = pred.and(ruleColl[i].field, operator, ruleValue, ignoreCase);\n }\n else if (value !== '') {\n pred = new Predicate(ruleColl[i].field, operator, ruleValue, ignoreCase);\n }\n }\n else {\n var value = ruleValue;\n if (pred && value !== '') {\n pred = pred.or(ruleColl[i].field, operator, ruleValue, ignoreCase);\n }\n else if (value !== '') {\n pred = new Predicate(ruleColl[i].field, operator, ruleValue, ignoreCase);\n }\n }\n }\n }\n }\n }\n if (this.dataSource instanceof DataManager) {\n if (!isNullOrUndefined(pred) && (pred.operator === 'isnull' || pred.operator === 'isnotnull')) {\n pred.operator = pred.operator === 'isnull' ? 'equal' : 'notequal';\n }\n }\n return pred;\n };\n QueryBuilder.prototype.getLocale = function () {\n var gregorianFormat = '.dates.calendars.gregorian.days.format.short';\n var localeString = this.locale;\n var mainVal = 'main.';\n var cultureObj = getValue(mainVal + '' + this.locale + gregorianFormat, cldrData);\n if (!cultureObj) {\n localeString = 'en';\n }\n return localeString;\n };\n QueryBuilder.prototype.getColumn = function (field, col) {\n var columns = this.columns;\n var column;\n columns = col ? col : columns;\n var fieldParts = this.separator !== '' ? (field ? field.split(this.separator) : []) : [field];\n var rootField = fieldParts && fieldParts.length > 0 ? fieldParts[0] : null;\n for (var i = 0; i < columns.length; i++) {\n if (columns[i].field === field) {\n column = columns[i];\n break;\n }\n }\n if (!column && this.separator !== '') {\n for (var i = 0; i < columns.length; i++) {\n if (columns[i].field === rootField) {\n if (columns[i].columns) {\n var subField = field.substring(rootField.length + this.separator.length);\n if (subField) {\n column = this.getColumn(subField, columns[i].columns);\n }\n else {\n column = columns[i];\n }\n }\n else {\n column = columns[i];\n }\n break;\n }\n }\n }\n if (!column) {\n for (var i = 0; i < columns.length; i++) {\n if (columns[i].columns) {\n column = this.getColumn(field, columns[i].columns);\n if (column) {\n break;\n }\n }\n }\n }\n return column;\n };\n /* eslint-disable */\n /**\n * Return the operator bound to the column.\n *\n * @returns {[key: string]: Object}[] - Operator bound to the column\n */\n /* eslint-enable */\n QueryBuilder.prototype.getOperators = function (field) {\n var column = this.getColumn(field);\n return column.operators;\n };\n QueryBuilder.prototype.setTime = function (date, isStart) {\n if (isStart) {\n date.setHours(0, 0, 0);\n }\n else {\n date.setHours(23, 59, 59);\n }\n return date;\n };\n QueryBuilder.prototype.datePredicate = function (ruleColl, value, predicate, condition) {\n var pred;\n var startDate = this.setTime(new Date(value.getTime()), true);\n var endDate = this.setTime(value);\n switch (ruleColl.operator) {\n case 'equal':\n pred = new Predicate(ruleColl.field, 'greaterthanorequal', startDate);\n pred = pred.and(ruleColl.field, 'lessthanorequal', endDate);\n break;\n case 'notequal':\n pred = new Predicate(ruleColl.field, 'lessthan', startDate);\n pred = pred.or(ruleColl.field, 'greaterthan', endDate);\n break;\n case 'greaterthan':\n pred = new Predicate(ruleColl.field, 'greaterthan', endDate);\n break;\n case 'greaterthanorequal':\n pred = new Predicate(ruleColl.field, 'greaterthanorequal', startDate);\n break;\n case 'lessthan':\n pred = new Predicate(ruleColl.field, 'lessthan', startDate);\n break;\n case 'lessthanorequal':\n pred = new Predicate(ruleColl.field, 'lessthanorequal', endDate);\n break;\n }\n if (pred) {\n if (predicate) {\n if (condition === 'and') {\n predicate = predicate.and(pred);\n }\n else if (condition === 'or') {\n predicate = predicate.or(pred);\n }\n }\n else {\n predicate = pred;\n }\n }\n return predicate;\n };\n QueryBuilder.prototype.arrayPredicate = function (ruleColl, predicate, condition) {\n var value = ruleColl.value;\n var operator = ruleColl.operator.toString();\n var nullValue = ruleColl.value;\n var pred;\n var column = this.getColumn(ruleColl.field);\n var format = this.getFormat(column.format);\n if (operator.indexOf('null') > -1 || operator.indexOf('empty') > -1) {\n switch (operator) {\n case 'isnull':\n pred = new Predicate(ruleColl.field, 'isnull', nullValue);\n break;\n case 'isnotnull':\n pred = new Predicate(ruleColl.field, 'isnotnull', nullValue);\n break;\n case 'isempty':\n pred = new Predicate(ruleColl.field, 'equal', '');\n break;\n case 'isnotempty':\n pred = new Predicate(ruleColl.field, 'notequal', '');\n break;\n }\n }\n if (!(operator.indexOf('null') > -1 || operator.indexOf('empty') > -1)) {\n for (var j = 0, jLen = value.length; j < jLen; j++) {\n if (value[j] !== '' || ((operator === 'in' || operator === 'notin') && column.type === 'string')) {\n if (j === 0) {\n var gte = 'greaterthanorequal';\n switch (operator) {\n case 'between':\n if (column.type !== 'date') {\n pred = new Predicate(ruleColl.field, gte, value[j]);\n }\n else {\n pred = new Predicate(ruleColl.field, gte, value[j] ?\n (this.isTime(value[j]) ? this.getDate(value[j], format) :\n this.setTime(this.getDate(value[j], format), true)) : null);\n }\n break;\n case 'notbetween':\n if (column.type === 'date') {\n pred = new Predicate(ruleColl.field, 'lessthan', value[j] ?\n (this.isTime(value[j]) ? this.getDate(value[j], format) :\n this.setTime(this.getDate(value[j], format), true)) : null);\n }\n else {\n pred = new Predicate(ruleColl.field, 'lessthan', value[j]);\n }\n break;\n case 'in':\n pred = new Predicate(ruleColl.field, 'equal', value[j]);\n break;\n case 'notin':\n pred = new Predicate(ruleColl.field, 'notequal', value[j]);\n break;\n }\n }\n else {\n var gt = 'greaterthan';\n switch (ruleColl.operator) {\n case 'between':\n if (column.type === 'date') {\n pred = pred.and(ruleColl.field, 'lessthanorequal', value[j] ?\n (this.isTime(value[j]) ? this.getDate(value[j], format) :\n this.setTime(this.getDate(value[j], format))) : value[j]);\n }\n else {\n pred = pred.and(ruleColl.field, 'lessthanorequal', value[j]);\n }\n break;\n case 'notbetween':\n if (column.type === 'date') {\n pred = pred.or(ruleColl.field, gt, value[j] ?\n (this.isTime(value[j]) ? this.getDate(value[j], format) :\n this.setTime(this.getDate(value[j], format))) : value[j]);\n }\n else {\n pred = pred.or(ruleColl.field, 'greaterthan', value[j]);\n }\n break;\n case 'in':\n pred = pred.or(ruleColl.field, 'equal', value[j]);\n break;\n case 'notin':\n pred = pred.and(ruleColl.field, 'notequal', value[j]);\n break;\n }\n }\n }\n }\n }\n if (pred) {\n if (predicate) {\n if (condition === 'and') {\n predicate = predicate.and(pred);\n }\n else if (condition === 'or') {\n predicate = predicate.or(pred);\n }\n }\n else {\n predicate = pred;\n }\n }\n return predicate;\n };\n QueryBuilder.prototype.getDate = function (value, format) {\n var currDate = this.intl.parseDate(value, format);\n if (value.indexOf(':') > -1 && (value.indexOf('/') < 0 && value.indexOf(',') < 0\n && value.indexOf('-') < 0)) {\n currDate = new Date();\n currDate.setHours(parseInt(value.split(':')[0], 10));\n currDate.setMinutes(parseInt(value.split(':')[1], 10));\n if (value.split(':')[2]) {\n currDate.setSeconds(parseInt(value.split(':')[2], 10));\n }\n }\n return currDate;\n };\n QueryBuilder.prototype.isTime = function (value) {\n if (value && value.indexOf(':') > -1) {\n return true;\n }\n return false;\n };\n QueryBuilder.prototype.importRules = function (rule, parentElem, isReset, not, isRoot) {\n if (!isReset) {\n parentElem = this.renderGroup(rule, rule.condition, parentElem, not);\n }\n else {\n if (rule.rules && rule.rules.length > 1 && !this.headerTemplate) {\n // enable/disable conditions when rule group is added\n var orElem = parentElem.querySelector('.e-btngroup-or');\n var andElem = parentElem.querySelector('.e-btngroup-and');\n if (this.enableSeparateConnector && parentElem.previousElementSibling) {\n orElem = parentElem.previousElementSibling.querySelector('.e-btngroup-or');\n andElem = parentElem.previousElementSibling.querySelector('.e-btngroup-and');\n }\n orElem.disabled = false;\n andElem.disabled = false;\n if (this.enableSeparateConnector) {\n var elem = parentElem.previousElementSibling;\n while (elem && !elem.classList.contains('e-rule-container')) {\n if (elem.classList.contains('e-group-container')) {\n elem = elem.querySelectorAll('.e-rule-container')[elem.querySelectorAll('.e-rule-container').length - 1];\n break;\n }\n elem = elem.previousElementSibling;\n }\n if (elem && elem.classList.contains('e-rule-container')) {\n var ruleID = elem.id.replace(this.element.id + '_', '');\n var prevRule = this.getRule(ruleID);\n if (prevRule.condition === 'or') {\n orElem.checked = true;\n }\n else {\n andElem.checked = true;\n }\n }\n }\n else {\n if (rule.condition === 'or') {\n orElem.checked = true;\n }\n else {\n andElem.checked = true;\n }\n }\n }\n else {\n // enable/disable conditions when rule condition is added\n this.disableRuleCondition(parentElem);\n }\n if (this.headerTemplate && isRoot) {\n parentElem = this.renderGroup(rule, rule.condition, this.element, rule.not, isRoot);\n }\n if (this.enableNotCondition && !this.headerTemplate) {\n var tglBtnElem = parentElem.querySelector('.e-qb-toggle');\n if (rule.not) {\n addClass([tglBtnElem], 'e-active-toggle');\n if (this.enableSeparateConnector) {\n getComponent(tglBtnElem.querySelector('.e-checkbox'), 'checkbox').checked = rule.not;\n }\n }\n else {\n removeClass([tglBtnElem], 'e-active-toggle');\n }\n }\n }\n if (rule.rules && rule.rules.length === 0 && this.headerTemplate) {\n rule.rules[0] = { 'label': '', 'field': '', 'operator': '', 'type': '', 'value': '' };\n }\n var ruleColl = rule.rules;\n if (!isNullOrUndefined(ruleColl)) {\n for (var i = 0, len = ruleColl.length; i < len; i++) {\n var keys = Object.keys(ruleColl[i]);\n if (!isNullOrUndefined(ruleColl[i].rules) && keys.indexOf('rules') > -1 && (ruleColl[i].rules.length !== 0)) {\n if (this.element.querySelectorAll('.e-group-container').length > this.maxGroupCount) {\n return null;\n }\n parentElem = this.renderGroup(ruleColl[i], ruleColl[i].condition, parentElem, ruleColl[i].not);\n parentElem = this.importRules(ruleColl[i], parentElem, true);\n }\n else if (!isNullOrUndefined(ruleColl[i].rules)) {\n parentElem = this.renderGroup(ruleColl[i], ruleColl[i].condition, parentElem, ruleColl[i].not);\n var andElem = parentElem.querySelector('.e-btngroup-and');\n var orElem = parentElem.querySelector('.e-btngroup-or');\n andElem.disabled = true;\n orElem.disabled = true;\n }\n else {\n this.renderRule(ruleColl[i], parentElem);\n }\n if (!isNullOrUndefined(ruleColl[i].rules) && ruleColl[i].isLocked) {\n var lockGrpTarget = parentElem.querySelector('.e-rule-list').children[i].querySelector('.e-lock-grp-btn');\n this.groupLock(lockGrpTarget);\n }\n }\n }\n if (parentElem) {\n parentElem = closest(parentElem, '.e-rule-list');\n }\n if (parentElem) {\n parentElem = closest(parentElem, '.e-group-container');\n }\n return parentElem;\n };\n QueryBuilder.prototype.renderGroup = function (rule, condition, parentElem, not, isRoot) {\n this.addGroupElement(true, parentElem, condition, false, not, isRoot, rule); //Child group\n var element = parentElem.querySelectorAll('.e-group-container');\n var cloneElem = parentElem.querySelector('.e-rule-list').children;\n if (this.showButtons.cloneGroup && this.cloneGrpBtnClick && this.isMiddleGroup) {\n this.isMiddleGroup = false;\n this.cloneGrpBtnClick = false;\n var index = 0;\n var tempGroupIndex = this.groupIndex + 1;\n if (this.enableSeparateConnector) {\n for (var i = 0; i < tempGroupIndex; i++) {\n if (cloneElem[i].classList.contains('e-rule-container')) {\n tempGroupIndex++;\n index++;\n }\n }\n }\n return cloneElem[this.groupIndex + index + 1]; // group added in the middle\n }\n else if (this.showButtons.cloneGroup && this.cloneGrpBtnClick && this.isLastGroup) {\n this.isLastGroup = false;\n this.cloneGrpBtnClick = false;\n return cloneElem[cloneElem.length - 1]; // group added in the end\n }\n else {\n return element[element.length - 1];\n }\n };\n QueryBuilder.prototype.renderRule = function (rule, parentElem) {\n if (parentElem.className.indexOf('e-group-container') > -1) {\n this.addRuleElement(parentElem, rule); //Create rule\n }\n else {\n this.addRuleElement(parentElem.querySelector('.e-group-container'), rule); //Create group\n }\n };\n QueryBuilder.prototype.enableReadonly = function () {\n var target = this.element;\n var elem = target.querySelectorAll('.e-dropdownlist, .e-dropdowntree, .e-numerictextbox, .e-textbox, .e-datepicker, .e-multiselect .e-lib, .e-radio');\n for (var i = 0; i < elem.length; i++) {\n if (elem[i].classList.contains('e-dropdownlist')) {\n var dropDownObj = getInstance(elem[i], DropDownList);\n dropDownObj.readonly = this.isReadonly;\n }\n else if (elem[i].classList.contains('e-dropdowntree')) {\n var dropDownTreeObj = getComponent(elem[i], 'dropdowntree');\n dropDownTreeObj.readonly = this.isReadonly;\n }\n else if (elem[i].classList.contains('e-numerictextbox')) {\n var numericTextBoxObj = getInstance(elem[i], NumericTextBox);\n numericTextBoxObj.readonly = this.isReadonly;\n }\n else if (elem[i].classList.contains('e-textbox')) {\n var textBoxObj = getInstance(elem[i], TextBox);\n textBoxObj.readonly = this.isReadonly;\n }\n else if (elem[i].classList.contains('e-datepicker')) {\n var datePickerObj = getInstance(elem[i], DatePicker);\n datePickerObj.readonly = this.isReadonly;\n }\n else if (elem[i].classList.contains('e-multiselect')) {\n var multiSelectObj = getInstance(elem[i], MultiSelect);\n multiSelectObj.readonly = this.isReadonly;\n }\n else if (elem[i].classList.contains('e-radio')) {\n var radioButtonObj = getInstance(elem[i], RadioButton);\n if (!radioButtonObj.checked) {\n if (this.isReadonly) {\n elem[i].parentElement.style.display = 'none';\n }\n else {\n elem[i].parentElement.style.display = 'inherit';\n }\n }\n }\n }\n var deleteGroupElems = this.element.querySelectorAll('.e-deletegroup');\n var addRuleGroupElems = this.element.querySelectorAll('.e-addrulegroup');\n var removeRuleElems = this.element.querySelectorAll('.e-removerule');\n if (!this.isReadonly && this.ruleElem.classList.contains('e-readonly')) {\n this.ruleElem.classList.remove('e-readonly');\n }\n var elems = [deleteGroupElems, addRuleGroupElems, removeRuleElems];\n for (var i = 0; i < elems.length; i++) {\n elems[i].forEach(function (elem) {\n if (elem.classList.contains('e-readonly')) {\n elem.classList.remove('e-readonly');\n }\n else {\n elem.classList.add('e-readonly');\n }\n });\n }\n this.enableBtnGroup();\n };\n QueryBuilder.prototype.enableBtnGroup = function () {\n var _this = this;\n var elems = this.element.querySelectorAll('.e-btngroup-and-lbl, .e-btngroup-or-lbl, .e-qb-toggle');\n var not = false;\n elems.forEach(function (elem) {\n if (elem.classList.contains('e-qb-toggle') && !elem.classList.contains('e-active-toggle')\n && !elem.classList.contains('e-readonly')) {\n elem.classList.add('e-readonly');\n not = false;\n }\n else if (elem.classList.contains('e-qb-toggle') && elem.classList.contains('e-not-readonly')) {\n elem.classList.remove('e-not-readonly');\n }\n else if (elem.classList.contains('e-qb-toggle') && elem.classList.contains('e-readonly')) {\n elem.classList.remove('e-readonly');\n }\n else if (elem.classList.contains('e-active-toggle')) {\n elem.classList.add('e-not-readonly');\n not = true;\n }\n else if (elem.previousElementSibling.checked || elem.classList.contains('e-readonly')) {\n elem.classList.remove('e-readonly');\n if (not) {\n if (elem.textContent === 'AND') {\n elem.classList.add('e-readonly-and');\n }\n else {\n elem.classList.add('e-readonly-or');\n }\n }\n else {\n if (elem.textContent === 'AND' && _this.isReadonly) {\n elem.classList.remove('e-not');\n elem.classList.add('e-readonly-and');\n }\n else {\n if (_this.enableNotCondition) {\n elem.classList.add('e-not');\n }\n elem.classList.remove('e-readonly-and');\n }\n if (elem.textContent === 'OR' && _this.isReadonly) {\n elem.classList.add('e-readonly-or-not');\n }\n else {\n elem.classList.remove('e-readonly-or-not');\n }\n }\n }\n else if (elem.classList.contains('e-btn-disable')) {\n // do nothing\n }\n else {\n elem.classList.add('e-readonly');\n }\n });\n };\n QueryBuilder.prototype.isDateFunction = function (value) {\n var dateFunc = ['date', 'time', 'day', 'week', 'month', 'year', 'hour', 'minute', 'second', 'now', 'quarter', 'period', 'extract'];\n for (var i = 0, len = dateFunc.length; i < len; i++) {\n if (value.toLowerCase().indexOf(dateFunc[i]) > -1) {\n return true;\n }\n }\n return false;\n };\n QueryBuilder.prototype.getSqlString = function (rules, enableEscape, queryStr, sqlLocale) {\n var _this = this;\n var isRoot = false;\n if (!queryStr && queryStr !== '') {\n queryStr = '';\n isRoot = true;\n }\n else {\n queryStr += '(';\n }\n if (rules.not) {\n var notPrefix = sqlLocale ? this.l10n.getConstant('NOT').toUpperCase() + ' ' : 'NOT ';\n queryStr += isRoot ? notPrefix + '(' : ' ' + notPrefix + '(';\n }\n if (rules.rules && rules.rules.length) {\n queryStr += rules.rules.reduce(function (result, rule, j) {\n var ruleStr = '';\n if (rule.rules) {\n ruleStr = _this.getSqlString(rule, enableEscape, '', sqlLocale);\n if (_this.enableSeparateConnector) {\n rules.condition = rule.condition;\n }\n }\n else {\n var ruleOpertor = sqlLocale ? _this.sqlOperators[rule.operator] : _this.operators[rule.operator];\n var valueStr = '';\n if (rule.value instanceof Array) {\n if (rule.operator.toString().indexOf('between') > -1) {\n var ruleCondition = sqlLocale ? ' ' + _this.l10n.getConstant('AND').toUpperCase() + ' ' : ' AND ';\n if (rule.type === 'date' && !_this.isDateFunction(rule.value[0])) {\n valueStr = \"\\\"\" + rule.value[0] + \"\\\"\" + ruleCondition + \"\\\"\" + rule.value[1] + \"\\\"\";\n }\n else {\n valueStr = \"\" + rule.value[0] + ruleCondition + rule.value[1];\n }\n }\n else {\n if (typeof rule.value[0] === 'string' && rule.value !== null) {\n var valueArray = rule.value;\n valueStr = '(\"' + valueArray.join('\",\"') + '\")';\n }\n else {\n valueStr = \"(\" + rule.value + \")\";\n }\n }\n }\n else {\n if (rule.operator.toString().indexOf('startswith') > -1) {\n valueStr = rule.value ? \"(\\\"\" + rule.value + \"%\\\")\" : \"(\" + rule.value + \")\";\n }\n else if (rule.operator.toString().indexOf('endswith') > -1) {\n valueStr = rule.value ? \"(\\\"%\" + rule.value + \"\\\")\" : \"(\" + rule.value + \")\";\n }\n else if (rule.operator.toString().indexOf('contains') > -1) {\n valueStr = rule.value ? \"(\\\"%\" + rule.value + \"%\\\")\" : \"(\" + rule.value + \")\";\n }\n else {\n if (rule.type === 'number' || typeof rule.value === 'boolean' ||\n (rule.value === null && (rule.operator.toString().indexOf('empty') < -1))) {\n valueStr = \"\" + rule.value;\n }\n else if (rule.operator.toString().indexOf('empty') > -1) {\n valueStr = '\"\"';\n }\n else {\n valueStr = \"\\\"\" + rule.value + \"\\\"\";\n }\n }\n }\n var fieldName = rule.field;\n if (enableEscape) {\n fieldName = '`' + fieldName + '`';\n }\n else if (fieldName.indexOf(' ') > -1) {\n fieldName = '\"' + fieldName + '\"';\n }\n if (rule.operator.toString().indexOf('null') > -1) {\n ruleStr = fieldName + ' ' + ruleOpertor;\n }\n else {\n var custOper = ruleOpertor;\n if (rule.operator === 'isempty') {\n custOper = '=';\n }\n else if (rule.operator === 'isnotempty') {\n custOper = '!=';\n }\n ruleStr = fieldName + ' ' + custOper + ' ' + valueStr;\n }\n }\n if (j !== rules.rules.length - 1) {\n var condition = rules.condition;\n if (condition === '' || (rule && rule.condition !== '' && rule.custom && rule.custom.isCustom)) {\n condition = rule.condition;\n }\n if (condition) {\n condition = sqlLocale ? _this.l10n.getConstant(condition.toUpperCase()).toUpperCase() : condition.toUpperCase();\n ruleStr += ' ' + condition + ' ';\n }\n }\n return result + ruleStr;\n }, '');\n }\n if (!isRoot) {\n queryStr += ')';\n }\n if (rules.not) {\n queryStr += ')';\n }\n return queryStr;\n };\n /**\n * Sets the rules from the sql query.\n *\n * @param {string} sqlString - 'sql String' to be passed to set the rule.\n * @param {boolean} sqlLocale - Optional. Set `true` if Localization for Sql query.\n * @returns {void}\n */\n QueryBuilder.prototype.setRulesFromSql = function (sqlString, sqlLocale) {\n sqlString = sqlString.replace(/`/g, '');\n var ruleModel = this.getRulesFromSql(sqlString, sqlLocale);\n this.setRules({ condition: ruleModel.condition, not: ruleModel.not, rules: ruleModel.rules });\n };\n /**\n * Get the rules from SQL query.\n *\n * @param {string} sqlString - 'sql String' to be passed to get the rule.\n * @param {boolean} sqlLocale - Set `true` if Localization for Sql query.\n * @returns {object} - Rules from SQL query\n */\n QueryBuilder.prototype.getRulesFromSql = function (sqlString, sqlLocale) {\n this.parser = [];\n this.sqlParser(sqlString, sqlLocale);\n this.setProperties({ rule: { condition: 'and', not: false, rules: [] } }, true);\n var rule = this.processParser(this.parser, this.rule, [0], sqlLocale);\n if (this.enableNotCondition) {\n return { condition: rule.condition, not: rule.not, rules: rule.rules };\n }\n else {\n return { condition: rule.condition, rules: rule.rules };\n }\n };\n /**\n * Gets the sql query from rules.\n *\n * @param {RuleModel} rule - 'rule' to be passed to get the sql.\n * @param {boolean} allowEscape - Set `true` if it exclude the escape character.\n * @param {boolean} sqlLocale - Set `true` if Localization for Sql query.\n * @returns {string} - Sql query from rules.\n */\n QueryBuilder.prototype.getSqlFromRules = function (rule, allowEscape, sqlLocale) {\n if (!rule) {\n rule = this.getValidRules();\n }\n rule = this.getRuleCollection(rule, false);\n var sqlString = this.getSqlString(this.getValidRules(rule), allowEscape, null, sqlLocale).replace(/\"/g, '\\'');\n return sqlString;\n };\n /**\n * Gets the parameter SQL query from rules.\n *\n * @param {RuleModel} rule – Specify the rule to be passed to get the parameter sql string.\n * @returns {ParameterizedSql} – Parameterized SQL query from rules.\n */\n QueryBuilder.prototype.getParameterizedSql = function (rule) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.moduleLoader.loadedModules.length) {\n if (!rule) {\n rule = this.getValidRules();\n }\n var obj = { sql: null };\n this.notify('query-library', { prop: 'getParameterSql', onPropertyChange: false, value: { rule: rule, obj: obj } });\n return obj['sql'];\n }\n else {\n console.warn('[WARNING] :: Module \"query-library\" is not available in QueryBuilder component! You either misspelled the module name or forgot to load it.');\n }\n return null;\n };\n /**\n * Sets the rules from the parameter sql query.\n *\n * @param { ParameterizedSql} sqlQuery – Specifies the parameter SQL to be passed to set the rule and load it to the query builder.\n * @returns {void}\n */\n QueryBuilder.prototype.setParameterizedSql = function (sqlQuery) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.moduleLoader.loadedModules.length) {\n var obj = { sql: null };\n this.notify('query-library', { prop: 'convertParamSqlToSql', onPropertyChange: false, value: { sql: sqlQuery, obj: obj } });\n var sql = obj['sql'];\n if (sql) {\n sql = sql.replace(/`/g, '');\n var ruleModel = this.getRulesFromSql(sql);\n this.setRules({ condition: ruleModel.condition, not: ruleModel.not, rules: ruleModel.rules });\n }\n }\n else {\n console.warn('[WARNING] :: Module \"query-library\" is not available in QueryBuilder component! You either misspelled the module name or forgot to load it.');\n }\n };\n /**\n * Gets the named parameter SQL query from rules.\n *\n * @param {RuleModel} rule – Specify the rule to be passed to get the named parameter SQL string.\n * @returns {ParameterizedNamedSql} – Parameterized Named SQL query from rules.\n */\n QueryBuilder.prototype.getParameterizedNamedSql = function (rule) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.moduleLoader.loadedModules.length) {\n if (!rule) {\n rule = this.getValidRules();\n }\n var obj = { sql: null };\n this.notify('query-library', { prop: 'getNamedParameterSql', onPropertyChange: false, value: { rule: rule, obj: obj } });\n return obj['sql'];\n }\n else {\n console.warn('[WARNING] :: Module \"query-library\" is not available in QueryBuilder component! You either misspelled the module name or forgot to load it.');\n }\n return null;\n };\n /**\n * Sets the rules from the named parameter SQL query.\n *\n * @param { ParameterizedNamedSql } sqlQuery – Specifies the named parameter SQL to be passed to set the rule and load it to the query builder.\n * @returns {void}\n */\n QueryBuilder.prototype.setParameterizedNamedSql = function (sqlQuery) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.moduleLoader.loadedModules.length) {\n var obj = { sql: null };\n this.notify('query-library', { prop: 'convertNamedParamSqlToSql', onPropertyChange: false, value: { sql: sqlQuery, obj: obj } });\n var sql = obj['sql'];\n if (sql) {\n sql = sql.replace(/`/g, '');\n var ruleModel = this.getRulesFromSql(sql);\n this.setRules({ condition: ruleModel.condition, not: ruleModel.not, rules: ruleModel.rules });\n }\n }\n else {\n console.warn('[WARNING] :: Module \"query-library\" is not available in QueryBuilder component! You either misspelled the module name or forgot to load it.');\n }\n };\n /**\n * Set the rules from Mongo query.\n *\n * @param {string} mongoQuery - 'sql String' to be passed to get the rule.\n * @param {boolean} mongoLocale - Set `true` if Localization for Mongo query.\n * @returns {void}\n */\n QueryBuilder.prototype.setMongoQuery = function (mongoQuery, mongoLocale) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.moduleLoader.loadedModules.length) {\n this.rule = { condition: 'and', not: false, rules: [] };\n this.notify('query-library', { prop: 'mongoParser', onPropertyChange: false, value: { mongoQuery: JSON.parse(mongoQuery), rule: this.rule, mongoLocale: mongoLocale } });\n }\n else {\n console.warn('[WARNING] :: Module \"query-library\" is not available in QueryBuilder component! You either misspelled the module name or forgot to load it.');\n }\n };\n /**\n * Gets the Mongo query from rules.\n *\n * @param {RuleModel} rule - 'rule' to be passed to get the sql.\n * @returns {object} - Sql query from rules.\n */\n QueryBuilder.prototype.getMongoQuery = function (rule) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.moduleLoader.loadedModules.length) {\n if (!rule) {\n rule = this.getValidRules();\n }\n var obj = { mongoQuery: null };\n this.notify('query-library', { prop: 'getMongoFromRules', onPropertyChange: false, value: { rule: rule, mongoQuery: '', obj: obj } });\n return obj['mongoQuery'];\n }\n else {\n console.warn('[WARNING] :: Module \"query-library\" is not available in QueryBuilder component! You either misspelled the module name or forgot to load it.');\n }\n return '';\n };\n /**\n * Clones the rule based on the rule ID to the specific group.\n *\n * @param {string} ruleID - Specifies the ruleID that needs to be cloned.\n * @param {string} groupID - Specifies the groupID in which the rule to be cloned.\n * @param {number} index - Specifies the index to insert the cloned rule inside the group.\n * @returns {void}\n */\n QueryBuilder.prototype.cloneRule = function (ruleID, groupID, index) {\n var getRule = this.getRule(ruleID.replace(this.element.id + '_', ''));\n var isCloneRule = this.showButtons.cloneRule;\n groupID = groupID.replace(this.element.id + '_', '');\n this.ruleIndex = index;\n this.cloneRuleBtnClick = true;\n this.showButtons.cloneRule = true;\n this.addRules([{\n 'label': getRule.label, 'field': getRule.field, 'type': getRule.type, 'operator': getRule.operator,\n 'value': getRule.value, 'condition': getRule.condition\n }], groupID);\n this.ruleIndex = -1;\n this.cloneRuleBtnClick = false;\n this.showButtons.cloneRule = isCloneRule;\n isCloneRule = false;\n };\n /**\n * Clones the group based on the group ID to the specific group.\n *\n * @param {string} groupID - Specifies the groupID that needs to be cloned.\n * @param {string} parentGroupID - Specifies the parentGroupID in which the group to be cloned.\n * @param {number} index - Specifies the index to insert the cloned group inside the parent group.\n * @returns {void}\n */\n QueryBuilder.prototype.cloneGroup = function (groupID, parentGroupID, index) {\n parentGroupID = parentGroupID.replace(this.element.id + '_', '');\n var group = this.getGroup(parentGroupID);\n var isCloneGroup = this.showButtons.cloneGroup;\n groupID = groupID.replace(this.element.id + '_', '');\n this.groupIndex = index;\n this.cloneGrpBtnClick = this.groupCloned = true;\n this.showButtons.cloneGroup = true;\n this.addGroups([{ 'condition': group.condition, 'not': group.not, 'rules': group.rules }], groupID);\n this.groupIndex = -1;\n this.cloneGrpBtnClick = false;\n this.showButtons.cloneGroup = isCloneGroup;\n isCloneGroup = this.groupCloned = false;\n };\n /**\n * Locks the rule based on the rule ID.\n *\n * @param {string} ruleID - Specifies the ruleID that needs to be locked.\n * @returns {void}\n */\n QueryBuilder.prototype.lockRule = function (ruleID) {\n if (ruleID.indexOf(this.element.id) < 0) {\n ruleID = this.element.id + '_' + ruleID;\n }\n var target = document.getElementById(ruleID).querySelectorAll('.e-lock-rule-btn')[0];\n this.ruleLock(target);\n };\n /**\n * Locks the group based on the group ID\n *\n * @param {string} groupID - Specifies the groupID that needs to be locked.\n * @returns {void}\n */\n QueryBuilder.prototype.lockGroup = function (groupID) {\n if (groupID.indexOf(this.element.id) < 0) {\n groupID = this.element.id + '_' + groupID;\n }\n var target = document.getElementById(groupID).querySelectorAll('.e-lock-grp-btn')[0];\n this.groupLock(target);\n };\n QueryBuilder.prototype.sqlParser = function (sqlString, sqlLocale) {\n var st = 0;\n var str;\n do {\n str = sqlString.slice(st);\n st += this.parseSqlStrings(str, sqlLocale);\n } while (str !== '');\n return this.parser;\n };\n QueryBuilder.prototype.parseSqlStrings = function (sqlString, sqlLocale) {\n var operators = ['=', '!=', '<=', '>=', '<', '>'];\n var conditions;\n if (sqlLocale) {\n conditions = [this.l10n.getConstant('AND').toUpperCase(), this.l10n.getConstant('OR').toUpperCase(), this.l10n.getConstant('NOT').toUpperCase()];\n }\n else {\n conditions = ['AND', 'OR', 'NOT'];\n }\n var subOp;\n if (sqlLocale) {\n subOp = [this.l10n.getConstant('In').toUpperCase(), this.l10n.getConstant('NotIn').toUpperCase(),\n this.l10n.getConstant('Like').toUpperCase(), this.l10n.getConstant('NotLike').toUpperCase(),\n this.l10n.getConstant('Between').toUpperCase(), this.l10n.getConstant('NotBetween').toUpperCase(),\n this.l10n.getConstant('IsNull').toUpperCase(), this.l10n.getConstant('IsNotNull').toUpperCase(),\n this.l10n.getConstant('IsEmpty').toUpperCase(), this.l10n.getConstant('IsNotEmpty').toUpperCase()];\n }\n else {\n subOp = ['IN', 'NOT IN', 'LIKE', 'NOT LIKE', 'BETWEEN', 'NOT BETWEEN', 'IS NULL', 'IS NOT NULL', 'IS EMPTY', 'IS NOT EMPTY'];\n }\n var regexStr;\n var regex;\n var matchValue;\n for (var i = 0, iLen = operators.length; i < iLen; i++) {\n regexStr = /^\\w+$/.test(operators[i]) ? '\\\\b' : '';\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var regExp = RegExp;\n regex = new regExp('^(' + operators[i] + ')' + regexStr, 'ig');\n if (regex.exec(sqlString)) {\n this.parser.push(['Operators', operators[i].toLowerCase()]);\n return operators[i].length;\n }\n }\n var lastPasrser = this.parser[this.parser.length - 1];\n if (!lastPasrser || (lastPasrser && lastPasrser[0] !== 'Literal')) {\n for (var i = 0, iLen = conditions.length; i < iLen; i++) {\n regexStr = /^\\w+$/.test(conditions[i]) ? '\\\\b' : '';\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var regExp = RegExp;\n regex = new regExp('^(' + conditions[i] + ')' + regexStr, 'ig');\n if (regex.exec(sqlString)) {\n this.parser.push(['Conditions', conditions[i].toLowerCase()]);\n return conditions[i].length;\n }\n }\n }\n for (var i = 0, iLen = subOp.length; i < iLen; i++) {\n regexStr = /^\\w+$/.test(subOp[i]) ? '\\\\b' : '';\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var regExp = RegExp;\n regex = new regExp('^(' + subOp[i] + ')' + regexStr, 'ig');\n if (regex.exec(sqlString)) {\n this.parser.push(['SubOperators', subOp[i].toLowerCase()]);\n return subOp[i].length;\n }\n }\n if (/^\\(/.exec(sqlString)) {\n this.parser.push(['Left', '(']);\n return 1;\n }\n if (/^\\)/.exec(sqlString)) {\n this.parser.push(['Right', ')']);\n return 1;\n }\n if (/^(true|false)/.exec(sqlString)) {\n matchValue = /^(true|false)/.exec(sqlString)[0];\n this.parser.push(['String', matchValue]);\n return matchValue.length;\n }\n if (/^null/.exec(sqlString)) {\n matchValue = /^null/.exec(sqlString)[0];\n this.parser.push(['String', null]);\n return matchValue.length;\n }\n if (/^`?([a-z_][a-z0-9_.\\\\[\\]\\\\(\\\\)]{0,}(\\\\:(number|float|string|date|boolean))?)`?/i.exec(sqlString)) {\n matchValue = /^`?([a-z_][a-z0-9_.\\\\[\\]\\\\(\\\\)]{0,}(\\\\:(number|float|string|date|boolean))?)`?/i.exec(sqlString)[1];\n this.parser.push(['Literal', matchValue]);\n return matchValue.length;\n }\n if (this.checkLiteral() && /^'?([a-z_][a-z0-9 _.\\\\[\\]\\\\(\\\\)-]{0,}(\\\\:(number|float|string|date|boolean))?)'?/i.exec(sqlString)) {\n matchValue = /^'?([a-z_][a-z0-9 _.\\\\[\\]\\\\(\\\\)-]{0,}(\\\\:(number|float|string|date|boolean))?)'?/i.exec(sqlString)[1];\n this.parser.push(['Literal', matchValue]);\n return matchValue.length + 2;\n }\n if (this.checkNumberLiteral(sqlString, sqlLocale)) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var regExValue = /^[0-9]+(\\.[0-9]+)$/.exec(sqlString);\n if (regExValue) {\n matchValue = regExValue[0];\n this.parser.push(['Literal', matchValue]);\n return matchValue.length;\n }\n }\n var singleString = this.getSingleQuoteString(sqlString);\n if (singleString !== '') {\n matchValue = singleString;\n if (matchValue[matchValue.length - 2] === '(') {\n var isClosed = false;\n for (var j = matchValue.length; j < sqlString.length; j++) {\n matchValue += sqlString[j];\n if (sqlString[j] === ')') {\n isClosed = true;\n }\n if (isClosed && sqlString[j] === '\\'') {\n break;\n }\n }\n }\n else if (sqlString[matchValue.length] && (sqlString[matchValue.length] !== ')') &&\n !this.checkCondition(sqlString, matchValue)) {\n matchValue = this.combineSingleQuoteString(sqlString, matchValue);\n }\n this.parser.push(['String', matchValue]);\n return matchValue.length;\n }\n var doubleString = this.getDoubleQuoteString(sqlString);\n if (doubleString !== '') {\n matchValue = doubleString;\n this.parser.push(['DoubleString', matchValue]);\n return matchValue.length;\n }\n if (/^\\d*\\.?\\d+/.exec(sqlString)) {\n matchValue = /^\\d*\\.?\\d+/.exec(sqlString)[0];\n this.parser.push(['Number', matchValue]);\n return matchValue.length;\n }\n if (/^-?\\d*\\.?\\d+/.exec(sqlString)) {\n matchValue = /^-?\\d*\\.?\\d+/.exec(sqlString)[0];\n this.parser.push(['Number', matchValue]);\n return matchValue.length;\n }\n return 1;\n };\n QueryBuilder.prototype.getDoubleQuoteString = function (sqlString) {\n var start = sqlString.indexOf('\"');\n if (start === 0) {\n var end = sqlString.indexOf('\"', start + 1);\n if (end !== -1) {\n return sqlString.substring(start, end + 1);\n }\n }\n return '';\n };\n QueryBuilder.prototype.checkCondition = function (sqlString, matchValue) {\n if (sqlString.slice(matchValue.length + 1, matchValue.length + 4) === 'AND' ||\n sqlString.slice(matchValue.length + 1, matchValue.length + 3) === 'OR') {\n return true;\n }\n return false;\n };\n QueryBuilder.prototype.getSingleQuoteString = function (sqlString, isBetween) {\n var start = sqlString.indexOf('\\'');\n if ((start !== -1 && isBetween) || (start === 0 && !isBetween)) {\n var end = sqlString.indexOf('\\'', start + 1);\n if (end !== -1) {\n return sqlString.substring(start, end + 1);\n }\n }\n return '';\n };\n QueryBuilder.prototype.combineSingleQuoteString = function (sqlString, matchValue) {\n if (sqlString[matchValue.length] && (sqlString[matchValue.length] !== ')') &&\n !this.checkCondition(sqlString, matchValue) && sqlString[matchValue.length] !== ',') {\n var tempMatchValue = matchValue.substring(0, matchValue.length - 1);\n var tempStr = sqlString.replace(tempMatchValue, '');\n var singleString = this.getSingleQuoteString(tempStr, true);\n if (singleString !== '') {\n var parsedValue = singleString.substring(1, singleString.length);\n matchValue += parsedValue;\n matchValue = this.combineSingleQuoteString(sqlString, matchValue);\n }\n }\n return matchValue;\n };\n QueryBuilder.prototype.checkLiteral = function () {\n var lastParser = this.parser[this.parser.length - 1];\n if (!lastParser) {\n return true;\n }\n else {\n var secParser = this.parser[this.parser.length - 2];\n var betweenParser = this.parser[this.parser.length - 3];\n if (lastParser[0] === 'Left' && (secParser && secParser[0] === 'Conditions')) {\n return true;\n }\n var betweenOperator = 'between';\n if (lastParser[0] === 'Conditions' && (betweenParser && betweenParser[1].indexOf(betweenOperator) < 0)) {\n return true;\n }\n }\n return false;\n };\n QueryBuilder.prototype.checkNumberLiteral = function (sqlString, sqlLocale) {\n var lastParser = this.parser[this.parser.length - 1];\n if (!lastParser) {\n return true;\n }\n else {\n if (/^[0-9]+(?:\\.[0-9]+)$/.exec(sqlString)) {\n var secParser = this.parser[this.parser.length - 2];\n var betweenParser = this.parser[this.parser.length - 3];\n if (lastParser[0] === 'Left' && (secParser && secParser[0] === 'Conditions')) {\n return true;\n }\n var betweenOperator = sqlLocale ? this.l10n.getConstant('Between').toLowerCase() : 'between';\n if (lastParser[0] === 'Conditions' && (betweenParser && betweenParser[1].indexOf(betweenOperator) < 0)) {\n return true;\n }\n }\n }\n return false;\n };\n QueryBuilder.prototype.getOperator = function (value, operator, sqlLocale) {\n var operators = {\n '=': 'equal', '!=': 'notequal', '<': 'lessthan', '>': 'greaterthan', '<=': 'lessthanorequal',\n '>=': 'greaterthanorequal', 'in': 'in', 'not in': 'notin', 'between': 'between', 'not between': 'notbetween',\n 'is empty': 'isempty', 'is null': 'isnull', 'is not null': 'isnotnull', 'is not empty': 'isnotempty'\n };\n if (sqlLocale) {\n var localeOperator = Object.keys(this.sqlOperators);\n for (var i = 0; i < localeOperator.length; i++) {\n if (this.sqlOperators[localeOperator[i]] === operator.toUpperCase()) {\n if (value && value.indexOf('%') === 0 && value[value.length - 1] === '%') {\n return (operator.toUpperCase() === 'NOT LIKE') ? 'notcontains' : 'contains';\n }\n else if (value && value.indexOf('%') !== 0 && value.indexOf('%') === value.length - 1) {\n return (operator.toUpperCase() === 'NOT LIKE') ? 'notstartswith' : 'startswith';\n }\n else if (value && value.indexOf('%') === 0 && value.indexOf('%') !== value.length - 1) {\n return (operator.toUpperCase() === 'NOT LIKE') ? 'notendswith' : 'endswith';\n }\n return localeOperator[i];\n }\n }\n return null;\n }\n if (value) {\n if (value.indexOf('%') === 0 && value[value.length - 1] === '%') {\n return (operator === 'not like') ? 'notcontains' : 'contains';\n }\n else if (value.indexOf('%') !== 0 && value.indexOf('%') === value.length - 1) {\n return (operator === 'not like') ? 'notstartswith' : 'startswith';\n }\n else if (value.indexOf('%') === 0 && value.indexOf('%') !== value.length - 1) {\n return (operator === 'not like') ? 'notendswith' : 'endswith';\n }\n }\n else {\n if (operator === 'not like') {\n return 'notequal';\n }\n else if (operator === 'like') {\n return 'equal';\n }\n }\n return operators[\"\" + operator];\n };\n QueryBuilder.prototype.getTypeFromColumn = function (rules) {\n var columnData = this.getColumn(rules.field);\n if (!isNullOrUndefined(columnData)) {\n return columnData.type;\n }\n return null;\n };\n QueryBuilder.prototype.getLabelFromColumn = function (field) {\n var label = '';\n var l = 0;\n if (this.separator !== '') {\n var fieldColl = field.split(this.separator);\n for (var i = 0; i < fieldColl.length; i++) {\n label += this.getLabelFromField(fieldColl, i + 1);\n l++;\n if (l < fieldColl.length) {\n label += this.separator;\n }\n }\n return label;\n }\n else {\n var labelItem = this.getColumn(field).label;\n return labelItem;\n }\n };\n QueryBuilder.prototype.getLabelFromField = function (field, startIdx) {\n var fieldName = '';\n var j = 0;\n for (var k = 0; k < startIdx; k++) {\n fieldName += field[k];\n j++;\n if (j < startIdx) {\n fieldName += this.separator;\n }\n }\n return this.getColumn(fieldName) ? this.getColumn(fieldName).label : '';\n };\n QueryBuilder.prototype.processParser = function (parser, rules, levelColl, sqlLocale) {\n var j;\n var jLen;\n var rule;\n var subRules;\n var numVal = [];\n var strVal = [];\n var k;\n var kLen;\n var l;\n var lLen;\n var grpCount;\n var operator;\n var isLeftOpened = false;\n var isNotOpened = false;\n for (var i = 0, iLen = parser.length; i < iLen; i++) {\n if (parser[i][0] === 'Literal') {\n var column = this.getColumn(parser[i][1]);\n rule = { label: (column && column.label) ? column.label : parser[i][1], field: parser[i][1] };\n if (parser[i + 1][0] === 'SubOperators') {\n if (parser[i + 1][1].indexOf('null') > -1 || parser[i + 1][1].indexOf('empty') > -1) {\n rule.operator = this.getOperator(' ', parser[i + 1][1], sqlLocale);\n rule.value = null;\n rule.type = this.getTypeFromColumn(rule);\n }\n else {\n if (parser.length === 3 && parser[2][0] === 'String' && (parser[2][1]).indexOf('%') !== -1) {\n var oper = parser[i + 2][1] ? parser[i + 2][1].replace(/'/g, '') : parser[i + 2][1];\n rule.operator = this.getOperator(oper, parser[i + 1][1], sqlLocale);\n }\n else {\n var oper = parser[i + 3][1] ? parser[i + 3][1].replace(/'/g, '') : parser[i + 3][1];\n rule.operator = this.getOperator(oper, parser[i + 1][1], sqlLocale);\n }\n }\n operator = parser[i + 1][1];\n i++;\n j = i + 1;\n jLen = iLen;\n if (sqlLocale && rule.operator === 'contains' || rule.operator === 'startswith' || rule.operator === 'endswith') {\n operator = 'like';\n }\n else if (sqlLocale && rule.operator === 'notcontains' || rule.operator === 'notstartswith' || rule.operator === 'notendswith') {\n operator = 'not like';\n }\n else if (sqlLocale) {\n operator = rule.operator;\n }\n for (j = i + 1; j < jLen; j++) {\n if (operator.indexOf('between') < 0 && parser[j][0] === 'Left') {\n isLeftOpened = true;\n }\n else if (parser[j][0] === 'Right' && isLeftOpened) {\n i = j;\n isLeftOpened = false;\n break;\n }\n else {\n if (operator.indexOf('null') > -1 || operator.indexOf('empty') > -1) {\n break;\n }\n if (operator.indexOf('like') > -1 && parser[j][0] === 'String') {\n var val = parser[j][1];\n if (parser[j][1] && parser[j][1][0] === '\\'') {\n val = parser[j][1].substring(1, parser[j][1].length - 1);\n }\n val = val ? val.replace(/%/g, '') : parser[j][1];\n rule.value = val;\n rule.type = 'string';\n }\n else if (operator.indexOf('between') > -1) {\n if (parser[j][0] === 'Literal' || parser[j][0] === 'Left') {\n break;\n }\n if (parser[j][0] === 'Number') {\n numVal.push(Number(parser[j][1]));\n }\n else if (parser[j][0] === 'String') {\n var val = parser[j][1];\n if (parser[j][1] && parser[j][1][0] === '\\'') {\n val = parser[j][1].substring(1, parser[j][1].length - 1);\n }\n strVal.push(val);\n }\n }\n else {\n if (parser[j][0] === 'Number') {\n numVal.push(Number(parser[j][1]));\n }\n else if (parser[j][0] === 'String') {\n var val = parser[j][1];\n if (parser[j][1] && parser[j][1][0] === '\\'') {\n val = parser[j][1].substring(1, parser[j][1].length - 1);\n }\n strVal.push(val);\n }\n }\n rule.type = this.getTypeFromColumn(rule);\n }\n }\n if (operator.indexOf('like') < 0) {\n if (parser[j - 1][0] === 'Number') {\n rule.value = numVal;\n rule.type = 'number';\n }\n else if (parser[j - 1][0] === 'String') {\n rule.value = strVal;\n rule.type = 'string';\n }\n else if (operator.indexOf('between') > -1 && parser[j - 1][0] === 'Conditions') {\n if (strVal.length !== 0) {\n rule.value = strVal;\n rule.type = 'string';\n }\n else {\n rule.value = numVal;\n rule.type = 'number';\n }\n }\n numVal = [];\n strVal = [];\n rule.type = this.getTypeFromColumn(rule);\n }\n if (this.enableSeparateConnector && parser[i + 1][0] === 'Conditions') {\n rule.condition = parser[i + 1][1];\n }\n }\n else if (parser[i + 1][0] === 'Operators') {\n rule.operator = this.getOperator(parser[i + 2][1], parser[i + 1][1], sqlLocale);\n if (rule.operator === 'equal' && parser[i + 2][0] === 'String' && parser[i + 2][1] === '\\'\\'') {\n rule.operator = 'isempty';\n }\n else if (rule.operator === 'notequal' && parser[i + 2][0] === 'String' && parser[i + 2][1] === '\\'\\'') {\n rule.operator = 'isnotempty';\n }\n if (parser[i + 2][0] === 'Number') {\n rule.type = 'number';\n rule.value = Number(parser[i + 2][1]);\n }\n else {\n rule.type = 'string';\n var val = parser[i + 2][1];\n if (val && val[0] === '\\'') {\n val = val.substring(1, val.length - 1);\n }\n rule.value = val;\n }\n if (this.enableSeparateConnector && parser[i + 3][0] === 'Conditions') {\n rule.condition = parser[i + 3][1];\n }\n rule.type = this.getTypeFromColumn(rule);\n }\n rules.rules.push(rule);\n }\n else if (parser[i][0] === 'Left') {\n if (!(parser[0][0] === 'Left') && (parser[i - 1][1] === 'not' || sqlLocale && this.l10n.getConstant('NOT').toLowerCase() === parser[i - 1][1])) {\n isNotOpened = true;\n continue;\n }\n this.parser = parser.splice(i + 1, iLen - (i + 1));\n if (this.enableNotCondition) {\n subRules = { condition: 'and', rules: [], not: false };\n }\n else {\n subRules = { condition: 'and', rules: [] };\n }\n grpCount = 0;\n kLen = rules.rules.length;\n for (k = 0; k < kLen; k++) { //To get the group position\n if (rules.rules[k].rules) {\n grpCount++;\n }\n }\n levelColl.push(grpCount);\n rules.rules.push(subRules);\n subRules = this.processParser(this.parser, subRules, levelColl, sqlLocale);\n return rules;\n }\n else if (parser[i][0] === 'Conditions' && !this.enableSeparateConnector) {\n if (parser[i][1] === 'not' || (sqlLocale && this.l10n.getConstant('NOT').toLowerCase() === parser[i][1])) {\n rules.not = true;\n }\n else {\n rules.condition = parser[i][1];\n }\n }\n else if (parser[i][0] === 'Right') {\n if (isNotOpened && parser[i + 1][0] === 'Right') {\n isNotOpened = false;\n continue;\n }\n this.parser = parser.splice(i + 1, iLen - (i + 1));\n levelColl.pop(); //To get the parent Group\n rules = this.rule;\n lLen = levelColl.length;\n for (l = 0; l < lLen; l++) {\n rules = this.findGroupByIdx(levelColl[l], rules, l === 0);\n }\n return this.processParser(this.parser, rules, levelColl, sqlLocale);\n }\n }\n return rules;\n };\n /**\n * Clone the Group\n *\n * @param {Element | string} target - 'target' to be passed to clone the group.\n * @returns {void}\n */\n QueryBuilder.prototype.groupClone = function (target) {\n var groupElem = target.closest('.e-rule-list').closest('.e-group-container');\n var targetGrpId = target.id.replace(this.element.id + '_', '');\n var groupId = groupElem.id.replace(this.element.id + '_', '');\n var group = this.getGroup(targetGrpId);\n this.groupIndex = Array.prototype.indexOf.call(target.closest('.e-rule-list').children, target.closest('.e-group-container'));\n this.addGroups([{ 'condition': group.condition, 'not': group.not, 'rules': group.rules }], groupId);\n this.groupIndex = -1;\n this.groupCloned = false;\n };\n QueryBuilder.prototype.ruleClone = function (target) {\n var ruleElem = closest(target, '.e-rule-container');\n var groupElem = target.closest('.e-rule-list').closest('.e-group-container');\n var getRule = this.getRule(target);\n var groupId = groupElem.id.replace(this.element.id + '_', '');\n var ruleElemColl = groupElem.querySelectorAll('.e-rule-container');\n for (var i = 0, iLen = ruleElemColl.length; i < iLen; i++) {\n if (ruleElem.id === ruleElemColl[i].id) {\n this.ruleIndex = i;\n }\n }\n if (this.enableSeparateConnector) {\n this.addRules([{\n 'label': getRule.label, 'field': getRule.field, 'type': getRule.type, 'operator': getRule.operator,\n 'value': getRule.value, 'condition': getRule.condition\n }], groupId);\n }\n else {\n this.addRules([{\n 'label': getRule.label, 'field': getRule.field, 'type': getRule.type, 'operator': getRule.operator,\n 'value': getRule.value\n }], groupId);\n }\n this.ruleIndex = -1;\n };\n QueryBuilder.prototype.ruleLock = function (target) {\n var ruleElem = closest(target, '.e-rule-container');\n var rule = this.getRule(ruleElem.id.replace(this.element.id + '_', ''));\n if (ruleElem.classList.contains('e-disable')) {\n rule.isLocked = false;\n this.lockItems = this.lockItems.filter(function (lockItem) { return lockItem !== ruleElem.id; });\n ruleElem.classList.remove('e-disable');\n this.disableRuleControls(target, ruleElem, false);\n target.children[0].classList.add('e-unlock');\n target.children[0].classList.remove('e-lock');\n target.setAttribute('title', this.l10n.getConstant('LockRule'));\n }\n else {\n rule.isLocked = true;\n if (this.lockItems.indexOf(ruleElem.id) < 0) {\n this.lockItems.splice(this.lockItems.length - 1, 0, ruleElem.id);\n }\n ruleElem.classList.add('e-disable');\n this.disableRuleControls(target, ruleElem, true);\n target.children[0].classList.add('e-lock');\n target.children[0].classList.remove('e-unlock');\n target.setAttribute('title', this.l10n.getConstant('UnlockRule'));\n }\n };\n QueryBuilder.prototype.groupLock = function (target) {\n var groupElem = closest(target, '.e-group-container');\n var group = this.getGroup(groupElem.id.replace(this.element.id + '_', ''));\n var isRoot = groupElem.id.indexOf('group0') > -1;\n if (groupElem.classList.contains('e-disable')) {\n if (isRoot) {\n var newGroup = {};\n newGroup.condition = group.condition;\n newGroup.not = group.not;\n newGroup.isLocked = false;\n this.setProperties({ rule: newGroup }, true);\n }\n else {\n group.isLocked = false;\n }\n this.lockItems = this.lockItems.filter(function (lockItem) { return lockItem !== groupElem.id; });\n groupElem.classList.remove('e-disable');\n this.disableHeaderControls(target, groupElem, false);\n target.children[0].classList.add('e-unlock');\n target.children[0].classList.remove('e-lock');\n target.setAttribute('title', this.l10n.getConstant('LockGroup'));\n this.updateLockItems();\n }\n else {\n if (isRoot) {\n var newGroup = {};\n newGroup.condition = group.condition;\n newGroup.not = group.not;\n newGroup.isLocked = true;\n this.setProperties({ rule: newGroup }, true);\n }\n else {\n group.isLocked = true;\n }\n if (this.lockItems.indexOf(groupElem.id) < 0) {\n this.lockItems.splice(this.lockItems.length - 1, 0, groupElem.id);\n }\n groupElem.classList.add('e-disable');\n this.disableHeaderControls(target, groupElem, true);\n target.children[0].classList.add('e-lock');\n target.children[0].classList.remove('e-unlock');\n target.setAttribute('title', this.l10n.getConstant('UnlockGroup'));\n }\n };\n QueryBuilder.prototype.updateLockItems = function () {\n for (var i = 0; i < this.lockItems.length; i++) {\n var idColl = this.lockItems[i].split('_');\n if (idColl.length > 2) {\n var ruleElem = this.element.querySelector('#' + this.lockItems[i]);\n var target = ruleElem.querySelector('.e-lock-rule-btn');\n ruleElem = closest(target, '.e-rule-container');\n if (!ruleElem.classList.contains('e-disable')) {\n this.ruleLock(target);\n }\n }\n else {\n var groupElem = this.element.querySelector('#' + this.lockItems[i]);\n var target = groupElem.querySelector('.e-lock-grp-btn');\n groupElem = closest(target, '.e-group-container');\n if (!groupElem.classList.contains('e-disable')) {\n this.groupLock(target);\n }\n }\n }\n };\n QueryBuilder.prototype.disableHeaderControls = function (target, groupElem, isDisabled) {\n var andElem = groupElem.querySelectorAll('.e-btngroup-and');\n var orElem = groupElem.querySelectorAll('.e-btngroup-or');\n var notElem = groupElem.querySelectorAll('.e-qb-toggle');\n var addElem = groupElem.querySelectorAll('.e-add-btn');\n var deleteGrpElem = groupElem.querySelectorAll('.e-deletegroup');\n var lockElem = groupElem.querySelectorAll('.e-lock-grp-btn');\n var cloneElem = groupElem.querySelectorAll('.e-clone-grp-btn');\n var groupContElem = groupElem.querySelectorAll('.e-group-container');\n var addCondition = groupElem.querySelectorAll('.e-add-condition-btn');\n var addGroup = groupElem.querySelectorAll('.e-add-group-btn');\n for (var i = 0; i < andElem.length; i++) {\n if (isDisabled) {\n if (groupContElem[i] && groupContElem[i].classList.contains('e-disable')) {\n groupContElem[i].classList.add('e-disable');\n }\n andElem[i].disabled = true;\n orElem[i].disabled = true;\n if (addElem[i]) {\n addElem[i].disabled = true;\n }\n if (addCondition[i]) {\n addCondition[i].disabled = true;\n }\n if (addGroup[i]) {\n addGroup[i].disabled = true;\n }\n if (notElem[i]) {\n notElem[i].disabled = true;\n }\n if (deleteGrpElem[i]) {\n deleteGrpElem[i].disabled = true;\n }\n if (cloneElem[i]) {\n cloneElem[i].disabled = true;\n }\n andElem[i].parentElement.classList.add('e-disabled');\n if (lockElem[i] && lockElem[i] !== target) {\n lockElem[i].disabled = true;\n lockElem[i].children[0].classList.remove('e-unlock');\n lockElem[i].children[0].classList.add('e-lock');\n }\n }\n else {\n if (groupContElem[i]) {\n groupContElem[i].classList.remove('e-disable');\n }\n andElem[i].disabled = false;\n orElem[i].disabled = false;\n if (addElem[i]) {\n addElem[i].disabled = false;\n }\n if (addCondition[i]) {\n addCondition[i].disabled = false;\n }\n if (addGroup[i]) {\n addGroup[i].disabled = false;\n }\n if (lockElem[i]) {\n lockElem[i].disabled = false;\n }\n if (notElem[i]) {\n notElem[i].disabled = false;\n }\n if (deleteGrpElem[i]) {\n deleteGrpElem[i].disabled = false;\n }\n if (cloneElem[i]) {\n cloneElem[i].disabled = false;\n }\n andElem[i].parentElement.classList.remove('e-disabled');\n if (lockElem[i]) {\n lockElem[i].children[0].classList.remove('e-lock');\n }\n if (lockElem[i]) {\n lockElem[i].children[0].classList.add('e-unlock');\n }\n }\n }\n this.disableRuleControls(target, groupElem, isDisabled);\n };\n QueryBuilder.prototype.disableRuleControls = function (target, groupElem, isDisabled) {\n var disableComponents = function (elements, componentGetter, isDisabled) {\n elements.forEach(function (element) {\n var component = componentGetter(element);\n if ('enabled' in component) {\n component.enabled = !isDisabled;\n }\n else if ('disabled' in component) {\n component.disabled = isDisabled;\n }\n });\n };\n var elements = {\n ddl: groupElem.querySelectorAll('.e-control.e-dropdownlist'),\n numeric: groupElem.querySelectorAll('.e-control.e-numerictextbox'),\n text: groupElem.querySelectorAll('.e-control.e-textbox'),\n date: groupElem.querySelectorAll('.e-control.e-datepicker'),\n checkbox: groupElem.querySelectorAll('.e-control.e-checkbox'),\n radio: groupElem.querySelectorAll('.e-control.e-radio'),\n multiSelect: groupElem.querySelectorAll('.e-control.e-multiselect'),\n deleteElem: groupElem.querySelectorAll('.e-rule-delete'),\n lockElem: groupElem.querySelectorAll('.e-lock-rule'),\n cloneElem: groupElem.querySelectorAll('.e-clone-rule'),\n ruleElem: groupElem.querySelectorAll('.e-rule-container'),\n ddTree: groupElem.querySelectorAll('.e-control.e-dropdowntree')\n };\n elements.deleteElem.forEach(function (elem, i) {\n if (isDisabled) {\n if (elements.ruleElem[i] && elements.ruleElem[i].classList.contains('e-disable')) {\n elements.ruleElem[i].classList.add('e-disable');\n }\n elements.deleteElem[i].disabled = true;\n if (elements.cloneElem[i]) {\n elements.cloneElem[i].disabled = true;\n }\n if (elements.lockElem[i] !== target) {\n elements.lockElem[i].disabled = true;\n elements.lockElem[i].children[0].classList.remove('e-unlock');\n elements.lockElem[i].children[0].classList.add('e-lock');\n }\n }\n else {\n if (elements.ruleElem[i]) {\n elements.ruleElem[i].classList.remove('e-disable');\n }\n if (elements.cloneElem[i]) {\n elements.cloneElem[i].disabled = false;\n }\n elements.deleteElem[i].disabled = false;\n elements.lockElem[i].disabled = false;\n elements.lockElem[i].children[0].classList.remove('e-lock');\n elements.lockElem[i].children[0].classList.add('e-unlock');\n }\n });\n disableComponents(elements.ddl, function (elem) { return getComponent(elem, 'dropdownlist'); }, isDisabled);\n disableComponents(elements.numeric, function (elem) { return getComponent(elem, 'numerictextbox'); }, isDisabled);\n disableComponents(elements.text, function (elem) { return getComponent(elem, 'textbox'); }, isDisabled);\n disableComponents(elements.date, function (elem) { return getComponent(elem, 'datepicker'); }, isDisabled);\n disableComponents(elements.checkbox, function (elem) { return getComponent(elem, 'checkbox'); }, isDisabled);\n disableComponents(elements.radio, function (elem) { return getComponent(elem, 'radio'); }, isDisabled);\n disableComponents(elements.multiSelect, function (elem) { return getComponent(elem, 'multiselect'); }, isDisabled);\n disableComponents(elements.ddTree, function (elem) { return getComponent(elem, 'dropdowntree'); }, isDisabled);\n };\n __decorate([\n Event()\n ], QueryBuilder.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], QueryBuilder.prototype, \"destroyed\", void 0);\n __decorate([\n Event()\n ], QueryBuilder.prototype, \"actionBegin\", void 0);\n __decorate([\n Event()\n ], QueryBuilder.prototype, \"beforeChange\", void 0);\n __decorate([\n Event()\n ], QueryBuilder.prototype, \"change\", void 0);\n __decorate([\n Event()\n ], QueryBuilder.prototype, \"dataBound\", void 0);\n __decorate([\n Event()\n ], QueryBuilder.prototype, \"ruleChange\", void 0);\n __decorate([\n Event()\n ], QueryBuilder.prototype, \"dragStart\", void 0);\n __decorate([\n Event()\n ], QueryBuilder.prototype, \"drag\", void 0);\n __decorate([\n Event()\n ], QueryBuilder.prototype, \"drop\", void 0);\n __decorate([\n Complex({}, ShowButtons)\n ], QueryBuilder.prototype, \"showButtons\", void 0);\n __decorate([\n Property(false)\n ], QueryBuilder.prototype, \"summaryView\", void 0);\n __decorate([\n Property(false)\n ], QueryBuilder.prototype, \"allowValidation\", void 0);\n __decorate([\n Property('Default')\n ], QueryBuilder.prototype, \"fieldMode\", void 0);\n __decorate([\n Property([])\n ], QueryBuilder.prototype, \"columns\", void 0);\n __decorate([\n Property(null)\n ], QueryBuilder.prototype, \"fieldModel\", void 0);\n __decorate([\n Property(null)\n ], QueryBuilder.prototype, \"operatorModel\", void 0);\n __decorate([\n Property(null)\n ], QueryBuilder.prototype, \"valueModel\", void 0);\n __decorate([\n Property()\n ], QueryBuilder.prototype, \"headerTemplate\", void 0);\n __decorate([\n Property('')\n ], QueryBuilder.prototype, \"cssClass\", void 0);\n __decorate([\n Property([])\n ], QueryBuilder.prototype, \"dataSource\", void 0);\n __decorate([\n Property('Horizontal')\n ], QueryBuilder.prototype, \"displayMode\", void 0);\n __decorate([\n Property(false)\n ], QueryBuilder.prototype, \"enablePersistence\", void 0);\n __decorate([\n Property('Default')\n ], QueryBuilder.prototype, \"sortDirection\", void 0);\n __decorate([\n Property(5)\n ], QueryBuilder.prototype, \"maxGroupCount\", void 0);\n __decorate([\n Property('auto')\n ], QueryBuilder.prototype, \"height\", void 0);\n __decorate([\n Property('auto')\n ], QueryBuilder.prototype, \"width\", void 0);\n __decorate([\n Property(false)\n ], QueryBuilder.prototype, \"matchCase\", void 0);\n __decorate([\n Property(0)\n ], QueryBuilder.prototype, \"immediateModeDelay\", void 0);\n __decorate([\n Property(false)\n ], QueryBuilder.prototype, \"enableNotCondition\", void 0);\n __decorate([\n Property(false)\n ], QueryBuilder.prototype, \"readonly\", void 0);\n __decorate([\n Property(true)\n ], QueryBuilder.prototype, \"addRuleToNewGroups\", void 0);\n __decorate([\n Property(false)\n ], QueryBuilder.prototype, \"autoSelectField\", void 0);\n __decorate([\n Property(true)\n ], QueryBuilder.prototype, \"autoSelectOperator\", void 0);\n __decorate([\n Property('')\n ], QueryBuilder.prototype, \"separator\", void 0);\n __decorate([\n Property(false)\n ], QueryBuilder.prototype, \"enableSeparateConnector\", void 0);\n __decorate([\n Complex({ condition: 'and', rules: [] }, Rule)\n ], QueryBuilder.prototype, \"rule\", void 0);\n __decorate([\n Property(false)\n ], QueryBuilder.prototype, \"allowDragAndDrop\", void 0);\n QueryBuilder = __decorate([\n NotifyPropertyChanges\n ], QueryBuilder);\n return QueryBuilder;\n}(Component));\nexport { QueryBuilder };\nvar LevelColl = /** @class */ (function () {\n function LevelColl() {\n }\n return LevelColl;\n}());\n","import { extend, isNullOrUndefined } from '@syncfusion/ej2-base';\nvar QueryLibrary = /** @class */ (function () {\n function QueryLibrary(parent) {\n this.parent = parent;\n this.addEventListener();\n }\n QueryLibrary.prototype.destroy = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.removeEventListener();\n };\n QueryLibrary.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on('query-library', this.queryLibrary, this);\n this.parent.on('destroyed', this.destroy, this);\n };\n QueryLibrary.prototype.removeEventListener = function () {\n this.parent.off('query-library', this.queryLibrary);\n this.parent.off('destroyed', this.destroy);\n };\n QueryLibrary.prototype.queryLibrary = function (args) {\n switch (args.prop) {\n case 'getMongoFromRules':\n args.value['obj']['mongoQuery'] = this.getMongoFromRules(args.value['rule'], args.value['mongoQuery']);\n break;\n case 'mongoParser':\n this.mongoParser(args.value['mongoQuery'], args.value['rule'], args.value['mongoLocale']);\n break;\n case 'getParameterSql':\n args.value['obj']['sql'] = this.getParameterSql(args.value['rule']);\n break;\n case 'getNamedParameterSql':\n args.value['obj']['sql'] = this.getNamedParameterSql(args.value['rule']);\n break;\n case 'convertParamSqlToSql':\n args.value['obj']['sql'] = this.convertParamSqlToSql(args.value['sql']);\n break;\n case 'convertNamedParamSqlToSql':\n args.value['obj']['sql'] = this.convertNamedParamSqlToSql(args.value['sql']);\n break;\n }\n };\n QueryLibrary.prototype.getMongoFromRules = function (rule, mongoQuery) {\n mongoQuery = '{';\n if (rule.condition === 'or') {\n mongoQuery += '\"$or\":[';\n mongoQuery = this.convertMongoQuery(rule.rules, mongoQuery) + ']';\n }\n else {\n mongoQuery += '\"$and\":[';\n mongoQuery = this.convertMongoQuery(rule.rules, mongoQuery) + ']';\n }\n mongoQuery += '}';\n return mongoQuery;\n };\n QueryLibrary.prototype.getOperatorFromMongoOperator = function (operator) {\n var operatorValue;\n switch (operator) {\n case '$ne':\n operatorValue = 'notequal';\n break;\n case '$gt':\n operatorValue = 'greaterthan';\n break;\n case '$gte':\n operatorValue = 'greaterthanorequal';\n break;\n case '$lt':\n operatorValue = 'lessthan';\n break;\n case '$lte':\n operatorValue = 'lessthanorequal';\n break;\n case '$nin':\n operatorValue = 'notin';\n break;\n }\n return operatorValue;\n };\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n QueryLibrary.prototype.convertMongoQuery = function (rules, mongoQuery) {\n var _this = this;\n var i = 0;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n rules.forEach(function (item) {\n i++;\n mongoQuery += '{';\n if (item.rules !== undefined) {\n if (item.condition === 'or') {\n mongoQuery += ' \"$or\":[';\n mongoQuery = _this.convertMongoQuery(item.rules, mongoQuery) + ']';\n }\n else {\n mongoQuery += ' \"$and\":[';\n mongoQuery = _this.convertMongoQuery(item.rules, mongoQuery) + ']';\n }\n }\n var itVal = item.type === 'string' && item.operator !== 'in' && item.operator !== 'notin' && item.value && item.value.trim() !== '' ? item.value.replace(/'/g, '\\\\') : '';\n if (item.type === 'string' && (item.operator === 'in' || item.operator === 'notin') && item.value && item.value.length === 1) {\n itVal = item.value[0].replace(/'/g, '\\\\');\n }\n var field = item.field ? item.field.substring(0) : '';\n switch (item.operator) {\n case 'contains':\n mongoQuery += '\"' + field + '\":{\"$regex\":\"' + itVal + '\"}';\n break;\n case 'notcontains':\n mongoQuery += '\"' + field + '\":{\"$not\":{\"$regex\":\"' + item.value + '\"}}';\n break;\n case 'startswith':\n mongoQuery += '\"' + field + '\":{\"$regex\":\"^' + itVal + '\"}';\n break;\n case 'notstartswith':\n mongoQuery += '\"' + field + '\":{\"$not\":{\"$regex\":\"^' + item.value + '\"}}';\n break;\n case 'endswith':\n mongoQuery += '\"' + field + '\":{\"$regex\":\"' + itVal + '$\"}';\n break;\n case 'notendswith':\n mongoQuery += '\"' + field + '\":{\"$not\":{\"$regex\":\"' + item.value + '$\"}}';\n break;\n case 'isnull':\n mongoQuery += '\"' + field + '\": null';\n break;\n case 'isnotnull':\n mongoQuery += '\"' + field + '\":{\"$ne\": null}';\n break;\n case 'isempty':\n mongoQuery += '\"' + field + '\": \"\"';\n break;\n case 'isnotempty':\n mongoQuery += '\"' + field + '\":{\"$ne\": \"\"}';\n break;\n case 'equal':\n if (item.type === 'string') {\n mongoQuery += '\"' + field + '\":\"' + itVal + '\"';\n }\n else if (item.type === 'date') {\n mongoQuery += '\"' + field + '\":\"' + item.value + '\"';\n }\n else if (item.type === 'boolean') {\n mongoQuery += '\"' + field + '\":' + item.value + '';\n }\n else {\n mongoQuery += '\"' + field + '\":' + item.value + '';\n }\n break;\n case 'notequal':\n if (item.type === 'string') {\n mongoQuery += '\"' + field + '\":{\"$ne\":\"' + itVal + '\"}';\n }\n else if (item.type === 'date') {\n mongoQuery += '\"' + field + '\":{\"$ne\":\"' + item.value + '\"}';\n }\n else {\n mongoQuery += '\"' + field + '\":{\"$ne\":' + item.value + '}';\n }\n break;\n case 'in':\n if (item.type === 'string') {\n if (item.value.length > 1) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var s = item.value.map(function (x, j) { return (j < item.value.length ? \"\\\"\" + x + \"\\\"\" : ''); }).toString();\n s = s.endsWith(',') ? s.substring(0, s.length - 1) : s;\n mongoQuery += '\"' + field + '\": { \"$in\": [' + s + ']}';\n }\n else {\n mongoQuery += '\"' + field + '\": { \"$in\": [\"' + itVal + '\"]}';\n }\n }\n else if (item.type === 'number') {\n if (item.value.length > 1) {\n mongoQuery += '\"' + field + '\": { \"$in\": [' + item.value.toString() + ']}';\n }\n else {\n mongoQuery += '\"' + field + '\": { \"$in\": [' + item.value + ']}';\n }\n }\n break;\n case 'notin':\n if (item.type === 'string') {\n if (item.value.length > 1) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var s = item.value.map(function (x, j) { return (j < item.value.length ? \"\\\"\" + x + \"\\\"\" : ''); }).toString();\n s = s.endsWith(',') ? s.substring(0, s.length - 1) : s;\n mongoQuery += '\"' + field + '\": { \"$nin\": [' + s + ']}';\n }\n else {\n mongoQuery += '\"' + field + '\": { \"$nin\": [\"' + itVal + '\"]}';\n }\n }\n else if (item.type === 'number') {\n if (item.value.length > 1) {\n mongoQuery += '\"' + field + '\": { \"$nin\": [' + item.value.toString() + ']}';\n }\n else {\n mongoQuery += '\"' + field + '\": { \"$nin\": [' + item.value + ']}';\n }\n }\n break;\n case 'greaterthan':\n if (item.type === 'number') {\n mongoQuery += '\"' + field + '\": { \"$gt\": ' + item.value + '}';\n }\n else {\n mongoQuery += '\"' + field + '\": { \"$gt\": \"' + item.value + '\"}';\n }\n break;\n case 'greaterthanorequal':\n if (item.type === 'number') {\n mongoQuery += '\"' + field + '\": { \"$gte\": ' + item.value + '}';\n }\n else {\n mongoQuery += '\"' + field + '\": { \"$gte\": \"' + item.value + '\"}';\n }\n break;\n case 'between':\n if (item.type === 'number') {\n mongoQuery += '\"' + field + '\": {\"$gte\":' + item.value[0] + ', \"$lte\":' + item.value[1] + '}';\n }\n else {\n mongoQuery += '\"' + field + '\": {\"$gte\": \"' + item.value[0] + '\", \"$lte\": \"' + item.value[1] + '\"}';\n }\n break;\n case 'notbetween':\n if (item.type === 'number') {\n mongoQuery += '\"$or\":[{\"' + field + '\": {\"$lt\":' + item.value[0] + '}}, {\"' + field + '\": {\"$gt\":' + item.value[1] + '}}]';\n }\n else {\n mongoQuery += '\"$or\":[{\"' + field + '\": {\"$lt\": \"' + item.value[0] + '\"}}, {\"' + field + '\": {\"$gt\": \"' + item.value[1] + '\"}}]';\n }\n break;\n case 'lessthan':\n if (item.type === 'number') {\n mongoQuery += '\"' + field + '\": { \"$lt\": ' + item.value + '}';\n }\n else {\n mongoQuery += '\"' + field + '\": { \"$lt\": \"' + item.value + '\"}';\n }\n break;\n case 'lessthanorequal':\n if (item.type === 'number') {\n mongoQuery += '\"' + field + '\": { \"$lte\": ' + item.value + '}';\n }\n else {\n mongoQuery += '\"' + field + '\": { \"$lte\": \"' + item.value + '\"}';\n }\n break;\n }\n mongoQuery += '}';\n if (rules.length !== i) {\n mongoQuery += ',';\n }\n });\n return mongoQuery;\n };\n QueryLibrary.prototype.mongoParser = function (mongoQuery, rule, mongoLocale) {\n var mongoList;\n if (Object.keys(mongoQuery).indexOf('$and') > -1) {\n mongoList = mongoQuery['$and'];\n rule.condition = 'and';\n }\n else if (Object.keys(mongoQuery).indexOf('$or') > -1) {\n mongoList = mongoQuery['$or'];\n rule.condition = 'or';\n }\n rule.rules = [];\n this.mongoRecursion(mongoList, rule.rules, mongoLocale);\n };\n QueryLibrary.prototype.mongoRecursion = function (mongoList, rules, mongoLocale) {\n var operatorValue;\n var type;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var stringValue;\n var key;\n var betweenValue;\n var fieldType;\n var condition;\n var value;\n var subRules;\n var rule;\n var keyObj;\n var ruleValue;\n for (var i = 0, len = mongoList.length; i < len; i++) {\n var betweenOperatorArray = [];\n var inOperatorArray = [];\n condition = Object.keys(mongoList[i])[0];\n value = mongoList[i][condition];\n if (condition === '$and') {\n if (this.parent.enableNotCondition) {\n subRules = { condition: condition.replace('$', ''), rules: [], not: false };\n }\n else {\n subRules = { condition: condition.replace('$', ''), rules: [] };\n }\n rules.push(subRules);\n this.mongoRecursion(mongoList[i][condition], rules[rules.length - 1].rules, mongoLocale);\n }\n else if (condition === '$or') {\n var notBetween = void 0;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var innerObject = [];\n var keys = [];\n var firstKey = [];\n var secondKey = [];\n var innerKeys = [];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var firstValue = [];\n var secondValue = [];\n var innerFirstValue = [];\n var innerSecondValue = [];\n if (Array.isArray(value) && value.length === 2) {\n keys = Object.keys(value);\n innerFirstValue = value[keys[0]];\n innerSecondValue = value[keys[1]];\n if (typeof innerFirstValue === 'object') {\n innerObject = Object.keys(innerFirstValue)[0];\n innerKeys = Object.keys(innerFirstValue[Object.keys(innerFirstValue)[0]]);\n firstKey = innerKeys[0];\n secondKey = Object.keys(innerSecondValue[Object.keys(innerSecondValue)[0]])[0];\n if (firstKey === '$lt' && secondKey === '$gt') {\n operatorValue = 'notbetween';\n // eslint-disable-next-line security/detect-object-injection\n firstValue = innerFirstValue[innerObject][firstKey];\n // eslint-disable-next-line security/detect-object-injection\n secondValue = innerSecondValue[innerObject][secondKey];\n type = typeof firstValue === 'number' ? 'number' : 'date';\n ruleValue = [firstValue, secondValue];\n rule = { field: innerObject, label: innerObject, value: ruleValue, operator: operatorValue, type: type };\n rules.push(rule);\n notBetween = true;\n }\n }\n }\n if (!notBetween) {\n if (this.parent.enableNotCondition) {\n subRules = { condition: condition.replace('$', ''), rules: [], not: false };\n }\n else {\n subRules = { condition: condition.replace('$', ''), rules: [] };\n }\n rules.push(subRules);\n this.mongoRecursion(mongoList[i][condition], rules[rules.length - 1].rules, mongoLocale);\n }\n }\n else {\n value = mongoList[i][condition];\n if (value === null) { // isnull operator\n operatorValue = 'isnull';\n }\n if (typeof value === 'boolean') { // boolean type values\n operatorValue = 'equal';\n type = 'boolean';\n ruleValue = value;\n }\n if (typeof (value) === 'number') {\n ruleValue = value;\n type = 'number';\n operatorValue = 'equal';\n }\n else if (typeof (value) === 'object' && value !== null) {\n keyObj = Object.keys(value);\n for (var i_1 = 0; i_1 < keyObj.length; i_1++) {\n key = keyObj[i_1];\n stringValue = (value)[keyObj[i_1]];\n if (key === '$ne' && isNullOrUndefined(stringValue)) { // not null operator\n operatorValue = 'isnotnull';\n ruleValue = null;\n }\n if (key === '$ne' && typeof stringValue === 'boolean') { // not equal operator for boolean\n operatorValue = 'notequal';\n ruleValue = stringValue;\n type = 'boolean';\n }\n if (keyObj.length >= 2 && keyObj[i_1]) {\n if (typeof (stringValue) == 'object') { // between and notbetween operators\n operatorValue = 'notbetween';\n condition = Object.keys(stringValue)[0];\n betweenValue = [Object.keys(stringValue[condition])[0]];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n betweenOperatorArray.push(stringValue[condition][betweenValue]);\n type = 'number';\n }\n else {\n operatorValue = 'between';\n betweenOperatorArray.push(stringValue);\n }\n if (typeof (stringValue) === 'number') {\n type = 'number';\n }\n }\n else if (typeof (stringValue) === 'object' && stringValue !== null) { // \"in\" and \"notin\" operator\n if (key === '$not' && Object.keys(stringValue)[0] === '$regex') {\n if (stringValue['$regex'].indexOf('^') > -1) {\n operatorValue = 'notstartswith';\n ruleValue = stringValue['$regex'].replace('^', '');\n }\n else if (stringValue['$regex'].indexOf('$') > -1) {\n operatorValue = 'notendswith';\n ruleValue = stringValue['$regex'].replace('$', '');\n }\n else {\n operatorValue = 'notcontains';\n ruleValue = stringValue['$regex'];\n }\n }\n else {\n operatorValue = key === '$in' ? 'in' : 'notin';\n inOperatorArray = stringValue;\n type = typeof (stringValue[0]) === 'number' ? 'number' : 'string';\n }\n }\n else if (typeof (stringValue) === 'number') { // number type values\n operatorValue = this.getOperatorFromMongoOperator(key);\n type = 'number';\n ruleValue = stringValue;\n }\n if (typeof (stringValue) === 'string') { // string type values\n if (key === '$regex') {\n operatorValue = 'contains';\n ruleValue = stringValue;\n type = 'string';\n }\n if (key === '$ne') { // not equal\n if (stringValue !== null && stringValue.length > 0 && isNaN(Date.parse(stringValue))) {\n operatorValue = 'notequal';\n ruleValue = stringValue;\n }\n else if (isNullOrUndefined(stringValue)) { // is not null operator\n operatorValue = 'isnotnull';\n ruleValue = stringValue;\n }\n else if (stringValue === '') { // is not empty operator\n operatorValue = 'isnotempty';\n ruleValue = stringValue;\n }\n type = 'string';\n }\n if (stringValue.indexOf('^') > -1) {\n operatorValue = 'startswith';\n ruleValue = stringValue.replace('^', '');\n type = 'string';\n }\n if (stringValue.indexOf('$') > -1 && key !== '$not') {\n operatorValue = 'endswith';\n ruleValue = stringValue.replace('$', '');\n type = 'string';\n }\n for (var _i = 0, _a = this.parent.columns; _i < _a.length; _i++) {\n var column = _a[_i];\n if (column.field === condition) {\n fieldType = column.type;\n break;\n }\n }\n if (!isNaN(Date.parse(stringValue)) || fieldType === 'date') { // Date type operators\n operatorValue = operatorValue || this.getOperatorFromMongoOperator(key);\n type = 'date';\n ruleValue = stringValue;\n }\n }\n }\n }\n else if (value && typeof (value) === 'string' && !isNaN(Date.parse(value))) {\n operatorValue = 'equal';\n ruleValue = value;\n type = 'date';\n }\n else if (typeof (value) === 'string' && value !== '' && value !== 'true' && value !== 'false') {\n operatorValue = 'equal';\n ruleValue = value;\n type = 'string';\n }\n else if (typeof (value) === 'string' && value === '') {\n operatorValue = 'isempty';\n ruleValue = value;\n type = 'string';\n }\n if (betweenOperatorArray && betweenOperatorArray.length > 1) { // between opertor value\n rule = { field: condition, label: condition, value: betweenOperatorArray, operator: operatorValue, type: type };\n }\n else if (inOperatorArray && inOperatorArray.length > 1) { // in operator value\n rule = { field: condition, label: condition, value: inOperatorArray, operator: operatorValue, type: type };\n }\n else {\n rule = { field: condition, label: condition, value: ruleValue, operator: operatorValue, type: type };\n }\n rules.push(rule);\n operatorValue = '';\n }\n }\n };\n QueryLibrary.prototype.convertParamSqlToSql = function (sql) {\n var paramSql = sql.sql;\n var paramValues = sql.params;\n var parts = paramSql.split('?');\n var normalSql = parts[0];\n for (var i = 0; i < paramValues.length; i++) {\n normalSql += (typeof (paramValues[i]) === 'string' ? \"'\" + paramValues[i] + \"'\" + parts[i + 1] : paramValues[i] + parts[i + 1]);\n }\n if (normalSql.length >= 2 && normalSql[0] === '(' && normalSql[normalSql.length - 1] === ')') {\n normalSql = normalSql.slice(1, -1);\n }\n normalSql = normalSql.replace(/!= ''(?! =)/g, 'IS NOT EMPTY').replace(/= ''/g, 'IS EMPTY');\n return normalSql;\n };\n QueryLibrary.prototype.convertNamedParamSqlToSql = function (sql) {\n var namedParamSql = sql.sql;\n var params = sql.params;\n var normalSql = namedParamSql;\n Object.keys(params).forEach(function (paramName) {\n var paramValue = params[paramName];\n paramName = ':' + paramName;\n normalSql = normalSql.replace(paramName, typeof (paramValue) === 'string' ? \"'\" + paramValue + \"'\" : String(paramValue));\n });\n if (normalSql.length >= 2 && normalSql[0] === '(' && normalSql[normalSql.length - 1] === ')') {\n normalSql = normalSql.slice(1, -1);\n }\n normalSql = normalSql.replace(/!= ''(?! =)/g, 'IS NOT EMPTY').replace(/= ''/g, 'IS EMPTY');\n return normalSql;\n };\n QueryLibrary.prototype.getParameterSql = function (qbrule) {\n var qbRule = extend({}, qbrule, null, true);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var value = this.updateRuleValue(qbRule, false);\n return this.getParameterSQLVal(this.parent.getSqlFromRules(qbRule), value['ruleVal']);\n };\n QueryLibrary.prototype.getNamedParameterSql = function (qbrule) {\n var qbRule = extend({}, qbrule, null, true);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var value = this.updateRuleValue(qbRule, true);\n return this.getNamedParameterSQLVal(this.parent.getSqlFromRules(qbRule), value['namedRuleVal']);\n };\n QueryLibrary.prototype.getParameterSQLVal = function (content, ruleValue) {\n var replacedString = content.replace(/[%']/g, '');\n return { sql: '(' + replacedString + ')', params: ruleValue };\n };\n QueryLibrary.prototype.getNamedParameterSQLVal = function (content, ruleValue) {\n var replacedString = content.replace(/[%']/g, '');\n return { sql: '(' + replacedString + ')', params: ruleValue };\n };\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n QueryLibrary.prototype.updateRuleValue = function (rule, isNamedParameter) {\n var ruleVal = [];\n var namedRuleVal = {};\n var namedParameters = [];\n return this.updateValue(rule.rules, isNamedParameter, ruleVal, namedRuleVal, namedParameters);\n };\n QueryLibrary.prototype.updateValue = function (rules, isNamedParameter, ruleVal, \n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n namedRuleVal, namedParameters) {\n if (isNullOrUndefined(rules)) {\n return { ruleVal: ruleVal, namedRuleVal: namedRuleVal };\n }\n for (var i = 0; i < rules.length; i++) {\n if (rules[i].rules) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var value = this.updateValue(rules[i].rules, isNamedParameter, ruleVal, namedRuleVal, namedParameters);\n ruleVal = value['ruleVal'];\n namedRuleVal = value['namedRuleVal'];\n }\n else {\n var namedField = void 0;\n if (rules[i].value instanceof Array) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n for (var j = 0; j < (rules[i].value).length; j++) {\n if (isNamedParameter) {\n namedField = this.getNamedParameter(rules[i].field, namedParameters);\n }\n if (!isNullOrUndefined(rules[i].value[j])) {\n if (rules[i].type === 'string' || rules[i].type === 'date') {\n if (isNamedParameter) {\n namedRuleVal[namedField] = rules[i].value[j];\n }\n else {\n ruleVal.push(rules[i].value[j]);\n }\n }\n else {\n if (isNamedParameter) {\n namedRuleVal[namedField] = rules[i].value[j];\n }\n else {\n ruleVal.push(rules[i].value[j]);\n }\n }\n }\n if (isNamedParameter) {\n rules[i].value[j] = ':' + namedField;\n }\n else {\n rules[i].value[j] = '?';\n }\n }\n }\n else {\n if (isNamedParameter) {\n namedField = this.getNamedParameter(rules[i].field, namedParameters);\n }\n if (rules[i].operator.indexOf('null') < 1) {\n if (rules[i].type !== 'string' || (rules[i].type === 'string' && (rules[i].value !== '' || rules[i].value === 0))) {\n if (rules[i].type === 'string' || rules[i].type === 'date') {\n if (rules[i].operator.indexOf('empty') < 1) {\n var value = rules[i].value.toString();\n switch (rules[i].operator) {\n case 'startswith':\n case 'notstartswith':\n value = value + '%';\n break;\n case 'endswith':\n case 'notendswith':\n value = '%' + value;\n break;\n case 'contains':\n case 'notcontains':\n value = '%' + value + '%';\n break;\n }\n if (isNamedParameter) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n namedRuleVal[namedField] = value;\n }\n else {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ruleVal.push(value);\n }\n }\n else {\n if (isNamedParameter) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n namedRuleVal[namedField] = '';\n }\n else {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ruleVal.push('');\n }\n if (rules[i].operator === 'isempty') {\n rules[i].operator = 'equal';\n }\n else {\n rules[i].operator = 'notequal';\n }\n }\n }\n else {\n if (!isNullOrUndefined(rules[i].value)) {\n if (isNamedParameter) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n namedRuleVal[namedField] = rules[i].value;\n }\n else {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ruleVal.push(rules[i].value);\n }\n }\n }\n if (isNamedParameter) {\n rules[i].value = ':' + namedField;\n }\n else {\n rules[i].value = '?';\n }\n }\n }\n }\n }\n }\n return { ruleVal: ruleVal, namedRuleVal: namedRuleVal };\n };\n QueryLibrary.prototype.getNamedParameter = function (field, namedParameters) {\n var newField = null;\n if (namedParameters.length > 0) {\n for (var i = namedParameters.length - 1; i >= 0; i--) {\n var currField = namedParameters[i];\n if (currField.indexOf(field) > -1) {\n var idx = parseInt(currField.split('_')[1], 10) + 1;\n newField = field + '_' + idx;\n namedParameters.push(newField);\n break;\n }\n }\n }\n if (!newField) {\n newField = field + '_1';\n namedParameters.push(newField);\n }\n return newField;\n };\n QueryLibrary.prototype.getModuleName = function () {\n return 'query-library';\n };\n return QueryLibrary;\n}());\nexport { QueryLibrary };\n","import * as index from './index';\nindex.QueryBuilder.Inject(index.QueryLibrary);\nexport * from './index';\n"],"names":["__extends","extendStatics","d","b","Object","setPrototypeOf","__proto__","Array","p","hasOwnProperty","__","this","constructor","prototype","create","__assign","assign","t","s","i","n","arguments","length","call","apply","__decorate","decorators","target","key","desc","c","r","getOwnPropertyDescriptor","Reflect","decorate","defineProperty","Columns","_super","Property","isRequired","min","max","Number","MAX_VALUE","ChildProperty","Rule","Collection","Value","ShowButtons","QueryBuilder","options","element","_this","isReadonly","fields","text","value","updatedRule","not","condition","isLocked","isLocale","isRefreshed","isNotified","isAddSuccess","isNotValueChange","isFieldChange","isFieldClose","isDestroy","isGetNestedData","isCustomOprCols","groupCounter","lockItems","groupIndex","ruleIndex","isLastGroup","cloneGrpBtnClick","isMiddleGroup","cloneRuleBtnClick","isValueEmpty","isPropChange","isRuleClicked","groupCloned","isRequestSent","isPopupScroll","MultiSelect","Inject","CheckBoxSelection","getPersistData","addOnPersist","reset","isImportRules","bodyElem","querySelector","inputElements","querySelectorAll","currentIndex","processBatch","endIndex","Math","className","indexOf","tooltip","getComponent","destroy","parentElement","e","console","warn","requestAnimationFrame","textContent","fragment","document","createDocumentFragment","grpContainer","createElement","attrs","class","grpHeader","grpBody","appendChild","headerTemplate","isRoot","enableNotCondition","toggleElements","removeClass","levelColl","id","setProperties","rule","rules","disableRuleCondition","getWrapper","getModuleName","requiredModules","modules","push","member","args","GetRootColumnName","field","isNullOrUndefined","separator","split","initialize","dataColl","type_1","value_1","columnKeys_1","keys","cols","categories_1","groupBy_1","isDate_1","validateObj_1","columns","columnSort","forEach","column","updateCustomOperator","type","isNaN","Date","parse","getTime","validation","category","l10n","getConstant","operators","customOperators","groupBy","updateSubFieldsFromColumns","len","label","updateSubFields","sortDirection","processColumnsInBatches","setTimeout","trigger","processedCount","endIdx","col","updateSubFieldsLarge","colLength","processNextBatch","j","data","sampCol","result","columnKeys","compField","resData","from","this_1","sqlIdx","operator_1","operColl","values","map","join","valueIdx","focusEventHandler","event","clickEventHandler","groupID","tagName","animation","Animation","duration","delay","renderSummary","summaryElem","getElementById","txtareaElem","animate","name","groupElem","style","display","getSqlFromRules","height","scrollHeight","actionButton","deleteRule","ruleClone","ruleLock","groupLock","groupClone","closest","deleteGroup","addGroupElement","mRules","extend","setGroupRules","renderSummaryCollapse","forIdValue","getAttribute","targetValue","enableSeparateConnector","classList","contains","replace","group","getGroup","ariaChecked","toggleElem","getElementsByClassName","addClass","cancel","toLowerCase","beforeSuccessCallBack","observedChangeArgs","beforeRules","getValidRules","getParentGroup","previousElementSibling","getRule","ruleID","filterRules","andElem","orElem","checked","selectBtn","showButtons","groupInsert","maxGroupCount","enableRtl","children","addRuleElement","appendRuleElem","parentId","action","ruleElem","elem","ruleListElem","select","setAttribute","ruleIdCounter","cloneRule","index","tempRuleIndex","insertBefore","ruleTemplate","requestType","ruleTemplateFn","templateParser","templateID","getOperators","operatorFields","isReact","isAngular","templateColl","nodeType","isVue3","append","cloneNode","lockGroup","lockRule","cloneGroup","ruleDelete","allowDragAndDrop","renderReactTemplates","isRuleTemplate","isInitialLoad","prvtEvtTgrDaD","addRuleSuccessCallBack","trgt","act","pId","isRlTmp","isVertical","displayMode","getColumn","newRule","operator","selectedColumn","passedRule_1","actionArgs","createArgs","spanElement","add","previousRuleElem","processAdjacentElements","updateAddedRule","ruleCount","applyFieldComponent","lockRuleTarget","processConnectorElements","ruleContainer","prevRule","headerTemplateFn","handleOrphanedRuleElement","prevElem","prevRuleContainer","notCondition","undefined","handleOrphanedConnectorElement","setMultiConnector","fieldMode","applyDropdownListComponent","applyDropdownTreeComponent","ddlField","ddlValue","autoSelectField","dataSource","placeholder","popupHeight","close","fieldClose","bind","change","changeField","open","popupOpen","cssClass","fieldModel","dropDownList","DropDownList","appendTo","ddlVal","getDataByValue","changeRule","itemData","dummyDropdownTreeDs","updateDropdowntreeDS","child","expanded","selectable","showClearButton","changeOnBlur","treeSettings","expandOn","filtering","dropdownTreeFiltering","dropdownTreeClose","dropdowntree","DropDownTree","getLabelFromColumn","proxy","ruleElemID","srcElement","ddTree","hierarchicalData","changeDataSource","matchedDataSource","nestedChildFilter","filter","filteredChild","treeObj","expandAll","refresh","node","isMatchedNode","matchedChildren","checkValue","parseInt","toString","template","isNewRuleAdded","enableSeparateCondition","custom","splice","changeRuleTemplate","parentGroup","previousColumn","detach","clearQBTemplate","operVal","renderToolTip","Tooltip","content","position","afterClose","beforeOpen","tooltipCloseElement","beforeClose","validateFields","dropDownTreeObj","isValid","allowValidation","excludeOprs","fieldElem","indexElem","valArray","dropDownObj","tempElem","ruleElemCln","validateRule","separateCondition","valElem","jLen","refreshLevelColl","obj","groupElement","level","refreshLevel","childElem","ruleList","iLen","groupCount","slice","groupTemplate","isConnector","glueElem","inputElem","dragClsName","labelElem","grpActElem","groupBtn","groupHdrElem","grpBodyElem","rulesElem","spanDragElement","aria-label","title","role","innerHTML","clsName","cloneClsName","lockClsName","filterElem","cloneRuleBtnElem","cloneLockBtnElem","delBtnElem","isGroup","isBtnClick","addGroupSuccess","eventTarget","dltGroupBtn","groupIdCounter","andInpElem","orInpElem","andLblElem","orLblElem","btnGroupId","groupDelete","Button","iconCss","rippleEffect","selector","childElems","grpLen","tempGroupIndex","idx","parentNode","addGroups","addRuleToNewGroups","cloneBtnElem","lockBtnElem","lockSpanElement","notElem","CheckBox","btnGroup","childNodes","newAndElem","newOrElem","nextSibling","nextElementSibling","args_1","conditionBtn_1","btnObj","onclick","groupBtn_1","DropDownButton","items","grpId","chgrpId","childGroupID","btnGroupElem","addHeaderDiv","disabled","isInitialRule","groupHdr","getRuleCollection","headerFn","enableSeparateConnectorInitialRule","nodeName","notifyChange","grpElement","ruleElement","format","getFormat","intl","formatDate","templateChange","updateRules","eventsArgs","grpElem","validateValue","prevOper","arrOper","grpEle","destroyControls","changeValue","isNumInput","currentTarget","dateElement","rbValue","numericTextBoxObj","getInstance","NumericTextBox","decimalSeparator","getValue","getNumericObject","locale","getNumberParser","immediateModeDelay","window","clearInterval","timer","setInterval","filterValue","grID","rlID","ele","changeValueSuccessCallBack","setSecondDateMinFromFirst","valueIndex","operatorDropdownElement","operatorDropdown","firstDateElement","secondDateElement","firstDatePicker","secondDatePicker","nextDay","setDate","getDate","ddl","item","popupObj","getItemData","customArgs","isInteracted","previousItemData","prevItemData","previousItem","previousValue","ddtElem","ddt","oldValue","dataBind","destroySubFields","subFieldElem","ddlArgs","tempRule","ddlObj","changeFilter","flt","dl","rl","tmpRl","dArg","selectedField","fieldChangeSuccess","operatorElem","changeOperator","opr","selectedIndex","operatorChangeSuccess","changeRuleValues","tooltipElem","createSubFields","remove","subFieldValue","subFilterCounter","ruleId","subField","currOper","prevValue","parentElem","operatorList","oprElem","childElementCount","fieldObj","renderValues","operator_2","ddlIdx","autoSelectOperator","ddlOperator","operatorModel","isField","popup","inputElement","divElement","templateDestroy","templateElement","elemId","temp","templateElements","elementId","elements","getValues","original","fieldColl","dataObj","fieldStr","createNestedObject","lastIndex","k","getDistinctValues","nest","isNested","this_2","renderMultiSelect","selectedValue","ds","isFetched","isValues","multiSelectValue","multiSelectUserQuery","valueModel","multiSelectModel","query","multiSelectQuery","clone","Query","resolvedQuery","dataManager","DataManager","selectedRule","mode","width","closePopup","actionBegin","multiSelectOpen","multiSelectObj","bindMultiSelectData","multiselectObj","incomingQuery","existingQuery","areQueriesSame","query1","query2","JSON","stringify","getMultiSelectData","dummyData","deferred","Deferred","userQuery","dataQuery","executeQuery","hideSpinner","createSpinner","showSpinner","then","actual","newData","current","catch","reject","spinnerElem","Browser","isDevice","ms","processTemplate","container","tempElements","onComplete","write","templateArgs","writeResult","parentFieldObj","subFieldObjList","lastSubFieldObj","setDefaultValue","isArryValue","isNumber","renderStringValue","ruleValElem","selectedVal","columnData","isTemplate","isPublic","txtBox","input","textBoxModel","inputobj","TextBox","minWidth","renderNumberValue","selVal","txtInp","numericTxt","step","numericTextBoxModel","numeric","oninput","processValueString","numArr","strArr","kLen","parseDate","formatOpt","dParser","getDateParser","skeleton","renderControls","isRendered","length_1","processBoolValues","datepick","datePicker","place","parsedDate","formatObj","getLocale","datePickerModel","DatePicker","parsedMinDate","orgValue","isCheck","radioBtn","radioButtonModel","radiobutton","RadioButton","getOperatorIndex","getPreviousItemData","isRender","filtElem","getElementsByTagName","filtObj","isTempRendered","setColumnTemplate","inputLen","renderTemplate","observedActionArgs","actionBeginSuccessCallBack","Element","columnTemplateFn","valElemColl","updateValues","selectedDate","radioBtnObj","textboxValue","controlName","some","op","val","trim","isNotTrigger","valueContainer","elementCln","i_1","i_2","ruleValueUpdate","beforeRule","afterRule","previousRule","oper","arrOperator","dupSelectedValue","parseFloat","isObject","formatOptions","findGroupByIdx","groupIdx","ruleColl","dupRuleColl","unWireEvents","portals","qbDdlElems","ddlElem","targetInput","ddlInst","popupElement","addRules","groups","importRules","HTMLElement","parent_1","allContainers","topLevelGroups","initialID","lastGroupIndex","lastGroup","initWrapper","innerWidth","summaryView","notGroupRtl","readonly","enableReadonly","buttons","button","contentElem","textElem","styles","editElem","divElem","collapseElem","executeLocal","sortByDesc","sortBy","onChangeNotGroup","checkNotGroup","orgRule","onPropertyChanged","newProp","oldProp","properties","_i","properties_1","enablePersistence","setRules","Internationalization","preRender","getUniqueID","defaultLocale","StartsWith","DoesNotStartWith","EndsWith","DoesNotEndWith","Contains","DoesNotContain","NotLike","Like","Equal","NotEqual","LessThan","LessThanOrEqual","GreaterThan","GreaterThanOrEqual","Between","NotBetween","In","NotIn","Remove","SelectField","SelectOperator","DeleteRule","DeleteGroup","AddGroup","AddCondition","Edit","ValidationMessage","SummaryViewTitle","OtherFields","AND","OR","NOT","SelectValue","IsEmpty","IsNotEmpty","IsNull","IsNotNull","True","False","AddButton","CloneGroup","LockGroup","CloneRule","LockRule","UnlockRule","UnlockGroup","L10n","parser","stringOperator","dateOperator","booleanOperator","numberOperator","equal","notequal","greaterthan","greaterthanorequal","lessthan","in","notin","lessthanorequal","startswith","endswith","between","notbetween","isnull","isnotnull","isempty","isnotempty","notstartswith","notendswith","notcontains","sqlOperators","toUpperCase","render","stringOper","numberOper","concat","initControl","executeDataManager","take","renderComplete","initializeDrag","draggable","Draggable","dragTarget","distance","helper","dragStart","dragStartHandler","drag","dragHandler","dragStop","dragStopHandler","isReplaceDragEle","isPreventSelect","abort","isDragScroll","enableAutoScroll","currentStateTarget","cloneElement","visualElement","offsetWidth","removeAttribute","draggedRule","isDragEventPrevent","body","dragElement","dragEventArgs","dragRuleID","dragGroupID","borderLineElem","targetElem","rect","getBoundingClientRect","distanceToTop","mouseY","clientY","changedTouches","top","distanceToBottom","bottom","threshold","targetGroup","isPreventelem","targetGrp","dropEventArgs","dropRuleID","dropGroupID","tgrt","groupId_1","groupRule","cloneGroupElem","isRuleArea","ruleElems","ruleIds","dropInd","deleteRules","overallDropIndex","groupId","groupId_2","templateCompiler","compile","error","wireEvents","scrollEventHandler","wrapper","EventHandler","keyBoardHandler","boundScrollHandler","addEventListener","boundResizeHandler","windowResizeHandler","removeEventListener","isParent","groupLevel","deleteGroupSuccessCallBack","nextElem","removeString","remRule","ruleElemColl","isTemplateRendered","isPlatformTemplate","deleteRuleSuccessCallBack","clnruleElem","previousElem","nextElem_1","err","i_3","lockGrpTarget","keyCode","code","dragElemnet","preventDefault","clearTemplate","isNewGroup","count","andGroup","orGroup","currentRule","getRules","ruleCondtion","isValidRule","customObj","isQuestion","lockedRule","isArray","notValue","deleteGroups","groupIdColl","getFilteredRecords","predicate","getPredicate","dataManagerQuery","where","ruleIdColl","getDataManagerQuery","pred","pred2","ruleValue","ignoreCase","and","or","isDateFilter","dateOperColl","matchCase","isTime","datePredicate","arrayPredicate","Predicate","localeString","cldrData","fieldParts","rootField","substring","setTime","date","isStart","setHours","startDate","endDate","nullValue","gte","currDate","setMinutes","setSeconds","isReset","renderGroup","tglBtnElem","renderRule","cloneElem","deleteGroupElems","addRuleGroupElems","removeRuleElems","elems","enableBtnGroup","isDateFunction","dateFunc","getSqlString","enableEscape","queryStr","sqlLocale","notPrefix","reduce","ruleStr","ruleOpertor","valueStr","ruleCondition","fieldName","custOper","isCustom","setRulesFromSql","sqlString","ruleModel","getRulesFromSql","sqlParser","processParser","allowEscape","getParameterizedSql","moduleLoader","loadedModules","sql","notify","prop","onPropertyChange","setParameterizedSql","sqlQuery","getParameterizedNamedSql","setParameterizedNamedSql","setMongoQuery","mongoQuery","mongoLocale","getMongoQuery","isCloneRule","parentGroupID","isCloneGroup","str","st","parseSqlStrings","conditions","subOp","regexStr","matchValue","test","regExp","RegExp","exec","lastPasrser","checkLiteral","checkNumberLiteral","regExValue","singleString","getSingleQuoteString","isClosed","checkCondition","combineSingleQuoteString","doubleString","getDoubleQuoteString","start","end","isBetween","tempMatchValue","tempStr","lastParser","secParser","betweenParser","betweenOperator","getOperator","=","!=","<",">","<=",">=","not in","not between","is empty","is null","is not null","is not empty","localeOperator","getTypeFromColumn","l","getLabelFromField","startIdx","subRules","lLen","grpCount","numVal","strVal","isLeftOpened","isNotOpened","pop","targetGrpId","lockItem","disableRuleControls","newGroup","disableHeaderControls","updateLockItems","isDisabled","addElem","deleteGrpElem","lockElem","groupContElem","addCondition","addGroup","disableComponents","componentGetter","component","enabled","checkbox","radio","multiSelect","deleteElem","Event","Complex","NotifyPropertyChanges","Component","QueryLibrary","parent","isDestroyed","on","queryLibrary","off","getMongoFromRules","mongoParser","getParameterSql","getNamedParameterSql","convertParamSqlToSql","convertNamedParamSqlToSql","convertMongoQuery","getOperatorFromMongoOperator","operatorValue","itVal","x","endsWith","mongoList","mongoRecursion","stringValue","betweenValue","fieldType","keyObj","betweenOperatorArray","inOperatorArray","notBetween","innerObject","firstKey","secondKey","firstValue","innerFirstValue","innerSecondValue","_a","paramSql","paramValues","params","parts","normalSql","namedParamSql","paramName","paramValue","String","qbrule","qbRule","updateRuleValue","getParameterSQLVal","getNamedParameterSQLVal","isNamedParameter","ruleVal","namedRuleVal","namedParameters","updateValue","namedField","getNamedParameter","newField","currField","index.QueryLibrary"],"mappings":"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"}