@syncfusion/ej2-querybuilder 19.4.40 → 19.4.50

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"ej2-querybuilder.umd.min.js","sources":["../src/query-builder/query-builder.js"],"sourcesContent":["var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n/**\n * Query Builder Source\n */\nimport { Component, NotifyPropertyChanges, getComponent, Browser } from '@syncfusion/ej2-base';\nimport { Property, ChildProperty, Complex, L10n, closest, extend, isNullOrUndefined, Collection, cldrData } from '@syncfusion/ej2-base';\nimport { getInstance, addClass, removeClass, rippleEffect, detach, classList } from '@syncfusion/ej2-base';\nimport { Internationalization, getUniqueID, select } from '@syncfusion/ej2-base';\nimport { Button, RadioButton } from '@syncfusion/ej2-buttons';\nimport { DropDownList, CheckBoxSelection, DropDownTree } from '@syncfusion/ej2-dropdowns';\nimport { MultiSelect } from '@syncfusion/ej2-dropdowns';\nimport { Event, EventHandler, getValue, Animation } from '@syncfusion/ej2-base';\nimport { Query, Predicate, DataManager, Deferred } from '@syncfusion/ej2-data';\nimport { TextBox, NumericTextBox } from '@syncfusion/ej2-inputs';\nimport { DatePicker } from '@syncfusion/ej2-calendars';\nimport { DropDownButton } from '@syncfusion/ej2-splitbuttons';\nimport { Tooltip, createSpinner, showSpinner, hideSpinner } from '@syncfusion/ej2-popups';\nimport { compile as templateCompiler } from '@syncfusion/ej2-base';\n/**\n * Defines the Columns of Query Builder\n */\nvar Columns = /** @class */ (function (_super) {\n __extends(Columns, _super);\n function Columns() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], Columns.prototype, \"field\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"label\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"type\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"values\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"operators\", void 0);\n __decorate([\n Property()\n ], Columns.prototype, \"ruleTemplate\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"template\", void 0);\n __decorate([\n Property({ isRequired: true, min: 0, max: Number.MAX_VALUE })\n ], Columns.prototype, \"validation\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"format\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"step\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"value\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"category\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"columns\", void 0);\n return Columns;\n}(ChildProperty));\nexport { Columns };\n/**\n * Defines the rule of Query Builder\n */\nvar Rule = /** @class */ (function (_super) {\n __extends(Rule, _super);\n function Rule() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], Rule.prototype, \"condition\", void 0);\n __decorate([\n Collection([], Rule)\n ], Rule.prototype, \"rules\", void 0);\n __decorate([\n Property(null)\n ], Rule.prototype, \"field\", void 0);\n __decorate([\n Property(null)\n ], Rule.prototype, \"label\", void 0);\n __decorate([\n Property(null)\n ], Rule.prototype, \"type\", void 0);\n __decorate([\n Property(null)\n ], Rule.prototype, \"operator\", void 0);\n __decorate([\n Property(null)\n ], Rule.prototype, \"value\", void 0);\n __decorate([\n Property(false)\n ], Rule.prototype, \"not\", void 0);\n return Rule;\n}(ChildProperty));\nexport { Rule };\n/**\n * Defines the property for value.\n */\nvar Value = /** @class */ (function (_super) {\n __extends(Value, _super);\n function Value() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], Value.prototype, \"numericTextBoxModel\", void 0);\n __decorate([\n Property(null)\n ], Value.prototype, \"multiSelectModel\", void 0);\n __decorate([\n Property(null)\n ], Value.prototype, \"datePickerModel\", void 0);\n __decorate([\n Property(null)\n ], Value.prototype, \"textBoxModel\", void 0);\n __decorate([\n Property(null)\n ], Value.prototype, \"radioButtonModel\", void 0);\n return Value;\n}(ChildProperty));\nexport { Value };\n/**\n * Defines the ruleDelete, groupInsert, and groupDelete options of Query Builder.\n */\nvar ShowButtons = /** @class */ (function (_super) {\n __extends(ShowButtons, _super);\n function ShowButtons() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(true)\n ], ShowButtons.prototype, \"ruleDelete\", void 0);\n __decorate([\n Property(true)\n ], ShowButtons.prototype, \"groupInsert\", void 0);\n __decorate([\n Property(true)\n ], ShowButtons.prototype, \"groupDelete\", void 0);\n return ShowButtons;\n}(ChildProperty));\nexport { ShowButtons };\nvar QueryBuilder = /** @class */ (function (_super) {\n __extends(QueryBuilder, _super);\n function QueryBuilder(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.isReadonly = true;\n _this.fields = { text: 'label', value: 'field' };\n _this.updatedRule = { not: false, condition: 'and' };\n _this.isLocale = false;\n _this.isRefreshed = false;\n _this.isNotified = false;\n _this.isAddSuccess = false;\n _this.isNotValueChange = false;\n 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'),\n change: this.changeField.bind(this), value: rule ? ddlValue : null, open: this.popupOpen.bind(this)\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)\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.changeField = function (args) {\n if (args.isInteracted) {\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)\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)\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 (args) {\n if (this.enableRtl) {\n addClass([args.popup.element], 'e-rtl');\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)\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 (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 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 };\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 {\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 (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 //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.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","MultiSelect","Inject","CheckBoxSelection","getPersistData","addOnPersist","reset","isImportRules","bodyElem","querySelector","inputElement","querySelectorAll","len","parentElement","className","indexOf","getComponent","destroy","innerHTML","grpContainer","createElement","attrs","class","grpHeader","grpBody","appendChild","headerTemplate","isRoot","enableNotCondition","removeClass","levelColl","id","rule","rules","disableRuleCondition","getWrapper","getModuleName","GetRootColumnName","field","separator","split","initialize","dataColl","columnKeys","keys","cols","categories","type","groupBy","isDate","validateObj","columns","columnSort","updateCustomOperator","isNaN","Date","parse","getTime","validation","category","l10n","getConstant","push","operators","customOperators","updateSubFieldsFromColumns","label","updateSubFields","trigger","col","data","sampCol","result","compField","resData","column","_loop_1","j","sqlIdx","operator_1","operColl","values","map","join","valueIdx","this_1","focusEventHandler","event","clickEventHandler","args","groupID","tagName","animation","Animation","duration","delay","renderSummary","summaryElem","document","getElementById","txtareaElem","animate","name","groupElem","style","display","textContent","getSqlFromRules","height","scrollHeight","actionButton","deleteRule","deleteGroup","closest","addGroupElement","mRules","extend","setGroupRules","renderSummaryCollapse","forIdValue","getAttribute","targetValue","replace","group","getGroup","ariaChecked","toggleElem","getElementsByClassName","addClass","cancel","toLowerCase","beforeSuccessCallBack","observedChangeArgs","beforeRules","getValidRules","getParentGroup","filterRules","selectBtn","showButtons","groupInsert","maxGroupCount","enableRtl","children","addRuleElement","appendRuleElem","parentId","action","ruleElem","elem","ruleListElem","select","setAttribute","ruleIdCounter","ruleTemplate","requestType","ruleID","ruleTemplateFn","templateParser","templateID","template","getOperators","operatorFields","isReact","isAngular","templateColl","nodeType","cloneNode","renderReactTemplates","isRuleTemplate","isInitialLoad","addRuleSuccessCallBack","trgt","act","pId","isRlTmp","dropDownList","getColumn","newRule","operator","selectedColumn","passedRule","args_1","displayMode","previousElementSibling","updateAddedRule","fieldMode","ddlField","ddlValue","dataSource","placeholder","popupHeight","change","changeField","bind","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","isInteracted","ddtElem","ddt","oldValue","dataBind","destroySubFields","subFieldElem","ddlArgs","ddlObj","changeFilter","flt","dl","rl","tmpRl","dArg","selectedField","fieldChangeSuccess","operatorElem","changeOperator","opr","selectedIndex","operatorChangeSuccess","changeRuleValues","tempRule","tooltipElem","createSubFields","nextElementSibling","remove","subFilterCounter","insertBefore","ruleId","subFieldData","subField","toString","currOper","previousItemData","prevValue","parentElem","operatorList","oprElem","childElementCount","fieldObj","renderValues","ddlOperator","operatorModel","item","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","close","closePopup","actionBegin","multiSelectOpen","valueModel","multiSelectModel","multiSelectObj","DataManager","bindMultiSelectData","getMultiSelectData","dummyData","deferred","Deferred","executeQuery","multiselectObj","hideSpinner","createSpinner","showSpinner","then","e","actual","catch","reject","spinnerElem","Browser","isDevice","processTemplate","container","tempElements","write","getItemData","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","prevItemData","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","lastParser","secParser","getOperator","=","!=","<",">","<=",">=","not in","not between","is empty","is null","is not null","is not empty","getTypeFromColumn","subRules","l","lLen","grpCount","numVal","strVal","isLeftOpened","val","pop","Event","Complex","NotifyPropertyChanges","Component"],"mappings":"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"}
1
+ {"version":3,"file":"ej2-querybuilder.umd.min.js","sources":["../src/query-builder/query-builder.js"],"sourcesContent":["var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n/**\n * Query Builder Source\n */\nimport { Component, NotifyPropertyChanges, getComponent, Browser } 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 if (isNullOrUndefined(args.value)) {\n return;\n }\n this.isFieldChange = true;\n this.prevItemData = args.itemData;\n var fieldElem = closest(args.element, '.e-rule-filter') || closest(args.element, '.e-rule-sub-filter');\n var column = this.fieldMode === 'DropdownTree' ? this.getColumn(args.value[0]) : this.getColumn(args.value);\n if (this.fieldMode === 'DropdownTree' && fieldElem != null) {\n var ddtElem = fieldElem.querySelector('.e-control');\n var ddt = getComponent(ddtElem, 'dropdowntree');\n if (column) {\n if (column.type === 'object') {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ddt.value = args.oldValue;\n ddt.dataBind();\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (isNullOrUndefined(args.oldValue)) {\n ddtElem.value = '';\n }\n else {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ddtElem.value = args.oldValue[0];\n }\n return;\n }\n else {\n if (!isNullOrUndefined(args.value[0])) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ddt.value = args.value[0];\n ddt.dataBind();\n ddtElem.value = args.value[0];\n }\n }\n }\n else {\n return;\n }\n }\n this.destroySubFields(fieldElem);\n this.subFieldElem = null;\n this.isNotValueChange = true;\n if (column && column.ruleTemplate) {\n this.templateChange(args.element, column.field, 'field');\n }\n else {\n var groupElem = closest(args.element, '.e-group-container');\n var rules = this.getParentGroup(groupElem);\n var ruleElem = closest(args.element, '.e-rule-container');\n var index = 0;\n while (ruleElem && ruleElem.previousElementSibling !== null) {\n ruleElem = ruleElem.previousElementSibling;\n index++;\n }\n rules.rules[index].value = '';\n this.changeRule(rules.rules[index], args);\n }\n }\n };\n QueryBuilder.prototype.changeRule = function (rule, ddlArgs) {\n if (!ddlArgs.itemData) {\n if (this.fieldMode === \"DropdownTree\") {\n var ddt = getComponent(ddlArgs.element, 'dropdowntree');\n if (ddt.value == null) {\n return;\n }\n }\n else {\n return;\n }\n }\n var tempRule = {};\n var filterElem = closest(ddlArgs.element, '.e-rule-filter');\n filterElem = filterElem ? filterElem : closest(ddlArgs.element, '.e-rule-sub-filter');\n var ddlObj = getComponent(ddlArgs.element, 'dropdownlist');\n if (this.fieldMode === 'DropdownTree' && filterElem != null) {\n ddlObj = getComponent(ddlArgs.element, 'dropdowntree');\n }\n var element = closest(ddlArgs.element, '.e-group-container');\n var groupID = element.id.replace(this.element.id + '_', '');\n this.changeFilter(filterElem, ddlObj, groupID, rule, tempRule, ddlArgs);\n };\n QueryBuilder.prototype.changeFilter = function (flt, dl, grID, rl, tmpRl, dArg) {\n var _this = this;\n if (flt) {\n var ddlValue = void 0;\n if (this.fieldMode === 'DropdownTree') {\n ddlValue = (dl.value[0]);\n }\n else {\n ddlValue = this.isImportRules ? this.GetRootColumnName(dl.value) : dl.value;\n }\n this.selectedColumn = this.getColumn(ddlValue);\n var ruleElem = closest(flt, '.e-rule-container');\n var ruleID = ruleElem.id.replace(this.element.id + '_', '');\n var eventsArgs = { groupID: grID, ruleID: ruleID, selectedField: this.fieldMode === 'DropdownTree' ?\n dl.value[0] : dl.value, cancel: false, type: 'field' };\n if (!this.isImportRules) {\n this.trigger('beforeChange', eventsArgs, function (observedChangeArgs) {\n _this.fieldChangeSuccess(observedChangeArgs, tmpRl, flt, rl, dArg);\n });\n }\n else {\n this.fieldChangeSuccess(eventsArgs, tmpRl, flt, rl, dArg);\n }\n }\n else {\n var operatorElem = closest(dArg.element, '.e-rule-operator');\n this.changeOperator(flt, operatorElem, dl, grID, rl, tmpRl, dArg);\n }\n };\n QueryBuilder.prototype.changeOperator = function (flt, opr, dl, grID, rl, tmpRl, dArg) {\n var _this = this;\n var ruleElem;\n var ruleID;\n var eventsArgs;\n if (opr) {\n ruleElem = closest(opr, '.e-rule-container');\n ruleID = ruleElem.id.replace(this.element.id + '_', '');\n eventsArgs = { groupID: grID, ruleID: ruleID, selectedIndex: dl.index, cancel: false, type: 'operator' };\n if (!this.isImportRules) {\n this.trigger('beforeChange', eventsArgs, function (observedChangeArgs) {\n _this.operatorChangeSuccess(observedChangeArgs, flt, tmpRl, rl, dArg);\n });\n }\n else {\n this.operatorChangeSuccess(eventsArgs, flt, tmpRl, rl, dArg);\n }\n }\n else {\n this.changeRuleValues(flt, rl, tmpRl, dArg);\n }\n };\n QueryBuilder.prototype.fieldChangeSuccess = function (args, tempRule, filterElem, rule, ddlArgs) {\n var ruleElem = closest(filterElem, '.e-rule-container');\n var operatorElem = closest(ddlArgs.element, '.e-rule-operator');\n var element = closest(ddlArgs.element, '.e-group-container');\n var groupID = element.id.replace(this.element.id + '_', '');\n var ddlObj = getComponent(ddlArgs.element, 'dropdownlist');\n var tooltipElem = ruleElem.querySelectorAll('.e-tooltip.e-input-group');\n for (var i = 0; i < tooltipElem.length; i++) {\n getComponent(tooltipElem[i], 'tooltip').destroy();\n }\n if (!args.cancel) {\n if (isNullOrUndefined(this.selectedColumn)) {\n return;\n }\n tempRule.type = this.selectedColumn.type;\n if (ruleElem.querySelector('.e-template')) {\n rule.value = '';\n }\n if (this.selectedColumn.type === 'object' && this.fieldMode === 'Default') {\n tempRule.type = this.selectedColumn.columns[0].type;\n while (this.selectedColumn.columns) {\n this.createSubFields(filterElem, rule, tempRule, ddlArgs);\n }\n }\n else {\n this.destroySubFields(filterElem);\n this.changeOperator(filterElem, operatorElem, ddlObj, groupID, rule, tempRule, ddlArgs);\n }\n }\n else {\n this.changeOperator(filterElem, operatorElem, ddlObj, groupID, rule, tempRule, ddlArgs);\n }\n };\n QueryBuilder.prototype.destroySubFields = function (filterElem) {\n while (filterElem && filterElem.nextElementSibling.classList.contains('e-rule-sub-filter')) {\n this.destroyControls(filterElem);\n filterElem.nextElementSibling.remove();\n }\n };\n QueryBuilder.prototype.createSubFields = function (filterElem, rule, tempRule, ddlArgs) {\n var fieldElem = closest(filterElem, '.e-rule-field');\n var tempElem = this.createElement('div', { attrs: { class: 'e-rule-sub-filter', id: 'subfilter' + this.subFilterCounter } });\n fieldElem.insertBefore(tempElem, fieldElem.querySelector('.e-rule-operator'));\n var ruleId = closest(tempElem, '.e-rule-container').id;\n var subFieldElem = this.createElement('input', { attrs: { type: 'text', id: ruleId + '_subfilterkey' + this.subFilterCounter } });\n tempElem.appendChild(subFieldElem);\n var height = (this.element.className.indexOf('e-device') > -1) ? '250px' : '200px';\n var subFieldData = Object.keys(this.selectedColumn.columns[0]);\n var ddlField;\n ddlField = {\n dataSource: this.selectedColumn.columns,\n fields: this.fields,\n placeholder: this.l10n.getConstant('SelectField'),\n popupHeight: ((subFieldData.length > 5) ? height : 'auto'),\n change: this.changeField.bind(this),\n index: 0,\n open: this.popupOpen.bind(this, false)\n };\n if (this.fieldModel) {\n ddlField = __assign({}, ddlField, this.fieldModel);\n }\n var dropDownList = new DropDownList(ddlField);\n dropDownList.appendTo('#' + ruleId + '_subfilterkey' + this.subFilterCounter);\n if (this.isImportRules) {\n var subField = this.selectedColumn.columns;\n for (var i = 0; i < subField.length; i++) {\n if (rule.field === subField[i].field || rule.field.indexOf(subField[i].field) > -1) {\n dropDownList.value = subField[i].field;\n this.selectedColumn = subField[i];\n break;\n }\n }\n }\n this.subFilterCounter++;\n this.subFieldElem = subFieldElem;\n // eslint-disable-next-line\n ddlArgs.itemData = ddlArgs.itemData;\n if (!this.isImportRules) {\n this.selectedColumn = this.selectedColumn.columns[0];\n }\n if (!this.selectedColumn.columns) {\n this.changeRuleValues(tempElem, rule, tempRule, ddlArgs);\n }\n };\n QueryBuilder.prototype.operatorChangeSuccess = function (eventsArgs, filterElem, tempRule, rule, ddlArgs) {\n if (!eventsArgs.cancel) {\n var operatorElem = closest(ddlArgs.element, '.e-rule-operator');\n var valElem = operatorElem.nextElementSibling;\n var dropDownObj = getComponent(ddlArgs.element, 'dropdownlist');\n var prevOper = rule.operator ? rule.operator.toString().toLowerCase() : '';\n tempRule.operator = dropDownObj.value.toString();\n var currOper = tempRule.operator.toLowerCase();\n if (tempRule.operator.toLowerCase().indexOf('between') > -1 || (tempRule.operator.toLowerCase().indexOf('in') > -1\n && tempRule.operator.toLowerCase().indexOf('contains') < 0)) {\n filterElem = operatorElem.previousElementSibling;\n tempRule.type = rule.type;\n if (tempRule.operator.toLowerCase().indexOf('in') < 0 || prevOper.indexOf('in') < 0) {\n rule.value = [];\n }\n }\n else if (typeof rule.value === 'object' && rule.value != null) {\n rule.value = rule.value.length > 0 ? rule.value[0] : rule.type === 'number' ? 0 : '';\n }\n if (ddlArgs.previousItemData) {\n var prevValue = ddlArgs.previousItemData.value.toString().toLowerCase();\n if ((prevValue.indexOf('between') > -1 || (prevValue.indexOf('in') > -1 || (prevValue.indexOf('null') > -1)\n || (prevValue.indexOf('empty') > -1)) && prevValue.indexOf('contains') < 0)) {\n filterElem = operatorElem.previousElementSibling;\n tempRule.type = rule.type;\n }\n }\n if ((prevOper.indexOf('in') > -1 && prevOper.indexOf('in') < 5) && (currOper.indexOf('in') > -1\n && currOper.indexOf('in') < 5)) {\n filterElem = null;\n }\n if (tempRule.operator.indexOf('null') > -1 || (tempRule.operator.indexOf('empty') > -1)) {\n var parentElem = operatorElem.parentElement.querySelector('.e-rule-value');\n var tooltipElem = parentElem.querySelector('.e-tooltip.e-input-group');\n if (tooltipElem) {\n getComponent(tooltipElem, 'tooltip').destroy();\n }\n removeClass([parentElem], 'e-show');\n addClass([parentElem], 'e-hide');\n }\n if (valElem && this.getColumn(rule.field).template) {\n filterElem = operatorElem.previousElementSibling;\n }\n this.changeRuleValues(filterElem, rule, tempRule, ddlArgs);\n }\n };\n QueryBuilder.prototype.changeRuleValues = function (filterElem, rule, tempRule, ddlArgs) {\n var operatorElem = closest(ddlArgs.element, '.e-rule-operator');\n var isSub;\n var ddlObj;\n var operatorList;\n var oprElem;\n if (filterElem) {\n operatorElem = filterElem.nextElementSibling;\n if (filterElem.classList.contains('e-rule-sub-filter')) {\n tempRule.type = this.selectedColumn.type;\n isSub = operatorElem.classList.contains('e-rule-sub-filter');\n operatorElem = isSub ? operatorElem.nextElementSibling : operatorElem;\n }\n addClass([operatorElem], 'e-operator');\n if (operatorElem.childElementCount) {\n ddlObj = getComponent(operatorElem.querySelector('.e-dropdownlist'), 'dropdownlist');\n tempRule.operator = ddlObj.value;\n var fieldObj = void 0;\n if (this.fieldMode === 'DropdownTree') {\n fieldObj = getComponent(filterElem.querySelector('.e-dropdowntree'), 'dropdowntree');\n }\n else {\n fieldObj = getComponent(filterElem.querySelector('.e-dropdownlist'), 'dropdownlist');\n }\n tempRule.type = this.fieldMode === 'DropdownTree' ? this.getColumn(fieldObj.value[0]).type :\n this.getColumn(fieldObj.value).type;\n var itemData = ddlArgs.itemData;\n this.renderValues(operatorElem, itemData, ddlArgs.previousItemData, true, rule, tempRule, ddlArgs.element);\n }\n else {\n var ruleId = closest(operatorElem, '.e-rule-container').id;\n oprElem = this.createElement('input', { attrs: { type: 'text', id: ruleId + '_operatorkey' } });\n operatorElem.appendChild(oprElem);\n if (this.selectedColumn.operators) {\n operatorList = this.selectedColumn.operators;\n }\n else if (ddlArgs.itemData) {\n operatorList = this.customOperators[this.selectedColumn.type + 'Operator'];\n }\n var height = (this.element.className.indexOf('e-device') > -1) ? '250px' : '200px';\n var value = operatorList[0].value;\n value = rule ? (rule.operator !== '' ? rule.operator : value) : value;\n var ddlOperator = void 0;\n ddlOperator = {\n dataSource: operatorList,\n fields: { text: 'key', value: 'value' },\n placeholder: this.l10n.getConstant('SelectOperator'),\n popupHeight: ((operatorList.length > 5) ? height : 'auto'),\n change: this.changeField.bind(this),\n index: 0,\n value: value,\n open: this.popupOpen.bind(this, false)\n };\n if (this.operatorModel) {\n ddlOperator = __assign({}, ddlOperator, this.operatorModel);\n }\n var dropDownList = new DropDownList(ddlOperator);\n dropDownList.appendTo('#' + ruleId + '_operatorkey');\n tempRule.operator = (rule && rule.operator !== '' && !isNullOrUndefined(rule.operator)) ? rule.operator : operatorList[0].value;\n if (this.isImportRules) {\n tempRule.type = this.selectedColumn.type;\n tempRule.operator = rule.operator;\n }\n this.renderValues(operatorElem, this.selectedColumn, ddlArgs.previousItemData, false, rule, tempRule, ddlArgs.element);\n }\n }\n if (!this.isImportRules) {\n this.updateRules(ddlArgs.element, ddlArgs.item);\n }\n };\n QueryBuilder.prototype.popupOpen = function (isField, args) {\n if (this.enableRtl) {\n addClass([args.popup.element], 'e-rtl');\n }\n if (isField) {\n this.isFieldClose = false;\n }\n };\n QueryBuilder.prototype.destroyControls = function (target, isRuleTemplate) {\n var element = isRuleTemplate ? target : target.nextElementSibling;\n var inputElement = element.querySelectorAll('input.e-control');\n var divElement = element.querySelectorAll('div.e-control:not(.e-handle)');\n var columns = this.columns;\n for (var i = 0, len = inputElement.length; i < len; i++) {\n if (inputElement[i].classList.contains('e-textbox')) {\n getComponent(inputElement[i], 'textbox').destroy();\n detach(select('input#' + inputElement[i].id, element));\n }\n else if (inputElement[i].classList.contains('e-dropdownlist')) {\n if (this.allowValidation && inputElement[i].parentElement.className.indexOf('e-tooltip') > -1) {\n getComponent(inputElement[i].parentElement, 'tooltip').destroy();\n }\n getComponent(inputElement[i], 'dropdownlist').destroy();\n }\n else if (inputElement[i].classList.contains('e-radio')) {\n getComponent(inputElement[i], 'radio').destroy();\n }\n else if (inputElement[i].classList.contains('e-numerictextbox')) {\n getComponent(inputElement[i], 'numerictextbox').destroy();\n detach(select('input#' + inputElement[i].id, element));\n }\n else if (inputElement[i].classList.contains('e-datepicker')) {\n getComponent(inputElement[i], 'datepicker').destroy();\n }\n else if (inputElement[i].classList.contains('e-multiselect')) {\n getComponent(inputElement[i], 'multiselect').destroy();\n }\n else if (inputElement[i].className.indexOf('e-template') > -1) {\n var clsName = inputElement[i].className;\n for (var j = 0, jLen = columns.length; j < jLen; j++) {\n if (columns[j].template && clsName.indexOf(columns[j].field) > -1) {\n this.templateDestroy(columns[j], inputElement[i].id);\n break;\n }\n }\n }\n if (document.getElementById(inputElement[i].id)) {\n detach(inputElement[i]);\n }\n }\n for (var i = 0, len = divElement.length; i < len; i++) {\n if (divElement[i].className.indexOf('e-template') > -1) {\n var clsName = divElement[i].className;\n for (var j = 0, jLen = columns.length; j < jLen; j++) {\n if (columns[j].template && clsName.indexOf(columns[j].field) > -1) {\n this.templateDestroy(columns[j], divElement[i].id);\n break;\n }\n }\n }\n detach(divElement[i]);\n }\n var templateElement = element.querySelectorAll('.e-template:not(.e-control)');\n for (var i = 0, len = templateElement.length; i < len; i++) {\n detach(templateElement[i]);\n }\n };\n QueryBuilder.prototype.templateDestroy = function (column, elemId) {\n var template;\n if (typeof column.template !== 'string' || column.template.destroy === undefined) {\n template = column.template;\n }\n else {\n return;\n }\n var temp = template.destroy;\n if (template.destroy) {\n var templateElements = void 0;\n if (document.getElementById(elemId)) {\n templateElements = closest(document.getElementById(elemId), '.e-rule-field').querySelectorAll('.e-template');\n }\n if (typeof temp === 'string') {\n temp = getValue(temp, window);\n temp({ field: column.field, elementId: elemId, elements: templateElements });\n }\n else {\n template.destroy({ field: column.field, elementId: elemId, elements: templateElements });\n }\n }\n };\n /**\n * return values bound to the column.\n *\n * @param {string} field - 'field' to be passed to get the field values.\n * @returns {object[]} - Values bound to the column\n */\n QueryBuilder.prototype.getValues = function (field) {\n var original = {};\n var result = [];\n var value;\n var fieldColl = [];\n if (this.separator.length > 0) {\n fieldColl = field.split(this.separator);\n }\n var dataSource = this.dataColl;\n if (this.dataColl[1]) {\n for (var i = 0, iLen = dataSource.length; i < iLen; i++) {\n var data = {};\n if (fieldColl.length > 1) {\n var dataObj = dataSource[i];\n var fieldStr = void 0;\n for (var j = 0, jLen = fieldColl.length; j < jLen; j++) {\n fieldStr = fieldColl[j];\n if (fieldColl.length === (j + 1)) {\n value = dataObj[fieldStr];\n if (Number(dataObj[fieldStr]) === dataObj[fieldStr] && dataObj[fieldStr] % 1 !== 0) {\n value = dataObj[fieldStr].toString();\n }\n }\n else {\n dataObj = dataObj[fieldStr];\n }\n }\n }\n else {\n value = dataSource[i][field];\n if (Number(dataSource[i][field]) === dataSource[i][field] && dataSource[i][field] % 1 !== 0) {\n value = dataSource[i][field].toString();\n }\n }\n if (!(value in original)) {\n original[value] = 1;\n if (fieldColl.length > 1) {\n this.createNestedObject(data, fieldColl, value);\n }\n else {\n data[field] = value;\n }\n result.push(data);\n }\n }\n }\n return result;\n };\n QueryBuilder.prototype.createNestedObject = function (obj, fieldColl, value) {\n var key;\n var lastIndex = fieldColl.length - 1;\n for (var k = 0; k < lastIndex; ++k) {\n key = fieldColl[k];\n if (!(key in obj)) {\n obj[key] = {};\n }\n obj = obj[key];\n }\n obj[fieldColl[lastIndex]] = value;\n };\n QueryBuilder.prototype.getDistinctValues = function (dataSource, field) {\n var original = {};\n var result = [];\n 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","_loop_1","j","sqlIdx","operator_1","operColl","values","map","join","valueIdx","this_1","focusEventHandler","event","clickEventHandler","args","groupID","tagName","animation","Animation","duration","delay","renderSummary","summaryElem","document","getElementById","txtareaElem","animate","name","groupElem","style","display","textContent","getSqlFromRules","height","scrollHeight","actionButton","deleteRule","deleteGroup","closest","addGroupElement","mRules","extend","setGroupRules","renderSummaryCollapse","forIdValue","getAttribute","targetValue","replace","group","getGroup","ariaChecked","toggleElem","getElementsByClassName","addClass","cancel","toLowerCase","beforeSuccessCallBack","observedChangeArgs","beforeRules","getValidRules","getParentGroup","filterRules","selectBtn","showButtons","groupInsert","maxGroupCount","enableRtl","children","addRuleElement","appendRuleElem","parentId","action","ruleElem","elem","ruleListElem","select","setAttribute","ruleIdCounter","ruleTemplate","requestType","ruleID","ruleTemplateFn","templateParser","templateID","template","getOperators","operatorFields","isReact","isAngular","templateColl","nodeType","cloneNode","renderReactTemplates","isRuleTemplate","isInitialLoad","addRuleSuccessCallBack","trgt","act","pId","isRlTmp","dropDownList","getColumn","newRule","operator","selectedColumn","passedRule","args_1","displayMode","previousElementSibling","updateAddedRule","fieldMode","ddlField","ddlValue","dataSource","placeholder","popupHeight","close","fieldClose","bind","change","changeField","open","popupOpen","fieldModel","DropDownList","appendTo","ddlVal","getDataByValue","changeRule","itemData","dropdowntree","child","expanded","showClearButton","changeOnBlur","DropDownTree","isNullOrUndefined","index","custom","changeRuleTemplate","operVal","parentGroup","previousColumn","detach","clearQBTemplate","renderToolTip","tooltip","Tooltip","content","position","cssClass","validateFields","isValid","allowValidation","excludeOprs","fieldElem","indexElem","valArray","dropDownObj","tempElem","ruleElemCln","validateRule","valElem","jLen","refreshLevelColl","obj","groupElement","level","refreshLevel","childElem","ruleList","iLen","groupCount","slice","groupTemplate","glueElem","inputElem","labelElem","grpActElem","groupBtn","groupHdrElem","grpBodyElem","rulesElem","clsName","filterElem","ruleDelete","delBtnElem","isGroup","isBtnClick","addGroupSuccess","eventTarget","dltGroupBtn","groupIdCounter","headerTemplateFn","andInpElem","orInpElem","andLblElem","orLblElem","btnGroupId","groupDelete","Button","iconCss","rippleEffect","selector","childElems","grpLen","addGroups","notElem","classList","add","args_2","notCondition","undefined","DropDownButton","items","beforeOpen","grpId","chgrpId","childGroupID","groupHdr","getRuleCollection","headerFn","notifyChange","grpElement","ruleElement","format","getFormat","intl","formatDate","templateChange","updateRules","grpElem","prevOper","arrOper","grpEle","destroyControls","changeValue","contains","dateElement","rbValue","parseInt","immediateModeDelay","window","clearInterval","timer","setInterval","filterValue","grID","rlID","ele","eventsArgs","changeValueSuccessCallBack","ddl","item","popupObj","getItemData","customArgs","isInteracted","previousItemData","prevItemData","previousItem","e","ddtElem","ddt","oldValue","dataBind","destroySubFields","subFieldElem","ddlArgs","ddlObj","changeFilter","flt","dl","rl","tmpRl","dArg","selectedField","fieldChangeSuccess","operatorElem","changeOperator","opr","selectedIndex","operatorChangeSuccess","changeRuleValues","tempRule","tooltipElem","createSubFields","nextElementSibling","remove","subFilterCounter","insertBefore","ruleId","subFieldData","subField","toString","currOper","prevValue","parentElem","operatorList","oprElem","childElementCount","fieldObj","renderValues","ddlOperator","operatorModel","isField","popup","divElement","templateDestroy","templateElement","elemId","temp","templateElements","getValue","elementId","elements","getValues","original","fieldColl","dataObj","fieldStr","createNestedObject","lastIndex","k","getDistinctValues","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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"}