@syncfusion/ej2-querybuilder 24.1.46 → 24.2.5
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 +23 -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 +21 -6
- package/dist/es6/ej2-querybuilder.es2015.js.map +1 -1
- package/dist/es6/ej2-querybuilder.es5.js +21 -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-model.d.ts +1 -1
- package/src/query-builder/query-builder.js +21 -6
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ej2-querybuilder.umd.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.setProperties({ rule: { condition: 'and', not: false, rules: [] } }, true);\n this.disableRuleCondition(bodyElem.parentElement);\n };\n QueryBuilder.prototype.getWrapper = function () {\n return this.element;\n };\n QueryBuilder.prototype.getModuleName = function () {\n return 'query-builder';\n };\n QueryBuilder.prototype.GetRootColumnName = function (field) {\n return this.separator ? field.split(this.separator)[0] : field;\n };\n QueryBuilder.prototype.initialize = function () {\n if (this.dataColl.length) {\n var columnKeys = Object.keys(this.dataColl[0]);\n var cols = [];\n var categories = [];\n var type = void 0;\n var groupBy = false;\n var isDate = false;\n var value = void 0;\n var validateObj = { isRequired: true, min: 0, max: Number.MAX_VALUE };\n if (this.columns.length) {\n this.columnSort();\n var columns = this.columns;\n for (var i = 0, len = columns.length; i < len; i++) {\n this.updateCustomOperator(columns[i], 'initial');\n if (!columns[i].type) {\n if (columnKeys.indexOf(columns[i].field) > -1) {\n value = this.dataColl[0][columns[i].field];\n type = typeof value;\n if (type === 'string') {\n isDate = !isNaN(Date.parse(value));\n }\n else if (type === 'object') {\n isDate = value instanceof Date && !isNaN(value.getTime());\n type = 'string';\n }\n columns[i].type = type;\n isDate = false;\n }\n type = 'string';\n }\n if (!columns[i].validation) {\n columns[i].validation = validateObj;\n }\n if (columns[i].category) {\n groupBy = true;\n }\n else {\n columns[i].category = this.l10n.getConstant('OtherFields');\n }\n if (categories.indexOf(columns[i].category) < 0) {\n categories.push(columns[i].category);\n }\n if (!columns[i].operators ||\n (this.isLocale && this.isCustomOprCols.indexOf(columns[i].field) !== 0)) {\n columns[i].operators = this.customOperators[columns[i].type + 'Operator'];\n }\n }\n if (groupBy && (categories.length > 1 || categories[0] !== this.l10n.getConstant('OtherFields'))) {\n this.fields = { text: 'label', value: 'field', groupBy: 'category' };\n }\n this.updateSubFieldsFromColumns(this.columns);\n }\n else {\n for (var i = 0, len = columnKeys.length; i < len; i++) {\n value = this.dataColl[0][columnKeys[i]];\n type = typeof value;\n if (type === 'string') {\n isDate = !isNaN(Date.parse(value));\n }\n else if (type === 'object' && !Object.keys(value).length) {\n isDate = value instanceof Date && !isNaN(value.getTime());\n type = 'string';\n }\n cols[i] = { 'field': columnKeys[i], 'label': columnKeys[i], 'type': isDate ? 'date' : type,\n 'validation': validateObj };\n isDate = false;\n cols[i].operators = this.customOperators[cols[i].type + 'Operator'];\n if (type === 'object') {\n this.updateSubFields(value, cols[i]);\n }\n }\n this.columns = cols;\n }\n }\n else if (this.columns.length) {\n var columns = this.columns;\n for (var i = 0, len = columns.length; i < len; i++) {\n if (columns[i].category) {\n this.fields = { text: 'label', value: 'field', groupBy: 'category' };\n }\n else {\n columns[i].category = this.l10n.getConstant('OtherFields');\n }\n this.updateCustomOperator(columns[i]);\n if (!columns[i].operators || this.isLocale) {\n columns[i].operators = this.customOperators[columns[i].type + 'Operator'];\n }\n }\n this.updateSubFieldsFromColumns(this.columns);\n }\n this.trigger('dataBound', { type: 'dataBound' });\n };\n QueryBuilder.prototype.updateSubFieldsFromColumns = function (col, field) {\n for (var i = 0; i < col.length; i++) {\n if (this.separator !== '' && col[i].field.indexOf(this.separator) < 0) {\n col[i].field = field ? field + this.separator + col[i].field : col[i].field;\n }\n if (col[i].operators) {\n this.updateCustomOperator(col[i]);\n }\n else if (col[i].type && col[i].type !== 'object') {\n col[i].operators = this.customOperators[col[i].type + 'Operator'];\n }\n if (col[i].columns) {\n col[i].type = 'object';\n this.updateSubFieldsFromColumns(col[i].columns, col[i].field);\n }\n }\n };\n QueryBuilder.prototype.updateSubFields = function (value, col, data) {\n var sampCol;\n col.columns = [];\n var columnKeys = Object.keys(value);\n var field;\n var label;\n var type;\n var result;\n data = data ? data : this.dataColl[0];\n for (var i = 0, len = columnKeys.length; i < len; i++) {\n var compField = col.field.split('.');\n if (data) {\n result = data[compField[compField.length - 1]][columnKeys[i]];\n }\n else {\n result = this.dataColl[0][col.field][columnKeys[i]];\n }\n var resData = data[col.field.split(this.separator)[col.field.split(this.separator).length - 1]];\n type = typeof result;\n field = col.field + this.separator + columnKeys[i];\n label = columnKeys[i];\n type = (type === 'object' && !isNaN(Date.parse(result))) ? 'date' : type;\n sampCol = { field: field, label: label, type: type };\n if (type !== 'object') {\n sampCol.operators = this.customOperators[type + 'Operator'];\n }\n col.columns.push(sampCol);\n if (type === 'object') {\n this.updateSubFields(result, sampCol, resData);\n }\n }\n };\n QueryBuilder.prototype.updateCustomOperator = function (column, from) {\n if (column.operators) {\n if (!this.isLocale && from === 'initial' && !isNullOrUndefined(this.isCustomOprCols)) {\n this.isCustomOprCols.push(column.field);\n }\n var _loop_1 = function (j) {\n var sqlIdx = Object.keys(column.operators[j]).indexOf('sqlOperator');\n if (sqlIdx > -1) {\n var operator_1 = column.operators[j];\n var operColl = Object.keys(operator_1);\n var values = operColl.map(function (key) { return operator_1[\"\" + key]; }).join(',').split(',');\n var valueIdx = operColl.indexOf('value');\n this_1.operators[values[valueIdx]] = values[sqlIdx];\n }\n };\n var this_1 = this;\n for (var j = 0; j < column.operators.length; j++) {\n _loop_1(j);\n }\n }\n };\n QueryBuilder.prototype.focusEventHandler = function (event) {\n this.target = event.target;\n };\n QueryBuilder.prototype.clickEventHandler = function (event) {\n var _this = this;\n var target = event.target;\n var args;\n this.isImportRules = false;\n var groupID;\n if (target.tagName === 'SPAN') {\n target = target.parentElement;\n }\n if (target.className.indexOf('e-collapse-rule') > -1) {\n var animation = new Animation({ duration: 1000, delay: 0 });\n if (this.element.querySelectorAll('.e-summary-content').length < 1) {\n this.renderSummary();\n }\n var summaryElem = document.getElementById(this.element.id + '_summary_content');\n var txtareaElem = summaryElem.querySelector('.e-summary-text');\n animation.animate('.e-query-builder', { name: 'SlideLeftIn' });\n var groupElem = this.element.querySelector('.e-group-container');\n groupElem.style.display = 'none';\n txtareaElem.textContent = this.getSqlFromRules(this.rule);\n summaryElem.style.display = 'block';\n txtareaElem.style.height = txtareaElem.scrollHeight + 'px';\n }\n if (target.tagName === 'BUTTON' && target.className.indexOf('e-qb-toggle') < 0) {\n 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 this.dummyDropdownTreeDs = extend([], this.columns, [], true);\n this.updateDropdowntreeDS(this.dummyDropdownTreeDs);\n ddlField = {\n fields: { dataSource: this.dummyDropdownTreeDs,\n value: 'field', text: 'label', child: 'columns', expanded: 'expanded', selectable: 'selectable' },\n placeholder: this.l10n.getConstant('SelectField'), showClearButton: false,\n popupHeight: ((this.columns.length > 5) ? height : 'auto'), changeOnBlur: false,\n change: this.changeField.bind(this), value: !isNullOrUndefined(ddlValue) ? [ddlValue] : null,\n open: this.popupOpen.bind(this, false), treeSettings: { expandOn: 'Click' },\n cssClass: 'e-qb-ddt'\n };\n if (this.fieldModel) {\n ddlField = __assign({}, ddlField, this.fieldModel);\n }\n var dropdowntree = new DropDownTree(ddlField);\n dropdowntree.appendTo('#' + ruleElem.id + '_filterkey');\n if (!isNullOrUndefined(dropdowntree.value)) {\n var value = this.getLabelFromColumn(dropdowntree.value[0]);\n dropdowntree.element.value = value;\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var ddlVal = !isNullOrUndefined(rule.field) ?\n this.GetRootColumnName(rule.field) : dropdowntree.value;\n this.selectedColumn = this.getColumn(ddlVal);\n if (Object.keys(rule).length) {\n this.changeRule(rule, {\n element: dropdowntree.element, itemData: this.selectedColumn\n });\n }\n }\n }\n ruleID = ruleElem.id.replace(this.element.id + '_', '');\n if (!this.isImportRules) {\n this.trigger('change', { groupID: trgt.id.replace(this.element.id + '_', ''), ruleID: ruleID, type: 'insertRule' });\n }\n }\n };\n QueryBuilder.prototype.updateDropdowntreeDS = function (columns) {\n for (var i = 0; i < columns.length; i++) {\n if (columns[parseInt(i.toString(), 10)].type === 'object') {\n columns[parseInt(i.toString(), 10)].selectable = false;\n this.updateDropdowntreeDS(columns[parseInt(i.toString(), 10)].columns);\n }\n }\n };\n QueryBuilder.prototype.updateAddedRule = function (target, rule, newRule, isRuleTemplate, pId) {\n var ruleElem;\n var index = 0;\n var groupElem;\n var rules;\n if (isRuleTemplate) {\n ruleElem = select('#' + pId, target);\n groupElem = closest(target, '.e-group-container');\n rules = this.getParentGroup(groupElem);\n while (ruleElem && ruleElem.previousElementSibling !== null) {\n ruleElem = ruleElem.previousElementSibling;\n index++;\n }\n rules.rules[index] = rule;\n }\n else {\n groupElem = closest(target, '.e-group-container');\n rules = this.getParentGroup(groupElem);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var custom = rule.custom;\n if (Object.keys(rule).length) {\n 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', afterClose: function () {\n tooltip.destroy();\n } });\n tooltip.appendTo(element);\n tooltip.open(element);\n };\n /**\n * Validate the conditions and it display errors for invalid fields.\n *\n * @returns {boolean} - Validation\n */\n QueryBuilder.prototype.validateFields = function () {\n var isValid = true;\n var dropDownTreeObj;\n if (this.allowValidation) {\n var excludeOprs = ['isnull', 'isnotnull', 'isempty', 'isnotempty'];\n var i = void 0;\n var len = void 0;\n var fieldElem = void 0;\n var indexElem = void 0;\n var valArray = [];\n var groupElem = void 0;\n var index = void 0;\n var dropDownObj = void 0;\n var tempElem = void 0;\n var rule = void 0;\n var ruleElemCln = this.element.querySelectorAll('.e-rule-container');\n for (i = 0, len = ruleElemCln.length; i < len; i++) {\n var validateRule = void 0;\n groupElem = closest(ruleElemCln[i], '.e-group-container');\n rule = this.getParentGroup(groupElem);\n index = 0;\n indexElem = tempElem = ruleElemCln[i];\n if (this.fieldMode === 'DropdownTree') {\n dropDownTreeObj = getComponent(ruleElemCln[i].querySelector('.e-rule-filter input.e-dropdowntree'), 'dropdowntree');\n if (dropDownTreeObj && dropDownTreeObj.value && dropDownTreeObj.value.length) {\n this.selectedColumn = this.getColumn(dropDownTreeObj.value[0]);\n validateRule = this.selectedColumn.validation;\n }\n }\n else {\n dropDownObj = getComponent(ruleElemCln[i].querySelector('.e-rule-filter input.e-dropdownlist'), 'dropdownlist');\n if (dropDownObj && dropDownObj.value) {\n this.selectedColumn = dropDownObj.getDataByValue(dropDownObj.value);\n validateRule = !isNullOrUndefined(dropDownObj.index) && this.selectedColumn.validation;\n }\n }\n fieldElem = tempElem.querySelector('.e-rule-field input.e-control');\n if (validateRule && validateRule.isRequired) {\n while (indexElem && indexElem.previousElementSibling !== null) {\n indexElem = indexElem.previousElementSibling;\n index++;\n }\n fieldElem = tempElem.querySelector('.e-rule-operator .e-control');\n if (!rule.rules[index].operator) {\n if (fieldElem.parentElement.className.indexOf('e-tooltip') < 0) {\n this.renderToolTip(fieldElem.parentElement);\n }\n isValid = false;\n }\n if (rule.rules[index].value instanceof Array) {\n valArray = rule.rules[index].value;\n }\n if (excludeOprs.indexOf(rule.rules[index].operator) < -1 &&\n (isNullOrUndefined(rule.rules[index].value) &&\n rule.rules[index].type !== 'date') || rule.rules[index].value === '' ||\n (rule.rules[index].value instanceof Array && valArray.length < 1)) {\n var valElem = tempElem.querySelectorAll('.e-rule-value .e-control');\n isValid = false;\n for (var j = 0, jLen = valElem.length; j < jLen; j++) {\n var element = valElem[j];\n var elem = void 0;\n if (element.parentElement.className.indexOf('e-searcher') > -1) {\n elem = closest(element, '.e-multi-select-wrapper');\n if (elem.className.indexOf('e-tooltip') < 0) {\n this.renderToolTip(elem);\n }\n }\n else if (valElem[j].parentElement.className.indexOf('e-tooltip') < 0 && valElem[j].className.indexOf('e-tooltip') < 0) {\n this.renderToolTip(valElem[j].parentElement);\n }\n j++;\n }\n }\n }\n else if ((dropDownObj && dropDownObj.element && isNullOrUndefined(dropDownObj.index)) ||\n (dropDownTreeObj && dropDownTreeObj.element && (isNullOrUndefined(dropDownTreeObj.value) ||\n dropDownTreeObj.value.length < 1))) {\n if (fieldElem.parentElement.className.indexOf('e-tooltip') < 0) {\n this.renderToolTip(fieldElem.parentElement);\n }\n isValid = false;\n }\n }\n }\n return isValid;\n };\n QueryBuilder.prototype.refreshLevelColl = function () {\n this.levelColl = {};\n var groupElem = this.element.querySelector('.e-group-container');\n if (groupElem) {\n this.levelColl[groupElem.id] = [0];\n var obj = { groupElement: groupElem, level: [0] };\n this.refreshLevel(obj);\n }\n };\n QueryBuilder.prototype.refreshLevel = function (obj) {\n var ruleList = obj.groupElement.querySelector('.e-rule-list').children;\n var childElem;\n var groupElem = obj.groupElement;\n var i;\n var iLen = ruleList.length;\n var groupCount = 0;\n for (i = 0; i < iLen; i++) {\n childElem = ruleList[i];\n if (childElem.className.indexOf('e-group-container') > -1) {\n obj.level.push(groupCount);\n this.levelColl[childElem.id] = obj.level.slice();\n groupCount++;\n obj.groupElement = childElem;\n obj = this.refreshLevel(obj);\n }\n }\n var ruleListElem = closest(groupElem, '.e-rule-list');\n obj.groupElement = ruleListElem ? closest(ruleListElem, '.e-group-container') : groupElem;\n obj.level = this.levelColl[obj.groupElement.id].slice();\n return obj;\n };\n QueryBuilder.prototype.groupTemplate = function () {\n var glueElem;\n var inputElem;\n var labelElem;\n var grpActElem;\n var groupBtn;\n var groupElem = this.createElement('div', { attrs: { class: 'e-group-container' } });\n var groupHdrElem = this.createElement('div', { attrs: { class: 'e-group-header' } });\n var grpBodyElem = this.createElement('div', { attrs: { class: 'e-group-body' } });\n var rulesElem = this.createElement('div', { attrs: { class: 'e-rule-list' } });\n groupElem.appendChild(groupHdrElem);\n grpBodyElem.appendChild(rulesElem);\n groupElem.appendChild(grpBodyElem);\n // create button group in OR and AND process\n if (!this.headerTemplate) {\n glueElem = this.createElement('div', { attrs: { class: 'e-lib e-btn-group', role: 'group' } });\n if (this.enableNotCondition) {\n inputElem = this.createElement('button', { attrs: { type: 'button', class: 'e-qb-toggle' } });\n glueElem.appendChild(inputElem);\n }\n inputElem = this.createElement('input', { attrs: { type: 'radio', class: 'e-btngroup-and', value: 'AND' } });\n glueElem.appendChild(inputElem);\n labelElem = this.createElement('label', { attrs: { class: 'e-lib e-btn e-btngroup-and-lbl e-small' },\n innerHTML: this.l10n.getConstant('AND') });\n glueElem.appendChild(labelElem);\n inputElem = this.createElement('input', { attrs: { type: 'radio', class: 'e-btngroup-or', value: 'OR' } });\n glueElem.appendChild(inputElem);\n labelElem = this.createElement('label', { attrs: { class: 'e-lib e-btn e-btngroup-or-lbl e-small' },\n innerHTML: this.l10n.getConstant('OR') });\n glueElem.appendChild(labelElem);\n groupHdrElem.appendChild(glueElem);\n grpActElem = this.createElement('div', { attrs: { class: 'e-group-action' } });\n groupBtn = this.createElement('button', { attrs: { type: 'button', class: 'e-add-btn' } });\n grpActElem.appendChild(groupBtn);\n groupHdrElem.appendChild(grpActElem);\n }\n return groupElem;\n };\n QueryBuilder.prototype.ruleTemplate = function () {\n var tempElem;\n var clsName;\n var 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,\n condition: condition, rule: this.getRuleCollection(rule, true), groupID: groupID };\n this.trigger('actionBegin', args);\n this.headerFn = this.templateParser(this.headerTemplate);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.isReact) {\n template = this.headerFn(args, this, groupElem.id, templateID)[0];\n groupHdr.appendChild(template);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n }\n else if (this.isAngular) {\n var templateColl = this.headerFn(args, this, groupElem.id, templateID);\n template = (templateColl[0].nodeType === 3) ? templateColl[1] : templateColl[0];\n groupHdr.appendChild(template);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n }\n else if (this.isVue3) {\n template = this.headerFn(args, this, groupElem.id, templateID);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n append(template, groupHdr);\n }\n else {\n template = this.headerFn(args, this, 'Template', templateID)[0];\n groupHdr.appendChild(template);\n }\n this.renderReactTemplates();\n }\n return groupElem;\n };\n /**\n * Notify the changes to component.\n *\n * @param {string | number | boolean | Date | string[] | number[] | Date[]} value - 'value' to be passed to update the rule value.\n * @param {Element} element - 'element' to be passed to update the rule.\n * @param {string} type - 'type' to be passed to update the rule .\n * @returns {void}.\n */\n QueryBuilder.prototype.notifyChange = function (value, element, type) {\n var grpElement = closest(element, '.e-group-container');\n var rules = this.getParentGroup(grpElement);\n var ruleElement = closest(element, '.e-rule-container');\n var index = 0;\n if (type === 'not') {\n rules.not = value;\n return;\n }\n if (type === 'condition') {\n rules.condition = value;\n return;\n }\n while (ruleElement && ruleElement.previousElementSibling !== null) {\n ruleElement = ruleElement.previousElementSibling;\n index++;\n }\n var rule = rules.rules[index];\n var column = this.getColumn(rule.field);\n var format = this.getFormat(column.format);\n if (column.type === 'date') {\n if (value instanceof Date) {\n value = this.intl.formatDate(value, format);\n }\n else if (value instanceof Array) {\n for (var i = 0; i < value.length; i++) {\n if (value[i] && value[i] instanceof Date) {\n value[i] = this.intl.formatDate(value[i], format);\n }\n }\n }\n }\n if (column.ruleTemplate) {\n this.templateChange(element, value, type);\n }\n else {\n this.isNotified = true;\n this.updateRules(element, value);\n this.isNotified = false;\n }\n };\n QueryBuilder.prototype.templateChange = function (element, value, type) {\n var grpElem = closest(element, '.e-group-container');\n var eventsArgs;\n var rules = this.getParentGroup(grpElem);\n var ruleElem = closest(element, '.e-rule-container');\n var index = 0;\n if (this.allowValidation) {\n this.validateValue(rules, ruleElem);\n }\n while (ruleElem && ruleElem.previousElementSibling !== null) {\n ruleElem = ruleElem.previousElementSibling;\n index++;\n }\n var rule = rules.rules[index];\n if (type === 'field') {\n this.selectedColumn = this.getColumn(value);\n }\n else if (rule) {\n this.selectedColumn = this.getColumn(rule.field);\n }\n var operVal;\n this.previousColumn = this.getColumn(rule.field);\n var beforeRules = this.getValidRules(this.rule);\n if (this.selectedColumn) {\n if (this.selectedColumn.operators) {\n operVal = this.selectedColumn.operators;\n }\n else {\n operVal = this.customOperators[this.selectedColumn.type + 'Operator'];\n }\n }\n var arrOper = ['in', 'notin', 'between', 'notbetween'];\n var prevOper;\n switch (type) {\n case 'field':\n rule.field = value;\n rule.label = this.selectedColumn.label;\n rule.type = this.selectedColumn.type;\n rule.value = '';\n rule.operator = operVal[0].value;\n break;\n case 'operator':\n prevOper = rule.operator;\n rule.operator = value;\n if (arrOper.indexOf(rule.operator) > -1) {\n rule.value = [];\n }\n else if (arrOper.indexOf(prevOper) > -1) {\n rule.value = '';\n }\n break;\n case 'value':\n rule.value = value;\n }\n this.changeRuleTemplate(this.selectedColumn, element);\n this.filterRules(beforeRules, this.getValidRules(this.rule), type);\n if (this.selectedColumn && this.selectedColumn.ruleTemplate) {\n if (type === 'field' || type === 'operator') {\n var grpEle = closest(element, '.e-rule-container');\n this.destroyControls(grpEle, true);\n detach(grpEle.querySelector('.e-rule-field'));\n var ruleElement = this.appendRuleElem(closest(grpEle, '.e-group-container'), this.selectedColumn, 'change', grpEle.id, type, rule);\n if (this.displayMode === 'Vertical' || this.element.className.indexOf('e-device') > -1) {\n ruleElement.className = 'e-rule-container e-vertical-mode';\n }\n else {\n ruleElement.className = 'e-rule-container e-horizontal-mode';\n }\n if (ruleElement.previousElementSibling && ruleElement.previousElementSibling.className.indexOf('e-rule-container') > -1) {\n if (ruleElement.className.indexOf('e-joined-rule') < 0) {\n ruleElement.className += ' e-joined-rule';\n }\n if (ruleElement.previousElementSibling.className.indexOf('e-prev-joined-rule') < 0) {\n ruleElement.previousElementSibling.className += ' e-prev-joined-rule';\n }\n }\n if (ruleElement.previousElementSibling && ruleElement.previousElementSibling.className.indexOf('e-group-container') > -1 &&\n ruleElement.className.indexOf('e-separate-rule') < 0) {\n ruleElement.className += ' e-separate-rule';\n }\n var args = { requestType: 'template-create', action: type, ruleID: grpEle.id,\n fields: this.fields, rule: rule };\n eventsArgs = { groupID: grpElem.id.replace(this.element.id + '_', ''), ruleID: grpEle.id.replace(this.element.id + '_', ''),\n value: rule.field, type: 'field' };\n this.trigger('actionBegin', args);\n this.trigger('change', eventsArgs);\n }\n }\n };\n QueryBuilder.prototype.changeValue = function (i, args) {\n var _this = this;\n var element;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (args.element && args.element.classList.contains('e-multiselect')) {\n var multiSelectArgs = args;\n element = multiSelectArgs.element;\n }\n else if (args.event) {\n element = args.event.target;\n }\n else {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n element = args.element;\n }\n if (element.className.indexOf('e-day') > -1 || element.className.indexOf('e-today') > -1 || element.className.indexOf('e-cell') > -1) {\n var calenderArgs = args;\n element = calenderArgs.element;\n }\n var groupElem = closest(element, '.e-group-container');\n var ruleElem = closest(element, '.e-rule-container');\n var groupID = groupElem && groupElem.id.replace(this.element.id + '_', '');\n var ruleID = ruleElem.id.replace(this.element.id + '_', '');\n var dateElement = args;\n var dropDownObj;\n if (dateElement.element && dateElement.element.className.indexOf('e-datepicker') > -1) {\n element = dateElement.element;\n dropDownObj = getComponent(closest(element, '.e-rule-container').querySelector('.e-filter-input'), 'dropdownlist');\n if (dropDownObj) {\n this.selectedColumn = dropDownObj.getDataByValue(dropDownObj.value);\n }\n dropDownObj = getComponent(closest(element, '.e-rule-container').querySelector('.e-filter-input'), 'dropdowntree');\n if (dropDownObj) {\n this.selectedColumn = this.getColumn(dropDownObj.value[0]);\n }\n }\n var value;\n var rbValue;\n if (element.className.indexOf('e-radio') > -1) {\n // eslint-disable-next-line\n rbValue = parseInt(element.id.split('valuekey')[1], 0);\n if (this.fieldMode === 'Default') {\n dropDownObj = getComponent(closest(element, '.e-rule-container').querySelector('.e-filter-input'), 'dropdownlist');\n this.selectedColumn = dropDownObj.getDataByValue(dropDownObj.value);\n }\n else {\n dropDownObj = getComponent(closest(element, '.e-rule-container').querySelector('.e-filter-input'), 'dropdowntree');\n this.selectedColumn = this.getColumn(dropDownObj.value[0]);\n }\n if (this.selectedColumn.values) {\n value = this.selectedColumn.values[rbValue];\n }\n else {\n var valColl = [true, false];\n value = valColl[rbValue];\n }\n }\n else if (element.className.indexOf('e-multiselect') > -1) {\n value = getComponent(element, 'multiselect').value;\n }\n else {\n value = args.value;\n }\n if (args.name === 'input' && this.immediateModeDelay) {\n window.clearInterval(this.timer);\n this.timer = window.setInterval(function () { _this.filterValue(groupID, ruleID, value, i, element); }, this.immediateModeDelay);\n }\n else {\n this.filterValue(groupID, ruleID, value, i, element);\n }\n };\n QueryBuilder.prototype.filterValue = function (grID, rlID, value, i, ele) {\n var _this = this;\n var eventsArgs = { groupID: grID, ruleID: rlID, value: value, cancel: false, type: 'value' };\n window.clearInterval(this.timer);\n if (!this.isImportRules) {\n this.trigger('beforeChange', eventsArgs, function (observedChangeArgs) {\n _this.changeValueSuccessCallBack(observedChangeArgs, ele, i, grID, rlID);\n });\n }\n else {\n this.changeValueSuccessCallBack(eventsArgs, ele, i, grID, rlID);\n }\n };\n QueryBuilder.prototype.changeValueSuccessCallBack = function (args, element, i, groupID, ruleID) {\n if (!args.cancel) {\n this.updateRules(element, args.value, i);\n if (!this.isImportRules) {\n this.trigger('change', { groupID: groupID, ruleID: ruleID, value: args.value, cancel: false, type: 'value' });\n }\n }\n };\n QueryBuilder.prototype.fieldClose = function (id) {\n if (this.isFieldChange || this.isDestroy) {\n return;\n }\n this.isFieldClose = true;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var ddl = getComponent(id, 'dropdownlist');\n var item = ddl.popupObj.element.querySelector('.e-active');\n var itemData = ddl.getItemData();\n ddl.value = itemData.value;\n var customArgs = { element: ddl.element, value: itemData.value, isInteracted: true,\n previousItemData: this.prevItemData, previousItem: null, item: item, itemData: itemData, event: null, e: null };\n if (ddl.previousValue !== ddl.value) {\n this.changeField(customArgs);\n }\n this.isFieldChange = false;\n };\n QueryBuilder.prototype.changeField = function (args) {\n if (args.isInteracted) {\n if (isNullOrUndefined(args.value)) {\n return;\n }\n this.isFieldChange = true;\n this.prevItemData = args.itemData;\n var fieldElem = closest(args.element, '.e-rule-filter') || closest(args.element, '.e-rule-sub-filter');\n var column = this.fieldMode === 'DropdownTree' ? this.getColumn(args.value[0]) : this.getColumn(args.value);\n if (this.fieldMode === 'DropdownTree' && fieldElem != null) {\n var ddtElem = fieldElem.querySelector('.e-dropdowntree.e-control');\n var ddt = getComponent(ddtElem, 'dropdowntree');\n if (column) {\n if (column.type === 'object') {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ddt.value = args.oldValue;\n ddt.dataBind();\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (isNullOrUndefined(args.oldValue)) {\n ddtElem.value = '';\n }\n else {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var result = this.getLabelFromColumn(args.oldValue[0]);\n ddtElem.value = result;\n }\n return;\n }\n else {\n if (!isNullOrUndefined(args.value[0])) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ddt.value = args.value[0];\n ddt.dataBind();\n var result = this.getLabelFromColumn(args.value[0]);\n ddtElem.value = result;\n }\n }\n }\n else {\n return;\n }\n }\n this.destroySubFields(fieldElem);\n this.subFieldElem = null;\n this.isNotValueChange = true;\n if (column && column.ruleTemplate) {\n this.templateChange(args.element, column.field, 'field');\n }\n else if (column && column.columns && column.columns[0].ruleTemplate) {\n this.templateChange(args.element, column.columns[0].field, 'field');\n }\n else {\n var groupElem = closest(args.element, '.e-group-container');\n var rules = this.getParentGroup(groupElem);\n var ruleElem = closest(args.element, '.e-rule-container');\n var index = 0;\n while (ruleElem && ruleElem.previousElementSibling !== null) {\n ruleElem = ruleElem.previousElementSibling;\n index++;\n }\n rules.rules[index].value = '';\n this.changeRule(rules.rules[index], args);\n }\n }\n };\n QueryBuilder.prototype.changeRule = function (rule, ddlArgs) {\n if (!ddlArgs.itemData) {\n if (this.fieldMode === 'DropdownTree') {\n var ddt = getComponent(ddlArgs.element, 'dropdowntree');\n if (ddt.value == null) {\n return;\n }\n }\n else {\n return;\n }\n }\n var tempRule = {};\n var filterElem = closest(ddlArgs.element, '.e-rule-filter');\n filterElem = filterElem ? filterElem : closest(ddlArgs.element, '.e-rule-sub-filter');\n var ddlObj = getComponent(ddlArgs.element, 'dropdownlist');\n if (this.fieldMode === 'DropdownTree' && filterElem != null) {\n ddlObj = getComponent(ddlArgs.element, 'dropdowntree');\n }\n var element = closest(ddlArgs.element, '.e-group-container');\n var groupID = element.id.replace(this.element.id + '_', '');\n this.changeFilter(filterElem, ddlObj, groupID, rule, tempRule, ddlArgs);\n };\n QueryBuilder.prototype.changeFilter = function (flt, dl, grID, rl, tmpRl, dArg) {\n var _this = this;\n if (flt) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var ddlValue = void 0;\n if (this.fieldMode === 'DropdownTree') {\n ddlValue = (dl.value[0]);\n }\n else {\n ddlValue = this.isImportRules ? this.GetRootColumnName(dl.value) : dl.value;\n }\n this.selectedColumn = this.getColumn(ddlValue);\n var ruleElem = closest(flt, '.e-rule-container');\n var ruleID = ruleElem.id.replace(this.element.id + '_', '');\n var eventsArgs = { groupID: grID, ruleID: ruleID, selectedField: this.fieldMode === 'DropdownTree' ?\n dl.value[0] : dl.value, cancel: false, type: 'field' };\n if (!this.isImportRules) {\n this.trigger('beforeChange', eventsArgs, function (observedChangeArgs) {\n _this.fieldChangeSuccess(observedChangeArgs, tmpRl, flt, rl, dArg);\n });\n }\n else {\n this.fieldChangeSuccess(eventsArgs, tmpRl, flt, rl, dArg);\n }\n }\n else {\n var operatorElem = closest(dArg.element, '.e-rule-operator');\n this.changeOperator(flt, operatorElem, dl, grID, rl, tmpRl, dArg);\n }\n };\n QueryBuilder.prototype.changeOperator = function (\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n flt, opr, dl, grID, rl, tmpRl, dArg) {\n var _this = this;\n var ruleElem;\n var ruleID;\n var eventsArgs;\n if (opr) {\n ruleElem = closest(opr, '.e-rule-container');\n ruleID = ruleElem.id.replace(this.element.id + '_', '');\n eventsArgs = { groupID: grID, ruleID: ruleID, selectedIndex: dl.index, cancel: false, type: 'operator' };\n if (!this.isImportRules) {\n this.trigger('beforeChange', eventsArgs, function (observedChangeArgs) {\n _this.operatorChangeSuccess(observedChangeArgs, flt, tmpRl, rl, dArg);\n });\n }\n else {\n this.operatorChangeSuccess(eventsArgs, flt, tmpRl, rl, dArg);\n }\n }\n else {\n this.changeRuleValues(flt, rl, tmpRl, dArg);\n }\n };\n QueryBuilder.prototype.fieldChangeSuccess = function (args, tempRule, filterElem, rule, ddlArgs) {\n var ruleElem = closest(filterElem, '.e-rule-container');\n var operatorElem = closest(ddlArgs.element, '.e-rule-operator');\n var element = closest(ddlArgs.element, '.e-group-container');\n var groupID = element.id.replace(this.element.id + '_', '');\n var ddlObj = getComponent(ddlArgs.element, 'dropdownlist');\n var tooltipElem = ruleElem.querySelectorAll('.e-tooltip.e-input-group');\n for (var i = 0; i < tooltipElem.length; i++) {\n getComponent(tooltipElem[i], 'tooltip').destroy();\n }\n if (!args.cancel) {\n if (isNullOrUndefined(this.selectedColumn)) {\n return;\n }\n tempRule.type = this.selectedColumn.type;\n if (ruleElem.querySelector('.e-template')) {\n rule.value = '';\n }\n if (this.selectedColumn.type === 'object' && this.fieldMode === 'Default') {\n tempRule.type = this.selectedColumn.columns[0].type;\n while (this.selectedColumn.columns) {\n this.createSubFields(filterElem, rule, tempRule, ddlArgs);\n }\n }\n else {\n this.destroySubFields(filterElem);\n this.changeOperator(filterElem, operatorElem, ddlObj, groupID, rule, tempRule, ddlArgs);\n }\n }\n else {\n this.changeOperator(filterElem, operatorElem, ddlObj, groupID, rule, tempRule, ddlArgs);\n }\n };\n QueryBuilder.prototype.destroySubFields = function (filterElem) {\n while (filterElem && filterElem.nextElementSibling.classList.contains('e-rule-sub-filter')) {\n this.destroyControls(filterElem);\n filterElem.nextElementSibling.remove();\n }\n };\n QueryBuilder.prototype.createSubFields = function (filterElem, rule, tempRule, ddlArgs) {\n var subFieldValue = false;\n var fieldElem = closest(filterElem, '.e-rule-field');\n var tempElem = this.createElement('div', { attrs: { class: 'e-rule-sub-filter', id: 'subfilter' + this.subFilterCounter } });\n fieldElem.insertBefore(tempElem, fieldElem.querySelector('.e-rule-operator'));\n var ruleId = closest(tempElem, '.e-rule-container').id;\n var subFieldElem = this.createElement('input', { attrs: { type: 'text', id: ruleId + '_subfilterkey' + this.subFilterCounter } });\n tempElem.appendChild(subFieldElem);\n var height = (this.element.className.indexOf('e-device') > -1) ? '250px' : '200px';\n var 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('isempty') > -1 || operator.indexOf('isnotempty') > -1)) {\n var parentId = closest(target, '.e-rule-container').id;\n prevItemData = this.getPreviousItemData(prevItemData, column);\n if (prevItemData && prevItemData.template === undefined) {\n if (prevItemData.columns) {\n prevItemData = this.getColumn(rule.field);\n }\n }\n else if (this.fieldMode === 'DropdownTree' && prevItemData === undefined) {\n prevItemData = this.getColumn(rule.field);\n }\n if (prevItemData && prevItemData.template) {\n this.templateDestroy(prevItemData, parentId + '_valuekey0');\n var elem = select('#' + parentId + '_valuekey0', target.nextElementSibling);\n if (elem && !elem.classList.contains('e-control')) {\n detach(select('#' + parentId + '_valuekey0', target.nextElementSibling));\n }\n if (typeof prevItemData.template === 'string' || prevItemData.template.create === undefined) {\n if (target.nextElementSibling.classList.contains('e-template-value')) {\n this.clearQBTemplate([parentId]);\n }\n target.nextElementSibling.innerHTML = '';\n }\n }\n if (isRender) {\n this.validateValue(rule, closest(target, '.e-rule-container'));\n this.destroyControls(target);\n }\n if (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 target.nextElementSibling.appendChild(valElem);\n } // eslint-disable-next-line @typescript-eslint/no-explicit-any\n else if (this.isAngular) {\n var valElemColl = this.columnTemplateFn(args, this, ruleID, templateID);\n valElem = (valElemColl[0].nodeType === 3) ? valElemColl[1] : valElemColl[0];\n target.nextElementSibling.appendChild(valElem);\n } // eslint-disable-next-line @typescript-eslint/no-explicit-any\n else if (this.isVue3) {\n valElem = this.columnTemplateFn(args, this, 'Template', templateID);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n append(valElem, target.nextElementSibling);\n }\n else {\n valElem = this.columnTemplateFn(args, this, 'Template', templateID)[0];\n target.nextElementSibling.appendChild(valElem);\n }\n addClass([target.nextElementSibling], 'e-template-value');\n this.renderReactTemplates();\n return true;\n }\n else {\n return false;\n }\n };\n QueryBuilder.prototype.updateValues = function (element, rule) {\n var idx = 1;\n if (element.className.indexOf('e-template') > -1) {\n idx = 3;\n }\n var controlName = element.className.split(' e-')[idx];\n var i = parseInt(element.id.slice(-1), 2);\n switch (controlName) {\n case 'checkbox':\n // eslint-disable-next-line\n var value = getComponent(element, controlName).value;\n rule.value = (value !== '') ? value : undefined;\n break;\n case 'textbox':\n rule.value = getComponent(element, controlName).value;\n break;\n case 'dropdownlist':\n rule.value = getComponent(element, controlName).value;\n break;\n case 'radio':\n // eslint-disable-next-line\n var radioBtnObj = getComponent(element, controlName);\n if (radioBtnObj.checked) {\n if (typeof rule.value === 'boolean') {\n rule.value = radioBtnObj.value === 'true';\n }\n else {\n if (this.getColumn(rule.field).values) {\n rule.value = radioBtnObj.value;\n }\n else {\n rule.value = radioBtnObj.value === 'true';\n }\n }\n }\n radioBtnObj.refresh();\n break;\n case 'numerictextbox':\n if (rule.operator.indexOf('between') > -1) {\n if (typeof rule.value === 'string') {\n rule.value = [];\n }\n rule.value[i] = getComponent(element, controlName).value;\n }\n else {\n rule.value = getComponent(element, controlName).value;\n }\n break;\n case 'datepicker':\n // eslint-disable-next-line\n var column = this.getColumn(rule.field);\n // eslint-disable-next-line\n var format = this.getFormat(column.format);\n // eslint-disable-next-line\n var selectedDate = getComponent(element, controlName).value;\n if (rule.operator.indexOf('between') > -1) {\n if (typeof rule.value === 'string') {\n rule.value = [];\n }\n rule.value[i] = this.intl.formatDate(selectedDate, format);\n }\n else if (isNullOrUndefined(format.format) && selectedDate) {\n rule.value = this.intl.formatDate(selectedDate);\n }\n else if (selectedDate) {\n rule.value = this.intl.formatDate(selectedDate, format);\n }\n else {\n rule.value = selectedDate;\n }\n break;\n case 'multiselect':\n rule.value = getComponent(element, controlName).value;\n break;\n }\n };\n QueryBuilder.prototype.updateRules = function (target, selectedValue, i, isNotTrigger) {\n var groupElem = closest(target, '.e-group-container');\n var rule = this.getParentGroup(groupElem);\n var ruleElem = closest(target, '.e-rule-container');\n var index = 0;\n var dropDownObj;\n var eventsArgs;\n var groupID = groupElem.id.replace(this.element.id + '_', '');\n var beforeRules = this.getValidRules(this.rule);\n while (ruleElem && ruleElem.previousElementSibling !== null) {\n ruleElem = ruleElem.previousElementSibling;\n index++;\n }\n var operator = rule.rules[index].operator ? rule.rules[index].operator.toString() : '';\n ruleElem = closest(target, '.e-rule-container');\n var ruleID = ruleElem.id.replace(this.element.id + '_', '');\n if (closest(target, '.e-rule-filter') || closest(target, '.e-rule-sub-filter')) {\n if (this.subFieldElem) {\n target = this.subFieldElem;\n }\n dropDownObj = this.fieldMode === 'DropdownTree' ? getComponent(target, 'dropdowntree') :\n getComponent(target, 'dropdownlist');\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var column = this.fieldMode === 'DropdownTree' ? this.getColumn(dropDownObj.value[0])\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n : this.getColumn(dropDownObj.value);\n if (!this.isImportRules && rule.rules[index].field &&\n rule.rules[index].field.toLowerCase() !== column.field.toLowerCase()) {\n if (!(ruleElem.querySelectorAll('.e-template')) && !(operator.indexOf('null') > -1)\n || (operator.indexOf('empty') > -1)) {\n rule.rules[index].value = '';\n }\n }\n this.selectedColumn = this.getColumn(this.selectedColumn.field);\n rule.rules[index].field = this.selectedColumn.field;\n rule.rules[index].type = this.selectedColumn.type;\n rule.rules[index].label = this.selectedColumn.label;\n var ruleElement = closest(target, '.e-rule-filter');\n ruleElement = ruleElement ? ruleElement : closest(target, '.e-rule-sub-filter');\n var element = ruleElement.nextElementSibling.querySelector('input.e-control');\n element = element ? element : ruleElement.nextElementSibling.nextElementSibling.querySelector('input.e-control');\n operator = getComponent(element, 'dropdownlist').value.toString();\n rule.rules[index].operator = operator;\n // Value Fields\n var valueContainer = ruleElement.nextElementSibling.nextElementSibling;\n var elementCln = valueContainer.querySelectorAll('input.e-control');\n if (elementCln.length < 1) {\n elementCln = valueContainer.querySelectorAll('div.e-control');\n }\n if (elementCln.length < 1) {\n elementCln = valueContainer.querySelectorAll('.e-template');\n }\n eventsArgs = { groupID: groupID, ruleID: ruleID, value: rule.rules[index].field, type: 'field' };\n for (var i_1 = 0; i_1 < elementCln.length; i_1++) {\n if (operator.indexOf('null') > -1 || operator.indexOf('empty') > -1) {\n rule.rules[index].value = null;\n continue;\n }\n this.updateValues(elementCln[i_1], rule.rules[index]);\n }\n if (!this.isImportRules) {\n this.trigger('change', eventsArgs);\n }\n if (this.allowValidation && rule.rules[index].field && target.parentElement.className.indexOf('e-tooltip') > -1) {\n getComponent(target.parentElement, 'tooltip').destroy();\n }\n this.filterRules(beforeRules, this.getValidRules(this.rule), 'field');\n }\n else if (closest(target, '.e-rule-operator')) {\n dropDownObj = getComponent(target, 'dropdownlist');\n rule.rules[index].operator = dropDownObj.value.toString();\n var inputElem = ruleElem.querySelectorAll('.e-rule-value input.e-control');\n eventsArgs = { groupID: groupID, ruleID: ruleID, value: dropDownObj.value, type: 'operator' };\n if (this.allowValidation && rule.rules[index].operator && target.parentElement.className.indexOf('e-tooltip') > -1) {\n getComponent(target.parentElement, 'tooltip').destroy();\n }\n if (inputElem.length > 1 && !(inputElem[0].className.indexOf('e-template') > -1)) {\n rule.rules[index].value = [];\n }\n for (var i_2 = 0; i_2 < inputElem.length; i_2++) {\n if (rule.rules[index].operator.indexOf('null') > -1 || rule.rules[index].operator.indexOf('empty') > -1) {\n rule.rules[index].value = null;\n continue;\n }\n else if (inputElem[i_2].classList.contains('e-template')) {\n continue;\n }\n this.updateValues(inputElem[i_2], rule.rules[index]);\n }\n if (!this.isImportRules) {\n this.trigger('change', eventsArgs);\n }\n this.filterRules(beforeRules, this.getValidRules(this.rule), 'operator');\n }\n else if (closest(target, '.e-rule-value')) {\n this.ruleValueUpdate(target, selectedValue, rule, index, groupElem, ruleElem, i);\n if (!isNotTrigger) {\n this.filterRules(beforeRules, this.getValidRules(this.rule), 'value');\n }\n }\n };\n QueryBuilder.prototype.filterRules = function (beforeRule, afterRule, type) {\n var beforeRuleStr = JSON.stringify({ condition: beforeRule.condition, not: beforeRule.not, rule: beforeRule.rules });\n var afetrRuleStr = JSON.stringify({ condition: afterRule.condition, not: afterRule.not, rule: afterRule.rules });\n if (beforeRuleStr !== afetrRuleStr) {\n if (!this.isImportRules) {\n this.trigger('ruleChange', { previousRule: beforeRule, rule: afterRule, type: type });\n }\n }\n };\n QueryBuilder.prototype.ruleValueUpdate = function (target, selectedValue, rule, index, groupElem, ruleElem, i) {\n var eventsArgs;\n var oper;\n var arrOperator = ['in', 'between', 'notin', 'notbetween'];\n if (rule.rules[index].operator) {\n oper = rule.rules[index].operator.toString().toLowerCase();\n }\n if (selectedValue !== null) {\n if (target.className.indexOf('e-multiselect') > -1 && rule.rules[index].type === 'number' &&\n !this.isNotified) {\n var selVal = [];\n var dupSelectedValue = selectedValue;\n for (var k = 0, kLen = dupSelectedValue.length; k < kLen; k++) {\n if (typeof dupSelectedValue[k] === 'string') {\n selVal.push(parseFloat(dupSelectedValue[k]));\n }\n }\n if (selVal.length) {\n selectedValue = selVal;\n }\n }\n if (this.isNotified) {\n rule.rules[index].value = selectedValue;\n eventsArgs = { groupID: groupElem.id, ruleID: ruleElem.id, value: rule.rules[index].value, type: 'value' };\n if (!this.isImportRules) {\n this.trigger('change', eventsArgs);\n }\n }\n else if (target.className.indexOf('e-spin') > -1 || target.className.indexOf('e-numeric') > -1) {\n if (arrOperator.indexOf(oper) > -1) {\n rule.rules[index].value[i] = selectedValue;\n }\n else {\n rule.rules[index].value = selectedValue;\n }\n }\n else if (target.className.indexOf('e-radio') > -1) {\n rule.rules[index].value = selectedValue;\n }\n else if (target.className.indexOf('e-multiselect') > -1) {\n rule.rules[index].value = selectedValue;\n }\n else if (target.className.indexOf('e-textbox') > -1) {\n if (oper === 'in' || oper === 'notin') {\n if (rule.rules[index].type === 'string') {\n rule.rules[index].value = this.processValueString(selectedValue, rule.rules[index].type);\n }\n else {\n rule.rules[index].value = this.processValueString(selectedValue, rule.rules[index].type);\n }\n }\n else {\n rule.rules[index].value = selectedValue;\n }\n }\n else if (target.className.indexOf('e-datepicker') > -1) {\n var format = this.getFormat(this.getColumn(this.selectedColumn.field).format);\n if (format.type) {\n if (arrOperator.indexOf(oper) > -1) {\n if (typeof rule.rules[index].value === 'string') {\n rule.rules[index].value = [];\n }\n rule.rules[index].value[i] = this.intl.formatDate(selectedValue, format);\n }\n else {\n rule.rules[index].value = this.intl.formatDate(selectedValue, format);\n }\n }\n }\n this.validateValue(rule, ruleElem, index);\n }\n else {\n if (target.className.indexOf('e-datepicker') > -1) {\n if (arrOperator.indexOf(oper) > -1) {\n if (typeof rule.rules[index].value === 'string') {\n rule.rules[index].value = [];\n }\n rule.rules[index].value[i] = selectedValue;\n }\n else {\n rule.rules[index].value = selectedValue;\n }\n }\n else {\n rule.rules[index].value = selectedValue;\n }\n }\n };\n QueryBuilder.prototype.validateValue = function (rule, ruleElem, index) {\n if (!isNullOrUndefined(index)) {\n rule = rule.rules[index];\n }\n var isObject = typeof (rule.value) === 'object';\n if (this.allowValidation && (isNullOrUndefined(index) || (isObject ? rule.value.length > 0 : rule.value))) {\n var valElem = ruleElem.querySelectorAll('.e-rule-value .e-control');\n if (valElem.length > 0) {\n if (valElem[0].className.indexOf('e-tooltip') > -1) {\n getComponent(valElem[0], 'tooltip').destroy();\n }\n else if (valElem[0].parentElement.className.indexOf('e-tooltip') > -1) {\n getComponent(valElem[0].parentElement, 'tooltip').destroy();\n }\n if (valElem[1] && valElem[1].parentElement.className.indexOf('e-tooltip') > -1) {\n getComponent(valElem[1].parentElement, 'tooltip').destroy();\n }\n }\n }\n };\n QueryBuilder.prototype.getFormat = function (format) {\n var formatOptions;\n if (format) {\n if (typeof (format) === 'string') {\n formatOptions = { type: 'dateTime' };\n if (format === 'short' || format === 'yMd') {\n formatOptions.type = 'date';\n formatOptions.skeleton = format;\n }\n else {\n formatOptions.format = format;\n }\n }\n else {\n formatOptions = { type: 'dateTime', skeleton: format.skeleton };\n }\n }\n else {\n formatOptions = { type: 'date', skeleton: 'yMd' };\n }\n return formatOptions;\n };\n QueryBuilder.prototype.findGroupByIdx = function (groupIdx, rule, isRoot) {\n var ruleColl = rule.rules;\n var dupRuleColl = [];\n if (!isRoot) {\n for (var j = 0, jLen = ruleColl.length; j < jLen; j++) {\n rule = ruleColl[j];\n if (rule.rules) {\n dupRuleColl.push(rule);\n }\n }\n return dupRuleColl[groupIdx];\n }\n return rule;\n };\n /**\n * Removes the component from the DOM and detaches all its related event handlers.\n * Also it maintains the initial input element from the DOM.\n *\n * @method destroy\n * @returns {void}\n */\n QueryBuilder.prototype.destroy = function () {\n this.isDestroy = true;\n var queryElement = this.element;\n if (!queryElement) {\n return;\n }\n var element;\n var i;\n var len;\n var tooltip;\n _super.prototype.destroy.call(this);\n 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.setProperties({ rule: this.checkNotGroup(this.rule) }, true);\n this.initWrapper();\n };\n QueryBuilder.prototype.notGroupRtl = function () {\n if (this.enableRtl) {\n addClass(this.element.querySelectorAll('.e-btn-group'), 'e-rtl');\n }\n else {\n removeClass(this.element.querySelectorAll('.e-btn-group'), 'e-rtl');\n }\n };\n QueryBuilder.prototype.checkNotGroup = function (rule) {\n var orgRule;\n if (rule.rules) {\n for (var i = 0; i < rule.rules.length; i++) {\n orgRule = rule.rules[i];\n orgRule = this.checkNotGroup(orgRule);\n rule.rules[i] = orgRule;\n }\n }\n if (!isNullOrUndefined(rule.not)) {\n if (this.enableNotCondition) {\n rule.not = false;\n }\n delete rule.not;\n }\n else if (this.enableNotCondition && !isNullOrUndefined(rule.condition)) {\n rule.not = false;\n }\n return rule;\n };\n QueryBuilder.prototype.onPropertyChanged = function (newProp, oldProp) {\n var properties = Object.keys(newProp);\n for (var _i = 0, properties_1 = properties; _i < properties_1.length; _i++) {\n var prop = properties_1[_i];\n switch (prop) {\n case 'summaryView':\n // eslint-disable-next-line\n var groupElem = this.element.querySelector('.e-group-container');\n // eslint-disable-next-line\n var summaryElem = this.element.querySelector('.e-summary-content');\n if (newProp.summaryView) {\n groupElem.style.display = 'none';\n if (this.element.querySelectorAll('.e-summary-content').length < 1) {\n this.renderSummary();\n summaryElem = this.element.querySelector('.e-summary-content');\n }\n else {\n this.element.querySelector('.e-summary-text').textContent = this.getSqlFromRules(this.rule);\n }\n summaryElem.style.display = 'block';\n }\n else {\n if (groupElem.querySelectorAll('.e-collapse-rule').length > -1) {\n this.renderSummaryCollapse();\n }\n groupElem.style.display = 'block';\n summaryElem.style.display = 'none';\n }\n break;\n case 'displayMode':\n this.refresh();\n break;\n case 'showButtons':\n if (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 if (this.rule.rules.length === 0 && !isNullOrUndefined(this.rule)) {\n this.reset();\n }\n this.setProperties({ rule: newProp.rule }, true);\n newProp.rule = this.getRuleCollection(this.rule, false);\n this.setRules(this.rule);\n break;\n case 'width':\n this.width = newProp.width;\n this.element.style.width = this.width;\n break;\n case 'locale':\n this.locale = newProp.locale;\n this.intl = new Internationalization(this.locale);\n this.isLocale = true;\n this.refresh();\n this.isLocale = false;\n break;\n case 'enableNotCondition':\n this.onChangeNotGroup();\n break;\n case 'readonly':\n this.isReadonly = newProp.readonly;\n this.enableReadonly();\n break;\n }\n }\n };\n QueryBuilder.prototype.preRender = function () {\n this.element.id = this.element.id || getUniqueID('ej2-querybuilder');\n this.defaultLocale = {\n StartsWith: 'Starts With',\n 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.setProperties({ rule: rule }, true);\n rule = this.getRuleCollection(this.rule, false);\n this.importRules(this.rule, this.element.querySelector('.e-group-container'), true, this.rule.not, isRoot);\n 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 if ((rule.operator === 'in' || rule.operator === 'notin') && rule.value && rule.value.length === 0) {\n rule = {};\n }\n }\n else {\n rule = {};\n }\n }\n else {\n if (customObj && (customObj.type === 'question' || customObj.type === 'answer')) {\n var notValue = rule.not;\n rule = { 'label': rule.label, 'field': rule.field, 'operator': rule.operator, 'type': rule.type, 'value': rule.value,\n 'condition': rule.condition, 'rules': rule.rules\n };\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n rule.custom = customObj;\n if (this.enableNotCondition) {\n rule.not = notValue;\n }\n }\n else if ((isNullOrUndefined(rule.condition)) && isNullOrUndefined(rule.rules)) {\n rule = {};\n }\n else {\n if (this.enableNotCondition) {\n rule = { 'condition': rule.condition, 'rules': rule.rules, 'not': rule.not };\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 if (isNullOrUndefined(ruleElem)) {\n return null;\n }\n var groupElem = closest(ruleElem, '.e-group-container');\n var rule = this.getParentGroup(groupElem);\n while (ruleElem.previousElementSibling !== null) {\n ruleElem = ruleElem.previousElementSibling;\n index++;\n }\n return rule.rules[index];\n };\n /**\n * Gets the group.\n *\n * @param {string | Element} target - 'target' to be passed to get group.\n * @returns {object} -Group\n */\n QueryBuilder.prototype.getGroup = function (target) {\n if (target instanceof Element && target.className.indexOf('e-group-container') < 1) {\n target = closest(target, '.e-group-container');\n }\n var groupId = (target instanceof Element) ? target.id : this.element.id + '_' + target;\n var rule = this.getParentGroup(groupId);\n return rule;\n };\n /**\n * Deletes the group or groups based on the group ID.\n *\n * @param {string[]} groupIdColl - 'groupIdColl' to be passed to delete groups.\n * @returns {void}\n */\n QueryBuilder.prototype.deleteGroups = function (groupIdColl) {\n var i;\n var len = groupIdColl.length;\n var groupID;\n for (i = 0; i < len; i++) {\n groupID = this.element.id + '_' + groupIdColl[i];\n this.deleteGroup(document.getElementById(groupID));\n }\n };\n /**\n * Return the Query from current rules collection.\n *\n * @returns {Promise} - Query from current rules collection\n * @blazorType object\n */\n QueryBuilder.prototype.getFilteredRecords = function () {\n var predicate = this.getPredicate(this.getValidRules(this.rule));\n var dataManagerQuery = isNullOrUndefined(predicate) ? new Query() : new Query().where(predicate);\n return this.dataManager.executeQuery(dataManagerQuery);\n };\n /**\n * Deletes the rule or rules based on the rule ID.\n *\n * @param {string[]} ruleIdColl - 'ruleIdColl' to be passed to delete rules.\n * @returns {void}.\n */\n QueryBuilder.prototype.deleteRules = function (ruleIdColl) {\n var i;\n var len = ruleIdColl.length;\n var ruleID;\n for (i = 0; i < len; i++) {\n ruleID = this.element.id + '_' + ruleIdColl[i];\n this.deleteRule(document.getElementById(ruleID));\n }\n };\n /**\n * Gets the query for Data Manager.\n *\n * @param {RuleModel} rule - 'rule' to be passed to get query.\n * @returns {string} - Query for Data Manager\n */\n QueryBuilder.prototype.getDataManagerQuery = function (rule) {\n var predicate = this.getPredicate(rule);\n var query;\n var fields = [];\n for (var i = 0, len = Object.keys(this.columns); i < len.length; i++) {\n fields.push(this.columns[i].field);\n }\n if (rule.rules.length) {\n query = new Query().select(fields).where(predicate);\n }\n else {\n query = new Query().select(fields);\n }\n return query;\n };\n /**\n * Get the predicate from collection of rules.\n *\n * @param {RuleModel} rule - 'rule' to be passed to get predicate.\n * @returns {Predicate} - Predicate from collection of rules\n */\n QueryBuilder.prototype.getPredicate = function (rule) {\n var ruleColl = rule.rules;\n var pred;\n var pred2;\n var ruleValue;\n var ignoreCase = false;\n var column;\n 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-dropdowntree, .e-numerictextbox, .e-textbox, .e-datepicker, .e-multiselect .e-lib, .e-radio');\n for (var i = 0; i < elem.length; i++) {\n if (elem[i].classList.contains('e-dropdownlist')) {\n var dropDownObj = getInstance(elem[i], DropDownList);\n dropDownObj.readonly = this.isReadonly;\n }\n else if (elem[i].classList.contains('e-dropdowntree')) {\n var dropDownTreeObj = getComponent(elem[i], 'dropdowntree');\n dropDownTreeObj.readonly = this.isReadonly;\n }\n else if (elem[i].classList.contains('e-numerictextbox')) {\n var numericTextBoxObj = getInstance(elem[i], NumericTextBox);\n numericTextBoxObj.readonly = this.isReadonly;\n }\n else if (elem[i].classList.contains('e-textbox')) {\n var textBoxObj = getInstance(elem[i], TextBox);\n textBoxObj.readonly = this.isReadonly;\n }\n else if (elem[i].classList.contains('e-datepicker')) {\n var datePickerObj = getInstance(elem[i], DatePicker);\n datePickerObj.readonly = this.isReadonly;\n }\n else if (elem[i].classList.contains('e-multiselect')) {\n var multiSelectObj = getInstance(elem[i], MultiSelect);\n multiSelectObj.readonly = this.isReadonly;\n }\n else if (elem[i].classList.contains('e-radio')) {\n var radioButtonObj = getInstance(elem[i], RadioButton);\n if (!radioButtonObj.checked) {\n if (this.isReadonly) {\n elem[i].parentElement.style.display = 'none';\n }\n else {\n elem[i].parentElement.style.display = 'inherit';\n }\n }\n }\n }\n var deleteGroupElems = this.element.querySelectorAll('.e-deletegroup');\n var addRuleGroupElems = this.element.querySelectorAll('.e-addrulegroup');\n var removeRuleElems = this.element.querySelectorAll('.e-removerule');\n if (!this.isReadonly && this.ruleElem.classList.contains('e-readonly')) {\n this.ruleElem.classList.remove('e-readonly');\n }\n var elems = [deleteGroupElems, addRuleGroupElems, removeRuleElems];\n for (var i = 0; i < elems.length; i++) {\n elems[i].forEach(function (elem) {\n if (elem.classList.contains('e-readonly')) {\n elem.classList.remove('e-readonly');\n }\n else {\n elem.classList.add('e-readonly');\n }\n });\n }\n this.enableBtnGroup();\n };\n QueryBuilder.prototype.enableBtnGroup = function () {\n var _this = this;\n var elems = this.element.querySelectorAll('.e-btngroup-and-lbl, .e-btngroup-or-lbl, .e-qb-toggle');\n var not = false;\n elems.forEach(function (elem) {\n if (elem.classList.contains('e-qb-toggle') && !elem.classList.contains('e-active-toggle')\n && !elem.classList.contains('e-readonly')) {\n elem.classList.add('e-readonly');\n not = false;\n }\n else if (elem.classList.contains('e-qb-toggle') && elem.classList.contains('e-not-readonly')) {\n elem.classList.remove('e-not-readonly');\n }\n else if (elem.classList.contains('e-qb-toggle') && elem.classList.contains('e-readonly')) {\n elem.classList.remove('e-readonly');\n }\n else if (elem.classList.contains('e-active-toggle')) {\n elem.classList.add('e-not-readonly');\n not = true;\n }\n else if (elem.previousElementSibling.checked || elem.classList.contains('e-readonly')) {\n elem.classList.remove('e-readonly');\n if (not) {\n if (elem.textContent === 'AND') {\n elem.classList.add('e-readonly-and');\n }\n else {\n elem.classList.add('e-readonly-or');\n }\n }\n else {\n if (elem.textContent === 'AND' && _this.isReadonly) {\n elem.classList.remove('e-not');\n elem.classList.add('e-readonly-and');\n }\n else {\n if (_this.enableNotCondition) {\n elem.classList.add('e-not');\n }\n elem.classList.remove('e-readonly-and');\n }\n if (elem.textContent === 'OR' && _this.isReadonly) {\n elem.classList.add('e-readonly-or-not');\n }\n else {\n elem.classList.remove('e-readonly-or-not');\n }\n }\n }\n else if (elem.classList.contains('e-btn-disable')) {\n // do nothing\n }\n else {\n elem.classList.add('e-readonly');\n }\n });\n };\n QueryBuilder.prototype.isDateFunction = function (value) {\n var dateFunc = ['date', 'time', 'day', 'week', 'month', 'year', 'hour', 'minute', 'second', 'now', 'quarter', 'period', 'extract'];\n for (var i = 0, len = dateFunc.length; i < len; i++) {\n if (value.toLowerCase().indexOf(dateFunc[i]) > -1) {\n return true;\n }\n }\n return false;\n };\n QueryBuilder.prototype.getSqlString = function (rules, enableEscape, queryStr, sqlLocale) {\n var isRoot = false;\n if (!queryStr && queryStr !== '') {\n queryStr = '';\n isRoot = true;\n }\n else {\n queryStr += '(';\n }\n var condition = rules.condition;\n if (rules.not) {\n var rulesNotCondition = void 0;\n if (isRoot) {\n rulesNotCondition = sqlLocale ? this.l10n.getConstant('NOT').toUpperCase() + ' (' : 'NOT (';\n queryStr += rulesNotCondition;\n }\n else {\n rulesNotCondition = sqlLocale ? ' ' + this.l10n.getConstant('NOT').toUpperCase() + ' (' : ' NOT (';\n queryStr += rulesNotCondition;\n }\n }\n if (rules.rules) {\n for (var j = 0, jLen = rules.rules.length; j < jLen; j++) {\n if (rules.rules[j].rules) {\n queryStr = this.getSqlString(rules.rules[j], enableEscape, queryStr, sqlLocale);\n }\n else {\n var rule = rules.rules[j];\n var valueStr = '';\n var ruleOpertor = sqlLocale ? this.sqlOperators[rule.operator] : this.operators[rule.operator];\n if (rule.value instanceof Array) {\n if (rule.operator.toString().indexOf('between') > -1) {\n var ruleCondition = sqlLocale ? ' ' + this.l10n.getConstant('AND').toUpperCase() + ' ' : ' ' + 'AND' + ' ';\n if (rule.type === 'date' && !this.isDateFunction(rule.value[0])) {\n valueStr += '\"' + rule.value[0] + '\"' + ruleCondition + '\"' + rule.value[1] + '\"';\n }\n else {\n valueStr += rule.value[0] + ruleCondition + rule.value[1];\n }\n }\n else {\n if (typeof rule.value[0] === 'string' && rule.value !== null) {\n valueStr += '(\"' + rule.value[0] + '\"';\n for (var k = 1, kLen = rule.value.length; k < kLen; k++) {\n valueStr += ',\"' + rule.value[k] + '\"';\n }\n valueStr += ')';\n }\n else {\n valueStr += '(' + rule.value + ')';\n }\n }\n }\n else {\n if (rule.operator.toString().indexOf('startswith') > -1) {\n valueStr += rule.value ? '(\"' + rule.value + '%\")' : '(' + rule.value + ')';\n }\n else if (rule.operator.toString().indexOf('endswith') > -1) {\n valueStr += rule.value ? '(\"%' + rule.value + '\")' : '(' + rule.value + ')';\n }\n else if (rule.operator.toString().indexOf('contains') > -1) {\n valueStr += rule.value ? '(\"%' + rule.value + '%\")' : '(' + rule.value + ')';\n }\n else {\n if (rule.type === 'number' || typeof rule.value === 'boolean' || 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.setProperties({ rule: { condition: 'and', not: false, rules: [] } }, true);\n var rule = this.processParser(this.parser, this.rule, [0], sqlLocale);\n if (this.enableNotCondition) {\n return { condition: rule.condition, not: rule.not, rules: rule.rules };\n }\n else {\n return { condition: rule.condition, rules: rule.rules };\n }\n };\n /**\n * Gets the sql query from rules.\n *\n * @param {RuleModel} rule - 'rule' to be passed to get the sql.\n * @param {boolean} allowEscape - Set `true` if it exclude the escape character.\n * @param {boolean} sqlLocale - Set `true` if Localization for Sql query.\n * @returns {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 var betweenParser = this.parser[this.parser.length - 3];\n if (lastParser[0] === 'Left' && (secParser && secParser[0] === 'Conditions')) {\n return true;\n }\n var betweenOperator = 'between';\n if (lastParser[0] === 'Conditions' && (betweenParser && betweenParser[1].indexOf(betweenOperator) < 0)) {\n return true;\n }\n }\n return false;\n };\n QueryBuilder.prototype.checkNumberLiteral = function (sqlString, sqlLocale) {\n var lastParser = this.parser[this.parser.length - 1];\n if (!lastParser) {\n return true;\n }\n else {\n // eslint-disable-next-line\n if (/^[0-9]+(\\.[0-9]+)?/.exec(sqlString)) {\n var secParser = this.parser[this.parser.length - 2];\n var betweenParser = this.parser[this.parser.length - 3];\n if (lastParser[0] === 'Left' && (secParser && secParser[0] === 'Conditions')) {\n return true;\n }\n var betweenOperator = sqlLocale ? this.l10n.getConstant('Between').toLowerCase() : 'between';\n if (lastParser[0] === 'Conditions' && (betweenParser && betweenParser[1].indexOf(betweenOperator) < 0)) {\n return true;\n }\n }\n }\n return false;\n };\n QueryBuilder.prototype.getOperator = function (value, operator, sqlLocale) {\n var operators = {\n '=': 'equal', '!=': 'notequal', '<': 'lessthan', '>': 'greaterthan', '<=': 'lessthanorequal',\n '>=': 'greaterthanorequal', 'in': 'in', 'not in': 'notin', 'between': 'between', 'not between': 'notbetween',\n 'is empty': 'isempty', 'is null': 'isnull', 'is not null': 'isnotnull', 'is not empty': 'isnotempty'\n };\n if (sqlLocale) {\n var localeOperator = Object.keys(this.sqlOperators);\n for (var i = 0; i < localeOperator.length; i++) {\n if (this.sqlOperators[localeOperator[i]] === operator.toUpperCase()) {\n if (value && value.indexOf('%') === 0 && value[value.length - 1] === '%') {\n return (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","setProperties","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","_loop_1","j","sqlIdx","operator_1","operColl","values","map","join","valueIdx","this_1","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","dummyDropdownTreeDs","updateDropdowntreeDS","child","expanded","selectable","showClearButton","changeOnBlur","treeSettings","expandOn","cssClass","dropdowntree","DropDownTree","getLabelFromColumn","parseInt","toString","index","custom","changeRuleTemplate","operVal","parentGroup","previousColumn","detach","clearQBTemplate","renderToolTip","tooltip","Tooltip","content","position","afterClose","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","immediateModeDelay","window","clearInterval","timer","setInterval","filterValue","grID","rlID","ele","changeValueSuccessCallBack","ddl","item","popupObj","getItemData","customArgs","isInteracted","previousItemData","prevItemData","previousItem","e","previousValue","ddtElem","ddt","oldValue","dataBind","destroySubFields","subFieldElem","ddlArgs","ddlObj","changeFilter","flt","dl","rl","tmpRl","dArg","selectedField","fieldChangeSuccess","operatorElem","changeOperator","opr","selectedIndex","operatorChangeSuccess","changeRuleValues","tempRule","tooltipElem","createSubFields","nextElementSibling","remove","subFieldValue","subFilterCounter","insertBefore","ruleId","subFieldData","subField","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","_loop_2","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","setRules","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","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","localeOperator","=","!=","<",">","<=",">=","not in","not between","is empty","is null","is not null","is not empty","getTypeFromColumn","l","getLabelFromField","startIdx","fieldName","subRules","lLen","grpCount","numVal","strVal","isLeftOpened","val","substring","pop","Event","Complex","NotifyPropertyChanges","Component"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ej2-querybuilder.umd.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.setProperties({ rule: { condition: 'and', not: false, rules: [] } }, true);\n this.disableRuleCondition(bodyElem.parentElement);\n };\n QueryBuilder.prototype.getWrapper = function () {\n return this.element;\n };\n QueryBuilder.prototype.getModuleName = function () {\n return 'query-builder';\n };\n QueryBuilder.prototype.GetRootColumnName = function (field) {\n return this.separator ? field.split(this.separator)[0] : field;\n };\n QueryBuilder.prototype.initialize = function () {\n if (this.dataColl.length) {\n var columnKeys = Object.keys(this.dataColl[0]);\n var cols = [];\n var categories = [];\n var type = void 0;\n var groupBy = false;\n var isDate = false;\n var value = void 0;\n var validateObj = { isRequired: true, min: 0, max: Number.MAX_VALUE };\n if (this.columns.length) {\n this.columnSort();\n var columns = this.columns;\n for (var i = 0, len = columns.length; i < len; i++) {\n this.updateCustomOperator(columns[i], 'initial');\n if (!columns[i].type) {\n if (columnKeys.indexOf(columns[i].field) > -1) {\n value = this.dataColl[0][columns[i].field];\n type = typeof value;\n if (type === 'string') {\n isDate = !isNaN(Date.parse(value));\n }\n else if (type === 'object') {\n isDate = value instanceof Date && !isNaN(value.getTime());\n type = 'string';\n }\n columns[i].type = type;\n isDate = false;\n }\n type = 'string';\n }\n if (!columns[i].validation) {\n columns[i].validation = validateObj;\n }\n if (columns[i].category) {\n groupBy = true;\n }\n else {\n columns[i].category = this.l10n.getConstant('OtherFields');\n }\n if (categories.indexOf(columns[i].category) < 0) {\n categories.push(columns[i].category);\n }\n if (!columns[i].operators ||\n (this.isLocale && this.isCustomOprCols.indexOf(columns[i].field) !== 0)) {\n columns[i].operators = this.customOperators[columns[i].type + 'Operator'];\n }\n }\n if (groupBy && (categories.length > 1 || categories[0] !== this.l10n.getConstant('OtherFields'))) {\n this.fields = { text: 'label', value: 'field', groupBy: 'category' };\n }\n this.updateSubFieldsFromColumns(this.columns);\n }\n else {\n for (var i = 0, len = columnKeys.length; i < len; i++) {\n value = this.dataColl[0][columnKeys[i]];\n type = typeof value;\n if (type === 'string') {\n isDate = !isNaN(Date.parse(value));\n }\n else if (type === 'object' && !Object.keys(value).length) {\n isDate = value instanceof Date && !isNaN(value.getTime());\n type = 'string';\n }\n cols[i] = { 'field': columnKeys[i], 'label': columnKeys[i], 'type': isDate ? 'date' : type,\n 'validation': validateObj };\n isDate = false;\n cols[i].operators = this.customOperators[cols[i].type + 'Operator'];\n if (type === 'object') {\n this.updateSubFields(value, cols[i]);\n }\n }\n this.columns = cols;\n }\n }\n else if (this.columns.length) {\n var columns = this.columns;\n for (var i = 0, len = columns.length; i < len; i++) {\n if (columns[i].category) {\n this.fields = { text: 'label', value: 'field', groupBy: 'category' };\n }\n else {\n columns[i].category = this.l10n.getConstant('OtherFields');\n }\n this.updateCustomOperator(columns[i]);\n if (!columns[i].operators || this.isLocale) {\n columns[i].operators = this.customOperators[columns[i].type + 'Operator'];\n }\n }\n this.updateSubFieldsFromColumns(this.columns);\n }\n this.trigger('dataBound', { type: 'dataBound' });\n };\n QueryBuilder.prototype.updateSubFieldsFromColumns = function (col, field) {\n for (var i = 0; i < col.length; i++) {\n if (this.separator !== '' && col[i].field.indexOf(this.separator) < 0) {\n col[i].field = field ? field + this.separator + col[i].field : col[i].field;\n }\n if (col[i].operators) {\n this.updateCustomOperator(col[i]);\n }\n else if (col[i].type && col[i].type !== 'object') {\n col[i].operators = this.customOperators[col[i].type + 'Operator'];\n }\n if (col[i].columns) {\n col[i].type = 'object';\n this.updateSubFieldsFromColumns(col[i].columns, col[i].field);\n }\n }\n };\n QueryBuilder.prototype.updateSubFields = function (value, col, data) {\n var sampCol;\n col.columns = [];\n var columnKeys = Object.keys(value);\n var field;\n var label;\n var type;\n var result;\n data = data ? data : this.dataColl[0];\n for (var i = 0, len = columnKeys.length; i < len; i++) {\n var compField = col.field.split('.');\n if (data) {\n result = data[compField[compField.length - 1]][columnKeys[i]];\n }\n else {\n result = this.dataColl[0][col.field][columnKeys[i]];\n }\n var resData = data[col.field.split(this.separator)[col.field.split(this.separator).length - 1]];\n type = typeof result;\n field = col.field + this.separator + columnKeys[i];\n label = columnKeys[i];\n type = (type === 'object' && !isNaN(Date.parse(result))) ? 'date' : type;\n sampCol = { field: field, label: label, type: type };\n if (type !== 'object') {\n sampCol.operators = this.customOperators[type + 'Operator'];\n }\n col.columns.push(sampCol);\n if (type === 'object') {\n this.updateSubFields(result, sampCol, resData);\n }\n }\n };\n QueryBuilder.prototype.updateCustomOperator = function (column, from) {\n if (column.operators) {\n if (!this.isLocale && from === 'initial' && !isNullOrUndefined(this.isCustomOprCols)) {\n this.isCustomOprCols.push(column.field);\n }\n var _loop_1 = function (j) {\n var sqlIdx = Object.keys(column.operators[j]).indexOf('sqlOperator');\n if (sqlIdx > -1) {\n var operator_1 = column.operators[j];\n var operColl = Object.keys(operator_1);\n var values = operColl.map(function (key) { return operator_1[\"\" + key]; }).join(',').split(',');\n var valueIdx = operColl.indexOf('value');\n this_1.operators[values[valueIdx]] = values[sqlIdx];\n }\n };\n var this_1 = this;\n for (var j = 0; j < column.operators.length; j++) {\n _loop_1(j);\n }\n }\n };\n QueryBuilder.prototype.focusEventHandler = function (event) {\n this.target = event.target;\n };\n QueryBuilder.prototype.clickEventHandler = function (event) {\n var _this = this;\n var target = event.target;\n var args;\n this.isImportRules = false;\n var groupID;\n if (target.tagName === 'SPAN') {\n target = target.parentElement;\n }\n if (target.className.indexOf('e-collapse-rule') > -1) {\n var animation = new Animation({ duration: 1000, delay: 0 });\n if (this.element.querySelectorAll('.e-summary-content').length < 1) {\n this.renderSummary();\n }\n var summaryElem = document.getElementById(this.element.id + '_summary_content');\n var txtareaElem = summaryElem.querySelector('.e-summary-text');\n animation.animate('.e-query-builder', { name: 'SlideLeftIn' });\n var groupElem = this.element.querySelector('.e-group-container');\n groupElem.style.display = 'none';\n txtareaElem.textContent = this.getSqlFromRules(this.rule);\n summaryElem.style.display = 'block';\n txtareaElem.style.height = txtareaElem.scrollHeight + 'px';\n }\n if (target.tagName === 'BUTTON' && target.className.indexOf('e-qb-toggle') < 0) {\n 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 cssClass: 'qb-dropdownlist'\n };\n if (this.fieldModel) {\n ddlField = __assign({}, ddlField, this.fieldModel);\n }\n dropDownList = new DropDownList(ddlField);\n dropDownList.appendTo('#' + ruleElem.id + '_filterkey');\n var ddlVal = void 0;\n if (this.separator && rule.field) {\n ddlVal = this.GetRootColumnName(rule.field);\n }\n else {\n ddlVal = this.isImportRules ? this.GetRootColumnName(rule.field) : dropDownList.value;\n }\n this.selectedColumn = dropDownList.getDataByValue(ddlVal);\n if (Object.keys(rule).length) {\n this.changeRule(rule, {\n element: dropDownList.element, itemData: this.selectedColumn\n });\n }\n }\n else {\n var ddlField = void 0;\n var ddlValue = this.isImportRules ? rule.field : rule.field;\n this.dummyDropdownTreeDs = extend([], this.columns, [], true);\n this.updateDropdowntreeDS(this.dummyDropdownTreeDs);\n ddlField = {\n fields: { dataSource: this.dummyDropdownTreeDs,\n value: 'field', text: 'label', child: 'columns', expanded: 'expanded', selectable: 'selectable' },\n placeholder: this.l10n.getConstant('SelectField'), showClearButton: false,\n popupHeight: ((this.columns.length > 5) ? height : 'auto'), changeOnBlur: false,\n change: this.changeField.bind(this), value: !isNullOrUndefined(ddlValue) ? [ddlValue] : null,\n open: this.popupOpen.bind(this, false), treeSettings: { expandOn: 'Click' },\n cssClass: 'e-qb-ddt'\n };\n if (this.fieldModel) {\n ddlField = __assign({}, ddlField, this.fieldModel);\n }\n var dropdowntree = new DropDownTree(ddlField);\n dropdowntree.appendTo('#' + ruleElem.id + '_filterkey');\n if (!isNullOrUndefined(dropdowntree.value)) {\n var value = this.getLabelFromColumn(dropdowntree.value[0]);\n dropdowntree.element.value = value;\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var ddlVal = !isNullOrUndefined(rule.field) ?\n this.GetRootColumnName(rule.field) : dropdowntree.value;\n this.selectedColumn = this.getColumn(ddlVal);\n if (Object.keys(rule).length) {\n this.changeRule(rule, {\n element: dropdowntree.element, itemData: this.selectedColumn\n });\n }\n }\n }\n ruleID = ruleElem.id.replace(this.element.id + '_', '');\n if (!this.isImportRules) {\n this.trigger('change', { groupID: trgt.id.replace(this.element.id + '_', ''), ruleID: ruleID, type: 'insertRule' });\n }\n }\n };\n QueryBuilder.prototype.updateDropdowntreeDS = function (columns) {\n for (var i = 0; i < columns.length; i++) {\n if (columns[parseInt(i.toString(), 10)].type === 'object') {\n columns[parseInt(i.toString(), 10)].selectable = false;\n this.updateDropdowntreeDS(columns[parseInt(i.toString(), 10)].columns);\n }\n }\n };\n QueryBuilder.prototype.updateAddedRule = function (target, rule, newRule, isRuleTemplate, pId) {\n var ruleElem;\n var index = 0;\n var groupElem;\n var rules;\n if (isRuleTemplate) {\n ruleElem = select('#' + pId, target);\n groupElem = closest(target, '.e-group-container');\n rules = this.getParentGroup(groupElem);\n while (ruleElem && ruleElem.previousElementSibling !== null) {\n ruleElem = ruleElem.previousElementSibling;\n index++;\n }\n rules.rules[index] = rule;\n }\n else {\n groupElem = closest(target, '.e-group-container');\n rules = this.getParentGroup(groupElem);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var custom = rule.custom;\n if (Object.keys(rule).length) {\n 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'), isSticky: true,\n position: 'BottomCenter', cssClass: 'e-querybuilder-error', afterClose: function () {\n tooltip.destroy();\n }, beforeOpen: function (args) {\n var tooltipCloseElement = args.element.querySelector('.e-tooltip-close');\n if (tooltipCloseElement) {\n tooltipCloseElement.style.display = 'none';\n }\n } });\n tooltip.appendTo(element);\n tooltip.open(element);\n };\n /**\n * Validate the conditions and it display errors for invalid fields.\n *\n * @returns {boolean} - Validation\n */\n QueryBuilder.prototype.validateFields = function () {\n var isValid = true;\n var dropDownTreeObj;\n if (this.allowValidation) {\n var excludeOprs = ['isnull', 'isnotnull', 'isempty', 'isnotempty'];\n var i = void 0;\n var len = void 0;\n var fieldElem = void 0;\n var indexElem = void 0;\n var valArray = [];\n var groupElem = void 0;\n var index = void 0;\n var dropDownObj = void 0;\n var tempElem = void 0;\n var rule = void 0;\n var ruleElemCln = this.element.querySelectorAll('.e-rule-container');\n for (i = 0, len = ruleElemCln.length; i < len; i++) {\n var validateRule = void 0;\n groupElem = closest(ruleElemCln[i], '.e-group-container');\n rule = this.getParentGroup(groupElem);\n index = 0;\n indexElem = tempElem = ruleElemCln[i];\n if (this.fieldMode === 'DropdownTree') {\n dropDownTreeObj = getComponent(ruleElemCln[i].querySelector('.e-rule-filter input.e-dropdowntree'), 'dropdowntree');\n if (dropDownTreeObj && dropDownTreeObj.value && dropDownTreeObj.value.length) {\n this.selectedColumn = this.getColumn(dropDownTreeObj.value[0]);\n validateRule = this.selectedColumn.validation;\n }\n }\n else {\n dropDownObj = getComponent(ruleElemCln[i].querySelector('.e-rule-filter input.e-dropdownlist'), 'dropdownlist');\n if (dropDownObj && dropDownObj.value) {\n this.selectedColumn = dropDownObj.getDataByValue(dropDownObj.value);\n validateRule = !isNullOrUndefined(dropDownObj.index) && this.selectedColumn.validation;\n }\n }\n fieldElem = tempElem.querySelector('.e-rule-field input.e-control');\n if (validateRule && validateRule.isRequired) {\n while (indexElem && indexElem.previousElementSibling !== null) {\n indexElem = indexElem.previousElementSibling;\n index++;\n }\n fieldElem = tempElem.querySelector('.e-rule-operator .e-control');\n if (!rule.rules[index].operator) {\n if (fieldElem.parentElement.className.indexOf('e-tooltip') < 0 && fieldElem.className.indexOf('e-tooltip') < 0) {\n this.renderToolTip(fieldElem.parentElement);\n }\n isValid = false;\n }\n if (rule.rules[index].value instanceof Array) {\n valArray = rule.rules[index].value;\n }\n if (excludeOprs.indexOf(rule.rules[index].operator) < -1 &&\n (isNullOrUndefined(rule.rules[index].value) &&\n rule.rules[index].type !== 'date') || rule.rules[index].value === '' ||\n (rule.rules[index].value instanceof Array && valArray.length < 1)) {\n var valElem = tempElem.querySelectorAll('.e-rule-value .e-control');\n isValid = false;\n for (var j = 0, jLen = valElem.length; j < jLen; j++) {\n var element = valElem[j];\n var elem = void 0;\n if (element.parentElement.className.indexOf('e-searcher') > -1) {\n elem = closest(element, '.e-multi-select-wrapper');\n if (elem.className.indexOf('e-tooltip') < 0) {\n this.renderToolTip(elem);\n }\n }\n else if (valElem[j].parentElement.className.indexOf('e-tooltip') < 0 && valElem[j].className.indexOf('e-tooltip') < 0) {\n this.renderToolTip(valElem[j].parentElement);\n }\n j++;\n }\n }\n }\n else if ((dropDownObj && dropDownObj.element && isNullOrUndefined(dropDownObj.index)) ||\n (dropDownTreeObj && dropDownTreeObj.element && (isNullOrUndefined(dropDownTreeObj.value) ||\n dropDownTreeObj.value.length < 1))) {\n if (fieldElem.parentElement.className.indexOf('e-tooltip') < 0) {\n this.renderToolTip(fieldElem.parentElement);\n }\n isValid = false;\n }\n }\n }\n return isValid;\n };\n QueryBuilder.prototype.refreshLevelColl = function () {\n this.levelColl = {};\n var groupElem = this.element.querySelector('.e-group-container');\n if (groupElem) {\n this.levelColl[groupElem.id] = [0];\n var obj = { groupElement: groupElem, level: [0] };\n this.refreshLevel(obj);\n }\n };\n QueryBuilder.prototype.refreshLevel = function (obj) {\n var ruleList = obj.groupElement.querySelector('.e-rule-list').children;\n var childElem;\n var groupElem = obj.groupElement;\n var i;\n var iLen = ruleList.length;\n var groupCount = 0;\n for (i = 0; i < iLen; i++) {\n childElem = ruleList[i];\n if (childElem.className.indexOf('e-group-container') > -1) {\n obj.level.push(groupCount);\n this.levelColl[childElem.id] = obj.level.slice();\n groupCount++;\n obj.groupElement = childElem;\n obj = this.refreshLevel(obj);\n }\n }\n var ruleListElem = closest(groupElem, '.e-rule-list');\n obj.groupElement = ruleListElem ? closest(ruleListElem, '.e-group-container') : groupElem;\n obj.level = this.levelColl[obj.groupElement.id].slice();\n return obj;\n };\n QueryBuilder.prototype.groupTemplate = function () {\n var glueElem;\n var inputElem;\n var labelElem;\n var grpActElem;\n var groupBtn;\n var groupElem = this.createElement('div', { attrs: { class: 'e-group-container' } });\n var groupHdrElem = this.createElement('div', { attrs: { class: 'e-group-header' } });\n var grpBodyElem = this.createElement('div', { attrs: { class: 'e-group-body' } });\n var rulesElem = this.createElement('div', { attrs: { class: 'e-rule-list' } });\n groupElem.appendChild(groupHdrElem);\n grpBodyElem.appendChild(rulesElem);\n groupElem.appendChild(grpBodyElem);\n // create button group in OR and AND process\n if (!this.headerTemplate) {\n glueElem = this.createElement('div', { attrs: { class: 'e-lib e-btn-group', role: 'group' } });\n if (this.enableNotCondition) {\n inputElem = this.createElement('button', { attrs: { type: 'button', class: 'e-qb-toggle' } });\n glueElem.appendChild(inputElem);\n }\n inputElem = this.createElement('input', { attrs: { type: 'radio', class: 'e-btngroup-and', value: 'AND' } });\n glueElem.appendChild(inputElem);\n labelElem = this.createElement('label', { attrs: { class: 'e-lib e-btn e-btngroup-and-lbl e-small' },\n innerHTML: this.l10n.getConstant('AND') });\n glueElem.appendChild(labelElem);\n inputElem = this.createElement('input', { attrs: { type: 'radio', class: 'e-btngroup-or', value: 'OR' } });\n glueElem.appendChild(inputElem);\n labelElem = this.createElement('label', { attrs: { class: 'e-lib e-btn e-btngroup-or-lbl e-small' },\n innerHTML: this.l10n.getConstant('OR') });\n glueElem.appendChild(labelElem);\n groupHdrElem.appendChild(glueElem);\n grpActElem = this.createElement('div', { attrs: { class: 'e-group-action' } });\n groupBtn = this.createElement('button', { attrs: { type: 'button', class: 'e-add-btn' } });\n grpActElem.appendChild(groupBtn);\n groupHdrElem.appendChild(grpActElem);\n }\n return groupElem;\n };\n QueryBuilder.prototype.ruleTemplate = function () {\n var tempElem;\n var clsName;\n var 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,\n condition: condition, rule: this.getRuleCollection(rule, true), groupID: groupID };\n this.trigger('actionBegin', args);\n this.headerFn = this.templateParser(this.headerTemplate);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.isReact) {\n template = this.headerFn(args, this, groupElem.id, templateID)[0];\n groupHdr.appendChild(template);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n }\n else if (this.isAngular) {\n var templateColl = this.headerFn(args, this, groupElem.id, templateID);\n template = (templateColl[0].nodeType === 3) ? templateColl[1] : templateColl[0];\n groupHdr.appendChild(template);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n }\n else if (this.isVue3) {\n template = this.headerFn(args, this, groupElem.id, templateID);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n append(template, groupHdr);\n }\n else {\n template = this.headerFn(args, this, 'Template', templateID)[0];\n groupHdr.appendChild(template);\n }\n this.renderReactTemplates();\n }\n return groupElem;\n };\n /**\n * Notify the changes to component.\n *\n * @param {string | number | boolean | Date | string[] | number[] | Date[]} value - 'value' to be passed to update the rule value.\n * @param {Element} element - 'element' to be passed to update the rule.\n * @param {string} type - 'type' to be passed to update the rule .\n * @returns {void}.\n */\n QueryBuilder.prototype.notifyChange = function (value, element, type) {\n var grpElement = closest(element, '.e-group-container');\n var rules = this.getParentGroup(grpElement);\n var ruleElement = closest(element, '.e-rule-container');\n var index = 0;\n if (type === 'not') {\n rules.not = value;\n return;\n }\n if (type === 'condition') {\n rules.condition = value;\n return;\n }\n while (ruleElement && ruleElement.previousElementSibling !== null) {\n ruleElement = ruleElement.previousElementSibling;\n index++;\n }\n var rule = rules.rules[index];\n var column = this.getColumn(rule.field);\n var format = this.getFormat(column.format);\n if (column.type === 'date') {\n if (value instanceof Date) {\n value = this.intl.formatDate(value, format);\n }\n else if (value instanceof Array) {\n for (var i = 0; i < value.length; i++) {\n if (value[i] && value[i] instanceof Date) {\n value[i] = this.intl.formatDate(value[i], format);\n }\n }\n }\n }\n if (column.ruleTemplate) {\n this.templateChange(element, value, type);\n }\n else {\n this.isNotified = true;\n this.updateRules(element, value);\n this.isNotified = false;\n }\n };\n QueryBuilder.prototype.templateChange = function (element, value, type) {\n var grpElem = closest(element, '.e-group-container');\n var eventsArgs;\n var rules = this.getParentGroup(grpElem);\n var ruleElem = closest(element, '.e-rule-container');\n var index = 0;\n if (this.allowValidation) {\n this.validateValue(rules, ruleElem);\n }\n while (ruleElem && ruleElem.previousElementSibling !== null) {\n ruleElem = ruleElem.previousElementSibling;\n index++;\n }\n var rule = rules.rules[index];\n if (type === 'field') {\n this.selectedColumn = this.getColumn(value);\n }\n else if (rule) {\n this.selectedColumn = this.getColumn(rule.field);\n }\n var operVal;\n this.previousColumn = this.getColumn(rule.field);\n var beforeRules = this.getValidRules(this.rule);\n if (this.selectedColumn) {\n if (this.selectedColumn.operators) {\n operVal = this.selectedColumn.operators;\n }\n else {\n operVal = this.customOperators[this.selectedColumn.type + 'Operator'];\n }\n }\n var arrOper = ['in', 'notin', 'between', 'notbetween'];\n var prevOper;\n switch (type) {\n case 'field':\n rule.field = value;\n rule.label = this.selectedColumn.label;\n rule.type = this.selectedColumn.type;\n rule.value = '';\n rule.operator = operVal[0].value;\n break;\n case 'operator':\n prevOper = rule.operator;\n rule.operator = value;\n if (arrOper.indexOf(rule.operator) > -1) {\n rule.value = [];\n }\n else if (arrOper.indexOf(prevOper) > -1) {\n rule.value = '';\n }\n break;\n case 'value':\n rule.value = value;\n }\n this.changeRuleTemplate(this.selectedColumn, element);\n this.filterRules(beforeRules, this.getValidRules(this.rule), type);\n if (this.selectedColumn && this.selectedColumn.ruleTemplate) {\n if (type === 'field' || type === 'operator') {\n var grpEle = closest(element, '.e-rule-container');\n this.destroyControls(grpEle, true);\n detach(grpEle.querySelector('.e-rule-field'));\n var ruleElement = this.appendRuleElem(closest(grpEle, '.e-group-container'), this.selectedColumn, 'change', grpEle.id, type, rule);\n if (this.displayMode === 'Vertical' || this.element.className.indexOf('e-device') > -1) {\n ruleElement.className = 'e-rule-container e-vertical-mode';\n }\n else {\n ruleElement.className = 'e-rule-container e-horizontal-mode';\n }\n if (ruleElement.previousElementSibling && ruleElement.previousElementSibling.className.indexOf('e-rule-container') > -1) {\n if (ruleElement.className.indexOf('e-joined-rule') < 0) {\n ruleElement.className += ' e-joined-rule';\n }\n if (ruleElement.previousElementSibling.className.indexOf('e-prev-joined-rule') < 0) {\n ruleElement.previousElementSibling.className += ' e-prev-joined-rule';\n }\n }\n if (ruleElement.previousElementSibling && ruleElement.previousElementSibling.className.indexOf('e-group-container') > -1 &&\n ruleElement.className.indexOf('e-separate-rule') < 0) {\n ruleElement.className += ' e-separate-rule';\n }\n var args = { requestType: 'template-create', action: type, ruleID: grpEle.id,\n fields: this.fields, rule: rule };\n eventsArgs = { groupID: grpElem.id.replace(this.element.id + '_', ''), ruleID: grpEle.id.replace(this.element.id + '_', ''),\n value: rule.field, type: 'field' };\n this.trigger('actionBegin', args);\n this.trigger('change', eventsArgs);\n }\n }\n };\n QueryBuilder.prototype.changeValue = function (i, args) {\n var _this = this;\n var element;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (args.element && args.element.classList.contains('e-multiselect')) {\n var multiSelectArgs = args;\n element = multiSelectArgs.element;\n }\n else if (args.event) {\n element = args.event.target;\n }\n else {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n element = args.element;\n }\n if (element.className.indexOf('e-day') > -1 || element.className.indexOf('e-today') > -1 || element.className.indexOf('e-cell') > -1) {\n var calenderArgs = args;\n element = calenderArgs.element;\n }\n var groupElem = closest(element, '.e-group-container');\n var ruleElem = closest(element, '.e-rule-container');\n var groupID = groupElem && groupElem.id.replace(this.element.id + '_', '');\n var ruleID = ruleElem.id.replace(this.element.id + '_', '');\n var dateElement = args;\n var dropDownObj;\n if (dateElement.element && dateElement.element.className.indexOf('e-datepicker') > -1) {\n element = dateElement.element;\n dropDownObj = getComponent(closest(element, '.e-rule-container').querySelector('.e-filter-input'), 'dropdownlist');\n if (dropDownObj) {\n this.selectedColumn = dropDownObj.getDataByValue(dropDownObj.value);\n }\n dropDownObj = getComponent(closest(element, '.e-rule-container').querySelector('.e-filter-input'), 'dropdowntree');\n if (dropDownObj) {\n this.selectedColumn = this.getColumn(dropDownObj.value[0]);\n }\n }\n var value;\n var rbValue;\n if (element.className.indexOf('e-radio') > -1) {\n // eslint-disable-next-line\n rbValue = parseInt(element.id.split('valuekey')[1], 0);\n if (this.fieldMode === 'Default') {\n dropDownObj = getComponent(closest(element, '.e-rule-container').querySelector('.e-filter-input'), 'dropdownlist');\n this.selectedColumn = dropDownObj.getDataByValue(dropDownObj.value);\n }\n else {\n dropDownObj = getComponent(closest(element, '.e-rule-container').querySelector('.e-filter-input'), 'dropdowntree');\n this.selectedColumn = this.getColumn(dropDownObj.value[0]);\n }\n if (this.selectedColumn.values) {\n value = this.selectedColumn.values[rbValue];\n }\n else {\n var valColl = [true, false];\n value = valColl[rbValue];\n }\n }\n else if (element.className.indexOf('e-multiselect') > -1) {\n value = getComponent(element, 'multiselect').value;\n }\n else {\n value = args.value;\n }\n if (args.name === 'input' && this.immediateModeDelay) {\n window.clearInterval(this.timer);\n this.timer = window.setInterval(function () { _this.filterValue(groupID, ruleID, value, i, element); }, this.immediateModeDelay);\n }\n else {\n this.filterValue(groupID, ruleID, value, i, element);\n }\n };\n QueryBuilder.prototype.filterValue = function (grID, rlID, value, i, ele) {\n var _this = this;\n var eventsArgs = { groupID: grID, ruleID: rlID, value: value, cancel: false, type: 'value' };\n window.clearInterval(this.timer);\n if (!this.isImportRules) {\n this.trigger('beforeChange', eventsArgs, function (observedChangeArgs) {\n _this.changeValueSuccessCallBack(observedChangeArgs, ele, i, grID, rlID);\n });\n }\n else {\n this.changeValueSuccessCallBack(eventsArgs, ele, i, grID, rlID);\n }\n };\n QueryBuilder.prototype.changeValueSuccessCallBack = function (args, element, i, groupID, ruleID) {\n if (!args.cancel) {\n this.updateRules(element, args.value, i);\n if (!this.isImportRules) {\n this.trigger('change', { groupID: groupID, ruleID: ruleID, value: args.value, cancel: false, type: 'value' });\n }\n }\n };\n QueryBuilder.prototype.fieldClose = function (id) {\n if (this.isFieldChange || this.isDestroy) {\n return;\n }\n this.isFieldClose = true;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var ddl = getComponent(id, 'dropdownlist');\n var item = ddl.popupObj.element.querySelector('.e-active');\n var itemData = ddl.getItemData();\n ddl.value = itemData.value;\n var customArgs = { element: ddl.element, value: itemData.value, isInteracted: true,\n previousItemData: this.prevItemData, previousItem: null, item: item, itemData: itemData, event: null, e: null };\n if (ddl.previousValue !== ddl.value) {\n this.changeField(customArgs);\n }\n this.isFieldChange = false;\n };\n QueryBuilder.prototype.changeField = function (args) {\n if (args.isInteracted) {\n if (isNullOrUndefined(args.value)) {\n return;\n }\n this.isFieldChange = true;\n this.prevItemData = args.itemData;\n var fieldElem = closest(args.element, '.e-rule-filter') || closest(args.element, '.e-rule-sub-filter');\n var column = this.fieldMode === 'DropdownTree' ? this.getColumn(args.value[0]) : this.getColumn(args.value);\n if (this.fieldMode === 'DropdownTree' && fieldElem != null) {\n var ddtElem = fieldElem.querySelector('.e-dropdowntree.e-control');\n var ddt = getComponent(ddtElem, 'dropdowntree');\n if (column) {\n if (column.type === 'object') {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ddt.value = args.oldValue;\n ddt.dataBind();\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (isNullOrUndefined(args.oldValue)) {\n ddtElem.value = '';\n }\n else {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var result = this.getLabelFromColumn(args.oldValue[0]);\n ddtElem.value = result;\n }\n return;\n }\n else {\n if (!isNullOrUndefined(args.value[0])) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ddt.value = args.value[0];\n ddt.dataBind();\n var result = this.getLabelFromColumn(args.value[0]);\n ddtElem.value = result;\n }\n }\n }\n else {\n return;\n }\n }\n this.destroySubFields(fieldElem);\n this.subFieldElem = null;\n this.isNotValueChange = true;\n if (column && column.ruleTemplate) {\n this.templateChange(args.element, column.field, 'field');\n }\n else if (column && column.columns && column.columns[0].ruleTemplate) {\n this.templateChange(args.element, column.columns[0].field, 'field');\n }\n else {\n var groupElem = closest(args.element, '.e-group-container');\n var rules = this.getParentGroup(groupElem);\n var ruleElem = closest(args.element, '.e-rule-container');\n var index = 0;\n while (ruleElem && ruleElem.previousElementSibling !== null) {\n ruleElem = ruleElem.previousElementSibling;\n index++;\n }\n rules.rules[index].value = '';\n this.changeRule(rules.rules[index], args);\n }\n }\n };\n QueryBuilder.prototype.changeRule = function (rule, ddlArgs) {\n if (!ddlArgs.itemData) {\n if (this.fieldMode === 'DropdownTree') {\n var ddt = getComponent(ddlArgs.element, 'dropdowntree');\n if (ddt.value == null) {\n return;\n }\n }\n else {\n return;\n }\n }\n var tempRule = {};\n var filterElem = closest(ddlArgs.element, '.e-rule-filter');\n filterElem = filterElem ? filterElem : closest(ddlArgs.element, '.e-rule-sub-filter');\n var ddlObj = getComponent(ddlArgs.element, 'dropdownlist');\n if (this.fieldMode === 'DropdownTree' && filterElem != null) {\n ddlObj = getComponent(ddlArgs.element, 'dropdowntree');\n }\n var element = closest(ddlArgs.element, '.e-group-container');\n var groupID = element.id.replace(this.element.id + '_', '');\n this.changeFilter(filterElem, ddlObj, groupID, rule, tempRule, ddlArgs);\n };\n QueryBuilder.prototype.changeFilter = function (flt, dl, grID, rl, tmpRl, dArg) {\n var _this = this;\n if (flt) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var ddlValue = void 0;\n if (this.fieldMode === 'DropdownTree') {\n ddlValue = (dl.value[0]);\n }\n else {\n ddlValue = this.isImportRules ? this.GetRootColumnName(dl.value) : dl.value;\n }\n this.selectedColumn = this.getColumn(ddlValue);\n var ruleElem = closest(flt, '.e-rule-container');\n var ruleID = ruleElem.id.replace(this.element.id + '_', '');\n var eventsArgs = { groupID: grID, ruleID: ruleID, selectedField: this.fieldMode === 'DropdownTree' ?\n dl.value[0] : dl.value, cancel: false, type: 'field' };\n if (!this.isImportRules) {\n this.trigger('beforeChange', eventsArgs, function (observedChangeArgs) {\n _this.fieldChangeSuccess(observedChangeArgs, tmpRl, flt, rl, dArg);\n });\n }\n else {\n this.fieldChangeSuccess(eventsArgs, tmpRl, flt, rl, dArg);\n }\n }\n else {\n var operatorElem = closest(dArg.element, '.e-rule-operator');\n this.changeOperator(flt, operatorElem, dl, grID, rl, tmpRl, dArg);\n }\n };\n QueryBuilder.prototype.changeOperator = function (\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n flt, opr, dl, grID, rl, tmpRl, dArg) {\n var _this = this;\n var ruleElem;\n var ruleID;\n var eventsArgs;\n if (opr) {\n ruleElem = closest(opr, '.e-rule-container');\n ruleID = ruleElem.id.replace(this.element.id + '_', '');\n eventsArgs = { groupID: grID, ruleID: ruleID, selectedIndex: dl.index, cancel: false, type: 'operator' };\n if (!this.isImportRules) {\n this.trigger('beforeChange', eventsArgs, function (observedChangeArgs) {\n _this.operatorChangeSuccess(observedChangeArgs, flt, tmpRl, rl, dArg);\n });\n }\n else {\n this.operatorChangeSuccess(eventsArgs, flt, tmpRl, rl, dArg);\n }\n }\n else {\n this.changeRuleValues(flt, rl, tmpRl, dArg);\n }\n };\n QueryBuilder.prototype.fieldChangeSuccess = function (args, tempRule, filterElem, rule, ddlArgs) {\n var ruleElem = closest(filterElem, '.e-rule-container');\n var operatorElem = closest(ddlArgs.element, '.e-rule-operator');\n var element = closest(ddlArgs.element, '.e-group-container');\n var groupID = element.id.replace(this.element.id + '_', '');\n var ddlObj = getComponent(ddlArgs.element, 'dropdownlist');\n var tooltipElem = ruleElem.querySelectorAll('.e-tooltip.e-input-group');\n for (var i = 0; i < tooltipElem.length; i++) {\n getComponent(tooltipElem[i], 'tooltip').destroy();\n }\n if (!args.cancel) {\n if (isNullOrUndefined(this.selectedColumn)) {\n return;\n }\n tempRule.type = this.selectedColumn.type;\n if (ruleElem.querySelector('.e-template')) {\n rule.value = '';\n }\n if (this.selectedColumn.type === 'object' && this.fieldMode === 'Default') {\n tempRule.type = this.selectedColumn.columns[0].type;\n while (this.selectedColumn.columns) {\n this.createSubFields(filterElem, rule, tempRule, ddlArgs);\n }\n }\n else {\n this.destroySubFields(filterElem);\n this.changeOperator(filterElem, operatorElem, ddlObj, groupID, rule, tempRule, ddlArgs);\n }\n }\n else {\n this.changeOperator(filterElem, operatorElem, ddlObj, groupID, rule, tempRule, ddlArgs);\n }\n };\n QueryBuilder.prototype.destroySubFields = function (filterElem) {\n while (filterElem && filterElem.nextElementSibling.classList.contains('e-rule-sub-filter')) {\n this.destroyControls(filterElem);\n filterElem.nextElementSibling.remove();\n }\n };\n QueryBuilder.prototype.createSubFields = function (filterElem, rule, tempRule, ddlArgs) {\n var subFieldValue = false;\n var fieldElem = closest(filterElem, '.e-rule-field');\n var tempElem = this.createElement('div', { attrs: { class: 'e-rule-sub-filter', id: 'subfilter' + this.subFilterCounter } });\n fieldElem.insertBefore(tempElem, fieldElem.querySelector('.e-rule-operator'));\n var ruleId = closest(tempElem, '.e-rule-container').id;\n var subFieldElem = this.createElement('input', { attrs: { type: 'text', id: ruleId + '_subfilterkey' + this.subFilterCounter } });\n tempElem.appendChild(subFieldElem);\n var height = (this.element.className.indexOf('e-device') > -1) ? '250px' : '200px';\n var 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('isempty') > -1 || operator.indexOf('isnotempty') > -1)) {\n var parentId = closest(target, '.e-rule-container').id;\n prevItemData = this.getPreviousItemData(prevItemData, column);\n if (prevItemData && prevItemData.template === undefined) {\n if (prevItemData.columns) {\n prevItemData = this.getColumn(rule.field);\n }\n }\n else if (this.fieldMode === 'DropdownTree' && prevItemData === undefined) {\n prevItemData = this.getColumn(rule.field);\n }\n if (prevItemData && prevItemData.template) {\n this.templateDestroy(prevItemData, parentId + '_valuekey0');\n var elem = select('#' + parentId + '_valuekey0', target.nextElementSibling);\n if (elem && !elem.classList.contains('e-control')) {\n detach(select('#' + parentId + '_valuekey0', target.nextElementSibling));\n }\n if (typeof prevItemData.template === 'string' || prevItemData.template.create === undefined) {\n if (target.nextElementSibling.classList.contains('e-template-value')) {\n this.clearQBTemplate([parentId]);\n }\n target.nextElementSibling.innerHTML = '';\n }\n }\n if (isRender) {\n this.validateValue(rule, closest(target, '.e-rule-container'));\n this.destroyControls(target);\n }\n if (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 target.nextElementSibling.appendChild(valElem);\n } // eslint-disable-next-line @typescript-eslint/no-explicit-any\n else if (this.isAngular) {\n var valElemColl = this.columnTemplateFn(args, this, ruleID, templateID);\n valElem = (valElemColl[0].nodeType === 3) ? valElemColl[1] : valElemColl[0];\n target.nextElementSibling.appendChild(valElem);\n } // eslint-disable-next-line @typescript-eslint/no-explicit-any\n else if (this.isVue3) {\n valElem = this.columnTemplateFn(args, this, 'Template', templateID);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n append(valElem, target.nextElementSibling);\n }\n else {\n valElem = this.columnTemplateFn(args, this, 'Template', templateID)[0];\n target.nextElementSibling.appendChild(valElem);\n }\n addClass([target.nextElementSibling], 'e-template-value');\n this.renderReactTemplates();\n return true;\n }\n else {\n return false;\n }\n };\n QueryBuilder.prototype.updateValues = function (element, rule) {\n var idx = 1;\n if (element.className.indexOf('e-template') > -1) {\n idx = 3;\n }\n var controlName = element.className.split(' e-')[idx];\n var i = parseInt(element.id.slice(-1), 2);\n switch (controlName) {\n case 'checkbox':\n // eslint-disable-next-line\n var value = getComponent(element, controlName).value;\n rule.value = (value !== '') ? value : undefined;\n break;\n case 'textbox':\n rule.value = getComponent(element, controlName).value;\n break;\n case 'dropdownlist':\n rule.value = getComponent(element, controlName).value;\n break;\n case 'radio':\n // eslint-disable-next-line\n var radioBtnObj = getComponent(element, controlName);\n if (radioBtnObj.checked) {\n if (typeof rule.value === 'boolean') {\n rule.value = radioBtnObj.value === 'true';\n }\n else {\n if (this.getColumn(rule.field).values) {\n rule.value = radioBtnObj.value;\n }\n else {\n rule.value = radioBtnObj.value === 'true';\n }\n }\n }\n radioBtnObj.refresh();\n break;\n case 'numerictextbox':\n if (rule.operator.indexOf('between') > -1) {\n if (typeof rule.value === 'string') {\n rule.value = [];\n }\n rule.value[i] = getComponent(element, controlName).value;\n }\n else {\n rule.value = getComponent(element, controlName).value;\n }\n break;\n case 'datepicker':\n // eslint-disable-next-line\n var column = this.getColumn(rule.field);\n // eslint-disable-next-line\n var format = this.getFormat(column.format);\n // eslint-disable-next-line\n var selectedDate = getComponent(element, controlName).value;\n if (rule.operator.indexOf('between') > -1) {\n if (typeof rule.value === 'string') {\n rule.value = [];\n }\n rule.value[i] = this.intl.formatDate(selectedDate, format);\n }\n else if (isNullOrUndefined(format.format) && selectedDate) {\n rule.value = this.intl.formatDate(selectedDate);\n }\n else if (selectedDate) {\n rule.value = this.intl.formatDate(selectedDate, format);\n }\n else {\n rule.value = selectedDate;\n }\n break;\n case 'multiselect':\n rule.value = getComponent(element, controlName).value;\n break;\n }\n };\n QueryBuilder.prototype.updateRules = function (target, selectedValue, i, isNotTrigger) {\n var groupElem = closest(target, '.e-group-container');\n var rule = this.getParentGroup(groupElem);\n var ruleElem = closest(target, '.e-rule-container');\n var index = 0;\n var dropDownObj;\n var eventsArgs;\n var groupID = groupElem.id.replace(this.element.id + '_', '');\n var beforeRules = this.getValidRules(this.rule);\n while (ruleElem && ruleElem.previousElementSibling !== null) {\n ruleElem = ruleElem.previousElementSibling;\n index++;\n }\n var operator = rule.rules[index].operator ? rule.rules[index].operator.toString() : '';\n ruleElem = closest(target, '.e-rule-container');\n var ruleID = ruleElem.id.replace(this.element.id + '_', '');\n if (closest(target, '.e-rule-filter') || closest(target, '.e-rule-sub-filter')) {\n if (this.subFieldElem) {\n target = this.subFieldElem;\n }\n dropDownObj = this.fieldMode === 'DropdownTree' ? getComponent(target, 'dropdowntree') :\n getComponent(target, 'dropdownlist');\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var column = this.fieldMode === 'DropdownTree' ? this.getColumn(dropDownObj.value[0])\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n : this.getColumn(dropDownObj.value);\n if (!this.isImportRules && rule.rules[index].field &&\n rule.rules[index].field.toLowerCase() !== column.field.toLowerCase()) {\n if (!(ruleElem.querySelectorAll('.e-template')) && !(operator.indexOf('null') > -1)\n || (operator.indexOf('empty') > -1)) {\n rule.rules[index].value = '';\n }\n }\n this.selectedColumn = this.getColumn(this.selectedColumn.field);\n rule.rules[index].field = this.selectedColumn.field;\n rule.rules[index].type = this.selectedColumn.type;\n rule.rules[index].label = this.selectedColumn.label;\n var ruleElement = closest(target, '.e-rule-filter');\n ruleElement = ruleElement ? ruleElement : closest(target, '.e-rule-sub-filter');\n var element = ruleElement.nextElementSibling.querySelector('input.e-control');\n element = element ? element : ruleElement.nextElementSibling.nextElementSibling.querySelector('input.e-control');\n operator = getComponent(element, 'dropdownlist').value.toString();\n rule.rules[index].operator = operator;\n // Value Fields\n var valueContainer = ruleElement.nextElementSibling.nextElementSibling;\n var elementCln = valueContainer.querySelectorAll('input.e-control');\n if (elementCln.length < 1) {\n elementCln = valueContainer.querySelectorAll('div.e-control');\n }\n if (elementCln.length < 1) {\n elementCln = valueContainer.querySelectorAll('.e-template');\n }\n eventsArgs = { groupID: groupID, ruleID: ruleID, value: rule.rules[index].field, type: 'field' };\n for (var i_1 = 0; i_1 < elementCln.length; i_1++) {\n if (operator.indexOf('null') > -1 || operator.indexOf('empty') > -1) {\n rule.rules[index].value = null;\n continue;\n }\n this.updateValues(elementCln[i_1], rule.rules[index]);\n }\n if (!this.isImportRules) {\n this.trigger('change', eventsArgs);\n }\n if (this.allowValidation && rule.rules[index].field && target.parentElement.className.indexOf('e-tooltip') > -1) {\n getComponent(target.parentElement, 'tooltip').destroy();\n }\n this.filterRules(beforeRules, this.getValidRules(this.rule), 'field');\n }\n else if (closest(target, '.e-rule-operator')) {\n dropDownObj = getComponent(target, 'dropdownlist');\n rule.rules[index].operator = dropDownObj.value.toString();\n var inputElem = ruleElem.querySelectorAll('.e-rule-value input.e-control');\n eventsArgs = { groupID: groupID, ruleID: ruleID, value: dropDownObj.value, type: 'operator' };\n if (this.allowValidation && rule.rules[index].operator && target.parentElement.className.indexOf('e-tooltip') > -1) {\n getComponent(target.parentElement, 'tooltip').destroy();\n }\n if (inputElem.length > 1 && !(inputElem[0].className.indexOf('e-template') > -1)) {\n rule.rules[index].value = [];\n }\n for (var i_2 = 0; i_2 < inputElem.length; i_2++) {\n if (rule.rules[index].operator.indexOf('null') > -1 || rule.rules[index].operator.indexOf('empty') > -1) {\n rule.rules[index].value = null;\n continue;\n }\n else if (inputElem[i_2].classList.contains('e-template')) {\n continue;\n }\n this.updateValues(inputElem[i_2], rule.rules[index]);\n }\n if (!this.isImportRules) {\n this.trigger('change', eventsArgs);\n }\n this.filterRules(beforeRules, this.getValidRules(this.rule), 'operator');\n }\n else if (closest(target, '.e-rule-value')) {\n this.ruleValueUpdate(target, selectedValue, rule, index, groupElem, ruleElem, i);\n if (!isNotTrigger) {\n this.filterRules(beforeRules, this.getValidRules(this.rule), 'value');\n }\n }\n };\n QueryBuilder.prototype.filterRules = function (beforeRule, afterRule, type) {\n var beforeRuleStr = JSON.stringify({ condition: beforeRule.condition, not: beforeRule.not, rule: beforeRule.rules });\n var afetrRuleStr = JSON.stringify({ condition: afterRule.condition, not: afterRule.not, rule: afterRule.rules });\n if (beforeRuleStr !== afetrRuleStr) {\n if (!this.isImportRules) {\n this.trigger('ruleChange', { previousRule: beforeRule, rule: afterRule, type: type });\n }\n }\n };\n QueryBuilder.prototype.ruleValueUpdate = function (target, selectedValue, rule, index, groupElem, ruleElem, i) {\n var eventsArgs;\n var oper;\n var arrOperator = ['in', 'between', 'notin', 'notbetween'];\n if (rule.rules[index].operator) {\n oper = rule.rules[index].operator.toString().toLowerCase();\n }\n if (selectedValue !== null) {\n if (target.className.indexOf('e-multiselect') > -1 && rule.rules[index].type === 'number' &&\n !this.isNotified) {\n var selVal = [];\n var dupSelectedValue = selectedValue;\n for (var k = 0, kLen = dupSelectedValue.length; k < kLen; k++) {\n if (typeof dupSelectedValue[k] === 'string') {\n selVal.push(parseFloat(dupSelectedValue[k]));\n }\n }\n if (selVal.length) {\n selectedValue = selVal;\n }\n }\n if (this.isNotified) {\n rule.rules[index].value = selectedValue;\n eventsArgs = { groupID: groupElem.id, ruleID: ruleElem.id, value: rule.rules[index].value, type: 'value' };\n if (!this.isImportRules) {\n this.trigger('change', eventsArgs);\n }\n }\n else if (target.className.indexOf('e-spin') > -1 || target.className.indexOf('e-numeric') > -1) {\n if (arrOperator.indexOf(oper) > -1) {\n rule.rules[index].value[i] = selectedValue;\n }\n else {\n rule.rules[index].value = selectedValue;\n }\n }\n else if (target.className.indexOf('e-radio') > -1) {\n rule.rules[index].value = selectedValue;\n }\n else if (target.className.indexOf('e-multiselect') > -1) {\n rule.rules[index].value = selectedValue;\n }\n else if (target.className.indexOf('e-textbox') > -1) {\n if (oper === 'in' || oper === 'notin') {\n if (rule.rules[index].type === 'string') {\n rule.rules[index].value = this.processValueString(selectedValue, rule.rules[index].type);\n }\n else {\n rule.rules[index].value = this.processValueString(selectedValue, rule.rules[index].type);\n }\n }\n else {\n rule.rules[index].value = selectedValue;\n }\n }\n else if (target.className.indexOf('e-datepicker') > -1) {\n var format = this.getFormat(this.getColumn(this.selectedColumn.field).format);\n if (format.type) {\n if (arrOperator.indexOf(oper) > -1) {\n if (typeof rule.rules[index].value === 'string') {\n rule.rules[index].value = [];\n }\n rule.rules[index].value[i] = this.intl.formatDate(selectedValue, format);\n }\n else {\n rule.rules[index].value = this.intl.formatDate(selectedValue, format);\n }\n }\n }\n this.validateValue(rule, ruleElem, index);\n }\n else {\n if (target.className.indexOf('e-datepicker') > -1) {\n if (arrOperator.indexOf(oper) > -1) {\n if (typeof rule.rules[index].value === 'string') {\n rule.rules[index].value = [];\n }\n rule.rules[index].value[i] = selectedValue;\n }\n else {\n rule.rules[index].value = selectedValue;\n }\n }\n else {\n rule.rules[index].value = selectedValue;\n }\n }\n };\n QueryBuilder.prototype.validateValue = function (rule, ruleElem, index) {\n if (!isNullOrUndefined(index)) {\n rule = rule.rules[index];\n }\n var isObject = typeof (rule.value) === 'object';\n if (this.allowValidation && (isNullOrUndefined(index) || (isObject ? rule.value.length > 0 : rule.value))) {\n var valElem = ruleElem.querySelectorAll('.e-rule-value .e-control');\n if (valElem.length > 0) {\n if (valElem[0].className.indexOf('e-tooltip') > -1) {\n getComponent(valElem[0], 'tooltip').destroy();\n }\n else if (valElem[0].parentElement.className.indexOf('e-tooltip') > -1) {\n getComponent(valElem[0].parentElement, 'tooltip').destroy();\n }\n if (valElem[1] && valElem[1].parentElement.className.indexOf('e-tooltip') > -1) {\n getComponent(valElem[1].parentElement, 'tooltip').destroy();\n }\n }\n }\n };\n QueryBuilder.prototype.getFormat = function (format) {\n var formatOptions;\n if (format) {\n if (typeof (format) === 'string') {\n formatOptions = { type: 'dateTime' };\n if (format === 'short' || format === 'yMd') {\n formatOptions.type = 'date';\n formatOptions.skeleton = format;\n }\n else {\n formatOptions.format = format;\n }\n }\n else {\n formatOptions = { type: 'dateTime', skeleton: format.skeleton };\n }\n }\n else {\n formatOptions = { type: 'date', skeleton: 'yMd' };\n }\n return formatOptions;\n };\n QueryBuilder.prototype.findGroupByIdx = function (groupIdx, rule, isRoot) {\n var ruleColl = rule.rules;\n var dupRuleColl = [];\n if (!isRoot) {\n for (var j = 0, jLen = ruleColl.length; j < jLen; j++) {\n rule = ruleColl[j];\n if (rule.rules) {\n dupRuleColl.push(rule);\n }\n }\n return dupRuleColl[groupIdx];\n }\n return rule;\n };\n /**\n * Removes the component from the DOM and detaches all its related event handlers.\n * Also it maintains the initial input element from the DOM.\n *\n * @method destroy\n * @returns {void}\n */\n QueryBuilder.prototype.destroy = function () {\n this.isDestroy = true;\n var queryElement = this.element;\n if (!queryElement) {\n return;\n }\n var element;\n var i;\n var len;\n var tooltip;\n var popupElement;\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 popupElement = document.querySelectorAll('.qb-dropdownlist');\n if (popupElement) {\n for (i = 0; i < popupElement.length; i++) {\n popupElement[i].remove();\n }\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.setProperties({ rule: this.checkNotGroup(this.rule) }, true);\n this.initWrapper();\n };\n QueryBuilder.prototype.notGroupRtl = function () {\n if (this.enableRtl) {\n addClass(this.element.querySelectorAll('.e-btn-group'), 'e-rtl');\n }\n else {\n removeClass(this.element.querySelectorAll('.e-btn-group'), 'e-rtl');\n }\n };\n QueryBuilder.prototype.checkNotGroup = function (rule) {\n var orgRule;\n if (rule.rules) {\n for (var i = 0; i < rule.rules.length; i++) {\n orgRule = rule.rules[i];\n orgRule = this.checkNotGroup(orgRule);\n rule.rules[i] = orgRule;\n }\n }\n if (!isNullOrUndefined(rule.not)) {\n if (this.enableNotCondition) {\n rule.not = false;\n }\n delete rule.not;\n }\n else if (this.enableNotCondition && !isNullOrUndefined(rule.condition)) {\n rule.not = false;\n }\n return rule;\n };\n QueryBuilder.prototype.onPropertyChanged = function (newProp, oldProp) {\n var properties = Object.keys(newProp);\n for (var _i = 0, properties_1 = properties; _i < properties_1.length; _i++) {\n var prop = properties_1[_i];\n switch (prop) {\n case 'summaryView':\n // eslint-disable-next-line\n var groupElem = this.element.querySelector('.e-group-container');\n // eslint-disable-next-line\n var summaryElem = this.element.querySelector('.e-summary-content');\n if (newProp.summaryView) {\n groupElem.style.display = 'none';\n if (this.element.querySelectorAll('.e-summary-content').length < 1) {\n this.renderSummary();\n summaryElem = this.element.querySelector('.e-summary-content');\n }\n else {\n this.element.querySelector('.e-summary-text').textContent = this.getSqlFromRules(this.rule);\n }\n summaryElem.style.display = 'block';\n }\n else {\n if (groupElem.querySelectorAll('.e-collapse-rule').length > -1) {\n this.renderSummaryCollapse();\n }\n groupElem.style.display = 'block';\n summaryElem.style.display = 'none';\n }\n break;\n case 'displayMode':\n this.refresh();\n break;\n case 'showButtons':\n if (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 if (this.rule.rules.length === 0 && !isNullOrUndefined(this.rule)) {\n this.reset();\n }\n this.setProperties({ rule: newProp.rule }, true);\n newProp.rule = this.getRuleCollection(this.rule, false);\n this.setRules(this.rule);\n break;\n case 'width':\n this.width = newProp.width;\n this.element.style.width = this.width;\n break;\n case 'locale':\n this.locale = newProp.locale;\n this.intl = new Internationalization(this.locale);\n this.isLocale = true;\n this.refresh();\n this.isLocale = false;\n break;\n case 'enableNotCondition':\n this.onChangeNotGroup();\n break;\n case 'readonly':\n this.isReadonly = newProp.readonly;\n this.enableReadonly();\n break;\n }\n }\n };\n QueryBuilder.prototype.preRender = function () {\n this.element.id = this.element.id || getUniqueID('ej2-querybuilder');\n this.defaultLocale = {\n StartsWith: 'Starts With',\n 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 if (ruleElemColl[r]) {\n var isTemplateRendered = ruleElemColl[r].querySelector('.e-template-value');\n if (column && (column.ruleTemplate || (this.isPlatformTemplate(column) && isTemplateRendered))) {\n removeString.push(ruleElemColl[r].id);\n }\n }\n }\n }\n }\n detach(target);\n if (this.headerTemplate) {\n this.clearQBTemplate([target.id]);\n }\n if (removeString.length) {\n this.clearQBTemplate(removeString);\n }\n rule.rules.splice(index, 1);\n delete this.levelColl[args.groupID];\n this.refreshLevelColl();\n this.disableRuleCondition(elem, rule);\n if (!this.isImportRules) {\n this.trigger('change', args);\n }\n this.filterRules(beforeRules, this.getValidRules(this.rule), 'deleteGroup');\n }\n };\n QueryBuilder.prototype.isPlatformTemplate = function (column) {\n var isTemp = false;\n isTemp = column.template && (typeof column.template === 'string' || column.template.create === undefined);\n return isTemp;\n };\n QueryBuilder.prototype.deleteRule = function (target) {\n var _this = this;\n var groupElem = closest(target, '.e-group-container');\n var groupID = groupElem.id.replace(this.element.id + '_', '');\n var ruleID = closest(target, '.e-rule-container').id.replace(this.element.id + '_', '');\n var args = { groupID: groupID, ruleID: ruleID, cancel: false, type: 'deleteRule' };\n if (!this.isImportRules) {\n this.trigger('beforeChange', args, function (observedChangeArgs) {\n _this.deleteRuleSuccessCallBack(observedChangeArgs, target);\n });\n }\n else {\n this.deleteRuleSuccessCallBack(args, target);\n }\n };\n QueryBuilder.prototype.deleteRuleSuccessCallBack = function (args, target) {\n if (!args.cancel) {\n var groupElem = closest(target, '.e-group-container');\n var rule = this.getParentGroup(groupElem);\n var ruleElem = closest(target, '.e-rule-container');\n var beforeRules = this.getValidRules(this.rule);\n var clnruleElem = ruleElem;\n var nextElem = ruleElem.nextElementSibling;\n var prevElem = ruleElem.previousElementSibling;\n var index = 0;\n var valElem = ruleElem.querySelectorAll('.e-tooltip');\n var i = void 0;\n var len = valElem.length;\n for (i = 0; i < len; i++) {\n getComponent(valElem[i], 'tooltip').destroy();\n }\n while (ruleElem.previousElementSibling !== null) {\n ruleElem = ruleElem.previousElementSibling;\n index++;\n }\n var column = this.getColumn(rule.rules[index].field);\n if (column && column.template && clnruleElem.querySelector('.e-template')) {\n this.templateDestroy(column, clnruleElem.querySelector('.e-template').id);\n }\n if (!prevElem || prevElem.className.indexOf('e-rule-container') < 0) {\n if (nextElem) {\n removeClass([nextElem], 'e-joined-rule');\n }\n }\n if (!nextElem || nextElem.className.indexOf('e-rule-container') < 0) {\n if (prevElem) {\n removeClass([prevElem], 'e-prev-joined-rule');\n }\n }\n var isTemplateRendered = clnruleElem.querySelector('.e-template-value');\n // eslint-disable\n try {\n detach(clnruleElem);\n }\n catch (err) {\n // eslint-disable-next-line no-ex-assign\n err = [];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var error = 'error';\n // eslint-disable-next-line\n err[error] = error;\n }\n // eslint-enable\n if (column && column.ruleTemplate) {\n this.clearQBTemplate([clnruleElem.id]);\n }\n if (column && this.isPlatformTemplate(column) && isTemplateRendered) {\n this.clearQBTemplate([clnruleElem.id]);\n }\n rule.rules.splice(index, 1);\n if (!(rule.rules[0] && rule.rules[0].rules)) {\n this.disableRuleCondition(groupElem, rule);\n }\n if (!this.isImportRules) {\n this.trigger('change', args);\n }\n this.filterRules(beforeRules, this.getValidRules(this.rule), 'deleteRule');\n }\n };\n QueryBuilder.prototype.setGroupRules = function (rule, isRoot) {\n if (this.headerTemplate && isRoot) {\n this.isRoot = true;\n }\n this.reset();\n this.groupIdCounter = 1;\n this.ruleIdCounter = 0;\n this.isImportRules = true;\n this.setProperties({ rule: rule }, true);\n rule = this.getRuleCollection(this.rule, false);\n this.importRules(this.rule, this.element.querySelector('.e-group-container'), true, this.rule.not, isRoot);\n 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 if ((rule.operator === 'in' || rule.operator === 'notin') && rule.value && rule.value.length === 0) {\n rule = {};\n }\n }\n else {\n rule = {};\n }\n }\n else {\n if (customObj && (customObj.type === 'question' || customObj.type === 'answer')) {\n var notValue = rule.not;\n rule = { 'label': rule.label, 'field': rule.field, 'operator': rule.operator, 'type': rule.type, 'value': rule.value,\n 'condition': rule.condition, 'rules': rule.rules\n };\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n rule.custom = customObj;\n if (this.enableNotCondition) {\n rule.not = notValue;\n }\n }\n else if ((isNullOrUndefined(rule.condition)) && isNullOrUndefined(rule.rules)) {\n rule = {};\n }\n else {\n if (this.enableNotCondition) {\n rule = { 'condition': rule.condition, 'rules': rule.rules, 'not': rule.not };\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 if (isNullOrUndefined(ruleElem)) {\n return null;\n }\n var groupElem = closest(ruleElem, '.e-group-container');\n var rule = this.getParentGroup(groupElem);\n while (ruleElem.previousElementSibling !== null) {\n ruleElem = ruleElem.previousElementSibling;\n index++;\n }\n return rule.rules[index];\n };\n /**\n * Gets the group.\n *\n * @param {string | Element} target - 'target' to be passed to get group.\n * @returns {object} -Group\n */\n QueryBuilder.prototype.getGroup = function (target) {\n if (target instanceof Element && target.className.indexOf('e-group-container') < 1) {\n target = closest(target, '.e-group-container');\n }\n var groupId = (target instanceof Element) ? target.id : this.element.id + '_' + target;\n var rule = this.getParentGroup(groupId);\n return rule;\n };\n /**\n * Deletes the group or groups based on the group ID.\n *\n * @param {string[]} groupIdColl - 'groupIdColl' to be passed to delete groups.\n * @returns {void}\n */\n QueryBuilder.prototype.deleteGroups = function (groupIdColl) {\n var i;\n var len = groupIdColl.length;\n var groupID;\n for (i = 0; i < len; i++) {\n groupID = this.element.id + '_' + groupIdColl[i];\n this.deleteGroup(document.getElementById(groupID));\n }\n };\n /**\n * Return the Query from current rules collection.\n *\n * @returns {Promise} - Query from current rules collection\n * @blazorType object\n */\n QueryBuilder.prototype.getFilteredRecords = function () {\n var predicate = this.getPredicate(this.getValidRules(this.rule));\n var dataManagerQuery = isNullOrUndefined(predicate) ? new Query() : new Query().where(predicate);\n return this.dataManager.executeQuery(dataManagerQuery);\n };\n /**\n * Deletes the rule or rules based on the rule ID.\n *\n * @param {string[]} ruleIdColl - 'ruleIdColl' to be passed to delete rules.\n * @returns {void}.\n */\n QueryBuilder.prototype.deleteRules = function (ruleIdColl) {\n var i;\n var len = ruleIdColl.length;\n var ruleID;\n for (i = 0; i < len; i++) {\n ruleID = this.element.id + '_' + ruleIdColl[i];\n this.deleteRule(document.getElementById(ruleID));\n }\n };\n /**\n * Gets the query for Data Manager.\n *\n * @param {RuleModel} rule - 'rule' to be passed to get query.\n * @returns {string} - Query for Data Manager\n */\n QueryBuilder.prototype.getDataManagerQuery = function (rule) {\n var predicate = this.getPredicate(rule);\n var query;\n var fields = [];\n for (var i = 0, len = Object.keys(this.columns); i < len.length; i++) {\n fields.push(this.columns[i].field);\n }\n if (rule.rules.length) {\n query = new Query().select(fields).where(predicate);\n }\n else {\n query = new Query().select(fields);\n }\n return query;\n };\n /**\n * Get the predicate from collection of rules.\n *\n * @param {RuleModel} rule - 'rule' to be passed to get predicate.\n * @returns {Predicate} - Predicate from collection of rules\n */\n QueryBuilder.prototype.getPredicate = function (rule) {\n var ruleColl = rule.rules;\n var pred;\n var pred2;\n var ruleValue;\n var ignoreCase = false;\n var column;\n 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-dropdowntree, .e-numerictextbox, .e-textbox, .e-datepicker, .e-multiselect .e-lib, .e-radio');\n for (var i = 0; i < elem.length; i++) {\n if (elem[i].classList.contains('e-dropdownlist')) {\n var dropDownObj = getInstance(elem[i], DropDownList);\n dropDownObj.readonly = this.isReadonly;\n }\n else if (elem[i].classList.contains('e-dropdowntree')) {\n var dropDownTreeObj = getComponent(elem[i], 'dropdowntree');\n dropDownTreeObj.readonly = this.isReadonly;\n }\n else if (elem[i].classList.contains('e-numerictextbox')) {\n var numericTextBoxObj = getInstance(elem[i], NumericTextBox);\n numericTextBoxObj.readonly = this.isReadonly;\n }\n else if (elem[i].classList.contains('e-textbox')) {\n var textBoxObj = getInstance(elem[i], TextBox);\n textBoxObj.readonly = this.isReadonly;\n }\n else if (elem[i].classList.contains('e-datepicker')) {\n var datePickerObj = getInstance(elem[i], DatePicker);\n datePickerObj.readonly = this.isReadonly;\n }\n else if (elem[i].classList.contains('e-multiselect')) {\n var multiSelectObj = getInstance(elem[i], MultiSelect);\n multiSelectObj.readonly = this.isReadonly;\n }\n else if (elem[i].classList.contains('e-radio')) {\n var radioButtonObj = getInstance(elem[i], RadioButton);\n if (!radioButtonObj.checked) {\n if (this.isReadonly) {\n elem[i].parentElement.style.display = 'none';\n }\n else {\n elem[i].parentElement.style.display = 'inherit';\n }\n }\n }\n }\n var deleteGroupElems = this.element.querySelectorAll('.e-deletegroup');\n var addRuleGroupElems = this.element.querySelectorAll('.e-addrulegroup');\n var removeRuleElems = this.element.querySelectorAll('.e-removerule');\n if (!this.isReadonly && this.ruleElem.classList.contains('e-readonly')) {\n this.ruleElem.classList.remove('e-readonly');\n }\n var elems = [deleteGroupElems, addRuleGroupElems, removeRuleElems];\n for (var i = 0; i < elems.length; i++) {\n elems[i].forEach(function (elem) {\n if (elem.classList.contains('e-readonly')) {\n elem.classList.remove('e-readonly');\n }\n else {\n elem.classList.add('e-readonly');\n }\n });\n }\n this.enableBtnGroup();\n };\n QueryBuilder.prototype.enableBtnGroup = function () {\n var _this = this;\n var elems = this.element.querySelectorAll('.e-btngroup-and-lbl, .e-btngroup-or-lbl, .e-qb-toggle');\n var not = false;\n elems.forEach(function (elem) {\n if (elem.classList.contains('e-qb-toggle') && !elem.classList.contains('e-active-toggle')\n && !elem.classList.contains('e-readonly')) {\n elem.classList.add('e-readonly');\n not = false;\n }\n else if (elem.classList.contains('e-qb-toggle') && elem.classList.contains('e-not-readonly')) {\n elem.classList.remove('e-not-readonly');\n }\n else if (elem.classList.contains('e-qb-toggle') && elem.classList.contains('e-readonly')) {\n elem.classList.remove('e-readonly');\n }\n else if (elem.classList.contains('e-active-toggle')) {\n elem.classList.add('e-not-readonly');\n not = true;\n }\n else if (elem.previousElementSibling.checked || elem.classList.contains('e-readonly')) {\n elem.classList.remove('e-readonly');\n if (not) {\n if (elem.textContent === 'AND') {\n elem.classList.add('e-readonly-and');\n }\n else {\n elem.classList.add('e-readonly-or');\n }\n }\n else {\n if (elem.textContent === 'AND' && _this.isReadonly) {\n elem.classList.remove('e-not');\n elem.classList.add('e-readonly-and');\n }\n else {\n if (_this.enableNotCondition) {\n elem.classList.add('e-not');\n }\n elem.classList.remove('e-readonly-and');\n }\n if (elem.textContent === 'OR' && _this.isReadonly) {\n elem.classList.add('e-readonly-or-not');\n }\n else {\n elem.classList.remove('e-readonly-or-not');\n }\n }\n }\n else if (elem.classList.contains('e-btn-disable')) {\n // do nothing\n }\n else {\n elem.classList.add('e-readonly');\n }\n });\n };\n QueryBuilder.prototype.isDateFunction = function (value) {\n var dateFunc = ['date', 'time', 'day', 'week', 'month', 'year', 'hour', 'minute', 'second', 'now', 'quarter', 'period', 'extract'];\n for (var i = 0, len = dateFunc.length; i < len; i++) {\n if (value.toLowerCase().indexOf(dateFunc[i]) > -1) {\n return true;\n }\n }\n return false;\n };\n QueryBuilder.prototype.getSqlString = function (rules, enableEscape, queryStr, sqlLocale) {\n var isRoot = false;\n if (!queryStr && queryStr !== '') {\n queryStr = '';\n isRoot = true;\n }\n else {\n queryStr += '(';\n }\n var condition = rules.condition;\n if (rules.not) {\n var rulesNotCondition = void 0;\n if (isRoot) {\n rulesNotCondition = sqlLocale ? this.l10n.getConstant('NOT').toUpperCase() + ' (' : 'NOT (';\n queryStr += rulesNotCondition;\n }\n else {\n rulesNotCondition = sqlLocale ? ' ' + this.l10n.getConstant('NOT').toUpperCase() + ' (' : ' NOT (';\n queryStr += rulesNotCondition;\n }\n }\n if (rules.rules) {\n for (var j = 0, jLen = rules.rules.length; j < jLen; j++) {\n if (rules.rules[j].rules) {\n queryStr = this.getSqlString(rules.rules[j], enableEscape, queryStr, sqlLocale);\n }\n else {\n var rule = rules.rules[j];\n var valueStr = '';\n var ruleOpertor = sqlLocale ? this.sqlOperators[rule.operator] : this.operators[rule.operator];\n if (rule.value instanceof Array) {\n if (rule.operator.toString().indexOf('between') > -1) {\n var ruleCondition = sqlLocale ? ' ' + this.l10n.getConstant('AND').toUpperCase() + ' ' : ' ' + 'AND' + ' ';\n if (rule.type === 'date' && !this.isDateFunction(rule.value[0])) {\n valueStr += '\"' + rule.value[0] + '\"' + ruleCondition + '\"' + rule.value[1] + '\"';\n }\n else {\n valueStr += rule.value[0] + ruleCondition + rule.value[1];\n }\n }\n else {\n if (typeof rule.value[0] === 'string' && rule.value !== null) {\n valueStr += '(\"' + rule.value[0] + '\"';\n for (var k = 1, kLen = rule.value.length; k < kLen; k++) {\n valueStr += ',\"' + rule.value[k] + '\"';\n }\n valueStr += ')';\n }\n else {\n valueStr += '(' + rule.value + ')';\n }\n }\n }\n else {\n if (rule.operator.toString().indexOf('startswith') > -1) {\n valueStr += rule.value ? '(\"' + rule.value + '%\")' : '(' + rule.value + ')';\n }\n else if (rule.operator.toString().indexOf('endswith') > -1) {\n valueStr += rule.value ? '(\"%' + rule.value + '\")' : '(' + rule.value + ')';\n }\n else if (rule.operator.toString().indexOf('contains') > -1) {\n valueStr += rule.value ? '(\"%' + rule.value + '%\")' : '(' + rule.value + ')';\n }\n else {\n if (rule.type === 'number' || typeof rule.value === 'boolean' || 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.setProperties({ rule: { condition: 'and', not: false, rules: [] } }, true);\n var rule = this.processParser(this.parser, this.rule, [0], sqlLocale);\n if (this.enableNotCondition) {\n return { condition: rule.condition, not: rule.not, rules: rule.rules };\n }\n else {\n return { condition: rule.condition, rules: rule.rules };\n }\n };\n /**\n * Gets the sql query from rules.\n *\n * @param {RuleModel} rule - 'rule' to be passed to get the sql.\n * @param {boolean} allowEscape - Set `true` if it exclude the escape character.\n * @param {boolean} sqlLocale - Set `true` if Localization for Sql query.\n * @returns {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 var betweenParser = this.parser[this.parser.length - 3];\n if (lastParser[0] === 'Left' && (secParser && secParser[0] === 'Conditions')) {\n return true;\n }\n var betweenOperator = 'between';\n if (lastParser[0] === 'Conditions' && (betweenParser && betweenParser[1].indexOf(betweenOperator) < 0)) {\n return true;\n }\n }\n return false;\n };\n QueryBuilder.prototype.checkNumberLiteral = function (sqlString, sqlLocale) {\n var lastParser = this.parser[this.parser.length - 1];\n if (!lastParser) {\n return true;\n }\n else {\n // eslint-disable-next-line\n if (/^[0-9]+(\\.[0-9]+)?/.exec(sqlString)) {\n var secParser = this.parser[this.parser.length - 2];\n var betweenParser = this.parser[this.parser.length - 3];\n if (lastParser[0] === 'Left' && (secParser && secParser[0] === 'Conditions')) {\n return true;\n }\n var betweenOperator = sqlLocale ? this.l10n.getConstant('Between').toLowerCase() : 'between';\n if (lastParser[0] === 'Conditions' && (betweenParser && betweenParser[1].indexOf(betweenOperator) < 0)) {\n return true;\n }\n }\n }\n return false;\n };\n QueryBuilder.prototype.getOperator = function (value, operator, sqlLocale) {\n var operators = {\n '=': 'equal', '!=': 'notequal', '<': 'lessthan', '>': 'greaterthan', '<=': 'lessthanorequal',\n '>=': 'greaterthanorequal', 'in': 'in', 'not in': 'notin', 'between': 'between', 'not between': 'notbetween',\n 'is empty': 'isempty', 'is null': 'isnull', 'is not null': 'isnotnull', 'is not empty': 'isnotempty'\n };\n if (sqlLocale) {\n var localeOperator = Object.keys(this.sqlOperators);\n for (var i = 0; i < localeOperator.length; i++) {\n if (this.sqlOperators[localeOperator[i]] === operator.toUpperCase()) {\n if (value && value.indexOf('%') === 0 && value[value.length - 1] === '%') {\n return (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","setProperties","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","_loop_1","j","sqlIdx","operator_1","operColl","values","map","join","valueIdx","this_1","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","cssClass","fieldModel","DropDownList","appendTo","ddlVal","getDataByValue","changeRule","itemData","dummyDropdownTreeDs","updateDropdowntreeDS","child","expanded","selectable","showClearButton","changeOnBlur","treeSettings","expandOn","dropdowntree","DropDownTree","getLabelFromColumn","parseInt","toString","index","custom","changeRuleTemplate","operVal","parentGroup","previousColumn","detach","clearQBTemplate","renderToolTip","tooltip","Tooltip","content","isSticky","position","afterClose","beforeOpen","tooltipCloseElement","validateFields","dropDownTreeObj","isValid","allowValidation","excludeOprs","fieldElem","indexElem","valArray","dropDownObj","tempElem","ruleElemCln","validateRule","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","grpId","chgrpId","childGroupID","template","groupHdr","getRuleCollection","headerFn","notifyChange","grpElement","ruleElement","format","getFormat","intl","formatDate","templateChange","updateRules","eventsArgs","grpElem","validateValue","prevOper","arrOper","grpEle","destroyControls","changeValue","contains","dateElement","rbValue","immediateModeDelay","window","clearInterval","timer","setInterval","filterValue","grID","rlID","ele","changeValueSuccessCallBack","ddl","item","popupObj","getItemData","customArgs","isInteracted","previousItemData","prevItemData","previousItem","e","previousValue","ddtElem","ddt","oldValue","dataBind","destroySubFields","subFieldElem","ddlArgs","ddlObj","changeFilter","flt","dl","rl","tmpRl","dArg","selectedField","fieldChangeSuccess","operatorElem","changeOperator","opr","selectedIndex","operatorChangeSuccess","changeRuleValues","tempRule","tooltipElem","createSubFields","nextElementSibling","remove","subFieldValue","subFilterCounter","insertBefore","ruleId","subFieldData","subField","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","_loop_2","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","popupElement","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","setRules","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","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","localeOperator","=","!=","<",">","<=",">=","not in","not between","is empty","is null","is not null","is not empty","getTypeFromColumn","l","getLabelFromField","startIdx","fieldName","subRules","lLen","grpCount","numVal","strVal","isLeftOpened","val","substring","pop","Event","Complex","NotifyPropertyChanges","Component"],"mappings":"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"}
|