@syncfusion/ej2-querybuilder 24.1.46 → 24.2.3

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.
@@ -1 +1 @@
1
- {"version":3,"file":"ej2-querybuilder.min.js","sources":["../../src/query-builder/query-builder.js"],"sourcesContent":["var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n/**\n * Query Builder Source\n */\nimport { Component, NotifyPropertyChanges, getComponent, Browser, compile, append } from '@syncfusion/ej2-base';\nimport { Property, ChildProperty, Complex, L10n, closest, extend, isNullOrUndefined, Collection, cldrData } from '@syncfusion/ej2-base';\nimport { getInstance, addClass, removeClass, rippleEffect, detach, classList } from '@syncfusion/ej2-base';\nimport { Internationalization, getUniqueID, select } from '@syncfusion/ej2-base';\nimport { Button, RadioButton } from '@syncfusion/ej2-buttons';\nimport { DropDownList, CheckBoxSelection, DropDownTree } from '@syncfusion/ej2-dropdowns';\nimport { MultiSelect } from '@syncfusion/ej2-dropdowns';\nimport { Event, EventHandler, getValue, Animation } from '@syncfusion/ej2-base';\nimport { Query, Predicate, DataManager, Deferred } from '@syncfusion/ej2-data';\nimport { TextBox, NumericTextBox } from '@syncfusion/ej2-inputs';\nimport { DatePicker } from '@syncfusion/ej2-calendars';\nimport { DropDownButton } from '@syncfusion/ej2-splitbuttons';\nimport { Tooltip, createSpinner, showSpinner, hideSpinner } from '@syncfusion/ej2-popups';\nimport { compile as templateCompiler } from '@syncfusion/ej2-base';\n/**\n * Defines the Columns of Query Builder\n */\nvar Columns = /** @class */ (function (_super) {\n __extends(Columns, _super);\n function Columns() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], Columns.prototype, \"field\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"label\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"type\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"values\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"operators\", void 0);\n __decorate([\n Property()\n ], Columns.prototype, \"ruleTemplate\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"template\", void 0);\n __decorate([\n Property({ isRequired: true, min: 0, max: Number.MAX_VALUE })\n ], Columns.prototype, \"validation\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"format\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"step\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"value\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"category\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"columns\", void 0);\n return Columns;\n}(ChildProperty));\nexport { Columns };\n/**\n * Defines the rule of Query Builder\n */\nvar Rule = /** @class */ (function (_super) {\n __extends(Rule, _super);\n function Rule() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], Rule.prototype, \"condition\", void 0);\n __decorate([\n Collection([], Rule)\n ], Rule.prototype, \"rules\", void 0);\n __decorate([\n Property(null)\n ], Rule.prototype, \"field\", void 0);\n __decorate([\n Property(null)\n ], Rule.prototype, \"label\", void 0);\n __decorate([\n Property(null)\n ], Rule.prototype, \"type\", void 0);\n __decorate([\n Property(null)\n ], Rule.prototype, \"operator\", void 0);\n __decorate([\n Property(null)\n ], Rule.prototype, \"value\", void 0);\n __decorate([\n Property(false)\n ], Rule.prototype, \"not\", void 0);\n return Rule;\n}(ChildProperty));\nexport { Rule };\n/**\n * Defines the property for value.\n */\nvar Value = /** @class */ (function (_super) {\n __extends(Value, _super);\n function Value() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], Value.prototype, \"numericTextBoxModel\", void 0);\n __decorate([\n Property(null)\n ], Value.prototype, \"multiSelectModel\", void 0);\n __decorate([\n Property(null)\n ], Value.prototype, \"datePickerModel\", void 0);\n __decorate([\n Property(null)\n ], Value.prototype, \"textBoxModel\", void 0);\n __decorate([\n Property(null)\n ], Value.prototype, \"radioButtonModel\", void 0);\n return Value;\n}(ChildProperty));\nexport { Value };\n/**\n * Defines the ruleDelete, groupInsert, and groupDelete options of Query Builder.\n */\nvar ShowButtons = /** @class */ (function (_super) {\n __extends(ShowButtons, _super);\n function ShowButtons() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(true)\n ], ShowButtons.prototype, \"ruleDelete\", void 0);\n __decorate([\n Property(true)\n ], ShowButtons.prototype, \"groupInsert\", void 0);\n __decorate([\n Property(true)\n ], ShowButtons.prototype, \"groupDelete\", void 0);\n return ShowButtons;\n}(ChildProperty));\nexport { ShowButtons };\nvar QueryBuilder = /** @class */ (function (_super) {\n __extends(QueryBuilder, _super);\n function QueryBuilder(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.isReadonly = true;\n _this.fields = { text: 'label', value: 'field' };\n _this.updatedRule = { not: false, condition: 'and' };\n _this.isLocale = false;\n _this.isRefreshed = false;\n _this.isNotified = false;\n _this.isAddSuccess = false;\n _this.isNotValueChange = false;\n _this.isFieldChange = false;\n _this.isFieldClose = false;\n _this.isDestroy = false;\n _this.isGetNestedData = false;\n _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","this_1","j","sqlIdx","operator_1","operColl","values","map","join","valueIdx","focusEventHandler","event","clickEventHandler","args","groupID","tagName","animation","Animation","duration","delay","renderSummary","summaryElem","document","getElementById","txtareaElem","animate","name","groupElem","style","display","textContent","getSqlFromRules","height","scrollHeight","actionButton","deleteRule","deleteGroup","closest","addGroupElement","mRules","extend","setGroupRules","renderSummaryCollapse","forIdValue","getAttribute","targetValue","replace","group","getGroup","ariaChecked","toggleElem","getElementsByClassName","addClass","cancel","toLowerCase","beforeSuccessCallBack","observedChangeArgs","beforeRules","getValidRules","getParentGroup","filterRules","selectBtn","showButtons","groupInsert","maxGroupCount","enableRtl","children","addRuleElement","appendRuleElem","parentId","action","ruleElem","elem","ruleListElem","select","setAttribute","ruleIdCounter","ruleTemplate","requestType","ruleID","ruleTemplateFn","templateParser","templateID","getOperators","operatorFields","isReact","isAngular","templateColl","nodeType","isVue3","append","cloneNode","renderReactTemplates","isRuleTemplate","isInitialLoad","addRuleSuccessCallBack","trgt","act","pId","isRlTmp","dropDownList","getColumn","newRule","operator","selectedColumn","passedRule","args_1","displayMode","previousElementSibling","updateAddedRule","fieldMode","ddlField","ddlValue","dataSource","placeholder","popupHeight","close","fieldClose","bind","change","changeField","open","popupOpen","fieldModel","DropDownList","appendTo","ddlVal","getDataByValue","changeRule","itemData","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","tempRule","ddlObj","changeFilter","flt","dl","rl","tmpRl","dArg","selectedField","fieldChangeSuccess","operatorElem","changeOperator","opr","selectedIndex","operatorChangeSuccess","changeRuleValues","tooltipElem","createSubFields","nextElementSibling","remove","subFieldValue","subFilterCounter","insertBefore","ruleId","subFieldData","subField","currOper","prevValue","parentElem","operatorList","oprElem","childElementCount","fieldObj","renderValues","ddlOperator","operatorModel","isField","popup","divElement","templateDestroy","templateElement","elemId","temp","templateElements","getValue","elementId","elements","getValues","original","fieldColl","dataObj","fieldStr","createNestedObject","lastIndex","k","getDistinctValues","nest","isNested","this_2","forEach","renderMultiSelect","selectedValue","ds","isFetched","isValues","fieldValue","selectedRule","multiSelectValue","dataManager","query","Query","mode","width","closePopup","actionBegin","multiSelectOpen","valueModel","multiSelectModel","multiSelectObj","DataManager","bindMultiSelectData","getMultiSelectData","dummyData","deferred","Deferred","executeQuery","multiselectObj","hideSpinner","createSpinner","showSpinner","then","actual","catch","reject","spinnerElem","Browser","isDevice","processTemplate","container","tempElements","write","setDefaultValue","isArryValue","isNumber","renderStringValue","idx","ruleValElem","selectedVal","columnData","isTemplate","isPublic","txtBox","input","textBoxModel","inputobj","TextBox","minWidth","renderNumberValue","selVal","txtInp","numericTxt","step","numericTextBoxModel","numeric","NumericTextBox","processValueString","numArr","strArr","kLen","parseDate","formatOpt","dParser","getDateParser","skeleton","renderControls","isRendered","length_1","processBoolValues","datepick","datePicker","place","formatObj","locale","getLocale","datePickerModel","DatePicker","orgValue","isCheck","radioBtn","checked","radioButtonModel","radiobutton","RadioButton","getOperatorIndex","getPreviousItemData","isRender","filtElem","getElementsByTagName","filtObj","isTempRendered","setColumnTemplate","inputLen","renderTemplate","observedActionArgs","actionBeginSuccessCallBack","Element","columnTemplateFn","valElemColl","updateValues","controlName","radioBtnObj","refresh","selectedDate","isNotTrigger","valueContainer","elementCln","i_1","i_2","ruleValueUpdate","beforeRule","afterRule","JSON","stringify","previousRule","oper","arrOperator","dupSelectedValue","parseFloat","isObject","formatOptions","findGroupByIdx","groupIdx","ruleColl","dupRuleColl","unWireEvents","portals","addRules","groups","importRules","initWrapper","trim","summaryView","notGroupRtl","readonly","enableReadonly","buttons","button","contentElem","textElem","styles","editElem","divElem","collapseElem","title","sortDirection","executeLocal","sortByDesc","sortBy","onChangeNotGroup","checkNotGroup","orgRule","onPropertyChanged","newProp","oldProp","_i","properties_1","enablePersistence","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","=","!=","<",">","<=",">=","not in","not between","is empty","is null","is not null","is not empty","localeOperator","getTypeFromColumn","l","getLabelFromField","startIdx","fieldName","subRules","lLen","grpCount","numVal","strVal","isLeftOpened","val","substring","pop","Event","Complex","NotifyPropertyChanges","Component"],"mappings":"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"}
1
+ {"version":3,"file":"ej2-querybuilder.min.js","sources":["../../src/query-builder/query-builder.js"],"sourcesContent":["var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n/**\n * Query Builder Source\n */\nimport { Component, NotifyPropertyChanges, getComponent, Browser, compile, append } from '@syncfusion/ej2-base';\nimport { Property, ChildProperty, Complex, L10n, closest, extend, isNullOrUndefined, Collection, cldrData } from '@syncfusion/ej2-base';\nimport { getInstance, addClass, removeClass, rippleEffect, detach, classList } from '@syncfusion/ej2-base';\nimport { Internationalization, getUniqueID, select } from '@syncfusion/ej2-base';\nimport { Button, RadioButton } from '@syncfusion/ej2-buttons';\nimport { DropDownList, CheckBoxSelection, DropDownTree } from '@syncfusion/ej2-dropdowns';\nimport { MultiSelect } from '@syncfusion/ej2-dropdowns';\nimport { Event, EventHandler, getValue, Animation } from '@syncfusion/ej2-base';\nimport { Query, Predicate, DataManager, Deferred } from '@syncfusion/ej2-data';\nimport { TextBox, NumericTextBox } from '@syncfusion/ej2-inputs';\nimport { DatePicker } from '@syncfusion/ej2-calendars';\nimport { DropDownButton } from '@syncfusion/ej2-splitbuttons';\nimport { Tooltip, createSpinner, showSpinner, hideSpinner } from '@syncfusion/ej2-popups';\nimport { compile as templateCompiler } from '@syncfusion/ej2-base';\n/**\n * Defines the Columns of Query Builder\n */\nvar Columns = /** @class */ (function (_super) {\n __extends(Columns, _super);\n function Columns() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], Columns.prototype, \"field\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"label\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"type\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"values\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"operators\", void 0);\n __decorate([\n Property()\n ], Columns.prototype, \"ruleTemplate\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"template\", void 0);\n __decorate([\n Property({ isRequired: true, min: 0, max: Number.MAX_VALUE })\n ], Columns.prototype, \"validation\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"format\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"step\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"value\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"category\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"columns\", void 0);\n return Columns;\n}(ChildProperty));\nexport { Columns };\n/**\n * Defines the rule of Query Builder\n */\nvar Rule = /** @class */ (function (_super) {\n __extends(Rule, _super);\n function Rule() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], Rule.prototype, \"condition\", void 0);\n __decorate([\n Collection([], Rule)\n ], Rule.prototype, \"rules\", void 0);\n __decorate([\n Property(null)\n ], Rule.prototype, \"field\", void 0);\n __decorate([\n Property(null)\n ], Rule.prototype, \"label\", void 0);\n __decorate([\n Property(null)\n ], Rule.prototype, \"type\", void 0);\n __decorate([\n Property(null)\n ], Rule.prototype, \"operator\", void 0);\n __decorate([\n Property(null)\n ], Rule.prototype, \"value\", void 0);\n __decorate([\n Property(false)\n ], Rule.prototype, \"not\", void 0);\n return Rule;\n}(ChildProperty));\nexport { Rule };\n/**\n * Defines the property for value.\n */\nvar Value = /** @class */ (function (_super) {\n __extends(Value, _super);\n function Value() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], Value.prototype, \"numericTextBoxModel\", void 0);\n __decorate([\n Property(null)\n ], Value.prototype, \"multiSelectModel\", void 0);\n __decorate([\n Property(null)\n ], Value.prototype, \"datePickerModel\", void 0);\n __decorate([\n Property(null)\n ], Value.prototype, \"textBoxModel\", void 0);\n __decorate([\n Property(null)\n ], Value.prototype, \"radioButtonModel\", void 0);\n return Value;\n}(ChildProperty));\nexport { Value };\n/**\n * Defines the ruleDelete, groupInsert, and groupDelete options of Query Builder.\n */\nvar ShowButtons = /** @class */ (function (_super) {\n __extends(ShowButtons, _super);\n function ShowButtons() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(true)\n ], ShowButtons.prototype, \"ruleDelete\", void 0);\n __decorate([\n Property(true)\n ], ShowButtons.prototype, \"groupInsert\", void 0);\n __decorate([\n Property(true)\n ], ShowButtons.prototype, \"groupDelete\", void 0);\n return ShowButtons;\n}(ChildProperty));\nexport { ShowButtons };\nvar QueryBuilder = /** @class */ (function (_super) {\n __extends(QueryBuilder, _super);\n function QueryBuilder(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.isReadonly = true;\n _this.fields = { text: 'label', value: 'field' };\n _this.updatedRule = { not: false, condition: 'and' };\n _this.isLocale = false;\n _this.isRefreshed = false;\n _this.isNotified = false;\n _this.isAddSuccess = false;\n _this.isNotValueChange = false;\n _this.isFieldChange = false;\n _this.isFieldClose = false;\n _this.isDestroy = false;\n _this.isGetNestedData = false;\n _this.isCustomOprCols = [];\n MultiSelect.Inject(CheckBoxSelection);\n return _this;\n }\n QueryBuilder.prototype.getPersistData = function () {\n return this.addOnPersist(['rule']);\n };\n /**\n * Clears the rules without root rule.\n *\n * @returns {void}.\n */\n QueryBuilder.prototype.reset = function () {\n this.isImportRules = false;\n var bodyElem = this.element.querySelector('.e-group-body');\n var inputElement = this.element.querySelectorAll('input.e-control');\n for (var i = 0, len = inputElement.length; i < len; i++) {\n if (inputElement[i].className.indexOf('e-tooltip') > -1) {\n getComponent(inputElement[i], 'tooltip').destroy();\n }\n else if (inputElement[i].parentElement.className.indexOf('e-tooltip') > -1) {\n getComponent(inputElement[i].parentElement, 'tooltip').destroy();\n }\n }\n if (bodyElem) {\n bodyElem.innerHTML = '';\n }\n else {\n var grpContainer = this.createElement('div', { attrs: { class: 'e-group-container' } });\n var grpHeader = this.createElement('div', { attrs: { class: 'e-group-header' } });\n var grpBody = this.createElement('div', { attrs: { class: 'e-group-body' } });\n grpContainer.appendChild(grpHeader).appendChild(grpBody);\n this.element.appendChild(grpContainer);\n bodyElem = this.element.querySelector('.e-group-body');\n }\n if (this.headerTemplate && this.isRoot) {\n this.element.innerHTML = '';\n this.isRoot = false;\n }\n if (this.enableNotCondition) {\n removeClass(this.element.querySelectorAll('.e-qb-toggle'), 'e-active-toggle');\n }\n bodyElem.appendChild(this.createElement('div', { attrs: { class: 'e-rule-list' } }));\n this.levelColl[this.element.id + '_group0'] = [0];\n this.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 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","this_1","j","sqlIdx","operator_1","operColl","values","map","join","valueIdx","focusEventHandler","event","clickEventHandler","args","groupID","tagName","animation","Animation","duration","delay","renderSummary","summaryElem","document","getElementById","txtareaElem","animate","name","groupElem","style","display","textContent","getSqlFromRules","height","scrollHeight","actionButton","deleteRule","deleteGroup","closest","addGroupElement","mRules","extend","setGroupRules","renderSummaryCollapse","forIdValue","getAttribute","targetValue","replace","group","getGroup","ariaChecked","toggleElem","getElementsByClassName","addClass","cancel","toLowerCase","beforeSuccessCallBack","observedChangeArgs","beforeRules","getValidRules","getParentGroup","filterRules","selectBtn","showButtons","groupInsert","maxGroupCount","enableRtl","children","addRuleElement","appendRuleElem","parentId","action","ruleElem","elem","ruleListElem","select","setAttribute","ruleIdCounter","ruleTemplate","requestType","ruleID","ruleTemplateFn","templateParser","templateID","getOperators","operatorFields","isReact","isAngular","templateColl","nodeType","isVue3","append","cloneNode","renderReactTemplates","isRuleTemplate","isInitialLoad","addRuleSuccessCallBack","trgt","act","pId","isRlTmp","dropDownList","getColumn","newRule","operator","selectedColumn","passedRule","args_1","displayMode","previousElementSibling","updateAddedRule","fieldMode","ddlField","ddlValue","dataSource","placeholder","popupHeight","close","fieldClose","bind","change","changeField","open","popupOpen","fieldModel","DropDownList","appendTo","ddlVal","getDataByValue","changeRule","itemData","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","tempRule","ddlObj","changeFilter","flt","dl","rl","tmpRl","dArg","selectedField","fieldChangeSuccess","operatorElem","changeOperator","opr","selectedIndex","operatorChangeSuccess","changeRuleValues","tooltipElem","createSubFields","nextElementSibling","remove","subFieldValue","subFilterCounter","insertBefore","ruleId","subFieldData","subField","currOper","prevValue","parentElem","operatorList","oprElem","childElementCount","fieldObj","renderValues","ddlOperator","operatorModel","isField","popup","divElement","templateDestroy","templateElement","elemId","temp","templateElements","getValue","elementId","elements","getValues","original","fieldColl","dataObj","fieldStr","createNestedObject","lastIndex","k","getDistinctValues","nest","isNested","this_2","forEach","renderMultiSelect","selectedValue","ds","isFetched","isValues","fieldValue","selectedRule","multiSelectValue","dataManager","query","Query","mode","width","closePopup","actionBegin","multiSelectOpen","valueModel","multiSelectModel","multiSelectObj","DataManager","bindMultiSelectData","getMultiSelectData","dummyData","deferred","Deferred","executeQuery","multiselectObj","hideSpinner","createSpinner","showSpinner","then","actual","catch","reject","spinnerElem","Browser","isDevice","processTemplate","container","tempElements","write","setDefaultValue","isArryValue","isNumber","renderStringValue","idx","ruleValElem","selectedVal","columnData","isTemplate","isPublic","txtBox","input","textBoxModel","inputobj","TextBox","minWidth","renderNumberValue","selVal","txtInp","numericTxt","step","numericTextBoxModel","numeric","NumericTextBox","processValueString","numArr","strArr","kLen","parseDate","formatOpt","dParser","getDateParser","skeleton","renderControls","isRendered","length_1","processBoolValues","datepick","datePicker","place","formatObj","locale","getLocale","datePickerModel","DatePicker","orgValue","isCheck","radioBtn","checked","radioButtonModel","radiobutton","RadioButton","getOperatorIndex","getPreviousItemData","isRender","filtElem","getElementsByTagName","filtObj","isTempRendered","setColumnTemplate","inputLen","renderTemplate","observedActionArgs","actionBeginSuccessCallBack","Element","columnTemplateFn","valElemColl","updateValues","controlName","radioBtnObj","refresh","selectedDate","isNotTrigger","valueContainer","elementCln","i_1","i_2","ruleValueUpdate","beforeRule","afterRule","JSON","stringify","previousRule","oper","arrOperator","dupSelectedValue","parseFloat","isObject","formatOptions","findGroupByIdx","groupIdx","ruleColl","dupRuleColl","unWireEvents","portals","addRules","groups","importRules","initWrapper","trim","summaryView","notGroupRtl","readonly","enableReadonly","buttons","button","contentElem","textElem","styles","editElem","divElem","collapseElem","title","sortDirection","executeLocal","sortByDesc","sortBy","onChangeNotGroup","checkNotGroup","orgRule","onPropertyChanged","newProp","oldProp","_i","properties_1","enablePersistence","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","=","!=","<",">","<=",">=","not in","not between","is empty","is null","is not null","is not empty","localeOperator","getTypeFromColumn","l","getLabelFromField","startIdx","fieldName","subRules","lLen","grpCount","numVal","strVal","isLeftOpened","val","substring","pop","Event","Complex","NotifyPropertyChanges","Component"],"mappings":"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"}