@syncfusion/ej2-querybuilder 25.1.42 → 25.2.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +31 -0
- 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 +90 -10
- package/dist/es6/ej2-querybuilder.es2015.js.map +1 -1
- package/dist/es6/ej2-querybuilder.es5.js +90 -10
- 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/package.json +11 -11
- package/src/query-builder/query-builder-model.d.ts +1 -1
- package/src/query-builder/query-builder.d.ts +5 -1
- package/src/query-builder/query-builder.js +90 -10
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ej2-querybuilder.umd.min.js","sources":["../src/query-builder/query-builder.js","../src/query-builder/query-library.js"],"sourcesContent":["var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n/**\n * Query Builder Source\n */\nimport { Component, NotifyPropertyChanges, getComponent, Browser, compile, append } from '@syncfusion/ej2-base';\nimport { Property, ChildProperty, Complex, L10n, closest, extend, isNullOrUndefined, Collection, cldrData } from '@syncfusion/ej2-base';\nimport { getInstance, addClass, removeClass, rippleEffect, detach, classList } from '@syncfusion/ej2-base';\nimport { Internationalization, getUniqueID, select } from '@syncfusion/ej2-base';\nimport { Button, RadioButton } from '@syncfusion/ej2-buttons';\nimport { DropDownList, CheckBoxSelection, DropDownTree } from '@syncfusion/ej2-dropdowns';\nimport { MultiSelect } from '@syncfusion/ej2-dropdowns';\nimport { Event, EventHandler, getValue, Animation } from '@syncfusion/ej2-base';\nimport { Query, Predicate, DataManager, Deferred } from '@syncfusion/ej2-data';\nimport { TextBox, NumericTextBox } from '@syncfusion/ej2-inputs';\nimport { DatePicker } from '@syncfusion/ej2-calendars';\nimport { DropDownButton } from '@syncfusion/ej2-splitbuttons';\nimport { Tooltip, createSpinner, showSpinner, hideSpinner } from '@syncfusion/ej2-popups';\nimport { compile as templateCompiler } from '@syncfusion/ej2-base';\n/**\n * Defines the Columns of Query Builder\n */\nvar Columns = /** @class */ (function (_super) {\n __extends(Columns, _super);\n function Columns() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], Columns.prototype, \"field\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"label\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"type\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"values\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"operators\", void 0);\n __decorate([\n Property()\n ], Columns.prototype, \"ruleTemplate\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"template\", void 0);\n __decorate([\n Property({ isRequired: true, min: 0, max: Number.MAX_VALUE })\n ], Columns.prototype, \"validation\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"format\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"step\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"value\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"category\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"columns\", void 0);\n return Columns;\n}(ChildProperty));\nexport { Columns };\n/**\n * Defines the rule of Query Builder\n */\nvar Rule = /** @class */ (function (_super) {\n __extends(Rule, _super);\n function Rule() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], Rule.prototype, \"condition\", void 0);\n __decorate([\n Collection([], Rule)\n ], Rule.prototype, \"rules\", void 0);\n __decorate([\n Property(null)\n ], Rule.prototype, \"field\", void 0);\n __decorate([\n Property(null)\n ], Rule.prototype, \"label\", void 0);\n __decorate([\n Property(null)\n ], Rule.prototype, \"type\", void 0);\n __decorate([\n Property(null)\n ], Rule.prototype, \"operator\", void 0);\n __decorate([\n Property(null)\n ], Rule.prototype, \"value\", void 0);\n __decorate([\n Property(false)\n ], Rule.prototype, \"not\", void 0);\n __decorate([\n Property(false)\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 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.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 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 var animation = new Animation({ duration: 1000, delay: 0 });\n animation.animate('.e-query-builder', { name: 'SlideLeftIn' });\n document.getElementById(this.element.id + '_summary_content').style.display = 'none';\n if (this.element.querySelectorAll('.e-group-container').length < 1) {\n this.addGroupElement(false, this.element, this.rule.condition, false, this.rule.not);\n var mRules = extend({}, this.rule, {}, true);\n this.setGroupRules(mRules);\n this.renderSummaryCollapse();\n }\n else {\n var groupElem = this.element.querySelector('.e-group-container');\n if (groupElem.querySelectorAll('.e-collapse-rule').length < 1) {\n this.renderSummaryCollapse();\n }\n groupElem.style.display = 'block';\n }\n 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 groupID = element.id.replace(this.element.id + '_', '');\n var group = this.getGroup(groupID);\n var ariaChecked = void 0;\n if (this.enableNotCondition) {\n if (target.className.indexOf('e-qb-toggle') > -1) {\n var toggleElem = element.getElementsByClassName('e-qb-toggle')[0];\n if (toggleElem.className.indexOf('e-active-toggle') > -1) {\n removeClass([toggleElem], 'e-active-toggle');\n ariaChecked = false;\n }\n else {\n addClass([toggleElem], 'e-active-toggle');\n ariaChecked = true;\n }\n targetValue = group.condition;\n }\n else {\n ariaChecked = group.not;\n }\n }\n args = { groupID: groupID, cancel: false, type: 'condition', value: targetValue.toLowerCase() };\n if (this.enableNotCondition) {\n args = { groupID: groupID, cancel: false, type: 'condition', value: targetValue.toLowerCase(),\n 'not': ariaChecked };\n }\n }\n if (!this.isImportRules) {\n this.trigger('beforeChange', args, function (observedChangeArgs) {\n _this.beforeSuccessCallBack(observedChangeArgs, target);\n });\n }\n else {\n this.beforeSuccessCallBack(args, target);\n }\n this.target = target;\n }\n };\n QueryBuilder.prototype.beforeSuccessCallBack = function (args, target) {\n if (!args.cancel) {\n var element = closest(target, '.e-group-container');\n var groupID = element.id.replace(this.element.id + '_', '');\n var beforeRules = this.getValidRules(this.rule);\n var rule = this.getParentGroup(element);\n rule.condition = args.value;\n if (this.enableNotCondition) {\n rule.not = args.not;\n }\n if (!this.isImportRules) {\n this.trigger('change', { groupID: groupID, type: 'condition', value: rule.condition });\n }\n this.filterRules(beforeRules, this.getValidRules(this.rule), 'condition');\n }\n };\n QueryBuilder.prototype.selectBtn = function (target, event) {\n if (event.name === 'beforeOpen') {\n if (this.showButtons.groupInsert || isNullOrUndefined(this.showButtons.groupInsert)) {\n if (this.element.querySelectorAll('.e-group-container').length >= this.maxGroupCount + 1) {\n addClass([event.element.querySelector('li span.e-addgroup').parentElement], 'e-button-hide');\n }\n else {\n removeClass([event.element.querySelector('li span.e-addgroup').parentElement], 'e-button-hide');\n }\n if (this.enableRtl) {\n addClass([event.element.querySelector('li').parentElement], 'e-rtl');\n }\n }\n else {\n addClass([event.element.querySelector('li span.e-addgroup').parentElement], 'e-button-hide');\n }\n }\n else if (event.element.children[0].className.indexOf('e-addrule') > -1) {\n this.addRuleElement(closest(target, '.e-group-container'), {});\n }\n else if (event.element.children[0].className.indexOf('e-addgroup') > -1) {\n this.addGroupElement(true, closest(target, '.e-group-container'), '', true);\n }\n };\n QueryBuilder.prototype.appendRuleElem = function (target, column, type, parentId, action, rule) {\n var ruleElem;\n var elem;\n var ruleListElem = target.querySelector('.e-rule-list');\n var args;\n if (type === 'change') {\n ruleElem = select('#' + parentId, target);\n }\n else {\n ruleElem = this.createElement('div', { attrs: { class: 'e-rule-container' } });\n ruleElem.setAttribute('id', target.id + '_rule' + this.ruleIdCounter);\n if (this.showButtons.cloneRule && this.cloneRuleBtnClick) {\n if (this.ruleIndex < 0) {\n ruleListElem.appendChild(ruleElem);\n }\n else {\n ruleListElem.insertBefore(ruleElem, ruleListElem.children[this.ruleIndex + 1]); // added clone rule to next position\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 (column && column.ruleTemplate && rule) {\n this.renderReactTemplates();\n }\n return ruleElem;\n };\n QueryBuilder.prototype.addRuleElement = function (target, rule, column, action, parentId, isRuleTemplate) {\n var _this = this;\n if (!target) {\n return;\n }\n var args = { groupID: target.id.replace(this.element.id + '_', ''), cancel: false, type: 'insertRule' };\n if (!this.isImportRules && !this.isInitialLoad) {\n this.trigger('beforeChange', args, function (observedChangeArgs) {\n _this.addRuleSuccessCallBack(observedChangeArgs, target, rule, column, action, parentId, isRuleTemplate);\n });\n }\n else {\n this.isInitialLoad = false;\n this.addRuleSuccessCallBack(args, target, rule, column, action, parentId, isRuleTemplate);\n }\n };\n QueryBuilder.prototype.addRuleSuccessCallBack = function (args, trgt, rule, col, act, pId, isRlTmp) {\n var height = (this.element.className.indexOf('e-device') > -1) ? '250px' : '200px';\n var ruleID;\n var column = (rule && rule.field) ? this.getColumn(rule.field) : col ? col : this.columns[0];\n var operators;\n var dropDownList;\n var ruleElem;\n var newRule = { 'label': '', 'field': '', 'type': '', 'operator': '' };\n if (!args.cancel) {\n if (column && column.ruleTemplate && rule.field) {\n this.selectedColumn = column;\n operators = this.selectedColumn.operators;\n newRule = { 'label': column.label, 'field': column.field, 'type': column.type, 'operator': operators[0].value };\n var passedRule = Object.keys(rule).length ? rule : newRule;\n ruleElem = this.appendRuleElem(trgt, column, act, pId, 'field', passedRule);\n var args_1 = { requestType: 'template-create', action: 'insert-rule', ruleID: ruleElem.id,\n fields: this.fields, rule: passedRule };\n this.trigger('actionBegin', args_1);\n }\n else {\n ruleElem = this.appendRuleElem(trgt, column, act, pId, 'field');\n ruleElem.querySelector('.e-filter-input').setAttribute('id', ruleElem.id + '_filterkey');\n var element = ruleElem.querySelector('.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 if (ruleElem.previousElementSibling && ruleElem.previousElementSibling.className.indexOf('e-rule-container') > -1) {\n if (ruleElem.className.indexOf('e-joined-rule') < 0) {\n ruleElem.className += ' e-joined-rule';\n }\n if (ruleElem.previousElementSibling.className.indexOf('e-prev-joined-rule') < 0) {\n ruleElem.previousElementSibling.className += ' e-prev-joined-rule';\n }\n }\n if (ruleElem.previousElementSibling && ruleElem.previousElementSibling.className.indexOf('e-group-container') > -1 &&\n ruleElem.className.indexOf('e-separate-rule') < 0) {\n ruleElem.className += ' e-separate-rule';\n }\n if (!this.isImportRules) {\n this.updateAddedRule(trgt, rule, newRule, isRlTmp, pId);\n }\n if (!column || (column && !column.ruleTemplate) || !rule.field) {\n if (this.fieldMode === 'Default') {\n var ddlField = void 0;\n var ddlValue = void 0;\n if (this.separator && rule.field) {\n ddlValue = this.GetRootColumnName(rule.field);\n }\n else 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) : dropDownList.value;\n }\n this.selectedColumn = dropDownList.getDataByValue(ddlVal);\n if (Object.keys(rule).length) {\n this.changeRule(rule, {\n element: dropDownList.element, itemData: this.selectedColumn\n });\n }\n }\n else {\n var ddlField = void 0;\n var ddlValue = this.isImportRules ? rule.field : rule.field;\n this.dummyDropdownTreeDs = extend([], this.columns, [], true);\n this.updateDropdowntreeDS(this.dummyDropdownTreeDs);\n ddlField = {\n fields: { dataSource: this.dummyDropdownTreeDs,\n value: 'field', text: 'label', child: 'columns', expanded: 'expanded', selectable: 'selectable' },\n placeholder: this.l10n.getConstant('SelectField'), showClearButton: false,\n popupHeight: ((this.columns.length > 5) ? height : 'auto'), changeOnBlur: false,\n change: this.changeField.bind(this), value: !isNullOrUndefined(ddlValue) ? [ddlValue] : null,\n open: this.popupOpen.bind(this, false), treeSettings: { expandOn: 'Click' },\n cssClass: 'e-qb-ddt'\n };\n if (this.fieldModel) {\n ddlField = __assign({}, ddlField, this.fieldModel);\n }\n var dropdowntree = new DropDownTree(ddlField);\n dropdowntree.appendTo('#' + ruleElem.id + '_filterkey');\n if (!isNullOrUndefined(dropdowntree.value)) {\n var value = this.getLabelFromColumn(dropdowntree.value[0]);\n dropdowntree.element.value = value;\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var ddlVal = !isNullOrUndefined(rule.field) ?\n this.GetRootColumnName(rule.field) : dropdowntree.value;\n this.selectedColumn = this.getColumn(ddlVal);\n if (Object.keys(rule).length) {\n this.changeRule(rule, {\n element: dropdowntree.element, itemData: this.selectedColumn\n });\n }\n }\n }\n ruleID = ruleElem.id.replace(this.element.id + '_', '');\n if (!this.isImportRules) {\n this.trigger('change', { groupID: trgt.id.replace(this.element.id + '_', ''), ruleID: ruleID, type: 'insertRule' });\n }\n }\n };\n QueryBuilder.prototype.updateDropdowntreeDS = function (columns) {\n for (var i = 0; i < columns.length; i++) {\n if (columns[parseInt(i.toString(), 10)].type === 'object') {\n columns[parseInt(i.toString(), 10)].selectable = false;\n this.updateDropdowntreeDS(columns[parseInt(i.toString(), 10)].columns);\n }\n }\n };\n QueryBuilder.prototype.updateAddedRule = function (target, rule, newRule, isRuleTemplate, pId) {\n var ruleElem;\n var index = 0;\n var groupElem;\n var rules;\n if (isRuleTemplate) {\n ruleElem = select('#' + pId, target);\n groupElem = closest(target, '.e-group-container');\n rules = this.getParentGroup(groupElem);\n while (ruleElem && ruleElem.previousElementSibling !== null) {\n ruleElem = ruleElem.previousElementSibling;\n index++;\n }\n rules.rules[index] = rule;\n }\n else {\n groupElem = closest(target, '.e-group-container');\n rules = this.getParentGroup(groupElem);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var custom = rule.custom;\n if (Object.keys(rule).length) {\n 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 }\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 }\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);\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 index++;\n }\n fieldElem = tempElem.querySelector('.e-rule-operator .e-control');\n if (!rule.rules[index].operator) {\n if (fieldElem.parentElement.className.indexOf('e-tooltip') < 0 && fieldElem.className.indexOf('e-tooltip') < 0) {\n this.renderToolTip(fieldElem.parentElement);\n }\n isValid = false;\n }\n if (rule.rules[index].value instanceof Array) {\n valArray = rule.rules[index].value;\n }\n if (excludeOprs.indexOf(rule.rules[index].operator) < -1 &&\n (isNullOrUndefined(rule.rules[index].value) &&\n rule.rules[index].type !== 'date') || rule.rules[index].value === '' ||\n (rule.rules[index].value instanceof Array && valArray.length < 1)) {\n var valElem = tempElem.querySelectorAll('.e-rule-value .e-control');\n isValid = false;\n for (var j = 0, jLen = valElem.length; j < jLen; j++) {\n var element = valElem[j];\n var elem = void 0;\n if (element.parentElement.className.indexOf('e-searcher') > -1) {\n elem = closest(element, '.e-multi-select-wrapper');\n if (elem.className.indexOf('e-tooltip') < 0) {\n this.renderToolTip(elem);\n }\n }\n else if (valElem[j].parentElement.className.indexOf('e-tooltip') < 0 && valElem[j].className.indexOf('e-tooltip') < 0) {\n this.renderToolTip(valElem[j].parentElement);\n }\n j++;\n }\n }\n }\n else if ((dropDownObj && dropDownObj.element && isNullOrUndefined(dropDownObj.index)) ||\n (dropDownTreeObj && dropDownTreeObj.element && (isNullOrUndefined(dropDownTreeObj.value) ||\n dropDownTreeObj.value.length < 1))) {\n if (fieldElem.parentElement.className.indexOf('e-tooltip') < 0) {\n this.renderToolTip(fieldElem.parentElement);\n }\n isValid = false;\n }\n }\n }\n return isValid;\n };\n QueryBuilder.prototype.refreshLevelColl = function () {\n this.levelColl = {};\n var groupElem = this.element.querySelector('.e-group-container');\n if (groupElem) {\n this.levelColl[groupElem.id] = [0];\n var obj = { groupElement: groupElem, level: [0] };\n this.refreshLevel(obj);\n }\n };\n QueryBuilder.prototype.refreshLevel = function (obj) {\n var ruleList = obj.groupElement.querySelector('.e-rule-list').children;\n var childElem;\n var groupElem = obj.groupElement;\n var i;\n var iLen = ruleList.length;\n var groupCount = 0;\n for (i = 0; i < iLen; i++) {\n childElem = ruleList[i];\n if (childElem.className.indexOf('e-group-container') > -1) {\n obj.level.push(groupCount);\n this.levelColl[childElem.id] = obj.level.slice();\n groupCount++;\n obj.groupElement = childElem;\n obj = this.refreshLevel(obj);\n }\n }\n var ruleListElem = closest(groupElem, '.e-rule-list');\n obj.groupElement = ruleListElem ? closest(ruleListElem, '.e-group-container') : groupElem;\n obj.level = this.levelColl[obj.groupElement.id].slice();\n return obj;\n };\n QueryBuilder.prototype.groupTemplate = function () {\n var glueElem;\n var inputElem;\n var labelElem;\n var grpActElem;\n var groupBtn;\n var groupElem = this.createElement('div', { attrs: { class: 'e-group-container' } });\n var groupHdrElem = this.createElement('div', { attrs: { class: 'e-group-header' } });\n var grpBodyElem = this.createElement('div', { attrs: { class: 'e-group-body' } });\n var rulesElem = this.createElement('div', { attrs: { class: 'e-rule-list' } });\n groupElem.appendChild(groupHdrElem);\n grpBodyElem.appendChild(rulesElem);\n groupElem.appendChild(grpBodyElem);\n // create button group in OR and AND process\n if (!this.headerTemplate) {\n glueElem = this.createElement('div', { attrs: { class: 'e-lib e-btn-group', role: 'group' } });\n if (this.enableNotCondition) {\n inputElem = this.createElement('button', { attrs: { type: 'button', class: 'e-qb-toggle' } });\n glueElem.appendChild(inputElem);\n }\n inputElem = this.createElement('input', { attrs: { type: 'radio', class: 'e-btngroup-and', value: 'AND' } });\n glueElem.appendChild(inputElem);\n labelElem = this.createElement('label', { attrs: { class: 'e-lib e-btn e-btngroup-and-lbl e-small' },\n innerHTML: this.l10n.getConstant('AND') });\n glueElem.appendChild(labelElem);\n inputElem = this.createElement('input', { attrs: { type: 'radio', class: 'e-btngroup-or', value: 'OR' } });\n glueElem.appendChild(inputElem);\n labelElem = this.createElement('label', { attrs: { class: 'e-lib e-btn e-btngroup-or-lbl e-small' },\n innerHTML: this.l10n.getConstant('OR') });\n glueElem.appendChild(labelElem);\n groupHdrElem.appendChild(glueElem);\n grpActElem = this.createElement('div', { attrs: { class: 'e-group-action' } });\n groupBtn = this.createElement('button', { attrs: { type: 'button', class: 'e-add-btn' } });\n grpActElem.appendChild(groupBtn);\n groupHdrElem.appendChild(grpActElem);\n }\n return groupElem;\n };\n QueryBuilder.prototype.ruleTemplate = function () {\n var tempElem;\n var clsName;\n var cloneClsName;\n var lockClsName;\n var ruleElem = this.createElement('div');\n var fieldElem = this.createElement('div', { attrs: { class: 'e-rule-field' } });\n tempElem = this.createElement('div', { attrs: { class: 'e-rule-filter' } });\n var filterElem = this.createElement('input', { attrs: { type: 'text', class: 'e-filter-input' } });\n tempElem.appendChild(filterElem);\n fieldElem.appendChild(tempElem);\n tempElem = this.createElement('div', { attrs: { class: 'e-rule-operator' } });\n fieldElem.appendChild(tempElem);\n tempElem = this.createElement('div', { attrs: { class: 'e-rule-value' } });\n fieldElem.appendChild(tempElem);\n tempElem = this.createElement('div', { attrs: { class: 'e-rule-value-delete' } });\n if (this.showButtons.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) {\n this.trigger('beforeChange', args, function (observedChangeArgs) {\n _this.addGroupSuccess(observedChangeArgs, isGroup, target, condition, isBtnClick, not, isRoot, rule);\n });\n }\n else {\n this.isInitialLoad = false;\n this.addGroupSuccess(args, isGroup, target, condition, isBtnClick, not, isRoot, rule);\n }\n };\n QueryBuilder.prototype.addGroupSuccess = function (args, isGroup, eventTarget, condition, isBtnClick, not, isRoot, rule) {\n if (!args.cancel && (this.element.querySelectorAll('.e-group-container').length <= this.maxGroupCount)) {\n var target = eventTarget;\n var dltGroupBtn = void 0;\n var groupID = '';\n if (target.className.indexOf('e-group-container') < 0) {\n groupID = target.querySelector('.e-group-container') && target.querySelector('.e-group-container').id;\n }\n else {\n groupID = target.id;\n }\n var groupElem = this.groupElem.cloneNode(true);\n groupElem.setAttribute('id', this.element.id + '_group' + this.groupIdCounter);\n if (this.headerTemplate) {\n if (isRoot) {\n isGroup = false;\n groupElem.setAttribute('id', this.element.id + '_group0');\n this.headerTemplateFn(groupElem, not, condition, rule, groupID);\n this.groupIdCounter = 0;\n }\n else {\n this.headerTemplateFn(groupElem, not, condition, rule, groupID);\n }\n }\n this.groupIdCounter++;\n if (!this.headerTemplate) {\n var andInpElem = groupElem.querySelector('.e-btngroup-and');\n var orInpElem = groupElem.querySelector('.e-btngroup-or');\n var andLblElem = groupElem.querySelector('.e-btngroup-and-lbl');\n var orLblElem = groupElem.querySelector('.e-btngroup-or-lbl');\n andInpElem.setAttribute('id', this.element.id + '_and' + this.btnGroupId);\n orInpElem.setAttribute('id', this.element.id + '_or' + this.btnGroupId);\n andInpElem.setAttribute('name', this.element.id + '_and' + this.btnGroupId);\n orInpElem.setAttribute('name', this.element.id + '_and' + this.btnGroupId);\n andLblElem.setAttribute('for', this.element.id + '_and' + this.btnGroupId);\n orLblElem.setAttribute('for', this.element.id + '_or' + this.btnGroupId);\n this.btnGroupId++;\n }\n if (isGroup) {\n var clsName = void 0;\n if (this.showButtons.groupDelete || isNullOrUndefined(this.showButtons.groupDelete)) {\n clsName = 'e-deletegroup';\n }\n else {\n clsName = 'e-deletegroup e-button-hide';\n }\n dltGroupBtn = this.createElement('button', { attrs: { type: 'button', class: clsName } });\n var button = new Button({ iconCss: 'e-icons e-delete-icon', cssClass: 'e-small e-round' });\n button.appendTo(dltGroupBtn);\n dltGroupBtn.setAttribute('title', this.l10n.getConstant('DeleteGroup'));\n rippleEffect(dltGroupBtn, { selector: '.deletegroup' });\n 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 childElems[this.groupIndex + 1].parentNode.insertBefore(groupElem, childElems[this.groupIndex + 1]); // clone the element to nxt element\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 var tglBtn = new Button({ content: this.l10n.getConstant('NOT'), cssClass: 'e-btn e-small' });\n tglBtn.appendTo(notElem);\n groupElem.querySelector('.e-btngroup-and-lbl').classList.add('e-not');\n if (this.updatedRule && this.updatedRule.not) {\n addClass([notElem], 'e-active-toggle');\n }\n }\n }\n this.updatedRule = null;\n if (this.headerTemplate) {\n var args_2 = { requestType: 'header-template-create', ruleID: groupElem.id, condition: condition,\n notCondition: this.enableNotCondition ? not : undefined };\n this.trigger('actionBegin', args_2);\n }\n else {\n var groupBtn = groupElem.querySelector('.e-add-btn');\n var btnObj = new DropDownButton({\n items: this.items,\n cssClass: 'e-round e-small e-caret-hide e-addrulegroup',\n iconCss: 'e-icons e-add-icon',\n beforeOpen: this.selectBtn.bind(this, groupBtn),\n select: this.selectBtn.bind(this, groupBtn)\n });\n btnObj.appendTo(groupBtn);\n groupBtn.setAttribute('title', this.l10n.getConstant('AddButton'));\n }\n if (!this.isImportRules) {\n var grpId = target.id.replace(this.element.id + '_', '');\n var chgrpId = groupElem.id.replace(this.element.id + '_', '');\n this.trigger('change', { groupID: grpId, type: 'insertGroup', childGroupID: chgrpId });\n }\n }\n };\n QueryBuilder.prototype.headerTemplateFn = function (groupElem, not, condition, rule, groupID) {\n var template;\n var templateID = this.element.id + '_header';\n var args;\n var groupHdr = groupElem.querySelector('.e-group-header');\n if (this.headerTemplate) {\n args = { requestType: 'header-template-initialize', ruleID: groupElem.id,\n notCondition: this.enableNotCondition ? not : undefined,\n condition: condition, rule: this.getRuleCollection(rule, true), groupID: groupID };\n this.trigger('actionBegin', args);\n this.headerFn = this.templateParser(this.headerTemplate);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.isReact) {\n template = this.headerFn(args, this, groupElem.id, templateID)[0];\n groupHdr.appendChild(template);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n }\n else if (this.isAngular) {\n var templateColl = this.headerFn(args, this, groupElem.id, templateID);\n template = (templateColl[0].nodeType === 3) ? templateColl[1] : templateColl[0];\n groupHdr.appendChild(template);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n }\n else if (this.isVue3) {\n template = this.headerFn(args, this, groupElem.id, templateID);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n append(template, groupHdr);\n }\n else {\n template = this.headerFn(args, this, 'Template', templateID)[0];\n groupHdr.appendChild(template);\n }\n this.renderReactTemplates();\n }\n return groupElem;\n };\n /**\n * Notify the changes to component.\n *\n * @param {string | number | boolean | Date | string[] | number[] | Date[]} value - 'value' to be passed to update the rule value.\n * @param {Element} element - 'element' to be passed to update the rule.\n * @param {string} type - 'type' to be passed to update the rule .\n * @returns {void}.\n */\n QueryBuilder.prototype.notifyChange = function (value, element, type) {\n var grpElement = closest(element, '.e-group-container');\n var rules = this.getParentGroup(grpElement);\n var ruleElement = closest(element, '.e-rule-container');\n var index = 0;\n if (type === 'not') {\n rules.not = value;\n return;\n }\n if (type === 'condition') {\n rules.condition = value;\n return;\n }\n while (ruleElement && ruleElement.previousElementSibling !== null) {\n ruleElement = ruleElement.previousElementSibling;\n index++;\n }\n var rule = rules.rules[index];\n var column = this.getColumn(rule.field);\n var format = this.getFormat(column.format);\n if (column.type === 'date') {\n if (value instanceof Date) {\n value = this.intl.formatDate(value, format);\n }\n else if (value instanceof Array) {\n for (var i = 0; i < value.length; i++) {\n if (value[i] && value[i] instanceof Date) {\n value[i] = this.intl.formatDate(value[i], format);\n }\n }\n }\n }\n if (column.ruleTemplate) {\n this.templateChange(element, value, type);\n }\n else {\n this.isNotified = true;\n this.updateRules(element, value);\n this.isNotified = false;\n }\n };\n QueryBuilder.prototype.templateChange = function (element, value, type) {\n var grpElem = closest(element, '.e-group-container');\n var eventsArgs;\n var rules = this.getParentGroup(grpElem);\n var ruleElem = closest(element, '.e-rule-container');\n var index = 0;\n if (this.allowValidation) {\n this.validateValue(rules, ruleElem);\n }\n while (ruleElem && ruleElem.previousElementSibling !== null) {\n ruleElem = ruleElem.previousElementSibling;\n index++;\n }\n var rule = rules.rules[index];\n if (type === 'field') {\n this.selectedColumn = this.getColumn(value);\n }\n else if (rule) {\n this.selectedColumn = this.getColumn(rule.field);\n }\n var operVal;\n this.previousColumn = this.getColumn(rule.field);\n var beforeRules = this.getValidRules(this.rule);\n if (this.selectedColumn) {\n if (this.selectedColumn.operators) {\n operVal = this.selectedColumn.operators;\n }\n else {\n operVal = this.customOperators[this.selectedColumn.type + 'Operator'];\n }\n }\n var arrOper = ['in', 'notin', 'between', 'notbetween'];\n var prevOper;\n switch (type) {\n case 'field':\n rule.field = value;\n rule.label = this.selectedColumn.label;\n rule.type = this.selectedColumn.type;\n rule.value = '';\n rule.operator = operVal[0].value;\n break;\n case 'operator':\n prevOper = rule.operator;\n rule.operator = value;\n if (arrOper.indexOf(rule.operator) > -1) {\n rule.value = [];\n }\n else if (arrOper.indexOf(prevOper) > -1) {\n rule.value = '';\n }\n break;\n case 'value':\n rule.value = value;\n }\n this.changeRuleTemplate(this.selectedColumn, element);\n this.filterRules(beforeRules, this.getValidRules(this.rule), type);\n if (this.selectedColumn && this.selectedColumn.ruleTemplate) {\n if (type === 'field' || type === 'operator') {\n var grpEle = closest(element, '.e-rule-container');\n this.destroyControls(grpEle, true);\n detach(grpEle.querySelector('.e-rule-field'));\n var ruleElement = this.appendRuleElem(closest(grpEle, '.e-group-container'), this.selectedColumn, 'change', grpEle.id, type, rule);\n if (this.displayMode === 'Vertical' || this.element.className.indexOf('e-device') > -1) {\n ruleElement.className = 'e-rule-container e-vertical-mode';\n }\n else {\n ruleElement.className = 'e-rule-container e-horizontal-mode';\n }\n if (ruleElement.previousElementSibling && ruleElement.previousElementSibling.className.indexOf('e-rule-container') > -1) {\n if (ruleElement.className.indexOf('e-joined-rule') < 0) {\n ruleElement.className += ' e-joined-rule';\n }\n if (ruleElement.previousElementSibling.className.indexOf('e-prev-joined-rule') < 0) {\n ruleElement.previousElementSibling.className += ' e-prev-joined-rule';\n }\n }\n if (ruleElement.previousElementSibling && ruleElement.previousElementSibling.className.indexOf('e-group-container') > -1 &&\n ruleElement.className.indexOf('e-separate-rule') < 0) {\n ruleElement.className += ' e-separate-rule';\n }\n var args = { requestType: 'template-create', action: type, ruleID: grpEle.id,\n fields: this.fields, rule: rule };\n eventsArgs = { groupID: grpElem.id.replace(this.element.id + '_', ''), ruleID: grpEle.id.replace(this.element.id + '_', ''),\n value: rule.field, type: 'field' };\n this.trigger('actionBegin', args);\n this.trigger('change', eventsArgs);\n }\n }\n };\n QueryBuilder.prototype.changeValue = function (i, args) {\n var _this = this;\n var element;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (args.element && args.element.classList.contains('e-multiselect')) {\n var multiSelectArgs = args;\n element = multiSelectArgs.element;\n }\n else if (args.event) {\n element = args.event.target;\n }\n else {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n element = args.element;\n }\n if (element.className.indexOf('e-day') > -1 || element.className.indexOf('e-today') > -1 || element.className.indexOf('e-cell') > -1) {\n var calenderArgs = args;\n element = calenderArgs.element;\n }\n var groupElem = closest(element, '.e-group-container');\n var ruleElem = closest(element, '.e-rule-container');\n var groupID = groupElem && groupElem.id.replace(this.element.id + '_', '');\n var ruleID = ruleElem.id.replace(this.element.id + '_', '');\n var dateElement = args;\n 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 // eslint-disable-next-line\n rbValue = parseInt(element.id.split('valuekey')[1], 0);\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 }\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 index++;\n }\n rules.rules[index].value = '';\n this.changeRule(rules.rules[index], args);\n }\n }\n };\n QueryBuilder.prototype.changeRule = function (rule, ddlArgs) {\n if (!ddlArgs.itemData) {\n if (this.fieldMode === 'DropdownTree') {\n var ddt = getComponent(ddlArgs.element, 'dropdowntree');\n if (ddt.value == null) {\n return;\n }\n }\n else {\n return;\n }\n }\n var tempRule = {};\n var filterElem = closest(ddlArgs.element, '.e-rule-filter');\n filterElem = filterElem ? filterElem : closest(ddlArgs.element, '.e-rule-sub-filter');\n var ddlObj = getComponent(ddlArgs.element, 'dropdownlist');\n if (this.fieldMode === 'DropdownTree' && filterElem !== null) {\n ddlObj = getComponent(ddlArgs.element, 'dropdowntree');\n }\n var element = closest(ddlArgs.element, '.e-group-container');\n var groupID = element.id.replace(this.element.id + '_', '');\n this.changeFilter(filterElem, ddlObj, groupID, rule, tempRule, ddlArgs);\n };\n QueryBuilder.prototype.changeFilter = function (flt, dl, grID, rl, tmpRl, dArg) {\n var _this = this;\n if (flt) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var ddlValue = void 0;\n if (this.fieldMode === 'DropdownTree') {\n ddlValue = (dl.value[0]);\n }\n else {\n ddlValue = this.isImportRules ? this.GetRootColumnName(dl.value) : dl.value;\n }\n this.selectedColumn = this.getColumn(ddlValue);\n var ruleElem = closest(flt, '.e-rule-container');\n var ruleID = ruleElem.id.replace(this.element.id + '_', '');\n var eventsArgs = { groupID: grID, ruleID: ruleID, selectedField: this.fieldMode === 'DropdownTree' ?\n dl.value[0] : dl.value, cancel: false, type: 'field' };\n if (!this.isImportRules) {\n this.trigger('beforeChange', eventsArgs, function (observedChangeArgs) {\n _this.fieldChangeSuccess(observedChangeArgs, tmpRl, flt, rl, dArg);\n });\n }\n else {\n this.fieldChangeSuccess(eventsArgs, tmpRl, flt, rl, dArg);\n }\n }\n else {\n var operatorElem = closest(dArg.element, '.e-rule-operator');\n this.changeOperator(flt, operatorElem, dl, grID, rl, tmpRl, dArg);\n }\n };\n QueryBuilder.prototype.changeOperator = function (\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n flt, opr, dl, grID, rl, tmpRl, dArg) {\n var _this = this;\n var ruleElem;\n var ruleID;\n var eventsArgs;\n if (opr) {\n ruleElem = closest(opr, '.e-rule-container');\n ruleID = ruleElem.id.replace(this.element.id + '_', '');\n eventsArgs = { groupID: grID, ruleID: ruleID, selectedIndex: dl.index, cancel: false, type: 'operator' };\n if (!this.isImportRules) {\n this.trigger('beforeChange', eventsArgs, function (observedChangeArgs) {\n _this.operatorChangeSuccess(observedChangeArgs, flt, tmpRl, rl, dArg);\n });\n }\n else {\n this.operatorChangeSuccess(eventsArgs, flt, tmpRl, rl, dArg);\n }\n }\n else {\n this.changeRuleValues(flt, rl, tmpRl, dArg);\n }\n };\n QueryBuilder.prototype.fieldChangeSuccess = function (args, tempRule, filterElem, rule, ddlArgs) {\n var ruleElem = closest(filterElem, '.e-rule-container');\n var operatorElem = closest(ddlArgs.element, '.e-rule-operator');\n var element = closest(ddlArgs.element, '.e-group-container');\n var groupID = element.id.replace(this.element.id + '_', '');\n var ddlObj = getComponent(ddlArgs.element, 'dropdownlist');\n var tooltipElem = ruleElem.querySelectorAll('.e-tooltip.e-input-group');\n for (var i = 0; i < tooltipElem.length; i++) {\n getComponent(tooltipElem[i], 'tooltip').destroy();\n }\n if (!args.cancel) {\n if (isNullOrUndefined(this.selectedColumn)) {\n return;\n }\n tempRule.type = this.selectedColumn.type;\n if (ruleElem.querySelector('.e-template')) {\n rule.value = '';\n }\n if (this.selectedColumn.type === 'object' && this.fieldMode === 'Default') {\n tempRule.type = this.selectedColumn.columns[0].type;\n while (this.selectedColumn.columns) {\n this.createSubFields(filterElem, rule, tempRule, ddlArgs);\n }\n }\n else {\n this.destroySubFields(filterElem);\n this.changeOperator(filterElem, operatorElem, ddlObj, groupID, rule, tempRule, ddlArgs);\n }\n }\n else {\n this.changeOperator(filterElem, operatorElem, ddlObj, groupID, rule, tempRule, ddlArgs);\n }\n };\n QueryBuilder.prototype.destroySubFields = function (filterElem) {\n while (filterElem && filterElem.nextElementSibling.classList.contains('e-rule-sub-filter')) {\n this.destroyControls(filterElem);\n filterElem.nextElementSibling.remove();\n }\n };\n QueryBuilder.prototype.createSubFields = function (filterElem, rule, tempRule, ddlArgs) {\n var subFieldValue = false;\n var fieldElem = closest(filterElem, '.e-rule-field');\n var tempElem = this.createElement('div', { attrs: { class: 'e-rule-sub-filter', id: 'subfilter' + this.subFilterCounter } });\n fieldElem.insertBefore(tempElem, fieldElem.querySelector('.e-rule-operator'));\n var ruleId = closest(tempElem, '.e-rule-container').id;\n var subFieldElem = this.createElement('input', { attrs: { type: 'text', id: ruleId + '_subfilterkey' + this.subFilterCounter } });\n tempElem.appendChild(subFieldElem);\n var height = (this.element.className.indexOf('e-device') > -1) ? '250px' : '200px';\n var 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)) {\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) ? rule.value : this.setDefaultValue(parentId, true, false);\n this.renderMultiSelect(columnData, parentId, idx, selectedVal, columnData.values);\n if (this.displayMode === 'Vertical' || this.element.className.indexOf('e-device') > -1) {\n ruleValElem.style.width = '100%';\n }\n else {\n ruleValElem.style.width = null;\n ruleValElem.style.minWidth = '200px';\n }\n }\n else {\n if (operator === 'in' || operator === 'notin') {\n selectedVal = (this.isImportRules || this.ruleIndex > -1 || this.groupIndex > -1) ? rule.value : this.setDefaultValue(parentId, true, false);\n selectedValue = selectedVal.join(',');\n }\n var txtBox = void 0;\n txtBox = {\n placeholder: this.l10n.getConstant('SelectValue'),\n input: this.changeValue.bind(this, idx)\n };\n if (this.valueModel && this.valueModel.textBoxModel) {\n txtBox = __assign({}, txtBox, this.valueModel.textBoxModel);\n }\n var inputobj = new TextBox(txtBox);\n inputobj.appendTo('#' + parentId + '_valuekey' + idx);\n inputobj.value = selectedValue;\n inputobj.dataBind();\n }\n };\n QueryBuilder.prototype.renderNumberValue = function (parentId, rule, operator, idx, ruleValElem, itemData, length) {\n var columnData = this.getItemData(parentId);\n var isTemplate = (typeof columnData.template === 'string');\n var selectedVal = (this.isImportRules || this.ruleIndex > -1 || this.groupIndex > -1 || this.isPublic || isTemplate || 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) ? rule.value : this.setDefaultValue(parentId, true, false);\n this.renderMultiSelect(columnData, parentId, idx, selectedVal, columnData.values);\n if (this.element.className.indexOf('e-device') > -1 || this.displayMode === 'Vertical') {\n ruleValElem.style.width = '100%';\n }\n else {\n ruleValElem.style.minWidth = '200px';\n ruleValElem.style.width = null;\n }\n }\n else if (operator === 'in' || operator === 'notin') {\n selectedVal = (this.isImportRules || this.ruleIndex > -1 || this.groupIndex > -1) ? rule.value : this.setDefaultValue(parentId, true, false);\n var selVal = selectedVal.join(',');\n var txtInp = void 0;\n txtInp = {\n placeholder: this.l10n.getConstant('SelectValue'),\n input: this.changeValue.bind(this, idx)\n };\n if (this.valueModel && this.valueModel.textBoxModel) {\n txtInp = __assign({}, txtInp, this.valueModel.textBoxModel);\n }\n var input = new TextBox(txtInp);\n input.appendTo('#' + parentId + '_valuekey' + idx);\n input.value = selVal;\n input.dataBind();\n }\n else {\n itemData = columnData;\n var min = (itemData.validation && itemData.validation.min) ? itemData.validation.min : 0;\n var max = (itemData.validation && itemData.validation.max) ? itemData.validation.max : Number.MAX_VALUE;\n var format = itemData.format ? itemData.format : 'n';\n if (length > 1 && rule) {\n selectedVal = rule.value[idx] ? rule.value[idx] : this.setDefaultValue(parentId, true, true);\n }\n var numericTxt = void 0;\n numericTxt = {\n value: (selectedVal instanceof Array) ? selectedVal[idx] : selectedVal,\n format: format, min: min, max: max, width: '100%',\n step: itemData.step ? itemData.step : 1,\n change: this.changeValue.bind(this, idx)\n };\n if (this.valueModel && this.valueModel.numericTextBoxModel) {\n numericTxt = __assign({}, numericTxt, this.valueModel.numericTextBoxModel);\n }\n var numeric = new NumericTextBox(numericTxt);\n numeric.appendTo('#' + parentId + '_valuekey' + idx);\n numeric.element.setAttribute('aria-label', itemData.label + ' ' + 'Value');\n }\n };\n QueryBuilder.prototype.processValueString = function (value, type) {\n var numArr = [];\n var strArr = value.split(',');\n if (type === 'string') {\n return strArr;\n }\n else {\n for (var k = 0, kLen = strArr.length; k < kLen; k++) {\n numArr.push(Number(strArr[k]));\n }\n return numArr;\n }\n };\n QueryBuilder.prototype.parseDate = function (value, format) {\n var formatOpt;\n var selectedValue;\n if (format) {\n var dParser = this.intl.getDateParser({ skeleton: 'full', type: 'dateTime' });\n formatOpt = this.getFormat(format);\n selectedValue = dParser(value);\n if (isNullOrUndefined(selectedValue)) {\n selectedValue = this.intl.parseDate(value, formatOpt);\n }\n }\n else {\n selectedValue = new Date(value);\n }\n return selectedValue;\n };\n QueryBuilder.prototype.renderControls = function (target, itemData, rule, tempRule, isRendered) {\n addClass([target.parentElement.querySelector('.e-rule-value')], 'e-value');\n removeClass([target.parentElement.querySelector('.e-rule-value')], 'e-hide');\n addClass([target.parentElement.querySelector('.e-rule-value')], 'e-show');\n if (itemData.template && (itemData.template.create || isRendered)) {\n this.processTemplate(target, itemData, rule, tempRule);\n }\n else {\n var length_1;\n if (tempRule.type === 'boolean') {\n length_1 = this.selectedColumn.values ? this.selectedColumn.values.length : 2;\n }\n else {\n length_1 = tempRule.operator && tempRule.operator.toString().toLowerCase().indexOf('between') > -1 ? 2 : 1;\n }\n var parentId = closest(target, '.e-rule-container').id;\n var ruleValElem = void 0;\n var operator = tempRule.operator.toString();\n if (target.className.indexOf('e-rule-operator') > -1 || target.className.indexOf('e-rule-filter') > -1) {\n ruleValElem = target.parentElement.querySelector('.e-rule-value');\n if (this.element.className.indexOf('e-device') > -1 || this.displayMode === 'Vertical') {\n ruleValElem.style.width = '100%';\n }\n else {\n if (operator !== 'in' && operator !== 'notin') {\n addClass([ruleValElem], 'e-custom-value');\n }\n else {\n removeClass([ruleValElem], 'e-custom-value');\n }\n }\n for (var i = 0; i < length_1; i++) {\n switch (tempRule.type) {\n case 'string':\n {\n this.renderStringValue(parentId, rule, operator, i, ruleValElem);\n }\n break;\n case 'number':\n {\n this.renderNumberValue(parentId, rule, operator, i, ruleValElem, itemData, length_1);\n }\n break;\n case 'boolean':\n this.processBoolValues(itemData, rule, parentId, i);\n break;\n case 'date':\n {\n var selectedValue = new Date();\n var selVal = void 0;\n var column = void 0;\n var format = itemData.format;\n var datepick = void 0;\n var datePicker = void 0;\n var place = this.l10n.getConstant('SelectValue');\n var isTemplate = (typeof itemData.template === 'string');\n 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 switch (controlName) {\n case 'checkbox':\n // eslint-disable-next-line\n var value = getComponent(element, controlName).value;\n rule.value = (value !== '') ? value : undefined;\n break;\n case 'textbox':\n rule.value = getComponent(element, controlName).value;\n break;\n case 'dropdownlist':\n rule.value = getComponent(element, controlName).value;\n break;\n case 'radio':\n // eslint-disable-next-line\n var radioBtnObj = getComponent(element, controlName);\n if (radioBtnObj.checked) {\n if (typeof rule.value === 'boolean') {\n rule.value = radioBtnObj.value === 'true';\n }\n else {\n if (this.getColumn(rule.field).values) {\n rule.value = radioBtnObj.value;\n }\n else {\n rule.value = radioBtnObj.value === 'true';\n }\n }\n }\n radioBtnObj.refresh();\n break;\n case 'numerictextbox':\n if (rule.operator.indexOf('between') > -1) {\n if (typeof rule.value === 'string') {\n rule.value = [];\n }\n rule.value[i] = getComponent(element, controlName).value;\n }\n else {\n rule.value = getComponent(element, controlName).value;\n }\n break;\n case 'datepicker':\n // eslint-disable-next-line\n var column = this.getColumn(rule.field);\n // eslint-disable-next-line\n var format = this.getFormat(column.format);\n // eslint-disable-next-line\n var selectedDate = getComponent(element, controlName).value;\n if (rule.operator.indexOf('between') > -1) {\n if (typeof rule.value === 'string') {\n rule.value = [];\n }\n rule.value[i] = this.intl.formatDate(selectedDate, format);\n }\n else if (isNullOrUndefined(format.format) && selectedDate) {\n rule.value = this.intl.formatDate(selectedDate);\n }\n else if (selectedDate) {\n rule.value = this.intl.formatDate(selectedDate, format);\n }\n else {\n rule.value = selectedDate;\n }\n break;\n case 'multiselect':\n rule.value = getComponent(element, controlName).value;\n break;\n }\n };\n QueryBuilder.prototype.updateRules = function (target, selectedValue, i, isNotTrigger) {\n var groupElem = closest(target, '.e-group-container');\n var rule = this.getParentGroup(groupElem);\n var ruleElem = closest(target, '.e-rule-container');\n var index = 0;\n var dropDownObj;\n var eventsArgs;\n var groupID = groupElem.id.replace(this.element.id + '_', '');\n var beforeRules = this.getValidRules(this.rule);\n while (ruleElem && ruleElem.previousElementSibling !== null) {\n ruleElem = ruleElem.previousElementSibling;\n index++;\n }\n var operator = rule.rules[index].operator ? rule.rules[index].operator.toString() : '';\n ruleElem = closest(target, '.e-rule-container');\n var ruleID = ruleElem.id.replace(this.element.id + '_', '');\n if (closest(target, '.e-rule-filter') || closest(target, '.e-rule-sub-filter')) {\n if (this.subFieldElem) {\n target = this.subFieldElem;\n }\n dropDownObj = this.fieldMode === 'DropdownTree' ? getComponent(target, 'dropdowntree') :\n getComponent(target, 'dropdownlist');\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var column = this.fieldMode === 'DropdownTree' ? this.getColumn(dropDownObj.value[0])\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n : this.getColumn(dropDownObj.value);\n if (!this.isImportRules && rule.rules[index].field &&\n rule.rules[index].field.toLowerCase() !== column.field.toLowerCase()) {\n if (!(ruleElem.querySelectorAll('.e-template')) && !(operator.indexOf('null') > -1)\n || (operator.indexOf('empty') > -1)) {\n rule.rules[index].value = '';\n }\n }\n this.selectedColumn = this.getColumn(this.selectedColumn.field);\n rule.rules[index].field = this.selectedColumn.field;\n rule.rules[index].type = this.selectedColumn.type;\n rule.rules[index].label = this.selectedColumn.label;\n var ruleElement = closest(target, '.e-rule-filter');\n ruleElement = ruleElement ? ruleElement : closest(target, '.e-rule-sub-filter');\n var element = ruleElement.nextElementSibling.querySelector('input.e-control');\n element = element ? element : ruleElement.nextElementSibling.nextElementSibling.querySelector('input.e-control');\n operator = getComponent(element, 'dropdownlist').value.toString();\n rule.rules[index].operator = operator;\n // Value Fields\n var valueContainer = ruleElement.nextElementSibling.nextElementSibling;\n var elementCln = valueContainer.querySelectorAll('input.e-control');\n if (elementCln.length < 1) {\n elementCln = valueContainer.querySelectorAll('div.e-control');\n }\n if (elementCln.length < 1) {\n elementCln = valueContainer.querySelectorAll('.e-template');\n }\n eventsArgs = { groupID: groupID, ruleID: ruleID, value: rule.rules[index].field, type: 'field' };\n for (var i_1 = 0; i_1 < elementCln.length; i_1++) {\n if (operator.indexOf('null') > -1 || operator.indexOf('empty') > -1) {\n rule.rules[index].value = null;\n continue;\n }\n this.updateValues(elementCln[i_1], rule.rules[index]);\n }\n if (!this.isImportRules) {\n this.trigger('change', eventsArgs);\n }\n if (this.allowValidation && rule.rules[index].field && target.parentElement.className.indexOf('e-tooltip') > -1) {\n getComponent(target.parentElement, 'tooltip').destroy();\n }\n this.filterRules(beforeRules, this.getValidRules(this.rule), 'field');\n }\n else if (closest(target, '.e-rule-operator')) {\n dropDownObj = getComponent(target, 'dropdownlist');\n rule.rules[index].operator = dropDownObj.value.toString();\n var inputElem = ruleElem.querySelectorAll('.e-rule-value input.e-control');\n eventsArgs = { groupID: groupID, ruleID: ruleID, value: dropDownObj.value, type: 'operator' };\n if (this.allowValidation && rule.rules[index].operator && target.parentElement.className.indexOf('e-tooltip') > -1) {\n getComponent(target.parentElement, 'tooltip').destroy();\n }\n if (inputElem.length > 1 && !(inputElem[0].className.indexOf('e-template') > -1)) {\n rule.rules[index].value = [];\n }\n for (var i_2 = 0; i_2 < inputElem.length; i_2++) {\n if (rule.rules[index].operator.indexOf('null') > -1 || rule.rules[index].operator.indexOf('empty') > -1) {\n rule.rules[index].value = null;\n continue;\n }\n else if (inputElem[i_2].classList.contains('e-template')) {\n continue;\n }\n this.updateValues(inputElem[i_2], rule.rules[index]);\n }\n if (!this.isImportRules) {\n this.trigger('change', eventsArgs);\n }\n this.filterRules(beforeRules, this.getValidRules(this.rule), 'operator');\n }\n else if (closest(target, '.e-rule-value')) {\n this.ruleValueUpdate(target, selectedValue, rule, index, groupElem, ruleElem, i);\n if (!isNotTrigger) {\n this.filterRules(beforeRules, this.getValidRules(this.rule), 'value');\n }\n }\n };\n QueryBuilder.prototype.filterRules = function (beforeRule, afterRule, type) {\n var beforeRuleStr = JSON.stringify({ condition: beforeRule.condition, not: beforeRule.not, rule: beforeRule.rules });\n var afetrRuleStr = JSON.stringify({ condition: afterRule.condition, not: afterRule.not, rule: afterRule.rules });\n if (beforeRuleStr !== afetrRuleStr) {\n if (!this.isImportRules) {\n this.trigger('ruleChange', { previousRule: beforeRule, rule: afterRule, type: type });\n }\n }\n };\n QueryBuilder.prototype.ruleValueUpdate = function (target, selectedValue, rule, index, groupElem, ruleElem, i) {\n var eventsArgs;\n var oper;\n var arrOperator = ['in', 'between', 'notin', 'notbetween'];\n if (rule.rules[index].operator) {\n oper = rule.rules[index].operator.toString().toLowerCase();\n }\n if (selectedValue !== null) {\n if (target.className.indexOf('e-multiselect') > -1 && rule.rules[index].type === 'number' &&\n !this.isNotified) {\n var selVal = [];\n var dupSelectedValue = selectedValue;\n for (var k = 0, kLen = dupSelectedValue.length; k < kLen; k++) {\n if (typeof dupSelectedValue[k] === 'string') {\n selVal.push(parseFloat(dupSelectedValue[k]));\n }\n }\n if (selVal.length) {\n selectedValue = selVal;\n }\n }\n if (this.isNotified) {\n rule.rules[index].value = selectedValue;\n eventsArgs = { groupID: groupElem.id, ruleID: ruleElem.id, value: rule.rules[index].value, type: 'value' };\n if (!this.isImportRules) {\n this.trigger('change', eventsArgs);\n }\n }\n else if (target.className.indexOf('e-spin') > -1 || target.className.indexOf('e-numeric') > -1) {\n if (arrOperator.indexOf(oper) > -1) {\n rule.rules[index].value[i] = selectedValue;\n }\n else {\n rule.rules[index].value = selectedValue;\n }\n }\n else if (target.className.indexOf('e-radio') > -1) {\n rule.rules[index].value = selectedValue;\n }\n else if (target.className.indexOf('e-multiselect') > -1) {\n rule.rules[index].value = selectedValue;\n }\n else if (target.className.indexOf('e-textbox') > -1) {\n if (oper === 'in' || oper === 'notin') {\n if (rule.rules[index].type === 'string') {\n rule.rules[index].value = this.processValueString(selectedValue, rule.rules[index].type);\n }\n else {\n rule.rules[index].value = this.processValueString(selectedValue, rule.rules[index].type);\n }\n }\n else {\n rule.rules[index].value = selectedValue;\n }\n }\n else if (target.className.indexOf('e-datepicker') > -1) {\n var format = this.getFormat(this.getColumn(this.selectedColumn.field).format);\n if (format.type) {\n if (arrOperator.indexOf(oper) > -1) {\n if (typeof rule.rules[index].value === 'string') {\n rule.rules[index].value = [];\n }\n rule.rules[index].value[i] = this.intl.formatDate(selectedValue, format);\n }\n else {\n rule.rules[index].value = this.intl.formatDate(selectedValue, format);\n }\n }\n }\n this.validateValue(rule, ruleElem, index);\n }\n else {\n if (target.className.indexOf('e-datepicker') > -1) {\n if (arrOperator.indexOf(oper) > -1) {\n if (typeof rule.rules[index].value === 'string') {\n rule.rules[index].value = [];\n }\n rule.rules[index].value[i] = selectedValue;\n }\n else {\n rule.rules[index].value = selectedValue;\n }\n }\n else {\n rule.rules[index].value = selectedValue;\n }\n }\n };\n QueryBuilder.prototype.validateValue = function (rule, ruleElem, index) {\n if (!isNullOrUndefined(index)) {\n rule = rule.rules[index];\n }\n var isObject = typeof (rule.value) === 'object';\n if (this.allowValidation && (isNullOrUndefined(index) || (isObject ? rule.value.length > 0 : rule.value))) {\n var valElem = ruleElem.querySelectorAll('.e-rule-value .e-control');\n if (valElem.length > 0) {\n if (valElem[0].className.indexOf('e-tooltip') > -1) {\n getComponent(valElem[0], 'tooltip').destroy();\n }\n else if (valElem[0].parentElement.className.indexOf('e-tooltip') > -1) {\n getComponent(valElem[0].parentElement, 'tooltip').destroy();\n }\n if (valElem[1] && valElem[1].parentElement.className.indexOf('e-tooltip') > -1) {\n getComponent(valElem[1].parentElement, 'tooltip').destroy();\n }\n }\n }\n };\n QueryBuilder.prototype.getFormat = function (format) {\n var formatOptions;\n if (format) {\n if (typeof (format) === 'string') {\n formatOptions = { type: 'dateTime' };\n if (format === 'short' || format === 'yMd') {\n formatOptions.type = 'date';\n formatOptions.skeleton = format;\n }\n else {\n formatOptions.format = format;\n }\n }\n else {\n formatOptions = { type: 'dateTime', skeleton: format.skeleton };\n }\n }\n else {\n formatOptions = { type: 'date', skeleton: 'yMd' };\n }\n return formatOptions;\n };\n QueryBuilder.prototype.findGroupByIdx = function (groupIdx, rule, isRoot) {\n var ruleColl = rule.rules;\n var dupRuleColl = [];\n if (!isRoot) {\n for (var j = 0, jLen = ruleColl.length; j < jLen; j++) {\n rule = ruleColl[j];\n if (rule.rules) {\n dupRuleColl.push(rule);\n }\n }\n return dupRuleColl[groupIdx];\n }\n return rule;\n };\n /**\n * Removes the component from the DOM and detaches all its related event handlers.\n * Also it maintains the initial input element from the DOM.\n *\n * @method destroy\n * @returns {void}\n */\n QueryBuilder.prototype.destroy = function () {\n this.isDestroy = true;\n var queryElement = this.element;\n if (!queryElement) {\n return;\n }\n var element;\n var i;\n var len;\n var tooltip;\n _super.prototype.destroy.call(this);\n var popupElement;\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 popupElement = document.querySelectorAll('.qb-dropdownlist');\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);\n }\n }\n };\n QueryBuilder.prototype.initWrapper = function () {\n this.isInitialLoad = true;\n if (this.cssClass) {\n addClass([this.element], this.cssClass.replace(/\\s+/g, ' ').trim().split(' '));\n }\n if (this.enableRtl) {\n addClass([this.element], 'e-rtl');\n }\n if (this.width) {\n this.element.style.width = this.width;\n }\n if (this.height) {\n this.element.style.height = this.height;\n }\n if (this.rule.rules.length) {\n this.isImportRules = true;\n }\n else {\n this.addGroupElement(false, this.element);\n }\n if (Browser.isDevice || this.displayMode === 'Vertical') {\n if (Browser.isDevice) {\n this.element.style.width = '100%';\n this.element.classList.add('e-device');\n }\n removeClass(this.element.querySelectorAll('.e-rule-container'), 'e-horizontal-mode');\n addClass(this.element.querySelectorAll('.e-rule-container'), 'e-vertical-mode');\n this.displayMode = 'Vertical';\n }\n else {\n this.displayMode = 'Horizontal';\n }\n if (this.summaryView) {\n if (this.isImportRules) {\n this.renderSummary();\n }\n else {\n this.renderSummaryCollapse();\n }\n }\n else {\n if (this.columns.length && this.isImportRules) {\n this.addGroupElement(false, this.element, this.rule.condition, false, this.rule.not, false, this.rule);\n var mRules = extend({}, this.rule, {}, true);\n this.isRefreshed = true;\n this.setGroupRules(mRules);\n this.isRefreshed = false;\n }\n else if (this.columns.length) {\n this.addRuleElement(this.element.querySelector('.e-group-container'), {});\n }\n this.notGroupRtl();\n if (this.readonly) {\n this.enableReadonly();\n }\n var buttons = this.element.querySelectorAll('label.e-btn');\n var button = void 0;\n for (var i = 0; i < buttons.length; i++) {\n button = buttons.item(i);\n rippleEffect(button, { selector: '.e-btn' });\n }\n }\n };\n QueryBuilder.prototype.renderSummary = function () {\n var contentElem = this.createElement('div', {\n attrs: {\n class: 'e-summary-content',\n id: this.element.id + '_summary_content'\n }\n });\n var textElem = this.createElement('textarea', { attrs: { class: 'e-summary-text', readonly: 'true' }, styles: 'max-height:500px' });\n var editElem = this.createElement('button', { attrs: { type: 'button', class: 'e-edit-rule e-css e-btn e-small e-flat e-primary' } });\n var divElem = this.createElement('div', { attrs: { class: 'e-summary-btndiv' } });\n contentElem.appendChild(textElem);\n textElem.textContent = this.getSqlFromRules(this.rule);\n editElem.textContent = this.l10n.getConstant('Edit');\n divElem.appendChild(editElem);\n contentElem.appendChild(divElem);\n this.element.appendChild(contentElem);\n };\n QueryBuilder.prototype.renderSummaryCollapse = function () {\n var collapseElem = this.createElement('div', {\n attrs: {\n class: 'e-collapse-rule e-icons',\n title: this.l10n.getConstant('SummaryViewTitle')\n }\n });\n this.element.querySelector('.e-group-header').appendChild(collapseElem);\n };\n QueryBuilder.prototype.columnSort = function () {\n if (this.sortDirection.toLowerCase() === 'descending') {\n this.columns = new DataManager(this.columns).executeLocal(new Query().sortByDesc('field'));\n }\n else if (this.sortDirection.toLowerCase() === 'ascending') {\n this.columns = new DataManager(this.columns).executeLocal(new Query().sortBy('field'));\n }\n };\n QueryBuilder.prototype.onChangeNotGroup = function () {\n this.element.innerHTML = '';\n this.groupIdCounter = 0;\n if (!this.headerTemplate) {\n if (this.enableNotCondition) {\n if (this.enableNotCondition) {\n var inputElem = this.createElement('button', { attrs: { type: 'button', class: 'e-qb-toggle' } });\n this.groupElem.querySelector('.e-btn-group').insertBefore(inputElem, this.groupElem.querySelector('.e-btngroup-and'));\n }\n }\n else {\n this.groupElem.querySelector('.e-qb-toggle').remove();\n }\n }\n this.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 for (var _i = 0, properties_1 = properties; _i < properties_1.length; _i++) {\n var prop = properties_1[_i];\n switch (prop) {\n case 'summaryView':\n // eslint-disable-next-line\n var groupElem = this.element.querySelector('.e-group-container');\n // eslint-disable-next-line\n var summaryElem = this.element.querySelector('.e-summary-content');\n if (newProp.summaryView) {\n groupElem.style.display = 'none';\n if (this.element.querySelectorAll('.e-summary-content').length < 1) {\n this.renderSummary();\n summaryElem = this.element.querySelector('.e-summary-content');\n }\n else {\n this.element.querySelector('.e-summary-text').textContent = this.getSqlFromRules(this.rule);\n }\n summaryElem.style.display = 'block';\n }\n else {\n if (groupElem.querySelectorAll('.e-collapse-rule').length > -1) {\n this.renderSummaryCollapse();\n }\n groupElem.style.display = 'block';\n summaryElem.style.display = 'none';\n }\n break;\n case 'displayMode':\n this.refresh();\n break;\n case 'showButtons':\n if (!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 }\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 };\n QueryBuilder.prototype.templateParser = function (template) {\n if (template) {\n try {\n if (typeof template !== 'function' && document.querySelectorAll(template).length) {\n return templateCompiler(document.querySelector(template).innerHTML.trim());\n }\n else {\n return compile(template);\n }\n }\n catch (error) {\n return templateCompiler(template);\n }\n }\n return undefined;\n };\n QueryBuilder.prototype.executeDataManager = function (query) {\n var _this = this;\n var data = this.dataManager.executeQuery(query);\n var deferred = new Deferred();\n data.then(function (e) {\n if (e.actual && e.actual.result) {\n _this.dataColl = e.actual.result;\n }\n else {\n _this.dataColl = e.result;\n }\n _this.initControl();\n }).catch(function (e) {\n deferred.reject(e);\n });\n };\n QueryBuilder.prototype.initControl = function () {\n this.initialize();\n this.initWrapper();\n this.wireEvents();\n };\n QueryBuilder.prototype.wireEvents = function () {\n var wrapper = this.getWrapper();\n EventHandler.add(wrapper, 'click', this.clickEventHandler, this);\n EventHandler.add(wrapper, 'focusout', this.focusEventHandler, this);\n EventHandler.add(wrapper, 'focusin', this.focusEventHandler, this);\n EventHandler.add(this.element, 'keydown', this.keyBoardHandler, this);\n };\n QueryBuilder.prototype.unWireEvents = function () {\n var wrapper = this.getWrapper();\n EventHandler.remove(wrapper, 'click', this.clickEventHandler);\n EventHandler.remove(wrapper, 'focusout', this.focusEventHandler);\n EventHandler.remove(wrapper, 'focusin', this.focusEventHandler);\n EventHandler.remove(this.element, 'keydown', this.keyBoardHandler);\n };\n QueryBuilder.prototype.getParentGroup = function (target, isParent) {\n var groupLevel = (target instanceof Element) ? this.levelColl[target.id] : this.levelColl[\"\" + target];\n var len = isParent ? groupLevel.length - 1 : groupLevel.length;\n var rule = this.rule;\n for (var i = 0; i < len; i++) {\n rule = this.findGroupByIdx(groupLevel[i], rule, i === 0);\n }\n return rule;\n };\n /**\n * Delete the Group\n *\n * @param {Element | string} target - 'target' to be passed to delete the group.\n * @returns {void}\n */\n QueryBuilder.prototype.deleteGroup = function (target) {\n var _this = this;\n var groupElem = target;\n var groupId;\n if (typeof target === 'string') {\n groupId = this.element.id + '_' + target;\n target = document.getElementById(groupId);\n }\n else {\n groupId = groupElem.id.replace(this.element.id + '_', '');\n }\n var args = { groupID: groupId, cancel: false, type: 'deleteGroup' };\n if (!this.isImportRules) {\n this.trigger('beforeChange', args, function (observedChangeArgs) {\n _this.deleteGroupSuccessCallBack(observedChangeArgs, target);\n });\n }\n else {\n this.deleteGroupSuccessCallBack(args, target);\n }\n };\n QueryBuilder.prototype.deleteGroupSuccessCallBack = function (args, target) {\n if (!args.cancel) {\n var groupElem = target;\n var rule = this.getParentGroup(groupElem, true);\n var index = 0;\n var i = void 0;\n var len = void 0;\n var beforeRules = this.getValidRules(this.rule);\n var nextElem = groupElem.nextElementSibling;\n var prevElem = groupElem.previousElementSibling;\n var element = groupElem.querySelectorAll('.e-group-container');\n var valElem = groupElem.querySelectorAll('.e-tooltip');\n len = valElem.length;\n for (i = 0; i < len; i++) {\n getComponent(valElem[i], 'tooltip').destroy();\n }\n for (i = 0, len = element.length; i < len; i++) {\n delete this.levelColl[element[i].id];\n }\n while (groupElem.previousElementSibling !== null) {\n groupElem = groupElem.previousElementSibling;\n index++;\n }\n if (nextElem && nextElem.className.indexOf('e-separate-rule') > -1) {\n removeClass([nextElem], 'e-separate-rule');\n addClass([nextElem], 'e-joined-rule');\n if (prevElem && prevElem.className.indexOf('e-rule-container') > -1) {\n addClass([prevElem], 'e-prev-joined-rule');\n }\n }\n var elem = groupElem.parentElement.parentElement.parentElement;\n var removeString = [];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.isReact || this.isAngular) {\n var remRule = rule.rules[index];\n var ruleElemColl = target.querySelectorAll('.e-rule-container');\n if (remRule && remRule.rules) {\n for (var r = 0; r < remRule.rules.length; r++) {\n var column = this.getColumn(remRule.rules[r].field);\n 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.isImportRules) {\n this.trigger('change', args);\n }\n this.filterRules(beforeRules, this.getValidRules(this.rule), 'deleteGroup');\n }\n };\n QueryBuilder.prototype.isPlatformTemplate = function (column) {\n var isTemp = false;\n isTemp = column.template && (typeof column.template === 'string' || column.template.create === undefined);\n return isTemp;\n };\n QueryBuilder.prototype.deleteRule = function (target) {\n var _this = this;\n var groupElem = closest(target, '.e-group-container');\n var groupID = groupElem.id.replace(this.element.id + '_', '');\n var ruleID = closest(target, '.e-rule-container').id.replace(this.element.id + '_', '');\n var args = { groupID: groupID, ruleID: ruleID, cancel: false, type: 'deleteRule' };\n if (!this.isImportRules) {\n this.trigger('beforeChange', args, function (observedChangeArgs) {\n _this.deleteRuleSuccessCallBack(observedChangeArgs, target);\n });\n }\n else {\n this.deleteRuleSuccessCallBack(args, target);\n }\n };\n QueryBuilder.prototype.deleteRuleSuccessCallBack = function (args, target) {\n if (!args.cancel) {\n var groupElem = closest(target, '.e-group-container');\n var rule = this.getParentGroup(groupElem);\n var ruleElem = closest(target, '.e-rule-container');\n var beforeRules = this.getValidRules(this.rule);\n var clnruleElem = ruleElem;\n var nextElem = ruleElem.nextElementSibling;\n var prevElem = ruleElem.previousElementSibling;\n var index = 0;\n var valElem = ruleElem.querySelectorAll('.e-tooltip');\n var i = void 0;\n var len = valElem.length;\n for (i = 0; i < len; i++) {\n getComponent(valElem[i], 'tooltip').destroy();\n }\n while (ruleElem.previousElementSibling !== null) {\n ruleElem = ruleElem.previousElementSibling;\n index++;\n }\n var column = this.getColumn(rule.rules[index].field);\n if (column && column.template && clnruleElem.querySelector('.e-template')) {\n this.templateDestroy(column, clnruleElem.querySelector('.e-template').id);\n }\n if (!prevElem || prevElem.className.indexOf('e-rule-container') < 0) {\n if (nextElem) {\n removeClass([nextElem], 'e-joined-rule');\n }\n }\n if (!nextElem || nextElem.className.indexOf('e-rule-container') < 0) {\n if (prevElem) {\n removeClass([prevElem], 'e-prev-joined-rule');\n }\n }\n var isTemplateRendered = clnruleElem.querySelector('.e-template-value');\n // eslint-disable\n try {\n detach(clnruleElem);\n }\n catch (err) {\n // eslint-disable-next-line no-ex-assign\n err = [];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var error = 'error';\n // eslint-disable-next-line\n err[error] = error;\n }\n // eslint-enable\n if (column && column.ruleTemplate) {\n this.clearQBTemplate([clnruleElem.id]);\n }\n if (column && this.isPlatformTemplate(column) && isTemplateRendered) {\n this.clearQBTemplate([clnruleElem.id]);\n }\n rule.rules.splice(index, 1);\n if (!(rule.rules[0] && rule.rules[0].rules)) {\n this.disableRuleCondition(groupElem, rule);\n }\n 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) {\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 (this.readonly && (e.keyCode === 38 || e.keyCode === 40 || e.keyCode === 13)) {\n e.preventDefault();\n }\n };\n QueryBuilder.prototype.clearQBTemplate = function (ruleElemColl) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.isReact || this.isAngular) {\n this.clearTemplate(ruleElemColl);\n }\n };\n QueryBuilder.prototype.disableRuleCondition = function (groupElem, rules) {\n if (!this.headerTemplate) {\n if (this.readonly) {\n return;\n }\n var count = groupElem.querySelector('.e-rule-list').childElementCount;\n var andElem = groupElem.querySelector('.e-btngroup-and');\n var orElem = groupElem.querySelector('.e-btngroup-or');\n if (count > 1) {\n andElem.disabled = false;\n orElem.disabled = false;\n if (orElem.nextElementSibling.classList.contains('e-btn-disable') ||\n andElem.nextElementSibling.classList.contains('e-btn-disable')) {\n orElem.nextElementSibling.classList.remove('e-btn-disable');\n andElem.nextElementSibling.classList.remove('e-btn-disable');\n }\n if (rules && rules.condition === 'or') {\n orElem.checked = true;\n }\n else {\n andElem.checked = true;\n }\n }\n else {\n andElem.checked = false;\n andElem.disabled = true;\n orElem.checked = false;\n orElem.disabled = true;\n if (rules) {\n orElem.nextElementSibling.classList.add('e-btn-disable');\n andElem.nextElementSibling.classList.add('e-btn-disable');\n }\n }\n }\n };\n /**\n * Get the valid rule or rules collection.\n *\n * @param {RuleModel} currentRule - 'currentRule' to be passed to get the valid rules.\n * @returns {RuleModel} - Valid rule or rules collection\n */\n QueryBuilder.prototype.getValidRules = function (currentRule) {\n if (!currentRule) {\n currentRule = this.getRules();\n }\n var ruleCondtion = currentRule.condition;\n var notCondition = currentRule.not;\n var ruleColl = extend([], currentRule.rules, [], true);\n var rule = this.getRuleCollection({ condition: ruleCondtion, rules: ruleColl, not: notCondition }, true);\n return rule;\n };\n QueryBuilder.prototype.getRuleCollection = function (rule, isValidRule) {\n if (isNullOrUndefined(rule)) {\n return null;\n }\n var orgRule;\n if (rule.rules && rule.rules.length && (Object.keys(rule.rules[0]).length > 6 || isValidRule)) {\n var jLen = rule.rules.length;\n for (var j = 0; j < jLen; j++) {\n orgRule = rule.rules[j];\n orgRule = this.getRuleCollection(orgRule, isValidRule);\n rule.rules[j] = orgRule;\n if (Object.keys(orgRule).length < 1 && isValidRule) {\n rule.rules.splice(j, 1);\n j--;\n jLen--;\n }\n }\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var customObj = rule.custom;\n if ((rule.field && rule.field !== '') && (isNullOrUndefined(customObj) || (customObj && (customObj.type !== 'question' &&\n customObj.type !== 'answer')))) {\n if (rule.operator) {\n if (rule.operator.toString().indexOf('null') > -1 || rule.operator.toString().indexOf('empty') > -1) {\n rule.value = null;\n }\n }\n if ((this.isRefreshed && this.enablePersistence) || (rule.field !== '' && rule.operator !== '' && (rule.value !== '' &&\n rule.value !== undefined)) || (customObj && customObj.isQuestion)) {\n var condition = rule.condition;\n rule = {\n 'label': rule.label, 'field': rule.field, 'operator': rule.operator, 'type': rule.type, 'value': rule.value,\n 'isLocked': rule.isLocked\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 if (this.enableNotCondition) {\n rule = { 'condition': rule.condition, 'rules': rule.rules, 'not': rule.not, 'isLocked': rule.isLocked };\n }\n else {\n rule = { 'condition': rule.condition, 'rules': rule.rules, 'isLocked': rule.isLocked };\n }\n if (customObj) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n rule.custom = customObj;\n }\n if (rule.rules.length === 0) {\n rule = {};\n }\n }\n }\n return rule;\n };\n /**\n * Set the rule or rules collection.\n *\n * @param {RuleModel} rule - 'rule' to be passed to set rules.\n * @returns {void}.\n */\n QueryBuilder.prototype.setRules = function (rule) {\n var mRules = extend({}, rule, {}, true);\n if (this.headerTemplate) {\n this.setGroupRules(mRules, true);\n }\n else {\n this.setGroupRules(mRules);\n }\n };\n /**\n * Gets the rule or rule collection.\n *\n * @returns {object} - Rule or rule collection\n */\n QueryBuilder.prototype.getRules = function () {\n var rule;\n if (this.enableNotCondition) {\n rule = { condition: this.rule.condition, rules: this.rule.rules, not: this.rule.not };\n }\n else {\n rule = { condition: this.rule.condition, rules: this.rule.rules };\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.rule.custom) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n rule.custom = this.rule.custom;\n }\n return rule;\n };\n /**\n * Gets the rule.\n *\n * @param {string | HTMLElement} elem - 'elem' to be passed to get rule.\n * @returns {object} - Rule\n */\n QueryBuilder.prototype.getRule = function (elem) {\n var ruleElem;\n var ruleId;\n var index = 0;\n if (elem instanceof HTMLElement) {\n ruleElem = closest(elem, '.e-rule-container');\n }\n else {\n ruleId = this.element.id + '_' + elem;\n ruleElem = document.getElementById(ruleId);\n }\n 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 index++;\n }\n return rule.rules[index];\n };\n /**\n * Gets the group.\n *\n * @param {string | Element} target - 'target' to be passed to get group.\n * @returns {object} -Group\n */\n QueryBuilder.prototype.getGroup = function (target) {\n if (target instanceof Element && target.className.indexOf('e-group-container') < 1) {\n target = closest(target, '.e-group-container');\n }\n var groupId = (target instanceof Element) ? target.id : this.element.id + '_' + target;\n var rule = this.getParentGroup(groupId);\n return rule;\n };\n /**\n * Deletes the group or groups based on the group ID.\n *\n * @param {string[]} groupIdColl - 'groupIdColl' to be passed to delete groups.\n * @returns {void}\n */\n QueryBuilder.prototype.deleteGroups = function (groupIdColl) {\n var i;\n var len = groupIdColl.length;\n var groupID;\n for (i = 0; i < len; i++) {\n groupID = this.element.id + '_' + groupIdColl[i];\n this.deleteGroup(document.getElementById(groupID));\n }\n };\n /**\n * Return the Query from current rules collection.\n *\n * @returns {Promise} - Query from current rules collection\n * @blazorType object\n */\n QueryBuilder.prototype.getFilteredRecords = function () {\n var predicate = this.getPredicate(this.getValidRules(this.rule));\n var dataManagerQuery = isNullOrUndefined(predicate) ? new Query() : new Query().where(predicate);\n return this.dataManager.executeQuery(dataManagerQuery);\n };\n /**\n * Deletes the rule or rules based on the rule ID.\n *\n * @param {string[]} ruleIdColl - 'ruleIdColl' to be passed to delete rules.\n * @returns {void}.\n */\n QueryBuilder.prototype.deleteRules = function (ruleIdColl) {\n var i;\n var len = ruleIdColl.length;\n var ruleID;\n for (i = 0; i < len; i++) {\n ruleID = this.element.id + '_' + ruleIdColl[i];\n this.deleteRule(document.getElementById(ruleID));\n }\n };\n /**\n * Gets the query for Data Manager.\n *\n * @param {RuleModel} rule - 'rule' to be passed to get query.\n * @returns {string} - Query for Data Manager\n */\n QueryBuilder.prototype.getDataManagerQuery = function (rule) {\n var predicate = this.getPredicate(rule);\n var query;\n var fields = [];\n for (var i = 0, len = Object.keys(this.columns); i < len.length; i++) {\n fields.push(this.columns[i].field);\n }\n if (rule.rules.length) {\n query = new Query().select(fields).where(predicate);\n }\n else {\n query = new Query().select(fields);\n }\n return query;\n };\n /**\n * Get the predicate from collection of rules.\n *\n * @param {RuleModel} rule - 'rule' to be passed to get predicate.\n * @returns {Predicate} - Predicate from collection of rules\n */\n QueryBuilder.prototype.getPredicate = function (rule) {\n var ruleColl = rule.rules;\n var pred;\n var pred2;\n var ruleValue;\n var ignoreCase = false;\n var column;\n 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 // eslint-disable-next-line\n currDate.setHours(parseInt(value.split(':')[0]));\n // eslint-disable-next-line\n currDate.setMinutes(parseInt(value.split(':')[1]));\n if (value.split(':')[2]) {\n // eslint-disable-next-line\n currDate.setSeconds(parseInt(value.split(':')[2]));\n }\n }\n return currDate;\n };\n QueryBuilder.prototype.isTime = function (value) {\n if (value && value.indexOf(':') > -1) {\n return true;\n }\n return false;\n };\n QueryBuilder.prototype.importRules = function (rule, parentElem, isReset, not, isRoot) {\n if (!isReset) {\n parentElem = this.renderGroup(rule, rule.condition, parentElem, not);\n }\n else {\n if (rule.rules.length > 1 && !this.headerTemplate) {\n // enable/disable conditions when rule group is added\n var orElem = parentElem.querySelector('.e-btngroup-or');\n var andElem = parentElem.querySelector('.e-btngroup-and');\n orElem.disabled = false;\n andElem.disabled = false;\n if (rule.condition === 'or') {\n orElem.checked = true;\n }\n else {\n andElem.checked = true;\n }\n }\n else {\n // enable/disable conditions when rule condition is added\n this.disableRuleCondition(parentElem);\n }\n if (this.headerTemplate && isRoot) {\n parentElem = this.renderGroup(rule, rule.condition, this.element, rule.not, isRoot);\n }\n if (this.enableNotCondition && !this.headerTemplate) {\n var tglBtnElem = parentElem.querySelector('.e-qb-toggle');\n if (rule.not) {\n addClass([tglBtnElem], 'e-active-toggle');\n }\n else {\n removeClass([tglBtnElem], 'e-active-toggle');\n }\n }\n }\n if (rule.rules.length === 0 && this.headerTemplate) {\n rule.rules[0] = { 'label': '', 'field': '', 'operator': '', 'type': '', 'value': '' };\n }\n var ruleColl = rule.rules;\n if (!isNullOrUndefined(ruleColl)) {\n for (var i = 0, len = ruleColl.length; i < len; i++) {\n var keys = Object.keys(ruleColl[i]);\n if (!isNullOrUndefined(ruleColl[i].rules) && keys.indexOf('rules') > -1 && (ruleColl[i].rules.length !== 0)) {\n 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 if (isNullOrUndefined(ruleColl[i].rules) && ruleColl[i].isLocked) {\n var lockRuleTarget = parentElem.querySelector('.e-rule-list').children[i].querySelector('.e-lock-rule-btn');\n this.ruleLock(lockRuleTarget);\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 return cloneElem[this.groupIndex + 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 }\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 condition = sqlLocale ? this.l10n.getConstant(condition.toUpperCase()).toUpperCase() : condition.toUpperCase();\n queryStr += ' ' + condition + ' ';\n }\n }\n }\n if (!isRoot) {\n queryStr += ')';\n }\n if (rules.not) {\n queryStr += ')';\n }\n return queryStr;\n };\n /**\n * Sets the rules from the sql query.\n *\n * @param {string} sqlString - 'sql String' to be passed to set the rule.\n * @param {boolean} sqlLocale - 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 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 /**\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 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 /**\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 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 /**\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 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 /**\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 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 /**\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 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 /**\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\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\n regex = new RegExp('^(' + operators[i] + ')' + regexStr, 'ig');\n if (regex.exec(sqlString)) {\n this.parser.push(['Operators', operators[i].toLowerCase()]);\n return operators[i].length;\n }\n }\n var lastPasrser = this.parser[this.parser.length - 1];\n if (!lastPasrser || (lastPasrser && lastPasrser[0] !== 'Literal')) {\n for (var i = 0, iLen = conditions.length; i < iLen; i++) {\n regexStr = /^\\w+$/.test(conditions[i]) ? '\\\\b' : '';\n // eslint-disable-next-line\n regex = new RegExp('^(' + conditions[i] + ')' + regexStr, 'ig');\n if (regex.exec(sqlString)) {\n this.parser.push(['Conditions', conditions[i].toLowerCase()]);\n return conditions[i].length;\n }\n }\n }\n for (var i = 0, iLen = subOp.length; i < iLen; i++) {\n regexStr = /^\\w+$/.test(subOp[i]) ? '\\\\b' : '';\n // eslint-disable-next-line\n regex = new RegExp('^(' + subOp[i] + ')' + regexStr, 'ig');\n if (regex.exec(sqlString)) {\n this.parser.push(['SubOperators', subOp[i].toLowerCase()]);\n return subOp[i].length;\n }\n }\n //Left Parenthesis\n if (/^\\(/.exec(sqlString)) {\n this.parser.push(['Left', '(']);\n return 1;\n }\n //Right Parenthesis\n if (/^\\)/.exec(sqlString)) {\n this.parser.push(['Right', ')']);\n return 1;\n }\n //Boolean\n if (/^(true|false)/.exec(sqlString)) {\n matchValue = /^(true|false)/.exec(sqlString)[0];\n this.parser.push(['String', matchValue]);\n return matchValue.length;\n }\n //Null\n if (/^null/.exec(sqlString)) {\n matchValue = /^null/.exec(sqlString)[0];\n this.parser.push(['String', null]);\n return matchValue.length;\n }\n // eslint-disable-next-line\n if (/^`?([a-z_][a-z0-9_.\\[\\]\\(\\)]{0,}(\\:(number|float|string|date|boolean))?)`?/i.exec(sqlString)) {\n // eslint-disable-next-line\n matchValue = /^`?([a-zåäö_][a-z0-9åäö_.\\[\\]\\(\\)]{0,}(\\:(number|float|string|date|boolean))?)`?/i.exec(sqlString)[1];\n this.parser.push(['Literal', matchValue]);\n return matchValue.length;\n }\n // eslint-disable-next-line\n if (this.checkLiteral() && /^'?([a-z_][a-z0-9 _.\\[\\]\\(\\)-]{0,}(\\:(number|float|string|date|boolean))?)'?/i.exec(sqlString)) {\n // eslint-disable-next-line\n matchValue = /^'?([a-z_][a-z0-9 _.\\[\\]\\(\\)-]{0,}(\\:(number|float|string|date|boolean))?)'?/i.exec(sqlString)[1];\n this.parser.push(['Literal', matchValue]);\n return matchValue.length + 2;\n }\n if (this.checkNumberLiteral(sqlString, sqlLocale)) {\n // eslint-disable-next-line\n matchValue = /^[0-9]+(\\.[0-9]+)?/.exec(sqlString)[0];\n this.parser.push(['Literal', matchValue]);\n return matchValue.length;\n }\n //String\n // eslint-disable-next-line\n if (/^'((?:[^\\\\']+?|\\\\.|'')*)'(?!')/.exec(sqlString)) {\n // eslint-disable-next-line\n matchValue = /^'((?:[^\\\\']+?|\\\\.|'')*)'(?!')/.exec(sqlString)[0];\n if (matchValue[matchValue.length - 2] === '(') {\n var isClosed = false;\n for (var j = matchValue.length; j < sqlString.length; j++) {\n matchValue += sqlString[j];\n if (sqlString[j] === ')') {\n isClosed = true;\n }\n if (isClosed && sqlString[j] === '\\'') {\n break;\n }\n }\n }\n this.parser.push(['String', matchValue]);\n return matchValue.length;\n }\n // Double String\n // eslint-disable-next-line\n if (/^\"([^\\\\\"]*(?:\\\\.[^\\\\\"]*)*)\"/.exec(sqlString)) {\n // eslint-disable-next-line\n matchValue = /^\"([^\\\\\"]*(?:\\\\.[^\\\\\"]*)*)\"/.exec(sqlString)[0];\n this.parser.push(['DoubleString', matchValue]);\n return matchValue.length;\n }\n //Number\n // eslint-disable-next-line\n if (/^[0-9]+(\\.[0-9]+)?/.exec(sqlString)) {\n // eslint-disable-next-line\n matchValue = /^[0-9]+(\\.[0-9]+)?/.exec(sqlString)[0];\n this.parser.push(['Number', matchValue]);\n return matchValue.length;\n }\n //Negative Number\n // eslint-disable-next-line\n if (/^-?[0-9]+(\\.[0-9]+)?/.exec(sqlString)) {\n // eslint-disable-next-line\n matchValue = /^-?[0-9]+(\\.[0-9]+)?/.exec(sqlString)[0];\n this.parser.push(['Number', matchValue]);\n return matchValue.length;\n }\n return 1;\n };\n QueryBuilder.prototype.checkLiteral = function () {\n var lastParser = this.parser[this.parser.length - 1];\n if (!lastParser) {\n return true;\n }\n else {\n var secParser = this.parser[this.parser.length - 2];\n 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 // eslint-disable-next-line\n if (/^[0-9]+(\\.[0-9]+)?/.exec(sqlString)) {\n var secParser = this.parser[this.parser.length - 2];\n var betweenParser = this.parser[this.parser.length - 3];\n if (lastParser[0] === 'Left' && (secParser && secParser[0] === 'Conditions')) {\n return true;\n }\n var betweenOperator = sqlLocale ? this.l10n.getConstant('Between').toLowerCase() : 'between';\n if (lastParser[0] === 'Conditions' && (betweenParser && betweenParser[1].indexOf(betweenOperator) < 0)) {\n return true;\n }\n }\n }\n return false;\n };\n QueryBuilder.prototype.getOperator = function (value, operator, sqlLocale) {\n var operators = {\n '=': 'equal', '!=': 'notequal', '<': 'lessthan', '>': 'greaterthan', '<=': 'lessthanorequal',\n '>=': 'greaterthanorequal', 'in': 'in', 'not in': 'notin', 'between': 'between', 'not between': 'notbetween',\n 'is empty': 'isempty', 'is null': 'isnull', 'is not null': 'isnotnull', 'is not empty': 'isnotempty'\n };\n if (sqlLocale) {\n var localeOperator = Object.keys(this.sqlOperators);\n for (var i = 0; i < localeOperator.length; i++) {\n if (this.sqlOperators[localeOperator[i]] === operator.toUpperCase()) {\n if (value && value.indexOf('%') === 0 && value[value.length - 1] === '%') {\n return (operator.toUpperCase() === 'NOT LIKE') ? 'notcontains' : 'contains';\n }\n else if (value && value.indexOf('%') !== 0 && value.indexOf('%') === value.length - 1) {\n return (operator.toUpperCase() === 'NOT LIKE') ? 'notstartswith' : 'startswith';\n }\n else if (value && value.indexOf('%') === 0 && value.indexOf('%') !== value.length - 1) {\n return (operator.toUpperCase() === 'NOT LIKE') ? 'notendswith' : 'endswith';\n }\n return localeOperator[i];\n }\n }\n return null;\n }\n if (value) {\n if (value.indexOf('%') === 0 && value[value.length - 1] === '%') {\n return (operator === 'not like') ? 'notcontains' : 'contains';\n }\n else if (value.indexOf('%') !== 0 && value.indexOf('%') === value.length - 1) {\n return (operator === 'not like') ? 'notstartswith' : 'startswith';\n }\n else if (value.indexOf('%') === 0 && value.indexOf('%') !== value.length - 1) {\n return (operator === 'not like') ? 'notendswith' : 'endswith';\n }\n }\n else {\n if (operator === 'not like') {\n return 'notequal';\n }\n else if (operator === 'like') {\n return 'equal';\n }\n }\n return operators[\"\" + operator];\n };\n QueryBuilder.prototype.getTypeFromColumn = function (rules) {\n var columnData = this.getColumn(rules.field);\n if (!isNullOrUndefined(columnData)) {\n return columnData.type;\n }\n return null;\n };\n QueryBuilder.prototype.getLabelFromColumn = function (field) {\n var label = '';\n var l = 0;\n if (this.separator !== '') {\n var fieldColl = field.split(this.separator);\n for (var i = 0; i < fieldColl.length; i++) {\n label += this.getLabelFromField(fieldColl, i + 1);\n l++;\n if (l < fieldColl.length) {\n label += this.separator;\n }\n }\n return label;\n }\n else {\n var labelItem = this.getColumn(field).label;\n return labelItem;\n }\n };\n QueryBuilder.prototype.getLabelFromField = function (field, startIdx) {\n var fieldName = '';\n var j = 0;\n for (var k = 0; k < startIdx; k++) {\n fieldName += field[k];\n j++;\n if (j < startIdx) {\n fieldName += this.separator;\n }\n }\n return this.getColumn(fieldName).label;\n };\n QueryBuilder.prototype.processParser = function (parser, rules, levelColl, sqlLocale) {\n var j;\n var jLen;\n var rule;\n var subRules;\n var numVal = [];\n var strVal = [];\n var k;\n var kLen;\n var l;\n var lLen;\n var grpCount;\n var operator;\n var isLeftOpened = false;\n for (var i = 0, iLen = parser.length; i < iLen; i++) {\n if (parser[i][0] === 'Literal') {\n var column = this.getColumn(parser[i][1]);\n rule = { label: (column && column.label) ? column.label : parser[i][1], field: parser[i][1] };\n if (parser[i + 1][0] === 'SubOperators') {\n if (parser[i + 1][1].indexOf('null') > -1 || parser[i + 1][1].indexOf('empty') > -1) {\n rule.operator = this.getOperator(' ', parser[i + 1][1], sqlLocale);\n rule.value = null;\n rule.type = this.getTypeFromColumn(rule);\n }\n else {\n var oper = parser[i + 3][1] ? parser[i + 3][1].replace(/'/g, '') : parser[i + 3][1];\n rule.operator = this.getOperator(oper, parser[i + 1][1], sqlLocale);\n }\n operator = parser[i + 1][1];\n i++;\n j = i + 1;\n jLen = iLen;\n if (sqlLocale && rule.operator === 'contains' || rule.operator === 'startswith' || rule.operator === 'endswith') {\n operator = 'like';\n }\n else if (sqlLocale && rule.operator === 'notcontains' || rule.operator === 'notstartswith' || rule.operator === 'notendswith') {\n operator = 'not like';\n }\n else if (sqlLocale) {\n operator = rule.operator;\n }\n for (j = i + 1; j < jLen; j++) {\n if (operator.indexOf('between') < 0 && parser[j][0] === 'Left') {\n isLeftOpened = true;\n }\n else if (parser[j][0] === 'Right' && isLeftOpened) {\n i = j;\n isLeftOpened = false;\n break;\n }\n else {\n if (operator.indexOf('null') > -1 || operator.indexOf('empty') > -1) {\n break;\n }\n if (operator.indexOf('like') > -1 && parser[j][0] === 'String') {\n var val = parser[j][1];\n if (parser[j][1] && parser[j][1][0] === '\\'') {\n val = parser[j][1].substring(1, parser[j][1].length - 1);\n }\n val = val ? val.replace(/%/g, '') : parser[j][1];\n rule.value = val;\n rule.type = 'string';\n }\n else if (operator.indexOf('between') > -1) {\n if (parser[j][0] === 'Literal' || parser[j][0] === 'Left') {\n break;\n }\n if (parser[j][0] === 'Number') {\n numVal.push(Number(parser[j][1]));\n }\n else if (parser[j][0] === 'String') {\n var val = parser[j][1];\n if (parser[j][1] && parser[j][1][0] === '\\'') {\n val = parser[j][1].substring(1, parser[j][1].length - 1);\n }\n strVal.push(val);\n }\n }\n else {\n if (parser[j][0] === 'Number') {\n numVal.push(Number(parser[j][1]));\n }\n else if (parser[j][0] === 'String') {\n var val = parser[j][1];\n if (parser[j][1] && parser[j][1][0] === '\\'') {\n val = parser[j][1].substring(1, parser[j][1].length - 1);\n }\n strVal.push(val);\n }\n }\n rule.type = this.getTypeFromColumn(rule);\n }\n }\n if (operator.indexOf('like') < 0) {\n if (parser[j - 1][0] === 'Number') {\n rule.value = numVal;\n rule.type = 'number';\n }\n else if (parser[j - 1][0] === 'String') {\n rule.value = strVal;\n rule.type = 'string';\n }\n else if (operator.indexOf('between') > -1 && parser[j - 1][0] === 'Conditions') {\n if (strVal.length !== 0) {\n rule.value = strVal;\n rule.type = 'string';\n }\n else {\n rule.value = numVal;\n rule.type = 'number';\n }\n }\n numVal = [];\n strVal = [];\n rule.type = this.getTypeFromColumn(rule);\n }\n }\n else if (parser[i + 1][0] === 'Operators') {\n rule.operator = this.getOperator(parser[i + 2][1], parser[i + 1][1], sqlLocale);\n var isEmptyOper = false;\n if (rule.operator == \"equal\" && parser[i + 2][0] === \"String\" && parser[i + 2][1] === \"''\") {\n rule.operator = \"isempty\";\n isEmptyOper = true;\n }\n else if (rule.operator == \"notequal\" && parser[i + 2][0] === \"String\" && parser[i + 2][1] === \"''\") {\n rule.operator = \"isnotempty\";\n isEmptyOper = true;\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 rule.value = parser[i + 2][1] ? parser[i + 2][1].replace(/'/g, '') : parser[i + 2][1];\n }\n rule.type = this.getTypeFromColumn(rule);\n }\n rules.rules.push(rule);\n }\n else if (parser[i][0] === 'Left') {\n if (!(parser[0][0] === 'Left') && (parser[i - 1][1] === 'not' || sqlLocale && this.l10n.getConstant('NOT').toLowerCase() === parser[i - 1][1])) {\n continue;\n }\n this.parser = parser.splice(i + 1, iLen - (i + 1));\n if (this.enableNotCondition) {\n subRules = { condition: 'and', rules: [], not: false };\n }\n else {\n subRules = { condition: 'and', rules: [] };\n }\n grpCount = 0;\n kLen = rules.rules.length;\n for (k = 0; k < kLen; k++) { //To get the group position\n if (rules.rules[k].rules) {\n grpCount++;\n }\n }\n levelColl.push(grpCount);\n rules.rules.push(subRules);\n subRules = this.processParser(this.parser, subRules, levelColl, sqlLocale);\n return rules;\n }\n else if (parser[i][0] === 'Conditions') {\n if (parser[i][1] === 'not' || (sqlLocale && this.l10n.getConstant('NOT').toLowerCase() === parser[i][1])) {\n rules.not = true;\n }\n else {\n rules.condition = parser[i][1];\n }\n }\n else if (parser[i][0] === 'Right') {\n this.parser = parser.splice(i + 1, iLen - (i + 1));\n levelColl.pop(); //To get the parent Group\n rules = this.rule;\n lLen = levelColl.length;\n for (l = 0; l < lLen; l++) {\n rules = this.findGroupByIdx(levelColl[l], rules, l === 0);\n }\n return this.processParser(this.parser, rules, levelColl, sqlLocale);\n }\n }\n return rules;\n };\n /**\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 this.addRules([{ 'label': getRule.label, 'field': getRule.field, 'type': getRule.type, 'operator': getRule.operator,\n 'value': getRule.value }], groupId);\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 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 addElem[i].disabled = true;\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] !== 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 addElem[i].disabled = false;\n lockElem[i].disabled = false;\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 lockElem[i].children[0].classList.remove('e-lock');\n lockElem[i].children[0].classList.add('e-unlock');\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 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 Complex({ condition: 'and', rules: [] }, Rule)\n ], QueryBuilder.prototype, \"rule\", void 0);\n QueryBuilder = __decorate([\n NotifyPropertyChanges\n ], QueryBuilder);\n return QueryBuilder;\n}(Component));\nexport { QueryBuilder };\nvar LevelColl = /** @class */ (function () {\n function LevelColl() {\n }\n return LevelColl;\n}());\n","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, max-len\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, max-len\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"],"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","MultiSelect","Inject","CheckBoxSelection","getPersistData","addOnPersist","reset","isImportRules","bodyElem","querySelector","inputElement","querySelectorAll","len","className","indexOf","getComponent","destroy","parentElement","innerHTML","grpContainer","createElement","attrs","class","grpHeader","grpBody","appendChild","headerTemplate","isRoot","enableNotCondition","removeClass","levelColl","id","setProperties","rule","rules","disableRuleCondition","getWrapper","getModuleName","requiredModules","modules","push","member","args","GetRootColumnName","field","separator","split","initialize","dataColl","columnKeys","keys","cols","categories","type","groupBy","isDate","validateObj","columns","columnSort","updateCustomOperator","isNaN","Date","parse","getTime","validation","category","l10n","getConstant","operators","customOperators","updateSubFieldsFromColumns","label","updateSubFields","trigger","col","data","sampCol","result","compField","resData","column","from","isNullOrUndefined","_loop_1","j","sqlIdx","operator_1","operColl","values","map","join","valueIdx","this_1","focusEventHandler","event","clickEventHandler","groupID","tagName","animation","Animation","duration","delay","renderSummary","summaryElem","document","getElementById","txtareaElem","animate","name","groupElem","style","display","textContent","getSqlFromRules","height","scrollHeight","actionButton","deleteRule","ruleClone","ruleLock","groupLock","groupClone","closest","deleteGroup","addGroupElement","mRules","extend","setGroupRules","renderSummaryCollapse","forIdValue","getAttribute","targetValue","replace","group","getGroup","ariaChecked","toggleElem","getElementsByClassName","addClass","cancel","toLowerCase","beforeSuccessCallBack","observedChangeArgs","beforeRules","getValidRules","getParentGroup","filterRules","selectBtn","showButtons","groupInsert","maxGroupCount","enableRtl","children","addRuleElement","appendRuleElem","parentId","action","ruleElem","elem","ruleListElem","select","setAttribute","ruleIdCounter","cloneRule","insertBefore","ruleTemplate","requestType","ruleID","ruleTemplateFn","templateParser","templateID","getOperators","operatorFields","isReact","isAngular","templateColl","nodeType","isVue3","append","cloneNode","lockGroup","lockRule","cloneGroup","ruleDelete","renderReactTemplates","isRuleTemplate","isInitialLoad","addRuleSuccessCallBack","trgt","act","pId","isRlTmp","dropDownList","getColumn","newRule","operator","selectedColumn","passedRule","args_1","displayMode","spanElement","classList","add","previousElementSibling","updateAddedRule","fieldMode","ddlField","ddlValue","autoSelectField","dataSource","placeholder","popupHeight","close","fieldClose","bind","change","changeField","open","popupOpen","cssClass","fieldModel","DropDownList","appendTo","ddlVal","getDataByValue","changeRule","itemData","dummyDropdownTreeDs","updateDropdowntreeDS","child","expanded","selectable","showClearButton","changeOnBlur","treeSettings","expandOn","dropdowntree","DropDownTree","getLabelFromColumn","parseInt","toString","index","custom","splice","changeRuleTemplate","operVal","parentGroup","previousColumn","detach","clearQBTemplate","renderToolTip","tooltip","Tooltip","content","isSticky","position","afterClose","beforeOpen","tooltipCloseElement","validateFields","dropDownTreeObj","isValid","allowValidation","excludeOprs","fieldElem","indexElem","valArray","dropDownObj","tempElem","ruleElemCln","validateRule","valElem","jLen","refreshLevelColl","obj","groupElement","level","refreshLevel","childElem","ruleList","iLen","groupCount","slice","groupTemplate","glueElem","inputElem","labelElem","grpActElem","groupBtn","groupHdrElem","grpBodyElem","rulesElem","role","clsName","cloneClsName","lockClsName","filterElem","cloneRuleBtnElem","title","cloneLockBtnElem","delBtnElem","isGroup","isBtnClick","addGroupSuccess","eventTarget","dltGroupBtn","groupIdCounter","headerTemplateFn","andInpElem","orInpElem","andLblElem","orLblElem","btnGroupId","groupDelete","Button","iconCss","rippleEffect","selector","childElems","grpLen","parentNode","addGroups","addRuleToNewGroups","cloneBtnElem","lockBtnElem","lockSpanElement","notElem","args_2","notCondition","undefined","DropDownButton","items","grpId","chgrpId","childGroupID","template","groupHdr","getRuleCollection","headerFn","notifyChange","grpElement","ruleElement","format","getFormat","intl","formatDate","templateChange","updateRules","eventsArgs","grpElem","validateValue","prevOper","arrOper","grpEle","destroyControls","changeValue","contains","dateElement","rbValue","immediateModeDelay","window","clearInterval","timer","setInterval","filterValue","grID","rlID","ele","changeValueSuccessCallBack","ddl","item","popupObj","getItemData","customArgs","isInteracted","previousItemData","prevItemData","previousItem","e","previousValue","ddtElem","ddt","oldValue","dataBind","destroySubFields","subFieldElem","ddlArgs","ddlObj","changeFilter","flt","dl","rl","tmpRl","dArg","selectedField","fieldChangeSuccess","operatorElem","changeOperator","opr","selectedIndex","operatorChangeSuccess","changeRuleValues","tempRule","tooltipElem","createSubFields","nextElementSibling","remove","subFieldValue","subFilterCounter","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","_loop_2","this_2","forEach","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","idx","ruleValElem","selectedVal","columnData","isTemplate","isPublic","txtBox","input","textBoxModel","inputobj","TextBox","minWidth","renderNumberValue","selVal","txtInp","numericTxt","step","numericTextBoxModel","numeric","NumericTextBox","processValueString","numArr","strArr","kLen","parseDate","formatOpt","dParser","getDateParser","skeleton","renderControls","isRendered","length_1","processBoolValues","datepick","datePicker","place","formatObj","locale","getLocale","datePickerModel","DatePicker","orgValue","isCheck","radioBtn","checked","radioButtonModel","radiobutton","RadioButton","getOperatorIndex","getPreviousItemData","isRender","filtElem","getElementsByTagName","filtObj","isTempRendered","setColumnTemplate","inputLen","renderTemplate","observedActionArgs","actionBeginSuccessCallBack","Element","columnTemplateFn","valElemColl","updateValues","controlName","radioBtnObj","refresh","selectedDate","isNotTrigger","valueContainer","elementCln","i_1","i_2","ruleValueUpdate","beforeRule","afterRule","JSON","stringify","previousRule","oper","arrOperator","dupSelectedValue","parseFloat","isObject","formatOptions","findGroupByIdx","groupIdx","ruleColl","dupRuleColl","popupElement","unWireEvents","portals","addRules","groups","importRules","initWrapper","trim","summaryView","notGroupRtl","readonly","enableReadonly","buttons","button","contentElem","textElem","styles","editElem","divElem","collapseElem","sortDirection","executeLocal","sortByDesc","sortBy","onChangeNotGroup","checkNotGroup","orgRule","onPropertyChanged","newProp","oldProp","_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","templateCompiler","compile","error","wireEvents","wrapper","EventHandler","keyBoardHandler","isParent","groupLevel","groupId","deleteGroupSuccessCallBack","nextElem","prevElem","removeString","remRule","ruleElemColl","isTemplateRendered","isPlatformTemplate","deleteRuleSuccessCallBack","clnruleElem","err","i_3","lockGrpTarget","keyCode","preventDefault","clearTemplate","count","andElem","orElem","disabled","currentRule","getRules","ruleCondtion","isValidRule","customObj","isQuestion","notValue","getRule","HTMLElement","deleteGroups","groupIdColl","getFilteredRecords","predicate","getPredicate","dataManagerQuery","where","deleteRules","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","lockRuleTarget","cloneElem","getInstance","deleteGroupElems","addRuleGroupElems","removeRuleElems","elems","enableBtnGroup","isDateFunction","dateFunc","getSqlString","enableEscape","queryStr","sqlLocale","valueStr","ruleOpertor","ruleCondition","custOper","isCustom","setRulesFromSql","sqlString","ruleModel","getRulesFromSql","sqlParser","processParser","allowEscape","getParameterizedSql","sql","notify","prop","onPropertyChange","setParameterizedSql","sqlQuery","getParameterizedNamedSql","setParameterizedNamedSql","setMongoQuery","mongoQuery","mongoLocale","getMongoQuery","isCloneRule","parentGroupID","isCloneGroup","str","st","parseSqlStrings","conditions","subOp","regexStr","matchValue","test","RegExp","exec","lastPasrser","checkLiteral","checkNumberLiteral","isClosed","lastParser","secParser","betweenParser","betweenOperator","getOperator","localeOperator","=","!=","<",">","<=",">=","not in","not between","is empty","is null","is not null","is not empty","getTypeFromColumn","l","getLabelFromField","startIdx","fieldName","subRules","lLen","grpCount","numVal","strVal","isLeftOpened","val","substring","pop","targetGrpId","filter","lockItem","disableRuleControls","newGroup","disableHeaderControls","updateLockItems","isDisabled","addElem","deleteGrpElem","lockElem","groupContElem","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","updateValue","ruleVal","namedRuleVal","namedParameters","namedField","getNamedParameter","newField","currField"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ej2-querybuilder.umd.min.js","sources":["../src/query-builder/query-builder.js","../src/query-builder/query-library.js"],"sourcesContent":["var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n/**\n * Query Builder Source\n */\nimport { Component, NotifyPropertyChanges, getComponent, Browser, compile, append } from '@syncfusion/ej2-base';\nimport { Property, ChildProperty, Complex, L10n, closest, extend, isNullOrUndefined, Collection, cldrData } from '@syncfusion/ej2-base';\nimport { getInstance, addClass, removeClass, rippleEffect, detach, classList } from '@syncfusion/ej2-base';\nimport { Internationalization, getUniqueID, select } from '@syncfusion/ej2-base';\nimport { Button, RadioButton } from '@syncfusion/ej2-buttons';\nimport { DropDownList, CheckBoxSelection, DropDownTree } from '@syncfusion/ej2-dropdowns';\nimport { MultiSelect } from '@syncfusion/ej2-dropdowns';\nimport { Event, EventHandler, getValue, Animation } from '@syncfusion/ej2-base';\nimport { Query, Predicate, DataManager, Deferred } from '@syncfusion/ej2-data';\nimport { TextBox, NumericTextBox } from '@syncfusion/ej2-inputs';\nimport { DatePicker } from '@syncfusion/ej2-calendars';\nimport { DropDownButton } from '@syncfusion/ej2-splitbuttons';\nimport { Tooltip, createSpinner, showSpinner, hideSpinner } from '@syncfusion/ej2-popups';\nimport { compile as templateCompiler } from '@syncfusion/ej2-base';\n/**\n * Defines the Columns of Query Builder\n */\nvar Columns = /** @class */ (function (_super) {\n __extends(Columns, _super);\n function Columns() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], Columns.prototype, \"field\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"label\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"type\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"values\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"operators\", void 0);\n __decorate([\n Property()\n ], Columns.prototype, \"ruleTemplate\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"template\", void 0);\n __decorate([\n Property({ isRequired: true, min: 0, max: Number.MAX_VALUE })\n ], Columns.prototype, \"validation\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"format\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"step\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"value\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"category\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"columns\", void 0);\n return Columns;\n}(ChildProperty));\nexport { Columns };\n/**\n * Defines the rule of Query Builder\n */\nvar Rule = /** @class */ (function (_super) {\n __extends(Rule, _super);\n function Rule() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], Rule.prototype, \"condition\", void 0);\n __decorate([\n Collection([], Rule)\n ], Rule.prototype, \"rules\", void 0);\n __decorate([\n Property(null)\n ], Rule.prototype, \"field\", void 0);\n __decorate([\n Property(null)\n ], Rule.prototype, \"label\", void 0);\n __decorate([\n Property(null)\n ], Rule.prototype, \"type\", void 0);\n __decorate([\n Property(null)\n ], Rule.prototype, \"operator\", void 0);\n __decorate([\n Property(null)\n ], Rule.prototype, \"value\", void 0);\n __decorate([\n Property(false)\n ], Rule.prototype, \"not\", void 0);\n __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 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.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 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 var animation = new Animation({ duration: 1000, delay: 0 });\n animation.animate('.e-query-builder', { name: 'SlideLeftIn' });\n document.getElementById(this.element.id + '_summary_content').style.display = 'none';\n if (this.element.querySelectorAll('.e-group-container').length < 1) {\n this.addGroupElement(false, this.element, this.rule.condition, false, this.rule.not);\n var mRules = extend({}, this.rule, {}, true);\n this.setGroupRules(mRules);\n this.renderSummaryCollapse();\n }\n else {\n var groupElem = this.element.querySelector('.e-group-container');\n if (groupElem.querySelectorAll('.e-collapse-rule').length < 1) {\n this.renderSummaryCollapse();\n }\n groupElem.style.display = 'block';\n }\n 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 groupID = element.id.replace(this.element.id + '_', '');\n var group = this.getGroup(groupID);\n var ariaChecked = void 0;\n if (this.enableNotCondition) {\n if (target.className.indexOf('e-qb-toggle') > -1) {\n var toggleElem = element.getElementsByClassName('e-qb-toggle')[0];\n if (toggleElem.className.indexOf('e-active-toggle') > -1) {\n removeClass([toggleElem], 'e-active-toggle');\n ariaChecked = false;\n }\n else {\n addClass([toggleElem], 'e-active-toggle');\n ariaChecked = true;\n }\n targetValue = group.condition;\n }\n else {\n ariaChecked = group.not;\n }\n }\n args = { groupID: groupID, cancel: false, type: 'condition', value: targetValue.toLowerCase() };\n if (this.enableNotCondition) {\n args = { groupID: groupID, cancel: false, type: 'condition', value: targetValue.toLowerCase(),\n 'not': ariaChecked };\n }\n }\n if (!this.isImportRules) {\n this.trigger('beforeChange', args, function (observedChangeArgs) {\n _this.beforeSuccessCallBack(observedChangeArgs, target);\n });\n }\n else {\n this.beforeSuccessCallBack(args, target);\n }\n this.target = target;\n }\n };\n QueryBuilder.prototype.beforeSuccessCallBack = function (args, target) {\n if (!args.cancel) {\n var element = closest(target, '.e-group-container');\n var groupID = element.id.replace(this.element.id + '_', '');\n var beforeRules = this.getValidRules(this.rule);\n var rule = this.getParentGroup(element);\n rule.condition = args.value;\n if (this.enableNotCondition) {\n rule.not = args.not;\n }\n if (!this.isImportRules) {\n this.trigger('change', { groupID: groupID, type: 'condition', value: rule.condition });\n }\n this.filterRules(beforeRules, this.getValidRules(this.rule), 'condition');\n }\n };\n QueryBuilder.prototype.selectBtn = function (target, event) {\n if (event.name === 'beforeOpen') {\n if (this.showButtons.groupInsert || isNullOrUndefined(this.showButtons.groupInsert)) {\n if (this.element.querySelectorAll('.e-group-container').length >= this.maxGroupCount + 1) {\n addClass([event.element.querySelector('li span.e-addgroup').parentElement], 'e-button-hide');\n }\n else {\n removeClass([event.element.querySelector('li span.e-addgroup').parentElement], 'e-button-hide');\n }\n if (this.enableRtl) {\n addClass([event.element.querySelector('li').parentElement], 'e-rtl');\n }\n }\n else {\n addClass([event.element.querySelector('li span.e-addgroup').parentElement], 'e-button-hide');\n }\n }\n else if (event.element.children[0].className.indexOf('e-addrule') > -1) {\n this.addRuleElement(closest(target, '.e-group-container'), {});\n }\n else if (event.element.children[0].className.indexOf('e-addgroup') > -1) {\n this.addGroupElement(true, closest(target, '.e-group-container'), '', true);\n }\n };\n QueryBuilder.prototype.appendRuleElem = function (target, column, type, parentId, action, rule) {\n var ruleElem;\n var elem;\n var ruleListElem = target.querySelector('.e-rule-list');\n var args;\n if (type === 'change') {\n ruleElem = select('#' + parentId, target);\n }\n else {\n ruleElem = this.createElement('div', { attrs: { class: 'e-rule-container' } });\n ruleElem.setAttribute('id', target.id + '_rule' + this.ruleIdCounter);\n if (this.showButtons.cloneRule && this.cloneRuleBtnClick) {\n if (this.ruleIndex < 0) {\n ruleListElem.appendChild(ruleElem);\n }\n else {\n ruleListElem.insertBefore(ruleElem, ruleListElem.children[this.ruleIndex + 1]); // added clone rule to next position\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 (column && column.ruleTemplate && rule) {\n this.renderReactTemplates();\n }\n return ruleElem;\n };\n QueryBuilder.prototype.addRuleElement = function (target, rule, column, action, parentId, isRuleTemplate) {\n var _this = this;\n if (!target) {\n return;\n }\n var args = { groupID: target.id.replace(this.element.id + '_', ''), cancel: false, type: 'insertRule' };\n if (!this.isImportRules && !this.isInitialLoad) {\n this.trigger('beforeChange', args, function (observedChangeArgs) {\n _this.addRuleSuccessCallBack(observedChangeArgs, target, rule, column, action, parentId, isRuleTemplate);\n });\n }\n else {\n this.isInitialLoad = false;\n this.addRuleSuccessCallBack(args, target, rule, column, action, parentId, isRuleTemplate);\n }\n };\n QueryBuilder.prototype.addRuleSuccessCallBack = function (args, trgt, rule, col, act, pId, isRlTmp) {\n var height = (this.element.className.indexOf('e-device') > -1) ? '250px' : '200px';\n var ruleID;\n var column = (rule && rule.field) ? this.getColumn(rule.field) : col ? col : this.columns[0];\n var operators;\n var dropDownList;\n var ruleElem;\n var newRule = { 'label': '', 'field': '', 'type': '', 'operator': '' };\n if (!args.cancel) {\n if (column && column.ruleTemplate && rule.field) {\n this.selectedColumn = column;\n operators = this.selectedColumn.operators;\n newRule = { 'label': column.label, 'field': column.field, 'type': column.type, 'operator': operators[0].value };\n var passedRule = Object.keys(rule).length ? rule : newRule;\n ruleElem = this.appendRuleElem(trgt, column, act, pId, 'field', passedRule);\n var args_1 = { requestType: 'template-create', action: 'insert-rule', ruleID: ruleElem.id,\n fields: this.fields, rule: passedRule };\n this.trigger('actionBegin', args_1);\n }\n else {\n ruleElem = this.appendRuleElem(trgt, column, act, pId, 'field');\n ruleElem.querySelector('.e-filter-input').setAttribute('id', ruleElem.id + '_filterkey');\n var element = ruleElem.querySelector('.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 if (ruleElem.previousElementSibling && ruleElem.previousElementSibling.className.indexOf('e-rule-container') > -1) {\n if (ruleElem.className.indexOf('e-joined-rule') < 0) {\n ruleElem.className += ' e-joined-rule';\n }\n if (ruleElem.previousElementSibling.className.indexOf('e-prev-joined-rule') < 0) {\n ruleElem.previousElementSibling.className += ' e-prev-joined-rule';\n }\n }\n if (ruleElem.previousElementSibling && ruleElem.previousElementSibling.className.indexOf('e-group-container') > -1 &&\n ruleElem.className.indexOf('e-separate-rule') < 0) {\n ruleElem.className += ' e-separate-rule';\n }\n if (!this.isImportRules) {\n this.updateAddedRule(trgt, rule, newRule, isRlTmp, pId);\n }\n if (!column || (column && !column.ruleTemplate) || !rule.field) {\n if (this.fieldMode === 'Default') {\n var ddlField = void 0;\n var ddlValue = void 0;\n if (this.separator && rule.field) {\n ddlValue = this.GetRootColumnName(rule.field);\n }\n else 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) : dropDownList.value;\n }\n this.selectedColumn = dropDownList.getDataByValue(ddlVal);\n if (Object.keys(rule).length) {\n this.changeRule(rule, {\n element: dropDownList.element, itemData: this.selectedColumn\n });\n }\n }\n else {\n var ddlField = void 0;\n var ddlValue = this.isImportRules ? rule.field : rule.field;\n this.dummyDropdownTreeDs = extend([], this.columns, [], true);\n this.updateDropdowntreeDS(this.dummyDropdownTreeDs);\n ddlField = {\n fields: { dataSource: this.dummyDropdownTreeDs,\n value: 'field', text: 'label', child: 'columns', expanded: 'expanded', selectable: 'selectable' },\n placeholder: this.l10n.getConstant('SelectField'), showClearButton: false,\n popupHeight: ((this.columns.length > 5) ? height : 'auto'), changeOnBlur: false,\n change: this.changeField.bind(this), value: !isNullOrUndefined(ddlValue) ? [ddlValue] : null,\n open: this.popupOpen.bind(this, false), treeSettings: { expandOn: 'Click' },\n cssClass: 'e-qb-ddt'\n };\n if (this.fieldModel) {\n ddlField = __assign({}, ddlField, this.fieldModel);\n }\n var dropdowntree = new DropDownTree(ddlField);\n dropdowntree.appendTo('#' + ruleElem.id + '_filterkey');\n if (!isNullOrUndefined(dropdowntree.value)) {\n var value = this.getLabelFromColumn(dropdowntree.value[0]);\n dropdowntree.element.value = value;\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var ddlVal = !isNullOrUndefined(rule.field) ?\n this.GetRootColumnName(rule.field) : dropdowntree.value;\n this.selectedColumn = this.getColumn(ddlVal);\n if (Object.keys(rule).length) {\n this.changeRule(rule, {\n element: dropdowntree.element, itemData: this.selectedColumn\n });\n }\n }\n }\n ruleID = ruleElem.id.replace(this.element.id + '_', '');\n if (!this.isImportRules) {\n this.trigger('change', { groupID: trgt.id.replace(this.element.id + '_', ''), ruleID: ruleID, type: 'insertRule' });\n }\n }\n };\n QueryBuilder.prototype.updateDropdowntreeDS = function (columns) {\n for (var i = 0; i < columns.length; i++) {\n if (columns[parseInt(i.toString(), 10)].type === 'object') {\n columns[parseInt(i.toString(), 10)].selectable = false;\n this.updateDropdowntreeDS(columns[parseInt(i.toString(), 10)].columns);\n }\n }\n };\n QueryBuilder.prototype.updateAddedRule = function (target, rule, newRule, isRuleTemplate, pId) {\n var ruleElem;\n var index = 0;\n var groupElem;\n var rules;\n if (isRuleTemplate) {\n ruleElem = select('#' + pId, target);\n groupElem = closest(target, '.e-group-container');\n rules = this.getParentGroup(groupElem);\n while (ruleElem && ruleElem.previousElementSibling !== null) {\n ruleElem = ruleElem.previousElementSibling;\n index++;\n }\n rules.rules[index] = rule;\n }\n else {\n groupElem = closest(target, '.e-group-container');\n rules = this.getParentGroup(groupElem);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var custom = rule.custom;\n if (Object.keys(rule).length) {\n 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 }\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 }\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);\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 index++;\n }\n fieldElem = tempElem.querySelector('.e-rule-operator .e-control');\n if (!rule.rules[index].operator) {\n if (fieldElem.parentElement.className.indexOf('e-tooltip') < 0 && fieldElem.className.indexOf('e-tooltip') < 0) {\n this.renderToolTip(fieldElem.parentElement);\n }\n isValid = false;\n }\n if (rule.rules[index].value instanceof Array) {\n valArray = rule.rules[index].value;\n }\n if (excludeOprs.indexOf(rule.rules[index].operator) < -1 &&\n (isNullOrUndefined(rule.rules[index].value) &&\n rule.rules[index].type !== 'date') || rule.rules[index].value === '' ||\n (rule.rules[index].value instanceof Array && valArray.length < 1)) {\n var valElem = tempElem.querySelectorAll('.e-rule-value .e-control');\n isValid = false;\n for (var j = 0, jLen = valElem.length; j < jLen; j++) {\n var element = valElem[j];\n var elem = void 0;\n if (element.parentElement.className.indexOf('e-searcher') > -1) {\n elem = closest(element, '.e-multi-select-wrapper');\n if (elem.className.indexOf('e-tooltip') < 0) {\n this.renderToolTip(elem);\n }\n }\n else if (valElem[j].parentElement.className.indexOf('e-tooltip') < 0 && valElem[j].className.indexOf('e-tooltip') < 0) {\n this.renderToolTip(valElem[j].parentElement);\n }\n j++;\n }\n }\n }\n else if ((dropDownObj && dropDownObj.element && isNullOrUndefined(dropDownObj.index)) ||\n (dropDownTreeObj && dropDownTreeObj.element && (isNullOrUndefined(dropDownTreeObj.value) ||\n dropDownTreeObj.value.length < 1))) {\n if (fieldElem.parentElement.className.indexOf('e-tooltip') < 0) {\n this.renderToolTip(fieldElem.parentElement);\n }\n isValid = false;\n }\n }\n }\n return isValid;\n };\n QueryBuilder.prototype.refreshLevelColl = function () {\n this.levelColl = {};\n var groupElem = this.element.querySelector('.e-group-container');\n if (groupElem) {\n this.levelColl[groupElem.id] = [0];\n var obj = { groupElement: groupElem, level: [0] };\n this.refreshLevel(obj);\n }\n };\n QueryBuilder.prototype.refreshLevel = function (obj) {\n var ruleList = obj.groupElement.querySelector('.e-rule-list').children;\n var childElem;\n var groupElem = obj.groupElement;\n var i;\n var iLen = ruleList.length;\n var groupCount = 0;\n for (i = 0; i < iLen; i++) {\n childElem = ruleList[i];\n if (childElem.className.indexOf('e-group-container') > -1) {\n obj.level.push(groupCount);\n this.levelColl[childElem.id] = obj.level.slice();\n groupCount++;\n obj.groupElement = childElem;\n obj = this.refreshLevel(obj);\n }\n }\n var ruleListElem = closest(groupElem, '.e-rule-list');\n obj.groupElement = ruleListElem ? closest(ruleListElem, '.e-group-container') : groupElem;\n obj.level = this.levelColl[obj.groupElement.id].slice();\n return obj;\n };\n QueryBuilder.prototype.groupTemplate = function () {\n var glueElem;\n var inputElem;\n var labelElem;\n var grpActElem;\n var groupBtn;\n var groupElem = this.createElement('div', { attrs: { class: 'e-group-container' } });\n var groupHdrElem = this.createElement('div', { attrs: { class: 'e-group-header' } });\n var grpBodyElem = this.createElement('div', { attrs: { class: 'e-group-body' } });\n var rulesElem = this.createElement('div', { attrs: { class: 'e-rule-list' } });\n groupElem.appendChild(groupHdrElem);\n grpBodyElem.appendChild(rulesElem);\n groupElem.appendChild(grpBodyElem);\n // create button group in OR and AND process\n if (!this.headerTemplate) {\n glueElem = this.createElement('div', { attrs: { class: 'e-lib e-btn-group', role: 'group' } });\n if (this.enableNotCondition) {\n inputElem = this.createElement('button', { attrs: { type: 'button', class: 'e-qb-toggle' } });\n glueElem.appendChild(inputElem);\n }\n inputElem = this.createElement('input', { attrs: { type: 'radio', class: 'e-btngroup-and', value: 'AND' } });\n glueElem.appendChild(inputElem);\n labelElem = this.createElement('label', { attrs: { class: 'e-lib e-btn e-btngroup-and-lbl e-small' },\n innerHTML: this.l10n.getConstant('AND') });\n glueElem.appendChild(labelElem);\n inputElem = this.createElement('input', { attrs: { type: 'radio', class: 'e-btngroup-or', value: 'OR' } });\n glueElem.appendChild(inputElem);\n labelElem = this.createElement('label', { attrs: { class: 'e-lib e-btn e-btngroup-or-lbl e-small' },\n innerHTML: this.l10n.getConstant('OR') });\n glueElem.appendChild(labelElem);\n groupHdrElem.appendChild(glueElem);\n grpActElem = this.createElement('div', { attrs: { class: 'e-group-action' } });\n groupBtn = this.createElement('button', { attrs: { type: 'button', class: 'e-add-btn' } });\n grpActElem.appendChild(groupBtn);\n groupHdrElem.appendChild(grpActElem);\n }\n return groupElem;\n };\n QueryBuilder.prototype.ruleTemplate = function () {\n var tempElem;\n var clsName;\n var cloneClsName;\n var lockClsName;\n var ruleElem = this.createElement('div');\n var fieldElem = this.createElement('div', { attrs: { class: 'e-rule-field' } });\n tempElem = this.createElement('div', { attrs: { class: 'e-rule-filter' } });\n var filterElem = this.createElement('input', { attrs: { type: 'text', class: 'e-filter-input' } });\n tempElem.appendChild(filterElem);\n fieldElem.appendChild(tempElem);\n tempElem = this.createElement('div', { attrs: { class: 'e-rule-operator' } });\n fieldElem.appendChild(tempElem);\n tempElem = this.createElement('div', { attrs: { class: 'e-rule-value' } });\n fieldElem.appendChild(tempElem);\n tempElem = this.createElement('div', { attrs: { class: 'e-rule-value-delete' } });\n if (this.showButtons.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) {\n this.trigger('beforeChange', args, function (observedChangeArgs) {\n _this.addGroupSuccess(observedChangeArgs, isGroup, target, condition, isBtnClick, not, isRoot, rule);\n });\n }\n else {\n this.isInitialLoad = false;\n this.addGroupSuccess(args, isGroup, target, condition, isBtnClick, not, isRoot, rule);\n }\n };\n QueryBuilder.prototype.addGroupSuccess = function (args, isGroup, eventTarget, condition, isBtnClick, not, isRoot, rule) {\n if (!args.cancel && (this.element.querySelectorAll('.e-group-container').length <= this.maxGroupCount)) {\n var target = eventTarget;\n var dltGroupBtn = void 0;\n var groupID = '';\n if (target.className.indexOf('e-group-container') < 0) {\n groupID = target.querySelector('.e-group-container') && target.querySelector('.e-group-container').id;\n }\n else {\n groupID = target.id;\n }\n var groupElem = this.groupElem.cloneNode(true);\n groupElem.setAttribute('id', this.element.id + '_group' + this.groupIdCounter);\n if (this.headerTemplate) {\n if (isRoot) {\n isGroup = false;\n groupElem.setAttribute('id', this.element.id + '_group0');\n this.headerTemplateFn(groupElem, not, condition, rule, groupID);\n this.groupIdCounter = 0;\n }\n else {\n this.headerTemplateFn(groupElem, not, condition, rule, groupID);\n }\n }\n this.groupIdCounter++;\n if (!this.headerTemplate) {\n var andInpElem = groupElem.querySelector('.e-btngroup-and');\n var orInpElem = groupElem.querySelector('.e-btngroup-or');\n var andLblElem = groupElem.querySelector('.e-btngroup-and-lbl');\n var orLblElem = groupElem.querySelector('.e-btngroup-or-lbl');\n andInpElem.setAttribute('id', this.element.id + '_and' + this.btnGroupId);\n orInpElem.setAttribute('id', this.element.id + '_or' + this.btnGroupId);\n andInpElem.setAttribute('name', this.element.id + '_and' + this.btnGroupId);\n orInpElem.setAttribute('name', this.element.id + '_and' + this.btnGroupId);\n andLblElem.setAttribute('for', this.element.id + '_and' + this.btnGroupId);\n orLblElem.setAttribute('for', this.element.id + '_or' + this.btnGroupId);\n this.btnGroupId++;\n }\n if (isGroup) {\n var clsName = void 0;\n if (this.showButtons.groupDelete || isNullOrUndefined(this.showButtons.groupDelete)) {\n clsName = 'e-deletegroup';\n }\n else {\n clsName = 'e-deletegroup e-button-hide';\n }\n dltGroupBtn = this.createElement('button', { attrs: { type: 'button', class: clsName } });\n var button = new Button({ iconCss: 'e-icons e-delete-icon', cssClass: 'e-small e-round' });\n button.appendTo(dltGroupBtn);\n dltGroupBtn.setAttribute('title', this.l10n.getConstant('DeleteGroup'));\n rippleEffect(dltGroupBtn, { selector: '.deletegroup' });\n 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 childElems[this.groupIndex + 1].parentNode.insertBefore(groupElem, childElems[this.groupIndex + 1]); // clone the element to nxt element\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 var tglBtn = new Button({ content: this.l10n.getConstant('NOT'), cssClass: 'e-btn e-small' });\n tglBtn.appendTo(notElem);\n groupElem.querySelector('.e-btngroup-and-lbl').classList.add('e-not');\n if (this.updatedRule && this.updatedRule.not) {\n addClass([notElem], 'e-active-toggle');\n }\n }\n }\n this.updatedRule = null;\n if (this.headerTemplate) {\n var args_2 = { requestType: 'header-template-create', ruleID: groupElem.id, condition: condition,\n notCondition: this.enableNotCondition ? not : undefined };\n this.trigger('actionBegin', args_2);\n }\n else {\n var groupBtn = groupElem.querySelector('.e-add-btn');\n var btnObj = new DropDownButton({\n items: this.items,\n cssClass: 'e-round e-small e-caret-hide e-addrulegroup',\n iconCss: 'e-icons e-add-icon',\n beforeOpen: this.selectBtn.bind(this, groupBtn),\n select: this.selectBtn.bind(this, groupBtn)\n });\n btnObj.appendTo(groupBtn);\n groupBtn.setAttribute('title', this.l10n.getConstant('AddButton'));\n }\n if (!this.isImportRules) {\n var grpId = target.id.replace(this.element.id + '_', '');\n var chgrpId = groupElem.id.replace(this.element.id + '_', '');\n this.trigger('change', { groupID: grpId, type: 'insertGroup', childGroupID: chgrpId });\n }\n }\n };\n QueryBuilder.prototype.headerTemplateFn = function (groupElem, not, condition, rule, groupID) {\n var template;\n var templateID = this.element.id + '_header';\n var args;\n var groupHdr = groupElem.querySelector('.e-group-header');\n if (this.headerTemplate) {\n args = { requestType: 'header-template-initialize', ruleID: groupElem.id,\n notCondition: this.enableNotCondition ? not : undefined,\n condition: condition, rule: this.getRuleCollection(rule, true), groupID: groupID };\n this.trigger('actionBegin', args);\n this.headerFn = this.templateParser(this.headerTemplate);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.isReact) {\n template = this.headerFn(args, this, groupElem.id, templateID)[0];\n groupHdr.appendChild(template);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n }\n else if (this.isAngular) {\n var templateColl = this.headerFn(args, this, groupElem.id, templateID);\n template = (templateColl[0].nodeType === 3) ? templateColl[1] : templateColl[0];\n groupHdr.appendChild(template);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n }\n else if (this.isVue3) {\n template = this.headerFn(args, this, groupElem.id, templateID);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n append(template, groupHdr);\n }\n else {\n template = this.headerFn(args, this, 'Template', templateID)[0];\n groupHdr.appendChild(template);\n }\n this.renderReactTemplates();\n }\n return groupElem;\n };\n /**\n * Notify the changes to component.\n *\n * @param {string | number | boolean | Date | string[] | number[] | Date[]} value - 'value' to be passed to update the rule value.\n * @param {Element} element - 'element' to be passed to update the rule.\n * @param {string} type - 'type' to be passed to update the rule .\n * @returns {void}.\n */\n QueryBuilder.prototype.notifyChange = function (value, element, type) {\n var grpElement = closest(element, '.e-group-container');\n var rules = this.getParentGroup(grpElement);\n var ruleElement = closest(element, '.e-rule-container');\n var index = 0;\n if (type === 'not') {\n rules.not = value;\n return;\n }\n if (type === 'condition') {\n rules.condition = value;\n return;\n }\n while (ruleElement && ruleElement.previousElementSibling !== null) {\n ruleElement = ruleElement.previousElementSibling;\n index++;\n }\n var rule = rules.rules[index];\n var column = this.getColumn(rule.field);\n var format = this.getFormat(column.format);\n if (column.type === 'date') {\n if (value instanceof Date) {\n value = this.intl.formatDate(value, format);\n }\n else if (value instanceof Array) {\n for (var i = 0; i < value.length; i++) {\n if (value[i] && value[i] instanceof Date) {\n value[i] = this.intl.formatDate(value[i], format);\n }\n }\n }\n }\n if (column.ruleTemplate) {\n this.templateChange(element, value, type);\n }\n else {\n this.isNotified = true;\n this.updateRules(element, value);\n this.isNotified = false;\n }\n };\n QueryBuilder.prototype.templateChange = function (element, value, type) {\n var grpElem = closest(element, '.e-group-container');\n var eventsArgs;\n var rules = this.getParentGroup(grpElem);\n var ruleElem = closest(element, '.e-rule-container');\n var index = 0;\n if (this.allowValidation) {\n this.validateValue(rules, ruleElem);\n }\n while (ruleElem && ruleElem.previousElementSibling !== null) {\n ruleElem = ruleElem.previousElementSibling;\n index++;\n }\n var rule = rules.rules[index];\n if (type === 'field') {\n this.selectedColumn = this.getColumn(value);\n }\n else if (rule) {\n this.selectedColumn = this.getColumn(rule.field);\n }\n var operVal;\n this.previousColumn = this.getColumn(rule.field);\n var beforeRules = this.getValidRules(this.rule);\n if (this.selectedColumn) {\n if (this.selectedColumn.operators) {\n operVal = this.selectedColumn.operators;\n }\n else {\n operVal = this.customOperators[this.selectedColumn.type + 'Operator'];\n }\n }\n var arrOper = ['in', 'notin', 'between', 'notbetween'];\n var prevOper;\n switch (type) {\n case 'field':\n rule.field = value;\n rule.label = this.selectedColumn.label;\n rule.type = this.selectedColumn.type;\n rule.value = '';\n rule.operator = operVal[0].value;\n break;\n case 'operator':\n prevOper = rule.operator;\n rule.operator = value;\n if (arrOper.indexOf(rule.operator) > -1) {\n rule.value = [];\n }\n else if (arrOper.indexOf(prevOper) > -1) {\n rule.value = '';\n }\n break;\n case 'value':\n rule.value = value;\n }\n this.changeRuleTemplate(this.selectedColumn, element);\n this.filterRules(beforeRules, this.getValidRules(this.rule), type);\n if (this.selectedColumn && this.selectedColumn.ruleTemplate) {\n if (type === 'field' || type === 'operator') {\n var grpEle = closest(element, '.e-rule-container');\n this.destroyControls(grpEle, true);\n detach(grpEle.querySelector('.e-rule-field'));\n var ruleElement = this.appendRuleElem(closest(grpEle, '.e-group-container'), this.selectedColumn, 'change', grpEle.id, type, rule);\n if (this.displayMode === 'Vertical' || this.element.className.indexOf('e-device') > -1) {\n ruleElement.className = 'e-rule-container e-vertical-mode';\n }\n else {\n ruleElement.className = 'e-rule-container e-horizontal-mode';\n }\n if (ruleElement.previousElementSibling && ruleElement.previousElementSibling.className.indexOf('e-rule-container') > -1) {\n if (ruleElement.className.indexOf('e-joined-rule') < 0) {\n ruleElement.className += ' e-joined-rule';\n }\n if (ruleElement.previousElementSibling.className.indexOf('e-prev-joined-rule') < 0) {\n ruleElement.previousElementSibling.className += ' e-prev-joined-rule';\n }\n }\n if (ruleElement.previousElementSibling && ruleElement.previousElementSibling.className.indexOf('e-group-container') > -1 &&\n ruleElement.className.indexOf('e-separate-rule') < 0) {\n ruleElement.className += ' e-separate-rule';\n }\n var args = { requestType: 'template-create', action: type, ruleID: grpEle.id,\n fields: this.fields, rule: rule };\n eventsArgs = { groupID: grpElem.id.replace(this.element.id + '_', ''), ruleID: grpEle.id.replace(this.element.id + '_', ''),\n value: rule.field, type: 'field' };\n this.trigger('actionBegin', args);\n this.trigger('change', eventsArgs);\n }\n }\n };\n QueryBuilder.prototype.changeValue = function (i, args) {\n var _this = this;\n var element;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.isNumInput && typeof args.value === 'number') {\n this.isNumInput = false;\n return;\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (args.element && args.element.classList.contains('e-multiselect')) {\n var multiSelectArgs = args;\n element = multiSelectArgs.element;\n }\n else if (args.event) {\n element = args.event.target;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n }\n else if (args.type === 'input' && args.currentTarget) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n element = args.currentTarget;\n }\n else {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n element = args.element;\n }\n if (element.className.indexOf('e-day') > -1 || element.className.indexOf('e-today') > -1 || element.className.indexOf('e-cell') > -1) {\n var calenderArgs = args;\n element = calenderArgs.element;\n }\n var groupElem = closest(element, '.e-group-container');\n var ruleElem = closest(element, '.e-rule-container');\n var groupID = groupElem && groupElem.id.replace(this.element.id + '_', '');\n var ruleID = ruleElem.id.replace(this.element.id + '_', '');\n var dateElement = args;\n var dropDownObj;\n if (dateElement.element && dateElement.element.className.indexOf('e-datepicker') > -1) {\n element = dateElement.element;\n dropDownObj = getComponent(closest(element, '.e-rule-container').querySelector('.e-filter-input'), 'dropdownlist');\n if (dropDownObj) {\n this.selectedColumn = dropDownObj.getDataByValue(dropDownObj.value);\n }\n dropDownObj = getComponent(closest(element, '.e-rule-container').querySelector('.e-filter-input'), 'dropdowntree');\n if (dropDownObj) {\n this.selectedColumn = this.getColumn(dropDownObj.value[0]);\n }\n }\n var value;\n var rbValue;\n if (element.className.indexOf('e-radio') > -1) {\n // eslint-disable-next-line\n rbValue = parseInt(element.id.split('valuekey')[1], 0);\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 var numericTextBoxObj = getInstance(args.currentTarget, 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 index++;\n }\n rules.rules[index].value = '';\n this.changeRule(rules.rules[index], args);\n }\n }\n };\n QueryBuilder.prototype.changeRule = function (rule, ddlArgs) {\n if (!ddlArgs.itemData) {\n if (this.fieldMode === 'DropdownTree') {\n var ddt = getComponent(ddlArgs.element, 'dropdowntree');\n if (ddt.value == null) {\n return;\n }\n }\n else {\n return;\n }\n }\n var tempRule = {};\n var filterElem = closest(ddlArgs.element, '.e-rule-filter');\n filterElem = filterElem ? filterElem : closest(ddlArgs.element, '.e-rule-sub-filter');\n var ddlObj = getComponent(ddlArgs.element, 'dropdownlist');\n if (this.fieldMode === 'DropdownTree' && filterElem !== null) {\n ddlObj = getComponent(ddlArgs.element, 'dropdowntree');\n }\n var element = closest(ddlArgs.element, '.e-group-container');\n var groupID = element.id.replace(this.element.id + '_', '');\n this.changeFilter(filterElem, ddlObj, groupID, rule, tempRule, ddlArgs);\n };\n QueryBuilder.prototype.changeFilter = function (flt, dl, grID, rl, tmpRl, dArg) {\n var _this = this;\n if (flt) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var ddlValue = void 0;\n if (this.fieldMode === 'DropdownTree') {\n ddlValue = (dl.value[0]);\n }\n else {\n ddlValue = this.isImportRules ? this.GetRootColumnName(dl.value) : dl.value;\n }\n this.selectedColumn = this.getColumn(ddlValue);\n var ruleElem = closest(flt, '.e-rule-container');\n var ruleID = ruleElem.id.replace(this.element.id + '_', '');\n var eventsArgs = { groupID: grID, ruleID: ruleID, selectedField: this.fieldMode === 'DropdownTree' ?\n dl.value[0] : dl.value, cancel: false, type: 'field' };\n if (!this.isImportRules) {\n this.trigger('beforeChange', eventsArgs, function (observedChangeArgs) {\n _this.fieldChangeSuccess(observedChangeArgs, tmpRl, flt, rl, dArg);\n });\n }\n else {\n this.fieldChangeSuccess(eventsArgs, tmpRl, flt, rl, dArg);\n }\n }\n else {\n var operatorElem = closest(dArg.element, '.e-rule-operator');\n this.changeOperator(flt, operatorElem, dl, grID, rl, tmpRl, dArg);\n }\n };\n QueryBuilder.prototype.changeOperator = function (\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n flt, opr, dl, grID, rl, tmpRl, dArg) {\n var _this = this;\n var ruleElem;\n var ruleID;\n var eventsArgs;\n if (opr) {\n ruleElem = closest(opr, '.e-rule-container');\n ruleID = ruleElem.id.replace(this.element.id + '_', '');\n eventsArgs = { groupID: grID, ruleID: ruleID, selectedIndex: dl.index, cancel: false, type: 'operator' };\n if (!this.isImportRules) {\n this.trigger('beforeChange', eventsArgs, function (observedChangeArgs) {\n _this.operatorChangeSuccess(observedChangeArgs, flt, tmpRl, rl, dArg);\n });\n }\n else {\n this.operatorChangeSuccess(eventsArgs, flt, tmpRl, rl, dArg);\n }\n }\n else {\n this.changeRuleValues(flt, rl, tmpRl, dArg);\n }\n };\n QueryBuilder.prototype.fieldChangeSuccess = function (args, tempRule, filterElem, rule, ddlArgs) {\n var ruleElem = closest(filterElem, '.e-rule-container');\n var operatorElem = closest(ddlArgs.element, '.e-rule-operator');\n var element = closest(ddlArgs.element, '.e-group-container');\n var groupID = element.id.replace(this.element.id + '_', '');\n var ddlObj = getComponent(ddlArgs.element, 'dropdownlist');\n var tooltipElem = ruleElem.querySelectorAll('.e-tooltip.e-input-group');\n for (var i = 0; i < tooltipElem.length; i++) {\n getComponent(tooltipElem[i], 'tooltip').destroy();\n }\n if (!args.cancel) {\n if (isNullOrUndefined(this.selectedColumn)) {\n return;\n }\n tempRule.type = this.selectedColumn.type;\n if (ruleElem.querySelector('.e-template')) {\n rule.value = '';\n }\n if (this.selectedColumn.type === 'object' && this.fieldMode === 'Default') {\n tempRule.type = this.selectedColumn.columns[0].type;\n while (this.selectedColumn.columns) {\n this.createSubFields(filterElem, rule, tempRule, ddlArgs);\n }\n }\n else {\n this.destroySubFields(filterElem);\n this.changeOperator(filterElem, operatorElem, ddlObj, groupID, rule, tempRule, ddlArgs);\n }\n }\n else {\n this.changeOperator(filterElem, operatorElem, ddlObj, groupID, rule, tempRule, ddlArgs);\n }\n };\n QueryBuilder.prototype.destroySubFields = function (filterElem) {\n while (filterElem && filterElem.nextElementSibling.classList.contains('e-rule-sub-filter')) {\n this.destroyControls(filterElem);\n filterElem.nextElementSibling.remove();\n }\n };\n QueryBuilder.prototype.createSubFields = function (filterElem, rule, tempRule, ddlArgs) {\n var subFieldValue = false;\n var fieldElem = closest(filterElem, '.e-rule-field');\n var tempElem = this.createElement('div', { attrs: { class: 'e-rule-sub-filter', id: 'subfilter' + this.subFilterCounter } });\n fieldElem.insertBefore(tempElem, fieldElem.querySelector('.e-rule-operator'));\n var ruleId = closest(tempElem, '.e-rule-container').id;\n var subFieldElem = this.createElement('input', { attrs: { type: 'text', id: ruleId + '_subfilterkey' + this.subFilterCounter } });\n tempElem.appendChild(subFieldElem);\n var height = (this.element.className.indexOf('e-device') > -1) ? '250px' : '200px';\n var 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)) {\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) ? rule.value : this.setDefaultValue(parentId, true, false);\n this.renderMultiSelect(columnData, parentId, idx, selectedVal, columnData.values);\n if (this.displayMode === 'Vertical' || this.element.className.indexOf('e-device') > -1) {\n ruleValElem.style.width = '100%';\n }\n else {\n ruleValElem.style.width = null;\n ruleValElem.style.minWidth = '200px';\n }\n }\n else {\n if (operator === 'in' || operator === 'notin') {\n selectedVal = (this.isImportRules || this.ruleIndex > -1 || this.groupIndex > -1) ? rule.value : this.setDefaultValue(parentId, true, false);\n selectedValue = selectedVal.join(',');\n }\n var txtBox = void 0;\n txtBox = {\n placeholder: this.l10n.getConstant('SelectValue'),\n input: this.changeValue.bind(this, idx)\n };\n if (this.valueModel && this.valueModel.textBoxModel) {\n txtBox = __assign({}, txtBox, this.valueModel.textBoxModel);\n }\n var inputobj = new TextBox(txtBox);\n inputobj.appendTo('#' + parentId + '_valuekey' + idx);\n inputobj.value = selectedValue;\n inputobj.dataBind();\n }\n };\n QueryBuilder.prototype.renderNumberValue = function (parentId, rule, operator, idx, ruleValElem, itemData, length) {\n var columnData = this.getItemData(parentId);\n var isTemplate = (typeof columnData.template === 'string');\n var selectedVal = (this.isImportRules || this.ruleIndex > -1 || this.groupIndex > -1 || this.isPublic || isTemplate || 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) ? rule.value : this.setDefaultValue(parentId, true, false);\n this.renderMultiSelect(columnData, parentId, idx, selectedVal, columnData.values);\n if (this.element.className.indexOf('e-device') > -1 || this.displayMode === 'Vertical') {\n ruleValElem.style.width = '100%';\n }\n else {\n ruleValElem.style.minWidth = '200px';\n ruleValElem.style.width = null;\n }\n }\n else if (operator === 'in' || operator === 'notin') {\n selectedVal = (this.isImportRules || this.ruleIndex > -1 || this.groupIndex > -1) ? rule.value : this.setDefaultValue(parentId, true, false);\n var selVal = selectedVal.join(',');\n var txtInp = void 0;\n txtInp = {\n placeholder: this.l10n.getConstant('SelectValue'),\n input: this.changeValue.bind(this, idx)\n };\n if (this.valueModel && this.valueModel.textBoxModel) {\n txtInp = __assign({}, txtInp, this.valueModel.textBoxModel);\n }\n var input = new TextBox(txtInp);\n input.appendTo('#' + parentId + '_valuekey' + idx);\n input.value = selVal;\n input.dataBind();\n }\n else {\n itemData = columnData;\n var min = (itemData.validation && itemData.validation.min) ? itemData.validation.min : 0;\n var max = (itemData.validation && itemData.validation.max) ? itemData.validation.max : Number.MAX_VALUE;\n var format = itemData.format ? itemData.format : 'n';\n if (length > 1 && rule) {\n selectedVal = rule.value[idx] ? rule.value[idx] : this.setDefaultValue(parentId, true, true);\n }\n var numericTxt = void 0;\n numericTxt = {\n value: (selectedVal instanceof Array) ? selectedVal[idx] : selectedVal,\n format: format, min: min, max: max, width: '100%',\n step: itemData.step ? itemData.step : 1,\n change: this.changeValue.bind(this, idx)\n };\n if (this.valueModel && this.valueModel.numericTextBoxModel) {\n numericTxt = __assign({}, numericTxt, this.valueModel.numericTextBoxModel);\n }\n var numeric = new NumericTextBox(numericTxt);\n numeric.appendTo('#' + parentId + '_valuekey' + idx);\n numeric.element.setAttribute('aria-label', itemData.label + ' ' + 'Value');\n 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 switch (controlName) {\n case 'checkbox':\n // eslint-disable-next-line\n var value = getComponent(element, controlName).value;\n rule.value = (value !== '') ? value : undefined;\n break;\n case 'textbox':\n rule.value = getComponent(element, controlName).value;\n break;\n case 'dropdownlist':\n rule.value = getComponent(element, controlName).value;\n break;\n case 'radio':\n // eslint-disable-next-line\n var radioBtnObj = getComponent(element, controlName);\n if (radioBtnObj.checked) {\n if (typeof rule.value === 'boolean') {\n rule.value = radioBtnObj.value === 'true';\n }\n else {\n if (this.getColumn(rule.field).values) {\n rule.value = radioBtnObj.value;\n }\n else {\n rule.value = radioBtnObj.value === 'true';\n }\n }\n }\n radioBtnObj.refresh();\n break;\n case 'numerictextbox':\n if (rule.operator.indexOf('between') > -1) {\n if (typeof rule.value === 'string') {\n rule.value = [];\n }\n rule.value[i] = getComponent(element, controlName).value;\n }\n else {\n rule.value = getComponent(element, controlName).value;\n }\n break;\n case 'datepicker':\n // eslint-disable-next-line\n var column = this.getColumn(rule.field);\n // eslint-disable-next-line\n var format = this.getFormat(column.format);\n // eslint-disable-next-line\n var selectedDate = getComponent(element, controlName).value;\n if (rule.operator.indexOf('between') > -1) {\n if (typeof rule.value === 'string') {\n rule.value = [];\n }\n rule.value[i] = this.intl.formatDate(selectedDate, format);\n }\n else if (isNullOrUndefined(format.format) && selectedDate) {\n rule.value = this.intl.formatDate(selectedDate);\n }\n else if (selectedDate) {\n rule.value = this.intl.formatDate(selectedDate, format);\n }\n else {\n rule.value = selectedDate;\n }\n break;\n case 'multiselect':\n rule.value = getComponent(element, controlName).value;\n break;\n }\n };\n QueryBuilder.prototype.updateRules = function (target, selectedValue, i, isNotTrigger) {\n var groupElem = closest(target, '.e-group-container');\n var rule = this.getParentGroup(groupElem);\n var ruleElem = closest(target, '.e-rule-container');\n var index = 0;\n var dropDownObj;\n var eventsArgs;\n var groupID = groupElem.id.replace(this.element.id + '_', '');\n var beforeRules = this.getValidRules(this.rule);\n while (ruleElem && ruleElem.previousElementSibling !== null) {\n ruleElem = ruleElem.previousElementSibling;\n index++;\n }\n var operator = rule.rules[index].operator ? rule.rules[index].operator.toString() : '';\n ruleElem = closest(target, '.e-rule-container');\n var ruleID = ruleElem.id.replace(this.element.id + '_', '');\n if (closest(target, '.e-rule-filter') || closest(target, '.e-rule-sub-filter')) {\n if (this.subFieldElem) {\n target = this.subFieldElem;\n }\n dropDownObj = this.fieldMode === 'DropdownTree' ? getComponent(target, 'dropdowntree') :\n getComponent(target, 'dropdownlist');\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var column = this.fieldMode === 'DropdownTree' ? this.getColumn(dropDownObj.value[0])\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n : this.getColumn(dropDownObj.value);\n if (!this.isImportRules && rule.rules[index].field &&\n rule.rules[index].field.toLowerCase() !== column.field.toLowerCase()) {\n if (!(ruleElem.querySelectorAll('.e-template')) && !(operator.indexOf('null') > -1)\n || (operator.indexOf('empty') > -1)) {\n rule.rules[index].value = '';\n }\n }\n this.selectedColumn = this.getColumn(this.selectedColumn.field);\n rule.rules[index].field = this.selectedColumn.field;\n rule.rules[index].type = this.selectedColumn.type;\n rule.rules[index].label = this.selectedColumn.label;\n var ruleElement = closest(target, '.e-rule-filter');\n ruleElement = ruleElement ? ruleElement : closest(target, '.e-rule-sub-filter');\n var element = ruleElement.nextElementSibling.querySelector('input.e-control');\n element = element ? element : ruleElement.nextElementSibling.nextElementSibling.querySelector('input.e-control');\n operator = getComponent(element, 'dropdownlist').value.toString();\n rule.rules[index].operator = operator;\n // Value Fields\n var valueContainer = ruleElement.nextElementSibling.nextElementSibling;\n var elementCln = valueContainer.querySelectorAll('input.e-control');\n if (elementCln.length < 1) {\n elementCln = valueContainer.querySelectorAll('div.e-control');\n }\n if (elementCln.length < 1) {\n elementCln = valueContainer.querySelectorAll('.e-template');\n }\n eventsArgs = { groupID: groupID, ruleID: ruleID, value: rule.rules[index].field, type: 'field' };\n for (var i_1 = 0; i_1 < elementCln.length; i_1++) {\n if (operator.indexOf('null') > -1 || operator.indexOf('empty') > -1) {\n rule.rules[index].value = null;\n continue;\n }\n this.updateValues(elementCln[i_1], rule.rules[index]);\n }\n if (!this.isImportRules) {\n this.trigger('change', eventsArgs);\n }\n if (this.allowValidation && rule.rules[index].field && target.parentElement.className.indexOf('e-tooltip') > -1) {\n getComponent(target.parentElement, 'tooltip').destroy();\n }\n this.filterRules(beforeRules, this.getValidRules(this.rule), 'field');\n }\n else if (closest(target, '.e-rule-operator')) {\n dropDownObj = getComponent(target, 'dropdownlist');\n rule.rules[index].operator = dropDownObj.value.toString();\n var inputElem = ruleElem.querySelectorAll('.e-rule-value input.e-control');\n eventsArgs = { groupID: groupID, ruleID: ruleID, value: dropDownObj.value, type: 'operator' };\n if (this.allowValidation && rule.rules[index].operator && target.parentElement.className.indexOf('e-tooltip') > -1) {\n getComponent(target.parentElement, 'tooltip').destroy();\n }\n if (inputElem.length > 1 && !(inputElem[0].className.indexOf('e-template') > -1)) {\n rule.rules[index].value = [];\n }\n for (var i_2 = 0; i_2 < inputElem.length; i_2++) {\n if (rule.rules[index].operator.indexOf('null') > -1 || rule.rules[index].operator.indexOf('empty') > -1) {\n rule.rules[index].value = null;\n continue;\n }\n else if (inputElem[i_2].classList.contains('e-template')) {\n continue;\n }\n this.updateValues(inputElem[i_2], rule.rules[index]);\n }\n if (!this.isImportRules) {\n this.trigger('change', eventsArgs);\n }\n this.filterRules(beforeRules, this.getValidRules(this.rule), 'operator');\n }\n else if (closest(target, '.e-rule-value')) {\n this.ruleValueUpdate(target, selectedValue, rule, index, groupElem, ruleElem, i);\n if (!isNotTrigger) {\n this.filterRules(beforeRules, this.getValidRules(this.rule), 'value');\n }\n }\n };\n QueryBuilder.prototype.filterRules = function (beforeRule, afterRule, type) {\n var beforeRuleStr = JSON.stringify({ condition: beforeRule.condition, not: beforeRule.not, rule: beforeRule.rules });\n var afetrRuleStr = JSON.stringify({ condition: afterRule.condition, not: afterRule.not, rule: afterRule.rules });\n if (beforeRuleStr !== afetrRuleStr) {\n if (!this.isImportRules) {\n this.trigger('ruleChange', { previousRule: beforeRule, rule: afterRule, type: type });\n }\n }\n };\n QueryBuilder.prototype.ruleValueUpdate = function (target, selectedValue, rule, index, groupElem, ruleElem, i) {\n var eventsArgs;\n var oper;\n var arrOperator = ['in', 'between', 'notin', 'notbetween'];\n if (rule.rules[index].operator) {\n oper = rule.rules[index].operator.toString().toLowerCase();\n }\n if (selectedValue !== null) {\n if (target.className.indexOf('e-multiselect') > -1 && rule.rules[index].type === 'number' &&\n !this.isNotified) {\n var selVal = [];\n var dupSelectedValue = selectedValue;\n for (var k = 0, kLen = dupSelectedValue.length; k < kLen; k++) {\n if (typeof dupSelectedValue[k] === 'string') {\n selVal.push(parseFloat(dupSelectedValue[k]));\n }\n }\n if (selVal.length) {\n selectedValue = selVal;\n }\n }\n if (this.isNotified) {\n rule.rules[index].value = selectedValue;\n eventsArgs = { groupID: groupElem.id, ruleID: ruleElem.id, value: rule.rules[index].value, type: 'value' };\n if (!this.isImportRules) {\n this.trigger('change', eventsArgs);\n }\n }\n else if (target.className.indexOf('e-spin') > -1 || target.className.indexOf('e-numeric') > -1) {\n if (arrOperator.indexOf(oper) > -1) {\n rule.rules[index].value[i] = selectedValue;\n }\n else {\n rule.rules[index].value = selectedValue;\n }\n }\n else if (target.className.indexOf('e-radio') > -1) {\n rule.rules[index].value = selectedValue;\n }\n else if (target.className.indexOf('e-multiselect') > -1) {\n rule.rules[index].value = selectedValue;\n }\n else if (target.className.indexOf('e-textbox') > -1) {\n if (oper === 'in' || oper === 'notin') {\n if (rule.rules[index].type === 'string') {\n rule.rules[index].value = this.processValueString(selectedValue, rule.rules[index].type);\n }\n else {\n rule.rules[index].value = this.processValueString(selectedValue, rule.rules[index].type);\n }\n }\n else {\n rule.rules[index].value = selectedValue;\n }\n }\n else if (target.className.indexOf('e-datepicker') > -1) {\n var format = this.getFormat(this.getColumn(this.selectedColumn.field).format);\n if (format.type) {\n if (arrOperator.indexOf(oper) > -1) {\n if (typeof rule.rules[index].value === 'string') {\n rule.rules[index].value = [];\n }\n rule.rules[index].value[i] = this.intl.formatDate(selectedValue, format);\n }\n else {\n rule.rules[index].value = this.intl.formatDate(selectedValue, format);\n }\n }\n }\n this.validateValue(rule, ruleElem, index);\n }\n else {\n if (target.className.indexOf('e-datepicker') > -1) {\n if (arrOperator.indexOf(oper) > -1) {\n if (typeof rule.rules[index].value === 'string') {\n rule.rules[index].value = [];\n }\n rule.rules[index].value[i] = selectedValue;\n }\n else {\n rule.rules[index].value = selectedValue;\n }\n }\n else {\n rule.rules[index].value = selectedValue;\n }\n }\n };\n QueryBuilder.prototype.validateValue = function (rule, ruleElem, index) {\n if (!isNullOrUndefined(index)) {\n rule = rule.rules[index];\n }\n var isObject = typeof (rule.value) === 'object';\n if (this.allowValidation && (isNullOrUndefined(index) || (isObject ? rule.value.length > 0 : rule.value))) {\n var valElem = ruleElem.querySelectorAll('.e-rule-value .e-control');\n if (valElem.length > 0) {\n if (valElem[0].className.indexOf('e-tooltip') > -1) {\n getComponent(valElem[0], 'tooltip').destroy();\n }\n else if (valElem[0].parentElement.className.indexOf('e-tooltip') > -1) {\n getComponent(valElem[0].parentElement, 'tooltip').destroy();\n }\n if (valElem[1] && valElem[1].parentElement.className.indexOf('e-tooltip') > -1) {\n getComponent(valElem[1].parentElement, 'tooltip').destroy();\n }\n }\n }\n };\n QueryBuilder.prototype.getFormat = function (format) {\n var formatOptions;\n if (format) {\n if (typeof (format) === 'string') {\n formatOptions = { type: 'dateTime' };\n if (format === 'short' || format === 'yMd') {\n formatOptions.type = 'date';\n formatOptions.skeleton = format;\n }\n else {\n formatOptions.format = format;\n }\n }\n else {\n formatOptions = { type: 'dateTime', skeleton: format.skeleton };\n }\n }\n else {\n formatOptions = { type: 'date', skeleton: 'yMd' };\n }\n return formatOptions;\n };\n QueryBuilder.prototype.findGroupByIdx = function (groupIdx, rule, isRoot) {\n var ruleColl = rule.rules;\n var dupRuleColl = [];\n if (!isRoot) {\n for (var j = 0, jLen = ruleColl.length; j < jLen; j++) {\n rule = ruleColl[j];\n if (rule.rules) {\n dupRuleColl.push(rule);\n }\n }\n return dupRuleColl[groupIdx];\n }\n return rule;\n };\n /**\n * Removes the component from the DOM and detaches all its related event handlers.\n * Also it maintains the initial input element from the DOM.\n *\n * @method destroy\n * @returns {void}\n */\n QueryBuilder.prototype.destroy = function () {\n this.isDestroy = true;\n var queryElement = this.element;\n if (!queryElement) {\n return;\n }\n var element;\n var i;\n var len;\n var tooltip;\n _super.prototype.destroy.call(this);\n var popupElement;\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 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);\n }\n }\n };\n QueryBuilder.prototype.initWrapper = function () {\n this.isInitialLoad = true;\n if (this.cssClass) {\n addClass([this.element], this.cssClass.replace(/\\s+/g, ' ').trim().split(' '));\n }\n if (this.enableRtl) {\n addClass([this.element], 'e-rtl');\n }\n if (this.width) {\n this.element.style.width = this.width;\n }\n if (this.height) {\n this.element.style.height = this.height;\n }\n if (this.rule.rules.length) {\n this.isImportRules = true;\n }\n else {\n this.addGroupElement(false, this.element);\n }\n if (Browser.isDevice || this.displayMode === 'Vertical') {\n if (Browser.isDevice) {\n this.element.style.width = '100%';\n this.element.classList.add('e-device');\n }\n removeClass(this.element.querySelectorAll('.e-rule-container'), 'e-horizontal-mode');\n addClass(this.element.querySelectorAll('.e-rule-container'), 'e-vertical-mode');\n this.displayMode = 'Vertical';\n }\n else {\n this.displayMode = 'Horizontal';\n }\n if (this.summaryView) {\n if (this.isImportRules) {\n this.renderSummary();\n }\n else {\n this.renderSummaryCollapse();\n }\n }\n else {\n if (this.columns.length && this.isImportRules) {\n this.addGroupElement(false, this.element, this.rule.condition, false, this.rule.not, false, this.rule);\n var mRules = extend({}, this.rule, {}, true);\n this.isRefreshed = true;\n this.setGroupRules(mRules);\n this.isRefreshed = false;\n }\n else if (this.columns.length) {\n this.addRuleElement(this.element.querySelector('.e-group-container'), {});\n }\n this.notGroupRtl();\n if (this.readonly) {\n this.enableReadonly();\n }\n var buttons = this.element.querySelectorAll('label.e-btn');\n var button = void 0;\n for (var i = 0; i < buttons.length; i++) {\n button = buttons.item(i);\n rippleEffect(button, { selector: '.e-btn' });\n }\n }\n };\n QueryBuilder.prototype.renderSummary = function () {\n var contentElem = this.createElement('div', {\n attrs: {\n class: 'e-summary-content',\n id: this.element.id + '_summary_content'\n }\n });\n var textElem = this.createElement('textarea', { attrs: { class: 'e-summary-text', readonly: 'true' }, styles: 'max-height:500px' });\n var editElem = this.createElement('button', { attrs: { type: 'button', class: 'e-edit-rule e-css e-btn e-small e-flat e-primary' } });\n var divElem = this.createElement('div', { attrs: { class: 'e-summary-btndiv' } });\n contentElem.appendChild(textElem);\n textElem.textContent = this.getSqlFromRules(this.rule);\n editElem.textContent = this.l10n.getConstant('Edit');\n divElem.appendChild(editElem);\n contentElem.appendChild(divElem);\n this.element.appendChild(contentElem);\n };\n QueryBuilder.prototype.renderSummaryCollapse = function () {\n var collapseElem = this.createElement('div', {\n attrs: {\n class: 'e-collapse-rule e-icons',\n title: this.l10n.getConstant('SummaryViewTitle')\n }\n });\n this.element.querySelector('.e-group-header').appendChild(collapseElem);\n };\n QueryBuilder.prototype.columnSort = function () {\n if (this.sortDirection.toLowerCase() === 'descending') {\n this.columns = new DataManager(this.columns).executeLocal(new Query().sortByDesc('field'));\n }\n else if (this.sortDirection.toLowerCase() === 'ascending') {\n this.columns = new DataManager(this.columns).executeLocal(new Query().sortBy('field'));\n }\n };\n QueryBuilder.prototype.onChangeNotGroup = function () {\n this.element.innerHTML = '';\n this.groupIdCounter = 0;\n if (!this.headerTemplate) {\n if (this.enableNotCondition) {\n if (this.enableNotCondition) {\n var inputElem = this.createElement('button', { attrs: { type: 'button', class: 'e-qb-toggle' } });\n this.groupElem.querySelector('.e-btn-group').insertBefore(inputElem, this.groupElem.querySelector('.e-btngroup-and'));\n }\n }\n else {\n this.groupElem.querySelector('.e-qb-toggle').remove();\n }\n }\n this.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 for (var _i = 0, properties_1 = properties; _i < properties_1.length; _i++) {\n var prop = properties_1[_i];\n switch (prop) {\n case 'summaryView':\n // eslint-disable-next-line\n var groupElem = this.element.querySelector('.e-group-container');\n // eslint-disable-next-line\n var summaryElem = this.element.querySelector('.e-summary-content');\n if (newProp.summaryView) {\n groupElem.style.display = 'none';\n if (this.element.querySelectorAll('.e-summary-content').length < 1) {\n this.renderSummary();\n summaryElem = this.element.querySelector('.e-summary-content');\n }\n else {\n this.element.querySelector('.e-summary-text').textContent = this.getSqlFromRules(this.rule);\n }\n summaryElem.style.display = 'block';\n }\n else {\n if (groupElem.querySelectorAll('.e-collapse-rule').length > -1) {\n this.renderSummaryCollapse();\n }\n groupElem.style.display = 'block';\n summaryElem.style.display = 'none';\n }\n break;\n case 'displayMode':\n this.refresh();\n break;\n case 'showButtons':\n if (!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 }\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 };\n QueryBuilder.prototype.templateParser = function (template) {\n if (template) {\n try {\n if (typeof template !== 'function' && document.querySelectorAll(template).length) {\n return templateCompiler(document.querySelector(template).innerHTML.trim());\n }\n else {\n return compile(template);\n }\n }\n catch (error) {\n return templateCompiler(template);\n }\n }\n return undefined;\n };\n QueryBuilder.prototype.executeDataManager = function (query) {\n var _this = this;\n var data = this.dataManager.executeQuery(query);\n var deferred = new Deferred();\n data.then(function (e) {\n if (e.actual && e.actual.result) {\n _this.dataColl = e.actual.result;\n }\n else {\n _this.dataColl = e.result;\n }\n _this.initControl();\n }).catch(function (e) {\n deferred.reject(e);\n });\n };\n QueryBuilder.prototype.initControl = function () {\n this.initialize();\n this.initWrapper();\n this.wireEvents();\n };\n QueryBuilder.prototype.wireEvents = function () {\n var wrapper = this.getWrapper();\n EventHandler.add(wrapper, 'click', this.clickEventHandler, this);\n EventHandler.add(wrapper, 'focusout', this.focusEventHandler, this);\n EventHandler.add(wrapper, 'focusin', this.focusEventHandler, this);\n EventHandler.add(this.element, 'keydown', this.keyBoardHandler, this);\n };\n QueryBuilder.prototype.unWireEvents = function () {\n var wrapper = this.getWrapper();\n EventHandler.remove(wrapper, 'click', this.clickEventHandler);\n EventHandler.remove(wrapper, 'focusout', this.focusEventHandler);\n EventHandler.remove(wrapper, 'focusin', this.focusEventHandler);\n EventHandler.remove(this.element, 'keydown', this.keyBoardHandler);\n };\n QueryBuilder.prototype.getParentGroup = function (target, isParent) {\n var groupLevel = (target instanceof Element) ? this.levelColl[target.id] : this.levelColl[\"\" + target];\n var len = isParent ? groupLevel.length - 1 : groupLevel.length;\n var rule = this.rule;\n for (var i = 0; i < len; i++) {\n rule = this.findGroupByIdx(groupLevel[i], rule, i === 0);\n }\n return rule;\n };\n /**\n * Delete the Group\n *\n * @param {Element | string} target - 'target' to be passed to delete the group.\n * @returns {void}\n */\n QueryBuilder.prototype.deleteGroup = function (target) {\n var _this = this;\n var groupElem = target;\n var groupId;\n if (typeof target === 'string') {\n groupId = this.element.id + '_' + target;\n target = document.getElementById(groupId);\n }\n else {\n groupId = groupElem.id.replace(this.element.id + '_', '');\n }\n var args = { groupID: groupId, cancel: false, type: 'deleteGroup' };\n if (!this.isImportRules) {\n this.trigger('beforeChange', args, function (observedChangeArgs) {\n _this.deleteGroupSuccessCallBack(observedChangeArgs, target);\n });\n }\n else {\n this.deleteGroupSuccessCallBack(args, target);\n }\n };\n QueryBuilder.prototype.deleteGroupSuccessCallBack = function (args, target) {\n if (!args.cancel) {\n var groupElem = target;\n var rule = this.getParentGroup(groupElem, true);\n var index = 0;\n var i = void 0;\n var len = void 0;\n var beforeRules = this.getValidRules(this.rule);\n var nextElem = groupElem.nextElementSibling;\n var prevElem = groupElem.previousElementSibling;\n var element = groupElem.querySelectorAll('.e-group-container');\n var valElem = groupElem.querySelectorAll('.e-tooltip');\n len = valElem.length;\n for (i = 0; i < len; i++) {\n getComponent(valElem[i], 'tooltip').destroy();\n }\n for (i = 0, len = element.length; i < len; i++) {\n delete this.levelColl[element[i].id];\n }\n while (groupElem.previousElementSibling !== null) {\n groupElem = groupElem.previousElementSibling;\n index++;\n }\n if (nextElem && nextElem.className.indexOf('e-separate-rule') > -1) {\n removeClass([nextElem], 'e-separate-rule');\n addClass([nextElem], 'e-joined-rule');\n if (prevElem && prevElem.className.indexOf('e-rule-container') > -1) {\n addClass([prevElem], 'e-prev-joined-rule');\n }\n }\n var elem = groupElem.parentElement.parentElement.parentElement;\n var removeString = [];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.isReact || this.isAngular) {\n var remRule = rule.rules[index];\n var ruleElemColl = target.querySelectorAll('.e-rule-container');\n if (remRule && remRule.rules) {\n for (var r = 0; r < remRule.rules.length; r++) {\n var column = this.getColumn(remRule.rules[r].field);\n 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.isImportRules) {\n this.trigger('change', args);\n }\n this.filterRules(beforeRules, this.getValidRules(this.rule), 'deleteGroup');\n }\n };\n QueryBuilder.prototype.isPlatformTemplate = function (column) {\n var isTemp = false;\n isTemp = column.template && (typeof column.template === 'string' || column.template.create === undefined);\n return isTemp;\n };\n QueryBuilder.prototype.deleteRule = function (target) {\n var _this = this;\n var groupElem = closest(target, '.e-group-container');\n var groupID = groupElem.id.replace(this.element.id + '_', '');\n var ruleID = closest(target, '.e-rule-container').id.replace(this.element.id + '_', '');\n var args = { groupID: groupID, ruleID: ruleID, cancel: false, type: 'deleteRule' };\n if (!this.isImportRules) {\n this.trigger('beforeChange', args, function (observedChangeArgs) {\n _this.deleteRuleSuccessCallBack(observedChangeArgs, target);\n });\n }\n else {\n this.deleteRuleSuccessCallBack(args, target);\n }\n };\n QueryBuilder.prototype.deleteRuleSuccessCallBack = function (args, target) {\n if (!args.cancel) {\n var groupElem = closest(target, '.e-group-container');\n var rule = this.getParentGroup(groupElem);\n var ruleElem = closest(target, '.e-rule-container');\n var beforeRules = this.getValidRules(this.rule);\n var clnruleElem = ruleElem;\n var nextElem = ruleElem.nextElementSibling;\n var prevElem = ruleElem.previousElementSibling;\n var index = 0;\n var valElem = ruleElem.querySelectorAll('.e-tooltip');\n var i = void 0;\n var len = valElem.length;\n for (i = 0; i < len; i++) {\n getComponent(valElem[i], 'tooltip').destroy();\n }\n while (ruleElem.previousElementSibling !== null) {\n ruleElem = ruleElem.previousElementSibling;\n index++;\n }\n var column = this.getColumn(rule.rules[index].field);\n if (column && column.template && clnruleElem.querySelector('.e-template')) {\n this.templateDestroy(column, clnruleElem.querySelector('.e-template').id);\n }\n if (!prevElem || prevElem.className.indexOf('e-rule-container') < 0) {\n if (nextElem) {\n removeClass([nextElem], 'e-joined-rule');\n }\n }\n if (!nextElem || nextElem.className.indexOf('e-rule-container') < 0) {\n if (prevElem) {\n removeClass([prevElem], 'e-prev-joined-rule');\n }\n }\n var isTemplateRendered = clnruleElem.querySelector('.e-template-value');\n // eslint-disable\n try {\n detach(clnruleElem);\n }\n catch (err) {\n // eslint-disable-next-line no-ex-assign\n err = [];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var error = 'error';\n // eslint-disable-next-line\n err[error] = error;\n }\n // eslint-enable\n if (column && column.ruleTemplate) {\n this.clearQBTemplate([clnruleElem.id]);\n }\n if (column && this.isPlatformTemplate(column) && isTemplateRendered) {\n this.clearQBTemplate([clnruleElem.id]);\n }\n rule.rules.splice(index, 1);\n if (!(rule.rules[0] && rule.rules[0].rules)) {\n this.disableRuleCondition(groupElem, rule);\n }\n 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) {\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 (this.readonly && (e.keyCode === 38 || e.keyCode === 40 || e.keyCode === 13)) {\n e.preventDefault();\n }\n };\n QueryBuilder.prototype.clearQBTemplate = function (ruleElemColl) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.isReact || this.isAngular) {\n this.clearTemplate(ruleElemColl);\n }\n };\n QueryBuilder.prototype.disableRuleCondition = function (groupElem, rules) {\n if (!this.headerTemplate) {\n if (this.readonly) {\n return;\n }\n var count = groupElem.querySelector('.e-rule-list').childElementCount;\n var andElem = groupElem.querySelector('.e-btngroup-and');\n var orElem = groupElem.querySelector('.e-btngroup-or');\n if (count > 1) {\n andElem.disabled = false;\n orElem.disabled = false;\n if (orElem.nextElementSibling.classList.contains('e-btn-disable') ||\n andElem.nextElementSibling.classList.contains('e-btn-disable')) {\n orElem.nextElementSibling.classList.remove('e-btn-disable');\n andElem.nextElementSibling.classList.remove('e-btn-disable');\n }\n if (rules && rules.condition === 'or') {\n orElem.checked = true;\n }\n else {\n andElem.checked = true;\n }\n }\n else {\n andElem.checked = false;\n andElem.disabled = true;\n orElem.checked = false;\n orElem.disabled = true;\n if (rules) {\n orElem.nextElementSibling.classList.add('e-btn-disable');\n andElem.nextElementSibling.classList.add('e-btn-disable');\n }\n }\n }\n };\n /**\n * Get the valid rule or rules collection.\n *\n * @param {RuleModel} currentRule - 'currentRule' to be passed to get the valid rules.\n * @returns {RuleModel} - Valid rule or rules collection\n */\n QueryBuilder.prototype.getValidRules = function (currentRule) {\n if (!currentRule) {\n currentRule = this.getRules();\n }\n var ruleCondtion = currentRule.condition;\n var notCondition = currentRule.not;\n var ruleColl = extend([], currentRule.rules, [], true);\n var rule = !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.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 index++;\n }\n return rule.rules[index];\n };\n /**\n * Gets the group.\n *\n * @param {string | Element} target - 'target' to be passed to get group.\n * @returns {object} -Group\n */\n QueryBuilder.prototype.getGroup = function (target) {\n if (target instanceof Element && target.className.indexOf('e-group-container') < 1) {\n target = closest(target, '.e-group-container');\n }\n var groupId = (target instanceof Element) ? target.id : this.element.id + '_' + target;\n var rule = this.getParentGroup(groupId);\n return rule;\n };\n /**\n * Deletes the group or groups based on the group ID.\n *\n * @param {string[]} groupIdColl - 'groupIdColl' to be passed to delete groups.\n * @returns {void}\n */\n QueryBuilder.prototype.deleteGroups = function (groupIdColl) {\n var i;\n var len = groupIdColl.length;\n var groupID;\n for (i = 0; i < len; i++) {\n groupID = this.element.id + '_' + groupIdColl[i];\n this.deleteGroup(document.getElementById(groupID));\n }\n };\n /**\n * Return the Query from current rules collection.\n *\n * @returns {Promise} - Query from current rules collection\n * @blazorType object\n */\n QueryBuilder.prototype.getFilteredRecords = function () {\n var predicate = this.getPredicate(this.getValidRules(this.rule));\n var dataManagerQuery = isNullOrUndefined(predicate) ? new Query() : new Query().where(predicate);\n return this.dataManager.executeQuery(dataManagerQuery);\n };\n /**\n * Deletes the rule or rules based on the rule ID.\n *\n * @param {string[]} ruleIdColl - 'ruleIdColl' to be passed to delete rules.\n * @returns {void}.\n */\n QueryBuilder.prototype.deleteRules = function (ruleIdColl) {\n var i;\n var len = ruleIdColl.length;\n var ruleID;\n for (i = 0; i < len; i++) {\n ruleID = this.element.id + '_' + ruleIdColl[i];\n this.deleteRule(document.getElementById(ruleID));\n }\n };\n /**\n * Gets the query for Data Manager.\n *\n * @param {RuleModel} rule - 'rule' to be passed to get query.\n * @returns {string} - Query for Data Manager\n */\n QueryBuilder.prototype.getDataManagerQuery = function (rule) {\n var predicate = this.getPredicate(rule);\n var query;\n var fields = [];\n for (var i = 0, len = Object.keys(this.columns); i < len.length; i++) {\n fields.push(this.columns[i].field);\n }\n if (rule.rules.length) {\n query = new Query().select(fields).where(predicate);\n }\n else {\n query = new Query().select(fields);\n }\n return query;\n };\n /**\n * Get the predicate from collection of rules.\n *\n * @param {RuleModel} rule - 'rule' to be passed to get predicate.\n * @returns {Predicate} - Predicate from collection of rules\n */\n QueryBuilder.prototype.getPredicate = function (rule) {\n var ruleColl = rule.rules;\n var pred;\n var pred2;\n var ruleValue;\n var ignoreCase = false;\n var column;\n 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 // eslint-disable-next-line\n currDate.setHours(parseInt(value.split(':')[0]));\n // eslint-disable-next-line\n currDate.setMinutes(parseInt(value.split(':')[1]));\n if (value.split(':')[2]) {\n // eslint-disable-next-line\n currDate.setSeconds(parseInt(value.split(':')[2]));\n }\n }\n return currDate;\n };\n QueryBuilder.prototype.isTime = function (value) {\n if (value && value.indexOf(':') > -1) {\n return true;\n }\n return false;\n };\n QueryBuilder.prototype.importRules = function (rule, parentElem, isReset, not, isRoot) {\n if (!isReset) {\n parentElem = this.renderGroup(rule, rule.condition, parentElem, not);\n }\n else {\n if (rule.rules.length > 1 && !this.headerTemplate) {\n // enable/disable conditions when rule group is added\n var orElem = parentElem.querySelector('.e-btngroup-or');\n var andElem = parentElem.querySelector('.e-btngroup-and');\n orElem.disabled = false;\n andElem.disabled = false;\n if (rule.condition === 'or') {\n orElem.checked = true;\n }\n else {\n andElem.checked = true;\n }\n }\n else {\n // enable/disable conditions when rule condition is added\n this.disableRuleCondition(parentElem);\n }\n if (this.headerTemplate && isRoot) {\n parentElem = this.renderGroup(rule, rule.condition, this.element, rule.not, isRoot);\n }\n if (this.enableNotCondition && !this.headerTemplate) {\n var tglBtnElem = parentElem.querySelector('.e-qb-toggle');\n if (rule.not) {\n addClass([tglBtnElem], 'e-active-toggle');\n }\n else {\n removeClass([tglBtnElem], 'e-active-toggle');\n }\n }\n }\n if (rule.rules.length === 0 && this.headerTemplate) {\n rule.rules[0] = { 'label': '', 'field': '', 'operator': '', 'type': '', 'value': '' };\n }\n var ruleColl = rule.rules;\n if (!isNullOrUndefined(ruleColl)) {\n for (var i = 0, len = ruleColl.length; i < len; i++) {\n var keys = Object.keys(ruleColl[i]);\n if (!isNullOrUndefined(ruleColl[i].rules) && keys.indexOf('rules') > -1 && (ruleColl[i].rules.length !== 0)) {\n 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 if (isNullOrUndefined(ruleColl[i].rules) && ruleColl[i].isLocked) {\n var lockRuleTarget = parentElem.querySelector('.e-rule-list').children[i].querySelector('.e-lock-rule-btn');\n this.ruleLock(lockRuleTarget);\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 return cloneElem[this.groupIndex + 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 }\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 condition = sqlLocale ? this.l10n.getConstant(condition.toUpperCase()).toUpperCase() : condition.toUpperCase();\n queryStr += ' ' + condition + ' ';\n }\n }\n }\n if (!isRoot) {\n queryStr += ')';\n }\n if (rules.not) {\n queryStr += ')';\n }\n return queryStr;\n };\n /**\n * Sets the rules from the sql query.\n *\n * @param {string} sqlString - 'sql String' to be passed to set the rule.\n * @param {boolean} sqlLocale - 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 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 /**\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 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 /**\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 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 /**\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 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 /**\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 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 /**\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 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 /**\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\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\n regex = new RegExp('^(' + operators[i] + ')' + regexStr, 'ig');\n if (regex.exec(sqlString)) {\n this.parser.push(['Operators', operators[i].toLowerCase()]);\n return operators[i].length;\n }\n }\n var lastPasrser = this.parser[this.parser.length - 1];\n if (!lastPasrser || (lastPasrser && lastPasrser[0] !== 'Literal')) {\n for (var i = 0, iLen = conditions.length; i < iLen; i++) {\n regexStr = /^\\w+$/.test(conditions[i]) ? '\\\\b' : '';\n // eslint-disable-next-line\n regex = new RegExp('^(' + conditions[i] + ')' + regexStr, 'ig');\n if (regex.exec(sqlString)) {\n this.parser.push(['Conditions', conditions[i].toLowerCase()]);\n return conditions[i].length;\n }\n }\n }\n for (var i = 0, iLen = subOp.length; i < iLen; i++) {\n regexStr = /^\\w+$/.test(subOp[i]) ? '\\\\b' : '';\n // eslint-disable-next-line\n regex = new RegExp('^(' + subOp[i] + ')' + regexStr, 'ig');\n if (regex.exec(sqlString)) {\n this.parser.push(['SubOperators', subOp[i].toLowerCase()]);\n return subOp[i].length;\n }\n }\n //Left Parenthesis\n if (/^\\(/.exec(sqlString)) {\n this.parser.push(['Left', '(']);\n return 1;\n }\n //Right Parenthesis\n if (/^\\)/.exec(sqlString)) {\n this.parser.push(['Right', ')']);\n return 1;\n }\n //Boolean\n if (/^(true|false)/.exec(sqlString)) {\n matchValue = /^(true|false)/.exec(sqlString)[0];\n this.parser.push(['String', matchValue]);\n return matchValue.length;\n }\n //Null\n if (/^null/.exec(sqlString)) {\n matchValue = /^null/.exec(sqlString)[0];\n this.parser.push(['String', null]);\n return matchValue.length;\n }\n // eslint-disable-next-line\n if (/^`?([a-z_][a-z0-9_.\\[\\]\\(\\)]{0,}(\\:(number|float|string|date|boolean))?)`?/i.exec(sqlString)) {\n // eslint-disable-next-line\n matchValue = /^`?([a-zåäö_][a-z0-9åäö_.\\[\\]\\(\\)]{0,}(\\:(number|float|string|date|boolean))?)`?/i.exec(sqlString)[1];\n this.parser.push(['Literal', matchValue]);\n return matchValue.length;\n }\n // eslint-disable-next-line\n if (this.checkLiteral() && /^'?([a-z_][a-z0-9 _.\\[\\]\\(\\)-]{0,}(\\:(number|float|string|date|boolean))?)'?/i.exec(sqlString)) {\n // eslint-disable-next-line\n matchValue = /^'?([a-z_][a-z0-9 _.\\[\\]\\(\\)-]{0,}(\\:(number|float|string|date|boolean))?)'?/i.exec(sqlString)[1];\n this.parser.push(['Literal', matchValue]);\n return matchValue.length + 2;\n }\n if (this.checkNumberLiteral(sqlString, sqlLocale)) {\n // eslint-disable-next-line\n matchValue = /^[0-9]+(\\.[0-9]+)?/.exec(sqlString)[0];\n this.parser.push(['Literal', matchValue]);\n return matchValue.length;\n }\n //String\n // eslint-disable-next-line\n if (/^'((?:[^\\\\']+?|\\\\.|'')*)'(?!')/.exec(sqlString)) {\n // eslint-disable-next-line\n matchValue = /^'((?:[^\\\\']+?|\\\\.|'')*)'(?!')/.exec(sqlString)[0];\n if (matchValue[matchValue.length - 2] === '(') {\n var isClosed = false;\n for (var j = matchValue.length; j < sqlString.length; j++) {\n matchValue += sqlString[j];\n if (sqlString[j] === ')') {\n isClosed = true;\n }\n if (isClosed && sqlString[j] === '\\'') {\n break;\n }\n }\n }\n else if (sqlString[matchValue.length] && (sqlString[matchValue.length] !== ')') &&\n !this.checkCondition(sqlString, matchValue)) {\n matchValue = this.getSingleQuoteString(sqlString, matchValue);\n }\n // end\n this.parser.push(['String', matchValue]);\n return matchValue.length;\n }\n // Double String\n // eslint-disable-next-line\n if (/^\"([^\\\\\"]*(?:\\\\.[^\\\\\"]*)*)\"/.exec(sqlString)) {\n // eslint-disable-next-line\n matchValue = /^\"([^\\\\\"]*(?:\\\\.[^\\\\\"]*)*)\"/.exec(sqlString)[0];\n this.parser.push(['DoubleString', matchValue]);\n return matchValue.length;\n }\n //Number\n // eslint-disable-next-line\n if (/^[0-9]+(\\.[0-9]+)?/.exec(sqlString)) {\n // eslint-disable-next-line\n matchValue = /^[0-9]+(\\.[0-9]+)?/.exec(sqlString)[0];\n this.parser.push(['Number', matchValue]);\n return matchValue.length;\n }\n //Negative Number\n // eslint-disable-next-line\n if (/^-?[0-9]+(\\.[0-9]+)?/.exec(sqlString)) {\n // eslint-disable-next-line\n matchValue = /^-?[0-9]+(\\.[0-9]+)?/.exec(sqlString)[0];\n this.parser.push(['Number', matchValue]);\n return matchValue.length;\n }\n return 1;\n };\n QueryBuilder.prototype.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, matchValue) {\n if (sqlString[matchValue.length] && (sqlString[matchValue.length] !== ')') &&\n !this.checkCondition(sqlString, matchValue) && sqlString[matchValue.length] !== ',') {\n var tempStr = sqlString.replace(matchValue, '');\n // eslint-disable-next-line\n if (isNullOrUndefined(/^'((?:[^\\\\']+?|\\\\.|'')*)'(?!')/.exec(tempStr))) {\n // eslint-disable-next-line\n var parsedValue = /^((?:[^\\\\']+?|\\\\.|'')*)'(?!')/.exec(tempStr)[0];\n matchValue += parsedValue;\n matchValue = this.getSingleQuoteString(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 // eslint-disable-next-line\n if (/^[0-9]+(\\.[0-9]+)?/.exec(sqlString)) {\n var secParser = this.parser[this.parser.length - 2];\n var betweenParser = this.parser[this.parser.length - 3];\n if (lastParser[0] === 'Left' && (secParser && secParser[0] === 'Conditions')) {\n return true;\n }\n var betweenOperator = sqlLocale ? this.l10n.getConstant('Between').toLowerCase() : 'between';\n if (lastParser[0] === 'Conditions' && (betweenParser && betweenParser[1].indexOf(betweenOperator) < 0)) {\n return true;\n }\n }\n }\n return false;\n };\n QueryBuilder.prototype.getOperator = function (value, operator, sqlLocale) {\n var operators = {\n '=': 'equal', '!=': 'notequal', '<': 'lessthan', '>': 'greaterthan', '<=': 'lessthanorequal',\n '>=': 'greaterthanorequal', 'in': 'in', 'not in': 'notin', 'between': 'between', 'not between': 'notbetween',\n 'is empty': 'isempty', 'is null': 'isnull', 'is not null': 'isnotnull', 'is not empty': 'isnotempty'\n };\n if (sqlLocale) {\n var localeOperator = Object.keys(this.sqlOperators);\n for (var i = 0; i < localeOperator.length; i++) {\n if (this.sqlOperators[localeOperator[i]] === operator.toUpperCase()) {\n if (value && value.indexOf('%') === 0 && value[value.length - 1] === '%') {\n return (operator.toUpperCase() === 'NOT LIKE') ? 'notcontains' : 'contains';\n }\n else if (value && value.indexOf('%') !== 0 && value.indexOf('%') === value.length - 1) {\n return (operator.toUpperCase() === 'NOT LIKE') ? 'notstartswith' : 'startswith';\n }\n else if (value && value.indexOf('%') === 0 && value.indexOf('%') !== value.length - 1) {\n return (operator.toUpperCase() === 'NOT LIKE') ? 'notendswith' : 'endswith';\n }\n return localeOperator[i];\n }\n }\n return null;\n }\n if (value) {\n if (value.indexOf('%') === 0 && value[value.length - 1] === '%') {\n return (operator === 'not like') ? 'notcontains' : 'contains';\n }\n else if (value.indexOf('%') !== 0 && value.indexOf('%') === value.length - 1) {\n return (operator === 'not like') ? 'notstartswith' : 'startswith';\n }\n else if (value.indexOf('%') === 0 && value.indexOf('%') !== value.length - 1) {\n return (operator === 'not like') ? 'notendswith' : 'endswith';\n }\n }\n else {\n if (operator === 'not like') {\n return 'notequal';\n }\n else if (operator === 'like') {\n return 'equal';\n }\n }\n return operators[\"\" + operator];\n };\n QueryBuilder.prototype.getTypeFromColumn = function (rules) {\n var columnData = this.getColumn(rules.field);\n if (!isNullOrUndefined(columnData)) {\n return columnData.type;\n }\n return null;\n };\n QueryBuilder.prototype.getLabelFromColumn = function (field) {\n var label = '';\n var l = 0;\n if (this.separator !== '') {\n var fieldColl = field.split(this.separator);\n for (var i = 0; i < fieldColl.length; i++) {\n label += this.getLabelFromField(fieldColl, i + 1);\n l++;\n if (l < fieldColl.length) {\n label += this.separator;\n }\n }\n return label;\n }\n else {\n var labelItem = this.getColumn(field).label;\n return labelItem;\n }\n };\n QueryBuilder.prototype.getLabelFromField = function (field, startIdx) {\n var fieldName = '';\n var j = 0;\n for (var k = 0; k < startIdx; k++) {\n fieldName += field[k];\n j++;\n if (j < startIdx) {\n fieldName += this.separator;\n }\n }\n return this.getColumn(fieldName).label;\n };\n QueryBuilder.prototype.processParser = function (parser, rules, levelColl, sqlLocale) {\n var j;\n var jLen;\n var rule;\n var subRules;\n var numVal = [];\n var strVal = [];\n var k;\n var kLen;\n var l;\n var lLen;\n var grpCount;\n var operator;\n var isLeftOpened = false;\n for (var i = 0, iLen = parser.length; i < iLen; i++) {\n if (parser[i][0] === 'Literal') {\n var column = this.getColumn(parser[i][1]);\n rule = { label: (column && column.label) ? column.label : parser[i][1], field: parser[i][1] };\n if (parser[i + 1][0] === 'SubOperators') {\n if (parser[i + 1][1].indexOf('null') > -1 || parser[i + 1][1].indexOf('empty') > -1) {\n rule.operator = this.getOperator(' ', parser[i + 1][1], sqlLocale);\n rule.value = null;\n rule.type = this.getTypeFromColumn(rule);\n }\n else {\n var oper = parser[i + 3][1] ? parser[i + 3][1].replace(/'/g, '') : parser[i + 3][1];\n rule.operator = this.getOperator(oper, parser[i + 1][1], sqlLocale);\n }\n operator = parser[i + 1][1];\n i++;\n j = i + 1;\n jLen = iLen;\n if (sqlLocale && rule.operator === 'contains' || rule.operator === 'startswith' || rule.operator === 'endswith') {\n operator = 'like';\n }\n else if (sqlLocale && rule.operator === 'notcontains' || rule.operator === 'notstartswith' || rule.operator === 'notendswith') {\n operator = 'not like';\n }\n else if (sqlLocale) {\n operator = rule.operator;\n }\n for (j = i + 1; j < jLen; j++) {\n if (operator.indexOf('between') < 0 && parser[j][0] === 'Left') {\n isLeftOpened = true;\n }\n else if (parser[j][0] === 'Right' && isLeftOpened) {\n i = j;\n isLeftOpened = false;\n break;\n }\n else {\n if (operator.indexOf('null') > -1 || operator.indexOf('empty') > -1) {\n break;\n }\n if (operator.indexOf('like') > -1 && parser[j][0] === 'String') {\n var val = parser[j][1];\n if (parser[j][1] && parser[j][1][0] === '\\'') {\n val = parser[j][1].substring(1, parser[j][1].length - 1);\n }\n val = val ? val.replace(/%/g, '') : parser[j][1];\n rule.value = val;\n rule.type = 'string';\n }\n else if (operator.indexOf('between') > -1) {\n if (parser[j][0] === 'Literal' || parser[j][0] === 'Left') {\n break;\n }\n if (parser[j][0] === 'Number') {\n numVal.push(Number(parser[j][1]));\n }\n else if (parser[j][0] === 'String') {\n var val = parser[j][1];\n if (parser[j][1] && parser[j][1][0] === '\\'') {\n val = parser[j][1].substring(1, parser[j][1].length - 1);\n }\n strVal.push(val);\n }\n }\n else {\n if (parser[j][0] === 'Number') {\n numVal.push(Number(parser[j][1]));\n }\n else if (parser[j][0] === 'String') {\n var val = parser[j][1];\n if (parser[j][1] && parser[j][1][0] === '\\'') {\n val = parser[j][1].substring(1, parser[j][1].length - 1);\n }\n strVal.push(val);\n }\n }\n rule.type = this.getTypeFromColumn(rule);\n }\n }\n if (operator.indexOf('like') < 0) {\n if (parser[j - 1][0] === 'Number') {\n rule.value = numVal;\n rule.type = 'number';\n }\n else if (parser[j - 1][0] === 'String') {\n rule.value = strVal;\n rule.type = 'string';\n }\n else if (operator.indexOf('between') > -1 && parser[j - 1][0] === 'Conditions') {\n if (strVal.length !== 0) {\n rule.value = strVal;\n rule.type = 'string';\n }\n else {\n rule.value = numVal;\n rule.type = 'number';\n }\n }\n numVal = [];\n strVal = [];\n rule.type = this.getTypeFromColumn(rule);\n }\n }\n else if (parser[i + 1][0] === 'Operators') {\n rule.operator = this.getOperator(parser[i + 2][1], parser[i + 1][1], sqlLocale);\n var isEmptyOper = false;\n if (rule.operator == \"equal\" && parser[i + 2][0] === \"String\" && parser[i + 2][1] === \"''\") {\n rule.operator = \"isempty\";\n isEmptyOper = true;\n }\n else if (rule.operator == \"notequal\" && parser[i + 2][0] === \"String\" && parser[i + 2][1] === \"''\") {\n rule.operator = \"isnotempty\";\n isEmptyOper = true;\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 rule.type = this.getTypeFromColumn(rule);\n }\n rules.rules.push(rule);\n }\n else if (parser[i][0] === 'Left') {\n if (!(parser[0][0] === 'Left') && (parser[i - 1][1] === 'not' || sqlLocale && this.l10n.getConstant('NOT').toLowerCase() === parser[i - 1][1])) {\n continue;\n }\n this.parser = parser.splice(i + 1, iLen - (i + 1));\n if (this.enableNotCondition) {\n subRules = { condition: 'and', rules: [], not: false };\n }\n else {\n subRules = { condition: 'and', rules: [] };\n }\n grpCount = 0;\n kLen = rules.rules.length;\n for (k = 0; k < kLen; k++) { //To get the group position\n if (rules.rules[k].rules) {\n grpCount++;\n }\n }\n levelColl.push(grpCount);\n rules.rules.push(subRules);\n subRules = this.processParser(this.parser, subRules, levelColl, sqlLocale);\n return rules;\n }\n else if (parser[i][0] === 'Conditions') {\n if (parser[i][1] === 'not' || (sqlLocale && this.l10n.getConstant('NOT').toLowerCase() === parser[i][1])) {\n rules.not = true;\n }\n else {\n rules.condition = parser[i][1];\n }\n }\n else if (parser[i][0] === 'Right') {\n this.parser = parser.splice(i + 1, iLen - (i + 1));\n levelColl.pop(); //To get the parent Group\n rules = this.rule;\n lLen = levelColl.length;\n for (l = 0; l < lLen; l++) {\n rules = this.findGroupByIdx(levelColl[l], rules, l === 0);\n }\n return this.processParser(this.parser, rules, levelColl, sqlLocale);\n }\n }\n return rules;\n };\n QueryBuilder.prototype.getValueFromParser = function (parser, idx) {\n var value = '';\n var k;\n for (k = idx; k < parser.length; k++) {\n if (parser[k][0] !== 'String' || parser[k][1] === ',' || parser[k][1] === ', ') {\n break;\n }\n else {\n if (value !== '') {\n idx += 1;\n }\n if (parser[k][1] !== null) {\n value += parser[k][1];\n }\n else {\n value = null;\n }\n }\n }\n return { value: value, idx: idx };\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 this.addRules([{ 'label': getRule.label, 'field': getRule.field, 'type': getRule.type, 'operator': getRule.operator,\n 'value': getRule.value }], groupId);\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 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 addElem[i].disabled = true;\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] !== 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 addElem[i].disabled = false;\n lockElem[i].disabled = false;\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 lockElem[i].children[0].classList.remove('e-lock');\n lockElem[i].children[0].classList.add('e-unlock');\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 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 Complex({ condition: 'and', rules: [] }, Rule)\n ], QueryBuilder.prototype, \"rule\", void 0);\n QueryBuilder = __decorate([\n NotifyPropertyChanges\n ], QueryBuilder);\n return QueryBuilder;\n}(Component));\nexport { QueryBuilder };\nvar LevelColl = /** @class */ (function () {\n function LevelColl() {\n }\n return LevelColl;\n}());\n","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, max-len\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, max-len\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"],"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","MultiSelect","Inject","CheckBoxSelection","getPersistData","addOnPersist","reset","isImportRules","bodyElem","querySelector","inputElement","querySelectorAll","len","className","indexOf","getComponent","destroy","parentElement","innerHTML","grpContainer","createElement","attrs","class","grpHeader","grpBody","appendChild","headerTemplate","isRoot","enableNotCondition","removeClass","levelColl","id","setProperties","rule","rules","disableRuleCondition","getWrapper","getModuleName","requiredModules","modules","push","member","args","GetRootColumnName","field","separator","split","initialize","dataColl","columnKeys","keys","cols","categories","type","groupBy","isDate","validateObj","columns","columnSort","updateCustomOperator","isNaN","Date","parse","getTime","validation","category","l10n","getConstant","operators","customOperators","updateSubFieldsFromColumns","label","updateSubFields","trigger","col","data","sampCol","result","compField","resData","column","from","isNullOrUndefined","_loop_1","j","sqlIdx","operator_1","operColl","values","map","join","valueIdx","this_1","focusEventHandler","event","clickEventHandler","groupID","tagName","animation","Animation","duration","delay","renderSummary","summaryElem","document","getElementById","txtareaElem","animate","name","groupElem","style","display","textContent","getSqlFromRules","height","scrollHeight","actionButton","deleteRule","ruleClone","ruleLock","groupLock","groupClone","closest","deleteGroup","addGroupElement","mRules","extend","setGroupRules","renderSummaryCollapse","forIdValue","getAttribute","targetValue","replace","group","getGroup","ariaChecked","toggleElem","getElementsByClassName","addClass","cancel","toLowerCase","beforeSuccessCallBack","observedChangeArgs","beforeRules","getValidRules","getParentGroup","filterRules","selectBtn","showButtons","groupInsert","maxGroupCount","enableRtl","children","addRuleElement","appendRuleElem","parentId","action","ruleElem","elem","ruleListElem","select","setAttribute","ruleIdCounter","cloneRule","insertBefore","ruleTemplate","requestType","ruleID","ruleTemplateFn","templateParser","templateID","getOperators","operatorFields","isReact","isAngular","templateColl","nodeType","isVue3","append","cloneNode","lockGroup","lockRule","cloneGroup","ruleDelete","renderReactTemplates","isRuleTemplate","isInitialLoad","addRuleSuccessCallBack","trgt","act","pId","isRlTmp","dropDownList","getColumn","newRule","operator","selectedColumn","passedRule","args_1","displayMode","spanElement","classList","add","previousElementSibling","updateAddedRule","fieldMode","ddlField","ddlValue","autoSelectField","dataSource","placeholder","popupHeight","close","fieldClose","bind","change","changeField","open","popupOpen","cssClass","fieldModel","DropDownList","appendTo","ddlVal","getDataByValue","changeRule","itemData","dummyDropdownTreeDs","updateDropdowntreeDS","child","expanded","selectable","showClearButton","changeOnBlur","treeSettings","expandOn","dropdowntree","DropDownTree","getLabelFromColumn","parseInt","toString","index","custom","splice","changeRuleTemplate","operVal","parentGroup","previousColumn","detach","clearQBTemplate","renderToolTip","tooltip","Tooltip","content","isSticky","position","afterClose","beforeOpen","tooltipCloseElement","validateFields","dropDownTreeObj","isValid","allowValidation","excludeOprs","fieldElem","indexElem","valArray","dropDownObj","tempElem","ruleElemCln","validateRule","valElem","jLen","refreshLevelColl","obj","groupElement","level","refreshLevel","childElem","ruleList","iLen","groupCount","slice","groupTemplate","glueElem","inputElem","labelElem","grpActElem","groupBtn","groupHdrElem","grpBodyElem","rulesElem","role","clsName","cloneClsName","lockClsName","filterElem","cloneRuleBtnElem","title","cloneLockBtnElem","delBtnElem","isGroup","isBtnClick","addGroupSuccess","eventTarget","dltGroupBtn","groupIdCounter","headerTemplateFn","andInpElem","orInpElem","andLblElem","orLblElem","btnGroupId","groupDelete","Button","iconCss","rippleEffect","selector","childElems","grpLen","parentNode","addGroups","addRuleToNewGroups","cloneBtnElem","lockBtnElem","lockSpanElement","notElem","args_2","notCondition","undefined","DropDownButton","items","grpId","chgrpId","childGroupID","template","groupHdr","getRuleCollection","headerFn","notifyChange","grpElement","ruleElement","format","getFormat","intl","formatDate","templateChange","updateRules","eventsArgs","grpElem","validateValue","prevOper","arrOper","grpEle","destroyControls","changeValue","isNumInput","contains","currentTarget","dateElement","rbValue","getInstance","NumericTextBox","immediateModeDelay","window","clearInterval","timer","setInterval","filterValue","grID","rlID","ele","changeValueSuccessCallBack","ddl","item","popupObj","getItemData","customArgs","isInteracted","previousItemData","prevItemData","previousItem","e","previousValue","ddtElem","ddt","oldValue","dataBind","destroySubFields","subFieldElem","ddlArgs","ddlObj","changeFilter","flt","dl","rl","tmpRl","dArg","selectedField","fieldChangeSuccess","operatorElem","changeOperator","opr","selectedIndex","operatorChangeSuccess","changeRuleValues","tempRule","tooltipElem","createSubFields","nextElementSibling","remove","subFieldValue","subFilterCounter","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","_loop_2","this_2","forEach","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","idx","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","checked","radioButtonModel","radiobutton","RadioButton","getOperatorIndex","getPreviousItemData","isRender","filtElem","getElementsByTagName","filtObj","isTempRendered","setColumnTemplate","inputLen","renderTemplate","observedActionArgs","actionBeginSuccessCallBack","Element","columnTemplateFn","valElemColl","updateValues","controlName","radioBtnObj","refresh","selectedDate","isNotTrigger","valueContainer","elementCln","i_1","i_2","ruleValueUpdate","beforeRule","afterRule","JSON","stringify","previousRule","oper","arrOperator","dupSelectedValue","parseFloat","isObject","formatOptions","findGroupByIdx","groupIdx","ruleColl","dupRuleColl","popupElement","unWireEvents","portals","addRules","groups","importRules","initWrapper","trim","summaryView","notGroupRtl","readonly","enableReadonly","buttons","button","contentElem","textElem","styles","editElem","divElem","collapseElem","sortDirection","executeLocal","sortByDesc","sortBy","onChangeNotGroup","checkNotGroup","orgRule","onPropertyChanged","newProp","oldProp","_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","templateCompiler","compile","error","wireEvents","wrapper","EventHandler","keyBoardHandler","isParent","groupLevel","groupId","deleteGroupSuccessCallBack","nextElem","prevElem","removeString","remRule","ruleElemColl","isTemplateRendered","isPlatformTemplate","deleteRuleSuccessCallBack","clnruleElem","err","i_3","lockGrpTarget","keyCode","preventDefault","clearTemplate","count","andElem","orElem","disabled","currentRule","getRules","ruleCondtion","isValidRule","customObj","isQuestion","lockedRule","notValue","getRule","HTMLElement","deleteGroups","groupIdColl","getFilteredRecords","predicate","getPredicate","dataManagerQuery","where","deleteRules","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","lockRuleTarget","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","sql","notify","prop","onPropertyChange","setParameterizedSql","sqlQuery","getParameterizedNamedSql","setParameterizedNamedSql","setMongoQuery","mongoQuery","mongoLocale","getMongoQuery","isCloneRule","parentGroupID","isCloneGroup","str","st","parseSqlStrings","conditions","subOp","regexStr","matchValue","test","RegExp","exec","lastPasrser","checkLiteral","checkNumberLiteral","isClosed","checkCondition","getSingleQuoteString","tempStr","lastParser","secParser","betweenParser","betweenOperator","getOperator","localeOperator","=","!=","<",">","<=",">=","not in","not between","is empty","is null","is not null","is not empty","getTypeFromColumn","l","getLabelFromField","startIdx","fieldName","subRules","lLen","grpCount","numVal","strVal","isLeftOpened","val","substring","pop","getValueFromParser","targetGrpId","filter","lockItem","disableRuleControls","newGroup","disableHeaderControls","updateLockItems","isDisabled","addElem","deleteGrpElem","lockElem","groupContElem","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","updateValue","ruleVal","namedRuleVal","namedParameters","namedField","getNamedParameter","newField","currField"],"mappings":"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CIq7B,WACD75B,EAAapC,UAAW,eAAW,GACtCY,GACIq7B,WACD75B,EAAapC,UAAW,mBAAe,GAC1CY,GACIq7B,WACD75B,EAAapC,UAAW,oBAAgB,GAC3CY,GACIq7B,WACD75B,EAAapC,UAAW,cAAU,GACrCY,GACIq7B,WACD75B,EAAapC,UAAW,iBAAa,GACxCY,GACIq7B,WACD75B,EAAapC,UAAW,kBAAc,GACzCY,GACIs7B,aAAY/5B,IACbC,EAAapC,UAAW,mBAAe,GAC1CY,GACIa,YAAS,IACVW,EAAapC,UAAW,mBAAe,GAC1CY,GACIa,YAAS,IACVW,EAAapC,UAAW,uBAAmB,GAC9CY,GACIa,WAAS,YACVW,EAAapC,UAAW,iBAAa,GACxCY,GACIa,gBACDW,EAAapC,UAAW,eAAW,GACtCY,GACIa,WAAS,OACVW,EAAapC,UAAW,kBAAc,GACzCY,GACIa,WAAS,OACVW,EAAapC,UAAW,qBAAiB,GAC5CY,GACIa,WAAS,OACVW,EAAapC,UAAW,kBAAc,GACzCY,GACIa,cACDW,EAAapC,UAAW,sBAAkB,GAC7CY,GACIa,WAAS,KACVW,EAAapC,UAAW,gBAAY,GACvCY,GACIa,gBACDW,EAAapC,UAAW,kBAAc,GACzCY,GACIa,WAAS,eACVW,EAAapC,UAAW,mBAAe,GAC1CY,GACIa,YAAS,IACVW,EAAapC,UAAW,yBAAqB,GAChDY,GACIa,WAAS,YACVW,EAAapC,UAAW,qBAAiB,GAC5CY,GACIa,WAAS,IACVW,EAAapC,UAAW,qBAAiB,GAC5CY,GACIa,WAAS,SACVW,EAAapC,UAAW,cAAU,GACrCY,GACIa,WAAS,SACVW,EAAapC,UAAW,aAAS,GACpCY,GACIa,YAAS,IACVW,EAAapC,UAAW,iBAAa,GACxCY,GACIa,WAAS,IACVW,EAAapC,UAAW,0BAAsB,GACjDY,GACIa,YAAS,IACVW,EAAapC,UAAW,0BAAsB,GACjDY,GACIa,YAAS,IACVW,EAAapC,UAAW,gBAAY,GACvCY,GACIa,YAAS,IACVW,EAAapC,UAAW,0BAAsB,GACjDY,GACIa,YAAS,IACVW,EAAapC,UAAW,uBAAmB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"}
|