{"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 */\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 } 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.dragStopHandler = function (e) {\n if (_this.isDragEventPrevent) {\n return;\n }\n var targetGroup = closest(e.target, '.e-rule-container');\n if (isNullOrUndefined(targetGroup) && e.target.parentElement &&\n e.target.parentElement.classList.contains('e-btn-group') && _this.enableSeparateConnector) {\n targetGroup = closest(e.target.parentElement.previousElementSibling, '.e-rule-container');\n }\n var isPreventelem = closest(e.helper, '.e-notallowedcur');\n var prevRule;\n if (!isPreventelem) {\n var targetGrp = closest(e.target, '.e-group-container');\n var dropEventArgs = { cancel: false, dropRuleID: targetGroup !== null ? targetGroup.id\n : targetGrp !== null ? targetGrp.id : null, dropGroupID: targetGrp !== null ? targetGrp.id : null };\n _this.trigger('drop', dropEventArgs);\n if (dropEventArgs.cancel) {\n isPreventelem = true;\n }\n prevRule = _this.getValidRules();\n }\n _this.prvtEvtTgrDaD = true;\n var tgrt = _this.enableSeparateConnector && e.target.parentElement &&\n e.target.parentElement.classList.contains('e-btn-group') ? e.target.parentElement.previousElementSibling : e.target;\n if (targetGroup && !isPreventelem) {\n var groupId_1 = targetGroup.id.split(_this.element.id + '_')[1].split('_')[0];\n if (_this.draggable.currentStateTarget.parentElement.classList.contains('e-rule-field') ||\n _this.draggable.currentStateTarget.parentElement.classList.contains('e-group-header')) {\n var rule = void 0;\n if (_this.draggable.currentStateTarget.parentElement.classList.contains('e-group-header')) {\n rule = _this.getGroup(_this.draggedRule);\n _this.deleteGroup(closest(_this.draggedRule, '.e-group-container'));\n }\n else {\n rule = _this.getRule(_this.draggedRule);\n _this.deleteRule(_this.draggedRule);\n }\n var groupRule = extend([], _this.getGroup(targetGroup), [], true);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (groupRule.properties) {\n groupRule = groupRule.properties;\n }\n var groupElem = closest(targetGroup, '.e-group-container');\n var nestGrpElem = groupElem.querySelectorAll('.e-group-container');\n nestGrpElem.forEach(function (ele) {\n if (_this.element.querySelector('#' + ele.id)) {\n _this.deleteGroup(ele);\n }\n });\n var ruleElems = groupElem.querySelectorAll('.e-rule-container');\n var ruleIds = [];\n var dropInd = void 0;\n for (var i = 0; i < ruleElems.length; i++) {\n if (ruleElems[i].classList.contains('e-drag-rule-top-line') ||\n ruleElems[i].classList.contains('e-drag-rule-bottom-line')) {\n dropInd = i;\n }\n ruleIds.push(ruleElems[i].id.split(_this.element.id + '_')[1]);\n }\n _this.deleteRules(ruleIds);\n if (targetGroup.classList.contains('e-drag-rule-top-line')) {\n groupRule.rules.splice(dropInd, 0, rule);\n }\n else {\n groupRule.rules.splice(dropInd + 1, 0, rule);\n }\n groupRule.rules.forEach(function (rule) {\n if (_this.enableSeparateConnector) {\n if (!rule.rules) {\n _this.addRules([rule], groupId_1);\n }\n else {\n _this.addGroups([rule], groupId_1);\n }\n }\n else {\n if (rule.condition) {\n _this.addGroups([rule], groupId_1);\n }\n else {\n _this.addRules([rule], groupId_1);\n }\n }\n });\n }\n }\n else if (tgrt.classList.contains('e-rule-list') && tgrt.children.length === 0 && !isPreventelem) {\n var groupElem = closest(tgrt, '.e-group-container');\n var groupId = groupElem.id.split(_this.element.id + '_')[1].split('_')[0];\n var rule = void 0;\n if (_this.draggable.currentStateTarget.parentElement.classList.contains('e-group-header')) {\n rule = _this.getGroup(_this.draggedRule);\n _this.deleteGroup(closest(_this.draggedRule, '.e-group-container'));\n }\n else {\n rule = _this.getRule(_this.draggedRule);\n _this.deleteRule(_this.draggedRule);\n }\n if (_this.enableSeparateConnector) {\n if (!rule.rules) {\n _this.addRules([rule], groupId);\n }\n else {\n _this.addGroups([rule], groupId);\n }\n }\n else {\n if (rule.condition) {\n _this.addGroups([rule], groupId);\n }\n else {\n _this.addRules([rule], groupId);\n }\n }\n }\n else if (tgrt.classList.contains('e-rule-list') && tgrt.children[0].classList.contains('e-group-container') && !isPreventelem) {\n var groupElem = closest(tgrt, '.e-group-container');\n var groupId_2 = groupElem.id.split(_this.element.id + '_')[1].split('_')[0];\n var rule = void 0;\n if (_this.draggable.currentStateTarget.parentElement.classList.contains('e-group-header')) {\n rule = _this.getGroup(_this.draggedRule);\n _this.deleteGroup(closest(_this.draggedRule, '.e-group-container'));\n }\n else {\n rule = _this.getRule(_this.draggedRule);\n _this.deleteRule(_this.draggedRule);\n }\n var groupRule = extend([], _this.getGroup(tgrt), [], true);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (groupRule.properties) {\n groupRule = groupRule.properties;\n }\n var groupElems = tgrt.querySelectorAll('.e-group-container');\n groupElems.forEach(function (ele) {\n if (_this.element.querySelector('#' + ele.id)) {\n _this.deleteGroup(ele);\n }\n });\n var ruleElems = groupElem.querySelectorAll('.e-rule-container');\n ruleElems.forEach(function (ele) {\n if (_this.element.querySelector('#' + ele.id)) {\n _this.deleteRule(ele);\n }\n });\n if (_this.draggable.currentStateTarget.parentElement.classList.contains('e-group-header')) {\n _this.addGroups([rule], groupId_2);\n }\n else {\n _this.addRules([rule], groupId_2);\n }\n groupRule.rules.forEach(function (rule) {\n if (_this.enableSeparateConnector) {\n if (!rule.rules) {\n _this.addRules([rule], groupId_2);\n }\n else {\n _this.addGroups([rule], groupId_2);\n }\n }\n else {\n if (rule.condition) {\n _this.addGroups([rule], groupId_2);\n }\n else {\n _this.addRules([rule], groupId_2);\n }\n }\n });\n }\n else if ((closest(e.target, '.e-group-container') || e.target.classList.contains('e-group-container')) && !isPreventelem) {\n var rule = void 0;\n targetGroup = closest(e.target, '.e-group-container');\n if (!targetGroup && e.target.classList.contains('e-group-container')) {\n targetGroup = e.target;\n }\n var groupId = targetGroup.id.split(_this.element.id + '_')[1].split('_')[0];\n if (groupId === 'group0') {\n if (_this.draggable.currentStateTarget.parentElement.classList.contains('e-group-header')) {\n rule = _this.getGroup(_this.draggedRule);\n _this.deleteGroup(closest(_this.draggedRule, '.e-group-container'));\n }\n else {\n rule = _this.getRule(_this.draggedRule);\n _this.deleteRule(_this.draggedRule);\n }\n if (_this.enableSeparateConnector) {\n if (!rule.rules) {\n _this.addRules([rule], groupId);\n }\n else {\n _this.addGroups([rule], groupId);\n }\n }\n else {\n if (rule.condition) {\n _this.addGroups([rule], groupId);\n }\n else {\n _this.addRules([rule], groupId);\n }\n }\n }\n }\n if (!isPreventelem) {\n _this.trigger('ruleChange', { previousRule: prevRule, rule: _this.getValidRules(), type: 'drag-and-drop' });\n }\n _this.prvtEvtTgrDaD = false;\n document.body.classList.remove('e-prevent-select');\n var borderLineElem = _this.element.querySelectorAll('.e-drag-rule-bottom-line');\n borderLineElem.forEach(function (ele) {\n ele.classList.remove('e-drag-rule-bottom-line');\n });\n borderLineElem = _this.element.querySelectorAll('.e-drag-rule-top-line');\n borderLineElem.forEach(function (ele) {\n ele.classList.remove('e-drag-rule-top-line');\n });\n borderLineElem = _this.element.querySelectorAll('.e-qb-dragging-rule');\n borderLineElem.forEach(function (ele) {\n ele.classList.remove('e-qb-dragging-rule');\n });\n if (e.helper.classList.contains('e-cloneproperties') && document.querySelector('.' + e.helper.classList[0])) {\n remove(e.helper);\n }\n if (_this.enableSeparateConnector) {\n _this.refresh();\n }\n };\n MultiSelect.Inject(CheckBoxSelection);\n return _this;\n }\n QueryBuilder.prototype.getPersistData = function () {\n return this.addOnPersist(['rule']);\n };\n /**\n * Clears the rules without root rule.\n *\n * @returns {void}.\n */\n QueryBuilder.prototype.reset = function () {\n this.isImportRules = false;\n var bodyElem = this.element.querySelector('.e-group-body');\n var inputElement = this.element.querySelectorAll('input.e-control');\n for (var i = 0, len = inputElement.length; i < len; i++) {\n if (inputElement[i].className.indexOf('e-tooltip') > -1) {\n getComponent(inputElement[i], 'tooltip').destroy();\n }\n else if (inputElement[i].parentElement.className.indexOf('e-tooltip') > -1) {\n getComponent(inputElement[i].parentElement, 'tooltip').destroy();\n }\n }\n if (bodyElem) {\n bodyElem.innerHTML = '';\n }\n else {\n var grpContainer = this.createElement('div', { attrs: { class: 'e-group-container' } });\n var grpHeader = this.createElement('div', { attrs: { class: 'e-group-header' } });\n var grpBody = this.createElement('div', { attrs: { class: 'e-group-body' } });\n grpContainer.appendChild(grpHeader).appendChild(grpBody);\n this.element.appendChild(grpContainer);\n bodyElem = this.element.querySelector('.e-group-body');\n }\n if (this.headerTemplate && this.isRoot) {\n this.element.innerHTML = '';\n this.isRoot = false;\n }\n if (this.enableNotCondition) {\n removeClass(this.element.querySelectorAll('.e-qb-toggle'), 'e-active-toggle');\n }\n bodyElem.appendChild(this.createElement('div', { attrs: { class: 'e-rule-list' } }));\n this.levelColl[this.element.id + '_group0'] = [0];\n this.setProperties({ rule: { condition: 'and', not: false, rules: [] } }, true);\n this.disableRuleCondition(bodyElem.parentElement);\n };\n QueryBuilder.prototype.getWrapper = function () {\n return this.element;\n };\n QueryBuilder.prototype.getModuleName = function () {\n return 'query-builder';\n };\n QueryBuilder.prototype.requiredModules = function () {\n var modules = [];\n modules.push({\n member: 'query-library',\n args: [this]\n });\n return modules;\n };\n QueryBuilder.prototype.GetRootColumnName = function (field) {\n return this.separator ? field.split(this.separator)[0] : field;\n };\n QueryBuilder.prototype.initialize = function () {\n if (this.dataColl.length) {\n var columnKeys = Object.keys(this.dataColl[0]);\n var cols = [];\n var categories = [];\n var type = void 0;\n var groupBy = false;\n var isDate = false;\n var value = void 0;\n var validateObj = { isRequired: true, min: 0, max: Number.MAX_VALUE };\n if (this.columns.length) {\n this.columnSort();\n var columns = this.columns;\n for (var i = 0, len = columns.length; i < len; i++) {\n this.updateCustomOperator(columns[i], 'initial');\n if (!columns[i].type) {\n if (columnKeys.indexOf(columns[i].field) > -1) {\n value = this.dataColl[0][columns[i].field];\n type = typeof value;\n if (type === 'string') {\n isDate = !isNaN(Date.parse(value));\n }\n else if (type === 'object') {\n isDate = value instanceof Date && !isNaN(value.getTime());\n type = 'string';\n }\n columns[i].type = type;\n isDate = false;\n }\n type = 'string';\n }\n if (!columns[i].validation) {\n columns[i].validation = validateObj;\n }\n if (columns[i].category) {\n groupBy = true;\n }\n else {\n columns[i].category = this.l10n.getConstant('OtherFields');\n }\n if (categories.indexOf(columns[i].category) < 0) {\n categories.push(columns[i].category);\n }\n if (!columns[i].operators ||\n (this.isLocale && this.isCustomOprCols.indexOf(columns[i].field) !== 0)) {\n columns[i].operators = this.customOperators[columns[i].type + 'Operator'];\n }\n }\n if (groupBy && (categories.length > 1 || categories[0] !== this.l10n.getConstant('OtherFields'))) {\n this.fields = { text: 'label', value: 'field', groupBy: 'category' };\n }\n this.updateSubFieldsFromColumns(this.columns);\n }\n else {\n for (var i = 0, len = columnKeys.length; i < len; i++) {\n value = this.dataColl[0][columnKeys[i]];\n type = typeof value;\n if (type === 'string') {\n isDate = !isNaN(Date.parse(value));\n }\n else if (type === 'object' && !Object.keys(value).length) {\n isDate = value instanceof Date && !isNaN(value.getTime());\n type = 'string';\n }\n cols[i] = { 'field': columnKeys[i], 'label': columnKeys[i], 'type': isDate ? 'date' : type,\n 'validation': validateObj };\n isDate = false;\n cols[i].operators = this.customOperators[cols[i].type + 'Operator'];\n if (type === 'object') {\n this.updateSubFields(value, cols[i]);\n }\n }\n this.columns = cols;\n }\n }\n else if (this.columns && this.columns.length) {\n var columns = this.columns;\n for (var i = 0, len = columns.length; i < len; i++) {\n if (columns[i].category) {\n this.fields = { text: 'label', value: 'field', groupBy: 'category' };\n }\n else {\n columns[i].category = this.l10n.getConstant('OtherFields');\n }\n this.updateCustomOperator(columns[i]);\n if (!columns[i].operators || this.isLocale) {\n columns[i].operators = this.customOperators[columns[i].type + 'Operator'];\n }\n }\n this.updateSubFieldsFromColumns(this.columns);\n }\n this.trigger('dataBound', { type: 'dataBound' });\n };\n QueryBuilder.prototype.updateSubFieldsFromColumns = function (col, field) {\n for (var i = 0; i < col.length; i++) {\n if (this.separator !== '' && col[i].field.indexOf(this.separator) < 0) {\n col[i].field = field ? field + this.separator + col[i].field : col[i].field;\n }\n if (col[i].operators) {\n this.updateCustomOperator(col[i]);\n }\n else if (col[i].type && col[i].type !== 'object') {\n col[i].operators = this.customOperators[col[i].type + 'Operator'];\n }\n if (col[i].columns) {\n col[i].type = 'object';\n this.updateSubFieldsFromColumns(col[i].columns, col[i].field);\n }\n }\n };\n QueryBuilder.prototype.updateSubFields = function (value, col, data) {\n var sampCol;\n col.columns = [];\n var columnKeys = Object.keys(value);\n var field;\n var label;\n var type;\n var result;\n data = data ? data : this.dataColl[0];\n for (var i = 0, len = columnKeys.length; i < len; i++) {\n var compField = col.field.split('.');\n if (data) {\n result = data[compField[compField.length - 1]][columnKeys[i]];\n }\n else {\n result = this.dataColl[0][col.field][columnKeys[i]];\n }\n var resData = data[col.field.split(this.separator)[col.field.split(this.separator).length - 1]];\n type = typeof result;\n field = col.field + this.separator + columnKeys[i];\n label = columnKeys[i];\n type = (type === 'object' && !isNaN(Date.parse(result))) ? 'date' : type;\n sampCol = { field: field, label: label, type: type };\n if (type !== 'object') {\n sampCol.operators = this.customOperators[type + 'Operator'];\n }\n col.columns.push(sampCol);\n if (type === 'object') {\n this.updateSubFields(result, sampCol, resData);\n }\n }\n };\n QueryBuilder.prototype.updateCustomOperator = function (column, from) {\n if (column.operators) {\n if (!this.isLocale && from === 'initial' && !isNullOrUndefined(this.isCustomOprCols)) {\n this.isCustomOprCols.push(column.field);\n }\n var _loop_1 = function (j) {\n var sqlIdx = Object.keys(column.operators[j]).indexOf('sqlOperator');\n if (sqlIdx > -1) {\n var operator_1 = column.operators[j];\n var operColl = Object.keys(operator_1);\n var values = operColl.map(function (key) { return operator_1[\"\" + key]; }).join(',').split(',');\n var valueIdx = operColl.indexOf('value');\n this_1.operators[values[valueIdx]] = values[sqlIdx];\n }\n };\n var this_1 = this;\n for (var j = 0; j < column.operators.length; j++) {\n _loop_1(j);\n }\n }\n };\n QueryBuilder.prototype.focusEventHandler = function (event) {\n this.target = event.target;\n };\n QueryBuilder.prototype.clickEventHandler = function (event) {\n var _this = this;\n var target = event.target;\n var args;\n this.isImportRules = false;\n var groupID;\n if (target.tagName === 'SPAN') {\n target = target.parentElement;\n }\n if (target.className.indexOf('e-collapse-rule') > -1) {\n var animation = new Animation({ duration: 1000, delay: 0 });\n if (this.element.querySelectorAll('.e-summary-content').length < 1) {\n this.renderSummary();\n }\n var summaryElem = document.getElementById(this.element.id + '_summary_content');\n var txtareaElem = summaryElem.querySelector('.e-summary-text');\n animation.animate('.e-query-builder', { name: 'SlideLeftIn' });\n var groupElem = this.element.querySelector('.e-group-container');\n groupElem.style.display = 'none';\n txtareaElem.textContent = this.getSqlFromRules(this.rule);\n summaryElem.style.display = 'block';\n txtareaElem.style.height = txtareaElem.scrollHeight + 'px';\n }\n if (target.tagName === 'BUTTON' && target.className.indexOf('e-qb-toggle') < 0) {\n var animation = new Animation({ duration: 1000, delay: 0 });\n switch (true) {\n case target.className.indexOf('e-removerule') > -1:\n this.actionButton = target;\n this.deleteRule(target);\n break;\n case target.className.indexOf('e-clone-rule-btn') > -1:\n this.actionButton = target;\n this.cloneRuleBtnClick = true;\n this.ruleClone(target);\n break;\n case target.className.indexOf('e-lock-rule-btn') > -1:\n this.actionButton = target;\n this.ruleLock(target);\n break;\n case target.className.indexOf('e-lock-grp-btn') > -1:\n this.actionButton = target;\n this.groupLock(target);\n break;\n case target.className.indexOf('e-clone-grp-btn') > -1:\n this.actionButton = target;\n this.cloneGrpBtnClick = true;\n this.groupClone(closest(target, '.e-group-container'));\n break;\n case target.className.indexOf('e-deletegroup') > -1:\n this.actionButton = target;\n this.deleteGroup(closest(target, '.e-group-container'));\n break;\n case target.className.indexOf('e-edit-rule') > -1:\n animation.animate('.e-query-builder', { name: 'SlideLeftIn' });\n document.getElementById(this.element.id + '_summary_content').style.display = 'none';\n if (this.element.querySelectorAll('.e-group-container').length < 1) {\n this.addGroupElement(false, this.element, this.rule.condition, false, this.rule.not);\n var mRules = extend({}, this.rule, {}, true);\n this.setGroupRules(mRules);\n this.renderSummaryCollapse();\n }\n else {\n var groupElem = this.element.querySelector('.e-group-container');\n if (groupElem.querySelectorAll('.e-collapse-rule').length < 1) {\n this.renderSummaryCollapse();\n }\n groupElem.style.display = 'block';\n }\n break;\n }\n }\n else if ((target.tagName === 'LABEL' && target.parentElement.className.indexOf('e-btn-group') > -1) ||\n target.className.indexOf('e-qb-toggle') > -1) {\n var element = closest(target, '.e-group-container');\n if (!this.headerTemplate) {\n var forIdValue = target.getAttribute('for');\n var targetValue = void 0;\n if (forIdValue) {\n targetValue = document.getElementById(forIdValue).getAttribute('value');\n }\n else if (this.enableSeparateConnector) {\n targetValue = target.textContent;\n }\n groupID = element.id.replace(this.element.id + '_', '');\n var group = this.getGroup(groupID);\n var ariaChecked = void 0;\n if (this.enableNotCondition) {\n if (target.className.indexOf('e-qb-toggle') > -1) {\n var toggleElem = element.getElementsByClassName('e-qb-toggle')[0];\n if (toggleElem.className.indexOf('e-active-toggle') > -1) {\n removeClass([toggleElem], 'e-active-toggle');\n ariaChecked = false;\n }\n else {\n addClass([toggleElem], 'e-active-toggle');\n ariaChecked = true;\n }\n targetValue = group.condition;\n }\n else {\n ariaChecked = group.not;\n }\n }\n args = { groupID: groupID, cancel: false, type: 'condition', value: targetValue.toLowerCase() };\n if (this.enableNotCondition) {\n args = { groupID: groupID, cancel: false, type: 'condition', value: targetValue.toLowerCase(),\n 'not': ariaChecked };\n }\n }\n if (!this.isImportRules) {\n this.trigger('beforeChange', args, function (observedChangeArgs) {\n _this.beforeSuccessCallBack(observedChangeArgs, target);\n });\n }\n else {\n this.beforeSuccessCallBack(args, target);\n }\n this.target = target;\n }\n };\n QueryBuilder.prototype.beforeSuccessCallBack = function (args, target) {\n if (args && !args.cancel) {\n var element = closest(target, '.e-group-container');\n var groupID = element.id.replace(this.element.id + '_', '');\n var beforeRules = this.getValidRules(this.rule);\n var rule = this.getParentGroup(element);\n if (this.enableSeparateConnector) {\n if (isNullOrUndefined(closest(target, '.e-rule-container')) &&\n element.classList.contains('e-group-container')) {\n element = target.parentElement.previousElementSibling !== null ?\n target.parentElement.previousElementSibling : element;\n }\n else {\n element = closest(target, '.e-rule-container');\n }\n var id = element.id.replace(this.element.id + '_', '');\n if (element.classList.contains('e-rule-container')) {\n rule = this.getRule(element);\n rule.condition = args.value;\n }\n else if (element.classList.contains('e-group-container')) {\n rule = this.getGroup(element);\n rule.condition = args.value;\n }\n if (this.enableNotCondition) {\n rule.not = args.not;\n }\n if (!this.isImportRules) {\n this.trigger('change', { groupID: groupID, ruleID: id, type: 'condition', value: rule.condition });\n }\n }\n else {\n rule.condition = args.value;\n if (this.enableNotCondition) {\n rule.not = args.not;\n }\n if (!this.isImportRules) {\n this.trigger('change', { groupID: groupID, type: 'condition', value: rule.condition });\n }\n }\n this.filterRules(beforeRules, this.getValidRules(this.rule), 'condition');\n if (this.enableSeparateConnector) {\n var andElem = target.parentElement.querySelector('.e-btngroup-and');\n var orElem = target.parentElement.querySelector('.e-btngroup-or');\n if (andElem && orElem) {\n if (args.value === 'and') {\n andElem.checked = true;\n orElem.checked = false;\n }\n else if (args.value === 'or') {\n orElem.checked = true;\n andElem.checked = false;\n }\n }\n }\n }\n };\n QueryBuilder.prototype.selectBtn = function (target, event) {\n if (event.name === 'beforeOpen') {\n if (this.showButtons.groupInsert || isNullOrUndefined(this.showButtons.groupInsert)) {\n if (this.element.querySelectorAll('.e-group-container').length >= this.maxGroupCount + 1) {\n addClass([event.element.querySelector('li span.e-addgroup').parentElement], 'e-button-hide');\n }\n else {\n removeClass([event.element.querySelector('li span.e-addgroup').parentElement], 'e-button-hide');\n }\n if (this.enableRtl) {\n addClass([event.element.querySelector('li').parentElement], 'e-rtl');\n }\n }\n else {\n addClass([event.element.querySelector('li span.e-addgroup').parentElement], 'e-button-hide');\n }\n }\n else if (event.element.children[0].className.indexOf('e-addrule') > -1) {\n this.addRuleElement(closest(target, '.e-group-container'), {});\n }\n else if (event.element.children[0].className.indexOf('e-addgroup') > -1) {\n this.addGroupElement(true, closest(target, '.e-group-container'), '', true);\n }\n };\n QueryBuilder.prototype.appendRuleElem = function (target, column, type, parentId, action, rule) {\n var ruleElem;\n var elem;\n var ruleListElem = target.querySelector('.e-rule-list');\n var args;\n if (type === 'change') {\n ruleElem = select('#' + parentId, target);\n }\n else {\n ruleElem = this.createElement('div', { attrs: { class: 'e-rule-container' } });\n ruleElem.setAttribute('id', target.id + '_rule' + this.ruleIdCounter);\n if (this.showButtons.cloneRule && this.cloneRuleBtnClick) {\n if (this.ruleIndex < 0) {\n ruleListElem.appendChild(ruleElem);\n }\n else {\n if (this.enableSeparateConnector) {\n var index = -1;\n var tempRuleIndex = this.ruleIndex + 1;\n for (var i = 0; i < tempRuleIndex; i++) {\n if (i === ruleListElem.children.length) {\n break;\n }\n if (ruleListElem.children[i].classList.contains('e-rule-container')) {\n tempRuleIndex++;\n index++;\n }\n }\n ruleListElem.insertBefore(ruleElem, ruleListElem.children[this.ruleIndex + index + 1]); // added clone rule to next position\n }\n else {\n ruleListElem.insertBefore(ruleElem, ruleListElem.children[this.ruleIndex + 1]); // added clone rule to next position\n }\n }\n this.cloneRuleBtnClick = false;\n }\n else {\n ruleListElem.appendChild(ruleElem);\n }\n this.ruleIdCounter++;\n }\n if (column && column.ruleTemplate && rule) {\n args = { requestType: 'template-initialize', ruleID: ruleElem.id, action: action, fields: this.fields, rule: rule };\n this.trigger('actionBegin', args);\n this.ruleTemplateFn = this.templateParser(column.ruleTemplate);\n var templateID = this.element.id + column.field;\n var template = void 0;\n args.fields = this.fields;\n args.columns = this.columns;\n if (rule.field === '') {\n rule.field = column.field;\n }\n args.operators = this.getOperators(rule.field);\n args.operatorFields = { text: 'key', value: 'value' };\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.isReact) {\n template = this.ruleTemplateFn(args, this, ruleElem.id, templateID)[0];\n elem = template;\n elem.className += ' e-rule-field';\n ruleElem.appendChild(elem);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n }\n else if (this.isAngular) {\n var templateColl = this.ruleTemplateFn(args, this, ruleElem.id, templateID);\n template = (templateColl[0].nodeType === 3) ? templateColl[1] : templateColl[0];\n elem = template;\n elem.className += ' e-rule-field';\n ruleElem.appendChild(elem);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n }\n else if (this.isVue3) {\n template = this.ruleTemplateFn(args, this, 'Template', templateID);\n elem = template;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n append(elem, ruleElem);\n ruleElem.children[ruleElem.children.length - 1].className += ' e-rule-field';\n }\n else {\n template = this.ruleTemplateFn(args, this, 'Template', templateID)[0];\n elem = template;\n elem.className += ' e-rule-field';\n ruleElem.appendChild(elem);\n }\n }\n else {\n elem = this.ruleElem.querySelector('.e-rule-field').cloneNode(true);\n ruleElem.appendChild(elem);\n }\n if (this.showButtons.lockGroup) {\n removeClass(ruleElem.querySelectorAll('.e-lock-grp-btn'), 'e-button-hide');\n }\n if (this.showButtons.lockRule) {\n removeClass(ruleElem.querySelectorAll('.e-lock-rule-btn'), 'e-button-hide');\n }\n if (this.showButtons.cloneGroup) {\n removeClass(ruleElem.querySelectorAll('.e-clone-grp-btn'), 'e-button-hide');\n }\n if (this.showButtons.cloneRule) {\n removeClass(ruleElem.querySelectorAll('.e-clone-rule-btn'), 'e-button-hide');\n }\n if (this.showButtons.ruleDelete) {\n removeClass(ruleElem.querySelectorAll('.e-lock-grp-btn'), 'e-button-hide');\n }\n if (this.allowDragAndDrop) {\n removeClass(ruleElem.querySelectorAll('.e-drag-qb-rule'), 'e-hidden');\n }\n if (column && column.ruleTemplate && rule) {\n this.renderReactTemplates();\n }\n return ruleElem;\n };\n QueryBuilder.prototype.addRuleElement = function (target, rule, column, action, parentId, isRuleTemplate) {\n var _this = this;\n if (!target) {\n return;\n }\n var args = { groupID: target.id.replace(this.element.id + '_', ''), cancel: false, type: 'insertRule' };\n if (!this.isImportRules && !this.isInitialLoad && !this.prvtEvtTgrDaD) {\n this.trigger('beforeChange', args, function (observedChangeArgs) {\n _this.addRuleSuccessCallBack(observedChangeArgs, target, rule, column, action, parentId, isRuleTemplate);\n });\n }\n else {\n this.isInitialLoad = false;\n this.addRuleSuccessCallBack(args, target, rule, column, action, parentId, isRuleTemplate);\n }\n };\n QueryBuilder.prototype.addRuleSuccessCallBack = function (args, trgt, rule, col, act, pId, isRlTmp) {\n var height = (this.element.className.indexOf('e-device') > -1) ? '250px' : '200px';\n var ruleID;\n var column = (rule && rule.field) ? this.getColumn(rule.field) : col ? col : this.columns[0];\n var operators;\n var dropDownList;\n var ruleElem;\n var newRule = { 'label': '', 'field': '', 'type': '', 'operator': '' };\n if (!args.cancel) {\n if (column && column.ruleTemplate && rule.field) {\n this.selectedColumn = column;\n operators = this.selectedColumn.operators;\n newRule = { 'label': column.label, 'field': column.field, 'type': column.type, 'operator': operators[0].value };\n var passedRule = Object.keys(rule).length ? rule : newRule;\n ruleElem = this.appendRuleElem(trgt, column, act, pId, 'field', passedRule);\n var args_1 = { requestType: 'template-create', action: 'insert-rule', ruleID: ruleElem.id,\n fields: this.fields, rule: passedRule };\n this.trigger('actionBegin', args_1);\n }\n else {\n ruleElem = this.appendRuleElem(trgt, column, act, pId, 'field');\n ruleElem.querySelector('.e-filter-input').setAttribute('id', ruleElem.id + '_filterkey');\n var element = ruleElem.querySelector('.e-rule-delete');\n if (this.element.className.indexOf('e-device') > -1 || this.displayMode === 'Vertical') {\n element.textContent = this.l10n.getConstant('Remove');\n addClass([element], 'e-flat');\n addClass([element], 'e-primary');\n }\n else {\n addClass([element], 'e-round');\n addClass([element], 'e-icon-btn');\n element.setAttribute('title', this.l10n.getConstant('DeleteRule'));\n var spanElement = this.createElement('span', { attrs: { class: 'e-btn-icon e-icons e-delete-icon' } });\n ruleElem.querySelector('.e-rule-delete').appendChild(spanElement);\n }\n if (!this.showButtons.ruleDelete) {\n element.classList.add('e-button-hide');\n }\n }\n if (this.displayMode === 'Vertical' || this.element.className.indexOf('e-device') > -1) {\n ruleElem.className = 'e-rule-container e-vertical-mode';\n }\n else {\n ruleElem.className = 'e-rule-container e-horizontal-mode';\n }\n var previousRuleElem = ruleElem.previousElementSibling;\n if (this.enableSeparateConnector) {\n var prevRule = void 0;\n var ruleContainer = void 0;\n if (previousRuleElem && previousRuleElem.classList.contains('e-group-container')) {\n ruleContainer = previousRuleElem.querySelectorAll('.e-rule-container');\n previousRuleElem = ruleContainer[ruleContainer.length - 1];\n }\n if (previousRuleElem && previousRuleElem.classList.contains('e-rule-container')) {\n prevRule = this.getRule(previousRuleElem);\n }\n if (this.headerTemplate && previousRuleElem && prevRule) {\n this.headerTemplateFn(previousRuleElem, false, prevRule.condition, prevRule, previousRuleElem.id);\n }\n else if (isNullOrUndefined(previousRuleElem) && ruleElem.id !== this.element.id + '_group0_rule0') {\n var group = ruleElem.closest('.e-group-container');\n if (group && group.previousElementSibling) {\n var prevElem = group.previousElementSibling;\n var prevRuleContainer = prevElem.querySelectorAll('.e-rule-container');\n if (prevElem.classList.contains('e-group-container')) {\n prevElem = prevRuleContainer[prevRuleContainer.length - 1];\n }\n if (prevElem.classList.contains('e-rule-container')) {\n var prevRule_1 = this.getRule(prevElem);\n this.headerTemplateFn(prevElem, false, prevRule_1.condition, prevRule_1, prevElem.id, true);\n }\n }\n else {\n this.headerTemplateFn(ruleElem, false, rule.condition, rule, ruleElem.id, true);\n }\n }\n }\n else {\n if (previousRuleElem && previousRuleElem.className.indexOf('e-rule-container') > -1) {\n if (ruleElem.className.indexOf('e-joined-rule') < 0) {\n ruleElem.className += ' e-joined-rule';\n }\n if (previousRuleElem.className.indexOf('e-prev-joined-rule') < 0) {\n previousRuleElem.className += ' e-prev-joined-rule';\n }\n }\n }\n if (previousRuleElem && previousRuleElem.className.indexOf('e-group-container') > -1 &&\n ruleElem.className.indexOf('e-separate-rule') < 0) {\n ruleElem.className += ' e-separate-rule';\n }\n if (!this.isImportRules) {\n this.updateAddedRule(trgt, rule, newRule, isRlTmp, pId, this.enableSeparateConnector ? true : null);\n }\n if (!column || (column && !column.ruleTemplate) || !rule.field) {\n if (this.fieldMode === 'Default') {\n var ddlField = void 0;\n var ddlValue = void 0;\n if (this.separator && rule.field) {\n ddlValue = this.GetRootColumnName(rule.field);\n }\n else if (this.autoSelectField) {\n ddlValue = this.GetRootColumnName(rule.field);\n }\n else {\n ddlValue = this.isImportRules ? this.GetRootColumnName(rule.field) : rule.field;\n }\n ddlField = {\n dataSource: this.columns,\n fields: this.fields, placeholder: this.l10n.getConstant('SelectField'),\n popupHeight: ((this.columns.length > 5) ? height : 'auto'), close: this.fieldClose.bind(this, ruleElem.id + '_filterkey'),\n change: this.changeField.bind(this), value: rule ? ddlValue : null, open: this.popupOpen.bind(this, true), cssClass: 'qb-dropdownlist'\n };\n if (this.fieldModel) {\n ddlField = __assign({}, ddlField, this.fieldModel);\n }\n dropDownList = new DropDownList(ddlField);\n dropDownList.appendTo('#' + ruleElem.id + '_filterkey');\n var ddlVal = void 0;\n if (this.separator && rule.field) {\n ddlVal = this.GetRootColumnName(rule.field);\n }\n else {\n ddlVal = this.isImportRules ? this.GetRootColumnName(rule.field) :\n dropDownList.value;\n }\n this.selectedColumn = dropDownList.getDataByValue(ddlVal);\n if (Object.keys(rule).length) {\n this.changeRule(rule, {\n element: dropDownList.element, itemData: this.selectedColumn\n });\n }\n }\n else {\n var ddlField = void 0;\n var ddlValue = this.isImportRules ? rule.field : rule.field;\n this.dummyDropdownTreeDs = extend([], this.columns, [], true);\n this.updateDropdowntreeDS(this.dummyDropdownTreeDs);\n ddlField = {\n fields: { dataSource: this.dummyDropdownTreeDs,\n value: 'field', text: 'label', child: 'columns', expanded: 'expanded', selectable: 'selectable' },\n placeholder: this.l10n.getConstant('SelectField'), showClearButton: false,\n popupHeight: ((this.columns.length > 5) ? height : 'auto'), changeOnBlur: false,\n change: this.changeField.bind(this), value: !isNullOrUndefined(ddlValue) ? [ddlValue] : null,\n open: this.popupOpen.bind(this, false), treeSettings: { expandOn: 'Click' },\n cssClass: 'e-qb-ddt'\n };\n if (this.fieldModel) {\n ddlField = __assign({}, ddlField, this.fieldModel);\n }\n var dropdowntree = new DropDownTree(ddlField);\n dropdowntree.appendTo('#' + ruleElem.id + '_filterkey');\n if (!isNullOrUndefined(dropdowntree.value)) {\n var value = this.getLabelFromColumn(dropdowntree.value[0]);\n dropdowntree.element.value = value;\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var ddlVal = !isNullOrUndefined(rule.field) ?\n this.GetRootColumnName(rule.field) : dropdowntree.value;\n this.selectedColumn = this.getColumn(ddlVal);\n if (Object.keys(rule).length) {\n this.changeRule(rule, {\n element: dropdowntree.element, itemData: this.selectedColumn\n });\n }\n }\n }\n ruleID = ruleElem.id.replace(this.element.id + '_', '');\n if (rule && rule.isLocked) {\n var lockRuleTarget = ruleElem.querySelector('.e-lock-rule-btn');\n this.ruleLock(lockRuleTarget);\n }\n if (!this.isImportRules && !this.prvtEvtTgrDaD) {\n this.trigger('change', { groupID: trgt.id.replace(this.element.id + '_', ''), ruleID: ruleID, type: 'insertRule' });\n }\n }\n if (this.enableSeparateConnector && isNullOrUndefined(rule.condition) && ruleID) {\n rule = this.getRule(ruleID);\n }\n if (this.enableSeparateConnector) {\n var prevElem = ruleElem.previousElementSibling;\n var ruleContainer = void 0;\n while (prevElem && !prevElem.classList.contains('e-rule-container')) {\n if (prevElem.classList.contains('e-group-container')) {\n ruleContainer = prevElem.querySelectorAll('.e-rule-container');\n prevElem = ruleContainer[ruleContainer.length - 1];\n break;\n }\n prevElem = prevElem.previousElementSibling;\n }\n if (this.headerTemplate && prevElem) {\n var prevRule = this.getRule(prevElem);\n var args_2 = { requestType: 'rule-template-create', ruleID: prevElem.id, condition: prevRule.condition,\n notCondition: this.enableNotCondition ? true : undefined };\n this.trigger('actionBegin', args_2);\n }\n else if (isNullOrUndefined(prevElem) && ruleElem.id !== this.element.id + '_group0_rule0') {\n var group = ruleElem.closest('.e-group-container');\n if (group && group.previousElementSibling && group.previousElementSibling.previousElementSibling) {\n var prevElem_1 = group.previousElementSibling.previousElementSibling;\n if (prevElem_1.classList.contains('e-group-container')) {\n var ruleContainer_1 = prevElem_1.querySelectorAll('.e-rule-container');\n prevElem_1 = ruleContainer_1[ruleContainer_1.length - 1];\n }\n if (prevElem_1.classList.contains('e-rule-container')) {\n var prevRule = this.getRule(prevElem_1);\n var args_3 = { requestType: 'rule-template-create', ruleID: prevElem_1.id,\n condition: prevRule.condition, notCondition: this.enableNotCondition ? true : undefined };\n this.trigger('actionBegin', args_3);\n }\n }\n }\n this.setMultiConnector(ruleElem);\n }\n };\n QueryBuilder.prototype.updateDropdowntreeDS = function (columns) {\n for (var i = 0; i < columns.length; i++) {\n if (columns[parseInt(i.toString(), 10)].type === 'object') {\n columns[parseInt(i.toString(), 10)].selectable = false;\n this.updateDropdowntreeDS(columns[parseInt(i.toString(), 10)].columns);\n }\n }\n };\n QueryBuilder.prototype.updateAddedRule = function (target, rule, newRule, isRuleTemplate, pId, isNewRuleAdded) {\n var ruleElem;\n var index = 0;\n var groupElem;\n var rules;\n if (isRuleTemplate) {\n ruleElem = select('#' + pId, target);\n groupElem = closest(target, '.e-group-container');\n rules = this.getParentGroup(groupElem);\n while (ruleElem && ruleElem.previousElementSibling !== null) {\n ruleElem = ruleElem.previousElementSibling;\n var enableSeparateCondition = this.enableSeparateConnector && ((!this.headerTemplate && !ruleElem.classList.contains('e-btn-group')) ||\n (this.headerTemplate && (ruleElem.classList.contains('e-rule-container') ||\n ruleElem.classList.contains('e-group-container'))));\n if (!this.enableSeparateConnector || enableSeparateCondition) {\n index++;\n }\n }\n rules.rules[index] = rule;\n }\n else {\n groupElem = closest(target, '.e-group-container');\n rules = this.getParentGroup(groupElem);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var custom = rule.custom;\n if (Object.keys(rule).length) {\n if (this.ruleIndex < 0) {\n rules.rules.push({\n 'field': rule.field, 'type': rule.type, 'label': rule.label, 'operator': rule.operator, value: rule.value\n });\n if (custom) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n rules.rules[rules.rules.length - 1].custom = custom;\n }\n if (this.enableSeparateConnector) {\n rules.rules[rules.rules.length - 1].condition = rule.condition ? rule.condition : newRule.condition;\n }\n }\n else {\n rules.rules.splice(this.ruleIndex + 1, 0, {\n 'field': rule.field, 'type': rule.type, 'label': rule.label, 'operator': rule.operator, value: rule.value\n });\n if (custom) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n rules.rules[this.ruleIndex + 1].custom = custom;\n }\n if (this.enableSeparateConnector) {\n rules.rules[this.ruleIndex + 1].condition = rule.condition ? rule.condition : newRule.condition;\n }\n }\n }\n else {\n if (custom) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n newRule.custom = custom;\n }\n if (this.autoSelectField) {\n rule.field = newRule.field = this.rule.rules[0].field;\n }\n rules.rules.push(newRule);\n }\n }\n this.disableRuleCondition(target, rules, isNewRuleAdded);\n };\n QueryBuilder.prototype.changeRuleTemplate = function (column, element) {\n var operVal = this.selectedColumn.operators;\n if (column.ruleTemplate) {\n return;\n }\n else {\n var parentGroup = closest(element, '.e-group-container');\n var parentId = closest(element, '.e-rule-container').id;\n if (this.previousColumn && this.previousColumn.ruleTemplate) {\n detach(element.closest('[id=\"' + parentId + '\"]').querySelector('.e-rule-field'));\n this.clearQBTemplate([parentId]);\n }\n if (column) {\n var rule = { field: column.field, label: column.label, operator: operVal[0].value, value: '' };\n this.addRuleElement(parentGroup, rule, column, 'change', parentId, true);\n }\n }\n };\n QueryBuilder.prototype.renderToolTip = function (element) {\n var tooltip = new Tooltip({ content: this.l10n.getConstant('ValidationMessage'), isSticky: true,\n position: 'BottomCenter', cssClass: 'e-querybuilder-error', afterClose: function () {\n tooltip.destroy();\n }, beforeOpen: function (args) {\n var tooltipCloseElement = args.element.querySelector('.e-tooltip-close');\n if (tooltipCloseElement) {\n tooltipCloseElement.style.display = 'none';\n }\n } });\n tooltip.appendTo(element);\n tooltip.open(element);\n };\n /**\n * Validate the conditions and it display errors for invalid fields.\n *\n * @returns {boolean} - Validation\n */\n QueryBuilder.prototype.validateFields = function () {\n var isValid = true;\n var dropDownTreeObj;\n if (this.allowValidation) {\n var excludeOprs = ['isnull', 'isnotnull', 'isempty', 'isnotempty'];\n var i = void 0;\n var len = void 0;\n var fieldElem = void 0;\n var indexElem = void 0;\n var valArray = [];\n var groupElem = void 0;\n var index = void 0;\n var dropDownObj = void 0;\n var tempElem = void 0;\n var rule = void 0;\n var ruleElemCln = this.element.querySelectorAll('.e-rule-container');\n for (i = 0, len = ruleElemCln.length; i < len; i++) {\n var validateRule = void 0;\n groupElem = closest(ruleElemCln[i], '.e-group-container');\n rule = this.getParentGroup(groupElem);\n index = 0;\n indexElem = tempElem = ruleElemCln[i];\n if (this.fieldMode === 'DropdownTree') {\n dropDownTreeObj = getComponent(ruleElemCln[i].querySelector('.e-rule-filter input.e-dropdowntree'), 'dropdowntree');\n if (dropDownTreeObj && dropDownTreeObj.value && dropDownTreeObj.value.length) {\n this.selectedColumn = this.getColumn(dropDownTreeObj.value[0]);\n validateRule = this.selectedColumn.validation;\n }\n }\n else {\n dropDownObj = getComponent(ruleElemCln[i].querySelector('.e-rule-filter input.e-dropdownlist'), 'dropdownlist');\n if (dropDownObj && dropDownObj.value) {\n this.selectedColumn = dropDownObj.getDataByValue(dropDownObj.value);\n validateRule = !isNullOrUndefined(dropDownObj.index) && this.selectedColumn.validation;\n }\n }\n fieldElem = tempElem.querySelector('.e-rule-field input.e-control');\n if (validateRule && validateRule.isRequired) {\n while (indexElem && indexElem.previousElementSibling !== null) {\n indexElem = indexElem.previousElementSibling;\n var separateCondition = this.enableSeparateConnector && ((!this.headerTemplate && !indexElem.classList.contains('e-btn-group')) ||\n (this.headerTemplate && (indexElem.classList.contains('e-rule-container') || indexElem.classList.contains('e-group-container'))));\n if (!this.enableSeparateConnector || separateCondition) {\n index++;\n }\n }\n fieldElem = tempElem.querySelector('.e-rule-operator .e-control');\n if (!rule.rules[index].operator) {\n if (fieldElem.parentElement.className.indexOf('e-tooltip') < 0 && fieldElem.className.indexOf('e-tooltip') < 0) {\n this.renderToolTip(fieldElem.parentElement);\n }\n isValid = false;\n }\n if (rule.rules[index].value instanceof Array) {\n valArray = rule.rules[index].value;\n }\n if (excludeOprs.indexOf(rule.rules[index].operator) < -1 &&\n (isNullOrUndefined(rule.rules[index].value) &&\n rule.rules[index].type !== 'date') || rule.rules[index].value === '' ||\n (rule.rules[index].value instanceof Array && valArray.length < 1)) {\n var valElem = tempElem.querySelectorAll('.e-rule-value .e-control');\n isValid = false;\n for (var j = 0, jLen = valElem.length; j < jLen; j++) {\n var element = valElem[j];\n var elem = void 0;\n if (element.parentElement.className.indexOf('e-searcher') > -1) {\n elem = closest(element, '.e-multi-select-wrapper');\n if (elem.className.indexOf('e-tooltip') < 0) {\n this.renderToolTip(elem);\n }\n }\n else if (valElem[j].parentElement.className.indexOf('e-tooltip') < 0 && valElem[j].className.indexOf('e-tooltip') < 0) {\n this.renderToolTip(valElem[j].parentElement);\n }\n j++;\n }\n }\n }\n else if ((dropDownObj && dropDownObj.element && isNullOrUndefined(dropDownObj.index)) ||\n (dropDownTreeObj && dropDownTreeObj.element && (isNullOrUndefined(dropDownTreeObj.value) ||\n dropDownTreeObj.value.length < 1))) {\n if (fieldElem.parentElement.className.indexOf('e-tooltip') < 0) {\n this.renderToolTip(fieldElem.parentElement);\n }\n isValid = false;\n }\n }\n }\n return isValid;\n };\n QueryBuilder.prototype.refreshLevelColl = function () {\n this.levelColl = {};\n var groupElem = this.element.querySelector('.e-group-container');\n if (groupElem) {\n this.levelColl[groupElem.id] = [0];\n var obj = { groupElement: groupElem, level: [0] };\n this.refreshLevel(obj);\n }\n };\n QueryBuilder.prototype.refreshLevel = function (obj) {\n var ruleList = obj.groupElement.querySelector('.e-rule-list').children;\n var childElem;\n var groupElem = obj.groupElement;\n var i;\n var iLen = ruleList.length;\n var groupCount = 0;\n for (i = 0; i < iLen; i++) {\n childElem = ruleList[i];\n if (childElem.className.indexOf('e-group-container') > -1) {\n obj.level.push(groupCount);\n this.levelColl[childElem.id] = obj.level.slice();\n groupCount++;\n obj.groupElement = childElem;\n obj = this.refreshLevel(obj);\n }\n }\n var ruleListElem = closest(groupElem, '.e-rule-list');\n obj.groupElement = ruleListElem ? closest(ruleListElem, '.e-group-container') : groupElem;\n obj.level = this.levelColl[obj.groupElement.id].slice();\n return obj;\n };\n QueryBuilder.prototype.groupTemplate = function (isConnector) {\n var glueElem;\n var inputElem;\n var dragClsName;\n var labelElem;\n var grpActElem;\n var groupBtn;\n var groupElem = this.createElement('div', { attrs: { class: 'e-group-container' } });\n var groupHdrElem = this.createElement('div', { attrs: { class: 'e-group-header' } });\n var grpBodyElem = this.createElement('div', { attrs: { class: 'e-group-body' } });\n var rulesElem = this.createElement('div', { attrs: { class: 'e-rule-list' } });\n groupElem.appendChild(groupHdrElem);\n grpBodyElem.appendChild(rulesElem);\n groupElem.appendChild(grpBodyElem);\n // create button group in OR and AND process\n if (!this.headerTemplate) {\n if (this.allowDragAndDrop) {\n dragClsName = 'e-icons e-drag-qb-rule';\n }\n else {\n dragClsName = 'e-icons e-drag-qb-rule e-hidden';\n }\n var spanDragElement = this.createElement('span', { attrs: { class: dragClsName, 'aria-lable': 'drag handle',\n title: 'drag handle' } });\n groupHdrElem.appendChild(spanDragElement);\n var className = this.enableSeparateConnector && !isConnector ? 'e-lib e-btn-group e-qb-toggle-btn' : 'e-lib e-btn-group';\n glueElem = this.createElement('div', { attrs: { class: className, role: 'group' } });\n if (this.enableSeparateConnector) {\n glueElem.classList.add('e-multi-connector');\n }\n if (this.enableNotCondition) {\n if (this.enableSeparateConnector) {\n inputElem = this.createElement('input', { attrs: { type: 'checkbox', class: 'e-qb-toggle' } });\n }\n else {\n inputElem = this.createElement('button', { attrs: { type: 'button', class: 'e-qb-toggle' } });\n }\n glueElem.appendChild(inputElem);\n }\n inputElem = this.createElement('input', { attrs: { type: 'radio', class: 'e-btngroup-and', value: 'AND' } });\n glueElem.appendChild(inputElem);\n labelElem = this.createElement('label', { attrs: { class: 'e-lib e-btn e-btngroup-and-lbl e-small' },\n innerHTML: this.l10n.getConstant('AND') });\n glueElem.appendChild(labelElem);\n inputElem = this.createElement('input', { attrs: { type: 'radio', class: 'e-btngroup-or', value: 'OR' } });\n glueElem.appendChild(inputElem);\n labelElem = this.createElement('label', { attrs: { class: 'e-lib e-btn e-btngroup-or-lbl e-small' },\n innerHTML: this.l10n.getConstant('OR') });\n glueElem.appendChild(labelElem);\n groupHdrElem.appendChild(glueElem);\n grpActElem = this.createElement('div', { attrs: { class: 'e-group-action' } });\n if (this.enableSeparateConnector) {\n groupBtn = this.createElement('button', { attrs: { type: 'button', class: 'e-add-condition-btn' } });\n grpActElem.appendChild(groupBtn);\n groupBtn = this.createElement('button', { attrs: { type: 'button', class: 'e-add-group-btn' } });\n grpActElem.appendChild(groupBtn);\n }\n else {\n groupBtn = this.createElement('button', { attrs: { type: 'button', class: 'e-add-btn' } });\n grpActElem.appendChild(groupBtn);\n }\n groupHdrElem.appendChild(grpActElem);\n }\n return groupElem;\n };\n QueryBuilder.prototype.ruleTemplate = function () {\n var tempElem;\n var clsName;\n var cloneClsName;\n var lockClsName;\n var dragClsName;\n var ruleElem = this.createElement('div');\n var fieldElem = this.createElement('div', { attrs: { class: 'e-rule-field' } });\n tempElem = this.createElement('div', { attrs: { class: 'e-rule-filter' } });\n if (this.allowDragAndDrop) {\n dragClsName = 'e-icons e-drag-qb-rule';\n }\n else {\n dragClsName = 'e-icons e-drag-qb-rule e-hidden';\n }\n var spanDragElement = this.createElement('span', { attrs: { class: dragClsName, 'aria-lable': 'drag handle',\n title: 'drag handle' } });\n fieldElem.appendChild(spanDragElement);\n var filterElem = this.createElement('input', { attrs: { type: 'text', class: 'e-filter-input' } });\n tempElem.appendChild(filterElem);\n fieldElem.appendChild(tempElem);\n tempElem = this.createElement('div', { attrs: { class: 'e-rule-operator' } });\n fieldElem.appendChild(tempElem);\n tempElem = this.createElement('div', { attrs: { class: 'e-rule-value' } });\n fieldElem.appendChild(tempElem);\n tempElem = this.createElement('div', { attrs: { class: 'e-rule-value-delete' } });\n if (this.showButtons.cloneRule) {\n cloneClsName = 'e-clone-rule-btn e-clone-rule e-css e-btn e-small e-round e-icon-btn';\n }\n else {\n cloneClsName = 'e-clone-rule-btn e-clone-rule e-css e-btn e-small e-round e-icon-btn e-button-hide';\n }\n if (this.showButtons.lockRule) {\n lockClsName = 'e-lock-rule-btn e-lock-rule e-css e-btn e-small e-round e-icons e-icon-btn';\n }\n else {\n lockClsName = 'e-lock-rule-btn e-lock-rule e-css e-btn e-small e-round e-icons e-icon-btn e-button-hide';\n }\n var cloneRuleBtnElem = this.createElement('button', { attrs: { title: this.l10n.getConstant('CloneRule'), type: 'button', class: cloneClsName } });\n var spanElement = this.createElement('span', { attrs: { class: 'e-btn-icon e-icons e-copy' } });\n cloneRuleBtnElem.appendChild(spanElement);\n var cloneLockBtnElem = this.createElement('button', { attrs: { title: this.l10n.getConstant('LockRule'), type: 'button', class: lockClsName } });\n spanElement = this.createElement('span', { attrs: { class: 'e-btn-icon e-icons e-unlock' } });\n cloneLockBtnElem.appendChild(spanElement);\n if (this.showButtons.ruleDelete || isNullOrUndefined(this.showButtons.ruleDelete)) {\n clsName = 'e-removerule e-rule-delete e-css e-btn e-small';\n }\n else {\n clsName = 'e-removerule e-rule-delete e-css e-btn e-small e-button-hide';\n }\n var delBtnElem = this.createElement('button', { attrs: { type: 'button', class: clsName } });\n tempElem.appendChild(cloneRuleBtnElem);\n tempElem.appendChild(cloneLockBtnElem);\n tempElem.appendChild(delBtnElem);\n fieldElem.appendChild(tempElem);\n ruleElem.appendChild(fieldElem);\n return ruleElem;\n };\n QueryBuilder.prototype.addGroupElement = function (isGroup, target, condition, isBtnClick, not, isRoot, rule) {\n var _this = this;\n var args = { groupID: target.id.replace(this.element.id + '_', ''), cancel: false, type: 'insertGroup' };\n if (!this.isImportRules && !this.isInitialLoad && !this.prvtEvtTgrDaD) {\n this.trigger('beforeChange', args, function (observedChangeArgs) {\n _this.addGroupSuccess(observedChangeArgs, isGroup, target, condition, isBtnClick, not, isRoot, rule);\n });\n }\n else {\n this.isInitialLoad = false;\n this.addGroupSuccess(args, isGroup, target, condition, isBtnClick, not, isRoot, rule);\n }\n };\n QueryBuilder.prototype.addGroupSuccess = function (args, isGroup, eventTarget, condition, isBtnClick, not, isRoot, rule) {\n var _this = this;\n if (!args.cancel && (this.element.querySelectorAll('.e-group-container').length <= this.maxGroupCount)) {\n var target = eventTarget;\n var dltGroupBtn = void 0;\n var groupID = '';\n if (target.className.indexOf('e-group-container') < 0) {\n groupID = target.querySelector('.e-group-container') && target.querySelector('.e-group-container').id;\n }\n else {\n groupID = target.id;\n }\n if (this.enableSeparateConnector) {\n this.groupElem = this.groupTemplate();\n }\n var groupElem = this.groupElem.cloneNode(true);\n groupElem.setAttribute('id', this.element.id + '_group' + this.groupIdCounter);\n if (this.groupIdCounter === 0 && this.allowDragAndDrop && groupElem.querySelector('.e-drag-qb-rule')) {\n if (groupElem && groupElem.children[0]) {\n groupElem.children[0].classList.add('e-parent-header');\n }\n addClass([groupElem.querySelector('.e-drag-qb-rule')], 'e-hidden');\n }\n if (this.headerTemplate) {\n if (isRoot) {\n isGroup = false;\n groupElem.setAttribute('id', this.element.id + '_group0');\n this.headerTemplateFn(groupElem, not, condition, rule, groupID);\n this.groupIdCounter = 0;\n }\n else {\n this.headerTemplateFn(groupElem, not, condition, rule, groupID);\n }\n }\n this.groupIdCounter++;\n if (!this.headerTemplate) {\n var andInpElem = groupElem.querySelector('.e-btngroup-and');\n var orInpElem = groupElem.querySelector('.e-btngroup-or');\n var andLblElem = groupElem.querySelector('.e-btngroup-and-lbl');\n var orLblElem = groupElem.querySelector('.e-btngroup-or-lbl');\n andInpElem.setAttribute('id', this.element.id + '_and' + this.btnGroupId);\n orInpElem.setAttribute('id', this.element.id + '_or' + this.btnGroupId);\n andInpElem.setAttribute('name', this.element.id + '_and' + this.btnGroupId);\n orInpElem.setAttribute('name', this.element.id + '_and' + this.btnGroupId);\n andLblElem.setAttribute('for', this.element.id + '_and' + this.btnGroupId);\n orLblElem.setAttribute('for', this.element.id + '_or' + this.btnGroupId);\n this.btnGroupId++;\n }\n if (isGroup) {\n var clsName = void 0;\n if (this.showButtons.groupDelete || isNullOrUndefined(this.showButtons.groupDelete)) {\n clsName = 'e-deletegroup';\n }\n else {\n clsName = 'e-deletegroup e-button-hide';\n }\n dltGroupBtn = this.createElement('button', { attrs: { type: 'button', class: clsName } });\n var button = new Button({ iconCss: 'e-icons e-delete-icon', cssClass: 'e-small e-round' });\n button.appendTo(dltGroupBtn);\n dltGroupBtn.setAttribute('title', this.l10n.getConstant('DeleteGroup'));\n rippleEffect(dltGroupBtn, { selector: '.deletegroup' });\n var ruleList = target.querySelector('.e-rule-list');\n var childElems = ruleList.children;\n var grpLen = 0;\n for (var j = 0, jLen = childElems.length; j < jLen; j++) {\n if (childElems[j].className.indexOf('e-group-container') > -1) {\n grpLen += 1;\n }\n }\n if (this.showButtons.cloneGroup && this.cloneGrpBtnClick) {\n if (this.groupIndex === (childElems.length - 1)) {\n ruleList.appendChild(groupElem);\n this.isLastGroup = true;\n }\n else {\n if (this.enableSeparateConnector) {\n var index = 0;\n var tempGroupIndex = this.groupIndex + 1;\n for (var i = 0; i < tempGroupIndex; i++) {\n if (childElems[i].classList.contains('e-rule-container')) {\n tempGroupIndex++;\n index++;\n }\n }\n if (index > 0) {\n index--;\n }\n var idx = this.groupIndex + index + 1;\n childElems[idx].parentNode.insertBefore(groupElem, childElems[idx]);\n }\n else {\n var idx = this.groupIndex + 1;\n childElems[idx].parentNode.insertBefore(groupElem, childElems[idx]);\n }\n this.isMiddleGroup = true;\n }\n }\n else {\n ruleList.appendChild(groupElem);\n }\n var level = this.levelColl[target.id].slice(0);\n level.push(grpLen);\n this.levelColl[groupElem.id] = level;\n if (this.groupIndex > -1) {\n this.refreshLevelColl();\n }\n if (!this.isImportRules) {\n this.isAddSuccess = true;\n this.addGroups([], target.id.replace(this.element.id + '_', ''));\n this.isAddSuccess = false;\n if (isBtnClick && this.addRuleToNewGroups) {\n this.addRuleElement(groupElem, {});\n }\n }\n if (!this.headerTemplate) {\n var lockClsName = '';\n if (this.showButtons.cloneGroup) {\n lockClsName = 'e-clone-grp-btn e-css e-btn e-small e-round e-icons e-icon-btn';\n }\n else {\n lockClsName = 'e-clone-grp-btn e-css e-btn e-small e-round e-icons e-icon-btn e-button-hide';\n }\n var cloneBtnElem = this.createElement('button', { attrs: { title: this.l10n.getConstant('CloneGroup'), type: 'button', class: lockClsName } });\n var spanElement = this.createElement('span', { attrs: { class: 'e-btn-icon e-icons e-copy' } });\n cloneBtnElem.appendChild(spanElement);\n groupElem.querySelector('.e-group-action').appendChild(cloneBtnElem);\n if (this.showButtons.lockGroup) {\n lockClsName = 'e-lock-grp-btn e-css e-btn e-small e-round e-icons e-icon-btn';\n }\n else {\n lockClsName = 'e-lock-grp-btn e-css e-btn e-small e-round e-icons e-icon-btn e-button-hide';\n }\n var lockBtnElem = this.createElement('button', { attrs: { title: this.l10n.getConstant('LockGroup'), type: 'button', class: lockClsName } });\n var lockSpanElement = this.createElement('span', { attrs: { class: 'e-btn-icon e-icons e-unlock' } });\n lockBtnElem.appendChild(lockSpanElement);\n groupElem.querySelector('.e-group-action').appendChild(lockBtnElem);\n groupElem.querySelector('.e-group-action').appendChild(dltGroupBtn);\n }\n }\n else {\n if (!this.headerTemplate) {\n var lockClsName = '';\n if (this.showButtons.lockGroup) {\n lockClsName = 'e-lock-grp-btn e-css e-btn e-small e-round e-icons e-icon-btn';\n }\n else {\n lockClsName = 'e-lock-grp-btn e-css e-btn e-small e-round e-icons e-icon-btn e-button-hide';\n }\n var lockBtnElem = this.createElement('button', { attrs: { title: this.l10n.getConstant('LockGroup'), type: 'button', class: lockClsName } });\n var spanElement = this.createElement('span', { attrs: { class: 'e-btn-icon e-icons e-unlock' } });\n lockBtnElem.appendChild(spanElement);\n groupElem.querySelector('.e-group-action').appendChild(lockBtnElem);\n }\n target.appendChild(groupElem);\n this.levelColl[groupElem.id] = [0];\n }\n if (this.enableNotCondition) {\n if (!this.headerTemplate) {\n var notElem = groupElem.querySelector('.e-qb-toggle');\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var tglBtn = void 0;\n if (this.enableSeparateConnector) {\n tglBtn = new CheckBox({ label: this.l10n.getConstant('NOT'), cssClass: 'e-qb-toggle' });\n }\n else {\n tglBtn = new Button({ content: this.l10n.getConstant('NOT'), cssClass: 'e-btn e-small' });\n }\n tglBtn.appendTo(notElem);\n groupElem.querySelector('.e-btngroup-and-lbl').classList.add('e-not');\n if (this.updatedRule && this.updatedRule.not) {\n addClass([notElem], 'e-active-toggle');\n }\n }\n }\n if (this.enableSeparateConnector && !this.headerTemplate) {\n var andElem = groupElem.querySelector('.e-btngroup-and');\n var orElem = groupElem.querySelector('.e-btngroup-or');\n var btnGroup = groupElem.querySelector('.e-btn-group');\n for (var i = 0; i < btnGroup.childNodes.length; i++) {\n if (groupElem.querySelector('.e-btn-group').childNodes[i].textContent.toLowerCase() === 'not') {\n if (!this.enableNotCondition) {\n btnGroup.childNodes[i].style.display = 'none';\n }\n else {\n btnGroup.childNodes[i].classList.add('e-multiconnector');\n }\n }\n else {\n btnGroup.childNodes[i].style.display = 'none';\n }\n }\n var prevSibling = groupElem.previousElementSibling;\n if (prevSibling) {\n if (isNullOrUndefined(this.headerTemplate)) {\n groupElem.parentElement.insertBefore(this.groupTemplate(true).querySelector('.e-btn-group'), groupElem);\n var notElem = groupElem.previousElementSibling.childNodes[0];\n if (notElem.classList.contains('e-qb-toggle')) {\n notElem.style.display = 'none';\n }\n }\n if (!this.isImportRules) {\n var groupElement = groupElem.previousElementSibling;\n var newAndElem = groupElement.querySelector('.e-btngroup-and');\n var newOrElem = groupElement.querySelector('.e-btngroup-or');\n if (!andElem.checked && !orElem.checked) {\n var nextSibling = groupElem.nextElementSibling;\n if (nextSibling && nextSibling.classList.contains('e-btn-group')) {\n andElem = nextSibling.querySelector('.e-btngroup-and');\n orElem = nextSibling.querySelector('.e-btngroup-or');\n newAndElem.checked = andElem.checked;\n newOrElem.checked = orElem.checked;\n }\n }\n else if (this.enableSeparateConnector) {\n if (andElem.checked) {\n newAndElem.checked = true;\n }\n if (orElem.checked) {\n newOrElem.checked = true;\n }\n }\n }\n }\n }\n this.updatedRule = null;\n if (this.headerTemplate) {\n var args_4 = { requestType: 'header-template-create', ruleID: groupElem.id, condition: condition,\n notCondition: this.enableNotCondition ? not : undefined };\n this.trigger('actionBegin', args_4);\n }\n else {\n if (this.enableSeparateConnector) {\n var conditionBtn_1 = groupElem.querySelector('.e-add-condition-btn');\n var btnObj = new Button({ cssClass: this.element.id + '_addConditionbtn', content: this.l10n.getConstant('AddCondition') });\n btnObj.appendTo(conditionBtn_1);\n btnObj.element.onclick = function () {\n _this.addRuleElement(closest(conditionBtn_1, '.e-group-container'), {});\n };\n var groupBtn_1 = groupElem.querySelector('.e-add-group-btn');\n btnObj = new Button({ cssClass: this.element.id + '_addGroupbtn', content: this.l10n.getConstant('AddGroup') });\n btnObj.appendTo(groupBtn_1);\n btnObj.element.onclick = function () {\n _this.addGroupElement(true, closest(groupBtn_1, '.e-group-container'), '', true);\n };\n }\n else {\n var groupBtn = groupElem.querySelector('.e-add-btn');\n var btnObj = new DropDownButton({\n items: this.items,\n cssClass: 'e-round e-small e-caret-hide e-addrulegroup',\n iconCss: 'e-icons e-add-icon',\n beforeOpen: this.selectBtn.bind(this, groupBtn),\n select: this.selectBtn.bind(this, groupBtn)\n });\n btnObj.appendTo(groupBtn);\n groupBtn.setAttribute('title', this.l10n.getConstant('AddButton'));\n }\n }\n if (!this.isImportRules && !this.prvtEvtTgrDaD) {\n var grpId = target.id.replace(this.element.id + '_', '');\n var chgrpId = groupElem.id.replace(this.element.id + '_', '');\n this.trigger('change', { groupID: grpId, type: 'insertGroup', childGroupID: chgrpId });\n }\n }\n };\n QueryBuilder.prototype.setMultiConnector = function (trgt) {\n if (this.enableSeparateConnector && !this.headerTemplate) {\n if (trgt.previousElementSibling && this.groupElem.querySelector('.e-btn-group')) {\n trgt.parentElement.insertBefore(this.groupTemplate(true).querySelector('.e-btn-group'), trgt);\n var notElem = trgt.previousElementSibling.childNodes[0];\n if (notElem.classList.contains('e-qb-toggle')) {\n notElem.style.display = 'none';\n }\n this.addHeaderDiv(trgt);\n }\n }\n };\n QueryBuilder.prototype.addHeaderDiv = function (elem) {\n var prevRule;\n var prevElem = elem.previousElementSibling.previousElementSibling;\n if (prevElem) {\n if (prevElem.id.indexOf('rule') > -1) {\n prevRule = this.getRule(prevElem);\n }\n else {\n prevRule = this.getGroup(prevElem);\n }\n if (isNullOrUndefined(prevRule.condition)) {\n prevRule.condition = 'and';\n }\n var orElem = elem.previousElementSibling.querySelector('.e-btngroup-or');\n var andElem = elem.previousElementSibling.querySelector('.e-btngroup-and');\n orElem.disabled = false;\n andElem.disabled = false;\n if (prevRule.condition === 'or') {\n orElem.checked = true;\n }\n else {\n andElem.checked = true;\n }\n }\n };\n QueryBuilder.prototype.headerTemplateFn = function (groupElem, not, condition, rule, groupID, isInitialRule) {\n var template;\n var templateID = this.element.id + '_header';\n var args;\n var groupHdr = groupElem.querySelector('.e-group-header');\n if (this.enableSeparateConnector && groupElem.id.indexOf('rule') !== -1) {\n groupHdr = groupElem;\n }\n if (this.headerTemplate) {\n args = { requestType: 'header-template-initialize', ruleID: groupElem.id,\n notCondition: this.enableNotCondition ? not : undefined,\n condition: condition, rule: this.getRuleCollection(rule, true), groupID: groupID };\n this.trigger('actionBegin', args);\n if (this.enableSeparateConnector && groupElem.id.indexOf('rule') !== -1) {\n args.requestType = 'rule-template-create';\n }\n this.headerFn = this.templateParser(this.headerTemplate);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.isReact) {\n template = this.headerFn(args, this, groupElem.id, templateID)[0];\n if (this.enableSeparateConnector && isInitialRule) {\n this.enableSeparateConnectorInitialRule(groupElem, template);\n }\n else if (this.enableSeparateConnector && groupElem.id.indexOf('rule') !== -1) {\n groupHdr.parentElement.insertBefore(template, groupHdr.nextElementSibling);\n }\n else {\n groupHdr.appendChild(template);\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n }\n else if (this.isAngular) {\n var templateColl = this.headerFn(args, this, groupElem.id, templateID);\n template = (templateColl[0].nodeType === 3) ? templateColl[1] : templateColl[0];\n if (this.enableSeparateConnector && isInitialRule) {\n this.enableSeparateConnectorInitialRule(groupElem, template);\n }\n else if (this.enableSeparateConnector && groupElem.id.indexOf('rule') !== -1) {\n groupHdr.parentElement.insertBefore(template, groupHdr.nextElementSibling);\n }\n else {\n groupHdr.appendChild(template);\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n }\n else if (this.isVue3) {\n template = this.headerFn(args, this, groupElem.id, templateID);\n if (this.enableSeparateConnector && isInitialRule) {\n this.enableSeparateConnectorInitialRule(groupElem, template);\n }\n else if (this.enableSeparateConnector && groupElem.id.indexOf('rule') !== -1) {\n groupHdr.parentElement.insertBefore(template, groupHdr.nextElementSibling);\n }\n else {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n append(template, groupHdr);\n }\n }\n else {\n template = this.headerFn(args, this, 'Template', templateID)[0];\n if (this.enableSeparateConnector && isInitialRule) {\n this.enableSeparateConnectorInitialRule(groupElem, template);\n }\n else if (this.enableSeparateConnector && groupElem.id.indexOf('rule') !== -1) {\n groupHdr.parentElement.insertBefore(template, groupHdr.nextElementSibling);\n }\n else {\n groupHdr.appendChild(template);\n }\n }\n this.renderReactTemplates();\n }\n return groupElem;\n };\n QueryBuilder.prototype.enableSeparateConnectorInitialRule = function (groupElem, template) {\n var elem = groupElem.nextElementSibling ? groupElem.nextElementSibling : groupElem;\n var group = elem.closest('.e-group-container');\n if (!groupElem.nextElementSibling && group) {\n group = group.nextElementSibling ? group.nextElementSibling : group;\n }\n if (group) {\n group.parentElement.insertBefore(template, group);\n }\n };\n /**\n * Notify the changes to component.\n *\n * @param {string | number | boolean | Date | string[] | number[] | Date[]} value - 'value' to be passed to update the rule value.\n * @param {Element} element - 'element' to be passed to update the rule.\n * @param {string} type - 'type' to be passed to update the rule .\n * @returns {void}.\n */\n QueryBuilder.prototype.notifyChange = function (value, element, type) {\n var grpElement = closest(element, '.e-group-container');\n var rules = this.getParentGroup(grpElement);\n var ruleElement = closest(element, '.e-rule-container');\n var index = 0;\n if (type === 'not') {\n rules.not = value;\n return;\n }\n if (type === 'condition') {\n if (this.enableSeparateConnector) {\n ruleElement = element.parentElement.previousElementSibling;\n if (ruleElement && ruleElement.classList.contains('e-group-container')) {\n ruleElement = ruleElement.querySelectorAll('.e-rule-container')[ruleElement.querySelectorAll('.e-rule-container').length - 1];\n }\n if (ruleElement && ruleElement.classList.contains('e-rule-container')) {\n rules = this.getRule(ruleElement);\n }\n rules.condition = value;\n }\n else {\n rules.condition = value;\n }\n return;\n }\n while (ruleElement && ruleElement.previousElementSibling !== null) {\n ruleElement = ruleElement.previousElementSibling;\n if (!this.enableSeparateConnector || (this.enableSeparateConnector &&\n ((!this.headerTemplate && !ruleElement.classList.contains('e-btn-group')) ||\n this.headerTemplate && (ruleElement.classList.contains('e-rule-container') ||\n ruleElement.classList.contains('e-group-container'))))) {\n index++;\n }\n }\n var rule = rules.rules[index];\n var column = this.getColumn(rule.field);\n var format = this.getFormat(column.format);\n if (column.type === 'date') {\n if (value instanceof Date) {\n value = this.intl.formatDate(value, format);\n }\n else if (value instanceof Array) {\n for (var i = 0; i < value.length; i++) {\n if (value[i] && value[i] instanceof Date) {\n value[i] = this.intl.formatDate(value[i], format);\n }\n }\n }\n }\n if (column.ruleTemplate) {\n this.templateChange(element, value, type);\n }\n else {\n this.isNotified = true;\n this.updateRules(element, value);\n this.isNotified = false;\n }\n };\n QueryBuilder.prototype.templateChange = function (element, value, type) {\n var grpElem = closest(element, '.e-group-container');\n var eventsArgs;\n var rules = this.getParentGroup(grpElem);\n var ruleElem = closest(element, '.e-rule-container');\n var index = 0;\n if (this.allowValidation) {\n this.validateValue(rules, ruleElem);\n }\n while (ruleElem && ruleElem.previousElementSibling !== null) {\n ruleElem = ruleElem.previousElementSibling;\n if (!this.enableSeparateConnector || (this.enableSeparateConnector &&\n ((!this.headerTemplate && !ruleElem.classList.contains('e-btn-group')) ||\n this.headerTemplate && (ruleElem.classList.contains('e-rule-container') ||\n ruleElem.classList.contains('e-group-container'))))) {\n index++;\n }\n }\n var rule = rules.rules[index];\n if (type === 'field') {\n this.selectedColumn = this.getColumn(value);\n }\n else if (rule) {\n this.selectedColumn = this.getColumn(rule.field);\n }\n var operVal;\n this.previousColumn = this.getColumn(rule.field);\n var beforeRules = this.getValidRules(this.rule);\n if (this.selectedColumn) {\n if (this.selectedColumn.operators) {\n operVal = this.selectedColumn.operators;\n }\n else {\n operVal = this.customOperators[this.selectedColumn.type + 'Operator'];\n }\n }\n var arrOper = ['in', 'notin', 'between', 'notbetween'];\n var prevOper;\n switch (type) {\n case 'field':\n rule.field = value;\n rule.label = this.selectedColumn.label;\n rule.type = this.selectedColumn.type;\n rule.value = '';\n rule.operator = operVal[0].value;\n break;\n case 'operator':\n prevOper = rule.operator;\n rule.operator = value;\n if (arrOper.indexOf(rule.operator) > -1) {\n rule.value = [];\n }\n else if (arrOper.indexOf(prevOper) > -1) {\n rule.value = '';\n }\n break;\n case 'value':\n rule.value = value;\n }\n this.changeRuleTemplate(this.selectedColumn, element);\n this.filterRules(beforeRules, this.getValidRules(this.rule), type);\n if (this.selectedColumn && this.selectedColumn.ruleTemplate) {\n if (type === 'field' || type === 'operator') {\n var grpEle = closest(element, '.e-rule-container');\n this.destroyControls(grpEle, true);\n detach(grpEle.querySelector('.e-rule-field'));\n var ruleElement = this.appendRuleElem(closest(grpEle, '.e-group-container'), this.selectedColumn, 'change', grpEle.id, type, rule);\n if (this.displayMode === 'Vertical' || this.element.className.indexOf('e-device') > -1) {\n ruleElement.className = 'e-rule-container e-vertical-mode';\n }\n else {\n ruleElement.className = 'e-rule-container e-horizontal-mode';\n }\n if (!this.enableSeparateConnector) {\n if (ruleElement.previousElementSibling && ruleElement.previousElementSibling.className.indexOf('e-rule-container') > -1) {\n if (ruleElement.className.indexOf('e-joined-rule') < 0) {\n ruleElement.className += ' e-joined-rule';\n }\n if (ruleElement.previousElementSibling.className.indexOf('e-prev-joined-rule') < 0) {\n ruleElement.previousElementSibling.className += ' e-prev-joined-rule';\n }\n }\n }\n if (ruleElement.previousElementSibling && ruleElement.previousElementSibling.className.indexOf('e-group-container') > -1 &&\n ruleElement.className.indexOf('e-separate-rule') < 0) {\n ruleElement.className += ' e-separate-rule';\n }\n var args = { requestType: 'template-create', action: type, ruleID: grpEle.id,\n fields: this.fields, rule: rule };\n eventsArgs = { groupID: grpElem.id.replace(this.element.id + '_', ''), ruleID: grpEle.id.replace(this.element.id + '_', ''),\n value: rule.field, type: 'field' };\n this.trigger('actionBegin', args);\n this.trigger('change', eventsArgs);\n }\n }\n };\n QueryBuilder.prototype.changeValue = function (i, args) {\n var _this = this;\n var element;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.isNumInput && typeof args.value === 'number') {\n this.isNumInput = false;\n return;\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (args.element && args.element.classList.contains('e-multiselect')) {\n var multiSelectArgs = args;\n element = multiSelectArgs.element;\n }\n else if (args.event) {\n element = args.event.target;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n }\n else if (args.type === 'input' && args.currentTarget) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n element = args.currentTarget;\n }\n else {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n element = args.element;\n }\n if (element.className.indexOf('e-day') > -1 || element.className.indexOf('e-today') > -1 || element.className.indexOf('e-cell') > -1) {\n var calenderArgs = args;\n element = calenderArgs.element;\n }\n var groupElem = closest(element, '.e-group-container');\n var ruleElem = closest(element, '.e-rule-container');\n var groupID = groupElem && groupElem.id.replace(this.element.id + '_', '');\n var ruleID = ruleElem.id.replace(this.element.id + '_', '');\n var dateElement = args;\n var dropDownObj;\n if (dateElement.element && dateElement.element.className.indexOf('e-datepicker') > -1) {\n element = dateElement.element;\n dropDownObj = getComponent(closest(element, '.e-rule-container').querySelector('.e-filter-input'), 'dropdownlist');\n if (dropDownObj) {\n this.selectedColumn = dropDownObj.getDataByValue(dropDownObj.value);\n }\n dropDownObj = getComponent(closest(element, '.e-rule-container').querySelector('.e-filter-input'), 'dropdowntree');\n if (dropDownObj) {\n this.selectedColumn = this.getColumn(dropDownObj.value[0]);\n }\n }\n var value;\n var rbValue;\n if (element.className.indexOf('e-radio') > -1) {\n rbValue = parseInt(element.id.split('valuekey')[1], 10);\n if (this.fieldMode === 'Default') {\n dropDownObj = getComponent(closest(element, '.e-rule-container').querySelector('.e-filter-input'), 'dropdownlist');\n this.selectedColumn = dropDownObj.getDataByValue(dropDownObj.value);\n if (this.selectedColumn.columns) {\n dropDownObj = getComponent(closest(element, '.e-rule-container').querySelector('.e-rule-sub-filter .e-dropdownlist'), 'dropdownlist');\n this.selectedColumn = this.getColumn(dropDownObj.value);\n }\n }\n else {\n dropDownObj = getComponent(closest(element, '.e-rule-container').querySelector('.e-filter-input'), 'dropdowntree');\n this.selectedColumn = this.getColumn(dropDownObj.value[0]);\n }\n if (this.selectedColumn.values) {\n value = this.selectedColumn.values[rbValue];\n }\n else {\n var valColl = [true, false];\n value = valColl[rbValue];\n }\n }\n else if (element.className.indexOf('e-multiselect') > -1) {\n value = getComponent(element, 'multiselect').value;\n }\n else {\n value = args.value;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (args.type === 'input' && args.currentTarget) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n value = Number(args.currentTarget.value);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var elem = args.currentTarget;\n var numericTextBoxObj = getInstance(elem, NumericTextBox);\n numericTextBoxObj.value = value;\n this.isNumInput = true;\n }\n }\n if (args.name === 'input' && this.immediateModeDelay) {\n window.clearInterval(this.timer);\n this.timer = window.setInterval(function () { _this.filterValue(groupID, ruleID, value, i, element); }, this.immediateModeDelay);\n }\n else {\n this.filterValue(groupID, ruleID, value, i, element);\n }\n };\n QueryBuilder.prototype.filterValue = function (grID, rlID, value, i, ele) {\n var _this = this;\n var eventsArgs = { groupID: grID, ruleID: rlID, value: value, cancel: false, type: 'value' };\n window.clearInterval(this.timer);\n if (!this.isImportRules) {\n this.trigger('beforeChange', eventsArgs, function (observedChangeArgs) {\n _this.changeValueSuccessCallBack(observedChangeArgs, ele, i, grID, rlID);\n });\n }\n else {\n this.changeValueSuccessCallBack(eventsArgs, ele, i, grID, rlID);\n }\n };\n QueryBuilder.prototype.changeValueSuccessCallBack = function (args, element, i, groupID, ruleID) {\n if (!args.cancel) {\n this.updateRules(element, args.value, i);\n if (!this.isImportRules) {\n this.trigger('change', { groupID: groupID, ruleID: ruleID, value: args.value, cancel: false, type: 'value' });\n }\n }\n };\n QueryBuilder.prototype.fieldClose = function (id) {\n if (this.isFieldChange || this.isDestroy) {\n return;\n }\n this.isFieldClose = true;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var ddl = getComponent(id, 'dropdownlist');\n var item = ddl.popupObj.element.querySelector('.e-active');\n var itemData = ddl.getItemData();\n ddl.value = itemData.value;\n var customArgs = { element: ddl.element, value: itemData.value, isInteracted: true,\n previousItemData: this.prevItemData, previousItem: null, item: item, itemData: itemData, event: null, e: null };\n if (ddl.previousValue !== ddl.value) {\n this.changeField(customArgs);\n }\n this.isFieldChange = false;\n };\n QueryBuilder.prototype.changeField = function (args) {\n if (args.isInteracted) {\n if (isNullOrUndefined(args.value)) {\n return;\n }\n this.isFieldChange = true;\n this.prevItemData = args.itemData;\n var fieldElem = closest(args.element, '.e-rule-filter') || closest(args.element, '.e-rule-sub-filter');\n var column = this.fieldMode === 'DropdownTree' ? this.getColumn(args.value[0]) : this.getColumn(args.value);\n if (this.fieldMode === 'DropdownTree' && fieldElem !== null) {\n var ddtElem = fieldElem.querySelector('.e-dropdowntree.e-control');\n var ddt = getComponent(ddtElem, 'dropdowntree');\n if (column) {\n if (column.type === 'object') {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ddt.value = args.oldValue;\n ddt.dataBind();\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (isNullOrUndefined(args.oldValue)) {\n ddtElem.value = '';\n }\n else {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var result = this.getLabelFromColumn(args.oldValue[0]);\n ddtElem.value = result;\n }\n return;\n }\n else {\n if (!isNullOrUndefined(args.value[0])) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ddt.value = args.value[0];\n ddt.dataBind();\n var result = this.getLabelFromColumn(args.value[0]);\n ddtElem.value = result;\n }\n }\n }\n else {\n return;\n }\n }\n this.destroySubFields(fieldElem);\n this.subFieldElem = null;\n this.isNotValueChange = true;\n if (column && column.ruleTemplate) {\n this.templateChange(args.element, column.field, 'field');\n }\n else if (column && column.columns && column.columns[0].ruleTemplate) {\n this.templateChange(args.element, column.columns[0].field, 'field');\n }\n else {\n var groupElem = closest(args.element, '.e-group-container');\n var rules = this.getParentGroup(groupElem);\n var ruleElem = closest(args.element, '.e-rule-container');\n var index = 0;\n while (ruleElem && ruleElem.previousElementSibling !== null) {\n ruleElem = ruleElem.previousElementSibling;\n if (!this.enableSeparateConnector || (this.enableSeparateConnector &&\n ((!this.headerTemplate && !ruleElem.classList.contains('e-btn-group')) ||\n this.headerTemplate && (ruleElem.classList.contains('e-rule-container') ||\n ruleElem.classList.contains('e-group-container'))))) {\n index++;\n }\n }\n rules.rules[index].value = '';\n this.changeRule(rules.rules[index], args);\n }\n }\n };\n QueryBuilder.prototype.changeRule = function (rule, ddlArgs) {\n if (!ddlArgs.itemData) {\n if (this.fieldMode === 'DropdownTree') {\n var ddt = getComponent(ddlArgs.element, 'dropdowntree');\n if (ddt.value == null) {\n return;\n }\n }\n else {\n return;\n }\n }\n var tempRule = {};\n var filterElem = closest(ddlArgs.element, '.e-rule-filter');\n filterElem = filterElem ? filterElem : closest(ddlArgs.element, '.e-rule-sub-filter');\n var ddlObj = getComponent(ddlArgs.element, 'dropdownlist');\n if (this.fieldMode === 'DropdownTree' && filterElem !== null) {\n ddlObj = getComponent(ddlArgs.element, 'dropdowntree');\n }\n var element = closest(ddlArgs.element, '.e-group-container');\n var groupID = element.id.replace(this.element.id + '_', '');\n this.changeFilter(filterElem, ddlObj, groupID, rule, tempRule, ddlArgs);\n };\n QueryBuilder.prototype.changeFilter = function (flt, dl, grID, rl, tmpRl, dArg) {\n var _this = this;\n if (flt) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var ddlValue = void 0;\n if (this.fieldMode === 'DropdownTree') {\n ddlValue = (dl.value[0]);\n }\n else {\n ddlValue = this.isImportRules ? this.GetRootColumnName(dl.value) : dl.value;\n }\n this.selectedColumn = this.getColumn(ddlValue);\n var ruleElem = closest(flt, '.e-rule-container');\n var ruleID = ruleElem.id.replace(this.element.id + '_', '');\n var eventsArgs = { groupID: grID, ruleID: ruleID, selectedField: this.fieldMode === 'DropdownTree' ?\n dl.value[0] : dl.value, cancel: false, type: 'field' };\n if (!this.isImportRules && !this.prvtEvtTgrDaD) {\n this.trigger('beforeChange', eventsArgs, function (observedChangeArgs) {\n _this.fieldChangeSuccess(observedChangeArgs, tmpRl, flt, rl, dArg);\n });\n }\n else {\n this.fieldChangeSuccess(eventsArgs, tmpRl, flt, rl, dArg);\n }\n }\n else {\n var operatorElem = closest(dArg.element, '.e-rule-operator');\n this.changeOperator(flt, operatorElem, dl, grID, rl, tmpRl, dArg);\n }\n };\n QueryBuilder.prototype.changeOperator = function (\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n flt, opr, dl, grID, rl, tmpRl, dArg) {\n var _this = this;\n var ruleElem;\n var ruleID;\n var eventsArgs;\n if (opr) {\n ruleElem = closest(opr, '.e-rule-container');\n ruleID = ruleElem.id.replace(this.element.id + '_', '');\n eventsArgs = { groupID: grID, ruleID: ruleID, selectedIndex: dl.index, cancel: false, type: 'operator' };\n if (!this.isImportRules) {\n this.trigger('beforeChange', eventsArgs, function (observedChangeArgs) {\n _this.operatorChangeSuccess(observedChangeArgs, flt, tmpRl, rl, dArg);\n });\n }\n else {\n this.operatorChangeSuccess(eventsArgs, flt, tmpRl, rl, dArg);\n }\n }\n else {\n this.changeRuleValues(flt, rl, tmpRl, dArg);\n }\n };\n QueryBuilder.prototype.fieldChangeSuccess = function (args, tempRule, filterElem, rule, ddlArgs) {\n var ruleElem = closest(filterElem, '.e-rule-container');\n var operatorElem = closest(ddlArgs.element, '.e-rule-operator');\n var element = closest(ddlArgs.element, '.e-group-container');\n var groupID = element.id.replace(this.element.id + '_', '');\n var ddlObj = getComponent(ddlArgs.element, 'dropdownlist');\n var tooltipElem = ruleElem.querySelectorAll('.e-tooltip.e-input-group');\n for (var i = 0; i < tooltipElem.length; i++) {\n getComponent(tooltipElem[i], 'tooltip').destroy();\n }\n if (!args.cancel) {\n if (isNullOrUndefined(this.selectedColumn)) {\n return;\n }\n tempRule.type = this.selectedColumn.type;\n if (ruleElem.querySelector('.e-template')) {\n rule.value = '';\n }\n if (this.selectedColumn.type === 'object' && this.fieldMode === 'Default') {\n tempRule.type = this.selectedColumn.columns[0].type;\n while (this.selectedColumn.columns) {\n this.createSubFields(filterElem, rule, tempRule, ddlArgs);\n }\n }\n else {\n this.destroySubFields(filterElem);\n this.changeOperator(filterElem, operatorElem, ddlObj, groupID, rule, tempRule, ddlArgs);\n }\n }\n else {\n this.changeOperator(filterElem, operatorElem, ddlObj, groupID, rule, tempRule, ddlArgs);\n }\n };\n QueryBuilder.prototype.destroySubFields = function (filterElem) {\n while (filterElem && filterElem.nextElementSibling.classList.contains('e-rule-sub-filter')) {\n this.destroyControls(filterElem);\n filterElem.nextElementSibling.remove();\n }\n };\n QueryBuilder.prototype.createSubFields = function (filterElem, rule, tempRule, ddlArgs) {\n var subFieldValue = false;\n var fieldElem = closest(filterElem, '.e-rule-field');\n var tempElem = this.createElement('div', { attrs: { class: 'e-rule-sub-filter', id: 'subfilter' + this.subFilterCounter } });\n fieldElem.insertBefore(tempElem, fieldElem.querySelector('.e-rule-operator'));\n var ruleId = closest(tempElem, '.e-rule-container').id;\n var subFieldElem = this.createElement('input', { attrs: { type: 'text', id: ruleId + '_subfilterkey' + this.subFilterCounter } });\n tempElem.appendChild(subFieldElem);\n var height = (this.element.className.indexOf('e-device') > -1) ? '250px' : '200px';\n var ddlField;\n ddlField = {\n dataSource: this.selectedColumn.columns,\n fields: this.fields,\n placeholder: this.l10n.getConstant('SelectField'),\n popupHeight: ((this.selectedColumn.columns.length > 5) ? height : 'auto'),\n change: this.changeField.bind(this),\n index: 0,\n open: this.popupOpen.bind(this, false)\n };\n if (this.fieldModel) {\n ddlField = __assign({}, ddlField, this.fieldModel);\n }\n var dropDownList = new DropDownList(ddlField);\n dropDownList.appendTo('#' + ruleId + '_subfilterkey' + this.subFilterCounter);\n if (this.isImportRules || (this.previousColumn && this.previousColumn.ruleTemplate &&\n this.GetRootColumnName(rule.field) === this.GetRootColumnName(this.previousColumn.field))) {\n var subField = this.selectedColumn.columns;\n for (var i = 0; i < subField.length; i++) {\n if (rule.field === subField[i].field || rule.field.indexOf(subField[i].field + this.separator) > -1) {\n dropDownList.value = subField[i].field;\n this.selectedColumn = subField[i];\n subFieldValue = true;\n break;\n }\n }\n }\n this.subFilterCounter++;\n this.subFieldElem = subFieldElem;\n // eslint-disable-next-line\n ddlArgs.itemData = ddlArgs.itemData;\n if (!subFieldValue && this.selectedColumn.columns) {\n if (!subFieldValue && this.isImportRules) {\n dropDownList.value = null;\n }\n this.selectedColumn = this.selectedColumn.columns[0];\n }\n this.previousColumn = this.selectedColumn;\n if (!this.selectedColumn.columns) {\n this.changeRuleValues(tempElem, rule, tempRule, ddlArgs);\n }\n };\n QueryBuilder.prototype.operatorChangeSuccess = function (eventsArgs, filterElem, tempRule, rule, ddlArgs) {\n if (!eventsArgs.cancel) {\n var operatorElem = closest(ddlArgs.element, '.e-rule-operator');\n var valElem = operatorElem.nextElementSibling;\n var dropDownObj = getComponent(ddlArgs.element, 'dropdownlist');\n var prevOper = rule.operator ? rule.operator.toString().toLowerCase() : '';\n tempRule.operator = dropDownObj.value.toString();\n var currOper = tempRule.operator.toLowerCase();\n if (tempRule.operator.toLowerCase().indexOf('between') > -1 || (tempRule.operator.toLowerCase().indexOf('in') > -1\n && tempRule.operator.toLowerCase().indexOf('contains') < 0)) {\n filterElem = operatorElem.previousElementSibling;\n tempRule.type = rule.type;\n if (tempRule.operator.toLowerCase().indexOf('in') < 0 || prevOper.indexOf('in') < 0) {\n rule.value = [];\n }\n }\n else if (typeof rule.value === 'object' && rule.value !== null) {\n rule.value = rule.value.length > 0 ? rule.value[0] : rule.type === 'number' ? 0 : '';\n }\n if (ddlArgs.previousItemData) {\n var prevValue = ddlArgs.previousItemData.value.toString().toLowerCase();\n if ((prevValue.indexOf('between') > -1 || (prevValue.indexOf('in') > -1 || (prevValue.indexOf('null') > -1)\n || (prevValue.indexOf('empty') > -1)) && prevValue.indexOf('contains') < 0)) {\n filterElem = operatorElem.previousElementSibling;\n tempRule.type = rule.type;\n }\n }\n if ((prevOper.indexOf('in') > -1 && prevOper.indexOf('in') < 5) && (currOper.indexOf('in') > -1\n && currOper.indexOf('in') < 5)) {\n filterElem = null;\n }\n if (tempRule.operator.indexOf('null') > -1 || (tempRule.operator.indexOf('empty') > -1)) {\n var parentElem = operatorElem.parentElement.querySelector('.e-rule-value');\n var tooltipElem = parentElem.querySelector('.e-tooltip.e-input-group');\n if (tooltipElem) {\n getComponent(tooltipElem, 'tooltip').destroy();\n }\n removeClass([parentElem], 'e-show');\n addClass([parentElem], 'e-hide');\n }\n if (valElem && this.getColumn(rule.field).template) {\n filterElem = operatorElem.previousElementSibling;\n }\n if (valElem.children.length === 0) {\n filterElem = operatorElem.previousElementSibling;\n }\n this.changeRuleValues(filterElem, rule, tempRule, ddlArgs);\n }\n };\n QueryBuilder.prototype.changeRuleValues = function (filterElem, rule, tempRule, ddlArgs) {\n var operatorElem = closest(ddlArgs.element, '.e-rule-operator');\n var isSub;\n var ddlObj;\n var operatorList;\n var oprElem;\n if (filterElem) {\n operatorElem = filterElem.nextElementSibling;\n if (filterElem.classList.contains('e-rule-sub-filter')) {\n tempRule.type = this.selectedColumn.type;\n isSub = operatorElem.classList.contains('e-rule-sub-filter');\n operatorElem = isSub ? operatorElem.nextElementSibling : operatorElem;\n }\n addClass([operatorElem], 'e-operator');\n if (operatorElem.childElementCount) {\n ddlObj = getComponent(operatorElem.querySelector('.e-dropdownlist'), 'dropdownlist');\n tempRule.operator = ddlObj.value;\n var fieldObj = void 0;\n if (this.fieldMode === 'DropdownTree') {\n fieldObj = getComponent(filterElem.querySelector('.e-dropdowntree'), 'dropdowntree');\n }\n else {\n fieldObj = getComponent(filterElem.querySelector('.e-dropdownlist'), 'dropdownlist');\n }\n tempRule.type = this.fieldMode === 'DropdownTree' ? this.getColumn(fieldObj.value[0]).type :\n this.getColumn(fieldObj.value).type;\n var itemData = ddlArgs.itemData;\n if (ddlObj.value !== '') {\n this.renderValues(operatorElem, itemData, ddlArgs.previousItemData, true, rule, tempRule, ddlArgs.element);\n }\n }\n else {\n var ruleId = closest(operatorElem, '.e-rule-container').id;\n oprElem = this.createElement('input', { attrs: { type: 'text', id: ruleId + '_operatorkey' } });\n operatorElem.appendChild(oprElem);\n if (this.selectedColumn.operators) {\n operatorList = this.selectedColumn.operators;\n }\n else if (ddlArgs.itemData) {\n operatorList = this.customOperators[this.selectedColumn.type + 'Operator'];\n }\n var height = (this.element.className.indexOf('e-device') > -1) ? '250px' : '200px';\n var value = operatorList[0].value;\n var ddlIdx = 0;\n if (!this.autoSelectOperator) {\n value = '';\n ddlIdx = -1;\n }\n if (this.isImportRules || (this.ruleIndex > -1 || this.groupIndex > -1 || this.prvtEvtTgrDaD)) {\n value = rule ? (rule.operator ? rule.operator : value) : value;\n }\n var ddlOperator = void 0;\n ddlOperator = {\n dataSource: operatorList,\n fields: { text: 'key', value: 'value' },\n placeholder: this.l10n.getConstant('SelectOperator'),\n popupHeight: ((operatorList.length > 5) ? height : 'auto'),\n change: this.changeField.bind(this),\n index: ddlIdx,\n value: value,\n open: this.popupOpen.bind(this, false)\n };\n if (this.operatorModel) {\n ddlOperator = __assign({}, ddlOperator, this.operatorModel);\n }\n var dropDownList = new DropDownList(ddlOperator);\n dropDownList.appendTo('#' + ruleId + '_operatorkey');\n tempRule.operator = (rule && rule.operator !== '' && !isNullOrUndefined(rule.operator)) ? rule.operator : operatorList[0].value;\n if (this.isImportRules) {\n tempRule.type = this.selectedColumn.type;\n tempRule.operator = rule.operator;\n }\n if (!isNullOrUndefined(value) && value !== '') {\n this.renderValues(operatorElem, this.selectedColumn, ddlArgs.previousItemData, false, rule, tempRule, ddlArgs.element);\n }\n else if (this.autoSelectField && this.autoSelectOperator) {\n this.renderValues(operatorElem, this.selectedColumn, ddlArgs.previousItemData, false, rule, tempRule, ddlArgs.element);\n }\n }\n }\n if (!this.isImportRules) {\n this.updateRules(ddlArgs.element, ddlArgs.item);\n }\n };\n QueryBuilder.prototype.popupOpen = function (isField, args) {\n if (this.enableRtl) {\n addClass([args.popup.element], 'e-rtl');\n }\n if (isField) {\n this.isFieldClose = false;\n }\n };\n QueryBuilder.prototype.destroyControls = function (target, isRuleTemplate) {\n var element = isRuleTemplate ? target : target.nextElementSibling;\n var inputElement = element.querySelectorAll('input.e-control');\n var divElement = element.querySelectorAll('div.e-control:not(.e-handle)');\n var columns = this.columns;\n for (var i = 0, len = inputElement.length; i < len; i++) {\n if (inputElement[i].classList.contains('e-textbox')) {\n getComponent(inputElement[i], 'textbox').destroy();\n detach(select('input#' + inputElement[i].id, element));\n }\n else if (inputElement[i].classList.contains('e-dropdownlist')) {\n if (this.allowValidation && inputElement[i].parentElement.className.indexOf('e-tooltip') > -1) {\n getComponent(inputElement[i].parentElement, 'tooltip').destroy();\n }\n getComponent(inputElement[i], 'dropdownlist').destroy();\n }\n else if (inputElement[i].classList.contains('e-radio')) {\n getComponent(inputElement[i], 'radio').destroy();\n }\n else if (inputElement[i].classList.contains('e-numerictextbox')) {\n getComponent(inputElement[i], 'numerictextbox').destroy();\n detach(select('input#' + inputElement[i].id, element));\n }\n else if (inputElement[i].classList.contains('e-datepicker')) {\n getComponent(inputElement[i], 'datepicker').destroy();\n }\n else if (inputElement[i].classList.contains('e-multiselect')) {\n getComponent(inputElement[i], 'multiselect').destroy();\n }\n else if (inputElement[i].className.indexOf('e-template') > -1) {\n var clsName = inputElement[i].className;\n for (var j = 0, jLen = columns.length; j < jLen; j++) {\n if (columns[j].template && clsName.indexOf(columns[j].field) > -1) {\n this.templateDestroy(columns[j], inputElement[i].id);\n break;\n }\n }\n }\n if (document.getElementById(inputElement[i].id)) {\n detach(inputElement[i]);\n }\n }\n for (var i = 0, len = divElement.length; i < len; i++) {\n if (divElement[i].className.indexOf('e-template') > -1) {\n var clsName = divElement[i].className;\n for (var j = 0, jLen = columns.length; j < jLen; j++) {\n if (columns[j].template && clsName.indexOf(columns[j].field) > -1) {\n this.templateDestroy(columns[j], divElement[i].id);\n break;\n }\n }\n }\n detach(divElement[i]);\n }\n var templateElement = element.querySelectorAll('.e-template:not(.e-control)');\n for (var i = 0, len = templateElement.length; i < len; i++) {\n detach(templateElement[i]);\n }\n };\n QueryBuilder.prototype.templateDestroy = function (column, elemId) {\n var template;\n if (typeof column.template !== 'string' || column.template.destroy === undefined) {\n template = column.template;\n }\n else {\n return;\n }\n var temp = template.destroy;\n if (template.destroy) {\n var templateElements = void 0;\n if (document.getElementById(elemId)) {\n templateElements = closest(document.getElementById(elemId), '.e-rule-field').querySelectorAll('.e-template');\n }\n if (typeof temp === 'string') {\n temp = getValue(temp, window);\n temp({ field: column.field, elementId: elemId, elements: templateElements });\n }\n else {\n template.destroy({ field: column.field, elementId: elemId, elements: templateElements });\n }\n }\n };\n /**\n * Return values bound to the column.\n *\n * @param {string} field - 'field' to be passed to get the field values.\n * @returns {object[]} - Values bound to the column\n */\n QueryBuilder.prototype.getValues = function (field) {\n var original = {};\n var result = [];\n var value;\n var fieldColl = [];\n if (this.separator.length > 0) {\n fieldColl = field.split(this.separator);\n }\n var dataSource = this.dataColl;\n if (this.dataColl[1]) {\n for (var i = 0, iLen = dataSource.length; i < iLen; i++) {\n var data = {};\n if (fieldColl.length > 1) {\n var dataObj = dataSource[i];\n var fieldStr = void 0;\n for (var j = 0, jLen = fieldColl.length; j < jLen; j++) {\n fieldStr = fieldColl[j];\n if (fieldColl.length === (j + 1)) {\n value = dataObj[\"\" + fieldStr];\n if (Number(dataObj[\"\" + fieldStr]) === dataObj[\"\" + fieldStr] && dataObj[\"\" + fieldStr] % 1 !== 0) {\n value = dataObj[\"\" + fieldStr].toString();\n }\n }\n else {\n dataObj = dataObj[\"\" + fieldStr];\n }\n }\n }\n else {\n value = dataSource[i][\"\" + field];\n if (Number(dataSource[i][\"\" + field]) === dataSource[i][\"\" + field] && dataSource[i][\"\" + field] % 1 !== 0) {\n value = dataSource[i][\"\" + field].toString();\n }\n }\n if (!(value in original)) {\n original[\"\" + value] = 1;\n if (fieldColl.length > 1) {\n this.createNestedObject(data, fieldColl, value);\n }\n else {\n data[\"\" + field] = value;\n }\n result.push(data);\n }\n }\n }\n return result;\n };\n QueryBuilder.prototype.createNestedObject = function (obj, fieldColl, value) {\n var key;\n var lastIndex = fieldColl.length - 1;\n for (var k = 0; k < lastIndex; ++k) {\n key = fieldColl[k];\n if (!(key in obj)) {\n obj[\"\" + key] = {};\n }\n obj = obj[\"\" + key];\n }\n obj[fieldColl[lastIndex]] = value;\n };\n QueryBuilder.prototype.getDistinctValues = function (dataSource, field) {\n var original = {};\n var result = [];\n var nest = [];\n var value = '';\n var isNested = field.indexOf(this.separator);\n var _loop_2 = function (i, iLen) {\n if (isNested === 0) {\n value = dataSource[i][\"\" + field];\n }\n else {\n nest = field.split(this_2.separator);\n // eslint-disable-next-line @typescript-eslint/tslint/config\n nest.forEach(function (element) {\n if (value) {\n value = value[\"\" + element];\n }\n else {\n value = dataSource[i][\"\" + element];\n }\n });\n }\n if (Number(dataSource[i][\"\" + field]) === dataSource[i][\"\" + field] && dataSource[i][\"\" + field] % 1 !== 0) {\n value = dataSource[i][\"\" + field].toString();\n }\n var data = {};\n if (!(value in original)) {\n original[\"\" + value] = 1;\n if (isNested === 0) {\n data[\"\" + field] = value;\n }\n else {\n data[nest[nest.length - 1]] = value;\n }\n result.push(data);\n }\n };\n var this_2 = this;\n for (var i = 0, iLen = dataSource.length; i < iLen; i++) {\n _loop_2(i, iLen);\n }\n return result;\n };\n QueryBuilder.prototype.renderMultiSelect = function (rule, parentId, i, selectedValue, values) {\n var isFetched = false;\n var ds;\n var isValues = false;\n this.isGetNestedData = false;\n if (this.dataColl[1]) {\n if (Object.keys(this.dataColl[1]).indexOf(rule.field) > -1) {\n isFetched = true;\n ds = this.getDistinctValues(this.dataColl, rule.field);\n }\n }\n isFetched = rule.columns ? false : isFetched;\n if (!this.dataColl.length && values.length) {\n isValues = true;\n }\n var multiSelectValue;\n multiSelectValue = {\n dataSource: isValues ? values : (isFetched ? ds : this.dataManager),\n query: new Query([rule.field]),\n fields: { text: this.selectedRule.field, value: this.selectedRule.field },\n placeholder: this.l10n.getConstant('SelectValue'),\n value: selectedValue,\n mode: 'CheckBox',\n width: '100%',\n change: this.changeValue.bind(this, i),\n close: this.closePopup.bind(this, i),\n actionBegin: this.multiSelectOpen.bind(this, parentId + '_valuekey' + i),\n open: this.popupOpen.bind(this, false)\n };\n if (this.valueModel && this.valueModel.multiSelectModel) {\n multiSelectValue = __assign({}, multiSelectValue, this.valueModel.multiSelectModel);\n }\n var multiSelectObj = new MultiSelect(multiSelectValue);\n multiSelectObj.appendTo('#' + parentId + '_valuekey' + i);\n this.updateRules(multiSelectObj.element, selectedValue, 0);\n };\n QueryBuilder.prototype.multiSelectOpen = function (parentId, args) {\n if (this.dataSource instanceof DataManager) {\n var element = document.getElementById(parentId);\n var dropDownObj = getComponent(closest(element, '.e-rule-container').querySelector('.e-filter-input'), 'dropdownlist');\n this.selectedColumn = dropDownObj.getDataByValue(dropDownObj.value);\n var value = this.selectedColumn.field;\n var isFetched = false;\n if (this.dataColl[1]) {\n if (Object.keys(this.dataColl[1]).indexOf(value) > -1) {\n isFetched = true;\n }\n var isNest = value.indexOf(this.separator);\n if (isNest !== 0 && this.isGetNestedData) {\n isFetched = true;\n }\n }\n if (!isFetched) {\n args.cancel = true;\n this.bindMultiSelectData(element, value);\n }\n }\n };\n QueryBuilder.prototype.bindMultiSelectData = function (element, value) {\n this.getMultiSelectData(element, value);\n };\n QueryBuilder.prototype.getMultiSelectData = function (element, value) {\n var _this = this;\n var dummyData;\n var deferred = new Deferred();\n var data = this.dataManager.executeQuery(new Query().select(value));\n var multiselectObj = getComponent(element, 'multiselect');\n multiselectObj.hideSpinner();\n this.createSpinner(closest(element, '.e-multi-select-wrapper').parentElement);\n showSpinner(closest(element, '.e-multi-select-wrapper').parentElement);\n data.then(function (e) {\n if (e.actual && e.actual.result) {\n dummyData = e.actual.result;\n }\n else {\n dummyData = e.result;\n }\n _this.dataColl = extend(_this.dataColl, dummyData, [], true);\n multiselectObj.dataSource = _this.getDistinctValues(_this.dataColl, value);\n _this.isGetNestedData = true;\n hideSpinner(closest(element, '.e-multi-select-wrapper').parentElement);\n }).catch(function (e) {\n deferred.reject(e);\n });\n };\n QueryBuilder.prototype.createSpinner = function (element) {\n var spinnerElem = this.createElement('span', { attrs: { class: 'e-qb-spinner' } });\n element.appendChild(spinnerElem);\n createSpinner({ target: spinnerElem, width: Browser.isDevice ? '16px' : '14px' });\n };\n QueryBuilder.prototype.closePopup = function (i, args) {\n var element = document.getElementById(args.popup.element.id.replace('_popup', ''));\n if (element) {\n var value = getComponent(element, 'multiselect').value;\n this.updateRules(element, value, i);\n }\n };\n QueryBuilder.prototype.processTemplate = function (target, itemData, rule, tempRule) {\n var container = closest(target, '.e-rule-container');\n var tempElements = container.querySelectorAll('.e-template');\n var filterElem = container.querySelector('.e-rule-filter .e-filter-input');\n var ddlObj = this.fieldMode === 'DropdownTree' ? getComponent(filterElem, 'dropdowntree')\n : getComponent(container.querySelector('.e-rule-filter .e-filter-input'), 'dropdownlist');\n var column = this.fieldMode === 'DropdownTree' ? this.getColumn(ddlObj.value[0]) : this.getColumn(ddlObj.value);\n if (typeof itemData.template === 'string' || itemData.template.write === undefined) {\n var args = { rule: rule, ruleID: container.id, operator: tempRule.operator, field: column.field,\n requestType: 'value-template-create' };\n this.trigger('actionBegin', args);\n }\n else {\n var template = itemData.template;\n if (typeof template.write === 'string') {\n getValue(template.write, window)({ elements: tempElements.length > 1 ? tempElements : tempElements[0], values: rule.value,\n operator: tempRule.operator, field: column.field, dataSource: column.values });\n }\n else if (typeof itemData.template !== 'function') {\n itemData.template.write({ elements: tempElements.length > 1 ? tempElements : tempElements[0],\n values: rule.value, operator: tempRule.operator, field: column.field, dataSource: column.values });\n }\n }\n };\n QueryBuilder.prototype.getItemData = function (parentId) {\n var fieldObj = getComponent(document.getElementById(parentId + '_filterkey'), 'dropdownlist');\n if (this.fieldMode === 'DropdownTree') {\n fieldObj = getComponent(document.getElementById(parentId + '_filterkey'), 'dropdowntree');\n }\n return this.fieldMode === 'DropdownTree' ? this.getColumn(fieldObj.value[0]) : this.getColumn(fieldObj.value);\n };\n QueryBuilder.prototype.setDefaultValue = function (parentId, isArryValue, isNumber) {\n var itemData = this.getItemData(parentId);\n if (isNullOrUndefined(itemData.value)) {\n return isNumber ? isArryValue ? [0, 0] : 0 : isArryValue ? [] : '';\n }\n if (isArryValue) {\n if (!(itemData.value instanceof Array)) {\n return [itemData.value];\n }\n }\n else {\n if (itemData.value instanceof Array) {\n return itemData.value[0];\n }\n }\n return itemData.value;\n };\n QueryBuilder.prototype.renderStringValue = function (parentId, rule, operator, idx, ruleValElem) {\n var selectedVal;\n var columnData = this.getItemData(parentId);\n var selectedValue;\n var isTemplate = (typeof columnData.template === 'string');\n if (this.isImportRules || this.ruleIndex > -1 || this.groupIndex > -1 || this.isPublic || isTemplate || rule.value !== '') {\n selectedValue = rule.value;\n }\n else {\n selectedValue = this.setDefaultValue(parentId, false, false);\n }\n if ((operator === 'in' || operator === 'notin') && (this.dataColl.length || columnData.values)) {\n selectedVal = (this.isImportRules || this.ruleIndex > -1 || this.groupIndex > -1 || this.isPublic) ? rule.value :\n this.setDefaultValue(parentId, true, false);\n this.renderMultiSelect(columnData, parentId, idx, selectedVal, columnData.values);\n if (this.displayMode === 'Vertical' || this.element.className.indexOf('e-device') > -1) {\n ruleValElem.style.width = '100%';\n }\n else {\n ruleValElem.style.width = null;\n ruleValElem.style.minWidth = '200px';\n }\n }\n else {\n if (operator === 'in' || operator === 'notin') {\n selectedVal = (this.isImportRules || this.ruleIndex > -1 || this.groupIndex > -1) ? rule.value :\n this.setDefaultValue(parentId, true, false);\n selectedValue = selectedVal.join(',');\n }\n var txtBox = void 0;\n txtBox = {\n placeholder: this.l10n.getConstant('SelectValue'),\n input: this.changeValue.bind(this, idx)\n };\n if (this.valueModel && this.valueModel.textBoxModel) {\n txtBox = __assign({}, txtBox, this.valueModel.textBoxModel);\n }\n var inputobj = new TextBox(txtBox);\n inputobj.appendTo('#' + parentId + '_valuekey' + idx);\n inputobj.value = selectedValue;\n inputobj.dataBind();\n }\n };\n QueryBuilder.prototype.renderNumberValue = function (parentId, rule, operator, idx, ruleValElem, itemData, length) {\n var columnData = this.getItemData(parentId);\n var isTemplate = (typeof columnData.template === 'string');\n var selectedVal = (this.isImportRules || this.ruleIndex > -1 || this.groupIndex > -1 || this.isPublic || isTemplate ||\n typeof rule.value === 'number') ? rule.value : this.setDefaultValue(parentId, false, true);\n if ((operator === 'in' || operator === 'notin') && (this.dataColl.length || columnData.values)) {\n selectedVal = (this.isImportRules || this.ruleIndex > -1 || this.groupIndex > -1 || this.isPublic) ? rule.value :\n this.setDefaultValue(parentId, true, false);\n this.renderMultiSelect(columnData, parentId, idx, selectedVal, columnData.values);\n if (this.element.className.indexOf('e-device') > -1 || this.displayMode === 'Vertical') {\n ruleValElem.style.width = '100%';\n }\n else {\n ruleValElem.style.minWidth = '200px';\n ruleValElem.style.width = null;\n }\n }\n else if (operator === 'in' || operator === 'notin') {\n selectedVal = (this.isImportRules || this.ruleIndex > -1 || this.groupIndex > -1) ? rule.value :\n this.setDefaultValue(parentId, true, false);\n var selVal = selectedVal.join(',');\n var txtInp = void 0;\n txtInp = {\n placeholder: this.l10n.getConstant('SelectValue'),\n input: this.changeValue.bind(this, idx)\n };\n if (this.valueModel && this.valueModel.textBoxModel) {\n txtInp = __assign({}, txtInp, this.valueModel.textBoxModel);\n }\n var input = new TextBox(txtInp);\n input.appendTo('#' + parentId + '_valuekey' + idx);\n input.value = selVal;\n input.dataBind();\n }\n else {\n itemData = columnData;\n var min = (itemData.validation && itemData.validation.min) ? itemData.validation.min : 0;\n var max = (itemData.validation && itemData.validation.max) ? itemData.validation.max : Number.MAX_VALUE;\n var format = itemData.format ? itemData.format : 'n';\n if (length > 1 && rule) {\n selectedVal = rule.value[idx] ? rule.value[idx] : this.setDefaultValue(parentId, true, true);\n }\n var numericTxt = void 0;\n numericTxt = {\n value: (selectedVal instanceof Array) ? selectedVal[idx] : selectedVal,\n format: format, min: min, max: max, width: '100%',\n step: itemData.step ? itemData.step : 1,\n change: this.changeValue.bind(this, idx)\n };\n if (this.valueModel && this.valueModel.numericTextBoxModel) {\n numericTxt = __assign({}, numericTxt, this.valueModel.numericTextBoxModel);\n }\n var numeric = new NumericTextBox(numericTxt);\n numeric.appendTo('#' + parentId + '_valuekey' + idx);\n numeric.element.setAttribute('aria-label', itemData.label + ' ' + 'Value');\n numeric.element.oninput = this.changeValue.bind(this, idx);\n }\n };\n QueryBuilder.prototype.processValueString = function (value, type) {\n var numArr = [];\n var strArr = value.split(',');\n if (type === 'string') {\n return strArr;\n }\n else {\n for (var k = 0, kLen = strArr.length; k < kLen; k++) {\n numArr.push(Number(strArr[k]));\n }\n return numArr;\n }\n };\n QueryBuilder.prototype.parseDate = function (value, format) {\n var formatOpt;\n var selectedValue;\n if (format) {\n var dParser = this.intl.getDateParser({ skeleton: 'full', type: 'dateTime' });\n formatOpt = this.getFormat(format);\n selectedValue = dParser(value);\n if (isNullOrUndefined(selectedValue)) {\n selectedValue = this.intl.parseDate(value, formatOpt);\n }\n }\n else {\n selectedValue = new Date(value);\n }\n return selectedValue;\n };\n QueryBuilder.prototype.renderControls = function (target, itemData, rule, tempRule, isRendered) {\n addClass([target.parentElement.querySelector('.e-rule-value')], 'e-value');\n removeClass([target.parentElement.querySelector('.e-rule-value')], 'e-hide');\n addClass([target.parentElement.querySelector('.e-rule-value')], 'e-show');\n if (itemData.template && (itemData.template.create || isRendered)) {\n this.processTemplate(target, itemData, rule, tempRule);\n }\n else {\n var length_1;\n if (tempRule.type === 'boolean') {\n length_1 = this.selectedColumn.values ? this.selectedColumn.values.length : 2;\n }\n else {\n length_1 = tempRule.operator && tempRule.operator.toString().toLowerCase().indexOf('between') > -1 ? 2 : 1;\n }\n var parentId = closest(target, '.e-rule-container').id;\n var ruleValElem = void 0;\n var operator = tempRule.operator.toString();\n if (target.className.indexOf('e-rule-operator') > -1 || target.className.indexOf('e-rule-filter') > -1) {\n ruleValElem = target.parentElement.querySelector('.e-rule-value');\n if (this.element.className.indexOf('e-device') > -1 || this.displayMode === 'Vertical') {\n ruleValElem.style.width = '100%';\n }\n else {\n if (operator !== 'in' && operator !== 'notin') {\n addClass([ruleValElem], 'e-custom-value');\n }\n else {\n removeClass([ruleValElem], 'e-custom-value');\n }\n }\n for (var i = 0; i < length_1; i++) {\n switch (tempRule.type) {\n case 'string':\n {\n this.renderStringValue(parentId, rule, operator, i, ruleValElem);\n }\n break;\n case 'number':\n {\n this.renderNumberValue(parentId, rule, operator, i, ruleValElem, itemData, length_1);\n }\n break;\n case 'boolean':\n this.processBoolValues(itemData, rule, parentId, i);\n break;\n case 'date':\n {\n var selectedValue = new Date();\n var selVal = void 0;\n var column = void 0;\n var format = itemData.format;\n var datepick = void 0;\n var datePicker = void 0;\n var place = this.l10n.getConstant('SelectValue');\n var isTemplate = (typeof itemData.template === 'string');\n if (rule.value && !isNullOrUndefined(format)) {\n selVal = (length_1 > 1) ? rule.value[i] : rule.value;\n selectedValue = this.parseDate(selVal, format) || new Date();\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (!itemData.field && !itemData.key && itemData.value) {\n if (itemData.value instanceof Date) {\n selectedValue = itemData.value;\n }\n else {\n selectedValue = this.parseDate(itemData.value, itemData.format);\n }\n }\n if (!itemData.format && rule && rule.field !== '') {\n column = this.getColumn(rule.field);\n format = column.format;\n }\n if ((this.isImportRules || this.isPublic || isTemplate) && rule) {\n column = this.getColumn(rule.field);\n format = column.format;\n if (rule.value) {\n selVal = (length_1 > 1) ? rule.value[i] : rule.value;\n selectedValue = this.parseDate(selVal, column.format);\n }\n else {\n selectedValue = rule.value;\n }\n }\n if (format) {\n var formatObj = this.getFormat(format);\n if (formatObj.skeleton) {\n datePicker = {\n locale: this.getLocale(), value: selectedValue,\n placeholder: place, format: formatObj, change: this.changeValue.bind(this, i)\n };\n if (this.valueModel && this.valueModel.datePickerModel) {\n datePicker = __assign({}, datePicker, this.valueModel.datePickerModel);\n }\n datepick = new DatePicker(datePicker);\n }\n else {\n datePicker = {\n value: selectedValue, locale: this.getLocale(), placeholder: place,\n format: formatObj.format, change: this.changeValue.bind(this, i)\n };\n if (this.valueModel && this.valueModel.datePickerModel) {\n datePicker = __assign({}, datePicker, this.valueModel.datePickerModel);\n }\n datepick = new DatePicker(datePicker);\n }\n }\n else {\n datePicker = {\n locale: this.getLocale(), value: selectedValue,\n placeholder: place, change: this.changeValue.bind(this, i)\n };\n if (this.valueModel && this.valueModel.datePickerModel) {\n datePicker = __assign({}, datePicker, this.valueModel.datePickerModel);\n }\n datepick = new DatePicker(datePicker);\n }\n datepick.appendTo('#' + parentId + '_valuekey' + i);\n if (!rule.value) {\n var elem = document.getElementById(parentId + '_valuekey' + i);\n this.updateRules(elem, selectedValue, null, this.isNotValueChange);\n this.isNotValueChange = false;\n }\n }\n break;\n }\n }\n }\n }\n };\n QueryBuilder.prototype.processBoolValues = function (itemData, rule, parentId, i) {\n var isCheck = false;\n var value;\n var orgValue;\n if (isNullOrUndefined(rule.type) && itemData) {\n rule.type = itemData.type;\n }\n var label;\n if (itemData.values) {\n var values = itemData.values;\n if (rule.type === 'boolean' && !isNullOrUndefined(rule.value)) {\n isCheck = values[i].toLowerCase() === rule.value.toString().toLowerCase();\n }\n else if (itemData.value) {\n isCheck = values[i].toLowerCase() === itemData.value.toString().toLowerCase();\n }\n else if (i === 0) {\n isCheck = true;\n }\n orgValue = value = label = values[i];\n }\n else {\n var values = [true, false];\n if (rule.type === 'boolean' && !isNullOrUndefined(rule.value)) {\n isCheck = values[i].toString().toLowerCase() === rule.value.toString().toLowerCase();\n }\n else if (itemData.value) {\n isCheck = values[i].toString().toLowerCase() === itemData.value.toString().toLowerCase();\n }\n else if (i === 0) {\n if (typeof rule.value === 'boolean') {\n isCheck = rule.value ? true : false;\n }\n else {\n isCheck = true;\n }\n }\n if (typeof rule.value === 'boolean' && i === 1) {\n isCheck = !rule.value ? true : false;\n }\n value = values[i].toString();\n orgValue = values[i];\n label = this.l10n.getConstant(['True', 'False'][i]);\n }\n var radioBtn;\n radioBtn = {\n label: label, name: parentId + 'default', checked: isCheck, value: value,\n change: this.changeValue.bind(this, i)\n };\n if (this.valueModel && this.valueModel.radioButtonModel) {\n radioBtn = __assign({}, radioBtn, this.valueModel.radioButtonModel);\n }\n var radiobutton = new RadioButton(radioBtn);\n radiobutton.appendTo('#' + parentId + '_valuekey' + i);\n if (isCheck) {\n this.updateRules(radiobutton.element, orgValue, 0, true);\n }\n };\n QueryBuilder.prototype.getOperatorIndex = function (ddlObj, rule) {\n var i;\n var dataSource = ddlObj.dataSource;\n var len = dataSource.length;\n for (i = 0; i < len; i++) {\n if (rule.operator === ddlObj.dataSource[i].value) {\n return i;\n }\n }\n return 0;\n };\n QueryBuilder.prototype.getPreviousItemData = function (prevItemData, column) {\n if (this.isFieldClose && prevItemData) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n prevItemData = this.getColumn(prevItemData.value);\n }\n if (column && column.template && prevItemData && Object.keys(prevItemData).length < 4) {\n prevItemData.template = column.template;\n }\n return prevItemData;\n };\n QueryBuilder.prototype.renderValues = function (target, itemData, prevItemData, isRender, rule, tempRule, element) {\n var subFldElem = target.previousElementSibling;\n var filtElem = subFldElem.getElementsByTagName('input')[0];\n var filtObj = this.fieldMode === 'DropdownTree' ? getComponent(filtElem, 'dropdowntree')\n : getComponent(filtElem, 'dropdownlist');\n var column = this.fieldMode === 'DropdownTree' ? this.getColumn(filtObj.value[0])\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n : this.getColumn(filtObj.value);\n this.selectedRule = column;\n var ddlObj = getComponent(target.querySelector('input'), 'dropdownlist');\n if (isRender) {\n itemData = element.id.indexOf('operator') > -1 ? itemData : this.selectedRule;\n if (itemData.operators) {\n ddlObj.value = null;\n ddlObj.dataBind();\n ddlObj.dataSource = itemData.operators;\n ddlObj.index = this.getOperatorIndex(ddlObj, rule);\n ddlObj.value = tempRule.operator = ddlObj.dataSource[ddlObj.index].value;\n if (!this.autoSelectOperator) {\n ddlObj.index = -1;\n tempRule.operator = ddlObj.value = '';\n }\n else {\n ddlObj.dataBind();\n }\n }\n }\n var operator = tempRule.operator.toString();\n var isTempRendered = false;\n if (!(operator.indexOf('null') > -1 || operator.indexOf('isempty') > -1 || operator.indexOf('isnotempty') > -1)) {\n var parentId = closest(target, '.e-rule-container').id;\n prevItemData = this.getPreviousItemData(prevItemData, column);\n if (prevItemData && prevItemData.template === undefined) {\n if (prevItemData.columns) {\n prevItemData = this.getColumn(rule.field);\n }\n }\n else if (this.fieldMode === 'DropdownTree' && prevItemData === undefined) {\n prevItemData = this.getColumn(rule.field);\n }\n if (prevItemData && prevItemData.template) {\n this.templateDestroy(prevItemData, parentId + '_valuekey0');\n var elem = select('#' + parentId + '_valuekey0', target.nextElementSibling);\n if (elem && !elem.classList.contains('e-control')) {\n detach(select('#' + parentId + '_valuekey0', target.nextElementSibling));\n }\n if (typeof prevItemData.template === 'string' || prevItemData.template.create === undefined) {\n if (target.nextElementSibling.classList.contains('e-template-value')) {\n this.clearQBTemplate([parentId]);\n }\n target.nextElementSibling.innerHTML = '';\n }\n }\n if (isRender) {\n this.validateValue(rule, closest(target, '.e-rule-container'));\n this.destroyControls(target);\n }\n if (this.isImportRules || (ddlObj && ddlObj.value !== '')) {\n if (column) {\n itemData.template = column.template;\n }\n if (itemData.template) {\n addClass([target.nextElementSibling], 'e-template-value');\n itemData.template = column.template;\n isTempRendered = this.setColumnTemplate(itemData, parentId, column.field, itemData.value ||\n operator, target, rule);\n }\n if (isTempRendered) {\n var parentElem = target.parentElement.querySelector('.e-rule-value');\n if (this.element.className.indexOf('e-device') > -1 || this.displayMode === 'Vertical') {\n parentElem.style.width = '100%';\n }\n else {\n parentElem.style.width = '200px';\n }\n }\n else {\n removeClass([target.nextElementSibling], 'e-template-value');\n var inputLen = 1;\n if (tempRule.type === 'boolean') {\n inputLen = this.selectedColumn.values ? this.selectedColumn.values.length : 2;\n }\n else {\n inputLen = (operator && operator.toLowerCase().indexOf('between') > -1) ? 2 : 1;\n }\n for (var i = 0; i < inputLen; i++) {\n var valElem = this.createElement('input', { attrs: { type: 'text', id: parentId + '_valuekey' + i } });\n target.nextElementSibling.appendChild(valElem);\n }\n }\n this.renderControls(target, itemData, rule, tempRule, isTempRendered);\n }\n }\n else {\n var parentElem = target.parentElement.querySelector('.e-rule-value');\n if (parentElem) {\n removeClass([parentElem], 'e-show');\n addClass([parentElem], 'e-hide');\n }\n }\n };\n QueryBuilder.prototype.setColumnTemplate = function (itemData, ruleID, field, operator, target, rule) {\n var _this = this;\n var args;\n var isRendered = true;\n if (!itemData.template) {\n return true;\n }\n else {\n if (typeof itemData.template === 'string' || itemData.template.create === undefined) {\n args = { requestType: 'value-template-initialize', ruleID: ruleID, field: field, operator: operator, rule: rule,\n renderTemplate: true };\n this.trigger('actionBegin', args, function (observedActionArgs) {\n isRendered = _this.actionBeginSuccessCallBack(observedActionArgs, itemData, ruleID, field, target);\n });\n return isRendered;\n }\n else {\n var valElem = void 0;\n var template = itemData.template;\n if (typeof template.create === 'string') {\n valElem = getValue(template.create, window)({ field: field, operator: operator });\n }\n else {\n valElem = template.create({ field: field, operator: operator });\n }\n if (valElem instanceof Element) {\n valElem.id = ruleID + '_valuekey0';\n addClass([valElem], 'e-template');\n target.nextElementSibling.appendChild(valElem);\n if (field.indexOf(' ') < 0) {\n addClass([valElem], 'e-' + field);\n }\n }\n else if (valElem instanceof Array) {\n addClass(valElem, 'e-template');\n for (var i = 0, iLen = valElem.length; i < iLen; i++) {\n valElem[i].id = ruleID + '_valuekey' + i;\n target.nextElementSibling.appendChild(valElem[i]);\n }\n }\n addClass([target.nextElementSibling], 'e-template-value');\n return true;\n }\n }\n };\n QueryBuilder.prototype.actionBeginSuccessCallBack = function (args, itemData, ruleID, field, target) {\n if (args.renderTemplate) {\n var valElem = void 0;\n this.columnTemplateFn = this.templateParser(typeof itemData.template === 'function' ? itemData.template : itemData.template);\n var templateID = this.element.id + field;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.isReact) {\n valElem = this.columnTemplateFn(args, this, ruleID, templateID)[0];\n target.nextElementSibling.appendChild(valElem);\n } // eslint-disable-next-line @typescript-eslint/no-explicit-any\n else if (this.isAngular) {\n var valElemColl = this.columnTemplateFn(args, this, ruleID, templateID);\n valElem = (valElemColl[0].nodeType === 3) ? valElemColl[1] : valElemColl[0];\n target.nextElementSibling.appendChild(valElem);\n } // eslint-disable-next-line @typescript-eslint/no-explicit-any\n else if (this.isVue3) {\n valElem = this.columnTemplateFn(args, this, 'Template', templateID);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n append(valElem, target.nextElementSibling);\n }\n else {\n valElem = this.columnTemplateFn(args, this, 'Template', templateID)[0];\n target.nextElementSibling.appendChild(valElem);\n }\n addClass([target.nextElementSibling], 'e-template-value');\n this.renderReactTemplates();\n return true;\n }\n else {\n return false;\n }\n };\n QueryBuilder.prototype.updateValues = function (element, rule) {\n var idx = 1;\n if (element.className.indexOf('e-template') > -1) {\n idx = 3;\n }\n var controlName = element.className.split(' e-')[idx];\n var i = parseInt(element.id.slice(-1), 2);\n var column;\n var format;\n var selectedDate;\n var value;\n var radioBtnObj;\n switch (controlName) {\n case 'checkbox':\n value = getComponent(element, controlName).value;\n rule.value = (value !== '') ? value : undefined;\n break;\n case 'textbox':\n rule.value = getComponent(element, controlName).value;\n break;\n case 'dropdownlist':\n rule.value = getComponent(element, controlName).value;\n break;\n case 'radio':\n radioBtnObj = getComponent(element, controlName);\n if (radioBtnObj.checked) {\n if (typeof rule.value === 'boolean') {\n rule.value = radioBtnObj.value === 'true';\n }\n else {\n if (this.getColumn(rule.field).values) {\n rule.value = radioBtnObj.value;\n }\n else {\n rule.value = radioBtnObj.value === 'true';\n }\n }\n }\n radioBtnObj.refresh();\n break;\n case 'numerictextbox':\n if (rule.operator.indexOf('between') > -1) {\n if (typeof rule.value === 'string') {\n rule.value = [];\n }\n rule.value[i] = getComponent(element, controlName).value;\n }\n else {\n rule.value = getComponent(element, controlName).value;\n }\n break;\n case 'datepicker':\n column = this.getColumn(rule.field);\n format = this.getFormat(column.format);\n selectedDate = getComponent(element, controlName).value;\n if (rule.operator.indexOf('between') > -1) {\n if (typeof rule.value === 'string') {\n rule.value = [];\n }\n rule.value[i] = this.intl.formatDate(selectedDate, format);\n }\n else if (isNullOrUndefined(format.format) && selectedDate) {\n rule.value = this.intl.formatDate(selectedDate);\n }\n else if (selectedDate) {\n rule.value = this.intl.formatDate(selectedDate, format);\n }\n else {\n rule.value = selectedDate;\n }\n break;\n case 'multiselect':\n rule.value = getComponent(element, controlName).value;\n break;\n }\n };\n QueryBuilder.prototype.updateRules = function (target, selectedValue, i, isNotTrigger) {\n var groupElem = closest(target, '.e-group-container');\n var rule = this.getParentGroup(groupElem);\n var ruleElem = closest(target, '.e-rule-container');\n var index = 0;\n var dropDownObj;\n var eventsArgs;\n var groupID = groupElem.id.replace(this.element.id + '_', '');\n var beforeRules = this.getValidRules(this.rule);\n while (ruleElem && ruleElem.previousElementSibling !== null) {\n ruleElem = ruleElem.previousElementSibling;\n if (!this.enableSeparateConnector || (this.enableSeparateConnector &&\n ((!this.headerTemplate && !ruleElem.classList.contains('e-btn-group')) ||\n this.headerTemplate && (ruleElem.classList.contains('e-rule-container') ||\n ruleElem.classList.contains('e-group-container'))))) {\n index++;\n }\n }\n var operator = rule.rules[index].operator ? rule.rules[index].operator.toString() : '';\n ruleElem = closest(target, '.e-rule-container');\n var ruleID = ruleElem.id.replace(this.element.id + '_', '');\n if (closest(target, '.e-rule-filter') || closest(target, '.e-rule-sub-filter')) {\n if (this.subFieldElem) {\n target = this.subFieldElem;\n }\n dropDownObj = this.fieldMode === 'DropdownTree' ? getComponent(target, 'dropdowntree') :\n getComponent(target, 'dropdownlist');\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var column = this.fieldMode === 'DropdownTree' ? this.getColumn(dropDownObj.value[0])\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n : this.getColumn(dropDownObj.value);\n if (!this.isImportRules && rule.rules[index].field &&\n rule.rules[index].field.toLowerCase() !== column.field.toLowerCase()) {\n if (!(ruleElem.querySelectorAll('.e-template')) && !(operator.indexOf('null') > -1)\n || (operator.indexOf('empty') > -1)) {\n rule.rules[index].value = '';\n }\n }\n this.selectedColumn = this.getColumn(this.selectedColumn.field);\n rule.rules[index].field = this.selectedColumn.field;\n rule.rules[index].type = this.selectedColumn.type;\n rule.rules[index].label = this.selectedColumn.label;\n var ruleElement = closest(target, '.e-rule-filter');\n ruleElement = ruleElement ? ruleElement : closest(target, '.e-rule-sub-filter');\n var element = ruleElement.nextElementSibling.querySelector('input.e-control');\n element = element ? element : ruleElement.nextElementSibling.nextElementSibling.querySelector('input.e-control');\n operator = getComponent(element, 'dropdownlist').value.toString();\n rule.rules[index].operator = operator;\n // Value Fields\n var valueContainer = ruleElement.nextElementSibling.nextElementSibling;\n var elementCln = valueContainer.querySelectorAll('input.e-control');\n if (elementCln.length < 1) {\n elementCln = valueContainer.querySelectorAll('div.e-control');\n }\n if (elementCln.length < 1) {\n elementCln = valueContainer.querySelectorAll('.e-template');\n }\n eventsArgs = { groupID: groupID, ruleID: ruleID, value: rule.rules[index].field, type: 'field' };\n for (var i_1 = 0; i_1 < elementCln.length; i_1++) {\n if (operator.indexOf('null') > -1 || operator.indexOf('empty') > -1) {\n rule.rules[index].value = null;\n continue;\n }\n this.updateValues(elementCln[i_1], rule.rules[index]);\n }\n if (!this.isImportRules && !this.prvtEvtTgrDaD) {\n this.trigger('change', eventsArgs);\n }\n if (this.allowValidation && rule.rules[index].field && target.parentElement.className.indexOf('e-tooltip') > -1) {\n getComponent(target.parentElement, 'tooltip').destroy();\n }\n this.filterRules(beforeRules, this.getValidRules(this.rule), 'field');\n }\n else if (closest(target, '.e-rule-operator')) {\n dropDownObj = getComponent(target, 'dropdownlist');\n rule.rules[index].operator = dropDownObj.value.toString();\n var inputElem = ruleElem.querySelectorAll('.e-rule-value input.e-control');\n eventsArgs = { groupID: groupID, ruleID: ruleID, value: dropDownObj.value, type: 'operator' };\n if (this.allowValidation && rule.rules[index].operator && target.parentElement.className.indexOf('e-tooltip') > -1) {\n getComponent(target.parentElement, 'tooltip').destroy();\n }\n if (inputElem.length > 1 && !(inputElem[0].className.indexOf('e-template') > -1)) {\n rule.rules[index].value = [];\n }\n for (var i_2 = 0; i_2 < inputElem.length; i_2++) {\n if (rule.rules[index].operator.indexOf('null') > -1 || rule.rules[index].operator.indexOf('empty') > -1) {\n rule.rules[index].value = null;\n continue;\n }\n else if (inputElem[i_2].classList.contains('e-template')) {\n continue;\n }\n this.updateValues(inputElem[i_2], rule.rules[index]);\n }\n if (!this.isImportRules) {\n this.trigger('change', eventsArgs);\n }\n this.filterRules(beforeRules, this.getValidRules(this.rule), 'operator');\n }\n else if (closest(target, '.e-rule-value')) {\n this.ruleValueUpdate(target, selectedValue, rule, index, groupElem, ruleElem, i);\n if (!isNotTrigger) {\n this.filterRules(beforeRules, this.getValidRules(this.rule), 'value');\n }\n }\n };\n QueryBuilder.prototype.filterRules = function (beforeRule, afterRule, type) {\n var beforeRuleStr = JSON.stringify({ condition: beforeRule.condition, not: beforeRule.not, rule: beforeRule.rules });\n var afetrRuleStr = JSON.stringify({ condition: afterRule.condition, not: afterRule.not, rule: afterRule.rules });\n if (beforeRuleStr !== afetrRuleStr) {\n if (!this.isImportRules && !this.prvtEvtTgrDaD) {\n this.trigger('ruleChange', { previousRule: beforeRule, rule: afterRule, type: type });\n }\n }\n };\n QueryBuilder.prototype.ruleValueUpdate = function (target, selectedValue, rule, index, groupElem, ruleElem, i) {\n var eventsArgs;\n var oper;\n var arrOperator = ['in', 'between', 'notin', 'notbetween'];\n if (rule.rules[index].operator) {\n oper = rule.rules[index].operator.toString().toLowerCase();\n }\n if (selectedValue !== null) {\n if (target.className.indexOf('e-multiselect') > -1 && rule.rules[index].type === 'number' &&\n !this.isNotified) {\n var selVal = [];\n var dupSelectedValue = selectedValue;\n for (var k = 0, kLen = dupSelectedValue.length; k < kLen; k++) {\n if (typeof dupSelectedValue[k] === 'string') {\n selVal.push(parseFloat(dupSelectedValue[k]));\n }\n }\n if (selVal.length) {\n selectedValue = selVal;\n }\n }\n if (this.isNotified) {\n rule.rules[index].value = selectedValue;\n eventsArgs = { groupID: groupElem.id, ruleID: ruleElem.id, value: rule.rules[index].value, type: 'value' };\n if (!this.isImportRules) {\n this.trigger('change', eventsArgs);\n }\n }\n else if (target.className.indexOf('e-spin') > -1 || target.className.indexOf('e-numeric') > -1) {\n if (arrOperator.indexOf(oper) > -1) {\n rule.rules[index].value[i] = selectedValue;\n }\n else {\n rule.rules[index].value = selectedValue;\n }\n }\n else if (target.className.indexOf('e-radio') > -1) {\n rule.rules[index].value = selectedValue;\n }\n else if (target.className.indexOf('e-multiselect') > -1) {\n rule.rules[index].value = selectedValue;\n }\n else if (target.className.indexOf('e-textbox') > -1) {\n if (oper === 'in' || oper === 'notin') {\n if (rule.rules[index].type === 'string') {\n rule.rules[index].value = this.processValueString(selectedValue, rule.rules[index].type);\n }\n else {\n rule.rules[index].value = this.processValueString(selectedValue, rule.rules[index].type);\n }\n }\n else {\n rule.rules[index].value = selectedValue;\n }\n }\n else if (target.className.indexOf('e-datepicker') > -1) {\n var format = this.getFormat(this.getColumn(this.selectedColumn.field).format);\n if (format.type) {\n if (arrOperator.indexOf(oper) > -1) {\n if (typeof rule.rules[index].value === 'string') {\n rule.rules[index].value = [];\n }\n rule.rules[index].value[i] = this.intl.formatDate(selectedValue, format);\n }\n else {\n rule.rules[index].value = this.intl.formatDate(selectedValue, format);\n }\n }\n }\n this.validateValue(rule, ruleElem, index);\n }\n else {\n if (target.className.indexOf('e-datepicker') > -1) {\n if (arrOperator.indexOf(oper) > -1) {\n if (typeof rule.rules[index].value === 'string') {\n rule.rules[index].value = [];\n }\n rule.rules[index].value[i] = selectedValue;\n }\n else {\n rule.rules[index].value = selectedValue;\n }\n }\n else {\n rule.rules[index].value = selectedValue;\n }\n }\n };\n QueryBuilder.prototype.validateValue = function (rule, ruleElem, index) {\n if (!isNullOrUndefined(index)) {\n rule = rule.rules[index];\n }\n var isObject = typeof (rule.value) === 'object';\n if (this.allowValidation && (isNullOrUndefined(index) || (isObject ? rule.value.length > 0 : rule.value))) {\n var valElem = ruleElem.querySelectorAll('.e-rule-value .e-control');\n if (valElem.length > 0) {\n if (valElem[0].className.indexOf('e-tooltip') > -1) {\n getComponent(valElem[0], 'tooltip').destroy();\n }\n else if (valElem[0].parentElement.className.indexOf('e-tooltip') > -1) {\n getComponent(valElem[0].parentElement, 'tooltip').destroy();\n }\n if (valElem[1] && valElem[1].parentElement.className.indexOf('e-tooltip') > -1) {\n getComponent(valElem[1].parentElement, 'tooltip').destroy();\n }\n }\n }\n };\n QueryBuilder.prototype.getFormat = function (format) {\n var formatOptions;\n if (format) {\n if (typeof (format) === 'string') {\n formatOptions = { type: 'dateTime' };\n if (format === 'short' || format === 'yMd') {\n formatOptions.type = 'date';\n formatOptions.skeleton = format;\n }\n else {\n formatOptions.format = format;\n }\n }\n else {\n formatOptions = { type: 'dateTime', skeleton: format.skeleton };\n }\n }\n else {\n formatOptions = { type: 'date', skeleton: 'yMd' };\n }\n return formatOptions;\n };\n QueryBuilder.prototype.findGroupByIdx = function (groupIdx, rule, isRoot) {\n var ruleColl = rule.rules;\n var dupRuleColl = [];\n if (!isRoot) {\n for (var j = 0, jLen = ruleColl.length; j < jLen; j++) {\n rule = ruleColl[j];\n if (rule.rules) {\n dupRuleColl.push(rule);\n }\n }\n return dupRuleColl[groupIdx];\n }\n return rule;\n };\n /**\n * Removes the component from the DOM and detaches all its related event handlers.\n * Also it maintains the initial input element from the DOM.\n *\n * @method destroy\n * @returns {void}\n */\n QueryBuilder.prototype.destroy = function () {\n this.isDestroy = true;\n var queryElement = this.element;\n if (!queryElement) {\n return;\n }\n var element;\n var i;\n var len;\n var tooltip;\n _super.prototype.destroy.call(this);\n element = this.element.querySelectorAll('.e-addrulegroup');\n len = element.length;\n for (i = 0; i < len; i++) {\n getComponent(element[i], 'dropdown-btn').destroy();\n detach(element[i]);\n }\n tooltip = this.element.querySelectorAll('.e-rule-filter .e-control.e-tooltip');\n for (i = 0; i < tooltip.length; i++) {\n getComponent(tooltip[i], 'tooltip').destroy();\n }\n element = this.element.querySelectorAll('.e-rule-filter .e-control:not(.e-tooltip)');\n len = element.length;\n for (i = 0; i < len; i++) {\n if (getComponent(element[i], 'dropdownlist')) {\n getComponent(element[i], 'dropdownlist').destroy();\n }\n else {\n getComponent(element[i], 'dropdowntree').destroy();\n }\n detach(element[i]);\n }\n tooltip = this.element.querySelectorAll('.e-rule-operator .e-control.e-tooltip');\n for (i = 0; i < tooltip.length; i++) {\n getComponent(tooltip[i], 'tooltip').destroy();\n }\n element = this.element.querySelectorAll('.e-rule-operator .e-control:not(.e-tooltip)');\n len = element.length;\n for (i = 0; i < len; i++) {\n if (getComponent(element[i], 'dropdownlist')) {\n getComponent(element[i], 'dropdownlist').destroy();\n detach(element[i]);\n }\n }\n tooltip = this.element.querySelectorAll('.e-rule-value .e-control.e-tooltip');\n for (i = 0; i < tooltip.length; i++) {\n getComponent(tooltip[i], 'tooltip').destroy();\n }\n this.isImportRules = false;\n this.unWireEvents();\n this.levelColl[this.element.id + '_group0'] = [0];\n this.element.innerHTML = '';\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.portals && this.portals.length) {\n this.clearQBTemplate();\n }\n var popupElement = document.querySelectorAll('.qb-dropdownlist.e-popup');\n if (popupElement) {\n for (i = 0; i < popupElement.length; i++) {\n popupElement[i].remove();\n }\n }\n classList(this.element, [], ['e-rtl', 'e-responsive', 'e-device']);\n this.isDestroy = false;\n };\n /**\n * Adds single or multiple rules.\n *\n * @param {RuleModel[]} rule - 'rule collection' to be passed to add the rules.\n * @param {string} groupID - 'group id' to be passed to add the rule in groups.\n * @returns {void}.\n */\n QueryBuilder.prototype.addRules = function (rule, groupID) {\n groupID = this.element.id + '_' + groupID;\n this.isPublic = true;\n for (var i = 0, len = rule.length; i < len; i++) {\n this.addRuleElement(document.getElementById(groupID), rule[i]);\n }\n this.isPublic = false;\n };\n /**\n * Adds single or multiple groups, which contains the collection of rules.\n *\n * @param {RuleModel[]} groups - 'group collection' to be passed to add the groups.\n * @param {string} groupID - 'group id' to be passed to add the groups.\n * @returns {void}.\n */\n QueryBuilder.prototype.addGroups = function (groups, groupID) {\n if (this.isAddSuccess || this.element.querySelectorAll('.e-group-container').length <= this.maxGroupCount) {\n groupID = this.element.id + '_' + groupID;\n var groupElem = document.getElementById(groupID);\n var rule = this.getParentGroup(groupElem);\n var grouplen = groups.length;\n if (grouplen) {\n this.isPublic = true;\n for (var i = 0, len = groups.length; i < len; i++) {\n this.updatedRule = { isLocked: groups[i].isLocked, condition: groups[i].condition,\n not: groups[i].not };\n this.importRules(groups[i], groupElem, false, groups[i].not);\n }\n this.isPublic = false;\n }\n else {\n var condition = 'and';\n var not = false;\n var isLocked = false;\n if (this.updatedRule) {\n condition = this.updatedRule.condition;\n not = this.updatedRule.not;\n isLocked = this.updatedRule.isLocked;\n }\n if (this.groupIndex < 0) {\n if (this.enableNotCondition) {\n rule.rules.push({ 'condition': condition, 'not': not, rules: [] });\n }\n else {\n rule.rules.push({ 'condition': condition, rules: [] });\n }\n }\n else {\n if (this.enableNotCondition) {\n rule.rules.splice(this.groupIndex + 1, 0, { condition: condition, not: not, rules: [], isLocked: isLocked });\n }\n else {\n rule.rules.splice(this.groupIndex + 1, 0, { condition: condition, rules: [], isLocked: isLocked });\n }\n }\n }\n if (!this.headerTemplate) {\n this.disableRuleCondition(groupElem, rule, null, this.enableSeparateConnector ? true : null);\n }\n }\n };\n QueryBuilder.prototype.initWrapper = function () {\n this.isInitialLoad = true;\n if (this.cssClass) {\n addClass([this.element], this.cssClass.replace(/\\s+/g, ' ').trim().split(' '));\n }\n if (this.enableSeparateConnector) {\n addClass([this.element], 'e-multi-connector');\n }\n if (this.enableRtl) {\n addClass([this.element], 'e-rtl');\n }\n if (this.width) {\n this.element.style.width = this.width;\n }\n if (this.height) {\n this.element.style.height = this.height;\n }\n if (this.rule.rules.length) {\n this.isImportRules = true;\n }\n else {\n this.addGroupElement(false, this.element);\n }\n if (Browser.isDevice || this.displayMode === 'Vertical') {\n if (Browser.isDevice) {\n this.element.style.width = '100%';\n this.element.classList.add('e-device');\n }\n removeClass(this.element.querySelectorAll('.e-rule-container'), 'e-horizontal-mode');\n addClass(this.element.querySelectorAll('.e-rule-container'), 'e-vertical-mode');\n this.displayMode = 'Vertical';\n }\n else {\n this.displayMode = 'Horizontal';\n }\n if (this.summaryView) {\n if (this.isImportRules) {\n this.renderSummary();\n }\n else {\n this.renderSummaryCollapse();\n }\n }\n else {\n if (this.columns && this.columns.length && this.isImportRules) {\n this.addGroupElement(false, this.element, this.rule.condition, false, this.rule.not, false, this.rule);\n var mRules = extend({}, this.rule, {}, true);\n this.isRefreshed = true;\n this.setGroupRules(mRules);\n this.isRefreshed = false;\n }\n else if (this.columns && this.columns.length) {\n this.addRuleElement(this.element.querySelector('.e-group-container'), {});\n }\n this.notGroupRtl();\n if (this.readonly) {\n this.enableReadonly();\n }\n var buttons = this.element.querySelectorAll('label.e-btn');\n var button = void 0;\n for (var i = 0; i < buttons.length; i++) {\n button = buttons.item(i);\n rippleEffect(button, { selector: '.e-btn' });\n }\n }\n };\n QueryBuilder.prototype.renderSummary = function () {\n var contentElem = this.createElement('div', {\n attrs: {\n class: 'e-summary-content',\n id: this.element.id + '_summary_content'\n }\n });\n var textElem = this.createElement('textarea', { attrs: { class: 'e-summary-text', readonly: 'true' }, styles: 'max-height:500px' });\n var editElem = this.createElement('button', { attrs: { type: 'button', class: 'e-edit-rule e-css e-btn e-small e-flat e-primary' } });\n var divElem = this.createElement('div', { attrs: { class: 'e-summary-btndiv' } });\n contentElem.appendChild(textElem);\n textElem.textContent = this.getSqlFromRules(this.rule);\n editElem.textContent = this.l10n.getConstant('Edit');\n divElem.appendChild(editElem);\n contentElem.appendChild(divElem);\n this.element.appendChild(contentElem);\n };\n QueryBuilder.prototype.renderSummaryCollapse = function () {\n var collapseElem = this.createElement('div', {\n attrs: {\n class: 'e-collapse-rule e-icons',\n title: this.l10n.getConstant('SummaryViewTitle')\n }\n });\n this.element.querySelector('.e-group-header').appendChild(collapseElem);\n };\n QueryBuilder.prototype.columnSort = function () {\n if (this.sortDirection.toLowerCase() === 'descending') {\n this.columns = new DataManager(this.columns).executeLocal(new Query().sortByDesc('field'));\n }\n else if (this.sortDirection.toLowerCase() === 'ascending') {\n this.columns = new DataManager(this.columns).executeLocal(new Query().sortBy('field'));\n }\n };\n QueryBuilder.prototype.onChangeNotGroup = function () {\n this.element.innerHTML = '';\n this.groupIdCounter = 0;\n if (!this.headerTemplate) {\n if (this.enableNotCondition) {\n var inputElem = this.createElement('button', { attrs: { type: 'button', class: 'e-qb-toggle' } });\n if (this.groupElem.querySelector('.e-btn-group')) {\n this.groupElem.querySelector('.e-btn-group').insertBefore(inputElem, this.groupElem.querySelector('.e-btngroup-and'));\n }\n }\n else {\n this.groupElem.querySelector('.e-qb-toggle').remove();\n }\n }\n this.setProperties({ rule: this.checkNotGroup(this.rule) }, true);\n this.initWrapper();\n };\n QueryBuilder.prototype.notGroupRtl = function () {\n if (this.enableRtl) {\n addClass(this.element.querySelectorAll('.e-btn-group'), 'e-rtl');\n }\n else {\n removeClass(this.element.querySelectorAll('.e-btn-group'), 'e-rtl');\n }\n };\n QueryBuilder.prototype.checkNotGroup = function (rule) {\n var orgRule;\n if (rule.rules) {\n for (var i = 0; i < rule.rules.length; i++) {\n orgRule = rule.rules[i];\n orgRule = this.checkNotGroup(orgRule);\n rule.rules[i] = orgRule;\n }\n }\n if (!isNullOrUndefined(rule.not)) {\n if (this.enableNotCondition) {\n rule.not = false;\n }\n delete rule.not;\n }\n else if (this.enableNotCondition && !isNullOrUndefined(rule.condition)) {\n rule.not = false;\n }\n return rule;\n };\n QueryBuilder.prototype.onPropertyChanged = function (newProp, oldProp) {\n var properties = Object.keys(newProp);\n var groupElem = this.element.querySelector('.e-group-container');\n var summaryElem = this.element.querySelector('.e-summary-content');\n for (var _i = 0, properties_1 = properties; _i < properties_1.length; _i++) {\n var prop = properties_1[_i];\n switch (prop) {\n case 'summaryView':\n if (newProp.summaryView) {\n groupElem.style.display = 'none';\n if (this.element.querySelectorAll('.e-summary-content').length < 1) {\n this.renderSummary();\n summaryElem = this.element.querySelector('.e-summary-content');\n }\n else {\n this.element.querySelector('.e-summary-text').textContent = this.getSqlFromRules(this.rule);\n }\n summaryElem.style.display = 'block';\n }\n else {\n if (groupElem.querySelectorAll('.e-collapse-rule').length > -1) {\n this.renderSummaryCollapse();\n }\n groupElem.style.display = 'block';\n summaryElem.style.display = 'none';\n }\n break;\n case 'displayMode':\n this.refresh();\n break;\n case 'showButtons':\n if (!isNullOrUndefined(newProp.showButtons.lockGroup)) {\n if (newProp.showButtons.lockGroup) {\n removeClass(this.element.querySelectorAll('.e-lock-grp-btn'), 'e-button-hide');\n }\n else {\n addClass(this.element.querySelectorAll('.e-lock-grp-btn'), 'e-button-hide');\n }\n }\n if (!isNullOrUndefined(newProp.showButtons.lockRule)) {\n if (newProp.showButtons.lockRule) {\n removeClass(this.element.querySelectorAll('.e-lock-rule-btn'), 'e-button-hide');\n }\n else {\n addClass(this.element.querySelectorAll('.e-lock-rule-btn'), 'e-button-hide');\n }\n }\n if (!isNullOrUndefined(newProp.showButtons.cloneGroup)) {\n if (newProp.showButtons.cloneGroup) {\n removeClass(this.element.querySelectorAll('.e-clone-grp-btn'), 'e-button-hide');\n }\n else {\n addClass(this.element.querySelectorAll('.e-clone-grp-btn'), 'e-button-hide');\n }\n }\n if (!isNullOrUndefined(newProp.showButtons.cloneRule)) {\n if (newProp.showButtons.cloneRule) {\n removeClass(this.element.querySelectorAll('.e-clone-rule-btn'), 'e-button-hide');\n }\n else {\n addClass(this.element.querySelectorAll('.e-clone-rule-btn'), 'e-button-hide');\n }\n }\n if (!isNullOrUndefined(newProp.showButtons.ruleDelete)) {\n if (newProp.showButtons.ruleDelete) {\n removeClass(this.element.querySelectorAll('.e-rule-delete'), 'e-button-hide');\n }\n else {\n addClass(this.element.querySelectorAll('.e-rule-delete'), 'e-button-hide');\n }\n }\n if (!isNullOrUndefined(newProp.showButtons.groupDelete)) {\n if (newProp.showButtons.groupDelete) {\n removeClass(this.element.querySelectorAll('.e-deletegroup'), 'e-button-hide');\n }\n else {\n addClass(this.element.querySelectorAll('.e-deletegroup'), 'e-button-hide');\n }\n }\n break;\n case 'cssClass':\n if (oldProp.cssClass) {\n removeClass([this.element], oldProp.cssClass.split(' '));\n }\n if (newProp.cssClass) {\n addClass([this.element], newProp.cssClass.replace(/\\s+/g, ' ').trim().split(' '));\n }\n break;\n case 'enableRtl':\n if (newProp.enableRtl) {\n addClass([this.element], 'e-rtl');\n this.notGroupRtl();\n }\n else {\n removeClass([this.element], 'e-rtl');\n this.notGroupRtl();\n }\n break;\n case 'enablePersistence':\n this.enablePersistence = newProp.enablePersistence;\n break;\n case 'dataSource':\n this.dataSource = newProp.dataSource;\n this.refresh();\n break;\n case 'columns':\n this.columns = newProp.columns;\n this.columnSort();\n this.updateSubFieldsFromColumns(this.columns);\n break;\n case 'sortDirection':\n this.sortDirection = newProp.sortDirection;\n this.columnSort();\n break;\n case 'maxGroupCount':\n this.maxGroupCount = newProp.maxGroupCount;\n break;\n case 'height':\n this.height = newProp.height;\n this.element.style.height = this.height;\n break;\n case 'rule':\n if (this.rule.rules.length === 0 && !isNullOrUndefined(this.rule)) {\n this.reset();\n }\n this.setProperties({ rule: newProp.rule }, true);\n newProp.rule = this.getRuleCollection(this.rule, false);\n this.setRules(this.rule);\n break;\n case 'width':\n this.width = newProp.width;\n this.element.style.width = this.width;\n break;\n case 'locale':\n this.locale = newProp.locale;\n this.intl = new Internationalization(this.locale);\n this.isLocale = true;\n this.refresh();\n this.isLocale = false;\n break;\n case 'enableNotCondition':\n this.onChangeNotGroup();\n break;\n case 'readonly':\n this.isReadonly = newProp.readonly;\n this.enableReadonly();\n break;\n case 'allowDragAndDrop':\n this.allowDragAndDrop = newProp.allowDragAndDrop;\n this.refresh();\n break;\n case 'enableSeparateConnector':\n this.enableSeparateConnector = newProp.enableSeparateConnector;\n this.refresh();\n break;\n }\n }\n };\n QueryBuilder.prototype.preRender = function () {\n this.element.id = this.element.id || getUniqueID('ej2-querybuilder');\n this.defaultLocale = {\n StartsWith: 'Starts With',\n DoesNotStartWith: 'Does Not Start With',\n EndsWith: 'Ends With',\n DoesNotEndWith: 'Does Not End With',\n Contains: 'Contains',\n DoesNotContain: 'Does Not Contain',\n NotLike: 'Not Like',\n Like: 'Like',\n Equal: 'Equal',\n NotEqual: 'Not Equal',\n LessThan: 'Less Than',\n LessThanOrEqual: 'Less Than Or Equal',\n GreaterThan: 'Greater Than',\n GreaterThanOrEqual: 'Greater Than Or Equal',\n Between: 'Between',\n NotBetween: 'Not Between',\n In: 'In',\n NotIn: 'Not In',\n Remove: 'REMOVE',\n SelectField: 'Select a field',\n SelectOperator: 'Select operator',\n DeleteRule: 'Remove this condition',\n DeleteGroup: 'Delete group',\n AddGroup: 'Add Group',\n AddCondition: 'Add Condition',\n Edit: 'EDIT',\n ValidationMessage: 'This field is required',\n SummaryViewTitle: 'Summary View',\n OtherFields: 'Other Fields',\n AND: 'AND',\n OR: 'OR',\n NOT: 'NOT',\n SelectValue: 'Enter Value',\n IsEmpty: 'Is Empty',\n IsNotEmpty: 'Is Not Empty',\n IsNull: 'Is Null',\n IsNotNull: 'Is Not Null',\n True: 'true',\n False: 'false',\n AddButton: 'Add Group/Condition',\n CloneGroup: 'Clone Group',\n LockGroup: 'Lock Group',\n CloneRule: 'Clone Rule',\n LockRule: 'Lock Rule',\n UnlockRule: 'Unlock Rule',\n UnlockGroup: 'Unlock Group'\n };\n this.l10n = new L10n('querybuilder', this.defaultLocale, this.locale);\n this.intl = new Internationalization(this.locale);\n this.groupIdCounter = 0;\n this.subFilterCounter = 0;\n this.ruleIdCounter = 0;\n this.btnGroupId = 0;\n this.isImportRules = false;\n this.parser = [];\n this.customOperators = {\n stringOperator: [\n { value: 'startswith', key: this.l10n.getConstant('StartsWith') },\n { value: 'notstartswith', key: this.l10n.getConstant('DoesNotStartWith') },\n { value: 'endswith', key: this.l10n.getConstant('EndsWith') },\n { value: 'notendswith', key: this.l10n.getConstant('DoesNotEndWith') },\n { value: 'contains', key: this.l10n.getConstant('Contains') },\n { value: 'notcontains', key: this.l10n.getConstant('DoesNotContain') },\n { value: 'equal', key: this.l10n.getConstant('Equal') },\n { value: 'notequal', key: this.l10n.getConstant('NotEqual') },\n { value: 'in', key: this.l10n.getConstant('In') },\n { value: 'notin', key: this.l10n.getConstant('NotIn') },\n { value: 'isempty', key: this.l10n.getConstant('IsEmpty') },\n { value: 'isnotempty', key: this.l10n.getConstant('IsNotEmpty') }\n ],\n dateOperator: [\n { value: 'equal', key: this.l10n.getConstant('Equal') },\n { value: 'greaterthan', key: this.l10n.getConstant('GreaterThan') },\n { value: 'greaterthanorequal', key: this.l10n.getConstant('GreaterThanOrEqual') },\n { value: 'lessthan', key: this.l10n.getConstant('LessThan') },\n { value: 'lessthanorequal', key: this.l10n.getConstant('LessThanOrEqual') },\n { value: 'notequal', key: this.l10n.getConstant('NotEqual') },\n { value: 'between', key: this.l10n.getConstant('Between') },\n { value: 'notbetween', key: this.l10n.getConstant('NotBetween') }\n ],\n booleanOperator: [\n { value: 'equal', key: this.l10n.getConstant('Equal') },\n { value: 'notequal', key: this.l10n.getConstant('NotEqual') }\n ],\n numberOperator: [\n { value: 'equal', key: this.l10n.getConstant('Equal') },\n { value: 'greaterthanorequal', key: this.l10n.getConstant('GreaterThanOrEqual') },\n { value: 'greaterthan', key: this.l10n.getConstant('GreaterThan') },\n { value: 'between', key: this.l10n.getConstant('Between') },\n { value: 'lessthan', key: this.l10n.getConstant('LessThan') },\n { value: 'notbetween', key: this.l10n.getConstant('NotBetween') },\n { value: 'lessthanorequal', key: this.l10n.getConstant('LessThanOrEqual') },\n { value: 'notequal', key: this.l10n.getConstant('NotEqual') },\n { value: 'in', key: this.l10n.getConstant('In') },\n { value: 'notin', key: this.l10n.getConstant('NotIn') }\n ]\n };\n this.operators = {\n equal: '=', notequal: '!=', greaterthan: '>', greaterthanorequal: '>=', lessthan: '<', in: 'IN', notin: 'NOT IN',\n lessthanorequal: '<=', startswith: 'LIKE', endswith: 'LIKE', between: 'BETWEEN', notbetween: 'NOT BETWEEN', contains: 'LIKE',\n isnull: 'IS NULL', isnotnull: 'IS NOT NULL', isempty: 'IS EMPTY', isnotempty: 'IS NOT EMPTY', notstartswith: 'NOT LIKE',\n notendswith: 'NOT LIKE', notcontains: 'NOT LIKE'\n };\n this.sqlOperators = {\n equal: '=', notequal: '!=', greaterthan: '>', greaterthanorequal: '>=', lessthan: '<', in: this.l10n.getConstant('In').toUpperCase(),\n notin: this.l10n.getConstant('NotIn').toUpperCase(), lessthanorequal: '<=', startswith: this.l10n.getConstant('Like').toUpperCase(),\n endswith: this.l10n.getConstant('Like').toUpperCase(), between: this.l10n.getConstant('Between').toUpperCase(),\n notbetween: this.l10n.getConstant('NotBetween').toUpperCase(), contains: this.l10n.getConstant('Like').toUpperCase(),\n isnull: this.l10n.getConstant('IsNull').toUpperCase(), isnotnull: this.l10n.getConstant('IsNotNull').toUpperCase(),\n isempty: this.l10n.getConstant('IsEmpty').toUpperCase(), isnotempty: this.l10n.getConstant('IsNotEmpty').toUpperCase(),\n notstartswith: this.l10n.getConstant('NotLike').toUpperCase(), notendswith: this.l10n.getConstant('NotLike').toUpperCase(),\n notcontains: this.l10n.getConstant('NotLike').toUpperCase()\n };\n if (!this.fields) {\n this.fields = { text: 'label', value: 'field' };\n }\n };\n QueryBuilder.prototype.render = function () {\n this.levelColl = {};\n this.items = [\n {\n text: this.l10n.getConstant('AddGroup'),\n iconCss: 'e-icons e-add-icon e-addgroup'\n },\n {\n text: this.l10n.getConstant('AddCondition'),\n iconCss: 'e-icons e-add-icon e-addrule'\n }\n ];\n this.ruleElem = this.ruleTemplate();\n this.groupElem = this.groupTemplate();\n var stringOper = [\n { value: 'isnull', key: this.l10n.getConstant('IsNull') },\n { value: 'isnotnull', key: this.l10n.getConstant('IsNotNull') }\n ];\n var numberOper = [\n { value: 'isnull', key: this.l10n.getConstant('IsNull') },\n { value: 'isnotnull', key: this.l10n.getConstant('IsNotNull') }\n ];\n this.customOperators['stringOperator'] = this.customOperators['stringOperator'].concat(stringOper); // tslint:disable-line\n this.customOperators['numberOperator'] = this.customOperators['numberOperator'].concat(numberOper); // tslint:disable-line\n if (this.dataSource instanceof DataManager) {\n this.dataManager = this.dataSource;\n this.executeDataManager(new Query().take(1));\n }\n else {\n this.dataManager = new DataManager(this.dataSource);\n this.dataColl = this.dataManager.executeLocal(new Query());\n this.initControl();\n }\n this.renderComplete();\n if (this.allowDragAndDrop) {\n this.initializeDrag();\n }\n };\n QueryBuilder.prototype.initializeDrag = function () {\n this.draggable = new Draggable(this.element, {\n dragTarget: '.e-drag-qb-rule',\n distance: 5,\n helper: this.helper.bind(this),\n dragStart: this.dragStartHandler.bind(this),\n drag: this.dragHandler.bind(this),\n dragStop: this.dragStopHandler.bind(this),\n isReplaceDragEle: true,\n isPreventSelect: false,\n abort: '.e-parent-header',\n isDragScroll: true\n });\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n QueryBuilder.prototype.helper = function (e) {\n var target = this.draggable.currentStateTarget;\n if (!target.classList.contains('e-drag-qb-rule') || (target.classList.contains('e-drag-qb-rule') && closest(target, '.e-disable'))) {\n return false;\n }\n var visualElement = this.createElement('div', {\n className: 'e-cloneproperties e-draganddrop e-dragclone',\n styles: 'height:\"auto\", z-index:2, width:' + this.element.offsetWidth\n });\n var cloneElement;\n if (this.draggable.currentStateTarget.parentElement.classList.contains('e-group-header')) {\n cloneElement = closest(target, '.e-group-container').cloneNode(true);\n closest(target, '.e-group-container').classList.add('e-qb-dragging-rule');\n }\n else {\n visualElement.classList.add('e-group-body');\n cloneElement = this.createElement('div', { className: 'e-rule-container' });\n var ruleElement = closest(target, '.e-rule-field').cloneNode(true);\n cloneElement.appendChild(ruleElement);\n closest(target, '.e-rule-field').classList.add('e-qb-dragging-rule');\n }\n visualElement.appendChild(cloneElement);\n var childElements = visualElement.querySelectorAll('*');\n childElements.forEach(function (child) {\n child.removeAttribute('id');\n });\n this.element.appendChild(visualElement);\n return visualElement;\n };\n QueryBuilder.prototype.dragStartHandler = function (e) {\n this.draggedRule = e.target;\n this.isDragEventPrevent = false;\n document.body.classList.add('e-prevent-select');\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this.dragElement = e.dragElement;\n var rule = closest(e.target, '.e-rule-container');\n var group = closest(e.target, '.e-group-container');\n var dragEventArgs = { dragRuleID: rule !== null ? rule.id : group.id, dragGroupID: group.id, cancel: false };\n this.trigger('dragStart', dragEventArgs);\n this.isDragEventPrevent = dragEventArgs.cancel;\n };\n QueryBuilder.prototype.dragHandler = function (e) {\n if (this.isDragEventPrevent) {\n return;\n }\n var borderLineElem = this.element.querySelectorAll('.e-drag-rule-bottom-line');\n borderLineElem.forEach(function (ele) {\n ele.classList.remove('e-drag-rule-bottom-line');\n });\n borderLineElem = this.element.querySelectorAll('.e-drag-rule-top-line');\n borderLineElem.forEach(function (ele) {\n ele.classList.remove('e-drag-rule-top-line');\n });\n if (isNullOrUndefined(e.target)) {\n return;\n }\n if (e.target.nodeName === 'HTML' || closest(e.target, '.e-qb-dragging-rule') || closest(e.target, '.e-group-header') ||\n !closest(e.target, '#' + this.element.id) || closest(e.target, '.e-disable') || (e.target.parentElement && e.target.parentElement.classList.contains('e-btn-group') && this.enableSeparateConnector)) {\n this.dragElement.classList.add('e-notallowedcur');\n return;\n }\n else {\n this.dragElement.classList.remove('e-notallowedcur');\n }\n var targetElem = closest(e.target, '.e-rule-container');\n var grpElem = closest(e.target, '.e-group-container');\n if (targetElem) {\n var rect = targetElem.getBoundingClientRect();\n var mouseY = e.event.clientY || e.event.changedTouches[0].clientY;\n var distanceToTop = mouseY - rect.top;\n var distanceToBottom = rect.bottom - mouseY;\n var threshold = 20; // Adjust as needed\n if (distanceToTop < threshold) {\n targetElem.classList.add('e-drag-rule-top-line');\n }\n else if (distanceToBottom < threshold) {\n targetElem.classList.add('e-drag-rule-bottom-line');\n }\n }\n else if (e.target.classList.contains('e-rule-list') && e.target.children.length === 0) {\n e.target.classList.add('e-drag-rule-bottom-line');\n }\n else if (e.target.classList.contains('e-rule-list') && e.target.children[0].classList.contains('e-group-container')) {\n var rect = e.target.children[0].getBoundingClientRect();\n var mouseY = e.event.clientY || e.event.changedTouches[0].clientY;\n var distanceToTop = mouseY - rect.top;\n var threshold = 20; // Adjust as needed\n if (distanceToTop < threshold) {\n e.target.classList.add('e-drag-rule-top-line');\n }\n }\n else if (closest(e.target, '.e-group-container') || e.target.classList.contains('e-group-container')) {\n if (!grpElem) {\n grpElem = e.target;\n }\n if (grpElem.id.indexOf('group0') > -1) {\n var rect = e.target.getBoundingClientRect();\n var mouseY = e.event.clientY || e.event.changedTouches[0].clientY;\n var distanceToBottom = rect.bottom - mouseY;\n var threshold = 20; // Adjust as needed\n if (distanceToBottom < threshold) {\n e.target.classList.add('e-drag-rule-bottom-line');\n }\n }\n }\n var dragEventArgs = { dragRuleID: targetElem !== null ? targetElem.id : grpElem !== null ? grpElem.id : null,\n dragGroupID: grpElem !== null ? grpElem.id : null, cancel: false };\n this.trigger('drag', dragEventArgs);\n this.isDragEventPrevent = dragEventArgs.cancel;\n };\n QueryBuilder.prototype.templateParser = function (template) {\n if (template) {\n try {\n if (typeof template !== 'function' && document.querySelectorAll(template).length) {\n return templateCompiler(document.querySelector(template).innerHTML.trim());\n }\n else {\n return compile(template);\n }\n }\n catch (error) {\n return templateCompiler(template);\n }\n }\n return undefined;\n };\n QueryBuilder.prototype.executeDataManager = function (query) {\n var _this = this;\n var data = this.dataManager.executeQuery(query);\n var deferred = new Deferred();\n data.then(function (e) {\n if (e.actual && e.actual.result) {\n _this.dataColl = e.actual.result;\n }\n else {\n _this.dataColl = e.result;\n }\n _this.initControl();\n }).catch(function (e) {\n deferred.reject(e);\n });\n };\n QueryBuilder.prototype.initControl = function () {\n this.initialize();\n this.initWrapper();\n this.wireEvents();\n };\n QueryBuilder.prototype.wireEvents = function () {\n var wrapper = this.getWrapper();\n EventHandler.add(wrapper, 'click', this.clickEventHandler, this);\n EventHandler.add(wrapper, 'focusout', this.focusEventHandler, this);\n EventHandler.add(wrapper, 'focusin', this.focusEventHandler, this);\n EventHandler.add(this.element, 'keydown', this.keyBoardHandler, this);\n EventHandler.add(document, 'keydown', this.keyBoardHandler, this);\n };\n QueryBuilder.prototype.unWireEvents = function () {\n var wrapper = this.getWrapper();\n EventHandler.remove(wrapper, 'click', this.clickEventHandler);\n EventHandler.remove(wrapper, 'focusout', this.focusEventHandler);\n EventHandler.remove(wrapper, 'focusin', this.focusEventHandler);\n EventHandler.remove(this.element, 'keydown', this.keyBoardHandler);\n EventHandler.remove(document, 'keydown', this.keyBoardHandler);\n };\n QueryBuilder.prototype.getParentGroup = function (target, isParent) {\n var groupLevel = (target instanceof Element) ? this.levelColl[target.id] : this.levelColl[\"\" + target];\n var len = isParent ? groupLevel.length - 1 : groupLevel.length;\n var rule = this.rule;\n for (var i = 0; i < len; i++) {\n rule = this.findGroupByIdx(groupLevel[i], rule, i === 0);\n }\n return rule;\n };\n /**\n * Delete the Group\n *\n * @param {Element | string} target - 'target' to be passed to delete the group.\n * @returns {void}\n */\n QueryBuilder.prototype.deleteGroup = function (target) {\n var _this = this;\n var groupElem = target;\n var groupId;\n if (typeof target === 'string') {\n groupId = this.element.id + '_' + target;\n target = document.getElementById(groupId);\n }\n else {\n groupId = groupElem.id.replace(this.element.id + '_', '');\n }\n var args = { groupID: groupId, cancel: false, type: 'deleteGroup' };\n if (!this.isImportRules && !this.prvtEvtTgrDaD) {\n this.trigger('beforeChange', args, function (observedChangeArgs) {\n _this.deleteGroupSuccessCallBack(observedChangeArgs, target);\n });\n }\n else {\n this.deleteGroupSuccessCallBack(args, target);\n }\n };\n QueryBuilder.prototype.deleteGroupSuccessCallBack = function (args, target) {\n if (!args.cancel) {\n var groupElem = target;\n var rule = this.getParentGroup(groupElem, true);\n var index = 0;\n var i = void 0;\n var len = void 0;\n var beforeRules = this.getValidRules(this.rule);\n var nextElem = groupElem.nextElementSibling;\n var prevElem = groupElem.previousElementSibling;\n var element = groupElem.querySelectorAll('.e-group-container');\n var valElem = groupElem.querySelectorAll('.e-tooltip');\n len = valElem.length;\n for (i = 0; i < len; i++) {\n getComponent(valElem[i], 'tooltip').destroy();\n }\n for (i = 0, len = element.length; i < len; i++) {\n delete this.levelColl[element[i].id];\n }\n while (groupElem.previousElementSibling !== null) {\n groupElem = groupElem.previousElementSibling;\n if (!this.enableSeparateConnector || (this.enableSeparateConnector &&\n ((!this.headerTemplate && !groupElem.classList.contains('e-btn-group')) ||\n this.headerTemplate && (groupElem.classList.contains('e-rule-container') ||\n groupElem.classList.contains('e-group-container'))))) {\n index++;\n }\n }\n if (!this.enableSeparateConnector) {\n if (nextElem && nextElem.className.indexOf('e-separate-rule') > -1) {\n removeClass([nextElem], 'e-separate-rule');\n addClass([nextElem], 'e-joined-rule');\n if (prevElem && prevElem.className.indexOf('e-rule-container') > -1) {\n addClass([prevElem], 'e-prev-joined-rule');\n }\n }\n }\n var elem = groupElem.parentElement.parentElement.parentElement;\n var removeString = [];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.isReact || this.isAngular) {\n var remRule = rule.rules[index];\n var ruleElemColl = target.querySelectorAll('.e-rule-container');\n if (remRule && remRule.rules) {\n for (var r = 0; r < remRule.rules.length; r++) {\n var column = this.getColumn(remRule.rules[r].field);\n if (ruleElemColl[r]) {\n var isTemplateRendered = ruleElemColl[r].querySelector('.e-template-value');\n if (column && (column.ruleTemplate || (this.isPlatformTemplate(column) && isTemplateRendered))) {\n removeString.push(ruleElemColl[r].id);\n }\n }\n }\n }\n }\n detach(target);\n if (this.headerTemplate) {\n this.clearQBTemplate([target.id]);\n }\n if (removeString.length) {\n this.clearQBTemplate(removeString);\n }\n rule.rules.splice(index, 1);\n delete this.levelColl[args.groupID];\n this.refreshLevelColl();\n this.disableRuleCondition(elem, rule);\n if (this.enableSeparateConnector && prevElem && ((!this.headerTemplate && prevElem.classList.contains('e-btn-group')) ||\n (this.headerTemplate && prevElem.classList.contains('e-custom-group-btn')))) {\n detach(prevElem);\n }\n if (!this.isImportRules && !this.prvtEvtTgrDaD) {\n this.trigger('change', args);\n }\n this.filterRules(beforeRules, this.getValidRules(this.rule), 'deleteGroup');\n }\n };\n QueryBuilder.prototype.isPlatformTemplate = function (column) {\n var isTemp = false;\n isTemp = column.template && (typeof column.template === 'string' || column.template.create === undefined);\n return isTemp;\n };\n QueryBuilder.prototype.deleteRule = function (target) {\n var _this = this;\n var groupElem = closest(target, '.e-group-container');\n var groupID = groupElem.id.replace(this.element.id + '_', '');\n var ruleID = closest(target, '.e-rule-container').id.replace(this.element.id + '_', '');\n var args = { groupID: groupID, ruleID: ruleID, cancel: false, type: 'deleteRule' };\n if (!this.isImportRules && !this.prvtEvtTgrDaD) {\n this.trigger('beforeChange', args, function (observedChangeArgs) {\n _this.deleteRuleSuccessCallBack(observedChangeArgs, target);\n });\n }\n else {\n this.deleteRuleSuccessCallBack(args, target);\n }\n };\n QueryBuilder.prototype.deleteRuleSuccessCallBack = function (args, target) {\n if (!args.cancel) {\n var groupElem = closest(target, '.e-group-container');\n var rule = this.getParentGroup(groupElem);\n var ruleElem = closest(target, '.e-rule-container');\n var beforeRules = this.getValidRules(this.rule);\n var prevElem = ruleElem.previousElementSibling;\n var index = 0;\n var clnruleElem = ruleElem;\n var nextElem = ruleElem.nextElementSibling;\n var valElem = ruleElem.querySelectorAll('.e-tooltip');\n var i = void 0;\n var len = valElem.length;\n for (i = 0; i < len; i++) {\n getComponent(valElem[i], 'tooltip').destroy();\n }\n while (ruleElem.previousElementSibling !== null) {\n ruleElem = ruleElem.previousElementSibling;\n if (!this.enableSeparateConnector || (this.enableSeparateConnector &&\n ((!this.headerTemplate && !ruleElem.classList.contains('e-btn-group')) ||\n this.headerTemplate && (ruleElem.classList.contains('e-rule-container') ||\n ruleElem.classList.contains('e-group-container'))))) {\n index++;\n }\n }\n var column = this.getColumn(rule.rules[index].field);\n if (column && column.template && clnruleElem.querySelector('.e-template')) {\n this.templateDestroy(column, clnruleElem.querySelector('.e-template').id);\n }\n if (!prevElem || prevElem.className.indexOf('e-rule-container') < 0) {\n if (nextElem) {\n removeClass([nextElem], 'e-joined-rule');\n }\n }\n if (!nextElem || nextElem.className.indexOf('e-rule-container') < 0) {\n if (prevElem) {\n removeClass([prevElem], 'e-prev-joined-rule');\n }\n }\n var isTemplateRendered = clnruleElem.querySelector('.e-template-value');\n // eslint-disable\n try {\n if (this.enableSeparateConnector && (clnruleElem.previousElementSibling || clnruleElem.nextElementSibling)) {\n var previousElem = clnruleElem.previousElementSibling;\n var nextElem_1 = clnruleElem.nextElementSibling;\n if (isNullOrUndefined(nextElem_1) && ((!this.headerTemplate && previousElem.classList.contains('e-btn-group'))\n || (this.headerTemplate && previousElem.classList.contains('e-custom-group-btn')))) {\n if (previousElem && previousElem.previousElementSibling && previousElem.previousElementSibling.classList.contains('e-rule-container')) {\n var rule_1 = this.getRule(previousElem.previousElementSibling);\n rule_1.condition = null;\n }\n detach(previousElem);\n }\n else if ((!this.headerTemplate && nextElem_1.classList.contains('e-btn-group'))\n || (this.headerTemplate && nextElem_1.classList.contains('e-custom-group-btn'))) {\n detach(nextElem_1);\n }\n }\n detach(clnruleElem);\n }\n catch (err) {\n return;\n }\n if (column && column.ruleTemplate) {\n this.clearQBTemplate([clnruleElem.id]);\n }\n if (column && this.isPlatformTemplate(column) && isTemplateRendered) {\n this.clearQBTemplate([clnruleElem.id]);\n }\n rule.rules.splice(index, 1);\n if (!(rule.rules[0] && rule.rules[0].rules)) {\n this.disableRuleCondition(groupElem, rule, this.enableSeparateConnector ? true : false);\n }\n var tooltipElem = this.element.querySelectorAll('.e-tooltip');\n for (var i_3 = 0; i_3 < tooltipElem.length; i_3++) {\n getComponent(tooltipElem[i_3], 'tooltip').refresh(tooltipElem[i_3]);\n }\n if (!this.isImportRules && !this.prvtEvtTgrDaD) {\n this.trigger('change', args);\n }\n this.filterRules(beforeRules, this.getValidRules(this.rule), 'deleteRule');\n }\n };\n QueryBuilder.prototype.setGroupRules = function (rule, isRoot) {\n if (this.headerTemplate && isRoot) {\n this.isRoot = true;\n }\n this.reset();\n this.groupIdCounter = 1;\n this.ruleIdCounter = 0;\n this.isImportRules = true;\n this.setProperties({ rule: rule }, true);\n rule = this.getRuleCollection(this.rule, false);\n this.importRules(this.rule, this.element.querySelector('.e-group-container'), true, this.rule.not, isRoot);\n if (rule.isLocked) {\n var lockGrpTarget = this.element.querySelector('.e-group-container').querySelector('.e-lock-grp-btn');\n this.groupLock(lockGrpTarget);\n }\n this.isImportRules = false;\n };\n QueryBuilder.prototype.keyBoardHandler = function (e) {\n if (e.currentTarget === this.element && this.readonly && (e.keyCode === 38 || e.keyCode === 40 || e.keyCode === 13)) {\n e.preventDefault();\n }\n else if (e.code === 'Escape' && this.allowDragAndDrop) {\n this.isDragEventPrevent = true;\n document.body.classList.remove('e-prevent-select');\n var borderLineElem = this.element.querySelectorAll('.e-drag-rule-bottom-line');\n borderLineElem.forEach(function (ele) {\n ele.classList.remove('e-drag-rule-bottom-line');\n });\n borderLineElem = this.element.querySelectorAll('.e-drag-rule-top-line');\n borderLineElem.forEach(function (ele) {\n ele.classList.remove('e-drag-rule-top-line');\n });\n borderLineElem = this.element.querySelectorAll('.e-qb-dragging-rule');\n borderLineElem.forEach(function (ele) {\n ele.classList.remove('e-qb-dragging-rule');\n });\n var dragElemnet = this.element.querySelector('.e-cloneproperties');\n if (dragElemnet) {\n remove(dragElemnet);\n }\n if (this.enableSeparateConnector) {\n this.refresh();\n }\n }\n };\n QueryBuilder.prototype.clearQBTemplate = function (ruleElemColl) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.isReact || this.isAngular) {\n this.clearTemplate(ruleElemColl);\n }\n };\n QueryBuilder.prototype.disableRuleCondition = function (groupElem, rules, isNewRuleAdded, isNewGroup) {\n if (!this.headerTemplate) {\n if (this.readonly) {\n return;\n }\n var count = groupElem.querySelector('.e-rule-list').childElementCount;\n var andElem = groupElem.querySelector('.e-btngroup-and');\n var orElem = groupElem.querySelector('.e-btngroup-or');\n if (count > 1) {\n andElem.disabled = false;\n orElem.disabled = false;\n if (orElem.nextElementSibling.classList.contains('e-btn-disable') ||\n andElem.nextElementSibling.classList.contains('e-btn-disable')) {\n orElem.nextElementSibling.classList.remove('e-btn-disable');\n andElem.nextElementSibling.classList.remove('e-btn-disable');\n }\n if (this.enableSeparateConnector && !isNewRuleAdded) {\n var index = 0;\n var element = void 0;\n // eslint-disable-next-line no-constant-condition\n while (true) {\n var andGroup = groupElem.parentElement.querySelectorAll('.e-btngroup-and');\n var orGroup = groupElem.parentElement.querySelectorAll('.e-btngroup-or');\n andElem = andGroup[andGroup.length - (1 + index)];\n orElem = orGroup[orGroup.length - (1 + index)];\n element = andGroup[andGroup.length - (1 + index)];\n if (element && element.parentElement && element.parentElement.style.display === 'none') {\n index++;\n }\n else {\n break;\n }\n }\n var elem = groupElem.previousElementSibling;\n while (elem && !elem.classList.contains('e-rule-container')) {\n if (elem.classList.contains('e-group-container')) {\n elem = elem.querySelectorAll('.e-rule-container')[elem.querySelectorAll('.e-rule-container').length - 1];\n break;\n }\n elem = elem.previousElementSibling;\n }\n if (isNewGroup && groupElem.classList.contains('e-group-container')) {\n elem = groupElem;\n var prevRule = this.getGroup(elem);\n if (prevRule.condition === 'or') {\n orElem.checked = true;\n }\n else {\n andElem.checked = true;\n }\n }\n else if (elem && elem.classList.contains('e-rule-container')) {\n var ruleID = elem.id.replace(this.element.id + '_', '');\n var prevRule = this.getRule(ruleID);\n if (prevRule.condition === 'or') {\n orElem.checked = true;\n }\n else {\n andElem.checked = true;\n }\n }\n }\n else if (!isNewRuleAdded) {\n if (rules && rules.condition === 'or') {\n orElem.checked = true;\n }\n else {\n andElem.checked = true;\n }\n }\n }\n else {\n if (this.enableSeparateConnector && !isNewRuleAdded) {\n var index = 0;\n var element = void 0;\n // eslint-disable-next-line no-constant-condition\n while (true) {\n var andGroup = groupElem.parentElement.querySelectorAll('.e-btngroup-and');\n var orGroup = groupElem.parentElement.querySelectorAll('.e-btngroup-or');\n andElem = andGroup[andGroup.length - (1 + index)];\n orElem = orGroup[orGroup.length - (1 + index)];\n element = andGroup[andGroup.length - (1 + index)];\n if (element && element.parentElement && element.parentElement.style.display === 'none') {\n index++;\n }\n else {\n break;\n }\n }\n var elem = void 0;\n var tempElem = groupElem.previousElementSibling;\n while (tempElem) {\n if (tempElem.classList.contains('e-group-container')) {\n tempElem = tempElem.querySelectorAll('.e-rule-container')[tempElem.querySelectorAll('.e-rule-container').length - 1];\n }\n if (tempElem.classList.contains('e-rule-container')) {\n elem = tempElem;\n break;\n }\n tempElem = tempElem.previousElementSibling;\n }\n if (isNullOrUndefined(elem) && groupElem.querySelectorAll('.e-rule-container')[groupElem.querySelectorAll('.e-rule-container').length - 1]) {\n elem = groupElem.querySelectorAll('.e-rule-container')[groupElem.querySelectorAll('.e-rule-container').length - 1];\n }\n if (isNewGroup && groupElem.classList.contains('e-group-container')) {\n elem = groupElem;\n var prevRule = this.getGroup(elem);\n if (prevRule.condition === 'or') {\n orElem.checked = true;\n }\n else {\n andElem.checked = true;\n }\n }\n else if (elem) {\n var ruleID = elem.id.replace(this.element.id + '_', '');\n var prevRule = this.getRule(ruleID);\n if (prevRule.condition === 'or' && orElem) {\n orElem.checked = true;\n }\n else if (andElem) {\n andElem.checked = true;\n }\n }\n }\n else if (!isNewRuleAdded) {\n andElem.checked = false;\n andElem.disabled = true;\n orElem.checked = false;\n orElem.disabled = true;\n if (rules) {\n orElem.nextElementSibling.classList.add('e-btn-disable');\n andElem.nextElementSibling.classList.add('e-btn-disable');\n }\n }\n }\n }\n };\n /**\n * Get the valid rule or rules collection.\n *\n * @param {RuleModel} currentRule - 'currentRule' to be passed to get the valid rules.\n * @returns {RuleModel} - Valid rule or rules collection\n */\n QueryBuilder.prototype.getValidRules = function (currentRule) {\n if (!currentRule) {\n currentRule = this.getRules();\n }\n var ruleCondtion = currentRule.condition;\n var notCondition = currentRule.not;\n var ruleColl = extend([], currentRule.rules, [], true);\n var rule = !isNullOrUndefined(currentRule.isLocked) ?\n this.getRuleCollection({ condition: ruleCondtion, rules: ruleColl, not: notCondition, isLocked: currentRule.isLocked }, true) :\n this.getRuleCollection({ condition: ruleCondtion, rules: ruleColl, not: notCondition }, true);\n return rule;\n };\n QueryBuilder.prototype.getRuleCollection = function (rule, isValidRule) {\n if (isNullOrUndefined(rule)) {\n return null;\n }\n var orgRule;\n if (rule.rules && rule.rules.length && (Object.keys(rule.rules[0]).length > 6 || isValidRule)) {\n var jLen = rule.rules.length;\n for (var j = 0; j < jLen; j++) {\n orgRule = rule.rules[j];\n orgRule = this.getRuleCollection(orgRule, isValidRule);\n rule.rules[j] = orgRule;\n if (Object.keys(orgRule).length < 1 && isValidRule) {\n rule.rules.splice(j, 1);\n j--;\n jLen--;\n }\n }\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var customObj = rule.custom;\n if ((rule.field && rule.field !== '') && (isNullOrUndefined(customObj) || (customObj && (customObj.type !== 'question' &&\n customObj.type !== 'answer')))) {\n if (rule.operator) {\n if (rule.operator.toString().indexOf('null') > -1 || rule.operator.toString().indexOf('empty') > -1) {\n rule.value = null;\n }\n }\n if ((this.isRefreshed && this.enablePersistence) || (rule.field !== '' && rule.operator !== '' && (rule.value !== '' &&\n rule.value !== undefined)) || (customObj && customObj.isQuestion)) {\n var condition = rule.condition;\n var lockedRule = rule.isLocked;\n rule = { 'label': rule.label, 'field': rule.field, 'operator': rule.operator, 'type': rule.type, 'value': rule.value };\n if (!isNullOrUndefined(lockedRule)) {\n rule.isLocked = lockedRule;\n }\n if (condition) {\n rule.condition = condition;\n }\n if (customObj) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n rule.custom = customObj;\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if ((rule.operator === 'in' || rule.operator === 'notin') && rule.value && rule.value.length === 0) {\n rule = {};\n }\n }\n else {\n rule = {};\n }\n }\n else {\n if (customObj && (customObj.type === 'question' || customObj.type === 'answer')) {\n var notValue = rule.not;\n rule = { 'label': rule.label, 'field': rule.field, 'operator': rule.operator, 'type': rule.type, 'value': rule.value,\n 'condition': rule.condition, 'rules': rule.rules\n };\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n rule.custom = customObj;\n if (this.enableNotCondition) {\n rule.not = notValue;\n }\n }\n else if ((isNullOrUndefined(rule.condition)) && isNullOrUndefined(rule.rules)) {\n rule = {};\n }\n else {\n var isLocked = rule.isLocked;\n if (this.enableNotCondition) {\n rule = { 'condition': rule.condition, 'rules': rule.rules, 'not': rule.not };\n }\n else {\n rule = { 'condition': rule.condition, 'rules': rule.rules };\n }\n if (!isNullOrUndefined(isLocked)) {\n rule.isLocked = isLocked;\n }\n if (customObj) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n rule.custom = customObj;\n }\n if (rule.rules && rule.rules.length === 0) {\n rule = {};\n }\n }\n }\n return rule;\n };\n /**\n * Set the rule or rules collection.\n *\n * @param {RuleModel} rule - 'rule' to be passed to set rules.\n * @returns {void}.\n */\n QueryBuilder.prototype.setRules = function (rule) {\n var mRules = extend({}, rule, {}, true);\n if (this.headerTemplate) {\n this.setGroupRules(mRules, true);\n }\n else {\n this.setGroupRules(mRules);\n }\n };\n /**\n * Gets the rule or rule collection.\n *\n * @returns {object} - Rule or rule collection\n */\n QueryBuilder.prototype.getRules = function () {\n var rule;\n if (this.enableNotCondition) {\n rule = { condition: this.rule.condition, rules: this.rule.rules, not: this.rule.not };\n }\n else {\n rule = { condition: this.rule.condition, rules: this.rule.rules };\n }\n if (!isNullOrUndefined(this.rule.isLocked)) {\n rule.isLocked = this.rule.isLocked;\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.rule.custom) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n rule.custom = this.rule.custom;\n }\n return rule;\n };\n /**\n * Gets the rule.\n *\n * @param {string | HTMLElement} elem - 'elem' to be passed to get rule.\n * @returns {object} - Rule\n */\n QueryBuilder.prototype.getRule = function (elem) {\n var ruleElem;\n var ruleId;\n var index = 0;\n if (elem instanceof HTMLElement) {\n ruleElem = closest(elem, '.e-rule-container');\n }\n else {\n ruleId = this.element.id + '_' + elem;\n ruleElem = document.getElementById(ruleId);\n }\n if (isNullOrUndefined(ruleElem)) {\n return null;\n }\n var groupElem = closest(ruleElem, '.e-group-container');\n var rule = this.getParentGroup(groupElem);\n while (ruleElem.previousElementSibling !== null) {\n ruleElem = ruleElem.previousElementSibling;\n if (!this.enableSeparateConnector || (this.enableSeparateConnector &&\n ((!this.headerTemplate && !ruleElem.classList.contains('e-btn-group')) ||\n this.headerTemplate && (ruleElem.classList.contains('e-rule-container') ||\n ruleElem.classList.contains('e-group-container'))))) {\n index++;\n }\n }\n return rule.rules[index];\n };\n /**\n * Gets the group.\n *\n * @param {string | Element} target - 'target' to be passed to get group.\n * @returns {object} -Group\n */\n QueryBuilder.prototype.getGroup = function (target) {\n if (target instanceof Element && target.className.indexOf('e-group-container') < 1) {\n target = closest(target, '.e-group-container');\n }\n var groupId = (target instanceof Element) ? target.id : this.element.id + '_' + target;\n var rule = this.getParentGroup(groupId);\n return rule;\n };\n /**\n * Deletes the group or groups based on the group ID.\n *\n * @param {string[]} groupIdColl - 'groupIdColl' to be passed to delete groups.\n * @returns {void}\n */\n QueryBuilder.prototype.deleteGroups = function (groupIdColl) {\n var i;\n var len = groupIdColl.length;\n var groupID;\n for (i = 0; i < len; i++) {\n groupID = this.element.id + '_' + groupIdColl[i];\n this.deleteGroup(document.getElementById(groupID));\n }\n };\n /**\n * Return the Query from current rules collection.\n *\n * @returns {Promise} - Query from current rules collection\n * @blazorType object\n */\n QueryBuilder.prototype.getFilteredRecords = function () {\n var predicate = this.getPredicate(this.getValidRules(this.rule));\n var dataManagerQuery = isNullOrUndefined(predicate) ? new Query() : new Query().where(predicate);\n return this.dataManager.executeQuery(dataManagerQuery);\n };\n /**\n * Deletes the rule or rules based on the rule ID.\n *\n * @param {string[]} ruleIdColl - 'ruleIdColl' to be passed to delete rules.\n * @returns {void}.\n */\n QueryBuilder.prototype.deleteRules = function (ruleIdColl) {\n var i;\n var len = ruleIdColl.length;\n var ruleID;\n for (i = 0; i < len; i++) {\n ruleID = this.element.id + '_' + ruleIdColl[i];\n this.deleteRule(document.getElementById(ruleID));\n }\n };\n /**\n * Gets the query for Data Manager.\n *\n * @param {RuleModel} rule - 'rule' to be passed to get query.\n * @returns {string} - Query for Data Manager\n */\n QueryBuilder.prototype.getDataManagerQuery = function (rule) {\n var predicate = this.getPredicate(rule);\n var query;\n var fields = [];\n for (var i = 0, len = Object.keys(this.columns); i < len.length; i++) {\n fields.push(this.columns[i].field);\n }\n if (rule.rules.length) {\n query = new Query().select(fields).where(predicate);\n }\n else {\n query = new Query().select(fields);\n }\n return query;\n };\n /**\n * Get the predicate from collection of rules.\n *\n * @param {RuleModel} rule - 'rule' to be passed to get predicate.\n * @returns {Predicate} - Predicate from collection of rules\n */\n QueryBuilder.prototype.getPredicate = function (rule) {\n var ruleColl = rule.rules;\n var pred;\n var pred2;\n var ruleValue;\n var ignoreCase = false;\n var column;\n if (!ruleColl) {\n return pred;\n }\n for (var i = 0, len = ruleColl.length; i < len; i++) {\n var operator = ruleColl[i].operator;\n if (operator === 'notstartswith') {\n operator = 'doesnotstartwith';\n }\n else if (operator === 'notendswith') {\n operator = 'doesnotendwith';\n }\n else if (operator === 'notcontains') {\n operator = 'doesnotcontain';\n }\n var keys = Object.keys(ruleColl[i]);\n ignoreCase = false;\n if (keys.indexOf('rules') > -1 && ruleColl[i].rules) {\n pred2 = this.getPredicate(ruleColl[i]);\n if (pred2) {\n if (pred) {\n if (rule.condition === 'and') {\n pred = pred.and(pred2);\n }\n else {\n pred = pred.or(pred2);\n }\n }\n else {\n pred = pred2;\n }\n }\n }\n else if (!isNullOrUndefined(operator) && !isNullOrUndefined(operator.length)) {\n var oper = ruleColl[i].operator.toLowerCase();\n var isDateFilter = false;\n var dateOperColl = ['equal', 'notequal', 'greaterthan', 'greaterthanorequal', 'lessthan', 'lessthanorequal'];\n if (ruleColl[i].type === 'string') {\n ignoreCase = this.matchCase ? false : true;\n }\n if (ruleColl[i].type === 'date' && dateOperColl.indexOf(oper) > -1) {\n ignoreCase = true;\n }\n column = this.getColumn(ruleColl[i].field);\n if (oper.indexOf('null') > -1 || oper.indexOf('empty') > -1) {\n ruleColl[i].value = null;\n }\n else if (ruleColl[i].type === 'date' && !(ruleColl[i].value instanceof Array)) {\n var format = this.getFormat(column.format);\n if (!isNullOrUndefined(ruleColl[i].value)) {\n ruleValue = this.getDate(ruleColl[i].value, format);\n if (dateOperColl.indexOf(oper) > -1 && !this.isTime(ruleColl[i].value)) {\n isDateFilter = true;\n }\n }\n else {\n ruleValue = null;\n }\n }\n else {\n ruleValue = ruleColl[i].value;\n }\n if (i === 0) {\n if (isDateFilter || (oper.indexOf('in') > -1 || oper.indexOf('between') > -1 || oper.indexOf('null') > -1 ||\n oper.indexOf('empty') > -1) && (oper.indexOf('contain') < 0)) {\n pred = isDateFilter ? this.datePredicate(ruleColl[i], ruleValue) :\n this.arrayPredicate(ruleColl[i]);\n }\n else {\n var value = ruleValue;\n if (value !== '') {\n pred = new Predicate(ruleColl[i].field, operator, ruleValue, ignoreCase);\n }\n }\n }\n else {\n if (isDateFilter || (oper.indexOf('in') > -1 || oper.indexOf('between') > -1 ||\n oper.indexOf('null') > -1 || oper.indexOf('empty') > -1) && oper.indexOf('contain') < 0) {\n pred = isDateFilter ? this.datePredicate(ruleColl[i], ruleValue, pred, rule.condition) :\n this.arrayPredicate(ruleColl[i], pred, rule.condition);\n }\n else {\n if (rule.condition === 'and') {\n var value = ruleValue;\n if (pred && value !== '') {\n pred\n = pred.and(ruleColl[i].field, operator, ruleValue, ignoreCase);\n }\n else if (value !== '') {\n pred = new Predicate(ruleColl[i].field, operator, ruleValue, ignoreCase);\n }\n }\n else {\n var value = ruleValue;\n if (pred && value !== '') {\n pred = pred.or(ruleColl[i].field, operator, ruleValue, ignoreCase);\n }\n else if (value !== '') {\n pred = new Predicate(ruleColl[i].field, operator, ruleValue, ignoreCase);\n }\n }\n }\n }\n }\n }\n if (this.dataSource instanceof DataManager) {\n if (!isNullOrUndefined(pred) && (pred.operator === 'isnull' || pred.operator === 'isnotnull')) {\n pred.operator = pred.operator === 'isnull' ? 'equal' : 'notequal';\n }\n }\n return pred;\n };\n QueryBuilder.prototype.getLocale = function () {\n var gregorianFormat = '.dates.calendars.gregorian.days.format.short';\n var localeString = this.locale;\n var mainVal = 'main.';\n var cultureObj = getValue(mainVal + '' + this.locale + gregorianFormat, cldrData);\n if (!cultureObj) {\n localeString = 'en';\n }\n return localeString;\n };\n QueryBuilder.prototype.getColumn = function (field, col) {\n var columns = this.columns;\n var column;\n columns = col ? col : columns;\n for (var i = 0, iLen = columns.length; i < iLen; i++) {\n if (columns[i].field === field) {\n column = columns[i];\n break;\n }\n else if (columns[i].columns) {\n column = this.getColumn(field, columns[i].columns);\n if (column) {\n break;\n }\n }\n else if (field && field.indexOf(this.separator) > -1) {\n if (this.separator !== '' && columns[i].field === field.split(this.separator)[0]) {\n column = columns[i];\n break;\n }\n }\n }\n return column;\n };\n /* eslint-disable */\n /**\n * Return the operator bound to the column.\n *\n * @returns {[key: string]: Object}[] - Operator bound to the column\n */\n /* eslint-enable */\n QueryBuilder.prototype.getOperators = function (field) {\n var column = this.getColumn(field);\n return column.operators;\n };\n QueryBuilder.prototype.setTime = function (date, isStart) {\n if (isStart) {\n date.setHours(0, 0, 0);\n }\n else {\n date.setHours(23, 59, 59);\n }\n return date;\n };\n QueryBuilder.prototype.datePredicate = function (ruleColl, value, predicate, condition) {\n var pred;\n var startDate = this.setTime(new Date(value.getTime()), true);\n var endDate = this.setTime(value);\n switch (ruleColl.operator) {\n case 'equal':\n pred = new Predicate(ruleColl.field, 'greaterthanorequal', startDate);\n pred = pred.and(ruleColl.field, 'lessthanorequal', endDate);\n break;\n case 'notequal':\n pred = new Predicate(ruleColl.field, 'lessthan', startDate);\n pred = pred.or(ruleColl.field, 'greaterthan', endDate);\n break;\n case 'greaterthan':\n pred = new Predicate(ruleColl.field, 'greaterthan', endDate);\n break;\n case 'greaterthanorequal':\n pred = new Predicate(ruleColl.field, 'greaterthanorequal', startDate);\n break;\n case 'lessthan':\n pred = new Predicate(ruleColl.field, 'lessthan', startDate);\n break;\n case 'lessthanorequal':\n pred = new Predicate(ruleColl.field, 'lessthanorequal', endDate);\n break;\n }\n if (pred) {\n if (predicate) {\n if (condition === 'and') {\n predicate = predicate.and(pred);\n }\n else if (condition === 'or') {\n predicate = predicate.or(pred);\n }\n }\n else {\n predicate = pred;\n }\n }\n return predicate;\n };\n QueryBuilder.prototype.arrayPredicate = function (ruleColl, predicate, condition) {\n var value = ruleColl.value;\n var operator = ruleColl.operator.toString();\n var nullValue = ruleColl.value;\n var pred;\n var column = this.getColumn(ruleColl.field);\n var format = this.getFormat(column.format);\n if (operator.indexOf('null') > -1 || operator.indexOf('empty') > -1) {\n switch (operator) {\n case 'isnull':\n pred = new Predicate(ruleColl.field, 'isnull', nullValue);\n break;\n case 'isnotnull':\n pred = new Predicate(ruleColl.field, 'isnotnull', nullValue);\n break;\n case 'isempty':\n pred = new Predicate(ruleColl.field, 'equal', '');\n break;\n case 'isnotempty':\n pred = new Predicate(ruleColl.field, 'notequal', '');\n break;\n }\n }\n if (!(operator.indexOf('null') > -1 || operator.indexOf('empty') > -1)) {\n for (var j = 0, jLen = value.length; j < jLen; j++) {\n if (value[j] !== '' || ((operator === 'in' || operator === 'notin') && column.type === 'string')) {\n if (j === 0) {\n var gte = 'greaterthanorequal';\n switch (operator) {\n case 'between':\n if (column.type !== 'date') {\n pred = new Predicate(ruleColl.field, gte, value[j]);\n }\n else {\n pred = new Predicate(ruleColl.field, gte, value[j] ?\n (this.isTime(value[j]) ? this.getDate(value[j], format) :\n this.setTime(this.getDate(value[j], format), true)) : null);\n }\n break;\n case 'notbetween':\n if (column.type === 'date') {\n pred = new Predicate(ruleColl.field, 'lessthan', value[j] ?\n (this.isTime(value[j]) ? this.getDate(value[j], format) :\n this.setTime(this.getDate(value[j], format), true)) : null);\n }\n else {\n pred = new Predicate(ruleColl.field, 'lessthan', value[j]);\n }\n break;\n case 'in':\n pred = new Predicate(ruleColl.field, 'equal', value[j]);\n break;\n case 'notin':\n pred = new Predicate(ruleColl.field, 'notequal', value[j]);\n break;\n }\n }\n else {\n var gt = 'greaterthan';\n switch (ruleColl.operator) {\n case 'between':\n if (column.type === 'date') {\n pred = pred.and(ruleColl.field, 'lessthanorequal', value[j] ?\n (this.isTime(value[j]) ? this.getDate(value[j], format) :\n this.setTime(this.getDate(value[j], format))) : value[j]);\n }\n else {\n pred = pred.and(ruleColl.field, 'lessthanorequal', value[j]);\n }\n break;\n case 'notbetween':\n if (column.type === 'date') {\n pred = pred.or(ruleColl.field, gt, value[j] ?\n (this.isTime(value[j]) ? this.getDate(value[j], format) :\n this.setTime(this.getDate(value[j], format))) : value[j]);\n }\n else {\n pred = pred.or(ruleColl.field, 'greaterthan', value[j]);\n }\n break;\n case 'in':\n pred = pred.or(ruleColl.field, 'equal', value[j]);\n break;\n case 'notin':\n pred = pred.and(ruleColl.field, 'notequal', value[j]);\n break;\n }\n }\n }\n }\n }\n if (pred) {\n if (predicate) {\n if (condition === 'and') {\n predicate = predicate.and(pred);\n }\n else if (condition === 'or') {\n predicate = predicate.or(pred);\n }\n }\n else {\n predicate = pred;\n }\n }\n return predicate;\n };\n QueryBuilder.prototype.getDate = function (value, format) {\n var currDate = this.intl.parseDate(value, format);\n if (value.indexOf(':') > -1 && (value.indexOf('/') < 0 && value.indexOf(',') < 0\n && value.indexOf('-') < 0)) {\n currDate = new Date();\n currDate.setHours(parseInt(value.split(':')[0], 10));\n currDate.setMinutes(parseInt(value.split(':')[1], 10));\n if (value.split(':')[2]) {\n currDate.setSeconds(parseInt(value.split(':')[2], 10));\n }\n }\n return currDate;\n };\n QueryBuilder.prototype.isTime = function (value) {\n if (value && value.indexOf(':') > -1) {\n return true;\n }\n return false;\n };\n QueryBuilder.prototype.importRules = function (rule, parentElem, isReset, not, isRoot) {\n if (!isReset) {\n parentElem = this.renderGroup(rule, rule.condition, parentElem, not);\n }\n else {\n if (rule.rules && rule.rules.length > 1 && !this.headerTemplate) {\n // enable/disable conditions when rule group is added\n var orElem = parentElem.querySelector('.e-btngroup-or');\n var andElem = parentElem.querySelector('.e-btngroup-and');\n if (this.enableSeparateConnector && parentElem.previousElementSibling) {\n orElem = parentElem.previousElementSibling.querySelector('.e-btngroup-or');\n andElem = parentElem.previousElementSibling.querySelector('.e-btngroup-and');\n }\n orElem.disabled = false;\n andElem.disabled = false;\n if (this.enableSeparateConnector) {\n var elem = parentElem.previousElementSibling;\n while (elem && !elem.classList.contains('e-rule-container')) {\n if (elem.classList.contains('e-group-container')) {\n elem = elem.querySelectorAll('.e-rule-container')[elem.querySelectorAll('.e-rule-container').length - 1];\n break;\n }\n elem = elem.previousElementSibling;\n }\n if (elem && elem.classList.contains('e-rule-container')) {\n var ruleID = elem.id.replace(this.element.id + '_', '');\n var prevRule = this.getRule(ruleID);\n if (prevRule.condition === 'or') {\n orElem.checked = true;\n }\n else {\n andElem.checked = true;\n }\n }\n }\n else {\n if (rule.condition === 'or') {\n orElem.checked = true;\n }\n else {\n andElem.checked = true;\n }\n }\n }\n else {\n // enable/disable conditions when rule condition is added\n this.disableRuleCondition(parentElem);\n }\n if (this.headerTemplate && isRoot) {\n parentElem = this.renderGroup(rule, rule.condition, this.element, rule.not, isRoot);\n }\n if (this.enableNotCondition && !this.headerTemplate) {\n var tglBtnElem = parentElem.querySelector('.e-qb-toggle');\n if (rule.not) {\n addClass([tglBtnElem], 'e-active-toggle');\n }\n else {\n removeClass([tglBtnElem], 'e-active-toggle');\n }\n }\n }\n if (rule.rules && rule.rules.length === 0 && this.headerTemplate) {\n rule.rules[0] = { 'label': '', 'field': '', 'operator': '', 'type': '', 'value': '' };\n }\n var ruleColl = rule.rules;\n if (!isNullOrUndefined(ruleColl)) {\n for (var i = 0, len = ruleColl.length; i < len; i++) {\n var keys = Object.keys(ruleColl[i]);\n if (!isNullOrUndefined(ruleColl[i].rules) && keys.indexOf('rules') > -1 && (ruleColl[i].rules.length !== 0)) {\n if (this.element.querySelectorAll('.e-group-container').length > this.maxGroupCount) {\n return null;\n }\n parentElem = this.renderGroup(ruleColl[i], ruleColl[i].condition, parentElem, ruleColl[i].not);\n parentElem = this.importRules(ruleColl[i], parentElem, true);\n }\n else {\n this.renderRule(ruleColl[i], parentElem);\n }\n if (!isNullOrUndefined(ruleColl[i].rules) && ruleColl[i].isLocked) {\n var lockGrpTarget = parentElem.querySelector('.e-rule-list').children[i].querySelector('.e-lock-grp-btn');\n this.groupLock(lockGrpTarget);\n }\n }\n }\n if (parentElem) {\n parentElem = closest(parentElem, '.e-rule-list');\n }\n if (parentElem) {\n parentElem = closest(parentElem, '.e-group-container');\n }\n return parentElem;\n };\n QueryBuilder.prototype.renderGroup = function (rule, condition, parentElem, not, isRoot) {\n this.addGroupElement(true, parentElem, condition, false, not, isRoot, rule); //Child group\n var element = parentElem.querySelectorAll('.e-group-container');\n var cloneElem = parentElem.querySelector('.e-rule-list').children;\n if (this.showButtons.cloneGroup && this.cloneGrpBtnClick && this.isMiddleGroup) {\n this.isMiddleGroup = false;\n this.cloneGrpBtnClick = false;\n var index = 0;\n var tempGroupIndex = this.groupIndex + 1;\n if (this.enableSeparateConnector) {\n for (var i = 0; i < tempGroupIndex; i++) {\n if (cloneElem[i].classList.contains('e-rule-container')) {\n tempGroupIndex++;\n index++;\n }\n }\n }\n return cloneElem[this.groupIndex + index + 1]; // group added in the middle\n }\n else if (this.showButtons.cloneGroup && this.cloneGrpBtnClick && this.isLastGroup) {\n this.isLastGroup = false;\n this.cloneGrpBtnClick = false;\n return cloneElem[cloneElem.length - 1]; // group added in the end\n }\n else {\n return element[element.length - 1];\n }\n };\n QueryBuilder.prototype.renderRule = function (rule, parentElem) {\n if (parentElem.className.indexOf('e-group-container') > -1) {\n this.addRuleElement(parentElem, rule); //Create rule\n }\n else {\n this.addRuleElement(parentElem.querySelector('.e-group-container'), rule); //Create group\n }\n };\n QueryBuilder.prototype.enableReadonly = function () {\n var target = this.element;\n var elem = target.querySelectorAll('.e-dropdownlist, .e-dropdowntree, .e-numerictextbox, .e-textbox, .e-datepicker, .e-multiselect .e-lib, .e-radio');\n for (var i = 0; i < elem.length; i++) {\n if (elem[i].classList.contains('e-dropdownlist')) {\n var dropDownObj = getInstance(elem[i], DropDownList);\n dropDownObj.readonly = this.isReadonly;\n }\n else if (elem[i].classList.contains('e-dropdowntree')) {\n var dropDownTreeObj = getComponent(elem[i], 'dropdowntree');\n dropDownTreeObj.readonly = this.isReadonly;\n }\n else if (elem[i].classList.contains('e-numerictextbox')) {\n var numericTextBoxObj = getInstance(elem[i], NumericTextBox);\n numericTextBoxObj.readonly = this.isReadonly;\n }\n else if (elem[i].classList.contains('e-textbox')) {\n var textBoxObj = getInstance(elem[i], TextBox);\n textBoxObj.readonly = this.isReadonly;\n }\n else if (elem[i].classList.contains('e-datepicker')) {\n var datePickerObj = getInstance(elem[i], DatePicker);\n datePickerObj.readonly = this.isReadonly;\n }\n else if (elem[i].classList.contains('e-multiselect')) {\n var multiSelectObj = getInstance(elem[i], MultiSelect);\n multiSelectObj.readonly = this.isReadonly;\n }\n else if (elem[i].classList.contains('e-radio')) {\n var radioButtonObj = getInstance(elem[i], RadioButton);\n if (!radioButtonObj.checked) {\n if (this.isReadonly) {\n elem[i].parentElement.style.display = 'none';\n }\n else {\n elem[i].parentElement.style.display = 'inherit';\n }\n }\n }\n }\n var deleteGroupElems = this.element.querySelectorAll('.e-deletegroup');\n var addRuleGroupElems = this.element.querySelectorAll('.e-addrulegroup');\n var removeRuleElems = this.element.querySelectorAll('.e-removerule');\n if (!this.isReadonly && this.ruleElem.classList.contains('e-readonly')) {\n this.ruleElem.classList.remove('e-readonly');\n }\n var elems = [deleteGroupElems, addRuleGroupElems, removeRuleElems];\n for (var i = 0; i < elems.length; i++) {\n elems[i].forEach(function (elem) {\n if (elem.classList.contains('e-readonly')) {\n elem.classList.remove('e-readonly');\n }\n else {\n elem.classList.add('e-readonly');\n }\n });\n }\n this.enableBtnGroup();\n };\n QueryBuilder.prototype.enableBtnGroup = function () {\n var _this = this;\n var elems = this.element.querySelectorAll('.e-btngroup-and-lbl, .e-btngroup-or-lbl, .e-qb-toggle');\n var not = false;\n elems.forEach(function (elem) {\n if (elem.classList.contains('e-qb-toggle') && !elem.classList.contains('e-active-toggle')\n && !elem.classList.contains('e-readonly')) {\n elem.classList.add('e-readonly');\n not = false;\n }\n else if (elem.classList.contains('e-qb-toggle') && elem.classList.contains('e-not-readonly')) {\n elem.classList.remove('e-not-readonly');\n }\n else if (elem.classList.contains('e-qb-toggle') && elem.classList.contains('e-readonly')) {\n elem.classList.remove('e-readonly');\n }\n else if (elem.classList.contains('e-active-toggle')) {\n elem.classList.add('e-not-readonly');\n not = true;\n }\n else if (elem.previousElementSibling.checked || elem.classList.contains('e-readonly')) {\n elem.classList.remove('e-readonly');\n if (not) {\n if (elem.textContent === 'AND') {\n elem.classList.add('e-readonly-and');\n }\n else {\n elem.classList.add('e-readonly-or');\n }\n }\n else {\n if (elem.textContent === 'AND' && _this.isReadonly) {\n elem.classList.remove('e-not');\n elem.classList.add('e-readonly-and');\n }\n else {\n if (_this.enableNotCondition) {\n elem.classList.add('e-not');\n }\n elem.classList.remove('e-readonly-and');\n }\n if (elem.textContent === 'OR' && _this.isReadonly) {\n elem.classList.add('e-readonly-or-not');\n }\n else {\n elem.classList.remove('e-readonly-or-not');\n }\n }\n }\n else if (elem.classList.contains('e-btn-disable')) {\n // do nothing\n }\n else {\n elem.classList.add('e-readonly');\n }\n });\n };\n QueryBuilder.prototype.isDateFunction = function (value) {\n var dateFunc = ['date', 'time', 'day', 'week', 'month', 'year', 'hour', 'minute', 'second', 'now', 'quarter', 'period', 'extract'];\n for (var i = 0, len = dateFunc.length; i < len; i++) {\n if (value.toLowerCase().indexOf(dateFunc[i]) > -1) {\n return true;\n }\n }\n return false;\n };\n QueryBuilder.prototype.getSqlString = function (rules, enableEscape, queryStr, sqlLocale) {\n var isRoot = false;\n if (!queryStr && queryStr !== '') {\n queryStr = '';\n isRoot = true;\n }\n else {\n queryStr += '(';\n }\n var condition = rules.condition;\n if (rules.not) {\n var rulesNotCondition = void 0;\n if (isRoot) {\n rulesNotCondition = sqlLocale ? this.l10n.getConstant('NOT').toUpperCase() + ' (' : 'NOT (';\n queryStr += rulesNotCondition;\n }\n else {\n rulesNotCondition = sqlLocale ? ' ' + this.l10n.getConstant('NOT').toUpperCase() + ' (' : ' NOT (';\n queryStr += rulesNotCondition;\n }\n }\n if (rules.rules) {\n for (var j = 0, jLen = rules.rules.length; j < jLen; j++) {\n if (rules.rules[j].rules) {\n queryStr = this.getSqlString(rules.rules[j], enableEscape, queryStr, sqlLocale);\n condition = rules.rules[j].condition;\n }\n else {\n var rule = rules.rules[j];\n var valueStr = '';\n var ruleOpertor = sqlLocale ? this.sqlOperators[rule.operator] : this.operators[rule.operator];\n if (rule.value instanceof Array) {\n if (rule.operator.toString().indexOf('between') > -1) {\n var ruleCondition = sqlLocale ? ' ' + this.l10n.getConstant('AND').toUpperCase() + ' ' : ' ' + 'AND' + ' ';\n if (rule.type === 'date' && !this.isDateFunction(rule.value[0])) {\n valueStr += '\"' + rule.value[0] + '\"' + ruleCondition + '\"' + rule.value[1] + '\"';\n }\n else {\n valueStr += rule.value[0] + ruleCondition + rule.value[1];\n }\n }\n else {\n if (typeof rule.value[0] === 'string' && rule.value !== null) {\n valueStr += '(\"' + rule.value[0] + '\"';\n for (var k = 1, kLen = rule.value.length; k < kLen; k++) {\n valueStr += ',\"' + rule.value[k] + '\"';\n }\n valueStr += ')';\n }\n else {\n valueStr += '(' + rule.value + ')';\n }\n }\n }\n else {\n if (rule.operator.toString().indexOf('startswith') > -1) {\n valueStr += rule.value ? '(\"' + rule.value + '%\")' : '(' + rule.value + ')';\n }\n else if (rule.operator.toString().indexOf('endswith') > -1) {\n valueStr += rule.value ? '(\"%' + rule.value + '\")' : '(' + rule.value + ')';\n }\n else if (rule.operator.toString().indexOf('contains') > -1) {\n valueStr += rule.value ? '(\"%' + rule.value + '%\")' : '(' + rule.value + ')';\n }\n else {\n if (rule.type === 'number' || typeof rule.value === 'boolean' ||\n (rule.value === null && (rule.operator.toString().indexOf('empty') < -1))) {\n valueStr += rule.value;\n }\n else if (rule.operator.toString().indexOf('empty') > -1) {\n valueStr += '\"\"';\n }\n else {\n valueStr += '\"' + rule.value + '\"';\n }\n }\n }\n if (rule.operator.toString().indexOf('null') > -1) {\n if (enableEscape) {\n rule.field = '`' + rule.field + '`';\n }\n else {\n if (rule.field.indexOf(' ') > -1) {\n rule.field = '\"' + rule.field + '\"';\n }\n }\n queryStr += rule.field + ' ' + ruleOpertor;\n }\n else {\n var custOper = ruleOpertor;\n if (rule.operator === 'isempty') {\n custOper = '=';\n }\n else if (rule.operator === 'isnotempty') {\n custOper = '!=';\n }\n if (enableEscape) {\n rule.field = '`' + rule.field + '`';\n }\n else {\n if (rule.field.indexOf(' ') > -1) {\n rule.field = '\"' + rule.field + '\"';\n }\n }\n queryStr += rule.field + ' ' + custOper + ' ' + valueStr;\n }\n if (rule.condition && rule.condition !== '') {\n condition = rule.condition;\n }\n }\n if (j !== jLen - 1) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var rule = rules.rules[j];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (condition === '' || (rule && rule.condition !== '' && rule.custom && rule.custom.isCustom)) {\n condition = rule.condition;\n }\n if (condition) {\n condition = sqlLocale ? this.l10n.getConstant(condition.toUpperCase()).toUpperCase() : condition.toUpperCase();\n queryStr += ' ' + condition + ' ';\n }\n }\n }\n }\n if (!isRoot) {\n queryStr += ')';\n }\n if (rules.not) {\n queryStr += ')';\n }\n return queryStr;\n };\n /**\n * Sets the rules from the sql query.\n *\n * @param {string} sqlString - 'sql String' to be passed to set the rule.\n * @param {boolean} sqlLocale - Optional. Set `true` if Localization for Sql query.\n * @returns {void}\n */\n QueryBuilder.prototype.setRulesFromSql = function (sqlString, sqlLocale) {\n sqlString = sqlString.replace(/`/g, '');\n var ruleModel = this.getRulesFromSql(sqlString, sqlLocale);\n this.setRules({ condition: ruleModel.condition, not: ruleModel.not, rules: ruleModel.rules });\n };\n /**\n * Get the rules from SQL query.\n *\n * @param {string} sqlString - 'sql String' to be passed to get the rule.\n * @param {boolean} sqlLocale - Set `true` if Localization for Sql query.\n * @returns {object} - Rules from SQL query\n */\n QueryBuilder.prototype.getRulesFromSql = function (sqlString, sqlLocale) {\n this.parser = [];\n this.sqlParser(sqlString, sqlLocale);\n this.setProperties({ rule: { condition: 'and', not: false, rules: [] } }, true);\n var rule = this.processParser(this.parser, this.rule, [0], sqlLocale);\n if (this.enableNotCondition) {\n return { condition: rule.condition, not: rule.not, rules: rule.rules };\n }\n else {\n return { condition: rule.condition, rules: rule.rules };\n }\n };\n /**\n * Gets the sql query from rules.\n *\n * @param {RuleModel} rule - 'rule' to be passed to get the sql.\n * @param {boolean} allowEscape - Set `true` if it exclude the escape character.\n * @param {boolean} sqlLocale - Set `true` if Localization for Sql query.\n * @returns {string} - Sql query from rules.\n */\n QueryBuilder.prototype.getSqlFromRules = function (rule, allowEscape, sqlLocale) {\n if (!rule) {\n rule = this.getValidRules();\n }\n rule = this.getRuleCollection(rule, false);\n var sqlString = this.getSqlString(this.getValidRules(rule), allowEscape, null, sqlLocale).replace(/\"/g, '\\'');\n return sqlString;\n };\n /**\n * Gets the parameter SQL query from rules.\n *\n * @param {RuleModel} rule – Specify the rule to be passed to get the parameter sql string.\n * @returns {ParameterizedSql} – Parameterized SQL query from rules.\n */\n QueryBuilder.prototype.getParameterizedSql = function (rule) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.moduleLoader.loadedModules.length) {\n if (!rule) {\n rule = this.getValidRules();\n }\n var obj = { sql: null };\n this.notify('query-library', { prop: 'getParameterSql', onPropertyChange: false, value: { rule: rule, obj: obj } });\n return obj['sql'];\n }\n else {\n console.warn('[WARNING] :: Module \"query-library\" is not available in QueryBuilder component! You either misspelled the module name or forgot to load it.');\n }\n return null;\n };\n /**\n * Sets the rules from the parameter sql query.\n *\n * @param { ParameterizedSql} sqlQuery – Specifies the parameter SQL to be passed to set the rule and load it to the query builder.\n * @returns {void}\n */\n QueryBuilder.prototype.setParameterizedSql = function (sqlQuery) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.moduleLoader.loadedModules.length) {\n var obj = { sql: null };\n this.notify('query-library', { prop: 'convertParamSqlToSql', onPropertyChange: false, value: { sql: sqlQuery, obj: obj } });\n var sql = obj['sql'];\n if (sql) {\n sql = sql.replace(/`/g, '');\n var ruleModel = this.getRulesFromSql(sql);\n this.setRules({ condition: ruleModel.condition, not: ruleModel.not, rules: ruleModel.rules });\n }\n }\n else {\n console.warn('[WARNING] :: Module \"query-library\" is not available in QueryBuilder component! You either misspelled the module name or forgot to load it.');\n }\n };\n /**\n * Gets the named parameter SQL query from rules.\n *\n * @param {RuleModel} rule – Specify the rule to be passed to get the named parameter SQL string.\n * @returns {ParameterizedNamedSql} – Parameterized Named SQL query from rules.\n */\n QueryBuilder.prototype.getParameterizedNamedSql = function (rule) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.moduleLoader.loadedModules.length) {\n if (!rule) {\n rule = this.getValidRules();\n }\n var obj = { sql: null };\n this.notify('query-library', { prop: 'getNamedParameterSql', onPropertyChange: false, value: { rule: rule, obj: obj } });\n return obj['sql'];\n }\n else {\n console.warn('[WARNING] :: Module \"query-library\" is not available in QueryBuilder component! You either misspelled the module name or forgot to load it.');\n }\n return null;\n };\n /**\n * Sets the rules from the named parameter SQL query.\n *\n * @param { ParameterizedNamedSql } sqlQuery – Specifies the named parameter SQL to be passed to set the rule and load it to the query builder.\n * @returns {void}\n */\n QueryBuilder.prototype.setParameterizedNamedSql = function (sqlQuery) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.moduleLoader.loadedModules.length) {\n var obj = { sql: null };\n this.notify('query-library', { prop: 'convertNamedParamSqlToSql', onPropertyChange: false, value: { sql: sqlQuery, obj: obj } });\n var sql = obj['sql'];\n if (sql) {\n sql = sql.replace(/`/g, '');\n var ruleModel = this.getRulesFromSql(sql);\n this.setRules({ condition: ruleModel.condition, not: ruleModel.not, rules: ruleModel.rules });\n }\n }\n else {\n console.warn('[WARNING] :: Module \"query-library\" is not available in QueryBuilder component! You either misspelled the module name or forgot to load it.');\n }\n };\n /**\n * Set the rules from Mongo query.\n *\n * @param {string} mongoQuery - 'sql String' to be passed to get the rule.\n * @param {boolean} mongoLocale - Set `true` if Localization for Mongo query.\n * @returns {void}\n */\n QueryBuilder.prototype.setMongoQuery = function (mongoQuery, mongoLocale) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.moduleLoader.loadedModules.length) {\n this.rule = { condition: 'and', not: false, rules: [] };\n this.notify('query-library', { prop: 'mongoParser', onPropertyChange: false, value: { mongoQuery: JSON.parse(mongoQuery), rule: this.rule, mongoLocale: mongoLocale } });\n }\n else {\n console.warn('[WARNING] :: Module \"query-library\" is not available in QueryBuilder component! You either misspelled the module name or forgot to load it.');\n }\n };\n /**\n * Gets the Mongo query from rules.\n *\n * @param {RuleModel} rule - 'rule' to be passed to get the sql.\n * @returns {object} - Sql query from rules.\n */\n QueryBuilder.prototype.getMongoQuery = function (rule) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.moduleLoader.loadedModules.length) {\n if (!rule) {\n rule = this.getValidRules();\n }\n var obj = { mongoQuery: null };\n this.notify('query-library', { prop: 'getMongoFromRules', onPropertyChange: false, value: { rule: rule, mongoQuery: '', obj: obj } });\n return obj['mongoQuery'];\n }\n else {\n console.warn('[WARNING] :: Module \"query-library\" is not available in QueryBuilder component! You either misspelled the module name or forgot to load it.');\n }\n return '';\n };\n /**\n * Clones the rule based on the rule ID to the specific group.\n *\n * @param {string} ruleID - Specifies the ruleID that needs to be cloned.\n * @param {string} groupID - Specifies the groupID in which the rule to be cloned.\n * @param {number} index - Specifies the index to insert the cloned rule inside the group.\n * @returns {void}\n */\n QueryBuilder.prototype.cloneRule = function (ruleID, groupID, index) {\n var getRule = this.getRule(ruleID.replace(this.element.id + '_', ''));\n var isCloneRule = this.showButtons.cloneRule;\n groupID = groupID.replace(this.element.id + '_', '');\n this.ruleIndex = index;\n this.cloneRuleBtnClick = true;\n this.showButtons.cloneRule = true;\n this.addRules([{\n 'label': getRule.label, 'field': getRule.field, 'type': getRule.type, 'operator': getRule.operator,\n 'value': getRule.value, 'condition': getRule.condition\n }], groupID);\n this.ruleIndex = -1;\n this.cloneRuleBtnClick = false;\n this.showButtons.cloneRule = isCloneRule;\n isCloneRule = false;\n };\n /**\n * Clones the group based on the group ID to the specific group.\n *\n * @param {string} groupID - Specifies the groupID that needs to be cloned.\n * @param {string} parentGroupID - Specifies the parentGroupID in which the group to be cloned.\n * @param {number} index - Specifies the index to insert the cloned group inside the parent group.\n * @returns {void}\n */\n QueryBuilder.prototype.cloneGroup = function (groupID, parentGroupID, index) {\n parentGroupID = parentGroupID.replace(this.element.id + '_', '');\n var group = this.getGroup(parentGroupID);\n var isCloneGroup = this.showButtons.cloneGroup;\n groupID = groupID.replace(this.element.id + '_', '');\n this.groupIndex = index;\n this.cloneGrpBtnClick = true;\n this.showButtons.cloneGroup = true;\n this.addGroups([{ 'condition': group.condition, 'not': group.not, 'rules': group.rules }], groupID);\n this.groupIndex = -1;\n this.cloneGrpBtnClick = false;\n this.showButtons.cloneGroup = isCloneGroup;\n isCloneGroup = false;\n };\n /**\n * Locks the rule based on the rule ID.\n *\n * @param {string} ruleID - Specifies the ruleID that needs to be locked.\n * @returns {void}\n */\n QueryBuilder.prototype.lockRule = function (ruleID) {\n if (ruleID.indexOf(this.element.id) < 0) {\n ruleID = this.element.id + '_' + ruleID;\n }\n var target = document.getElementById(ruleID).querySelectorAll('.e-lock-rule-btn')[0];\n this.ruleLock(target);\n };\n /**\n * Locks the group based on the group ID\n *\n * @param {string} groupID - Specifies the groupID that needs to be locked.\n * @returns {void}\n */\n QueryBuilder.prototype.lockGroup = function (groupID) {\n if (groupID.indexOf(this.element.id) < 0) {\n groupID = this.element.id + '_' + groupID;\n }\n var target = document.getElementById(groupID).querySelectorAll('.e-lock-grp-btn')[0];\n this.groupLock(target);\n };\n QueryBuilder.prototype.sqlParser = function (sqlString, sqlLocale) {\n var st = 0;\n var str;\n do {\n str = sqlString.slice(st);\n st += this.parseSqlStrings(str, sqlLocale);\n } while (str !== '');\n return this.parser;\n };\n QueryBuilder.prototype.parseSqlStrings = function (sqlString, sqlLocale) {\n var operators = ['=', '!=', '<=', '>=', '<', '>'];\n var conditions;\n if (sqlLocale) {\n conditions = [this.l10n.getConstant('AND').toUpperCase(), this.l10n.getConstant('OR').toUpperCase(), this.l10n.getConstant('NOT').toUpperCase()];\n }\n else {\n conditions = ['AND', 'OR', 'NOT'];\n }\n var subOp;\n if (sqlLocale) {\n subOp = [this.l10n.getConstant('In').toUpperCase(), this.l10n.getConstant('NotIn').toUpperCase(),\n this.l10n.getConstant('Like').toUpperCase(), this.l10n.getConstant('NotLike').toUpperCase(),\n this.l10n.getConstant('Between').toUpperCase(), this.l10n.getConstant('NotBetween').toUpperCase(),\n this.l10n.getConstant('IsNull').toUpperCase(), this.l10n.getConstant('IsNotNull').toUpperCase(),\n this.l10n.getConstant('IsEmpty').toUpperCase(), this.l10n.getConstant('IsNotEmpty').toUpperCase()];\n }\n else {\n subOp = ['IN', 'NOT IN', 'LIKE', 'NOT LIKE', 'BETWEEN', 'NOT BETWEEN', 'IS NULL', 'IS NOT NULL', 'IS EMPTY', 'IS NOT EMPTY'];\n }\n var regexStr;\n var regex;\n var matchValue;\n for (var i = 0, iLen = operators.length; i < iLen; i++) {\n regexStr = /^\\w+$/.test(operators[i]) ? '\\\\b' : '';\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var regExp = RegExp;\n regex = new regExp('^(' + operators[i] + ')' + regexStr, 'ig');\n if (regex.exec(sqlString)) {\n this.parser.push(['Operators', operators[i].toLowerCase()]);\n return operators[i].length;\n }\n }\n var lastPasrser = this.parser[this.parser.length - 1];\n if (!lastPasrser || (lastPasrser && lastPasrser[0] !== 'Literal')) {\n for (var i = 0, iLen = conditions.length; i < iLen; i++) {\n regexStr = /^\\w+$/.test(conditions[i]) ? '\\\\b' : '';\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var regExp = RegExp;\n regex = new regExp('^(' + conditions[i] + ')' + regexStr, 'ig');\n if (regex.exec(sqlString)) {\n this.parser.push(['Conditions', conditions[i].toLowerCase()]);\n return conditions[i].length;\n }\n }\n }\n for (var i = 0, iLen = subOp.length; i < iLen; i++) {\n regexStr = /^\\w+$/.test(subOp[i]) ? '\\\\b' : '';\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var regExp = RegExp;\n regex = new regExp('^(' + subOp[i] + ')' + regexStr, 'ig');\n if (regex.exec(sqlString)) {\n this.parser.push(['SubOperators', subOp[i].toLowerCase()]);\n return subOp[i].length;\n }\n }\n //Left Parenthesis\n if (/^\\(/.exec(sqlString)) {\n this.parser.push(['Left', '(']);\n return 1;\n }\n //Right Parenthesis\n if (/^\\)/.exec(sqlString)) {\n this.parser.push(['Right', ')']);\n return 1;\n }\n //Boolean\n if (/^(true|false)/.exec(sqlString)) {\n matchValue = /^(true|false)/.exec(sqlString)[0];\n this.parser.push(['String', matchValue]);\n return matchValue.length;\n }\n //Null\n if (/^null/.exec(sqlString)) {\n matchValue = /^null/.exec(sqlString)[0];\n this.parser.push(['String', null]);\n return matchValue.length;\n }\n if (/^`?([a-z_][a-z0-9_.\\\\[\\]\\\\(\\\\)]{0,}(\\\\:(number|float|string|date|boolean))?)`?/i.exec(sqlString)) {\n matchValue = /^`?([a-z_][a-z0-9_.\\\\[\\]\\\\(\\\\)]{0,}(\\\\:(number|float|string|date|boolean))?)`?/i.exec(sqlString)[1];\n this.parser.push(['Literal', matchValue]);\n return matchValue.length;\n }\n if (this.checkLiteral() && /^'?([a-z_][a-z0-9 _.\\\\[\\]\\\\(\\\\)-]{0,}(\\\\:(number|float|string|date|boolean))?)'?/i.exec(sqlString)) {\n matchValue = /^'?([a-z_][a-z0-9 _.\\\\[\\]\\\\(\\\\)-]{0,}(\\\\:(number|float|string|date|boolean))?)'?/i.exec(sqlString)[1];\n this.parser.push(['Literal', matchValue]);\n return matchValue.length + 2;\n }\n if (this.checkNumberLiteral(sqlString, sqlLocale)) {\n matchValue = /^[0-9]+(\\.[0-9]+)$/.exec(sqlString)[0];\n this.parser.push(['Literal', matchValue]);\n return matchValue.length;\n }\n //String\n var singleString = this.getSingleQuoteString(sqlString);\n if (singleString !== '') {\n matchValue = singleString;\n if (matchValue[matchValue.length - 2] === '(') {\n var isClosed = false;\n for (var j = matchValue.length; j < sqlString.length; j++) {\n matchValue += sqlString[j];\n if (sqlString[j] === ')') {\n isClosed = true;\n }\n if (isClosed && sqlString[j] === '\\'') {\n break;\n }\n }\n }\n else if (sqlString[matchValue.length] && (sqlString[matchValue.length] !== ')') &&\n !this.checkCondition(sqlString, matchValue)) {\n matchValue = this.combineSingleQuoteString(sqlString, matchValue);\n }\n // end\n this.parser.push(['String', matchValue]);\n return matchValue.length;\n }\n // Double String\n var doubleString = this.getDoubleQuoteString(sqlString);\n if (doubleString !== '') {\n matchValue = doubleString;\n this.parser.push(['DoubleString', matchValue]);\n return matchValue.length;\n }\n //Number\n if (/^\\d*\\.?\\d+/.exec(sqlString)) {\n matchValue = /^\\d*\\.?\\d+/.exec(sqlString)[0];\n this.parser.push(['Number', matchValue]);\n return matchValue.length;\n }\n //Negative Number\n if (/^-?\\d*\\.?\\d+/.exec(sqlString)) {\n matchValue = /^-?\\d*\\.?\\d+/.exec(sqlString)[0];\n this.parser.push(['Number', matchValue]);\n return matchValue.length;\n }\n return 1;\n };\n QueryBuilder.prototype.getDoubleQuoteString = function (sqlString) {\n var start = sqlString.indexOf('\"');\n if (start === 0) {\n var end = sqlString.indexOf('\"', start + 1);\n if (end !== -1) {\n return sqlString.substring(start, end + 1);\n }\n }\n return '';\n };\n QueryBuilder.prototype.checkCondition = function (sqlString, matchValue) {\n if (sqlString.slice(matchValue.length + 1, matchValue.length + 4) === 'AND' ||\n sqlString.slice(matchValue.length + 1, matchValue.length + 3) === 'OR') {\n return true;\n }\n return false;\n };\n QueryBuilder.prototype.getSingleQuoteString = function (sqlString, isBetween) {\n var start = sqlString.indexOf('\\'');\n if ((start !== -1 && isBetween) || (start === 0 && !isBetween)) {\n var end = sqlString.indexOf('\\'', start + 1);\n if (end !== -1) {\n return sqlString.substring(start, end + 1);\n }\n }\n return '';\n };\n QueryBuilder.prototype.combineSingleQuoteString = function (sqlString, matchValue) {\n if (sqlString[matchValue.length] && (sqlString[matchValue.length] !== ')') &&\n !this.checkCondition(sqlString, matchValue) && sqlString[matchValue.length] !== ',') {\n var tempMatchValue = matchValue.substring(0, matchValue.length - 1);\n var tempStr = sqlString.replace(tempMatchValue, '');\n var singleString = this.getSingleQuoteString(tempStr, true);\n if (singleString !== '') {\n var parsedValue = singleString.substring(1, singleString.length);\n matchValue += parsedValue;\n matchValue = this.combineSingleQuoteString(sqlString, matchValue);\n }\n }\n return matchValue;\n };\n QueryBuilder.prototype.checkLiteral = function () {\n var lastParser = this.parser[this.parser.length - 1];\n if (!lastParser) {\n return true;\n }\n else {\n var secParser = this.parser[this.parser.length - 2];\n var betweenParser = this.parser[this.parser.length - 3];\n if (lastParser[0] === 'Left' && (secParser && secParser[0] === 'Conditions')) {\n return true;\n }\n var betweenOperator = 'between';\n if (lastParser[0] === 'Conditions' && (betweenParser && betweenParser[1].indexOf(betweenOperator) < 0)) {\n return true;\n }\n }\n return false;\n };\n QueryBuilder.prototype.checkNumberLiteral = function (sqlString, sqlLocale) {\n var lastParser = this.parser[this.parser.length - 1];\n if (!lastParser) {\n return true;\n }\n else {\n if (/^[0-9]+(?:\\.[0-9]+)$/.exec(sqlString)) {\n var secParser = this.parser[this.parser.length - 2];\n var betweenParser = this.parser[this.parser.length - 3];\n if (lastParser[0] === 'Left' && (secParser && secParser[0] === 'Conditions')) {\n return true;\n }\n var betweenOperator = sqlLocale ? this.l10n.getConstant('Between').toLowerCase() : 'between';\n if (lastParser[0] === 'Conditions' && (betweenParser && betweenParser[1].indexOf(betweenOperator) < 0)) {\n return true;\n }\n }\n }\n return false;\n };\n QueryBuilder.prototype.getOperator = function (value, operator, sqlLocale) {\n var operators = {\n '=': 'equal', '!=': 'notequal', '<': 'lessthan', '>': 'greaterthan', '<=': 'lessthanorequal',\n '>=': 'greaterthanorequal', 'in': 'in', 'not in': 'notin', 'between': 'between', 'not between': 'notbetween',\n 'is empty': 'isempty', 'is null': 'isnull', 'is not null': 'isnotnull', 'is not empty': 'isnotempty'\n };\n if (sqlLocale) {\n var localeOperator = Object.keys(this.sqlOperators);\n for (var i = 0; i < localeOperator.length; i++) {\n if (this.sqlOperators[localeOperator[i]] === operator.toUpperCase()) {\n if (value && value.indexOf('%') === 0 && value[value.length - 1] === '%') {\n return (operator.toUpperCase() === 'NOT LIKE') ? 'notcontains' : 'contains';\n }\n else if (value && value.indexOf('%') !== 0 && value.indexOf('%') === value.length - 1) {\n return (operator.toUpperCase() === 'NOT LIKE') ? 'notstartswith' : 'startswith';\n }\n else if (value && value.indexOf('%') === 0 && value.indexOf('%') !== value.length - 1) {\n return (operator.toUpperCase() === 'NOT LIKE') ? 'notendswith' : 'endswith';\n }\n return localeOperator[i];\n }\n }\n return null;\n }\n if (value) {\n if (value.indexOf('%') === 0 && value[value.length - 1] === '%') {\n return (operator === 'not like') ? 'notcontains' : 'contains';\n }\n else if (value.indexOf('%') !== 0 && value.indexOf('%') === value.length - 1) {\n return (operator === 'not like') ? 'notstartswith' : 'startswith';\n }\n else if (value.indexOf('%') === 0 && value.indexOf('%') !== value.length - 1) {\n return (operator === 'not like') ? 'notendswith' : 'endswith';\n }\n }\n else {\n if (operator === 'not like') {\n return 'notequal';\n }\n else if (operator === 'like') {\n return 'equal';\n }\n }\n return operators[\"\" + operator];\n };\n QueryBuilder.prototype.getTypeFromColumn = function (rules) {\n var columnData = this.getColumn(rules.field);\n if (!isNullOrUndefined(columnData)) {\n return columnData.type;\n }\n return null;\n };\n QueryBuilder.prototype.getLabelFromColumn = function (field) {\n var label = '';\n var l = 0;\n if (this.separator !== '') {\n var fieldColl = field.split(this.separator);\n for (var i = 0; i < fieldColl.length; i++) {\n label += this.getLabelFromField(fieldColl, i + 1);\n l++;\n if (l < fieldColl.length) {\n label += this.separator;\n }\n }\n return label;\n }\n else {\n var labelItem = this.getColumn(field).label;\n return labelItem;\n }\n };\n QueryBuilder.prototype.getLabelFromField = function (field, startIdx) {\n var fieldName = '';\n var j = 0;\n for (var k = 0; k < startIdx; k++) {\n fieldName += field[k];\n j++;\n if (j < startIdx) {\n fieldName += this.separator;\n }\n }\n return this.getColumn(fieldName).label;\n };\n QueryBuilder.prototype.processParser = function (parser, rules, levelColl, sqlLocale) {\n var j;\n var jLen;\n var rule;\n var subRules;\n var numVal = [];\n var strVal = [];\n var k;\n var kLen;\n var l;\n var lLen;\n var grpCount;\n var operator;\n var isLeftOpened = false;\n for (var i = 0, iLen = parser.length; i < iLen; i++) {\n if (parser[i][0] === 'Literal') {\n var column = this.getColumn(parser[i][1]);\n rule = { label: (column && column.label) ? column.label : parser[i][1], field: parser[i][1] };\n if (parser[i + 1][0] === 'SubOperators') {\n if (parser[i + 1][1].indexOf('null') > -1 || parser[i + 1][1].indexOf('empty') > -1) {\n rule.operator = this.getOperator(' ', parser[i + 1][1], sqlLocale);\n rule.value = null;\n rule.type = this.getTypeFromColumn(rule);\n }\n else {\n var oper = parser[i + 3][1] ? parser[i + 3][1].replace(/'/g, '') : parser[i + 3][1];\n rule.operator = this.getOperator(oper, parser[i + 1][1], sqlLocale);\n }\n operator = parser[i + 1][1];\n i++;\n j = i + 1;\n jLen = iLen;\n if (sqlLocale && rule.operator === 'contains' || rule.operator === 'startswith' || rule.operator === 'endswith') {\n operator = 'like';\n }\n else if (sqlLocale && rule.operator === 'notcontains' || rule.operator === 'notstartswith' || rule.operator === 'notendswith') {\n operator = 'not like';\n }\n else if (sqlLocale) {\n operator = rule.operator;\n }\n for (j = i + 1; j < jLen; j++) {\n if (operator.indexOf('between') < 0 && parser[j][0] === 'Left') {\n isLeftOpened = true;\n }\n else if (parser[j][0] === 'Right' && isLeftOpened) {\n i = j;\n isLeftOpened = false;\n break;\n }\n else {\n if (operator.indexOf('null') > -1 || operator.indexOf('empty') > -1) {\n break;\n }\n if (operator.indexOf('like') > -1 && parser[j][0] === 'String') {\n var val = parser[j][1];\n if (parser[j][1] && parser[j][1][0] === '\\'') {\n val = parser[j][1].substring(1, parser[j][1].length - 1);\n }\n val = val ? val.replace(/%/g, '') : parser[j][1];\n rule.value = val;\n rule.type = 'string';\n }\n else if (operator.indexOf('between') > -1) {\n if (parser[j][0] === 'Literal' || parser[j][0] === 'Left') {\n break;\n }\n if (parser[j][0] === 'Number') {\n numVal.push(Number(parser[j][1]));\n }\n else if (parser[j][0] === 'String') {\n var val = parser[j][1];\n if (parser[j][1] && parser[j][1][0] === '\\'') {\n val = parser[j][1].substring(1, parser[j][1].length - 1);\n }\n strVal.push(val);\n }\n }\n else {\n if (parser[j][0] === 'Number') {\n numVal.push(Number(parser[j][1]));\n }\n else if (parser[j][0] === 'String') {\n var val = parser[j][1];\n if (parser[j][1] && parser[j][1][0] === '\\'') {\n val = parser[j][1].substring(1, parser[j][1].length - 1);\n }\n strVal.push(val);\n }\n }\n rule.type = this.getTypeFromColumn(rule);\n }\n }\n if (operator.indexOf('like') < 0) {\n if (parser[j - 1][0] === 'Number') {\n rule.value = numVal;\n rule.type = 'number';\n }\n else if (parser[j - 1][0] === 'String') {\n rule.value = strVal;\n rule.type = 'string';\n }\n else if (operator.indexOf('between') > -1 && parser[j - 1][0] === 'Conditions') {\n if (strVal.length !== 0) {\n rule.value = strVal;\n rule.type = 'string';\n }\n else {\n rule.value = numVal;\n rule.type = 'number';\n }\n }\n numVal = [];\n strVal = [];\n rule.type = this.getTypeFromColumn(rule);\n }\n if (this.enableSeparateConnector && parser[i + 1][0] === 'Conditions') {\n rule.condition = parser[i + 1][1];\n }\n }\n else if (parser[i + 1][0] === 'Operators') {\n rule.operator = this.getOperator(parser[i + 2][1], parser[i + 1][1], sqlLocale);\n if (rule.operator === 'equal' && parser[i + 2][0] === 'String' && parser[i + 2][1] === '\\'\\'') {\n rule.operator = 'isempty';\n }\n else if (rule.operator === 'notequal' && parser[i + 2][0] === 'String' && parser[i + 2][1] === '\\'\\'') {\n rule.operator = 'isnotempty';\n }\n if (parser[i + 2][0] === 'Number') {\n rule.type = 'number';\n rule.value = Number(parser[i + 2][1]);\n }\n else {\n rule.type = 'string';\n var val = parser[i + 2][1];\n if (val && val[0] === '\\'') {\n val = val.substring(1, val.length - 1);\n }\n rule.value = val;\n }\n if (this.enableSeparateConnector && parser[i + 3][0] === 'Conditions') {\n rule.condition = parser[i + 3][1];\n }\n rule.type = this.getTypeFromColumn(rule);\n }\n rules.rules.push(rule);\n }\n else if (parser[i][0] === 'Left') {\n if (!(parser[0][0] === 'Left') && (parser[i - 1][1] === 'not' || sqlLocale && this.l10n.getConstant('NOT').toLowerCase() === parser[i - 1][1])) {\n 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 this.parser = parser.splice(i + 1, iLen - (i + 1));\n levelColl.pop(); //To get the parent Group\n rules = this.rule;\n lLen = levelColl.length;\n for (l = 0; l < lLen; l++) {\n rules = this.findGroupByIdx(levelColl[l], rules, l === 0);\n }\n return this.processParser(this.parser, rules, levelColl, sqlLocale);\n }\n }\n return rules;\n };\n /**\n * Clone the Group\n *\n * @param {Element | string} target - 'target' to be passed to clone the group.\n * @returns {void}\n */\n QueryBuilder.prototype.groupClone = function (target) {\n var groupElem = target.closest('.e-rule-list').closest('.e-group-container');\n var targetGrpId;\n var groupId;\n if (typeof target === 'string') {\n groupId = this.element.id + '_' + target;\n target = document.getElementById(groupId);\n }\n else {\n targetGrpId = target.id.replace(this.element.id + '_', '');\n groupId = groupElem.id.replace(this.element.id + '_', '');\n }\n var group = this.getGroup(targetGrpId);\n this.groupIndex = Array.prototype.indexOf.call(target.closest('.e-rule-list').children, target.closest('.e-group-container'));\n this.addGroups([{ 'condition': group.condition, 'not': group.not, 'rules': group.rules }], groupId);\n this.groupIndex = -1;\n };\n QueryBuilder.prototype.ruleClone = function (target) {\n var ruleElem = closest(target, '.e-rule-container');\n var groupElem = target.closest('.e-rule-list').closest('.e-group-container');\n var getRule = this.getRule(target);\n var groupId = groupElem.id.replace(this.element.id + '_', '');\n var ruleElemColl = groupElem.querySelectorAll('.e-rule-container');\n for (var i = 0, iLen = ruleElemColl.length; i < iLen; i++) {\n if (ruleElem.id === ruleElemColl[i].id) {\n this.ruleIndex = i;\n }\n }\n if (this.enableSeparateConnector) {\n this.addRules([{ 'label': getRule.label, 'field': getRule.field, 'type': getRule.type, 'operator': getRule.operator,\n 'value': getRule.value, 'condition': getRule.condition }], groupId);\n }\n else {\n this.addRules([{ 'label': getRule.label, 'field': getRule.field, 'type': getRule.type, 'operator': getRule.operator,\n 'value': getRule.value }], groupId);\n }\n this.ruleIndex = -1;\n };\n QueryBuilder.prototype.ruleLock = function (target) {\n var ruleElem = closest(target, '.e-rule-container');\n var rule = this.getRule(ruleElem.id.replace(this.element.id + '_', ''));\n if (ruleElem.classList.contains('e-disable')) {\n rule.isLocked = false;\n this.lockItems = this.lockItems.filter(function (lockItem) { return lockItem !== ruleElem.id; });\n ruleElem.classList.remove('e-disable');\n this.disableRuleControls(target, ruleElem, false);\n target.children[0].classList.add('e-unlock');\n target.children[0].classList.remove('e-lock');\n target.setAttribute('title', this.l10n.getConstant('LockRule'));\n }\n else {\n rule.isLocked = true;\n if (this.lockItems.indexOf(ruleElem.id) < 0) {\n this.lockItems.splice(this.lockItems.length - 1, 0, ruleElem.id);\n }\n ruleElem.classList.add('e-disable');\n this.disableRuleControls(target, ruleElem, true);\n target.children[0].classList.add('e-lock');\n target.children[0].classList.remove('e-unlock');\n target.setAttribute('title', this.l10n.getConstant('UnlockRule'));\n }\n };\n QueryBuilder.prototype.groupLock = function (target) {\n var groupElem = closest(target, '.e-group-container');\n var group = this.getGroup(groupElem.id.replace(this.element.id + '_', ''));\n var isRoot = groupElem.id.indexOf('group0') > -1;\n if (groupElem.classList.contains('e-disable')) {\n if (isRoot) {\n var newGroup = {};\n newGroup.condition = group.condition;\n newGroup.not = group.not;\n newGroup.isLocked = false;\n this.setProperties({ rule: newGroup }, true);\n }\n else {\n group.isLocked = false;\n }\n this.lockItems = this.lockItems.filter(function (lockItem) { return lockItem !== groupElem.id; });\n groupElem.classList.remove('e-disable');\n this.disableHeaderControls(target, groupElem, false);\n target.children[0].classList.add('e-unlock');\n target.children[0].classList.remove('e-lock');\n target.setAttribute('title', this.l10n.getConstant('LockGroup'));\n this.updateLockItems();\n }\n else {\n if (isRoot) {\n var newGroup = {};\n newGroup.condition = group.condition;\n newGroup.not = group.not;\n newGroup.isLocked = true;\n this.setProperties({ rule: newGroup }, true);\n }\n else {\n group.isLocked = true;\n }\n if (this.lockItems.indexOf(groupElem.id) < 0) {\n this.lockItems.splice(this.lockItems.length - 1, 0, groupElem.id);\n }\n groupElem.classList.add('e-disable');\n this.disableHeaderControls(target, groupElem, true);\n target.children[0].classList.add('e-lock');\n target.children[0].classList.remove('e-unlock');\n target.setAttribute('title', this.l10n.getConstant('UnlockGroup'));\n }\n };\n QueryBuilder.prototype.updateLockItems = function () {\n for (var i = 0; i < this.lockItems.length; i++) {\n var idColl = this.lockItems[i].split('_');\n if (idColl.length > 2) {\n var ruleElem = this.element.querySelector('#' + this.lockItems[i]);\n var target = ruleElem.querySelector('.e-lock-rule-btn');\n ruleElem = closest(target, '.e-rule-container');\n if (!ruleElem.classList.contains('e-disable')) {\n this.ruleLock(target);\n }\n }\n else {\n var groupElem = this.element.querySelector('#' + this.lockItems[i]);\n var target = groupElem.querySelector('.e-lock-grp-btn');\n groupElem = closest(target, '.e-group-container');\n if (!groupElem.classList.contains('e-disable')) {\n this.groupLock(target);\n }\n }\n }\n };\n QueryBuilder.prototype.disableHeaderControls = function (target, groupElem, isDisabled) {\n var andElem = groupElem.querySelectorAll('.e-btngroup-and');\n var orElem = groupElem.querySelectorAll('.e-btngroup-or');\n var notElem = groupElem.querySelectorAll('.e-qb-toggle');\n var addElem = groupElem.querySelectorAll('.e-add-btn');\n var deleteGrpElem = groupElem.querySelectorAll('.e-deletegroup');\n var lockElem = groupElem.querySelectorAll('.e-lock-grp-btn');\n var cloneElem = groupElem.querySelectorAll('.e-clone-grp-btn');\n var groupContElem = groupElem.querySelectorAll('.e-group-container');\n var addCondition = groupElem.querySelectorAll('.e-add-condition-btn');\n var addGroup = groupElem.querySelectorAll('.e-add-group-btn');\n for (var i = 0; i < andElem.length; i++) {\n if (isDisabled) {\n if (groupContElem[i] && groupContElem[i].classList.contains('e-disable')) {\n groupContElem[i].classList.add('e-disable');\n }\n andElem[i].disabled = true;\n orElem[i].disabled = true;\n if (addElem[i]) {\n addElem[i].disabled = true;\n }\n if (addCondition[i]) {\n addCondition[i].disabled = true;\n }\n if (addGroup[i]) {\n addGroup[i].disabled = true;\n }\n if (notElem[i]) {\n notElem[i].disabled = true;\n }\n if (deleteGrpElem[i]) {\n deleteGrpElem[i].disabled = true;\n }\n if (cloneElem[i]) {\n cloneElem[i].disabled = true;\n }\n andElem[i].parentElement.classList.add('e-disabled');\n if (lockElem[i] && lockElem[i] !== target) {\n lockElem[i].disabled = true;\n lockElem[i].children[0].classList.remove('e-unlock');\n lockElem[i].children[0].classList.add('e-lock');\n }\n }\n else {\n if (groupContElem[i]) {\n groupContElem[i].classList.remove('e-disable');\n }\n andElem[i].disabled = false;\n orElem[i].disabled = false;\n if (addElem[i]) {\n addElem[i].disabled = false;\n }\n if (addCondition[i]) {\n addCondition[i].disabled = false;\n }\n if (addGroup[i]) {\n addGroup[i].disabled = false;\n }\n if (lockElem[i]) {\n lockElem[i].disabled = false;\n }\n if (notElem[i]) {\n notElem[i].disabled = false;\n }\n if (deleteGrpElem[i]) {\n deleteGrpElem[i].disabled = false;\n }\n if (cloneElem[i]) {\n cloneElem[i].disabled = false;\n }\n andElem[i].parentElement.classList.remove('e-disabled');\n if (lockElem[i]) {\n lockElem[i].children[0].classList.remove('e-lock');\n }\n if (lockElem[i]) {\n lockElem[i].children[0].classList.add('e-unlock');\n }\n }\n }\n this.disableRuleControls(target, groupElem, isDisabled);\n };\n QueryBuilder.prototype.disableRuleControls = function (target, groupElem, isDisabled) {\n var ddlElement = groupElem.querySelectorAll('.e-control.e-dropdownlist');\n var numericElement = groupElem.querySelectorAll('.e-control.e-numerictextbox');\n var textElement = groupElem.querySelectorAll('.e-control.e-textbox');\n var dateElement = groupElem.querySelectorAll('.e-control.e-datepicker');\n var checkboxElement = groupElem.querySelectorAll('.e-control.e-checkbox');\n var radioBtnElement = groupElem.querySelectorAll('.e-control.e-radio');\n var multiSelectElement = groupElem.querySelectorAll('.e-control.e-multiselect');\n var deleteElem = groupElem.querySelectorAll('.e-rule-delete');\n var lockElem = groupElem.querySelectorAll('.e-lock-rule');\n var cloneElem = groupElem.querySelectorAll('.e-clone-rule');\n var ruleElem = groupElem.querySelectorAll('.e-rule-container');\n for (var i = 0; i < deleteElem.length; i++) {\n if (isDisabled) {\n if (ruleElem[i] && ruleElem[i].classList.contains('e-disable')) {\n ruleElem[i].classList.add('e-disable');\n }\n deleteElem[i].disabled = true;\n if (cloneElem[i]) {\n cloneElem[i].disabled = true;\n }\n if (lockElem[i] !== target) {\n lockElem[i].disabled = true;\n lockElem[i].children[0].classList.remove('e-unlock');\n lockElem[i].children[0].classList.add('e-lock');\n }\n }\n else {\n if (ruleElem[i]) {\n ruleElem[i].classList.remove('e-disable');\n }\n if (cloneElem[i]) {\n cloneElem[i].disabled = false;\n }\n deleteElem[i].disabled = false;\n lockElem[i].disabled = false;\n lockElem[i].children[0].classList.remove('e-lock');\n lockElem[i].children[0].classList.add('e-unlock');\n }\n }\n var dropDownObj;\n var numericObj;\n var textObj;\n var dateObj;\n var checkBoxObj;\n var radioBtnObj;\n var multiSelectObj;\n for (var i = 0; i < ddlElement.length; i++) {\n dropDownObj = getComponent(ddlElement[i], 'dropdownlist');\n if (isDisabled) {\n dropDownObj.enabled = false;\n }\n else {\n dropDownObj.enabled = true;\n }\n }\n for (var i = 0; i < numericElement.length; i++) {\n numericObj = getComponent(numericElement[i], 'numerictextbox');\n if (isDisabled) {\n numericObj.enabled = false;\n }\n else {\n numericObj.enabled = true;\n }\n }\n for (var i = 0; i < textElement.length; i++) {\n textObj = getComponent(textElement[i], 'textbox');\n if (isDisabled) {\n textObj.enabled = false;\n }\n else {\n textObj.enabled = true;\n }\n }\n for (var i = 0; i < dateElement.length; i++) {\n dateObj = getComponent(dateElement[i], 'datepicker');\n if (isDisabled) {\n dateObj.enabled = false;\n }\n else {\n dateObj.enabled = true;\n }\n }\n for (var i = 0; i < checkboxElement.length; i++) {\n checkBoxObj = getComponent(checkboxElement[i], 'checkbox');\n if (isDisabled) {\n checkBoxObj.disabled = true;\n }\n else {\n checkBoxObj.disabled = false;\n }\n }\n for (var i = 0; i < radioBtnElement.length; i++) {\n radioBtnObj = getComponent(radioBtnElement[i], 'radio');\n if (isDisabled) {\n radioBtnObj.disabled = true;\n }\n else {\n radioBtnObj.disabled = false;\n }\n }\n for (var i = 0; i < multiSelectElement.length; i++) {\n multiSelectObj = getComponent(multiSelectElement[i], 'multiselect');\n if (isDisabled) {\n multiSelectObj.enabled = false;\n }\n else {\n multiSelectObj.enabled = true;\n }\n }\n };\n __decorate([\n Event()\n ], QueryBuilder.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], QueryBuilder.prototype, \"actionBegin\", void 0);\n __decorate([\n Event()\n ], QueryBuilder.prototype, \"beforeChange\", void 0);\n __decorate([\n Event()\n ], QueryBuilder.prototype, \"change\", void 0);\n __decorate([\n Event()\n ], QueryBuilder.prototype, \"dataBound\", void 0);\n __decorate([\n Event()\n ], QueryBuilder.prototype, \"ruleChange\", void 0);\n __decorate([\n Event()\n ], QueryBuilder.prototype, \"dragStart\", void 0);\n __decorate([\n Event()\n ], QueryBuilder.prototype, \"drag\", void 0);\n __decorate([\n Event()\n ], QueryBuilder.prototype, \"drop\", void 0);\n __decorate([\n Complex({}, ShowButtons)\n ], QueryBuilder.prototype, \"showButtons\", void 0);\n __decorate([\n Property(false)\n ], QueryBuilder.prototype, \"summaryView\", void 0);\n __decorate([\n Property(false)\n ], QueryBuilder.prototype, \"allowValidation\", void 0);\n __decorate([\n Property('Default')\n ], QueryBuilder.prototype, \"fieldMode\", void 0);\n __decorate([\n Property([])\n ], QueryBuilder.prototype, \"columns\", void 0);\n __decorate([\n Property(null)\n ], QueryBuilder.prototype, \"fieldModel\", void 0);\n __decorate([\n Property(null)\n ], QueryBuilder.prototype, \"operatorModel\", void 0);\n __decorate([\n Property(null)\n ], QueryBuilder.prototype, \"valueModel\", void 0);\n __decorate([\n Property()\n ], QueryBuilder.prototype, \"headerTemplate\", void 0);\n __decorate([\n Property('')\n ], QueryBuilder.prototype, \"cssClass\", void 0);\n __decorate([\n Property([])\n ], QueryBuilder.prototype, \"dataSource\", void 0);\n __decorate([\n Property('Horizontal')\n ], QueryBuilder.prototype, \"displayMode\", void 0);\n __decorate([\n Property(false)\n ], QueryBuilder.prototype, \"enablePersistence\", void 0);\n __decorate([\n Property('Default')\n ], QueryBuilder.prototype, \"sortDirection\", void 0);\n __decorate([\n Property(5)\n ], QueryBuilder.prototype, \"maxGroupCount\", void 0);\n __decorate([\n Property('auto')\n ], QueryBuilder.prototype, \"height\", void 0);\n __decorate([\n Property('auto')\n ], QueryBuilder.prototype, \"width\", void 0);\n __decorate([\n Property(false)\n ], QueryBuilder.prototype, \"matchCase\", void 0);\n __decorate([\n Property(0)\n ], QueryBuilder.prototype, \"immediateModeDelay\", void 0);\n __decorate([\n Property(false)\n ], QueryBuilder.prototype, \"enableNotCondition\", void 0);\n __decorate([\n Property(false)\n ], QueryBuilder.prototype, \"readonly\", void 0);\n __decorate([\n Property(true)\n ], QueryBuilder.prototype, \"addRuleToNewGroups\", void 0);\n __decorate([\n Property(false)\n ], QueryBuilder.prototype, \"autoSelectField\", void 0);\n __decorate([\n Property(true)\n ], QueryBuilder.prototype, \"autoSelectOperator\", void 0);\n __decorate([\n Property('')\n ], QueryBuilder.prototype, \"separator\", void 0);\n __decorate([\n Property(false)\n ], QueryBuilder.prototype, \"enableSeparateConnector\", void 0);\n __decorate([\n Complex({ condition: 'and', rules: [] }, Rule)\n ], QueryBuilder.prototype, \"rule\", void 0);\n __decorate([\n Property(false)\n ], QueryBuilder.prototype, \"allowDragAndDrop\", void 0);\n QueryBuilder = __decorate([\n NotifyPropertyChanges\n ], QueryBuilder);\n return QueryBuilder;\n}(Component));\nexport { QueryBuilder };\nvar LevelColl = /** @class */ (function () {\n function LevelColl() {\n }\n return LevelColl;\n}());\n","import { extend, isNullOrUndefined } from '@syncfusion/ej2-base';\nvar QueryLibrary = /** @class */ (function () {\n function QueryLibrary(parent) {\n this.parent = parent;\n this.addEventListener();\n }\n QueryLibrary.prototype.destroy = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.removeEventListener();\n };\n QueryLibrary.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on('query-library', this.queryLibrary, this);\n this.parent.on('destroyed', this.destroy, this);\n };\n QueryLibrary.prototype.removeEventListener = function () {\n this.parent.off('query-library', this.queryLibrary);\n this.parent.off('destroyed', this.destroy);\n };\n QueryLibrary.prototype.queryLibrary = function (args) {\n switch (args.prop) {\n case 'getMongoFromRules':\n args.value['obj']['mongoQuery'] = this.getMongoFromRules(args.value['rule'], args.value['mongoQuery']);\n break;\n case 'mongoParser':\n this.mongoParser(args.value['mongoQuery'], args.value['rule'], args.value['mongoLocale']);\n break;\n case 'getParameterSql':\n args.value['obj']['sql'] = this.getParameterSql(args.value['rule']);\n break;\n case 'getNamedParameterSql':\n args.value['obj']['sql'] = this.getNamedParameterSql(args.value['rule']);\n break;\n case 'convertParamSqlToSql':\n args.value['obj']['sql'] = this.convertParamSqlToSql(args.value['sql']);\n break;\n case 'convertNamedParamSqlToSql':\n args.value['obj']['sql'] = this.convertNamedParamSqlToSql(args.value['sql']);\n break;\n }\n };\n QueryLibrary.prototype.getMongoFromRules = function (rule, mongoQuery) {\n mongoQuery = '{';\n if (rule.condition === 'or') {\n mongoQuery += '\"$or\":[';\n mongoQuery = this.convertMongoQuery(rule.rules, mongoQuery) + ']';\n }\n else {\n mongoQuery += '\"$and\":[';\n mongoQuery = this.convertMongoQuery(rule.rules, mongoQuery) + ']';\n }\n mongoQuery += '}';\n return mongoQuery;\n };\n QueryLibrary.prototype.getOperatorFromMongoOperator = function (operator) {\n var operatorValue;\n switch (operator) {\n case '$ne':\n operatorValue = 'notequal';\n break;\n case '$gt':\n operatorValue = 'greaterthan';\n break;\n case '$gte':\n operatorValue = 'greaterthanorequal';\n break;\n case '$lt':\n operatorValue = 'lessthan';\n break;\n case '$lte':\n operatorValue = 'lessthanorequal';\n break;\n case '$nin':\n operatorValue = 'notin';\n break;\n }\n return operatorValue;\n };\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n QueryLibrary.prototype.convertMongoQuery = function (rules, mongoQuery) {\n var _this = this;\n var i = 0;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n rules.forEach(function (item) {\n i++;\n mongoQuery += '{';\n if (item.rules !== undefined) {\n if (item.condition === 'or') {\n mongoQuery += ' \"$or\":[';\n mongoQuery = _this.convertMongoQuery(item.rules, mongoQuery) + ']';\n }\n else {\n mongoQuery += ' \"$and\":[';\n mongoQuery = _this.convertMongoQuery(item.rules, mongoQuery) + ']';\n }\n }\n var itVal = item.type === 'string' && item.operator !== 'in' && item.operator !== 'notin' && item.value && item.value.trim() !== '' ? item.value.replace(/'/g, '\\\\') : '';\n if (item.type === 'string' && (item.operator === 'in' || item.operator === 'notin') && item.value && item.value.length === 1) {\n itVal = item.value[0].replace(/'/g, '\\\\');\n }\n var field = item.field ? item.field.substring(0) : '';\n switch (item.operator) {\n case 'contains':\n mongoQuery += '\"' + field + '\":{\"$regex\":\"' + itVal + '\"}';\n break;\n case 'notcontains':\n mongoQuery += '\"' + field + '\":{\"$not\":{\"$regex\":\"' + item.value + '\"}}';\n break;\n case 'startswith':\n mongoQuery += '\"' + field + '\":{\"$regex\":\"^' + itVal + '\"}';\n break;\n case 'notstartswith':\n mongoQuery += '\"' + field + '\":{\"$not\":{\"$regex\":\"^' + item.value + '\"}}';\n break;\n case 'endswith':\n mongoQuery += '\"' + field + '\":{\"$regex\":\"' + itVal + '$\"}';\n break;\n case 'notendswith':\n mongoQuery += '\"' + field + '\":{\"$not\":{\"$regex\":\"' + item.value + '$\"}}';\n break;\n case 'isnull':\n mongoQuery += '\"' + field + '\": null';\n break;\n case 'isnotnull':\n mongoQuery += '\"' + field + '\":{\"$ne\": null}';\n break;\n case 'isempty':\n mongoQuery += '\"' + field + '\": \"\"';\n break;\n case 'isnotempty':\n mongoQuery += '\"' + field + '\":{\"$ne\": \"\"}';\n break;\n case 'equal':\n if (item.type === 'string') {\n mongoQuery += '\"' + field + '\":\"' + itVal + '\"';\n }\n else if (item.type === 'date') {\n mongoQuery += '\"' + field + '\":\"' + item.value + '\"';\n }\n else if (item.type === 'boolean') {\n mongoQuery += '\"' + field + '\":' + item.value + '';\n }\n else {\n mongoQuery += '\"' + field + '\":' + item.value + '';\n }\n break;\n case 'notequal':\n if (item.type === 'string') {\n mongoQuery += '\"' + field + '\":{\"$ne\":\"' + itVal + '\"}';\n }\n else if (item.type === 'date') {\n mongoQuery += '\"' + field + '\":{\"$ne\":\"' + item.value + '\"}';\n }\n else {\n mongoQuery += '\"' + field + '\":{\"$ne\":' + item.value + '}';\n }\n break;\n case 'in':\n if (item.type === 'string') {\n if (item.value.length > 1) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var s = item.value.map(function (x, j) { return (j < item.value.length ? \"\\\"\" + x + \"\\\"\" : ''); }).toString();\n s = s.endsWith(',') ? s.substring(0, s.length - 1) : s;\n mongoQuery += '\"' + field + '\": { \"$in\": [' + s + ']}';\n }\n else {\n mongoQuery += '\"' + field + '\": { \"$in\": [\"' + itVal + '\"]}';\n }\n }\n else if (item.type === 'number') {\n if (item.value.length > 1) {\n mongoQuery += '\"' + field + '\": { \"$in\": [' + item.value.toString() + ']}';\n }\n else {\n mongoQuery += '\"' + field + '\": { \"$in\": [' + item.value + ']}';\n }\n }\n break;\n case 'notin':\n if (item.type === 'string') {\n if (item.value.length > 1) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var s = item.value.map(function (x, j) { return (j < item.value.length ? \"\\\"\" + x + \"\\\"\" : ''); }).toString();\n s = s.endsWith(',') ? s.substring(0, s.length - 1) : s;\n mongoQuery += '\"' + field + '\": { \"$nin\": [' + s + ']}';\n }\n else {\n mongoQuery += '\"' + field + '\": { \"$nin\": [\"' + itVal + '\"]}';\n }\n }\n else if (item.type === 'number') {\n if (item.value.length > 1) {\n mongoQuery += '\"' + field + '\": { \"$nin\": [' + item.value.toString() + ']}';\n }\n else {\n mongoQuery += '\"' + field + '\": { \"$nin\": [' + item.value + ']}';\n }\n }\n break;\n case 'greaterthan':\n if (item.type === 'number') {\n mongoQuery += '\"' + field + '\": { \"$gt\": ' + item.value + '}';\n }\n else {\n mongoQuery += '\"' + field + '\": { \"$gt\": \"' + item.value + '\"}';\n }\n break;\n case 'greaterthanorequal':\n if (item.type === 'number') {\n mongoQuery += '\"' + field + '\": { \"$gte\": ' + item.value + '}';\n }\n else {\n mongoQuery += '\"' + field + '\": { \"$gte\": \"' + item.value + '\"}';\n }\n break;\n case 'between':\n if (item.type === 'number') {\n mongoQuery += '\"' + field + '\": {\"$gte\":' + item.value[0] + ', \"$lte\":' + item.value[1] + '}';\n }\n else {\n mongoQuery += '\"' + field + '\": {\"$gte\": \"' + item.value[0] + '\", \"$lte\": \"' + item.value[1] + '\"}';\n }\n break;\n case 'notbetween':\n if (item.type === 'number') {\n mongoQuery += '\"$or\":[{\"' + field + '\": {\"$lt\":' + item.value[0] + '}}, {\"' + field + '\": {\"$gt\":' + item.value[1] + '}}]';\n }\n else {\n mongoQuery += '\"$or\":[{\"' + field + '\": {\"$lt\": \"' + item.value[0] + '\"}}, {\"' + field + '\": {\"$gt\": \"' + item.value[1] + '\"}}]';\n }\n break;\n case 'lessthan':\n if (item.type === 'number') {\n mongoQuery += '\"' + field + '\": { \"$lt\": ' + item.value + '}';\n }\n else {\n mongoQuery += '\"' + field + '\": { \"$lt\": \"' + item.value + '\"}';\n }\n break;\n case 'lessthanorequal':\n if (item.type === 'number') {\n mongoQuery += '\"' + field + '\": { \"$lte\": ' + item.value + '}';\n }\n else {\n mongoQuery += '\"' + field + '\": { \"$lte\": \"' + item.value + '\"}';\n }\n break;\n }\n mongoQuery += '}';\n if (rules.length !== i) {\n mongoQuery += ',';\n }\n });\n return mongoQuery;\n };\n QueryLibrary.prototype.mongoParser = function (mongoQuery, rule, mongoLocale) {\n var mongoList;\n if (Object.keys(mongoQuery).indexOf('$and') > -1) {\n mongoList = mongoQuery['$and'];\n rule.condition = 'and';\n }\n else if (Object.keys(mongoQuery).indexOf('$or') > -1) {\n mongoList = mongoQuery['$or'];\n rule.condition = 'or';\n }\n rule.rules = [];\n this.mongoRecursion(mongoList, rule.rules, mongoLocale);\n };\n QueryLibrary.prototype.mongoRecursion = function (mongoList, rules, mongoLocale) {\n var operatorValue;\n var type;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var stringValue;\n var key;\n var betweenValue;\n var condition;\n var value;\n var subRules;\n var rule;\n var keyObj;\n var ruleValue;\n for (var i = 0, len = mongoList.length; i < len; i++) {\n var betweenOperatorArray = [];\n var inOperatorArray = [];\n condition = Object.keys(mongoList[i])[0];\n value = mongoList[i][condition];\n if (condition === '$and') {\n if (this.parent.enableNotCondition) {\n subRules = { condition: condition.replace('$', ''), rules: [], not: false };\n }\n else {\n subRules = { condition: condition.replace('$', ''), rules: [] };\n }\n rules.push(subRules);\n this.mongoRecursion(mongoList[i][condition], rules[rules.length - 1].rules, mongoLocale);\n }\n else if (condition === '$or') {\n var notBetween = void 0;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var innerObject = [];\n var keys = [];\n var firstKey = [];\n var secondKey = [];\n var innerKeys = [];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var firstValue = [];\n var secondValue = [];\n var innerFirstValue = [];\n var innerSecondValue = [];\n if (Array.isArray(value) && value.length === 2) {\n keys = Object.keys(value);\n innerFirstValue = value[keys[0]];\n innerSecondValue = value[keys[1]];\n if (typeof innerFirstValue === 'object') {\n innerObject = Object.keys(innerFirstValue)[0];\n innerKeys = Object.keys(innerFirstValue[Object.keys(innerFirstValue)[0]]);\n firstKey = innerKeys[0];\n secondKey = Object.keys(innerSecondValue[Object.keys(innerSecondValue)[0]])[0];\n if (firstKey === '$lt' && secondKey === '$gt') {\n operatorValue = 'notbetween';\n // eslint-disable-next-line security/detect-object-injection\n firstValue = innerFirstValue[innerObject][firstKey];\n // eslint-disable-next-line security/detect-object-injection\n secondValue = innerSecondValue[innerObject][secondKey];\n type = typeof firstValue === 'number' ? 'number' : 'date';\n ruleValue = [firstValue, secondValue];\n rule = { field: innerObject, label: innerObject, value: ruleValue, operator: operatorValue, type: type };\n rules.push(rule);\n notBetween = true;\n }\n }\n }\n if (!notBetween) {\n if (this.parent.enableNotCondition) {\n subRules = { condition: condition.replace('$', ''), rules: [], not: false };\n }\n else {\n subRules = { condition: condition.replace('$', ''), rules: [] };\n }\n rules.push(subRules);\n this.mongoRecursion(mongoList[i][condition], rules[rules.length - 1].rules, mongoLocale);\n }\n }\n else {\n value = mongoList[i][condition];\n if (value === null) { // isnull operator\n operatorValue = 'isnull';\n }\n if (typeof value === 'boolean') { // boolean type values\n operatorValue = 'equal';\n type = 'boolean';\n ruleValue = value;\n }\n if (typeof (value) === 'number') {\n ruleValue = value;\n type = 'number';\n operatorValue = 'equal';\n }\n else if (typeof (value) === 'object' && value !== null) {\n keyObj = Object.keys(value);\n for (var i_1 = 0; i_1 < keyObj.length; i_1++) {\n key = keyObj[i_1];\n stringValue = (value)[keyObj[i_1]];\n if (key === '$ne' && isNullOrUndefined(stringValue)) { // not null operator\n operatorValue = 'isnotnull';\n ruleValue = null;\n }\n if (key === '$ne' && typeof stringValue === 'boolean') { // not equal operator for boolean\n operatorValue = 'notequal';\n ruleValue = stringValue;\n type = 'boolean';\n }\n if (keyObj.length >= 2 && keyObj[i_1]) {\n if (typeof (stringValue) == 'object') { // between and notbetween operators\n operatorValue = 'notbetween';\n condition = Object.keys(stringValue)[0];\n betweenValue = [Object.keys(stringValue[condition])[0]];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n betweenOperatorArray.push(stringValue[condition][betweenValue]);\n type = 'number';\n }\n else {\n operatorValue = 'between';\n betweenOperatorArray.push(stringValue);\n }\n if (typeof (stringValue) === 'number') {\n type = 'number';\n }\n }\n else if (typeof (stringValue) === 'object' && stringValue !== null) { // \"in\" and \"notin\" operator\n if (key === '$not' && Object.keys(stringValue)[0] === '$regex') {\n if (stringValue['$regex'].indexOf('^') > -1) {\n operatorValue = 'notstartswith';\n ruleValue = stringValue['$regex'].replace('^', '');\n }\n else if (stringValue['$regex'].indexOf('$') > -1) {\n operatorValue = 'notendswith';\n ruleValue = stringValue['$regex'].replace('$', '');\n }\n else {\n operatorValue = 'notcontains';\n ruleValue = stringValue['$regex'];\n }\n }\n else {\n operatorValue = key === '$in' ? 'in' : 'notin';\n inOperatorArray = stringValue;\n type = typeof (stringValue[0]) === 'number' ? 'number' : 'string';\n }\n }\n else if (typeof (stringValue) === 'number') { // number type values\n operatorValue = this.getOperatorFromMongoOperator(key);\n type = 'number';\n ruleValue = stringValue;\n }\n if (typeof (stringValue) === 'string') { // string type values\n if (key === '$regex') {\n operatorValue = 'contains';\n ruleValue = stringValue;\n type = 'string';\n }\n if (key === '$ne') { // not equal\n if (stringValue !== null && stringValue.length > 0 && isNaN(Date.parse(stringValue))) {\n operatorValue = 'notequal';\n ruleValue = stringValue;\n }\n else if (isNullOrUndefined(stringValue)) { // is not null operator\n operatorValue = 'isnotnull';\n ruleValue = stringValue;\n }\n else if (stringValue === '') { // is not empty operator\n operatorValue = 'isnotempty';\n ruleValue = stringValue;\n }\n type = 'string';\n }\n if (stringValue.indexOf('^') > -1) {\n operatorValue = 'startswith';\n ruleValue = stringValue.replace('^', '');\n type = 'string';\n }\n if (stringValue.indexOf('$') > -1 && key !== '$not') {\n operatorValue = 'endswith';\n ruleValue = stringValue.replace('$', '');\n type = 'string';\n }\n if (!isNaN(Date.parse(stringValue))) { // Date type operators\n operatorValue = operatorValue || this.getOperatorFromMongoOperator(key);\n type = 'date';\n ruleValue = stringValue;\n }\n }\n }\n }\n else if (value && typeof (value) === 'string' && !isNaN(Date.parse(value))) {\n operatorValue = 'equal';\n ruleValue = value;\n type = 'date';\n }\n else if (typeof (value) === 'string' && value !== '' && value !== 'true' && value !== 'false') {\n operatorValue = 'equal';\n ruleValue = value;\n type = 'string';\n }\n else if (typeof (value) === 'string' && value === '') {\n operatorValue = 'isempty';\n ruleValue = value;\n type = 'string';\n }\n if (betweenOperatorArray && betweenOperatorArray.length > 1) { // between opertor value\n rule = { field: condition, label: condition, value: betweenOperatorArray, operator: operatorValue, type: type };\n }\n else if (inOperatorArray && inOperatorArray.length > 1) { // in operator value\n rule = { field: condition, label: condition, value: inOperatorArray, operator: operatorValue, type: type };\n }\n else {\n rule = { field: condition, label: condition, value: ruleValue, operator: operatorValue, type: type };\n }\n rules.push(rule);\n operatorValue = '';\n }\n }\n };\n QueryLibrary.prototype.convertParamSqlToSql = function (sql) {\n var paramSql = sql.sql;\n var paramValues = sql.params;\n var parts = paramSql.split('?');\n var normalSql = parts[0];\n for (var i = 0; i < paramValues.length; i++) {\n normalSql += (typeof (paramValues[i]) === 'string' ? \"'\" + paramValues[i] + \"'\" + parts[i + 1] : paramValues[i] + parts[i + 1]);\n }\n if (normalSql.length >= 2 && normalSql[0] === '(' && normalSql[normalSql.length - 1] === ')') {\n normalSql = normalSql.slice(1, -1);\n }\n normalSql = normalSql.replace(/!= ''(?! =)/g, 'IS NOT EMPTY').replace(/= ''/g, 'IS EMPTY');\n return normalSql;\n };\n QueryLibrary.prototype.convertNamedParamSqlToSql = function (sql) {\n var namedParamSql = sql.sql;\n var params = sql.params;\n var normalSql = namedParamSql;\n Object.keys(params).forEach(function (paramName) {\n var paramValue = params[paramName];\n paramName = ':' + paramName;\n normalSql = normalSql.replace(paramName, typeof (paramValue) === 'string' ? \"'\" + paramValue + \"'\" : String(paramValue));\n });\n if (normalSql.length >= 2 && normalSql[0] === '(' && normalSql[normalSql.length - 1] === ')') {\n normalSql = normalSql.slice(1, -1);\n }\n normalSql = normalSql.replace(/!= ''(?! =)/g, 'IS NOT EMPTY').replace(/= ''/g, 'IS EMPTY');\n return normalSql;\n };\n QueryLibrary.prototype.getParameterSql = function (qbrule) {\n var qbRule = extend({}, qbrule, null, true);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var value = this.updateRuleValue(qbRule, false);\n return this.getParameterSQLVal(this.parent.getSqlFromRules(qbRule), value['ruleVal']);\n };\n QueryLibrary.prototype.getNamedParameterSql = function (qbrule) {\n var qbRule = extend({}, qbrule, null, true);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var value = this.updateRuleValue(qbRule, true);\n return this.getNamedParameterSQLVal(this.parent.getSqlFromRules(qbRule), value['namedRuleVal']);\n };\n QueryLibrary.prototype.getParameterSQLVal = function (content, ruleValue) {\n var replacedString = content.replace(/[%']/g, '');\n return { sql: '(' + replacedString + ')', params: ruleValue };\n };\n QueryLibrary.prototype.getNamedParameterSQLVal = function (content, ruleValue) {\n var replacedString = content.replace(/[%']/g, '');\n return { sql: '(' + replacedString + ')', params: ruleValue };\n };\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n QueryLibrary.prototype.updateRuleValue = function (rule, isNamedParameter) {\n var ruleVal = [];\n var namedRuleVal = {};\n var namedParameters = [];\n return this.updateValue(rule.rules, isNamedParameter, ruleVal, namedRuleVal, namedParameters);\n };\n QueryLibrary.prototype.updateValue = function (rules, isNamedParameter, ruleVal, \n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n namedRuleVal, namedParameters) {\n if (isNullOrUndefined(rules)) {\n return { ruleVal: ruleVal, namedRuleVal: namedRuleVal };\n }\n for (var i = 0; i < rules.length; i++) {\n if (rules[i].rules) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var value = this.updateValue(rules[i].rules, isNamedParameter, ruleVal, namedRuleVal, namedParameters);\n ruleVal = value['ruleVal'];\n namedRuleVal = value['namedRuleVal'];\n }\n else {\n var namedField = void 0;\n if (rules[i].value instanceof Array) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n for (var j = 0; j < (rules[i].value).length; j++) {\n if (isNamedParameter) {\n namedField = this.getNamedParameter(rules[i].field, namedParameters);\n }\n if (!isNullOrUndefined(rules[i].value[j])) {\n if (rules[i].type === 'string' || rules[i].type === 'date') {\n if (isNamedParameter) {\n namedRuleVal[namedField] = rules[i].value[j];\n }\n else {\n ruleVal.push(rules[i].value[j]);\n }\n }\n else {\n if (isNamedParameter) {\n namedRuleVal[namedField] = rules[i].value[j];\n }\n else {\n ruleVal.push(rules[i].value[j]);\n }\n }\n }\n if (isNamedParameter) {\n rules[i].value[j] = ':' + namedField;\n }\n else {\n rules[i].value[j] = '?';\n }\n }\n }\n else {\n if (isNamedParameter) {\n namedField = this.getNamedParameter(rules[i].field, namedParameters);\n }\n if (rules[i].operator.indexOf('null') < 1) {\n if (rules[i].type !== 'string' || (rules[i].type === 'string' && (rules[i].value !== '' || rules[i].value === 0))) {\n if (rules[i].type === 'string' || rules[i].type === 'date') {\n if (rules[i].operator.indexOf('empty') < 1) {\n var value = rules[i].value.toString();\n switch (rules[i].operator) {\n case 'startswith':\n case 'notstartswith':\n value = value + '%';\n break;\n case 'endswith':\n case 'notendswith':\n value = '%' + value;\n break;\n case 'contains':\n case 'notcontains':\n value = '%' + value + '%';\n break;\n }\n if (isNamedParameter) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n namedRuleVal[namedField] = value;\n }\n else {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ruleVal.push(value);\n }\n }\n else {\n if (isNamedParameter) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n namedRuleVal[namedField] = '';\n }\n else {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ruleVal.push('');\n }\n if (rules[i].operator === 'isempty') {\n rules[i].operator = 'equal';\n }\n else {\n rules[i].operator = 'notequal';\n }\n }\n }\n else {\n if (!isNullOrUndefined(rules[i].value)) {\n if (isNamedParameter) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n namedRuleVal[namedField] = rules[i].value;\n }\n else {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ruleVal.push(rules[i].value);\n }\n }\n }\n if (isNamedParameter) {\n rules[i].value = ':' + namedField;\n }\n else {\n rules[i].value = '?';\n }\n }\n }\n }\n }\n }\n return { ruleVal: ruleVal, namedRuleVal: namedRuleVal };\n };\n QueryLibrary.prototype.getNamedParameter = function (field, namedParameters) {\n var newField = null;\n if (namedParameters.length > 0) {\n for (var i = namedParameters.length - 1; i >= 0; i--) {\n var currField = namedParameters[i];\n if (currField.indexOf(field) > -1) {\n var idx = parseInt(currField.split('_')[1], 10) + 1;\n newField = field + '_' + idx;\n namedParameters.push(newField);\n break;\n }\n }\n }\n if (!newField) {\n newField = field + '_1';\n namedParameters.push(newField);\n }\n return newField;\n };\n QueryLibrary.prototype.getModuleName = function () {\n return 'query-library';\n };\n return QueryLibrary;\n}());\nexport { QueryLibrary };\n","import * as index from './index';\nindex.QueryBuilder.Inject(index.QueryLibrary);\nexport * from './index';\n"],"names":["__extends","extendStatics","d","b","Object","setPrototypeOf","__proto__","Array","p","hasOwnProperty","__","this","constructor","prototype","create","__assign","assign","t","s","i","n","arguments","length","call","apply","__decorate","decorators","target","key","desc","c","r","getOwnPropertyDescriptor","Reflect","decorate","defineProperty","Columns","_super","Property","isRequired","min","max","Number","MAX_VALUE","ChildProperty","Rule","Collection","Value","ShowButtons","QueryBuilder","options","element","_this","isReadonly","fields","text","value","updatedRule","not","condition","isLocked","isLocale","isRefreshed","isNotified","isAddSuccess","isNotValueChange","isFieldChange","isFieldClose","isDestroy","isGetNestedData","isCustomOprCols","groupCounter","lockItems","groupIndex","ruleIndex","isLastGroup","cloneGrpBtnClick","isMiddleGroup","cloneRuleBtnClick","dragStopHandler","e","isDragEventPrevent","targetGroup","closest","isNullOrUndefined","parentElement","classList","contains","enableSeparateConnector","previousElementSibling","prevRule","isPreventelem","helper","targetGrp","dropEventArgs","cancel","dropRuleID","id","dropGroupID","trigger","getValidRules","prvtEvtTgrDaD","tgrt","groupId_1","split","draggable","currentStateTarget","rule","getGroup","draggedRule","deleteGroup","getRule","deleteRule","groupRule","extend","properties","groupElem","querySelectorAll","forEach","ele","querySelector","ruleElems","ruleIds","dropInd","push","deleteRules","rules","splice","addGroups","addRules","children","groupId","groupId_2","previousRule","type","document","body","remove","borderLineElem","refresh","MultiSelect","Inject","CheckBoxSelection","getPersistData","addOnPersist","reset","isImportRules","bodyElem","inputElement","len","className","indexOf","getComponent","destroy","innerHTML","grpContainer","createElement","attrs","class","grpHeader","grpBody","appendChild","headerTemplate","isRoot","enableNotCondition","removeClass","levelColl","setProperties","disableRuleCondition","getWrapper","getModuleName","requiredModules","modules","member","args","GetRootColumnName","field","separator","initialize","dataColl","columnKeys","keys","cols","categories","groupBy","isDate","validateObj","columns","columnSort","updateCustomOperator","isNaN","Date","parse","getTime","validation","category","l10n","getConstant","operators","customOperators","updateSubFieldsFromColumns","label","updateSubFields","col","data","sampCol","result","compField","resData","column","from","this_1","j","sqlIdx","operator_1","operColl","values","map","join","valueIdx","focusEventHandler","event","clickEventHandler","groupID","tagName","animation","Animation","duration","delay","renderSummary","summaryElem","getElementById","txtareaElem","animate","name","style","display","textContent","getSqlFromRules","height","scrollHeight","actionButton","ruleClone","ruleLock","groupLock","groupClone","addGroupElement","mRules","setGroupRules","renderSummaryCollapse","forIdValue","getAttribute","targetValue","replace","group","ariaChecked","toggleElem","getElementsByClassName","addClass","toLowerCase","beforeSuccessCallBack","observedChangeArgs","beforeRules","getParentGroup","ruleID","filterRules","andElem","orElem","checked","selectBtn","showButtons","groupInsert","maxGroupCount","enableRtl","addRuleElement","appendRuleElem","parentId","action","ruleElem","elem","ruleListElem","select","setAttribute","ruleIdCounter","cloneRule","index","tempRuleIndex","insertBefore","ruleTemplate","requestType","ruleTemplateFn","templateParser","templateID","getOperators","operatorFields","isReact","isAngular","templateColl","nodeType","isVue3","append","cloneNode","lockGroup","lockRule","cloneGroup","ruleDelete","allowDragAndDrop","renderReactTemplates","isRuleTemplate","isInitialLoad","addRuleSuccessCallBack","trgt","act","pId","isRlTmp","dropDownList","getColumn","newRule","operator","selectedColumn","passedRule","args_1","displayMode","spanElement","add","previousRuleElem","ruleContainer","headerTemplateFn","prevRuleContainer","prevElem","prevRule_1","updateAddedRule","fieldMode","ddlField","ddlValue","autoSelectField","dataSource","placeholder","popupHeight","close","fieldClose","bind","change","changeField","open","popupOpen","cssClass","fieldModel","DropDownList","appendTo","ddlVal","getDataByValue","changeRule","itemData","dummyDropdownTreeDs","updateDropdowntreeDS","child","expanded","selectable","showClearButton","changeOnBlur","treeSettings","expandOn","dropdowntree","DropDownTree","getLabelFromColumn","lockRuleTarget","args_2","notCondition","undefined","prevElem_1","ruleContainer_1","args_3","setMultiConnector","parseInt","toString","isNewRuleAdded","enableSeparateCondition","custom","changeRuleTemplate","operVal","parentGroup","previousColumn","detach","clearQBTemplate","renderToolTip","tooltip","Tooltip","content","isSticky","position","afterClose","beforeOpen","tooltipCloseElement","validateFields","dropDownTreeObj","isValid","allowValidation","excludeOprs","fieldElem","indexElem","valArray","dropDownObj","tempElem","ruleElemCln","validateRule","separateCondition","valElem","jLen","refreshLevelColl","obj","groupElement","level","refreshLevel","childElem","ruleList","iLen","groupCount","slice","groupTemplate","isConnector","glueElem","inputElem","dragClsName","labelElem","grpActElem","groupBtn","groupHdrElem","grpBodyElem","rulesElem","spanDragElement","aria-lable","title","role","clsName","cloneClsName","lockClsName","filterElem","cloneRuleBtnElem","cloneLockBtnElem","delBtnElem","isGroup","isBtnClick","addGroupSuccess","eventTarget","dltGroupBtn","groupIdCounter","andInpElem","orInpElem","andLblElem","orLblElem","btnGroupId","groupDelete","Button","iconCss","rippleEffect","selector","childElems","grpLen","tempGroupIndex","idx","parentNode","addRuleToNewGroups","cloneBtnElem","lockBtnElem","lockSpanElement","notElem","CheckBox","btnGroup","childNodes","newAndElem","newOrElem","nextSibling","nextElementSibling","args_4","conditionBtn_1","btnObj","onclick","groupBtn_1","DropDownButton","items","grpId","chgrpId","childGroupID","addHeaderDiv","disabled","isInitialRule","template","groupHdr","getRuleCollection","headerFn","enableSeparateConnectorInitialRule","notifyChange","grpElement","ruleElement","format","getFormat","intl","formatDate","templateChange","updateRules","eventsArgs","grpElem","validateValue","prevOper","arrOper","grpEle","destroyControls","changeValue","isNumInput","currentTarget","dateElement","rbValue","getInstance","NumericTextBox","immediateModeDelay","window","clearInterval","timer","setInterval","filterValue","grID","rlID","changeValueSuccessCallBack","ddl","item","popupObj","getItemData","customArgs","isInteracted","previousItemData","prevItemData","previousItem","previousValue","ddtElem","ddt","oldValue","dataBind","destroySubFields","subFieldElem","ddlArgs","tempRule","ddlObj","changeFilter","flt","dl","rl","tmpRl","dArg","selectedField","fieldChangeSuccess","operatorElem","changeOperator","opr","selectedIndex","operatorChangeSuccess","changeRuleValues","tooltipElem","createSubFields","subFieldValue","subFilterCounter","ruleId","subField","currOper","prevValue","parentElem","operatorList","oprElem","childElementCount","fieldObj","renderValues","ddlIdx","autoSelectOperator","ddlOperator","operatorModel","isField","popup","divElement","templateDestroy","templateElement","elemId","temp","templateElements","getValue","elementId","elements","getValues","original","fieldColl","dataObj","fieldStr","createNestedObject","lastIndex","k","getDistinctValues","nest","isNested","this_2","renderMultiSelect","selectedValue","ds","isFetched","isValues","multiSelectValue","dataManager","query","Query","selectedRule","mode","width","closePopup","actionBegin","multiSelectOpen","valueModel","multiSelectModel","multiSelectObj","DataManager","bindMultiSelectData","getMultiSelectData","dummyData","deferred","Deferred","executeQuery","multiselectObj","hideSpinner","createSpinner","showSpinner","then","actual","catch","reject","spinnerElem","Browser","isDevice","processTemplate","container","tempElements","write","setDefaultValue","isArryValue","isNumber","renderStringValue","ruleValElem","selectedVal","columnData","isTemplate","isPublic","txtBox","input","textBoxModel","inputobj","TextBox","minWidth","renderNumberValue","selVal","txtInp","numericTxt","step","numericTextBoxModel","numeric","oninput","processValueString","numArr","strArr","kLen","parseDate","formatOpt","dParser","getDateParser","skeleton","renderControls","isRendered","length_1","processBoolValues","datepick","datePicker","place","formatObj","locale","getLocale","datePickerModel","DatePicker","orgValue","isCheck","radioBtn","radioButtonModel","radiobutton","RadioButton","getOperatorIndex","getPreviousItemData","isRender","filtElem","getElementsByTagName","filtObj","isTempRendered","setColumnTemplate","inputLen","renderTemplate","observedActionArgs","actionBeginSuccessCallBack","Element","columnTemplateFn","valElemColl","updateValues","selectedDate","radioBtnObj","controlName","isNotTrigger","valueContainer","elementCln","i_1","i_2","ruleValueUpdate","beforeRule","afterRule","JSON","stringify","oper","arrOperator","dupSelectedValue","parseFloat","isObject","formatOptions","findGroupByIdx","groupIdx","ruleColl","dupRuleColl","unWireEvents","portals","popupElement","groups","importRules","initWrapper","trim","summaryView","notGroupRtl","readonly","enableReadonly","buttons","button","contentElem","textElem","styles","editElem","divElem","collapseElem","sortDirection","executeLocal","sortByDesc","sortBy","onChangeNotGroup","checkNotGroup","orgRule","onPropertyChanged","newProp","oldProp","_i","properties_1","enablePersistence","setRules","Internationalization","preRender","getUniqueID","defaultLocale","StartsWith","DoesNotStartWith","EndsWith","DoesNotEndWith","Contains","DoesNotContain","NotLike","Like","Equal","NotEqual","LessThan","LessThanOrEqual","GreaterThan","GreaterThanOrEqual","Between","NotBetween","In","NotIn","Remove","SelectField","SelectOperator","DeleteRule","DeleteGroup","AddGroup","AddCondition","Edit","ValidationMessage","SummaryViewTitle","OtherFields","AND","OR","NOT","SelectValue","IsEmpty","IsNotEmpty","IsNull","IsNotNull","True","False","AddButton","CloneGroup","LockGroup","CloneRule","LockRule","UnlockRule","UnlockGroup","L10n","parser","stringOperator","dateOperator","booleanOperator","numberOperator","equal","notequal","greaterthan","greaterthanorequal","lessthan","in","notin","lessthanorequal","startswith","endswith","between","notbetween","isnull","isnotnull","isempty","isnotempty","notstartswith","notendswith","notcontains","sqlOperators","toUpperCase","render","stringOper","numberOper","concat","executeDataManager","take","initControl","renderComplete","initializeDrag","Draggable","dragTarget","distance","dragStart","dragStartHandler","drag","dragHandler","dragStop","isReplaceDragEle","isPreventSelect","abort","isDragScroll","cloneElement","visualElement","offsetWidth","removeAttribute","dragElement","dragEventArgs","dragRuleID","dragGroupID","nodeName","targetElem","rect","getBoundingClientRect","distanceToTop","mouseY","clientY","changedTouches","top","distanceToBottom","bottom","threshold","templateCompiler","compile","error","wireEvents","wrapper","EventHandler","keyBoardHandler","isParent","groupLevel","deleteGroupSuccessCallBack","nextElem","removeString","remRule","ruleElemColl","isTemplateRendered","isPlatformTemplate","deleteRuleSuccessCallBack","clnruleElem","previousElem","nextElem_1","err","i_3","lockGrpTarget","keyCode","code","dragElemnet","preventDefault","clearTemplate","isNewGroup","count","andGroup","orGroup","currentRule","getRules","ruleCondtion","isValidRule","customObj","isQuestion","lockedRule","notValue","HTMLElement","deleteGroups","groupIdColl","getFilteredRecords","predicate","getPredicate","dataManagerQuery","where","ruleIdColl","getDataManagerQuery","pred","pred2","ruleValue","ignoreCase","and","or","isDateFilter","dateOperColl","matchCase","getDate","isTime","datePredicate","arrayPredicate","Predicate","localeString","cldrData","setTime","date","isStart","setHours","startDate","endDate","nullValue","gte","currDate","setMinutes","setSeconds","isReset","renderGroup","tglBtnElem","renderRule","cloneElem","deleteGroupElems","addRuleGroupElems","removeRuleElems","elems","enableBtnGroup","isDateFunction","dateFunc","getSqlString","enableEscape","queryStr","sqlLocale","valueStr","ruleOpertor","ruleCondition","custOper","isCustom","setRulesFromSql","sqlString","ruleModel","getRulesFromSql","sqlParser","processParser","allowEscape","getParameterizedSql","moduleLoader","loadedModules","sql","notify","prop","onPropertyChange","console","warn","setParameterizedSql","sqlQuery","getParameterizedNamedSql","setParameterizedNamedSql","setMongoQuery","mongoQuery","mongoLocale","getMongoQuery","isCloneRule","parentGroupID","isCloneGroup","str","st","parseSqlStrings","conditions","subOp","regexStr","matchValue","test","regExp","RegExp","exec","lastPasrser","checkLiteral","checkNumberLiteral","singleString","getSingleQuoteString","isClosed","checkCondition","combineSingleQuoteString","doubleString","getDoubleQuoteString","start","end","substring","isBetween","tempMatchValue","tempStr","lastParser","secParser","betweenParser","betweenOperator","getOperator","=","!=","<",">","<=",">=","not in","not between","is empty","is null","is not null","is not empty","localeOperator","getTypeFromColumn","l","getLabelFromField","startIdx","fieldName","subRules","lLen","grpCount","numVal","strVal","isLeftOpened","val","pop","targetGrpId","filter","lockItem","disableRuleControls","newGroup","disableHeaderControls","updateLockItems","isDisabled","addElem","deleteGrpElem","lockElem","groupContElem","addCondition","addGroup","ddlElement","numericElement","textElement","checkboxElement","radioBtnElement","multiSelectElement","deleteElem","enabled","Event","Complex","NotifyPropertyChanges","Component","QueryLibrary","parent","addEventListener","isDestroyed","removeEventListener","on","queryLibrary","off","getMongoFromRules","mongoParser","getParameterSql","getNamedParameterSql","convertParamSqlToSql","convertNamedParamSqlToSql","convertMongoQuery","getOperatorFromMongoOperator","operatorValue","itVal","x","endsWith","mongoList","mongoRecursion","stringValue","betweenValue","keyObj","betweenOperatorArray","inOperatorArray","notBetween","innerObject","firstKey","secondKey","firstValue","innerFirstValue","innerSecondValue","isArray","paramSql","paramValues","params","parts","normalSql","namedParamSql","paramName","paramValue","String","qbrule","qbRule","updateRuleValue","getParameterSQLVal","getNamedParameterSQLVal","isNamedParameter","ruleVal","namedRuleVal","namedParameters","updateValue","namedField","getNamedParameter","newField","currField","index.QueryLibrary"],"mappings":"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"}