@syncfusion/ej2-querybuilder 19.4.38 → 19.4.48
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 +19 -1
- 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 +47 -9
- package/dist/es6/ej2-querybuilder.es2015.js.map +1 -1
- package/dist/es6/ej2-querybuilder.es5.js +46 -8
- 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.js +46 -8
- package/styles/bootstrap5-dark.css +3 -3
- package/styles/bootstrap5.css +3 -3
- package/styles/query-builder/_bootstrap5-definition.scss +1 -1
- package/styles/query-builder/_layout.scss +6 -1
- package/styles/query-builder/_tailwind-definition.scss +1 -1
- package/styles/query-builder/bootstrap5-dark.css +3 -3
- package/styles/query-builder/bootstrap5.css +3 -3
- package/styles/query-builder/tailwind-dark.css +3 -3
- package/styles/query-builder/tailwind.css +3 -3
- package/styles/tailwind-dark.css +3 -3
- package/styles/tailwind.css +3 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ej2-querybuilder.min.js","sources":["../../src/query-builder/query-builder.js"],"sourcesContent":["var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n/**\n * Query Builder Source\n */\nimport { Component, NotifyPropertyChanges, getComponent, Browser } 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 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 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 }\n else {\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 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 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 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.element && isNullOrUndefined(dropDownObj.index)) {\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 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-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 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 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 dropDownList = new DropDownList({\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 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 for (var i = 0, iLen = dataSource.length; i < iLen; i++) {\n var 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 var data = {};\n if (!(value in original)) {\n original[value] = 1;\n data[field] = value;\n result.push(data);\n }\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 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 multiSelectValue;\n multiSelectValue = {\n dataSource: isValues ? values : (isFetched ? ds : this.dataManager),\n query: new Query([rule.field]),\n fields: { text: this.selectedRule.field, value: this.selectedRule.field },\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 }\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 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 var value = getComponent(element, 'multiselect').value;\n this.updateRules(element, value, i);\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 detach(clnruleElem);\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))) {\n rule = {\n 'label': rule.label, 'field': rule.field, 'operator': rule.operator, 'type': rule.type, 'value': rule.value\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 = { 'label': '', 'field': '', 'operator': '', 'type': '', 'value': '' };\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 }\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] !== '') {\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 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) {\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 }\n if (j !== jLen - 1) {\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","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","this_1","j","sqlIdx","operator_1","operColl","values","map","join","valueIdx","focusEventHandler","event","clickEventHandler","args","groupID","tagName","animation","Animation","duration","delay","renderSummary","summaryElem","document","getElementById","txtareaElem","animate","name","groupElem","style","display","textContent","getSqlFromRules","height","scrollHeight","actionButton","deleteRule","deleteGroup","closest","addGroupElement","mRules","extend","setGroupRules","renderSummaryCollapse","forIdValue","getAttribute","targetValue","replace","group","getGroup","ariaChecked","toggleElem","getElementsByClassName","addClass","cancel","toLowerCase","beforeSuccessCallBack","observedChangeArgs","beforeRules","getValidRules","getParentGroup","filterRules","selectBtn","showButtons","groupInsert","maxGroupCount","enableRtl","children","addRuleElement","appendRuleElem","parentId","action","ruleElem","elem","ruleListElem","select","setAttribute","ruleIdCounter","ruleTemplate","requestType","ruleID","ruleTemplateFn","templateParser","templateID","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","changeRuleTemplate","operVal","parentGroup","previousColumn","detach","clearQBTemplate","renderToolTip","tooltip","Tooltip","content","position","cssClass","validateFields","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","tempRule","ddlObj","changeFilter","flt","dl","rl","tmpRl","dArg","selectedField","fieldChangeSuccess","operatorElem","changeOperator","opr","selectedIndex","operatorChangeSuccess","changeRuleValues","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","renderMultiSelect","selectedValue","ds","isFetched","isValues","multiSelectValue","dataManager","query","Query","selectedRule","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","keyCode","preventDefault","clearTemplate","count","andElem","orElem","disabled","currentRule","getRules","ruleCondtion","isValidRule","customObj","custom","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","forEach","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.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 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 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 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 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.element && isNullOrUndefined(dropDownObj.index)) {\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 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-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 (this.selectedColumn === null) {\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 for (var i = 0, iLen = dataSource.length; i < iLen; i++) {\n var 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 var data = {};\n if (!(value in original)) {\n original[value] = 1;\n data[field] = value;\n result.push(data);\n }\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 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 multiSelectValue;\n multiSelectValue = {\n dataSource: isValues ? values : (isFetched ? ds : this.dataManager),\n query: new Query([rule.field]),\n fields: { text: this.selectedRule.field, value: this.selectedRule.field },\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 }\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 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 = { 'label': '', 'field': '', 'operator': '', 'type': '', 'value': '' };\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.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 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","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","this_1","j","sqlIdx","operator_1","operColl","values","map","join","valueIdx","focusEventHandler","event","clickEventHandler","args","groupID","tagName","animation","Animation","duration","delay","renderSummary","summaryElem","document","getElementById","txtareaElem","animate","name","groupElem","style","display","textContent","getSqlFromRules","height","scrollHeight","actionButton","deleteRule","deleteGroup","closest","addGroupElement","mRules","extend","setGroupRules","renderSummaryCollapse","forIdValue","getAttribute","targetValue","replace","group","getGroup","ariaChecked","toggleElem","getElementsByClassName","addClass","cancel","toLowerCase","beforeSuccessCallBack","observedChangeArgs","beforeRules","getValidRules","getParentGroup","filterRules","selectBtn","showButtons","groupInsert","maxGroupCount","enableRtl","children","addRuleElement","appendRuleElem","parentId","action","ruleElem","elem","ruleListElem","select","setAttribute","ruleIdCounter","ruleTemplate","requestType","ruleID","ruleTemplateFn","templateParser","templateID","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","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","tempRule","ddlObj","changeFilter","flt","dl","rl","tmpRl","dArg","selectedField","fieldChangeSuccess","operatorElem","changeOperator","opr","selectedIndex","operatorChangeSuccess","changeRuleValues","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","renderMultiSelect","selectedValue","ds","isFetched","isValues","multiSelectValue","dataManager","query","Query","selectedRule","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","forEach","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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"}
|