@syncfusion/ej2-querybuilder 19.4.56 → 20.1.51
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 +5 -39
- 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 +78 -22
- package/dist/es6/ej2-querybuilder.es2015.js.map +1 -1
- package/dist/es6/ej2-querybuilder.es5.js +74 -18
- package/dist/es6/ej2-querybuilder.es5.js.map +1 -1
- package/dist/global/ej2-querybuilder.min.js +2 -2
- package/dist/global/ej2-querybuilder.min.js.map +1 -1
- package/dist/global/index.d.ts +1 -1
- package/package.json +11 -11
- package/src/query-builder/query-builder-model.d.ts +1 -1
- package/src/query-builder/query-builder.d.ts +2 -0
- package/src/query-builder/query-builder.js +75 -19
- package/styles/bootstrap5-dark.css +26 -10
- package/styles/bootstrap5.css +26 -10
- package/styles/fluent-dark.css +966 -0
- package/styles/fluent-dark.scss +1 -0
- package/styles/fluent.css +966 -0
- package/styles/fluent.scss +1 -0
- package/styles/query-builder/_bootstrap5-definition.scss +6 -5
- package/styles/query-builder/_fluent-dark-definition.scss +1 -0
- package/styles/query-builder/_fluent-definition.scss +7 -7
- package/styles/query-builder/_layout.scss +7 -6
- package/styles/query-builder/_tailwind-definition.scss +7 -7
- package/styles/query-builder/_theme.scss +25 -0
- package/styles/query-builder/bootstrap5-dark.css +26 -10
- package/styles/query-builder/bootstrap5.css +26 -10
- package/styles/query-builder/fluent-dark.css +966 -0
- package/styles/query-builder/fluent-dark.scss +15 -0
- package/styles/query-builder/fluent.css +966 -0
- package/styles/query-builder/fluent.scss +15 -0
- package/styles/query-builder/icons/_bootstrap5.scss +1 -1
- package/styles/query-builder/icons/_fluent-dark.scss +1 -0
- package/styles/query-builder/icons/_fluent.scss +1 -1
- package/styles/query-builder/icons/_tailwind-dark.scss +5 -5
- package/styles/query-builder/icons/_tailwind.scss +4 -4
- package/styles/query-builder/tailwind-dark.css +19 -73
- package/styles/query-builder/tailwind.css +18 -72
- package/styles/tailwind-dark.css +19 -73
- package/styles/tailwind.css +18 -72
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ej2-querybuilder.umd.min.js","sources":["../src/query-builder/query-builder.js"],"sourcesContent":["var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n/**\n * Query Builder Source\n */\nimport { Component, NotifyPropertyChanges, getComponent, Browser } 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].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) {\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) {\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 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) {\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) {\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)) {\n if (this.fieldMode === 'Default') {\n var ddlField = void 0;\n var ddlValue = this.isImportRules ? this.GetRootColumnName(rule.field) : rule.field;\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 = this.isImportRules ?\n this.GetRootColumnName(rule.field) : dropDownList.value;\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 dropdowntree = void 0;\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: this.isImportRules ? [ddlValue] : null,\n open: this.popupOpen.bind(this, false)\n };\n if (this.fieldModel) {\n ddlField = __assign({}, ddlField, this.fieldModel);\n }\n dropdowntree = new DropDownTree(ddlField);\n dropdowntree.appendTo('#' + ruleElem.id + '_filterkey');\n if (!isNullOrUndefined(dropdowntree.value)) {\n dropdowntree.element.value = dropdowntree.value[0];\n }\n var ddlVal = this.isImportRules ?\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 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 rules.rules[rules.rules.length - 1].custom = custom;\n }\n }\n else {\n if (custom) {\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 var validateRule = void 0;\n for (i = 0, len = ruleElemCln.length; i < len; i++) {\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-field input.e-control'), 'dropdowntree');\n if (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-field input.e-control'), 'dropdownlist');\n this.selectedColumn = dropDownObj.getDataByValue(dropDownObj.value);\n validateRule = !isNullOrUndefined(dropDownObj.index) && this.selectedColumn.validation;\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 input.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 && (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 input.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) {\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' } });\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 inputElem.setAttribute('checked', 'true');\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) {\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 = this.showButtons.groupDelete ? 'e-deletegroup' : 'e-deletegroup e-button-hide';\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 rules = this.getParentGroup(grpElem);\n var ruleElem = closest(element, '.e-rule-container');\n var index = 0;\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 this.trigger('actionBegin', args);\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 this.changeField(customArgs);\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 ddtElem.value = args.value[0];\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 {\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 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 (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 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) {\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 break;\n }\n }\n }\n this.subFilterCounter++;\n this.subFieldElem = subFieldElem;\n // eslint-disable-next-line\n ddlArgs.itemData = ddlArgs.itemData;\n if (!this.isImportRules) {\n this.selectedColumn = this.selectedColumn.columns[0];\n }\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 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) && !isNullOrUndefined(value)) {\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 }\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 prevItemData = this.getColumn(prevItemData.value);\n }\n if (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 : 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) {\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.validatValue(rule, closest(target, '.e-rule-container'));\n this.destroyControls(target);\n }\n itemData.template = column.template;\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 var column = this.fieldMode === 'DropdownTree' ? this.getColumn(dropDownObj.value[0])\n : this.getColumn(dropDownObj.value);\n if (!this.isImportRules && rule.rules[index].field && 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 for (var i_1 = 0; i_1 < elementCln.length; i_1++) {\n eventsArgs = { groupID: groupID, ruleID: ruleID, value: rule.rules[index].field, type: 'field' };\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.validatValue(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.validatValue = 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);\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.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 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 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 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 }\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 try {\n detach(clnruleElem);\n }\n catch (err) {\n }\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 }\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) : 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 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 (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, 'notnull', 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) {\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) {\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 if (isRoot) {\n queryStr += 'NOT (';\n }\n else {\n queryStr += ' NOT (';\n }\n }\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);\n }\n else {\n var rule = rules.rules[j];\n var valueStr = '';\n if (rule.value instanceof Array) {\n if (rule.operator.toString().indexOf('between') > -1) {\n if (rule.type === 'date' && !this.isDateFunction(rule.value[0])) {\n valueStr += '\"' + rule.value[0] + '\" AND \"' + rule.value[1] + '\"';\n }\n else {\n valueStr += rule.value[0] + ' AND ' + 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 + ' ' + this.operators[rule.operator];\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 + ' ' + this.operators[rule.operator] + ' ' + 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 queryStr += ' ' + condition.toUpperCase() + ' ';\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 * @returns {void}\n */\n QueryBuilder.prototype.setRulesFromSql = function (sqlString) {\n sqlString = sqlString.replace(/`/g, '');\n var ruleModel = this.getRulesFromSql(sqlString);\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 * @returns {object} - Rules from SQL query\n */\n QueryBuilder.prototype.getRulesFromSql = function (sqlString) {\n this.parser = [];\n this.sqlParser(sqlString);\n this.rule = { condition: 'and', not: false, rules: [] };\n var rule = this.processParser(this.parser, this.rule, [0]);\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 * @returns {object} - Sql query from rules.\n */\n QueryBuilder.prototype.getSqlFromRules = function (rule, allowEscape) {\n if (!rule) {\n rule = this.getValidRules();\n }\n rule = this.getRuleCollection(rule, false);\n return this.getSqlString(this.getValidRules(rule), allowEscape).replace(/\"/g, '\\'');\n };\n QueryBuilder.prototype.sqlParser = function (sqlString) {\n var st = 0;\n var str;\n do {\n str = sqlString.slice(st);\n st += this.parseSqlStrings(str);\n } while (str !== '');\n return this.parser;\n };\n QueryBuilder.prototype.parseSqlStrings = function (sqlString) {\n var operators = ['=', '!=', '<=', '>=', '<', '>'];\n var conditions = ['AND', 'OR', 'NOT'];\n var subOp = ['IN', 'NOT IN', 'LIKE', 'NOT LIKE', 'BETWEEN', 'NOT BETWEEN', 'IS NULL', 'IS NOT NULL', 'IS EMPTY', 'IS NOT EMPTY'];\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 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 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 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 // eslint-disable-next-line\n if (this.checkNumberLiteral(sqlString)) {\n matchValue = /^[0-9]+(\\.[0-9]+)?/.exec(sqlString)[0];\n this.parser.push(['Literal', matchValue]);\n return matchValue.length;\n }\n //String\n if (/^'((?:[^\\\\']+?|\\\\.|'')*)'(?!')/.exec(sqlString)) {\n matchValue = /^'((?:[^\\\\']+?|\\\\.|'')*)'(?!')/.exec(sqlString)[0];\n this.parser.push(['String', matchValue]);\n return matchValue.length;\n }\n //Double String\n if (/^\"([^\\\\\"]*(?:\\\\.[^\\\\\"]*)*)\"/.exec(sqlString)) {\n matchValue = /^\"([^\\\\\"]*(?:\\\\.[^\\\\\"]*)*)\"/.exec(sqlString)[0];\n this.parser.push(['DoubleString', matchValue]);\n return matchValue.length;\n }\n //Number\n if (/^[0-9]+(\\.[0-9]+)?/.exec(sqlString)) {\n matchValue = /^[0-9]+(\\.[0-9]+)?/.exec(sqlString)[0];\n this.parser.push(['Number', matchValue]);\n return matchValue.length;\n }\n //Negative Number\n if (/^-?[0-9]+(\\.[0-9]+)?/.exec(sqlString)) {\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) {\n var lastParser = this.parser[this.parser.length - 1];\n if (!lastParser) {\n return true;\n }\n else {\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 if (lastParser[0] === 'Conditions' && (betweenParser && betweenParser[1].indexOf('between') < 0)) {\n return true;\n }\n }\n }\n return false;\n };\n QueryBuilder.prototype.getOperator = function (value, operator) {\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 (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 return columnData.type;\n };\n QueryBuilder.prototype.processParser = function (parser, rules, levelColl) {\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]);\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]);\n }\n operator = parser[i + 1][1];\n i++;\n j = i + 1;\n jLen = iLen;\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] ? parser[j][1].replace(/'/g, '').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 strVal.push(parser[j][1].replace(/'/g, ''));\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 strVal.push(parser[j][1].replace(/'/g, ''));\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 rule.value = numVal;\n rule.type = 'number';\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]);\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') {\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);\n return rules;\n }\n else if (parser[i][0] === 'Conditions') {\n if (parser[i][1] === 'not') {\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);\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","parentElement","className","indexOf","getComponent","destroy","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","_loop_1","j","sqlIdx","operator_1","operColl","values","map","join","valueIdx","this_1","focusEventHandler","event","clickEventHandler","args","groupID","tagName","animation","Animation","duration","delay","renderSummary","summaryElem","document","getElementById","txtareaElem","animate","name","groupElem","style","display","textContent","getSqlFromRules","height","scrollHeight","actionButton","deleteRule","deleteGroup","closest","addGroupElement","mRules","extend","setGroupRules","renderSummaryCollapse","forIdValue","getAttribute","targetValue","replace","group","getGroup","ariaChecked","toggleElem","getElementsByClassName","addClass","cancel","toLowerCase","beforeSuccessCallBack","observedChangeArgs","beforeRules","getValidRules","getParentGroup","filterRules","selectBtn","showButtons","groupInsert","maxGroupCount","enableRtl","children","addRuleElement","appendRuleElem","parentId","action","ruleElem","elem","ruleListElem","select","setAttribute","ruleIdCounter","ruleTemplate","requestType","ruleID","ruleTemplateFn","templateParser","templateID","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","dropdowntree","child","expanded","showClearButton","changeOnBlur","DropDownTree","isNullOrUndefined","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","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","grpElem","prevOper","arrOper","grpEle","destroyControls","changeValue","contains","dateElement","rbValue","parseInt","immediateModeDelay","window","clearInterval","timer","setInterval","filterValue","grID","rlID","ele","eventsArgs","changeValueSuccessCallBack","ddl","item","popupObj","getItemData","customArgs","isInteracted","previousItemData","prevItemData","previousItem","e","ddtElem","ddt","oldValue","dataBind","destroySubFields","subFieldElem","ddlArgs","ddlObj","changeFilter","flt","dl","rl","tmpRl","dArg","selectedField","fieldChangeSuccess","operatorElem","changeOperator","opr","selectedIndex","operatorChangeSuccess","changeRuleValues","tempRule","tooltipElem","createSubFields","nextElementSibling","remove","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","_loop_2","this_2","forEach","renderMultiSelect","selectedValue","ds","isFetched","isValues","fieldValue","selectedRule","multiSelectValue","dataManager","query","Query","mode","width","closePopup","actionBegin","multiSelectOpen","valueModel","multiSelectModel","multiSelectObj","DataManager","bindMultiSelectData","getMultiSelectData","dummyData","deferred","Deferred","executeQuery","multiselectObj","hideSpinner","createSpinner","showSpinner","then","actual","catch","reject","spinnerElem","Browser","isDevice","processTemplate","container","tempElements","write","setDefaultValue","isArryValue","isNumber","renderStringValue","idx","ruleValElem","selectedVal","columnData","isTemplate","isPublic","txtBox","input","textBoxModel","inputobj","TextBox","minWidth","renderNumberValue","selVal","txtInp","numericTxt","step","numericTextBoxModel","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","validatValue","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","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","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","render","stringOper","numberOper","concat","executeDataManager","take","initControl","renderComplete","templateCompiler","trim","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","valueStr","toUpperCase","setRulesFromSql","sqlString","ruleModel","getRulesFromSql","sqlParser","processParser","allowEscape","str","st","parseSqlStrings","regexStr","matchValue","conditions","subOp","test","RegExp","exec","lastPasrser","checkLiteral","checkNumberLiteral","lastParser","secParser","betweenParser","getOperator","=","!=","<",">","<=",">=","not in","not between","is empty","is null","is not null","is not empty","getTypeFromColumn","subRules","l","lLen","grpCount","numVal","strVal","isLeftOpened","val","pop","Event","Complex","NotifyPropertyChanges","Component"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ej2-querybuilder.umd.min.js","sources":["../src/query-builder/query-builder.js"],"sourcesContent":["var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n/**\n * Query Builder Source\n */\nimport { Component, NotifyPropertyChanges, getComponent, Browser, compile } 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].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) {\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) {\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) {\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) {\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)) {\n if (this.fieldMode === 'Default') {\n var ddlField = void 0;\n var ddlValue = this.isImportRules ? this.GetRootColumnName(rule.field) : rule.field;\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 = this.isImportRules ?\n this.GetRootColumnName(rule.field) : dropDownList.value;\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: this.isImportRules ? [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 = this.isImportRules ?\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 var validateRule = void 0;\n for (i = 0, len = ruleElemCln.length; i < len; i++) {\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-field input.e-control'), 'dropdowntree');\n if (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-field .e-control'), 'dropdownlist');\n this.selectedColumn = dropDownObj.getDataByValue(dropDownObj.value);\n validateRule = !isNullOrUndefined(dropDownObj.index) && this.selectedColumn.validation;\n }\n fieldElem = tempElem.querySelector('.e-rule-field .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 && (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) {\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' } });\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 inputElem.setAttribute('checked', 'true');\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) {\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 = this.showButtons.groupDelete ? 'e-deletegroup' : 'e-deletegroup e-button-hide';\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 rules = this.getParentGroup(grpElem);\n var ruleElem = closest(element, '.e-rule-container');\n var index = 0;\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 this.trigger('actionBegin', args);\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 this.changeField(customArgs);\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 {\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 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) {\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 break;\n }\n }\n }\n this.subFilterCounter++;\n this.subFieldElem = subFieldElem;\n // eslint-disable-next-line\n ddlArgs.itemData = ddlArgs.itemData;\n if (!this.isImportRules) {\n this.selectedColumn = this.selectedColumn.columns[0];\n }\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) && !isNullOrUndefined(value)) {\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 }\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.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) {\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.validatValue(rule, closest(target, '.e-rule-container'));\n this.destroyControls(target);\n }\n itemData.template = column.template;\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 && 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 for (var i_1 = 0; i_1 < elementCln.length; i_1++) {\n eventsArgs = { groupID: groupID, ruleID: ruleID, value: rule.rules[index].field, type: 'field' };\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.validatValue(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.validatValue = 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);\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.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 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 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 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 }\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 }\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) : 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 === 'notnull')) {\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 (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, 'notnull', 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) {\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 if (isRoot) {\n queryStr += 'NOT (';\n }\n else {\n queryStr += ' NOT (';\n }\n }\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);\n }\n else {\n var rule = rules.rules[j];\n var valueStr = '';\n if (rule.value instanceof Array) {\n if (rule.operator.toString().indexOf('between') > -1) {\n if (rule.type === 'date' && !this.isDateFunction(rule.value[0])) {\n valueStr += '\"' + rule.value[0] + '\" AND \"' + rule.value[1] + '\"';\n }\n else {\n valueStr += rule.value[0] + ' AND ' + 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 + ' ' + this.operators[rule.operator];\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 + ' ' + this.operators[rule.operator] + ' ' + 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 queryStr += ' ' + condition.toUpperCase() + ' ';\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 * @returns {void}\n */\n QueryBuilder.prototype.setRulesFromSql = function (sqlString) {\n sqlString = sqlString.replace(/`/g, '');\n var ruleModel = this.getRulesFromSql(sqlString);\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 * @returns {object} - Rules from SQL query\n */\n QueryBuilder.prototype.getRulesFromSql = function (sqlString) {\n this.parser = [];\n this.sqlParser(sqlString);\n this.rule = { condition: 'and', not: false, rules: [] };\n var rule = this.processParser(this.parser, this.rule, [0]);\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 * @returns {object} - Sql query from rules.\n */\n QueryBuilder.prototype.getSqlFromRules = function (rule, allowEscape) {\n if (!rule) {\n rule = this.getValidRules();\n }\n rule = this.getRuleCollection(rule, false);\n return this.getSqlString(this.getValidRules(rule), allowEscape).replace(/\"/g, '\\'');\n };\n QueryBuilder.prototype.sqlParser = function (sqlString) {\n var st = 0;\n var str;\n do {\n str = sqlString.slice(st);\n st += this.parseSqlStrings(str);\n } while (str !== '');\n return this.parser;\n };\n QueryBuilder.prototype.parseSqlStrings = function (sqlString) {\n var operators = ['=', '!=', '<=', '>=', '<', '>'];\n var conditions = ['AND', 'OR', 'NOT'];\n var subOp = ['IN', 'NOT IN', 'LIKE', 'NOT LIKE', 'BETWEEN', 'NOT BETWEEN', 'IS NULL', 'IS NOT NULL', 'IS EMPTY', 'IS NOT EMPTY'];\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 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 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 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)) {\n matchValue = /^[0-9]+(\\.[0-9]+)?/.exec(sqlString)[0];\n this.parser.push(['Literal', matchValue]);\n return matchValue.length;\n }\n //String\n if (/^'((?:[^\\\\']+?|\\\\.|'')*)'(?!')/.exec(sqlString)) {\n matchValue = /^'((?:[^\\\\']+?|\\\\.|'')*)'(?!')/.exec(sqlString)[0];\n this.parser.push(['String', matchValue]);\n return matchValue.length;\n }\n //Double String\n if (/^\"([^\\\\\"]*(?:\\\\.[^\\\\\"]*)*)\"/.exec(sqlString)) {\n matchValue = /^\"([^\\\\\"]*(?:\\\\.[^\\\\\"]*)*)\"/.exec(sqlString)[0];\n this.parser.push(['DoubleString', matchValue]);\n return matchValue.length;\n }\n //Number\n if (/^[0-9]+(\\.[0-9]+)?/.exec(sqlString)) {\n matchValue = /^[0-9]+(\\.[0-9]+)?/.exec(sqlString)[0];\n this.parser.push(['Number', matchValue]);\n return matchValue.length;\n }\n //Negative Number\n if (/^-?[0-9]+(\\.[0-9]+)?/.exec(sqlString)) {\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) {\n var lastParser = this.parser[this.parser.length - 1];\n if (!lastParser) {\n return true;\n }\n else {\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 if (lastParser[0] === 'Conditions' && (betweenParser && betweenParser[1].indexOf('between') < 0)) {\n return true;\n }\n }\n }\n return false;\n };\n QueryBuilder.prototype.getOperator = function (value, operator) {\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 (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 return columnData.type;\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) {\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]);\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]);\n }\n operator = parser[i + 1][1];\n i++;\n j = i + 1;\n jLen = iLen;\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] ? parser[j][1].replace(/'/g, '').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 strVal.push(parser[j][1].replace(/'/g, ''));\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 strVal.push(parser[j][1].replace(/'/g, ''));\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 rule.value = numVal;\n rule.type = 'number';\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]);\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') {\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);\n return rules;\n }\n else if (parser[i][0] === 'Conditions') {\n if (parser[i][1] === 'not') {\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);\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","parentElement","className","indexOf","getComponent","destroy","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","_loop_1","j","sqlIdx","operator_1","operColl","values","map","join","valueIdx","this_1","focusEventHandler","event","clickEventHandler","args","groupID","tagName","animation","Animation","duration","delay","renderSummary","summaryElem","document","getElementById","txtareaElem","animate","name","groupElem","style","display","textContent","getSqlFromRules","height","scrollHeight","actionButton","deleteRule","deleteGroup","closest","addGroupElement","mRules","extend","setGroupRules","renderSummaryCollapse","forIdValue","getAttribute","targetValue","replace","group","getGroup","ariaChecked","toggleElem","getElementsByClassName","addClass","cancel","toLowerCase","beforeSuccessCallBack","observedChangeArgs","beforeRules","getValidRules","getParentGroup","filterRules","selectBtn","showButtons","groupInsert","maxGroupCount","enableRtl","children","addRuleElement","appendRuleElem","parentId","action","ruleElem","elem","ruleListElem","select","setAttribute","ruleIdCounter","ruleTemplate","requestType","ruleID","ruleTemplateFn","templateParser","templateID","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","isNullOrUndefined","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","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","grpElem","prevOper","arrOper","grpEle","destroyControls","changeValue","contains","dateElement","rbValue","parseInt","immediateModeDelay","window","clearInterval","timer","setInterval","filterValue","grID","rlID","ele","eventsArgs","changeValueSuccessCallBack","ddl","item","popupObj","getItemData","customArgs","isInteracted","previousItemData","prevItemData","previousItem","e","ddtElem","ddt","oldValue","dataBind","destroySubFields","subFieldElem","ddlArgs","ddlObj","changeFilter","flt","dl","rl","tmpRl","dArg","selectedField","fieldChangeSuccess","operatorElem","changeOperator","opr","selectedIndex","operatorChangeSuccess","changeRuleValues","tempRule","tooltipElem","createSubFields","nextElementSibling","remove","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","_loop_2","this_2","forEach","renderMultiSelect","selectedValue","ds","isFetched","isValues","fieldValue","selectedRule","multiSelectValue","dataManager","query","Query","mode","width","closePopup","actionBegin","multiSelectOpen","valueModel","multiSelectModel","multiSelectObj","DataManager","bindMultiSelectData","getMultiSelectData","dummyData","deferred","Deferred","executeQuery","multiselectObj","hideSpinner","createSpinner","showSpinner","then","actual","catch","reject","spinnerElem","Browser","isDevice","processTemplate","container","tempElements","write","setDefaultValue","isArryValue","isNumber","renderStringValue","idx","ruleValElem","selectedVal","columnData","isTemplate","isPublic","txtBox","input","textBoxModel","inputobj","TextBox","minWidth","renderNumberValue","selVal","txtInp","numericTxt","step","numericTextBoxModel","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","validatValue","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","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","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","render","stringOper","numberOper","concat","executeDataManager","take","initControl","renderComplete","templateCompiler","trim","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","valueStr","toUpperCase","setRulesFromSql","sqlString","ruleModel","getRulesFromSql","sqlParser","processParser","allowEscape","str","st","parseSqlStrings","regexStr","matchValue","conditions","subOp","test","RegExp","exec","lastPasrser","checkLiteral","checkNumberLiteral","lastParser","secParser","betweenParser","getOperator","=","!=","<",">","<=",">=","not in","not between","is empty","is null","is not null","is not empty","getTypeFromColumn","l","getLabelFromField","startIdx","fieldName","subRules","lLen","grpCount","numVal","strVal","isLeftOpened","val","pop","Event","Complex","NotifyPropertyChanges","Component"],"mappings":"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"}
|