@syncfusion/ej2-querybuilder 20.1.48 → 20.1.59
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +25 -0
- package/dist/ej2-querybuilder.umd.min.js +2 -2
- package/dist/ej2-querybuilder.umd.min.js.map +1 -1
- package/dist/es6/ej2-querybuilder.es2015.js +76 -26
- package/dist/es6/ej2-querybuilder.es2015.js.map +1 -1
- package/dist/es6/ej2-querybuilder.es5.js +72 -22
- package/dist/es6/ej2-querybuilder.es5.js.map +1 -1
- package/dist/global/ej2-querybuilder.min.js +2 -2
- package/dist/global/ej2-querybuilder.min.js.map +1 -1
- package/dist/global/index.d.ts +1 -1
- package/package.json +11 -11
- package/src/query-builder/query-builder.d.ts +2 -0
- package/src/query-builder/query-builder.js +72 -22
- package/styles/bootstrap-dark.css +31 -214
- package/styles/bootstrap.css +31 -214
- package/styles/bootstrap4.css +32 -221
- package/styles/bootstrap5-dark.css +32 -213
- package/styles/bootstrap5.css +32 -213
- package/styles/fabric-dark.css +31 -210
- package/styles/fabric.css +31 -210
- package/styles/fluent-dark.css +31 -212
- package/styles/fluent.css +31 -212
- package/styles/highcontrast-light.css +32 -252
- package/styles/highcontrast.css +32 -252
- package/styles/material-dark.css +27 -199
- package/styles/material.css +27 -199
- package/styles/query-builder/bootstrap-dark.css +31 -214
- package/styles/query-builder/bootstrap.css +31 -214
- package/styles/query-builder/bootstrap4.css +32 -221
- package/styles/query-builder/bootstrap5-dark.css +32 -213
- package/styles/query-builder/bootstrap5.css +32 -213
- package/styles/query-builder/fabric-dark.css +31 -210
- package/styles/query-builder/fabric.css +31 -210
- package/styles/query-builder/fluent-dark.css +31 -212
- package/styles/query-builder/fluent.css +31 -212
- package/styles/query-builder/highcontrast-light.css +32 -252
- package/styles/query-builder/highcontrast.css +32 -252
- package/styles/query-builder/material-dark.css +27 -199
- package/styles/query-builder/material.css +27 -199
- package/styles/query-builder/tailwind-dark.css +28 -200
- package/styles/query-builder/tailwind.css +28 -200
- package/styles/tailwind-dark.css +28 -200
- package/styles/tailwind.css +28 -200
|
@@ -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
|
|
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,7 +505,7 @@ 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 ===
|
|
508
|
+
if (rule.field === '') {
|
|
509
509
|
rule.field = column.field;
|
|
510
510
|
}
|
|
511
511
|
args.operators = this.getOperators(rule.field);
|
|
@@ -631,7 +631,6 @@ let QueryBuilder = class QueryBuilder extends Component {
|
|
|
631
631
|
}
|
|
632
632
|
}
|
|
633
633
|
else {
|
|
634
|
-
let dropdowntree;
|
|
635
634
|
let ddlField;
|
|
636
635
|
const ddlValue = this.isImportRules ? rule.field : rule.field;
|
|
637
636
|
ddlField = {
|
|
@@ -645,11 +644,13 @@ let QueryBuilder = class QueryBuilder extends Component {
|
|
|
645
644
|
if (this.fieldModel) {
|
|
646
645
|
ddlField = Object.assign({}, ddlField, this.fieldModel);
|
|
647
646
|
}
|
|
648
|
-
dropdowntree = new DropDownTree(ddlField);
|
|
647
|
+
const dropdowntree = new DropDownTree(ddlField);
|
|
649
648
|
dropdowntree.appendTo('#' + ruleElem.id + '_filterkey');
|
|
650
649
|
if (!isNullOrUndefined(dropdowntree.value)) {
|
|
651
|
-
|
|
650
|
+
const value = this.getLabelFromColumn(dropdowntree.value[0]);
|
|
651
|
+
dropdowntree.element.value = value;
|
|
652
652
|
}
|
|
653
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
653
654
|
const ddlVal = this.isImportRules ?
|
|
654
655
|
this.GetRootColumnName(rule.field) : dropdowntree.value;
|
|
655
656
|
this.selectedColumn = this.getColumn(ddlVal);
|
|
@@ -684,17 +685,20 @@ let QueryBuilder = class QueryBuilder extends Component {
|
|
|
684
685
|
else {
|
|
685
686
|
groupElem = closest(target, '.e-group-container');
|
|
686
687
|
rules = this.getParentGroup(groupElem);
|
|
688
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
687
689
|
const custom = rule.custom;
|
|
688
690
|
if (Object.keys(rule).length) {
|
|
689
691
|
rules.rules.push({
|
|
690
692
|
'field': rule.field, 'type': rule.type, 'label': rule.label, 'operator': rule.operator, value: rule.value
|
|
691
693
|
});
|
|
692
694
|
if (custom) {
|
|
695
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
693
696
|
rules.rules[rules.rules.length - 1].custom = custom;
|
|
694
697
|
}
|
|
695
698
|
}
|
|
696
699
|
else {
|
|
697
700
|
if (custom) {
|
|
701
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
698
702
|
newRule.custom = custom;
|
|
699
703
|
}
|
|
700
704
|
rules.rules.push(newRule);
|
|
@@ -761,17 +765,17 @@ let QueryBuilder = class QueryBuilder extends Component {
|
|
|
761
765
|
}
|
|
762
766
|
}
|
|
763
767
|
else {
|
|
764
|
-
dropDownObj = getComponent(ruleElemCln[i].querySelector('.e-rule-field
|
|
768
|
+
dropDownObj = getComponent(ruleElemCln[i].querySelector('.e-rule-field .e-control'), 'dropdownlist');
|
|
765
769
|
this.selectedColumn = dropDownObj.getDataByValue(dropDownObj.value);
|
|
766
770
|
validateRule = !isNullOrUndefined(dropDownObj.index) && this.selectedColumn.validation;
|
|
767
771
|
}
|
|
768
|
-
fieldElem = tempElem.querySelector('.e-rule-field
|
|
772
|
+
fieldElem = tempElem.querySelector('.e-rule-field .e-control');
|
|
769
773
|
if (validateRule && validateRule.isRequired) {
|
|
770
774
|
while (indexElem && indexElem.previousElementSibling !== null) {
|
|
771
775
|
indexElem = indexElem.previousElementSibling;
|
|
772
776
|
index++;
|
|
773
777
|
}
|
|
774
|
-
fieldElem = tempElem.querySelector('.e-rule-operator
|
|
778
|
+
fieldElem = tempElem.querySelector('.e-rule-operator .e-control');
|
|
775
779
|
if (!rule.rules[index].operator) {
|
|
776
780
|
if (fieldElem.parentElement.className.indexOf('e-tooltip') < 0) {
|
|
777
781
|
this.renderToolTip(fieldElem.parentElement);
|
|
@@ -784,7 +788,7 @@ let QueryBuilder = class QueryBuilder extends Component {
|
|
|
784
788
|
if (excludeOprs.indexOf(rule.rules[index].operator) < 0 && (isNullOrUndefined(rule.rules[index].value) &&
|
|
785
789
|
rule.rules[index].type !== 'date') || rule.rules[index].value === '' ||
|
|
786
790
|
(rule.rules[index].value instanceof Array && valArray.length < 1)) {
|
|
787
|
-
const valElem = tempElem.querySelectorAll('.e-rule-value
|
|
791
|
+
const valElem = tempElem.querySelectorAll('.e-rule-value .e-control');
|
|
788
792
|
isValid = false;
|
|
789
793
|
for (let j = 0, jLen = valElem.length; j < jLen; j++) {
|
|
790
794
|
const element = valElem[j];
|
|
@@ -1306,7 +1310,8 @@ let QueryBuilder = class QueryBuilder extends Component {
|
|
|
1306
1310
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
1307
1311
|
ddt.value = args.value[0];
|
|
1308
1312
|
ddt.dataBind();
|
|
1309
|
-
|
|
1313
|
+
const result = this.getLabelFromColumn(args.value[0]);
|
|
1314
|
+
ddtElem.value = result;
|
|
1310
1315
|
}
|
|
1311
1316
|
}
|
|
1312
1317
|
}
|
|
@@ -1336,7 +1341,7 @@ let QueryBuilder = class QueryBuilder extends Component {
|
|
|
1336
1341
|
}
|
|
1337
1342
|
changeRule(rule, ddlArgs) {
|
|
1338
1343
|
if (!ddlArgs.itemData) {
|
|
1339
|
-
if (this.fieldMode ===
|
|
1344
|
+
if (this.fieldMode === 'DropdownTree') {
|
|
1340
1345
|
const ddt = getComponent(ddlArgs.element, 'dropdowntree');
|
|
1341
1346
|
if (ddt.value == null) {
|
|
1342
1347
|
return;
|
|
@@ -1359,6 +1364,7 @@ let QueryBuilder = class QueryBuilder extends Component {
|
|
|
1359
1364
|
}
|
|
1360
1365
|
changeFilter(flt, dl, grID, rl, tmpRl, dArg) {
|
|
1361
1366
|
if (flt) {
|
|
1367
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
1362
1368
|
let ddlValue;
|
|
1363
1369
|
if (this.fieldMode === 'DropdownTree') {
|
|
1364
1370
|
ddlValue = (dl.value[0]);
|
|
@@ -1385,7 +1391,9 @@ let QueryBuilder = class QueryBuilder extends Component {
|
|
|
1385
1391
|
this.changeOperator(flt, operatorElem, dl, grID, rl, tmpRl, dArg);
|
|
1386
1392
|
}
|
|
1387
1393
|
}
|
|
1388
|
-
changeOperator(
|
|
1394
|
+
changeOperator(
|
|
1395
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
1396
|
+
flt, opr, dl, grID, rl, tmpRl, dArg) {
|
|
1389
1397
|
let ruleElem;
|
|
1390
1398
|
let ruleID;
|
|
1391
1399
|
let eventsArgs;
|
|
@@ -1766,14 +1774,15 @@ let QueryBuilder = class QueryBuilder extends Component {
|
|
|
1766
1774
|
const original = {};
|
|
1767
1775
|
const result = [];
|
|
1768
1776
|
let nest = [];
|
|
1769
|
-
let value =
|
|
1770
|
-
|
|
1777
|
+
let value = '';
|
|
1778
|
+
const isNested = field.indexOf(this.separator);
|
|
1771
1779
|
for (let i = 0, iLen = dataSource.length; i < iLen; i++) {
|
|
1772
1780
|
if (isNested === 0) {
|
|
1773
1781
|
value = dataSource[i][field];
|
|
1774
1782
|
}
|
|
1775
1783
|
else {
|
|
1776
1784
|
nest = field.split(this.separator);
|
|
1785
|
+
// eslint-disable-next-line @typescript-eslint/tslint/config
|
|
1777
1786
|
nest.forEach(element => {
|
|
1778
1787
|
if (value) {
|
|
1779
1788
|
value = value[element];
|
|
@@ -1787,7 +1796,7 @@ let QueryBuilder = class QueryBuilder extends Component {
|
|
|
1787
1796
|
value = dataSource[i][field].toString();
|
|
1788
1797
|
}
|
|
1789
1798
|
const data = {};
|
|
1790
|
-
if (!(value in original)
|
|
1799
|
+
if (!(value in original)) {
|
|
1791
1800
|
original[value] = 1;
|
|
1792
1801
|
if (isNested === 0) {
|
|
1793
1802
|
data[field] = value;
|
|
@@ -1816,9 +1825,9 @@ let QueryBuilder = class QueryBuilder extends Component {
|
|
|
1816
1825
|
isValues = true;
|
|
1817
1826
|
}
|
|
1818
1827
|
let fieldValue = this.selectedRule.field;
|
|
1819
|
-
|
|
1820
|
-
if (isNested !== 0 && this.fieldMode !==
|
|
1821
|
-
|
|
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);
|
|
1822
1831
|
fieldValue = nest[nest.length - 1];
|
|
1823
1832
|
}
|
|
1824
1833
|
let multiSelectValue;
|
|
@@ -1928,10 +1937,10 @@ let QueryBuilder = class QueryBuilder extends Component {
|
|
|
1928
1937
|
}
|
|
1929
1938
|
getItemData(parentId) {
|
|
1930
1939
|
let fieldObj = getComponent(document.getElementById(parentId + '_filterkey'), 'dropdownlist');
|
|
1931
|
-
if (this.fieldMode ===
|
|
1940
|
+
if (this.fieldMode === 'DropdownTree') {
|
|
1932
1941
|
fieldObj = getComponent(document.getElementById(parentId + '_filterkey'), 'dropdowntree');
|
|
1933
1942
|
}
|
|
1934
|
-
return this.fieldMode ===
|
|
1943
|
+
return this.fieldMode === 'DropdownTree' ? this.getColumn(fieldObj.value[0]) : this.getColumn(fieldObj.value);
|
|
1935
1944
|
}
|
|
1936
1945
|
setDefaultValue(parentId, isArryValue, isNumber) {
|
|
1937
1946
|
const itemData = this.getItemData(parentId);
|
|
@@ -2262,6 +2271,7 @@ let QueryBuilder = class QueryBuilder extends Component {
|
|
|
2262
2271
|
}
|
|
2263
2272
|
getPreviousItemData(prevItemData, column) {
|
|
2264
2273
|
if (this.isFieldClose && prevItemData) {
|
|
2274
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
2265
2275
|
prevItemData = this.getColumn(prevItemData.value);
|
|
2266
2276
|
}
|
|
2267
2277
|
if (column.template && prevItemData && Object.keys(prevItemData).length < 4) {
|
|
@@ -2274,7 +2284,8 @@ let QueryBuilder = class QueryBuilder extends Component {
|
|
|
2274
2284
|
const filtElem = subFldElem.getElementsByTagName('input')[0];
|
|
2275
2285
|
const filtObj = this.fieldMode === 'DropdownTree' ? getComponent(filtElem, 'dropdowntree')
|
|
2276
2286
|
: getComponent(filtElem, 'dropdownlist');
|
|
2277
|
-
|
|
2287
|
+
const column = this.fieldMode === 'DropdownTree' ? this.getColumn(filtObj.value[0])
|
|
2288
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
2278
2289
|
: this.getColumn(filtObj.value);
|
|
2279
2290
|
this.selectedRule = column;
|
|
2280
2291
|
if (isRender) {
|
|
@@ -2518,7 +2529,9 @@ let QueryBuilder = class QueryBuilder extends Component {
|
|
|
2518
2529
|
}
|
|
2519
2530
|
dropDownObj = this.fieldMode === 'DropdownTree' ? getComponent(target, 'dropdowntree') :
|
|
2520
2531
|
getComponent(target, 'dropdownlist');
|
|
2532
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
2521
2533
|
const column = this.fieldMode === 'DropdownTree' ? this.getColumn(dropDownObj.value[0])
|
|
2534
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
2522
2535
|
: this.getColumn(dropDownObj.value);
|
|
2523
2536
|
if (!this.isImportRules && rule.rules[index].field && rule.rules[index].field.toLowerCase() !== column.field.toLowerCase()) {
|
|
2524
2537
|
if (!(ruleElem.querySelectorAll('.e-template')) && !(operator.indexOf('null') > -1)
|
|
@@ -2545,8 +2558,8 @@ let QueryBuilder = class QueryBuilder extends Component {
|
|
|
2545
2558
|
if (elementCln.length < 1) {
|
|
2546
2559
|
elementCln = valueContainer.querySelectorAll('.e-template');
|
|
2547
2560
|
}
|
|
2561
|
+
eventsArgs = { groupID: groupID, ruleID: ruleID, value: rule.rules[index].field, type: 'field' };
|
|
2548
2562
|
for (let i = 0; i < elementCln.length; i++) {
|
|
2549
|
-
eventsArgs = { groupID: groupID, ruleID: ruleID, value: rule.rules[index].field, type: 'field' };
|
|
2550
2563
|
if (operator.indexOf('null') > -1 || operator.indexOf('empty') > -1) {
|
|
2551
2564
|
rule.rules[index].value = null;
|
|
2552
2565
|
continue;
|
|
@@ -3451,11 +3464,18 @@ let QueryBuilder = class QueryBuilder extends Component {
|
|
|
3451
3464
|
}
|
|
3452
3465
|
}
|
|
3453
3466
|
const isTemplateRendered = clnruleElem.querySelector('.e-template-value');
|
|
3467
|
+
// eslint-disable
|
|
3454
3468
|
try {
|
|
3455
3469
|
detach(clnruleElem);
|
|
3456
3470
|
}
|
|
3457
3471
|
catch (err) {
|
|
3472
|
+
// eslint-disable-next-line no-ex-assign
|
|
3473
|
+
err = [];
|
|
3474
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
3475
|
+
const error = 'error';
|
|
3476
|
+
err[error] = error;
|
|
3458
3477
|
}
|
|
3478
|
+
// eslint-enable
|
|
3459
3479
|
if (column && column.ruleTemplate) {
|
|
3460
3480
|
this.clearQBTemplate([clnruleElem.id]);
|
|
3461
3481
|
}
|
|
@@ -3865,8 +3885,8 @@ let QueryBuilder = class QueryBuilder extends Component {
|
|
|
3865
3885
|
}
|
|
3866
3886
|
}
|
|
3867
3887
|
if (this.dataSource instanceof DataManager) {
|
|
3868
|
-
if (!isNullOrUndefined(pred) && (pred.operator ===
|
|
3869
|
-
pred.operator = pred.operator ===
|
|
3888
|
+
if (!isNullOrUndefined(pred) && (pred.operator === 'isnull' || pred.operator === 'notnull')) {
|
|
3889
|
+
pred.operator = pred.operator === 'isnull' ? 'equal' : 'notequal';
|
|
3870
3890
|
}
|
|
3871
3891
|
}
|
|
3872
3892
|
return pred;
|
|
@@ -4372,7 +4392,7 @@ let QueryBuilder = class QueryBuilder extends Component {
|
|
|
4372
4392
|
}
|
|
4373
4393
|
queryStr += rule.field + ' ' + this.operators[rule.operator] + ' ' + valueStr;
|
|
4374
4394
|
}
|
|
4375
|
-
if (rule.condition && rule.condition
|
|
4395
|
+
if (rule.condition && rule.condition !== '') {
|
|
4376
4396
|
condition = rule.condition;
|
|
4377
4397
|
}
|
|
4378
4398
|
}
|
|
@@ -4513,7 +4533,6 @@ let QueryBuilder = class QueryBuilder extends Component {
|
|
|
4513
4533
|
this.parser.push(['Literal', matchValue]);
|
|
4514
4534
|
return matchValue.length + 2;
|
|
4515
4535
|
}
|
|
4516
|
-
// eslint-disable-next-line
|
|
4517
4536
|
if (this.checkNumberLiteral(sqlString)) {
|
|
4518
4537
|
matchValue = /^[0-9]+(\.[0-9]+)?/.exec(sqlString)[0];
|
|
4519
4538
|
this.parser.push(['Literal', matchValue]);
|
|
@@ -4608,6 +4627,37 @@ let QueryBuilder = class QueryBuilder extends Component {
|
|
|
4608
4627
|
const columnData = this.getColumn(rules.field);
|
|
4609
4628
|
return columnData.type;
|
|
4610
4629
|
}
|
|
4630
|
+
getLabelFromColumn(field) {
|
|
4631
|
+
let label = '';
|
|
4632
|
+
let l = 0;
|
|
4633
|
+
if (this.separator !== '') {
|
|
4634
|
+
const fieldColl = field.split(this.separator);
|
|
4635
|
+
for (let i = 0; i < fieldColl.length; i++) {
|
|
4636
|
+
label += this.getLabelFromField(fieldColl, i + 1);
|
|
4637
|
+
l++;
|
|
4638
|
+
if (l < fieldColl.length) {
|
|
4639
|
+
label += this.separator;
|
|
4640
|
+
}
|
|
4641
|
+
}
|
|
4642
|
+
return label;
|
|
4643
|
+
}
|
|
4644
|
+
else {
|
|
4645
|
+
const labelItem = this.getColumn(field).label;
|
|
4646
|
+
return labelItem;
|
|
4647
|
+
}
|
|
4648
|
+
}
|
|
4649
|
+
getLabelFromField(field, startIdx) {
|
|
4650
|
+
let fieldName = '';
|
|
4651
|
+
let j = 0;
|
|
4652
|
+
for (let k = 0; k < startIdx; k++) {
|
|
4653
|
+
fieldName += field[k];
|
|
4654
|
+
j++;
|
|
4655
|
+
if (j < startIdx) {
|
|
4656
|
+
fieldName += this.separator;
|
|
4657
|
+
}
|
|
4658
|
+
}
|
|
4659
|
+
return this.getColumn(fieldName).label;
|
|
4660
|
+
}
|
|
4611
4661
|
processParser(parser, rules, levelColl) {
|
|
4612
4662
|
let j;
|
|
4613
4663
|
let jLen;
|