@syncfusion/ej2-querybuilder 22.2.5 → 22.2.9
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 +14 -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 +15 -6
- package/dist/es6/ej2-querybuilder.es2015.js.map +1 -1
- package/dist/es6/ej2-querybuilder.es5.js +15 -6
- 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.d.ts +1 -0
- package/src/query-builder/query-builder.js +15 -6
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ej2-querybuilder.min.js","sources":["../../src/query-builder/query-builder.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 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(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' };\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 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.rule = { condition: 'and', not: false, rules: [] };\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.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]);\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 || this.isLocale) {\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) {\n if (column.operators) {\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 if (target.className.indexOf('e-removerule') > -1) {\n this.actionButton = target;\n this.deleteRule(target);\n }\n else if (target.className.indexOf('e-deletegroup') > -1) {\n this.actionButton = target;\n this.deleteGroup(closest(target, '.e-group-container'));\n }\n else if (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 }\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 ruleListElem.appendChild(ruleElem);\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 (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('button');\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 element = this.createElement('span', { attrs: { class: 'e-btn-icon e-icons e-delete-icon' } });\n ruleElem.querySelector('button').appendChild(element);\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 {\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)\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 ddlField = {\n fields: { dataSource: this.columns,\n value: 'field', text: 'label', child: 'columns', expanded: 'expanded' },\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' }, select: this.onSelectField\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.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 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 if (custom) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n newRule.custom = custom;\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'),\n position: 'BottomCenter', cssClass: 'e-querybuilder-error' });\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) {\n this.renderToolTip(fieldElem.parentElement);\n }\n isValid = false;\n }\n if (rule.rules[index].value instanceof Array) {\n valArray = rule.rules[index].value;\n }\n if (excludeOprs.indexOf(rule.rules[index].operator) < 0 &&\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 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.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(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 if (!this.headerTemplate) {\n groupElem.querySelector('.e-group-action').appendChild(dltGroupBtn);\n }\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 ruleList.appendChild(groupElem);\n var level = this.levelColl[target.id].slice(0);\n level.push(grpLen);\n this.levelColl[groupElem.id] = level;\n if (!this.isImportRules) {\n this.isAddSuccess = true;\n this.addGroups([], target.id.replace(this.element.id + '_', ''));\n this.isAddSuccess = false;\n if (isBtnClick) {\n this.addRuleElement(groupElem, {});\n }\n }\n }\n else {\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, 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 if (dateElement.element && dateElement.element.className.indexOf('e-datepicker') > -1) {\n element = dateElement.element;\n }\n var value;\n var rbValue;\n var dropDownObj;\n if (element.className.indexOf('e-radio') > -1) {\n // eslint-disable-next-line\n rbValue = parseInt(element.id.split('valuekey')[1], 0);\n dropDownObj =\n getComponent(closest(element, '.e-rule-container').querySelector('.e-filter-input'), 'dropdownlist');\n this.selectedColumn = dropDownObj.getDataByValue(dropDownObj.value);\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.onSelectField = function (args) {\n if (args.itemData.hasChildren) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this.showPopup();\n }\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 subFieldData = Object.keys(this.selectedColumn.columns[0]);\n var ddlField;\n ddlField = {\n dataSource: this.selectedColumn.columns,\n fields: this.fields,\n placeholder: this.l10n.getConstant('SelectField'),\n popupHeight: ((subFieldData.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) > -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 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 this.renderValues(operatorElem, itemData, ddlArgs.previousItemData, true, rule, tempRule, ddlArgs.element);\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 value = rule ? (rule.operator !== '' ? rule.operator : value) : value;\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: 0,\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 this.renderValues(operatorElem, this.selectedColumn, ddlArgs.previousItemData, false, rule, tempRule, ddlArgs.element);\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 fieldValue = this.selectedRule.field;\n var isNested = this.selectedRule.field.indexOf(this.separator);\n if (isNested !== 0 && this.fieldMode !== 'DropdownTree') {\n var nest = this.selectedRule.field.split(this.separator);\n fieldValue = nest[nest.length - 1];\n }\n var multiSelectValue;\n multiSelectValue = {\n dataSource: isValues ? values : (isFetched ? ds : this.dataManager),\n query: new Query([rule.field]),\n fields: { text: fieldValue, value: fieldValue },\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.isPublic || isTemplate) {\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 ? 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 ? 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.isPublic || isTemplate) ? rule.value : this.setDefaultValue(parentId, false, true);\n if ((operator === 'in' || operator === 'notin') && (this.dataColl.length || columnData.values)) {\n selectedVal = this.isImportRules ? 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 ? 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 // 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 isCheck = true;\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);\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 if (isRender) {\n var ddlObj = getComponent(target.querySelector('input'), 'dropdownlist');\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 ddlObj.dataBind();\n }\n }\n var operator = tempRule.operator.toString();\n var isTempRendered = false;\n if (!(operator.indexOf('null') > -1 || operator.indexOf('empty') > -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 (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 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 } // 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 }\n else {\n valElem = this.columnTemplateFn(args, this, 'Template', templateID)[0];\n }\n target.nextElementSibling.appendChild(valElem);\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 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 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 = { condition: groups[i].condition, 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 if (this.updatedRule) {\n condition = this.updatedRule.condition;\n not = this.updatedRule.not;\n }\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 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.rule = this.checkNotGroup(this.rule);\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 (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 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 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 this.rule = newProp.rule;\n newProp.rule = this.getRuleCollection(this.rule, false);\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 EndsWith: 'Ends With',\n Contains: 'Contains',\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 };\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: 'endswith', key: this.l10n.getConstant('EndsWith') },\n { value: 'contains', key: this.l10n.getConstant('Contains') },\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 ],\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 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 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 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.rule = rule;\n rule = this.getRuleCollection(this.rule, false);\n this.importRules(this.rule, this.element.querySelector('.e-group-container'), true, this.rule.not, isRoot);\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 };\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 }\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 };\n }\n else {\n rule = { 'condition': rule.condition, 'rules': rule.rules };\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 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 var ignoreOper = ['notcontains', 'notstartswith', 'notendswith'];\n if (!ruleColl) {\n return pred;\n }\n for (var i = 0, len = ruleColl.length; i < len; i++) {\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(ruleColl[i].operator) && !isNullOrUndefined(ruleColl[i].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('contains') < 0) {\n pred = isDateFilter ? this.datePredicate(ruleColl[i], ruleValue) :\n this.arrayPredicate(ruleColl[i]);\n }\n else {\n var value = ruleValue;\n if (value !== '' && ignoreOper.indexOf(oper) < 0) {\n pred = new Predicate(ruleColl[i].field, ruleColl[i].operator, ruleValue, ignoreCase);\n }\n }\n }\n else {\n if (ignoreOper.indexOf(oper) > -1) {\n continue;\n }\n if (isDateFilter || (oper.indexOf('in') > -1 || oper.indexOf('between') > -1 ||\n oper.indexOf('null') > -1 || oper.indexOf('empty') > -1) && oper.indexOf('contains') < 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, ruleColl[i].operator, ruleValue, ignoreCase);\n }\n else if (value !== '') {\n pred = new Predicate(ruleColl[i].field, ruleColl[i].operator, ruleValue, ignoreCase);\n }\n }\n else {\n var value = ruleValue;\n if (pred && value !== '') {\n pred = pred.or(ruleColl[i].field, ruleColl[i].operator, ruleValue, ignoreCase);\n }\n else if (value !== '') {\n pred = new Predicate(ruleColl[i].field, ruleColl[i].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 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 }\n }\n parentElem = closest(parentElem, '.e-rule-list');\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 return element[element.length - 1];\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-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-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' || rule.value === null) {\n valueStr += rule.value;\n }\n else {\n valueStr += '\"' + rule.value + '\"';\n }\n }\n }\n if (rule.operator.toString().indexOf('null') > -1 || (rule.operator.toString().indexOf('empty') > -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 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 + ' ' + 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 - 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.rule = { condition: 'and', not: false, rules: [] };\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 {object} - 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 return this.getSqlString(this.getValidRules(rule), allowEscape, null, sqlLocale).replace(/\"/g, '\\'');\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 if (lastParser[0] === 'Left' && (secParser && secParser[0] === 'Conditions')) {\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 (localeOperator[i] === 'notcontains') ? 'notcontains' : 'contains';\n }\n else if (value && value.indexOf('%') !== 0 && value.indexOf('%') === value.length - 1) {\n return (localeOperator[i] === 'notstartswith') ? 'notstartswith' : 'startswith';\n }\n else if (value && value.indexOf('%') === 0 && value.indexOf('%') !== value.length - 1) {\n return (localeOperator[i] === 'notendswith') ? '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 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 __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 Property({ ruleDelete: true, groupInsert: true, groupDelete: true })\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('')\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"],"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","isLocale","isRefreshed","isNotified","isAddSuccess","isNotValueChange","isFieldChange","isFieldClose","isDestroy","isGetNestedData","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","rule","rules","disableRuleCondition","getWrapper","getModuleName","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","push","operators","customOperators","updateSubFieldsFromColumns","label","updateSubFields","trigger","col","data","sampCol","result","compField","resData","column","this_1","j","sqlIdx","operator_1","operColl","values","map","join","valueIdx","focusEventHandler","event","clickEventHandler","args","groupID","tagName","animation","Animation","duration","delay","renderSummary","summaryElem","document","getElementById","txtareaElem","animate","name","groupElem","style","display","textContent","getSqlFromRules","height","scrollHeight","actionButton","deleteRule","deleteGroup","closest","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","isNullOrUndefined","maxGroupCount","enableRtl","children","addRuleElement","appendRuleElem","parentId","action","ruleElem","elem","ruleListElem","select","setAttribute","ruleIdCounter","ruleTemplate","requestType","ruleID","ruleTemplateFn","templateParser","templateID","getOperators","operatorFields","isReact","isAngular","templateColl","nodeType","isVue3","append","cloneNode","renderReactTemplates","isRuleTemplate","isInitialLoad","addRuleSuccessCallBack","trgt","act","pId","isRlTmp","dropDownList","getColumn","newRule","operator","selectedColumn","passedRule","args_1","displayMode","previousElementSibling","updateAddedRule","fieldMode","ddlField","ddlValue","dataSource","placeholder","popupHeight","close","fieldClose","bind","change","changeField","open","popupOpen","fieldModel","DropDownList","appendTo","ddlVal","getDataByValue","changeRule","itemData","child","expanded","showClearButton","changeOnBlur","treeSettings","expandOn","onSelectField","dropdowntree","DropDownTree","getLabelFromColumn","index","custom","changeRuleTemplate","operVal","parentGroup","previousColumn","detach","clearQBTemplate","renderToolTip","tooltip","Tooltip","content","position","cssClass","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","filterElem","ruleDelete","delBtnElem","isGroup","isBtnClick","addGroupSuccess","eventTarget","dltGroupBtn","groupIdCounter","headerTemplateFn","andInpElem","orInpElem","andLblElem","orLblElem","btnGroupId","groupDelete","Button","iconCss","rippleEffect","selector","childElems","grpLen","addGroups","notElem","classList","add","args_2","notCondition","undefined","DropDownButton","items","beforeOpen","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","parseInt","immediateModeDelay","window","clearInterval","timer","setInterval","filterValue","grID","rlID","ele","changeValueSuccessCallBack","ddl","item","popupObj","getItemData","customArgs","isInteracted","previousItemData","prevItemData","previousItem","e","previousValue","hasChildren","showPopup","ddtElem","ddt","oldValue","dataBind","destroySubFields","subFieldElem","ddlArgs","tempRule","ddlObj","changeFilter","flt","dl","rl","tmpRl","dArg","selectedField","fieldChangeSuccess","operatorElem","changeOperator","opr","selectedIndex","operatorChangeSuccess","changeRuleValues","tooltipElem","createSubFields","nextElementSibling","remove","subFieldValue","subFilterCounter","insertBefore","ruleId","subFieldData","subField","toString","currOper","prevValue","parentElem","operatorList","oprElem","childElementCount","fieldObj","renderValues","ddlOperator","operatorModel","isField","popup","divElement","templateDestroy","templateElement","elemId","temp","templateElements","getValue","elementId","elements","getValues","original","fieldColl","dataObj","fieldStr","createNestedObject","lastIndex","k","getDistinctValues","nest","isNested","this_2","forEach","renderMultiSelect","selectedValue","ds","isFetched","isValues","fieldValue","selectedRule","multiSelectValue","dataManager","query","Query","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","unWireEvents","portals","addRules","groups","importRules","initWrapper","trim","summaryView","notGroupRtl","readonly","enableReadonly","buttons","button","contentElem","textElem","styles","editElem","divElem","collapseElem","title","sortDirection","executeLocal","sortByDesc","sortBy","onChangeNotGroup","checkNotGroup","orgRule","onPropertyChanged","newProp","oldProp","_i","properties_1","enablePersistence","Internationalization","preRender","getUniqueID","defaultLocale","StartsWith","EndsWith","Contains","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","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","splice","deleteRuleSuccessCallBack","clnruleElem","err","keyCode","preventDefault","clearTemplate","count","andElem","orElem","disabled","currentRule","getRules","ruleCondtion","isValidRule","customObj","isQuestion","notValue","setRules","getRule","HTMLElement","deleteGroups","groupIdColl","getFilteredRecords","predicate","getPredicate","dataManagerQuery","where","deleteRules","ruleIdColl","getDataManagerQuery","pred","pred2","ruleValue","ignoreCase","ignoreOper","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","getInstance","deleteGroupElems","addRuleGroupElems","removeRuleElems","elems","enableBtnGroup","isDateFunction","dateFunc","getSqlString","enableEscape","queryStr","sqlLocale","valueStr","ruleOpertor","ruleCondition","isCustom","setRulesFromSql","sqlString","ruleModel","getRulesFromSql","sqlParser","processParser","allowEscape","str","st","parseSqlStrings","conditions","subOp","regexStr","matchValue","test","RegExp","exec","lastPasrser","checkLiteral","checkNumberLiteral","isClosed","lastParser","secParser","betweenParser","betweenOperator","getOperator","=","!=","<",">","<=",">=","not in","not between","is empty","is null","is not null","is not empty","localeOperator","getTypeFromColumn","l","getLabelFromField","startIdx","fieldName","subRules","lLen","grpCount","numVal","strVal","isLeftOpened","val","substring","pop","Event","Complex","NotifyPropertyChanges","Component"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ej2-querybuilder.min.js","sources":["../../src/query-builder/query-builder.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 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(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' };\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 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.rule = { condition: 'and', not: false, rules: [] };\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.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 || (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 if (target.className.indexOf('e-removerule') > -1) {\n this.actionButton = target;\n this.deleteRule(target);\n }\n else if (target.className.indexOf('e-deletegroup') > -1) {\n this.actionButton = target;\n this.deleteGroup(closest(target, '.e-group-container'));\n }\n else if (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 }\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 ruleListElem.appendChild(ruleElem);\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 (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('button');\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 element = this.createElement('span', { attrs: { class: 'e-btn-icon e-icons e-delete-icon' } });\n ruleElem.querySelector('button').appendChild(element);\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 {\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)\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 ddlField = {\n fields: { dataSource: this.columns,\n value: 'field', text: 'label', child: 'columns', expanded: 'expanded' },\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' }, select: this.onSelectField\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.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 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 if (custom) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n newRule.custom = custom;\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'),\n position: 'BottomCenter', cssClass: 'e-querybuilder-error' });\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) {\n this.renderToolTip(fieldElem.parentElement);\n }\n isValid = false;\n }\n if (rule.rules[index].value instanceof Array) {\n valArray = rule.rules[index].value;\n }\n if (excludeOprs.indexOf(rule.rules[index].operator) < 0 &&\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 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.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(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 if (!this.headerTemplate) {\n groupElem.querySelector('.e-group-action').appendChild(dltGroupBtn);\n }\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 ruleList.appendChild(groupElem);\n var level = this.levelColl[target.id].slice(0);\n level.push(grpLen);\n this.levelColl[groupElem.id] = level;\n if (!this.isImportRules) {\n this.isAddSuccess = true;\n this.addGroups([], target.id.replace(this.element.id + '_', ''));\n this.isAddSuccess = false;\n if (isBtnClick) {\n this.addRuleElement(groupElem, {});\n }\n }\n }\n else {\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, 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 if (dateElement.element && dateElement.element.className.indexOf('e-datepicker') > -1) {\n element = dateElement.element;\n }\n var value;\n var rbValue;\n var dropDownObj;\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 }\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.onSelectField = function (args) {\n if (args.itemData.hasChildren) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this.showPopup();\n }\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 subFieldData = Object.keys(this.selectedColumn.columns[0]);\n var ddlField;\n ddlField = {\n dataSource: this.selectedColumn.columns,\n fields: this.fields,\n placeholder: this.l10n.getConstant('SelectField'),\n popupHeight: ((subFieldData.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) > -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 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 this.renderValues(operatorElem, itemData, ddlArgs.previousItemData, true, rule, tempRule, ddlArgs.element);\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 value = rule ? (rule.operator !== '' ? rule.operator : value) : value;\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: 0,\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 this.renderValues(operatorElem, this.selectedColumn, ddlArgs.previousItemData, false, rule, tempRule, ddlArgs.element);\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 fieldValue = this.selectedRule.field;\n var isNested = this.selectedRule.field.indexOf(this.separator);\n if (isNested !== 0 && this.fieldMode !== 'DropdownTree') {\n var nest = this.selectedRule.field.split(this.separator);\n fieldValue = nest[nest.length - 1];\n }\n var multiSelectValue;\n multiSelectValue = {\n dataSource: isValues ? values : (isFetched ? ds : this.dataManager),\n query: new Query([rule.field]),\n fields: { text: fieldValue, value: fieldValue },\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.isPublic || isTemplate) {\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 ? 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 ? 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.isPublic || isTemplate) ? rule.value : this.setDefaultValue(parentId, false, true);\n if ((operator === 'in' || operator === 'notin') && (this.dataColl.length || columnData.values)) {\n selectedVal = this.isImportRules ? 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 ? 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 // 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 isCheck = true;\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);\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 if (isRender) {\n var ddlObj = getComponent(target.querySelector('input'), 'dropdownlist');\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 ddlObj.dataBind();\n }\n }\n var operator = tempRule.operator.toString();\n var isTempRendered = false;\n if (!(operator.indexOf('null') > -1 || operator.indexOf('empty') > -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 (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 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 } // 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 }\n else {\n valElem = this.columnTemplateFn(args, this, 'Template', templateID)[0];\n }\n target.nextElementSibling.appendChild(valElem);\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 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 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 = { condition: groups[i].condition, 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 if (this.updatedRule) {\n condition = this.updatedRule.condition;\n not = this.updatedRule.not;\n }\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 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.rule = this.checkNotGroup(this.rule);\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 (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 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 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 this.rule = newProp.rule;\n newProp.rule = this.getRuleCollection(this.rule, false);\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 EndsWith: 'Ends With',\n Contains: 'Contains',\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 };\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: 'endswith', key: this.l10n.getConstant('EndsWith') },\n { value: 'contains', key: this.l10n.getConstant('Contains') },\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 ],\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 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 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 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.rule = rule;\n rule = this.getRuleCollection(this.rule, false);\n this.importRules(this.rule, this.element.querySelector('.e-group-container'), true, this.rule.not, isRoot);\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 };\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 }\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 };\n }\n else {\n rule = { 'condition': rule.condition, 'rules': rule.rules };\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 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 var ignoreOper = ['notcontains', 'notstartswith', 'notendswith'];\n if (!ruleColl) {\n return pred;\n }\n for (var i = 0, len = ruleColl.length; i < len; i++) {\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(ruleColl[i].operator) && !isNullOrUndefined(ruleColl[i].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('contains') < 0) {\n pred = isDateFilter ? this.datePredicate(ruleColl[i], ruleValue) :\n this.arrayPredicate(ruleColl[i]);\n }\n else {\n var value = ruleValue;\n if (value !== '' && ignoreOper.indexOf(oper) < 0) {\n pred = new Predicate(ruleColl[i].field, ruleColl[i].operator, ruleValue, ignoreCase);\n }\n }\n }\n else {\n if (ignoreOper.indexOf(oper) > -1) {\n continue;\n }\n if (isDateFilter || (oper.indexOf('in') > -1 || oper.indexOf('between') > -1 ||\n oper.indexOf('null') > -1 || oper.indexOf('empty') > -1) && oper.indexOf('contains') < 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, ruleColl[i].operator, ruleValue, ignoreCase);\n }\n else if (value !== '') {\n pred = new Predicate(ruleColl[i].field, ruleColl[i].operator, ruleValue, ignoreCase);\n }\n }\n else {\n var value = ruleValue;\n if (pred && value !== '') {\n pred = pred.or(ruleColl[i].field, ruleColl[i].operator, ruleValue, ignoreCase);\n }\n else if (value !== '') {\n pred = new Predicate(ruleColl[i].field, ruleColl[i].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 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 }\n }\n parentElem = closest(parentElem, '.e-rule-list');\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 return element[element.length - 1];\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-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-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' || rule.value === null) {\n valueStr += rule.value;\n }\n else {\n valueStr += '\"' + rule.value + '\"';\n }\n }\n }\n if (rule.operator.toString().indexOf('null') > -1 || (rule.operator.toString().indexOf('empty') > -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 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 + ' ' + 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 - 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.rule = { condition: 'and', not: false, rules: [] };\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 {object} - 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 return this.getSqlString(this.getValidRules(rule), allowEscape, null, sqlLocale).replace(/\"/g, '\\'');\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 if (lastParser[0] === 'Left' && (secParser && secParser[0] === 'Conditions')) {\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 (localeOperator[i] === 'notcontains') ? 'notcontains' : 'contains';\n }\n else if (value && value.indexOf('%') !== 0 && value.indexOf('%') === value.length - 1) {\n return (localeOperator[i] === 'notstartswith') ? 'notstartswith' : 'startswith';\n }\n else if (value && value.indexOf('%') === 0 && value.indexOf('%') !== value.length - 1) {\n return (localeOperator[i] === 'notendswith') ? '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 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 __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 Property({ ruleDelete: true, groupInsert: true, groupDelete: true })\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('')\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"],"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","isLocale","isRefreshed","isNotified","isAddSuccess","isNotValueChange","isFieldChange","isFieldClose","isDestroy","isGetNestedData","isCustomOprCols","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","rule","rules","disableRuleCondition","getWrapper","getModuleName","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","push","operators","customOperators","updateSubFieldsFromColumns","label","updateSubFields","trigger","col","data","sampCol","result","compField","resData","column","from","isNullOrUndefined","this_1","j","sqlIdx","operator_1","operColl","values","map","join","valueIdx","focusEventHandler","event","clickEventHandler","args","groupID","tagName","animation","Animation","duration","delay","renderSummary","summaryElem","document","getElementById","txtareaElem","animate","name","groupElem","style","display","textContent","getSqlFromRules","height","scrollHeight","actionButton","deleteRule","deleteGroup","closest","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","ruleTemplate","requestType","ruleID","ruleTemplateFn","templateParser","templateID","getOperators","operatorFields","isReact","isAngular","templateColl","nodeType","isVue3","append","cloneNode","renderReactTemplates","isRuleTemplate","isInitialLoad","addRuleSuccessCallBack","trgt","act","pId","isRlTmp","dropDownList","getColumn","newRule","operator","selectedColumn","passedRule","args_1","displayMode","previousElementSibling","updateAddedRule","fieldMode","ddlField","ddlValue","dataSource","placeholder","popupHeight","close","fieldClose","bind","change","changeField","open","popupOpen","fieldModel","DropDownList","appendTo","ddlVal","getDataByValue","changeRule","itemData","child","expanded","showClearButton","changeOnBlur","treeSettings","expandOn","onSelectField","dropdowntree","DropDownTree","getLabelFromColumn","index","custom","changeRuleTemplate","operVal","parentGroup","previousColumn","detach","clearQBTemplate","renderToolTip","tooltip","Tooltip","content","position","cssClass","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","filterElem","ruleDelete","delBtnElem","isGroup","isBtnClick","addGroupSuccess","eventTarget","dltGroupBtn","groupIdCounter","headerTemplateFn","andInpElem","orInpElem","andLblElem","orLblElem","btnGroupId","groupDelete","Button","iconCss","rippleEffect","selector","childElems","grpLen","addGroups","notElem","classList","add","args_2","notCondition","undefined","DropDownButton","items","beforeOpen","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","parseInt","immediateModeDelay","window","clearInterval","timer","setInterval","filterValue","grID","rlID","ele","changeValueSuccessCallBack","ddl","item","popupObj","getItemData","customArgs","isInteracted","previousItemData","prevItemData","previousItem","e","previousValue","hasChildren","showPopup","ddtElem","ddt","oldValue","dataBind","destroySubFields","subFieldElem","ddlArgs","tempRule","ddlObj","changeFilter","flt","dl","rl","tmpRl","dArg","selectedField","fieldChangeSuccess","operatorElem","changeOperator","opr","selectedIndex","operatorChangeSuccess","changeRuleValues","tooltipElem","createSubFields","nextElementSibling","remove","subFieldValue","subFilterCounter","insertBefore","ruleId","subFieldData","subField","toString","currOper","prevValue","parentElem","operatorList","oprElem","childElementCount","fieldObj","renderValues","ddlOperator","operatorModel","isField","popup","divElement","templateDestroy","templateElement","elemId","temp","templateElements","getValue","elementId","elements","getValues","original","fieldColl","dataObj","fieldStr","createNestedObject","lastIndex","k","getDistinctValues","nest","isNested","this_2","forEach","renderMultiSelect","selectedValue","ds","isFetched","isValues","fieldValue","selectedRule","multiSelectValue","dataManager","query","Query","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","unWireEvents","portals","addRules","groups","importRules","initWrapper","trim","summaryView","notGroupRtl","readonly","enableReadonly","buttons","button","contentElem","textElem","styles","editElem","divElem","collapseElem","title","sortDirection","executeLocal","sortByDesc","sortBy","onChangeNotGroup","checkNotGroup","orgRule","onPropertyChanged","newProp","oldProp","_i","properties_1","enablePersistence","Internationalization","preRender","getUniqueID","defaultLocale","StartsWith","EndsWith","Contains","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","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","splice","deleteRuleSuccessCallBack","clnruleElem","err","keyCode","preventDefault","clearTemplate","count","andElem","orElem","disabled","currentRule","getRules","ruleCondtion","isValidRule","customObj","isQuestion","notValue","setRules","getRule","HTMLElement","deleteGroups","groupIdColl","getFilteredRecords","predicate","getPredicate","dataManagerQuery","where","deleteRules","ruleIdColl","getDataManagerQuery","pred","pred2","ruleValue","ignoreCase","ignoreOper","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","getInstance","deleteGroupElems","addRuleGroupElems","removeRuleElems","elems","enableBtnGroup","isDateFunction","dateFunc","getSqlString","enableEscape","queryStr","sqlLocale","valueStr","ruleOpertor","ruleCondition","isCustom","setRulesFromSql","sqlString","ruleModel","getRulesFromSql","sqlParser","processParser","allowEscape","str","st","parseSqlStrings","conditions","subOp","regexStr","matchValue","test","RegExp","exec","lastPasrser","checkLiteral","checkNumberLiteral","isClosed","lastParser","secParser","betweenParser","betweenOperator","getOperator","=","!=","<",">","<=",">=","not in","not between","is empty","is null","is not null","is not empty","localeOperator","getTypeFromColumn","l","getLabelFromField","startIdx","fieldName","subRules","lLen","grpCount","numVal","strVal","isLeftOpened","val","substring","pop","Event","Complex","NotifyPropertyChanges","Component"],"mappings":"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"}
|