@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.
- package/CHANGELOG.md +5 -39
- 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 -22
- package/dist/es6/ej2-querybuilder.es2015.js.map +1 -1
- package/dist/es6/ej2-querybuilder.es5.js +74 -18
- 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-model.d.ts +1 -1
- package/src/query-builder/query-builder.d.ts +2 -0
- package/src/query-builder/query-builder.js +75 -19
- package/styles/bootstrap5-dark.css +26 -10
- package/styles/bootstrap5.css +26 -10
- package/styles/fluent-dark.css +966 -0
- package/styles/fluent-dark.scss +1 -0
- package/styles/fluent.css +966 -0
- package/styles/fluent.scss +1 -0
- package/styles/query-builder/_bootstrap5-definition.scss +6 -5
- package/styles/query-builder/_fluent-dark-definition.scss +1 -0
- package/styles/query-builder/_fluent-definition.scss +7 -7
- package/styles/query-builder/_layout.scss +7 -6
- package/styles/query-builder/_tailwind-definition.scss +7 -7
- package/styles/query-builder/_theme.scss +25 -0
- package/styles/query-builder/bootstrap5-dark.css +26 -10
- package/styles/query-builder/bootstrap5.css +26 -10
- package/styles/query-builder/fluent-dark.css +966 -0
- package/styles/query-builder/fluent-dark.scss +15 -0
- package/styles/query-builder/fluent.css +966 -0
- package/styles/query-builder/fluent.scss +15 -0
- package/styles/query-builder/icons/_bootstrap5.scss +1 -1
- package/styles/query-builder/icons/_fluent-dark.scss +1 -0
- package/styles/query-builder/icons/_fluent.scss +1 -1
- package/styles/query-builder/icons/_tailwind-dark.scss +5 -5
- package/styles/query-builder/icons/_tailwind.scss +4 -4
- package/styles/query-builder/tailwind-dark.css +19 -73
- package/styles/query-builder/tailwind.css +18 -72
- package/styles/tailwind-dark.css +19 -73
- 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
|
|
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];
|
|
@@ -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)
|
|
@@ -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;
|