@syncfusion/ej2-querybuilder 20.1.47 → 20.1.55
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 +23 -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 +78 -25
- package/dist/es6/ej2-querybuilder.es2015.js.map +1 -1
- package/dist/es6/ej2-querybuilder.es5.js +74 -21
- 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 +74 -21
- package/styles/fluent-dark.css +0 -14
- package/styles/fluent.css +0 -14
- package/styles/query-builder/fluent-dark.css +0 -14
- package/styles/query-builder/fluent.css +0 -14
|
@@ -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,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
|
-
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
-
|
|
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 ===
|
|
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(
|
|
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
|
-
|
|
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];
|
|
@@ -1784,7 +1796,7 @@ let QueryBuilder = class QueryBuilder extends Component {
|
|
|
1784
1796
|
value = dataSource[i][field].toString();
|
|
1785
1797
|
}
|
|
1786
1798
|
const data = {};
|
|
1787
|
-
if (!(value in original)
|
|
1799
|
+
if (!(value in original)) {
|
|
1788
1800
|
original[value] = 1;
|
|
1789
1801
|
if (isNested === 0) {
|
|
1790
1802
|
data[field] = value;
|
|
@@ -1813,9 +1825,9 @@ let QueryBuilder = class QueryBuilder extends Component {
|
|
|
1813
1825
|
isValues = true;
|
|
1814
1826
|
}
|
|
1815
1827
|
let fieldValue = this.selectedRule.field;
|
|
1816
|
-
|
|
1817
|
-
if (isNested !== 0 && this.fieldMode !==
|
|
1818
|
-
|
|
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 ===
|
|
1940
|
+
if (this.fieldMode === 'DropdownTree') {
|
|
1929
1941
|
fieldObj = getComponent(document.getElementById(parentId + '_filterkey'), 'dropdowntree');
|
|
1930
1942
|
}
|
|
1931
|
-
return this.fieldMode ===
|
|
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
|
-
|
|
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)
|
|
@@ -3448,11 +3464,18 @@ let QueryBuilder = class QueryBuilder extends Component {
|
|
|
3448
3464
|
}
|
|
3449
3465
|
}
|
|
3450
3466
|
const isTemplateRendered = clnruleElem.querySelector('.e-template-value');
|
|
3467
|
+
// eslint-disable
|
|
3451
3468
|
try {
|
|
3452
3469
|
detach(clnruleElem);
|
|
3453
3470
|
}
|
|
3454
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;
|
|
3455
3477
|
}
|
|
3478
|
+
// eslint-enable
|
|
3456
3479
|
if (column && column.ruleTemplate) {
|
|
3457
3480
|
this.clearQBTemplate([clnruleElem.id]);
|
|
3458
3481
|
}
|
|
@@ -3862,8 +3885,8 @@ let QueryBuilder = class QueryBuilder extends Component {
|
|
|
3862
3885
|
}
|
|
3863
3886
|
}
|
|
3864
3887
|
if (this.dataSource instanceof DataManager) {
|
|
3865
|
-
if (!isNullOrUndefined(pred) && (pred.operator ===
|
|
3866
|
-
pred.operator = pred.operator ===
|
|
3888
|
+
if (!isNullOrUndefined(pred) && (pred.operator === 'isnull' || pred.operator === 'notnull')) {
|
|
3889
|
+
pred.operator = pred.operator === 'isnull' ? 'equal' : 'notequal';
|
|
3867
3890
|
}
|
|
3868
3891
|
}
|
|
3869
3892
|
return pred;
|
|
@@ -4126,7 +4149,7 @@ let QueryBuilder = class QueryBuilder extends Component {
|
|
|
4126
4149
|
}
|
|
4127
4150
|
}
|
|
4128
4151
|
}
|
|
4129
|
-
if (rule.rules.length === 0) {
|
|
4152
|
+
if (rule.rules.length === 0 && this.headerTemplate) {
|
|
4130
4153
|
rule.rules[0] = { 'label': '', 'field': '', 'operator': '', 'type': '', 'value': '' };
|
|
4131
4154
|
}
|
|
4132
4155
|
const ruleColl = rule.rules;
|
|
@@ -4369,7 +4392,7 @@ let QueryBuilder = class QueryBuilder extends Component {
|
|
|
4369
4392
|
}
|
|
4370
4393
|
queryStr += rule.field + ' ' + this.operators[rule.operator] + ' ' + valueStr;
|
|
4371
4394
|
}
|
|
4372
|
-
if (rule.condition && rule.condition
|
|
4395
|
+
if (rule.condition && rule.condition !== '') {
|
|
4373
4396
|
condition = rule.condition;
|
|
4374
4397
|
}
|
|
4375
4398
|
}
|
|
@@ -4510,7 +4533,6 @@ let QueryBuilder = class QueryBuilder extends Component {
|
|
|
4510
4533
|
this.parser.push(['Literal', matchValue]);
|
|
4511
4534
|
return matchValue.length + 2;
|
|
4512
4535
|
}
|
|
4513
|
-
// eslint-disable-next-line
|
|
4514
4536
|
if (this.checkNumberLiteral(sqlString)) {
|
|
4515
4537
|
matchValue = /^[0-9]+(\.[0-9]+)?/.exec(sqlString)[0];
|
|
4516
4538
|
this.parser.push(['Literal', matchValue]);
|
|
@@ -4605,6 +4627,37 @@ let QueryBuilder = class QueryBuilder extends Component {
|
|
|
4605
4627
|
const columnData = this.getColumn(rules.field);
|
|
4606
4628
|
return columnData.type;
|
|
4607
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
|
+
}
|
|
4608
4661
|
processParser(parser, rules, levelColl) {
|
|
4609
4662
|
let j;
|
|
4610
4663
|
let jLen;
|