@syncfusion/ej2-querybuilder 30.1.42 → 30.2.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -233,37 +233,71 @@ var QueryBuilder = /** @class */ (function (_super) {
233
233
  QueryBuilder.prototype.reset = function () {
234
234
  this.isImportRules = false;
235
235
  var bodyElem = this.element.querySelector('.e-group-body');
236
- var inputElement = this.element.querySelectorAll('input.e-control');
237
- for (var i = 0, len = inputElement.length; i < len; i++) {
238
- if (inputElement[i].className.indexOf('e-tooltip') > -1) {
239
- getComponent(inputElement[i], 'tooltip').destroy();
236
+ var inputElements = this.element.querySelectorAll('input.e-control');
237
+ var batchSize = 20;
238
+ var currentIndex = 0;
239
+ var processBatch = function () {
240
+ var endIndex = Math.min(currentIndex + batchSize, inputElements.length);
241
+ for (var i = currentIndex; i < endIndex; i++) {
242
+ var element = inputElements[i];
243
+ try {
244
+ if (element.className.indexOf('e-tooltip') > -1) {
245
+ var tooltip = getComponent(element, 'tooltip');
246
+ if (tooltip) {
247
+ tooltip.destroy();
248
+ }
249
+ }
250
+ else if (element.parentElement && element.parentElement.className.indexOf('e-tooltip') > -1) {
251
+ var tooltip = getComponent(element.parentElement, 'tooltip');
252
+ if (tooltip) {
253
+ tooltip.destroy();
254
+ }
255
+ }
256
+ }
257
+ catch (e) {
258
+ console.warn('Error destroying tooltip:', e);
259
+ }
240
260
  }
241
- else if (inputElement[i].parentElement.className.indexOf('e-tooltip') > -1) {
242
- getComponent(inputElement[i].parentElement, 'tooltip').destroy();
261
+ currentIndex = endIndex;
262
+ if (currentIndex < inputElements.length) {
263
+ requestAnimationFrame(processBatch);
243
264
  }
265
+ };
266
+ if (inputElements.length > 0) {
267
+ processBatch();
244
268
  }
245
269
  if (bodyElem) {
246
- bodyElem.innerHTML = '';
270
+ bodyElem.textContent = '';
247
271
  }
248
272
  else {
273
+ var fragment = document.createDocumentFragment();
249
274
  var grpContainer = this.createElement('div', { attrs: { class: 'e-group-container' } });
250
275
  var grpHeader = this.createElement('div', { attrs: { class: 'e-group-header' } });
251
276
  var grpBody = this.createElement('div', { attrs: { class: 'e-group-body' } });
252
- grpContainer.appendChild(grpHeader).appendChild(grpBody);
253
- this.element.appendChild(grpContainer);
277
+ grpContainer.appendChild(grpHeader);
278
+ grpContainer.appendChild(grpBody);
279
+ fragment.appendChild(grpContainer);
280
+ this.element.appendChild(fragment);
254
281
  bodyElem = this.element.querySelector('.e-group-body');
255
282
  }
256
283
  if (this.headerTemplate && this.isRoot) {
257
- this.element.innerHTML = '';
284
+ this.element.textContent = '';
258
285
  this.isRoot = false;
259
286
  }
260
287
  if (this.enableNotCondition) {
261
- removeClass(this.element.querySelectorAll('.e-qb-toggle'), 'e-active-toggle');
288
+ var toggleElements = this.element.querySelectorAll('.e-qb-toggle');
289
+ for (var i = 0; i < toggleElements.length; i++) {
290
+ removeClass([toggleElements[i]], 'e-active-toggle');
291
+ }
292
+ }
293
+ if (bodyElem) {
294
+ bodyElem.appendChild(this.createElement('div', { attrs: { class: 'e-rule-list' } }));
262
295
  }
263
- bodyElem.appendChild(this.createElement('div', { attrs: { class: 'e-rule-list' } }));
264
296
  this.levelColl[this.element.id + '_group0'] = [0];
265
297
  this.setProperties({ rule: { condition: 'and', not: false, rules: [] } }, true);
266
- this.disableRuleCondition(bodyElem.parentElement);
298
+ if (bodyElem && bodyElem.parentElement) {
299
+ this.disableRuleCondition(bodyElem.parentElement);
300
+ }
267
301
  };
268
302
  QueryBuilder.prototype.getWrapper = function () {
269
303
  return this.element;
@@ -286,100 +320,131 @@ var QueryBuilder = /** @class */ (function (_super) {
286
320
  return '';
287
321
  };
288
322
  QueryBuilder.prototype.initialize = function () {
323
+ var _this = this;
289
324
  if (this.dataColl.length) {
290
- var columnKeys = Object.keys(this.dataColl[0]);
325
+ var columnKeys_1 = Object.keys(this.dataColl[0]);
291
326
  var cols = [];
292
- var categories = [];
293
- var type = void 0;
294
- var groupBy = false;
295
- var isDate = false;
296
- var value = void 0;
297
- var validateObj = { isRequired: true, min: 0, max: Number.MAX_VALUE };
327
+ var categories_1 = [];
328
+ var type_1;
329
+ var groupBy_1 = false;
330
+ var isDate_1 = false;
331
+ var value_1;
332
+ var validateObj_1 = { isRequired: true, min: 0, max: Number.MAX_VALUE };
298
333
  if (this.columns.length) {
299
334
  this.columnSort();
300
335
  var columns = this.columns;
301
- for (var i = 0, len = columns.length; i < len; i++) {
302
- this.updateCustomOperator(columns[i], 'initial');
303
- if (!columns[i].type) {
304
- if (columnKeys.indexOf(columns[i].field) > -1) {
305
- value = this.dataColl[0][columns[i].field];
306
- type = typeof value;
307
- if (type === 'string') {
308
- isDate = !isNaN(Date.parse(value));
336
+ columns.forEach(function (column) {
337
+ _this.updateCustomOperator(column, 'initial');
338
+ if (!column.type) {
339
+ if (columnKeys_1.indexOf(column.field) > -1) {
340
+ value_1 = _this.dataColl[0][column.field];
341
+ type_1 = typeof value_1;
342
+ if (type_1 === 'string') {
343
+ isDate_1 = !isNaN(Date.parse(value_1));
309
344
  }
310
- else if (type === 'object') {
311
- isDate = value instanceof Date && !isNaN(value.getTime());
312
- type = 'string';
345
+ else if (type_1 === 'object') {
346
+ isDate_1 = value_1 instanceof Date && !isNaN(value_1.getTime());
347
+ type_1 = 'string';
313
348
  }
314
- columns[i].type = type;
315
- isDate = false;
349
+ column.type = type_1;
350
+ isDate_1 = false;
316
351
  }
317
- type = 'string';
352
+ type_1 = 'string';
318
353
  }
319
- if (!columns[i].validation) {
320
- columns[i].validation = validateObj;
354
+ if (!column.validation) {
355
+ column.validation = validateObj_1;
321
356
  }
322
- if (columns[i].category) {
323
- groupBy = true;
357
+ if (column.category) {
358
+ groupBy_1 = true;
324
359
  }
325
360
  else {
326
- columns[i].category = this.l10n.getConstant('OtherFields');
361
+ column.category = _this.l10n.getConstant('OtherFields');
327
362
  }
328
- if (categories.indexOf(columns[i].category) < 0) {
329
- categories.push(columns[i].category);
363
+ if (categories_1.indexOf(column.category) < 0) {
364
+ categories_1.push(column.category);
330
365
  }
331
- if (!columns[i].operators ||
332
- (this.isLocale && this.isCustomOprCols.indexOf(columns[i].field) === -1)) {
333
- columns[i].operators = this.customOperators[columns[i].type + 'Operator'];
366
+ if (!column.operators ||
367
+ (_this.isLocale && _this.isCustomOprCols.indexOf(column.field) === -1)) {
368
+ column.operators = _this.customOperators[column.type + 'Operator'];
334
369
  }
335
- }
336
- if (groupBy && (categories.length > 1 || categories[0] !== this.l10n.getConstant('OtherFields'))) {
370
+ });
371
+ if (groupBy_1 && (categories_1.length > 1 || categories_1[0] !== this.l10n.getConstant('OtherFields'))) {
337
372
  this.fields = { text: 'label', value: 'field', groupBy: 'category' };
338
373
  }
339
374
  this.updateSubFieldsFromColumns(this.columns);
340
375
  }
341
376
  else {
342
- for (var i = 0, len = columnKeys.length; i < len; i++) {
343
- value = this.dataColl[0][columnKeys[i]];
344
- type = typeof value;
345
- if (type === 'string') {
346
- isDate = !isNaN(Date.parse(value));
347
- }
348
- else if (type === 'object' && !Object.keys(value).length) {
349
- isDate = value instanceof Date && !isNaN(value.getTime());
350
- type = 'string';
351
- }
352
- cols[i] = { 'field': columnKeys[i], 'label': columnKeys[i], 'type': isDate ? 'date' : type,
353
- 'validation': validateObj };
354
- isDate = false;
377
+ for (var i = 0, len = columnKeys_1.length; i < len; i++) {
378
+ value_1 = this.dataColl[0][columnKeys_1[i]];
379
+ type_1 = typeof value_1;
380
+ if (type_1 === 'string') {
381
+ isDate_1 = !isNaN(Date.parse(value_1));
382
+ }
383
+ else if (type_1 === 'object' && !Object.keys(value_1).length) {
384
+ isDate_1 = value_1 instanceof Date && !isNaN(value_1.getTime());
385
+ type_1 = 'string';
386
+ }
387
+ cols[i] = {
388
+ 'field': columnKeys_1[i], 'label': columnKeys_1[i], 'type': isDate_1 ? 'date' : type_1,
389
+ 'validation': validateObj_1
390
+ };
391
+ isDate_1 = false;
355
392
  cols[i].operators = this.customOperators[cols[i].type + 'Operator'];
356
- if (type === 'object') {
357
- this.updateSubFields(value, cols[i]);
393
+ if (type_1 === 'object') {
394
+ this.updateSubFields(value_1, cols[i]);
358
395
  }
359
396
  }
360
397
  this.columns = cols;
361
398
  }
362
399
  }
363
400
  else if (this.columns && this.columns.length) {
364
- var columns = this.columns;
365
- for (var i = 0, len = columns.length; i < len; i++) {
366
- if (columns[i].category && columns[i].category !== this.l10n.getConstant('OtherFields')) {
367
- this.fields = { text: 'label', value: 'field', groupBy: 'category' };
401
+ if (this.sortDirection !== 'Default') {
402
+ this.columnSort();
403
+ }
404
+ this.processColumnsInBatches();
405
+ if (this.columns.length > 50) {
406
+ setTimeout(function () {
407
+ _this.updateSubFieldsFromColumns(_this.columns);
408
+ }, 0);
409
+ }
410
+ else {
411
+ this.updateSubFieldsFromColumns(this.columns);
412
+ }
413
+ }
414
+ this.trigger('dataBound', { type: 'dataBound' });
415
+ };
416
+ QueryBuilder.prototype.processColumnsInBatches = function () {
417
+ var _this = this;
418
+ var columns = this.columns;
419
+ var batchSize = 10;
420
+ var processedCount = 0;
421
+ var processBatch = function () {
422
+ var endIdx = Math.min(processedCount + batchSize, columns.length);
423
+ for (var i = processedCount; i < endIdx; i++) {
424
+ if (columns[i].category && columns[i].category !== _this.l10n.getConstant('OtherFields')) {
425
+ _this.fields = { text: 'label', value: 'field', groupBy: 'category' };
368
426
  }
369
427
  else {
370
- columns[i].category = this.l10n.getConstant('OtherFields');
428
+ columns[i].category = _this.l10n.getConstant('OtherFields');
371
429
  }
372
- this.updateCustomOperator(columns[i], 'initial');
430
+ _this.updateCustomOperator(columns[i], 'initial');
373
431
  if (!columns[i].operators ||
374
- (this.isLocale && this.isCustomOprCols.indexOf(columns[i].field) === -1)) {
375
- columns[i].operators = this.customOperators[columns[i].type + 'Operator'];
432
+ (_this.isLocale && _this.isCustomOprCols.indexOf(columns[i].field) === -1)) {
433
+ columns[i].operators = _this.customOperators[columns[i].type + 'Operator'];
376
434
  }
377
435
  }
378
- this.updateSubFieldsFromColumns(this.columns);
379
- }
380
- this.trigger('dataBound', { type: 'dataBound' });
436
+ processedCount = endIdx;
437
+ if (processedCount < columns.length) {
438
+ requestAnimationFrame(processBatch);
439
+ }
440
+ };
441
+ processBatch();
381
442
  };
382
443
  QueryBuilder.prototype.updateSubFieldsFromColumns = function (col, field) {
444
+ if (col.length > 50) {
445
+ this.updateSubFieldsLarge(col, field);
446
+ return;
447
+ }
383
448
  for (var i = 0; i < col.length; i++) {
384
449
  if (this.separator !== '' && col[i].field.indexOf(this.separator) < 0) {
385
450
  col[i].field = field ? field + this.separator + col[i].field : col[i].field;
@@ -396,6 +461,39 @@ var QueryBuilder = /** @class */ (function (_super) {
396
461
  }
397
462
  }
398
463
  };
464
+ QueryBuilder.prototype.updateSubFieldsLarge = function (col, field) {
465
+ var _this = this;
466
+ var i = 0;
467
+ var colLength = col.length;
468
+ var processNextBatch = function () {
469
+ var endIdx = Math.min(i + 10, colLength);
470
+ for (; i < endIdx; i++) {
471
+ if (_this.separator !== '' && col[i].field.indexOf(_this.separator) < 0) {
472
+ col[i].field = field ? field + _this.separator + col[i].field : col[i].field;
473
+ }
474
+ if (col[i].operators) {
475
+ _this.updateCustomOperator(col[i]);
476
+ }
477
+ else if (col[i].type && col[i].type !== 'object') {
478
+ col[i].operators = _this.customOperators[col[i].type + 'Operator'];
479
+ }
480
+ }
481
+ if (i < colLength) {
482
+ requestAnimationFrame(processNextBatch);
483
+ }
484
+ else {
485
+ setTimeout(function () {
486
+ for (var j = 0; j < colLength; j++) {
487
+ if (col[j].columns) {
488
+ col[j].type = 'object';
489
+ _this.updateSubFieldsFromColumns(col[j].columns, col[j].field);
490
+ }
491
+ }
492
+ }, 0);
493
+ }
494
+ };
495
+ processNextBatch();
496
+ };
399
497
  QueryBuilder.prototype.updateSubFields = function (value, col, data) {
400
498
  var sampCol;
401
499
  col.columns = [];
@@ -565,8 +663,10 @@ var QueryBuilder = /** @class */ (function (_super) {
565
663
  }
566
664
  args = { groupID: groupID, cancel: false, type: 'condition', value: targetValue.toLowerCase() };
567
665
  if (this.enableNotCondition) {
568
- args = { groupID: groupID, cancel: false, type: 'condition', value: targetValue.toLowerCase(),
569
- 'not': ariaChecked };
666
+ args = {
667
+ groupID: groupID, cancel: false, type: 'condition', value: targetValue.toLowerCase(),
668
+ 'not': ariaChecked
669
+ };
570
670
  }
571
671
  }
572
672
  if (!this.isImportRules) {
@@ -664,7 +764,7 @@ var QueryBuilder = /** @class */ (function (_super) {
664
764
  QueryBuilder.prototype.appendRuleElem = function (target, column, type, parentId, action, rule) {
665
765
  var ruleElem;
666
766
  var elem;
667
- var ruleListElem = target.querySelector('.e-rule-list');
767
+ var ruleListElem = target && target.querySelector('.e-rule-list');
668
768
  var args;
669
769
  if (type === 'change') {
670
770
  ruleElem = select('#' + parentId, target);
@@ -791,7 +891,9 @@ var QueryBuilder = /** @class */ (function (_super) {
791
891
  }
792
892
  };
793
893
  QueryBuilder.prototype.addRuleSuccessCallBack = function (args, trgt, rule, col, act, pId, isRlTmp) {
794
- var height = (this.element.className.indexOf('e-device') > -1) ? '250px' : '200px';
894
+ var _this = this;
895
+ var isVertical = this.element.className.indexOf('e-device') > -1 || this.displayMode === 'Vertical';
896
+ var height = isVertical ? '250px' : '200px';
795
897
  var ruleID;
796
898
  var column = (rule && rule.field) ? this.getColumn(rule.field) : col ? col : this.columns[0];
797
899
  var operators;
@@ -799,15 +901,26 @@ var QueryBuilder = /** @class */ (function (_super) {
799
901
  var ruleElem;
800
902
  var newRule = { 'label': '', 'field': '', 'type': '', 'operator': '' };
801
903
  if (!args.cancel) {
904
+ var fragment = document.createDocumentFragment();
802
905
  if (column && column.ruleTemplate && rule.field) {
803
906
  this.selectedColumn = column;
804
907
  operators = this.selectedColumn.operators;
805
- newRule = { 'label': column.label, 'field': column.field, 'type': column.type, 'operator': operators[0].value };
908
+ newRule = {
909
+ 'label': column.label,
910
+ 'field': column.field,
911
+ 'type': column.type,
912
+ 'operator': operators[0].value
913
+ };
806
914
  var passedRule = Object.keys(rule).length ? rule : newRule;
807
915
  ruleElem = this.appendRuleElem(trgt, column, act, pId, 'field', passedRule);
808
- var args_1 = { requestType: 'template-create', action: 'insert-rule', ruleID: ruleElem.id,
809
- fields: this.fields, rule: passedRule };
810
- this.trigger('actionBegin', args_1);
916
+ var actionArgs = {
917
+ requestType: 'template-initialize',
918
+ ruleID: ruleElem.id,
919
+ action: 'insert-rule',
920
+ fields: this.fields,
921
+ rule: passedRule
922
+ };
923
+ this.trigger('actionBegin', actionArgs);
811
924
  }
812
925
  else {
813
926
  ruleElem = this.appendRuleElem(trgt, column, act, pId, 'field');
@@ -822,139 +935,30 @@ var QueryBuilder = /** @class */ (function (_super) {
822
935
  addClass([element], 'e-round');
823
936
  addClass([element], 'e-icon-btn');
824
937
  element.setAttribute('title', this.l10n.getConstant('DeleteRule'));
825
- var spanElement = this.createElement('span', { attrs: { class: 'e-btn-icon e-icons e-delete-icon' } });
826
- ruleElem.querySelector('.e-rule-delete').appendChild(spanElement);
938
+ var spanElement = this.createElement('span', {
939
+ attrs: { class: 'e-btn-icon e-icons e-delete-icon' }
940
+ });
941
+ element.appendChild(spanElement);
827
942
  }
828
943
  if (!this.showButtons.ruleDelete) {
829
944
  element.classList.add('e-button-hide');
830
945
  }
831
946
  }
832
- if (this.displayMode === 'Vertical' || this.element.className.indexOf('e-device') > -1) {
833
- ruleElem.className = 'e-rule-container e-vertical-mode';
834
- }
835
- else {
836
- ruleElem.className = 'e-rule-container e-horizontal-mode';
837
- }
947
+ ruleElem.className = 'e-rule-container ' + (isVertical ? 'e-vertical-mode' : 'e-horizontal-mode');
838
948
  var previousRuleElem = ruleElem.previousElementSibling;
839
- if (this.enableSeparateConnector) {
840
- var prevRule = void 0;
841
- var ruleContainer = void 0;
842
- if (previousRuleElem && previousRuleElem.classList.contains('e-group-container')) {
843
- ruleContainer = previousRuleElem.querySelectorAll('.e-rule-container');
844
- previousRuleElem = ruleContainer[ruleContainer.length - 1];
845
- }
846
- if (previousRuleElem && previousRuleElem.classList.contains('e-rule-container')) {
847
- prevRule = this.getRule(previousRuleElem);
848
- }
849
- if (this.headerTemplate && previousRuleElem && prevRule) {
850
- this.headerTemplateFn(previousRuleElem, false, prevRule.condition, prevRule, previousRuleElem.id);
851
- }
852
- else if (isNullOrUndefined(previousRuleElem) && ruleElem.id !== this.element.id + '_group0_rule0') {
853
- var group = ruleElem.closest('.e-group-container');
854
- if (group && group.previousElementSibling) {
855
- var prevElem = group.previousElementSibling;
856
- var prevRuleContainer = prevElem.querySelectorAll('.e-rule-container');
857
- if (prevElem.classList.contains('e-group-container')) {
858
- prevElem = prevRuleContainer[prevRuleContainer.length - 1];
859
- }
860
- if (prevElem.classList.contains('e-rule-container')) {
861
- var prevRule_1 = this.getRule(prevElem);
862
- this.headerTemplateFn(prevElem, false, prevRule_1.condition, prevRule_1, prevElem.id, true);
863
- }
864
- }
865
- else {
866
- this.headerTemplateFn(ruleElem, false, rule.condition, rule, ruleElem.id, true);
867
- }
868
- }
869
- }
870
- else {
871
- if (previousRuleElem && previousRuleElem.className.indexOf('e-rule-container') > -1) {
872
- if (ruleElem.className.indexOf('e-joined-rule') < 0) {
873
- ruleElem.className += ' e-joined-rule';
874
- }
875
- if (previousRuleElem.className.indexOf('e-prev-joined-rule') < 0) {
876
- previousRuleElem.className += ' e-prev-joined-rule';
877
- }
878
- }
879
- }
880
- if (previousRuleElem && previousRuleElem.className.indexOf('e-group-container') > -1 &&
881
- ruleElem.className.indexOf('e-separate-rule') < 0) {
882
- ruleElem.className += ' e-separate-rule';
883
- }
949
+ this.processAdjacentElements(ruleElem, previousRuleElem, rule);
884
950
  if (!this.isImportRules) {
885
951
  this.updateAddedRule(trgt, rule, newRule, isRlTmp, pId, this.enableSeparateConnector ? true : null);
886
952
  }
953
+ var ruleCount = this.rule.rules.length;
887
954
  if (!column || (column && !column.ruleTemplate) || !rule.field) {
888
- if (this.fieldMode === 'Default') {
889
- var ddlField = void 0;
890
- var ddlValue = void 0;
891
- if (this.separator && rule.field) {
892
- ddlValue = this.GetRootColumnName(rule.field);
893
- }
894
- else if (this.autoSelectField) {
895
- ddlValue = this.GetRootColumnName(rule.field);
896
- }
897
- else {
898
- ddlValue = this.isImportRules ? this.GetRootColumnName(rule.field) : rule.field;
899
- }
900
- ddlField = {
901
- dataSource: this.columns,
902
- fields: this.fields, placeholder: this.l10n.getConstant('SelectField'),
903
- popupHeight: ((this.columns.length > 5) ? height : 'auto'), close: this.fieldClose.bind(this, ruleElem.id + '_filterkey'),
904
- change: this.changeField.bind(this), value: rule ? ddlValue : null, open: this.popupOpen.bind(this, true), cssClass: 'qb-dropdownlist'
905
- };
906
- if (this.fieldModel) {
907
- ddlField = __assign({}, ddlField, this.fieldModel);
908
- }
909
- dropDownList = new DropDownList(ddlField);
910
- dropDownList.appendTo('#' + ruleElem.id + '_filterkey');
911
- var ddlVal = void 0;
912
- if (this.separator && rule.field) {
913
- ddlVal = this.GetRootColumnName(rule.field);
914
- }
915
- else {
916
- ddlVal = this.isImportRules ? this.GetRootColumnName(rule.field) :
917
- dropDownList.value;
918
- }
919
- this.selectedColumn = dropDownList.getDataByValue(ddlVal);
920
- if (Object.keys(rule).length) {
921
- this.changeRule(rule, {
922
- element: dropDownList.element, itemData: this.selectedColumn
923
- });
924
- }
955
+ if (ruleCount > 20) {
956
+ setTimeout(function () {
957
+ _this.applyFieldComponent(ruleElem, rule, height);
958
+ }, 0);
925
959
  }
926
960
  else {
927
- var ddlField = void 0;
928
- var ddlValue = this.isImportRules ? rule.field : rule.field;
929
- this.dummyDropdownTreeDs = extend([], this.columns, [], true);
930
- this.updateDropdowntreeDS(this.dummyDropdownTreeDs);
931
- ddlField = {
932
- fields: { dataSource: this.dummyDropdownTreeDs,
933
- value: 'field', text: 'label', child: 'columns', expanded: 'expanded', selectable: 'selectable' },
934
- placeholder: this.l10n.getConstant('SelectField'), showClearButton: false,
935
- popupHeight: ((this.columns.length > 5) ? height : 'auto'), changeOnBlur: false,
936
- change: this.changeField.bind(this), value: !isNullOrUndefined(ddlValue) ? [ddlValue] : null,
937
- open: this.popupOpen.bind(this, false), treeSettings: { expandOn: 'Click' },
938
- cssClass: 'e-qb-ddt', filtering: this.dropdownTreeFiltering.bind(this), close: this.dropdownTreeClose.bind(this)
939
- };
940
- if (this.fieldModel) {
941
- ddlField = __assign({}, ddlField, this.fieldModel);
942
- }
943
- var dropdowntree = new DropDownTree(ddlField);
944
- dropdowntree.appendTo('#' + ruleElem.id + '_filterkey');
945
- if (!isNullOrUndefined(dropdowntree.value)) {
946
- var value = this.getLabelFromColumn(dropdowntree.value[0]);
947
- dropdowntree.element.value = value;
948
- }
949
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
950
- var ddlVal = !isNullOrUndefined(rule.field) ?
951
- this.GetRootColumnName(rule.field) : dropdowntree.value;
952
- this.selectedColumn = this.getColumn(ddlVal);
953
- if (Object.keys(rule).length) {
954
- this.changeRule(rule, {
955
- element: dropdowntree.element, itemData: this.selectedColumn
956
- });
957
- }
961
+ this.applyFieldComponent(ruleElem, rule, height);
958
962
  }
959
963
  }
960
964
  ruleID = ruleElem.id.replace(this.element.id + '_', '');
@@ -963,46 +967,204 @@ var QueryBuilder = /** @class */ (function (_super) {
963
967
  this.ruleLock(lockRuleTarget);
964
968
  }
965
969
  if (!this.isImportRules && !this.prvtEvtTgrDaD) {
966
- this.trigger('change', { groupID: trgt.id.replace(this.element.id + '_', ''), ruleID: ruleID, type: 'insertRule' });
970
+ this.trigger('change', {
971
+ groupID: trgt.id.replace(this.element.id + '_', ''),
972
+ ruleID: ruleID,
973
+ type: 'insertRule'
974
+ });
967
975
  }
968
976
  }
969
977
  if (this.enableSeparateConnector && isNullOrUndefined(rule.condition) && ruleID) {
970
978
  rule = this.getRule(ruleID);
971
979
  }
972
980
  if (this.enableSeparateConnector) {
973
- var prevElem = ruleElem.previousElementSibling;
974
- var ruleContainer = void 0;
975
- while (prevElem && !prevElem.classList.contains('e-rule-container')) {
976
- if (prevElem.classList.contains('e-group-container')) {
977
- ruleContainer = prevElem.querySelectorAll('.e-rule-container');
978
- prevElem = ruleContainer[ruleContainer.length - 1];
979
- break;
981
+ this.processConnectorElements(ruleElem);
982
+ }
983
+ };
984
+ QueryBuilder.prototype.processAdjacentElements = function (ruleElem, previousRuleElem, rule) {
985
+ if (this.enableSeparateConnector) {
986
+ if (previousRuleElem && previousRuleElem.classList.contains('e-group-container')) {
987
+ var ruleContainer = previousRuleElem.querySelectorAll('.e-rule-container');
988
+ previousRuleElem = ruleContainer[ruleContainer.length - 1];
989
+ }
990
+ if (previousRuleElem && previousRuleElem.classList.contains('e-rule-container')) {
991
+ var prevRule = this.getRule(previousRuleElem);
992
+ if (this.headerTemplate) {
993
+ this.headerTemplateFn(previousRuleElem, false, prevRule.condition, prevRule, previousRuleElem.id);
980
994
  }
981
- prevElem = prevElem.previousElementSibling;
982
995
  }
983
- if (this.headerTemplate && prevElem) {
996
+ else if (isNullOrUndefined(previousRuleElem) && ruleElem.id !== this.element.id + '_group0_rule0') {
997
+ this.handleOrphanedRuleElement(ruleElem, rule);
998
+ }
999
+ }
1000
+ else {
1001
+ if (previousRuleElem && previousRuleElem.className.indexOf('e-rule-container') > -1) {
1002
+ ruleElem.classList.add('e-joined-rule');
1003
+ previousRuleElem.classList.add('e-prev-joined-rule');
1004
+ }
1005
+ }
1006
+ if (previousRuleElem && previousRuleElem.className.indexOf('e-group-container') > -1 &&
1007
+ ruleElem.className.indexOf('e-separate-rule') < 0) {
1008
+ ruleElem.className += ' e-separate-rule';
1009
+ }
1010
+ };
1011
+ QueryBuilder.prototype.handleOrphanedRuleElement = function (ruleElem, rule) {
1012
+ var group = ruleElem.closest('.e-group-container');
1013
+ if (group && group.previousElementSibling) {
1014
+ var prevElem = group.previousElementSibling;
1015
+ var prevRuleContainer = prevElem.querySelectorAll('.e-rule-container');
1016
+ if (prevElem.classList.contains('e-group-container')) {
1017
+ prevElem = prevRuleContainer[prevRuleContainer.length - 1];
1018
+ }
1019
+ if (prevElem.classList.contains('e-rule-container')) {
984
1020
  var prevRule = this.getRule(prevElem);
985
- var args_2 = { requestType: 'rule-template-create', ruleID: prevElem.id, condition: prevRule.condition,
986
- notCondition: this.enableNotCondition ? true : undefined };
987
- this.trigger('actionBegin', args_2);
1021
+ this.headerTemplateFn(prevElem, false, prevRule.condition, prevRule, prevElem.id, true);
988
1022
  }
989
- else if (isNullOrUndefined(prevElem) && ruleElem.id !== this.element.id + '_group0_rule0') {
990
- var group = ruleElem.closest('.e-group-container');
991
- if (group && group.previousElementSibling && group.previousElementSibling.previousElementSibling) {
992
- var prevElem_1 = group.previousElementSibling.previousElementSibling;
993
- if (prevElem_1.classList.contains('e-group-container')) {
994
- var ruleContainer_1 = prevElem_1.querySelectorAll('.e-rule-container');
995
- prevElem_1 = ruleContainer_1[ruleContainer_1.length - 1];
996
- }
997
- if (prevElem_1.classList.contains('e-rule-container')) {
998
- var prevRule = this.getRule(prevElem_1);
999
- var args_3 = { requestType: 'rule-template-create', ruleID: prevElem_1.id,
1000
- condition: prevRule.condition, notCondition: this.enableNotCondition ? true : undefined };
1001
- this.trigger('actionBegin', args_3);
1002
- }
1003
- }
1023
+ }
1024
+ else {
1025
+ this.headerTemplateFn(ruleElem, false, rule.condition, rule, ruleElem.id, true);
1026
+ }
1027
+ };
1028
+ QueryBuilder.prototype.processConnectorElements = function (ruleElem) {
1029
+ var prevElem = ruleElem.previousElementSibling;
1030
+ var ruleContainer;
1031
+ while (prevElem && !prevElem.classList.contains('e-rule-container')) {
1032
+ if (prevElem.classList.contains('e-group-container')) {
1033
+ ruleContainer = prevElem.querySelectorAll('.e-rule-container');
1034
+ prevElem = ruleContainer[ruleContainer.length - 1];
1035
+ break;
1004
1036
  }
1005
- this.setMultiConnector(ruleElem);
1037
+ prevElem = prevElem.previousElementSibling;
1038
+ }
1039
+ if (this.headerTemplate && prevElem) {
1040
+ var prevRule = this.getRule(prevElem);
1041
+ var args = {
1042
+ requestType: 'rule-template-create',
1043
+ ruleID: prevElem.id,
1044
+ condition: prevRule.condition,
1045
+ notCondition: this.enableNotCondition ? true : undefined
1046
+ };
1047
+ this.trigger('actionBegin', args);
1048
+ }
1049
+ else if (isNullOrUndefined(prevElem) && ruleElem.id !== this.element.id + '_group0_rule0') {
1050
+ this.handleOrphanedConnectorElement(ruleElem);
1051
+ }
1052
+ this.setMultiConnector(ruleElem);
1053
+ };
1054
+ QueryBuilder.prototype.handleOrphanedConnectorElement = function (ruleElem) {
1055
+ var group = ruleElem.closest('.e-group-container');
1056
+ if (group && group.previousElementSibling && group.previousElementSibling.previousElementSibling) {
1057
+ var prevElem = group.previousElementSibling.previousElementSibling;
1058
+ if (prevElem.classList.contains('e-group-container')) {
1059
+ var ruleContainer = prevElem.querySelectorAll('.e-rule-container');
1060
+ prevElem = ruleContainer[ruleContainer.length - 1];
1061
+ }
1062
+ if (prevElem.classList.contains('e-rule-container')) {
1063
+ var prevRule = this.getRule(prevElem);
1064
+ var args = {
1065
+ requestType: 'rule-template-create',
1066
+ ruleID: prevElem.id,
1067
+ condition: prevRule.condition,
1068
+ notCondition: this.enableNotCondition ? true : undefined
1069
+ };
1070
+ this.trigger('actionBegin', args);
1071
+ }
1072
+ }
1073
+ };
1074
+ QueryBuilder.prototype.applyFieldComponent = function (ruleElem, rule, height) {
1075
+ if (this.fieldMode === 'Default') {
1076
+ this.applyDropdownListComponent(ruleElem, rule, height);
1077
+ }
1078
+ else {
1079
+ this.applyDropdownTreeComponent(ruleElem, rule, height);
1080
+ }
1081
+ };
1082
+ QueryBuilder.prototype.applyDropdownListComponent = function (ruleElem, rule, height) {
1083
+ var ddlField;
1084
+ var ddlValue;
1085
+ if (this.separator && rule.field) {
1086
+ ddlValue = this.GetRootColumnName(rule.field);
1087
+ }
1088
+ else if (this.autoSelectField) {
1089
+ ddlValue = this.GetRootColumnName(rule.field);
1090
+ }
1091
+ else {
1092
+ ddlValue = this.isImportRules ? this.GetRootColumnName(rule.field) : rule.field;
1093
+ }
1094
+ ddlField = {
1095
+ dataSource: this.columns,
1096
+ fields: this.fields,
1097
+ placeholder: this.l10n.getConstant('SelectField'),
1098
+ popupHeight: ((this.columns.length > 5) ? height : 'auto'),
1099
+ close: this.fieldClose.bind(this, ruleElem.id + '_filterkey'),
1100
+ change: this.changeField.bind(this),
1101
+ value: rule ? ddlValue : null,
1102
+ open: this.popupOpen.bind(this, true),
1103
+ cssClass: 'qb-dropdownlist'
1104
+ };
1105
+ if (this.fieldModel) {
1106
+ ddlField = __assign({}, ddlField, this.fieldModel);
1107
+ }
1108
+ var dropDownList = new DropDownList(ddlField);
1109
+ dropDownList.appendTo('#' + ruleElem.id + '_filterkey');
1110
+ var ddlVal;
1111
+ if (this.separator && rule.field) {
1112
+ ddlVal = this.GetRootColumnName(rule.field);
1113
+ }
1114
+ else {
1115
+ ddlVal = this.isImportRules ? this.GetRootColumnName(rule.field) : dropDownList.value;
1116
+ }
1117
+ this.selectedColumn = dropDownList.getDataByValue(ddlVal);
1118
+ if (Object.keys(rule).length) {
1119
+ this.changeRule(rule, {
1120
+ element: dropDownList.element,
1121
+ itemData: this.selectedColumn
1122
+ });
1123
+ }
1124
+ };
1125
+ QueryBuilder.prototype.applyDropdownTreeComponent = function (ruleElem, rule, height) {
1126
+ var ddlField;
1127
+ var ddlValue = this.isImportRules ? rule.field : rule.field;
1128
+ this.dummyDropdownTreeDs = extend([], this.columns, [], true);
1129
+ this.updateDropdowntreeDS(this.dummyDropdownTreeDs);
1130
+ ddlField = {
1131
+ fields: {
1132
+ dataSource: this.dummyDropdownTreeDs,
1133
+ value: 'field',
1134
+ text: 'label',
1135
+ child: 'columns',
1136
+ expanded: 'expanded',
1137
+ selectable: 'selectable'
1138
+ },
1139
+ placeholder: this.l10n.getConstant('SelectField'),
1140
+ showClearButton: false,
1141
+ popupHeight: ((this.columns.length > 5) ? height : 'auto'),
1142
+ changeOnBlur: false,
1143
+ change: this.changeField.bind(this),
1144
+ value: !isNullOrUndefined(ddlValue) ? [ddlValue] : null,
1145
+ open: this.popupOpen.bind(this, false),
1146
+ treeSettings: { expandOn: 'Click' },
1147
+ cssClass: 'e-qb-ddt',
1148
+ filtering: this.dropdownTreeFiltering.bind(this),
1149
+ close: this.dropdownTreeClose.bind(this)
1150
+ };
1151
+ if (this.fieldModel) {
1152
+ ddlField = __assign({}, ddlField, this.fieldModel);
1153
+ }
1154
+ var dropdowntree = new DropDownTree(ddlField);
1155
+ dropdowntree.appendTo('#' + ruleElem.id + '_filterkey');
1156
+ if (!isNullOrUndefined(dropdowntree.value)) {
1157
+ var value = this.getLabelFromColumn(dropdowntree.value[0]);
1158
+ dropdowntree.element.value = value;
1159
+ }
1160
+ var ddlVal = !isNullOrUndefined(rule.field) ?
1161
+ this.GetRootColumnName(rule.field) : dropdowntree.value;
1162
+ this.selectedColumn = this.getColumn(ddlVal);
1163
+ if (Object.keys(rule).length) {
1164
+ this.changeRule(rule, {
1165
+ element: dropdowntree.element,
1166
+ itemData: this.selectedColumn
1167
+ });
1006
1168
  }
1007
1169
  };
1008
1170
  QueryBuilder.prototype.dropdownTreeFiltering = function (args) {
@@ -1017,7 +1179,6 @@ var QueryBuilder = /** @class */ (function (_super) {
1017
1179
  var ruleElem = document.getElementById(ruleElemID);
1018
1180
  this.ddTree = getComponent(ruleElem.querySelector('input.e-dropdowntree'), 'dropdowntree');
1019
1181
  var hierarchicalData = extend([], this.columns, [], true);
1020
- // Cancel the default filtering.
1021
1182
  args.cancel = true;
1022
1183
  if (args.text === '') {
1023
1184
  this.changeDataSource(hierarchicalData);
@@ -1177,7 +1338,8 @@ var QueryBuilder = /** @class */ (function (_super) {
1177
1338
  }
1178
1339
  };
1179
1340
  QueryBuilder.prototype.renderToolTip = function (element) {
1180
- var tooltip = new Tooltip({ content: this.l10n.getConstant('ValidationMessage'), isSticky: true,
1341
+ var tooltip = new Tooltip({
1342
+ content: this.l10n.getConstant('ValidationMessage'), isSticky: true,
1181
1343
  position: 'BottomCenter', cssClass: 'e-querybuilder-error', afterClose: function () {
1182
1344
  tooltip.destroy();
1183
1345
  }, beforeOpen: function (args) {
@@ -1185,7 +1347,8 @@ var QueryBuilder = /** @class */ (function (_super) {
1185
1347
  if (tooltipCloseElement) {
1186
1348
  tooltipCloseElement.style.display = 'none';
1187
1349
  }
1188
- } });
1350
+ }
1351
+ });
1189
1352
  tooltip.appendTo(element);
1190
1353
  tooltip.open(element);
1191
1354
  };
@@ -1343,7 +1506,6 @@ var QueryBuilder = /** @class */ (function (_super) {
1343
1506
  groupElem.appendChild(groupHdrElem);
1344
1507
  grpBodyElem.appendChild(rulesElem);
1345
1508
  groupElem.appendChild(grpBodyElem);
1346
- // create button group in OR and AND process
1347
1509
  if (!this.headerTemplate) {
1348
1510
  if (this.allowDragAndDrop) {
1349
1511
  dragClsName = 'e-icons e-drag-qb-rule';
@@ -1351,8 +1513,12 @@ var QueryBuilder = /** @class */ (function (_super) {
1351
1513
  else {
1352
1514
  dragClsName = 'e-icons e-drag-qb-rule e-hidden';
1353
1515
  }
1354
- var spanDragElement = this.createElement('span', { attrs: { class: dragClsName, 'aria-label': 'drag handle',
1355
- title: 'drag handle' } });
1516
+ var spanDragElement = this.createElement('span', {
1517
+ attrs: {
1518
+ class: dragClsName, 'aria-label': 'drag handle',
1519
+ title: 'drag handle'
1520
+ }
1521
+ });
1356
1522
  groupHdrElem.appendChild(spanDragElement);
1357
1523
  var className = this.enableSeparateConnector && !isConnector ? 'e-lib e-btn-group e-qb-toggle-btn' : 'e-lib e-btn-group';
1358
1524
  glueElem = this.createElement('div', { attrs: { class: className, role: 'group' } });
@@ -1370,13 +1536,17 @@ var QueryBuilder = /** @class */ (function (_super) {
1370
1536
  }
1371
1537
  inputElem = this.createElement('input', { attrs: { type: 'radio', class: 'e-btngroup-and', value: 'AND' } });
1372
1538
  glueElem.appendChild(inputElem);
1373
- labelElem = this.createElement('label', { attrs: { class: 'e-lib e-btn e-btngroup-and-lbl e-small' },
1374
- innerHTML: this.l10n.getConstant('AND') });
1539
+ labelElem = this.createElement('label', {
1540
+ attrs: { class: 'e-lib e-btn e-btngroup-and-lbl e-small' },
1541
+ innerHTML: this.l10n.getConstant('AND')
1542
+ });
1375
1543
  glueElem.appendChild(labelElem);
1376
1544
  inputElem = this.createElement('input', { attrs: { type: 'radio', class: 'e-btngroup-or', value: 'OR' } });
1377
1545
  glueElem.appendChild(inputElem);
1378
- labelElem = this.createElement('label', { attrs: { class: 'e-lib e-btn e-btngroup-or-lbl e-small' },
1379
- innerHTML: this.l10n.getConstant('OR') });
1546
+ labelElem = this.createElement('label', {
1547
+ attrs: { class: 'e-lib e-btn e-btngroup-or-lbl e-small' },
1548
+ innerHTML: this.l10n.getConstant('OR')
1549
+ });
1380
1550
  glueElem.appendChild(labelElem);
1381
1551
  groupHdrElem.appendChild(glueElem);
1382
1552
  grpActElem = this.createElement('div', { attrs: { class: 'e-group-action' } });
@@ -1409,8 +1579,12 @@ var QueryBuilder = /** @class */ (function (_super) {
1409
1579
  else {
1410
1580
  dragClsName = 'e-icons e-drag-qb-rule e-hidden';
1411
1581
  }
1412
- var spanDragElement = this.createElement('span', { attrs: { class: dragClsName, 'aria-label': 'drag handle',
1413
- title: 'drag handle' } });
1582
+ var spanDragElement = this.createElement('span', {
1583
+ attrs: {
1584
+ class: dragClsName, 'aria-label': 'drag handle',
1585
+ title: 'drag handle'
1586
+ }
1587
+ });
1414
1588
  fieldElem.appendChild(spanDragElement);
1415
1589
  var filterElem = this.createElement('input', { attrs: { type: 'text', class: 'e-filter-input' } });
1416
1590
  tempElem.appendChild(filterElem);
@@ -1691,9 +1865,11 @@ var QueryBuilder = /** @class */ (function (_super) {
1691
1865
  }
1692
1866
  this.updatedRule = null;
1693
1867
  if (this.headerTemplate) {
1694
- var args_4 = { requestType: 'header-template-create', ruleID: groupElem.id, condition: condition,
1695
- notCondition: this.enableNotCondition ? not : undefined };
1696
- this.trigger('actionBegin', args_4);
1868
+ var args_1 = {
1869
+ requestType: 'header-template-create', ruleID: groupElem.id, condition: condition,
1870
+ notCondition: this.enableNotCondition ? not : undefined
1871
+ };
1872
+ this.trigger('actionBegin', args_1);
1697
1873
  }
1698
1874
  else {
1699
1875
  if (this.enableSeparateConnector) {
@@ -1731,9 +1907,10 @@ var QueryBuilder = /** @class */ (function (_super) {
1731
1907
  }
1732
1908
  };
1733
1909
  QueryBuilder.prototype.setMultiConnector = function (trgt) {
1734
- if (this.enableSeparateConnector && !this.headerTemplate) {
1735
- if (trgt.previousElementSibling && this.groupElem.querySelector('.e-btn-group')) {
1736
- trgt.parentElement.insertBefore(this.groupTemplate(true).querySelector('.e-btn-group'), trgt);
1910
+ if (this.enableSeparateConnector && !this.headerTemplate && trgt.previousElementSibling) {
1911
+ var btnGroupElem = this.groupTemplate(true).querySelector('.e-btn-group');
1912
+ if (btnGroupElem) {
1913
+ trgt.parentElement.insertBefore(btnGroupElem, trgt);
1737
1914
  var notElem = trgt.previousElementSibling.childNodes[0];
1738
1915
  if (notElem.classList.contains('e-qb-toggle')) {
1739
1916
  notElem.style.display = 'none';
@@ -1776,9 +1953,11 @@ var QueryBuilder = /** @class */ (function (_super) {
1776
1953
  groupHdr = groupElem;
1777
1954
  }
1778
1955
  if (this.headerTemplate) {
1779
- args = { requestType: 'header-template-initialize', ruleID: groupElem.id,
1956
+ args = {
1957
+ requestType: 'header-template-initialize', ruleID: groupElem.id,
1780
1958
  notCondition: this.enableNotCondition ? not : undefined,
1781
- condition: condition, rule: this.getRuleCollection(rule, false), groupID: groupID };
1959
+ condition: condition, rule: this.getRuleCollection(rule, false), groupID: groupID
1960
+ };
1782
1961
  this.trigger('actionBegin', args);
1783
1962
  if (this.enableSeparateConnector && groupElem.id.indexOf('rule') !== -1) {
1784
1963
  args.requestType = 'rule-template-create';
@@ -1931,7 +2110,7 @@ var QueryBuilder = /** @class */ (function (_super) {
1931
2110
  QueryBuilder.prototype.templateChange = function (element, value, type) {
1932
2111
  var grpElem = closest(element, '.e-group-container');
1933
2112
  var eventsArgs;
1934
- var rules = this.getParentGroup(grpElem);
2113
+ var rules = grpElem && this.getParentGroup(grpElem);
1935
2114
  var ruleElem = closest(element, '.e-rule-container');
1936
2115
  var index = 0;
1937
2116
  if (this.allowValidation) {
@@ -1946,7 +2125,7 @@ var QueryBuilder = /** @class */ (function (_super) {
1946
2125
  index++;
1947
2126
  }
1948
2127
  }
1949
- var rule = rules.rules[index];
2128
+ var rule = rules && rules.rules[index];
1950
2129
  if (type === 'field') {
1951
2130
  this.selectedColumn = this.getColumn(value);
1952
2131
  }
@@ -1954,7 +2133,7 @@ var QueryBuilder = /** @class */ (function (_super) {
1954
2133
  this.selectedColumn = this.getColumn(rule.field);
1955
2134
  }
1956
2135
  var operVal;
1957
- this.previousColumn = this.getColumn(rule.field);
2136
+ this.previousColumn = rule && this.getColumn(rule.field);
1958
2137
  var beforeRules = this.getValidRules(this.rule);
1959
2138
  if (this.selectedColumn) {
1960
2139
  if (this.selectedColumn.operators) {
@@ -1969,11 +2148,16 @@ var QueryBuilder = /** @class */ (function (_super) {
1969
2148
  switch (type) {
1970
2149
  case 'field':
1971
2150
  if (isNullOrUndefined(value)) {
1972
- rule.field = '';
1973
- rule.label = '';
1974
- rule.type = '';
1975
- rule.value = '';
1976
- rule.operator = '';
2151
+ if (!isNullOrUndefined(rule)) {
2152
+ rule.field = '';
2153
+ rule.label = '';
2154
+ rule.type = '';
2155
+ rule.value = '';
2156
+ rule.operator = '';
2157
+ }
2158
+ else {
2159
+ return;
2160
+ }
1977
2161
  }
1978
2162
  else {
1979
2163
  rule.field = value;
@@ -2024,10 +2208,14 @@ var QueryBuilder = /** @class */ (function (_super) {
2024
2208
  ruleElement.className.indexOf('e-separate-rule') < 0) {
2025
2209
  ruleElement.className += ' e-separate-rule';
2026
2210
  }
2027
- var args = { requestType: 'template-create', action: type, ruleID: grpEle.id,
2028
- fields: this.fields, rule: rule };
2029
- eventsArgs = { groupID: grpElem.id.replace(this.element.id + '_', ''), ruleID: grpEle.id.replace(this.element.id + '_', ''),
2030
- value: rule.field, type: 'field' };
2211
+ var args = {
2212
+ requestType: 'template-create', action: type, ruleID: grpEle.id,
2213
+ fields: this.fields, rule: rule
2214
+ };
2215
+ eventsArgs = {
2216
+ groupID: grpElem.id.replace(this.element.id + '_', ''), ruleID: grpEle.id.replace(this.element.id + '_', ''),
2217
+ value: rule.field, type: 'field'
2218
+ };
2031
2219
  this.trigger('actionBegin', args);
2032
2220
  this.trigger('change', eventsArgs);
2033
2221
  }
@@ -2168,8 +2356,10 @@ var QueryBuilder = /** @class */ (function (_super) {
2168
2356
  var item = ddl.popupObj && ddl.popupObj.element.querySelector('.e-active');
2169
2357
  var itemData = ddl.getItemData();
2170
2358
  ddl.value = itemData.value;
2171
- var customArgs = { element: ddl.element, value: itemData.value, isInteracted: true,
2172
- previousItemData: this.prevItemData, previousItem: null, item: item, itemData: itemData, event: null, e: null };
2359
+ var customArgs = {
2360
+ element: ddl.element, value: itemData.value, isInteracted: true,
2361
+ previousItemData: this.prevItemData, previousItem: null, item: item, itemData: itemData, event: null, e: null
2362
+ };
2173
2363
  if (ddl.previousValue !== ddl.value) {
2174
2364
  this.changeField(customArgs);
2175
2365
  }
@@ -2282,8 +2472,10 @@ var QueryBuilder = /** @class */ (function (_super) {
2282
2472
  this.selectedColumn = this.getColumn(ddlValue);
2283
2473
  var ruleElem = closest(flt, '.e-rule-container');
2284
2474
  var ruleID = ruleElem.id.replace(this.element.id + '_', '');
2285
- var eventsArgs = { groupID: grID, ruleID: ruleID, selectedField: this.fieldMode === 'DropdownTree' ?
2286
- dl.value[0] : dl.value, cancel: false, type: 'field' };
2475
+ var eventsArgs = {
2476
+ groupID: grID, ruleID: ruleID, selectedField: this.fieldMode === 'DropdownTree' ?
2477
+ dl.value[0] : dl.value, cancel: false, type: 'field'
2478
+ };
2287
2479
  if (!this.isImportRules && !this.prvtEvtTgrDaD) {
2288
2480
  this.trigger('beforeChange', eventsArgs, function (observedChangeArgs) {
2289
2481
  _this.fieldChangeSuccess(observedChangeArgs, tmpRl, flt, rl, dArg);
@@ -2872,19 +3064,25 @@ var QueryBuilder = /** @class */ (function (_super) {
2872
3064
  : getComponent(container.querySelector('.e-rule-filter .e-filter-input'), 'dropdownlist');
2873
3065
  var column = this.fieldMode === 'DropdownTree' ? this.getColumn(ddlObj.value[0]) : this.getColumn(ddlObj.value);
2874
3066
  if (typeof itemData.template === 'string' || itemData.template.write === undefined) {
2875
- var args = { rule: rule, ruleID: container.id, operator: tempRule.operator, field: column.field,
2876
- requestType: 'value-template-create' };
3067
+ var args = {
3068
+ rule: rule, ruleID: container.id, operator: tempRule.operator, field: column.field,
3069
+ requestType: 'value-template-create'
3070
+ };
2877
3071
  this.trigger('actionBegin', args);
2878
3072
  }
2879
3073
  else {
2880
3074
  var template = itemData.template;
2881
3075
  if (typeof template.write === 'string') {
2882
- getValue(template.write, window)({ elements: tempElements.length > 1 ? tempElements : tempElements[0], values: rule.value,
2883
- operator: tempRule.operator, field: column.field, dataSource: column.values });
3076
+ getValue(template.write, window)({
3077
+ elements: tempElements.length > 1 ? tempElements : tempElements[0], values: rule.value,
3078
+ operator: tempRule.operator, field: column.field, dataSource: column.values
3079
+ });
2884
3080
  }
2885
3081
  else if (typeof itemData.template !== 'function') {
2886
- itemData.template.write({ elements: tempElements.length > 1 ? tempElements : tempElements[0],
2887
- values: rule.value, operator: tempRule.operator, field: column.field, dataSource: column.values });
3082
+ itemData.template.write({
3083
+ elements: tempElements.length > 1 ? tempElements : tempElements[0],
3084
+ values: rule.value, operator: tempRule.operator, field: column.field, dataSource: column.values
3085
+ });
2888
3086
  }
2889
3087
  }
2890
3088
  };
@@ -3382,8 +3580,10 @@ var QueryBuilder = /** @class */ (function (_super) {
3382
3580
  }
3383
3581
  else {
3384
3582
  if (typeof itemData.template === 'string' || itemData.template.create === undefined) {
3385
- args = { requestType: 'value-template-initialize', ruleID: ruleID, field: field, operator: operator, rule: rule,
3386
- renderTemplate: true };
3583
+ args = {
3584
+ requestType: 'value-template-initialize', ruleID: ruleID, field: field, operator: operator, rule: rule,
3585
+ renderTemplate: true
3586
+ };
3387
3587
  this.trigger('actionBegin', args, function (observedActionArgs) {
3388
3588
  isRendered = _this.actionBeginSuccessCallBack(observedActionArgs, itemData, ruleID, field, target);
3389
3589
  });
@@ -3591,7 +3791,6 @@ var QueryBuilder = /** @class */ (function (_super) {
3591
3791
  element = element ? element : ruleElement.nextElementSibling.nextElementSibling.querySelector('input.e-control');
3592
3792
  operator = getComponent(element, 'dropdownlist').value.toString();
3593
3793
  rule.rules[index].operator = operator;
3594
- // Value Fields
3595
3794
  var valueContainer = ruleElement.nextElementSibling.nextElementSibling;
3596
3795
  var elementCln = valueContainer.querySelectorAll('input.e-control');
3597
3796
  if (elementCln.length < 1) {
@@ -3753,6 +3952,9 @@ var QueryBuilder = /** @class */ (function (_super) {
3753
3952
  }
3754
3953
  };
3755
3954
  QueryBuilder.prototype.validateValue = function (rule, ruleElem, index) {
3955
+ if (isNullOrUndefined(rule) && isNullOrUndefined(ruleElem)) {
3956
+ return;
3957
+ }
3756
3958
  if (!isNullOrUndefined(index)) {
3757
3959
  rule = rule.rules[index];
3758
3960
  }
@@ -3914,8 +4116,10 @@ var QueryBuilder = /** @class */ (function (_super) {
3914
4116
  if (grouplen) {
3915
4117
  this.isPublic = true;
3916
4118
  for (var i = 0, len = groups.length; i < len; i++) {
3917
- this.updatedRule = { isLocked: groups[i].isLocked, condition: groups[i].condition,
3918
- not: groups[i].not };
4119
+ this.updatedRule = {
4120
+ isLocked: groups[i].isLocked, condition: groups[i].condition,
4121
+ not: groups[i].not
4122
+ };
3919
4123
  this.importRules(groups[i], groupElem, false, groups[i].not);
3920
4124
  }
3921
4125
  this.isPublic = false;
@@ -4044,10 +4248,10 @@ var QueryBuilder = /** @class */ (function (_super) {
4044
4248
  this.element.querySelector('.e-group-header').appendChild(collapseElem);
4045
4249
  };
4046
4250
  QueryBuilder.prototype.columnSort = function () {
4047
- if (this.sortDirection.toLowerCase() === 'descending') {
4251
+ if (this.sortDirection && this.sortDirection.toLowerCase() === 'descending') {
4048
4252
  this.columns = new DataManager(this.columns).executeLocal(new Query().sortByDesc('field'));
4049
4253
  }
4050
- else if (this.sortDirection.toLowerCase() === 'ascending') {
4254
+ else if (this.sortDirection && this.sortDirection.toLowerCase() === 'ascending') {
4051
4255
  this.columns = new DataManager(this.columns).executeLocal(new Query().sortBy('field'));
4052
4256
  }
4053
4257
  };
@@ -4534,8 +4738,10 @@ var QueryBuilder = /** @class */ (function (_super) {
4534
4738
  }
4535
4739
  }
4536
4740
  }
4537
- var dragEventArgs = { dragRuleID: targetElem !== null ? targetElem.id : grpElem !== null ? grpElem.id : null,
4538
- dragGroupID: grpElem !== null ? grpElem.id : null, cancel: false };
4741
+ var dragEventArgs = {
4742
+ dragRuleID: targetElem !== null ? targetElem.id : grpElem !== null ? grpElem.id : null,
4743
+ dragGroupID: grpElem !== null ? grpElem.id : null, cancel: false
4744
+ };
4539
4745
  this.trigger('drag', dragEventArgs);
4540
4746
  this.isDragEventPrevent = dragEventArgs.cancel;
4541
4747
  };
@@ -4556,8 +4762,10 @@ var QueryBuilder = /** @class */ (function (_super) {
4556
4762
  var prevRule;
4557
4763
  if (!isPreventelem) {
4558
4764
  var targetGrp = closest(e.target, '.e-group-container');
4559
- var dropEventArgs = { cancel: false, dropRuleID: targetGroup !== null ? targetGroup.id
4560
- : targetGrp !== null ? targetGrp.id : null, dropGroupID: targetGrp !== null ? targetGrp.id : null };
4765
+ var dropEventArgs = {
4766
+ cancel: false, dropRuleID: targetGroup !== null ? targetGroup.id
4767
+ : targetGrp !== null ? targetGrp.id : null, dropGroupID: targetGrp !== null ? targetGrp.id : null
4768
+ };
4561
4769
  this.trigger('drop', dropEventArgs);
4562
4770
  if (dropEventArgs.cancel) {
4563
4771
  isPreventelem = true;
@@ -5326,7 +5534,8 @@ var QueryBuilder = /** @class */ (function (_super) {
5326
5534
  else {
5327
5535
  if (customObj && (customObj.type === 'question' || customObj.type === 'answer')) {
5328
5536
  var notValue = rule.not;
5329
- rule = { 'label': rule.label, 'field': rule.field, 'operator': rule.operator, 'type': rule.type, 'value': rule.value,
5537
+ rule = {
5538
+ 'label': rule.label, 'field': rule.field, 'operator': rule.operator, 'type': rule.type, 'value': rule.value,
5330
5539
  'condition': rule.condition, 'rules': rule.rules
5331
5540
  };
5332
5541
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
@@ -5648,21 +5857,40 @@ var QueryBuilder = /** @class */ (function (_super) {
5648
5857
  var columns = this.columns;
5649
5858
  var column;
5650
5859
  columns = col ? col : columns;
5651
- for (var i = 0, iLen = columns.length; i < iLen; i++) {
5860
+ var fieldParts = this.separator !== '' ? (field ? field.split(this.separator) : []) : [field];
5861
+ var rootField = fieldParts && fieldParts.length > 0 ? fieldParts[0] : null;
5862
+ for (var i = 0; i < columns.length; i++) {
5652
5863
  if (columns[i].field === field) {
5653
5864
  column = columns[i];
5654
5865
  break;
5655
5866
  }
5656
- else if (columns[i].columns) {
5657
- column = this.getColumn(field, columns[i].columns);
5658
- if (column) {
5867
+ }
5868
+ if (!column && this.separator !== '') {
5869
+ for (var i = 0; i < columns.length; i++) {
5870
+ if (columns[i].field === rootField) {
5871
+ if (columns[i].columns) {
5872
+ var subField = field.substring(rootField.length + this.separator.length);
5873
+ if (subField) {
5874
+ column = this.getColumn(subField, columns[i].columns);
5875
+ }
5876
+ else {
5877
+ column = columns[i];
5878
+ }
5879
+ }
5880
+ else {
5881
+ column = columns[i];
5882
+ }
5659
5883
  break;
5660
5884
  }
5661
5885
  }
5662
- else if (field && field.indexOf(this.separator) > -1) {
5663
- if (this.separator !== '' && columns[i].field === field.split(this.separator)[0]) {
5664
- column = columns[i];
5665
- break;
5886
+ }
5887
+ if (!column) {
5888
+ for (var i = 0; i < columns.length; i++) {
5889
+ if (columns[i].columns) {
5890
+ column = this.getColumn(field, columns[i].columns);
5891
+ if (column) {
5892
+ break;
5893
+ }
5666
5894
  }
5667
5895
  }
5668
5896
  }
@@ -6118,6 +6346,7 @@ var QueryBuilder = /** @class */ (function (_super) {
6118
6346
  return false;
6119
6347
  };
6120
6348
  QueryBuilder.prototype.getSqlString = function (rules, enableEscape, queryStr, sqlLocale) {
6349
+ var _this = this;
6121
6350
  var isRoot = false;
6122
6351
  if (!queryStr && queryStr !== '') {
6123
6352
  queryStr = '';
@@ -6126,86 +6355,74 @@ var QueryBuilder = /** @class */ (function (_super) {
6126
6355
  else {
6127
6356
  queryStr += '(';
6128
6357
  }
6129
- var condition = rules.condition;
6130
6358
  if (rules.not) {
6131
- var rulesNotCondition = void 0;
6132
- if (isRoot) {
6133
- rulesNotCondition = sqlLocale ? this.l10n.getConstant('NOT').toUpperCase() + ' (' : 'NOT (';
6134
- queryStr += rulesNotCondition;
6135
- }
6136
- else {
6137
- rulesNotCondition = sqlLocale ? ' ' + this.l10n.getConstant('NOT').toUpperCase() + ' (' : ' NOT (';
6138
- queryStr += rulesNotCondition;
6139
- }
6359
+ var notPrefix = sqlLocale ? this.l10n.getConstant('NOT').toUpperCase() + ' ' : 'NOT ';
6360
+ queryStr += isRoot ? notPrefix + '(' : ' ' + notPrefix + '(';
6140
6361
  }
6141
- if (rules.rules) {
6142
- for (var j = 0, jLen = rules.rules.length; j < jLen; j++) {
6143
- if (rules.rules[j].rules) {
6144
- queryStr = this.getSqlString(rules.rules[j], enableEscape, queryStr, sqlLocale);
6145
- if (this.enableSeparateConnector) {
6146
- condition = rules.rules[j].condition;
6362
+ if (rules.rules && rules.rules.length) {
6363
+ queryStr += rules.rules.reduce(function (result, rule, j) {
6364
+ var ruleStr = '';
6365
+ if (rule.rules) {
6366
+ ruleStr = _this.getSqlString(rule, enableEscape, '', sqlLocale);
6367
+ if (_this.enableSeparateConnector) {
6368
+ rules.condition = rule.condition;
6147
6369
  }
6148
6370
  }
6149
6371
  else {
6150
- var rule = rules.rules[j];
6372
+ var ruleOpertor = sqlLocale ? _this.sqlOperators[rule.operator] : _this.operators[rule.operator];
6151
6373
  var valueStr = '';
6152
- var ruleOpertor = sqlLocale ? this.sqlOperators[rule.operator] : this.operators[rule.operator];
6153
6374
  if (rule.value instanceof Array) {
6154
6375
  if (rule.operator.toString().indexOf('between') > -1) {
6155
- var ruleCondition = sqlLocale ? ' ' + this.l10n.getConstant('AND').toUpperCase() + ' ' : ' ' + 'AND' + ' ';
6156
- if (rule.type === 'date' && !this.isDateFunction(rule.value[0])) {
6157
- valueStr += '"' + rule.value[0] + '"' + ruleCondition + '"' + rule.value[1] + '"';
6376
+ var ruleCondition = sqlLocale ? ' ' + _this.l10n.getConstant('AND').toUpperCase() + ' ' : ' AND ';
6377
+ if (rule.type === 'date' && !_this.isDateFunction(rule.value[0])) {
6378
+ valueStr = "\"" + rule.value[0] + "\"" + ruleCondition + "\"" + rule.value[1] + "\"";
6158
6379
  }
6159
6380
  else {
6160
- valueStr += rule.value[0] + ruleCondition + rule.value[1];
6381
+ valueStr = "" + rule.value[0] + ruleCondition + rule.value[1];
6161
6382
  }
6162
6383
  }
6163
6384
  else {
6164
6385
  if (typeof rule.value[0] === 'string' && rule.value !== null) {
6165
- valueStr += '("' + rule.value[0] + '"';
6166
- for (var k = 1, kLen = rule.value.length; k < kLen; k++) {
6167
- valueStr += ',"' + rule.value[k] + '"';
6168
- }
6169
- valueStr += ')';
6386
+ var valueArray = rule.value;
6387
+ valueStr = '("' + valueArray.join('","') + '")';
6170
6388
  }
6171
6389
  else {
6172
- valueStr += '(' + rule.value + ')';
6390
+ valueStr = "(" + rule.value + ")";
6173
6391
  }
6174
6392
  }
6175
6393
  }
6176
6394
  else {
6177
6395
  if (rule.operator.toString().indexOf('startswith') > -1) {
6178
- valueStr += rule.value ? '("' + rule.value + '%")' : '(' + rule.value + ')';
6396
+ valueStr = rule.value ? "(\"" + rule.value + "%\")" : "(" + rule.value + ")";
6179
6397
  }
6180
6398
  else if (rule.operator.toString().indexOf('endswith') > -1) {
6181
- valueStr += rule.value ? '("%' + rule.value + '")' : '(' + rule.value + ')';
6399
+ valueStr = rule.value ? "(\"%" + rule.value + "\")" : "(" + rule.value + ")";
6182
6400
  }
6183
6401
  else if (rule.operator.toString().indexOf('contains') > -1) {
6184
- valueStr += rule.value ? '("%' + rule.value + '%")' : '(' + rule.value + ')';
6402
+ valueStr = rule.value ? "(\"%" + rule.value + "%\")" : "(" + rule.value + ")";
6185
6403
  }
6186
6404
  else {
6187
6405
  if (rule.type === 'number' || typeof rule.value === 'boolean' ||
6188
6406
  (rule.value === null && (rule.operator.toString().indexOf('empty') < -1))) {
6189
- valueStr += rule.value;
6407
+ valueStr = "" + rule.value;
6190
6408
  }
6191
6409
  else if (rule.operator.toString().indexOf('empty') > -1) {
6192
- valueStr += '""';
6410
+ valueStr = '""';
6193
6411
  }
6194
6412
  else {
6195
- valueStr += '"' + rule.value + '"';
6413
+ valueStr = "\"" + rule.value + "\"";
6196
6414
  }
6197
6415
  }
6198
6416
  }
6417
+ var fieldName = rule.field;
6418
+ if (enableEscape) {
6419
+ fieldName = '`' + fieldName + '`';
6420
+ }
6421
+ else if (fieldName.indexOf(' ') > -1) {
6422
+ fieldName = '"' + fieldName + '"';
6423
+ }
6199
6424
  if (rule.operator.toString().indexOf('null') > -1) {
6200
- if (enableEscape) {
6201
- rule.field = '`' + rule.field + '`';
6202
- }
6203
- else {
6204
- if (rule.field.indexOf(' ') > -1) {
6205
- rule.field = '"' + rule.field + '"';
6206
- }
6207
- }
6208
- queryStr += rule.field + ' ' + ruleOpertor;
6425
+ ruleStr = fieldName + ' ' + ruleOpertor;
6209
6426
  }
6210
6427
  else {
6211
6428
  var custOper = ruleOpertor;
@@ -6215,33 +6432,21 @@ var QueryBuilder = /** @class */ (function (_super) {
6215
6432
  else if (rule.operator === 'isnotempty') {
6216
6433
  custOper = '!=';
6217
6434
  }
6218
- if (enableEscape) {
6219
- rule.field = '`' + rule.field + '`';
6220
- }
6221
- else {
6222
- if (rule.field.indexOf(' ') > -1) {
6223
- rule.field = '"' + rule.field + '"';
6224
- }
6225
- }
6226
- queryStr += rule.field + ' ' + custOper + ' ' + valueStr;
6227
- }
6228
- if (rule.condition && rule.condition !== '') {
6229
- condition = rule.condition;
6435
+ ruleStr = fieldName + ' ' + custOper + ' ' + valueStr;
6230
6436
  }
6231
6437
  }
6232
- if (j !== jLen - 1) {
6233
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
6234
- var rule = rules.rules[j];
6235
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
6438
+ if (j !== rules.rules.length - 1) {
6439
+ var condition = rules.condition;
6236
6440
  if (condition === '' || (rule && rule.condition !== '' && rule.custom && rule.custom.isCustom)) {
6237
6441
  condition = rule.condition;
6238
6442
  }
6239
6443
  if (condition) {
6240
- condition = sqlLocale ? this.l10n.getConstant(condition.toUpperCase()).toUpperCase() : condition.toUpperCase();
6241
- queryStr += ' ' + condition + ' ';
6444
+ condition = sqlLocale ? _this.l10n.getConstant(condition.toUpperCase()).toUpperCase() : condition.toUpperCase();
6445
+ ruleStr += ' ' + condition + ' ';
6242
6446
  }
6243
6447
  }
6244
- }
6448
+ return result + ruleStr;
6449
+ }, '');
6245
6450
  }
6246
6451
  if (!isRoot) {
6247
6452
  queryStr += ')';
@@ -6559,23 +6764,19 @@ var QueryBuilder = /** @class */ (function (_super) {
6559
6764
  return subOp[i].length;
6560
6765
  }
6561
6766
  }
6562
- //Left Parenthesis
6563
6767
  if (/^\(/.exec(sqlString)) {
6564
6768
  this.parser.push(['Left', '(']);
6565
6769
  return 1;
6566
6770
  }
6567
- //Right Parenthesis
6568
6771
  if (/^\)/.exec(sqlString)) {
6569
6772
  this.parser.push(['Right', ')']);
6570
6773
  return 1;
6571
6774
  }
6572
- //Boolean
6573
6775
  if (/^(true|false)/.exec(sqlString)) {
6574
6776
  matchValue = /^(true|false)/.exec(sqlString)[0];
6575
6777
  this.parser.push(['String', matchValue]);
6576
6778
  return matchValue.length;
6577
6779
  }
6578
- //Null
6579
6780
  if (/^null/.exec(sqlString)) {
6580
6781
  matchValue = /^null/.exec(sqlString)[0];
6581
6782
  this.parser.push(['String', null]);
@@ -6600,7 +6801,6 @@ var QueryBuilder = /** @class */ (function (_super) {
6600
6801
  return matchValue.length;
6601
6802
  }
6602
6803
  }
6603
- //String
6604
6804
  var singleString = this.getSingleQuoteString(sqlString);
6605
6805
  if (singleString !== '') {
6606
6806
  matchValue = singleString;
@@ -6620,24 +6820,20 @@ var QueryBuilder = /** @class */ (function (_super) {
6620
6820
  !this.checkCondition(sqlString, matchValue)) {
6621
6821
  matchValue = this.combineSingleQuoteString(sqlString, matchValue);
6622
6822
  }
6623
- // end
6624
6823
  this.parser.push(['String', matchValue]);
6625
6824
  return matchValue.length;
6626
6825
  }
6627
- // Double String
6628
6826
  var doubleString = this.getDoubleQuoteString(sqlString);
6629
6827
  if (doubleString !== '') {
6630
6828
  matchValue = doubleString;
6631
6829
  this.parser.push(['DoubleString', matchValue]);
6632
6830
  return matchValue.length;
6633
6831
  }
6634
- //Number
6635
6832
  if (/^\d*\.?\d+/.exec(sqlString)) {
6636
6833
  matchValue = /^\d*\.?\d+/.exec(sqlString)[0];
6637
6834
  this.parser.push(['Number', matchValue]);
6638
6835
  return matchValue.length;
6639
6836
  }
6640
- //Negative Number
6641
6837
  if (/^-?\d*\.?\d+/.exec(sqlString)) {
6642
6838
  matchValue = /^-?\d*\.?\d+/.exec(sqlString)[0];
6643
6839
  this.parser.push(['Number', matchValue]);
@@ -6805,7 +7001,7 @@ var QueryBuilder = /** @class */ (function (_super) {
6805
7001
  fieldName += this.separator;
6806
7002
  }
6807
7003
  }
6808
- return this.getColumn(fieldName).label;
7004
+ return this.getColumn(fieldName) ? this.getColumn(fieldName).label : '';
6809
7005
  };
6810
7006
  QueryBuilder.prototype.processParser = function (parser, rules, levelColl, sqlLocale) {
6811
7007
  var j;
@@ -7037,12 +7233,16 @@ var QueryBuilder = /** @class */ (function (_super) {
7037
7233
  }
7038
7234
  }
7039
7235
  if (this.enableSeparateConnector) {
7040
- this.addRules([{ 'label': getRule.label, 'field': getRule.field, 'type': getRule.type, 'operator': getRule.operator,
7041
- 'value': getRule.value, 'condition': getRule.condition }], groupId);
7236
+ this.addRules([{
7237
+ 'label': getRule.label, 'field': getRule.field, 'type': getRule.type, 'operator': getRule.operator,
7238
+ 'value': getRule.value, 'condition': getRule.condition
7239
+ }], groupId);
7042
7240
  }
7043
7241
  else {
7044
- this.addRules([{ 'label': getRule.label, 'field': getRule.field, 'type': getRule.type, 'operator': getRule.operator,
7045
- 'value': getRule.value }], groupId);
7242
+ this.addRules([{
7243
+ 'label': getRule.label, 'field': getRule.field, 'type': getRule.type, 'operator': getRule.operator,
7244
+ 'value': getRule.value
7245
+ }], groupId);
7046
7246
  }
7047
7247
  this.ruleIndex = -1;
7048
7248
  };
@@ -7217,115 +7417,65 @@ var QueryBuilder = /** @class */ (function (_super) {
7217
7417
  this.disableRuleControls(target, groupElem, isDisabled);
7218
7418
  };
7219
7419
  QueryBuilder.prototype.disableRuleControls = function (target, groupElem, isDisabled) {
7220
- var ddlElement = groupElem.querySelectorAll('.e-control.e-dropdownlist');
7221
- var numericElement = groupElem.querySelectorAll('.e-control.e-numerictextbox');
7222
- var textElement = groupElem.querySelectorAll('.e-control.e-textbox');
7223
- var dateElement = groupElem.querySelectorAll('.e-control.e-datepicker');
7224
- var checkboxElement = groupElem.querySelectorAll('.e-control.e-checkbox');
7225
- var radioBtnElement = groupElem.querySelectorAll('.e-control.e-radio');
7226
- var multiSelectElement = groupElem.querySelectorAll('.e-control.e-multiselect');
7227
- var deleteElem = groupElem.querySelectorAll('.e-rule-delete');
7228
- var lockElem = groupElem.querySelectorAll('.e-lock-rule');
7229
- var cloneElem = groupElem.querySelectorAll('.e-clone-rule');
7230
- var ruleElem = groupElem.querySelectorAll('.e-rule-container');
7231
- for (var i = 0; i < deleteElem.length; i++) {
7420
+ var disableComponents = function (elements, componentGetter, isDisabled) {
7421
+ elements.forEach(function (element) {
7422
+ var component = componentGetter(element);
7423
+ if ('enabled' in component) {
7424
+ component.enabled = !isDisabled;
7425
+ }
7426
+ else if ('disabled' in component) {
7427
+ component.disabled = isDisabled;
7428
+ }
7429
+ });
7430
+ };
7431
+ var elements = {
7432
+ ddl: groupElem.querySelectorAll('.e-control.e-dropdownlist'),
7433
+ numeric: groupElem.querySelectorAll('.e-control.e-numerictextbox'),
7434
+ text: groupElem.querySelectorAll('.e-control.e-textbox'),
7435
+ date: groupElem.querySelectorAll('.e-control.e-datepicker'),
7436
+ checkbox: groupElem.querySelectorAll('.e-control.e-checkbox'),
7437
+ radio: groupElem.querySelectorAll('.e-control.e-radio'),
7438
+ multiSelect: groupElem.querySelectorAll('.e-control.e-multiselect'),
7439
+ deleteElem: groupElem.querySelectorAll('.e-rule-delete'),
7440
+ lockElem: groupElem.querySelectorAll('.e-lock-rule'),
7441
+ cloneElem: groupElem.querySelectorAll('.e-clone-rule'),
7442
+ ruleElem: groupElem.querySelectorAll('.e-rule-container')
7443
+ };
7444
+ elements.deleteElem.forEach(function (elem, i) {
7232
7445
  if (isDisabled) {
7233
- if (ruleElem[i] && ruleElem[i].classList.contains('e-disable')) {
7234
- ruleElem[i].classList.add('e-disable');
7446
+ if (elements.ruleElem[i] && elements.ruleElem[i].classList.contains('e-disable')) {
7447
+ elements.ruleElem[i].classList.add('e-disable');
7235
7448
  }
7236
- deleteElem[i].disabled = true;
7237
- if (cloneElem[i]) {
7238
- cloneElem[i].disabled = true;
7449
+ elements.deleteElem[i].disabled = true;
7450
+ if (elements.cloneElem[i]) {
7451
+ elements.cloneElem[i].disabled = true;
7239
7452
  }
7240
- if (lockElem[i] !== target) {
7241
- lockElem[i].disabled = true;
7242
- lockElem[i].children[0].classList.remove('e-unlock');
7243
- lockElem[i].children[0].classList.add('e-lock');
7453
+ if (elements.lockElem[i] !== target) {
7454
+ elements.lockElem[i].disabled = true;
7455
+ elements.lockElem[i].children[0].classList.remove('e-unlock');
7456
+ elements.lockElem[i].children[0].classList.add('e-lock');
7244
7457
  }
7245
7458
  }
7246
7459
  else {
7247
- if (ruleElem[i]) {
7248
- ruleElem[i].classList.remove('e-disable');
7460
+ if (elements.ruleElem[i]) {
7461
+ elements.ruleElem[i].classList.remove('e-disable');
7249
7462
  }
7250
- if (cloneElem[i]) {
7251
- cloneElem[i].disabled = false;
7463
+ if (elements.cloneElem[i]) {
7464
+ elements.cloneElem[i].disabled = false;
7252
7465
  }
7253
- deleteElem[i].disabled = false;
7254
- lockElem[i].disabled = false;
7255
- lockElem[i].children[0].classList.remove('e-lock');
7256
- lockElem[i].children[0].classList.add('e-unlock');
7257
- }
7258
- }
7259
- var dropDownObj;
7260
- var numericObj;
7261
- var textObj;
7262
- var dateObj;
7263
- var checkBoxObj;
7264
- var radioBtnObj;
7265
- var multiSelectObj;
7266
- for (var i = 0; i < ddlElement.length; i++) {
7267
- dropDownObj = getComponent(ddlElement[i], 'dropdownlist');
7268
- if (isDisabled) {
7269
- dropDownObj.enabled = false;
7270
- }
7271
- else {
7272
- dropDownObj.enabled = true;
7273
- }
7274
- }
7275
- for (var i = 0; i < numericElement.length; i++) {
7276
- numericObj = getComponent(numericElement[i], 'numerictextbox');
7277
- if (isDisabled) {
7278
- numericObj.enabled = false;
7279
- }
7280
- else {
7281
- numericObj.enabled = true;
7282
- }
7283
- }
7284
- for (var i = 0; i < textElement.length; i++) {
7285
- textObj = getComponent(textElement[i], 'textbox');
7286
- if (isDisabled) {
7287
- textObj.enabled = false;
7288
- }
7289
- else {
7290
- textObj.enabled = true;
7291
- }
7292
- }
7293
- for (var i = 0; i < dateElement.length; i++) {
7294
- dateObj = getComponent(dateElement[i], 'datepicker');
7295
- if (isDisabled) {
7296
- dateObj.enabled = false;
7297
- }
7298
- else {
7299
- dateObj.enabled = true;
7466
+ elements.deleteElem[i].disabled = false;
7467
+ elements.lockElem[i].disabled = false;
7468
+ elements.lockElem[i].children[0].classList.remove('e-lock');
7469
+ elements.lockElem[i].children[0].classList.add('e-unlock');
7300
7470
  }
7301
- }
7302
- for (var i = 0; i < checkboxElement.length; i++) {
7303
- checkBoxObj = getComponent(checkboxElement[i], 'checkbox');
7304
- if (isDisabled) {
7305
- checkBoxObj.disabled = true;
7306
- }
7307
- else {
7308
- checkBoxObj.disabled = false;
7309
- }
7310
- }
7311
- for (var i = 0; i < radioBtnElement.length; i++) {
7312
- radioBtnObj = getComponent(radioBtnElement[i], 'radio');
7313
- if (isDisabled) {
7314
- radioBtnObj.disabled = true;
7315
- }
7316
- else {
7317
- radioBtnObj.disabled = false;
7318
- }
7319
- }
7320
- for (var i = 0; i < multiSelectElement.length; i++) {
7321
- multiSelectObj = getComponent(multiSelectElement[i], 'multiselect');
7322
- if (isDisabled) {
7323
- multiSelectObj.enabled = false;
7324
- }
7325
- else {
7326
- multiSelectObj.enabled = true;
7327
- }
7328
- }
7471
+ });
7472
+ disableComponents(elements.ddl, function (elem) { return getComponent(elem, 'dropdownlist'); }, isDisabled);
7473
+ disableComponents(elements.numeric, function (elem) { return getComponent(elem, 'numerictextbox'); }, isDisabled);
7474
+ disableComponents(elements.text, function (elem) { return getComponent(elem, 'textbox'); }, isDisabled);
7475
+ disableComponents(elements.date, function (elem) { return getComponent(elem, 'datepicker'); }, isDisabled);
7476
+ disableComponents(elements.checkbox, function (elem) { return getComponent(elem, 'checkbox'); }, isDisabled);
7477
+ disableComponents(elements.radio, function (elem) { return getComponent(elem, 'radio'); }, isDisabled);
7478
+ disableComponents(elements.multiSelect, function (elem) { return getComponent(elem, 'multiselect'); }, isDisabled);
7329
7479
  };
7330
7480
  __decorate([
7331
7481
  Event()