@syncfusion/ej2-querybuilder 19.3.53 → 19.4.47
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/.github/PULL_REQUEST_TEMPLATE/Bug.md +63 -0
- package/.github/PULL_REQUEST_TEMPLATE/feature.md +39 -0
- package/CHANGELOG.md +10 -1
- 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 +80 -17
- package/dist/es6/ej2-querybuilder.es2015.js.map +1 -1
- package/dist/es6/ej2-querybuilder.es5.js +80 -17
- 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 +6 -0
- package/src/query-builder/query-builder.js +80 -17
- package/styles/bootstrap4.css +5 -0
- package/styles/bootstrap5-dark.css +5 -0
- package/styles/bootstrap5.css +5 -0
- package/styles/query-builder/_fluent-definition.scss +107 -0
- package/styles/query-builder/bootstrap4.css +5 -0
- package/styles/query-builder/bootstrap5-dark.css +5 -0
- package/styles/query-builder/bootstrap5.css +5 -0
- package/styles/query-builder/icons/_fluent.scss +8 -0
|
@@ -179,6 +179,9 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
|
|
|
179
179
|
_this.isNotified = false;
|
|
180
180
|
_this.isAddSuccess = false;
|
|
181
181
|
_this.isNotValueChange = false;
|
|
182
|
+
_this.isFieldChange = false;
|
|
183
|
+
_this.isFieldClose = false;
|
|
184
|
+
_this.isDestroy = false;
|
|
182
185
|
MultiSelect.Inject(CheckBoxSelection);
|
|
183
186
|
return _this;
|
|
184
187
|
}
|
|
@@ -658,8 +661,8 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
|
|
|
658
661
|
ddlField = {
|
|
659
662
|
dataSource: this.columns,
|
|
660
663
|
fields: this.fields, placeholder: this.l10n.getConstant('SelectField'),
|
|
661
|
-
popupHeight: ((this.columns.length > 5) ? height : 'auto'),
|
|
662
|
-
change: this.changeField.bind(this), value: rule ? ddlValue : null, open: this.popupOpen.bind(this)
|
|
664
|
+
popupHeight: ((this.columns.length > 5) ? height : 'auto'), close: this.fieldClose.bind(this, ruleElem.id + '_filterkey'),
|
|
665
|
+
change: this.changeField.bind(this), value: rule ? ddlValue : null, open: this.popupOpen.bind(this, true)
|
|
663
666
|
};
|
|
664
667
|
if (this.fieldModel) {
|
|
665
668
|
ddlField = __assign({}, ddlField, this.fieldModel);
|
|
@@ -681,11 +684,11 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
|
|
|
681
684
|
var ddlValue = this.isImportRules ? rule.field : rule.field;
|
|
682
685
|
ddlField = {
|
|
683
686
|
fields: { dataSource: this.columns,
|
|
684
|
-
value:
|
|
687
|
+
value: 'field', text: 'label', child: 'columns', expanded: 'expanded' },
|
|
685
688
|
placeholder: this.l10n.getConstant('SelectField'), showClearButton: false,
|
|
686
689
|
popupHeight: ((this.columns.length > 5) ? height : 'auto'), changeOnBlur: false,
|
|
687
690
|
change: this.changeField.bind(this), value: this.isImportRules ? [ddlValue] : null,
|
|
688
|
-
open: this.popupOpen.bind(this)
|
|
691
|
+
open: this.popupOpen.bind(this, false)
|
|
689
692
|
};
|
|
690
693
|
if (this.fieldModel) {
|
|
691
694
|
ddlField = __assign({}, ddlField, this.fieldModel);
|
|
@@ -1288,21 +1291,38 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
|
|
|
1288
1291
|
}
|
|
1289
1292
|
}
|
|
1290
1293
|
};
|
|
1294
|
+
QueryBuilder.prototype.fieldClose = function (id) {
|
|
1295
|
+
if (this.isFieldChange || this.isDestroy) {
|
|
1296
|
+
return;
|
|
1297
|
+
}
|
|
1298
|
+
this.isFieldClose = true;
|
|
1299
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
1300
|
+
var ddl = getComponent(id, 'dropdownlist');
|
|
1301
|
+
var item = ddl.popupObj.element.querySelector('.e-active');
|
|
1302
|
+
var itemData = ddl.getItemData();
|
|
1303
|
+
ddl.value = itemData.value;
|
|
1304
|
+
var customArgs = { element: ddl.element, value: itemData.value, isInteracted: true,
|
|
1305
|
+
previousItemData: this.prevItemData, previousItem: null, item: item, itemData: itemData, event: null, e: null };
|
|
1306
|
+
this.changeField(customArgs);
|
|
1307
|
+
this.isFieldChange = false;
|
|
1308
|
+
};
|
|
1291
1309
|
QueryBuilder.prototype.changeField = function (args) {
|
|
1292
1310
|
if (args.isInteracted) {
|
|
1311
|
+
this.isFieldChange = true;
|
|
1312
|
+
this.prevItemData = args.itemData;
|
|
1293
1313
|
var fieldElem = closest(args.element, '.e-rule-filter') || closest(args.element, '.e-rule-sub-filter');
|
|
1294
1314
|
var column = this.fieldMode === 'DropdownTree' ? this.getColumn(args.value[0]) : this.getColumn(args.value);
|
|
1295
1315
|
if (this.fieldMode === 'DropdownTree' && fieldElem != null) {
|
|
1296
|
-
var ddtElem = fieldElem.querySelector(
|
|
1316
|
+
var ddtElem = fieldElem.querySelector('.e-control');
|
|
1297
1317
|
var ddt = getComponent(ddtElem, 'dropdowntree');
|
|
1298
1318
|
if (column) {
|
|
1299
|
-
if (column.type
|
|
1319
|
+
if (column.type === 'object') {
|
|
1300
1320
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
1301
1321
|
ddt.value = args.oldValue;
|
|
1302
1322
|
ddt.dataBind();
|
|
1303
1323
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
1304
1324
|
if (isNullOrUndefined(args.oldValue)) {
|
|
1305
|
-
ddtElem.value =
|
|
1325
|
+
ddtElem.value = '';
|
|
1306
1326
|
}
|
|
1307
1327
|
else {
|
|
1308
1328
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
@@ -1461,15 +1481,20 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
|
|
|
1461
1481
|
tempElem.appendChild(subFieldElem);
|
|
1462
1482
|
var height = (this.element.className.indexOf('e-device') > -1) ? '250px' : '200px';
|
|
1463
1483
|
var subFieldData = Object.keys(this.selectedColumn.columns[0]);
|
|
1464
|
-
var
|
|
1484
|
+
var ddlField;
|
|
1485
|
+
ddlField = {
|
|
1465
1486
|
dataSource: this.selectedColumn.columns,
|
|
1466
1487
|
fields: this.fields,
|
|
1467
1488
|
placeholder: this.l10n.getConstant('SelectField'),
|
|
1468
1489
|
popupHeight: ((subFieldData.length > 5) ? height : 'auto'),
|
|
1469
1490
|
change: this.changeField.bind(this),
|
|
1470
1491
|
index: 0,
|
|
1471
|
-
open: this.popupOpen.bind(this)
|
|
1472
|
-
}
|
|
1492
|
+
open: this.popupOpen.bind(this, false)
|
|
1493
|
+
};
|
|
1494
|
+
if (this.fieldModel) {
|
|
1495
|
+
ddlField = __assign({}, ddlField, this.fieldModel);
|
|
1496
|
+
}
|
|
1497
|
+
var dropDownList = new DropDownList(ddlField);
|
|
1473
1498
|
dropDownList.appendTo('#' + ruleId + '_subfilterkey' + this.subFilterCounter);
|
|
1474
1499
|
if (this.isImportRules) {
|
|
1475
1500
|
var subField = this.selectedColumn.columns;
|
|
@@ -1589,7 +1614,7 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
|
|
|
1589
1614
|
change: this.changeField.bind(this),
|
|
1590
1615
|
index: 0,
|
|
1591
1616
|
value: value,
|
|
1592
|
-
open: this.popupOpen.bind(this)
|
|
1617
|
+
open: this.popupOpen.bind(this, false)
|
|
1593
1618
|
};
|
|
1594
1619
|
if (this.operatorModel) {
|
|
1595
1620
|
ddlOperator = __assign({}, ddlOperator, this.operatorModel);
|
|
@@ -1608,10 +1633,13 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
|
|
|
1608
1633
|
this.updateRules(ddlArgs.element, ddlArgs.item);
|
|
1609
1634
|
}
|
|
1610
1635
|
};
|
|
1611
|
-
QueryBuilder.prototype.popupOpen = function (args) {
|
|
1636
|
+
QueryBuilder.prototype.popupOpen = function (isField, args) {
|
|
1612
1637
|
if (this.enableRtl) {
|
|
1613
1638
|
addClass([args.popup.element], 'e-rtl');
|
|
1614
1639
|
}
|
|
1640
|
+
if (isField) {
|
|
1641
|
+
this.isFieldClose = false;
|
|
1642
|
+
}
|
|
1615
1643
|
};
|
|
1616
1644
|
QueryBuilder.prototype.destroyControls = function (target, isRuleTemplate) {
|
|
1617
1645
|
var element = isRuleTemplate ? target : target.nextElementSibling;
|
|
@@ -1804,7 +1832,7 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
|
|
|
1804
1832
|
change: this.changeValue.bind(this, i),
|
|
1805
1833
|
close: this.closePopup.bind(this, i),
|
|
1806
1834
|
actionBegin: this.multiSelectOpen.bind(this, parentId + '_valuekey' + i),
|
|
1807
|
-
open: this.popupOpen.bind(this)
|
|
1835
|
+
open: this.popupOpen.bind(this, false)
|
|
1808
1836
|
};
|
|
1809
1837
|
if (this.valueModel && this.valueModel.multiSelectModel) {
|
|
1810
1838
|
multiSelectValue = __assign({}, multiSelectValue, this.valueModel.multiSelectModel);
|
|
@@ -1864,8 +1892,10 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
|
|
|
1864
1892
|
};
|
|
1865
1893
|
QueryBuilder.prototype.closePopup = function (i, args) {
|
|
1866
1894
|
var element = document.getElementById(args.popup.element.id.replace('_popup', ''));
|
|
1867
|
-
|
|
1868
|
-
|
|
1895
|
+
if (element) {
|
|
1896
|
+
var value = getComponent(element, 'multiselect').value;
|
|
1897
|
+
this.updateRules(element, value, i);
|
|
1898
|
+
}
|
|
1869
1899
|
};
|
|
1870
1900
|
QueryBuilder.prototype.processTemplate = function (target, itemData, rule, tempRule) {
|
|
1871
1901
|
var container = closest(target, '.e-rule-container');
|
|
@@ -2226,6 +2256,9 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
|
|
|
2226
2256
|
return 0;
|
|
2227
2257
|
};
|
|
2228
2258
|
QueryBuilder.prototype.getPreviousItemData = function (prevItemData, column) {
|
|
2259
|
+
if (this.isFieldClose && prevItemData) {
|
|
2260
|
+
prevItemData = this.getColumn(prevItemData.value);
|
|
2261
|
+
}
|
|
2229
2262
|
if (column.template && prevItemData && Object.keys(prevItemData).length < 4) {
|
|
2230
2263
|
prevItemData.template = column.template;
|
|
2231
2264
|
}
|
|
@@ -2718,6 +2751,7 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
|
|
|
2718
2751
|
* @returns {void}
|
|
2719
2752
|
*/
|
|
2720
2753
|
QueryBuilder.prototype.destroy = function () {
|
|
2754
|
+
this.isDestroy = true;
|
|
2721
2755
|
var queryElement = this.element;
|
|
2722
2756
|
if (!queryElement) {
|
|
2723
2757
|
return;
|
|
@@ -2773,6 +2807,7 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
|
|
|
2773
2807
|
this.clearQBTemplate();
|
|
2774
2808
|
}
|
|
2775
2809
|
classList(this.element, [], ['e-rtl', 'e-responsive', 'e-device']);
|
|
2810
|
+
this.isDestroy = false;
|
|
2776
2811
|
};
|
|
2777
2812
|
/**
|
|
2778
2813
|
* Adds single or multiple rules.
|
|
@@ -3558,6 +3593,9 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
|
|
|
3558
3593
|
rule.not = notValue;
|
|
3559
3594
|
}
|
|
3560
3595
|
}
|
|
3596
|
+
else if ((isNullOrUndefined(rule.condition)) && isNullOrUndefined(rule.rules)) {
|
|
3597
|
+
rule = { 'label': '', 'field': '', 'operator': '', 'type': '', 'value': '' };
|
|
3598
|
+
}
|
|
3561
3599
|
else {
|
|
3562
3600
|
if (this.enableNotCondition) {
|
|
3563
3601
|
rule = { 'condition': rule.condition, 'rules': rule.rules, 'not': rule.not };
|
|
@@ -3741,7 +3779,7 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
|
|
|
3741
3779
|
}
|
|
3742
3780
|
}
|
|
3743
3781
|
}
|
|
3744
|
-
else if (ruleColl[i].operator.length) {
|
|
3782
|
+
else if (!isNullOrUndefined(ruleColl[i].operator) && !isNullOrUndefined(ruleColl[i].operator.length)) {
|
|
3745
3783
|
var oper = ruleColl[i].operator.toLowerCase();
|
|
3746
3784
|
var isDateFilter = false;
|
|
3747
3785
|
var dateOperColl = ['equal', 'notequal', 'greaterthan', 'greaterthanorequal', 'lessthan', 'lessthanorequal'];
|
|
@@ -4073,7 +4111,7 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
|
|
|
4073
4111
|
if (!isNullOrUndefined(ruleColl)) {
|
|
4074
4112
|
for (var i = 0, len = ruleColl.length; i < len; i++) {
|
|
4075
4113
|
var keys = Object.keys(ruleColl[i]);
|
|
4076
|
-
if (!isNullOrUndefined(ruleColl[i].rules) && keys.indexOf('rules') > -1) {
|
|
4114
|
+
if (!isNullOrUndefined(ruleColl[i].rules) && keys.indexOf('rules') > -1 && (ruleColl[i].rules.length !== 0)) {
|
|
4077
4115
|
parentElem = this.renderGroup(ruleColl[i], ruleColl[i].condition, parentElem, ruleColl[i].not);
|
|
4078
4116
|
parentElem = this.importRules(ruleColl[i], parentElem, true);
|
|
4079
4117
|
}
|
|
@@ -4445,6 +4483,12 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
|
|
|
4445
4483
|
this.parser.push(['Literal', matchValue]);
|
|
4446
4484
|
return matchValue.length + 2;
|
|
4447
4485
|
}
|
|
4486
|
+
// eslint-disable-next-line
|
|
4487
|
+
if (this.checkNumberLiteral(sqlString)) {
|
|
4488
|
+
matchValue = /^[0-9]+(\.[0-9]+)?/.exec(sqlString)[0];
|
|
4489
|
+
this.parser.push(['Literal', matchValue]);
|
|
4490
|
+
return matchValue.length;
|
|
4491
|
+
}
|
|
4448
4492
|
//String
|
|
4449
4493
|
if (/^'((?:[^\\']+?|\\.|'')*)'(?!')/.exec(sqlString)) {
|
|
4450
4494
|
matchValue = /^'((?:[^\\']+?|\\.|'')*)'(?!')/.exec(sqlString)[0];
|
|
@@ -4484,6 +4528,25 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
|
|
|
4484
4528
|
}
|
|
4485
4529
|
return false;
|
|
4486
4530
|
};
|
|
4531
|
+
QueryBuilder.prototype.checkNumberLiteral = function (sqlString) {
|
|
4532
|
+
var lastParser = this.parser[this.parser.length - 1];
|
|
4533
|
+
if (!lastParser) {
|
|
4534
|
+
return true;
|
|
4535
|
+
}
|
|
4536
|
+
else {
|
|
4537
|
+
if (/^[0-9]+(\.[0-9]+)?/.exec(sqlString)) {
|
|
4538
|
+
var secParser = this.parser[this.parser.length - 2];
|
|
4539
|
+
var betweenParser = this.parser[this.parser.length - 3];
|
|
4540
|
+
if (lastParser[0] === 'Left' && (secParser && secParser[0] === 'Conditions')) {
|
|
4541
|
+
return true;
|
|
4542
|
+
}
|
|
4543
|
+
if (lastParser[0] === 'Conditions' && (betweenParser && betweenParser[1].indexOf('between') < 0)) {
|
|
4544
|
+
return true;
|
|
4545
|
+
}
|
|
4546
|
+
}
|
|
4547
|
+
}
|
|
4548
|
+
return false;
|
|
4549
|
+
};
|
|
4487
4550
|
QueryBuilder.prototype.getOperator = function (value, operator) {
|
|
4488
4551
|
var operators = {
|
|
4489
4552
|
'=': 'equal', '!=': 'notequal', '<': 'lessthan', '>': 'greaterthan', '<=': 'lessthanorequal',
|