@syncfusion/ej2-querybuilder 21.2.3 → 21.2.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +6 -0
- package/dist/ej2-querybuilder.min.js +2 -2
- package/dist/ej2-querybuilder.umd.min.js +2 -2
- package/dist/ej2-querybuilder.umd.min.js.map +1 -1
- package/dist/es6/ej2-querybuilder.es2015.js +28 -5
- package/dist/es6/ej2-querybuilder.es2015.js.map +1 -1
- package/dist/es6/ej2-querybuilder.es5.js +28 -5
- package/dist/es6/ej2-querybuilder.es5.js.map +1 -1
- package/dist/global/ej2-querybuilder.min.js +2 -2
- package/dist/global/ej2-querybuilder.min.js.map +1 -1
- package/dist/global/index.d.ts +1 -1
- package/package.json +12 -9
- package/src/query-builder/query-builder-model.d.ts +1 -1
- package/src/query-builder/query-builder.js +28 -5
|
@@ -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 } from '@syncfusion/ej2-base';\nimport { Property, ChildProperty, Complex, L10n, closest, extend, isNullOrUndefined, Collection, cldrData } from '@syncfusion/ej2-base';\nimport { getInstance, addClass, removeClass, rippleEffect, detach, classList } from '@syncfusion/ej2-base';\nimport { Internationalization, getUniqueID, select } from '@syncfusion/ej2-base';\nimport { Button, RadioButton } from '@syncfusion/ej2-buttons';\nimport { DropDownList, CheckBoxSelection, DropDownTree } from '@syncfusion/ej2-dropdowns';\nimport { MultiSelect } from '@syncfusion/ej2-dropdowns';\nimport { Event, EventHandler, getValue, Animation } from '@syncfusion/ej2-base';\nimport { Query, Predicate, DataManager, Deferred } from '@syncfusion/ej2-data';\nimport { TextBox, NumericTextBox } from '@syncfusion/ej2-inputs';\nimport { DatePicker } from '@syncfusion/ej2-calendars';\nimport { DropDownButton } from '@syncfusion/ej2-splitbuttons';\nimport { Tooltip, createSpinner, showSpinner, hideSpinner } from '@syncfusion/ej2-popups';\nimport { compile as templateCompiler } from '@syncfusion/ej2-base';\n/**\n * Defines the Columns of Query Builder\n */\nvar Columns = /** @class */ (function (_super) {\n __extends(Columns, _super);\n function Columns() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], Columns.prototype, \"field\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"label\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"type\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"values\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"operators\", void 0);\n __decorate([\n Property()\n ], Columns.prototype, \"ruleTemplate\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"template\", void 0);\n __decorate([\n Property({ isRequired: true, min: 0, max: Number.MAX_VALUE })\n ], Columns.prototype, \"validation\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"format\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"step\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"value\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"category\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"columns\", void 0);\n return Columns;\n}(ChildProperty));\nexport { Columns };\n/**\n * Defines the rule of Query Builder\n */\nvar Rule = /** @class */ (function (_super) {\n __extends(Rule, _super);\n function Rule() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], Rule.prototype, \"condition\", void 0);\n __decorate([\n Collection([], Rule)\n ], Rule.prototype, \"rules\", void 0);\n __decorate([\n Property(null)\n ], Rule.prototype, \"field\", void 0);\n __decorate([\n Property(null)\n ], Rule.prototype, \"label\", void 0);\n __decorate([\n Property(null)\n ], Rule.prototype, \"type\", void 0);\n __decorate([\n Property(null)\n ], Rule.prototype, \"operator\", void 0);\n __decorate([\n Property(null)\n ], Rule.prototype, \"value\", void 0);\n __decorate([\n Property(false)\n ], Rule.prototype, \"not\", void 0);\n return Rule;\n}(ChildProperty));\nexport { Rule };\n/**\n * Defines the property for value.\n */\nvar Value = /** @class */ (function (_super) {\n __extends(Value, _super);\n function Value() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], Value.prototype, \"numericTextBoxModel\", void 0);\n __decorate([\n Property(null)\n ], Value.prototype, \"multiSelectModel\", void 0);\n __decorate([\n Property(null)\n ], Value.prototype, \"datePickerModel\", void 0);\n __decorate([\n Property(null)\n ], Value.prototype, \"textBoxModel\", void 0);\n __decorate([\n Property(null)\n ], Value.prototype, \"radioButtonModel\", void 0);\n return Value;\n}(ChildProperty));\nexport { Value };\n/**\n * Defines the ruleDelete, groupInsert, and groupDelete options of Query Builder.\n */\nvar ShowButtons = /** @class */ (function (_super) {\n __extends(ShowButtons, _super);\n function ShowButtons() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(true)\n ], ShowButtons.prototype, \"ruleDelete\", void 0);\n __decorate([\n Property(true)\n ], ShowButtons.prototype, \"groupInsert\", void 0);\n __decorate([\n Property(true)\n ], ShowButtons.prototype, \"groupDelete\", void 0);\n return ShowButtons;\n}(ChildProperty));\nexport { ShowButtons };\nvar QueryBuilder = /** @class */ (function (_super) {\n __extends(QueryBuilder, _super);\n function QueryBuilder(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.isReadonly = true;\n _this.fields = { text: 'label', value: 'field' };\n _this.updatedRule = { not: false, condition: 'and' };\n _this.isLocale = false;\n _this.isRefreshed = false;\n _this.isNotified = false;\n _this.isAddSuccess = false;\n _this.isNotValueChange = false;\n _this.isFieldChange = false;\n _this.isFieldClose = false;\n _this.isDestroy = false;\n _this.isGetNestedData = false;\n MultiSelect.Inject(CheckBoxSelection);\n return _this;\n }\n QueryBuilder.prototype.getPersistData = function () {\n return this.addOnPersist(['rule']);\n };\n /**\n * Clears the rules without root rule.\n *\n * @returns {void}.\n */\n QueryBuilder.prototype.reset = function () {\n this.isImportRules = false;\n var bodyElem = this.element.querySelector('.e-group-body');\n var inputElement = this.element.querySelectorAll('input.e-control');\n for (var i = 0, len = inputElement.length; i < len; i++) {\n if (inputElement[i].className.indexOf('e-tooltip') > -1) {\n getComponent(inputElement[i], 'tooltip').destroy();\n }\n else if (inputElement[i].parentElement.className.indexOf('e-tooltip') > -1) {\n getComponent(inputElement[i].parentElement, 'tooltip').destroy();\n }\n }\n if (bodyElem) {\n bodyElem.innerHTML = '';\n }\n else {\n var grpContainer = this.createElement('div', { attrs: { class: 'e-group-container' } });\n var grpHeader = this.createElement('div', { attrs: { class: 'e-group-header' } });\n var grpBody = this.createElement('div', { attrs: { class: 'e-group-body' } });\n grpContainer.appendChild(grpHeader).appendChild(grpBody);\n this.element.appendChild(grpContainer);\n bodyElem = this.element.querySelector('.e-group-body');\n }\n if (this.headerTemplate && this.isRoot) {\n this.element.innerHTML = '';\n this.isRoot = false;\n }\n if (this.enableNotCondition) {\n removeClass(this.element.querySelectorAll('.e-qb-toggle'), 'e-active-toggle');\n }\n bodyElem.appendChild(this.createElement('div', { attrs: { class: 'e-rule-list' } }));\n this.levelColl[this.element.id + '_group0'] = [0];\n this.rule = { condition: 'and', not: false, rules: [] };\n this.disableRuleCondition(bodyElem.parentElement);\n };\n QueryBuilder.prototype.getWrapper = function () {\n return this.element;\n };\n QueryBuilder.prototype.getModuleName = function () {\n return 'query-builder';\n };\n QueryBuilder.prototype.GetRootColumnName = function (field) {\n return this.separator ? field.split(this.separator)[0] : field;\n };\n QueryBuilder.prototype.initialize = function () {\n if (this.dataColl.length) {\n var columnKeys = Object.keys(this.dataColl[0]);\n var cols = [];\n var categories = [];\n var type = void 0;\n var groupBy = false;\n var isDate = false;\n var value = void 0;\n var validateObj = { isRequired: true, min: 0, max: Number.MAX_VALUE };\n if (this.columns.length) {\n this.columnSort();\n var columns = this.columns;\n for (var i = 0, len = columns.length; i < len; i++) {\n this.updateCustomOperator(columns[i]);\n if (!columns[i].type) {\n if (columnKeys.indexOf(columns[i].field) > -1) {\n value = this.dataColl[0][columns[i].field];\n type = typeof value;\n if (type === 'string') {\n isDate = !isNaN(Date.parse(value));\n }\n else if (type === 'object') {\n isDate = value instanceof Date && !isNaN(value.getTime());\n type = 'string';\n }\n columns[i].type = type;\n isDate = false;\n }\n type = 'string';\n }\n if (!columns[i].validation) {\n columns[i].validation = validateObj;\n }\n if (columns[i].category) {\n groupBy = true;\n }\n else {\n columns[i].category = this.l10n.getConstant('OtherFields');\n }\n if (categories.indexOf(columns[i].category) < 0) {\n categories.push(columns[i].category);\n }\n if (!columns[i].operators || this.isLocale) {\n columns[i].operators = this.customOperators[columns[i].type + 'Operator'];\n }\n }\n if (groupBy && (categories.length > 1 || categories[0] !== this.l10n.getConstant('OtherFields'))) {\n this.fields = { text: 'label', value: 'field', groupBy: 'category' };\n }\n this.updateSubFieldsFromColumns(this.columns);\n }\n else {\n for (var i = 0, len = columnKeys.length; i < len; i++) {\n value = this.dataColl[0][columnKeys[i]];\n type = typeof value;\n if (type === 'string') {\n isDate = !isNaN(Date.parse(value));\n }\n else if (type === 'object' && !Object.keys(value).length) {\n isDate = value instanceof Date && !isNaN(value.getTime());\n type = 'string';\n }\n cols[i] = { 'field': columnKeys[i], 'label': columnKeys[i], 'type': isDate ? 'date' : type,\n 'validation': validateObj };\n isDate = false;\n cols[i].operators = this.customOperators[cols[i].type + 'Operator'];\n if (type === 'object') {\n this.updateSubFields(value, cols[i]);\n }\n }\n this.columns = cols;\n }\n }\n else if (this.columns.length) {\n var columns = this.columns;\n for (var i = 0, len = columns.length; i < len; i++) {\n if (columns[i].category) {\n this.fields = { text: 'label', value: 'field', groupBy: 'category' };\n }\n else {\n columns[i].category = this.l10n.getConstant('OtherFields');\n }\n this.updateCustomOperator(columns[i]);\n if (!columns[i].operators || this.isLocale) {\n columns[i].operators = this.customOperators[columns[i].type + 'Operator'];\n }\n }\n this.updateSubFieldsFromColumns(this.columns);\n }\n this.trigger('dataBound', { type: 'dataBound' });\n };\n QueryBuilder.prototype.updateSubFieldsFromColumns = function (col, field) {\n for (var i = 0; i < col.length; i++) {\n if (this.separator !== '' && col[i].field.indexOf(this.separator) < 0) {\n col[i].field = field ? field + this.separator + col[i].field : col[i].field;\n }\n if (col[i].operators) {\n this.updateCustomOperator(col[i]);\n }\n else if (col[i].type && col[i].type !== 'object') {\n col[i].operators = this.customOperators[col[i].type + 'Operator'];\n }\n if (col[i].columns) {\n col[i].type = 'object';\n this.updateSubFieldsFromColumns(col[i].columns, col[i].field);\n }\n }\n };\n QueryBuilder.prototype.updateSubFields = function (value, col, data) {\n var sampCol;\n col.columns = [];\n var columnKeys = Object.keys(value);\n var field;\n var label;\n var type;\n var result;\n data = data ? data : this.dataColl[0];\n for (var i = 0, len = columnKeys.length; i < len; i++) {\n var compField = col.field.split('.');\n if (data) {\n result = data[compField[compField.length - 1]][columnKeys[i]];\n }\n else {\n result = this.dataColl[0][col.field][columnKeys[i]];\n }\n var resData = data[col.field.split(this.separator)[col.field.split(this.separator).length - 1]];\n type = typeof result;\n field = col.field + this.separator + columnKeys[i];\n label = columnKeys[i];\n type = (type === 'object' && !isNaN(Date.parse(result))) ? 'date' : type;\n sampCol = { field: field, label: label, type: type };\n if (type !== 'object') {\n sampCol.operators = this.customOperators[type + 'Operator'];\n }\n col.columns.push(sampCol);\n if (type === 'object') {\n this.updateSubFields(result, sampCol, resData);\n }\n }\n };\n QueryBuilder.prototype.updateCustomOperator = function (column) {\n if (column.operators) {\n var _loop_1 = function (j) {\n var sqlIdx = Object.keys(column.operators[j]).indexOf('sqlOperator');\n if (sqlIdx > -1) {\n var operator_1 = column.operators[j];\n var operColl = Object.keys(operator_1);\n var values = operColl.map(function (key) { return operator_1[\"\" + key]; }).join(',').split(',');\n var valueIdx = operColl.indexOf('value');\n this_1.operators[values[valueIdx]] = values[sqlIdx];\n }\n };\n var this_1 = this;\n for (var j = 0; j < column.operators.length; j++) {\n _loop_1(j);\n }\n }\n };\n QueryBuilder.prototype.focusEventHandler = function (event) {\n this.target = event.target;\n };\n QueryBuilder.prototype.clickEventHandler = function (event) {\n var _this = this;\n var target = event.target;\n var args;\n this.isImportRules = false;\n var groupID;\n if (target.tagName === 'SPAN') {\n target = target.parentElement;\n }\n if (target.className.indexOf('e-collapse-rule') > -1) {\n var animation = new Animation({ duration: 1000, delay: 0 });\n if (this.element.querySelectorAll('.e-summary-content').length < 1) {\n this.renderSummary();\n }\n var summaryElem = document.getElementById(this.element.id + '_summary_content');\n var txtareaElem = summaryElem.querySelector('.e-summary-text');\n animation.animate('.e-query-builder', { name: 'SlideLeftIn' });\n var groupElem = this.element.querySelector('.e-group-container');\n groupElem.style.display = 'none';\n txtareaElem.textContent = this.getSqlFromRules(this.rule);\n summaryElem.style.display = 'block';\n txtareaElem.style.height = txtareaElem.scrollHeight + 'px';\n }\n if (target.tagName === 'BUTTON' && target.className.indexOf('e-qb-toggle') < 0) {\n if (target.className.indexOf('e-removerule') > -1) {\n this.actionButton = target;\n this.deleteRule(target);\n }\n else if (target.className.indexOf('e-deletegroup') > -1) {\n this.actionButton = target;\n this.deleteGroup(closest(target, '.e-group-container'));\n }\n else if (target.className.indexOf('e-edit-rule') > -1) {\n var animation = new Animation({ duration: 1000, delay: 0 });\n animation.animate('.e-query-builder', { name: 'SlideLeftIn' });\n document.getElementById(this.element.id + '_summary_content').style.display = 'none';\n if (this.element.querySelectorAll('.e-group-container').length < 1) {\n this.addGroupElement(false, this.element, this.rule.condition, false, this.rule.not);\n var mRules = extend({}, this.rule, {}, true);\n this.setGroupRules(mRules);\n this.renderSummaryCollapse();\n }\n else {\n var groupElem = this.element.querySelector('.e-group-container');\n if (groupElem.querySelectorAll('.e-collapse-rule').length < 1) {\n this.renderSummaryCollapse();\n }\n groupElem.style.display = 'block';\n }\n }\n }\n else if ((target.tagName === 'LABEL' && target.parentElement.className.indexOf('e-btn-group') > -1) ||\n target.className.indexOf('e-qb-toggle') > -1) {\n var element = closest(target, '.e-group-container');\n if (!this.headerTemplate) {\n var forIdValue = target.getAttribute('for');\n var targetValue = void 0;\n if (forIdValue) {\n targetValue = document.getElementById(forIdValue).getAttribute('value');\n }\n groupID = element.id.replace(this.element.id + '_', '');\n var group = this.getGroup(groupID);\n var ariaChecked = void 0;\n if (this.enableNotCondition) {\n if (target.className.indexOf('e-qb-toggle') > -1) {\n var toggleElem = element.getElementsByClassName('e-qb-toggle')[0];\n if (toggleElem.className.indexOf('e-active-toggle') > -1) {\n removeClass([toggleElem], 'e-active-toggle');\n ariaChecked = false;\n }\n else {\n addClass([toggleElem], 'e-active-toggle');\n ariaChecked = true;\n }\n targetValue = group.condition;\n }\n else {\n ariaChecked = group.not;\n }\n }\n args = { groupID: groupID, cancel: false, type: 'condition', value: targetValue.toLowerCase() };\n if (this.enableNotCondition) {\n args = { groupID: groupID, cancel: false, type: 'condition', value: targetValue.toLowerCase(),\n 'not': ariaChecked };\n }\n }\n if (!this.isImportRules) {\n this.trigger('beforeChange', args, function (observedChangeArgs) {\n _this.beforeSuccessCallBack(observedChangeArgs, target);\n });\n }\n else {\n this.beforeSuccessCallBack(args, target);\n }\n this.target = target;\n }\n };\n QueryBuilder.prototype.beforeSuccessCallBack = function (args, target) {\n if (!args.cancel) {\n var element = closest(target, '.e-group-container');\n var groupID = element.id.replace(this.element.id + '_', '');\n var beforeRules = this.getValidRules(this.rule);\n var rule = this.getParentGroup(element);\n rule.condition = args.value;\n if (this.enableNotCondition) {\n rule.not = args.not;\n }\n if (!this.isImportRules) {\n this.trigger('change', { groupID: groupID, type: 'condition', value: rule.condition });\n }\n this.filterRules(beforeRules, this.getValidRules(this.rule), 'condition');\n }\n };\n QueryBuilder.prototype.selectBtn = function (target, event) {\n if (event.name === 'beforeOpen') {\n if (this.showButtons.groupInsert || isNullOrUndefined(this.showButtons.groupInsert)) {\n if (this.element.querySelectorAll('.e-group-container').length >= this.maxGroupCount + 1) {\n addClass([event.element.querySelector('li span.e-addgroup').parentElement], 'e-button-hide');\n }\n else {\n removeClass([event.element.querySelector('li span.e-addgroup').parentElement], 'e-button-hide');\n }\n if (this.enableRtl) {\n addClass([event.element.querySelector('li').parentElement], 'e-rtl');\n }\n }\n else {\n addClass([event.element.querySelector('li span.e-addgroup').parentElement], 'e-button-hide');\n }\n }\n else if (event.element.children[0].className.indexOf('e-addrule') > -1) {\n this.addRuleElement(closest(target, '.e-group-container'), {});\n }\n else if (event.element.children[0].className.indexOf('e-addgroup') > -1) {\n this.addGroupElement(true, closest(target, '.e-group-container'), '', true);\n }\n };\n QueryBuilder.prototype.appendRuleElem = function (target, column, type, parentId, action, rule) {\n var ruleElem;\n var elem;\n var ruleListElem = target.querySelector('.e-rule-list');\n var args;\n if (type === 'change') {\n ruleElem = select('#' + parentId, target);\n }\n else {\n ruleElem = this.createElement('div', { attrs: { class: 'e-rule-container' } });\n ruleElem.setAttribute('id', target.id + '_rule' + this.ruleIdCounter);\n ruleListElem.appendChild(ruleElem);\n this.ruleIdCounter++;\n }\n if (column && column.ruleTemplate && rule) {\n args = { requestType: 'template-initialize', ruleID: ruleElem.id, action: action, fields: this.fields, rule: rule };\n this.trigger('actionBegin', args);\n this.ruleTemplateFn = this.templateParser(column.ruleTemplate);\n var templateID = this.element.id + column.field;\n var template = void 0;\n args.fields = this.fields;\n args.columns = this.columns;\n if (rule.field === '') {\n rule.field = column.field;\n }\n args.operators = this.getOperators(rule.field);\n args.operatorFields = { text: 'key', value: 'value' };\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.isReact) {\n template = this.ruleTemplateFn(args, this, ruleElem.id, templateID)[0];\n // 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 }\n else {\n template = this.ruleTemplateFn(args, this, 'Template', templateID)[0];\n }\n elem = template;\n elem.className += ' e-rule-field';\n }\n else {\n elem = this.ruleElem.querySelector('.e-rule-field').cloneNode(true);\n }\n ruleElem.appendChild(elem);\n if (column && column.ruleTemplate && rule) {\n this.renderReactTemplates();\n }\n return ruleElem;\n };\n QueryBuilder.prototype.addRuleElement = function (target, rule, column, action, parentId, isRuleTemplate) {\n var _this = this;\n if (!target) {\n return;\n }\n var args = { groupID: target.id.replace(this.element.id + '_', ''), cancel: false, type: 'insertRule' };\n if (!this.isImportRules && !this.isInitialLoad) {\n this.trigger('beforeChange', args, function (observedChangeArgs) {\n _this.addRuleSuccessCallBack(observedChangeArgs, target, rule, column, action, parentId, isRuleTemplate);\n });\n }\n else {\n this.isInitialLoad = false;\n this.addRuleSuccessCallBack(args, target, rule, column, action, parentId, isRuleTemplate);\n }\n };\n QueryBuilder.prototype.addRuleSuccessCallBack = function (args, trgt, rule, col, act, pId, isRlTmp) {\n var height = (this.element.className.indexOf('e-device') > -1) ? '250px' : '200px';\n var ruleID;\n var column = (rule && rule.field) ? this.getColumn(rule.field) : col ? col : this.columns[0];\n var operators;\n var dropDownList;\n var ruleElem;\n var newRule = { 'label': '', 'field': '', 'type': '', 'operator': '' };\n if (!args.cancel) {\n if (column && column.ruleTemplate && rule.field) {\n this.selectedColumn = column;\n operators = this.selectedColumn.operators;\n newRule = { 'label': column.label, 'field': column.field, 'type': column.type, 'operator': operators[0].value };\n var passedRule = Object.keys(rule).length ? rule : newRule;\n ruleElem = this.appendRuleElem(trgt, column, act, pId, 'field', passedRule);\n var args_1 = { requestType: 'template-create', action: 'insert-rule', ruleID: ruleElem.id,\n fields: this.fields, rule: passedRule };\n this.trigger('actionBegin', args_1);\n }\n else {\n ruleElem = this.appendRuleElem(trgt, column, act, pId, 'field');\n ruleElem.querySelector('.e-filter-input').setAttribute('id', ruleElem.id + '_filterkey');\n var element = ruleElem.querySelector('button');\n if (this.element.className.indexOf('e-device') > -1 || this.displayMode === 'Vertical') {\n element.textContent = this.l10n.getConstant('Remove');\n addClass([element], 'e-flat');\n addClass([element], 'e-primary');\n }\n else {\n addClass([element], 'e-round');\n addClass([element], 'e-icon-btn');\n element.setAttribute('title', this.l10n.getConstant('DeleteRule'));\n element = this.createElement('span', { attrs: { class: 'e-btn-icon e-icons e-delete-icon' } });\n ruleElem.querySelector('button').appendChild(element);\n }\n }\n if (this.displayMode === 'Vertical' || this.element.className.indexOf('e-device') > -1) {\n ruleElem.className = 'e-rule-container e-vertical-mode';\n }\n else {\n ruleElem.className = 'e-rule-container e-horizontal-mode';\n }\n if (ruleElem.previousElementSibling && ruleElem.previousElementSibling.className.indexOf('e-rule-container') > -1) {\n if (ruleElem.className.indexOf('e-joined-rule') < 0) {\n ruleElem.className += ' e-joined-rule';\n }\n if (ruleElem.previousElementSibling.className.indexOf('e-prev-joined-rule') < 0) {\n ruleElem.previousElementSibling.className += ' e-prev-joined-rule';\n }\n }\n if (ruleElem.previousElementSibling && ruleElem.previousElementSibling.className.indexOf('e-group-container') > -1 &&\n ruleElem.className.indexOf('e-separate-rule') < 0) {\n ruleElem.className += ' e-separate-rule';\n }\n if (!this.isImportRules) {\n this.updateAddedRule(trgt, rule, newRule, isRlTmp, pId);\n }\n if (!column || (column && !column.ruleTemplate) || !rule.field) {\n if (this.fieldMode === 'Default') {\n var ddlField = void 0;\n var ddlValue = void 0;\n if (this.separator && rule.field) {\n ddlValue = this.GetRootColumnName(rule.field);\n }\n else {\n ddlValue = this.isImportRules ? this.GetRootColumnName(rule.field) : rule.field;\n }\n ddlField = {\n dataSource: this.columns,\n fields: this.fields, placeholder: this.l10n.getConstant('SelectField'),\n popupHeight: ((this.columns.length > 5) ? height : 'auto'), close: this.fieldClose.bind(this, ruleElem.id + '_filterkey'),\n change: this.changeField.bind(this), value: rule ? ddlValue : null, open: this.popupOpen.bind(this, true)\n };\n if (this.fieldModel) {\n ddlField = __assign({}, ddlField, this.fieldModel);\n }\n dropDownList = new DropDownList(ddlField);\n dropDownList.appendTo('#' + ruleElem.id + '_filterkey');\n var ddlVal = void 0;\n if (this.separator && rule.field) {\n ddlVal = this.GetRootColumnName(rule.field);\n }\n else {\n ddlVal = this.isImportRules ? this.GetRootColumnName(rule.field) : dropDownList.value;\n }\n this.selectedColumn = dropDownList.getDataByValue(ddlVal);\n if (Object.keys(rule).length) {\n this.changeRule(rule, {\n element: dropDownList.element, itemData: this.selectedColumn\n });\n }\n }\n else {\n var ddlField = void 0;\n var ddlValue = this.isImportRules ? rule.field : rule.field;\n ddlField = {\n fields: { dataSource: this.columns,\n value: 'field', text: 'label', child: 'columns', expanded: 'expanded' },\n placeholder: this.l10n.getConstant('SelectField'), showClearButton: false,\n popupHeight: ((this.columns.length > 5) ? height : 'auto'), changeOnBlur: false,\n change: this.changeField.bind(this), value: !isNullOrUndefined(ddlValue) ? [ddlValue] : null,\n open: this.popupOpen.bind(this, false)\n };\n if (this.fieldModel) {\n ddlField = __assign({}, ddlField, this.fieldModel);\n }\n var dropdowntree = new DropDownTree(ddlField);\n dropdowntree.appendTo('#' + ruleElem.id + '_filterkey');\n if (!isNullOrUndefined(dropdowntree.value)) {\n var value = this.getLabelFromColumn(dropdowntree.value[0]);\n dropdowntree.element.value = value;\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var ddlVal = !isNullOrUndefined(rule.field) ?\n this.GetRootColumnName(rule.field) : dropdowntree.value;\n this.selectedColumn = this.getColumn(ddlVal);\n if (Object.keys(rule).length) {\n this.changeRule(rule, {\n element: dropdowntree.element, itemData: this.selectedColumn\n });\n }\n }\n }\n ruleID = ruleElem.id.replace(this.element.id + '_', '');\n if (!this.isImportRules) {\n this.trigger('change', { groupID: trgt.id.replace(this.element.id + '_', ''), ruleID: ruleID, type: 'insertRule' });\n }\n }\n };\n QueryBuilder.prototype.updateAddedRule = function (target, rule, newRule, isRuleTemplate, pId) {\n var ruleElem;\n var index = 0;\n var groupElem;\n var rules;\n if (isRuleTemplate) {\n ruleElem = select('#' + pId, target);\n groupElem = closest(target, '.e-group-container');\n rules = this.getParentGroup(groupElem);\n while (ruleElem && ruleElem.previousElementSibling !== null) {\n ruleElem = ruleElem.previousElementSibling;\n index++;\n }\n rules.rules[index] = rule;\n }\n else {\n groupElem = closest(target, '.e-group-container');\n rules = this.getParentGroup(groupElem);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var custom = rule.custom;\n if (Object.keys(rule).length) {\n rules.rules.push({\n 'field': rule.field, 'type': rule.type, 'label': rule.label, 'operator': rule.operator, value: rule.value\n });\n if (custom) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n rules.rules[rules.rules.length - 1].custom = custom;\n }\n }\n else {\n if (custom) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n newRule.custom = custom;\n }\n rules.rules.push(newRule);\n }\n }\n this.disableRuleCondition(target, rules);\n };\n QueryBuilder.prototype.changeRuleTemplate = function (column, element) {\n var operVal = this.selectedColumn.operators;\n if (column.ruleTemplate) {\n return;\n }\n else {\n var parentGroup = closest(element, '.e-group-container');\n var parentId = closest(element, '.e-rule-container').id;\n if (this.previousColumn && this.previousColumn.ruleTemplate) {\n detach(element.closest('[id=\"' + parentId + '\"]').querySelector('.e-rule-field'));\n this.clearQBTemplate([parentId]);\n }\n if (column) {\n var rule = { field: column.field, label: column.label, operator: operVal[0].value, value: '' };\n this.addRuleElement(parentGroup, rule, column, 'change', parentId, true);\n }\n }\n };\n QueryBuilder.prototype.renderToolTip = function (element) {\n var tooltip = new Tooltip({ content: this.l10n.getConstant('ValidationMessage'),\n position: 'BottomCenter', cssClass: 'e-querybuilder-error' });\n tooltip.appendTo(element);\n tooltip.open(element);\n };\n /**\n * Validate the conditions and it display errors for invalid fields.\n *\n * @returns {boolean} - Validation\n */\n QueryBuilder.prototype.validateFields = function () {\n var isValid = true;\n var dropDownTreeObj;\n if (this.allowValidation) {\n var excludeOprs = ['isnull', 'isnotnull', 'isempty', 'isnotempty'];\n var i = void 0;\n var len = void 0;\n var fieldElem = void 0;\n var indexElem = void 0;\n var valArray = [];\n var groupElem = void 0;\n var index = void 0;\n var dropDownObj = void 0;\n var tempElem = void 0;\n var rule = void 0;\n var ruleElemCln = this.element.querySelectorAll('.e-rule-container');\n for (i = 0, len = ruleElemCln.length; i < len; i++) {\n var validateRule = void 0;\n groupElem = closest(ruleElemCln[i], '.e-group-container');\n rule = this.getParentGroup(groupElem);\n index = 0;\n indexElem = tempElem = ruleElemCln[i];\n if (this.fieldMode === 'DropdownTree') {\n dropDownTreeObj = getComponent(ruleElemCln[i].querySelector('.e-rule-filter input.e-dropdowntree'), 'dropdowntree');\n if (dropDownTreeObj && dropDownTreeObj.value && dropDownTreeObj.value.length) {\n this.selectedColumn = this.getColumn(dropDownTreeObj.value[0]);\n validateRule = this.selectedColumn.validation;\n }\n }\n else {\n dropDownObj = getComponent(ruleElemCln[i].querySelector('.e-rule-filter input.e-dropdownlist'), 'dropdownlist');\n if (dropDownObj && dropDownObj.value) {\n this.selectedColumn = dropDownObj.getDataByValue(dropDownObj.value);\n validateRule = !isNullOrUndefined(dropDownObj.index) && this.selectedColumn.validation;\n }\n }\n fieldElem = tempElem.querySelector('.e-rule-field input.e-control');\n if (validateRule && validateRule.isRequired) {\n while (indexElem && indexElem.previousElementSibling !== null) {\n indexElem = indexElem.previousElementSibling;\n index++;\n }\n fieldElem = tempElem.querySelector('.e-rule-operator .e-control');\n if (!rule.rules[index].operator) {\n if (fieldElem.parentElement.className.indexOf('e-tooltip') < 0) {\n this.renderToolTip(fieldElem.parentElement);\n }\n isValid = false;\n }\n if (rule.rules[index].value instanceof Array) {\n valArray = rule.rules[index].value;\n }\n if (excludeOprs.indexOf(rule.rules[index].operator) < 0 &&\n (isNullOrUndefined(rule.rules[index].value) &&\n rule.rules[index].type !== 'date') || rule.rules[index].value === '' ||\n (rule.rules[index].value instanceof Array && valArray.length < 1)) {\n var valElem = tempElem.querySelectorAll('.e-rule-value .e-control');\n isValid = false;\n for (var j = 0, jLen = valElem.length; j < jLen; j++) {\n var element = valElem[j];\n var elem = void 0;\n if (element.parentElement.className.indexOf('e-searcher') > -1) {\n elem = closest(element, '.e-multi-select-wrapper');\n if (elem.className.indexOf('e-tooltip') < 0) {\n this.renderToolTip(elem);\n }\n }\n else if (valElem[j].parentElement.className.indexOf('e-tooltip') < 0 && valElem[j].className.indexOf('e-tooltip') < 0) {\n this.renderToolTip(valElem[j].parentElement);\n }\n j++;\n }\n }\n }\n else if ((dropDownObj && dropDownObj.element && isNullOrUndefined(dropDownObj.index)) ||\n (dropDownTreeObj && dropDownTreeObj.element && (isNullOrUndefined(dropDownTreeObj.value) ||\n dropDownTreeObj.value.length < 1))) {\n if (fieldElem.parentElement.className.indexOf('e-tooltip') < 0) {\n this.renderToolTip(fieldElem.parentElement);\n }\n isValid = false;\n }\n }\n }\n return isValid;\n };\n QueryBuilder.prototype.refreshLevelColl = function () {\n this.levelColl = {};\n var groupElem = this.element.querySelector('.e-group-container');\n if (groupElem) {\n this.levelColl[groupElem.id] = [0];\n var obj = { groupElement: groupElem, level: [0] };\n this.refreshLevel(obj);\n }\n };\n QueryBuilder.prototype.refreshLevel = function (obj) {\n var ruleList = obj.groupElement.querySelector('.e-rule-list').children;\n var childElem;\n var groupElem = obj.groupElement;\n var i;\n var iLen = ruleList.length;\n var groupCount = 0;\n for (i = 0; i < iLen; i++) {\n childElem = ruleList[i];\n if (childElem.className.indexOf('e-group-container') > -1) {\n obj.level.push(groupCount);\n this.levelColl[childElem.id] = obj.level.slice();\n groupCount++;\n obj.groupElement = childElem;\n obj = this.refreshLevel(obj);\n }\n }\n var ruleListElem = closest(groupElem, '.e-rule-list');\n obj.groupElement = ruleListElem ? closest(ruleListElem, '.e-group-container') : groupElem;\n obj.level = this.levelColl[obj.groupElement.id].slice();\n return obj;\n };\n QueryBuilder.prototype.groupTemplate = function () {\n var glueElem;\n var inputElem;\n var labelElem;\n var grpActElem;\n var groupBtn;\n var groupElem = this.createElement('div', { attrs: { class: 'e-group-container' } });\n var groupHdrElem = this.createElement('div', { attrs: { class: 'e-group-header' } });\n var grpBodyElem = this.createElement('div', { attrs: { class: 'e-group-body' } });\n var rulesElem = this.createElement('div', { attrs: { class: 'e-rule-list' } });\n groupElem.appendChild(groupHdrElem);\n grpBodyElem.appendChild(rulesElem);\n groupElem.appendChild(grpBodyElem);\n // create button group in OR and AND process\n if (!this.headerTemplate) {\n glueElem = this.createElement('div', { attrs: { class: 'e-lib e-btn-group', role: 'group' } });\n if (this.enableNotCondition) {\n inputElem = this.createElement('button', { attrs: { type: 'button', class: 'e-qb-toggle' } });\n glueElem.appendChild(inputElem);\n }\n inputElem = this.createElement('input', { attrs: { type: 'radio', class: 'e-btngroup-and', value: 'AND' } });\n glueElem.appendChild(inputElem);\n labelElem = this.createElement('label', { attrs: { class: 'e-lib e-btn e-btngroup-and-lbl e-small' },\n innerHTML: this.l10n.getConstant('AND') });\n glueElem.appendChild(labelElem);\n inputElem = this.createElement('input', { attrs: { type: 'radio', class: 'e-btngroup-or', value: 'OR' } });\n glueElem.appendChild(inputElem);\n labelElem = this.createElement('label', { attrs: { class: 'e-lib e-btn e-btngroup-or-lbl e-small' },\n innerHTML: this.l10n.getConstant('OR') });\n glueElem.appendChild(labelElem);\n groupHdrElem.appendChild(glueElem);\n grpActElem = this.createElement('div', { attrs: { class: 'e-group-action' } });\n groupBtn = this.createElement('button', { attrs: { type: 'button', class: 'e-add-btn' } });\n grpActElem.appendChild(groupBtn);\n groupHdrElem.appendChild(grpActElem);\n }\n return groupElem;\n };\n QueryBuilder.prototype.ruleTemplate = function () {\n var tempElem;\n var clsName;\n var ruleElem = this.createElement('div');\n var fieldElem = this.createElement('div', { attrs: { class: 'e-rule-field' } });\n tempElem = this.createElement('div', { attrs: { class: 'e-rule-filter' } });\n var filterElem = this.createElement('input', { attrs: { type: 'text', class: 'e-filter-input' } });\n tempElem.appendChild(filterElem);\n fieldElem.appendChild(tempElem);\n tempElem = this.createElement('div', { attrs: { class: 'e-rule-operator' } });\n fieldElem.appendChild(tempElem);\n tempElem = this.createElement('div', { attrs: { class: 'e-rule-value' } });\n fieldElem.appendChild(tempElem);\n tempElem = this.createElement('div', { attrs: { class: 'e-rule-value-delete' } });\n if (this.showButtons.ruleDelete || isNullOrUndefined(this.showButtons.ruleDelete)) {\n clsName = 'e-removerule e-rule-delete e-css e-btn e-small';\n }\n else {\n clsName = 'e-removerule e-rule-delete e-css e-btn e-small e-button-hide';\n }\n var delBtnElem = this.createElement('button', { attrs: { type: 'button', class: clsName } });\n tempElem.appendChild(delBtnElem);\n fieldElem.appendChild(tempElem);\n ruleElem.appendChild(fieldElem);\n return ruleElem;\n };\n QueryBuilder.prototype.addGroupElement = function (isGroup, target, condition, isBtnClick, not, isRoot, rule) {\n var _this = this;\n var args = { groupID: target.id.replace(this.element.id + '_', ''), cancel: false, type: 'insertGroup' };\n if (!this.isImportRules && !this.isInitialLoad) {\n this.trigger('beforeChange', args, function (observedChangeArgs) {\n _this.addGroupSuccess(observedChangeArgs, isGroup, target, condition, isBtnClick, not, isRoot, rule);\n });\n }\n else {\n this.isInitialLoad = false;\n this.addGroupSuccess(args, isGroup, target, condition, isBtnClick, not, isRoot, rule);\n }\n };\n QueryBuilder.prototype.addGroupSuccess = function (args, isGroup, eventTarget, condition, isBtnClick, not, isRoot, rule) {\n if (!args.cancel && (this.element.querySelectorAll('.e-group-container').length <= this.maxGroupCount)) {\n var target = eventTarget;\n var dltGroupBtn = void 0;\n var 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);\n this.groupIdCounter = 0;\n }\n else {\n this.headerTemplateFn(groupElem, not, condition, rule);\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) {\n var template;\n var templateID = this.element.id + '_header';\n var args;\n var groupHdr = groupElem.querySelector('.e-group-header');\n if (this.headerTemplate) {\n args = { requestType: 'header-template-initialize', ruleID: groupElem.id,\n notCondition: this.enableNotCondition ? not : undefined, condition: condition, rule: this.getRuleCollection(rule, true) };\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 // 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 }\n else {\n template = this.headerFn(args, this, 'Template', templateID)[0];\n }\n groupHdr.appendChild(template);\n this.renderReactTemplates();\n }\n return groupElem;\n };\n /**\n * Notify the changes to component.\n *\n * @param {string | number | boolean | Date | string[] | number[] | Date[]} value - 'value' to be passed to update the rule value.\n * @param {Element} element - 'element' to be passed to update the rule.\n * @param {string} type - 'type' to be passed to update the rule .\n * @returns {void}.\n */\n QueryBuilder.prototype.notifyChange = function (value, element, type) {\n var grpElement = closest(element, '.e-group-container');\n var rules = this.getParentGroup(grpElement);\n var ruleElement = closest(element, '.e-rule-container');\n var index = 0;\n if (type === 'not') {\n rules.not = value;\n return;\n }\n if (type === 'condition') {\n rules.condition = value;\n return;\n }\n while (ruleElement && ruleElement.previousElementSibling !== null) {\n ruleElement = ruleElement.previousElementSibling;\n index++;\n }\n var rule = rules.rules[index];\n var column = this.getColumn(rule.field);\n var format = this.getFormat(column.format);\n if (column.type === 'date') {\n if (value instanceof Date) {\n value = this.intl.formatDate(value, format);\n }\n else if (value instanceof Array) {\n for (var i = 0; i < value.length; i++) {\n if (value[i] && value[i] instanceof Date) {\n value[i] = this.intl.formatDate(value[i], format);\n }\n }\n }\n }\n if (column.ruleTemplate) {\n this.templateChange(element, value, type);\n }\n else {\n this.isNotified = true;\n this.updateRules(element, value);\n this.isNotified = false;\n }\n };\n QueryBuilder.prototype.templateChange = function (element, value, type) {\n var grpElem = closest(element, '.e-group-container');\n var eventsArgs;\n var rules = this.getParentGroup(grpElem);\n var ruleElem = closest(element, '.e-rule-container');\n var index = 0;\n if (this.allowValidation) {\n this.validateValue(rules, ruleElem);\n }\n while (ruleElem && ruleElem.previousElementSibling !== null) {\n ruleElem = ruleElem.previousElementSibling;\n index++;\n }\n var rule = rules.rules[index];\n if (type === 'field') {\n this.selectedColumn = this.getColumn(value);\n }\n else if (rule) {\n this.selectedColumn = this.getColumn(rule.field);\n }\n var operVal;\n this.previousColumn = this.getColumn(rule.field);\n var beforeRules = this.getValidRules(this.rule);\n if (this.selectedColumn) {\n if (this.selectedColumn.operators) {\n operVal = this.selectedColumn.operators;\n }\n else {\n operVal = this.customOperators[this.selectedColumn.type + 'Operator'];\n }\n }\n var arrOper = ['in', 'notin', 'between', 'notbetween'];\n var prevOper;\n switch (type) {\n case 'field':\n rule.field = value;\n rule.label = this.selectedColumn.label;\n rule.type = this.selectedColumn.type;\n rule.value = '';\n rule.operator = operVal[0].value;\n break;\n case 'operator':\n prevOper = rule.operator;\n rule.operator = value;\n if (arrOper.indexOf(rule.operator) > -1) {\n rule.value = [];\n }\n else if (arrOper.indexOf(prevOper) > -1) {\n rule.value = '';\n }\n break;\n case 'value':\n rule.value = value;\n }\n this.changeRuleTemplate(this.selectedColumn, element);\n this.filterRules(beforeRules, this.getValidRules(this.rule), type);\n if (this.selectedColumn && this.selectedColumn.ruleTemplate) {\n if (type === 'field' || type === 'operator') {\n var grpEle = closest(element, '.e-rule-container');\n this.destroyControls(grpEle, true);\n detach(grpEle.querySelector('.e-rule-field'));\n var ruleElement = this.appendRuleElem(closest(grpEle, '.e-group-container'), this.selectedColumn, 'change', grpEle.id, type, rule);\n if (this.displayMode === 'Vertical' || this.element.className.indexOf('e-device') > -1) {\n ruleElement.className = 'e-rule-container e-vertical-mode';\n }\n else {\n ruleElement.className = 'e-rule-container e-horizontal-mode';\n }\n if (ruleElement.previousElementSibling && ruleElement.previousElementSibling.className.indexOf('e-rule-container') > -1) {\n if (ruleElement.className.indexOf('e-joined-rule') < 0) {\n ruleElement.className += ' e-joined-rule';\n }\n if (ruleElement.previousElementSibling.className.indexOf('e-prev-joined-rule') < 0) {\n ruleElement.previousElementSibling.className += ' e-prev-joined-rule';\n }\n }\n if (ruleElement.previousElementSibling && ruleElement.previousElementSibling.className.indexOf('e-group-container') > -1 &&\n ruleElement.className.indexOf('e-separate-rule') < 0) {\n ruleElement.className += ' e-separate-rule';\n }\n var args = { requestType: 'template-create', action: type, ruleID: grpEle.id,\n fields: this.fields, rule: rule };\n eventsArgs = { groupID: grpElem.id.replace(this.element.id + '_', ''), ruleID: grpEle.id.replace(this.element.id + '_', ''),\n value: rule.field, type: 'field' };\n this.trigger('actionBegin', args);\n this.trigger('change', eventsArgs);\n }\n }\n };\n QueryBuilder.prototype.changeValue = function (i, args) {\n var _this = this;\n var element;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (args.element && args.element.classList.contains('e-multiselect')) {\n var multiSelectArgs = args;\n element = multiSelectArgs.element;\n }\n else if (args.event) {\n element = args.event.target;\n }\n else {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n element = args.element;\n }\n if (element.className.indexOf('e-day') > -1 || element.className.indexOf('e-today') > -1 || element.className.indexOf('e-cell') > -1) {\n var calenderArgs = args;\n element = calenderArgs.element;\n }\n var groupElem = closest(element, '.e-group-container');\n var ruleElem = closest(element, '.e-rule-container');\n var groupID = groupElem && groupElem.id.replace(this.element.id + '_', '');\n var ruleID = ruleElem.id.replace(this.element.id + '_', '');\n var dateElement = args;\n if (dateElement.element && dateElement.element.className.indexOf('e-datepicker') > -1) {\n element = dateElement.element;\n }\n var value;\n var rbValue;\n var dropDownObj;\n if (element.className.indexOf('e-radio') > -1) {\n // eslint-disable-next-line\n rbValue = parseInt(element.id.split('valuekey')[1], 0);\n dropDownObj =\n getComponent(closest(element, '.e-rule-container').querySelector('.e-filter-input'), 'dropdownlist');\n this.selectedColumn = dropDownObj.getDataByValue(dropDownObj.value);\n if (this.selectedColumn.values) {\n value = this.selectedColumn.values[rbValue];\n }\n else {\n var valColl = [true, false];\n value = valColl[rbValue];\n }\n }\n else if (element.className.indexOf('e-multiselect') > -1) {\n value = getComponent(element, 'multiselect').value;\n }\n else {\n value = args.value;\n }\n if (args.name === 'input' && this.immediateModeDelay) {\n window.clearInterval(this.timer);\n this.timer = window.setInterval(function () { _this.filterValue(groupID, ruleID, value, i, element); }, this.immediateModeDelay);\n }\n else {\n this.filterValue(groupID, ruleID, value, i, element);\n }\n };\n QueryBuilder.prototype.filterValue = function (grID, rlID, value, i, ele) {\n var _this = this;\n var eventsArgs = { groupID: grID, ruleID: rlID, value: value, cancel: false, type: 'value' };\n window.clearInterval(this.timer);\n if (!this.isImportRules) {\n this.trigger('beforeChange', eventsArgs, function (observedChangeArgs) {\n _this.changeValueSuccessCallBack(observedChangeArgs, ele, i, grID, rlID);\n });\n }\n else {\n this.changeValueSuccessCallBack(eventsArgs, ele, i, grID, rlID);\n }\n };\n QueryBuilder.prototype.changeValueSuccessCallBack = function (args, element, i, groupID, ruleID) {\n if (!args.cancel) {\n this.updateRules(element, args.value, i);\n if (!this.isImportRules) {\n this.trigger('change', { groupID: groupID, ruleID: ruleID, value: args.value, cancel: false, type: 'value' });\n }\n }\n };\n QueryBuilder.prototype.fieldClose = function (id) {\n if (this.isFieldChange || this.isDestroy) {\n return;\n }\n this.isFieldClose = true;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var ddl = getComponent(id, 'dropdownlist');\n var item = ddl.popupObj.element.querySelector('.e-active');\n var itemData = ddl.getItemData();\n ddl.value = itemData.value;\n var customArgs = { element: ddl.element, value: itemData.value, isInteracted: true,\n previousItemData: this.prevItemData, previousItem: null, item: item, itemData: itemData, event: null, e: null };\n if (ddl.previousValue !== ddl.value) {\n this.changeField(customArgs);\n }\n this.isFieldChange = false;\n };\n QueryBuilder.prototype.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 ddtElem.value = args.oldValue[0];\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 {\n itemData.template.write({ elements: tempElements.length > 1 ? tempElements : tempElements[0],\n values: rule.value, operator: tempRule.operator, field: column.field, dataSource: column.values });\n }\n }\n };\n QueryBuilder.prototype.getItemData = function (parentId) {\n var fieldObj = getComponent(document.getElementById(parentId + '_filterkey'), 'dropdownlist');\n if (this.fieldMode === 'DropdownTree') {\n fieldObj = getComponent(document.getElementById(parentId + '_filterkey'), 'dropdowntree');\n }\n return this.fieldMode === 'DropdownTree' ? this.getColumn(fieldObj.value[0]) : this.getColumn(fieldObj.value);\n };\n QueryBuilder.prototype.setDefaultValue = function (parentId, isArryValue, isNumber) {\n var itemData = this.getItemData(parentId);\n if (isNullOrUndefined(itemData.value)) {\n return isNumber ? isArryValue ? [0, 0] : 0 : isArryValue ? [] : '';\n }\n if (isArryValue) {\n if (!(itemData.value instanceof Array)) {\n return [itemData.value];\n }\n }\n else {\n if (itemData.value instanceof Array) {\n return itemData.value[0];\n }\n }\n return itemData.value;\n };\n QueryBuilder.prototype.renderStringValue = function (parentId, rule, operator, idx, ruleValElem) {\n var selectedVal;\n var columnData = this.getItemData(parentId);\n var selectedValue;\n var isTemplate = (typeof columnData.template === 'string');\n if (this.isImportRules || this.isPublic || isTemplate) {\n selectedValue = rule.value;\n }\n else {\n selectedValue = this.setDefaultValue(parentId, false, false);\n }\n if ((operator === 'in' || operator === 'notin') && (this.dataColl.length || columnData.values)) {\n selectedVal = this.isImportRules ? rule.value : this.setDefaultValue(parentId, true, false);\n this.renderMultiSelect(columnData, parentId, idx, selectedVal, columnData.values);\n if (this.displayMode === 'Vertical' || this.element.className.indexOf('e-device') > -1) {\n ruleValElem.style.width = '100%';\n }\n else {\n ruleValElem.style.width = null;\n ruleValElem.style.minWidth = '200px';\n }\n }\n else {\n if (operator === 'in' || operator === 'notin') {\n selectedVal = this.isImportRules ? rule.value : this.setDefaultValue(parentId, true, false);\n selectedValue = selectedVal.join(',');\n }\n var txtBox = void 0;\n txtBox = {\n placeholder: this.l10n.getConstant('SelectValue'),\n input: this.changeValue.bind(this, idx)\n };\n if (this.valueModel && this.valueModel.textBoxModel) {\n txtBox = __assign({}, txtBox, this.valueModel.textBoxModel);\n }\n var inputobj = new TextBox(txtBox);\n inputobj.appendTo('#' + parentId + '_valuekey' + idx);\n inputobj.value = selectedValue;\n inputobj.dataBind();\n }\n };\n QueryBuilder.prototype.renderNumberValue = function (parentId, rule, operator, idx, ruleValElem, itemData, length) {\n var columnData = this.getItemData(parentId);\n var isTemplate = (typeof columnData.template === 'string');\n var selectedVal = (this.isImportRules || this.isPublic || isTemplate) ? rule.value : this.setDefaultValue(parentId, false, true);\n if ((operator === 'in' || operator === 'notin') && (this.dataColl.length || columnData.values)) {\n selectedVal = this.isImportRules ? rule.value : this.setDefaultValue(parentId, true, false);\n this.renderMultiSelect(columnData, parentId, idx, selectedVal, columnData.values);\n if (this.element.className.indexOf('e-device') > -1 || this.displayMode === 'Vertical') {\n ruleValElem.style.width = '100%';\n }\n else {\n ruleValElem.style.minWidth = '200px';\n ruleValElem.style.width = null;\n }\n }\n else if (operator === 'in' || operator === 'notin') {\n selectedVal = this.isImportRules ? rule.value : this.setDefaultValue(parentId, true, false);\n var selVal = selectedVal.join(',');\n var txtInp = void 0;\n txtInp = {\n placeholder: this.l10n.getConstant('SelectValue'),\n input: this.changeValue.bind(this, idx)\n };\n if (this.valueModel && this.valueModel.textBoxModel) {\n txtInp = __assign({}, txtInp, this.valueModel.textBoxModel);\n }\n var input = new TextBox(txtInp);\n input.appendTo('#' + parentId + '_valuekey' + idx);\n input.value = selVal;\n input.dataBind();\n }\n else {\n itemData = columnData;\n var min = (itemData.validation && itemData.validation.min) ? itemData.validation.min : 0;\n var max = (itemData.validation && itemData.validation.max) ? itemData.validation.max : Number.MAX_VALUE;\n var format = itemData.format ? itemData.format : 'n';\n if (length > 1 && rule) {\n selectedVal = rule.value[idx] ? rule.value[idx] : this.setDefaultValue(parentId, true, true);\n }\n var numericTxt = void 0;\n numericTxt = {\n value: (selectedVal instanceof Array) ? selectedVal[idx] : selectedVal,\n format: format, min: min, max: max, width: '100%',\n step: itemData.step ? itemData.step : 1,\n change: this.changeValue.bind(this, idx)\n };\n if (this.valueModel && this.valueModel.numericTextBoxModel) {\n numericTxt = __assign({}, numericTxt, this.valueModel.numericTextBoxModel);\n }\n var numeric = new NumericTextBox(numericTxt);\n numeric.appendTo('#' + parentId + '_valuekey' + idx);\n numeric.element.setAttribute('aria-label', itemData.label + ' ' + 'Value');\n }\n };\n QueryBuilder.prototype.processValueString = function (value, type) {\n var numArr = [];\n var strArr = value.split(',');\n if (type === 'string') {\n return strArr;\n }\n else {\n for (var k = 0, kLen = strArr.length; k < kLen; k++) {\n numArr.push(Number(strArr[k]));\n }\n return numArr;\n }\n };\n QueryBuilder.prototype.parseDate = function (value, format) {\n var formatOpt;\n var selectedValue;\n if (format) {\n var dParser = this.intl.getDateParser({ skeleton: 'full', type: 'dateTime' });\n formatOpt = this.getFormat(format);\n selectedValue = dParser(value);\n if (isNullOrUndefined(selectedValue)) {\n selectedValue = this.intl.parseDate(value, formatOpt);\n }\n }\n else {\n selectedValue = new Date(value);\n }\n return selectedValue;\n };\n QueryBuilder.prototype.renderControls = function (target, itemData, rule, tempRule, isRendered) {\n addClass([target.parentElement.querySelector('.e-rule-value')], 'e-value');\n removeClass([target.parentElement.querySelector('.e-rule-value')], 'e-hide');\n addClass([target.parentElement.querySelector('.e-rule-value')], 'e-show');\n if (itemData.template && (itemData.template.create || isRendered)) {\n this.processTemplate(target, itemData, rule, tempRule);\n }\n else {\n var length_1;\n if (tempRule.type === 'boolean') {\n length_1 = this.selectedColumn.values ? this.selectedColumn.values.length : 2;\n }\n else {\n length_1 = tempRule.operator && tempRule.operator.toString().toLowerCase().indexOf('between') > -1 ? 2 : 1;\n }\n var parentId = closest(target, '.e-rule-container').id;\n var ruleValElem = void 0;\n var operator = tempRule.operator.toString();\n if (target.className.indexOf('e-rule-operator') > -1 || target.className.indexOf('e-rule-filter') > -1) {\n ruleValElem = target.parentElement.querySelector('.e-rule-value');\n if (this.element.className.indexOf('e-device') > -1 || this.displayMode === 'Vertical') {\n ruleValElem.style.width = '100%';\n }\n else {\n if (operator !== 'in' && operator !== 'notin') {\n addClass([ruleValElem], 'e-custom-value');\n }\n else {\n removeClass([ruleValElem], 'e-custom-value');\n }\n }\n for (var i = 0; i < length_1; i++) {\n switch (tempRule.type) {\n case 'string':\n {\n this.renderStringValue(parentId, rule, operator, i, ruleValElem);\n }\n break;\n case 'number':\n {\n this.renderNumberValue(parentId, rule, operator, i, ruleValElem, itemData, length_1);\n }\n break;\n case 'boolean':\n this.processBoolValues(itemData, rule, parentId, i);\n break;\n case 'date':\n {\n var selectedValue = new Date();\n var selVal = void 0;\n var column = void 0;\n var format = itemData.format;\n var datepick = void 0;\n var datePicker = void 0;\n var place = this.l10n.getConstant('SelectValue');\n var isTemplate = (typeof itemData.template === 'string');\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (!itemData.field && !itemData.key && itemData.value) {\n if (itemData.value instanceof Date) {\n selectedValue = itemData.value;\n }\n else {\n selectedValue = this.parseDate(itemData.value, itemData.format);\n }\n }\n if (!itemData.format && rule && rule.field !== '') {\n column = this.getColumn(rule.field);\n format = column.format;\n }\n if ((this.isImportRules || this.isPublic || isTemplate) && rule) {\n column = this.getColumn(rule.field);\n format = column.format;\n if (rule.value) {\n selVal = (length_1 > 1) ? rule.value[i] : rule.value;\n selectedValue = this.parseDate(selVal, column.format);\n }\n else {\n selectedValue = rule.value;\n }\n }\n if (format) {\n var formatObj = this.getFormat(format);\n if (formatObj.skeleton) {\n datePicker = {\n locale: this.getLocale(), value: selectedValue,\n placeholder: place, format: formatObj, change: this.changeValue.bind(this, i)\n };\n if (this.valueModel && this.valueModel.datePickerModel) {\n datePicker = __assign({}, datePicker, this.valueModel.datePickerModel);\n }\n datepick = new DatePicker(datePicker);\n }\n else {\n datePicker = {\n value: selectedValue, locale: this.getLocale(), placeholder: place,\n format: formatObj.format, change: this.changeValue.bind(this, i)\n };\n if (this.valueModel && this.valueModel.datePickerModel) {\n datePicker = __assign({}, datePicker, this.valueModel.datePickerModel);\n }\n datepick = new DatePicker(datePicker);\n }\n }\n else {\n datePicker = {\n locale: this.getLocale(), value: selectedValue,\n placeholder: place, change: this.changeValue.bind(this, i)\n };\n if (this.valueModel && this.valueModel.datePickerModel) {\n datePicker = __assign({}, datePicker, this.valueModel.datePickerModel);\n }\n datepick = new DatePicker(datePicker);\n }\n datepick.appendTo('#' + parentId + '_valuekey' + i);\n if (!rule.value) {\n var elem = document.getElementById(parentId + '_valuekey' + i);\n this.updateRules(elem, selectedValue, null, this.isNotValueChange);\n this.isNotValueChange = false;\n }\n }\n break;\n }\n }\n }\n }\n };\n QueryBuilder.prototype.processBoolValues = function (itemData, rule, parentId, i) {\n var isCheck = false;\n var value;\n var orgValue;\n if (isNullOrUndefined(rule.type) && itemData) {\n rule.type = itemData.type;\n }\n var label;\n if (itemData.values) {\n var values = itemData.values;\n if (rule.type === 'boolean' && !isNullOrUndefined(rule.value)) {\n isCheck = values[i].toLowerCase() === rule.value.toString().toLowerCase();\n }\n else if (itemData.value) {\n isCheck = values[i].toLowerCase() === itemData.value.toString().toLowerCase();\n }\n else if (i === 0) {\n isCheck = true;\n }\n orgValue = value = label = values[i];\n }\n else {\n var values = [true, false];\n if (rule.type === 'boolean' && !isNullOrUndefined(rule.value)) {\n isCheck = values[i].toString().toLowerCase() === rule.value.toString().toLowerCase();\n }\n else if (itemData.value) {\n isCheck = values[i].toString().toLowerCase() === itemData.value.toString().toLowerCase();\n }\n else if (i === 0) {\n isCheck = true;\n }\n value = values[i].toString();\n orgValue = values[i];\n label = this.l10n.getConstant(['True', 'False'][i]);\n }\n var radioBtn;\n radioBtn = {\n label: label, name: parentId + 'default', checked: isCheck, value: value,\n change: this.changeValue.bind(this, i)\n };\n if (this.valueModel && this.valueModel.radioButtonModel) {\n radioBtn = __assign({}, radioBtn, this.valueModel.radioButtonModel);\n }\n var radiobutton = new RadioButton(radioBtn);\n radiobutton.appendTo('#' + parentId + '_valuekey' + i);\n if (isCheck) {\n this.updateRules(radiobutton.element, orgValue, 0);\n }\n };\n QueryBuilder.prototype.getOperatorIndex = function (ddlObj, rule) {\n var i;\n var dataSource = ddlObj.dataSource;\n var len = dataSource.length;\n for (i = 0; i < len; i++) {\n if (rule.operator === ddlObj.dataSource[i].value) {\n return i;\n }\n }\n return 0;\n };\n QueryBuilder.prototype.getPreviousItemData = function (prevItemData, column) {\n if (this.isFieldClose && prevItemData) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n prevItemData = this.getColumn(prevItemData.value);\n }\n if (column && column.template && prevItemData && Object.keys(prevItemData).length < 4) {\n prevItemData.template = column.template;\n }\n return prevItemData;\n };\n QueryBuilder.prototype.renderValues = function (target, itemData, prevItemData, isRender, rule, tempRule, element) {\n var subFldElem = target.previousElementSibling;\n var filtElem = subFldElem.getElementsByTagName('input')[0];\n var filtObj = this.fieldMode === 'DropdownTree' ? getComponent(filtElem, 'dropdowntree')\n : getComponent(filtElem, 'dropdownlist');\n var column = this.fieldMode === 'DropdownTree' ? this.getColumn(filtObj.value[0])\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n : this.getColumn(filtObj.value);\n this.selectedRule = column;\n if (isRender) {\n var ddlObj = getComponent(target.querySelector('input'), 'dropdownlist');\n itemData = element.id.indexOf('operator') > -1 ? itemData : this.selectedRule;\n if (itemData.operators) {\n ddlObj.value = null;\n ddlObj.dataBind();\n ddlObj.dataSource = itemData.operators;\n ddlObj.index = this.getOperatorIndex(ddlObj, rule);\n ddlObj.value = tempRule.operator = ddlObj.dataSource[ddlObj.index].value;\n ddlObj.dataBind();\n }\n }\n var operator = tempRule.operator.toString();\n var isTempRendered = false;\n if (!(operator.indexOf('null') > -1 || operator.indexOf('empty') > -1)) {\n var parentId = closest(target, '.e-rule-container').id;\n prevItemData = this.getPreviousItemData(prevItemData, column);\n if (prevItemData && prevItemData.template === undefined) {\n if (prevItemData.columns) {\n prevItemData = this.getColumn(rule.field);\n }\n }\n else if (this.fieldMode === 'DropdownTree' && prevItemData === undefined) {\n prevItemData = this.getColumn(rule.field);\n }\n if (prevItemData && prevItemData.template) {\n this.templateDestroy(prevItemData, parentId + '_valuekey0');\n var elem = select('#' + parentId + '_valuekey0', target.nextElementSibling);\n if (elem && !elem.classList.contains('e-control')) {\n detach(select('#' + parentId + '_valuekey0', target.nextElementSibling));\n }\n if (typeof prevItemData.template === 'string' || prevItemData.template.create === undefined) {\n if (target.nextElementSibling.classList.contains('e-template-value')) {\n this.clearQBTemplate([parentId]);\n }\n target.nextElementSibling.innerHTML = '';\n }\n }\n if (isRender) {\n this.validateValue(rule, closest(target, '.e-rule-container'));\n this.destroyControls(target);\n }\n if (column) {\n itemData.template = column.template;\n }\n if (itemData.template) {\n addClass([target.nextElementSibling], 'e-template-value');\n itemData.template = column.template;\n isTempRendered = this.setColumnTemplate(itemData, parentId, column.field, itemData.value ||\n operator, target, rule);\n }\n if (isTempRendered) {\n var parentElem = target.parentElement.querySelector('.e-rule-value');\n if (this.element.className.indexOf('e-device') > -1 || this.displayMode === 'Vertical') {\n parentElem.style.width = '100%';\n }\n else {\n parentElem.style.width = '200px';\n }\n }\n else {\n removeClass([target.nextElementSibling], 'e-template-value');\n var inputLen = 1;\n if (tempRule.type === 'boolean') {\n inputLen = this.selectedColumn.values ? this.selectedColumn.values.length : 2;\n }\n else {\n inputLen = (operator && operator.toLowerCase().indexOf('between') > -1) ? 2 : 1;\n }\n for (var i = 0; i < inputLen; i++) {\n var valElem = this.createElement('input', { attrs: { type: 'text', id: parentId + '_valuekey' + i } });\n target.nextElementSibling.appendChild(valElem);\n }\n }\n this.renderControls(target, itemData, rule, tempRule, isTempRendered);\n }\n else {\n var parentElem = target.parentElement.querySelector('.e-rule-value');\n if (parentElem) {\n removeClass([parentElem], 'e-show');\n addClass([parentElem], 'e-hide');\n }\n }\n };\n QueryBuilder.prototype.setColumnTemplate = function (itemData, ruleID, field, operator, target, rule) {\n var _this = this;\n var args;\n var isRendered = true;\n if (!itemData.template) {\n return true;\n }\n else {\n if (typeof itemData.template === 'string' || itemData.template.create === undefined) {\n args = { requestType: 'value-template-initialize', ruleID: ruleID, field: field, operator: operator, rule: rule,\n renderTemplate: true };\n this.trigger('actionBegin', args, function (observedActionArgs) {\n isRendered = _this.actionBeginSuccessCallBack(observedActionArgs, itemData, ruleID, field, target);\n });\n return isRendered;\n }\n else {\n var valElem = void 0;\n var template = itemData.template;\n if (typeof template.create === 'string') {\n valElem = getValue(template.create, window)({ field: field, operator: operator });\n }\n else {\n valElem = template.create({ field: field, operator: operator });\n }\n if (valElem instanceof Element) {\n valElem.id = ruleID + '_valuekey0';\n addClass([valElem], 'e-template');\n target.nextElementSibling.appendChild(valElem);\n if (field.indexOf(' ') < 0) {\n addClass([valElem], 'e-' + field);\n }\n }\n else if (valElem instanceof Array) {\n addClass(valElem, 'e-template');\n for (var i = 0, iLen = valElem.length; i < iLen; i++) {\n valElem[i].id = ruleID + '_valuekey' + i;\n target.nextElementSibling.appendChild(valElem[i]);\n }\n }\n addClass([target.nextElementSibling], 'e-template-value');\n return true;\n }\n }\n };\n QueryBuilder.prototype.actionBeginSuccessCallBack = function (args, itemData, ruleID, field, target) {\n if (args.renderTemplate) {\n var valElem = void 0;\n this.columnTemplateFn = this.templateParser(itemData.template);\n var templateID = this.element.id + field;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.isReact) {\n valElem = this.columnTemplateFn(args, this, ruleID, templateID)[0];\n } // eslint-disable-next-line @typescript-eslint/no-explicit-any\n else if (this.isAngular) {\n var valElemColl = this.columnTemplateFn(args, this, ruleID, templateID);\n valElem = (valElemColl[0].nodeType === 3) ? valElemColl[1] : valElemColl[0];\n }\n else {\n valElem = this.columnTemplateFn(args, this, 'Template', templateID)[0];\n }\n target.nextElementSibling.appendChild(valElem);\n addClass([target.nextElementSibling], 'e-template-value');\n this.renderReactTemplates();\n return true;\n }\n else {\n return false;\n }\n };\n QueryBuilder.prototype.updateValues = function (element, rule) {\n var idx = 1;\n if (element.className.indexOf('e-template') > -1) {\n idx = 3;\n }\n var controlName = element.className.split(' e-')[idx];\n var i = parseInt(element.id.slice(-1), 2);\n switch (controlName) {\n case 'checkbox':\n // eslint-disable-next-line\n var value = getComponent(element, controlName).value;\n rule.value = (value !== '') ? value : undefined;\n break;\n case 'textbox':\n rule.value = getComponent(element, controlName).value;\n break;\n case 'dropdownlist':\n rule.value = getComponent(element, controlName).value;\n break;\n case 'radio':\n // eslint-disable-next-line\n var radioBtnObj = getComponent(element, controlName);\n if (radioBtnObj.checked) {\n if (typeof rule.value === 'boolean') {\n rule.value = radioBtnObj.value === 'true';\n }\n else {\n if (this.getColumn(rule.field).values) {\n rule.value = radioBtnObj.value;\n }\n else {\n rule.value = radioBtnObj.value === 'true';\n }\n }\n }\n radioBtnObj.refresh();\n break;\n case 'numerictextbox':\n if (rule.operator.indexOf('between') > -1) {\n if (typeof rule.value === 'string') {\n rule.value = [];\n }\n rule.value[i] = getComponent(element, controlName).value;\n }\n else {\n rule.value = getComponent(element, controlName).value;\n }\n break;\n case 'datepicker':\n // eslint-disable-next-line\n var column = this.getColumn(rule.field);\n // eslint-disable-next-line\n var format = this.getFormat(column.format);\n // eslint-disable-next-line\n var selectedDate = getComponent(element, controlName).value;\n if (rule.operator.indexOf('between') > -1) {\n if (typeof rule.value === 'string') {\n rule.value = [];\n }\n rule.value[i] = this.intl.formatDate(selectedDate, format);\n }\n else if (isNullOrUndefined(format.format) && selectedDate) {\n rule.value = this.intl.formatDate(selectedDate);\n }\n else if (selectedDate) {\n rule.value = this.intl.formatDate(selectedDate, format);\n }\n else {\n rule.value = selectedDate;\n }\n break;\n case 'multiselect':\n rule.value = getComponent(element, controlName).value;\n break;\n }\n };\n QueryBuilder.prototype.updateRules = function (target, selectedValue, i, isNotTrigger) {\n var groupElem = closest(target, '.e-group-container');\n var rule = this.getParentGroup(groupElem);\n var ruleElem = closest(target, '.e-rule-container');\n var index = 0;\n var dropDownObj;\n var eventsArgs;\n var groupID = groupElem.id.replace(this.element.id + '_', '');\n var beforeRules = this.getValidRules(this.rule);\n while (ruleElem && ruleElem.previousElementSibling !== null) {\n ruleElem = ruleElem.previousElementSibling;\n index++;\n }\n var operator = rule.rules[index].operator ? rule.rules[index].operator.toString() : '';\n ruleElem = closest(target, '.e-rule-container');\n var ruleID = ruleElem.id.replace(this.element.id + '_', '');\n if (closest(target, '.e-rule-filter') || closest(target, '.e-rule-sub-filter')) {\n if (this.subFieldElem) {\n target = this.subFieldElem;\n }\n dropDownObj = this.fieldMode === 'DropdownTree' ? getComponent(target, 'dropdowntree') :\n getComponent(target, 'dropdownlist');\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var column = this.fieldMode === 'DropdownTree' ? this.getColumn(dropDownObj.value[0])\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n : this.getColumn(dropDownObj.value);\n if (!this.isImportRules && rule.rules[index].field &&\n rule.rules[index].field.toLowerCase() !== column.field.toLowerCase()) {\n if (!(ruleElem.querySelectorAll('.e-template')) && !(operator.indexOf('null') > -1)\n || (operator.indexOf('empty') > -1)) {\n rule.rules[index].value = '';\n }\n }\n this.selectedColumn = this.getColumn(this.selectedColumn.field);\n rule.rules[index].field = this.selectedColumn.field;\n rule.rules[index].type = this.selectedColumn.type;\n rule.rules[index].label = this.selectedColumn.label;\n var ruleElement = closest(target, '.e-rule-filter');\n ruleElement = ruleElement ? ruleElement : closest(target, '.e-rule-sub-filter');\n var element = ruleElement.nextElementSibling.querySelector('input.e-control');\n element = element ? element : ruleElement.nextElementSibling.nextElementSibling.querySelector('input.e-control');\n operator = getComponent(element, 'dropdownlist').value.toString();\n rule.rules[index].operator = operator;\n // Value Fields\n var valueContainer = ruleElement.nextElementSibling.nextElementSibling;\n var elementCln = valueContainer.querySelectorAll('input.e-control');\n if (elementCln.length < 1) {\n elementCln = valueContainer.querySelectorAll('div.e-control');\n }\n if (elementCln.length < 1) {\n elementCln = valueContainer.querySelectorAll('.e-template');\n }\n eventsArgs = { groupID: groupID, ruleID: ruleID, value: rule.rules[index].field, type: 'field' };\n for (var i_1 = 0; i_1 < elementCln.length; i_1++) {\n if (operator.indexOf('null') > -1 || operator.indexOf('empty') > -1) {\n rule.rules[index].value = null;\n continue;\n }\n this.updateValues(elementCln[i_1], rule.rules[index]);\n }\n if (!this.isImportRules) {\n this.trigger('change', eventsArgs);\n }\n if (this.allowValidation && rule.rules[index].field && target.parentElement.className.indexOf('e-tooltip') > -1) {\n getComponent(target.parentElement, 'tooltip').destroy();\n }\n this.filterRules(beforeRules, this.getValidRules(this.rule), 'field');\n }\n else if (closest(target, '.e-rule-operator')) {\n dropDownObj = getComponent(target, 'dropdownlist');\n rule.rules[index].operator = dropDownObj.value.toString();\n var inputElem = ruleElem.querySelectorAll('.e-rule-value input.e-control');\n eventsArgs = { groupID: groupID, ruleID: ruleID, value: dropDownObj.value, type: 'operator' };\n if (this.allowValidation && rule.rules[index].operator && target.parentElement.className.indexOf('e-tooltip') > -1) {\n getComponent(target.parentElement, 'tooltip').destroy();\n }\n if (inputElem.length > 1 && !(inputElem[0].className.indexOf('e-template') > -1)) {\n rule.rules[index].value = [];\n }\n for (var i_2 = 0; i_2 < inputElem.length; i_2++) {\n if (rule.rules[index].operator.indexOf('null') > -1 || rule.rules[index].operator.indexOf('empty') > -1) {\n rule.rules[index].value = null;\n continue;\n }\n else if (inputElem[i_2].classList.contains('e-template')) {\n continue;\n }\n this.updateValues(inputElem[i_2], rule.rules[index]);\n }\n if (!this.isImportRules) {\n this.trigger('change', eventsArgs);\n }\n this.filterRules(beforeRules, this.getValidRules(this.rule), 'operator');\n }\n else if (closest(target, '.e-rule-value')) {\n this.ruleValueUpdate(target, selectedValue, rule, index, groupElem, ruleElem, i);\n if (!isNotTrigger) {\n this.filterRules(beforeRules, this.getValidRules(this.rule), 'value');\n }\n }\n };\n QueryBuilder.prototype.filterRules = function (beforeRule, afterRule, type) {\n var beforeRuleStr = JSON.stringify({ condition: beforeRule.condition, not: beforeRule.not, rule: beforeRule.rules });\n var afetrRuleStr = JSON.stringify({ condition: afterRule.condition, not: afterRule.not, rule: afterRule.rules });\n if (beforeRuleStr !== afetrRuleStr) {\n if (!this.isImportRules) {\n this.trigger('ruleChange', { previousRule: beforeRule, rule: afterRule, type: type });\n }\n }\n };\n QueryBuilder.prototype.ruleValueUpdate = function (target, selectedValue, rule, index, groupElem, ruleElem, i) {\n var eventsArgs;\n var oper;\n var arrOperator = ['in', 'between', 'notin', 'notbetween'];\n if (rule.rules[index].operator) {\n oper = rule.rules[index].operator.toString().toLowerCase();\n }\n if (selectedValue !== null) {\n if (target.className.indexOf('e-multiselect') > -1 && rule.rules[index].type === 'number' &&\n !this.isNotified) {\n var selVal = [];\n var dupSelectedValue = selectedValue;\n for (var k = 0, kLen = dupSelectedValue.length; k < kLen; k++) {\n if (typeof dupSelectedValue[k] === 'string') {\n selVal.push(parseFloat(dupSelectedValue[k]));\n }\n }\n if (selVal.length) {\n selectedValue = selVal;\n }\n }\n if (this.isNotified) {\n rule.rules[index].value = selectedValue;\n eventsArgs = { groupID: groupElem.id, ruleID: ruleElem.id, value: rule.rules[index].value, type: 'value' };\n if (!this.isImportRules) {\n this.trigger('change', eventsArgs);\n }\n }\n else if (target.className.indexOf('e-spin') > -1 || target.className.indexOf('e-numeric') > -1) {\n if (arrOperator.indexOf(oper) > -1) {\n rule.rules[index].value[i] = selectedValue;\n }\n else {\n rule.rules[index].value = selectedValue;\n }\n }\n else if (target.className.indexOf('e-radio') > -1) {\n rule.rules[index].value = selectedValue;\n }\n else if (target.className.indexOf('e-multiselect') > -1) {\n rule.rules[index].value = selectedValue;\n }\n else if (target.className.indexOf('e-textbox') > -1) {\n if (oper === 'in' || oper === 'notin') {\n if (rule.rules[index].type === 'string') {\n rule.rules[index].value = this.processValueString(selectedValue, rule.rules[index].type);\n }\n else {\n rule.rules[index].value = this.processValueString(selectedValue, rule.rules[index].type);\n }\n }\n else {\n rule.rules[index].value = selectedValue;\n }\n }\n else if (target.className.indexOf('e-datepicker') > -1) {\n var format = this.getFormat(this.getColumn(this.selectedColumn.field).format);\n if (format.type) {\n if (arrOperator.indexOf(oper) > -1) {\n if (typeof rule.rules[index].value === 'string') {\n rule.rules[index].value = [];\n }\n rule.rules[index].value[i] = this.intl.formatDate(selectedValue, format);\n }\n else {\n rule.rules[index].value = this.intl.formatDate(selectedValue, format);\n }\n }\n }\n this.validateValue(rule, ruleElem, index);\n }\n else {\n if (target.className.indexOf('e-datepicker') > -1) {\n if (arrOperator.indexOf(oper) > -1) {\n if (typeof rule.rules[index].value === 'string') {\n rule.rules[index].value = [];\n }\n rule.rules[index].value[i] = selectedValue;\n }\n else {\n rule.rules[index].value = selectedValue;\n }\n }\n else {\n rule.rules[index].value = selectedValue;\n }\n }\n };\n QueryBuilder.prototype.validateValue = function (rule, ruleElem, index) {\n if (!isNullOrUndefined(index)) {\n rule = rule.rules[index];\n }\n var isObject = typeof (rule.value) === 'object';\n if (this.allowValidation && (isNullOrUndefined(index) || (isObject ? rule.value.length > 0 : rule.value))) {\n var valElem = ruleElem.querySelectorAll('.e-rule-value .e-control');\n if (valElem.length > 0) {\n if (valElem[0].className.indexOf('e-tooltip') > -1) {\n getComponent(valElem[0], 'tooltip').destroy();\n }\n else if (valElem[0].parentElement.className.indexOf('e-tooltip') > -1) {\n getComponent(valElem[0].parentElement, 'tooltip').destroy();\n }\n if (valElem[1] && valElem[1].parentElement.className.indexOf('e-tooltip') > -1) {\n getComponent(valElem[1].parentElement, 'tooltip').destroy();\n }\n }\n }\n };\n QueryBuilder.prototype.getFormat = function (format) {\n var formatOptions;\n if (format) {\n if (typeof (format) === 'string') {\n formatOptions = { type: 'dateTime' };\n if (format === 'short' || format === 'yMd') {\n formatOptions.type = 'date';\n formatOptions.skeleton = format;\n }\n else {\n formatOptions.format = format;\n }\n }\n else {\n formatOptions = { type: 'dateTime', skeleton: format.skeleton };\n }\n }\n else {\n formatOptions = { type: 'date', skeleton: 'yMd' };\n }\n return formatOptions;\n };\n QueryBuilder.prototype.findGroupByIdx = function (groupIdx, rule, isRoot) {\n var ruleColl = rule.rules;\n var dupRuleColl = [];\n if (!isRoot) {\n for (var j = 0, jLen = ruleColl.length; j < jLen; j++) {\n rule = ruleColl[j];\n if (rule.rules) {\n dupRuleColl.push(rule);\n }\n }\n return dupRuleColl[groupIdx];\n }\n return rule;\n };\n /**\n * Removes the component from the DOM and detaches all its related event handlers.\n * Also it maintains the initial input element from the DOM.\n *\n * @method destroy\n * @returns {void}\n */\n QueryBuilder.prototype.destroy = function () {\n this.isDestroy = true;\n var queryElement = this.element;\n if (!queryElement) {\n return;\n }\n var element;\n var i;\n var len;\n var tooltip;\n _super.prototype.destroy.call(this);\n element = this.element.querySelectorAll('.e-addrulegroup');\n len = element.length;\n for (i = 0; i < len; i++) {\n getComponent(element[i], 'dropdown-btn').destroy();\n detach(element[i]);\n }\n tooltip = this.element.querySelectorAll('.e-rule-filter .e-control.e-tooltip');\n for (i = 0; i < tooltip.length; i++) {\n getComponent(tooltip[i], 'tooltip').destroy();\n }\n element = this.element.querySelectorAll('.e-rule-filter .e-control:not(.e-tooltip)');\n len = element.length;\n for (i = 0; i < len; i++) {\n if (getComponent(element[i], 'dropdownlist')) {\n getComponent(element[i], 'dropdownlist').destroy();\n }\n else {\n getComponent(element[i], 'dropdowntree').destroy();\n }\n detach(element[i]);\n }\n tooltip = this.element.querySelectorAll('.e-rule-operator .e-control.e-tooltip');\n for (i = 0; i < tooltip.length; i++) {\n getComponent(tooltip[i], 'tooltip').destroy();\n }\n element = this.element.querySelectorAll('.e-rule-operator .e-control:not(.e-tooltip)');\n len = element.length;\n for (i = 0; i < len; i++) {\n if (getComponent(element[i], 'dropdownlist')) {\n getComponent(element[i], 'dropdownlist').destroy();\n detach(element[i]);\n }\n }\n tooltip = this.element.querySelectorAll('.e-rule-value .e-control.e-tooltip');\n for (i = 0; i < tooltip.length; i++) {\n getComponent(tooltip[i], 'tooltip').destroy();\n }\n this.isImportRules = false;\n this.unWireEvents();\n this.levelColl[this.element.id + '_group0'] = [0];\n this.element.innerHTML = '';\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.portals && this.portals.length) {\n this.clearQBTemplate();\n }\n classList(this.element, [], ['e-rtl', 'e-responsive', 'e-device']);\n this.isDestroy = false;\n };\n /**\n * Adds single or multiple rules.\n *\n * @param {RuleModel[]} rule - 'rule collection' to be passed to add the rules.\n * @param {string} groupID - 'group id' to be passed to add the rule in groups.\n * @returns {void}.\n */\n QueryBuilder.prototype.addRules = function (rule, groupID) {\n groupID = this.element.id + '_' + groupID;\n this.isPublic = true;\n for (var i = 0, len = rule.length; i < len; i++) {\n this.addRuleElement(document.getElementById(groupID), rule[i]);\n }\n this.isPublic = false;\n };\n /**\n * Adds single or multiple groups, which contains the collection of rules.\n *\n * @param {RuleModel[]} groups - 'group collection' to be passed to add the groups.\n * @param {string} groupID - 'group id' to be passed to add the groups.\n * @returns {void}.\n */\n QueryBuilder.prototype.addGroups = function (groups, groupID) {\n if (this.isAddSuccess || this.element.querySelectorAll('.e-group-container').length <= this.maxGroupCount) {\n groupID = this.element.id + '_' + groupID;\n var groupElem = document.getElementById(groupID);\n var rule = this.getParentGroup(groupElem);\n var grouplen = groups.length;\n if (grouplen) {\n this.isPublic = true;\n for (var i = 0, len = groups.length; i < len; i++) {\n this.updatedRule = { condition: groups[i].condition, not: groups[i].not };\n this.importRules(groups[i], groupElem, false, groups[i].not);\n }\n this.isPublic = false;\n }\n else {\n var condition = 'and';\n var not = false;\n if (this.updatedRule) {\n condition = this.updatedRule.condition;\n not = this.updatedRule.not;\n }\n if (this.enableNotCondition) {\n rule.rules.push({ 'condition': condition, 'not': not, rules: [] });\n }\n else {\n rule.rules.push({ 'condition': condition, rules: [] });\n }\n }\n if (!this.headerTemplate) {\n this.disableRuleCondition(groupElem, rule);\n }\n }\n };\n QueryBuilder.prototype.initWrapper = function () {\n this.isInitialLoad = true;\n if (this.cssClass) {\n addClass([this.element], this.cssClass.replace(/\\s+/g, ' ').trim().split(' '));\n }\n if (this.enableRtl) {\n addClass([this.element], 'e-rtl');\n }\n if (this.width) {\n this.element.style.width = this.width;\n }\n if (this.height) {\n this.element.style.height = this.height;\n }\n if (this.rule.rules.length) {\n this.isImportRules = true;\n }\n else {\n this.addGroupElement(false, this.element);\n }\n if (Browser.isDevice || this.displayMode === 'Vertical') {\n if (Browser.isDevice) {\n this.element.style.width = '100%';\n this.element.classList.add('e-device');\n }\n removeClass(this.element.querySelectorAll('.e-rule-container'), 'e-horizontal-mode');\n addClass(this.element.querySelectorAll('.e-rule-container'), 'e-vertical-mode');\n this.displayMode = 'Vertical';\n }\n else {\n this.displayMode = 'Horizontal';\n }\n if (this.summaryView) {\n if (this.isImportRules) {\n this.renderSummary();\n }\n else {\n this.renderSummaryCollapse();\n }\n }\n else {\n if (this.columns.length && this.isImportRules) {\n this.addGroupElement(false, this.element, this.rule.condition, false, this.rule.not, false, this.rule);\n var mRules = extend({}, this.rule, {}, true);\n this.isRefreshed = true;\n this.setGroupRules(mRules);\n this.isRefreshed = false;\n }\n else if (this.columns.length) {\n this.addRuleElement(this.element.querySelector('.e-group-container'), {});\n }\n this.notGroupRtl();\n if (this.readonly) {\n this.enableReadonly();\n }\n var buttons = this.element.querySelectorAll('label.e-btn');\n var button = void 0;\n for (var i = 0; i < buttons.length; i++) {\n button = buttons.item(i);\n rippleEffect(button, { selector: '.e-btn' });\n }\n }\n };\n QueryBuilder.prototype.renderSummary = function () {\n var contentElem = this.createElement('div', {\n attrs: {\n class: 'e-summary-content',\n id: this.element.id + '_summary_content'\n }\n });\n var textElem = this.createElement('textarea', { attrs: { class: 'e-summary-text', readonly: 'true' }, styles: 'max-height:500px' });\n var editElem = this.createElement('button', { attrs: { type: 'button', class: 'e-edit-rule e-css e-btn e-small e-flat e-primary' } });\n var divElem = this.createElement('div', { attrs: { class: 'e-summary-btndiv' } });\n contentElem.appendChild(textElem);\n textElem.textContent = this.getSqlFromRules(this.rule);\n editElem.textContent = this.l10n.getConstant('Edit');\n divElem.appendChild(editElem);\n contentElem.appendChild(divElem);\n this.element.appendChild(contentElem);\n };\n QueryBuilder.prototype.renderSummaryCollapse = function () {\n var collapseElem = this.createElement('div', {\n attrs: {\n class: 'e-collapse-rule e-icons',\n title: this.l10n.getConstant('SummaryViewTitle')\n }\n });\n this.element.querySelector('.e-group-header').appendChild(collapseElem);\n };\n QueryBuilder.prototype.columnSort = function () {\n if (this.sortDirection.toLowerCase() === 'descending') {\n this.columns = new DataManager(this.columns).executeLocal(new Query().sortByDesc('field'));\n }\n else if (this.sortDirection.toLowerCase() === 'ascending') {\n this.columns = new DataManager(this.columns).executeLocal(new Query().sortBy('field'));\n }\n };\n QueryBuilder.prototype.onChangeNotGroup = function () {\n this.element.innerHTML = '';\n this.groupIdCounter = 0;\n if (!this.headerTemplate) {\n if (this.enableNotCondition) {\n if (this.enableNotCondition) {\n var inputElem = this.createElement('button', { attrs: { type: 'button', class: 'e-qb-toggle' } });\n this.groupElem.querySelector('.e-btn-group').insertBefore(inputElem, this.groupElem.querySelector('.e-btngroup-and'));\n }\n }\n else {\n this.groupElem.querySelector('.e-qb-toggle').remove();\n }\n }\n this.rule = this.checkNotGroup(this.rule);\n this.initWrapper();\n };\n QueryBuilder.prototype.notGroupRtl = function () {\n if (this.enableRtl) {\n addClass(this.element.querySelectorAll('.e-btn-group'), 'e-rtl');\n }\n else {\n removeClass(this.element.querySelectorAll('.e-btn-group'), 'e-rtl');\n }\n };\n QueryBuilder.prototype.checkNotGroup = function (rule) {\n var orgRule;\n if (rule.rules) {\n for (var i = 0; i < rule.rules.length; i++) {\n orgRule = rule.rules[i];\n orgRule = this.checkNotGroup(orgRule);\n rule.rules[i] = orgRule;\n }\n }\n if (!isNullOrUndefined(rule.not)) {\n if (this.enableNotCondition) {\n rule.not = false;\n }\n delete rule.not;\n }\n else if (this.enableNotCondition && !isNullOrUndefined(rule.condition)) {\n rule.not = false;\n }\n return rule;\n };\n QueryBuilder.prototype.onPropertyChanged = function (newProp, oldProp) {\n var properties = Object.keys(newProp);\n for (var _i = 0, properties_1 = properties; _i < properties_1.length; _i++) {\n var prop = properties_1[_i];\n switch (prop) {\n case 'summaryView':\n // eslint-disable-next-line\n var groupElem = this.element.querySelector('.e-group-container');\n // eslint-disable-next-line\n var summaryElem = this.element.querySelector('.e-summary-content');\n if (newProp.summaryView) {\n groupElem.style.display = 'none';\n if (this.element.querySelectorAll('.e-summary-content').length < 1) {\n this.renderSummary();\n summaryElem = this.element.querySelector('.e-summary-content');\n }\n else {\n this.element.querySelector('.e-summary-text').textContent = this.getSqlFromRules(this.rule);\n }\n summaryElem.style.display = 'block';\n }\n else {\n if (groupElem.querySelectorAll('.e-collapse-rule').length > -1) {\n this.renderSummaryCollapse();\n }\n groupElem.style.display = 'block';\n summaryElem.style.display = 'none';\n }\n break;\n case 'displayMode':\n this.refresh();\n break;\n case 'showButtons':\n if (newProp.showButtons.ruleDelete) {\n removeClass(this.element.querySelectorAll('.e-rule-delete'), 'e-button-hide');\n }\n else {\n addClass(this.element.querySelectorAll('.e-rule-delete'), 'e-button-hide');\n }\n if (newProp.showButtons.groupDelete) {\n removeClass(this.element.querySelectorAll('.e-deletegroup'), 'e-button-hide');\n }\n else {\n addClass(this.element.querySelectorAll('.e-deletegroup'), 'e-button-hide');\n }\n break;\n case 'cssClass':\n if (oldProp.cssClass) {\n removeClass([this.element], oldProp.cssClass.split(' '));\n }\n if (newProp.cssClass) {\n addClass([this.element], newProp.cssClass.replace(/\\s+/g, ' ').trim().split(' '));\n }\n break;\n case 'enableRtl':\n if (newProp.enableRtl) {\n addClass([this.element], 'e-rtl');\n this.notGroupRtl();\n }\n else {\n removeClass([this.element], 'e-rtl');\n this.notGroupRtl();\n }\n break;\n case 'enablePersistence':\n this.enablePersistence = newProp.enablePersistence;\n break;\n case 'dataSource':\n this.dataSource = newProp.dataSource;\n this.refresh();\n break;\n case 'columns':\n this.columns = newProp.columns;\n this.columnSort();\n this.updateSubFieldsFromColumns(this.columns);\n break;\n case 'sortDirection':\n this.sortDirection = newProp.sortDirection;\n this.columnSort();\n break;\n case 'maxGroupCount':\n this.maxGroupCount = newProp.maxGroupCount;\n break;\n case 'height':\n this.height = newProp.height;\n this.element.style.height = this.height;\n break;\n case 'rule':\n this.rule = newProp.rule;\n newProp.rule = this.getRuleCollection(this.rule, false);\n break;\n case 'width':\n this.width = newProp.width;\n this.element.style.width = this.width;\n break;\n case 'locale':\n this.locale = newProp.locale;\n this.intl = new Internationalization(this.locale);\n this.isLocale = true;\n this.refresh();\n this.isLocale = false;\n break;\n case 'enableNotCondition':\n this.onChangeNotGroup();\n break;\n case 'readonly':\n this.isReadonly = newProp.readonly;\n this.enableReadonly();\n break;\n }\n }\n };\n QueryBuilder.prototype.preRender = function () {\n this.element.id = this.element.id || getUniqueID('ej2-querybuilder');\n this.defaultLocale = {\n StartsWith: 'Starts With',\n EndsWith: 'Ends With',\n Contains: 'Contains',\n NotLike: 'Not Like',\n Like: 'Like',\n Equal: 'Equal',\n NotEqual: 'Not Equal',\n LessThan: 'Less Than',\n LessThanOrEqual: 'Less Than Or Equal',\n GreaterThan: 'Greater Than',\n GreaterThanOrEqual: 'Greater Than Or Equal',\n Between: 'Between',\n NotBetween: 'Not Between',\n In: 'In',\n NotIn: 'Not In',\n Remove: 'REMOVE',\n SelectField: 'Select a field',\n SelectOperator: 'Select operator',\n DeleteRule: 'Remove this condition',\n DeleteGroup: 'Delete group',\n AddGroup: 'Add Group',\n AddCondition: 'Add Condition',\n Edit: 'EDIT',\n ValidationMessage: 'This field is required',\n SummaryViewTitle: 'Summary View',\n OtherFields: 'Other Fields',\n AND: 'AND',\n OR: 'OR',\n NOT: 'NOT',\n SelectValue: 'Enter Value',\n IsEmpty: 'Is Empty',\n IsNotEmpty: 'Is Not Empty',\n IsNull: 'Is Null',\n IsNotNull: 'Is Not Null',\n True: 'true',\n False: 'false',\n AddButton: 'Add Group/Condition'\n };\n this.l10n = new L10n('querybuilder', this.defaultLocale, this.locale);\n this.intl = new Internationalization(this.locale);\n this.groupIdCounter = 0;\n this.subFilterCounter = 0;\n this.ruleIdCounter = 0;\n this.btnGroupId = 0;\n this.isImportRules = false;\n this.parser = [];\n this.customOperators = {\n stringOperator: [\n { value: 'startswith', key: this.l10n.getConstant('StartsWith') },\n { value: 'endswith', key: this.l10n.getConstant('EndsWith') },\n { value: 'contains', key: this.l10n.getConstant('Contains') },\n { value: 'equal', key: this.l10n.getConstant('Equal') },\n { value: 'notequal', key: this.l10n.getConstant('NotEqual') },\n { value: 'in', key: this.l10n.getConstant('In') },\n { value: 'notin', key: this.l10n.getConstant('NotIn') },\n { value: 'isempty', key: this.l10n.getConstant('IsEmpty') },\n { value: 'isnotempty', key: this.l10n.getConstant('IsNotEmpty') }\n ],\n dateOperator: [\n { value: 'equal', key: this.l10n.getConstant('Equal') },\n { value: 'greaterthan', key: this.l10n.getConstant('GreaterThan') },\n { value: 'greaterthanorequal', key: this.l10n.getConstant('GreaterThanOrEqual') },\n { value: 'lessthan', key: this.l10n.getConstant('LessThan') },\n { value: 'lessthanorequal', key: this.l10n.getConstant('LessThanOrEqual') },\n { value: 'notequal', key: this.l10n.getConstant('NotEqual') }\n ],\n booleanOperator: [\n { value: 'equal', key: this.l10n.getConstant('Equal') },\n { value: 'notequal', key: this.l10n.getConstant('NotEqual') }\n ],\n numberOperator: [\n { value: 'equal', key: this.l10n.getConstant('Equal') },\n { value: 'greaterthanorequal', key: this.l10n.getConstant('GreaterThanOrEqual') },\n { value: 'greaterthan', key: this.l10n.getConstant('GreaterThan') },\n { value: 'between', key: this.l10n.getConstant('Between') },\n { value: 'lessthan', key: this.l10n.getConstant('LessThan') },\n { value: 'notbetween', key: this.l10n.getConstant('NotBetween') },\n { value: 'lessthanorequal', key: this.l10n.getConstant('LessThanOrEqual') },\n { value: 'notequal', key: this.l10n.getConstant('NotEqual') },\n { value: 'in', key: this.l10n.getConstant('In') },\n { value: 'notin', key: this.l10n.getConstant('NotIn') }\n ]\n };\n this.operators = {\n equal: '=', notequal: '!=', greaterthan: '>', greaterthanorequal: '>=', lessthan: '<', in: 'IN', notin: 'NOT IN',\n lessthanorequal: '<=', startswith: 'LIKE', endswith: 'LIKE', between: 'BETWEEN', notbetween: 'NOT BETWEEN', contains: 'LIKE',\n isnull: 'IS NULL', isnotnull: 'IS NOT NULL', isempty: 'IS EMPTY', isnotempty: 'IS NOT EMPTY', notstartswith: 'NOT LIKE',\n notendswith: 'NOT LIKE', notcontains: 'NOT LIKE'\n };\n this.sqlOperators = {\n equal: '=', notequal: '!=', greaterthan: '>', greaterthanorequal: '>=', lessthan: '<', in: this.l10n.getConstant('In').toUpperCase(),\n notin: this.l10n.getConstant('NotIn').toUpperCase(), lessthanorequal: '<=', startswith: this.l10n.getConstant('Like').toUpperCase(),\n endswith: this.l10n.getConstant('Like').toUpperCase(), between: this.l10n.getConstant('Between').toUpperCase(),\n notbetween: this.l10n.getConstant('NotBetween').toUpperCase(), contains: this.l10n.getConstant('Like').toUpperCase(),\n isnull: this.l10n.getConstant('IsNull').toUpperCase(), isnotnull: this.l10n.getConstant('IsNotNull').toUpperCase(),\n isempty: this.l10n.getConstant('IsEmpty').toUpperCase(), isnotempty: this.l10n.getConstant('IsNotEmpty').toUpperCase(),\n notstartswith: this.l10n.getConstant('NotLike').toUpperCase(), notendswith: this.l10n.getConstant('NotLike').toUpperCase(),\n notcontains: this.l10n.getConstant('NotLike').toUpperCase()\n };\n if (!this.fields) {\n this.fields = { text: 'label', value: 'field' };\n }\n };\n QueryBuilder.prototype.render = function () {\n this.levelColl = {};\n this.items = [\n {\n text: this.l10n.getConstant('AddGroup'),\n iconCss: 'e-icons e-add-icon e-addgroup'\n },\n {\n text: this.l10n.getConstant('AddCondition'),\n iconCss: 'e-icons e-add-icon e-addrule'\n }\n ];\n this.ruleElem = this.ruleTemplate();\n this.groupElem = this.groupTemplate();\n var stringOper = [\n { value: 'isnull', key: this.l10n.getConstant('IsNull') },\n { value: 'isnotnull', key: this.l10n.getConstant('IsNotNull') }\n ];\n var numberOper = [\n { value: 'isnull', key: this.l10n.getConstant('IsNull') },\n { value: 'isnotnull', key: this.l10n.getConstant('IsNotNull') }\n ];\n this.customOperators['stringOperator'] = this.customOperators['stringOperator'].concat(stringOper); // tslint:disable-line\n this.customOperators['numberOperator'] = this.customOperators['numberOperator'].concat(numberOper); // tslint:disable-line\n if (this.dataSource instanceof DataManager) {\n this.dataManager = this.dataSource;\n this.executeDataManager(new Query().take(1));\n }\n else {\n this.dataManager = new DataManager(this.dataSource);\n this.dataColl = this.dataManager.executeLocal(new Query());\n this.initControl();\n }\n this.renderComplete();\n };\n QueryBuilder.prototype.templateParser = function (template) {\n if (template) {\n try {\n if (document.querySelectorAll(template).length) {\n return templateCompiler(document.querySelector(template).innerHTML.trim());\n }\n else {\n return compile(template);\n }\n }\n catch (error) {\n return templateCompiler(template);\n }\n }\n return undefined;\n };\n QueryBuilder.prototype.executeDataManager = function (query) {\n var _this = this;\n var data = this.dataManager.executeQuery(query);\n var deferred = new Deferred();\n data.then(function (e) {\n if (e.actual && e.actual.result) {\n _this.dataColl = e.actual.result;\n }\n else {\n _this.dataColl = e.result;\n }\n _this.initControl();\n }).catch(function (e) {\n deferred.reject(e);\n });\n };\n QueryBuilder.prototype.initControl = function () {\n this.initialize();\n this.initWrapper();\n this.wireEvents();\n };\n QueryBuilder.prototype.wireEvents = function () {\n var wrapper = this.getWrapper();\n EventHandler.add(wrapper, 'click', this.clickEventHandler, this);\n EventHandler.add(wrapper, 'focusout', this.focusEventHandler, this);\n EventHandler.add(wrapper, 'focusin', this.focusEventHandler, this);\n EventHandler.add(this.element, 'keydown', this.keyBoardHandler, this);\n };\n QueryBuilder.prototype.unWireEvents = function () {\n var wrapper = this.getWrapper();\n EventHandler.remove(wrapper, 'click', this.clickEventHandler);\n EventHandler.remove(wrapper, 'focusout', this.focusEventHandler);\n EventHandler.remove(wrapper, 'focusin', this.focusEventHandler);\n EventHandler.remove(this.element, 'keydown', this.keyBoardHandler);\n };\n QueryBuilder.prototype.getParentGroup = function (target, isParent) {\n var groupLevel = (target instanceof Element) ? this.levelColl[target.id] : this.levelColl[\"\" + target];\n var len = isParent ? groupLevel.length - 1 : groupLevel.length;\n var rule = this.rule;\n for (var i = 0; i < len; i++) {\n rule = this.findGroupByIdx(groupLevel[i], rule, i === 0);\n }\n return rule;\n };\n /**\n * Delete the Group\n *\n * @param {Element | string} target - 'target' to be passed to delete the group.\n * @returns {void}\n */\n QueryBuilder.prototype.deleteGroup = function (target) {\n var _this = this;\n var groupElem = target;\n var groupId;\n if (typeof target === 'string') {\n groupId = this.element.id + '_' + target;\n target = document.getElementById(groupId);\n }\n else {\n groupId = groupElem.id.replace(this.element.id + '_', '');\n }\n var args = { groupID: groupId, cancel: false, type: 'deleteGroup' };\n if (!this.isImportRules) {\n this.trigger('beforeChange', args, function (observedChangeArgs) {\n _this.deleteGroupSuccessCallBack(observedChangeArgs, target);\n });\n }\n else {\n this.deleteGroupSuccessCallBack(args, target);\n }\n };\n QueryBuilder.prototype.deleteGroupSuccessCallBack = function (args, target) {\n if (!args.cancel) {\n var groupElem = target;\n var rule = this.getParentGroup(groupElem, true);\n var index = 0;\n var i = void 0;\n var len = void 0;\n var beforeRules = this.getValidRules(this.rule);\n var nextElem = groupElem.nextElementSibling;\n var prevElem = groupElem.previousElementSibling;\n var element = groupElem.querySelectorAll('.e-group-container');\n var valElem = groupElem.querySelectorAll('.e-tooltip');\n len = valElem.length;\n for (i = 0; i < len; i++) {\n getComponent(valElem[i], 'tooltip').destroy();\n }\n for (i = 0, len = element.length; i < len; i++) {\n delete this.levelColl[element[i].id];\n }\n while (groupElem.previousElementSibling !== null) {\n groupElem = groupElem.previousElementSibling;\n index++;\n }\n if (nextElem && nextElem.className.indexOf('e-separate-rule') > -1) {\n removeClass([nextElem], 'e-separate-rule');\n addClass([nextElem], 'e-joined-rule');\n if (prevElem && prevElem.className.indexOf('e-rule-container') > -1) {\n addClass([prevElem], 'e-prev-joined-rule');\n }\n }\n var elem = groupElem.parentElement.parentElement.parentElement;\n var removeString = [];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.isReact || this.isAngular) {\n var remRule = rule.rules[index];\n var ruleElemColl = target.querySelectorAll('.e-rule-container');\n if (remRule && remRule.rules) {\n for (var r = 0; r < remRule.rules.length; r++) {\n var column = this.getColumn(remRule.rules[r].field);\n var isTemplateRendered = ruleElemColl[r].querySelector('.e-template-value');\n if (column && (column.ruleTemplate || (this.isPlatformTemplate(column) && isTemplateRendered))) {\n removeString.push(ruleElemColl[r].id);\n }\n }\n }\n }\n detach(target);\n if (this.headerTemplate) {\n this.clearQBTemplate([target.id]);\n }\n if (removeString.length) {\n this.clearQBTemplate(removeString);\n }\n rule.rules.splice(index, 1);\n delete this.levelColl[args.groupID];\n this.refreshLevelColl();\n this.disableRuleCondition(elem, rule);\n if (!this.isImportRules) {\n this.trigger('change', args);\n }\n this.filterRules(beforeRules, this.getValidRules(this.rule), 'deleteGroup');\n }\n };\n QueryBuilder.prototype.isPlatformTemplate = function (column) {\n var isTemp = false;\n isTemp = column.template && (typeof column.template === 'string' || column.template.create === undefined);\n return isTemp;\n };\n QueryBuilder.prototype.deleteRule = function (target) {\n var _this = this;\n var groupElem = closest(target, '.e-group-container');\n var groupID = groupElem.id.replace(this.element.id + '_', '');\n var ruleID = closest(target, '.e-rule-container').id.replace(this.element.id + '_', '');\n var args = { groupID: groupID, ruleID: ruleID, cancel: false, type: 'deleteRule' };\n if (!this.isImportRules) {\n this.trigger('beforeChange', args, function (observedChangeArgs) {\n _this.deleteRuleSuccessCallBack(observedChangeArgs, target);\n });\n }\n else {\n this.deleteRuleSuccessCallBack(args, target);\n }\n };\n QueryBuilder.prototype.deleteRuleSuccessCallBack = function (args, target) {\n if (!args.cancel) {\n var groupElem = closest(target, '.e-group-container');\n var rule = this.getParentGroup(groupElem);\n var ruleElem = closest(target, '.e-rule-container');\n var beforeRules = this.getValidRules(this.rule);\n var clnruleElem = ruleElem;\n var nextElem = ruleElem.nextElementSibling;\n var prevElem = ruleElem.previousElementSibling;\n var index = 0;\n var valElem = ruleElem.querySelectorAll('.e-tooltip');\n var i = void 0;\n var len = valElem.length;\n for (i = 0; i < len; i++) {\n getComponent(valElem[i], 'tooltip').destroy();\n }\n while (ruleElem.previousElementSibling !== null) {\n ruleElem = ruleElem.previousElementSibling;\n index++;\n }\n var column = this.getColumn(rule.rules[index].field);\n if (column && column.template && clnruleElem.querySelector('.e-template')) {\n this.templateDestroy(column, clnruleElem.querySelector('.e-template').id);\n }\n if (!prevElem || prevElem.className.indexOf('e-rule-container') < 0) {\n if (nextElem) {\n removeClass([nextElem], 'e-joined-rule');\n }\n }\n if (!nextElem || nextElem.className.indexOf('e-rule-container') < 0) {\n if (prevElem) {\n removeClass([prevElem], 'e-prev-joined-rule');\n }\n }\n var isTemplateRendered = clnruleElem.querySelector('.e-template-value');\n // eslint-disable\n try {\n detach(clnruleElem);\n }\n catch (err) {\n // eslint-disable-next-line no-ex-assign\n err = [];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var error = 'error';\n // eslint-disable-next-line\n err[error] = error;\n }\n // eslint-enable\n if (column && column.ruleTemplate) {\n this.clearQBTemplate([clnruleElem.id]);\n }\n if (column && this.isPlatformTemplate(column) && isTemplateRendered) {\n this.clearQBTemplate([clnruleElem.id]);\n }\n rule.rules.splice(index, 1);\n if (!(rule.rules[0] && rule.rules[0].rules)) {\n this.disableRuleCondition(groupElem, rule);\n }\n if (!this.isImportRules) {\n this.trigger('change', args);\n }\n this.filterRules(beforeRules, this.getValidRules(this.rule), 'deleteRule');\n }\n };\n QueryBuilder.prototype.setGroupRules = function (rule, isRoot) {\n if (this.headerTemplate && isRoot) {\n this.isRoot = true;\n }\n this.reset();\n this.groupIdCounter = 1;\n this.ruleIdCounter = 0;\n this.isImportRules = true;\n this.rule = rule;\n rule = this.getRuleCollection(this.rule, false);\n this.importRules(this.rule, this.element.querySelector('.e-group-container'), true, this.rule.not, isRoot);\n this.isImportRules = false;\n };\n QueryBuilder.prototype.keyBoardHandler = function (e) {\n if (this.readonly && (e.keyCode === 38 || e.keyCode === 40 || e.keyCode === 13)) {\n e.preventDefault();\n }\n };\n QueryBuilder.prototype.clearQBTemplate = function (ruleElemColl) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.isReact || this.isAngular) {\n this.clearTemplate(ruleElemColl);\n }\n };\n QueryBuilder.prototype.disableRuleCondition = function (groupElem, rules) {\n if (!this.headerTemplate) {\n if (this.readonly) {\n return;\n }\n var count = groupElem.querySelector('.e-rule-list').childElementCount;\n var andElem = groupElem.querySelector('.e-btngroup-and');\n var orElem = groupElem.querySelector('.e-btngroup-or');\n if (count > 1) {\n andElem.disabled = false;\n orElem.disabled = false;\n if (orElem.nextElementSibling.classList.contains('e-btn-disable') ||\n andElem.nextElementSibling.classList.contains('e-btn-disable')) {\n orElem.nextElementSibling.classList.remove('e-btn-disable');\n andElem.nextElementSibling.classList.remove('e-btn-disable');\n }\n if (rules && rules.condition === 'or') {\n orElem.checked = true;\n }\n else {\n andElem.checked = true;\n }\n }\n else {\n andElem.checked = false;\n andElem.disabled = true;\n orElem.checked = false;\n orElem.disabled = true;\n if (rules) {\n orElem.nextElementSibling.classList.add('e-btn-disable');\n andElem.nextElementSibling.classList.add('e-btn-disable');\n }\n }\n }\n };\n /**\n * Get the valid rule or rules collection.\n *\n * @param {RuleModel} currentRule - 'currentRule' to be passed to get the valid rules.\n * @returns {RuleModel} - Valid rule or rules collection\n */\n QueryBuilder.prototype.getValidRules = function (currentRule) {\n if (!currentRule) {\n currentRule = this.getRules();\n }\n var ruleCondtion = currentRule.condition;\n var notCondition = currentRule.not;\n var ruleColl = extend([], currentRule.rules, [], true);\n var rule = this.getRuleCollection({ condition: ruleCondtion, rules: ruleColl, not: notCondition }, true);\n return rule;\n };\n QueryBuilder.prototype.getRuleCollection = function (rule, isValidRule) {\n if (isNullOrUndefined(rule)) {\n return null;\n }\n var orgRule;\n if (rule.rules && rule.rules.length && (Object.keys(rule.rules[0]).length > 6 || isValidRule)) {\n var jLen = rule.rules.length;\n for (var j = 0; j < jLen; j++) {\n orgRule = rule.rules[j];\n orgRule = this.getRuleCollection(orgRule, isValidRule);\n rule.rules[j] = orgRule;\n if (Object.keys(orgRule).length < 1 && isValidRule) {\n rule.rules.splice(j, 1);\n j--;\n jLen--;\n }\n }\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var customObj = rule.custom;\n if ((rule.field && rule.field !== '') && (isNullOrUndefined(customObj) || (customObj && (customObj.type !== 'question' &&\n customObj.type !== 'answer')))) {\n if (rule.operator) {\n if (rule.operator.toString().indexOf('null') > -1 || rule.operator.toString().indexOf('empty') > -1) {\n rule.value = null;\n }\n }\n if ((this.isRefreshed && this.enablePersistence) || (this.rule.field !== '' && rule.operator !== '' && (rule.value !== '' &&\n rule.value !== undefined)) || (customObj && customObj.isQuestion)) {\n var condition = rule.condition;\n rule = {\n 'label': rule.label, 'field': rule.field, 'operator': rule.operator, 'type': rule.type, 'value': rule.value\n };\n if (condition) {\n rule.condition = condition;\n }\n if (customObj) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n rule.custom = customObj;\n }\n }\n else {\n rule = {};\n }\n }\n else {\n if (customObj && (customObj.type === 'question' || customObj.type === 'answer')) {\n var notValue = rule.not;\n rule = { 'label': rule.label, 'field': rule.field, 'operator': rule.operator, 'type': rule.type, 'value': rule.value,\n 'condition': rule.condition, 'rules': rule.rules\n };\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n rule.custom = customObj;\n if (this.enableNotCondition) {\n rule.not = notValue;\n }\n }\n else if ((isNullOrUndefined(rule.condition)) && isNullOrUndefined(rule.rules)) {\n rule = {};\n }\n else {\n if (this.enableNotCondition) {\n rule = { 'condition': rule.condition, 'rules': rule.rules, 'not': rule.not };\n }\n else {\n rule = { 'condition': rule.condition, 'rules': rule.rules };\n }\n if (rule.rules.length === 0) {\n rule = {};\n }\n }\n }\n return rule;\n };\n /**\n * Set the rule or rules collection.\n *\n * @param {RuleModel} rule - 'rule' to be passed to set rules.\n * @returns {void}.\n */\n QueryBuilder.prototype.setRules = function (rule) {\n var mRules = extend({}, rule, {}, true);\n if (this.headerTemplate) {\n this.setGroupRules(mRules, true);\n }\n else {\n this.setGroupRules(mRules);\n }\n };\n /**\n * Gets the rule or rule collection.\n *\n * @returns {object} - Rule or rule collection\n */\n QueryBuilder.prototype.getRules = function () {\n var rule;\n if (this.enableNotCondition) {\n rule = { condition: this.rule.condition, rules: this.rule.rules, not: this.rule.not };\n }\n else {\n rule = { condition: this.rule.condition, rules: this.rule.rules };\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.rule.custom) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n rule.custom = this.rule.custom;\n }\n return rule;\n };\n /**\n * Gets the rule.\n *\n * @param {string | HTMLElement} elem - 'elem' to be passed to get rule.\n * @returns {object} - Rule\n */\n QueryBuilder.prototype.getRule = function (elem) {\n var ruleElem;\n var ruleId;\n var index = 0;\n if (elem instanceof HTMLElement) {\n ruleElem = closest(elem, '.e-rule-container');\n }\n else {\n ruleId = this.element.id + '_' + elem;\n ruleElem = document.getElementById(ruleId);\n }\n var groupElem = closest(ruleElem, '.e-group-container');\n var rule = this.getParentGroup(groupElem);\n while (ruleElem.previousElementSibling !== null) {\n ruleElem = ruleElem.previousElementSibling;\n index++;\n }\n return rule.rules[index];\n };\n /**\n * Gets the group.\n *\n * @param {string | Element} target - 'target' to be passed to get group.\n * @returns {object} -Group\n */\n QueryBuilder.prototype.getGroup = function (target) {\n if (target instanceof Element && target.className.indexOf('e-group-container') < 1) {\n target = closest(target, '.e-group-container');\n }\n var groupId = (target instanceof Element) ? target.id : this.element.id + '_' + target;\n var rule = this.getParentGroup(groupId);\n return rule;\n };\n /**\n * Deletes the group or groups based on the group ID.\n *\n * @param {string[]} groupIdColl - 'groupIdColl' to be passed to delete groups.\n * @returns {void}\n */\n QueryBuilder.prototype.deleteGroups = function (groupIdColl) {\n var i;\n var len = groupIdColl.length;\n var groupID;\n for (i = 0; i < len; i++) {\n groupID = this.element.id + '_' + groupIdColl[i];\n this.deleteGroup(document.getElementById(groupID));\n }\n };\n /**\n * Return the Query from current rules collection.\n *\n * @returns {Promise} - Query from current rules collection\n * @blazorType object\n */\n QueryBuilder.prototype.getFilteredRecords = function () {\n var predicate = this.getPredicate(this.getValidRules(this.rule));\n var dataManagerQuery = isNullOrUndefined(predicate) ? new Query() : new Query().where(predicate);\n return this.dataManager.executeQuery(dataManagerQuery);\n };\n /**\n * Deletes the rule or rules based on the rule ID.\n *\n * @param {string[]} ruleIdColl - 'ruleIdColl' to be passed to delete rules.\n * @returns {void}.\n */\n QueryBuilder.prototype.deleteRules = function (ruleIdColl) {\n var i;\n var len = ruleIdColl.length;\n var ruleID;\n for (i = 0; i < len; i++) {\n ruleID = this.element.id + '_' + ruleIdColl[i];\n this.deleteRule(document.getElementById(ruleID));\n }\n };\n /**\n * Gets the query for Data Manager.\n *\n * @param {RuleModel} rule - 'rule' to be passed to get query.\n * @returns {string} - Query for Data Manager\n */\n QueryBuilder.prototype.getDataManagerQuery = function (rule) {\n var predicate = this.getPredicate(rule);\n var query;\n var fields = [];\n for (var i = 0, len = Object.keys(this.columns); i < len.length; i++) {\n fields.push(this.columns[i].field);\n }\n if (rule.rules.length) {\n query = new Query().select(fields).where(predicate);\n }\n else {\n query = new Query().select(fields);\n }\n return query;\n };\n /**\n * Get the predicate from collection of rules.\n *\n * @param {RuleModel} rule - 'rule' to be passed to get predicate.\n * @returns {Predicate} - Predicate from collection of rules\n */\n QueryBuilder.prototype.getPredicate = function (rule) {\n var ruleColl = rule.rules;\n var pred;\n var pred2;\n var ruleValue;\n var ignoreCase = false;\n var column;\n var ignoreOper = ['notcontains', 'notstartswith', 'notendswith'];\n if (!ruleColl) {\n return pred;\n }\n for (var i = 0, len = ruleColl.length; i < len; i++) {\n var keys = Object.keys(ruleColl[i]);\n ignoreCase = false;\n if (keys.indexOf('rules') > -1 && ruleColl[i].rules) {\n pred2 = this.getPredicate(ruleColl[i]);\n if (pred2) {\n if (pred) {\n if (rule.condition === 'and') {\n pred = pred.and(pred2);\n }\n else {\n pred = pred.or(pred2);\n }\n }\n else {\n pred = pred2;\n }\n }\n }\n else if (!isNullOrUndefined(ruleColl[i].operator) && !isNullOrUndefined(ruleColl[i].operator.length)) {\n var oper = ruleColl[i].operator.toLowerCase();\n var isDateFilter = false;\n var dateOperColl = ['equal', 'notequal', 'greaterthan', 'greaterthanorequal', 'lessthan', 'lessthanorequal'];\n if (ruleColl[i].type === 'string') {\n ignoreCase = this.matchCase ? false : true;\n }\n if (ruleColl[i].type === 'date' && dateOperColl.indexOf(oper) > -1) {\n ignoreCase = true;\n }\n column = this.getColumn(ruleColl[i].field);\n if (oper.indexOf('null') > -1 || oper.indexOf('empty') > -1) {\n ruleColl[i].value = null;\n }\n else if (ruleColl[i].type === 'date' && !(ruleColl[i].value instanceof Array)) {\n var format = this.getFormat(column.format);\n if (!isNullOrUndefined(ruleColl[i].value)) {\n ruleValue = this.getDate(ruleColl[i].value, format);\n if (dateOperColl.indexOf(oper) > -1 && !this.isTime(ruleColl[i].value)) {\n isDateFilter = true;\n }\n }\n else {\n ruleValue = null;\n }\n }\n else {\n ruleValue = ruleColl[i].value;\n }\n if (i === 0) {\n if (isDateFilter || (oper.indexOf('in') > -1 || oper.indexOf('between') > -1 || oper.indexOf('null') > -1 ||\n oper.indexOf('empty') > -1) && oper.indexOf('contains') < 0) {\n pred = isDateFilter ? this.datePredicate(ruleColl[i], ruleValue) :\n this.arrayPredicate(ruleColl[i]);\n }\n else {\n var value = ruleValue;\n if (value !== '' && ignoreOper.indexOf(oper) < 0) {\n pred = new Predicate(ruleColl[i].field, ruleColl[i].operator, ruleValue, ignoreCase);\n }\n }\n }\n else {\n if (ignoreOper.indexOf(oper) > -1) {\n continue;\n }\n if (isDateFilter || (oper.indexOf('in') > -1 || oper.indexOf('between') > -1 ||\n oper.indexOf('null') > -1 || oper.indexOf('empty') > -1) && oper.indexOf('contains') < 0) {\n pred = isDateFilter ? this.datePredicate(ruleColl[i], ruleValue, pred, rule.condition) :\n this.arrayPredicate(ruleColl[i], pred, rule.condition);\n }\n else {\n if (rule.condition === 'and') {\n var value = ruleValue;\n if (pred && value !== '') {\n pred\n = pred.and(ruleColl[i].field, ruleColl[i].operator, ruleValue, ignoreCase);\n }\n else if (value !== '') {\n pred = new Predicate(ruleColl[i].field, ruleColl[i].operator, ruleValue, ignoreCase);\n }\n }\n else {\n var value = ruleValue;\n if (pred && value !== '') {\n pred = pred.or(ruleColl[i].field, ruleColl[i].operator, ruleValue, ignoreCase);\n }\n else if (value !== '') {\n pred = new Predicate(ruleColl[i].field, ruleColl[i].operator, ruleValue, ignoreCase);\n }\n }\n }\n }\n }\n }\n if (this.dataSource instanceof DataManager) {\n if (!isNullOrUndefined(pred) && (pred.operator === 'isnull' || pred.operator === 'isnotnull')) {\n pred.operator = pred.operator === 'isnull' ? 'equal' : 'notequal';\n }\n }\n return pred;\n };\n QueryBuilder.prototype.getLocale = function () {\n var gregorianFormat = '.dates.calendars.gregorian.days.format.short';\n var localeString = this.locale;\n var mainVal = 'main.';\n var cultureObj = getValue(mainVal + '' + this.locale + gregorianFormat, cldrData);\n if (!cultureObj) {\n localeString = 'en';\n }\n return localeString;\n };\n QueryBuilder.prototype.getColumn = function (field, col) {\n var columns = this.columns;\n var column;\n columns = col ? col : columns;\n for (var i = 0, iLen = columns.length; i < iLen; i++) {\n if (columns[i].field === field) {\n column = columns[i];\n break;\n }\n else if (columns[i].columns) {\n column = this.getColumn(field, columns[i].columns);\n if (column) {\n break;\n }\n }\n else if (field && field.indexOf(this.separator) > -1) {\n if (this.separator !== '' && columns[i].field === field.split(this.separator)[0]) {\n column = columns[i];\n break;\n }\n }\n }\n return column;\n };\n /* eslint-disable */\n /**\n * Return the operator bound to the column.\n *\n * @returns {[key: string]: Object}[] - Operator bound to the column\n */\n /* eslint-enable */\n QueryBuilder.prototype.getOperators = function (field) {\n var column = this.getColumn(field);\n return column.operators;\n };\n QueryBuilder.prototype.setTime = function (date, isStart) {\n if (isStart) {\n date.setHours(0, 0, 0);\n }\n else {\n date.setHours(23, 59, 59);\n }\n return date;\n };\n QueryBuilder.prototype.datePredicate = function (ruleColl, value, predicate, condition) {\n var pred;\n var startDate = this.setTime(new Date(value.getTime()), true);\n var endDate = this.setTime(value);\n switch (ruleColl.operator) {\n case 'equal':\n pred = new Predicate(ruleColl.field, 'greaterthanorequal', startDate);\n pred = pred.and(ruleColl.field, 'lessthanorequal', endDate);\n break;\n case 'notequal':\n pred = new Predicate(ruleColl.field, 'lessthan', startDate);\n pred = pred.or(ruleColl.field, 'greaterthan', endDate);\n break;\n case 'greaterthan':\n pred = new Predicate(ruleColl.field, 'greaterthan', endDate);\n break;\n case 'greaterthanorequal':\n pred = new Predicate(ruleColl.field, 'greaterthanorequal', startDate);\n break;\n case 'lessthan':\n pred = new Predicate(ruleColl.field, 'lessthan', startDate);\n break;\n case 'lessthanorequal':\n pred = new Predicate(ruleColl.field, 'lessthanorequal', endDate);\n break;\n }\n if (pred) {\n if (predicate) {\n if (condition === 'and') {\n predicate = predicate.and(pred);\n }\n else if (condition === 'or') {\n predicate = predicate.or(pred);\n }\n }\n else {\n predicate = pred;\n }\n }\n return predicate;\n };\n QueryBuilder.prototype.arrayPredicate = function (ruleColl, predicate, condition) {\n var value = ruleColl.value;\n var operator = ruleColl.operator.toString();\n var nullValue = ruleColl.value;\n var pred;\n var column = this.getColumn(ruleColl.field);\n var format = this.getFormat(column.format);\n if (operator.indexOf('null') > -1 || operator.indexOf('empty') > -1) {\n switch (operator) {\n case 'isnull':\n pred = new Predicate(ruleColl.field, 'isnull', nullValue);\n break;\n case 'isnotnull':\n pred = new Predicate(ruleColl.field, 'isnotnull', nullValue);\n break;\n case 'isempty':\n pred = new Predicate(ruleColl.field, 'equal', '');\n break;\n case 'isnotempty':\n pred = new Predicate(ruleColl.field, 'notequal', '');\n break;\n }\n }\n if (!(operator.indexOf('null') > -1 || operator.indexOf('empty') > -1)) {\n for (var j = 0, jLen = value.length; j < jLen; j++) {\n if (value[j] !== '' || ((operator === 'in' || operator === 'notin') && column.type === 'string')) {\n if (j === 0) {\n var gte = 'greaterthanorequal';\n switch (operator) {\n case 'between':\n if (column.type !== 'date') {\n pred = new Predicate(ruleColl.field, gte, value[j]);\n }\n else {\n pred = new Predicate(ruleColl.field, gte, value[j] ?\n (this.isTime(value[j]) ? this.getDate(value[j], format) :\n this.setTime(this.getDate(value[j], format), true)) : null);\n }\n break;\n case 'notbetween':\n if (column.type === 'date') {\n pred = new Predicate(ruleColl.field, 'lessthan', value[j] ?\n (this.isTime(value[j]) ? this.getDate(value[j], format) :\n this.setTime(this.getDate(value[j], format), true)) : null);\n }\n else {\n pred = new Predicate(ruleColl.field, 'lessthan', value[j]);\n }\n break;\n case 'in':\n pred = new Predicate(ruleColl.field, 'equal', value[j]);\n break;\n case 'notin':\n pred = new Predicate(ruleColl.field, 'notequal', value[j]);\n break;\n }\n }\n else {\n var gt = 'greaterthan';\n switch (ruleColl.operator) {\n case 'between':\n if (column.type === 'date') {\n pred = pred.and(ruleColl.field, 'lessthanorequal', value[j] ?\n (this.isTime(value[j]) ? this.getDate(value[j], format) :\n this.setTime(this.getDate(value[j], format))) : value[j]);\n }\n else {\n pred = pred.and(ruleColl.field, 'lessthanorequal', value[j]);\n }\n break;\n case 'notbetween':\n if (column.type === 'date') {\n pred = pred.or(ruleColl.field, gt, value[j] ?\n (this.isTime(value[j]) ? this.getDate(value[j], format) :\n this.setTime(this.getDate(value[j], format))) : value[j]);\n }\n else {\n pred = pred.or(ruleColl.field, 'greaterthan', value[j]);\n }\n break;\n case 'in':\n pred = pred.or(ruleColl.field, 'equal', value[j]);\n break;\n case 'notin':\n pred = pred.and(ruleColl.field, 'notequal', value[j]);\n break;\n }\n }\n }\n }\n }\n if (pred) {\n if (predicate) {\n if (condition === 'and') {\n predicate = predicate.and(pred);\n }\n else if (condition === 'or') {\n predicate = predicate.or(pred);\n }\n }\n else {\n predicate = pred;\n }\n }\n return predicate;\n };\n QueryBuilder.prototype.getDate = function (value, format) {\n var currDate = this.intl.parseDate(value, format);\n if (value.indexOf(':') > -1 && (value.indexOf('/') < 0 && value.indexOf(',') < 0\n && value.indexOf('-') < 0)) {\n currDate = new Date();\n // eslint-disable-next-line\n currDate.setHours(parseInt(value.split(':')[0]));\n // eslint-disable-next-line\n currDate.setMinutes(parseInt(value.split(':')[1]));\n if (value.split(':')[2]) {\n // eslint-disable-next-line\n currDate.setSeconds(parseInt(value.split(':')[2]));\n }\n }\n return currDate;\n };\n QueryBuilder.prototype.isTime = function (value) {\n if (value && value.indexOf(':') > -1) {\n return true;\n }\n return false;\n };\n QueryBuilder.prototype.importRules = function (rule, parentElem, isReset, not, isRoot) {\n if (!isReset) {\n parentElem = this.renderGroup(rule, rule.condition, parentElem, not);\n }\n else {\n if (rule.rules.length > 1 && !this.headerTemplate) {\n // enable/disable conditions when rule group is added\n var orElem = parentElem.querySelector('.e-btngroup-or');\n var andElem = parentElem.querySelector('.e-btngroup-and');\n orElem.disabled = false;\n andElem.disabled = false;\n if (rule.condition === 'or') {\n orElem.checked = true;\n }\n else {\n andElem.checked = true;\n }\n }\n else {\n // enable/disable conditions when rule condition is added\n this.disableRuleCondition(parentElem);\n }\n if (this.headerTemplate && isRoot) {\n parentElem = this.renderGroup(rule, rule.condition, this.element, rule.not, isRoot);\n }\n if (this.enableNotCondition && !this.headerTemplate) {\n var tglBtnElem = parentElem.querySelector('.e-qb-toggle');\n if (rule.not) {\n addClass([tglBtnElem], 'e-active-toggle');\n }\n else {\n removeClass([tglBtnElem], 'e-active-toggle');\n }\n }\n }\n if (rule.rules.length === 0 && this.headerTemplate) {\n rule.rules[0] = { 'label': '', 'field': '', 'operator': '', 'type': '', 'value': '' };\n }\n var ruleColl = rule.rules;\n if (!isNullOrUndefined(ruleColl)) {\n for (var i = 0, len = ruleColl.length; i < len; i++) {\n var keys = Object.keys(ruleColl[i]);\n if (!isNullOrUndefined(ruleColl[i].rules) && keys.indexOf('rules') > -1 && (ruleColl[i].rules.length !== 0)) {\n parentElem = this.renderGroup(ruleColl[i], ruleColl[i].condition, parentElem, ruleColl[i].not);\n parentElem = this.importRules(ruleColl[i], parentElem, true);\n }\n else {\n this.renderRule(ruleColl[i], parentElem);\n }\n }\n }\n parentElem = closest(parentElem, '.e-rule-list');\n if (parentElem) {\n parentElem = closest(parentElem, '.e-group-container');\n }\n return parentElem;\n };\n QueryBuilder.prototype.renderGroup = function (rule, condition, parentElem, not, isRoot) {\n this.addGroupElement(true, parentElem, condition, false, not, isRoot, rule); //Child group\n var element = parentElem.querySelectorAll('.e-group-container');\n return element[element.length - 1];\n };\n QueryBuilder.prototype.renderRule = function (rule, parentElem) {\n if (parentElem.className.indexOf('e-group-container') > -1) {\n this.addRuleElement(parentElem, rule); //Create rule\n }\n else {\n this.addRuleElement(parentElem.querySelector('.e-group-container'), rule); //Create group\n }\n };\n QueryBuilder.prototype.enableReadonly = function () {\n var target = this.element;\n var elem = target.querySelectorAll('.e-dropdownlist, .e-numerictextbox, .e-textbox, .e-datepicker, .e-multiselect .e-lib, .e-radio');\n for (var i = 0; i < elem.length; i++) {\n if (elem[i].classList.contains('e-dropdownlist')) {\n var dropDownObj = getInstance(elem[i], DropDownList);\n dropDownObj.readonly = this.isReadonly;\n }\n else if (elem[i].classList.contains('e-numerictextbox')) {\n var numericTextBoxObj = getInstance(elem[i], NumericTextBox);\n numericTextBoxObj.readonly = this.isReadonly;\n }\n else if (elem[i].classList.contains('e-textbox')) {\n var textBoxObj = getInstance(elem[i], TextBox);\n textBoxObj.readonly = this.isReadonly;\n }\n else if (elem[i].classList.contains('e-datepicker')) {\n var datePickerObj = getInstance(elem[i], DatePicker);\n datePickerObj.readonly = this.isReadonly;\n }\n else if (elem[i].classList.contains('e-multiselect')) {\n var multiSelectObj = getInstance(elem[i], MultiSelect);\n multiSelectObj.readonly = this.isReadonly;\n }\n else if (elem[i].classList.contains('e-radio')) {\n var radioButtonObj = getInstance(elem[i], RadioButton);\n if (!radioButtonObj.checked) {\n if (this.isReadonly) {\n elem[i].parentElement.style.display = 'none';\n }\n else {\n elem[i].parentElement.style.display = 'inherit';\n }\n }\n }\n }\n var deleteGroupElems = this.element.querySelectorAll('.e-deletegroup');\n var addRuleGroupElems = this.element.querySelectorAll('.e-addrulegroup');\n var removeRuleElems = this.element.querySelectorAll('.e-removerule');\n if (!this.isReadonly && this.ruleElem.classList.contains('e-readonly')) {\n this.ruleElem.classList.remove('e-readonly');\n }\n var elems = [deleteGroupElems, addRuleGroupElems, removeRuleElems];\n for (var i = 0; i < elems.length; i++) {\n elems[i].forEach(function (elem) {\n if (elem.classList.contains('e-readonly')) {\n elem.classList.remove('e-readonly');\n }\n else {\n elem.classList.add('e-readonly');\n }\n });\n }\n this.enableBtnGroup();\n };\n QueryBuilder.prototype.enableBtnGroup = function () {\n var _this = this;\n var elems = this.element.querySelectorAll('.e-btngroup-and-lbl, .e-btngroup-or-lbl, .e-qb-toggle');\n var not = false;\n elems.forEach(function (elem) {\n if (elem.classList.contains('e-qb-toggle') && !elem.classList.contains('e-active-toggle')\n && !elem.classList.contains('e-readonly')) {\n elem.classList.add('e-readonly');\n not = false;\n }\n else if (elem.classList.contains('e-qb-toggle') && elem.classList.contains('e-not-readonly')) {\n elem.classList.remove('e-not-readonly');\n }\n else if (elem.classList.contains('e-qb-toggle') && elem.classList.contains('e-readonly')) {\n elem.classList.remove('e-readonly');\n }\n else if (elem.classList.contains('e-active-toggle')) {\n elem.classList.add('e-not-readonly');\n not = true;\n }\n else if (elem.previousElementSibling.checked || elem.classList.contains('e-readonly')) {\n elem.classList.remove('e-readonly');\n if (not) {\n if (elem.textContent === 'AND') {\n elem.classList.add('e-readonly-and');\n }\n else {\n elem.classList.add('e-readonly-or');\n }\n }\n else {\n if (elem.textContent === 'AND' && _this.isReadonly) {\n elem.classList.remove('e-not');\n elem.classList.add('e-readonly-and');\n }\n else {\n if (_this.enableNotCondition) {\n elem.classList.add('e-not');\n }\n elem.classList.remove('e-readonly-and');\n }\n if (elem.textContent === 'OR' && _this.isReadonly) {\n elem.classList.add('e-readonly-or-not');\n }\n else {\n elem.classList.remove('e-readonly-or-not');\n }\n }\n }\n else if (elem.classList.contains('e-btn-disable')) {\n // do nothing\n }\n else {\n elem.classList.add('e-readonly');\n }\n });\n };\n QueryBuilder.prototype.isDateFunction = function (value) {\n var dateFunc = ['date', 'time', 'day', 'week', 'month', 'year', 'hour', 'minute', 'second', 'now', 'quarter', 'period', 'extract'];\n for (var i = 0, len = dateFunc.length; i < len; i++) {\n if (value.toLowerCase().indexOf(dateFunc[i]) > -1) {\n return true;\n }\n }\n return false;\n };\n QueryBuilder.prototype.getSqlString = function (rules, enableEscape, queryStr, sqlLocale) {\n var isRoot = false;\n if (!queryStr && queryStr !== '') {\n queryStr = '';\n isRoot = true;\n }\n else {\n queryStr += '(';\n }\n var condition = rules.condition;\n if (rules.not) {\n var rulesNotCondition = void 0;\n if (isRoot) {\n rulesNotCondition = sqlLocale ? this.l10n.getConstant('NOT').toUpperCase() + ' (' : 'NOT (';\n queryStr += rulesNotCondition;\n }\n else {\n rulesNotCondition = sqlLocale ? ' ' + this.l10n.getConstant('NOT').toUpperCase() + ' (' : ' NOT (';\n queryStr += rulesNotCondition;\n }\n }\n if (rules.rules) {\n for (var j = 0, jLen = rules.rules.length; j < jLen; j++) {\n if (rules.rules[j].rules) {\n queryStr = this.getSqlString(rules.rules[j], enableEscape, queryStr, sqlLocale);\n }\n else {\n var rule = rules.rules[j];\n var valueStr = '';\n var ruleOpertor = sqlLocale ? this.sqlOperators[rule.operator] : this.operators[rule.operator];\n if (rule.value instanceof Array) {\n if (rule.operator.toString().indexOf('between') > -1) {\n var ruleCondition = sqlLocale ? ' ' + this.l10n.getConstant('AND').toUpperCase() + ' ' : ' ' + 'AND' + ' ';\n if (rule.type === 'date' && !this.isDateFunction(rule.value[0])) {\n valueStr += '\"' + rule.value[0] + '\"' + ruleCondition + '\"' + rule.value[1] + '\"';\n }\n else {\n valueStr += rule.value[0] + ruleCondition + rule.value[1];\n }\n }\n else {\n if (typeof rule.value[0] === 'string' && rule.value !== null) {\n valueStr += '(\"' + rule.value[0] + '\"';\n for (var k = 1, kLen = rule.value.length; k < kLen; k++) {\n valueStr += ',\"' + rule.value[k] + '\"';\n }\n valueStr += ')';\n }\n else {\n valueStr += '(' + rule.value + ')';\n }\n }\n }\n else {\n if (rule.operator.toString().indexOf('startswith') > -1) {\n valueStr += rule.value ? '(\"' + rule.value + '%\")' : '(' + rule.value + ')';\n }\n else if (rule.operator.toString().indexOf('endswith') > -1) {\n valueStr += rule.value ? '(\"%' + rule.value + '\")' : '(' + rule.value + ')';\n }\n else if (rule.operator.toString().indexOf('contains') > -1) {\n valueStr += rule.value ? '(\"%' + rule.value + '%\")' : '(' + rule.value + ')';\n }\n else {\n if (rule.type === 'number' || typeof rule.value === 'boolean' || rule.value === null) {\n valueStr += rule.value;\n }\n else {\n valueStr += '\"' + rule.value + '\"';\n }\n }\n }\n if (rule.operator.toString().indexOf('null') > -1 || (rule.operator.toString().indexOf('empty') > -1)) {\n if (enableEscape) {\n rule.field = '`' + rule.field + '`';\n }\n else {\n if (rule.field.indexOf(' ') > -1) {\n rule.field = '\"' + rule.field + '\"';\n }\n }\n queryStr += rule.field + ' ' + ruleOpertor;\n }\n else {\n if (enableEscape) {\n rule.field = '`' + rule.field + '`';\n }\n else {\n if (rule.field.indexOf(' ') > -1) {\n rule.field = '\"' + rule.field + '\"';\n }\n }\n queryStr += rule.field + ' ' + ruleOpertor + ' ' + valueStr;\n }\n if (rule.condition && rule.condition !== '') {\n condition = rule.condition;\n }\n }\n if (j !== jLen - 1) {\n if (condition === '') {\n condition = rules.rules[j].condition;\n }\n condition = sqlLocale ? this.l10n.getConstant(condition.toUpperCase()).toUpperCase() : condition.toUpperCase();\n queryStr += ' ' + condition + ' ';\n }\n }\n }\n if (!isRoot) {\n queryStr += ')';\n }\n if (rules.not) {\n queryStr += ')';\n }\n return queryStr;\n };\n /**\n * Sets the rules from the sql query.\n *\n * @param {string} sqlString - 'sql String' to be passed to set the rule.\n * @param {boolean} sqlLocale - Set `true` if Localization for Sql query.\n * @returns {void}\n */\n QueryBuilder.prototype.setRulesFromSql = function (sqlString, sqlLocale) {\n sqlString = sqlString.replace(/`/g, '');\n var ruleModel = this.getRulesFromSql(sqlString, sqlLocale);\n this.setRules({ condition: ruleModel.condition, not: ruleModel.not, rules: ruleModel.rules });\n };\n /**\n * Get the rules from SQL query.\n *\n * @param {string} sqlString - 'sql String' to be passed to get the rule.\n * @param {boolean} sqlLocale - Set `true` if Localization for Sql query.\n * @returns {object} - Rules from SQL query\n */\n QueryBuilder.prototype.getRulesFromSql = function (sqlString, sqlLocale) {\n this.parser = [];\n this.sqlParser(sqlString, sqlLocale);\n this.rule = { condition: 'and', not: false, rules: [] };\n var rule = this.processParser(this.parser, this.rule, [0], sqlLocale);\n if (this.enableNotCondition) {\n return { condition: rule.condition, not: rule.not, rules: rule.rules };\n }\n else {\n return { condition: rule.condition, rules: rule.rules };\n }\n };\n /**\n * Gets the sql query from rules.\n *\n * @param {RuleModel} rule - 'rule' to be passed to get the sql.\n * @param {boolean} allowEscape - Set `true` if it exclude the escape character.\n * @param {boolean} sqlLocale - Set `true` if Localization for Sql query.\n * @returns {object} - Sql query from rules.\n */\n QueryBuilder.prototype.getSqlFromRules = function (rule, allowEscape, sqlLocale) {\n if (!rule) {\n rule = this.getValidRules();\n }\n rule = this.getRuleCollection(rule, false);\n return this.getSqlString(this.getValidRules(rule), allowEscape, null, sqlLocale).replace(/\"/g, '\\'');\n };\n QueryBuilder.prototype.sqlParser = function (sqlString, sqlLocale) {\n var st = 0;\n var str;\n do {\n str = sqlString.slice(st);\n st += this.parseSqlStrings(str, sqlLocale);\n } while (str !== '');\n return this.parser;\n };\n QueryBuilder.prototype.parseSqlStrings = function (sqlString, sqlLocale) {\n var operators = ['=', '!=', '<=', '>=', '<', '>'];\n var conditions;\n if (sqlLocale) {\n conditions = [this.l10n.getConstant('AND').toUpperCase(), this.l10n.getConstant('OR').toUpperCase(), this.l10n.getConstant('NOT').toUpperCase()];\n }\n else {\n conditions = ['AND', 'OR', 'NOT'];\n }\n var subOp;\n if (sqlLocale) {\n subOp = [this.l10n.getConstant('In').toUpperCase(), this.l10n.getConstant('NotIn').toUpperCase(),\n this.l10n.getConstant('Like').toUpperCase(), this.l10n.getConstant('NotLike').toUpperCase(),\n this.l10n.getConstant('Between').toUpperCase(), this.l10n.getConstant('NotBetween').toUpperCase(),\n this.l10n.getConstant('IsNull').toUpperCase(), this.l10n.getConstant('IsNotNull').toUpperCase(),\n this.l10n.getConstant('IsEmpty').toUpperCase(), this.l10n.getConstant('IsNotEmpty').toUpperCase()];\n }\n else {\n subOp = ['IN', 'NOT IN', 'LIKE', 'NOT LIKE', 'BETWEEN', 'NOT BETWEEN', 'IS NULL', 'IS NOT NULL', 'IS EMPTY', 'IS NOT EMPTY'];\n }\n var regexStr;\n var regex;\n var matchValue;\n for (var i = 0, iLen = operators.length; i < iLen; i++) {\n regexStr = /^\\w+$/.test(operators[i]) ? '\\\\b' : '';\n // eslint-disable-next-line\n regex = new RegExp('^(' + operators[i] + ')' + regexStr, 'ig');\n if (regex.exec(sqlString)) {\n this.parser.push(['Operators', operators[i].toLowerCase()]);\n return operators[i].length;\n }\n }\n var lastPasrser = this.parser[this.parser.length - 1];\n if (!lastPasrser || (lastPasrser && lastPasrser[0] !== 'Literal')) {\n for (var i = 0, iLen = conditions.length; i < iLen; i++) {\n regexStr = /^\\w+$/.test(conditions[i]) ? '\\\\b' : '';\n // eslint-disable-next-line\n regex = new RegExp('^(' + conditions[i] + ')' + regexStr, 'ig');\n if (regex.exec(sqlString)) {\n this.parser.push(['Conditions', conditions[i].toLowerCase()]);\n return conditions[i].length;\n }\n }\n }\n for (var i = 0, iLen = subOp.length; i < iLen; i++) {\n regexStr = /^\\w+$/.test(subOp[i]) ? '\\\\b' : '';\n // eslint-disable-next-line\n regex = new RegExp('^(' + subOp[i] + ')' + regexStr, 'ig');\n if (regex.exec(sqlString)) {\n this.parser.push(['SubOperators', subOp[i].toLowerCase()]);\n return subOp[i].length;\n }\n }\n //Left Parenthesis\n if (/^\\(/.exec(sqlString)) {\n this.parser.push(['Left', '(']);\n return 1;\n }\n //Right Parenthesis\n if (/^\\)/.exec(sqlString)) {\n this.parser.push(['Right', ')']);\n return 1;\n }\n //Boolean\n if (/^(true|false)/.exec(sqlString)) {\n matchValue = /^(true|false)/.exec(sqlString)[0];\n this.parser.push(['String', matchValue]);\n return matchValue.length;\n }\n //Null\n if (/^null/.exec(sqlString)) {\n matchValue = /^null/.exec(sqlString)[0];\n this.parser.push(['String', null]);\n return matchValue.length;\n }\n // eslint-disable-next-line\n if (/^`?([a-z_][a-z0-9_.\\[\\]\\(\\)]{0,}(\\:(number|float|string|date|boolean))?)`?/i.exec(sqlString)) {\n // eslint-disable-next-line\n matchValue = /^`?([a-z_][a-z0-9_.\\[\\]\\(\\)]{0,}(\\:(number|float|string|date|boolean))?)`?/i.exec(sqlString)[1];\n this.parser.push(['Literal', matchValue]);\n return matchValue.length;\n }\n // eslint-disable-next-line\n if (this.checkLiteral() && /^'?([a-z_][a-z0-9 _.\\[\\]\\(\\)]{0,}(\\:(number|float|string|date|boolean))?)'?/i.exec(sqlString)) {\n // eslint-disable-next-line\n matchValue = /^'?([a-z_][a-z0-9 _.\\[\\]\\(\\)]{0,}(\\:(number|float|string|date|boolean))?)'?/i.exec(sqlString)[1];\n this.parser.push(['Literal', matchValue]);\n return matchValue.length + 2;\n }\n if (this.checkNumberLiteral(sqlString, sqlLocale)) {\n // eslint-disable-next-line\n matchValue = /^[0-9]+(\\.[0-9]+)?/.exec(sqlString)[0];\n this.parser.push(['Literal', matchValue]);\n return matchValue.length;\n }\n //String\n // eslint-disable-next-line\n if (/^'((?:[^\\\\']+?|\\\\.|'')*)'(?!')/.exec(sqlString)) {\n // eslint-disable-next-line\n matchValue = /^'((?:[^\\\\']+?|\\\\.|'')*)'(?!')/.exec(sqlString)[0];\n if (matchValue[matchValue.length - 2] === '(') {\n var isClosed = false;\n for (var j = matchValue.length; j < sqlString.length; j++) {\n matchValue += sqlString[j];\n if (sqlString[j] === ')') {\n isClosed = true;\n }\n if (isClosed && sqlString[j] === '\\'') {\n break;\n }\n }\n }\n this.parser.push(['String', matchValue]);\n return matchValue.length;\n }\n // Double String\n // eslint-disable-next-line\n if (/^\"([^\\\\\"]*(?:\\\\.[^\\\\\"]*)*)\"/.exec(sqlString)) {\n // eslint-disable-next-line\n matchValue = /^\"([^\\\\\"]*(?:\\\\.[^\\\\\"]*)*)\"/.exec(sqlString)[0];\n this.parser.push(['DoubleString', matchValue]);\n return matchValue.length;\n }\n //Number\n // eslint-disable-next-line\n if (/^[0-9]+(\\.[0-9]+)?/.exec(sqlString)) {\n // eslint-disable-next-line\n matchValue = /^[0-9]+(\\.[0-9]+)?/.exec(sqlString)[0];\n this.parser.push(['Number', matchValue]);\n return matchValue.length;\n }\n //Negative Number\n // eslint-disable-next-line\n if (/^-?[0-9]+(\\.[0-9]+)?/.exec(sqlString)) {\n // eslint-disable-next-line\n matchValue = /^-?[0-9]+(\\.[0-9]+)?/.exec(sqlString)[0];\n this.parser.push(['Number', matchValue]);\n return matchValue.length;\n }\n return 1;\n };\n QueryBuilder.prototype.checkLiteral = function () {\n var lastParser = this.parser[this.parser.length - 1];\n if (!lastParser) {\n return true;\n }\n else {\n var secParser = this.parser[this.parser.length - 2];\n if (lastParser[0] === 'Left' && (secParser && secParser[0] === 'Conditions')) {\n return true;\n }\n }\n return false;\n };\n QueryBuilder.prototype.checkNumberLiteral = function (sqlString, sqlLocale) {\n var lastParser = this.parser[this.parser.length - 1];\n if (!lastParser) {\n return true;\n }\n else {\n // eslint-disable-next-line\n if (/^[0-9]+(\\.[0-9]+)?/.exec(sqlString)) {\n var secParser = this.parser[this.parser.length - 2];\n var betweenParser = this.parser[this.parser.length - 3];\n if (lastParser[0] === 'Left' && (secParser && secParser[0] === 'Conditions')) {\n return true;\n }\n var betweenOperator = sqlLocale ? this.l10n.getConstant('Between').toLowerCase() : 'between';\n if (lastParser[0] === 'Conditions' && (betweenParser && betweenParser[1].indexOf(betweenOperator) < 0)) {\n return true;\n }\n }\n }\n return false;\n };\n QueryBuilder.prototype.getOperator = function (value, operator, sqlLocale) {\n var operators = {\n '=': 'equal', '!=': 'notequal', '<': 'lessthan', '>': 'greaterthan', '<=': 'lessthanorequal',\n '>=': 'greaterthanorequal', 'in': 'in', 'not in': 'notin', 'between': 'between', 'not between': 'notbetween',\n 'is empty': 'isempty', 'is null': 'isnull', 'is not null': 'isnotnull', 'is not empty': 'isnotempty'\n };\n if (sqlLocale) {\n var localeOperator = Object.keys(this.sqlOperators);\n for (var i = 0; i < localeOperator.length; i++) {\n if (this.sqlOperators[localeOperator[i]] === operator.toUpperCase()) {\n if (value && value.indexOf('%') === 0 && value[value.length - 1] === '%') {\n return (localeOperator[i] === 'notcontains') ? 'notcontains' : 'contains';\n }\n else if (value && value.indexOf('%') !== 0 && value.indexOf('%') === value.length - 1) {\n return (localeOperator[i] === 'notstartswith') ? 'notstartswith' : 'startswith';\n }\n else if (value && value.indexOf('%') === 0 && value.indexOf('%') !== value.length - 1) {\n return (localeOperator[i] === 'notendswith') ? 'notendswith' : 'endswith';\n }\n return localeOperator[i];\n }\n }\n return null;\n }\n if (value) {\n if (value.indexOf('%') === 0 && value[value.length - 1] === '%') {\n return (operator === 'not like') ? 'notcontains' : 'contains';\n }\n else if (value.indexOf('%') !== 0 && value.indexOf('%') === value.length - 1) {\n return (operator === 'not like') ? 'notstartswith' : 'startswith';\n }\n else if (value.indexOf('%') === 0 && value.indexOf('%') !== value.length - 1) {\n return (operator === 'not like') ? 'notendswith' : 'endswith';\n }\n }\n else {\n if (operator === 'not like') {\n return 'notequal';\n }\n else if (operator === 'like') {\n return 'equal';\n }\n }\n return operators[\"\" + operator];\n };\n QueryBuilder.prototype.getTypeFromColumn = function (rules) {\n var columnData = this.getColumn(rules.field);\n if (!isNullOrUndefined(columnData)) {\n return columnData.type;\n }\n return null;\n };\n QueryBuilder.prototype.getLabelFromColumn = function (field) {\n var label = '';\n var l = 0;\n if (this.separator !== '') {\n var fieldColl = field.split(this.separator);\n for (var i = 0; i < fieldColl.length; i++) {\n label += this.getLabelFromField(fieldColl, i + 1);\n l++;\n if (l < fieldColl.length) {\n label += this.separator;\n }\n }\n return label;\n }\n else {\n var labelItem = this.getColumn(field).label;\n return labelItem;\n }\n };\n QueryBuilder.prototype.getLabelFromField = function (field, startIdx) {\n var fieldName = '';\n var j = 0;\n for (var k = 0; k < startIdx; k++) {\n fieldName += field[k];\n j++;\n if (j < startIdx) {\n fieldName += this.separator;\n }\n }\n return this.getColumn(fieldName).label;\n };\n QueryBuilder.prototype.processParser = function (parser, rules, levelColl, sqlLocale) {\n var j;\n var jLen;\n var rule;\n var subRules;\n var numVal = [];\n var strVal = [];\n var k;\n var kLen;\n var l;\n var lLen;\n var grpCount;\n var operator;\n var isLeftOpened = false;\n for (var i = 0, iLen = parser.length; i < iLen; i++) {\n if (parser[i][0] === 'Literal') {\n rule = { label: parser[i][1], field: parser[i][1] };\n if (parser[i + 1][0] === 'SubOperators') {\n if (parser[i + 1][1].indexOf('null') > -1 || parser[i + 1][1].indexOf('empty') > -1) {\n rule.operator = this.getOperator(' ', parser[i + 1][1], sqlLocale);\n rule.value = null;\n rule.type = this.getTypeFromColumn(rule);\n }\n else {\n var oper = parser[i + 3][1] ? parser[i + 3][1].replace(/'/g, '') : parser[i + 3][1];\n rule.operator = this.getOperator(oper, parser[i + 1][1], sqlLocale);\n }\n operator = parser[i + 1][1];\n i++;\n j = i + 1;\n jLen = iLen;\n if (sqlLocale && rule.operator === 'contains' || rule.operator === 'startswith' || rule.operator === 'endswith') {\n operator = 'like';\n }\n else if (sqlLocale && rule.operator === 'notcontains' || rule.operator === 'notstartswith' || rule.operator === 'notendswith') {\n operator = 'not like';\n }\n else if (sqlLocale) {\n operator = rule.operator;\n }\n for (j = i + 1; j < jLen; j++) {\n if (operator.indexOf('between') < 0 && parser[j][0] === 'Left') {\n isLeftOpened = true;\n }\n else if (parser[j][0] === 'Right' && isLeftOpened) {\n i = j;\n isLeftOpened = false;\n break;\n }\n else {\n if (operator.indexOf('null') > -1 || operator.indexOf('empty') > -1) {\n break;\n }\n if (operator.indexOf('like') > -1 && parser[j][0] === 'String') {\n var val = parser[j][1];\n if (parser[j][1] && parser[j][1][0] === '\\'') {\n val = parser[j][1].substring(1, parser[j][1].length - 1);\n }\n val = val ? val.replace(/%/g, '') : parser[j][1];\n rule.value = val;\n rule.type = 'string';\n }\n else if (operator.indexOf('between') > -1) {\n if (parser[j][0] === 'Literal' || parser[j][0] === 'Left') {\n break;\n }\n if (parser[j][0] === 'Number') {\n numVal.push(Number(parser[j][1]));\n }\n else if (parser[j][0] === 'String') {\n var val = parser[j][1];\n if (parser[j][1] && parser[j][1][0] === '\\'') {\n val = parser[j][1].substring(1, parser[j][1].length - 1);\n }\n strVal.push(val);\n }\n }\n else {\n if (parser[j][0] === 'Number') {\n numVal.push(Number(parser[j][1]));\n }\n else if (parser[j][0] === 'String') {\n var val = parser[j][1];\n if (parser[j][1] && parser[j][1][0] === '\\'') {\n val = parser[j][1].substring(1, parser[j][1].length - 1);\n }\n strVal.push(val);\n }\n }\n rule.type = this.getTypeFromColumn(rule);\n }\n }\n if (operator.indexOf('like') < 0) {\n if (parser[j - 1][0] === 'Number') {\n rule.value = numVal;\n rule.type = 'number';\n }\n else if (parser[j - 1][0] === 'String') {\n rule.value = strVal;\n rule.type = 'string';\n }\n else if (operator.indexOf('between') > -1 && parser[j - 1][0] === 'Conditions') {\n if (strVal.length !== 0) {\n rule.value = strVal;\n rule.type = 'string';\n }\n else {\n rule.value = numVal;\n rule.type = 'number';\n }\n }\n numVal = [];\n strVal = [];\n rule.type = this.getTypeFromColumn(rule);\n }\n }\n else if (parser[i + 1][0] === 'Operators') {\n rule.operator = this.getOperator(parser[i + 2][1], parser[i + 1][1], sqlLocale);\n if (parser[i + 2][0] === 'Number') {\n rule.type = 'number';\n rule.value = Number(parser[i + 2][1]);\n }\n else {\n rule.type = 'string';\n rule.value = parser[i + 2][1] ? parser[i + 2][1].replace(/'/g, '') : parser[i + 2][1];\n }\n rule.type = this.getTypeFromColumn(rule);\n }\n rules.rules.push(rule);\n }\n else if (parser[i][0] === 'Left') {\n if (!(parser[0][0] === 'Left') && (parser[i - 1][1] === 'not' || sqlLocale && this.l10n.getConstant('NOT').toLowerCase() === parser[i - 1][1])) {\n continue;\n }\n this.parser = parser.splice(i + 1, iLen - (i + 1));\n if (this.enableNotCondition) {\n subRules = { condition: 'and', rules: [], not: false };\n }\n else {\n subRules = { condition: 'and', rules: [] };\n }\n grpCount = 0;\n kLen = rules.rules.length;\n for (k = 0; k < kLen; k++) { //To get the group position\n if (rules.rules[k].rules) {\n grpCount++;\n }\n }\n levelColl.push(grpCount);\n rules.rules.push(subRules);\n subRules = this.processParser(this.parser, subRules, levelColl, sqlLocale);\n return rules;\n }\n else if (parser[i][0] === 'Conditions') {\n if (parser[i][1] === 'not' || (sqlLocale && this.l10n.getConstant('NOT').toLowerCase() === parser[i][1])) {\n rules.not = true;\n }\n else {\n rules.condition = parser[i][1];\n }\n }\n else if (parser[i][0] === 'Right') {\n this.parser = parser.splice(i + 1, iLen - (i + 1));\n levelColl.pop(); //To get the parent Group\n rules = this.rule;\n lLen = levelColl.length;\n for (l = 0; l < lLen; l++) {\n rules = this.findGroupByIdx(levelColl[l], rules, l === 0);\n }\n return this.processParser(this.parser, rules, levelColl, sqlLocale);\n }\n }\n return rules;\n };\n __decorate([\n Event()\n ], QueryBuilder.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], QueryBuilder.prototype, \"actionBegin\", void 0);\n __decorate([\n Event()\n ], QueryBuilder.prototype, \"beforeChange\", void 0);\n __decorate([\n Event()\n ], QueryBuilder.prototype, \"change\", void 0);\n __decorate([\n Event()\n ], QueryBuilder.prototype, \"dataBound\", void 0);\n __decorate([\n Event()\n ], QueryBuilder.prototype, \"ruleChange\", void 0);\n __decorate([\n Property({ ruleDelete: true, groupInsert: true, groupDelete: true })\n ], QueryBuilder.prototype, \"showButtons\", void 0);\n __decorate([\n Property(false)\n ], QueryBuilder.prototype, \"summaryView\", void 0);\n __decorate([\n Property(false)\n ], QueryBuilder.prototype, \"allowValidation\", void 0);\n __decorate([\n Property('Default')\n ], QueryBuilder.prototype, \"fieldMode\", void 0);\n __decorate([\n Property([])\n ], QueryBuilder.prototype, \"columns\", void 0);\n __decorate([\n Property(null)\n ], QueryBuilder.prototype, \"fieldModel\", void 0);\n __decorate([\n Property(null)\n ], QueryBuilder.prototype, \"operatorModel\", void 0);\n __decorate([\n Property(null)\n ], QueryBuilder.prototype, \"valueModel\", void 0);\n __decorate([\n Property()\n ], QueryBuilder.prototype, \"headerTemplate\", void 0);\n __decorate([\n Property('')\n ], QueryBuilder.prototype, \"cssClass\", void 0);\n __decorate([\n Property([])\n ], QueryBuilder.prototype, \"dataSource\", void 0);\n __decorate([\n Property('Horizontal')\n ], QueryBuilder.prototype, \"displayMode\", void 0);\n __decorate([\n Property(false)\n ], QueryBuilder.prototype, \"enablePersistence\", void 0);\n __decorate([\n Property('Default')\n ], QueryBuilder.prototype, \"sortDirection\", void 0);\n __decorate([\n Property(5)\n ], QueryBuilder.prototype, \"maxGroupCount\", void 0);\n __decorate([\n Property('auto')\n ], QueryBuilder.prototype, \"height\", void 0);\n __decorate([\n Property('auto')\n ], QueryBuilder.prototype, \"width\", void 0);\n __decorate([\n Property(false)\n ], QueryBuilder.prototype, \"matchCase\", void 0);\n __decorate([\n Property(0)\n ], QueryBuilder.prototype, \"immediateModeDelay\", void 0);\n __decorate([\n Property(false)\n ], QueryBuilder.prototype, \"enableNotCondition\", void 0);\n __decorate([\n Property(false)\n ], QueryBuilder.prototype, \"readonly\", void 0);\n __decorate([\n Property('')\n ], QueryBuilder.prototype, \"separator\", void 0);\n __decorate([\n Complex({ condition: 'and', rules: [] }, Rule)\n ], QueryBuilder.prototype, \"rule\", void 0);\n QueryBuilder = __decorate([\n NotifyPropertyChanges\n ], QueryBuilder);\n return QueryBuilder;\n}(Component));\nexport { QueryBuilder };\nvar LevelColl = /** @class */ (function () {\n function LevelColl() {\n }\n return LevelColl;\n}());\n"],"names":["__extends","extendStatics","d","b","Object","setPrototypeOf","__proto__","Array","p","hasOwnProperty","__","this","constructor","prototype","create","__assign","assign","t","s","i","n","arguments","length","call","apply","__decorate","decorators","target","key","desc","c","r","getOwnPropertyDescriptor","Reflect","decorate","defineProperty","Columns","_super","Property","isRequired","min","max","Number","MAX_VALUE","ChildProperty","Rule","Collection","Value","ShowButtons","QueryBuilder","options","element","_this","isReadonly","fields","text","value","updatedRule","not","condition","isLocale","isRefreshed","isNotified","isAddSuccess","isNotValueChange","isFieldChange","isFieldClose","isDestroy","isGetNestedData","MultiSelect","Inject","CheckBoxSelection","getPersistData","addOnPersist","reset","isImportRules","bodyElem","querySelector","inputElement","querySelectorAll","len","className","indexOf","getComponent","destroy","parentElement","innerHTML","grpContainer","createElement","attrs","class","grpHeader","grpBody","appendChild","headerTemplate","isRoot","enableNotCondition","removeClass","levelColl","id","rule","rules","disableRuleCondition","getWrapper","getModuleName","GetRootColumnName","field","separator","split","initialize","dataColl","columnKeys","keys","cols","categories","type","groupBy","isDate","validateObj","columns","columnSort","updateCustomOperator","isNaN","Date","parse","getTime","validation","category","l10n","getConstant","push","operators","customOperators","updateSubFieldsFromColumns","label","updateSubFields","trigger","col","data","sampCol","result","compField","resData","column","this_1","j","sqlIdx","operator_1","operColl","values","map","join","valueIdx","focusEventHandler","event","clickEventHandler","args","groupID","tagName","animation","Animation","duration","delay","renderSummary","summaryElem","document","getElementById","txtareaElem","animate","name","groupElem","style","display","textContent","getSqlFromRules","height","scrollHeight","actionButton","deleteRule","deleteGroup","closest","addGroupElement","mRules","extend","setGroupRules","renderSummaryCollapse","forIdValue","getAttribute","targetValue","replace","group","getGroup","ariaChecked","toggleElem","getElementsByClassName","addClass","cancel","toLowerCase","beforeSuccessCallBack","observedChangeArgs","beforeRules","getValidRules","getParentGroup","filterRules","selectBtn","showButtons","groupInsert","isNullOrUndefined","maxGroupCount","enableRtl","children","addRuleElement","appendRuleElem","parentId","action","ruleElem","elem","ruleListElem","select","setAttribute","ruleIdCounter","ruleTemplate","requestType","ruleID","ruleTemplateFn","templateParser","templateID","template","getOperators","operatorFields","isReact","isAngular","templateColl","nodeType","cloneNode","renderReactTemplates","isRuleTemplate","isInitialLoad","addRuleSuccessCallBack","trgt","act","pId","isRlTmp","dropDownList","getColumn","newRule","operator","selectedColumn","passedRule","args_1","displayMode","previousElementSibling","updateAddedRule","fieldMode","ddlField","ddlValue","dataSource","placeholder","popupHeight","close","fieldClose","bind","change","changeField","open","popupOpen","fieldModel","DropDownList","appendTo","ddlVal","getDataByValue","changeRule","itemData","child","expanded","showClearButton","changeOnBlur","dropdowntree","DropDownTree","getLabelFromColumn","index","custom","changeRuleTemplate","operVal","parentGroup","previousColumn","detach","clearQBTemplate","renderToolTip","tooltip","Tooltip","content","position","cssClass","validateFields","dropDownTreeObj","isValid","allowValidation","excludeOprs","fieldElem","indexElem","valArray","dropDownObj","tempElem","ruleElemCln","validateRule","valElem","jLen","refreshLevelColl","obj","groupElement","level","refreshLevel","childElem","ruleList","iLen","groupCount","slice","groupTemplate","glueElem","inputElem","labelElem","grpActElem","groupBtn","groupHdrElem","grpBodyElem","rulesElem","role","clsName","filterElem","ruleDelete","delBtnElem","isGroup","isBtnClick","addGroupSuccess","eventTarget","dltGroupBtn","groupIdCounter","headerTemplateFn","andInpElem","orInpElem","andLblElem","orLblElem","btnGroupId","groupDelete","Button","iconCss","rippleEffect","selector","childElems","grpLen","addGroups","notElem","classList","add","args_2","notCondition","undefined","DropDownButton","items","beforeOpen","grpId","chgrpId","childGroupID","groupHdr","getRuleCollection","headerFn","notifyChange","grpElement","ruleElement","format","getFormat","intl","formatDate","templateChange","updateRules","eventsArgs","grpElem","validateValue","prevOper","arrOper","grpEle","destroyControls","changeValue","contains","dateElement","rbValue","parseInt","immediateModeDelay","window","clearInterval","timer","setInterval","filterValue","grID","rlID","ele","changeValueSuccessCallBack","ddl","item","popupObj","getItemData","customArgs","isInteracted","previousItemData","prevItemData","previousItem","e","previousValue","ddtElem","ddt","oldValue","dataBind","destroySubFields","subFieldElem","ddlArgs","tempRule","ddlObj","changeFilter","flt","dl","rl","tmpRl","dArg","selectedField","fieldChangeSuccess","operatorElem","changeOperator","opr","selectedIndex","operatorChangeSuccess","changeRuleValues","tooltipElem","createSubFields","nextElementSibling","remove","subFieldValue","subFilterCounter","insertBefore","ruleId","subFieldData","subField","toString","currOper","prevValue","parentElem","operatorList","oprElem","childElementCount","fieldObj","renderValues","ddlOperator","operatorModel","isField","popup","divElement","templateDestroy","templateElement","elemId","temp","templateElements","getValue","elementId","elements","getValues","original","fieldColl","dataObj","fieldStr","createNestedObject","lastIndex","k","getDistinctValues","nest","isNested","this_2","forEach","renderMultiSelect","selectedValue","ds","isFetched","isValues","fieldValue","selectedRule","multiSelectValue","dataManager","query","Query","mode","width","closePopup","actionBegin","multiSelectOpen","valueModel","multiSelectModel","multiSelectObj","DataManager","bindMultiSelectData","getMultiSelectData","dummyData","deferred","Deferred","executeQuery","multiselectObj","hideSpinner","createSpinner","showSpinner","then","actual","catch","reject","spinnerElem","Browser","isDevice","processTemplate","container","tempElements","write","setDefaultValue","isArryValue","isNumber","renderStringValue","idx","ruleValElem","selectedVal","columnData","isTemplate","isPublic","txtBox","input","textBoxModel","inputobj","TextBox","minWidth","renderNumberValue","selVal","txtInp","numericTxt","step","numericTextBoxModel","numeric","NumericTextBox","processValueString","numArr","strArr","kLen","parseDate","formatOpt","dParser","getDateParser","skeleton","renderControls","isRendered","length_1","processBoolValues","datepick","datePicker","place","formatObj","locale","getLocale","datePickerModel","DatePicker","orgValue","isCheck","radioBtn","checked","radioButtonModel","radiobutton","RadioButton","getOperatorIndex","getPreviousItemData","isRender","filtElem","getElementsByTagName","filtObj","isTempRendered","setColumnTemplate","inputLen","renderTemplate","observedActionArgs","actionBeginSuccessCallBack","Element","columnTemplateFn","valElemColl","updateValues","controlName","radioBtnObj","refresh","selectedDate","isNotTrigger","valueContainer","elementCln","i_1","i_2","ruleValueUpdate","beforeRule","afterRule","JSON","stringify","previousRule","oper","arrOperator","dupSelectedValue","parseFloat","isObject","formatOptions","findGroupByIdx","groupIdx","ruleColl","dupRuleColl","unWireEvents","portals","addRules","groups","importRules","initWrapper","trim","summaryView","notGroupRtl","readonly","enableReadonly","buttons","button","contentElem","textElem","styles","editElem","divElem","collapseElem","title","sortDirection","executeLocal","sortByDesc","sortBy","onChangeNotGroup","checkNotGroup","orgRule","onPropertyChanged","newProp","oldProp","_i","properties_1","enablePersistence","Internationalization","preRender","getUniqueID","defaultLocale","StartsWith","EndsWith","Contains","NotLike","Like","Equal","NotEqual","LessThan","LessThanOrEqual","GreaterThan","GreaterThanOrEqual","Between","NotBetween","In","NotIn","Remove","SelectField","SelectOperator","DeleteRule","DeleteGroup","AddGroup","AddCondition","Edit","ValidationMessage","SummaryViewTitle","OtherFields","AND","OR","NOT","SelectValue","IsEmpty","IsNotEmpty","IsNull","IsNotNull","True","False","AddButton","L10n","parser","stringOperator","dateOperator","booleanOperator","numberOperator","equal","notequal","greaterthan","greaterthanorequal","lessthan","in","notin","lessthanorequal","startswith","endswith","between","notbetween","isnull","isnotnull","isempty","isnotempty","notstartswith","notendswith","notcontains","sqlOperators","toUpperCase","render","stringOper","numberOper","concat","executeDataManager","take","initControl","renderComplete","templateCompiler","compile","error","wireEvents","wrapper","EventHandler","keyBoardHandler","isParent","groupLevel","groupId","deleteGroupSuccessCallBack","nextElem","prevElem","removeString","remRule","ruleElemColl","isTemplateRendered","isPlatformTemplate","splice","deleteRuleSuccessCallBack","clnruleElem","err","keyCode","preventDefault","clearTemplate","count","andElem","orElem","disabled","currentRule","getRules","ruleCondtion","isValidRule","customObj","isQuestion","notValue","setRules","getRule","HTMLElement","deleteGroups","groupIdColl","getFilteredRecords","predicate","getPredicate","dataManagerQuery","where","deleteRules","ruleIdColl","getDataManagerQuery","pred","pred2","ruleValue","ignoreCase","ignoreOper","and","or","isDateFilter","dateOperColl","matchCase","getDate","isTime","datePredicate","arrayPredicate","Predicate","localeString","cldrData","setTime","date","isStart","setHours","startDate","endDate","nullValue","gte","currDate","setMinutes","setSeconds","isReset","renderGroup","tglBtnElem","renderRule","getInstance","deleteGroupElems","addRuleGroupElems","removeRuleElems","elems","enableBtnGroup","isDateFunction","dateFunc","getSqlString","enableEscape","queryStr","sqlLocale","valueStr","ruleOpertor","ruleCondition","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 MultiSelect.Inject(CheckBoxSelection);\n return _this;\n }\n QueryBuilder.prototype.getPersistData = function () {\n return this.addOnPersist(['rule']);\n };\n /**\n * Clears the rules without root rule.\n *\n * @returns {void}.\n */\n QueryBuilder.prototype.reset = function () {\n this.isImportRules = false;\n var bodyElem = this.element.querySelector('.e-group-body');\n var inputElement = this.element.querySelectorAll('input.e-control');\n for (var i = 0, len = inputElement.length; i < len; i++) {\n if (inputElement[i].className.indexOf('e-tooltip') > -1) {\n getComponent(inputElement[i], 'tooltip').destroy();\n }\n else if (inputElement[i].parentElement.className.indexOf('e-tooltip') > -1) {\n getComponent(inputElement[i].parentElement, 'tooltip').destroy();\n }\n }\n if (bodyElem) {\n bodyElem.innerHTML = '';\n }\n else {\n var grpContainer = this.createElement('div', { attrs: { class: 'e-group-container' } });\n var grpHeader = this.createElement('div', { attrs: { class: 'e-group-header' } });\n var grpBody = this.createElement('div', { attrs: { class: 'e-group-body' } });\n grpContainer.appendChild(grpHeader).appendChild(grpBody);\n this.element.appendChild(grpContainer);\n bodyElem = this.element.querySelector('.e-group-body');\n }\n if (this.headerTemplate && this.isRoot) {\n this.element.innerHTML = '';\n this.isRoot = false;\n }\n if (this.enableNotCondition) {\n removeClass(this.element.querySelectorAll('.e-qb-toggle'), 'e-active-toggle');\n }\n bodyElem.appendChild(this.createElement('div', { attrs: { class: 'e-rule-list' } }));\n this.levelColl[this.element.id + '_group0'] = [0];\n this.rule = { condition: 'and', not: false, rules: [] };\n this.disableRuleCondition(bodyElem.parentElement);\n };\n QueryBuilder.prototype.getWrapper = function () {\n return this.element;\n };\n QueryBuilder.prototype.getModuleName = function () {\n return 'query-builder';\n };\n QueryBuilder.prototype.GetRootColumnName = function (field) {\n return this.separator ? field.split(this.separator)[0] : field;\n };\n QueryBuilder.prototype.initialize = function () {\n if (this.dataColl.length) {\n var columnKeys = Object.keys(this.dataColl[0]);\n var cols = [];\n var categories = [];\n var type = void 0;\n var groupBy = false;\n var isDate = false;\n var value = void 0;\n var validateObj = { isRequired: true, min: 0, max: Number.MAX_VALUE };\n if (this.columns.length) {\n this.columnSort();\n var columns = this.columns;\n for (var i = 0, len = columns.length; i < len; i++) {\n this.updateCustomOperator(columns[i]);\n if (!columns[i].type) {\n if (columnKeys.indexOf(columns[i].field) > -1) {\n value = this.dataColl[0][columns[i].field];\n type = typeof value;\n if (type === 'string') {\n isDate = !isNaN(Date.parse(value));\n }\n else if (type === 'object') {\n isDate = value instanceof Date && !isNaN(value.getTime());\n type = 'string';\n }\n columns[i].type = type;\n isDate = false;\n }\n type = 'string';\n }\n if (!columns[i].validation) {\n columns[i].validation = validateObj;\n }\n if (columns[i].category) {\n groupBy = true;\n }\n else {\n columns[i].category = this.l10n.getConstant('OtherFields');\n }\n if (categories.indexOf(columns[i].category) < 0) {\n categories.push(columns[i].category);\n }\n if (!columns[i].operators || this.isLocale) {\n columns[i].operators = this.customOperators[columns[i].type + 'Operator'];\n }\n }\n if (groupBy && (categories.length > 1 || categories[0] !== this.l10n.getConstant('OtherFields'))) {\n this.fields = { text: 'label', value: 'field', groupBy: 'category' };\n }\n this.updateSubFieldsFromColumns(this.columns);\n }\n else {\n for (var i = 0, len = columnKeys.length; i < len; i++) {\n value = this.dataColl[0][columnKeys[i]];\n type = typeof value;\n if (type === 'string') {\n isDate = !isNaN(Date.parse(value));\n }\n else if (type === 'object' && !Object.keys(value).length) {\n isDate = value instanceof Date && !isNaN(value.getTime());\n type = 'string';\n }\n cols[i] = { 'field': columnKeys[i], 'label': columnKeys[i], 'type': isDate ? 'date' : type,\n 'validation': validateObj };\n isDate = false;\n cols[i].operators = this.customOperators[cols[i].type + 'Operator'];\n if (type === 'object') {\n this.updateSubFields(value, cols[i]);\n }\n }\n this.columns = cols;\n }\n }\n else if (this.columns.length) {\n var columns = this.columns;\n for (var i = 0, len = columns.length; i < len; i++) {\n if (columns[i].category) {\n this.fields = { text: 'label', value: 'field', groupBy: 'category' };\n }\n else {\n columns[i].category = this.l10n.getConstant('OtherFields');\n }\n this.updateCustomOperator(columns[i]);\n if (!columns[i].operators || this.isLocale) {\n columns[i].operators = this.customOperators[columns[i].type + 'Operator'];\n }\n }\n this.updateSubFieldsFromColumns(this.columns);\n }\n this.trigger('dataBound', { type: 'dataBound' });\n };\n QueryBuilder.prototype.updateSubFieldsFromColumns = function (col, field) {\n for (var i = 0; i < col.length; i++) {\n if (this.separator !== '' && col[i].field.indexOf(this.separator) < 0) {\n col[i].field = field ? field + this.separator + col[i].field : col[i].field;\n }\n if (col[i].operators) {\n this.updateCustomOperator(col[i]);\n }\n else if (col[i].type && col[i].type !== 'object') {\n col[i].operators = this.customOperators[col[i].type + 'Operator'];\n }\n if (col[i].columns) {\n col[i].type = 'object';\n this.updateSubFieldsFromColumns(col[i].columns, col[i].field);\n }\n }\n };\n QueryBuilder.prototype.updateSubFields = function (value, col, data) {\n var sampCol;\n col.columns = [];\n var columnKeys = Object.keys(value);\n var field;\n var label;\n var type;\n var result;\n data = data ? data : this.dataColl[0];\n for (var i = 0, len = columnKeys.length; i < len; i++) {\n var compField = col.field.split('.');\n if (data) {\n result = data[compField[compField.length - 1]][columnKeys[i]];\n }\n else {\n result = this.dataColl[0][col.field][columnKeys[i]];\n }\n var resData = data[col.field.split(this.separator)[col.field.split(this.separator).length - 1]];\n type = typeof result;\n field = col.field + this.separator + columnKeys[i];\n label = columnKeys[i];\n type = (type === 'object' && !isNaN(Date.parse(result))) ? 'date' : type;\n sampCol = { field: field, label: label, type: type };\n if (type !== 'object') {\n sampCol.operators = this.customOperators[type + 'Operator'];\n }\n col.columns.push(sampCol);\n if (type === 'object') {\n this.updateSubFields(result, sampCol, resData);\n }\n }\n };\n QueryBuilder.prototype.updateCustomOperator = function (column) {\n if (column.operators) {\n var _loop_1 = function (j) {\n var sqlIdx = Object.keys(column.operators[j]).indexOf('sqlOperator');\n if (sqlIdx > -1) {\n var operator_1 = column.operators[j];\n var operColl = Object.keys(operator_1);\n var values = operColl.map(function (key) { return operator_1[\"\" + key]; }).join(',').split(',');\n var valueIdx = operColl.indexOf('value');\n this_1.operators[values[valueIdx]] = values[sqlIdx];\n }\n };\n var this_1 = this;\n for (var j = 0; j < column.operators.length; j++) {\n _loop_1(j);\n }\n }\n };\n QueryBuilder.prototype.focusEventHandler = function (event) {\n this.target = event.target;\n };\n QueryBuilder.prototype.clickEventHandler = function (event) {\n var _this = this;\n var target = event.target;\n var args;\n this.isImportRules = false;\n var groupID;\n if (target.tagName === 'SPAN') {\n target = target.parentElement;\n }\n if (target.className.indexOf('e-collapse-rule') > -1) {\n var animation = new Animation({ duration: 1000, delay: 0 });\n if (this.element.querySelectorAll('.e-summary-content').length < 1) {\n this.renderSummary();\n }\n var summaryElem = document.getElementById(this.element.id + '_summary_content');\n var txtareaElem = summaryElem.querySelector('.e-summary-text');\n animation.animate('.e-query-builder', { name: 'SlideLeftIn' });\n var groupElem = this.element.querySelector('.e-group-container');\n groupElem.style.display = 'none';\n txtareaElem.textContent = this.getSqlFromRules(this.rule);\n summaryElem.style.display = 'block';\n txtareaElem.style.height = txtareaElem.scrollHeight + 'px';\n }\n if (target.tagName === 'BUTTON' && target.className.indexOf('e-qb-toggle') < 0) {\n if (target.className.indexOf('e-removerule') > -1) {\n this.actionButton = target;\n this.deleteRule(target);\n }\n else if (target.className.indexOf('e-deletegroup') > -1) {\n this.actionButton = target;\n this.deleteGroup(closest(target, '.e-group-container'));\n }\n else if (target.className.indexOf('e-edit-rule') > -1) {\n var animation = new Animation({ duration: 1000, delay: 0 });\n animation.animate('.e-query-builder', { name: 'SlideLeftIn' });\n document.getElementById(this.element.id + '_summary_content').style.display = 'none';\n if (this.element.querySelectorAll('.e-group-container').length < 1) {\n this.addGroupElement(false, this.element, this.rule.condition, false, this.rule.not);\n var mRules = extend({}, this.rule, {}, true);\n this.setGroupRules(mRules);\n this.renderSummaryCollapse();\n }\n else {\n var groupElem = this.element.querySelector('.e-group-container');\n if (groupElem.querySelectorAll('.e-collapse-rule').length < 1) {\n this.renderSummaryCollapse();\n }\n groupElem.style.display = 'block';\n }\n }\n }\n else if ((target.tagName === 'LABEL' && target.parentElement.className.indexOf('e-btn-group') > -1) ||\n target.className.indexOf('e-qb-toggle') > -1) {\n var element = closest(target, '.e-group-container');\n if (!this.headerTemplate) {\n var forIdValue = target.getAttribute('for');\n var targetValue = void 0;\n if (forIdValue) {\n targetValue = document.getElementById(forIdValue).getAttribute('value');\n }\n groupID = element.id.replace(this.element.id + '_', '');\n var group = this.getGroup(groupID);\n var ariaChecked = void 0;\n if (this.enableNotCondition) {\n if (target.className.indexOf('e-qb-toggle') > -1) {\n var toggleElem = element.getElementsByClassName('e-qb-toggle')[0];\n if (toggleElem.className.indexOf('e-active-toggle') > -1) {\n removeClass([toggleElem], 'e-active-toggle');\n ariaChecked = false;\n }\n else {\n addClass([toggleElem], 'e-active-toggle');\n ariaChecked = true;\n }\n targetValue = group.condition;\n }\n else {\n ariaChecked = group.not;\n }\n }\n args = { groupID: groupID, cancel: false, type: 'condition', value: targetValue.toLowerCase() };\n if (this.enableNotCondition) {\n args = { groupID: groupID, cancel: false, type: 'condition', value: targetValue.toLowerCase(),\n 'not': ariaChecked };\n }\n }\n if (!this.isImportRules) {\n this.trigger('beforeChange', args, function (observedChangeArgs) {\n _this.beforeSuccessCallBack(observedChangeArgs, target);\n });\n }\n else {\n this.beforeSuccessCallBack(args, target);\n }\n this.target = target;\n }\n };\n QueryBuilder.prototype.beforeSuccessCallBack = function (args, target) {\n if (!args.cancel) {\n var element = closest(target, '.e-group-container');\n var groupID = element.id.replace(this.element.id + '_', '');\n var beforeRules = this.getValidRules(this.rule);\n var rule = this.getParentGroup(element);\n rule.condition = args.value;\n if (this.enableNotCondition) {\n rule.not = args.not;\n }\n if (!this.isImportRules) {\n this.trigger('change', { groupID: groupID, type: 'condition', value: rule.condition });\n }\n this.filterRules(beforeRules, this.getValidRules(this.rule), 'condition');\n }\n };\n QueryBuilder.prototype.selectBtn = function (target, event) {\n if (event.name === 'beforeOpen') {\n if (this.showButtons.groupInsert || isNullOrUndefined(this.showButtons.groupInsert)) {\n if (this.element.querySelectorAll('.e-group-container').length >= this.maxGroupCount + 1) {\n addClass([event.element.querySelector('li span.e-addgroup').parentElement], 'e-button-hide');\n }\n else {\n removeClass([event.element.querySelector('li span.e-addgroup').parentElement], 'e-button-hide');\n }\n if (this.enableRtl) {\n addClass([event.element.querySelector('li').parentElement], 'e-rtl');\n }\n }\n else {\n addClass([event.element.querySelector('li span.e-addgroup').parentElement], 'e-button-hide');\n }\n }\n else if (event.element.children[0].className.indexOf('e-addrule') > -1) {\n this.addRuleElement(closest(target, '.e-group-container'), {});\n }\n else if (event.element.children[0].className.indexOf('e-addgroup') > -1) {\n this.addGroupElement(true, closest(target, '.e-group-container'), '', true);\n }\n };\n QueryBuilder.prototype.appendRuleElem = function (target, column, type, parentId, action, rule) {\n var ruleElem;\n var elem;\n var ruleListElem = target.querySelector('.e-rule-list');\n var args;\n if (type === 'change') {\n ruleElem = select('#' + parentId, target);\n }\n else {\n ruleElem = this.createElement('div', { attrs: { class: 'e-rule-container' } });\n ruleElem.setAttribute('id', target.id + '_rule' + this.ruleIdCounter);\n ruleListElem.appendChild(ruleElem);\n this.ruleIdCounter++;\n }\n if (column && column.ruleTemplate && rule) {\n args = { requestType: 'template-initialize', ruleID: ruleElem.id, action: action, fields: this.fields, rule: rule };\n this.trigger('actionBegin', args);\n this.ruleTemplateFn = this.templateParser(column.ruleTemplate);\n var templateID = this.element.id + column.field;\n var template = void 0;\n args.fields = this.fields;\n args.columns = this.columns;\n if (rule.field === '') {\n rule.field = column.field;\n }\n args.operators = this.getOperators(rule.field);\n args.operatorFields = { text: 'key', value: 'value' };\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.isReact) {\n template = this.ruleTemplateFn(args, this, ruleElem.id, templateID)[0];\n elem = template;\n elem.className += ' e-rule-field';\n ruleElem.appendChild(elem);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n }\n else if (this.isAngular) {\n var templateColl = this.ruleTemplateFn(args, this, ruleElem.id, templateID);\n template = (templateColl[0].nodeType === 3) ? templateColl[1] : templateColl[0];\n elem = template;\n elem.className += ' e-rule-field';\n ruleElem.appendChild(elem);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n }\n else if (this.isVue3) {\n template = this.ruleTemplateFn(args, this, 'Template', templateID);\n elem = template;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n append(elem, ruleElem);\n ruleElem.children[ruleElem.children.length - 1].className += ' e-rule-field';\n }\n else {\n template = this.ruleTemplateFn(args, this, 'Template', templateID)[0];\n elem = template;\n elem.className += ' e-rule-field';\n ruleElem.appendChild(elem);\n }\n }\n else {\n elem = this.ruleElem.querySelector('.e-rule-field').cloneNode(true);\n ruleElem.appendChild(elem);\n }\n if (column && column.ruleTemplate && rule) {\n this.renderReactTemplates();\n }\n return ruleElem;\n };\n QueryBuilder.prototype.addRuleElement = function (target, rule, column, action, parentId, isRuleTemplate) {\n var _this = this;\n if (!target) {\n return;\n }\n var args = { groupID: target.id.replace(this.element.id + '_', ''), cancel: false, type: 'insertRule' };\n if (!this.isImportRules && !this.isInitialLoad) {\n this.trigger('beforeChange', args, function (observedChangeArgs) {\n _this.addRuleSuccessCallBack(observedChangeArgs, target, rule, column, action, parentId, isRuleTemplate);\n });\n }\n else {\n this.isInitialLoad = false;\n this.addRuleSuccessCallBack(args, target, rule, column, action, parentId, isRuleTemplate);\n }\n };\n QueryBuilder.prototype.addRuleSuccessCallBack = function (args, trgt, rule, col, act, pId, isRlTmp) {\n var height = (this.element.className.indexOf('e-device') > -1) ? '250px' : '200px';\n var ruleID;\n var column = (rule && rule.field) ? this.getColumn(rule.field) : col ? col : this.columns[0];\n var operators;\n var dropDownList;\n var ruleElem;\n var newRule = { 'label': '', 'field': '', 'type': '', 'operator': '' };\n if (!args.cancel) {\n if (column && column.ruleTemplate && rule.field) {\n this.selectedColumn = column;\n operators = this.selectedColumn.operators;\n newRule = { 'label': column.label, 'field': column.field, 'type': column.type, 'operator': operators[0].value };\n var passedRule = Object.keys(rule).length ? rule : newRule;\n ruleElem = this.appendRuleElem(trgt, column, act, pId, 'field', passedRule);\n var args_1 = { requestType: 'template-create', action: 'insert-rule', ruleID: ruleElem.id,\n fields: this.fields, rule: passedRule };\n this.trigger('actionBegin', args_1);\n }\n else {\n ruleElem = this.appendRuleElem(trgt, column, act, pId, 'field');\n ruleElem.querySelector('.e-filter-input').setAttribute('id', ruleElem.id + '_filterkey');\n var element = ruleElem.querySelector('button');\n if (this.element.className.indexOf('e-device') > -1 || this.displayMode === 'Vertical') {\n element.textContent = this.l10n.getConstant('Remove');\n addClass([element], 'e-flat');\n addClass([element], 'e-primary');\n }\n else {\n addClass([element], 'e-round');\n addClass([element], 'e-icon-btn');\n element.setAttribute('title', this.l10n.getConstant('DeleteRule'));\n element = this.createElement('span', { attrs: { class: 'e-btn-icon e-icons e-delete-icon' } });\n ruleElem.querySelector('button').appendChild(element);\n }\n }\n if (this.displayMode === 'Vertical' || this.element.className.indexOf('e-device') > -1) {\n ruleElem.className = 'e-rule-container e-vertical-mode';\n }\n else {\n ruleElem.className = 'e-rule-container e-horizontal-mode';\n }\n if (ruleElem.previousElementSibling && ruleElem.previousElementSibling.className.indexOf('e-rule-container') > -1) {\n if (ruleElem.className.indexOf('e-joined-rule') < 0) {\n ruleElem.className += ' e-joined-rule';\n }\n if (ruleElem.previousElementSibling.className.indexOf('e-prev-joined-rule') < 0) {\n ruleElem.previousElementSibling.className += ' e-prev-joined-rule';\n }\n }\n if (ruleElem.previousElementSibling && ruleElem.previousElementSibling.className.indexOf('e-group-container') > -1 &&\n ruleElem.className.indexOf('e-separate-rule') < 0) {\n ruleElem.className += ' e-separate-rule';\n }\n if (!this.isImportRules) {\n this.updateAddedRule(trgt, rule, newRule, isRlTmp, pId);\n }\n if (!column || (column && !column.ruleTemplate) || !rule.field) {\n if (this.fieldMode === 'Default') {\n var ddlField = void 0;\n var ddlValue = void 0;\n if (this.separator && rule.field) {\n ddlValue = this.GetRootColumnName(rule.field);\n }\n else {\n ddlValue = this.isImportRules ? this.GetRootColumnName(rule.field) : rule.field;\n }\n ddlField = {\n dataSource: this.columns,\n fields: this.fields, placeholder: this.l10n.getConstant('SelectField'),\n popupHeight: ((this.columns.length > 5) ? height : 'auto'), close: this.fieldClose.bind(this, ruleElem.id + '_filterkey'),\n change: this.changeField.bind(this), value: rule ? ddlValue : null, open: this.popupOpen.bind(this, true)\n };\n if (this.fieldModel) {\n ddlField = __assign({}, ddlField, this.fieldModel);\n }\n dropDownList = new DropDownList(ddlField);\n dropDownList.appendTo('#' + ruleElem.id + '_filterkey');\n var ddlVal = void 0;\n if (this.separator && rule.field) {\n ddlVal = this.GetRootColumnName(rule.field);\n }\n else {\n ddlVal = this.isImportRules ? this.GetRootColumnName(rule.field) : dropDownList.value;\n }\n this.selectedColumn = dropDownList.getDataByValue(ddlVal);\n if (Object.keys(rule).length) {\n this.changeRule(rule, {\n element: dropDownList.element, itemData: this.selectedColumn\n });\n }\n }\n else {\n var ddlField = void 0;\n var ddlValue = this.isImportRules ? rule.field : rule.field;\n ddlField = {\n fields: { dataSource: this.columns,\n value: 'field', text: 'label', child: 'columns', expanded: 'expanded' },\n placeholder: this.l10n.getConstant('SelectField'), showClearButton: false,\n popupHeight: ((this.columns.length > 5) ? height : 'auto'), changeOnBlur: false,\n change: this.changeField.bind(this), value: !isNullOrUndefined(ddlValue) ? [ddlValue] : null,\n open: this.popupOpen.bind(this, false)\n };\n if (this.fieldModel) {\n ddlField = __assign({}, ddlField, this.fieldModel);\n }\n var dropdowntree = new DropDownTree(ddlField);\n dropdowntree.appendTo('#' + ruleElem.id + '_filterkey');\n if (!isNullOrUndefined(dropdowntree.value)) {\n var value = this.getLabelFromColumn(dropdowntree.value[0]);\n dropdowntree.element.value = value;\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var ddlVal = !isNullOrUndefined(rule.field) ?\n this.GetRootColumnName(rule.field) : dropdowntree.value;\n this.selectedColumn = this.getColumn(ddlVal);\n if (Object.keys(rule).length) {\n this.changeRule(rule, {\n element: dropdowntree.element, itemData: this.selectedColumn\n });\n }\n }\n }\n ruleID = ruleElem.id.replace(this.element.id + '_', '');\n if (!this.isImportRules) {\n this.trigger('change', { groupID: trgt.id.replace(this.element.id + '_', ''), ruleID: ruleID, type: 'insertRule' });\n }\n }\n };\n QueryBuilder.prototype.updateAddedRule = function (target, rule, newRule, isRuleTemplate, pId) {\n var ruleElem;\n var index = 0;\n var groupElem;\n var rules;\n if (isRuleTemplate) {\n ruleElem = select('#' + pId, target);\n groupElem = closest(target, '.e-group-container');\n rules = this.getParentGroup(groupElem);\n while (ruleElem && ruleElem.previousElementSibling !== null) {\n ruleElem = ruleElem.previousElementSibling;\n index++;\n }\n rules.rules[index] = rule;\n }\n else {\n groupElem = closest(target, '.e-group-container');\n rules = this.getParentGroup(groupElem);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var custom = rule.custom;\n if (Object.keys(rule).length) {\n rules.rules.push({\n 'field': rule.field, 'type': rule.type, 'label': rule.label, 'operator': rule.operator, value: rule.value\n });\n if (custom) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n rules.rules[rules.rules.length - 1].custom = custom;\n }\n }\n else {\n if (custom) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n newRule.custom = custom;\n }\n rules.rules.push(newRule);\n }\n }\n this.disableRuleCondition(target, rules);\n };\n QueryBuilder.prototype.changeRuleTemplate = function (column, element) {\n var operVal = this.selectedColumn.operators;\n if (column.ruleTemplate) {\n return;\n }\n else {\n var parentGroup = closest(element, '.e-group-container');\n var parentId = closest(element, '.e-rule-container').id;\n if (this.previousColumn && this.previousColumn.ruleTemplate) {\n detach(element.closest('[id=\"' + parentId + '\"]').querySelector('.e-rule-field'));\n this.clearQBTemplate([parentId]);\n }\n if (column) {\n var rule = { field: column.field, label: column.label, operator: operVal[0].value, value: '' };\n this.addRuleElement(parentGroup, rule, column, 'change', parentId, true);\n }\n }\n };\n QueryBuilder.prototype.renderToolTip = function (element) {\n var tooltip = new Tooltip({ content: this.l10n.getConstant('ValidationMessage'),\n position: 'BottomCenter', cssClass: 'e-querybuilder-error' });\n tooltip.appendTo(element);\n tooltip.open(element);\n };\n /**\n * Validate the conditions and it display errors for invalid fields.\n *\n * @returns {boolean} - Validation\n */\n QueryBuilder.prototype.validateFields = function () {\n var isValid = true;\n var dropDownTreeObj;\n if (this.allowValidation) {\n var excludeOprs = ['isnull', 'isnotnull', 'isempty', 'isnotempty'];\n var i = void 0;\n var len = void 0;\n var fieldElem = void 0;\n var indexElem = void 0;\n var valArray = [];\n var groupElem = void 0;\n var index = void 0;\n var dropDownObj = void 0;\n var tempElem = void 0;\n var rule = void 0;\n var ruleElemCln = this.element.querySelectorAll('.e-rule-container');\n for (i = 0, len = ruleElemCln.length; i < len; i++) {\n var validateRule = void 0;\n groupElem = closest(ruleElemCln[i], '.e-group-container');\n rule = this.getParentGroup(groupElem);\n index = 0;\n indexElem = tempElem = ruleElemCln[i];\n if (this.fieldMode === 'DropdownTree') {\n dropDownTreeObj = getComponent(ruleElemCln[i].querySelector('.e-rule-filter input.e-dropdowntree'), 'dropdowntree');\n if (dropDownTreeObj && dropDownTreeObj.value && dropDownTreeObj.value.length) {\n this.selectedColumn = this.getColumn(dropDownTreeObj.value[0]);\n validateRule = this.selectedColumn.validation;\n }\n }\n else {\n dropDownObj = getComponent(ruleElemCln[i].querySelector('.e-rule-filter input.e-dropdownlist'), 'dropdownlist');\n if (dropDownObj && dropDownObj.value) {\n this.selectedColumn = dropDownObj.getDataByValue(dropDownObj.value);\n validateRule = !isNullOrUndefined(dropDownObj.index) && this.selectedColumn.validation;\n }\n }\n fieldElem = tempElem.querySelector('.e-rule-field input.e-control');\n if (validateRule && validateRule.isRequired) {\n while (indexElem && indexElem.previousElementSibling !== null) {\n indexElem = indexElem.previousElementSibling;\n index++;\n }\n fieldElem = tempElem.querySelector('.e-rule-operator .e-control');\n if (!rule.rules[index].operator) {\n if (fieldElem.parentElement.className.indexOf('e-tooltip') < 0) {\n this.renderToolTip(fieldElem.parentElement);\n }\n isValid = false;\n }\n if (rule.rules[index].value instanceof Array) {\n valArray = rule.rules[index].value;\n }\n if (excludeOprs.indexOf(rule.rules[index].operator) < 0 &&\n (isNullOrUndefined(rule.rules[index].value) &&\n rule.rules[index].type !== 'date') || rule.rules[index].value === '' ||\n (rule.rules[index].value instanceof Array && valArray.length < 1)) {\n var valElem = tempElem.querySelectorAll('.e-rule-value .e-control');\n isValid = false;\n for (var j = 0, jLen = valElem.length; j < jLen; j++) {\n var element = valElem[j];\n var elem = void 0;\n if (element.parentElement.className.indexOf('e-searcher') > -1) {\n elem = closest(element, '.e-multi-select-wrapper');\n if (elem.className.indexOf('e-tooltip') < 0) {\n this.renderToolTip(elem);\n }\n }\n else if (valElem[j].parentElement.className.indexOf('e-tooltip') < 0 && valElem[j].className.indexOf('e-tooltip') < 0) {\n this.renderToolTip(valElem[j].parentElement);\n }\n j++;\n }\n }\n }\n else if ((dropDownObj && dropDownObj.element && isNullOrUndefined(dropDownObj.index)) ||\n (dropDownTreeObj && dropDownTreeObj.element && (isNullOrUndefined(dropDownTreeObj.value) ||\n dropDownTreeObj.value.length < 1))) {\n if (fieldElem.parentElement.className.indexOf('e-tooltip') < 0) {\n this.renderToolTip(fieldElem.parentElement);\n }\n isValid = false;\n }\n }\n }\n return isValid;\n };\n QueryBuilder.prototype.refreshLevelColl = function () {\n this.levelColl = {};\n var groupElem = this.element.querySelector('.e-group-container');\n if (groupElem) {\n this.levelColl[groupElem.id] = [0];\n var obj = { groupElement: groupElem, level: [0] };\n this.refreshLevel(obj);\n }\n };\n QueryBuilder.prototype.refreshLevel = function (obj) {\n var ruleList = obj.groupElement.querySelector('.e-rule-list').children;\n var childElem;\n var groupElem = obj.groupElement;\n var i;\n var iLen = ruleList.length;\n var groupCount = 0;\n for (i = 0; i < iLen; i++) {\n childElem = ruleList[i];\n if (childElem.className.indexOf('e-group-container') > -1) {\n obj.level.push(groupCount);\n this.levelColl[childElem.id] = obj.level.slice();\n groupCount++;\n obj.groupElement = childElem;\n obj = this.refreshLevel(obj);\n }\n }\n var ruleListElem = closest(groupElem, '.e-rule-list');\n obj.groupElement = ruleListElem ? closest(ruleListElem, '.e-group-container') : groupElem;\n obj.level = this.levelColl[obj.groupElement.id].slice();\n return obj;\n };\n QueryBuilder.prototype.groupTemplate = function () {\n var glueElem;\n var inputElem;\n var labelElem;\n var grpActElem;\n var groupBtn;\n var groupElem = this.createElement('div', { attrs: { class: 'e-group-container' } });\n var groupHdrElem = this.createElement('div', { attrs: { class: 'e-group-header' } });\n var grpBodyElem = this.createElement('div', { attrs: { class: 'e-group-body' } });\n var rulesElem = this.createElement('div', { attrs: { class: 'e-rule-list' } });\n groupElem.appendChild(groupHdrElem);\n grpBodyElem.appendChild(rulesElem);\n groupElem.appendChild(grpBodyElem);\n // create button group in OR and AND process\n if (!this.headerTemplate) {\n glueElem = this.createElement('div', { attrs: { class: 'e-lib e-btn-group', role: 'group' } });\n if (this.enableNotCondition) {\n inputElem = this.createElement('button', { attrs: { type: 'button', class: 'e-qb-toggle' } });\n glueElem.appendChild(inputElem);\n }\n inputElem = this.createElement('input', { attrs: { type: 'radio', class: 'e-btngroup-and', value: 'AND' } });\n glueElem.appendChild(inputElem);\n labelElem = this.createElement('label', { attrs: { class: 'e-lib e-btn e-btngroup-and-lbl e-small' },\n innerHTML: this.l10n.getConstant('AND') });\n glueElem.appendChild(labelElem);\n inputElem = this.createElement('input', { attrs: { type: 'radio', class: 'e-btngroup-or', value: 'OR' } });\n glueElem.appendChild(inputElem);\n labelElem = this.createElement('label', { attrs: { class: 'e-lib e-btn e-btngroup-or-lbl e-small' },\n innerHTML: this.l10n.getConstant('OR') });\n glueElem.appendChild(labelElem);\n groupHdrElem.appendChild(glueElem);\n grpActElem = this.createElement('div', { attrs: { class: 'e-group-action' } });\n groupBtn = this.createElement('button', { attrs: { type: 'button', class: 'e-add-btn' } });\n grpActElem.appendChild(groupBtn);\n groupHdrElem.appendChild(grpActElem);\n }\n return groupElem;\n };\n QueryBuilder.prototype.ruleTemplate = function () {\n var tempElem;\n var clsName;\n var ruleElem = this.createElement('div');\n var fieldElem = this.createElement('div', { attrs: { class: 'e-rule-field' } });\n tempElem = this.createElement('div', { attrs: { class: 'e-rule-filter' } });\n var filterElem = this.createElement('input', { attrs: { type: 'text', class: 'e-filter-input' } });\n tempElem.appendChild(filterElem);\n fieldElem.appendChild(tempElem);\n tempElem = this.createElement('div', { attrs: { class: 'e-rule-operator' } });\n fieldElem.appendChild(tempElem);\n tempElem = this.createElement('div', { attrs: { class: 'e-rule-value' } });\n fieldElem.appendChild(tempElem);\n tempElem = this.createElement('div', { attrs: { class: 'e-rule-value-delete' } });\n if (this.showButtons.ruleDelete || isNullOrUndefined(this.showButtons.ruleDelete)) {\n clsName = 'e-removerule e-rule-delete e-css e-btn e-small';\n }\n else {\n clsName = 'e-removerule e-rule-delete e-css e-btn e-small e-button-hide';\n }\n var delBtnElem = this.createElement('button', { attrs: { type: 'button', class: clsName } });\n tempElem.appendChild(delBtnElem);\n fieldElem.appendChild(tempElem);\n ruleElem.appendChild(fieldElem);\n return ruleElem;\n };\n QueryBuilder.prototype.addGroupElement = function (isGroup, target, condition, isBtnClick, not, isRoot, rule) {\n var _this = this;\n var args = { groupID: target.id.replace(this.element.id + '_', ''), cancel: false, type: 'insertGroup' };\n if (!this.isImportRules && !this.isInitialLoad) {\n this.trigger('beforeChange', args, function (observedChangeArgs) {\n _this.addGroupSuccess(observedChangeArgs, isGroup, target, condition, isBtnClick, not, isRoot, rule);\n });\n }\n else {\n this.isInitialLoad = false;\n this.addGroupSuccess(args, isGroup, target, condition, isBtnClick, not, isRoot, rule);\n }\n };\n QueryBuilder.prototype.addGroupSuccess = function (args, isGroup, eventTarget, condition, isBtnClick, not, isRoot, rule) {\n if (!args.cancel && (this.element.querySelectorAll('.e-group-container').length <= this.maxGroupCount)) {\n var target = eventTarget;\n var dltGroupBtn = void 0;\n var 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);\n this.groupIdCounter = 0;\n }\n else {\n this.headerTemplateFn(groupElem, not, condition, rule);\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) {\n var template;\n var templateID = this.element.id + '_header';\n var args;\n var groupHdr = groupElem.querySelector('.e-group-header');\n if (this.headerTemplate) {\n args = { requestType: 'header-template-initialize', ruleID: groupElem.id,\n notCondition: this.enableNotCondition ? not : undefined, condition: condition, rule: this.getRuleCollection(rule, true) };\n this.trigger('actionBegin', args);\n this.headerFn = this.templateParser(this.headerTemplate);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.isReact) {\n template = this.headerFn(args, this, groupElem.id, templateID)[0];\n groupHdr.appendChild(template);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n }\n else if (this.isAngular) {\n var templateColl = this.headerFn(args, this, groupElem.id, templateID);\n template = (templateColl[0].nodeType === 3) ? templateColl[1] : templateColl[0];\n groupHdr.appendChild(template);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n }\n else if (this.isVue3) {\n template = this.headerFn(args, this, groupElem.id, templateID);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n append(template, groupHdr);\n }\n else {\n template = this.headerFn(args, this, 'Template', templateID)[0];\n groupHdr.appendChild(template);\n }\n this.renderReactTemplates();\n }\n return groupElem;\n };\n /**\n * Notify the changes to component.\n *\n * @param {string | number | boolean | Date | string[] | number[] | Date[]} value - 'value' to be passed to update the rule value.\n * @param {Element} element - 'element' to be passed to update the rule.\n * @param {string} type - 'type' to be passed to update the rule .\n * @returns {void}.\n */\n QueryBuilder.prototype.notifyChange = function (value, element, type) {\n var grpElement = closest(element, '.e-group-container');\n var rules = this.getParentGroup(grpElement);\n var ruleElement = closest(element, '.e-rule-container');\n var index = 0;\n if (type === 'not') {\n rules.not = value;\n return;\n }\n if (type === 'condition') {\n rules.condition = value;\n return;\n }\n while (ruleElement && ruleElement.previousElementSibling !== null) {\n ruleElement = ruleElement.previousElementSibling;\n index++;\n }\n var rule = rules.rules[index];\n var column = this.getColumn(rule.field);\n var format = this.getFormat(column.format);\n if (column.type === 'date') {\n if (value instanceof Date) {\n value = this.intl.formatDate(value, format);\n }\n else if (value instanceof Array) {\n for (var i = 0; i < value.length; i++) {\n if (value[i] && value[i] instanceof Date) {\n value[i] = this.intl.formatDate(value[i], format);\n }\n }\n }\n }\n if (column.ruleTemplate) {\n this.templateChange(element, value, type);\n }\n else {\n this.isNotified = true;\n this.updateRules(element, value);\n this.isNotified = false;\n }\n };\n QueryBuilder.prototype.templateChange = function (element, value, type) {\n var grpElem = closest(element, '.e-group-container');\n var eventsArgs;\n var rules = this.getParentGroup(grpElem);\n var ruleElem = closest(element, '.e-rule-container');\n var index = 0;\n if (this.allowValidation) {\n this.validateValue(rules, ruleElem);\n }\n while (ruleElem && ruleElem.previousElementSibling !== null) {\n ruleElem = ruleElem.previousElementSibling;\n index++;\n }\n var rule = rules.rules[index];\n if (type === 'field') {\n this.selectedColumn = this.getColumn(value);\n }\n else if (rule) {\n this.selectedColumn = this.getColumn(rule.field);\n }\n var operVal;\n this.previousColumn = this.getColumn(rule.field);\n var beforeRules = this.getValidRules(this.rule);\n if (this.selectedColumn) {\n if (this.selectedColumn.operators) {\n operVal = this.selectedColumn.operators;\n }\n else {\n operVal = this.customOperators[this.selectedColumn.type + 'Operator'];\n }\n }\n var arrOper = ['in', 'notin', 'between', 'notbetween'];\n var prevOper;\n switch (type) {\n case 'field':\n rule.field = value;\n rule.label = this.selectedColumn.label;\n rule.type = this.selectedColumn.type;\n rule.value = '';\n rule.operator = operVal[0].value;\n break;\n case 'operator':\n prevOper = rule.operator;\n rule.operator = value;\n if (arrOper.indexOf(rule.operator) > -1) {\n rule.value = [];\n }\n else if (arrOper.indexOf(prevOper) > -1) {\n rule.value = '';\n }\n break;\n case 'value':\n rule.value = value;\n }\n this.changeRuleTemplate(this.selectedColumn, element);\n this.filterRules(beforeRules, this.getValidRules(this.rule), type);\n if (this.selectedColumn && this.selectedColumn.ruleTemplate) {\n if (type === 'field' || type === 'operator') {\n var grpEle = closest(element, '.e-rule-container');\n this.destroyControls(grpEle, true);\n detach(grpEle.querySelector('.e-rule-field'));\n var ruleElement = this.appendRuleElem(closest(grpEle, '.e-group-container'), this.selectedColumn, 'change', grpEle.id, type, rule);\n if (this.displayMode === 'Vertical' || this.element.className.indexOf('e-device') > -1) {\n ruleElement.className = 'e-rule-container e-vertical-mode';\n }\n else {\n ruleElement.className = 'e-rule-container e-horizontal-mode';\n }\n if (ruleElement.previousElementSibling && ruleElement.previousElementSibling.className.indexOf('e-rule-container') > -1) {\n if (ruleElement.className.indexOf('e-joined-rule') < 0) {\n ruleElement.className += ' e-joined-rule';\n }\n if (ruleElement.previousElementSibling.className.indexOf('e-prev-joined-rule') < 0) {\n ruleElement.previousElementSibling.className += ' e-prev-joined-rule';\n }\n }\n if (ruleElement.previousElementSibling && ruleElement.previousElementSibling.className.indexOf('e-group-container') > -1 &&\n ruleElement.className.indexOf('e-separate-rule') < 0) {\n ruleElement.className += ' e-separate-rule';\n }\n var args = { requestType: 'template-create', action: type, ruleID: grpEle.id,\n fields: this.fields, rule: rule };\n eventsArgs = { groupID: grpElem.id.replace(this.element.id + '_', ''), ruleID: grpEle.id.replace(this.element.id + '_', ''),\n value: rule.field, type: 'field' };\n this.trigger('actionBegin', args);\n this.trigger('change', eventsArgs);\n }\n }\n };\n QueryBuilder.prototype.changeValue = function (i, args) {\n var _this = this;\n var element;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (args.element && args.element.classList.contains('e-multiselect')) {\n var multiSelectArgs = args;\n element = multiSelectArgs.element;\n }\n else if (args.event) {\n element = args.event.target;\n }\n else {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n element = args.element;\n }\n if (element.className.indexOf('e-day') > -1 || element.className.indexOf('e-today') > -1 || element.className.indexOf('e-cell') > -1) {\n var calenderArgs = args;\n element = calenderArgs.element;\n }\n var groupElem = closest(element, '.e-group-container');\n var ruleElem = closest(element, '.e-rule-container');\n var groupID = groupElem && groupElem.id.replace(this.element.id + '_', '');\n var ruleID = ruleElem.id.replace(this.element.id + '_', '');\n var dateElement = args;\n if (dateElement.element && dateElement.element.className.indexOf('e-datepicker') > -1) {\n element = dateElement.element;\n }\n var value;\n var rbValue;\n var dropDownObj;\n if (element.className.indexOf('e-radio') > -1) {\n // eslint-disable-next-line\n rbValue = parseInt(element.id.split('valuekey')[1], 0);\n dropDownObj =\n getComponent(closest(element, '.e-rule-container').querySelector('.e-filter-input'), 'dropdownlist');\n this.selectedColumn = dropDownObj.getDataByValue(dropDownObj.value);\n if (this.selectedColumn.values) {\n value = this.selectedColumn.values[rbValue];\n }\n else {\n var valColl = [true, false];\n value = valColl[rbValue];\n }\n }\n else if (element.className.indexOf('e-multiselect') > -1) {\n value = getComponent(element, 'multiselect').value;\n }\n else {\n value = args.value;\n }\n if (args.name === 'input' && this.immediateModeDelay) {\n window.clearInterval(this.timer);\n this.timer = window.setInterval(function () { _this.filterValue(groupID, ruleID, value, i, element); }, this.immediateModeDelay);\n }\n else {\n this.filterValue(groupID, ruleID, value, i, element);\n }\n };\n QueryBuilder.prototype.filterValue = function (grID, rlID, value, i, ele) {\n var _this = this;\n var eventsArgs = { groupID: grID, ruleID: rlID, value: value, cancel: false, type: 'value' };\n window.clearInterval(this.timer);\n if (!this.isImportRules) {\n this.trigger('beforeChange', eventsArgs, function (observedChangeArgs) {\n _this.changeValueSuccessCallBack(observedChangeArgs, ele, i, grID, rlID);\n });\n }\n else {\n this.changeValueSuccessCallBack(eventsArgs, ele, i, grID, rlID);\n }\n };\n QueryBuilder.prototype.changeValueSuccessCallBack = function (args, element, i, groupID, ruleID) {\n if (!args.cancel) {\n this.updateRules(element, args.value, i);\n if (!this.isImportRules) {\n this.trigger('change', { groupID: groupID, ruleID: ruleID, value: args.value, cancel: false, type: 'value' });\n }\n }\n };\n QueryBuilder.prototype.fieldClose = function (id) {\n if (this.isFieldChange || this.isDestroy) {\n return;\n }\n this.isFieldClose = true;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var ddl = getComponent(id, 'dropdownlist');\n var item = ddl.popupObj.element.querySelector('.e-active');\n var itemData = ddl.getItemData();\n ddl.value = itemData.value;\n var customArgs = { element: ddl.element, value: itemData.value, isInteracted: true,\n previousItemData: this.prevItemData, previousItem: null, item: item, itemData: itemData, event: null, e: null };\n if (ddl.previousValue !== ddl.value) {\n this.changeField(customArgs);\n }\n this.isFieldChange = false;\n };\n QueryBuilder.prototype.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 ddtElem.value = args.oldValue[0];\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 {\n itemData.template.write({ elements: tempElements.length > 1 ? tempElements : tempElements[0],\n values: rule.value, operator: tempRule.operator, field: column.field, dataSource: column.values });\n }\n }\n };\n QueryBuilder.prototype.getItemData = function (parentId) {\n var fieldObj = getComponent(document.getElementById(parentId + '_filterkey'), 'dropdownlist');\n if (this.fieldMode === 'DropdownTree') {\n fieldObj = getComponent(document.getElementById(parentId + '_filterkey'), 'dropdowntree');\n }\n return this.fieldMode === 'DropdownTree' ? this.getColumn(fieldObj.value[0]) : this.getColumn(fieldObj.value);\n };\n QueryBuilder.prototype.setDefaultValue = function (parentId, isArryValue, isNumber) {\n var itemData = this.getItemData(parentId);\n if (isNullOrUndefined(itemData.value)) {\n return isNumber ? isArryValue ? [0, 0] : 0 : isArryValue ? [] : '';\n }\n if (isArryValue) {\n if (!(itemData.value instanceof Array)) {\n return [itemData.value];\n }\n }\n else {\n if (itemData.value instanceof Array) {\n return itemData.value[0];\n }\n }\n return itemData.value;\n };\n QueryBuilder.prototype.renderStringValue = function (parentId, rule, operator, idx, ruleValElem) {\n var selectedVal;\n var columnData = this.getItemData(parentId);\n var selectedValue;\n var isTemplate = (typeof columnData.template === 'string');\n if (this.isImportRules || this.isPublic || isTemplate) {\n selectedValue = rule.value;\n }\n else {\n selectedValue = this.setDefaultValue(parentId, false, false);\n }\n if ((operator === 'in' || operator === 'notin') && (this.dataColl.length || columnData.values)) {\n selectedVal = this.isImportRules ? rule.value : this.setDefaultValue(parentId, true, false);\n this.renderMultiSelect(columnData, parentId, idx, selectedVal, columnData.values);\n if (this.displayMode === 'Vertical' || this.element.className.indexOf('e-device') > -1) {\n ruleValElem.style.width = '100%';\n }\n else {\n ruleValElem.style.width = null;\n ruleValElem.style.minWidth = '200px';\n }\n }\n else {\n if (operator === 'in' || operator === 'notin') {\n selectedVal = this.isImportRules ? rule.value : this.setDefaultValue(parentId, true, false);\n selectedValue = selectedVal.join(',');\n }\n var txtBox = void 0;\n txtBox = {\n placeholder: this.l10n.getConstant('SelectValue'),\n input: this.changeValue.bind(this, idx)\n };\n if (this.valueModel && this.valueModel.textBoxModel) {\n txtBox = __assign({}, txtBox, this.valueModel.textBoxModel);\n }\n var inputobj = new TextBox(txtBox);\n inputobj.appendTo('#' + parentId + '_valuekey' + idx);\n inputobj.value = selectedValue;\n inputobj.dataBind();\n }\n };\n QueryBuilder.prototype.renderNumberValue = function (parentId, rule, operator, idx, ruleValElem, itemData, length) {\n var columnData = this.getItemData(parentId);\n var isTemplate = (typeof columnData.template === 'string');\n var selectedVal = (this.isImportRules || this.isPublic || isTemplate) ? rule.value : this.setDefaultValue(parentId, false, true);\n if ((operator === 'in' || operator === 'notin') && (this.dataColl.length || columnData.values)) {\n selectedVal = this.isImportRules ? rule.value : this.setDefaultValue(parentId, true, false);\n this.renderMultiSelect(columnData, parentId, idx, selectedVal, columnData.values);\n if (this.element.className.indexOf('e-device') > -1 || this.displayMode === 'Vertical') {\n ruleValElem.style.width = '100%';\n }\n else {\n ruleValElem.style.minWidth = '200px';\n ruleValElem.style.width = null;\n }\n }\n else if (operator === 'in' || operator === 'notin') {\n selectedVal = this.isImportRules ? rule.value : this.setDefaultValue(parentId, true, false);\n var selVal = selectedVal.join(',');\n var txtInp = void 0;\n txtInp = {\n placeholder: this.l10n.getConstant('SelectValue'),\n input: this.changeValue.bind(this, idx)\n };\n if (this.valueModel && this.valueModel.textBoxModel) {\n txtInp = __assign({}, txtInp, this.valueModel.textBoxModel);\n }\n var input = new TextBox(txtInp);\n input.appendTo('#' + parentId + '_valuekey' + idx);\n input.value = selVal;\n input.dataBind();\n }\n else {\n itemData = columnData;\n var min = (itemData.validation && itemData.validation.min) ? itemData.validation.min : 0;\n var max = (itemData.validation && itemData.validation.max) ? itemData.validation.max : Number.MAX_VALUE;\n var format = itemData.format ? itemData.format : 'n';\n if (length > 1 && rule) {\n selectedVal = rule.value[idx] ? rule.value[idx] : this.setDefaultValue(parentId, true, true);\n }\n var numericTxt = void 0;\n numericTxt = {\n value: (selectedVal instanceof Array) ? selectedVal[idx] : selectedVal,\n format: format, min: min, max: max, width: '100%',\n step: itemData.step ? itemData.step : 1,\n change: this.changeValue.bind(this, idx)\n };\n if (this.valueModel && this.valueModel.numericTextBoxModel) {\n numericTxt = __assign({}, numericTxt, this.valueModel.numericTextBoxModel);\n }\n var numeric = new NumericTextBox(numericTxt);\n numeric.appendTo('#' + parentId + '_valuekey' + idx);\n numeric.element.setAttribute('aria-label', itemData.label + ' ' + 'Value');\n }\n };\n QueryBuilder.prototype.processValueString = function (value, type) {\n var numArr = [];\n var strArr = value.split(',');\n if (type === 'string') {\n return strArr;\n }\n else {\n for (var k = 0, kLen = strArr.length; k < kLen; k++) {\n numArr.push(Number(strArr[k]));\n }\n return numArr;\n }\n };\n QueryBuilder.prototype.parseDate = function (value, format) {\n var formatOpt;\n var selectedValue;\n if (format) {\n var dParser = this.intl.getDateParser({ skeleton: 'full', type: 'dateTime' });\n formatOpt = this.getFormat(format);\n selectedValue = dParser(value);\n if (isNullOrUndefined(selectedValue)) {\n selectedValue = this.intl.parseDate(value, formatOpt);\n }\n }\n else {\n selectedValue = new Date(value);\n }\n return selectedValue;\n };\n QueryBuilder.prototype.renderControls = function (target, itemData, rule, tempRule, isRendered) {\n addClass([target.parentElement.querySelector('.e-rule-value')], 'e-value');\n removeClass([target.parentElement.querySelector('.e-rule-value')], 'e-hide');\n addClass([target.parentElement.querySelector('.e-rule-value')], 'e-show');\n if (itemData.template && (itemData.template.create || isRendered)) {\n this.processTemplate(target, itemData, rule, tempRule);\n }\n else {\n var length_1;\n if (tempRule.type === 'boolean') {\n length_1 = this.selectedColumn.values ? this.selectedColumn.values.length : 2;\n }\n else {\n length_1 = tempRule.operator && tempRule.operator.toString().toLowerCase().indexOf('between') > -1 ? 2 : 1;\n }\n var parentId = closest(target, '.e-rule-container').id;\n var ruleValElem = void 0;\n var operator = tempRule.operator.toString();\n if (target.className.indexOf('e-rule-operator') > -1 || target.className.indexOf('e-rule-filter') > -1) {\n ruleValElem = target.parentElement.querySelector('.e-rule-value');\n if (this.element.className.indexOf('e-device') > -1 || this.displayMode === 'Vertical') {\n ruleValElem.style.width = '100%';\n }\n else {\n if (operator !== 'in' && operator !== 'notin') {\n addClass([ruleValElem], 'e-custom-value');\n }\n else {\n removeClass([ruleValElem], 'e-custom-value');\n }\n }\n for (var i = 0; i < length_1; i++) {\n switch (tempRule.type) {\n case 'string':\n {\n this.renderStringValue(parentId, rule, operator, i, ruleValElem);\n }\n break;\n case 'number':\n {\n this.renderNumberValue(parentId, rule, operator, i, ruleValElem, itemData, length_1);\n }\n break;\n case 'boolean':\n this.processBoolValues(itemData, rule, parentId, i);\n break;\n case 'date':\n {\n var selectedValue = new Date();\n var selVal = void 0;\n var column = void 0;\n var format = itemData.format;\n var datepick = void 0;\n var datePicker = void 0;\n var place = this.l10n.getConstant('SelectValue');\n var isTemplate = (typeof itemData.template === 'string');\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (!itemData.field && !itemData.key && itemData.value) {\n if (itemData.value instanceof Date) {\n selectedValue = itemData.value;\n }\n else {\n selectedValue = this.parseDate(itemData.value, itemData.format);\n }\n }\n if (!itemData.format && rule && rule.field !== '') {\n column = this.getColumn(rule.field);\n format = column.format;\n }\n if ((this.isImportRules || this.isPublic || isTemplate) && rule) {\n column = this.getColumn(rule.field);\n format = column.format;\n if (rule.value) {\n selVal = (length_1 > 1) ? rule.value[i] : rule.value;\n selectedValue = this.parseDate(selVal, column.format);\n }\n else {\n selectedValue = rule.value;\n }\n }\n if (format) {\n var formatObj = this.getFormat(format);\n if (formatObj.skeleton) {\n datePicker = {\n locale: this.getLocale(), value: selectedValue,\n placeholder: place, format: formatObj, change: this.changeValue.bind(this, i)\n };\n if (this.valueModel && this.valueModel.datePickerModel) {\n datePicker = __assign({}, datePicker, this.valueModel.datePickerModel);\n }\n datepick = new DatePicker(datePicker);\n }\n else {\n datePicker = {\n value: selectedValue, locale: this.getLocale(), placeholder: place,\n format: formatObj.format, change: this.changeValue.bind(this, i)\n };\n if (this.valueModel && this.valueModel.datePickerModel) {\n datePicker = __assign({}, datePicker, this.valueModel.datePickerModel);\n }\n datepick = new DatePicker(datePicker);\n }\n }\n else {\n datePicker = {\n locale: this.getLocale(), value: selectedValue,\n placeholder: place, change: this.changeValue.bind(this, i)\n };\n if (this.valueModel && this.valueModel.datePickerModel) {\n datePicker = __assign({}, datePicker, this.valueModel.datePickerModel);\n }\n datepick = new DatePicker(datePicker);\n }\n datepick.appendTo('#' + parentId + '_valuekey' + i);\n if (!rule.value) {\n var elem = document.getElementById(parentId + '_valuekey' + i);\n this.updateRules(elem, selectedValue, null, this.isNotValueChange);\n this.isNotValueChange = false;\n }\n }\n break;\n }\n }\n }\n }\n };\n QueryBuilder.prototype.processBoolValues = function (itemData, rule, parentId, i) {\n var isCheck = false;\n var value;\n var orgValue;\n if (isNullOrUndefined(rule.type) && itemData) {\n rule.type = itemData.type;\n }\n var label;\n if (itemData.values) {\n var values = itemData.values;\n if (rule.type === 'boolean' && !isNullOrUndefined(rule.value)) {\n isCheck = values[i].toLowerCase() === rule.value.toString().toLowerCase();\n }\n else if (itemData.value) {\n isCheck = values[i].toLowerCase() === itemData.value.toString().toLowerCase();\n }\n else if (i === 0) {\n isCheck = true;\n }\n orgValue = value = label = values[i];\n }\n else {\n var values = [true, false];\n if (rule.type === 'boolean' && !isNullOrUndefined(rule.value)) {\n isCheck = values[i].toString().toLowerCase() === rule.value.toString().toLowerCase();\n }\n else if (itemData.value) {\n isCheck = values[i].toString().toLowerCase() === itemData.value.toString().toLowerCase();\n }\n else if (i === 0) {\n isCheck = true;\n }\n value = values[i].toString();\n orgValue = values[i];\n label = this.l10n.getConstant(['True', 'False'][i]);\n }\n var radioBtn;\n radioBtn = {\n label: label, name: parentId + 'default', checked: isCheck, value: value,\n change: this.changeValue.bind(this, i)\n };\n if (this.valueModel && this.valueModel.radioButtonModel) {\n radioBtn = __assign({}, radioBtn, this.valueModel.radioButtonModel);\n }\n var radiobutton = new RadioButton(radioBtn);\n radiobutton.appendTo('#' + parentId + '_valuekey' + i);\n if (isCheck) {\n this.updateRules(radiobutton.element, orgValue, 0);\n }\n };\n QueryBuilder.prototype.getOperatorIndex = function (ddlObj, rule) {\n var i;\n var dataSource = ddlObj.dataSource;\n var len = dataSource.length;\n for (i = 0; i < len; i++) {\n if (rule.operator === ddlObj.dataSource[i].value) {\n return i;\n }\n }\n return 0;\n };\n QueryBuilder.prototype.getPreviousItemData = function (prevItemData, column) {\n if (this.isFieldClose && prevItemData) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n prevItemData = this.getColumn(prevItemData.value);\n }\n if (column && column.template && prevItemData && Object.keys(prevItemData).length < 4) {\n prevItemData.template = column.template;\n }\n return prevItemData;\n };\n QueryBuilder.prototype.renderValues = function (target, itemData, prevItemData, isRender, rule, tempRule, element) {\n var subFldElem = target.previousElementSibling;\n var filtElem = subFldElem.getElementsByTagName('input')[0];\n var filtObj = this.fieldMode === 'DropdownTree' ? getComponent(filtElem, 'dropdowntree')\n : getComponent(filtElem, 'dropdownlist');\n var column = this.fieldMode === 'DropdownTree' ? this.getColumn(filtObj.value[0])\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n : this.getColumn(filtObj.value);\n this.selectedRule = column;\n if (isRender) {\n var ddlObj = getComponent(target.querySelector('input'), 'dropdownlist');\n itemData = element.id.indexOf('operator') > -1 ? itemData : this.selectedRule;\n if (itemData.operators) {\n ddlObj.value = null;\n ddlObj.dataBind();\n ddlObj.dataSource = itemData.operators;\n ddlObj.index = this.getOperatorIndex(ddlObj, rule);\n ddlObj.value = tempRule.operator = ddlObj.dataSource[ddlObj.index].value;\n ddlObj.dataBind();\n }\n }\n var operator = tempRule.operator.toString();\n var isTempRendered = false;\n if (!(operator.indexOf('null') > -1 || operator.indexOf('empty') > -1)) {\n var parentId = closest(target, '.e-rule-container').id;\n prevItemData = this.getPreviousItemData(prevItemData, column);\n if (prevItemData && prevItemData.template === undefined) {\n if (prevItemData.columns) {\n prevItemData = this.getColumn(rule.field);\n }\n }\n else if (this.fieldMode === 'DropdownTree' && prevItemData === undefined) {\n prevItemData = this.getColumn(rule.field);\n }\n if (prevItemData && prevItemData.template) {\n this.templateDestroy(prevItemData, parentId + '_valuekey0');\n var elem = select('#' + parentId + '_valuekey0', target.nextElementSibling);\n if (elem && !elem.classList.contains('e-control')) {\n detach(select('#' + parentId + '_valuekey0', target.nextElementSibling));\n }\n if (typeof prevItemData.template === 'string' || prevItemData.template.create === undefined) {\n if (target.nextElementSibling.classList.contains('e-template-value')) {\n this.clearQBTemplate([parentId]);\n }\n target.nextElementSibling.innerHTML = '';\n }\n }\n if (isRender) {\n this.validateValue(rule, closest(target, '.e-rule-container'));\n this.destroyControls(target);\n }\n if (column) {\n itemData.template = column.template;\n }\n if (itemData.template) {\n addClass([target.nextElementSibling], 'e-template-value');\n itemData.template = column.template;\n isTempRendered = this.setColumnTemplate(itemData, parentId, column.field, itemData.value ||\n operator, target, rule);\n }\n if (isTempRendered) {\n var parentElem = target.parentElement.querySelector('.e-rule-value');\n if (this.element.className.indexOf('e-device') > -1 || this.displayMode === 'Vertical') {\n parentElem.style.width = '100%';\n }\n else {\n parentElem.style.width = '200px';\n }\n }\n else {\n removeClass([target.nextElementSibling], 'e-template-value');\n var inputLen = 1;\n if (tempRule.type === 'boolean') {\n inputLen = this.selectedColumn.values ? this.selectedColumn.values.length : 2;\n }\n else {\n inputLen = (operator && operator.toLowerCase().indexOf('between') > -1) ? 2 : 1;\n }\n for (var i = 0; i < inputLen; i++) {\n var valElem = this.createElement('input', { attrs: { type: 'text', id: parentId + '_valuekey' + i } });\n target.nextElementSibling.appendChild(valElem);\n }\n }\n this.renderControls(target, itemData, rule, tempRule, isTempRendered);\n }\n else {\n var parentElem = target.parentElement.querySelector('.e-rule-value');\n if (parentElem) {\n removeClass([parentElem], 'e-show');\n addClass([parentElem], 'e-hide');\n }\n }\n };\n QueryBuilder.prototype.setColumnTemplate = function (itemData, ruleID, field, operator, target, rule) {\n var _this = this;\n var args;\n var isRendered = true;\n if (!itemData.template) {\n return true;\n }\n else {\n if (typeof itemData.template === 'string' || itemData.template.create === undefined) {\n args = { requestType: 'value-template-initialize', ruleID: ruleID, field: field, operator: operator, rule: rule,\n renderTemplate: true };\n this.trigger('actionBegin', args, function (observedActionArgs) {\n isRendered = _this.actionBeginSuccessCallBack(observedActionArgs, itemData, ruleID, field, target);\n });\n return isRendered;\n }\n else {\n var valElem = void 0;\n var template = itemData.template;\n if (typeof template.create === 'string') {\n valElem = getValue(template.create, window)({ field: field, operator: operator });\n }\n else {\n valElem = template.create({ field: field, operator: operator });\n }\n if (valElem instanceof Element) {\n valElem.id = ruleID + '_valuekey0';\n addClass([valElem], 'e-template');\n target.nextElementSibling.appendChild(valElem);\n if (field.indexOf(' ') < 0) {\n addClass([valElem], 'e-' + field);\n }\n }\n else if (valElem instanceof Array) {\n addClass(valElem, 'e-template');\n for (var i = 0, iLen = valElem.length; i < iLen; i++) {\n valElem[i].id = ruleID + '_valuekey' + i;\n target.nextElementSibling.appendChild(valElem[i]);\n }\n }\n addClass([target.nextElementSibling], 'e-template-value');\n return true;\n }\n }\n };\n QueryBuilder.prototype.actionBeginSuccessCallBack = function (args, itemData, ruleID, field, target) {\n if (args.renderTemplate) {\n var valElem = void 0;\n this.columnTemplateFn = this.templateParser(itemData.template);\n var templateID = this.element.id + field;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.isReact) {\n valElem = this.columnTemplateFn(args, this, ruleID, templateID)[0];\n } // eslint-disable-next-line @typescript-eslint/no-explicit-any\n else if (this.isAngular) {\n var valElemColl = this.columnTemplateFn(args, this, ruleID, templateID);\n valElem = (valElemColl[0].nodeType === 3) ? valElemColl[1] : valElemColl[0];\n }\n else {\n valElem = this.columnTemplateFn(args, this, 'Template', templateID)[0];\n }\n target.nextElementSibling.appendChild(valElem);\n addClass([target.nextElementSibling], 'e-template-value');\n this.renderReactTemplates();\n return true;\n }\n else {\n return false;\n }\n };\n QueryBuilder.prototype.updateValues = function (element, rule) {\n var idx = 1;\n if (element.className.indexOf('e-template') > -1) {\n idx = 3;\n }\n var controlName = element.className.split(' e-')[idx];\n var i = parseInt(element.id.slice(-1), 2);\n switch (controlName) {\n case 'checkbox':\n // eslint-disable-next-line\n var value = getComponent(element, controlName).value;\n rule.value = (value !== '') ? value : undefined;\n break;\n case 'textbox':\n rule.value = getComponent(element, controlName).value;\n break;\n case 'dropdownlist':\n rule.value = getComponent(element, controlName).value;\n break;\n case 'radio':\n // eslint-disable-next-line\n var radioBtnObj = getComponent(element, controlName);\n if (radioBtnObj.checked) {\n if (typeof rule.value === 'boolean') {\n rule.value = radioBtnObj.value === 'true';\n }\n else {\n if (this.getColumn(rule.field).values) {\n rule.value = radioBtnObj.value;\n }\n else {\n rule.value = radioBtnObj.value === 'true';\n }\n }\n }\n radioBtnObj.refresh();\n break;\n case 'numerictextbox':\n if (rule.operator.indexOf('between') > -1) {\n if (typeof rule.value === 'string') {\n rule.value = [];\n }\n rule.value[i] = getComponent(element, controlName).value;\n }\n else {\n rule.value = getComponent(element, controlName).value;\n }\n break;\n case 'datepicker':\n // eslint-disable-next-line\n var column = this.getColumn(rule.field);\n // eslint-disable-next-line\n var format = this.getFormat(column.format);\n // eslint-disable-next-line\n var selectedDate = getComponent(element, controlName).value;\n if (rule.operator.indexOf('between') > -1) {\n if (typeof rule.value === 'string') {\n rule.value = [];\n }\n rule.value[i] = this.intl.formatDate(selectedDate, format);\n }\n else if (isNullOrUndefined(format.format) && selectedDate) {\n rule.value = this.intl.formatDate(selectedDate);\n }\n else if (selectedDate) {\n rule.value = this.intl.formatDate(selectedDate, format);\n }\n else {\n rule.value = selectedDate;\n }\n break;\n case 'multiselect':\n rule.value = getComponent(element, controlName).value;\n break;\n }\n };\n QueryBuilder.prototype.updateRules = function (target, selectedValue, i, isNotTrigger) {\n var groupElem = closest(target, '.e-group-container');\n var rule = this.getParentGroup(groupElem);\n var ruleElem = closest(target, '.e-rule-container');\n var index = 0;\n var dropDownObj;\n var eventsArgs;\n var groupID = groupElem.id.replace(this.element.id + '_', '');\n var beforeRules = this.getValidRules(this.rule);\n while (ruleElem && ruleElem.previousElementSibling !== null) {\n ruleElem = ruleElem.previousElementSibling;\n index++;\n }\n var operator = rule.rules[index].operator ? rule.rules[index].operator.toString() : '';\n ruleElem = closest(target, '.e-rule-container');\n var ruleID = ruleElem.id.replace(this.element.id + '_', '');\n if (closest(target, '.e-rule-filter') || closest(target, '.e-rule-sub-filter')) {\n if (this.subFieldElem) {\n target = this.subFieldElem;\n }\n dropDownObj = this.fieldMode === 'DropdownTree' ? getComponent(target, 'dropdowntree') :\n getComponent(target, 'dropdownlist');\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var column = this.fieldMode === 'DropdownTree' ? this.getColumn(dropDownObj.value[0])\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n : this.getColumn(dropDownObj.value);\n if (!this.isImportRules && rule.rules[index].field &&\n rule.rules[index].field.toLowerCase() !== column.field.toLowerCase()) {\n if (!(ruleElem.querySelectorAll('.e-template')) && !(operator.indexOf('null') > -1)\n || (operator.indexOf('empty') > -1)) {\n rule.rules[index].value = '';\n }\n }\n this.selectedColumn = this.getColumn(this.selectedColumn.field);\n rule.rules[index].field = this.selectedColumn.field;\n rule.rules[index].type = this.selectedColumn.type;\n rule.rules[index].label = this.selectedColumn.label;\n var ruleElement = closest(target, '.e-rule-filter');\n ruleElement = ruleElement ? ruleElement : closest(target, '.e-rule-sub-filter');\n var element = ruleElement.nextElementSibling.querySelector('input.e-control');\n element = element ? element : ruleElement.nextElementSibling.nextElementSibling.querySelector('input.e-control');\n operator = getComponent(element, 'dropdownlist').value.toString();\n rule.rules[index].operator = operator;\n // Value Fields\n var valueContainer = ruleElement.nextElementSibling.nextElementSibling;\n var elementCln = valueContainer.querySelectorAll('input.e-control');\n if (elementCln.length < 1) {\n elementCln = valueContainer.querySelectorAll('div.e-control');\n }\n if (elementCln.length < 1) {\n elementCln = valueContainer.querySelectorAll('.e-template');\n }\n eventsArgs = { groupID: groupID, ruleID: ruleID, value: rule.rules[index].field, type: 'field' };\n for (var i_1 = 0; i_1 < elementCln.length; i_1++) {\n if (operator.indexOf('null') > -1 || operator.indexOf('empty') > -1) {\n rule.rules[index].value = null;\n continue;\n }\n this.updateValues(elementCln[i_1], rule.rules[index]);\n }\n if (!this.isImportRules) {\n this.trigger('change', eventsArgs);\n }\n if (this.allowValidation && rule.rules[index].field && target.parentElement.className.indexOf('e-tooltip') > -1) {\n getComponent(target.parentElement, 'tooltip').destroy();\n }\n this.filterRules(beforeRules, this.getValidRules(this.rule), 'field');\n }\n else if (closest(target, '.e-rule-operator')) {\n dropDownObj = getComponent(target, 'dropdownlist');\n rule.rules[index].operator = dropDownObj.value.toString();\n var inputElem = ruleElem.querySelectorAll('.e-rule-value input.e-control');\n eventsArgs = { groupID: groupID, ruleID: ruleID, value: dropDownObj.value, type: 'operator' };\n if (this.allowValidation && rule.rules[index].operator && target.parentElement.className.indexOf('e-tooltip') > -1) {\n getComponent(target.parentElement, 'tooltip').destroy();\n }\n if (inputElem.length > 1 && !(inputElem[0].className.indexOf('e-template') > -1)) {\n rule.rules[index].value = [];\n }\n for (var i_2 = 0; i_2 < inputElem.length; i_2++) {\n if (rule.rules[index].operator.indexOf('null') > -1 || rule.rules[index].operator.indexOf('empty') > -1) {\n rule.rules[index].value = null;\n continue;\n }\n else if (inputElem[i_2].classList.contains('e-template')) {\n continue;\n }\n this.updateValues(inputElem[i_2], rule.rules[index]);\n }\n if (!this.isImportRules) {\n this.trigger('change', eventsArgs);\n }\n this.filterRules(beforeRules, this.getValidRules(this.rule), 'operator');\n }\n else if (closest(target, '.e-rule-value')) {\n this.ruleValueUpdate(target, selectedValue, rule, index, groupElem, ruleElem, i);\n if (!isNotTrigger) {\n this.filterRules(beforeRules, this.getValidRules(this.rule), 'value');\n }\n }\n };\n QueryBuilder.prototype.filterRules = function (beforeRule, afterRule, type) {\n var beforeRuleStr = JSON.stringify({ condition: beforeRule.condition, not: beforeRule.not, rule: beforeRule.rules });\n var afetrRuleStr = JSON.stringify({ condition: afterRule.condition, not: afterRule.not, rule: afterRule.rules });\n if (beforeRuleStr !== afetrRuleStr) {\n if (!this.isImportRules) {\n this.trigger('ruleChange', { previousRule: beforeRule, rule: afterRule, type: type });\n }\n }\n };\n QueryBuilder.prototype.ruleValueUpdate = function (target, selectedValue, rule, index, groupElem, ruleElem, i) {\n var eventsArgs;\n var oper;\n var arrOperator = ['in', 'between', 'notin', 'notbetween'];\n if (rule.rules[index].operator) {\n oper = rule.rules[index].operator.toString().toLowerCase();\n }\n if (selectedValue !== null) {\n if (target.className.indexOf('e-multiselect') > -1 && rule.rules[index].type === 'number' &&\n !this.isNotified) {\n var selVal = [];\n var dupSelectedValue = selectedValue;\n for (var k = 0, kLen = dupSelectedValue.length; k < kLen; k++) {\n if (typeof dupSelectedValue[k] === 'string') {\n selVal.push(parseFloat(dupSelectedValue[k]));\n }\n }\n if (selVal.length) {\n selectedValue = selVal;\n }\n }\n if (this.isNotified) {\n rule.rules[index].value = selectedValue;\n eventsArgs = { groupID: groupElem.id, ruleID: ruleElem.id, value: rule.rules[index].value, type: 'value' };\n if (!this.isImportRules) {\n this.trigger('change', eventsArgs);\n }\n }\n else if (target.className.indexOf('e-spin') > -1 || target.className.indexOf('e-numeric') > -1) {\n if (arrOperator.indexOf(oper) > -1) {\n rule.rules[index].value[i] = selectedValue;\n }\n else {\n rule.rules[index].value = selectedValue;\n }\n }\n else if (target.className.indexOf('e-radio') > -1) {\n rule.rules[index].value = selectedValue;\n }\n else if (target.className.indexOf('e-multiselect') > -1) {\n rule.rules[index].value = selectedValue;\n }\n else if (target.className.indexOf('e-textbox') > -1) {\n if (oper === 'in' || oper === 'notin') {\n if (rule.rules[index].type === 'string') {\n rule.rules[index].value = this.processValueString(selectedValue, rule.rules[index].type);\n }\n else {\n rule.rules[index].value = this.processValueString(selectedValue, rule.rules[index].type);\n }\n }\n else {\n rule.rules[index].value = selectedValue;\n }\n }\n else if (target.className.indexOf('e-datepicker') > -1) {\n var format = this.getFormat(this.getColumn(this.selectedColumn.field).format);\n if (format.type) {\n if (arrOperator.indexOf(oper) > -1) {\n if (typeof rule.rules[index].value === 'string') {\n rule.rules[index].value = [];\n }\n rule.rules[index].value[i] = this.intl.formatDate(selectedValue, format);\n }\n else {\n rule.rules[index].value = this.intl.formatDate(selectedValue, format);\n }\n }\n }\n this.validateValue(rule, ruleElem, index);\n }\n else {\n if (target.className.indexOf('e-datepicker') > -1) {\n if (arrOperator.indexOf(oper) > -1) {\n if (typeof rule.rules[index].value === 'string') {\n rule.rules[index].value = [];\n }\n rule.rules[index].value[i] = selectedValue;\n }\n else {\n rule.rules[index].value = selectedValue;\n }\n }\n else {\n rule.rules[index].value = selectedValue;\n }\n }\n };\n QueryBuilder.prototype.validateValue = function (rule, ruleElem, index) {\n if (!isNullOrUndefined(index)) {\n rule = rule.rules[index];\n }\n var isObject = typeof (rule.value) === 'object';\n if (this.allowValidation && (isNullOrUndefined(index) || (isObject ? rule.value.length > 0 : rule.value))) {\n var valElem = ruleElem.querySelectorAll('.e-rule-value .e-control');\n if (valElem.length > 0) {\n if (valElem[0].className.indexOf('e-tooltip') > -1) {\n getComponent(valElem[0], 'tooltip').destroy();\n }\n else if (valElem[0].parentElement.className.indexOf('e-tooltip') > -1) {\n getComponent(valElem[0].parentElement, 'tooltip').destroy();\n }\n if (valElem[1] && valElem[1].parentElement.className.indexOf('e-tooltip') > -1) {\n getComponent(valElem[1].parentElement, 'tooltip').destroy();\n }\n }\n }\n };\n QueryBuilder.prototype.getFormat = function (format) {\n var formatOptions;\n if (format) {\n if (typeof (format) === 'string') {\n formatOptions = { type: 'dateTime' };\n if (format === 'short' || format === 'yMd') {\n formatOptions.type = 'date';\n formatOptions.skeleton = format;\n }\n else {\n formatOptions.format = format;\n }\n }\n else {\n formatOptions = { type: 'dateTime', skeleton: format.skeleton };\n }\n }\n else {\n formatOptions = { type: 'date', skeleton: 'yMd' };\n }\n return formatOptions;\n };\n QueryBuilder.prototype.findGroupByIdx = function (groupIdx, rule, isRoot) {\n var ruleColl = rule.rules;\n var dupRuleColl = [];\n if (!isRoot) {\n for (var j = 0, jLen = ruleColl.length; j < jLen; j++) {\n rule = ruleColl[j];\n if (rule.rules) {\n dupRuleColl.push(rule);\n }\n }\n return dupRuleColl[groupIdx];\n }\n return rule;\n };\n /**\n * Removes the component from the DOM and detaches all its related event handlers.\n * Also it maintains the initial input element from the DOM.\n *\n * @method destroy\n * @returns {void}\n */\n QueryBuilder.prototype.destroy = function () {\n this.isDestroy = true;\n var queryElement = this.element;\n if (!queryElement) {\n return;\n }\n var element;\n var i;\n var len;\n var tooltip;\n _super.prototype.destroy.call(this);\n element = this.element.querySelectorAll('.e-addrulegroup');\n len = element.length;\n for (i = 0; i < len; i++) {\n getComponent(element[i], 'dropdown-btn').destroy();\n detach(element[i]);\n }\n tooltip = this.element.querySelectorAll('.e-rule-filter .e-control.e-tooltip');\n for (i = 0; i < tooltip.length; i++) {\n getComponent(tooltip[i], 'tooltip').destroy();\n }\n element = this.element.querySelectorAll('.e-rule-filter .e-control:not(.e-tooltip)');\n len = element.length;\n for (i = 0; i < len; i++) {\n if (getComponent(element[i], 'dropdownlist')) {\n getComponent(element[i], 'dropdownlist').destroy();\n }\n else {\n getComponent(element[i], 'dropdowntree').destroy();\n }\n detach(element[i]);\n }\n tooltip = this.element.querySelectorAll('.e-rule-operator .e-control.e-tooltip');\n for (i = 0; i < tooltip.length; i++) {\n getComponent(tooltip[i], 'tooltip').destroy();\n }\n element = this.element.querySelectorAll('.e-rule-operator .e-control:not(.e-tooltip)');\n len = element.length;\n for (i = 0; i < len; i++) {\n if (getComponent(element[i], 'dropdownlist')) {\n getComponent(element[i], 'dropdownlist').destroy();\n detach(element[i]);\n }\n }\n tooltip = this.element.querySelectorAll('.e-rule-value .e-control.e-tooltip');\n for (i = 0; i < tooltip.length; i++) {\n getComponent(tooltip[i], 'tooltip').destroy();\n }\n this.isImportRules = false;\n this.unWireEvents();\n this.levelColl[this.element.id + '_group0'] = [0];\n this.element.innerHTML = '';\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.portals && this.portals.length) {\n this.clearQBTemplate();\n }\n classList(this.element, [], ['e-rtl', 'e-responsive', 'e-device']);\n this.isDestroy = false;\n };\n /**\n * Adds single or multiple rules.\n *\n * @param {RuleModel[]} rule - 'rule collection' to be passed to add the rules.\n * @param {string} groupID - 'group id' to be passed to add the rule in groups.\n * @returns {void}.\n */\n QueryBuilder.prototype.addRules = function (rule, groupID) {\n groupID = this.element.id + '_' + groupID;\n this.isPublic = true;\n for (var i = 0, len = rule.length; i < len; i++) {\n this.addRuleElement(document.getElementById(groupID), rule[i]);\n }\n this.isPublic = false;\n };\n /**\n * Adds single or multiple groups, which contains the collection of rules.\n *\n * @param {RuleModel[]} groups - 'group collection' to be passed to add the groups.\n * @param {string} groupID - 'group id' to be passed to add the groups.\n * @returns {void}.\n */\n QueryBuilder.prototype.addGroups = function (groups, groupID) {\n if (this.isAddSuccess || this.element.querySelectorAll('.e-group-container').length <= this.maxGroupCount) {\n groupID = this.element.id + '_' + groupID;\n var groupElem = document.getElementById(groupID);\n var rule = this.getParentGroup(groupElem);\n var grouplen = groups.length;\n if (grouplen) {\n this.isPublic = true;\n for (var i = 0, len = groups.length; i < len; i++) {\n this.updatedRule = { condition: groups[i].condition, not: groups[i].not };\n this.importRules(groups[i], groupElem, false, groups[i].not);\n }\n this.isPublic = false;\n }\n else {\n var condition = 'and';\n var not = false;\n if (this.updatedRule) {\n condition = this.updatedRule.condition;\n not = this.updatedRule.not;\n }\n if (this.enableNotCondition) {\n rule.rules.push({ 'condition': condition, 'not': not, rules: [] });\n }\n else {\n rule.rules.push({ 'condition': condition, rules: [] });\n }\n }\n if (!this.headerTemplate) {\n this.disableRuleCondition(groupElem, rule);\n }\n }\n };\n QueryBuilder.prototype.initWrapper = function () {\n this.isInitialLoad = true;\n if (this.cssClass) {\n addClass([this.element], this.cssClass.replace(/\\s+/g, ' ').trim().split(' '));\n }\n if (this.enableRtl) {\n addClass([this.element], 'e-rtl');\n }\n if (this.width) {\n this.element.style.width = this.width;\n }\n if (this.height) {\n this.element.style.height = this.height;\n }\n if (this.rule.rules.length) {\n this.isImportRules = true;\n }\n else {\n this.addGroupElement(false, this.element);\n }\n if (Browser.isDevice || this.displayMode === 'Vertical') {\n if (Browser.isDevice) {\n this.element.style.width = '100%';\n this.element.classList.add('e-device');\n }\n removeClass(this.element.querySelectorAll('.e-rule-container'), 'e-horizontal-mode');\n addClass(this.element.querySelectorAll('.e-rule-container'), 'e-vertical-mode');\n this.displayMode = 'Vertical';\n }\n else {\n this.displayMode = 'Horizontal';\n }\n if (this.summaryView) {\n if (this.isImportRules) {\n this.renderSummary();\n }\n else {\n this.renderSummaryCollapse();\n }\n }\n else {\n if (this.columns.length && this.isImportRules) {\n this.addGroupElement(false, this.element, this.rule.condition, false, this.rule.not, false, this.rule);\n var mRules = extend({}, this.rule, {}, true);\n this.isRefreshed = true;\n this.setGroupRules(mRules);\n this.isRefreshed = false;\n }\n else if (this.columns.length) {\n this.addRuleElement(this.element.querySelector('.e-group-container'), {});\n }\n this.notGroupRtl();\n if (this.readonly) {\n this.enableReadonly();\n }\n var buttons = this.element.querySelectorAll('label.e-btn');\n var button = void 0;\n for (var i = 0; i < buttons.length; i++) {\n button = buttons.item(i);\n rippleEffect(button, { selector: '.e-btn' });\n }\n }\n };\n QueryBuilder.prototype.renderSummary = function () {\n var contentElem = this.createElement('div', {\n attrs: {\n class: 'e-summary-content',\n id: this.element.id + '_summary_content'\n }\n });\n var textElem = this.createElement('textarea', { attrs: { class: 'e-summary-text', readonly: 'true' }, styles: 'max-height:500px' });\n var editElem = this.createElement('button', { attrs: { type: 'button', class: 'e-edit-rule e-css e-btn e-small e-flat e-primary' } });\n var divElem = this.createElement('div', { attrs: { class: 'e-summary-btndiv' } });\n contentElem.appendChild(textElem);\n textElem.textContent = this.getSqlFromRules(this.rule);\n editElem.textContent = this.l10n.getConstant('Edit');\n divElem.appendChild(editElem);\n contentElem.appendChild(divElem);\n this.element.appendChild(contentElem);\n };\n QueryBuilder.prototype.renderSummaryCollapse = function () {\n var collapseElem = this.createElement('div', {\n attrs: {\n class: 'e-collapse-rule e-icons',\n title: this.l10n.getConstant('SummaryViewTitle')\n }\n });\n this.element.querySelector('.e-group-header').appendChild(collapseElem);\n };\n QueryBuilder.prototype.columnSort = function () {\n if (this.sortDirection.toLowerCase() === 'descending') {\n this.columns = new DataManager(this.columns).executeLocal(new Query().sortByDesc('field'));\n }\n else if (this.sortDirection.toLowerCase() === 'ascending') {\n this.columns = new DataManager(this.columns).executeLocal(new Query().sortBy('field'));\n }\n };\n QueryBuilder.prototype.onChangeNotGroup = function () {\n this.element.innerHTML = '';\n this.groupIdCounter = 0;\n if (!this.headerTemplate) {\n if (this.enableNotCondition) {\n if (this.enableNotCondition) {\n var inputElem = this.createElement('button', { attrs: { type: 'button', class: 'e-qb-toggle' } });\n this.groupElem.querySelector('.e-btn-group').insertBefore(inputElem, this.groupElem.querySelector('.e-btngroup-and'));\n }\n }\n else {\n this.groupElem.querySelector('.e-qb-toggle').remove();\n }\n }\n this.rule = this.checkNotGroup(this.rule);\n this.initWrapper();\n };\n QueryBuilder.prototype.notGroupRtl = function () {\n if (this.enableRtl) {\n addClass(this.element.querySelectorAll('.e-btn-group'), 'e-rtl');\n }\n else {\n removeClass(this.element.querySelectorAll('.e-btn-group'), 'e-rtl');\n }\n };\n QueryBuilder.prototype.checkNotGroup = function (rule) {\n var orgRule;\n if (rule.rules) {\n for (var i = 0; i < rule.rules.length; i++) {\n orgRule = rule.rules[i];\n orgRule = this.checkNotGroup(orgRule);\n rule.rules[i] = orgRule;\n }\n }\n if (!isNullOrUndefined(rule.not)) {\n if (this.enableNotCondition) {\n rule.not = false;\n }\n delete rule.not;\n }\n else if (this.enableNotCondition && !isNullOrUndefined(rule.condition)) {\n rule.not = false;\n }\n return rule;\n };\n QueryBuilder.prototype.onPropertyChanged = function (newProp, oldProp) {\n var properties = Object.keys(newProp);\n for (var _i = 0, properties_1 = properties; _i < properties_1.length; _i++) {\n var prop = properties_1[_i];\n switch (prop) {\n case 'summaryView':\n // eslint-disable-next-line\n var groupElem = this.element.querySelector('.e-group-container');\n // eslint-disable-next-line\n var summaryElem = this.element.querySelector('.e-summary-content');\n if (newProp.summaryView) {\n groupElem.style.display = 'none';\n if (this.element.querySelectorAll('.e-summary-content').length < 1) {\n this.renderSummary();\n summaryElem = this.element.querySelector('.e-summary-content');\n }\n else {\n this.element.querySelector('.e-summary-text').textContent = this.getSqlFromRules(this.rule);\n }\n summaryElem.style.display = 'block';\n }\n else {\n if (groupElem.querySelectorAll('.e-collapse-rule').length > -1) {\n this.renderSummaryCollapse();\n }\n groupElem.style.display = 'block';\n summaryElem.style.display = 'none';\n }\n break;\n case 'displayMode':\n this.refresh();\n break;\n case 'showButtons':\n if (newProp.showButtons.ruleDelete) {\n removeClass(this.element.querySelectorAll('.e-rule-delete'), 'e-button-hide');\n }\n else {\n addClass(this.element.querySelectorAll('.e-rule-delete'), 'e-button-hide');\n }\n if (newProp.showButtons.groupDelete) {\n removeClass(this.element.querySelectorAll('.e-deletegroup'), 'e-button-hide');\n }\n else {\n addClass(this.element.querySelectorAll('.e-deletegroup'), 'e-button-hide');\n }\n break;\n case 'cssClass':\n if (oldProp.cssClass) {\n removeClass([this.element], oldProp.cssClass.split(' '));\n }\n if (newProp.cssClass) {\n addClass([this.element], newProp.cssClass.replace(/\\s+/g, ' ').trim().split(' '));\n }\n break;\n case 'enableRtl':\n if (newProp.enableRtl) {\n addClass([this.element], 'e-rtl');\n this.notGroupRtl();\n }\n else {\n removeClass([this.element], 'e-rtl');\n this.notGroupRtl();\n }\n break;\n case 'enablePersistence':\n this.enablePersistence = newProp.enablePersistence;\n break;\n case 'dataSource':\n this.dataSource = newProp.dataSource;\n this.refresh();\n break;\n case 'columns':\n this.columns = newProp.columns;\n this.columnSort();\n this.updateSubFieldsFromColumns(this.columns);\n break;\n case 'sortDirection':\n this.sortDirection = newProp.sortDirection;\n this.columnSort();\n break;\n case 'maxGroupCount':\n this.maxGroupCount = newProp.maxGroupCount;\n break;\n case 'height':\n this.height = newProp.height;\n this.element.style.height = this.height;\n break;\n case 'rule':\n this.rule = newProp.rule;\n newProp.rule = this.getRuleCollection(this.rule, false);\n break;\n case 'width':\n this.width = newProp.width;\n this.element.style.width = this.width;\n break;\n case 'locale':\n this.locale = newProp.locale;\n this.intl = new Internationalization(this.locale);\n this.isLocale = true;\n this.refresh();\n this.isLocale = false;\n break;\n case 'enableNotCondition':\n this.onChangeNotGroup();\n break;\n case 'readonly':\n this.isReadonly = newProp.readonly;\n this.enableReadonly();\n break;\n }\n }\n };\n QueryBuilder.prototype.preRender = function () {\n this.element.id = this.element.id || getUniqueID('ej2-querybuilder');\n this.defaultLocale = {\n StartsWith: 'Starts With',\n EndsWith: 'Ends With',\n Contains: 'Contains',\n NotLike: 'Not Like',\n Like: 'Like',\n Equal: 'Equal',\n NotEqual: 'Not Equal',\n LessThan: 'Less Than',\n LessThanOrEqual: 'Less Than Or Equal',\n GreaterThan: 'Greater Than',\n GreaterThanOrEqual: 'Greater Than Or Equal',\n Between: 'Between',\n NotBetween: 'Not Between',\n In: 'In',\n NotIn: 'Not In',\n Remove: 'REMOVE',\n SelectField: 'Select a field',\n SelectOperator: 'Select operator',\n DeleteRule: 'Remove this condition',\n DeleteGroup: 'Delete group',\n AddGroup: 'Add Group',\n AddCondition: 'Add Condition',\n Edit: 'EDIT',\n ValidationMessage: 'This field is required',\n SummaryViewTitle: 'Summary View',\n OtherFields: 'Other Fields',\n AND: 'AND',\n OR: 'OR',\n NOT: 'NOT',\n SelectValue: 'Enter Value',\n IsEmpty: 'Is Empty',\n IsNotEmpty: 'Is Not Empty',\n IsNull: 'Is Null',\n IsNotNull: 'Is Not Null',\n True: 'true',\n False: 'false',\n AddButton: 'Add Group/Condition'\n };\n this.l10n = new L10n('querybuilder', this.defaultLocale, this.locale);\n this.intl = new Internationalization(this.locale);\n this.groupIdCounter = 0;\n this.subFilterCounter = 0;\n this.ruleIdCounter = 0;\n this.btnGroupId = 0;\n this.isImportRules = false;\n this.parser = [];\n this.customOperators = {\n stringOperator: [\n { value: 'startswith', key: this.l10n.getConstant('StartsWith') },\n { value: 'endswith', key: this.l10n.getConstant('EndsWith') },\n { value: 'contains', key: this.l10n.getConstant('Contains') },\n { value: 'equal', key: this.l10n.getConstant('Equal') },\n { value: 'notequal', key: this.l10n.getConstant('NotEqual') },\n { value: 'in', key: this.l10n.getConstant('In') },\n { value: 'notin', key: this.l10n.getConstant('NotIn') },\n { value: 'isempty', key: this.l10n.getConstant('IsEmpty') },\n { value: 'isnotempty', key: this.l10n.getConstant('IsNotEmpty') }\n ],\n dateOperator: [\n { value: 'equal', key: this.l10n.getConstant('Equal') },\n { value: 'greaterthan', key: this.l10n.getConstant('GreaterThan') },\n { value: 'greaterthanorequal', key: this.l10n.getConstant('GreaterThanOrEqual') },\n { value: 'lessthan', key: this.l10n.getConstant('LessThan') },\n { value: 'lessthanorequal', key: this.l10n.getConstant('LessThanOrEqual') },\n { value: 'notequal', key: this.l10n.getConstant('NotEqual') }\n ],\n booleanOperator: [\n { value: 'equal', key: this.l10n.getConstant('Equal') },\n { value: 'notequal', key: this.l10n.getConstant('NotEqual') }\n ],\n numberOperator: [\n { value: 'equal', key: this.l10n.getConstant('Equal') },\n { value: 'greaterthanorequal', key: this.l10n.getConstant('GreaterThanOrEqual') },\n { value: 'greaterthan', key: this.l10n.getConstant('GreaterThan') },\n { value: 'between', key: this.l10n.getConstant('Between') },\n { value: 'lessthan', key: this.l10n.getConstant('LessThan') },\n { value: 'notbetween', key: this.l10n.getConstant('NotBetween') },\n { value: 'lessthanorequal', key: this.l10n.getConstant('LessThanOrEqual') },\n { value: 'notequal', key: this.l10n.getConstant('NotEqual') },\n { value: 'in', key: this.l10n.getConstant('In') },\n { value: 'notin', key: this.l10n.getConstant('NotIn') }\n ]\n };\n this.operators = {\n equal: '=', notequal: '!=', greaterthan: '>', greaterthanorequal: '>=', lessthan: '<', in: 'IN', notin: 'NOT IN',\n lessthanorequal: '<=', startswith: 'LIKE', endswith: 'LIKE', between: 'BETWEEN', notbetween: 'NOT BETWEEN', contains: 'LIKE',\n isnull: 'IS NULL', isnotnull: 'IS NOT NULL', isempty: 'IS EMPTY', isnotempty: 'IS NOT EMPTY', notstartswith: 'NOT LIKE',\n notendswith: 'NOT LIKE', notcontains: 'NOT LIKE'\n };\n this.sqlOperators = {\n equal: '=', notequal: '!=', greaterthan: '>', greaterthanorequal: '>=', lessthan: '<', in: this.l10n.getConstant('In').toUpperCase(),\n notin: this.l10n.getConstant('NotIn').toUpperCase(), lessthanorequal: '<=', startswith: this.l10n.getConstant('Like').toUpperCase(),\n endswith: this.l10n.getConstant('Like').toUpperCase(), between: this.l10n.getConstant('Between').toUpperCase(),\n notbetween: this.l10n.getConstant('NotBetween').toUpperCase(), contains: this.l10n.getConstant('Like').toUpperCase(),\n isnull: this.l10n.getConstant('IsNull').toUpperCase(), isnotnull: this.l10n.getConstant('IsNotNull').toUpperCase(),\n isempty: this.l10n.getConstant('IsEmpty').toUpperCase(), isnotempty: this.l10n.getConstant('IsNotEmpty').toUpperCase(),\n notstartswith: this.l10n.getConstant('NotLike').toUpperCase(), notendswith: this.l10n.getConstant('NotLike').toUpperCase(),\n notcontains: this.l10n.getConstant('NotLike').toUpperCase()\n };\n if (!this.fields) {\n this.fields = { text: 'label', value: 'field' };\n }\n };\n QueryBuilder.prototype.render = function () {\n this.levelColl = {};\n this.items = [\n {\n text: this.l10n.getConstant('AddGroup'),\n iconCss: 'e-icons e-add-icon e-addgroup'\n },\n {\n text: this.l10n.getConstant('AddCondition'),\n iconCss: 'e-icons e-add-icon e-addrule'\n }\n ];\n this.ruleElem = this.ruleTemplate();\n this.groupElem = this.groupTemplate();\n var stringOper = [\n { value: 'isnull', key: this.l10n.getConstant('IsNull') },\n { value: 'isnotnull', key: this.l10n.getConstant('IsNotNull') }\n ];\n var numberOper = [\n { value: 'isnull', key: this.l10n.getConstant('IsNull') },\n { value: 'isnotnull', key: this.l10n.getConstant('IsNotNull') }\n ];\n this.customOperators['stringOperator'] = this.customOperators['stringOperator'].concat(stringOper); // tslint:disable-line\n this.customOperators['numberOperator'] = this.customOperators['numberOperator'].concat(numberOper); // tslint:disable-line\n if (this.dataSource instanceof DataManager) {\n this.dataManager = this.dataSource;\n this.executeDataManager(new Query().take(1));\n }\n else {\n this.dataManager = new DataManager(this.dataSource);\n this.dataColl = this.dataManager.executeLocal(new Query());\n this.initControl();\n }\n this.renderComplete();\n };\n QueryBuilder.prototype.templateParser = function (template) {\n if (template) {\n try {\n if (document.querySelectorAll(template).length) {\n return templateCompiler(document.querySelector(template).innerHTML.trim());\n }\n else {\n return compile(template);\n }\n }\n catch (error) {\n return templateCompiler(template);\n }\n }\n return undefined;\n };\n QueryBuilder.prototype.executeDataManager = function (query) {\n var _this = this;\n var data = this.dataManager.executeQuery(query);\n var deferred = new Deferred();\n data.then(function (e) {\n if (e.actual && e.actual.result) {\n _this.dataColl = e.actual.result;\n }\n else {\n _this.dataColl = e.result;\n }\n _this.initControl();\n }).catch(function (e) {\n deferred.reject(e);\n });\n };\n QueryBuilder.prototype.initControl = function () {\n this.initialize();\n this.initWrapper();\n this.wireEvents();\n };\n QueryBuilder.prototype.wireEvents = function () {\n var wrapper = this.getWrapper();\n EventHandler.add(wrapper, 'click', this.clickEventHandler, this);\n EventHandler.add(wrapper, 'focusout', this.focusEventHandler, this);\n EventHandler.add(wrapper, 'focusin', this.focusEventHandler, this);\n EventHandler.add(this.element, 'keydown', this.keyBoardHandler, this);\n };\n QueryBuilder.prototype.unWireEvents = function () {\n var wrapper = this.getWrapper();\n EventHandler.remove(wrapper, 'click', this.clickEventHandler);\n EventHandler.remove(wrapper, 'focusout', this.focusEventHandler);\n EventHandler.remove(wrapper, 'focusin', this.focusEventHandler);\n EventHandler.remove(this.element, 'keydown', this.keyBoardHandler);\n };\n QueryBuilder.prototype.getParentGroup = function (target, isParent) {\n var groupLevel = (target instanceof Element) ? this.levelColl[target.id] : this.levelColl[\"\" + target];\n var len = isParent ? groupLevel.length - 1 : groupLevel.length;\n var rule = this.rule;\n for (var i = 0; i < len; i++) {\n rule = this.findGroupByIdx(groupLevel[i], rule, i === 0);\n }\n return rule;\n };\n /**\n * Delete the Group\n *\n * @param {Element | string} target - 'target' to be passed to delete the group.\n * @returns {void}\n */\n QueryBuilder.prototype.deleteGroup = function (target) {\n var _this = this;\n var groupElem = target;\n var groupId;\n if (typeof target === 'string') {\n groupId = this.element.id + '_' + target;\n target = document.getElementById(groupId);\n }\n else {\n groupId = groupElem.id.replace(this.element.id + '_', '');\n }\n var args = { groupID: groupId, cancel: false, type: 'deleteGroup' };\n if (!this.isImportRules) {\n this.trigger('beforeChange', args, function (observedChangeArgs) {\n _this.deleteGroupSuccessCallBack(observedChangeArgs, target);\n });\n }\n else {\n this.deleteGroupSuccessCallBack(args, target);\n }\n };\n QueryBuilder.prototype.deleteGroupSuccessCallBack = function (args, target) {\n if (!args.cancel) {\n var groupElem = target;\n var rule = this.getParentGroup(groupElem, true);\n var index = 0;\n var i = void 0;\n var len = void 0;\n var beforeRules = this.getValidRules(this.rule);\n var nextElem = groupElem.nextElementSibling;\n var prevElem = groupElem.previousElementSibling;\n var element = groupElem.querySelectorAll('.e-group-container');\n var valElem = groupElem.querySelectorAll('.e-tooltip');\n len = valElem.length;\n for (i = 0; i < len; i++) {\n getComponent(valElem[i], 'tooltip').destroy();\n }\n for (i = 0, len = element.length; i < len; i++) {\n delete this.levelColl[element[i].id];\n }\n while (groupElem.previousElementSibling !== null) {\n groupElem = groupElem.previousElementSibling;\n index++;\n }\n if (nextElem && nextElem.className.indexOf('e-separate-rule') > -1) {\n removeClass([nextElem], 'e-separate-rule');\n addClass([nextElem], 'e-joined-rule');\n if (prevElem && prevElem.className.indexOf('e-rule-container') > -1) {\n addClass([prevElem], 'e-prev-joined-rule');\n }\n }\n var elem = groupElem.parentElement.parentElement.parentElement;\n var removeString = [];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.isReact || this.isAngular) {\n var remRule = rule.rules[index];\n var ruleElemColl = target.querySelectorAll('.e-rule-container');\n if (remRule && remRule.rules) {\n for (var r = 0; r < remRule.rules.length; r++) {\n var column = this.getColumn(remRule.rules[r].field);\n var isTemplateRendered = ruleElemColl[r].querySelector('.e-template-value');\n if (column && (column.ruleTemplate || (this.isPlatformTemplate(column) && isTemplateRendered))) {\n removeString.push(ruleElemColl[r].id);\n }\n }\n }\n }\n detach(target);\n if (this.headerTemplate) {\n this.clearQBTemplate([target.id]);\n }\n if (removeString.length) {\n this.clearQBTemplate(removeString);\n }\n rule.rules.splice(index, 1);\n delete this.levelColl[args.groupID];\n this.refreshLevelColl();\n this.disableRuleCondition(elem, rule);\n if (!this.isImportRules) {\n this.trigger('change', args);\n }\n this.filterRules(beforeRules, this.getValidRules(this.rule), 'deleteGroup');\n }\n };\n QueryBuilder.prototype.isPlatformTemplate = function (column) {\n var isTemp = false;\n isTemp = column.template && (typeof column.template === 'string' || column.template.create === undefined);\n return isTemp;\n };\n QueryBuilder.prototype.deleteRule = function (target) {\n var _this = this;\n var groupElem = closest(target, '.e-group-container');\n var groupID = groupElem.id.replace(this.element.id + '_', '');\n var ruleID = closest(target, '.e-rule-container').id.replace(this.element.id + '_', '');\n var args = { groupID: groupID, ruleID: ruleID, cancel: false, type: 'deleteRule' };\n if (!this.isImportRules) {\n this.trigger('beforeChange', args, function (observedChangeArgs) {\n _this.deleteRuleSuccessCallBack(observedChangeArgs, target);\n });\n }\n else {\n this.deleteRuleSuccessCallBack(args, target);\n }\n };\n QueryBuilder.prototype.deleteRuleSuccessCallBack = function (args, target) {\n if (!args.cancel) {\n var groupElem = closest(target, '.e-group-container');\n var rule = this.getParentGroup(groupElem);\n var ruleElem = closest(target, '.e-rule-container');\n var beforeRules = this.getValidRules(this.rule);\n var clnruleElem = ruleElem;\n var nextElem = ruleElem.nextElementSibling;\n var prevElem = ruleElem.previousElementSibling;\n var index = 0;\n var valElem = ruleElem.querySelectorAll('.e-tooltip');\n var i = void 0;\n var len = valElem.length;\n for (i = 0; i < len; i++) {\n getComponent(valElem[i], 'tooltip').destroy();\n }\n while (ruleElem.previousElementSibling !== null) {\n ruleElem = ruleElem.previousElementSibling;\n index++;\n }\n var column = this.getColumn(rule.rules[index].field);\n if (column && column.template && clnruleElem.querySelector('.e-template')) {\n this.templateDestroy(column, clnruleElem.querySelector('.e-template').id);\n }\n if (!prevElem || prevElem.className.indexOf('e-rule-container') < 0) {\n if (nextElem) {\n removeClass([nextElem], 'e-joined-rule');\n }\n }\n if (!nextElem || nextElem.className.indexOf('e-rule-container') < 0) {\n if (prevElem) {\n removeClass([prevElem], 'e-prev-joined-rule');\n }\n }\n var isTemplateRendered = clnruleElem.querySelector('.e-template-value');\n // eslint-disable\n try {\n detach(clnruleElem);\n }\n catch (err) {\n // eslint-disable-next-line no-ex-assign\n err = [];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var error = 'error';\n // eslint-disable-next-line\n err[error] = error;\n }\n // eslint-enable\n if (column && column.ruleTemplate) {\n this.clearQBTemplate([clnruleElem.id]);\n }\n if (column && this.isPlatformTemplate(column) && isTemplateRendered) {\n this.clearQBTemplate([clnruleElem.id]);\n }\n rule.rules.splice(index, 1);\n if (!(rule.rules[0] && rule.rules[0].rules)) {\n this.disableRuleCondition(groupElem, rule);\n }\n if (!this.isImportRules) {\n this.trigger('change', args);\n }\n this.filterRules(beforeRules, this.getValidRules(this.rule), 'deleteRule');\n }\n };\n QueryBuilder.prototype.setGroupRules = function (rule, isRoot) {\n if (this.headerTemplate && isRoot) {\n this.isRoot = true;\n }\n this.reset();\n this.groupIdCounter = 1;\n this.ruleIdCounter = 0;\n this.isImportRules = true;\n this.rule = rule;\n rule = this.getRuleCollection(this.rule, false);\n this.importRules(this.rule, this.element.querySelector('.e-group-container'), true, this.rule.not, isRoot);\n this.isImportRules = false;\n };\n QueryBuilder.prototype.keyBoardHandler = function (e) {\n if (this.readonly && (e.keyCode === 38 || e.keyCode === 40 || e.keyCode === 13)) {\n e.preventDefault();\n }\n };\n QueryBuilder.prototype.clearQBTemplate = function (ruleElemColl) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.isReact || this.isAngular) {\n this.clearTemplate(ruleElemColl);\n }\n };\n QueryBuilder.prototype.disableRuleCondition = function (groupElem, rules) {\n if (!this.headerTemplate) {\n if (this.readonly) {\n return;\n }\n var count = groupElem.querySelector('.e-rule-list').childElementCount;\n var andElem = groupElem.querySelector('.e-btngroup-and');\n var orElem = groupElem.querySelector('.e-btngroup-or');\n if (count > 1) {\n andElem.disabled = false;\n orElem.disabled = false;\n if (orElem.nextElementSibling.classList.contains('e-btn-disable') ||\n andElem.nextElementSibling.classList.contains('e-btn-disable')) {\n orElem.nextElementSibling.classList.remove('e-btn-disable');\n andElem.nextElementSibling.classList.remove('e-btn-disable');\n }\n if (rules && rules.condition === 'or') {\n orElem.checked = true;\n }\n else {\n andElem.checked = true;\n }\n }\n else {\n andElem.checked = false;\n andElem.disabled = true;\n orElem.checked = false;\n orElem.disabled = true;\n if (rules) {\n orElem.nextElementSibling.classList.add('e-btn-disable');\n andElem.nextElementSibling.classList.add('e-btn-disable');\n }\n }\n }\n };\n /**\n * Get the valid rule or rules collection.\n *\n * @param {RuleModel} currentRule - 'currentRule' to be passed to get the valid rules.\n * @returns {RuleModel} - Valid rule or rules collection\n */\n QueryBuilder.prototype.getValidRules = function (currentRule) {\n if (!currentRule) {\n currentRule = this.getRules();\n }\n var ruleCondtion = currentRule.condition;\n var notCondition = currentRule.not;\n var ruleColl = extend([], currentRule.rules, [], true);\n var rule = this.getRuleCollection({ condition: ruleCondtion, rules: ruleColl, not: notCondition }, true);\n return rule;\n };\n QueryBuilder.prototype.getRuleCollection = function (rule, isValidRule) {\n if (isNullOrUndefined(rule)) {\n return null;\n }\n var orgRule;\n if (rule.rules && rule.rules.length && (Object.keys(rule.rules[0]).length > 6 || isValidRule)) {\n var jLen = rule.rules.length;\n for (var j = 0; j < jLen; j++) {\n orgRule = rule.rules[j];\n orgRule = this.getRuleCollection(orgRule, isValidRule);\n rule.rules[j] = orgRule;\n if (Object.keys(orgRule).length < 1 && isValidRule) {\n rule.rules.splice(j, 1);\n j--;\n jLen--;\n }\n }\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var customObj = rule.custom;\n if ((rule.field && rule.field !== '') && (isNullOrUndefined(customObj) || (customObj && (customObj.type !== 'question' &&\n customObj.type !== 'answer')))) {\n if (rule.operator) {\n if (rule.operator.toString().indexOf('null') > -1 || rule.operator.toString().indexOf('empty') > -1) {\n rule.value = null;\n }\n }\n if ((this.isRefreshed && this.enablePersistence) || (this.rule.field !== '' && rule.operator !== '' && (rule.value !== '' &&\n rule.value !== undefined)) || (customObj && customObj.isQuestion)) {\n var condition = rule.condition;\n rule = {\n 'label': rule.label, 'field': rule.field, 'operator': rule.operator, 'type': rule.type, 'value': rule.value\n };\n if (condition) {\n rule.condition = condition;\n }\n if (customObj) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n rule.custom = customObj;\n }\n }\n else {\n rule = {};\n }\n }\n else {\n if (customObj && (customObj.type === 'question' || customObj.type === 'answer')) {\n var notValue = rule.not;\n rule = { 'label': rule.label, 'field': rule.field, 'operator': rule.operator, 'type': rule.type, 'value': rule.value,\n 'condition': rule.condition, 'rules': rule.rules\n };\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n rule.custom = customObj;\n if (this.enableNotCondition) {\n rule.not = notValue;\n }\n }\n else if ((isNullOrUndefined(rule.condition)) && isNullOrUndefined(rule.rules)) {\n rule = {};\n }\n else {\n if (this.enableNotCondition) {\n rule = { 'condition': rule.condition, 'rules': rule.rules, 'not': rule.not };\n }\n else {\n rule = { 'condition': rule.condition, 'rules': rule.rules };\n }\n if (rule.rules.length === 0) {\n rule = {};\n }\n }\n }\n return rule;\n };\n /**\n * Set the rule or rules collection.\n *\n * @param {RuleModel} rule - 'rule' to be passed to set rules.\n * @returns {void}.\n */\n QueryBuilder.prototype.setRules = function (rule) {\n var mRules = extend({}, rule, {}, true);\n if (this.headerTemplate) {\n this.setGroupRules(mRules, true);\n }\n else {\n this.setGroupRules(mRules);\n }\n };\n /**\n * Gets the rule or rule collection.\n *\n * @returns {object} - Rule or rule collection\n */\n QueryBuilder.prototype.getRules = function () {\n var rule;\n if (this.enableNotCondition) {\n rule = { condition: this.rule.condition, rules: this.rule.rules, not: this.rule.not };\n }\n else {\n rule = { condition: this.rule.condition, rules: this.rule.rules };\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.rule.custom) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n rule.custom = this.rule.custom;\n }\n return rule;\n };\n /**\n * Gets the rule.\n *\n * @param {string | HTMLElement} elem - 'elem' to be passed to get rule.\n * @returns {object} - Rule\n */\n QueryBuilder.prototype.getRule = function (elem) {\n var ruleElem;\n var ruleId;\n var index = 0;\n if (elem instanceof HTMLElement) {\n ruleElem = closest(elem, '.e-rule-container');\n }\n else {\n ruleId = this.element.id + '_' + elem;\n ruleElem = document.getElementById(ruleId);\n }\n var groupElem = closest(ruleElem, '.e-group-container');\n var rule = this.getParentGroup(groupElem);\n while (ruleElem.previousElementSibling !== null) {\n ruleElem = ruleElem.previousElementSibling;\n index++;\n }\n return rule.rules[index];\n };\n /**\n * Gets the group.\n *\n * @param {string | Element} target - 'target' to be passed to get group.\n * @returns {object} -Group\n */\n QueryBuilder.prototype.getGroup = function (target) {\n if (target instanceof Element && target.className.indexOf('e-group-container') < 1) {\n target = closest(target, '.e-group-container');\n }\n var groupId = (target instanceof Element) ? target.id : this.element.id + '_' + target;\n var rule = this.getParentGroup(groupId);\n return rule;\n };\n /**\n * Deletes the group or groups based on the group ID.\n *\n * @param {string[]} groupIdColl - 'groupIdColl' to be passed to delete groups.\n * @returns {void}\n */\n QueryBuilder.prototype.deleteGroups = function (groupIdColl) {\n var i;\n var len = groupIdColl.length;\n var groupID;\n for (i = 0; i < len; i++) {\n groupID = this.element.id + '_' + groupIdColl[i];\n this.deleteGroup(document.getElementById(groupID));\n }\n };\n /**\n * Return the Query from current rules collection.\n *\n * @returns {Promise} - Query from current rules collection\n * @blazorType object\n */\n QueryBuilder.prototype.getFilteredRecords = function () {\n var predicate = this.getPredicate(this.getValidRules(this.rule));\n var dataManagerQuery = isNullOrUndefined(predicate) ? new Query() : new Query().where(predicate);\n return this.dataManager.executeQuery(dataManagerQuery);\n };\n /**\n * Deletes the rule or rules based on the rule ID.\n *\n * @param {string[]} ruleIdColl - 'ruleIdColl' to be passed to delete rules.\n * @returns {void}.\n */\n QueryBuilder.prototype.deleteRules = function (ruleIdColl) {\n var i;\n var len = ruleIdColl.length;\n var ruleID;\n for (i = 0; i < len; i++) {\n ruleID = this.element.id + '_' + ruleIdColl[i];\n this.deleteRule(document.getElementById(ruleID));\n }\n };\n /**\n * Gets the query for Data Manager.\n *\n * @param {RuleModel} rule - 'rule' to be passed to get query.\n * @returns {string} - Query for Data Manager\n */\n QueryBuilder.prototype.getDataManagerQuery = function (rule) {\n var predicate = this.getPredicate(rule);\n var query;\n var fields = [];\n for (var i = 0, len = Object.keys(this.columns); i < len.length; i++) {\n fields.push(this.columns[i].field);\n }\n if (rule.rules.length) {\n query = new Query().select(fields).where(predicate);\n }\n else {\n query = new Query().select(fields);\n }\n return query;\n };\n /**\n * Get the predicate from collection of rules.\n *\n * @param {RuleModel} rule - 'rule' to be passed to get predicate.\n * @returns {Predicate} - Predicate from collection of rules\n */\n QueryBuilder.prototype.getPredicate = function (rule) {\n var ruleColl = rule.rules;\n var pred;\n var pred2;\n var ruleValue;\n var ignoreCase = false;\n var column;\n var ignoreOper = ['notcontains', 'notstartswith', 'notendswith'];\n if (!ruleColl) {\n return pred;\n }\n for (var i = 0, len = ruleColl.length; i < len; i++) {\n var keys = Object.keys(ruleColl[i]);\n ignoreCase = false;\n if (keys.indexOf('rules') > -1 && ruleColl[i].rules) {\n pred2 = this.getPredicate(ruleColl[i]);\n if (pred2) {\n if (pred) {\n if (rule.condition === 'and') {\n pred = pred.and(pred2);\n }\n else {\n pred = pred.or(pred2);\n }\n }\n else {\n pred = pred2;\n }\n }\n }\n else if (!isNullOrUndefined(ruleColl[i].operator) && !isNullOrUndefined(ruleColl[i].operator.length)) {\n var oper = ruleColl[i].operator.toLowerCase();\n var isDateFilter = false;\n var dateOperColl = ['equal', 'notequal', 'greaterthan', 'greaterthanorequal', 'lessthan', 'lessthanorequal'];\n if (ruleColl[i].type === 'string') {\n ignoreCase = this.matchCase ? false : true;\n }\n if (ruleColl[i].type === 'date' && dateOperColl.indexOf(oper) > -1) {\n ignoreCase = true;\n }\n column = this.getColumn(ruleColl[i].field);\n if (oper.indexOf('null') > -1 || oper.indexOf('empty') > -1) {\n ruleColl[i].value = null;\n }\n else if (ruleColl[i].type === 'date' && !(ruleColl[i].value instanceof Array)) {\n var format = this.getFormat(column.format);\n if (!isNullOrUndefined(ruleColl[i].value)) {\n ruleValue = this.getDate(ruleColl[i].value, format);\n if (dateOperColl.indexOf(oper) > -1 && !this.isTime(ruleColl[i].value)) {\n isDateFilter = true;\n }\n }\n else {\n ruleValue = null;\n }\n }\n else {\n ruleValue = ruleColl[i].value;\n }\n if (i === 0) {\n if (isDateFilter || (oper.indexOf('in') > -1 || oper.indexOf('between') > -1 || oper.indexOf('null') > -1 ||\n oper.indexOf('empty') > -1) && oper.indexOf('contains') < 0) {\n pred = isDateFilter ? this.datePredicate(ruleColl[i], ruleValue) :\n this.arrayPredicate(ruleColl[i]);\n }\n else {\n var value = ruleValue;\n if (value !== '' && ignoreOper.indexOf(oper) < 0) {\n pred = new Predicate(ruleColl[i].field, ruleColl[i].operator, ruleValue, ignoreCase);\n }\n }\n }\n else {\n if (ignoreOper.indexOf(oper) > -1) {\n continue;\n }\n if (isDateFilter || (oper.indexOf('in') > -1 || oper.indexOf('between') > -1 ||\n oper.indexOf('null') > -1 || oper.indexOf('empty') > -1) && oper.indexOf('contains') < 0) {\n pred = isDateFilter ? this.datePredicate(ruleColl[i], ruleValue, pred, rule.condition) :\n this.arrayPredicate(ruleColl[i], pred, rule.condition);\n }\n else {\n if (rule.condition === 'and') {\n var value = ruleValue;\n if (pred && value !== '') {\n pred\n = pred.and(ruleColl[i].field, ruleColl[i].operator, ruleValue, ignoreCase);\n }\n else if (value !== '') {\n pred = new Predicate(ruleColl[i].field, ruleColl[i].operator, ruleValue, ignoreCase);\n }\n }\n else {\n var value = ruleValue;\n if (pred && value !== '') {\n pred = pred.or(ruleColl[i].field, ruleColl[i].operator, ruleValue, ignoreCase);\n }\n else if (value !== '') {\n pred = new Predicate(ruleColl[i].field, ruleColl[i].operator, ruleValue, ignoreCase);\n }\n }\n }\n }\n }\n }\n if (this.dataSource instanceof DataManager) {\n if (!isNullOrUndefined(pred) && (pred.operator === 'isnull' || pred.operator === 'isnotnull')) {\n pred.operator = pred.operator === 'isnull' ? 'equal' : 'notequal';\n }\n }\n return pred;\n };\n QueryBuilder.prototype.getLocale = function () {\n var gregorianFormat = '.dates.calendars.gregorian.days.format.short';\n var localeString = this.locale;\n var mainVal = 'main.';\n var cultureObj = getValue(mainVal + '' + this.locale + gregorianFormat, cldrData);\n if (!cultureObj) {\n localeString = 'en';\n }\n return localeString;\n };\n QueryBuilder.prototype.getColumn = function (field, col) {\n var columns = this.columns;\n var column;\n columns = col ? col : columns;\n for (var i = 0, iLen = columns.length; i < iLen; i++) {\n if (columns[i].field === field) {\n column = columns[i];\n break;\n }\n else if (columns[i].columns) {\n column = this.getColumn(field, columns[i].columns);\n if (column) {\n break;\n }\n }\n else if (field && field.indexOf(this.separator) > -1) {\n if (this.separator !== '' && columns[i].field === field.split(this.separator)[0]) {\n column = columns[i];\n break;\n }\n }\n }\n return column;\n };\n /* eslint-disable */\n /**\n * Return the operator bound to the column.\n *\n * @returns {[key: string]: Object}[] - Operator bound to the column\n */\n /* eslint-enable */\n QueryBuilder.prototype.getOperators = function (field) {\n var column = this.getColumn(field);\n return column.operators;\n };\n QueryBuilder.prototype.setTime = function (date, isStart) {\n if (isStart) {\n date.setHours(0, 0, 0);\n }\n else {\n date.setHours(23, 59, 59);\n }\n return date;\n };\n QueryBuilder.prototype.datePredicate = function (ruleColl, value, predicate, condition) {\n var pred;\n var startDate = this.setTime(new Date(value.getTime()), true);\n var endDate = this.setTime(value);\n switch (ruleColl.operator) {\n case 'equal':\n pred = new Predicate(ruleColl.field, 'greaterthanorequal', startDate);\n pred = pred.and(ruleColl.field, 'lessthanorequal', endDate);\n break;\n case 'notequal':\n pred = new Predicate(ruleColl.field, 'lessthan', startDate);\n pred = pred.or(ruleColl.field, 'greaterthan', endDate);\n break;\n case 'greaterthan':\n pred = new Predicate(ruleColl.field, 'greaterthan', endDate);\n break;\n case 'greaterthanorequal':\n pred = new Predicate(ruleColl.field, 'greaterthanorequal', startDate);\n break;\n case 'lessthan':\n pred = new Predicate(ruleColl.field, 'lessthan', startDate);\n break;\n case 'lessthanorequal':\n pred = new Predicate(ruleColl.field, 'lessthanorequal', endDate);\n break;\n }\n if (pred) {\n if (predicate) {\n if (condition === 'and') {\n predicate = predicate.and(pred);\n }\n else if (condition === 'or') {\n predicate = predicate.or(pred);\n }\n }\n else {\n predicate = pred;\n }\n }\n return predicate;\n };\n QueryBuilder.prototype.arrayPredicate = function (ruleColl, predicate, condition) {\n var value = ruleColl.value;\n var operator = ruleColl.operator.toString();\n var nullValue = ruleColl.value;\n var pred;\n var column = this.getColumn(ruleColl.field);\n var format = this.getFormat(column.format);\n if (operator.indexOf('null') > -1 || operator.indexOf('empty') > -1) {\n switch (operator) {\n case 'isnull':\n pred = new Predicate(ruleColl.field, 'isnull', nullValue);\n break;\n case 'isnotnull':\n pred = new Predicate(ruleColl.field, 'isnotnull', nullValue);\n break;\n case 'isempty':\n pred = new Predicate(ruleColl.field, 'equal', '');\n break;\n case 'isnotempty':\n pred = new Predicate(ruleColl.field, 'notequal', '');\n break;\n }\n }\n if (!(operator.indexOf('null') > -1 || operator.indexOf('empty') > -1)) {\n for (var j = 0, jLen = value.length; j < jLen; j++) {\n if (value[j] !== '' || ((operator === 'in' || operator === 'notin') && column.type === 'string')) {\n if (j === 0) {\n var gte = 'greaterthanorequal';\n switch (operator) {\n case 'between':\n if (column.type !== 'date') {\n pred = new Predicate(ruleColl.field, gte, value[j]);\n }\n else {\n pred = new Predicate(ruleColl.field, gte, value[j] ?\n (this.isTime(value[j]) ? this.getDate(value[j], format) :\n this.setTime(this.getDate(value[j], format), true)) : null);\n }\n break;\n case 'notbetween':\n if (column.type === 'date') {\n pred = new Predicate(ruleColl.field, 'lessthan', value[j] ?\n (this.isTime(value[j]) ? this.getDate(value[j], format) :\n this.setTime(this.getDate(value[j], format), true)) : null);\n }\n else {\n pred = new Predicate(ruleColl.field, 'lessthan', value[j]);\n }\n break;\n case 'in':\n pred = new Predicate(ruleColl.field, 'equal', value[j]);\n break;\n case 'notin':\n pred = new Predicate(ruleColl.field, 'notequal', value[j]);\n break;\n }\n }\n else {\n var gt = 'greaterthan';\n switch (ruleColl.operator) {\n case 'between':\n if (column.type === 'date') {\n pred = pred.and(ruleColl.field, 'lessthanorequal', value[j] ?\n (this.isTime(value[j]) ? this.getDate(value[j], format) :\n this.setTime(this.getDate(value[j], format))) : value[j]);\n }\n else {\n pred = pred.and(ruleColl.field, 'lessthanorequal', value[j]);\n }\n break;\n case 'notbetween':\n if (column.type === 'date') {\n pred = pred.or(ruleColl.field, gt, value[j] ?\n (this.isTime(value[j]) ? this.getDate(value[j], format) :\n this.setTime(this.getDate(value[j], format))) : value[j]);\n }\n else {\n pred = pred.or(ruleColl.field, 'greaterthan', value[j]);\n }\n break;\n case 'in':\n pred = pred.or(ruleColl.field, 'equal', value[j]);\n break;\n case 'notin':\n pred = pred.and(ruleColl.field, 'notequal', value[j]);\n break;\n }\n }\n }\n }\n }\n if (pred) {\n if (predicate) {\n if (condition === 'and') {\n predicate = predicate.and(pred);\n }\n else if (condition === 'or') {\n predicate = predicate.or(pred);\n }\n }\n else {\n predicate = pred;\n }\n }\n return predicate;\n };\n QueryBuilder.prototype.getDate = function (value, format) {\n var currDate = this.intl.parseDate(value, format);\n if (value.indexOf(':') > -1 && (value.indexOf('/') < 0 && value.indexOf(',') < 0\n && value.indexOf('-') < 0)) {\n currDate = new Date();\n // eslint-disable-next-line\n currDate.setHours(parseInt(value.split(':')[0]));\n // eslint-disable-next-line\n currDate.setMinutes(parseInt(value.split(':')[1]));\n if (value.split(':')[2]) {\n // eslint-disable-next-line\n currDate.setSeconds(parseInt(value.split(':')[2]));\n }\n }\n return currDate;\n };\n QueryBuilder.prototype.isTime = function (value) {\n if (value && value.indexOf(':') > -1) {\n return true;\n }\n return false;\n };\n QueryBuilder.prototype.importRules = function (rule, parentElem, isReset, not, isRoot) {\n if (!isReset) {\n parentElem = this.renderGroup(rule, rule.condition, parentElem, not);\n }\n else {\n if (rule.rules.length > 1 && !this.headerTemplate) {\n // enable/disable conditions when rule group is added\n var orElem = parentElem.querySelector('.e-btngroup-or');\n var andElem = parentElem.querySelector('.e-btngroup-and');\n orElem.disabled = false;\n andElem.disabled = false;\n if (rule.condition === 'or') {\n orElem.checked = true;\n }\n else {\n andElem.checked = true;\n }\n }\n else {\n // enable/disable conditions when rule condition is added\n this.disableRuleCondition(parentElem);\n }\n if (this.headerTemplate && isRoot) {\n parentElem = this.renderGroup(rule, rule.condition, this.element, rule.not, isRoot);\n }\n if (this.enableNotCondition && !this.headerTemplate) {\n var tglBtnElem = parentElem.querySelector('.e-qb-toggle');\n if (rule.not) {\n addClass([tglBtnElem], 'e-active-toggle');\n }\n else {\n removeClass([tglBtnElem], 'e-active-toggle');\n }\n }\n }\n if (rule.rules.length === 0 && this.headerTemplate) {\n rule.rules[0] = { 'label': '', 'field': '', 'operator': '', 'type': '', 'value': '' };\n }\n var ruleColl = rule.rules;\n if (!isNullOrUndefined(ruleColl)) {\n for (var i = 0, len = ruleColl.length; i < len; i++) {\n var keys = Object.keys(ruleColl[i]);\n if (!isNullOrUndefined(ruleColl[i].rules) && keys.indexOf('rules') > -1 && (ruleColl[i].rules.length !== 0)) {\n parentElem = this.renderGroup(ruleColl[i], ruleColl[i].condition, parentElem, ruleColl[i].not);\n parentElem = this.importRules(ruleColl[i], parentElem, true);\n }\n else {\n this.renderRule(ruleColl[i], parentElem);\n }\n }\n }\n parentElem = closest(parentElem, '.e-rule-list');\n if (parentElem) {\n parentElem = closest(parentElem, '.e-group-container');\n }\n return parentElem;\n };\n QueryBuilder.prototype.renderGroup = function (rule, condition, parentElem, not, isRoot) {\n this.addGroupElement(true, parentElem, condition, false, not, isRoot, rule); //Child group\n var element = parentElem.querySelectorAll('.e-group-container');\n return element[element.length - 1];\n };\n QueryBuilder.prototype.renderRule = function (rule, parentElem) {\n if (parentElem.className.indexOf('e-group-container') > -1) {\n this.addRuleElement(parentElem, rule); //Create rule\n }\n else {\n this.addRuleElement(parentElem.querySelector('.e-group-container'), rule); //Create group\n }\n };\n QueryBuilder.prototype.enableReadonly = function () {\n var target = this.element;\n var elem = target.querySelectorAll('.e-dropdownlist, .e-numerictextbox, .e-textbox, .e-datepicker, .e-multiselect .e-lib, .e-radio');\n for (var i = 0; i < elem.length; i++) {\n if (elem[i].classList.contains('e-dropdownlist')) {\n var dropDownObj = getInstance(elem[i], DropDownList);\n dropDownObj.readonly = this.isReadonly;\n }\n else if (elem[i].classList.contains('e-numerictextbox')) {\n var numericTextBoxObj = getInstance(elem[i], NumericTextBox);\n numericTextBoxObj.readonly = this.isReadonly;\n }\n else if (elem[i].classList.contains('e-textbox')) {\n var textBoxObj = getInstance(elem[i], TextBox);\n textBoxObj.readonly = this.isReadonly;\n }\n else if (elem[i].classList.contains('e-datepicker')) {\n var datePickerObj = getInstance(elem[i], DatePicker);\n datePickerObj.readonly = this.isReadonly;\n }\n else if (elem[i].classList.contains('e-multiselect')) {\n var multiSelectObj = getInstance(elem[i], MultiSelect);\n multiSelectObj.readonly = this.isReadonly;\n }\n else if (elem[i].classList.contains('e-radio')) {\n var radioButtonObj = getInstance(elem[i], RadioButton);\n if (!radioButtonObj.checked) {\n if (this.isReadonly) {\n elem[i].parentElement.style.display = 'none';\n }\n else {\n elem[i].parentElement.style.display = 'inherit';\n }\n }\n }\n }\n var deleteGroupElems = this.element.querySelectorAll('.e-deletegroup');\n var addRuleGroupElems = this.element.querySelectorAll('.e-addrulegroup');\n var removeRuleElems = this.element.querySelectorAll('.e-removerule');\n if (!this.isReadonly && this.ruleElem.classList.contains('e-readonly')) {\n this.ruleElem.classList.remove('e-readonly');\n }\n var elems = [deleteGroupElems, addRuleGroupElems, removeRuleElems];\n for (var i = 0; i < elems.length; i++) {\n elems[i].forEach(function (elem) {\n if (elem.classList.contains('e-readonly')) {\n elem.classList.remove('e-readonly');\n }\n else {\n elem.classList.add('e-readonly');\n }\n });\n }\n this.enableBtnGroup();\n };\n QueryBuilder.prototype.enableBtnGroup = function () {\n var _this = this;\n var elems = this.element.querySelectorAll('.e-btngroup-and-lbl, .e-btngroup-or-lbl, .e-qb-toggle');\n var not = false;\n elems.forEach(function (elem) {\n if (elem.classList.contains('e-qb-toggle') && !elem.classList.contains('e-active-toggle')\n && !elem.classList.contains('e-readonly')) {\n elem.classList.add('e-readonly');\n not = false;\n }\n else if (elem.classList.contains('e-qb-toggle') && elem.classList.contains('e-not-readonly')) {\n elem.classList.remove('e-not-readonly');\n }\n else if (elem.classList.contains('e-qb-toggle') && elem.classList.contains('e-readonly')) {\n elem.classList.remove('e-readonly');\n }\n else if (elem.classList.contains('e-active-toggle')) {\n elem.classList.add('e-not-readonly');\n not = true;\n }\n else if (elem.previousElementSibling.checked || elem.classList.contains('e-readonly')) {\n elem.classList.remove('e-readonly');\n if (not) {\n if (elem.textContent === 'AND') {\n elem.classList.add('e-readonly-and');\n }\n else {\n elem.classList.add('e-readonly-or');\n }\n }\n else {\n if (elem.textContent === 'AND' && _this.isReadonly) {\n elem.classList.remove('e-not');\n elem.classList.add('e-readonly-and');\n }\n else {\n if (_this.enableNotCondition) {\n elem.classList.add('e-not');\n }\n elem.classList.remove('e-readonly-and');\n }\n if (elem.textContent === 'OR' && _this.isReadonly) {\n elem.classList.add('e-readonly-or-not');\n }\n else {\n elem.classList.remove('e-readonly-or-not');\n }\n }\n }\n else if (elem.classList.contains('e-btn-disable')) {\n // do nothing\n }\n else {\n elem.classList.add('e-readonly');\n }\n });\n };\n QueryBuilder.prototype.isDateFunction = function (value) {\n var dateFunc = ['date', 'time', 'day', 'week', 'month', 'year', 'hour', 'minute', 'second', 'now', 'quarter', 'period', 'extract'];\n for (var i = 0, len = dateFunc.length; i < len; i++) {\n if (value.toLowerCase().indexOf(dateFunc[i]) > -1) {\n return true;\n }\n }\n return false;\n };\n QueryBuilder.prototype.getSqlString = function (rules, enableEscape, queryStr, sqlLocale) {\n var isRoot = false;\n if (!queryStr && queryStr !== '') {\n queryStr = '';\n isRoot = true;\n }\n else {\n queryStr += '(';\n }\n var condition = rules.condition;\n if (rules.not) {\n var rulesNotCondition = void 0;\n if (isRoot) {\n rulesNotCondition = sqlLocale ? this.l10n.getConstant('NOT').toUpperCase() + ' (' : 'NOT (';\n queryStr += rulesNotCondition;\n }\n else {\n rulesNotCondition = sqlLocale ? ' ' + this.l10n.getConstant('NOT').toUpperCase() + ' (' : ' NOT (';\n queryStr += rulesNotCondition;\n }\n }\n if (rules.rules) {\n for (var j = 0, jLen = rules.rules.length; j < jLen; j++) {\n if (rules.rules[j].rules) {\n queryStr = this.getSqlString(rules.rules[j], enableEscape, queryStr, sqlLocale);\n }\n else {\n var rule = rules.rules[j];\n var valueStr = '';\n var ruleOpertor = sqlLocale ? this.sqlOperators[rule.operator] : this.operators[rule.operator];\n if (rule.value instanceof Array) {\n if (rule.operator.toString().indexOf('between') > -1) {\n var ruleCondition = sqlLocale ? ' ' + this.l10n.getConstant('AND').toUpperCase() + ' ' : ' ' + 'AND' + ' ';\n if (rule.type === 'date' && !this.isDateFunction(rule.value[0])) {\n valueStr += '\"' + rule.value[0] + '\"' + ruleCondition + '\"' + rule.value[1] + '\"';\n }\n else {\n valueStr += rule.value[0] + ruleCondition + rule.value[1];\n }\n }\n else {\n if (typeof rule.value[0] === 'string' && rule.value !== null) {\n valueStr += '(\"' + rule.value[0] + '\"';\n for (var k = 1, kLen = rule.value.length; k < kLen; k++) {\n valueStr += ',\"' + rule.value[k] + '\"';\n }\n valueStr += ')';\n }\n else {\n valueStr += '(' + rule.value + ')';\n }\n }\n }\n else {\n if (rule.operator.toString().indexOf('startswith') > -1) {\n valueStr += rule.value ? '(\"' + rule.value + '%\")' : '(' + rule.value + ')';\n }\n else if (rule.operator.toString().indexOf('endswith') > -1) {\n valueStr += rule.value ? '(\"%' + rule.value + '\")' : '(' + rule.value + ')';\n }\n else if (rule.operator.toString().indexOf('contains') > -1) {\n valueStr += rule.value ? '(\"%' + rule.value + '%\")' : '(' + rule.value + ')';\n }\n else {\n if (rule.type === 'number' || typeof rule.value === 'boolean' || rule.value === null) {\n valueStr += rule.value;\n }\n else {\n valueStr += '\"' + rule.value + '\"';\n }\n }\n }\n if (rule.operator.toString().indexOf('null') > -1 || (rule.operator.toString().indexOf('empty') > -1)) {\n if (enableEscape) {\n rule.field = '`' + rule.field + '`';\n }\n else {\n if (rule.field.indexOf(' ') > -1) {\n rule.field = '\"' + rule.field + '\"';\n }\n }\n queryStr += rule.field + ' ' + ruleOpertor;\n }\n else {\n if (enableEscape) {\n rule.field = '`' + rule.field + '`';\n }\n else {\n if (rule.field.indexOf(' ') > -1) {\n rule.field = '\"' + rule.field + '\"';\n }\n }\n queryStr += rule.field + ' ' + ruleOpertor + ' ' + valueStr;\n }\n if (rule.condition && rule.condition !== '') {\n condition = rule.condition;\n }\n }\n if (j !== jLen - 1) {\n if (condition === '') {\n condition = rules.rules[j].condition;\n }\n condition = sqlLocale ? this.l10n.getConstant(condition.toUpperCase()).toUpperCase() : condition.toUpperCase();\n queryStr += ' ' + condition + ' ';\n }\n }\n }\n if (!isRoot) {\n queryStr += ')';\n }\n if (rules.not) {\n queryStr += ')';\n }\n return queryStr;\n };\n /**\n * Sets the rules from the sql query.\n *\n * @param {string} sqlString - 'sql String' to be passed to set the rule.\n * @param {boolean} sqlLocale - Set `true` if Localization for Sql query.\n * @returns {void}\n */\n QueryBuilder.prototype.setRulesFromSql = function (sqlString, sqlLocale) {\n sqlString = sqlString.replace(/`/g, '');\n var ruleModel = this.getRulesFromSql(sqlString, sqlLocale);\n this.setRules({ condition: ruleModel.condition, not: ruleModel.not, rules: ruleModel.rules });\n };\n /**\n * Get the rules from SQL query.\n *\n * @param {string} sqlString - 'sql String' to be passed to get the rule.\n * @param {boolean} sqlLocale - Set `true` if Localization for Sql query.\n * @returns {object} - Rules from SQL query\n */\n QueryBuilder.prototype.getRulesFromSql = function (sqlString, sqlLocale) {\n this.parser = [];\n this.sqlParser(sqlString, sqlLocale);\n this.rule = { condition: 'and', not: false, rules: [] };\n var rule = this.processParser(this.parser, this.rule, [0], sqlLocale);\n if (this.enableNotCondition) {\n return { condition: rule.condition, not: rule.not, rules: rule.rules };\n }\n else {\n return { condition: rule.condition, rules: rule.rules };\n }\n };\n /**\n * Gets the sql query from rules.\n *\n * @param {RuleModel} rule - 'rule' to be passed to get the sql.\n * @param {boolean} allowEscape - Set `true` if it exclude the escape character.\n * @param {boolean} sqlLocale - Set `true` if Localization for Sql query.\n * @returns {object} - Sql query from rules.\n */\n QueryBuilder.prototype.getSqlFromRules = function (rule, allowEscape, sqlLocale) {\n if (!rule) {\n rule = this.getValidRules();\n }\n rule = this.getRuleCollection(rule, false);\n return this.getSqlString(this.getValidRules(rule), allowEscape, null, sqlLocale).replace(/\"/g, '\\'');\n };\n QueryBuilder.prototype.sqlParser = function (sqlString, sqlLocale) {\n var st = 0;\n var str;\n do {\n str = sqlString.slice(st);\n st += this.parseSqlStrings(str, sqlLocale);\n } while (str !== '');\n return this.parser;\n };\n QueryBuilder.prototype.parseSqlStrings = function (sqlString, sqlLocale) {\n var operators = ['=', '!=', '<=', '>=', '<', '>'];\n var conditions;\n if (sqlLocale) {\n conditions = [this.l10n.getConstant('AND').toUpperCase(), this.l10n.getConstant('OR').toUpperCase(), this.l10n.getConstant('NOT').toUpperCase()];\n }\n else {\n conditions = ['AND', 'OR', 'NOT'];\n }\n var subOp;\n if (sqlLocale) {\n subOp = [this.l10n.getConstant('In').toUpperCase(), this.l10n.getConstant('NotIn').toUpperCase(),\n this.l10n.getConstant('Like').toUpperCase(), this.l10n.getConstant('NotLike').toUpperCase(),\n this.l10n.getConstant('Between').toUpperCase(), this.l10n.getConstant('NotBetween').toUpperCase(),\n this.l10n.getConstant('IsNull').toUpperCase(), this.l10n.getConstant('IsNotNull').toUpperCase(),\n this.l10n.getConstant('IsEmpty').toUpperCase(), this.l10n.getConstant('IsNotEmpty').toUpperCase()];\n }\n else {\n subOp = ['IN', 'NOT IN', 'LIKE', 'NOT LIKE', 'BETWEEN', 'NOT BETWEEN', 'IS NULL', 'IS NOT NULL', 'IS EMPTY', 'IS NOT EMPTY'];\n }\n var regexStr;\n var regex;\n var matchValue;\n for (var i = 0, iLen = operators.length; i < iLen; i++) {\n regexStr = /^\\w+$/.test(operators[i]) ? '\\\\b' : '';\n // eslint-disable-next-line\n regex = new RegExp('^(' + operators[i] + ')' + regexStr, 'ig');\n if (regex.exec(sqlString)) {\n this.parser.push(['Operators', operators[i].toLowerCase()]);\n return operators[i].length;\n }\n }\n var lastPasrser = this.parser[this.parser.length - 1];\n if (!lastPasrser || (lastPasrser && lastPasrser[0] !== 'Literal')) {\n for (var i = 0, iLen = conditions.length; i < iLen; i++) {\n regexStr = /^\\w+$/.test(conditions[i]) ? '\\\\b' : '';\n // eslint-disable-next-line\n regex = new RegExp('^(' + conditions[i] + ')' + regexStr, 'ig');\n if (regex.exec(sqlString)) {\n this.parser.push(['Conditions', conditions[i].toLowerCase()]);\n return conditions[i].length;\n }\n }\n }\n for (var i = 0, iLen = subOp.length; i < iLen; i++) {\n regexStr = /^\\w+$/.test(subOp[i]) ? '\\\\b' : '';\n // eslint-disable-next-line\n regex = new RegExp('^(' + subOp[i] + ')' + regexStr, 'ig');\n if (regex.exec(sqlString)) {\n this.parser.push(['SubOperators', subOp[i].toLowerCase()]);\n return subOp[i].length;\n }\n }\n //Left Parenthesis\n if (/^\\(/.exec(sqlString)) {\n this.parser.push(['Left', '(']);\n return 1;\n }\n //Right Parenthesis\n if (/^\\)/.exec(sqlString)) {\n this.parser.push(['Right', ')']);\n return 1;\n }\n //Boolean\n if (/^(true|false)/.exec(sqlString)) {\n matchValue = /^(true|false)/.exec(sqlString)[0];\n this.parser.push(['String', matchValue]);\n return matchValue.length;\n }\n //Null\n if (/^null/.exec(sqlString)) {\n matchValue = /^null/.exec(sqlString)[0];\n this.parser.push(['String', null]);\n return matchValue.length;\n }\n // eslint-disable-next-line\n if (/^`?([a-z_][a-z0-9_.\\[\\]\\(\\)]{0,}(\\:(number|float|string|date|boolean))?)`?/i.exec(sqlString)) {\n // eslint-disable-next-line\n matchValue = /^`?([a-z_][a-z0-9_.\\[\\]\\(\\)]{0,}(\\:(number|float|string|date|boolean))?)`?/i.exec(sqlString)[1];\n this.parser.push(['Literal', matchValue]);\n return matchValue.length;\n }\n // eslint-disable-next-line\n if (this.checkLiteral() && /^'?([a-z_][a-z0-9 _.\\[\\]\\(\\)]{0,}(\\:(number|float|string|date|boolean))?)'?/i.exec(sqlString)) {\n // eslint-disable-next-line\n matchValue = /^'?([a-z_][a-z0-9 _.\\[\\]\\(\\)]{0,}(\\:(number|float|string|date|boolean))?)'?/i.exec(sqlString)[1];\n this.parser.push(['Literal', matchValue]);\n return matchValue.length + 2;\n }\n if (this.checkNumberLiteral(sqlString, sqlLocale)) {\n // eslint-disable-next-line\n matchValue = /^[0-9]+(\\.[0-9]+)?/.exec(sqlString)[0];\n this.parser.push(['Literal', matchValue]);\n return matchValue.length;\n }\n //String\n // eslint-disable-next-line\n if (/^'((?:[^\\\\']+?|\\\\.|'')*)'(?!')/.exec(sqlString)) {\n // eslint-disable-next-line\n matchValue = /^'((?:[^\\\\']+?|\\\\.|'')*)'(?!')/.exec(sqlString)[0];\n if (matchValue[matchValue.length - 2] === '(') {\n var isClosed = false;\n for (var j = matchValue.length; j < sqlString.length; j++) {\n matchValue += sqlString[j];\n if (sqlString[j] === ')') {\n isClosed = true;\n }\n if (isClosed && sqlString[j] === '\\'') {\n break;\n }\n }\n }\n this.parser.push(['String', matchValue]);\n return matchValue.length;\n }\n // Double String\n // eslint-disable-next-line\n if (/^\"([^\\\\\"]*(?:\\\\.[^\\\\\"]*)*)\"/.exec(sqlString)) {\n // eslint-disable-next-line\n matchValue = /^\"([^\\\\\"]*(?:\\\\.[^\\\\\"]*)*)\"/.exec(sqlString)[0];\n this.parser.push(['DoubleString', matchValue]);\n return matchValue.length;\n }\n //Number\n // eslint-disable-next-line\n if (/^[0-9]+(\\.[0-9]+)?/.exec(sqlString)) {\n // eslint-disable-next-line\n matchValue = /^[0-9]+(\\.[0-9]+)?/.exec(sqlString)[0];\n this.parser.push(['Number', matchValue]);\n return matchValue.length;\n }\n //Negative Number\n // eslint-disable-next-line\n if (/^-?[0-9]+(\\.[0-9]+)?/.exec(sqlString)) {\n // eslint-disable-next-line\n matchValue = /^-?[0-9]+(\\.[0-9]+)?/.exec(sqlString)[0];\n this.parser.push(['Number', matchValue]);\n return matchValue.length;\n }\n return 1;\n };\n QueryBuilder.prototype.checkLiteral = function () {\n var lastParser = this.parser[this.parser.length - 1];\n if (!lastParser) {\n return true;\n }\n else {\n var secParser = this.parser[this.parser.length - 2];\n if (lastParser[0] === 'Left' && (secParser && secParser[0] === 'Conditions')) {\n return true;\n }\n }\n return false;\n };\n QueryBuilder.prototype.checkNumberLiteral = function (sqlString, sqlLocale) {\n var lastParser = this.parser[this.parser.length - 1];\n if (!lastParser) {\n return true;\n }\n else {\n // eslint-disable-next-line\n if (/^[0-9]+(\\.[0-9]+)?/.exec(sqlString)) {\n var secParser = this.parser[this.parser.length - 2];\n var betweenParser = this.parser[this.parser.length - 3];\n if (lastParser[0] === 'Left' && (secParser && secParser[0] === 'Conditions')) {\n return true;\n }\n var betweenOperator = sqlLocale ? this.l10n.getConstant('Between').toLowerCase() : 'between';\n if (lastParser[0] === 'Conditions' && (betweenParser && betweenParser[1].indexOf(betweenOperator) < 0)) {\n return true;\n }\n }\n }\n return false;\n };\n QueryBuilder.prototype.getOperator = function (value, operator, sqlLocale) {\n var operators = {\n '=': 'equal', '!=': 'notequal', '<': 'lessthan', '>': 'greaterthan', '<=': 'lessthanorequal',\n '>=': 'greaterthanorequal', 'in': 'in', 'not in': 'notin', 'between': 'between', 'not between': 'notbetween',\n 'is empty': 'isempty', 'is null': 'isnull', 'is not null': 'isnotnull', 'is not empty': 'isnotempty'\n };\n if (sqlLocale) {\n var localeOperator = Object.keys(this.sqlOperators);\n for (var i = 0; i < localeOperator.length; i++) {\n if (this.sqlOperators[localeOperator[i]] === operator.toUpperCase()) {\n if (value && value.indexOf('%') === 0 && value[value.length - 1] === '%') {\n return (localeOperator[i] === 'notcontains') ? 'notcontains' : 'contains';\n }\n else if (value && value.indexOf('%') !== 0 && value.indexOf('%') === value.length - 1) {\n return (localeOperator[i] === 'notstartswith') ? 'notstartswith' : 'startswith';\n }\n else if (value && value.indexOf('%') === 0 && value.indexOf('%') !== value.length - 1) {\n return (localeOperator[i] === 'notendswith') ? 'notendswith' : 'endswith';\n }\n return localeOperator[i];\n }\n }\n return null;\n }\n if (value) {\n if (value.indexOf('%') === 0 && value[value.length - 1] === '%') {\n return (operator === 'not like') ? 'notcontains' : 'contains';\n }\n else if (value.indexOf('%') !== 0 && value.indexOf('%') === value.length - 1) {\n return (operator === 'not like') ? 'notstartswith' : 'startswith';\n }\n else if (value.indexOf('%') === 0 && value.indexOf('%') !== value.length - 1) {\n return (operator === 'not like') ? 'notendswith' : 'endswith';\n }\n }\n else {\n if (operator === 'not like') {\n return 'notequal';\n }\n else if (operator === 'like') {\n return 'equal';\n }\n }\n return operators[\"\" + operator];\n };\n QueryBuilder.prototype.getTypeFromColumn = function (rules) {\n var columnData = this.getColumn(rules.field);\n if (!isNullOrUndefined(columnData)) {\n return columnData.type;\n }\n return null;\n };\n QueryBuilder.prototype.getLabelFromColumn = function (field) {\n var label = '';\n var l = 0;\n if (this.separator !== '') {\n var fieldColl = field.split(this.separator);\n for (var i = 0; i < fieldColl.length; i++) {\n label += this.getLabelFromField(fieldColl, i + 1);\n l++;\n if (l < fieldColl.length) {\n label += this.separator;\n }\n }\n return label;\n }\n else {\n var labelItem = this.getColumn(field).label;\n return labelItem;\n }\n };\n QueryBuilder.prototype.getLabelFromField = function (field, startIdx) {\n var fieldName = '';\n var j = 0;\n for (var k = 0; k < startIdx; k++) {\n fieldName += field[k];\n j++;\n if (j < startIdx) {\n fieldName += this.separator;\n }\n }\n return this.getColumn(fieldName).label;\n };\n QueryBuilder.prototype.processParser = function (parser, rules, levelColl, sqlLocale) {\n var j;\n var jLen;\n var rule;\n var subRules;\n var numVal = [];\n var strVal = [];\n var k;\n var kLen;\n var l;\n var lLen;\n var grpCount;\n var operator;\n var isLeftOpened = false;\n for (var i = 0, iLen = parser.length; i < iLen; i++) {\n if (parser[i][0] === 'Literal') {\n rule = { label: parser[i][1], field: parser[i][1] };\n if (parser[i + 1][0] === 'SubOperators') {\n if (parser[i + 1][1].indexOf('null') > -1 || parser[i + 1][1].indexOf('empty') > -1) {\n rule.operator = this.getOperator(' ', parser[i + 1][1], sqlLocale);\n rule.value = null;\n rule.type = this.getTypeFromColumn(rule);\n }\n else {\n var oper = parser[i + 3][1] ? parser[i + 3][1].replace(/'/g, '') : parser[i + 3][1];\n rule.operator = this.getOperator(oper, parser[i + 1][1], sqlLocale);\n }\n operator = parser[i + 1][1];\n i++;\n j = i + 1;\n jLen = iLen;\n if (sqlLocale && rule.operator === 'contains' || rule.operator === 'startswith' || rule.operator === 'endswith') {\n operator = 'like';\n }\n else if (sqlLocale && rule.operator === 'notcontains' || rule.operator === 'notstartswith' || rule.operator === 'notendswith') {\n operator = 'not like';\n }\n else if (sqlLocale) {\n operator = rule.operator;\n }\n for (j = i + 1; j < jLen; j++) {\n if (operator.indexOf('between') < 0 && parser[j][0] === 'Left') {\n isLeftOpened = true;\n }\n else if (parser[j][0] === 'Right' && isLeftOpened) {\n i = j;\n isLeftOpened = false;\n break;\n }\n else {\n if (operator.indexOf('null') > -1 || operator.indexOf('empty') > -1) {\n break;\n }\n if (operator.indexOf('like') > -1 && parser[j][0] === 'String') {\n var val = parser[j][1];\n if (parser[j][1] && parser[j][1][0] === '\\'') {\n val = parser[j][1].substring(1, parser[j][1].length - 1);\n }\n val = val ? val.replace(/%/g, '') : parser[j][1];\n rule.value = val;\n rule.type = 'string';\n }\n else if (operator.indexOf('between') > -1) {\n if (parser[j][0] === 'Literal' || parser[j][0] === 'Left') {\n break;\n }\n if (parser[j][0] === 'Number') {\n numVal.push(Number(parser[j][1]));\n }\n else if (parser[j][0] === 'String') {\n var val = parser[j][1];\n if (parser[j][1] && parser[j][1][0] === '\\'') {\n val = parser[j][1].substring(1, parser[j][1].length - 1);\n }\n strVal.push(val);\n }\n }\n else {\n if (parser[j][0] === 'Number') {\n numVal.push(Number(parser[j][1]));\n }\n else if (parser[j][0] === 'String') {\n var val = parser[j][1];\n if (parser[j][1] && parser[j][1][0] === '\\'') {\n val = parser[j][1].substring(1, parser[j][1].length - 1);\n }\n strVal.push(val);\n }\n }\n rule.type = this.getTypeFromColumn(rule);\n }\n }\n if (operator.indexOf('like') < 0) {\n if (parser[j - 1][0] === 'Number') {\n rule.value = numVal;\n rule.type = 'number';\n }\n else if (parser[j - 1][0] === 'String') {\n rule.value = strVal;\n rule.type = 'string';\n }\n else if (operator.indexOf('between') > -1 && parser[j - 1][0] === 'Conditions') {\n if (strVal.length !== 0) {\n rule.value = strVal;\n rule.type = 'string';\n }\n else {\n rule.value = numVal;\n rule.type = 'number';\n }\n }\n numVal = [];\n strVal = [];\n rule.type = this.getTypeFromColumn(rule);\n }\n }\n else if (parser[i + 1][0] === 'Operators') {\n rule.operator = this.getOperator(parser[i + 2][1], parser[i + 1][1], sqlLocale);\n if (parser[i + 2][0] === 'Number') {\n rule.type = 'number';\n rule.value = Number(parser[i + 2][1]);\n }\n else {\n rule.type = 'string';\n rule.value = parser[i + 2][1] ? parser[i + 2][1].replace(/'/g, '') : parser[i + 2][1];\n }\n rule.type = this.getTypeFromColumn(rule);\n }\n rules.rules.push(rule);\n }\n else if (parser[i][0] === 'Left') {\n if (!(parser[0][0] === 'Left') && (parser[i - 1][1] === 'not' || sqlLocale && this.l10n.getConstant('NOT').toLowerCase() === parser[i - 1][1])) {\n continue;\n }\n this.parser = parser.splice(i + 1, iLen - (i + 1));\n if (this.enableNotCondition) {\n subRules = { condition: 'and', rules: [], not: false };\n }\n else {\n subRules = { condition: 'and', rules: [] };\n }\n grpCount = 0;\n kLen = rules.rules.length;\n for (k = 0; k < kLen; k++) { //To get the group position\n if (rules.rules[k].rules) {\n grpCount++;\n }\n }\n levelColl.push(grpCount);\n rules.rules.push(subRules);\n subRules = this.processParser(this.parser, subRules, levelColl, sqlLocale);\n return rules;\n }\n else if (parser[i][0] === 'Conditions') {\n if (parser[i][1] === 'not' || (sqlLocale && this.l10n.getConstant('NOT').toLowerCase() === parser[i][1])) {\n rules.not = true;\n }\n else {\n rules.condition = parser[i][1];\n }\n }\n else if (parser[i][0] === 'Right') {\n this.parser = parser.splice(i + 1, iLen - (i + 1));\n levelColl.pop(); //To get the parent Group\n rules = this.rule;\n lLen = levelColl.length;\n for (l = 0; l < lLen; l++) {\n rules = this.findGroupByIdx(levelColl[l], rules, l === 0);\n }\n return this.processParser(this.parser, rules, levelColl, sqlLocale);\n }\n }\n return rules;\n };\n __decorate([\n Event()\n ], QueryBuilder.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], QueryBuilder.prototype, \"actionBegin\", void 0);\n __decorate([\n Event()\n ], QueryBuilder.prototype, \"beforeChange\", void 0);\n __decorate([\n Event()\n ], QueryBuilder.prototype, \"change\", void 0);\n __decorate([\n Event()\n ], QueryBuilder.prototype, \"dataBound\", void 0);\n __decorate([\n Event()\n ], QueryBuilder.prototype, \"ruleChange\", void 0);\n __decorate([\n Property({ ruleDelete: true, groupInsert: true, groupDelete: true })\n ], QueryBuilder.prototype, \"showButtons\", void 0);\n __decorate([\n Property(false)\n ], QueryBuilder.prototype, \"summaryView\", void 0);\n __decorate([\n Property(false)\n ], QueryBuilder.prototype, \"allowValidation\", void 0);\n __decorate([\n Property('Default')\n ], QueryBuilder.prototype, \"fieldMode\", void 0);\n __decorate([\n Property([])\n ], QueryBuilder.prototype, \"columns\", void 0);\n __decorate([\n Property(null)\n ], QueryBuilder.prototype, \"fieldModel\", void 0);\n __decorate([\n Property(null)\n ], QueryBuilder.prototype, \"operatorModel\", void 0);\n __decorate([\n Property(null)\n ], QueryBuilder.prototype, \"valueModel\", void 0);\n __decorate([\n Property()\n ], QueryBuilder.prototype, \"headerTemplate\", void 0);\n __decorate([\n Property('')\n ], QueryBuilder.prototype, \"cssClass\", void 0);\n __decorate([\n Property([])\n ], QueryBuilder.prototype, \"dataSource\", void 0);\n __decorate([\n Property('Horizontal')\n ], QueryBuilder.prototype, \"displayMode\", void 0);\n __decorate([\n Property(false)\n ], QueryBuilder.prototype, \"enablePersistence\", void 0);\n __decorate([\n Property('Default')\n ], QueryBuilder.prototype, \"sortDirection\", void 0);\n __decorate([\n Property(5)\n ], QueryBuilder.prototype, \"maxGroupCount\", void 0);\n __decorate([\n Property('auto')\n ], QueryBuilder.prototype, \"height\", void 0);\n __decorate([\n Property('auto')\n ], QueryBuilder.prototype, \"width\", void 0);\n __decorate([\n Property(false)\n ], QueryBuilder.prototype, \"matchCase\", void 0);\n __decorate([\n Property(0)\n ], QueryBuilder.prototype, \"immediateModeDelay\", void 0);\n __decorate([\n Property(false)\n ], QueryBuilder.prototype, \"enableNotCondition\", void 0);\n __decorate([\n Property(false)\n ], QueryBuilder.prototype, \"readonly\", void 0);\n __decorate([\n Property('')\n ], QueryBuilder.prototype, \"separator\", void 0);\n __decorate([\n Complex({ condition: 'and', rules: [] }, Rule)\n ], QueryBuilder.prototype, \"rule\", void 0);\n QueryBuilder = __decorate([\n NotifyPropertyChanges\n ], QueryBuilder);\n return QueryBuilder;\n}(Component));\nexport { QueryBuilder };\nvar LevelColl = /** @class */ (function () {\n function LevelColl() {\n }\n return LevelColl;\n}());\n"],"names":["__extends","extendStatics","d","b","Object","setPrototypeOf","__proto__","Array","p","hasOwnProperty","__","this","constructor","prototype","create","__assign","assign","t","s","i","n","arguments","length","call","apply","__decorate","decorators","target","key","desc","c","r","getOwnPropertyDescriptor","Reflect","decorate","defineProperty","Columns","_super","Property","isRequired","min","max","Number","MAX_VALUE","ChildProperty","Rule","Collection","Value","ShowButtons","QueryBuilder","options","element","_this","isReadonly","fields","text","value","updatedRule","not","condition","isLocale","isRefreshed","isNotified","isAddSuccess","isNotValueChange","isFieldChange","isFieldClose","isDestroy","isGetNestedData","MultiSelect","Inject","CheckBoxSelection","getPersistData","addOnPersist","reset","isImportRules","bodyElem","querySelector","inputElement","querySelectorAll","len","className","indexOf","getComponent","destroy","parentElement","innerHTML","grpContainer","createElement","attrs","class","grpHeader","grpBody","appendChild","headerTemplate","isRoot","enableNotCondition","removeClass","levelColl","id","rule","rules","disableRuleCondition","getWrapper","getModuleName","GetRootColumnName","field","separator","split","initialize","dataColl","columnKeys","keys","cols","categories","type","groupBy","isDate","validateObj","columns","columnSort","updateCustomOperator","isNaN","Date","parse","getTime","validation","category","l10n","getConstant","push","operators","customOperators","updateSubFieldsFromColumns","label","updateSubFields","trigger","col","data","sampCol","result","compField","resData","column","this_1","j","sqlIdx","operator_1","operColl","values","map","join","valueIdx","focusEventHandler","event","clickEventHandler","args","groupID","tagName","animation","Animation","duration","delay","renderSummary","summaryElem","document","getElementById","txtareaElem","animate","name","groupElem","style","display","textContent","getSqlFromRules","height","scrollHeight","actionButton","deleteRule","deleteGroup","closest","addGroupElement","mRules","extend","setGroupRules","renderSummaryCollapse","forIdValue","getAttribute","targetValue","replace","group","getGroup","ariaChecked","toggleElem","getElementsByClassName","addClass","cancel","toLowerCase","beforeSuccessCallBack","observedChangeArgs","beforeRules","getValidRules","getParentGroup","filterRules","selectBtn","showButtons","groupInsert","isNullOrUndefined","maxGroupCount","enableRtl","children","addRuleElement","appendRuleElem","parentId","action","ruleElem","elem","ruleListElem","select","setAttribute","ruleIdCounter","ruleTemplate","requestType","ruleID","ruleTemplateFn","templateParser","templateID","getOperators","operatorFields","isReact","isAngular","templateColl","nodeType","isVue3","append","cloneNode","renderReactTemplates","isRuleTemplate","isInitialLoad","addRuleSuccessCallBack","trgt","act","pId","isRlTmp","dropDownList","getColumn","newRule","operator","selectedColumn","passedRule","args_1","displayMode","previousElementSibling","updateAddedRule","fieldMode","ddlField","ddlValue","dataSource","placeholder","popupHeight","close","fieldClose","bind","change","changeField","open","popupOpen","fieldModel","DropDownList","appendTo","ddlVal","getDataByValue","changeRule","itemData","child","expanded","showClearButton","changeOnBlur","dropdowntree","DropDownTree","getLabelFromColumn","index","custom","changeRuleTemplate","operVal","parentGroup","previousColumn","detach","clearQBTemplate","renderToolTip","tooltip","Tooltip","content","position","cssClass","validateFields","dropDownTreeObj","isValid","allowValidation","excludeOprs","fieldElem","indexElem","valArray","dropDownObj","tempElem","ruleElemCln","validateRule","valElem","jLen","refreshLevelColl","obj","groupElement","level","refreshLevel","childElem","ruleList","iLen","groupCount","slice","groupTemplate","glueElem","inputElem","labelElem","grpActElem","groupBtn","groupHdrElem","grpBodyElem","rulesElem","role","clsName","filterElem","ruleDelete","delBtnElem","isGroup","isBtnClick","addGroupSuccess","eventTarget","dltGroupBtn","groupIdCounter","headerTemplateFn","andInpElem","orInpElem","andLblElem","orLblElem","btnGroupId","groupDelete","Button","iconCss","rippleEffect","selector","childElems","grpLen","addGroups","notElem","classList","add","args_2","notCondition","undefined","DropDownButton","items","beforeOpen","grpId","chgrpId","childGroupID","template","groupHdr","getRuleCollection","headerFn","notifyChange","grpElement","ruleElement","format","getFormat","intl","formatDate","templateChange","updateRules","eventsArgs","grpElem","validateValue","prevOper","arrOper","grpEle","destroyControls","changeValue","contains","dateElement","rbValue","parseInt","immediateModeDelay","window","clearInterval","timer","setInterval","filterValue","grID","rlID","ele","changeValueSuccessCallBack","ddl","item","popupObj","getItemData","customArgs","isInteracted","previousItemData","prevItemData","previousItem","e","previousValue","ddtElem","ddt","oldValue","dataBind","destroySubFields","subFieldElem","ddlArgs","tempRule","ddlObj","changeFilter","flt","dl","rl","tmpRl","dArg","selectedField","fieldChangeSuccess","operatorElem","changeOperator","opr","selectedIndex","operatorChangeSuccess","changeRuleValues","tooltipElem","createSubFields","nextElementSibling","remove","subFieldValue","subFilterCounter","insertBefore","ruleId","subFieldData","subField","toString","currOper","prevValue","parentElem","operatorList","oprElem","childElementCount","fieldObj","renderValues","ddlOperator","operatorModel","isField","popup","divElement","templateDestroy","templateElement","elemId","temp","templateElements","getValue","elementId","elements","getValues","original","fieldColl","dataObj","fieldStr","createNestedObject","lastIndex","k","getDistinctValues","nest","isNested","this_2","forEach","renderMultiSelect","selectedValue","ds","isFetched","isValues","fieldValue","selectedRule","multiSelectValue","dataManager","query","Query","mode","width","closePopup","actionBegin","multiSelectOpen","valueModel","multiSelectModel","multiSelectObj","DataManager","bindMultiSelectData","getMultiSelectData","dummyData","deferred","Deferred","executeQuery","multiselectObj","hideSpinner","createSpinner","showSpinner","then","actual","catch","reject","spinnerElem","Browser","isDevice","processTemplate","container","tempElements","write","setDefaultValue","isArryValue","isNumber","renderStringValue","idx","ruleValElem","selectedVal","columnData","isTemplate","isPublic","txtBox","input","textBoxModel","inputobj","TextBox","minWidth","renderNumberValue","selVal","txtInp","numericTxt","step","numericTextBoxModel","numeric","NumericTextBox","processValueString","numArr","strArr","kLen","parseDate","formatOpt","dParser","getDateParser","skeleton","renderControls","isRendered","length_1","processBoolValues","datepick","datePicker","place","formatObj","locale","getLocale","datePickerModel","DatePicker","orgValue","isCheck","radioBtn","checked","radioButtonModel","radiobutton","RadioButton","getOperatorIndex","getPreviousItemData","isRender","filtElem","getElementsByTagName","filtObj","isTempRendered","setColumnTemplate","inputLen","renderTemplate","observedActionArgs","actionBeginSuccessCallBack","Element","columnTemplateFn","valElemColl","updateValues","controlName","radioBtnObj","refresh","selectedDate","isNotTrigger","valueContainer","elementCln","i_1","i_2","ruleValueUpdate","beforeRule","afterRule","JSON","stringify","previousRule","oper","arrOperator","dupSelectedValue","parseFloat","isObject","formatOptions","findGroupByIdx","groupIdx","ruleColl","dupRuleColl","unWireEvents","portals","addRules","groups","importRules","initWrapper","trim","summaryView","notGroupRtl","readonly","enableReadonly","buttons","button","contentElem","textElem","styles","editElem","divElem","collapseElem","title","sortDirection","executeLocal","sortByDesc","sortBy","onChangeNotGroup","checkNotGroup","orgRule","onPropertyChanged","newProp","oldProp","_i","properties_1","enablePersistence","Internationalization","preRender","getUniqueID","defaultLocale","StartsWith","EndsWith","Contains","NotLike","Like","Equal","NotEqual","LessThan","LessThanOrEqual","GreaterThan","GreaterThanOrEqual","Between","NotBetween","In","NotIn","Remove","SelectField","SelectOperator","DeleteRule","DeleteGroup","AddGroup","AddCondition","Edit","ValidationMessage","SummaryViewTitle","OtherFields","AND","OR","NOT","SelectValue","IsEmpty","IsNotEmpty","IsNull","IsNotNull","True","False","AddButton","L10n","parser","stringOperator","dateOperator","booleanOperator","numberOperator","equal","notequal","greaterthan","greaterthanorequal","lessthan","in","notin","lessthanorequal","startswith","endswith","between","notbetween","isnull","isnotnull","isempty","isnotempty","notstartswith","notendswith","notcontains","sqlOperators","toUpperCase","render","stringOper","numberOper","concat","executeDataManager","take","initControl","renderComplete","templateCompiler","compile","error","wireEvents","wrapper","EventHandler","keyBoardHandler","isParent","groupLevel","groupId","deleteGroupSuccessCallBack","nextElem","prevElem","removeString","remRule","ruleElemColl","isTemplateRendered","isPlatformTemplate","splice","deleteRuleSuccessCallBack","clnruleElem","err","keyCode","preventDefault","clearTemplate","count","andElem","orElem","disabled","currentRule","getRules","ruleCondtion","isValidRule","customObj","isQuestion","notValue","setRules","getRule","HTMLElement","deleteGroups","groupIdColl","getFilteredRecords","predicate","getPredicate","dataManagerQuery","where","deleteRules","ruleIdColl","getDataManagerQuery","pred","pred2","ruleValue","ignoreCase","ignoreOper","and","or","isDateFilter","dateOperColl","matchCase","getDate","isTime","datePredicate","arrayPredicate","Predicate","localeString","cldrData","setTime","date","isStart","setHours","startDate","endDate","nullValue","gte","currDate","setMinutes","setSeconds","isReset","renderGroup","tglBtnElem","renderRule","getInstance","deleteGroupElems","addRuleGroupElems","removeRuleElems","elems","enableBtnGroup","isDateFunction","dateFunc","getSqlString","enableEscape","queryStr","sqlLocale","valueStr","ruleOpertor","ruleCondition","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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"}
|