@syncfusion/ej2-querybuilder 26.2.5 → 26.2.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/ej2-querybuilder.min.js +2 -2
- package/dist/ej2-querybuilder.umd.min.js +2 -2
- package/dist/ej2-querybuilder.umd.min.js.map +1 -1
- package/dist/es6/ej2-querybuilder.es2015.js +21 -4
- package/dist/es6/ej2-querybuilder.es2015.js.map +1 -1
- package/dist/es6/ej2-querybuilder.es5.js +21 -4
- package/dist/es6/ej2-querybuilder.es5.js.map +1 -1
- package/dist/global/ej2-querybuilder.min.js +2 -2
- package/dist/global/ej2-querybuilder.min.js.map +1 -1
- package/dist/global/index.d.ts +1 -1
- package/hotfix/26.1.35_Vol2.txt +1 -0
- package/package.json +11 -11
- package/src/query-builder/query-builder-model.d.ts +1 -1
- package/src/query-builder/query-builder.d.ts +1 -0
- package/src/query-builder/query-builder.js +22 -4
- package/styles/fluent2.css +4 -1032
- package/styles/material3-dark.css +1 -54
- package/styles/material3.css +2 -109
- package/styles/query-builder/_theme.scss +1 -1
- package/styles/query-builder/fluent2.css +4 -1032
- package/styles/query-builder/material3-dark.css +1 -54
- package/styles/query-builder/material3.css +2 -109
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ej2-querybuilder.min.js","sources":["../../src/query-builder/query-builder.js","../../src/query-builder/query-library.js","../../src/global.js"],"sourcesContent":["var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n/**\n * Query Builder Source\n */\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', filtering: this.dropdownTreeFiltering.bind(this), close: this.dropdownTreeClose.bind(this)\n };\n if (this.fieldModel) {\n ddlField = __assign({}, ddlField, this.fieldModel);\n }\n var dropdowntree = new DropDownTree(ddlField);\n dropdowntree.appendTo('#' + ruleElem.id + '_filterkey');\n if (!isNullOrUndefined(dropdowntree.value)) {\n var value = this.getLabelFromColumn(dropdowntree.value[0]);\n dropdowntree.element.value = value;\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var ddlVal = !isNullOrUndefined(rule.field) ?\n this.GetRootColumnName(rule.field) : dropdowntree.value;\n this.selectedColumn = this.getColumn(ddlVal);\n if (Object.keys(rule).length) {\n this.changeRule(rule, {\n element: dropdowntree.element, itemData: this.selectedColumn\n });\n }\n }\n }\n ruleID = ruleElem.id.replace(this.element.id + '_', '');\n if (rule && rule.isLocked) {\n var lockRuleTarget = ruleElem.querySelector('.e-lock-rule-btn');\n this.ruleLock(lockRuleTarget);\n }\n if (!this.isImportRules && !this.prvtEvtTgrDaD) {\n this.trigger('change', { groupID: trgt.id.replace(this.element.id + '_', ''), ruleID: ruleID, type: 'insertRule' });\n }\n }\n if (this.enableSeparateConnector && isNullOrUndefined(rule.condition) && ruleID) {\n rule = this.getRule(ruleID);\n }\n if (this.enableSeparateConnector) {\n var prevElem = ruleElem.previousElementSibling;\n var ruleContainer = void 0;\n while (prevElem && !prevElem.classList.contains('e-rule-container')) {\n if (prevElem.classList.contains('e-group-container')) {\n ruleContainer = prevElem.querySelectorAll('.e-rule-container');\n prevElem = ruleContainer[ruleContainer.length - 1];\n break;\n }\n prevElem = prevElem.previousElementSibling;\n }\n if (this.headerTemplate && prevElem) {\n var prevRule = this.getRule(prevElem);\n var args_2 = { requestType: 'rule-template-create', ruleID: prevElem.id, condition: prevRule.condition,\n notCondition: this.enableNotCondition ? true : undefined };\n this.trigger('actionBegin', args_2);\n }\n else if (isNullOrUndefined(prevElem) && ruleElem.id !== this.element.id + '_group0_rule0') {\n var group = ruleElem.closest('.e-group-container');\n if (group && group.previousElementSibling && group.previousElementSibling.previousElementSibling) {\n var prevElem_1 = group.previousElementSibling.previousElementSibling;\n if (prevElem_1.classList.contains('e-group-container')) {\n var ruleContainer_1 = prevElem_1.querySelectorAll('.e-rule-container');\n prevElem_1 = ruleContainer_1[ruleContainer_1.length - 1];\n }\n if (prevElem_1.classList.contains('e-rule-container')) {\n var prevRule = this.getRule(prevElem_1);\n var args_3 = { requestType: 'rule-template-create', ruleID: prevElem_1.id,\n condition: prevRule.condition, notCondition: this.enableNotCondition ? true : undefined };\n this.trigger('actionBegin', args_3);\n }\n }\n }\n this.setMultiConnector(ruleElem);\n }\n };\n QueryBuilder.prototype.dropdownTreeFiltering = function (args) {\n var _this = this;\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var proxy = this;\n var ruleElemID = '';\n var srcElement = args.event.srcElement;\n var isClearIcon = srcElement.classList.contains('e-clear-icon');\n var inputElem = isClearIcon ? srcElement.parentElement.querySelector('.e-textbox') : srcElement;\n ruleElemID = inputElem.id.split('_filterkey')[0];\n var ruleElem = document.getElementById(ruleElemID);\n this.ddTree = getComponent(ruleElem.querySelector('input.e-dropdowntree'), 'dropdowntree');\n var hierarchicalData = extend([], this.columns, [], true);\n // Cancel the default filtering.\n args.cancel = true;\n if (args.text === '') {\n this.changeDataSource(hierarchicalData);\n }\n else {\n var matchedDataSource = hierarchicalData\n .map(function (data) { return _this.nestedChildFilter(args.text, data); })\n .filter(function (filteredChild) { return filteredChild !== null; });\n this.changeDataSource(matchedDataSource);\n setTimeout(function () {\n proxy.ddTree.treeObj.expandAll();\n }, 100);\n }\n };\n QueryBuilder.prototype.changeDataSource = function (data) {\n this.ddTree.treeObj.fields = {\n dataSource: data,\n value: 'field',\n text: 'label',\n child: 'columns',\n expanded: 'expanded'\n };\n this.ddTree.treeObj.refresh();\n };\n QueryBuilder.prototype.nestedChildFilter = function (value, node) {\n var _this = this;\n var children = node[this.ddTree.fields.child];\n if (!children) {\n return this.isMatchedNode(value, node) ? node : null;\n }\n var matchedChildren = children\n .map(function (child) { return _this.nestedChildFilter(value, child); })\n .filter(function (filteredChild) { return filteredChild !== null; });\n if (matchedChildren.length) {\n node[this.ddTree.fields.child] = matchedChildren;\n return node;\n }\n else {\n node[this.ddTree.fields.child] = children;\n return this.isMatchedNode(value, node) ? node : null;\n }\n };\n QueryBuilder.prototype.isMatchedNode = function (value, node) {\n var checkValue = node[this.ddTree.fields.text].toLowerCase();\n value = value ? value.toLowerCase() : '';\n return checkValue.indexOf(value) !== -1;\n };\n QueryBuilder.prototype.dropdownTreeClose = function () {\n if (this.ddTree) {\n this.changeDataSource(this.columns);\n }\n this.ddTree = null;\n };\n QueryBuilder.prototype.updateDropdowntreeDS = function (columns) {\n for (var i = 0; i < columns.length; i++) {\n if (columns[parseInt(i.toString(), 10)].type === 'object') {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.isAngular && columns[parseInt(i.toString(), 10)].template) {\n delete columns[parseInt(i.toString(), 10)].template;\n }\n columns[parseInt(i.toString(), 10)].selectable = false;\n this.updateDropdowntreeDS(columns[parseInt(i.toString(), 10)].columns);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n }\n else if (this.isAngular && columns[parseInt(i.toString(), 10)].template) {\n delete columns[parseInt(i.toString(), 10)].template;\n }\n }\n };\n QueryBuilder.prototype.updateAddedRule = function (target, rule, newRule, isRuleTemplate, pId, isNewRuleAdded) {\n var ruleElem;\n var index = 0;\n var groupElem;\n var rules;\n if (isRuleTemplate) {\n ruleElem = select('#' + pId, target);\n groupElem = closest(target, '.e-group-container');\n rules = this.getParentGroup(groupElem);\n while (ruleElem && ruleElem.previousElementSibling !== null) {\n ruleElem = ruleElem.previousElementSibling;\n var enableSeparateCondition = this.enableSeparateConnector && ((!this.headerTemplate && !ruleElem.classList.contains('e-btn-group')) ||\n (this.headerTemplate && (ruleElem.classList.contains('e-rule-container') ||\n ruleElem.classList.contains('e-group-container'))));\n if (!this.enableSeparateConnector || enableSeparateCondition) {\n index++;\n }\n }\n rules.rules[index] = rule;\n }\n else {\n groupElem = closest(target, '.e-group-container');\n rules = this.getParentGroup(groupElem);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var custom = rule.custom;\n if (Object.keys(rule).length) {\n if (this.ruleIndex < 0) {\n rules.rules.push({\n 'field': rule.field, 'type': rule.type, 'label': rule.label, 'operator': rule.operator, value: rule.value\n });\n if (custom) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n rules.rules[rules.rules.length - 1].custom = custom;\n }\n if (this.enableSeparateConnector) {\n rules.rules[rules.rules.length - 1].condition = rule.condition ? rule.condition : newRule.condition;\n }\n }\n else {\n rules.rules.splice(this.ruleIndex + 1, 0, {\n 'field': rule.field, 'type': rule.type, 'label': rule.label, 'operator': rule.operator, value: rule.value\n });\n if (custom) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n rules.rules[this.ruleIndex + 1].custom = custom;\n }\n if (this.enableSeparateConnector) {\n rules.rules[this.ruleIndex + 1].condition = rule.condition ? rule.condition : newRule.condition;\n }\n }\n }\n else {\n if (custom) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n newRule.custom = custom;\n }\n if (this.autoSelectField) {\n rule.field = newRule.field = this.rule.rules[0].field;\n }\n rules.rules.push(newRule);\n }\n }\n this.disableRuleCondition(target, rules, isNewRuleAdded);\n };\n QueryBuilder.prototype.changeRuleTemplate = function (column, element) {\n var operVal = this.selectedColumn.operators;\n if (column.ruleTemplate) {\n return;\n }\n else {\n var parentGroup = closest(element, '.e-group-container');\n var parentId = closest(element, '.e-rule-container').id;\n if (this.previousColumn && this.previousColumn.ruleTemplate) {\n detach(element.closest('[id=\"' + parentId + '\"]').querySelector('.e-rule-field'));\n this.clearQBTemplate([parentId]);\n }\n if (column) {\n var rule = { field: column.field, label: column.label, operator: operVal[0].value, value: '' };\n this.addRuleElement(parentGroup, rule, column, 'change', parentId, true);\n }\n }\n };\n QueryBuilder.prototype.renderToolTip = function (element) {\n var tooltip = new Tooltip({ content: this.l10n.getConstant('ValidationMessage'), isSticky: true,\n position: 'BottomCenter', cssClass: 'e-querybuilder-error', afterClose: function () {\n tooltip.destroy();\n }, beforeOpen: function (args) {\n var tooltipCloseElement = args.element.querySelector('.e-tooltip-close');\n if (tooltipCloseElement) {\n tooltipCloseElement.style.display = 'none';\n }\n } });\n tooltip.appendTo(element);\n tooltip.open(element);\n };\n /**\n * Validate the conditions and it display errors for invalid fields.\n *\n * @returns {boolean} - Validation\n */\n QueryBuilder.prototype.validateFields = function () {\n var isValid = true;\n var dropDownTreeObj;\n if (this.allowValidation) {\n var excludeOprs = ['isnull', 'isnotnull', 'isempty', 'isnotempty'];\n var i = void 0;\n var len = void 0;\n var fieldElem = void 0;\n var indexElem = void 0;\n var valArray = [];\n var groupElem = void 0;\n var index = void 0;\n var dropDownObj = void 0;\n var tempElem = void 0;\n var rule = void 0;\n var ruleElemCln = this.element.querySelectorAll('.e-rule-container');\n for (i = 0, len = ruleElemCln.length; i < len; i++) {\n var validateRule = void 0;\n groupElem = closest(ruleElemCln[i], '.e-group-container');\n rule = this.getParentGroup(groupElem);\n index = 0;\n indexElem = tempElem = ruleElemCln[i];\n if (this.fieldMode === 'DropdownTree') {\n dropDownTreeObj = getComponent(ruleElemCln[i].querySelector('.e-rule-filter input.e-dropdowntree'), 'dropdowntree');\n if (dropDownTreeObj && dropDownTreeObj.value && dropDownTreeObj.value.length) {\n this.selectedColumn = this.getColumn(dropDownTreeObj.value[0]);\n validateRule = this.selectedColumn.validation;\n }\n }\n else {\n dropDownObj = getComponent(ruleElemCln[i].querySelector('.e-rule-filter input.e-dropdownlist'), 'dropdownlist');\n if (dropDownObj && dropDownObj.value) {\n this.selectedColumn = dropDownObj.getDataByValue(dropDownObj.value);\n validateRule = !isNullOrUndefined(dropDownObj.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 === '' || rule.rules[index].value === null ||\n (rule.rules[index].value instanceof Array && valArray.length < 1)) {\n var valElem = tempElem.querySelectorAll('.e-rule-value .e-control');\n if (excludeOprs.indexOf(rule.rules[index].operator) < 0) {\n isValid = false;\n }\n for (var j = 0, jLen = valElem.length; j < jLen; j++) {\n var element = valElem[j];\n var elem = void 0;\n if (element.parentElement.className.indexOf('e-searcher') > -1) {\n elem = closest(element, '.e-multi-select-wrapper');\n if (elem.className.indexOf('e-tooltip') < 0) {\n this.renderToolTip(elem);\n }\n }\n else if (valElem[j].parentElement.className.indexOf('e-tooltip') < 0 && valElem[j].className.indexOf('e-tooltip') < 0) {\n this.renderToolTip(valElem[j].parentElement);\n }\n j++;\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n }\n else if (rule.rules[index].type === 'date' && (rule.rules[index].value === null || rule.rules[index].value.indexOf(null) > -1)) {\n var valElem = tempElem.querySelectorAll('.e-rule-value .e-control');\n if (excludeOprs.indexOf(rule.rules[index].operator) < 0) {\n isValid = false;\n }\n for (var j = 0, jLen = valElem.length; j < jLen; j++) {\n if (valElem[j].parentElement.className.indexOf('e-tooltip') < 0 && valElem[j].className.indexOf('e-tooltip') < 0 && (isNullOrUndefined(rule.rules[index].value) || rule.rules[index].value[j] == null)) {\n this.renderToolTip(valElem[j].parentElement);\n }\n }\n }\n }\n else if ((dropDownObj && dropDownObj.element && isNullOrUndefined(dropDownObj.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) {\n return;\n }\n if (element.className.indexOf('e-day') > -1 || element.className.indexOf('e-today') > -1 || element.className.indexOf('e-cell') > -1) {\n var calenderArgs = args;\n element = calenderArgs.element;\n }\n var groupElem = closest(element, '.e-group-container');\n var ruleElem = closest(element, '.e-rule-container');\n var groupID = groupElem && groupElem.id.replace(this.element.id + '_', '');\n var ruleID = ruleElem.id.replace(this.element.id + '_', '');\n var dateElement = args;\n var dropDownObj;\n if (dateElement.element && dateElement.element.className.indexOf('e-datepicker') > -1) {\n element = dateElement.element;\n dropDownObj = getComponent(closest(element, '.e-rule-container').querySelector('.e-filter-input'), 'dropdownlist');\n if (dropDownObj) {\n this.selectedColumn = dropDownObj.getDataByValue(dropDownObj.value);\n }\n dropDownObj = getComponent(closest(element, '.e-rule-container').querySelector('.e-filter-input'), 'dropdowntree');\n if (dropDownObj) {\n this.selectedColumn = this.getColumn(dropDownObj.value[0]);\n }\n }\n var value;\n var rbValue;\n if (element.className.indexOf('e-radio') > -1) {\n rbValue = parseInt(element.id.split('valuekey')[1], 10);\n if (this.fieldMode === 'Default') {\n dropDownObj = getComponent(closest(element, '.e-rule-container').querySelector('.e-filter-input'), 'dropdownlist');\n this.selectedColumn = dropDownObj.getDataByValue(dropDownObj.value);\n if (this.selectedColumn.columns) {\n dropDownObj = getComponent(closest(element, '.e-rule-container').querySelector('.e-rule-sub-filter .e-dropdownlist'), 'dropdownlist');\n this.selectedColumn = this.getColumn(dropDownObj.value);\n }\n }\n else {\n dropDownObj = getComponent(closest(element, '.e-rule-container').querySelector('.e-filter-input'), 'dropdowntree');\n this.selectedColumn = this.getColumn(dropDownObj.value[0]);\n }\n if (this.selectedColumn.values) {\n value = this.selectedColumn.values[rbValue];\n }\n else {\n var valColl = [true, false];\n value = valColl[rbValue];\n }\n }\n else if (element.className.indexOf('e-multiselect') > -1) {\n value = getComponent(element, 'multiselect').value;\n }\n else {\n value = args.value;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (args.type === 'input' && args.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 if (valElem[2] && valElem[2].parentElement.className.indexOf('e-tooltip') > -1) {\n getComponent(valElem[2].parentElement, 'tooltip').destroy();\n }\n }\n }\n };\n QueryBuilder.prototype.getFormat = function (format) {\n var formatOptions;\n if (format) {\n if (typeof (format) === 'string') {\n formatOptions = { type: 'dateTime' };\n if (format === 'short' || format === 'yMd') {\n formatOptions.type = 'date';\n formatOptions.skeleton = format;\n }\n else {\n formatOptions.format = format;\n }\n }\n else {\n formatOptions = { type: 'dateTime', skeleton: format.skeleton };\n }\n }\n else {\n formatOptions = { type: 'date', skeleton: 'yMd' };\n }\n return formatOptions;\n };\n QueryBuilder.prototype.findGroupByIdx = function (groupIdx, rule, isRoot) {\n var ruleColl = rule.rules;\n var dupRuleColl = [];\n if (!isRoot) {\n for (var j = 0, jLen = ruleColl.length; j < jLen; j++) {\n rule = ruleColl[j];\n if (rule.rules) {\n dupRuleColl.push(rule);\n }\n }\n return dupRuleColl[groupIdx];\n }\n return rule;\n };\n /**\n * Removes the component from the DOM and detaches all its related event handlers.\n * Also it maintains the initial input element from the DOM.\n *\n * @method destroy\n * @returns {void}\n */\n QueryBuilder.prototype.destroy = function () {\n this.isDestroy = true;\n var queryElement = this.element;\n if (!queryElement) {\n return;\n }\n var element;\n var i;\n var len;\n var tooltip;\n _super.prototype.destroy.call(this);\n element = this.element.querySelectorAll('.e-addrulegroup');\n len = element.length;\n for (i = 0; i < len; i++) {\n getComponent(element[i], 'dropdown-btn').destroy();\n detach(element[i]);\n }\n tooltip = this.element.querySelectorAll('.e-rule-filter .e-control.e-tooltip');\n for (i = 0; i < tooltip.length; i++) {\n getComponent(tooltip[i], 'tooltip').destroy();\n }\n element = this.element.querySelectorAll('.e-rule-filter .e-control:not(.e-tooltip)');\n len = element.length;\n for (i = 0; i < len; i++) {\n if (getComponent(element[i], 'dropdownlist')) {\n getComponent(element[i], 'dropdownlist').destroy();\n }\n else {\n getComponent(element[i], 'dropdowntree').destroy();\n }\n detach(element[i]);\n }\n tooltip = this.element.querySelectorAll('.e-rule-operator .e-control.e-tooltip');\n for (i = 0; i < tooltip.length; i++) {\n getComponent(tooltip[i], 'tooltip').destroy();\n }\n element = this.element.querySelectorAll('.e-rule-operator .e-control:not(.e-tooltip)');\n len = element.length;\n for (i = 0; i < len; i++) {\n if (getComponent(element[i], 'dropdownlist')) {\n getComponent(element[i], 'dropdownlist').destroy();\n detach(element[i]);\n }\n }\n tooltip = this.element.querySelectorAll('.e-rule-value .e-control.e-tooltip');\n for (i = 0; i < tooltip.length; i++) {\n getComponent(tooltip[i], 'tooltip').destroy();\n }\n this.isImportRules = false;\n this.unWireEvents();\n this.levelColl[this.element.id + '_group0'] = [0];\n this.element.innerHTML = '';\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.portals && this.portals.length) {\n this.clearQBTemplate();\n }\n var popupElement = document.querySelectorAll('.qb-dropdownlist.e-popup');\n if (popupElement) {\n for (i = 0; i < popupElement.length; i++) {\n popupElement[i].remove();\n }\n }\n classList(this.element, [], ['e-rtl', 'e-responsive', 'e-device']);\n this.isDestroy = false;\n };\n /**\n * Adds single or multiple rules.\n *\n * @param {RuleModel[]} rule - 'rule collection' to be passed to add the rules.\n * @param {string} groupID - 'group id' to be passed to add the rule in groups.\n * @returns {void}.\n */\n QueryBuilder.prototype.addRules = function (rule, groupID) {\n groupID = this.element.id + '_' + groupID;\n this.isPublic = true;\n for (var i = 0, len = rule.length; i < len; i++) {\n this.addRuleElement(document.getElementById(groupID), rule[i]);\n }\n this.isPublic = false;\n };\n /**\n * Adds single or multiple groups, which contains the collection of rules.\n *\n * @param {RuleModel[]} groups - 'group collection' to be passed to add the groups.\n * @param {string} groupID - 'group id' to be passed to add the groups.\n * @returns {void}.\n */\n QueryBuilder.prototype.addGroups = function (groups, groupID) {\n if (this.isAddSuccess || this.element.querySelectorAll('.e-group-container').length <= this.maxGroupCount) {\n groupID = this.element.id + '_' + groupID;\n var groupElem = document.getElementById(groupID);\n var rule = this.getParentGroup(groupElem);\n var grouplen = groups.length;\n if (grouplen) {\n this.isPublic = true;\n for (var i = 0, len = groups.length; i < len; i++) {\n this.updatedRule = { isLocked: groups[i].isLocked, condition: groups[i].condition,\n not: groups[i].not };\n this.importRules(groups[i], groupElem, false, groups[i].not);\n }\n this.isPublic = false;\n }\n else {\n var condition = 'and';\n var not = false;\n var isLocked = false;\n if (this.updatedRule) {\n condition = this.updatedRule.condition;\n not = this.updatedRule.not;\n isLocked = this.updatedRule.isLocked;\n }\n if (this.groupIndex < 0) {\n if (this.enableNotCondition) {\n rule.rules.push({ 'condition': condition, 'not': not, rules: [] });\n }\n else {\n rule.rules.push({ 'condition': condition, rules: [] });\n }\n }\n else {\n if (this.enableNotCondition) {\n rule.rules.splice(this.groupIndex + 1, 0, { condition: condition, not: not, rules: [], isLocked: isLocked });\n }\n else {\n rule.rules.splice(this.groupIndex + 1, 0, { condition: condition, rules: [], isLocked: isLocked });\n }\n }\n }\n if (!this.headerTemplate) {\n this.disableRuleCondition(groupElem, rule, null, this.enableSeparateConnector ? true : null);\n }\n }\n };\n QueryBuilder.prototype.initWrapper = function () {\n this.isInitialLoad = true;\n if (this.cssClass) {\n addClass([this.element], this.cssClass.replace(/\\s+/g, ' ').trim().split(' '));\n }\n if (this.enableSeparateConnector) {\n addClass([this.element], 'e-multi-connector');\n }\n if (this.enableRtl) {\n addClass([this.element], 'e-rtl');\n }\n if (this.width) {\n this.element.style.width = this.width;\n }\n if (this.height) {\n this.element.style.height = this.height;\n }\n if (this.rule.rules.length) {\n this.isImportRules = true;\n }\n else {\n this.addGroupElement(false, this.element);\n }\n if (Browser.isDevice || this.displayMode === 'Vertical') {\n if (Browser.isDevice) {\n this.element.style.width = '100%';\n this.element.classList.add('e-device');\n }\n removeClass(this.element.querySelectorAll('.e-rule-container'), 'e-horizontal-mode');\n addClass(this.element.querySelectorAll('.e-rule-container'), 'e-vertical-mode');\n this.displayMode = 'Vertical';\n }\n else {\n this.displayMode = 'Horizontal';\n }\n if (this.summaryView) {\n if (this.isImportRules) {\n this.renderSummary();\n }\n else {\n this.renderSummaryCollapse();\n }\n }\n else {\n if (this.columns && this.columns.length && this.isImportRules) {\n this.addGroupElement(false, this.element, this.rule.condition, false, this.rule.not, false, this.rule);\n var mRules = extend({}, this.rule, {}, true);\n this.isRefreshed = true;\n this.setGroupRules(mRules);\n this.isRefreshed = false;\n }\n else if (this.columns && this.columns.length) {\n this.addRuleElement(this.element.querySelector('.e-group-container'), {});\n }\n this.notGroupRtl();\n if (this.readonly) {\n this.enableReadonly();\n }\n var buttons = this.element.querySelectorAll('label.e-btn');\n var button = void 0;\n for (var i = 0; i < buttons.length; i++) {\n button = buttons.item(i);\n rippleEffect(button, { selector: '.e-btn' });\n }\n }\n };\n QueryBuilder.prototype.renderSummary = function () {\n var contentElem = this.createElement('div', {\n attrs: {\n class: 'e-summary-content',\n id: this.element.id + '_summary_content'\n }\n });\n var textElem = this.createElement('textarea', { attrs: { class: 'e-summary-text', readonly: 'true' }, styles: 'max-height:500px' });\n var editElem = this.createElement('button', { attrs: { type: 'button', class: 'e-edit-rule e-css e-btn e-small e-flat e-primary' } });\n var divElem = this.createElement('div', { attrs: { class: 'e-summary-btndiv' } });\n contentElem.appendChild(textElem);\n textElem.textContent = this.getSqlFromRules(this.rule);\n editElem.textContent = this.l10n.getConstant('Edit');\n divElem.appendChild(editElem);\n contentElem.appendChild(divElem);\n this.element.appendChild(contentElem);\n };\n QueryBuilder.prototype.renderSummaryCollapse = function () {\n var collapseElem = this.createElement('div', {\n attrs: {\n class: 'e-collapse-rule e-icons',\n title: this.l10n.getConstant('SummaryViewTitle')\n }\n });\n this.element.querySelector('.e-group-header').appendChild(collapseElem);\n };\n QueryBuilder.prototype.columnSort = function () {\n if (this.sortDirection.toLowerCase() === 'descending') {\n this.columns = new DataManager(this.columns).executeLocal(new Query().sortByDesc('field'));\n }\n else if (this.sortDirection.toLowerCase() === 'ascending') {\n this.columns = new DataManager(this.columns).executeLocal(new Query().sortBy('field'));\n }\n };\n QueryBuilder.prototype.onChangeNotGroup = function () {\n this.element.innerHTML = '';\n this.groupIdCounter = 0;\n if (!this.headerTemplate) {\n if (this.enableNotCondition) {\n var inputElem = this.createElement('button', { attrs: { type: 'button', class: 'e-qb-toggle' } });\n if (this.groupElem.querySelector('.e-btn-group')) {\n this.groupElem.querySelector('.e-btn-group').insertBefore(inputElem, this.groupElem.querySelector('.e-btngroup-and'));\n }\n }\n else {\n this.groupElem.querySelector('.e-qb-toggle').remove();\n }\n }\n this.setProperties({ rule: this.checkNotGroup(this.rule) }, true);\n this.initWrapper();\n };\n QueryBuilder.prototype.notGroupRtl = function () {\n if (this.enableRtl) {\n addClass(this.element.querySelectorAll('.e-btn-group'), 'e-rtl');\n }\n else {\n removeClass(this.element.querySelectorAll('.e-btn-group'), 'e-rtl');\n }\n };\n QueryBuilder.prototype.checkNotGroup = function (rule) {\n var orgRule;\n if (rule.rules) {\n for (var i = 0; i < rule.rules.length; i++) {\n orgRule = rule.rules[i];\n orgRule = this.checkNotGroup(orgRule);\n rule.rules[i] = orgRule;\n }\n }\n if (!isNullOrUndefined(rule.not)) {\n if (this.enableNotCondition) {\n rule.not = false;\n }\n delete rule.not;\n }\n else if (this.enableNotCondition && !isNullOrUndefined(rule.condition)) {\n rule.not = false;\n }\n return rule;\n };\n QueryBuilder.prototype.onPropertyChanged = function (newProp, oldProp) {\n var properties = Object.keys(newProp);\n var groupElem = this.element.querySelector('.e-group-container');\n var summaryElem = this.element.querySelector('.e-summary-content');\n for (var _i = 0, properties_1 = properties; _i < properties_1.length; _i++) {\n var prop = properties_1[_i];\n switch (prop) {\n case 'summaryView':\n if (newProp.summaryView) {\n groupElem.style.display = 'none';\n if (this.element.querySelectorAll('.e-summary-content').length < 1) {\n this.renderSummary();\n summaryElem = this.element.querySelector('.e-summary-content');\n }\n else {\n this.element.querySelector('.e-summary-text').textContent = this.getSqlFromRules(this.rule);\n }\n summaryElem.style.display = 'block';\n }\n else {\n if (groupElem.querySelectorAll('.e-collapse-rule').length > -1) {\n this.renderSummaryCollapse();\n }\n groupElem.style.display = 'block';\n summaryElem.style.display = 'none';\n }\n break;\n case 'displayMode':\n this.refresh();\n break;\n case 'showButtons':\n if (!isNullOrUndefined(newProp.showButtons.lockGroup)) {\n if (newProp.showButtons.lockGroup) {\n removeClass(this.element.querySelectorAll('.e-lock-grp-btn'), 'e-button-hide');\n }\n else {\n addClass(this.element.querySelectorAll('.e-lock-grp-btn'), 'e-button-hide');\n }\n }\n if (!isNullOrUndefined(newProp.showButtons.lockRule)) {\n if (newProp.showButtons.lockRule) {\n removeClass(this.element.querySelectorAll('.e-lock-rule-btn'), 'e-button-hide');\n }\n else {\n addClass(this.element.querySelectorAll('.e-lock-rule-btn'), 'e-button-hide');\n }\n }\n if (!isNullOrUndefined(newProp.showButtons.cloneGroup)) {\n if (newProp.showButtons.cloneGroup) {\n removeClass(this.element.querySelectorAll('.e-clone-grp-btn'), 'e-button-hide');\n }\n else {\n addClass(this.element.querySelectorAll('.e-clone-grp-btn'), 'e-button-hide');\n }\n }\n if (!isNullOrUndefined(newProp.showButtons.cloneRule)) {\n if (newProp.showButtons.cloneRule) {\n removeClass(this.element.querySelectorAll('.e-clone-rule-btn'), 'e-button-hide');\n }\n else {\n addClass(this.element.querySelectorAll('.e-clone-rule-btn'), 'e-button-hide');\n }\n }\n if (!isNullOrUndefined(newProp.showButtons.ruleDelete)) {\n if (newProp.showButtons.ruleDelete) {\n removeClass(this.element.querySelectorAll('.e-rule-delete'), 'e-button-hide');\n }\n else {\n addClass(this.element.querySelectorAll('.e-rule-delete'), 'e-button-hide');\n }\n }\n if (!isNullOrUndefined(newProp.showButtons.groupDelete)) {\n if (newProp.showButtons.groupDelete) {\n removeClass(this.element.querySelectorAll('.e-deletegroup'), 'e-button-hide');\n }\n else {\n addClass(this.element.querySelectorAll('.e-deletegroup'), 'e-button-hide');\n }\n }\n break;\n case 'cssClass':\n if (oldProp.cssClass) {\n removeClass([this.element], oldProp.cssClass.split(' '));\n }\n if (newProp.cssClass) {\n addClass([this.element], newProp.cssClass.replace(/\\s+/g, ' ').trim().split(' '));\n }\n break;\n case 'enableRtl':\n if (newProp.enableRtl) {\n addClass([this.element], 'e-rtl');\n this.notGroupRtl();\n }\n else {\n removeClass([this.element], 'e-rtl');\n this.notGroupRtl();\n }\n break;\n case 'enablePersistence':\n this.enablePersistence = newProp.enablePersistence;\n break;\n case 'dataSource':\n this.dataSource = newProp.dataSource;\n this.refresh();\n break;\n case 'columns':\n this.columns = newProp.columns;\n this.columnSort();\n this.updateSubFieldsFromColumns(this.columns);\n break;\n case 'sortDirection':\n this.sortDirection = newProp.sortDirection;\n this.columnSort();\n break;\n case 'maxGroupCount':\n this.maxGroupCount = newProp.maxGroupCount;\n break;\n case 'height':\n this.height = newProp.height;\n this.element.style.height = this.height;\n break;\n case 'rule':\n if (this.rule.rules.length === 0 && !isNullOrUndefined(this.rule)) {\n this.reset();\n }\n this.setProperties({ rule: newProp.rule }, true);\n newProp.rule = this.getRuleCollection(this.rule, false);\n this.setRules(this.rule);\n break;\n case 'width':\n this.width = newProp.width;\n this.element.style.width = this.width;\n break;\n case 'locale':\n this.locale = newProp.locale;\n this.intl = new Internationalization(this.locale);\n this.isLocale = true;\n this.refresh();\n this.isLocale = false;\n break;\n case 'enableNotCondition':\n this.onChangeNotGroup();\n break;\n case 'readonly':\n this.isReadonly = newProp.readonly;\n this.enableReadonly();\n break;\n case 'allowDragAndDrop':\n this.allowDragAndDrop = newProp.allowDragAndDrop;\n this.refresh();\n break;\n case 'enableSeparateConnector':\n this.enableSeparateConnector = newProp.enableSeparateConnector;\n this.refresh();\n break;\n }\n }\n };\n QueryBuilder.prototype.preRender = function () {\n this.element.id = this.element.id || getUniqueID('ej2-querybuilder');\n this.defaultLocale = {\n StartsWith: 'Starts With',\n DoesNotStartWith: 'Does Not Start With',\n EndsWith: 'Ends With',\n DoesNotEndWith: 'Does Not End With',\n Contains: 'Contains',\n DoesNotContain: 'Does Not Contain',\n NotLike: 'Not Like',\n Like: 'Like',\n Equal: 'Equal',\n NotEqual: 'Not Equal',\n LessThan: 'Less Than',\n LessThanOrEqual: 'Less Than Or Equal',\n GreaterThan: 'Greater Than',\n GreaterThanOrEqual: 'Greater Than Or Equal',\n Between: 'Between',\n NotBetween: 'Not Between',\n In: 'In',\n NotIn: 'Not In',\n Remove: 'REMOVE',\n SelectField: 'Select a field',\n SelectOperator: 'Select operator',\n DeleteRule: 'Remove this condition',\n DeleteGroup: 'Delete group',\n AddGroup: 'Add Group',\n AddCondition: 'Add Condition',\n Edit: 'EDIT',\n ValidationMessage: 'This field is required',\n SummaryViewTitle: 'Summary View',\n OtherFields: 'Other Fields',\n AND: 'AND',\n OR: 'OR',\n NOT: 'NOT',\n SelectValue: 'Enter Value',\n IsEmpty: 'Is Empty',\n IsNotEmpty: 'Is Not Empty',\n IsNull: 'Is Null',\n IsNotNull: 'Is Not Null',\n True: 'true',\n False: 'false',\n AddButton: 'Add Group/Condition',\n CloneGroup: 'Clone Group',\n LockGroup: 'Lock Group',\n CloneRule: 'Clone Rule',\n LockRule: 'Lock Rule',\n UnlockRule: 'Unlock Rule',\n UnlockGroup: 'Unlock Group'\n };\n this.l10n = new L10n('querybuilder', this.defaultLocale, this.locale);\n this.intl = new Internationalization(this.locale);\n this.groupIdCounter = 0;\n this.subFilterCounter = 0;\n this.ruleIdCounter = 0;\n this.btnGroupId = 0;\n this.isImportRules = false;\n this.parser = [];\n this.customOperators = {\n stringOperator: [\n { value: 'startswith', key: this.l10n.getConstant('StartsWith') },\n { value: 'notstartswith', key: this.l10n.getConstant('DoesNotStartWith') },\n { value: 'endswith', key: this.l10n.getConstant('EndsWith') },\n { value: 'notendswith', key: this.l10n.getConstant('DoesNotEndWith') },\n { value: 'contains', key: this.l10n.getConstant('Contains') },\n { value: 'notcontains', key: this.l10n.getConstant('DoesNotContain') },\n { value: 'equal', key: this.l10n.getConstant('Equal') },\n { value: 'notequal', key: this.l10n.getConstant('NotEqual') },\n { value: 'in', key: this.l10n.getConstant('In') },\n { value: 'notin', key: this.l10n.getConstant('NotIn') },\n { value: 'isempty', key: this.l10n.getConstant('IsEmpty') },\n { value: 'isnotempty', key: this.l10n.getConstant('IsNotEmpty') }\n ],\n dateOperator: [\n { value: 'equal', key: this.l10n.getConstant('Equal') },\n { value: 'greaterthan', key: this.l10n.getConstant('GreaterThan') },\n { value: 'greaterthanorequal', key: this.l10n.getConstant('GreaterThanOrEqual') },\n { value: 'lessthan', key: this.l10n.getConstant('LessThan') },\n { value: 'lessthanorequal', key: this.l10n.getConstant('LessThanOrEqual') },\n { value: 'notequal', key: this.l10n.getConstant('NotEqual') },\n { value: 'between', key: this.l10n.getConstant('Between') },\n { value: 'notbetween', key: this.l10n.getConstant('NotBetween') }\n ],\n booleanOperator: [\n { value: 'equal', key: this.l10n.getConstant('Equal') },\n { value: 'notequal', key: this.l10n.getConstant('NotEqual') }\n ],\n numberOperator: [\n { value: 'equal', key: this.l10n.getConstant('Equal') },\n { value: 'greaterthanorequal', key: this.l10n.getConstant('GreaterThanOrEqual') },\n { value: 'greaterthan', key: this.l10n.getConstant('GreaterThan') },\n { value: 'between', key: this.l10n.getConstant('Between') },\n { value: 'lessthan', key: this.l10n.getConstant('LessThan') },\n { value: 'notbetween', key: this.l10n.getConstant('NotBetween') },\n { value: 'lessthanorequal', key: this.l10n.getConstant('LessThanOrEqual') },\n { value: 'notequal', key: this.l10n.getConstant('NotEqual') },\n { value: 'in', key: this.l10n.getConstant('In') },\n { value: 'notin', key: this.l10n.getConstant('NotIn') }\n ]\n };\n this.operators = {\n equal: '=', notequal: '!=', greaterthan: '>', greaterthanorequal: '>=', lessthan: '<', in: 'IN', notin: 'NOT IN',\n lessthanorequal: '<=', startswith: 'LIKE', endswith: 'LIKE', between: 'BETWEEN', notbetween: 'NOT BETWEEN', contains: 'LIKE',\n isnull: 'IS NULL', isnotnull: 'IS NOT NULL', isempty: 'IS EMPTY', isnotempty: 'IS NOT EMPTY', notstartswith: 'NOT LIKE',\n notendswith: 'NOT LIKE', notcontains: 'NOT LIKE'\n };\n this.sqlOperators = {\n equal: '=', notequal: '!=', greaterthan: '>', greaterthanorequal: '>=', lessthan: '<', in: this.l10n.getConstant('In').toUpperCase(),\n notin: this.l10n.getConstant('NotIn').toUpperCase(), lessthanorequal: '<=', startswith: this.l10n.getConstant('Like').toUpperCase(),\n endswith: this.l10n.getConstant('Like').toUpperCase(), between: this.l10n.getConstant('Between').toUpperCase(),\n notbetween: this.l10n.getConstant('NotBetween').toUpperCase(), contains: this.l10n.getConstant('Like').toUpperCase(),\n isnull: this.l10n.getConstant('IsNull').toUpperCase(), isnotnull: this.l10n.getConstant('IsNotNull').toUpperCase(),\n isempty: this.l10n.getConstant('IsEmpty').toUpperCase(), isnotempty: this.l10n.getConstant('IsNotEmpty').toUpperCase(),\n notstartswith: this.l10n.getConstant('NotLike').toUpperCase(), notendswith: this.l10n.getConstant('NotLike').toUpperCase(),\n notcontains: this.l10n.getConstant('NotLike').toUpperCase()\n };\n if (!this.fields) {\n this.fields = { text: 'label', value: 'field' };\n }\n };\n QueryBuilder.prototype.render = function () {\n this.levelColl = {};\n this.items = [\n {\n text: this.l10n.getConstant('AddGroup'),\n iconCss: 'e-icons e-add-icon e-addgroup'\n },\n {\n text: this.l10n.getConstant('AddCondition'),\n iconCss: 'e-icons e-add-icon e-addrule'\n }\n ];\n this.ruleElem = this.ruleTemplate();\n this.groupElem = this.groupTemplate();\n var stringOper = [\n { value: 'isnull', key: this.l10n.getConstant('IsNull') },\n { value: 'isnotnull', key: this.l10n.getConstant('IsNotNull') }\n ];\n var numberOper = [\n { value: 'isnull', key: this.l10n.getConstant('IsNull') },\n { value: 'isnotnull', key: this.l10n.getConstant('IsNotNull') }\n ];\n this.customOperators['stringOperator'] = this.customOperators['stringOperator'].concat(stringOper); // tslint:disable-line\n this.customOperators['numberOperator'] = this.customOperators['numberOperator'].concat(numberOper); // tslint:disable-line\n if (this.dataSource instanceof DataManager) {\n this.dataManager = this.dataSource;\n this.executeDataManager(new Query().take(1));\n }\n else {\n this.dataManager = new DataManager(this.dataSource);\n this.dataColl = this.dataManager.executeLocal(new Query());\n this.initControl();\n }\n this.renderComplete();\n if (this.allowDragAndDrop) {\n this.initializeDrag();\n }\n };\n QueryBuilder.prototype.initializeDrag = function () {\n this.draggable = new Draggable(this.element, {\n dragTarget: '.e-drag-qb-rule',\n distance: 5,\n helper: this.helper.bind(this),\n dragStart: this.dragStartHandler.bind(this),\n drag: this.dragHandler.bind(this),\n dragStop: this.dragStopHandler.bind(this),\n isReplaceDragEle: true,\n isPreventSelect: false,\n abort: '.e-parent-header',\n isDragScroll: true\n });\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n QueryBuilder.prototype.helper = function (e) {\n var target = this.draggable.currentStateTarget;\n if (!target.classList.contains('e-drag-qb-rule') || (target.classList.contains('e-drag-qb-rule') && closest(target, '.e-disable'))) {\n return false;\n }\n var visualElement = this.createElement('div', {\n className: 'e-cloneproperties e-draganddrop e-dragclone',\n styles: 'height:\"auto\", z-index:2, width:' + this.element.offsetWidth\n });\n var cloneElement;\n if (this.draggable.currentStateTarget.parentElement.classList.contains('e-group-header')) {\n cloneElement = closest(target, '.e-group-container').cloneNode(true);\n closest(target, '.e-group-container').classList.add('e-qb-dragging-rule');\n }\n else {\n visualElement.classList.add('e-group-body');\n cloneElement = this.createElement('div', { className: 'e-rule-container' });\n var ruleElement = closest(target, '.e-rule-field').cloneNode(true);\n cloneElement.appendChild(ruleElement);\n closest(target, '.e-rule-field').classList.add('e-qb-dragging-rule');\n }\n visualElement.appendChild(cloneElement);\n var childElements = visualElement.querySelectorAll('*');\n childElements.forEach(function (child) {\n child.removeAttribute('id');\n });\n this.element.appendChild(visualElement);\n return visualElement;\n };\n QueryBuilder.prototype.dragStartHandler = function (e) {\n this.draggedRule = e.target;\n this.isDragEventPrevent = false;\n document.body.classList.add('e-prevent-select');\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this.dragElement = e.dragElement;\n var rule = closest(e.target, '.e-rule-container');\n var group = closest(e.target, '.e-group-container');\n var dragEventArgs = { dragRuleID: rule !== null ? rule.id : group.id, dragGroupID: group.id, cancel: false };\n this.trigger('dragStart', dragEventArgs);\n this.isDragEventPrevent = dragEventArgs.cancel;\n };\n QueryBuilder.prototype.dragHandler = function (e) {\n if (this.isDragEventPrevent) {\n return;\n }\n var borderLineElem = this.element.querySelectorAll('.e-drag-rule-bottom-line');\n borderLineElem.forEach(function (ele) {\n ele.classList.remove('e-drag-rule-bottom-line');\n });\n borderLineElem = this.element.querySelectorAll('.e-drag-rule-top-line');\n borderLineElem.forEach(function (ele) {\n ele.classList.remove('e-drag-rule-top-line');\n });\n if (isNullOrUndefined(e.target)) {\n return;\n }\n if (e.target.nodeName === 'HTML' || closest(e.target, '.e-qb-dragging-rule') || closest(e.target, '.e-group-header') ||\n !closest(e.target, '#' + this.element.id) || closest(e.target, '.e-disable') || (e.target.parentElement && e.target.parentElement.classList.contains('e-btn-group') && this.enableSeparateConnector)) {\n this.dragElement.classList.add('e-notallowedcur');\n return;\n }\n else {\n this.dragElement.classList.remove('e-notallowedcur');\n }\n var targetElem = closest(e.target, '.e-rule-container');\n var grpElem = closest(e.target, '.e-group-container');\n if (targetElem) {\n var rect = targetElem.getBoundingClientRect();\n var mouseY = e.event.clientY || e.event.changedTouches[0].clientY;\n var distanceToTop = mouseY - rect.top;\n var distanceToBottom = rect.bottom - mouseY;\n var threshold = 20; // Adjust as needed\n if (distanceToTop < threshold) {\n targetElem.classList.add('e-drag-rule-top-line');\n }\n else if (distanceToBottom < threshold) {\n targetElem.classList.add('e-drag-rule-bottom-line');\n }\n }\n else if (e.target.classList.contains('e-rule-list') && e.target.children.length === 0) {\n e.target.classList.add('e-drag-rule-bottom-line');\n }\n else if (e.target.classList.contains('e-rule-list') && e.target.children[0].classList.contains('e-group-container')) {\n var rect = e.target.children[0].getBoundingClientRect();\n var mouseY = e.event.clientY || e.event.changedTouches[0].clientY;\n var distanceToTop = mouseY - rect.top;\n var threshold = 20; // Adjust as needed\n if (distanceToTop < threshold) {\n e.target.classList.add('e-drag-rule-top-line');\n }\n }\n else if (closest(e.target, '.e-group-container') || e.target.classList.contains('e-group-container')) {\n if (!grpElem) {\n grpElem = e.target;\n }\n if (grpElem.id.indexOf('group0') > -1) {\n var rect = e.target.getBoundingClientRect();\n var mouseY = e.event.clientY || e.event.changedTouches[0].clientY;\n var distanceToBottom = rect.bottom - mouseY;\n var threshold = 20; // Adjust as needed\n if (distanceToBottom < threshold) {\n e.target.classList.add('e-drag-rule-bottom-line');\n }\n }\n }\n var dragEventArgs = { dragRuleID: targetElem !== null ? targetElem.id : grpElem !== null ? grpElem.id : null,\n dragGroupID: grpElem !== null ? grpElem.id : null, cancel: false };\n this.trigger('drag', dragEventArgs);\n this.isDragEventPrevent = dragEventArgs.cancel;\n };\n QueryBuilder.prototype.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 if (this.enableSeparateConnector) {\n condition = rules.rules[j].condition;\n }\n }\n else {\n var rule = rules.rules[j];\n var valueStr = '';\n var ruleOpertor = sqlLocale ? this.sqlOperators[rule.operator] : this.operators[rule.operator];\n if (rule.value instanceof Array) {\n if (rule.operator.toString().indexOf('between') > -1) {\n var ruleCondition = sqlLocale ? ' ' + this.l10n.getConstant('AND').toUpperCase() + ' ' : ' ' + 'AND' + ' ';\n if (rule.type === 'date' && !this.isDateFunction(rule.value[0])) {\n valueStr += '\"' + rule.value[0] + '\"' + ruleCondition + '\"' + rule.value[1] + '\"';\n }\n else {\n valueStr += rule.value[0] + ruleCondition + rule.value[1];\n }\n }\n else {\n if (typeof rule.value[0] === 'string' && rule.value !== null) {\n valueStr += '(\"' + rule.value[0] + '\"';\n for (var k = 1, kLen = rule.value.length; k < kLen; k++) {\n valueStr += ',\"' + rule.value[k] + '\"';\n }\n valueStr += ')';\n }\n else {\n valueStr += '(' + rule.value + ')';\n }\n }\n }\n else {\n if (rule.operator.toString().indexOf('startswith') > -1) {\n valueStr += rule.value ? '(\"' + rule.value + '%\")' : '(' + rule.value + ')';\n }\n else if (rule.operator.toString().indexOf('endswith') > -1) {\n valueStr += rule.value ? '(\"%' + rule.value + '\")' : '(' + rule.value + ')';\n }\n else if (rule.operator.toString().indexOf('contains') > -1) {\n valueStr += rule.value ? '(\"%' + rule.value + '%\")' : '(' + rule.value + ')';\n }\n else {\n if (rule.type === 'number' || typeof rule.value === 'boolean' ||\n (rule.value === null && (rule.operator.toString().indexOf('empty') < -1))) {\n valueStr += rule.value;\n }\n else if (rule.operator.toString().indexOf('empty') > -1) {\n valueStr += '\"\"';\n }\n else {\n valueStr += '\"' + rule.value + '\"';\n }\n }\n }\n if (rule.operator.toString().indexOf('null') > -1) {\n if (enableEscape) {\n rule.field = '`' + rule.field + '`';\n }\n else {\n if (rule.field.indexOf(' ') > -1) {\n rule.field = '\"' + rule.field + '\"';\n }\n }\n queryStr += rule.field + ' ' + ruleOpertor;\n }\n else {\n var custOper = ruleOpertor;\n if (rule.operator === 'isempty') {\n custOper = '=';\n }\n else if (rule.operator === 'isnotempty') {\n custOper = '!=';\n }\n if (enableEscape) {\n rule.field = '`' + rule.field + '`';\n }\n else {\n if (rule.field.indexOf(' ') > -1) {\n rule.field = '\"' + rule.field + '\"';\n }\n }\n queryStr += rule.field + ' ' + custOper + ' ' + valueStr;\n }\n if (rule.condition && rule.condition !== '') {\n condition = rule.condition;\n }\n }\n if (j !== jLen - 1) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var rule = rules.rules[j];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (condition === '' || (rule && rule.condition !== '' && rule.custom && rule.custom.isCustom)) {\n condition = rule.condition;\n }\n if (condition) {\n condition = sqlLocale ? this.l10n.getConstant(condition.toUpperCase()).toUpperCase() : condition.toUpperCase();\n queryStr += ' ' + condition + ' ';\n }\n }\n }\n }\n if (!isRoot) {\n queryStr += ')';\n }\n if (rules.not) {\n queryStr += ')';\n }\n return queryStr;\n };\n /**\n * Sets the rules from the sql query.\n *\n * @param {string} sqlString - 'sql String' to be passed to set the rule.\n * @param {boolean} sqlLocale - Optional. Set `true` if Localization for Sql query.\n * @returns {void}\n */\n QueryBuilder.prototype.setRulesFromSql = function (sqlString, sqlLocale) {\n sqlString = sqlString.replace(/`/g, '');\n var ruleModel = this.getRulesFromSql(sqlString, sqlLocale);\n this.setRules({ condition: ruleModel.condition, not: ruleModel.not, rules: ruleModel.rules });\n };\n /**\n * Get the rules from SQL query.\n *\n * @param {string} sqlString - 'sql String' to be passed to get the rule.\n * @param {boolean} sqlLocale - Set `true` if Localization for Sql query.\n * @returns {object} - Rules from SQL query\n */\n QueryBuilder.prototype.getRulesFromSql = function (sqlString, sqlLocale) {\n this.parser = [];\n this.sqlParser(sqlString, sqlLocale);\n this.setProperties({ rule: { condition: 'and', not: false, rules: [] } }, true);\n var rule = this.processParser(this.parser, this.rule, [0], sqlLocale);\n if (this.enableNotCondition) {\n return { condition: rule.condition, not: rule.not, rules: rule.rules };\n }\n else {\n return { condition: rule.condition, rules: rule.rules };\n }\n };\n /**\n * Gets the sql query from rules.\n *\n * @param {RuleModel} rule - 'rule' to be passed to get the sql.\n * @param {boolean} allowEscape - Set `true` if it exclude the escape character.\n * @param {boolean} sqlLocale - Set `true` if Localization for Sql query.\n * @returns {string} - Sql query from rules.\n */\n QueryBuilder.prototype.getSqlFromRules = function (rule, allowEscape, sqlLocale) {\n if (!rule) {\n rule = this.getValidRules();\n }\n rule = this.getRuleCollection(rule, false);\n var sqlString = this.getSqlString(this.getValidRules(rule), allowEscape, null, sqlLocale).replace(/\"/g, '\\'');\n return sqlString;\n };\n /**\n * Gets the parameter SQL query from rules.\n *\n * @param {RuleModel} rule – Specify the rule to be passed to get the parameter sql string.\n * @returns {ParameterizedSql} – Parameterized SQL query from rules.\n */\n QueryBuilder.prototype.getParameterizedSql = function (rule) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.moduleLoader.loadedModules.length) {\n if (!rule) {\n rule = this.getValidRules();\n }\n var obj = { sql: null };\n this.notify('query-library', { prop: 'getParameterSql', onPropertyChange: false, value: { rule: rule, obj: obj } });\n return obj['sql'];\n }\n else {\n console.warn('[WARNING] :: Module \"query-library\" is not available in QueryBuilder component! You either misspelled the module name or forgot to load it.');\n }\n return null;\n };\n /**\n * Sets the rules from the parameter sql query.\n *\n * @param { ParameterizedSql} sqlQuery – Specifies the parameter SQL to be passed to set the rule and load it to the query builder.\n * @returns {void}\n */\n QueryBuilder.prototype.setParameterizedSql = function (sqlQuery) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.moduleLoader.loadedModules.length) {\n var obj = { sql: null };\n this.notify('query-library', { prop: 'convertParamSqlToSql', onPropertyChange: false, value: { sql: sqlQuery, obj: obj } });\n var sql = obj['sql'];\n if (sql) {\n sql = sql.replace(/`/g, '');\n var ruleModel = this.getRulesFromSql(sql);\n this.setRules({ condition: ruleModel.condition, not: ruleModel.not, rules: ruleModel.rules });\n }\n }\n else {\n console.warn('[WARNING] :: Module \"query-library\" is not available in QueryBuilder component! You either misspelled the module name or forgot to load it.');\n }\n };\n /**\n * Gets the named parameter SQL query from rules.\n *\n * @param {RuleModel} rule – Specify the rule to be passed to get the named parameter SQL string.\n * @returns {ParameterizedNamedSql} – Parameterized Named SQL query from rules.\n */\n QueryBuilder.prototype.getParameterizedNamedSql = function (rule) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.moduleLoader.loadedModules.length) {\n if (!rule) {\n rule = this.getValidRules();\n }\n var obj = { sql: null };\n this.notify('query-library', { prop: 'getNamedParameterSql', onPropertyChange: false, value: { rule: rule, obj: obj } });\n return obj['sql'];\n }\n else {\n console.warn('[WARNING] :: Module \"query-library\" is not available in QueryBuilder component! You either misspelled the module name or forgot to load it.');\n }\n return null;\n };\n /**\n * Sets the rules from the named parameter SQL query.\n *\n * @param { ParameterizedNamedSql } sqlQuery – Specifies the named parameter SQL to be passed to set the rule and load it to the query builder.\n * @returns {void}\n */\n QueryBuilder.prototype.setParameterizedNamedSql = function (sqlQuery) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.moduleLoader.loadedModules.length) {\n var obj = { sql: null };\n this.notify('query-library', { prop: 'convertNamedParamSqlToSql', onPropertyChange: false, value: { sql: sqlQuery, obj: obj } });\n var sql = obj['sql'];\n if (sql) {\n sql = sql.replace(/`/g, '');\n var ruleModel = this.getRulesFromSql(sql);\n this.setRules({ condition: ruleModel.condition, not: ruleModel.not, rules: ruleModel.rules });\n }\n }\n else {\n console.warn('[WARNING] :: Module \"query-library\" is not available in QueryBuilder component! You either misspelled the module name or forgot to load it.');\n }\n };\n /**\n * Set the rules from Mongo query.\n *\n * @param {string} mongoQuery - 'sql String' to be passed to get the rule.\n * @param {boolean} mongoLocale - Set `true` if Localization for Mongo query.\n * @returns {void}\n */\n QueryBuilder.prototype.setMongoQuery = function (mongoQuery, mongoLocale) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.moduleLoader.loadedModules.length) {\n this.rule = { condition: 'and', not: false, rules: [] };\n this.notify('query-library', { prop: 'mongoParser', onPropertyChange: false, value: { mongoQuery: JSON.parse(mongoQuery), rule: this.rule, mongoLocale: mongoLocale } });\n }\n else {\n console.warn('[WARNING] :: Module \"query-library\" is not available in QueryBuilder component! You either misspelled the module name or forgot to load it.');\n }\n };\n /**\n * Gets the Mongo query from rules.\n *\n * @param {RuleModel} rule - 'rule' to be passed to get the sql.\n * @returns {object} - Sql query from rules.\n */\n QueryBuilder.prototype.getMongoQuery = function (rule) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.moduleLoader.loadedModules.length) {\n if (!rule) {\n rule = this.getValidRules();\n }\n var obj = { mongoQuery: null };\n this.notify('query-library', { prop: 'getMongoFromRules', onPropertyChange: false, value: { rule: rule, mongoQuery: '', obj: obj } });\n return obj['mongoQuery'];\n }\n else {\n console.warn('[WARNING] :: Module \"query-library\" is not available in QueryBuilder component! You either misspelled the module name or forgot to load it.');\n }\n return '';\n };\n /**\n * Clones the rule based on the rule ID to the specific group.\n *\n * @param {string} ruleID - Specifies the ruleID that needs to be cloned.\n * @param {string} groupID - Specifies the groupID in which the rule to be cloned.\n * @param {number} index - Specifies the index to insert the cloned rule inside the group.\n * @returns {void}\n */\n QueryBuilder.prototype.cloneRule = function (ruleID, groupID, index) {\n var getRule = this.getRule(ruleID.replace(this.element.id + '_', ''));\n var isCloneRule = this.showButtons.cloneRule;\n groupID = groupID.replace(this.element.id + '_', '');\n this.ruleIndex = index;\n this.cloneRuleBtnClick = true;\n this.showButtons.cloneRule = true;\n this.addRules([{\n 'label': getRule.label, 'field': getRule.field, 'type': getRule.type, 'operator': getRule.operator,\n 'value': getRule.value, 'condition': getRule.condition\n }], groupID);\n this.ruleIndex = -1;\n this.cloneRuleBtnClick = false;\n this.showButtons.cloneRule = isCloneRule;\n isCloneRule = false;\n };\n /**\n * Clones the group based on the group ID to the specific group.\n *\n * @param {string} groupID - Specifies the groupID that needs to be cloned.\n * @param {string} parentGroupID - Specifies the parentGroupID in which the group to be cloned.\n * @param {number} index - Specifies the index to insert the cloned group inside the parent group.\n * @returns {void}\n */\n QueryBuilder.prototype.cloneGroup = function (groupID, parentGroupID, index) {\n parentGroupID = parentGroupID.replace(this.element.id + '_', '');\n var group = this.getGroup(parentGroupID);\n var isCloneGroup = this.showButtons.cloneGroup;\n groupID = groupID.replace(this.element.id + '_', '');\n this.groupIndex = index;\n this.cloneGrpBtnClick = true;\n this.showButtons.cloneGroup = true;\n this.addGroups([{ 'condition': group.condition, 'not': group.not, 'rules': group.rules }], groupID);\n this.groupIndex = -1;\n this.cloneGrpBtnClick = false;\n this.showButtons.cloneGroup = isCloneGroup;\n isCloneGroup = false;\n };\n /**\n * Locks the rule based on the rule ID.\n *\n * @param {string} ruleID - Specifies the ruleID that needs to be locked.\n * @returns {void}\n */\n QueryBuilder.prototype.lockRule = function (ruleID) {\n if (ruleID.indexOf(this.element.id) < 0) {\n ruleID = this.element.id + '_' + ruleID;\n }\n var target = document.getElementById(ruleID).querySelectorAll('.e-lock-rule-btn')[0];\n this.ruleLock(target);\n };\n /**\n * Locks the group based on the group ID\n *\n * @param {string} groupID - Specifies the groupID that needs to be locked.\n * @returns {void}\n */\n QueryBuilder.prototype.lockGroup = function (groupID) {\n if (groupID.indexOf(this.element.id) < 0) {\n groupID = this.element.id + '_' + groupID;\n }\n var target = document.getElementById(groupID).querySelectorAll('.e-lock-grp-btn')[0];\n this.groupLock(target);\n };\n QueryBuilder.prototype.sqlParser = function (sqlString, sqlLocale) {\n var st = 0;\n var str;\n do {\n str = sqlString.slice(st);\n st += this.parseSqlStrings(str, sqlLocale);\n } while (str !== '');\n return this.parser;\n };\n QueryBuilder.prototype.parseSqlStrings = function (sqlString, sqlLocale) {\n var operators = ['=', '!=', '<=', '>=', '<', '>'];\n var conditions;\n if (sqlLocale) {\n conditions = [this.l10n.getConstant('AND').toUpperCase(), this.l10n.getConstant('OR').toUpperCase(), this.l10n.getConstant('NOT').toUpperCase()];\n }\n else {\n conditions = ['AND', 'OR', 'NOT'];\n }\n var subOp;\n if (sqlLocale) {\n subOp = [this.l10n.getConstant('In').toUpperCase(), this.l10n.getConstant('NotIn').toUpperCase(),\n this.l10n.getConstant('Like').toUpperCase(), this.l10n.getConstant('NotLike').toUpperCase(),\n this.l10n.getConstant('Between').toUpperCase(), this.l10n.getConstant('NotBetween').toUpperCase(),\n this.l10n.getConstant('IsNull').toUpperCase(), this.l10n.getConstant('IsNotNull').toUpperCase(),\n this.l10n.getConstant('IsEmpty').toUpperCase(), this.l10n.getConstant('IsNotEmpty').toUpperCase()];\n }\n else {\n subOp = ['IN', 'NOT IN', 'LIKE', 'NOT LIKE', 'BETWEEN', 'NOT BETWEEN', 'IS NULL', 'IS NOT NULL', 'IS EMPTY', 'IS NOT EMPTY'];\n }\n var regexStr;\n var regex;\n var matchValue;\n for (var i = 0, iLen = operators.length; i < iLen; i++) {\n regexStr = /^\\w+$/.test(operators[i]) ? '\\\\b' : '';\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var regExp = RegExp;\n regex = new regExp('^(' + operators[i] + ')' + regexStr, 'ig');\n if (regex.exec(sqlString)) {\n this.parser.push(['Operators', operators[i].toLowerCase()]);\n return operators[i].length;\n }\n }\n var lastPasrser = this.parser[this.parser.length - 1];\n if (!lastPasrser || (lastPasrser && lastPasrser[0] !== 'Literal')) {\n for (var i = 0, iLen = conditions.length; i < iLen; i++) {\n regexStr = /^\\w+$/.test(conditions[i]) ? '\\\\b' : '';\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var regExp = RegExp;\n regex = new regExp('^(' + conditions[i] + ')' + regexStr, 'ig');\n if (regex.exec(sqlString)) {\n this.parser.push(['Conditions', conditions[i].toLowerCase()]);\n return conditions[i].length;\n }\n }\n }\n for (var i = 0, iLen = subOp.length; i < iLen; i++) {\n regexStr = /^\\w+$/.test(subOp[i]) ? '\\\\b' : '';\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var regExp = RegExp;\n regex = new regExp('^(' + subOp[i] + ')' + regexStr, 'ig');\n if (regex.exec(sqlString)) {\n this.parser.push(['SubOperators', subOp[i].toLowerCase()]);\n return subOp[i].length;\n }\n }\n //Left Parenthesis\n if (/^\\(/.exec(sqlString)) {\n this.parser.push(['Left', '(']);\n return 1;\n }\n //Right Parenthesis\n if (/^\\)/.exec(sqlString)) {\n this.parser.push(['Right', ')']);\n return 1;\n }\n //Boolean\n if (/^(true|false)/.exec(sqlString)) {\n matchValue = /^(true|false)/.exec(sqlString)[0];\n this.parser.push(['String', matchValue]);\n return matchValue.length;\n }\n //Null\n if (/^null/.exec(sqlString)) {\n matchValue = /^null/.exec(sqlString)[0];\n this.parser.push(['String', null]);\n return matchValue.length;\n }\n if (/^`?([a-z_][a-z0-9_.\\\\[\\]\\\\(\\\\)]{0,}(\\\\:(number|float|string|date|boolean))?)`?/i.exec(sqlString)) {\n matchValue = /^`?([a-z_][a-z0-9_.\\\\[\\]\\\\(\\\\)]{0,}(\\\\:(number|float|string|date|boolean))?)`?/i.exec(sqlString)[1];\n this.parser.push(['Literal', matchValue]);\n return matchValue.length;\n }\n if (this.checkLiteral() && /^'?([a-z_][a-z0-9 _.\\\\[\\]\\\\(\\\\)-]{0,}(\\\\:(number|float|string|date|boolean))?)'?/i.exec(sqlString)) {\n matchValue = /^'?([a-z_][a-z0-9 _.\\\\[\\]\\\\(\\\\)-]{0,}(\\\\:(number|float|string|date|boolean))?)'?/i.exec(sqlString)[1];\n this.parser.push(['Literal', matchValue]);\n return matchValue.length + 2;\n }\n if (this.checkNumberLiteral(sqlString, sqlLocale)) {\n 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 var isNotOpened = false;\n for (var i = 0, iLen = parser.length; i < iLen; i++) {\n if (parser[i][0] === 'Literal') {\n var column = this.getColumn(parser[i][1]);\n rule = { label: (column && column.label) ? column.label : parser[i][1], field: parser[i][1] };\n if (parser[i + 1][0] === 'SubOperators') {\n if (parser[i + 1][1].indexOf('null') > -1 || parser[i + 1][1].indexOf('empty') > -1) {\n rule.operator = this.getOperator(' ', parser[i + 1][1], sqlLocale);\n rule.value = null;\n rule.type = this.getTypeFromColumn(rule);\n }\n else {\n var oper = parser[i + 3][1] ? parser[i + 3][1].replace(/'/g, '') : parser[i + 3][1];\n rule.operator = this.getOperator(oper, parser[i + 1][1], sqlLocale);\n }\n operator = parser[i + 1][1];\n i++;\n j = i + 1;\n jLen = iLen;\n if (sqlLocale && rule.operator === 'contains' || rule.operator === 'startswith' || rule.operator === 'endswith') {\n operator = 'like';\n }\n else if (sqlLocale && rule.operator === 'notcontains' || rule.operator === 'notstartswith' || rule.operator === 'notendswith') {\n operator = 'not like';\n }\n else if (sqlLocale) {\n operator = rule.operator;\n }\n for (j = i + 1; j < jLen; j++) {\n if (operator.indexOf('between') < 0 && parser[j][0] === 'Left') {\n isLeftOpened = true;\n }\n else if (parser[j][0] === 'Right' && isLeftOpened) {\n i = j;\n isLeftOpened = false;\n break;\n }\n else {\n if (operator.indexOf('null') > -1 || operator.indexOf('empty') > -1) {\n break;\n }\n if (operator.indexOf('like') > -1 && parser[j][0] === 'String') {\n var val = parser[j][1];\n if (parser[j][1] && parser[j][1][0] === '\\'') {\n val = parser[j][1].substring(1, parser[j][1].length - 1);\n }\n val = val ? val.replace(/%/g, '') : parser[j][1];\n rule.value = val;\n rule.type = 'string';\n }\n else if (operator.indexOf('between') > -1) {\n if (parser[j][0] === 'Literal' || parser[j][0] === 'Left') {\n break;\n }\n if (parser[j][0] === 'Number') {\n numVal.push(Number(parser[j][1]));\n }\n else if (parser[j][0] === 'String') {\n var val = parser[j][1];\n if (parser[j][1] && parser[j][1][0] === '\\'') {\n val = parser[j][1].substring(1, parser[j][1].length - 1);\n }\n strVal.push(val);\n }\n }\n else {\n if (parser[j][0] === 'Number') {\n numVal.push(Number(parser[j][1]));\n }\n else if (parser[j][0] === 'String') {\n var val = parser[j][1];\n if (parser[j][1] && parser[j][1][0] === '\\'') {\n val = parser[j][1].substring(1, parser[j][1].length - 1);\n }\n strVal.push(val);\n }\n }\n rule.type = this.getTypeFromColumn(rule);\n }\n }\n if (operator.indexOf('like') < 0) {\n if (parser[j - 1][0] === 'Number') {\n rule.value = numVal;\n rule.type = 'number';\n }\n else if (parser[j - 1][0] === 'String') {\n rule.value = strVal;\n rule.type = 'string';\n }\n else if (operator.indexOf('between') > -1 && parser[j - 1][0] === 'Conditions') {\n if (strVal.length !== 0) {\n rule.value = strVal;\n rule.type = 'string';\n }\n else {\n rule.value = numVal;\n rule.type = 'number';\n }\n }\n numVal = [];\n strVal = [];\n rule.type = this.getTypeFromColumn(rule);\n }\n if (this.enableSeparateConnector && parser[i + 1][0] === 'Conditions') {\n rule.condition = parser[i + 1][1];\n }\n }\n else if (parser[i + 1][0] === 'Operators') {\n rule.operator = this.getOperator(parser[i + 2][1], parser[i + 1][1], sqlLocale);\n if (rule.operator === 'equal' && parser[i + 2][0] === 'String' && parser[i + 2][1] === '\\'\\'') {\n rule.operator = 'isempty';\n }\n else if (rule.operator === 'notequal' && parser[i + 2][0] === 'String' && parser[i + 2][1] === '\\'\\'') {\n rule.operator = 'isnotempty';\n }\n if (parser[i + 2][0] === 'Number') {\n rule.type = 'number';\n rule.value = Number(parser[i + 2][1]);\n }\n else {\n rule.type = 'string';\n var val = parser[i + 2][1];\n if (val && val[0] === '\\'') {\n val = val.substring(1, val.length - 1);\n }\n rule.value = val;\n }\n if (this.enableSeparateConnector && parser[i + 3][0] === 'Conditions') {\n rule.condition = parser[i + 3][1];\n }\n rule.type = this.getTypeFromColumn(rule);\n }\n rules.rules.push(rule);\n }\n else if (parser[i][0] === 'Left') {\n if (!(parser[0][0] === 'Left') && (parser[i - 1][1] === 'not' || sqlLocale && this.l10n.getConstant('NOT').toLowerCase() === parser[i - 1][1])) {\n isNotOpened = true;\n continue;\n }\n this.parser = parser.splice(i + 1, iLen - (i + 1));\n if (this.enableNotCondition) {\n subRules = { condition: 'and', rules: [], not: false };\n }\n else {\n subRules = { condition: 'and', rules: [] };\n }\n grpCount = 0;\n kLen = rules.rules.length;\n for (k = 0; k < kLen; k++) { //To get the group position\n if (rules.rules[k].rules) {\n grpCount++;\n }\n }\n levelColl.push(grpCount);\n rules.rules.push(subRules);\n subRules = this.processParser(this.parser, subRules, levelColl, sqlLocale);\n return rules;\n }\n else if (parser[i][0] === 'Conditions' && !this.enableSeparateConnector) {\n if (parser[i][1] === 'not' || (sqlLocale && this.l10n.getConstant('NOT').toLowerCase() === parser[i][1])) {\n rules.not = true;\n }\n else {\n rules.condition = parser[i][1];\n }\n }\n else if (parser[i][0] === 'Right') {\n if (isNotOpened && parser[i + 1][0] === 'Right') {\n isNotOpened = false;\n continue;\n }\n this.parser = parser.splice(i + 1, iLen - (i + 1));\n levelColl.pop(); //To get the parent Group\n rules = this.rule;\n lLen = levelColl.length;\n for (l = 0; l < lLen; l++) {\n rules = this.findGroupByIdx(levelColl[l], rules, l === 0);\n }\n return this.processParser(this.parser, rules, levelColl, sqlLocale);\n }\n }\n return rules;\n };\n /**\n * Clone the Group\n *\n * @param {Element | string} target - 'target' to be passed to clone the group.\n * @returns {void}\n */\n QueryBuilder.prototype.groupClone = function (target) {\n var groupElem = target.closest('.e-rule-list').closest('.e-group-container');\n var targetGrpId;\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","filtering","dropdownTreeFiltering","dropdownTreeClose","dropdowntree","DropDownTree","getLabelFromColumn","lockRuleTarget","args_2","notCondition","undefined","prevElem_1","ruleContainer_1","args_3","setMultiConnector","proxy","ruleElemID","srcElement","ddTree","hierarchicalData","changeDataSource","matchedDataSource","nestedChildFilter","filter","filteredChild","setTimeout","treeObj","expandAll","node","isMatchedNode","matchedChildren","checkValue","parseInt","toString","template","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","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","isNotOpened","val","pop","targetGrpId","lockItem","disableRuleControls","newGroup","disableHeaderControls","updateLockItems","isDisabled","addElem","deleteGrpElem","lockElem","groupContElem","addCondition","addGroup","ddlElement","numericElement","textElement","checkboxElement","radioBtnElement","multiSelectElement","deleteElem","enabled","Event","Complex","NotifyPropertyChanges","Component","QueryLibrary","parent","addEventListener","isDestroyed","removeEventListener","on","queryLibrary","off","getMongoFromRules","mongoParser","getParameterSql","getNamedParameterSql","convertParamSqlToSql","convertNamedParamSqlToSql","convertMongoQuery","getOperatorFromMongoOperator","operatorValue","itVal","x","endsWith","mongoList","mongoRecursion","stringValue","betweenValue","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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"}
|
|
1
|
+
{"version":3,"file":"ej2-querybuilder.min.js","sources":["../../src/query-builder/query-builder.js","../../src/query-builder/query-library.js","../../src/global.js"],"sourcesContent":["var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n/**\n * Query Builder Source\n */\n/* eslint-disable max-len */\nimport { Component, NotifyPropertyChanges, getComponent, Browser, compile, append, Draggable, remove } from '@syncfusion/ej2-base';\nimport { Property, ChildProperty, Complex, L10n, closest, extend, isNullOrUndefined, Collection, cldrData } from '@syncfusion/ej2-base';\nimport { getInstance, addClass, removeClass, rippleEffect, detach, classList } from '@syncfusion/ej2-base';\nimport { Internationalization, getUniqueID, select } from '@syncfusion/ej2-base';\nimport { Button, CheckBox, RadioButton } from '@syncfusion/ej2-buttons';\nimport { DropDownList, CheckBoxSelection, DropDownTree } from '@syncfusion/ej2-dropdowns';\nimport { MultiSelect } from '@syncfusion/ej2-dropdowns';\nimport { Event, EventHandler, getValue, Animation } from '@syncfusion/ej2-base';\nimport { Query, Predicate, DataManager, Deferred } from '@syncfusion/ej2-data';\nimport { TextBox, NumericTextBox } from '@syncfusion/ej2-inputs';\nimport { DatePicker } from '@syncfusion/ej2-calendars';\nimport { DropDownButton } from '@syncfusion/ej2-splitbuttons';\nimport { Tooltip, createSpinner, showSpinner, hideSpinner } from '@syncfusion/ej2-popups';\nimport { compile as templateCompiler, getNumericObject } from '@syncfusion/ej2-base';\n/**\n * Defines the Columns of Query Builder\n */\nvar Columns = /** @class */ (function (_super) {\n __extends(Columns, _super);\n function Columns() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], Columns.prototype, \"field\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"label\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"type\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"values\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"operators\", void 0);\n __decorate([\n Property()\n ], Columns.prototype, \"ruleTemplate\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"template\", void 0);\n __decorate([\n Property({ isRequired: true, min: 0, max: Number.MAX_VALUE })\n ], Columns.prototype, \"validation\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"format\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"step\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"value\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"category\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"columns\", void 0);\n return Columns;\n}(ChildProperty));\nexport { Columns };\n/**\n * Defines the rule of Query Builder\n */\nvar Rule = /** @class */ (function (_super) {\n __extends(Rule, _super);\n function Rule() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], Rule.prototype, \"condition\", void 0);\n __decorate([\n Collection([], Rule)\n ], Rule.prototype, \"rules\", void 0);\n __decorate([\n Property(null)\n ], Rule.prototype, \"field\", void 0);\n __decorate([\n Property(null)\n ], Rule.prototype, \"label\", void 0);\n __decorate([\n Property(null)\n ], Rule.prototype, \"type\", void 0);\n __decorate([\n Property(null)\n ], Rule.prototype, \"operator\", void 0);\n __decorate([\n Property(null)\n ], Rule.prototype, \"value\", void 0);\n __decorate([\n Property(false)\n ], Rule.prototype, \"not\", void 0);\n __decorate([\n Property(null)\n ], Rule.prototype, \"isLocked\", void 0);\n return Rule;\n}(ChildProperty));\nexport { Rule };\n/**\n * Defines the property for value.\n */\nvar Value = /** @class */ (function (_super) {\n __extends(Value, _super);\n function Value() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], Value.prototype, \"numericTextBoxModel\", void 0);\n __decorate([\n Property(null)\n ], Value.prototype, \"multiSelectModel\", void 0);\n __decorate([\n Property(null)\n ], Value.prototype, \"datePickerModel\", void 0);\n __decorate([\n Property(null)\n ], Value.prototype, \"textBoxModel\", void 0);\n __decorate([\n Property(null)\n ], Value.prototype, \"radioButtonModel\", void 0);\n return Value;\n}(ChildProperty));\nexport { Value };\n/**\n * Defines the ruleDelete, groupInsert, and groupDelete options of Query Builder.\n */\nvar ShowButtons = /** @class */ (function (_super) {\n __extends(ShowButtons, _super);\n function ShowButtons() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], ShowButtons.prototype, \"cloneRule\", void 0);\n __decorate([\n Property(false)\n ], ShowButtons.prototype, \"cloneGroup\", void 0);\n __decorate([\n Property(false)\n ], ShowButtons.prototype, \"lockRule\", void 0);\n __decorate([\n Property(false)\n ], ShowButtons.prototype, \"lockGroup\", void 0);\n __decorate([\n Property(true)\n ], ShowButtons.prototype, \"ruleDelete\", void 0);\n __decorate([\n Property(true)\n ], ShowButtons.prototype, \"groupInsert\", void 0);\n __decorate([\n Property(true)\n ], ShowButtons.prototype, \"groupDelete\", void 0);\n return ShowButtons;\n}(ChildProperty));\nexport { ShowButtons };\nvar QueryBuilder = /** @class */ (function (_super) {\n __extends(QueryBuilder, _super);\n function QueryBuilder(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.isReadonly = true;\n _this.fields = { text: 'label', value: 'field' };\n _this.updatedRule = { not: false, condition: 'and', isLocked: false };\n _this.isLocale = false;\n _this.isRefreshed = false;\n _this.isNotified = false;\n _this.isAddSuccess = false;\n _this.isNotValueChange = false;\n _this.isFieldChange = false;\n _this.isFieldClose = false;\n _this.isDestroy = false;\n _this.isGetNestedData = false;\n _this.isCustomOprCols = [];\n _this.groupCounter = 0;\n _this.lockItems = [];\n _this.groupIndex = -1;\n _this.ruleIndex = -1;\n _this.isLastGroup = false;\n _this.cloneGrpBtnClick = false;\n _this.isMiddleGroup = false;\n _this.cloneRuleBtnClick = false;\n _this.isValueEmpty = false;\n _this.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', filtering: this.dropdownTreeFiltering.bind(this), close: this.dropdownTreeClose.bind(this)\n };\n if (this.fieldModel) {\n ddlField = __assign({}, ddlField, this.fieldModel);\n }\n var dropdowntree = new DropDownTree(ddlField);\n dropdowntree.appendTo('#' + ruleElem.id + '_filterkey');\n if (!isNullOrUndefined(dropdowntree.value)) {\n var value = this.getLabelFromColumn(dropdowntree.value[0]);\n dropdowntree.element.value = value;\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var ddlVal = !isNullOrUndefined(rule.field) ?\n this.GetRootColumnName(rule.field) : dropdowntree.value;\n this.selectedColumn = this.getColumn(ddlVal);\n if (Object.keys(rule).length) {\n this.changeRule(rule, {\n element: dropdowntree.element, itemData: this.selectedColumn\n });\n }\n }\n }\n ruleID = ruleElem.id.replace(this.element.id + '_', '');\n if (rule && rule.isLocked) {\n var lockRuleTarget = ruleElem.querySelector('.e-lock-rule-btn');\n this.ruleLock(lockRuleTarget);\n }\n if (!this.isImportRules && !this.prvtEvtTgrDaD) {\n this.trigger('change', { groupID: trgt.id.replace(this.element.id + '_', ''), ruleID: ruleID, type: 'insertRule' });\n }\n }\n if (this.enableSeparateConnector && isNullOrUndefined(rule.condition) && ruleID) {\n rule = this.getRule(ruleID);\n }\n if (this.enableSeparateConnector) {\n var prevElem = ruleElem.previousElementSibling;\n var ruleContainer = void 0;\n while (prevElem && !prevElem.classList.contains('e-rule-container')) {\n if (prevElem.classList.contains('e-group-container')) {\n ruleContainer = prevElem.querySelectorAll('.e-rule-container');\n prevElem = ruleContainer[ruleContainer.length - 1];\n break;\n }\n prevElem = prevElem.previousElementSibling;\n }\n if (this.headerTemplate && prevElem) {\n var prevRule = this.getRule(prevElem);\n var args_2 = { requestType: 'rule-template-create', ruleID: prevElem.id, condition: prevRule.condition,\n notCondition: this.enableNotCondition ? true : undefined };\n this.trigger('actionBegin', args_2);\n }\n else if (isNullOrUndefined(prevElem) && ruleElem.id !== this.element.id + '_group0_rule0') {\n var group = ruleElem.closest('.e-group-container');\n if (group && group.previousElementSibling && group.previousElementSibling.previousElementSibling) {\n var prevElem_1 = group.previousElementSibling.previousElementSibling;\n if (prevElem_1.classList.contains('e-group-container')) {\n var ruleContainer_1 = prevElem_1.querySelectorAll('.e-rule-container');\n prevElem_1 = ruleContainer_1[ruleContainer_1.length - 1];\n }\n if (prevElem_1.classList.contains('e-rule-container')) {\n var prevRule = this.getRule(prevElem_1);\n var args_3 = { requestType: 'rule-template-create', ruleID: prevElem_1.id,\n condition: prevRule.condition, notCondition: this.enableNotCondition ? true : undefined };\n this.trigger('actionBegin', args_3);\n }\n }\n }\n this.setMultiConnector(ruleElem);\n }\n };\n QueryBuilder.prototype.dropdownTreeFiltering = function (args) {\n var _this = this;\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var proxy = this;\n var ruleElemID = '';\n var srcElement = args.event.srcElement;\n var isClearIcon = srcElement.classList.contains('e-clear-icon');\n var inputElem = isClearIcon ? srcElement.parentElement.querySelector('.e-textbox') : srcElement;\n ruleElemID = inputElem.id.split('_filterkey')[0];\n var ruleElem = document.getElementById(ruleElemID);\n this.ddTree = getComponent(ruleElem.querySelector('input.e-dropdowntree'), 'dropdowntree');\n var hierarchicalData = extend([], this.columns, [], true);\n // Cancel the default filtering.\n args.cancel = true;\n if (args.text === '') {\n this.changeDataSource(hierarchicalData);\n }\n else {\n var matchedDataSource = hierarchicalData\n .map(function (data) { return _this.nestedChildFilter(args.text, data); })\n .filter(function (filteredChild) { return filteredChild !== null; });\n this.changeDataSource(matchedDataSource);\n setTimeout(function () {\n proxy.ddTree.treeObj.expandAll();\n }, 100);\n }\n };\n QueryBuilder.prototype.changeDataSource = function (data) {\n this.ddTree.treeObj.fields = {\n dataSource: data,\n value: 'field',\n text: 'label',\n child: 'columns',\n expanded: 'expanded'\n };\n this.ddTree.treeObj.refresh();\n };\n QueryBuilder.prototype.nestedChildFilter = function (value, node) {\n var _this = this;\n var children = node[this.ddTree.fields.child];\n if (!children) {\n return this.isMatchedNode(value, node) ? node : null;\n }\n var matchedChildren = children\n .map(function (child) { return _this.nestedChildFilter(value, child); })\n .filter(function (filteredChild) { return filteredChild !== null; });\n if (matchedChildren.length) {\n node[this.ddTree.fields.child] = matchedChildren;\n return node;\n }\n else {\n node[this.ddTree.fields.child] = children;\n return this.isMatchedNode(value, node) ? node : null;\n }\n };\n QueryBuilder.prototype.isMatchedNode = function (value, node) {\n var checkValue = node[this.ddTree.fields.text].toLowerCase();\n value = value ? value.toLowerCase() : '';\n return checkValue.indexOf(value) !== -1;\n };\n QueryBuilder.prototype.dropdownTreeClose = function () {\n if (this.ddTree) {\n this.changeDataSource(this.columns);\n }\n this.ddTree = null;\n };\n QueryBuilder.prototype.updateDropdowntreeDS = function (columns) {\n for (var i = 0; i < columns.length; i++) {\n if (columns[parseInt(i.toString(), 10)].type === 'object') {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.isAngular && columns[parseInt(i.toString(), 10)].template) {\n delete columns[parseInt(i.toString(), 10)].template;\n }\n columns[parseInt(i.toString(), 10)].selectable = false;\n this.updateDropdowntreeDS(columns[parseInt(i.toString(), 10)].columns);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n }\n else if (this.isAngular && columns[parseInt(i.toString(), 10)].template) {\n delete columns[parseInt(i.toString(), 10)].template;\n }\n }\n };\n QueryBuilder.prototype.updateAddedRule = function (target, rule, newRule, isRuleTemplate, pId, isNewRuleAdded) {\n var ruleElem;\n var index = 0;\n var groupElem;\n var rules;\n if (isRuleTemplate) {\n ruleElem = select('#' + pId, target);\n groupElem = closest(target, '.e-group-container');\n rules = this.getParentGroup(groupElem);\n while (ruleElem && ruleElem.previousElementSibling !== null) {\n ruleElem = ruleElem.previousElementSibling;\n var enableSeparateCondition = this.enableSeparateConnector && ((!this.headerTemplate && !ruleElem.classList.contains('e-btn-group')) ||\n (this.headerTemplate && (ruleElem.classList.contains('e-rule-container') ||\n ruleElem.classList.contains('e-group-container'))));\n if (!this.enableSeparateConnector || enableSeparateCondition) {\n index++;\n }\n }\n rules.rules[index] = rule;\n }\n else {\n groupElem = closest(target, '.e-group-container');\n rules = this.getParentGroup(groupElem);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var custom = rule.custom;\n if (Object.keys(rule).length) {\n if (this.ruleIndex < 0) {\n rules.rules.push({\n 'field': rule.field, 'type': rule.type, 'label': rule.label, 'operator': rule.operator, value: rule.value\n });\n if (custom) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n rules.rules[rules.rules.length - 1].custom = custom;\n }\n if (this.enableSeparateConnector) {\n rules.rules[rules.rules.length - 1].condition = rule.condition ? rule.condition : newRule.condition;\n }\n }\n else {\n rules.rules.splice(this.ruleIndex + 1, 0, {\n 'field': rule.field, 'type': rule.type, 'label': rule.label, 'operator': rule.operator, value: rule.value\n });\n if (custom) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n rules.rules[this.ruleIndex + 1].custom = custom;\n }\n if (this.enableSeparateConnector) {\n rules.rules[this.ruleIndex + 1].condition = rule.condition ? rule.condition : newRule.condition;\n }\n }\n }\n else {\n if (custom) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n newRule.custom = custom;\n }\n if (this.autoSelectField) {\n rule.field = newRule.field = this.rule.rules[0].field;\n }\n rules.rules.push(newRule);\n }\n }\n this.disableRuleCondition(target, rules, isNewRuleAdded);\n };\n QueryBuilder.prototype.changeRuleTemplate = function (column, element) {\n var operVal = this.selectedColumn.operators;\n if (column.ruleTemplate) {\n return;\n }\n else {\n var parentGroup = closest(element, '.e-group-container');\n var parentId = closest(element, '.e-rule-container').id;\n if (this.previousColumn && this.previousColumn.ruleTemplate) {\n detach(element.closest('[id=\"' + parentId + '\"]').querySelector('.e-rule-field'));\n this.clearQBTemplate([parentId]);\n }\n if (column) {\n var rule = { field: column.field, label: column.label, operator: operVal[0].value, value: '' };\n this.addRuleElement(parentGroup, rule, column, 'change', parentId, true);\n }\n }\n };\n QueryBuilder.prototype.renderToolTip = function (element) {\n var tooltip = new Tooltip({ content: this.l10n.getConstant('ValidationMessage'), isSticky: true,\n position: 'BottomCenter', cssClass: 'e-querybuilder-error', afterClose: function () {\n tooltip.destroy();\n }, beforeOpen: function (args) {\n var tooltipCloseElement = args.element.querySelector('.e-tooltip-close');\n if (tooltipCloseElement) {\n tooltipCloseElement.style.display = 'none';\n }\n } });\n tooltip.appendTo(element);\n tooltip.open(element);\n };\n /**\n * Validate the conditions and it display errors for invalid fields.\n *\n * @returns {boolean} - Validation\n */\n QueryBuilder.prototype.validateFields = function () {\n var isValid = true;\n var dropDownTreeObj;\n if (this.allowValidation) {\n var excludeOprs = ['isnull', 'isnotnull', 'isempty', 'isnotempty'];\n var i = void 0;\n var len = void 0;\n var fieldElem = void 0;\n var indexElem = void 0;\n var valArray = [];\n var groupElem = void 0;\n var index = void 0;\n var dropDownObj = void 0;\n var tempElem = void 0;\n var rule = void 0;\n var ruleElemCln = this.element.querySelectorAll('.e-rule-container');\n for (i = 0, len = ruleElemCln.length; i < len; i++) {\n var validateRule = void 0;\n groupElem = closest(ruleElemCln[i], '.e-group-container');\n rule = this.getParentGroup(groupElem);\n index = 0;\n indexElem = tempElem = ruleElemCln[i];\n if (this.fieldMode === 'DropdownTree') {\n dropDownTreeObj = getComponent(ruleElemCln[i].querySelector('.e-rule-filter input.e-dropdowntree'), 'dropdowntree');\n if (dropDownTreeObj && dropDownTreeObj.value && dropDownTreeObj.value.length) {\n this.selectedColumn = this.getColumn(dropDownTreeObj.value[0]);\n validateRule = this.selectedColumn.validation;\n }\n }\n else {\n dropDownObj = getComponent(ruleElemCln[i].querySelector('.e-rule-filter input.e-dropdownlist'), 'dropdownlist');\n if (dropDownObj && dropDownObj.value) {\n this.selectedColumn = dropDownObj.getDataByValue(dropDownObj.value);\n validateRule = !isNullOrUndefined(dropDownObj.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 === '' || rule.rules[index].value === null ||\n (rule.rules[index].value instanceof Array && valArray.length < 1)) {\n var valElem = tempElem.querySelectorAll('.e-rule-value .e-control');\n if (excludeOprs.indexOf(rule.rules[index].operator) < 0) {\n isValid = false;\n }\n for (var j = 0, jLen = valElem.length; j < jLen; j++) {\n var element = valElem[j];\n var elem = void 0;\n if (element.parentElement.className.indexOf('e-searcher') > -1) {\n elem = closest(element, '.e-multi-select-wrapper');\n if (elem.className.indexOf('e-tooltip') < 0) {\n this.renderToolTip(elem);\n }\n }\n else if (valElem[j].parentElement.className.indexOf('e-tooltip') < 0 && valElem[j].className.indexOf('e-tooltip') < 0) {\n this.renderToolTip(valElem[j].parentElement);\n }\n j++;\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n }\n else if (rule.rules[index].type === 'date' && (rule.rules[index].value === null || rule.rules[index].value.indexOf(null) > -1)) {\n var valElem = tempElem.querySelectorAll('.e-rule-value .e-control');\n if (excludeOprs.indexOf(rule.rules[index].operator) < 0) {\n isValid = false;\n }\n for (var j = 0, jLen = valElem.length; j < jLen; j++) {\n if (valElem[j].parentElement.className.indexOf('e-tooltip') < 0 && valElem[j].className.indexOf('e-tooltip') < 0 && (isNullOrUndefined(rule.rules[index].value) || rule.rules[index].value[j] == null)) {\n this.renderToolTip(valElem[j].parentElement);\n }\n }\n }\n }\n else if ((dropDownObj && dropDownObj.element && isNullOrUndefined(dropDownObj.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) {\n return;\n }\n if (element.className.indexOf('e-day') > -1 || element.className.indexOf('e-today') > -1 || element.className.indexOf('e-cell') > -1) {\n var calenderArgs = args;\n element = calenderArgs.element;\n }\n var groupElem = closest(element, '.e-group-container');\n var ruleElem = closest(element, '.e-rule-container');\n var groupID = groupElem && groupElem.id.replace(this.element.id + '_', '');\n var ruleID = ruleElem.id.replace(this.element.id + '_', '');\n var dateElement = args;\n var dropDownObj;\n if (dateElement.element && dateElement.element.className.indexOf('e-datepicker') > -1) {\n element = dateElement.element;\n dropDownObj = getComponent(closest(element, '.e-rule-container').querySelector('.e-filter-input'), 'dropdownlist');\n if (dropDownObj) {\n this.selectedColumn = dropDownObj.getDataByValue(dropDownObj.value);\n }\n dropDownObj = getComponent(closest(element, '.e-rule-container').querySelector('.e-filter-input'), 'dropdowntree');\n if (dropDownObj) {\n this.selectedColumn = this.getColumn(dropDownObj.value[0]);\n }\n }\n var value;\n var rbValue;\n if (element.className.indexOf('e-radio') > -1) {\n rbValue = parseInt(element.id.split('valuekey')[1], 10);\n if (this.fieldMode === 'Default') {\n dropDownObj = getComponent(closest(element, '.e-rule-container').querySelector('.e-filter-input'), 'dropdownlist');\n this.selectedColumn = dropDownObj.getDataByValue(dropDownObj.value);\n if (this.selectedColumn.columns) {\n dropDownObj = getComponent(closest(element, '.e-rule-container').querySelector('.e-rule-sub-filter .e-dropdownlist'), 'dropdownlist');\n this.selectedColumn = this.getColumn(dropDownObj.value);\n }\n }\n else {\n dropDownObj = getComponent(closest(element, '.e-rule-container').querySelector('.e-filter-input'), 'dropdowntree');\n this.selectedColumn = this.getColumn(dropDownObj.value[0]);\n }\n if (this.selectedColumn.values) {\n value = this.selectedColumn.values[rbValue];\n }\n else {\n var valColl = [true, false];\n value = valColl[rbValue];\n }\n }\n else if (element.className.indexOf('e-multiselect') > -1) {\n value = getComponent(element, 'multiselect').value;\n }\n else {\n value = args.value;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (args.type === 'input' && args.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 var decimalSeparator = getValue('decimal', getNumericObject(this.locale));\n if (isNaN(value) && elem.value.indexOf(decimalSeparator) !== -1) {\n var numberValue = parseFloat(args.currentTarget.value);\n value = numberValue;\n }\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 operator_2;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n operatorList.forEach(function (obj) {\n if ('value' in obj && typeof obj.value === 'string' && obj.value.toLowerCase() === rule.operator.toLowerCase()) {\n operator_2 = obj.value;\n }\n });\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var value = operator_2 ? operator_2 : operatorList[0].value;\n var ddlIdx = 0;\n if (!this.autoSelectOperator) {\n value = '';\n ddlIdx = -1;\n }\n if (this.isImportRules || (this.ruleIndex > -1 || this.groupIndex > -1 || this.prvtEvtTgrDaD)) {\n value = rule ? (rule.operator ? rule.operator : value) : value;\n }\n var ddlOperator = void 0;\n ddlOperator = {\n dataSource: operatorList,\n fields: { text: 'key', value: 'value' },\n placeholder: this.l10n.getConstant('SelectOperator'),\n popupHeight: ((operatorList.length > 5) ? height : 'auto'),\n change: this.changeField.bind(this),\n index: ddlIdx,\n value: value,\n open: this.popupOpen.bind(this, false)\n };\n if (this.operatorModel) {\n ddlOperator = __assign({}, ddlOperator, this.operatorModel);\n }\n var dropDownList = new DropDownList(ddlOperator);\n dropDownList.appendTo('#' + ruleId + '_operatorkey');\n tempRule.operator = (rule && rule.operator !== '' && !isNullOrUndefined(rule.operator)) ? rule.operator : operatorList[0].value;\n if (this.isImportRules) {\n tempRule.type = this.selectedColumn.type;\n tempRule.operator = rule.operator;\n }\n if (!isNullOrUndefined(value) && value !== '') {\n this.renderValues(operatorElem, this.selectedColumn, ddlArgs.previousItemData, false, rule, tempRule, ddlArgs.element);\n }\n else if (this.autoSelectField && this.autoSelectOperator) {\n this.renderValues(operatorElem, this.selectedColumn, ddlArgs.previousItemData, false, rule, tempRule, ddlArgs.element);\n }\n }\n }\n if (!this.isImportRules) {\n this.updateRules(ddlArgs.element, ddlArgs.item);\n }\n };\n QueryBuilder.prototype.popupOpen = function (isField, args) {\n if (this.enableRtl) {\n addClass([args.popup.element], 'e-rtl');\n }\n if (isField) {\n this.isFieldClose = false;\n }\n };\n QueryBuilder.prototype.destroyControls = function (target, isRuleTemplate) {\n var element = isRuleTemplate ? target : target.nextElementSibling;\n var inputElement = element.querySelectorAll('input.e-control');\n var divElement = element.querySelectorAll('div.e-control:not(.e-handle)');\n var columns = this.columns;\n for (var i = 0, len = inputElement.length; i < len; i++) {\n if (inputElement[i].classList.contains('e-textbox')) {\n getComponent(inputElement[i], 'textbox').destroy();\n detach(select('input#' + inputElement[i].id, element));\n }\n else if (inputElement[i].classList.contains('e-dropdownlist')) {\n if (this.allowValidation && inputElement[i].parentElement.className.indexOf('e-tooltip') > -1) {\n getComponent(inputElement[i].parentElement, 'tooltip').destroy();\n }\n getComponent(inputElement[i], 'dropdownlist').destroy();\n }\n else if (inputElement[i].classList.contains('e-radio')) {\n getComponent(inputElement[i], 'radio').destroy();\n }\n else if (inputElement[i].classList.contains('e-numerictextbox')) {\n getComponent(inputElement[i], 'numerictextbox').destroy();\n detach(select('input#' + inputElement[i].id, element));\n }\n else if (inputElement[i].classList.contains('e-datepicker')) {\n getComponent(inputElement[i], 'datepicker').destroy();\n }\n else if (inputElement[i].classList.contains('e-multiselect')) {\n getComponent(inputElement[i], 'multiselect').destroy();\n }\n else if (inputElement[i].className.indexOf('e-template') > -1) {\n var clsName = inputElement[i].className;\n for (var j = 0, jLen = columns.length; j < jLen; j++) {\n if (columns[j].template && clsName.indexOf(columns[j].field) > -1) {\n this.templateDestroy(columns[j], inputElement[i].id);\n break;\n }\n }\n }\n if (document.getElementById(inputElement[i].id)) {\n detach(inputElement[i]);\n }\n }\n for (var i = 0, len = divElement.length; i < len; i++) {\n if (divElement[i].className.indexOf('e-template') > -1) {\n var clsName = divElement[i].className;\n for (var j = 0, jLen = columns.length; j < jLen; j++) {\n if (columns[j].template && clsName.indexOf(columns[j].field) > -1) {\n this.templateDestroy(columns[j], divElement[i].id);\n break;\n }\n }\n }\n detach(divElement[i]);\n }\n var templateElement = element.querySelectorAll('.e-template:not(.e-control)');\n for (var i = 0, len = templateElement.length; i < len; i++) {\n detach(templateElement[i]);\n }\n };\n QueryBuilder.prototype.templateDestroy = function (column, elemId) {\n var template;\n if (typeof column.template !== 'string' || column.template.destroy === undefined) {\n template = column.template;\n }\n else {\n return;\n }\n var temp = template.destroy;\n if (template.destroy) {\n var templateElements = void 0;\n if (document.getElementById(elemId)) {\n templateElements = closest(document.getElementById(elemId), '.e-rule-field').querySelectorAll('.e-template');\n }\n if (typeof temp === 'string') {\n temp = getValue(temp, window);\n temp({ field: column.field, elementId: elemId, elements: templateElements });\n }\n else {\n template.destroy({ field: column.field, elementId: elemId, elements: templateElements });\n }\n }\n };\n /**\n * Return values bound to the column.\n *\n * @param {string} field - 'field' to be passed to get the field values.\n * @returns {object[]} - Values bound to the column\n */\n QueryBuilder.prototype.getValues = function (field) {\n var original = {};\n var result = [];\n var value;\n var fieldColl = [];\n if (this.separator.length > 0) {\n fieldColl = field.split(this.separator);\n }\n var dataSource = this.dataColl;\n if (this.dataColl[1]) {\n for (var i = 0, iLen = dataSource.length; i < iLen; i++) {\n var data = {};\n if (fieldColl.length > 1) {\n var dataObj = dataSource[i];\n var fieldStr = void 0;\n for (var j = 0, jLen = fieldColl.length; j < jLen; j++) {\n fieldStr = fieldColl[j];\n if (fieldColl.length === (j + 1)) {\n value = dataObj[\"\" + fieldStr];\n if (Number(dataObj[\"\" + fieldStr]) === dataObj[\"\" + fieldStr] && dataObj[\"\" + fieldStr] % 1 !== 0) {\n value = dataObj[\"\" + fieldStr].toString();\n }\n }\n else {\n dataObj = dataObj[\"\" + fieldStr];\n }\n }\n }\n else {\n value = dataSource[i][\"\" + field];\n if (Number(dataSource[i][\"\" + field]) === dataSource[i][\"\" + field] && dataSource[i][\"\" + field] % 1 !== 0) {\n value = dataSource[i][\"\" + field].toString();\n }\n }\n if (!(value in original)) {\n original[\"\" + value] = 1;\n if (fieldColl.length > 1) {\n this.createNestedObject(data, fieldColl, value);\n }\n else {\n data[\"\" + field] = value;\n }\n result.push(data);\n }\n }\n }\n return result;\n };\n QueryBuilder.prototype.createNestedObject = function (obj, fieldColl, value) {\n var key;\n var lastIndex = fieldColl.length - 1;\n for (var k = 0; k < lastIndex; ++k) {\n key = fieldColl[k];\n if (!(key in obj)) {\n obj[\"\" + key] = {};\n }\n obj = obj[\"\" + key];\n }\n obj[fieldColl[lastIndex]] = value;\n };\n QueryBuilder.prototype.getDistinctValues = function (dataSource, field) {\n var original = {};\n var result = [];\n var nest = [];\n var value = '';\n var isNested = field.indexOf(this.separator);\n var _loop_2 = function (i, iLen) {\n 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 if (valElem[2] && valElem[2].parentElement.className.indexOf('e-tooltip') > -1) {\n getComponent(valElem[2].parentElement, 'tooltip').destroy();\n }\n }\n }\n };\n QueryBuilder.prototype.getFormat = function (format) {\n var formatOptions;\n if (format) {\n if (typeof (format) === 'string') {\n formatOptions = { type: 'dateTime' };\n if (format === 'short' || format === 'yMd') {\n formatOptions.type = 'date';\n formatOptions.skeleton = format;\n }\n else {\n formatOptions.format = format;\n }\n }\n else {\n formatOptions = { type: 'dateTime', skeleton: format.skeleton };\n }\n }\n else {\n formatOptions = { type: 'date', skeleton: 'yMd' };\n }\n return formatOptions;\n };\n QueryBuilder.prototype.findGroupByIdx = function (groupIdx, rule, isRoot) {\n var ruleColl = rule.rules;\n var dupRuleColl = [];\n if (!isRoot) {\n for (var j = 0, jLen = ruleColl.length; j < jLen; j++) {\n rule = ruleColl[j];\n if (rule.rules) {\n dupRuleColl.push(rule);\n }\n }\n return dupRuleColl[groupIdx];\n }\n return rule;\n };\n /**\n * Removes the component from the DOM and detaches all its related event handlers.\n * Also it maintains the initial input element from the DOM.\n *\n * @method destroy\n * @returns {void}\n */\n QueryBuilder.prototype.destroy = function () {\n this.isDestroy = true;\n var queryElement = this.element;\n if (!queryElement) {\n return;\n }\n var element;\n var i;\n var len;\n var tooltip;\n _super.prototype.destroy.call(this);\n element = this.element.querySelectorAll('.e-addrulegroup');\n len = element.length;\n for (i = 0; i < len; i++) {\n getComponent(element[i], 'dropdown-btn').destroy();\n detach(element[i]);\n }\n tooltip = this.element.querySelectorAll('.e-rule-filter .e-control.e-tooltip');\n for (i = 0; i < tooltip.length; i++) {\n getComponent(tooltip[i], 'tooltip').destroy();\n }\n element = this.element.querySelectorAll('.e-rule-filter .e-control:not(.e-tooltip)');\n len = element.length;\n for (i = 0; i < len; i++) {\n if (getComponent(element[i], 'dropdownlist')) {\n getComponent(element[i], 'dropdownlist').destroy();\n }\n else {\n getComponent(element[i], 'dropdowntree').destroy();\n }\n detach(element[i]);\n }\n tooltip = this.element.querySelectorAll('.e-rule-operator .e-control.e-tooltip');\n for (i = 0; i < tooltip.length; i++) {\n getComponent(tooltip[i], 'tooltip').destroy();\n }\n element = this.element.querySelectorAll('.e-rule-operator .e-control:not(.e-tooltip)');\n len = element.length;\n for (i = 0; i < len; i++) {\n if (getComponent(element[i], 'dropdownlist')) {\n getComponent(element[i], 'dropdownlist').destroy();\n detach(element[i]);\n }\n }\n tooltip = this.element.querySelectorAll('.e-rule-value .e-control.e-tooltip');\n for (i = 0; i < tooltip.length; i++) {\n getComponent(tooltip[i], 'tooltip').destroy();\n }\n this.isImportRules = false;\n this.unWireEvents();\n this.levelColl[this.element.id + '_group0'] = [0];\n this.element.innerHTML = '';\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.portals && this.portals.length) {\n this.clearQBTemplate();\n }\n var popupElement = document.querySelectorAll('.qb-dropdownlist.e-popup');\n if (popupElement) {\n for (i = 0; i < popupElement.length; i++) {\n popupElement[i].remove();\n }\n }\n classList(this.element, [], ['e-rtl', 'e-responsive', 'e-device']);\n this.isDestroy = false;\n };\n /**\n * Adds single or multiple rules.\n *\n * @param {RuleModel[]} rule - 'rule collection' to be passed to add the rules.\n * @param {string} groupID - 'group id' to be passed to add the rule in groups.\n * @returns {void}.\n */\n QueryBuilder.prototype.addRules = function (rule, groupID) {\n groupID = this.element.id + '_' + groupID;\n this.isPublic = true;\n for (var i = 0, len = rule.length; i < len; i++) {\n this.addRuleElement(document.getElementById(groupID), rule[i]);\n }\n this.isPublic = false;\n };\n /**\n * Adds single or multiple groups, which contains the collection of rules.\n *\n * @param {RuleModel[]} groups - 'group collection' to be passed to add the groups.\n * @param {string} groupID - 'group id' to be passed to add the groups.\n * @returns {void}.\n */\n QueryBuilder.prototype.addGroups = function (groups, groupID) {\n if (this.isAddSuccess || this.element.querySelectorAll('.e-group-container').length <= this.maxGroupCount) {\n groupID = this.element.id + '_' + groupID;\n var groupElem = document.getElementById(groupID);\n var rule = this.getParentGroup(groupElem);\n var grouplen = groups.length;\n if (grouplen) {\n this.isPublic = true;\n for (var i = 0, len = groups.length; i < len; i++) {\n this.updatedRule = { isLocked: groups[i].isLocked, condition: groups[i].condition,\n not: groups[i].not };\n this.importRules(groups[i], groupElem, false, groups[i].not);\n }\n this.isPublic = false;\n }\n else {\n var condition = 'and';\n var not = false;\n var isLocked = false;\n if (this.updatedRule) {\n condition = this.updatedRule.condition;\n not = this.updatedRule.not;\n isLocked = this.updatedRule.isLocked;\n }\n if (this.groupIndex < 0) {\n if (this.enableNotCondition) {\n rule.rules.push({ 'condition': condition, 'not': not, rules: [] });\n }\n else {\n rule.rules.push({ 'condition': condition, rules: [] });\n }\n }\n else {\n if (this.enableNotCondition) {\n rule.rules.splice(this.groupIndex + 1, 0, { condition: condition, not: not, rules: [], isLocked: isLocked });\n }\n else {\n rule.rules.splice(this.groupIndex + 1, 0, { condition: condition, rules: [], isLocked: isLocked });\n }\n }\n }\n if (!this.headerTemplate) {\n this.disableRuleCondition(groupElem, rule, null, this.enableSeparateConnector ? true : null);\n }\n }\n };\n QueryBuilder.prototype.initWrapper = function () {\n this.isInitialLoad = true;\n if (this.cssClass) {\n addClass([this.element], this.cssClass.replace(/\\s+/g, ' ').trim().split(' '));\n }\n if (this.enableSeparateConnector) {\n addClass([this.element], 'e-multi-connector');\n }\n if (this.enableRtl) {\n addClass([this.element], 'e-rtl');\n }\n if (this.width) {\n this.element.style.width = this.width;\n }\n if (this.height) {\n this.element.style.height = this.height;\n }\n if (this.rule.rules.length) {\n this.isImportRules = true;\n }\n else {\n this.addGroupElement(false, this.element);\n }\n if (Browser.isDevice || this.displayMode === 'Vertical') {\n if (Browser.isDevice) {\n this.element.style.width = '100%';\n this.element.classList.add('e-device');\n }\n removeClass(this.element.querySelectorAll('.e-rule-container'), 'e-horizontal-mode');\n addClass(this.element.querySelectorAll('.e-rule-container'), 'e-vertical-mode');\n this.displayMode = 'Vertical';\n }\n else {\n this.displayMode = 'Horizontal';\n }\n if (this.summaryView) {\n if (this.isImportRules) {\n this.renderSummary();\n }\n else {\n this.renderSummaryCollapse();\n }\n }\n else {\n if (this.columns && this.columns.length && this.isImportRules) {\n this.addGroupElement(false, this.element, this.rule.condition, false, this.rule.not, false, this.rule);\n var mRules = extend({}, this.rule, {}, true);\n this.isRefreshed = true;\n this.setGroupRules(mRules);\n this.isRefreshed = false;\n }\n else if (this.columns && this.columns.length) {\n this.addRuleElement(this.element.querySelector('.e-group-container'), {});\n }\n this.notGroupRtl();\n if (this.readonly) {\n this.enableReadonly();\n }\n var buttons = this.element.querySelectorAll('label.e-btn');\n var button = void 0;\n for (var i = 0; i < buttons.length; i++) {\n button = buttons.item(i);\n rippleEffect(button, { selector: '.e-btn' });\n }\n }\n };\n QueryBuilder.prototype.renderSummary = function () {\n var contentElem = this.createElement('div', {\n attrs: {\n class: 'e-summary-content',\n id: this.element.id + '_summary_content'\n }\n });\n var textElem = this.createElement('textarea', { attrs: { class: 'e-summary-text', readonly: 'true' }, styles: 'max-height:500px' });\n var editElem = this.createElement('button', { attrs: { type: 'button', class: 'e-edit-rule e-css e-btn e-small e-flat e-primary' } });\n var divElem = this.createElement('div', { attrs: { class: 'e-summary-btndiv' } });\n contentElem.appendChild(textElem);\n textElem.textContent = this.getSqlFromRules(this.rule);\n editElem.textContent = this.l10n.getConstant('Edit');\n divElem.appendChild(editElem);\n contentElem.appendChild(divElem);\n this.element.appendChild(contentElem);\n };\n QueryBuilder.prototype.renderSummaryCollapse = function () {\n var collapseElem = this.createElement('div', {\n attrs: {\n class: 'e-collapse-rule e-icons',\n title: this.l10n.getConstant('SummaryViewTitle')\n }\n });\n this.element.querySelector('.e-group-header').appendChild(collapseElem);\n };\n QueryBuilder.prototype.columnSort = function () {\n if (this.sortDirection.toLowerCase() === 'descending') {\n this.columns = new DataManager(this.columns).executeLocal(new Query().sortByDesc('field'));\n }\n else if (this.sortDirection.toLowerCase() === 'ascending') {\n this.columns = new DataManager(this.columns).executeLocal(new Query().sortBy('field'));\n }\n };\n QueryBuilder.prototype.onChangeNotGroup = function () {\n this.element.innerHTML = '';\n this.groupIdCounter = 0;\n if (!this.headerTemplate) {\n if (this.enableNotCondition) {\n var inputElem = this.createElement('button', { attrs: { type: 'button', class: 'e-qb-toggle' } });\n if (this.groupElem.querySelector('.e-btn-group')) {\n this.groupElem.querySelector('.e-btn-group').insertBefore(inputElem, this.groupElem.querySelector('.e-btngroup-and'));\n }\n }\n else {\n this.groupElem.querySelector('.e-qb-toggle').remove();\n }\n }\n this.setProperties({ rule: this.checkNotGroup(this.rule) }, true);\n this.initWrapper();\n };\n QueryBuilder.prototype.notGroupRtl = function () {\n if (this.enableRtl) {\n addClass(this.element.querySelectorAll('.e-btn-group'), 'e-rtl');\n }\n else {\n removeClass(this.element.querySelectorAll('.e-btn-group'), 'e-rtl');\n }\n };\n QueryBuilder.prototype.checkNotGroup = function (rule) {\n var orgRule;\n if (rule.rules) {\n for (var i = 0; i < rule.rules.length; i++) {\n orgRule = rule.rules[i];\n orgRule = this.checkNotGroup(orgRule);\n rule.rules[i] = orgRule;\n }\n }\n if (!isNullOrUndefined(rule.not)) {\n if (this.enableNotCondition) {\n rule.not = false;\n }\n delete rule.not;\n }\n else if (this.enableNotCondition && !isNullOrUndefined(rule.condition)) {\n rule.not = false;\n }\n return rule;\n };\n QueryBuilder.prototype.onPropertyChanged = function (newProp, oldProp) {\n var properties = Object.keys(newProp);\n var groupElem = this.element.querySelector('.e-group-container');\n var summaryElem = this.element.querySelector('.e-summary-content');\n for (var _i = 0, properties_1 = properties; _i < properties_1.length; _i++) {\n var prop = properties_1[_i];\n switch (prop) {\n case 'summaryView':\n if (newProp.summaryView) {\n groupElem.style.display = 'none';\n if (this.element.querySelectorAll('.e-summary-content').length < 1) {\n this.renderSummary();\n summaryElem = this.element.querySelector('.e-summary-content');\n }\n else {\n this.element.querySelector('.e-summary-text').textContent = this.getSqlFromRules(this.rule);\n }\n summaryElem.style.display = 'block';\n }\n else {\n if (groupElem.querySelectorAll('.e-collapse-rule').length > -1) {\n this.renderSummaryCollapse();\n }\n groupElem.style.display = 'block';\n summaryElem.style.display = 'none';\n }\n break;\n case 'displayMode':\n this.refresh();\n break;\n case 'showButtons':\n if (!isNullOrUndefined(newProp.showButtons.lockGroup)) {\n if (newProp.showButtons.lockGroup) {\n removeClass(this.element.querySelectorAll('.e-lock-grp-btn'), 'e-button-hide');\n }\n else {\n addClass(this.element.querySelectorAll('.e-lock-grp-btn'), 'e-button-hide');\n }\n }\n if (!isNullOrUndefined(newProp.showButtons.lockRule)) {\n if (newProp.showButtons.lockRule) {\n removeClass(this.element.querySelectorAll('.e-lock-rule-btn'), 'e-button-hide');\n }\n else {\n addClass(this.element.querySelectorAll('.e-lock-rule-btn'), 'e-button-hide');\n }\n }\n if (!isNullOrUndefined(newProp.showButtons.cloneGroup)) {\n if (newProp.showButtons.cloneGroup) {\n removeClass(this.element.querySelectorAll('.e-clone-grp-btn'), 'e-button-hide');\n }\n else {\n addClass(this.element.querySelectorAll('.e-clone-grp-btn'), 'e-button-hide');\n }\n }\n if (!isNullOrUndefined(newProp.showButtons.cloneRule)) {\n if (newProp.showButtons.cloneRule) {\n removeClass(this.element.querySelectorAll('.e-clone-rule-btn'), 'e-button-hide');\n }\n else {\n addClass(this.element.querySelectorAll('.e-clone-rule-btn'), 'e-button-hide');\n }\n }\n if (!isNullOrUndefined(newProp.showButtons.ruleDelete)) {\n if (newProp.showButtons.ruleDelete) {\n removeClass(this.element.querySelectorAll('.e-rule-delete'), 'e-button-hide');\n }\n else {\n addClass(this.element.querySelectorAll('.e-rule-delete'), 'e-button-hide');\n }\n }\n if (!isNullOrUndefined(newProp.showButtons.groupDelete)) {\n if (newProp.showButtons.groupDelete) {\n removeClass(this.element.querySelectorAll('.e-deletegroup'), 'e-button-hide');\n }\n else {\n addClass(this.element.querySelectorAll('.e-deletegroup'), 'e-button-hide');\n }\n }\n break;\n case 'cssClass':\n if (oldProp.cssClass) {\n removeClass([this.element], oldProp.cssClass.split(' '));\n }\n if (newProp.cssClass) {\n addClass([this.element], newProp.cssClass.replace(/\\s+/g, ' ').trim().split(' '));\n }\n break;\n case 'enableRtl':\n if (newProp.enableRtl) {\n addClass([this.element], 'e-rtl');\n this.notGroupRtl();\n }\n else {\n removeClass([this.element], 'e-rtl');\n this.notGroupRtl();\n }\n break;\n case 'enablePersistence':\n this.enablePersistence = newProp.enablePersistence;\n break;\n case 'dataSource':\n this.dataSource = newProp.dataSource;\n this.refresh();\n break;\n case 'columns':\n this.columns = newProp.columns;\n this.columnSort();\n this.updateSubFieldsFromColumns(this.columns);\n break;\n case 'sortDirection':\n this.sortDirection = newProp.sortDirection;\n this.columnSort();\n break;\n case 'maxGroupCount':\n this.maxGroupCount = newProp.maxGroupCount;\n break;\n case 'height':\n this.height = newProp.height;\n this.element.style.height = this.height;\n break;\n case 'rule':\n if (this.rule.rules.length === 0 && !isNullOrUndefined(this.rule)) {\n this.reset();\n }\n this.setProperties({ rule: newProp.rule }, true);\n newProp.rule = this.getRuleCollection(this.rule, false);\n this.setRules(this.rule);\n break;\n case 'width':\n this.width = newProp.width;\n this.element.style.width = this.width;\n break;\n case 'locale':\n this.locale = newProp.locale;\n this.intl = new Internationalization(this.locale);\n this.isLocale = true;\n this.refresh();\n this.isLocale = false;\n break;\n case 'enableNotCondition':\n this.onChangeNotGroup();\n break;\n case 'readonly':\n this.isReadonly = newProp.readonly;\n this.enableReadonly();\n break;\n case 'allowDragAndDrop':\n this.allowDragAndDrop = newProp.allowDragAndDrop;\n this.refresh();\n break;\n case 'enableSeparateConnector':\n this.enableSeparateConnector = newProp.enableSeparateConnector;\n this.refresh();\n break;\n }\n }\n };\n QueryBuilder.prototype.preRender = function () {\n this.element.id = this.element.id || getUniqueID('ej2-querybuilder');\n this.defaultLocale = {\n StartsWith: 'Starts With',\n DoesNotStartWith: 'Does Not Start With',\n EndsWith: 'Ends With',\n DoesNotEndWith: 'Does Not End With',\n Contains: 'Contains',\n DoesNotContain: 'Does Not Contain',\n NotLike: 'Not Like',\n Like: 'Like',\n Equal: 'Equal',\n NotEqual: 'Not Equal',\n LessThan: 'Less Than',\n LessThanOrEqual: 'Less Than Or Equal',\n GreaterThan: 'Greater Than',\n GreaterThanOrEqual: 'Greater Than Or Equal',\n Between: 'Between',\n NotBetween: 'Not Between',\n In: 'In',\n NotIn: 'Not In',\n Remove: 'REMOVE',\n SelectField: 'Select a field',\n SelectOperator: 'Select operator',\n DeleteRule: 'Remove this condition',\n DeleteGroup: 'Delete group',\n AddGroup: 'Add Group',\n AddCondition: 'Add Condition',\n Edit: 'EDIT',\n ValidationMessage: 'This field is required',\n SummaryViewTitle: 'Summary View',\n OtherFields: 'Other Fields',\n AND: 'AND',\n OR: 'OR',\n NOT: 'NOT',\n SelectValue: 'Enter Value',\n IsEmpty: 'Is Empty',\n IsNotEmpty: 'Is Not Empty',\n IsNull: 'Is Null',\n IsNotNull: 'Is Not Null',\n True: 'true',\n False: 'false',\n AddButton: 'Add Group/Condition',\n CloneGroup: 'Clone Group',\n LockGroup: 'Lock Group',\n CloneRule: 'Clone Rule',\n LockRule: 'Lock Rule',\n UnlockRule: 'Unlock Rule',\n UnlockGroup: 'Unlock Group'\n };\n this.l10n = new L10n('querybuilder', this.defaultLocale, this.locale);\n this.intl = new Internationalization(this.locale);\n this.groupIdCounter = 0;\n this.subFilterCounter = 0;\n this.ruleIdCounter = 0;\n this.btnGroupId = 0;\n this.isImportRules = false;\n this.parser = [];\n this.customOperators = {\n stringOperator: [\n { value: 'startswith', key: this.l10n.getConstant('StartsWith') },\n { value: 'notstartswith', key: this.l10n.getConstant('DoesNotStartWith') },\n { value: 'endswith', key: this.l10n.getConstant('EndsWith') },\n { value: 'notendswith', key: this.l10n.getConstant('DoesNotEndWith') },\n { value: 'contains', key: this.l10n.getConstant('Contains') },\n { value: 'notcontains', key: this.l10n.getConstant('DoesNotContain') },\n { value: 'equal', key: this.l10n.getConstant('Equal') },\n { value: 'notequal', key: this.l10n.getConstant('NotEqual') },\n { value: 'in', key: this.l10n.getConstant('In') },\n { value: 'notin', key: this.l10n.getConstant('NotIn') },\n { value: 'isempty', key: this.l10n.getConstant('IsEmpty') },\n { value: 'isnotempty', key: this.l10n.getConstant('IsNotEmpty') }\n ],\n dateOperator: [\n { value: 'equal', key: this.l10n.getConstant('Equal') },\n { value: 'greaterthan', key: this.l10n.getConstant('GreaterThan') },\n { value: 'greaterthanorequal', key: this.l10n.getConstant('GreaterThanOrEqual') },\n { value: 'lessthan', key: this.l10n.getConstant('LessThan') },\n { value: 'lessthanorequal', key: this.l10n.getConstant('LessThanOrEqual') },\n { value: 'notequal', key: this.l10n.getConstant('NotEqual') },\n { value: 'between', key: this.l10n.getConstant('Between') },\n { value: 'notbetween', key: this.l10n.getConstant('NotBetween') }\n ],\n booleanOperator: [\n { value: 'equal', key: this.l10n.getConstant('Equal') },\n { value: 'notequal', key: this.l10n.getConstant('NotEqual') }\n ],\n numberOperator: [\n { value: 'equal', key: this.l10n.getConstant('Equal') },\n { value: 'greaterthanorequal', key: this.l10n.getConstant('GreaterThanOrEqual') },\n { value: 'greaterthan', key: this.l10n.getConstant('GreaterThan') },\n { value: 'between', key: this.l10n.getConstant('Between') },\n { value: 'lessthan', key: this.l10n.getConstant('LessThan') },\n { value: 'notbetween', key: this.l10n.getConstant('NotBetween') },\n { value: 'lessthanorequal', key: this.l10n.getConstant('LessThanOrEqual') },\n { value: 'notequal', key: this.l10n.getConstant('NotEqual') },\n { value: 'in', key: this.l10n.getConstant('In') },\n { value: 'notin', key: this.l10n.getConstant('NotIn') }\n ]\n };\n this.operators = {\n equal: '=', notequal: '!=', greaterthan: '>', greaterthanorequal: '>=', lessthan: '<', in: 'IN', notin: 'NOT IN',\n lessthanorequal: '<=', startswith: 'LIKE', endswith: 'LIKE', between: 'BETWEEN', notbetween: 'NOT BETWEEN', contains: 'LIKE',\n isnull: 'IS NULL', isnotnull: 'IS NOT NULL', isempty: 'IS EMPTY', isnotempty: 'IS NOT EMPTY', notstartswith: 'NOT LIKE',\n notendswith: 'NOT LIKE', notcontains: 'NOT LIKE'\n };\n this.sqlOperators = {\n equal: '=', notequal: '!=', greaterthan: '>', greaterthanorequal: '>=', lessthan: '<', in: this.l10n.getConstant('In').toUpperCase(),\n notin: this.l10n.getConstant('NotIn').toUpperCase(), lessthanorequal: '<=', startswith: this.l10n.getConstant('Like').toUpperCase(),\n endswith: this.l10n.getConstant('Like').toUpperCase(), between: this.l10n.getConstant('Between').toUpperCase(),\n notbetween: this.l10n.getConstant('NotBetween').toUpperCase(), contains: this.l10n.getConstant('Like').toUpperCase(),\n isnull: this.l10n.getConstant('IsNull').toUpperCase(), isnotnull: this.l10n.getConstant('IsNotNull').toUpperCase(),\n isempty: this.l10n.getConstant('IsEmpty').toUpperCase(), isnotempty: this.l10n.getConstant('IsNotEmpty').toUpperCase(),\n notstartswith: this.l10n.getConstant('NotLike').toUpperCase(), notendswith: this.l10n.getConstant('NotLike').toUpperCase(),\n notcontains: this.l10n.getConstant('NotLike').toUpperCase()\n };\n if (!this.fields) {\n this.fields = { text: 'label', value: 'field' };\n }\n };\n QueryBuilder.prototype.render = function () {\n this.levelColl = {};\n this.items = [\n {\n text: this.l10n.getConstant('AddGroup'),\n iconCss: 'e-icons e-add-icon e-addgroup'\n },\n {\n text: this.l10n.getConstant('AddCondition'),\n iconCss: 'e-icons e-add-icon e-addrule'\n }\n ];\n this.ruleElem = this.ruleTemplate();\n this.groupElem = this.groupTemplate();\n var stringOper = [\n { value: 'isnull', key: this.l10n.getConstant('IsNull') },\n { value: 'isnotnull', key: this.l10n.getConstant('IsNotNull') }\n ];\n var numberOper = [\n { value: 'isnull', key: this.l10n.getConstant('IsNull') },\n { value: 'isnotnull', key: this.l10n.getConstant('IsNotNull') }\n ];\n this.customOperators['stringOperator'] = this.customOperators['stringOperator'].concat(stringOper); // tslint:disable-line\n this.customOperators['numberOperator'] = this.customOperators['numberOperator'].concat(numberOper); // tslint:disable-line\n if (this.dataSource instanceof DataManager) {\n this.dataManager = this.dataSource;\n this.executeDataManager(new Query().take(1));\n }\n else {\n this.dataManager = new DataManager(this.dataSource);\n this.dataColl = this.dataManager.executeLocal(new Query());\n this.initControl();\n }\n this.renderComplete();\n if (this.allowDragAndDrop) {\n this.initializeDrag();\n }\n };\n QueryBuilder.prototype.initializeDrag = function () {\n this.draggable = new Draggable(this.element, {\n dragTarget: '.e-drag-qb-rule',\n distance: 5,\n helper: this.helper.bind(this),\n dragStart: this.dragStartHandler.bind(this),\n drag: this.dragHandler.bind(this),\n dragStop: this.dragStopHandler.bind(this),\n isReplaceDragEle: true,\n isPreventSelect: false,\n abort: '.e-parent-header',\n isDragScroll: true\n });\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n QueryBuilder.prototype.helper = function (e) {\n var target = this.draggable.currentStateTarget;\n if (!target.classList.contains('e-drag-qb-rule') || (target.classList.contains('e-drag-qb-rule') && closest(target, '.e-disable'))) {\n return false;\n }\n var visualElement = this.createElement('div', {\n className: 'e-cloneproperties e-draganddrop e-dragclone',\n styles: 'height:\"auto\", z-index:2, width:' + this.element.offsetWidth\n });\n var cloneElement;\n if (this.draggable.currentStateTarget.parentElement.classList.contains('e-group-header')) {\n cloneElement = closest(target, '.e-group-container').cloneNode(true);\n closest(target, '.e-group-container').classList.add('e-qb-dragging-rule');\n }\n else {\n visualElement.classList.add('e-group-body');\n cloneElement = this.createElement('div', { className: 'e-rule-container' });\n var ruleElement = closest(target, '.e-rule-field').cloneNode(true);\n cloneElement.appendChild(ruleElement);\n closest(target, '.e-rule-field').classList.add('e-qb-dragging-rule');\n }\n visualElement.appendChild(cloneElement);\n var childElements = visualElement.querySelectorAll('*');\n childElements.forEach(function (child) {\n child.removeAttribute('id');\n });\n this.element.appendChild(visualElement);\n return visualElement;\n };\n QueryBuilder.prototype.dragStartHandler = function (e) {\n this.draggedRule = e.target;\n this.isDragEventPrevent = false;\n document.body.classList.add('e-prevent-select');\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this.dragElement = e.dragElement;\n var rule = closest(e.target, '.e-rule-container');\n var group = closest(e.target, '.e-group-container');\n var dragEventArgs = { dragRuleID: rule !== null ? rule.id : group.id, dragGroupID: group.id, cancel: false };\n this.trigger('dragStart', dragEventArgs);\n this.isDragEventPrevent = dragEventArgs.cancel;\n };\n QueryBuilder.prototype.dragHandler = function (e) {\n if (this.isDragEventPrevent) {\n return;\n }\n var borderLineElem = this.element.querySelectorAll('.e-drag-rule-bottom-line');\n borderLineElem.forEach(function (ele) {\n ele.classList.remove('e-drag-rule-bottom-line');\n });\n borderLineElem = this.element.querySelectorAll('.e-drag-rule-top-line');\n borderLineElem.forEach(function (ele) {\n ele.classList.remove('e-drag-rule-top-line');\n });\n if (isNullOrUndefined(e.target)) {\n return;\n }\n if (e.target.nodeName === 'HTML' || closest(e.target, '.e-qb-dragging-rule') || closest(e.target, '.e-group-header') ||\n !closest(e.target, '#' + this.element.id) || closest(e.target, '.e-disable') || (e.target.parentElement && e.target.parentElement.classList.contains('e-btn-group') && this.enableSeparateConnector)) {\n this.dragElement.classList.add('e-notallowedcur');\n return;\n }\n else {\n this.dragElement.classList.remove('e-notallowedcur');\n }\n var targetElem = closest(e.target, '.e-rule-container');\n var grpElem = closest(e.target, '.e-group-container');\n if (targetElem) {\n var rect = targetElem.getBoundingClientRect();\n var mouseY = e.event.clientY || e.event.changedTouches[0].clientY;\n var distanceToTop = mouseY - rect.top;\n var distanceToBottom = rect.bottom - mouseY;\n var threshold = 20; // Adjust as needed\n if (distanceToTop < threshold) {\n targetElem.classList.add('e-drag-rule-top-line');\n }\n else if (distanceToBottom < threshold) {\n targetElem.classList.add('e-drag-rule-bottom-line');\n }\n }\n else if (e.target.classList.contains('e-rule-list') && e.target.children.length === 0) {\n e.target.classList.add('e-drag-rule-bottom-line');\n }\n else if (e.target.classList.contains('e-rule-list') && e.target.children[0].classList.contains('e-group-container')) {\n var rect = e.target.children[0].getBoundingClientRect();\n var mouseY = e.event.clientY || e.event.changedTouches[0].clientY;\n var distanceToTop = mouseY - rect.top;\n var threshold = 20; // Adjust as needed\n if (distanceToTop < threshold) {\n e.target.classList.add('e-drag-rule-top-line');\n }\n }\n else if (closest(e.target, '.e-group-container') || e.target.classList.contains('e-group-container')) {\n if (!grpElem) {\n grpElem = e.target;\n }\n if (grpElem.id.indexOf('group0') > -1) {\n var rect = e.target.getBoundingClientRect();\n var mouseY = e.event.clientY || e.event.changedTouches[0].clientY;\n var distanceToBottom = rect.bottom - mouseY;\n var threshold = 20; // Adjust as needed\n if (distanceToBottom < threshold) {\n e.target.classList.add('e-drag-rule-bottom-line');\n }\n }\n }\n var dragEventArgs = { dragRuleID: targetElem !== null ? targetElem.id : grpElem !== null ? grpElem.id : null,\n dragGroupID: grpElem !== null ? grpElem.id : null, cancel: false };\n this.trigger('drag', dragEventArgs);\n this.isDragEventPrevent = dragEventArgs.cancel;\n };\n QueryBuilder.prototype.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 this.isValueEmpty = true;\n if (!currentRule) {\n currentRule = this.getRules();\n }\n var ruleCondtion = currentRule.condition;\n var notCondition = currentRule.not;\n var ruleColl = extend([], currentRule.rules, [], true);\n var rule = !isNullOrUndefined(currentRule.isLocked) ?\n this.getRuleCollection({ condition: ruleCondtion, rules: ruleColl, not: notCondition, isLocked: currentRule.isLocked }, true) :\n this.getRuleCollection({ condition: ruleCondtion, rules: ruleColl, not: notCondition }, true);\n this.isValueEmpty = false;\n return rule;\n };\n QueryBuilder.prototype.getRuleCollection = function (rule, isValidRule) {\n if (isNullOrUndefined(rule)) {\n return null;\n }\n var orgRule;\n if (rule.rules && rule.rules.length && (Object.keys(rule.rules[0]).length > 6 || isValidRule)) {\n var jLen = rule.rules.length;\n for (var j = 0; j < jLen; j++) {\n orgRule = rule.rules[j];\n orgRule = this.getRuleCollection(orgRule, isValidRule);\n rule.rules[j] = orgRule;\n if (Object.keys(orgRule).length < 1 && isValidRule) {\n rule.rules.splice(j, 1);\n j--;\n jLen--;\n }\n }\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var customObj = rule.custom;\n if ((rule.field && rule.field !== '') && (isNullOrUndefined(customObj) || (customObj && (customObj.type !== 'question' &&\n customObj.type !== 'answer')))) {\n if (rule.operator) {\n if (rule.operator.toString().indexOf('null') > -1 || rule.operator.toString().indexOf('empty') > -1) {\n rule.value = null;\n }\n }\n if ((this.isRefreshed && this.enablePersistence) || (rule.field !== '' && rule.operator !== '' &&\n (this.isValueEmpty ? rule.value !== '' && rule.value !== undefined : rule.value !== undefined)) ||\n (customObj && customObj.isQuestion)) {\n var condition = rule.condition;\n var lockedRule = rule.isLocked;\n rule = { 'label': rule.label, 'field': rule.field, 'operator': rule.operator, 'type': rule.type, 'value': rule.value };\n if (!isNullOrUndefined(lockedRule)) {\n rule.isLocked = lockedRule;\n }\n if (condition) {\n rule.condition = condition;\n }\n if (customObj) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n rule.custom = customObj;\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if ((rule.operator === 'in' || rule.operator === 'notin') && rule.value && rule.value.length === 0) {\n rule = {};\n }\n }\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 if (this.enableSeparateConnector) {\n condition = rules.rules[j].condition;\n }\n }\n else {\n var rule = rules.rules[j];\n var valueStr = '';\n var ruleOpertor = sqlLocale ? this.sqlOperators[rule.operator] : this.operators[rule.operator];\n if (rule.value instanceof Array) {\n if (rule.operator.toString().indexOf('between') > -1) {\n var ruleCondition = sqlLocale ? ' ' + this.l10n.getConstant('AND').toUpperCase() + ' ' : ' ' + 'AND' + ' ';\n if (rule.type === 'date' && !this.isDateFunction(rule.value[0])) {\n valueStr += '\"' + rule.value[0] + '\"' + ruleCondition + '\"' + rule.value[1] + '\"';\n }\n else {\n valueStr += rule.value[0] + ruleCondition + rule.value[1];\n }\n }\n else {\n if (typeof rule.value[0] === 'string' && rule.value !== null) {\n valueStr += '(\"' + rule.value[0] + '\"';\n for (var k = 1, kLen = rule.value.length; k < kLen; k++) {\n valueStr += ',\"' + rule.value[k] + '\"';\n }\n valueStr += ')';\n }\n else {\n valueStr += '(' + rule.value + ')';\n }\n }\n }\n else {\n if (rule.operator.toString().indexOf('startswith') > -1) {\n valueStr += rule.value ? '(\"' + rule.value + '%\")' : '(' + rule.value + ')';\n }\n else if (rule.operator.toString().indexOf('endswith') > -1) {\n valueStr += rule.value ? '(\"%' + rule.value + '\")' : '(' + rule.value + ')';\n }\n else if (rule.operator.toString().indexOf('contains') > -1) {\n valueStr += rule.value ? '(\"%' + rule.value + '%\")' : '(' + rule.value + ')';\n }\n else {\n if (rule.type === 'number' || typeof rule.value === 'boolean' ||\n (rule.value === null && (rule.operator.toString().indexOf('empty') < -1))) {\n valueStr += rule.value;\n }\n else if (rule.operator.toString().indexOf('empty') > -1) {\n valueStr += '\"\"';\n }\n else {\n valueStr += '\"' + rule.value + '\"';\n }\n }\n }\n if (rule.operator.toString().indexOf('null') > -1) {\n if (enableEscape) {\n rule.field = '`' + rule.field + '`';\n }\n else {\n if (rule.field.indexOf(' ') > -1) {\n rule.field = '\"' + rule.field + '\"';\n }\n }\n queryStr += rule.field + ' ' + ruleOpertor;\n }\n else {\n var custOper = ruleOpertor;\n if (rule.operator === 'isempty') {\n custOper = '=';\n }\n else if (rule.operator === 'isnotempty') {\n custOper = '!=';\n }\n if (enableEscape) {\n rule.field = '`' + rule.field + '`';\n }\n else {\n if (rule.field.indexOf(' ') > -1) {\n rule.field = '\"' + rule.field + '\"';\n }\n }\n queryStr += rule.field + ' ' + custOper + ' ' + valueStr;\n }\n if (rule.condition && rule.condition !== '') {\n condition = rule.condition;\n }\n }\n if (j !== jLen - 1) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var rule = rules.rules[j];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (condition === '' || (rule && rule.condition !== '' && rule.custom && rule.custom.isCustom)) {\n condition = rule.condition;\n }\n if (condition) {\n condition = sqlLocale ? this.l10n.getConstant(condition.toUpperCase()).toUpperCase() : condition.toUpperCase();\n queryStr += ' ' + condition + ' ';\n }\n }\n }\n }\n if (!isRoot) {\n queryStr += ')';\n }\n if (rules.not) {\n queryStr += ')';\n }\n return queryStr;\n };\n /**\n * Sets the rules from the sql query.\n *\n * @param {string} sqlString - 'sql String' to be passed to set the rule.\n * @param {boolean} sqlLocale - Optional. Set `true` if Localization for Sql query.\n * @returns {void}\n */\n QueryBuilder.prototype.setRulesFromSql = function (sqlString, sqlLocale) {\n sqlString = sqlString.replace(/`/g, '');\n var ruleModel = this.getRulesFromSql(sqlString, sqlLocale);\n this.setRules({ condition: ruleModel.condition, not: ruleModel.not, rules: ruleModel.rules });\n };\n /**\n * Get the rules from SQL query.\n *\n * @param {string} sqlString - 'sql String' to be passed to get the rule.\n * @param {boolean} sqlLocale - Set `true` if Localization for Sql query.\n * @returns {object} - Rules from SQL query\n */\n QueryBuilder.prototype.getRulesFromSql = function (sqlString, sqlLocale) {\n this.parser = [];\n this.sqlParser(sqlString, sqlLocale);\n this.setProperties({ rule: { condition: 'and', not: false, rules: [] } }, true);\n var rule = this.processParser(this.parser, this.rule, [0], sqlLocale);\n if (this.enableNotCondition) {\n return { condition: rule.condition, not: rule.not, rules: rule.rules };\n }\n else {\n return { condition: rule.condition, rules: rule.rules };\n }\n };\n /**\n * Gets the sql query from rules.\n *\n * @param {RuleModel} rule - 'rule' to be passed to get the sql.\n * @param {boolean} allowEscape - Set `true` if it exclude the escape character.\n * @param {boolean} sqlLocale - Set `true` if Localization for Sql query.\n * @returns {string} - Sql query from rules.\n */\n QueryBuilder.prototype.getSqlFromRules = function (rule, allowEscape, sqlLocale) {\n if (!rule) {\n rule = this.getValidRules();\n }\n rule = this.getRuleCollection(rule, false);\n var sqlString = this.getSqlString(this.getValidRules(rule), allowEscape, null, sqlLocale).replace(/\"/g, '\\'');\n return sqlString;\n };\n /**\n * Gets the parameter SQL query from rules.\n *\n * @param {RuleModel} rule – Specify the rule to be passed to get the parameter sql string.\n * @returns {ParameterizedSql} – Parameterized SQL query from rules.\n */\n QueryBuilder.prototype.getParameterizedSql = function (rule) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.moduleLoader.loadedModules.length) {\n if (!rule) {\n rule = this.getValidRules();\n }\n var obj = { sql: null };\n this.notify('query-library', { prop: 'getParameterSql', onPropertyChange: false, value: { rule: rule, obj: obj } });\n return obj['sql'];\n }\n else {\n console.warn('[WARNING] :: Module \"query-library\" is not available in QueryBuilder component! You either misspelled the module name or forgot to load it.');\n }\n return null;\n };\n /**\n * Sets the rules from the parameter sql query.\n *\n * @param { ParameterizedSql} sqlQuery – Specifies the parameter SQL to be passed to set the rule and load it to the query builder.\n * @returns {void}\n */\n QueryBuilder.prototype.setParameterizedSql = function (sqlQuery) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.moduleLoader.loadedModules.length) {\n var obj = { sql: null };\n this.notify('query-library', { prop: 'convertParamSqlToSql', onPropertyChange: false, value: { sql: sqlQuery, obj: obj } });\n var sql = obj['sql'];\n if (sql) {\n sql = sql.replace(/`/g, '');\n var ruleModel = this.getRulesFromSql(sql);\n this.setRules({ condition: ruleModel.condition, not: ruleModel.not, rules: ruleModel.rules });\n }\n }\n else {\n console.warn('[WARNING] :: Module \"query-library\" is not available in QueryBuilder component! You either misspelled the module name or forgot to load it.');\n }\n };\n /**\n * Gets the named parameter SQL query from rules.\n *\n * @param {RuleModel} rule – Specify the rule to be passed to get the named parameter SQL string.\n * @returns {ParameterizedNamedSql} – Parameterized Named SQL query from rules.\n */\n QueryBuilder.prototype.getParameterizedNamedSql = function (rule) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.moduleLoader.loadedModules.length) {\n if (!rule) {\n rule = this.getValidRules();\n }\n var obj = { sql: null };\n this.notify('query-library', { prop: 'getNamedParameterSql', onPropertyChange: false, value: { rule: rule, obj: obj } });\n return obj['sql'];\n }\n else {\n console.warn('[WARNING] :: Module \"query-library\" is not available in QueryBuilder component! You either misspelled the module name or forgot to load it.');\n }\n return null;\n };\n /**\n * Sets the rules from the named parameter SQL query.\n *\n * @param { ParameterizedNamedSql } sqlQuery – Specifies the named parameter SQL to be passed to set the rule and load it to the query builder.\n * @returns {void}\n */\n QueryBuilder.prototype.setParameterizedNamedSql = function (sqlQuery) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.moduleLoader.loadedModules.length) {\n var obj = { sql: null };\n this.notify('query-library', { prop: 'convertNamedParamSqlToSql', onPropertyChange: false, value: { sql: sqlQuery, obj: obj } });\n var sql = obj['sql'];\n if (sql) {\n sql = sql.replace(/`/g, '');\n var ruleModel = this.getRulesFromSql(sql);\n this.setRules({ condition: ruleModel.condition, not: ruleModel.not, rules: ruleModel.rules });\n }\n }\n else {\n console.warn('[WARNING] :: Module \"query-library\" is not available in QueryBuilder component! You either misspelled the module name or forgot to load it.');\n }\n };\n /**\n * Set the rules from Mongo query.\n *\n * @param {string} mongoQuery - 'sql String' to be passed to get the rule.\n * @param {boolean} mongoLocale - Set `true` if Localization for Mongo query.\n * @returns {void}\n */\n QueryBuilder.prototype.setMongoQuery = function (mongoQuery, mongoLocale) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.moduleLoader.loadedModules.length) {\n this.rule = { condition: 'and', not: false, rules: [] };\n this.notify('query-library', { prop: 'mongoParser', onPropertyChange: false, value: { mongoQuery: JSON.parse(mongoQuery), rule: this.rule, mongoLocale: mongoLocale } });\n }\n else {\n console.warn('[WARNING] :: Module \"query-library\" is not available in QueryBuilder component! You either misspelled the module name or forgot to load it.');\n }\n };\n /**\n * Gets the Mongo query from rules.\n *\n * @param {RuleModel} rule - 'rule' to be passed to get the sql.\n * @returns {object} - Sql query from rules.\n */\n QueryBuilder.prototype.getMongoQuery = function (rule) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.moduleLoader.loadedModules.length) {\n if (!rule) {\n rule = this.getValidRules();\n }\n var obj = { mongoQuery: null };\n this.notify('query-library', { prop: 'getMongoFromRules', onPropertyChange: false, value: { rule: rule, mongoQuery: '', obj: obj } });\n return obj['mongoQuery'];\n }\n else {\n console.warn('[WARNING] :: Module \"query-library\" is not available in QueryBuilder component! You either misspelled the module name or forgot to load it.');\n }\n return '';\n };\n /**\n * Clones the rule based on the rule ID to the specific group.\n *\n * @param {string} ruleID - Specifies the ruleID that needs to be cloned.\n * @param {string} groupID - Specifies the groupID in which the rule to be cloned.\n * @param {number} index - Specifies the index to insert the cloned rule inside the group.\n * @returns {void}\n */\n QueryBuilder.prototype.cloneRule = function (ruleID, groupID, index) {\n var getRule = this.getRule(ruleID.replace(this.element.id + '_', ''));\n var isCloneRule = this.showButtons.cloneRule;\n groupID = groupID.replace(this.element.id + '_', '');\n this.ruleIndex = index;\n this.cloneRuleBtnClick = true;\n this.showButtons.cloneRule = true;\n this.addRules([{\n 'label': getRule.label, 'field': getRule.field, 'type': getRule.type, 'operator': getRule.operator,\n 'value': getRule.value, 'condition': getRule.condition\n }], groupID);\n this.ruleIndex = -1;\n this.cloneRuleBtnClick = false;\n this.showButtons.cloneRule = isCloneRule;\n isCloneRule = false;\n };\n /**\n * Clones the group based on the group ID to the specific group.\n *\n * @param {string} groupID - Specifies the groupID that needs to be cloned.\n * @param {string} parentGroupID - Specifies the parentGroupID in which the group to be cloned.\n * @param {number} index - Specifies the index to insert the cloned group inside the parent group.\n * @returns {void}\n */\n QueryBuilder.prototype.cloneGroup = function (groupID, parentGroupID, index) {\n parentGroupID = parentGroupID.replace(this.element.id + '_', '');\n var group = this.getGroup(parentGroupID);\n var isCloneGroup = this.showButtons.cloneGroup;\n groupID = groupID.replace(this.element.id + '_', '');\n this.groupIndex = index;\n this.cloneGrpBtnClick = true;\n this.showButtons.cloneGroup = true;\n this.addGroups([{ 'condition': group.condition, 'not': group.not, 'rules': group.rules }], groupID);\n this.groupIndex = -1;\n this.cloneGrpBtnClick = false;\n this.showButtons.cloneGroup = isCloneGroup;\n isCloneGroup = false;\n };\n /**\n * Locks the rule based on the rule ID.\n *\n * @param {string} ruleID - Specifies the ruleID that needs to be locked.\n * @returns {void}\n */\n QueryBuilder.prototype.lockRule = function (ruleID) {\n if (ruleID.indexOf(this.element.id) < 0) {\n ruleID = this.element.id + '_' + ruleID;\n }\n var target = document.getElementById(ruleID).querySelectorAll('.e-lock-rule-btn')[0];\n this.ruleLock(target);\n };\n /**\n * Locks the group based on the group ID\n *\n * @param {string} groupID - Specifies the groupID that needs to be locked.\n * @returns {void}\n */\n QueryBuilder.prototype.lockGroup = function (groupID) {\n if (groupID.indexOf(this.element.id) < 0) {\n groupID = this.element.id + '_' + groupID;\n }\n var target = document.getElementById(groupID).querySelectorAll('.e-lock-grp-btn')[0];\n this.groupLock(target);\n };\n QueryBuilder.prototype.sqlParser = function (sqlString, sqlLocale) {\n var st = 0;\n var str;\n do {\n str = sqlString.slice(st);\n st += this.parseSqlStrings(str, sqlLocale);\n } while (str !== '');\n return this.parser;\n };\n QueryBuilder.prototype.parseSqlStrings = function (sqlString, sqlLocale) {\n var operators = ['=', '!=', '<=', '>=', '<', '>'];\n var conditions;\n if (sqlLocale) {\n conditions = [this.l10n.getConstant('AND').toUpperCase(), this.l10n.getConstant('OR').toUpperCase(), this.l10n.getConstant('NOT').toUpperCase()];\n }\n else {\n conditions = ['AND', 'OR', 'NOT'];\n }\n var subOp;\n if (sqlLocale) {\n subOp = [this.l10n.getConstant('In').toUpperCase(), this.l10n.getConstant('NotIn').toUpperCase(),\n this.l10n.getConstant('Like').toUpperCase(), this.l10n.getConstant('NotLike').toUpperCase(),\n this.l10n.getConstant('Between').toUpperCase(), this.l10n.getConstant('NotBetween').toUpperCase(),\n this.l10n.getConstant('IsNull').toUpperCase(), this.l10n.getConstant('IsNotNull').toUpperCase(),\n this.l10n.getConstant('IsEmpty').toUpperCase(), this.l10n.getConstant('IsNotEmpty').toUpperCase()];\n }\n else {\n subOp = ['IN', 'NOT IN', 'LIKE', 'NOT LIKE', 'BETWEEN', 'NOT BETWEEN', 'IS NULL', 'IS NOT NULL', 'IS EMPTY', 'IS NOT EMPTY'];\n }\n var regexStr;\n var regex;\n var matchValue;\n for (var i = 0, iLen = operators.length; i < iLen; i++) {\n regexStr = /^\\w+$/.test(operators[i]) ? '\\\\b' : '';\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var regExp = RegExp;\n regex = new regExp('^(' + operators[i] + ')' + regexStr, 'ig');\n if (regex.exec(sqlString)) {\n this.parser.push(['Operators', operators[i].toLowerCase()]);\n return operators[i].length;\n }\n }\n var lastPasrser = this.parser[this.parser.length - 1];\n if (!lastPasrser || (lastPasrser && lastPasrser[0] !== 'Literal')) {\n for (var i = 0, iLen = conditions.length; i < iLen; i++) {\n regexStr = /^\\w+$/.test(conditions[i]) ? '\\\\b' : '';\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var regExp = RegExp;\n regex = new regExp('^(' + conditions[i] + ')' + regexStr, 'ig');\n if (regex.exec(sqlString)) {\n this.parser.push(['Conditions', conditions[i].toLowerCase()]);\n return conditions[i].length;\n }\n }\n }\n for (var i = 0, iLen = subOp.length; i < iLen; i++) {\n regexStr = /^\\w+$/.test(subOp[i]) ? '\\\\b' : '';\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var regExp = RegExp;\n regex = new regExp('^(' + subOp[i] + ')' + regexStr, 'ig');\n if (regex.exec(sqlString)) {\n this.parser.push(['SubOperators', subOp[i].toLowerCase()]);\n return subOp[i].length;\n }\n }\n //Left Parenthesis\n if (/^\\(/.exec(sqlString)) {\n this.parser.push(['Left', '(']);\n return 1;\n }\n //Right Parenthesis\n if (/^\\)/.exec(sqlString)) {\n this.parser.push(['Right', ')']);\n return 1;\n }\n //Boolean\n if (/^(true|false)/.exec(sqlString)) {\n matchValue = /^(true|false)/.exec(sqlString)[0];\n this.parser.push(['String', matchValue]);\n return matchValue.length;\n }\n //Null\n if (/^null/.exec(sqlString)) {\n matchValue = /^null/.exec(sqlString)[0];\n this.parser.push(['String', null]);\n return matchValue.length;\n }\n if (/^`?([a-z_][a-z0-9_.\\\\[\\]\\\\(\\\\)]{0,}(\\\\:(number|float|string|date|boolean))?)`?/i.exec(sqlString)) {\n matchValue = /^`?([a-z_][a-z0-9_.\\\\[\\]\\\\(\\\\)]{0,}(\\\\:(number|float|string|date|boolean))?)`?/i.exec(sqlString)[1];\n this.parser.push(['Literal', matchValue]);\n return matchValue.length;\n }\n if (this.checkLiteral() && /^'?([a-z_][a-z0-9 _.\\\\[\\]\\\\(\\\\)-]{0,}(\\\\:(number|float|string|date|boolean))?)'?/i.exec(sqlString)) {\n matchValue = /^'?([a-z_][a-z0-9 _.\\\\[\\]\\\\(\\\\)-]{0,}(\\\\:(number|float|string|date|boolean))?)'?/i.exec(sqlString)[1];\n this.parser.push(['Literal', matchValue]);\n return matchValue.length + 2;\n }\n if (this.checkNumberLiteral(sqlString, sqlLocale)) {\n 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 var isNotOpened = false;\n for (var i = 0, iLen = parser.length; i < iLen; i++) {\n if (parser[i][0] === 'Literal') {\n var column = this.getColumn(parser[i][1]);\n rule = { label: (column && column.label) ? column.label : parser[i][1], field: parser[i][1] };\n if (parser[i + 1][0] === 'SubOperators') {\n if (parser[i + 1][1].indexOf('null') > -1 || parser[i + 1][1].indexOf('empty') > -1) {\n rule.operator = this.getOperator(' ', parser[i + 1][1], sqlLocale);\n rule.value = null;\n rule.type = this.getTypeFromColumn(rule);\n }\n else {\n var oper = parser[i + 3][1] ? parser[i + 3][1].replace(/'/g, '') : parser[i + 3][1];\n rule.operator = this.getOperator(oper, parser[i + 1][1], sqlLocale);\n }\n operator = parser[i + 1][1];\n i++;\n j = i + 1;\n jLen = iLen;\n if (sqlLocale && rule.operator === 'contains' || rule.operator === 'startswith' || rule.operator === 'endswith') {\n operator = 'like';\n }\n else if (sqlLocale && rule.operator === 'notcontains' || rule.operator === 'notstartswith' || rule.operator === 'notendswith') {\n operator = 'not like';\n }\n else if (sqlLocale) {\n operator = rule.operator;\n }\n for (j = i + 1; j < jLen; j++) {\n if (operator.indexOf('between') < 0 && parser[j][0] === 'Left') {\n isLeftOpened = true;\n }\n else if (parser[j][0] === 'Right' && isLeftOpened) {\n i = j;\n isLeftOpened = false;\n break;\n }\n else {\n if (operator.indexOf('null') > -1 || operator.indexOf('empty') > -1) {\n break;\n }\n if (operator.indexOf('like') > -1 && parser[j][0] === 'String') {\n var val = parser[j][1];\n if (parser[j][1] && parser[j][1][0] === '\\'') {\n val = parser[j][1].substring(1, parser[j][1].length - 1);\n }\n val = val ? val.replace(/%/g, '') : parser[j][1];\n rule.value = val;\n rule.type = 'string';\n }\n else if (operator.indexOf('between') > -1) {\n if (parser[j][0] === 'Literal' || parser[j][0] === 'Left') {\n break;\n }\n if (parser[j][0] === 'Number') {\n numVal.push(Number(parser[j][1]));\n }\n else if (parser[j][0] === 'String') {\n var val = parser[j][1];\n if (parser[j][1] && parser[j][1][0] === '\\'') {\n val = parser[j][1].substring(1, parser[j][1].length - 1);\n }\n strVal.push(val);\n }\n }\n else {\n if (parser[j][0] === 'Number') {\n numVal.push(Number(parser[j][1]));\n }\n else if (parser[j][0] === 'String') {\n var val = parser[j][1];\n if (parser[j][1] && parser[j][1][0] === '\\'') {\n val = parser[j][1].substring(1, parser[j][1].length - 1);\n }\n strVal.push(val);\n }\n }\n rule.type = this.getTypeFromColumn(rule);\n }\n }\n if (operator.indexOf('like') < 0) {\n if (parser[j - 1][0] === 'Number') {\n rule.value = numVal;\n rule.type = 'number';\n }\n else if (parser[j - 1][0] === 'String') {\n rule.value = strVal;\n rule.type = 'string';\n }\n else if (operator.indexOf('between') > -1 && parser[j - 1][0] === 'Conditions') {\n if (strVal.length !== 0) {\n rule.value = strVal;\n rule.type = 'string';\n }\n else {\n rule.value = numVal;\n rule.type = 'number';\n }\n }\n numVal = [];\n strVal = [];\n rule.type = this.getTypeFromColumn(rule);\n }\n if (this.enableSeparateConnector && parser[i + 1][0] === 'Conditions') {\n rule.condition = parser[i + 1][1];\n }\n }\n else if (parser[i + 1][0] === 'Operators') {\n rule.operator = this.getOperator(parser[i + 2][1], parser[i + 1][1], sqlLocale);\n if (rule.operator === 'equal' && parser[i + 2][0] === 'String' && parser[i + 2][1] === '\\'\\'') {\n rule.operator = 'isempty';\n }\n else if (rule.operator === 'notequal' && parser[i + 2][0] === 'String' && parser[i + 2][1] === '\\'\\'') {\n rule.operator = 'isnotempty';\n }\n if (parser[i + 2][0] === 'Number') {\n rule.type = 'number';\n rule.value = Number(parser[i + 2][1]);\n }\n else {\n rule.type = 'string';\n var val = parser[i + 2][1];\n if (val && val[0] === '\\'') {\n val = val.substring(1, val.length - 1);\n }\n rule.value = val;\n }\n if (this.enableSeparateConnector && parser[i + 3][0] === 'Conditions') {\n rule.condition = parser[i + 3][1];\n }\n rule.type = this.getTypeFromColumn(rule);\n }\n rules.rules.push(rule);\n }\n else if (parser[i][0] === 'Left') {\n if (!(parser[0][0] === 'Left') && (parser[i - 1][1] === 'not' || sqlLocale && this.l10n.getConstant('NOT').toLowerCase() === parser[i - 1][1])) {\n isNotOpened = true;\n continue;\n }\n this.parser = parser.splice(i + 1, iLen - (i + 1));\n if (this.enableNotCondition) {\n subRules = { condition: 'and', rules: [], not: false };\n }\n else {\n subRules = { condition: 'and', rules: [] };\n }\n grpCount = 0;\n kLen = rules.rules.length;\n for (k = 0; k < kLen; k++) { //To get the group position\n if (rules.rules[k].rules) {\n grpCount++;\n }\n }\n levelColl.push(grpCount);\n rules.rules.push(subRules);\n subRules = this.processParser(this.parser, subRules, levelColl, sqlLocale);\n return rules;\n }\n else if (parser[i][0] === 'Conditions' && !this.enableSeparateConnector) {\n if (parser[i][1] === 'not' || (sqlLocale && this.l10n.getConstant('NOT').toLowerCase() === parser[i][1])) {\n rules.not = true;\n }\n else {\n rules.condition = parser[i][1];\n }\n }\n else if (parser[i][0] === 'Right') {\n if (isNotOpened && parser[i + 1][0] === 'Right') {\n isNotOpened = false;\n continue;\n }\n this.parser = parser.splice(i + 1, iLen - (i + 1));\n levelColl.pop(); //To get the parent Group\n rules = this.rule;\n lLen = levelColl.length;\n for (l = 0; l < lLen; l++) {\n rules = this.findGroupByIdx(levelColl[l], rules, l === 0);\n }\n return this.processParser(this.parser, rules, levelColl, sqlLocale);\n }\n }\n return rules;\n };\n /**\n * Clone the Group\n *\n * @param {Element | string} target - 'target' to be passed to clone the group.\n * @returns {void}\n */\n QueryBuilder.prototype.groupClone = function (target) {\n var groupElem = target.closest('.e-rule-list').closest('.e-group-container');\n var targetGrpId;\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","isValueEmpty","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","filtering","dropdownTreeFiltering","dropdownTreeClose","dropdowntree","DropDownTree","getLabelFromColumn","lockRuleTarget","args_2","notCondition","undefined","prevElem_1","ruleContainer_1","args_3","setMultiConnector","proxy","ruleElemID","srcElement","ddTree","hierarchicalData","changeDataSource","matchedDataSource","nestedChildFilter","filter","filteredChild","setTimeout","treeObj","expandAll","node","isMatchedNode","matchedChildren","checkValue","parseInt","toString","template","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","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","numericTextBoxObj","getInstance","NumericTextBox","decimalSeparator","getValue","getNumericObject","locale","numberValue","parseFloat","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","operator_2","ddlIdx","autoSelectOperator","ddlOperator","operatorModel","isField","popup","divElement","templateDestroy","templateElement","elemId","temp","templateElements","elementId","elements","getValues","original","fieldColl","dataObj","fieldStr","createNestedObject","lastIndex","k","getDistinctValues","nest","isNested","this_2","renderMultiSelect","selectedValue","ds","isFetched","isValues","multiSelectValue","dataManager","query","Query","selectedRule","mode","width","closePopup","actionBegin","multiSelectOpen","valueModel","multiSelectModel","multiSelectObj","DataManager","bindMultiSelectData","getMultiSelectData","dummyData","deferred","Deferred","executeQuery","multiselectObj","hideSpinner","createSpinner","showSpinner","then","actual","catch","reject","spinnerElem","Browser","isDevice","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","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","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","isNotOpened","val","pop","targetGrpId","lockItem","disableRuleControls","newGroup","disableHeaderControls","updateLockItems","isDisabled","addElem","deleteGrpElem","lockElem","groupContElem","addCondition","addGroup","ddlElement","numericElement","textElement","checkboxElement","radioBtnElement","multiSelectElement","deleteElem","enabled","Event","Complex","NotifyPropertyChanges","Component","QueryLibrary","parent","addEventListener","isDestroyed","removeEventListener","on","queryLibrary","off","getMongoFromRules","mongoParser","getParameterSql","getNamedParameterSql","convertParamSqlToSql","convertNamedParamSqlToSql","convertMongoQuery","getOperatorFromMongoOperator","operatorValue","itVal","x","endsWith","mongoList","mongoRecursion","stringValue","betweenValue","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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"}
|