@syncfusion/ej2-querybuilder 19.4.56 → 20.1.51

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/CHANGELOG.md +5 -39
  2. package/dist/ej2-querybuilder.umd.min.js +2 -2
  3. package/dist/ej2-querybuilder.umd.min.js.map +1 -1
  4. package/dist/es6/ej2-querybuilder.es2015.js +78 -22
  5. package/dist/es6/ej2-querybuilder.es2015.js.map +1 -1
  6. package/dist/es6/ej2-querybuilder.es5.js +74 -18
  7. package/dist/es6/ej2-querybuilder.es5.js.map +1 -1
  8. package/dist/global/ej2-querybuilder.min.js +2 -2
  9. package/dist/global/ej2-querybuilder.min.js.map +1 -1
  10. package/dist/global/index.d.ts +1 -1
  11. package/package.json +11 -11
  12. package/src/query-builder/query-builder-model.d.ts +1 -1
  13. package/src/query-builder/query-builder.d.ts +2 -0
  14. package/src/query-builder/query-builder.js +75 -19
  15. package/styles/bootstrap5-dark.css +26 -10
  16. package/styles/bootstrap5.css +26 -10
  17. package/styles/fluent-dark.css +966 -0
  18. package/styles/fluent-dark.scss +1 -0
  19. package/styles/fluent.css +966 -0
  20. package/styles/fluent.scss +1 -0
  21. package/styles/query-builder/_bootstrap5-definition.scss +6 -5
  22. package/styles/query-builder/_fluent-dark-definition.scss +1 -0
  23. package/styles/query-builder/_fluent-definition.scss +7 -7
  24. package/styles/query-builder/_layout.scss +7 -6
  25. package/styles/query-builder/_tailwind-definition.scss +7 -7
  26. package/styles/query-builder/_theme.scss +25 -0
  27. package/styles/query-builder/bootstrap5-dark.css +26 -10
  28. package/styles/query-builder/bootstrap5.css +26 -10
  29. package/styles/query-builder/fluent-dark.css +966 -0
  30. package/styles/query-builder/fluent-dark.scss +15 -0
  31. package/styles/query-builder/fluent.css +966 -0
  32. package/styles/query-builder/fluent.scss +15 -0
  33. package/styles/query-builder/icons/_bootstrap5.scss +1 -1
  34. package/styles/query-builder/icons/_fluent-dark.scss +1 -0
  35. package/styles/query-builder/icons/_fluent.scss +1 -1
  36. package/styles/query-builder/icons/_tailwind-dark.scss +5 -5
  37. package/styles/query-builder/icons/_tailwind.scss +4 -4
  38. package/styles/query-builder/tailwind-dark.css +19 -73
  39. package/styles/query-builder/tailwind.css +18 -72
  40. package/styles/tailwind-dark.css +19 -73
  41. package/styles/tailwind.css +18 -72
@@ -283,7 +283,7 @@ let QueryBuilder = class QueryBuilder extends Component {
283
283
  }
284
284
  updateSubFieldsFromColumns(col, field) {
285
285
  for (let i = 0; i < col.length; i++) {
286
- if (this.separator != '' && col[i].field.indexOf(this.separator) < 0) {
286
+ if (this.separator !== '' && col[i].field.indexOf(this.separator) < 0) {
287
287
  col[i].field = field ? field + this.separator + col[i].field : col[i].field;
288
288
  }
289
289
  if (col[i].operators) {
@@ -505,6 +505,9 @@ let QueryBuilder = class QueryBuilder extends Component {
505
505
  let template;
506
506
  args.fields = this.fields;
507
507
  args.columns = this.columns;
508
+ if (rule.field === '') {
509
+ rule.field = column.field;
510
+ }
508
511
  args.operators = this.getOperators(rule.field);
509
512
  args.operatorFields = { text: 'key', value: 'value' };
510
513
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
@@ -628,7 +631,6 @@ let QueryBuilder = class QueryBuilder extends Component {
628
631
  }
629
632
  }
630
633
  else {
631
- let dropdowntree;
632
634
  let ddlField;
633
635
  const ddlValue = this.isImportRules ? rule.field : rule.field;
634
636
  ddlField = {
@@ -642,11 +644,13 @@ let QueryBuilder = class QueryBuilder extends Component {
642
644
  if (this.fieldModel) {
643
645
  ddlField = Object.assign({}, ddlField, this.fieldModel);
644
646
  }
645
- dropdowntree = new DropDownTree(ddlField);
647
+ const dropdowntree = new DropDownTree(ddlField);
646
648
  dropdowntree.appendTo('#' + ruleElem.id + '_filterkey');
647
649
  if (!isNullOrUndefined(dropdowntree.value)) {
648
- dropdowntree.element.value = dropdowntree.value[0];
650
+ const value = this.getLabelFromColumn(dropdowntree.value[0]);
651
+ dropdowntree.element.value = value;
649
652
  }
653
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
650
654
  const ddlVal = this.isImportRules ?
651
655
  this.GetRootColumnName(rule.field) : dropdowntree.value;
652
656
  this.selectedColumn = this.getColumn(ddlVal);
@@ -681,17 +685,20 @@ let QueryBuilder = class QueryBuilder extends Component {
681
685
  else {
682
686
  groupElem = closest(target, '.e-group-container');
683
687
  rules = this.getParentGroup(groupElem);
688
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
684
689
  const custom = rule.custom;
685
690
  if (Object.keys(rule).length) {
686
691
  rules.rules.push({
687
692
  'field': rule.field, 'type': rule.type, 'label': rule.label, 'operator': rule.operator, value: rule.value
688
693
  });
689
694
  if (custom) {
695
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
690
696
  rules.rules[rules.rules.length - 1].custom = custom;
691
697
  }
692
698
  }
693
699
  else {
694
700
  if (custom) {
701
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
695
702
  newRule.custom = custom;
696
703
  }
697
704
  rules.rules.push(newRule);
@@ -758,17 +765,17 @@ let QueryBuilder = class QueryBuilder extends Component {
758
765
  }
759
766
  }
760
767
  else {
761
- dropDownObj = getComponent(ruleElemCln[i].querySelector('.e-rule-field input.e-control'), 'dropdownlist');
768
+ dropDownObj = getComponent(ruleElemCln[i].querySelector('.e-rule-field .e-control'), 'dropdownlist');
762
769
  this.selectedColumn = dropDownObj.getDataByValue(dropDownObj.value);
763
770
  validateRule = !isNullOrUndefined(dropDownObj.index) && this.selectedColumn.validation;
764
771
  }
765
- fieldElem = tempElem.querySelector('.e-rule-field input.e-control');
772
+ fieldElem = tempElem.querySelector('.e-rule-field .e-control');
766
773
  if (validateRule && validateRule.isRequired) {
767
774
  while (indexElem && indexElem.previousElementSibling !== null) {
768
775
  indexElem = indexElem.previousElementSibling;
769
776
  index++;
770
777
  }
771
- fieldElem = tempElem.querySelector('.e-rule-operator input.e-control');
778
+ fieldElem = tempElem.querySelector('.e-rule-operator .e-control');
772
779
  if (!rule.rules[index].operator) {
773
780
  if (fieldElem.parentElement.className.indexOf('e-tooltip') < 0) {
774
781
  this.renderToolTip(fieldElem.parentElement);
@@ -781,7 +788,7 @@ let QueryBuilder = class QueryBuilder extends Component {
781
788
  if (excludeOprs.indexOf(rule.rules[index].operator) < 0 && (isNullOrUndefined(rule.rules[index].value) &&
782
789
  rule.rules[index].type !== 'date') || rule.rules[index].value === '' ||
783
790
  (rule.rules[index].value instanceof Array && valArray.length < 1)) {
784
- const valElem = tempElem.querySelectorAll('.e-rule-value input.e-control');
791
+ const valElem = tempElem.querySelectorAll('.e-rule-value .e-control');
785
792
  isValid = false;
786
793
  for (let j = 0, jLen = valElem.length; j < jLen; j++) {
787
794
  const element = valElem[j];
@@ -1303,7 +1310,8 @@ let QueryBuilder = class QueryBuilder extends Component {
1303
1310
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
1304
1311
  ddt.value = args.value[0];
1305
1312
  ddt.dataBind();
1306
- ddtElem.value = args.value[0];
1313
+ const result = this.getLabelFromColumn(args.value[0]);
1314
+ ddtElem.value = result;
1307
1315
  }
1308
1316
  }
1309
1317
  }
@@ -1333,7 +1341,7 @@ let QueryBuilder = class QueryBuilder extends Component {
1333
1341
  }
1334
1342
  changeRule(rule, ddlArgs) {
1335
1343
  if (!ddlArgs.itemData) {
1336
- if (this.fieldMode === "DropdownTree") {
1344
+ if (this.fieldMode === 'DropdownTree') {
1337
1345
  const ddt = getComponent(ddlArgs.element, 'dropdowntree');
1338
1346
  if (ddt.value == null) {
1339
1347
  return;
@@ -1356,6 +1364,7 @@ let QueryBuilder = class QueryBuilder extends Component {
1356
1364
  }
1357
1365
  changeFilter(flt, dl, grID, rl, tmpRl, dArg) {
1358
1366
  if (flt) {
1367
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
1359
1368
  let ddlValue;
1360
1369
  if (this.fieldMode === 'DropdownTree') {
1361
1370
  ddlValue = (dl.value[0]);
@@ -1382,7 +1391,9 @@ let QueryBuilder = class QueryBuilder extends Component {
1382
1391
  this.changeOperator(flt, operatorElem, dl, grID, rl, tmpRl, dArg);
1383
1392
  }
1384
1393
  }
1385
- changeOperator(flt, opr, dl, grID, rl, tmpRl, dArg) {
1394
+ changeOperator(
1395
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
1396
+ flt, opr, dl, grID, rl, tmpRl, dArg) {
1386
1397
  let ruleElem;
1387
1398
  let ruleID;
1388
1399
  let eventsArgs;
@@ -1763,14 +1774,15 @@ let QueryBuilder = class QueryBuilder extends Component {
1763
1774
  const original = {};
1764
1775
  const result = [];
1765
1776
  let nest = [];
1766
- let value = "";
1767
- let isNested = field.indexOf(this.separator);
1777
+ let value = '';
1778
+ const isNested = field.indexOf(this.separator);
1768
1779
  for (let i = 0, iLen = dataSource.length; i < iLen; i++) {
1769
1780
  if (isNested === 0) {
1770
1781
  value = dataSource[i][field];
1771
1782
  }
1772
1783
  else {
1773
1784
  nest = field.split(this.separator);
1785
+ // eslint-disable-next-line @typescript-eslint/tslint/config
1774
1786
  nest.forEach(element => {
1775
1787
  if (value) {
1776
1788
  value = value[element];
@@ -1813,9 +1825,9 @@ let QueryBuilder = class QueryBuilder extends Component {
1813
1825
  isValues = true;
1814
1826
  }
1815
1827
  let fieldValue = this.selectedRule.field;
1816
- let isNested = this.selectedRule.field.indexOf(this.separator);
1817
- if (isNested !== 0 && this.fieldMode !== "DropdownTree") {
1818
- let nest = this.selectedRule.field.split(this.separator);
1828
+ const isNested = this.selectedRule.field.indexOf(this.separator);
1829
+ if (isNested !== 0 && this.fieldMode !== 'DropdownTree') {
1830
+ const nest = this.selectedRule.field.split(this.separator);
1819
1831
  fieldValue = nest[nest.length - 1];
1820
1832
  }
1821
1833
  let multiSelectValue;
@@ -1925,10 +1937,10 @@ let QueryBuilder = class QueryBuilder extends Component {
1925
1937
  }
1926
1938
  getItemData(parentId) {
1927
1939
  let fieldObj = getComponent(document.getElementById(parentId + '_filterkey'), 'dropdownlist');
1928
- if (this.fieldMode === "DropdownTree") {
1940
+ if (this.fieldMode === 'DropdownTree') {
1929
1941
  fieldObj = getComponent(document.getElementById(parentId + '_filterkey'), 'dropdowntree');
1930
1942
  }
1931
- return this.fieldMode === "DropdownTree" ? this.getColumn(fieldObj.value[0]) : this.getColumn(fieldObj.value);
1943
+ return this.fieldMode === 'DropdownTree' ? this.getColumn(fieldObj.value[0]) : this.getColumn(fieldObj.value);
1932
1944
  }
1933
1945
  setDefaultValue(parentId, isArryValue, isNumber) {
1934
1946
  const itemData = this.getItemData(parentId);
@@ -2259,6 +2271,7 @@ let QueryBuilder = class QueryBuilder extends Component {
2259
2271
  }
2260
2272
  getPreviousItemData(prevItemData, column) {
2261
2273
  if (this.isFieldClose && prevItemData) {
2274
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
2262
2275
  prevItemData = this.getColumn(prevItemData.value);
2263
2276
  }
2264
2277
  if (column.template && prevItemData && Object.keys(prevItemData).length < 4) {
@@ -2271,7 +2284,8 @@ let QueryBuilder = class QueryBuilder extends Component {
2271
2284
  const filtElem = subFldElem.getElementsByTagName('input')[0];
2272
2285
  const filtObj = this.fieldMode === 'DropdownTree' ? getComponent(filtElem, 'dropdowntree')
2273
2286
  : getComponent(filtElem, 'dropdownlist');
2274
- let column = this.fieldMode === 'DropdownTree' ? this.getColumn(filtObj.value[0])
2287
+ const column = this.fieldMode === 'DropdownTree' ? this.getColumn(filtObj.value[0])
2288
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
2275
2289
  : this.getColumn(filtObj.value);
2276
2290
  this.selectedRule = column;
2277
2291
  if (isRender) {
@@ -2515,7 +2529,9 @@ let QueryBuilder = class QueryBuilder extends Component {
2515
2529
  }
2516
2530
  dropDownObj = this.fieldMode === 'DropdownTree' ? getComponent(target, 'dropdowntree') :
2517
2531
  getComponent(target, 'dropdownlist');
2532
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
2518
2533
  const column = this.fieldMode === 'DropdownTree' ? this.getColumn(dropDownObj.value[0])
2534
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
2519
2535
  : this.getColumn(dropDownObj.value);
2520
2536
  if (!this.isImportRules && rule.rules[index].field && rule.rules[index].field.toLowerCase() !== column.field.toLowerCase()) {
2521
2537
  if (!(ruleElem.querySelectorAll('.e-template')) && !(operator.indexOf('null') > -1)
@@ -3252,6 +3268,9 @@ let QueryBuilder = class QueryBuilder extends Component {
3252
3268
  if (document.querySelectorAll(template).length) {
3253
3269
  return compile(document.querySelector(template).innerHTML.trim());
3254
3270
  }
3271
+ else {
3272
+ return compile(template);
3273
+ }
3255
3274
  }
3256
3275
  catch (error) {
3257
3276
  return compile(template);
@@ -3445,11 +3464,13 @@ let QueryBuilder = class QueryBuilder extends Component {
3445
3464
  }
3446
3465
  }
3447
3466
  const isTemplateRendered = clnruleElem.querySelector('.e-template-value');
3467
+ // eslint-disable
3448
3468
  try {
3449
3469
  detach(clnruleElem);
3450
3470
  }
3451
3471
  catch (err) {
3452
3472
  }
3473
+ // eslint-enable
3453
3474
  if (column && column.ruleTemplate) {
3454
3475
  this.clearQBTemplate([clnruleElem.id]);
3455
3476
  }
@@ -3858,6 +3879,11 @@ let QueryBuilder = class QueryBuilder extends Component {
3858
3879
  }
3859
3880
  }
3860
3881
  }
3882
+ if (this.dataSource instanceof DataManager) {
3883
+ if (!isNullOrUndefined(pred) && (pred.operator === 'isnull' || pred.operator === 'notnull')) {
3884
+ pred.operator = pred.operator === 'isnull' ? 'equal' : 'notequal';
3885
+ }
3886
+ }
3861
3887
  return pred;
3862
3888
  }
3863
3889
  getLocale() {
@@ -4118,7 +4144,7 @@ let QueryBuilder = class QueryBuilder extends Component {
4118
4144
  }
4119
4145
  }
4120
4146
  }
4121
- if (rule.rules.length === 0) {
4147
+ if (rule.rules.length === 0 && this.headerTemplate) {
4122
4148
  rule.rules[0] = { 'label': '', 'field': '', 'operator': '', 'type': '', 'value': '' };
4123
4149
  }
4124
4150
  const ruleColl = rule.rules;
@@ -4361,7 +4387,7 @@ let QueryBuilder = class QueryBuilder extends Component {
4361
4387
  }
4362
4388
  queryStr += rule.field + ' ' + this.operators[rule.operator] + ' ' + valueStr;
4363
4389
  }
4364
- if (rule.condition && rule.condition != '') {
4390
+ if (rule.condition && rule.condition !== '') {
4365
4391
  condition = rule.condition;
4366
4392
  }
4367
4393
  }
@@ -4502,7 +4528,6 @@ let QueryBuilder = class QueryBuilder extends Component {
4502
4528
  this.parser.push(['Literal', matchValue]);
4503
4529
  return matchValue.length + 2;
4504
4530
  }
4505
- // eslint-disable-next-line
4506
4531
  if (this.checkNumberLiteral(sqlString)) {
4507
4532
  matchValue = /^[0-9]+(\.[0-9]+)?/.exec(sqlString)[0];
4508
4533
  this.parser.push(['Literal', matchValue]);
@@ -4597,6 +4622,37 @@ let QueryBuilder = class QueryBuilder extends Component {
4597
4622
  const columnData = this.getColumn(rules.field);
4598
4623
  return columnData.type;
4599
4624
  }
4625
+ getLabelFromColumn(field) {
4626
+ let label = '';
4627
+ let l = 0;
4628
+ if (this.separator !== '') {
4629
+ const fieldColl = field.split(this.separator);
4630
+ for (let i = 0; i < fieldColl.length; i++) {
4631
+ label += this.getLabelFromField(fieldColl, i + 1);
4632
+ l++;
4633
+ if (l < fieldColl.length) {
4634
+ label += this.separator;
4635
+ }
4636
+ }
4637
+ return label;
4638
+ }
4639
+ else {
4640
+ const labelItem = this.getColumn(field).label;
4641
+ return labelItem;
4642
+ }
4643
+ }
4644
+ getLabelFromField(field, startIdx) {
4645
+ let fieldName = '';
4646
+ let j = 0;
4647
+ for (let k = 0; k < startIdx; k++) {
4648
+ fieldName += field[k];
4649
+ j++;
4650
+ if (j < startIdx) {
4651
+ fieldName += this.separator;
4652
+ }
4653
+ }
4654
+ return this.getColumn(fieldName).label;
4655
+ }
4600
4656
  processParser(parser, rules, levelColl) {
4601
4657
  let j;
4602
4658
  let jLen;