@syncfusion/ej2-querybuilder 30.1.41 → 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.
@@ -1,4 +1,4 @@
1
- import { Property, ChildProperty, Collection, getComponent, removeClass, isNullOrUndefined, Animation, extend, closest, addClass, select, append, detach, rippleEffect, getInstance, getValue, getNumericObject, Browser, classList, Internationalization, getUniqueID, L10n, Draggable, remove, compile, EventHandler, cldrData, Event, Complex, NotifyPropertyChanges, Component } from '@syncfusion/ej2-base';
1
+ import { Property, ChildProperty, Collection, removeClass, isNullOrUndefined, Animation, extend, closest, addClass, select, append, getComponent, detach, rippleEffect, getInstance, getValue, getNumericObject, Browser, classList, Internationalization, getUniqueID, L10n, Draggable, remove, compile, EventHandler, cldrData, Event, Complex, NotifyPropertyChanges, Component } from '@syncfusion/ej2-base';
2
2
  import { Button, CheckBox, RadioButton } from '@syncfusion/ej2-buttons';
3
3
  import { MultiSelect, CheckBoxSelection, DropDownList, DropDownTree } from '@syncfusion/ej2-dropdowns';
4
4
  import { Query, DataManager, Deferred, Predicate } from '@syncfusion/ej2-data';
@@ -220,37 +220,71 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
220
220
  QueryBuilder.prototype.reset = function () {
221
221
  this.isImportRules = false;
222
222
  var bodyElem = this.element.querySelector('.e-group-body');
223
- var inputElement = this.element.querySelectorAll('input.e-control');
224
- for (var i = 0, len = inputElement.length; i < len; i++) {
225
- if (inputElement[i].className.indexOf('e-tooltip') > -1) {
226
- getComponent(inputElement[i], 'tooltip').destroy();
223
+ var inputElements = this.element.querySelectorAll('input.e-control');
224
+ var batchSize = 20;
225
+ var currentIndex = 0;
226
+ var processBatch = function () {
227
+ var endIndex = Math.min(currentIndex + batchSize, inputElements.length);
228
+ for (var i = currentIndex; i < endIndex; i++) {
229
+ var element = inputElements[i];
230
+ try {
231
+ if (element.className.indexOf('e-tooltip') > -1) {
232
+ var tooltip = getComponent(element, 'tooltip');
233
+ if (tooltip) {
234
+ tooltip.destroy();
235
+ }
236
+ }
237
+ else if (element.parentElement && element.parentElement.className.indexOf('e-tooltip') > -1) {
238
+ var tooltip = getComponent(element.parentElement, 'tooltip');
239
+ if (tooltip) {
240
+ tooltip.destroy();
241
+ }
242
+ }
243
+ }
244
+ catch (e) {
245
+ console.warn('Error destroying tooltip:', e);
246
+ }
227
247
  }
228
- else if (inputElement[i].parentElement.className.indexOf('e-tooltip') > -1) {
229
- getComponent(inputElement[i].parentElement, 'tooltip').destroy();
248
+ currentIndex = endIndex;
249
+ if (currentIndex < inputElements.length) {
250
+ requestAnimationFrame(processBatch);
230
251
  }
252
+ };
253
+ if (inputElements.length > 0) {
254
+ processBatch();
231
255
  }
232
256
  if (bodyElem) {
233
- bodyElem.innerHTML = '';
257
+ bodyElem.textContent = '';
234
258
  }
235
259
  else {
260
+ var fragment = document.createDocumentFragment();
236
261
  var grpContainer = this.createElement('div', { attrs: { class: 'e-group-container' } });
237
262
  var grpHeader = this.createElement('div', { attrs: { class: 'e-group-header' } });
238
263
  var grpBody = this.createElement('div', { attrs: { class: 'e-group-body' } });
239
- grpContainer.appendChild(grpHeader).appendChild(grpBody);
240
- this.element.appendChild(grpContainer);
264
+ grpContainer.appendChild(grpHeader);
265
+ grpContainer.appendChild(grpBody);
266
+ fragment.appendChild(grpContainer);
267
+ this.element.appendChild(fragment);
241
268
  bodyElem = this.element.querySelector('.e-group-body');
242
269
  }
243
270
  if (this.headerTemplate && this.isRoot) {
244
- this.element.innerHTML = '';
271
+ this.element.textContent = '';
245
272
  this.isRoot = false;
246
273
  }
247
274
  if (this.enableNotCondition) {
248
- removeClass(this.element.querySelectorAll('.e-qb-toggle'), 'e-active-toggle');
275
+ var toggleElements = this.element.querySelectorAll('.e-qb-toggle');
276
+ for (var i = 0; i < toggleElements.length; i++) {
277
+ removeClass([toggleElements[i]], 'e-active-toggle');
278
+ }
279
+ }
280
+ if (bodyElem) {
281
+ bodyElem.appendChild(this.createElement('div', { attrs: { class: 'e-rule-list' } }));
249
282
  }
250
- bodyElem.appendChild(this.createElement('div', { attrs: { class: 'e-rule-list' } }));
251
283
  this.levelColl[this.element.id + '_group0'] = [0];
252
284
  this.setProperties({ rule: { condition: 'and', not: false, rules: [] } }, true);
253
- this.disableRuleCondition(bodyElem.parentElement);
285
+ if (bodyElem && bodyElem.parentElement) {
286
+ this.disableRuleCondition(bodyElem.parentElement);
287
+ }
254
288
  };
255
289
  QueryBuilder.prototype.getWrapper = function () {
256
290
  return this.element;
@@ -273,100 +307,131 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
273
307
  return '';
274
308
  };
275
309
  QueryBuilder.prototype.initialize = function () {
310
+ var _this = this;
276
311
  if (this.dataColl.length) {
277
- var columnKeys = Object.keys(this.dataColl[0]);
312
+ var columnKeys_1 = Object.keys(this.dataColl[0]);
278
313
  var cols = [];
279
- var categories = [];
280
- var type = void 0;
281
- var groupBy = false;
282
- var isDate = false;
283
- var value = void 0;
284
- var validateObj = { isRequired: true, min: 0, max: Number.MAX_VALUE };
314
+ var categories_1 = [];
315
+ var type_1;
316
+ var groupBy_1 = false;
317
+ var isDate_1 = false;
318
+ var value_1;
319
+ var validateObj_1 = { isRequired: true, min: 0, max: Number.MAX_VALUE };
285
320
  if (this.columns.length) {
286
321
  this.columnSort();
287
322
  var columns = this.columns;
288
- for (var i = 0, len = columns.length; i < len; i++) {
289
- this.updateCustomOperator(columns[i], 'initial');
290
- if (!columns[i].type) {
291
- if (columnKeys.indexOf(columns[i].field) > -1) {
292
- value = this.dataColl[0][columns[i].field];
293
- type = typeof value;
294
- if (type === 'string') {
295
- isDate = !isNaN(Date.parse(value));
323
+ columns.forEach(function (column) {
324
+ _this.updateCustomOperator(column, 'initial');
325
+ if (!column.type) {
326
+ if (columnKeys_1.indexOf(column.field) > -1) {
327
+ value_1 = _this.dataColl[0][column.field];
328
+ type_1 = typeof value_1;
329
+ if (type_1 === 'string') {
330
+ isDate_1 = !isNaN(Date.parse(value_1));
296
331
  }
297
- else if (type === 'object') {
298
- isDate = value instanceof Date && !isNaN(value.getTime());
299
- type = 'string';
332
+ else if (type_1 === 'object') {
333
+ isDate_1 = value_1 instanceof Date && !isNaN(value_1.getTime());
334
+ type_1 = 'string';
300
335
  }
301
- columns[i].type = type;
302
- isDate = false;
336
+ column.type = type_1;
337
+ isDate_1 = false;
303
338
  }
304
- type = 'string';
339
+ type_1 = 'string';
305
340
  }
306
- if (!columns[i].validation) {
307
- columns[i].validation = validateObj;
341
+ if (!column.validation) {
342
+ column.validation = validateObj_1;
308
343
  }
309
- if (columns[i].category) {
310
- groupBy = true;
344
+ if (column.category) {
345
+ groupBy_1 = true;
311
346
  }
312
347
  else {
313
- columns[i].category = this.l10n.getConstant('OtherFields');
348
+ column.category = _this.l10n.getConstant('OtherFields');
314
349
  }
315
- if (categories.indexOf(columns[i].category) < 0) {
316
- categories.push(columns[i].category);
350
+ if (categories_1.indexOf(column.category) < 0) {
351
+ categories_1.push(column.category);
317
352
  }
318
- if (!columns[i].operators ||
319
- (this.isLocale && this.isCustomOprCols.indexOf(columns[i].field) === -1)) {
320
- columns[i].operators = this.customOperators[columns[i].type + 'Operator'];
353
+ if (!column.operators ||
354
+ (_this.isLocale && _this.isCustomOprCols.indexOf(column.field) === -1)) {
355
+ column.operators = _this.customOperators[column.type + 'Operator'];
321
356
  }
322
- }
323
- if (groupBy && (categories.length > 1 || categories[0] !== this.l10n.getConstant('OtherFields'))) {
357
+ });
358
+ if (groupBy_1 && (categories_1.length > 1 || categories_1[0] !== this.l10n.getConstant('OtherFields'))) {
324
359
  this.fields = { text: 'label', value: 'field', groupBy: 'category' };
325
360
  }
326
361
  this.updateSubFieldsFromColumns(this.columns);
327
362
  }
328
363
  else {
329
- for (var i = 0, len = columnKeys.length; i < len; i++) {
330
- value = this.dataColl[0][columnKeys[i]];
331
- type = typeof value;
332
- if (type === 'string') {
333
- isDate = !isNaN(Date.parse(value));
334
- }
335
- else if (type === 'object' && !Object.keys(value).length) {
336
- isDate = value instanceof Date && !isNaN(value.getTime());
337
- type = 'string';
338
- }
339
- cols[i] = { 'field': columnKeys[i], 'label': columnKeys[i], 'type': isDate ? 'date' : type,
340
- 'validation': validateObj };
341
- isDate = false;
364
+ for (var i = 0, len = columnKeys_1.length; i < len; i++) {
365
+ value_1 = this.dataColl[0][columnKeys_1[i]];
366
+ type_1 = typeof value_1;
367
+ if (type_1 === 'string') {
368
+ isDate_1 = !isNaN(Date.parse(value_1));
369
+ }
370
+ else if (type_1 === 'object' && !Object.keys(value_1).length) {
371
+ isDate_1 = value_1 instanceof Date && !isNaN(value_1.getTime());
372
+ type_1 = 'string';
373
+ }
374
+ cols[i] = {
375
+ 'field': columnKeys_1[i], 'label': columnKeys_1[i], 'type': isDate_1 ? 'date' : type_1,
376
+ 'validation': validateObj_1
377
+ };
378
+ isDate_1 = false;
342
379
  cols[i].operators = this.customOperators[cols[i].type + 'Operator'];
343
- if (type === 'object') {
344
- this.updateSubFields(value, cols[i]);
380
+ if (type_1 === 'object') {
381
+ this.updateSubFields(value_1, cols[i]);
345
382
  }
346
383
  }
347
384
  this.columns = cols;
348
385
  }
349
386
  }
350
387
  else if (this.columns && this.columns.length) {
351
- var columns = this.columns;
352
- for (var i = 0, len = columns.length; i < len; i++) {
353
- if (columns[i].category && columns[i].category !== this.l10n.getConstant('OtherFields')) {
354
- this.fields = { text: 'label', value: 'field', groupBy: 'category' };
388
+ if (this.sortDirection !== 'Default') {
389
+ this.columnSort();
390
+ }
391
+ this.processColumnsInBatches();
392
+ if (this.columns.length > 50) {
393
+ setTimeout(function () {
394
+ _this.updateSubFieldsFromColumns(_this.columns);
395
+ }, 0);
396
+ }
397
+ else {
398
+ this.updateSubFieldsFromColumns(this.columns);
399
+ }
400
+ }
401
+ this.trigger('dataBound', { type: 'dataBound' });
402
+ };
403
+ QueryBuilder.prototype.processColumnsInBatches = function () {
404
+ var _this = this;
405
+ var columns = this.columns;
406
+ var batchSize = 10;
407
+ var processedCount = 0;
408
+ var processBatch = function () {
409
+ var endIdx = Math.min(processedCount + batchSize, columns.length);
410
+ for (var i = processedCount; i < endIdx; i++) {
411
+ if (columns[i].category && columns[i].category !== _this.l10n.getConstant('OtherFields')) {
412
+ _this.fields = { text: 'label', value: 'field', groupBy: 'category' };
355
413
  }
356
414
  else {
357
- columns[i].category = this.l10n.getConstant('OtherFields');
415
+ columns[i].category = _this.l10n.getConstant('OtherFields');
358
416
  }
359
- this.updateCustomOperator(columns[i], 'initial');
417
+ _this.updateCustomOperator(columns[i], 'initial');
360
418
  if (!columns[i].operators ||
361
- (this.isLocale && this.isCustomOprCols.indexOf(columns[i].field) === -1)) {
362
- columns[i].operators = this.customOperators[columns[i].type + 'Operator'];
419
+ (_this.isLocale && _this.isCustomOprCols.indexOf(columns[i].field) === -1)) {
420
+ columns[i].operators = _this.customOperators[columns[i].type + 'Operator'];
363
421
  }
364
422
  }
365
- this.updateSubFieldsFromColumns(this.columns);
366
- }
367
- this.trigger('dataBound', { type: 'dataBound' });
423
+ processedCount = endIdx;
424
+ if (processedCount < columns.length) {
425
+ requestAnimationFrame(processBatch);
426
+ }
427
+ };
428
+ processBatch();
368
429
  };
369
430
  QueryBuilder.prototype.updateSubFieldsFromColumns = function (col, field) {
431
+ if (col.length > 50) {
432
+ this.updateSubFieldsLarge(col, field);
433
+ return;
434
+ }
370
435
  for (var i = 0; i < col.length; i++) {
371
436
  if (this.separator !== '' && col[i].field.indexOf(this.separator) < 0) {
372
437
  col[i].field = field ? field + this.separator + col[i].field : col[i].field;
@@ -383,6 +448,39 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
383
448
  }
384
449
  }
385
450
  };
451
+ QueryBuilder.prototype.updateSubFieldsLarge = function (col, field) {
452
+ var _this = this;
453
+ var i = 0;
454
+ var colLength = col.length;
455
+ var processNextBatch = function () {
456
+ var endIdx = Math.min(i + 10, colLength);
457
+ for (; i < endIdx; i++) {
458
+ if (_this.separator !== '' && col[i].field.indexOf(_this.separator) < 0) {
459
+ col[i].field = field ? field + _this.separator + col[i].field : col[i].field;
460
+ }
461
+ if (col[i].operators) {
462
+ _this.updateCustomOperator(col[i]);
463
+ }
464
+ else if (col[i].type && col[i].type !== 'object') {
465
+ col[i].operators = _this.customOperators[col[i].type + 'Operator'];
466
+ }
467
+ }
468
+ if (i < colLength) {
469
+ requestAnimationFrame(processNextBatch);
470
+ }
471
+ else {
472
+ setTimeout(function () {
473
+ for (var j = 0; j < colLength; j++) {
474
+ if (col[j].columns) {
475
+ col[j].type = 'object';
476
+ _this.updateSubFieldsFromColumns(col[j].columns, col[j].field);
477
+ }
478
+ }
479
+ }, 0);
480
+ }
481
+ };
482
+ processNextBatch();
483
+ };
386
484
  QueryBuilder.prototype.updateSubFields = function (value, col, data) {
387
485
  var sampCol;
388
486
  col.columns = [];
@@ -552,8 +650,10 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
552
650
  }
553
651
  args = { groupID: groupID, cancel: false, type: 'condition', value: targetValue.toLowerCase() };
554
652
  if (this.enableNotCondition) {
555
- args = { groupID: groupID, cancel: false, type: 'condition', value: targetValue.toLowerCase(),
556
- 'not': ariaChecked };
653
+ args = {
654
+ groupID: groupID, cancel: false, type: 'condition', value: targetValue.toLowerCase(),
655
+ 'not': ariaChecked
656
+ };
557
657
  }
558
658
  }
559
659
  if (!this.isImportRules) {
@@ -651,7 +751,7 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
651
751
  QueryBuilder.prototype.appendRuleElem = function (target, column, type, parentId, action, rule) {
652
752
  var ruleElem;
653
753
  var elem;
654
- var ruleListElem = target.querySelector('.e-rule-list');
754
+ var ruleListElem = target && target.querySelector('.e-rule-list');
655
755
  var args;
656
756
  if (type === 'change') {
657
757
  ruleElem = select('#' + parentId, target);
@@ -778,23 +878,35 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
778
878
  }
779
879
  };
780
880
  QueryBuilder.prototype.addRuleSuccessCallBack = function (args, trgt, rule, col, act, pId, isRlTmp) {
781
- var height = (this.element.className.indexOf('e-device') > -1) ? '250px' : '200px';
881
+ var _this = this;
882
+ var isVertical = this.element.className.indexOf('e-device') > -1 || this.displayMode === 'Vertical';
883
+ var height = isVertical ? '250px' : '200px';
782
884
  var ruleID;
783
885
  var column = (rule && rule.field) ? this.getColumn(rule.field) : col ? col : this.columns[0];
784
886
  var operators;
785
- var dropDownList;
786
887
  var ruleElem;
787
888
  var newRule = { 'label': '', 'field': '', 'type': '', 'operator': '' };
788
889
  if (!args.cancel) {
890
+ var fragment = document.createDocumentFragment();
789
891
  if (column && column.ruleTemplate && rule.field) {
790
892
  this.selectedColumn = column;
791
893
  operators = this.selectedColumn.operators;
792
- newRule = { 'label': column.label, 'field': column.field, 'type': column.type, 'operator': operators[0].value };
894
+ newRule = {
895
+ 'label': column.label,
896
+ 'field': column.field,
897
+ 'type': column.type,
898
+ 'operator': operators[0].value
899
+ };
793
900
  var passedRule = Object.keys(rule).length ? rule : newRule;
794
901
  ruleElem = this.appendRuleElem(trgt, column, act, pId, 'field', passedRule);
795
- var args_1 = { requestType: 'template-create', action: 'insert-rule', ruleID: ruleElem.id,
796
- fields: this.fields, rule: passedRule };
797
- this.trigger('actionBegin', args_1);
902
+ var actionArgs = {
903
+ requestType: 'template-initialize',
904
+ ruleID: ruleElem.id,
905
+ action: 'insert-rule',
906
+ fields: this.fields,
907
+ rule: passedRule
908
+ };
909
+ this.trigger('actionBegin', actionArgs);
798
910
  }
799
911
  else {
800
912
  ruleElem = this.appendRuleElem(trgt, column, act, pId, 'field');
@@ -809,139 +921,30 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
809
921
  addClass([element], 'e-round');
810
922
  addClass([element], 'e-icon-btn');
811
923
  element.setAttribute('title', this.l10n.getConstant('DeleteRule'));
812
- var spanElement = this.createElement('span', { attrs: { class: 'e-btn-icon e-icons e-delete-icon' } });
813
- ruleElem.querySelector('.e-rule-delete').appendChild(spanElement);
924
+ var spanElement = this.createElement('span', {
925
+ attrs: { class: 'e-btn-icon e-icons e-delete-icon' }
926
+ });
927
+ element.appendChild(spanElement);
814
928
  }
815
929
  if (!this.showButtons.ruleDelete) {
816
930
  element.classList.add('e-button-hide');
817
931
  }
818
932
  }
819
- if (this.displayMode === 'Vertical' || this.element.className.indexOf('e-device') > -1) {
820
- ruleElem.className = 'e-rule-container e-vertical-mode';
821
- }
822
- else {
823
- ruleElem.className = 'e-rule-container e-horizontal-mode';
824
- }
933
+ ruleElem.className = 'e-rule-container ' + (isVertical ? 'e-vertical-mode' : 'e-horizontal-mode');
825
934
  var previousRuleElem = ruleElem.previousElementSibling;
826
- if (this.enableSeparateConnector) {
827
- var prevRule = void 0;
828
- var ruleContainer = void 0;
829
- if (previousRuleElem && previousRuleElem.classList.contains('e-group-container')) {
830
- ruleContainer = previousRuleElem.querySelectorAll('.e-rule-container');
831
- previousRuleElem = ruleContainer[ruleContainer.length - 1];
832
- }
833
- if (previousRuleElem && previousRuleElem.classList.contains('e-rule-container')) {
834
- prevRule = this.getRule(previousRuleElem);
835
- }
836
- if (this.headerTemplate && previousRuleElem && prevRule) {
837
- this.headerTemplateFn(previousRuleElem, false, prevRule.condition, prevRule, previousRuleElem.id);
838
- }
839
- else if (isNullOrUndefined(previousRuleElem) && ruleElem.id !== this.element.id + '_group0_rule0') {
840
- var group = ruleElem.closest('.e-group-container');
841
- if (group && group.previousElementSibling) {
842
- var prevElem = group.previousElementSibling;
843
- var prevRuleContainer = prevElem.querySelectorAll('.e-rule-container');
844
- if (prevElem.classList.contains('e-group-container')) {
845
- prevElem = prevRuleContainer[prevRuleContainer.length - 1];
846
- }
847
- if (prevElem.classList.contains('e-rule-container')) {
848
- var prevRule_1 = this.getRule(prevElem);
849
- this.headerTemplateFn(prevElem, false, prevRule_1.condition, prevRule_1, prevElem.id, true);
850
- }
851
- }
852
- else {
853
- this.headerTemplateFn(ruleElem, false, rule.condition, rule, ruleElem.id, true);
854
- }
855
- }
856
- }
857
- else {
858
- if (previousRuleElem && previousRuleElem.className.indexOf('e-rule-container') > -1) {
859
- if (ruleElem.className.indexOf('e-joined-rule') < 0) {
860
- ruleElem.className += ' e-joined-rule';
861
- }
862
- if (previousRuleElem.className.indexOf('e-prev-joined-rule') < 0) {
863
- previousRuleElem.className += ' e-prev-joined-rule';
864
- }
865
- }
866
- }
867
- if (previousRuleElem && previousRuleElem.className.indexOf('e-group-container') > -1 &&
868
- ruleElem.className.indexOf('e-separate-rule') < 0) {
869
- ruleElem.className += ' e-separate-rule';
870
- }
935
+ this.processAdjacentElements(ruleElem, previousRuleElem, rule);
871
936
  if (!this.isImportRules) {
872
937
  this.updateAddedRule(trgt, rule, newRule, isRlTmp, pId, this.enableSeparateConnector ? true : null);
873
938
  }
939
+ var ruleCount = this.rule.rules.length;
874
940
  if (!column || (column && !column.ruleTemplate) || !rule.field) {
875
- if (this.fieldMode === 'Default') {
876
- var ddlField = void 0;
877
- var ddlValue = void 0;
878
- if (this.separator && rule.field) {
879
- ddlValue = this.GetRootColumnName(rule.field);
880
- }
881
- else if (this.autoSelectField) {
882
- ddlValue = this.GetRootColumnName(rule.field);
883
- }
884
- else {
885
- ddlValue = this.isImportRules ? this.GetRootColumnName(rule.field) : rule.field;
886
- }
887
- ddlField = {
888
- dataSource: this.columns,
889
- fields: this.fields, placeholder: this.l10n.getConstant('SelectField'),
890
- popupHeight: ((this.columns.length > 5) ? height : 'auto'), close: this.fieldClose.bind(this, ruleElem.id + '_filterkey'),
891
- change: this.changeField.bind(this), value: rule ? ddlValue : null, open: this.popupOpen.bind(this, true), cssClass: 'qb-dropdownlist'
892
- };
893
- if (this.fieldModel) {
894
- ddlField = __assign({}, ddlField, this.fieldModel);
895
- }
896
- dropDownList = new DropDownList(ddlField);
897
- dropDownList.appendTo('#' + ruleElem.id + '_filterkey');
898
- var ddlVal = void 0;
899
- if (this.separator && rule.field) {
900
- ddlVal = this.GetRootColumnName(rule.field);
901
- }
902
- else {
903
- ddlVal = this.isImportRules ? this.GetRootColumnName(rule.field) :
904
- dropDownList.value;
905
- }
906
- this.selectedColumn = dropDownList.getDataByValue(ddlVal);
907
- if (Object.keys(rule).length) {
908
- this.changeRule(rule, {
909
- element: dropDownList.element, itemData: this.selectedColumn
910
- });
911
- }
941
+ if (ruleCount > 20) {
942
+ setTimeout(function () {
943
+ _this.applyFieldComponent(ruleElem, rule, height);
944
+ }, 0);
912
945
  }
913
946
  else {
914
- var ddlField = void 0;
915
- var ddlValue = this.isImportRules ? rule.field : rule.field;
916
- this.dummyDropdownTreeDs = extend([], this.columns, [], true);
917
- this.updateDropdowntreeDS(this.dummyDropdownTreeDs);
918
- ddlField = {
919
- fields: { dataSource: this.dummyDropdownTreeDs,
920
- value: 'field', text: 'label', child: 'columns', expanded: 'expanded', selectable: 'selectable' },
921
- placeholder: this.l10n.getConstant('SelectField'), showClearButton: false,
922
- popupHeight: ((this.columns.length > 5) ? height : 'auto'), changeOnBlur: false,
923
- change: this.changeField.bind(this), value: !isNullOrUndefined(ddlValue) ? [ddlValue] : null,
924
- open: this.popupOpen.bind(this, false), treeSettings: { expandOn: 'Click' },
925
- cssClass: 'e-qb-ddt', filtering: this.dropdownTreeFiltering.bind(this), close: this.dropdownTreeClose.bind(this)
926
- };
927
- if (this.fieldModel) {
928
- ddlField = __assign({}, ddlField, this.fieldModel);
929
- }
930
- var dropdowntree = new DropDownTree(ddlField);
931
- dropdowntree.appendTo('#' + ruleElem.id + '_filterkey');
932
- if (!isNullOrUndefined(dropdowntree.value)) {
933
- var value = this.getLabelFromColumn(dropdowntree.value[0]);
934
- dropdowntree.element.value = value;
935
- }
936
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
937
- var ddlVal = !isNullOrUndefined(rule.field) ?
938
- this.GetRootColumnName(rule.field) : dropdowntree.value;
939
- this.selectedColumn = this.getColumn(ddlVal);
940
- if (Object.keys(rule).length) {
941
- this.changeRule(rule, {
942
- element: dropdowntree.element, itemData: this.selectedColumn
943
- });
944
- }
947
+ this.applyFieldComponent(ruleElem, rule, height);
945
948
  }
946
949
  }
947
950
  ruleID = ruleElem.id.replace(this.element.id + '_', '');
@@ -950,46 +953,204 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
950
953
  this.ruleLock(lockRuleTarget);
951
954
  }
952
955
  if (!this.isImportRules && !this.prvtEvtTgrDaD) {
953
- this.trigger('change', { groupID: trgt.id.replace(this.element.id + '_', ''), ruleID: ruleID, type: 'insertRule' });
956
+ this.trigger('change', {
957
+ groupID: trgt.id.replace(this.element.id + '_', ''),
958
+ ruleID: ruleID,
959
+ type: 'insertRule'
960
+ });
954
961
  }
955
962
  }
956
963
  if (this.enableSeparateConnector && isNullOrUndefined(rule.condition) && ruleID) {
957
964
  rule = this.getRule(ruleID);
958
965
  }
959
966
  if (this.enableSeparateConnector) {
960
- var prevElem = ruleElem.previousElementSibling;
961
- var ruleContainer = void 0;
962
- while (prevElem && !prevElem.classList.contains('e-rule-container')) {
963
- if (prevElem.classList.contains('e-group-container')) {
964
- ruleContainer = prevElem.querySelectorAll('.e-rule-container');
965
- prevElem = ruleContainer[ruleContainer.length - 1];
966
- break;
967
+ this.processConnectorElements(ruleElem);
968
+ }
969
+ };
970
+ QueryBuilder.prototype.processAdjacentElements = function (ruleElem, previousRuleElem, rule) {
971
+ if (this.enableSeparateConnector) {
972
+ if (previousRuleElem && previousRuleElem.classList.contains('e-group-container')) {
973
+ var ruleContainer = previousRuleElem.querySelectorAll('.e-rule-container');
974
+ previousRuleElem = ruleContainer[ruleContainer.length - 1];
975
+ }
976
+ if (previousRuleElem && previousRuleElem.classList.contains('e-rule-container')) {
977
+ var prevRule = this.getRule(previousRuleElem);
978
+ if (this.headerTemplate) {
979
+ this.headerTemplateFn(previousRuleElem, false, prevRule.condition, prevRule, previousRuleElem.id);
967
980
  }
968
- prevElem = prevElem.previousElementSibling;
969
981
  }
970
- if (this.headerTemplate && prevElem) {
982
+ else if (isNullOrUndefined(previousRuleElem) && ruleElem.id !== this.element.id + '_group0_rule0') {
983
+ this.handleOrphanedRuleElement(ruleElem, rule);
984
+ }
985
+ }
986
+ else {
987
+ if (previousRuleElem && previousRuleElem.className.indexOf('e-rule-container') > -1) {
988
+ ruleElem.classList.add('e-joined-rule');
989
+ previousRuleElem.classList.add('e-prev-joined-rule');
990
+ }
991
+ }
992
+ if (previousRuleElem && previousRuleElem.className.indexOf('e-group-container') > -1 &&
993
+ ruleElem.className.indexOf('e-separate-rule') < 0) {
994
+ ruleElem.className += ' e-separate-rule';
995
+ }
996
+ };
997
+ QueryBuilder.prototype.handleOrphanedRuleElement = function (ruleElem, rule) {
998
+ var group = ruleElem.closest('.e-group-container');
999
+ if (group && group.previousElementSibling) {
1000
+ var prevElem = group.previousElementSibling;
1001
+ var prevRuleContainer = prevElem.querySelectorAll('.e-rule-container');
1002
+ if (prevElem.classList.contains('e-group-container')) {
1003
+ prevElem = prevRuleContainer[prevRuleContainer.length - 1];
1004
+ }
1005
+ if (prevElem.classList.contains('e-rule-container')) {
971
1006
  var prevRule = this.getRule(prevElem);
972
- var args_2 = { requestType: 'rule-template-create', ruleID: prevElem.id, condition: prevRule.condition,
973
- notCondition: this.enableNotCondition ? true : undefined };
974
- this.trigger('actionBegin', args_2);
1007
+ this.headerTemplateFn(prevElem, false, prevRule.condition, prevRule, prevElem.id, true);
975
1008
  }
976
- else if (isNullOrUndefined(prevElem) && ruleElem.id !== this.element.id + '_group0_rule0') {
977
- var group = ruleElem.closest('.e-group-container');
978
- if (group && group.previousElementSibling && group.previousElementSibling.previousElementSibling) {
979
- var prevElem_1 = group.previousElementSibling.previousElementSibling;
980
- if (prevElem_1.classList.contains('e-group-container')) {
981
- var ruleContainer_1 = prevElem_1.querySelectorAll('.e-rule-container');
982
- prevElem_1 = ruleContainer_1[ruleContainer_1.length - 1];
983
- }
984
- if (prevElem_1.classList.contains('e-rule-container')) {
985
- var prevRule = this.getRule(prevElem_1);
986
- var args_3 = { requestType: 'rule-template-create', ruleID: prevElem_1.id,
987
- condition: prevRule.condition, notCondition: this.enableNotCondition ? true : undefined };
988
- this.trigger('actionBegin', args_3);
989
- }
990
- }
1009
+ }
1010
+ else {
1011
+ this.headerTemplateFn(ruleElem, false, rule.condition, rule, ruleElem.id, true);
1012
+ }
1013
+ };
1014
+ QueryBuilder.prototype.processConnectorElements = function (ruleElem) {
1015
+ var prevElem = ruleElem.previousElementSibling;
1016
+ var ruleContainer;
1017
+ while (prevElem && !prevElem.classList.contains('e-rule-container')) {
1018
+ if (prevElem.classList.contains('e-group-container')) {
1019
+ ruleContainer = prevElem.querySelectorAll('.e-rule-container');
1020
+ prevElem = ruleContainer[ruleContainer.length - 1];
1021
+ break;
991
1022
  }
992
- this.setMultiConnector(ruleElem);
1023
+ prevElem = prevElem.previousElementSibling;
1024
+ }
1025
+ if (this.headerTemplate && prevElem) {
1026
+ var prevRule = this.getRule(prevElem);
1027
+ var args = {
1028
+ requestType: 'rule-template-create',
1029
+ ruleID: prevElem.id,
1030
+ condition: prevRule.condition,
1031
+ notCondition: this.enableNotCondition ? true : undefined
1032
+ };
1033
+ this.trigger('actionBegin', args);
1034
+ }
1035
+ else if (isNullOrUndefined(prevElem) && ruleElem.id !== this.element.id + '_group0_rule0') {
1036
+ this.handleOrphanedConnectorElement(ruleElem);
1037
+ }
1038
+ this.setMultiConnector(ruleElem);
1039
+ };
1040
+ QueryBuilder.prototype.handleOrphanedConnectorElement = function (ruleElem) {
1041
+ var group = ruleElem.closest('.e-group-container');
1042
+ if (group && group.previousElementSibling && group.previousElementSibling.previousElementSibling) {
1043
+ var prevElem = group.previousElementSibling.previousElementSibling;
1044
+ if (prevElem.classList.contains('e-group-container')) {
1045
+ var ruleContainer = prevElem.querySelectorAll('.e-rule-container');
1046
+ prevElem = ruleContainer[ruleContainer.length - 1];
1047
+ }
1048
+ if (prevElem.classList.contains('e-rule-container')) {
1049
+ var prevRule = this.getRule(prevElem);
1050
+ var args = {
1051
+ requestType: 'rule-template-create',
1052
+ ruleID: prevElem.id,
1053
+ condition: prevRule.condition,
1054
+ notCondition: this.enableNotCondition ? true : undefined
1055
+ };
1056
+ this.trigger('actionBegin', args);
1057
+ }
1058
+ }
1059
+ };
1060
+ QueryBuilder.prototype.applyFieldComponent = function (ruleElem, rule, height) {
1061
+ if (this.fieldMode === 'Default') {
1062
+ this.applyDropdownListComponent(ruleElem, rule, height);
1063
+ }
1064
+ else {
1065
+ this.applyDropdownTreeComponent(ruleElem, rule, height);
1066
+ }
1067
+ };
1068
+ QueryBuilder.prototype.applyDropdownListComponent = function (ruleElem, rule, height) {
1069
+ var ddlField;
1070
+ var ddlValue;
1071
+ if (this.separator && rule.field) {
1072
+ ddlValue = this.GetRootColumnName(rule.field);
1073
+ }
1074
+ else if (this.autoSelectField) {
1075
+ ddlValue = this.GetRootColumnName(rule.field);
1076
+ }
1077
+ else {
1078
+ ddlValue = this.isImportRules ? this.GetRootColumnName(rule.field) : rule.field;
1079
+ }
1080
+ ddlField = {
1081
+ dataSource: this.columns,
1082
+ fields: this.fields,
1083
+ placeholder: this.l10n.getConstant('SelectField'),
1084
+ popupHeight: ((this.columns.length > 5) ? height : 'auto'),
1085
+ close: this.fieldClose.bind(this, ruleElem.id + '_filterkey'),
1086
+ change: this.changeField.bind(this),
1087
+ value: rule ? ddlValue : null,
1088
+ open: this.popupOpen.bind(this, true),
1089
+ cssClass: 'qb-dropdownlist'
1090
+ };
1091
+ if (this.fieldModel) {
1092
+ ddlField = __assign({}, ddlField, this.fieldModel);
1093
+ }
1094
+ var dropDownList = new DropDownList(ddlField);
1095
+ dropDownList.appendTo('#' + ruleElem.id + '_filterkey');
1096
+ var ddlVal;
1097
+ if (this.separator && rule.field) {
1098
+ ddlVal = this.GetRootColumnName(rule.field);
1099
+ }
1100
+ else {
1101
+ ddlVal = this.isImportRules ? this.GetRootColumnName(rule.field) : dropDownList.value;
1102
+ }
1103
+ this.selectedColumn = dropDownList.getDataByValue(ddlVal);
1104
+ if (Object.keys(rule).length) {
1105
+ this.changeRule(rule, {
1106
+ element: dropDownList.element,
1107
+ itemData: this.selectedColumn
1108
+ });
1109
+ }
1110
+ };
1111
+ QueryBuilder.prototype.applyDropdownTreeComponent = function (ruleElem, rule, height) {
1112
+ var ddlField;
1113
+ var ddlValue = this.isImportRules ? rule.field : rule.field;
1114
+ this.dummyDropdownTreeDs = extend([], this.columns, [], true);
1115
+ this.updateDropdowntreeDS(this.dummyDropdownTreeDs);
1116
+ ddlField = {
1117
+ fields: {
1118
+ dataSource: this.dummyDropdownTreeDs,
1119
+ value: 'field',
1120
+ text: 'label',
1121
+ child: 'columns',
1122
+ expanded: 'expanded',
1123
+ selectable: 'selectable'
1124
+ },
1125
+ placeholder: this.l10n.getConstant('SelectField'),
1126
+ showClearButton: false,
1127
+ popupHeight: ((this.columns.length > 5) ? height : 'auto'),
1128
+ changeOnBlur: false,
1129
+ change: this.changeField.bind(this),
1130
+ value: !isNullOrUndefined(ddlValue) ? [ddlValue] : null,
1131
+ open: this.popupOpen.bind(this, false),
1132
+ treeSettings: { expandOn: 'Click' },
1133
+ cssClass: 'e-qb-ddt',
1134
+ filtering: this.dropdownTreeFiltering.bind(this),
1135
+ close: this.dropdownTreeClose.bind(this)
1136
+ };
1137
+ if (this.fieldModel) {
1138
+ ddlField = __assign({}, ddlField, this.fieldModel);
1139
+ }
1140
+ var dropdowntree = new DropDownTree(ddlField);
1141
+ dropdowntree.appendTo('#' + ruleElem.id + '_filterkey');
1142
+ if (!isNullOrUndefined(dropdowntree.value)) {
1143
+ var value = this.getLabelFromColumn(dropdowntree.value[0]);
1144
+ dropdowntree.element.value = value;
1145
+ }
1146
+ var ddlVal = !isNullOrUndefined(rule.field) ?
1147
+ this.GetRootColumnName(rule.field) : dropdowntree.value;
1148
+ this.selectedColumn = this.getColumn(ddlVal);
1149
+ if (Object.keys(rule).length) {
1150
+ this.changeRule(rule, {
1151
+ element: dropdowntree.element,
1152
+ itemData: this.selectedColumn
1153
+ });
993
1154
  }
994
1155
  };
995
1156
  QueryBuilder.prototype.dropdownTreeFiltering = function (args) {
@@ -1004,7 +1165,6 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
1004
1165
  var ruleElem = document.getElementById(ruleElemID);
1005
1166
  this.ddTree = getComponent(ruleElem.querySelector('input.e-dropdowntree'), 'dropdowntree');
1006
1167
  var hierarchicalData = extend([], this.columns, [], true);
1007
- // Cancel the default filtering.
1008
1168
  args.cancel = true;
1009
1169
  if (args.text === '') {
1010
1170
  this.changeDataSource(hierarchicalData);
@@ -1164,7 +1324,8 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
1164
1324
  }
1165
1325
  };
1166
1326
  QueryBuilder.prototype.renderToolTip = function (element) {
1167
- var tooltip = new Tooltip({ content: this.l10n.getConstant('ValidationMessage'), isSticky: true,
1327
+ var tooltip = new Tooltip({
1328
+ content: this.l10n.getConstant('ValidationMessage'), isSticky: true,
1168
1329
  position: 'BottomCenter', cssClass: 'e-querybuilder-error', afterClose: function () {
1169
1330
  tooltip.destroy();
1170
1331
  }, beforeOpen: function (args) {
@@ -1172,7 +1333,8 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
1172
1333
  if (tooltipCloseElement) {
1173
1334
  tooltipCloseElement.style.display = 'none';
1174
1335
  }
1175
- } });
1336
+ }
1337
+ });
1176
1338
  tooltip.appendTo(element);
1177
1339
  tooltip.open(element);
1178
1340
  };
@@ -1330,7 +1492,6 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
1330
1492
  groupElem.appendChild(groupHdrElem);
1331
1493
  grpBodyElem.appendChild(rulesElem);
1332
1494
  groupElem.appendChild(grpBodyElem);
1333
- // create button group in OR and AND process
1334
1495
  if (!this.headerTemplate) {
1335
1496
  if (this.allowDragAndDrop) {
1336
1497
  dragClsName = 'e-icons e-drag-qb-rule';
@@ -1338,8 +1499,12 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
1338
1499
  else {
1339
1500
  dragClsName = 'e-icons e-drag-qb-rule e-hidden';
1340
1501
  }
1341
- var spanDragElement = this.createElement('span', { attrs: { class: dragClsName, 'aria-label': 'drag handle',
1342
- title: 'drag handle' } });
1502
+ var spanDragElement = this.createElement('span', {
1503
+ attrs: {
1504
+ class: dragClsName, 'aria-label': 'drag handle',
1505
+ title: 'drag handle'
1506
+ }
1507
+ });
1343
1508
  groupHdrElem.appendChild(spanDragElement);
1344
1509
  var className = this.enableSeparateConnector && !isConnector ? 'e-lib e-btn-group e-qb-toggle-btn' : 'e-lib e-btn-group';
1345
1510
  glueElem = this.createElement('div', { attrs: { class: className, role: 'group' } });
@@ -1357,13 +1522,17 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
1357
1522
  }
1358
1523
  inputElem = this.createElement('input', { attrs: { type: 'radio', class: 'e-btngroup-and', value: 'AND' } });
1359
1524
  glueElem.appendChild(inputElem);
1360
- labelElem = this.createElement('label', { attrs: { class: 'e-lib e-btn e-btngroup-and-lbl e-small' },
1361
- innerHTML: this.l10n.getConstant('AND') });
1525
+ labelElem = this.createElement('label', {
1526
+ attrs: { class: 'e-lib e-btn e-btngroup-and-lbl e-small' },
1527
+ innerHTML: this.l10n.getConstant('AND')
1528
+ });
1362
1529
  glueElem.appendChild(labelElem);
1363
1530
  inputElem = this.createElement('input', { attrs: { type: 'radio', class: 'e-btngroup-or', value: 'OR' } });
1364
1531
  glueElem.appendChild(inputElem);
1365
- labelElem = this.createElement('label', { attrs: { class: 'e-lib e-btn e-btngroup-or-lbl e-small' },
1366
- innerHTML: this.l10n.getConstant('OR') });
1532
+ labelElem = this.createElement('label', {
1533
+ attrs: { class: 'e-lib e-btn e-btngroup-or-lbl e-small' },
1534
+ innerHTML: this.l10n.getConstant('OR')
1535
+ });
1367
1536
  glueElem.appendChild(labelElem);
1368
1537
  groupHdrElem.appendChild(glueElem);
1369
1538
  grpActElem = this.createElement('div', { attrs: { class: 'e-group-action' } });
@@ -1396,8 +1565,12 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
1396
1565
  else {
1397
1566
  dragClsName = 'e-icons e-drag-qb-rule e-hidden';
1398
1567
  }
1399
- var spanDragElement = this.createElement('span', { attrs: { class: dragClsName, 'aria-label': 'drag handle',
1400
- title: 'drag handle' } });
1568
+ var spanDragElement = this.createElement('span', {
1569
+ attrs: {
1570
+ class: dragClsName, 'aria-label': 'drag handle',
1571
+ title: 'drag handle'
1572
+ }
1573
+ });
1401
1574
  fieldElem.appendChild(spanDragElement);
1402
1575
  var filterElem = this.createElement('input', { attrs: { type: 'text', class: 'e-filter-input' } });
1403
1576
  tempElem.appendChild(filterElem);
@@ -1678,9 +1851,11 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
1678
1851
  }
1679
1852
  this.updatedRule = null;
1680
1853
  if (this.headerTemplate) {
1681
- var args_4 = { requestType: 'header-template-create', ruleID: groupElem.id, condition: condition,
1682
- notCondition: this.enableNotCondition ? not : undefined };
1683
- this.trigger('actionBegin', args_4);
1854
+ var args_1 = {
1855
+ requestType: 'header-template-create', ruleID: groupElem.id, condition: condition,
1856
+ notCondition: this.enableNotCondition ? not : undefined
1857
+ };
1858
+ this.trigger('actionBegin', args_1);
1684
1859
  }
1685
1860
  else {
1686
1861
  if (this.enableSeparateConnector) {
@@ -1718,9 +1893,10 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
1718
1893
  }
1719
1894
  };
1720
1895
  QueryBuilder.prototype.setMultiConnector = function (trgt) {
1721
- if (this.enableSeparateConnector && !this.headerTemplate) {
1722
- if (trgt.previousElementSibling && this.groupElem.querySelector('.e-btn-group')) {
1723
- trgt.parentElement.insertBefore(this.groupTemplate(true).querySelector('.e-btn-group'), trgt);
1896
+ if (this.enableSeparateConnector && !this.headerTemplate && trgt.previousElementSibling) {
1897
+ var btnGroupElem = this.groupTemplate(true).querySelector('.e-btn-group');
1898
+ if (btnGroupElem) {
1899
+ trgt.parentElement.insertBefore(btnGroupElem, trgt);
1724
1900
  var notElem = trgt.previousElementSibling.childNodes[0];
1725
1901
  if (notElem.classList.contains('e-qb-toggle')) {
1726
1902
  notElem.style.display = 'none';
@@ -1763,9 +1939,11 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
1763
1939
  groupHdr = groupElem;
1764
1940
  }
1765
1941
  if (this.headerTemplate) {
1766
- args = { requestType: 'header-template-initialize', ruleID: groupElem.id,
1942
+ args = {
1943
+ requestType: 'header-template-initialize', ruleID: groupElem.id,
1767
1944
  notCondition: this.enableNotCondition ? not : undefined,
1768
- condition: condition, rule: this.getRuleCollection(rule, false), groupID: groupID };
1945
+ condition: condition, rule: this.getRuleCollection(rule, false), groupID: groupID
1946
+ };
1769
1947
  this.trigger('actionBegin', args);
1770
1948
  if (this.enableSeparateConnector && groupElem.id.indexOf('rule') !== -1) {
1771
1949
  args.requestType = 'rule-template-create';
@@ -1918,7 +2096,7 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
1918
2096
  QueryBuilder.prototype.templateChange = function (element, value, type) {
1919
2097
  var grpElem = closest(element, '.e-group-container');
1920
2098
  var eventsArgs;
1921
- var rules = this.getParentGroup(grpElem);
2099
+ var rules = grpElem && this.getParentGroup(grpElem);
1922
2100
  var ruleElem = closest(element, '.e-rule-container');
1923
2101
  var index = 0;
1924
2102
  if (this.allowValidation) {
@@ -1933,7 +2111,7 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
1933
2111
  index++;
1934
2112
  }
1935
2113
  }
1936
- var rule = rules.rules[index];
2114
+ var rule = rules && rules.rules[index];
1937
2115
  if (type === 'field') {
1938
2116
  this.selectedColumn = this.getColumn(value);
1939
2117
  }
@@ -1941,7 +2119,7 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
1941
2119
  this.selectedColumn = this.getColumn(rule.field);
1942
2120
  }
1943
2121
  var operVal;
1944
- this.previousColumn = this.getColumn(rule.field);
2122
+ this.previousColumn = rule && this.getColumn(rule.field);
1945
2123
  var beforeRules = this.getValidRules(this.rule);
1946
2124
  if (this.selectedColumn) {
1947
2125
  if (this.selectedColumn.operators) {
@@ -1956,11 +2134,16 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
1956
2134
  switch (type) {
1957
2135
  case 'field':
1958
2136
  if (isNullOrUndefined(value)) {
1959
- rule.field = '';
1960
- rule.label = '';
1961
- rule.type = '';
1962
- rule.value = '';
1963
- rule.operator = '';
2137
+ if (!isNullOrUndefined(rule)) {
2138
+ rule.field = '';
2139
+ rule.label = '';
2140
+ rule.type = '';
2141
+ rule.value = '';
2142
+ rule.operator = '';
2143
+ }
2144
+ else {
2145
+ return;
2146
+ }
1964
2147
  }
1965
2148
  else {
1966
2149
  rule.field = value;
@@ -2011,10 +2194,14 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
2011
2194
  ruleElement.className.indexOf('e-separate-rule') < 0) {
2012
2195
  ruleElement.className += ' e-separate-rule';
2013
2196
  }
2014
- var args = { requestType: 'template-create', action: type, ruleID: grpEle.id,
2015
- fields: this.fields, rule: rule };
2016
- eventsArgs = { groupID: grpElem.id.replace(this.element.id + '_', ''), ruleID: grpEle.id.replace(this.element.id + '_', ''),
2017
- value: rule.field, type: 'field' };
2197
+ var args = {
2198
+ requestType: 'template-create', action: type, ruleID: grpEle.id,
2199
+ fields: this.fields, rule: rule
2200
+ };
2201
+ eventsArgs = {
2202
+ groupID: grpElem.id.replace(this.element.id + '_', ''), ruleID: grpEle.id.replace(this.element.id + '_', ''),
2203
+ value: rule.field, type: 'field'
2204
+ };
2018
2205
  this.trigger('actionBegin', args);
2019
2206
  this.trigger('change', eventsArgs);
2020
2207
  }
@@ -2155,8 +2342,10 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
2155
2342
  var item = ddl.popupObj && ddl.popupObj.element.querySelector('.e-active');
2156
2343
  var itemData = ddl.getItemData();
2157
2344
  ddl.value = itemData.value;
2158
- var customArgs = { element: ddl.element, value: itemData.value, isInteracted: true,
2159
- previousItemData: this.prevItemData, previousItem: null, item: item, itemData: itemData, event: null, e: null };
2345
+ var customArgs = {
2346
+ element: ddl.element, value: itemData.value, isInteracted: true,
2347
+ previousItemData: this.prevItemData, previousItem: null, item: item, itemData: itemData, event: null, e: null
2348
+ };
2160
2349
  if (ddl.previousValue !== ddl.value) {
2161
2350
  this.changeField(customArgs);
2162
2351
  }
@@ -2269,8 +2458,10 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
2269
2458
  this.selectedColumn = this.getColumn(ddlValue);
2270
2459
  var ruleElem = closest(flt, '.e-rule-container');
2271
2460
  var ruleID = ruleElem.id.replace(this.element.id + '_', '');
2272
- var eventsArgs = { groupID: grID, ruleID: ruleID, selectedField: this.fieldMode === 'DropdownTree' ?
2273
- dl.value[0] : dl.value, cancel: false, type: 'field' };
2461
+ var eventsArgs = {
2462
+ groupID: grID, ruleID: ruleID, selectedField: this.fieldMode === 'DropdownTree' ?
2463
+ dl.value[0] : dl.value, cancel: false, type: 'field'
2464
+ };
2274
2465
  if (!this.isImportRules && !this.prvtEvtTgrDaD) {
2275
2466
  this.trigger('beforeChange', eventsArgs, function (observedChangeArgs) {
2276
2467
  _this.fieldChangeSuccess(observedChangeArgs, tmpRl, flt, rl, dArg);
@@ -2859,19 +3050,25 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
2859
3050
  : getComponent(container.querySelector('.e-rule-filter .e-filter-input'), 'dropdownlist');
2860
3051
  var column = this.fieldMode === 'DropdownTree' ? this.getColumn(ddlObj.value[0]) : this.getColumn(ddlObj.value);
2861
3052
  if (typeof itemData.template === 'string' || itemData.template.write === undefined) {
2862
- var args = { rule: rule, ruleID: container.id, operator: tempRule.operator, field: column.field,
2863
- requestType: 'value-template-create' };
3053
+ var args = {
3054
+ rule: rule, ruleID: container.id, operator: tempRule.operator, field: column.field,
3055
+ requestType: 'value-template-create'
3056
+ };
2864
3057
  this.trigger('actionBegin', args);
2865
3058
  }
2866
3059
  else {
2867
3060
  var template = itemData.template;
2868
3061
  if (typeof template.write === 'string') {
2869
- getValue(template.write, window)({ elements: tempElements.length > 1 ? tempElements : tempElements[0], values: rule.value,
2870
- operator: tempRule.operator, field: column.field, dataSource: column.values });
3062
+ getValue(template.write, window)({
3063
+ elements: tempElements.length > 1 ? tempElements : tempElements[0], values: rule.value,
3064
+ operator: tempRule.operator, field: column.field, dataSource: column.values
3065
+ });
2871
3066
  }
2872
3067
  else if (typeof itemData.template !== 'function') {
2873
- itemData.template.write({ elements: tempElements.length > 1 ? tempElements : tempElements[0],
2874
- values: rule.value, operator: tempRule.operator, field: column.field, dataSource: column.values });
3068
+ itemData.template.write({
3069
+ elements: tempElements.length > 1 ? tempElements : tempElements[0],
3070
+ values: rule.value, operator: tempRule.operator, field: column.field, dataSource: column.values
3071
+ });
2875
3072
  }
2876
3073
  }
2877
3074
  };
@@ -3369,8 +3566,10 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
3369
3566
  }
3370
3567
  else {
3371
3568
  if (typeof itemData.template === 'string' || itemData.template.create === undefined) {
3372
- args = { requestType: 'value-template-initialize', ruleID: ruleID, field: field, operator: operator, rule: rule,
3373
- renderTemplate: true };
3569
+ args = {
3570
+ requestType: 'value-template-initialize', ruleID: ruleID, field: field, operator: operator, rule: rule,
3571
+ renderTemplate: true
3572
+ };
3374
3573
  this.trigger('actionBegin', args, function (observedActionArgs) {
3375
3574
  isRendered = _this.actionBeginSuccessCallBack(observedActionArgs, itemData, ruleID, field, target);
3376
3575
  });
@@ -3578,7 +3777,6 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
3578
3777
  element = element ? element : ruleElement.nextElementSibling.nextElementSibling.querySelector('input.e-control');
3579
3778
  operator = getComponent(element, 'dropdownlist').value.toString();
3580
3779
  rule.rules[index].operator = operator;
3581
- // Value Fields
3582
3780
  var valueContainer = ruleElement.nextElementSibling.nextElementSibling;
3583
3781
  var elementCln = valueContainer.querySelectorAll('input.e-control');
3584
3782
  if (elementCln.length < 1) {
@@ -3740,6 +3938,9 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
3740
3938
  }
3741
3939
  };
3742
3940
  QueryBuilder.prototype.validateValue = function (rule, ruleElem, index) {
3941
+ if (isNullOrUndefined(rule) && isNullOrUndefined(ruleElem)) {
3942
+ return;
3943
+ }
3743
3944
  if (!isNullOrUndefined(index)) {
3744
3945
  rule = rule.rules[index];
3745
3946
  }
@@ -3901,8 +4102,10 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
3901
4102
  if (grouplen) {
3902
4103
  this.isPublic = true;
3903
4104
  for (var i = 0, len = groups.length; i < len; i++) {
3904
- this.updatedRule = { isLocked: groups[i].isLocked, condition: groups[i].condition,
3905
- not: groups[i].not };
4105
+ this.updatedRule = {
4106
+ isLocked: groups[i].isLocked, condition: groups[i].condition,
4107
+ not: groups[i].not
4108
+ };
3906
4109
  this.importRules(groups[i], groupElem, false, groups[i].not);
3907
4110
  }
3908
4111
  this.isPublic = false;
@@ -4031,10 +4234,10 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
4031
4234
  this.element.querySelector('.e-group-header').appendChild(collapseElem);
4032
4235
  };
4033
4236
  QueryBuilder.prototype.columnSort = function () {
4034
- if (this.sortDirection.toLowerCase() === 'descending') {
4237
+ if (this.sortDirection && this.sortDirection.toLowerCase() === 'descending') {
4035
4238
  this.columns = new DataManager(this.columns).executeLocal(new Query().sortByDesc('field'));
4036
4239
  }
4037
- else if (this.sortDirection.toLowerCase() === 'ascending') {
4240
+ else if (this.sortDirection && this.sortDirection.toLowerCase() === 'ascending') {
4038
4241
  this.columns = new DataManager(this.columns).executeLocal(new Query().sortBy('field'));
4039
4242
  }
4040
4243
  };
@@ -4521,8 +4724,10 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
4521
4724
  }
4522
4725
  }
4523
4726
  }
4524
- var dragEventArgs = { dragRuleID: targetElem !== null ? targetElem.id : grpElem !== null ? grpElem.id : null,
4525
- dragGroupID: grpElem !== null ? grpElem.id : null, cancel: false };
4727
+ var dragEventArgs = {
4728
+ dragRuleID: targetElem !== null ? targetElem.id : grpElem !== null ? grpElem.id : null,
4729
+ dragGroupID: grpElem !== null ? grpElem.id : null, cancel: false
4730
+ };
4526
4731
  this.trigger('drag', dragEventArgs);
4527
4732
  this.isDragEventPrevent = dragEventArgs.cancel;
4528
4733
  };
@@ -4543,8 +4748,10 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
4543
4748
  var prevRule;
4544
4749
  if (!isPreventelem) {
4545
4750
  var targetGrp = closest(e.target, '.e-group-container');
4546
- var dropEventArgs = { cancel: false, dropRuleID: targetGroup !== null ? targetGroup.id
4547
- : targetGrp !== null ? targetGrp.id : null, dropGroupID: targetGrp !== null ? targetGrp.id : null };
4751
+ var dropEventArgs = {
4752
+ cancel: false, dropRuleID: targetGroup !== null ? targetGroup.id
4753
+ : targetGrp !== null ? targetGrp.id : null, dropGroupID: targetGrp !== null ? targetGrp.id : null
4754
+ };
4548
4755
  this.trigger('drop', dropEventArgs);
4549
4756
  if (dropEventArgs.cancel) {
4550
4757
  isPreventelem = true;
@@ -5313,7 +5520,8 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
5313
5520
  else {
5314
5521
  if (customObj && (customObj.type === 'question' || customObj.type === 'answer')) {
5315
5522
  var notValue = rule.not;
5316
- rule = { 'label': rule.label, 'field': rule.field, 'operator': rule.operator, 'type': rule.type, 'value': rule.value,
5523
+ rule = {
5524
+ 'label': rule.label, 'field': rule.field, 'operator': rule.operator, 'type': rule.type, 'value': rule.value,
5317
5525
  'condition': rule.condition, 'rules': rule.rules
5318
5526
  };
5319
5527
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
@@ -5635,21 +5843,40 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
5635
5843
  var columns = this.columns;
5636
5844
  var column;
5637
5845
  columns = col ? col : columns;
5638
- for (var i = 0, iLen = columns.length; i < iLen; i++) {
5846
+ var fieldParts = this.separator !== '' ? (field ? field.split(this.separator) : []) : [field];
5847
+ var rootField = fieldParts && fieldParts.length > 0 ? fieldParts[0] : null;
5848
+ for (var i = 0; i < columns.length; i++) {
5639
5849
  if (columns[i].field === field) {
5640
5850
  column = columns[i];
5641
5851
  break;
5642
5852
  }
5643
- else if (columns[i].columns) {
5644
- column = this.getColumn(field, columns[i].columns);
5645
- if (column) {
5853
+ }
5854
+ if (!column && this.separator !== '') {
5855
+ for (var i = 0; i < columns.length; i++) {
5856
+ if (columns[i].field === rootField) {
5857
+ if (columns[i].columns) {
5858
+ var subField = field.substring(rootField.length + this.separator.length);
5859
+ if (subField) {
5860
+ column = this.getColumn(subField, columns[i].columns);
5861
+ }
5862
+ else {
5863
+ column = columns[i];
5864
+ }
5865
+ }
5866
+ else {
5867
+ column = columns[i];
5868
+ }
5646
5869
  break;
5647
5870
  }
5648
5871
  }
5649
- else if (field && field.indexOf(this.separator) > -1) {
5650
- if (this.separator !== '' && columns[i].field === field.split(this.separator)[0]) {
5651
- column = columns[i];
5652
- break;
5872
+ }
5873
+ if (!column) {
5874
+ for (var i = 0; i < columns.length; i++) {
5875
+ if (columns[i].columns) {
5876
+ column = this.getColumn(field, columns[i].columns);
5877
+ if (column) {
5878
+ break;
5879
+ }
5653
5880
  }
5654
5881
  }
5655
5882
  }
@@ -6103,6 +6330,7 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
6103
6330
  return false;
6104
6331
  };
6105
6332
  QueryBuilder.prototype.getSqlString = function (rules, enableEscape, queryStr, sqlLocale) {
6333
+ var _this = this;
6106
6334
  var isRoot = false;
6107
6335
  if (!queryStr && queryStr !== '') {
6108
6336
  queryStr = '';
@@ -6111,86 +6339,74 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
6111
6339
  else {
6112
6340
  queryStr += '(';
6113
6341
  }
6114
- var condition = rules.condition;
6115
6342
  if (rules.not) {
6116
- var rulesNotCondition = void 0;
6117
- if (isRoot) {
6118
- rulesNotCondition = sqlLocale ? this.l10n.getConstant('NOT').toUpperCase() + ' (' : 'NOT (';
6119
- queryStr += rulesNotCondition;
6120
- }
6121
- else {
6122
- rulesNotCondition = sqlLocale ? ' ' + this.l10n.getConstant('NOT').toUpperCase() + ' (' : ' NOT (';
6123
- queryStr += rulesNotCondition;
6124
- }
6343
+ var notPrefix = sqlLocale ? this.l10n.getConstant('NOT').toUpperCase() + ' ' : 'NOT ';
6344
+ queryStr += isRoot ? notPrefix + '(' : ' ' + notPrefix + '(';
6125
6345
  }
6126
- if (rules.rules) {
6127
- for (var j = 0, jLen = rules.rules.length; j < jLen; j++) {
6128
- if (rules.rules[j].rules) {
6129
- queryStr = this.getSqlString(rules.rules[j], enableEscape, queryStr, sqlLocale);
6130
- if (this.enableSeparateConnector) {
6131
- condition = rules.rules[j].condition;
6346
+ if (rules.rules && rules.rules.length) {
6347
+ queryStr += rules.rules.reduce(function (result, rule, j) {
6348
+ var ruleStr = '';
6349
+ if (rule.rules) {
6350
+ ruleStr = _this.getSqlString(rule, enableEscape, '', sqlLocale);
6351
+ if (_this.enableSeparateConnector) {
6352
+ rules.condition = rule.condition;
6132
6353
  }
6133
6354
  }
6134
6355
  else {
6135
- var rule = rules.rules[j];
6356
+ var ruleOpertor = sqlLocale ? _this.sqlOperators[rule.operator] : _this.operators[rule.operator];
6136
6357
  var valueStr = '';
6137
- var ruleOpertor = sqlLocale ? this.sqlOperators[rule.operator] : this.operators[rule.operator];
6138
6358
  if (rule.value instanceof Array) {
6139
6359
  if (rule.operator.toString().indexOf('between') > -1) {
6140
- var ruleCondition = sqlLocale ? ' ' + this.l10n.getConstant('AND').toUpperCase() + ' ' : ' ' + 'AND' + ' ';
6141
- if (rule.type === 'date' && !this.isDateFunction(rule.value[0])) {
6142
- valueStr += '"' + rule.value[0] + '"' + ruleCondition + '"' + rule.value[1] + '"';
6360
+ var ruleCondition = sqlLocale ? ' ' + _this.l10n.getConstant('AND').toUpperCase() + ' ' : ' AND ';
6361
+ if (rule.type === 'date' && !_this.isDateFunction(rule.value[0])) {
6362
+ valueStr = "\"" + rule.value[0] + "\"" + ruleCondition + "\"" + rule.value[1] + "\"";
6143
6363
  }
6144
6364
  else {
6145
- valueStr += rule.value[0] + ruleCondition + rule.value[1];
6365
+ valueStr = "" + rule.value[0] + ruleCondition + rule.value[1];
6146
6366
  }
6147
6367
  }
6148
6368
  else {
6149
6369
  if (typeof rule.value[0] === 'string' && rule.value !== null) {
6150
- valueStr += '("' + rule.value[0] + '"';
6151
- for (var k = 1, kLen = rule.value.length; k < kLen; k++) {
6152
- valueStr += ',"' + rule.value[k] + '"';
6153
- }
6154
- valueStr += ')';
6370
+ var valueArray = rule.value;
6371
+ valueStr = '("' + valueArray.join('","') + '")';
6155
6372
  }
6156
6373
  else {
6157
- valueStr += '(' + rule.value + ')';
6374
+ valueStr = "(" + rule.value + ")";
6158
6375
  }
6159
6376
  }
6160
6377
  }
6161
6378
  else {
6162
6379
  if (rule.operator.toString().indexOf('startswith') > -1) {
6163
- valueStr += rule.value ? '("' + rule.value + '%")' : '(' + rule.value + ')';
6380
+ valueStr = rule.value ? "(\"" + rule.value + "%\")" : "(" + rule.value + ")";
6164
6381
  }
6165
6382
  else if (rule.operator.toString().indexOf('endswith') > -1) {
6166
- valueStr += rule.value ? '("%' + rule.value + '")' : '(' + rule.value + ')';
6383
+ valueStr = rule.value ? "(\"%" + rule.value + "\")" : "(" + rule.value + ")";
6167
6384
  }
6168
6385
  else if (rule.operator.toString().indexOf('contains') > -1) {
6169
- valueStr += rule.value ? '("%' + rule.value + '%")' : '(' + rule.value + ')';
6386
+ valueStr = rule.value ? "(\"%" + rule.value + "%\")" : "(" + rule.value + ")";
6170
6387
  }
6171
6388
  else {
6172
6389
  if (rule.type === 'number' || typeof rule.value === 'boolean' ||
6173
6390
  (rule.value === null && (rule.operator.toString().indexOf('empty') < -1))) {
6174
- valueStr += rule.value;
6391
+ valueStr = "" + rule.value;
6175
6392
  }
6176
6393
  else if (rule.operator.toString().indexOf('empty') > -1) {
6177
- valueStr += '""';
6394
+ valueStr = '""';
6178
6395
  }
6179
6396
  else {
6180
- valueStr += '"' + rule.value + '"';
6397
+ valueStr = "\"" + rule.value + "\"";
6181
6398
  }
6182
6399
  }
6183
6400
  }
6401
+ var fieldName = rule.field;
6402
+ if (enableEscape) {
6403
+ fieldName = '`' + fieldName + '`';
6404
+ }
6405
+ else if (fieldName.indexOf(' ') > -1) {
6406
+ fieldName = '"' + fieldName + '"';
6407
+ }
6184
6408
  if (rule.operator.toString().indexOf('null') > -1) {
6185
- if (enableEscape) {
6186
- rule.field = '`' + rule.field + '`';
6187
- }
6188
- else {
6189
- if (rule.field.indexOf(' ') > -1) {
6190
- rule.field = '"' + rule.field + '"';
6191
- }
6192
- }
6193
- queryStr += rule.field + ' ' + ruleOpertor;
6409
+ ruleStr = fieldName + ' ' + ruleOpertor;
6194
6410
  }
6195
6411
  else {
6196
6412
  var custOper = ruleOpertor;
@@ -6200,33 +6416,21 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
6200
6416
  else if (rule.operator === 'isnotempty') {
6201
6417
  custOper = '!=';
6202
6418
  }
6203
- if (enableEscape) {
6204
- rule.field = '`' + rule.field + '`';
6205
- }
6206
- else {
6207
- if (rule.field.indexOf(' ') > -1) {
6208
- rule.field = '"' + rule.field + '"';
6209
- }
6210
- }
6211
- queryStr += rule.field + ' ' + custOper + ' ' + valueStr;
6212
- }
6213
- if (rule.condition && rule.condition !== '') {
6214
- condition = rule.condition;
6419
+ ruleStr = fieldName + ' ' + custOper + ' ' + valueStr;
6215
6420
  }
6216
6421
  }
6217
- if (j !== jLen - 1) {
6218
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
6219
- var rule = rules.rules[j];
6220
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
6422
+ if (j !== rules.rules.length - 1) {
6423
+ var condition = rules.condition;
6221
6424
  if (condition === '' || (rule && rule.condition !== '' && rule.custom && rule.custom.isCustom)) {
6222
6425
  condition = rule.condition;
6223
6426
  }
6224
6427
  if (condition) {
6225
- condition = sqlLocale ? this.l10n.getConstant(condition.toUpperCase()).toUpperCase() : condition.toUpperCase();
6226
- queryStr += ' ' + condition + ' ';
6428
+ condition = sqlLocale ? _this.l10n.getConstant(condition.toUpperCase()).toUpperCase() : condition.toUpperCase();
6429
+ ruleStr += ' ' + condition + ' ';
6227
6430
  }
6228
6431
  }
6229
- }
6432
+ return result + ruleStr;
6433
+ }, '');
6230
6434
  }
6231
6435
  if (!isRoot) {
6232
6436
  queryStr += ')';
@@ -6544,23 +6748,19 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
6544
6748
  return subOp[i].length;
6545
6749
  }
6546
6750
  }
6547
- //Left Parenthesis
6548
6751
  if (/^\(/.exec(sqlString)) {
6549
6752
  this.parser.push(['Left', '(']);
6550
6753
  return 1;
6551
6754
  }
6552
- //Right Parenthesis
6553
6755
  if (/^\)/.exec(sqlString)) {
6554
6756
  this.parser.push(['Right', ')']);
6555
6757
  return 1;
6556
6758
  }
6557
- //Boolean
6558
6759
  if (/^(true|false)/.exec(sqlString)) {
6559
6760
  matchValue = /^(true|false)/.exec(sqlString)[0];
6560
6761
  this.parser.push(['String', matchValue]);
6561
6762
  return matchValue.length;
6562
6763
  }
6563
- //Null
6564
6764
  if (/^null/.exec(sqlString)) {
6565
6765
  matchValue = /^null/.exec(sqlString)[0];
6566
6766
  this.parser.push(['String', null]);
@@ -6585,7 +6785,6 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
6585
6785
  return matchValue.length;
6586
6786
  }
6587
6787
  }
6588
- //String
6589
6788
  var singleString = this.getSingleQuoteString(sqlString);
6590
6789
  if (singleString !== '') {
6591
6790
  matchValue = singleString;
@@ -6605,24 +6804,20 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
6605
6804
  !this.checkCondition(sqlString, matchValue)) {
6606
6805
  matchValue = this.combineSingleQuoteString(sqlString, matchValue);
6607
6806
  }
6608
- // end
6609
6807
  this.parser.push(['String', matchValue]);
6610
6808
  return matchValue.length;
6611
6809
  }
6612
- // Double String
6613
6810
  var doubleString = this.getDoubleQuoteString(sqlString);
6614
6811
  if (doubleString !== '') {
6615
6812
  matchValue = doubleString;
6616
6813
  this.parser.push(['DoubleString', matchValue]);
6617
6814
  return matchValue.length;
6618
6815
  }
6619
- //Number
6620
6816
  if (/^\d*\.?\d+/.exec(sqlString)) {
6621
6817
  matchValue = /^\d*\.?\d+/.exec(sqlString)[0];
6622
6818
  this.parser.push(['Number', matchValue]);
6623
6819
  return matchValue.length;
6624
6820
  }
6625
- //Negative Number
6626
6821
  if (/^-?\d*\.?\d+/.exec(sqlString)) {
6627
6822
  matchValue = /^-?\d*\.?\d+/.exec(sqlString)[0];
6628
6823
  this.parser.push(['Number', matchValue]);
@@ -6790,7 +6985,7 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
6790
6985
  fieldName += this.separator;
6791
6986
  }
6792
6987
  }
6793
- return this.getColumn(fieldName).label;
6988
+ return this.getColumn(fieldName) ? this.getColumn(fieldName).label : '';
6794
6989
  };
6795
6990
  QueryBuilder.prototype.processParser = function (parser, rules, levelColl, sqlLocale) {
6796
6991
  var j;
@@ -7022,12 +7217,16 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
7022
7217
  }
7023
7218
  }
7024
7219
  if (this.enableSeparateConnector) {
7025
- this.addRules([{ 'label': getRule.label, 'field': getRule.field, 'type': getRule.type, 'operator': getRule.operator,
7026
- 'value': getRule.value, 'condition': getRule.condition }], groupId);
7220
+ this.addRules([{
7221
+ 'label': getRule.label, 'field': getRule.field, 'type': getRule.type, 'operator': getRule.operator,
7222
+ 'value': getRule.value, 'condition': getRule.condition
7223
+ }], groupId);
7027
7224
  }
7028
7225
  else {
7029
- this.addRules([{ 'label': getRule.label, 'field': getRule.field, 'type': getRule.type, 'operator': getRule.operator,
7030
- 'value': getRule.value }], groupId);
7226
+ this.addRules([{
7227
+ 'label': getRule.label, 'field': getRule.field, 'type': getRule.type, 'operator': getRule.operator,
7228
+ 'value': getRule.value
7229
+ }], groupId);
7031
7230
  }
7032
7231
  this.ruleIndex = -1;
7033
7232
  };
@@ -7202,115 +7401,65 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
7202
7401
  this.disableRuleControls(target, groupElem, isDisabled);
7203
7402
  };
7204
7403
  QueryBuilder.prototype.disableRuleControls = function (target, groupElem, isDisabled) {
7205
- var ddlElement = groupElem.querySelectorAll('.e-control.e-dropdownlist');
7206
- var numericElement = groupElem.querySelectorAll('.e-control.e-numerictextbox');
7207
- var textElement = groupElem.querySelectorAll('.e-control.e-textbox');
7208
- var dateElement = groupElem.querySelectorAll('.e-control.e-datepicker');
7209
- var checkboxElement = groupElem.querySelectorAll('.e-control.e-checkbox');
7210
- var radioBtnElement = groupElem.querySelectorAll('.e-control.e-radio');
7211
- var multiSelectElement = groupElem.querySelectorAll('.e-control.e-multiselect');
7212
- var deleteElem = groupElem.querySelectorAll('.e-rule-delete');
7213
- var lockElem = groupElem.querySelectorAll('.e-lock-rule');
7214
- var cloneElem = groupElem.querySelectorAll('.e-clone-rule');
7215
- var ruleElem = groupElem.querySelectorAll('.e-rule-container');
7216
- for (var i = 0; i < deleteElem.length; i++) {
7404
+ var disableComponents = function (elements, componentGetter, isDisabled) {
7405
+ elements.forEach(function (element) {
7406
+ var component = componentGetter(element);
7407
+ if ('enabled' in component) {
7408
+ component.enabled = !isDisabled;
7409
+ }
7410
+ else if ('disabled' in component) {
7411
+ component.disabled = isDisabled;
7412
+ }
7413
+ });
7414
+ };
7415
+ var elements = {
7416
+ ddl: groupElem.querySelectorAll('.e-control.e-dropdownlist'),
7417
+ numeric: groupElem.querySelectorAll('.e-control.e-numerictextbox'),
7418
+ text: groupElem.querySelectorAll('.e-control.e-textbox'),
7419
+ date: groupElem.querySelectorAll('.e-control.e-datepicker'),
7420
+ checkbox: groupElem.querySelectorAll('.e-control.e-checkbox'),
7421
+ radio: groupElem.querySelectorAll('.e-control.e-radio'),
7422
+ multiSelect: groupElem.querySelectorAll('.e-control.e-multiselect'),
7423
+ deleteElem: groupElem.querySelectorAll('.e-rule-delete'),
7424
+ lockElem: groupElem.querySelectorAll('.e-lock-rule'),
7425
+ cloneElem: groupElem.querySelectorAll('.e-clone-rule'),
7426
+ ruleElem: groupElem.querySelectorAll('.e-rule-container')
7427
+ };
7428
+ elements.deleteElem.forEach(function (elem, i) {
7217
7429
  if (isDisabled) {
7218
- if (ruleElem[i] && ruleElem[i].classList.contains('e-disable')) {
7219
- ruleElem[i].classList.add('e-disable');
7430
+ if (elements.ruleElem[i] && elements.ruleElem[i].classList.contains('e-disable')) {
7431
+ elements.ruleElem[i].classList.add('e-disable');
7220
7432
  }
7221
- deleteElem[i].disabled = true;
7222
- if (cloneElem[i]) {
7223
- cloneElem[i].disabled = true;
7433
+ elements.deleteElem[i].disabled = true;
7434
+ if (elements.cloneElem[i]) {
7435
+ elements.cloneElem[i].disabled = true;
7224
7436
  }
7225
- if (lockElem[i] !== target) {
7226
- lockElem[i].disabled = true;
7227
- lockElem[i].children[0].classList.remove('e-unlock');
7228
- lockElem[i].children[0].classList.add('e-lock');
7437
+ if (elements.lockElem[i] !== target) {
7438
+ elements.lockElem[i].disabled = true;
7439
+ elements.lockElem[i].children[0].classList.remove('e-unlock');
7440
+ elements.lockElem[i].children[0].classList.add('e-lock');
7229
7441
  }
7230
7442
  }
7231
7443
  else {
7232
- if (ruleElem[i]) {
7233
- ruleElem[i].classList.remove('e-disable');
7444
+ if (elements.ruleElem[i]) {
7445
+ elements.ruleElem[i].classList.remove('e-disable');
7234
7446
  }
7235
- if (cloneElem[i]) {
7236
- cloneElem[i].disabled = false;
7447
+ if (elements.cloneElem[i]) {
7448
+ elements.cloneElem[i].disabled = false;
7237
7449
  }
7238
- deleteElem[i].disabled = false;
7239
- lockElem[i].disabled = false;
7240
- lockElem[i].children[0].classList.remove('e-lock');
7241
- lockElem[i].children[0].classList.add('e-unlock');
7242
- }
7243
- }
7244
- var dropDownObj;
7245
- var numericObj;
7246
- var textObj;
7247
- var dateObj;
7248
- var checkBoxObj;
7249
- var radioBtnObj;
7250
- var multiSelectObj;
7251
- for (var i = 0; i < ddlElement.length; i++) {
7252
- dropDownObj = getComponent(ddlElement[i], 'dropdownlist');
7253
- if (isDisabled) {
7254
- dropDownObj.enabled = false;
7255
- }
7256
- else {
7257
- dropDownObj.enabled = true;
7258
- }
7259
- }
7260
- for (var i = 0; i < numericElement.length; i++) {
7261
- numericObj = getComponent(numericElement[i], 'numerictextbox');
7262
- if (isDisabled) {
7263
- numericObj.enabled = false;
7264
- }
7265
- else {
7266
- numericObj.enabled = true;
7267
- }
7268
- }
7269
- for (var i = 0; i < textElement.length; i++) {
7270
- textObj = getComponent(textElement[i], 'textbox');
7271
- if (isDisabled) {
7272
- textObj.enabled = false;
7273
- }
7274
- else {
7275
- textObj.enabled = true;
7276
- }
7277
- }
7278
- for (var i = 0; i < dateElement.length; i++) {
7279
- dateObj = getComponent(dateElement[i], 'datepicker');
7280
- if (isDisabled) {
7281
- dateObj.enabled = false;
7282
- }
7283
- else {
7284
- dateObj.enabled = true;
7450
+ elements.deleteElem[i].disabled = false;
7451
+ elements.lockElem[i].disabled = false;
7452
+ elements.lockElem[i].children[0].classList.remove('e-lock');
7453
+ elements.lockElem[i].children[0].classList.add('e-unlock');
7285
7454
  }
7286
- }
7287
- for (var i = 0; i < checkboxElement.length; i++) {
7288
- checkBoxObj = getComponent(checkboxElement[i], 'checkbox');
7289
- if (isDisabled) {
7290
- checkBoxObj.disabled = true;
7291
- }
7292
- else {
7293
- checkBoxObj.disabled = false;
7294
- }
7295
- }
7296
- for (var i = 0; i < radioBtnElement.length; i++) {
7297
- radioBtnObj = getComponent(radioBtnElement[i], 'radio');
7298
- if (isDisabled) {
7299
- radioBtnObj.disabled = true;
7300
- }
7301
- else {
7302
- radioBtnObj.disabled = false;
7303
- }
7304
- }
7305
- for (var i = 0; i < multiSelectElement.length; i++) {
7306
- multiSelectObj = getComponent(multiSelectElement[i], 'multiselect');
7307
- if (isDisabled) {
7308
- multiSelectObj.enabled = false;
7309
- }
7310
- else {
7311
- multiSelectObj.enabled = true;
7312
- }
7313
- }
7455
+ });
7456
+ disableComponents(elements.ddl, function (elem) { return getComponent(elem, 'dropdownlist'); }, isDisabled);
7457
+ disableComponents(elements.numeric, function (elem) { return getComponent(elem, 'numerictextbox'); }, isDisabled);
7458
+ disableComponents(elements.text, function (elem) { return getComponent(elem, 'textbox'); }, isDisabled);
7459
+ disableComponents(elements.date, function (elem) { return getComponent(elem, 'datepicker'); }, isDisabled);
7460
+ disableComponents(elements.checkbox, function (elem) { return getComponent(elem, 'checkbox'); }, isDisabled);
7461
+ disableComponents(elements.radio, function (elem) { return getComponent(elem, 'radio'); }, isDisabled);
7462
+ disableComponents(elements.multiSelect, function (elem) { return getComponent(elem, 'multiselect'); }, isDisabled);
7314
7463
  };
7315
7464
  __decorate([
7316
7465
  Event()