@syncfusion/ej2-querybuilder 19.3.43 → 19.4.38
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 +11 -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 +79 -24
- package/dist/es6/ej2-querybuilder.es2015.js.map +1 -1
- package/dist/es6/ej2-querybuilder.es5.js +79 -24
- 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 +79 -24
- 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);
|
|
@@ -930,7 +933,7 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
|
|
|
930
933
|
else {
|
|
931
934
|
clsName = 'e-removerule e-rule-delete e-css e-btn e-small e-button-hide';
|
|
932
935
|
}
|
|
933
|
-
var delBtnElem = this.createElement('button', { attrs: { class: clsName } });
|
|
936
|
+
var delBtnElem = this.createElement('button', { attrs: { type: 'button', class: clsName } });
|
|
934
937
|
tempElem.appendChild(delBtnElem);
|
|
935
938
|
fieldElem.appendChild(tempElem);
|
|
936
939
|
ruleElem.appendChild(fieldElem);
|
|
@@ -982,7 +985,7 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
|
|
|
982
985
|
}
|
|
983
986
|
if (isGroup) {
|
|
984
987
|
var clsName = this.showButtons.groupDelete ? 'e-deletegroup' : 'e-deletegroup e-button-hide';
|
|
985
|
-
dltGroupBtn = this.createElement('button', { attrs: { class: clsName } });
|
|
988
|
+
dltGroupBtn = this.createElement('button', { attrs: { type: 'button', class: clsName } });
|
|
986
989
|
var button = new Button({ iconCss: 'e-icons e-delete-icon', cssClass: 'e-small e-round' });
|
|
987
990
|
button.appendTo(dltGroupBtn);
|
|
988
991
|
dltGroupBtn.setAttribute('title', this.l10n.getConstant('DeleteGroup'));
|
|
@@ -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
|
|
@@ -1468,7 +1488,7 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
|
|
|
1468
1488
|
popupHeight: ((subFieldData.length > 5) ? height : 'auto'),
|
|
1469
1489
|
change: this.changeField.bind(this),
|
|
1470
1490
|
index: 0,
|
|
1471
|
-
open: this.popupOpen.bind(this)
|
|
1491
|
+
open: this.popupOpen.bind(this, false)
|
|
1472
1492
|
});
|
|
1473
1493
|
dropDownList.appendTo('#' + ruleId + '_subfilterkey' + this.subFilterCounter);
|
|
1474
1494
|
if (this.isImportRules) {
|
|
@@ -1589,7 +1609,7 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
|
|
|
1589
1609
|
change: this.changeField.bind(this),
|
|
1590
1610
|
index: 0,
|
|
1591
1611
|
value: value,
|
|
1592
|
-
open: this.popupOpen.bind(this)
|
|
1612
|
+
open: this.popupOpen.bind(this, false)
|
|
1593
1613
|
};
|
|
1594
1614
|
if (this.operatorModel) {
|
|
1595
1615
|
ddlOperator = __assign({}, ddlOperator, this.operatorModel);
|
|
@@ -1608,10 +1628,13 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
|
|
|
1608
1628
|
this.updateRules(ddlArgs.element, ddlArgs.item);
|
|
1609
1629
|
}
|
|
1610
1630
|
};
|
|
1611
|
-
QueryBuilder.prototype.popupOpen = function (args) {
|
|
1631
|
+
QueryBuilder.prototype.popupOpen = function (isField, args) {
|
|
1612
1632
|
if (this.enableRtl) {
|
|
1613
1633
|
addClass([args.popup.element], 'e-rtl');
|
|
1614
1634
|
}
|
|
1635
|
+
if (isField) {
|
|
1636
|
+
this.isFieldClose = false;
|
|
1637
|
+
}
|
|
1615
1638
|
};
|
|
1616
1639
|
QueryBuilder.prototype.destroyControls = function (target, isRuleTemplate) {
|
|
1617
1640
|
var element = isRuleTemplate ? target : target.nextElementSibling;
|
|
@@ -1804,7 +1827,7 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
|
|
|
1804
1827
|
change: this.changeValue.bind(this, i),
|
|
1805
1828
|
close: this.closePopup.bind(this, i),
|
|
1806
1829
|
actionBegin: this.multiSelectOpen.bind(this, parentId + '_valuekey' + i),
|
|
1807
|
-
open: this.popupOpen.bind(this)
|
|
1830
|
+
open: this.popupOpen.bind(this, false)
|
|
1808
1831
|
};
|
|
1809
1832
|
if (this.valueModel && this.valueModel.multiSelectModel) {
|
|
1810
1833
|
multiSelectValue = __assign({}, multiSelectValue, this.valueModel.multiSelectModel);
|
|
@@ -2226,6 +2249,9 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
|
|
|
2226
2249
|
return 0;
|
|
2227
2250
|
};
|
|
2228
2251
|
QueryBuilder.prototype.getPreviousItemData = function (prevItemData, column) {
|
|
2252
|
+
if (this.isFieldClose && prevItemData) {
|
|
2253
|
+
prevItemData = this.getColumn(prevItemData.value);
|
|
2254
|
+
}
|
|
2229
2255
|
if (column.template && prevItemData && Object.keys(prevItemData).length < 4) {
|
|
2230
2256
|
prevItemData.template = column.template;
|
|
2231
2257
|
}
|
|
@@ -2718,6 +2744,7 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
|
|
|
2718
2744
|
* @returns {void}
|
|
2719
2745
|
*/
|
|
2720
2746
|
QueryBuilder.prototype.destroy = function () {
|
|
2747
|
+
this.isDestroy = true;
|
|
2721
2748
|
var queryElement = this.element;
|
|
2722
2749
|
if (!queryElement) {
|
|
2723
2750
|
return;
|
|
@@ -2773,6 +2800,7 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
|
|
|
2773
2800
|
this.clearQBTemplate();
|
|
2774
2801
|
}
|
|
2775
2802
|
classList(this.element, [], ['e-rtl', 'e-responsive', 'e-device']);
|
|
2803
|
+
this.isDestroy = false;
|
|
2776
2804
|
};
|
|
2777
2805
|
/**
|
|
2778
2806
|
* Adds single or multiple rules.
|
|
@@ -2900,7 +2928,7 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
|
|
|
2900
2928
|
}
|
|
2901
2929
|
});
|
|
2902
2930
|
var textElem = this.createElement('textarea', { attrs: { class: 'e-summary-text', readonly: 'true' }, styles: 'max-height:500px' });
|
|
2903
|
-
var editElem = this.createElement('button', { attrs: { class: 'e-edit-rule e-css e-btn e-small e-flat e-primary' } });
|
|
2931
|
+
var editElem = this.createElement('button', { attrs: { type: 'button', class: 'e-edit-rule e-css e-btn e-small e-flat e-primary' } });
|
|
2904
2932
|
var divElem = this.createElement('div', { attrs: { class: 'e-summary-btndiv' } });
|
|
2905
2933
|
contentElem.appendChild(textElem);
|
|
2906
2934
|
textElem.textContent = this.getSqlFromRules(this.rule);
|
|
@@ -3558,6 +3586,9 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
|
|
|
3558
3586
|
rule.not = notValue;
|
|
3559
3587
|
}
|
|
3560
3588
|
}
|
|
3589
|
+
else if ((isNullOrUndefined(rule.condition)) && isNullOrUndefined(rule.rules)) {
|
|
3590
|
+
rule = { 'label': '', 'field': '', 'operator': '', 'type': '', 'value': '' };
|
|
3591
|
+
}
|
|
3561
3592
|
else {
|
|
3562
3593
|
if (this.enableNotCondition) {
|
|
3563
3594
|
rule = { 'condition': rule.condition, 'rules': rule.rules, 'not': rule.not };
|
|
@@ -3741,7 +3772,7 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
|
|
|
3741
3772
|
}
|
|
3742
3773
|
}
|
|
3743
3774
|
}
|
|
3744
|
-
else if (ruleColl[i].operator.length) {
|
|
3775
|
+
else if (!isNullOrUndefined(ruleColl[i].operator) && !isNullOrUndefined(ruleColl[i].operator.length)) {
|
|
3745
3776
|
var oper = ruleColl[i].operator.toLowerCase();
|
|
3746
3777
|
var isDateFilter = false;
|
|
3747
3778
|
var dateOperColl = ['equal', 'notequal', 'greaterthan', 'greaterthanorequal', 'lessthan', 'lessthanorequal'];
|
|
@@ -4445,6 +4476,12 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
|
|
|
4445
4476
|
this.parser.push(['Literal', matchValue]);
|
|
4446
4477
|
return matchValue.length + 2;
|
|
4447
4478
|
}
|
|
4479
|
+
// eslint-disable-next-line
|
|
4480
|
+
if (this.checkNumberLiteral(sqlString)) {
|
|
4481
|
+
matchValue = /^[0-9]+(\.[0-9]+)?/.exec(sqlString)[0];
|
|
4482
|
+
this.parser.push(['Literal', matchValue]);
|
|
4483
|
+
return matchValue.length;
|
|
4484
|
+
}
|
|
4448
4485
|
//String
|
|
4449
4486
|
if (/^'((?:[^\\']+?|\\.|'')*)'(?!')/.exec(sqlString)) {
|
|
4450
4487
|
matchValue = /^'((?:[^\\']+?|\\.|'')*)'(?!')/.exec(sqlString)[0];
|
|
@@ -4484,6 +4521,25 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
|
|
|
4484
4521
|
}
|
|
4485
4522
|
return false;
|
|
4486
4523
|
};
|
|
4524
|
+
QueryBuilder.prototype.checkNumberLiteral = function (sqlString) {
|
|
4525
|
+
var lastParser = this.parser[this.parser.length - 1];
|
|
4526
|
+
if (!lastParser) {
|
|
4527
|
+
return true;
|
|
4528
|
+
}
|
|
4529
|
+
else {
|
|
4530
|
+
if (/^[0-9]+(\.[0-9]+)?/.exec(sqlString)) {
|
|
4531
|
+
var secParser = this.parser[this.parser.length - 2];
|
|
4532
|
+
var betweenParser = this.parser[this.parser.length - 3];
|
|
4533
|
+
if (lastParser[0] === 'Left' && (secParser && secParser[0] === 'Conditions')) {
|
|
4534
|
+
return true;
|
|
4535
|
+
}
|
|
4536
|
+
if (lastParser[0] === 'Conditions' && (betweenParser && betweenParser[1].indexOf('between') < 0)) {
|
|
4537
|
+
return true;
|
|
4538
|
+
}
|
|
4539
|
+
}
|
|
4540
|
+
}
|
|
4541
|
+
return false;
|
|
4542
|
+
};
|
|
4487
4543
|
QueryBuilder.prototype.getOperator = function (value, operator) {
|
|
4488
4544
|
var operators = {
|
|
4489
4545
|
'=': 'equal', '!=': 'notequal', '<': 'lessthan', '>': 'greaterthan', '<=': 'lessthanorequal',
|
|
@@ -4512,14 +4568,8 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
|
|
|
4512
4568
|
return operators[operator];
|
|
4513
4569
|
};
|
|
4514
4570
|
QueryBuilder.prototype.getTypeFromColumn = function (rules) {
|
|
4515
|
-
var columnData = this.
|
|
4516
|
-
|
|
4517
|
-
if (columnData[i].field === rules.field) {
|
|
4518
|
-
rules.type = columnData[i].type;
|
|
4519
|
-
break;
|
|
4520
|
-
}
|
|
4521
|
-
}
|
|
4522
|
-
return rules.type;
|
|
4571
|
+
var columnData = this.getColumn(rules.field);
|
|
4572
|
+
return columnData.type;
|
|
4523
4573
|
};
|
|
4524
4574
|
QueryBuilder.prototype.processParser = function (parser, rules, levelColl) {
|
|
4525
4575
|
var j;
|
|
@@ -4534,6 +4584,7 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
|
|
|
4534
4584
|
var lLen;
|
|
4535
4585
|
var grpCount;
|
|
4536
4586
|
var operator;
|
|
4587
|
+
var isLeftOpened = false;
|
|
4537
4588
|
for (var i = 0, iLen = parser.length; i < iLen; i++) {
|
|
4538
4589
|
if (parser[i][0] === 'Literal') {
|
|
4539
4590
|
rule = { label: parser[i][1], field: parser[i][1] };
|
|
@@ -4552,8 +4603,12 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
|
|
|
4552
4603
|
j = i + 1;
|
|
4553
4604
|
jLen = iLen;
|
|
4554
4605
|
for (j = i + 1; j < jLen; j++) {
|
|
4555
|
-
if (parser[j][0] === '
|
|
4606
|
+
if (operator.indexOf('between') < 0 && parser[j][0] === 'Left') {
|
|
4607
|
+
isLeftOpened = true;
|
|
4608
|
+
}
|
|
4609
|
+
else if (parser[j][0] === 'Right' && isLeftOpened) {
|
|
4556
4610
|
i = j;
|
|
4611
|
+
isLeftOpened = false;
|
|
4557
4612
|
break;
|
|
4558
4613
|
}
|
|
4559
4614
|
else {
|