@syncfusion/ej2-querybuilder 26.1.38 → 26.1.42
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/dist/ej2-querybuilder.min.js +2 -2
- 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 +95 -3
- package/dist/es6/ej2-querybuilder.es2015.js.map +1 -1
- package/dist/es6/ej2-querybuilder.es5.js +97 -3
- 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 +10 -10
- package/src/query-builder/query-builder-model.d.ts +1 -1
- package/src/query-builder/query-builder.d.ts +6 -0
- package/src/query-builder/query-builder.js +97 -3
- package/styles/fluent2.css +5 -5
- package/styles/query-builder/fluent2.css +5 -5
|
@@ -1081,7 +1081,7 @@ let QueryBuilder = class QueryBuilder extends Component {
|
|
|
1081
1081
|
popupHeight: ((this.columns.length > 5) ? height : 'auto'), changeOnBlur: false,
|
|
1082
1082
|
change: this.changeField.bind(this), value: !isNullOrUndefined(ddlValue) ? [ddlValue] : null,
|
|
1083
1083
|
open: this.popupOpen.bind(this, false), treeSettings: { expandOn: 'Click' },
|
|
1084
|
-
cssClass: 'e-qb-ddt'
|
|
1084
|
+
cssClass: 'e-qb-ddt', filtering: this.dropdownTreeFiltering.bind(this), close: this.dropdownTreeClose.bind(this)
|
|
1085
1085
|
};
|
|
1086
1086
|
if (this.fieldModel) {
|
|
1087
1087
|
ddlField = Object.assign({}, ddlField, this.fieldModel);
|
|
@@ -1151,14 +1151,80 @@ let QueryBuilder = class QueryBuilder extends Component {
|
|
|
1151
1151
|
this.setMultiConnector(ruleElem);
|
|
1152
1152
|
}
|
|
1153
1153
|
}
|
|
1154
|
+
dropdownTreeFiltering(args) {
|
|
1155
|
+
// eslint-disable-next-line @typescript-eslint/no-this-alias
|
|
1156
|
+
const proxy = this;
|
|
1157
|
+
let ruleElemID = '';
|
|
1158
|
+
const srcElement = args.event.srcElement;
|
|
1159
|
+
const isClearIcon = srcElement.classList.contains('e-clear-icon');
|
|
1160
|
+
const inputElem = isClearIcon ? srcElement.parentElement.querySelector('.e-textbox') : srcElement;
|
|
1161
|
+
ruleElemID = inputElem.id.split('_filterkey')[0];
|
|
1162
|
+
const ruleElem = document.getElementById(ruleElemID);
|
|
1163
|
+
this.ddTree = getComponent(ruleElem.querySelector('input.e-dropdowntree'), 'dropdowntree');
|
|
1164
|
+
const hierarchicalData = extend([], this.columns, [], true);
|
|
1165
|
+
// Cancel the default filtering.
|
|
1166
|
+
args.cancel = true;
|
|
1167
|
+
if (args.text === '') {
|
|
1168
|
+
this.changeDataSource(hierarchicalData);
|
|
1169
|
+
}
|
|
1170
|
+
else {
|
|
1171
|
+
const matchedDataSource = hierarchicalData
|
|
1172
|
+
.map((data) => this.nestedChildFilter(args.text, data))
|
|
1173
|
+
.filter((filteredChild) => filteredChild !== null);
|
|
1174
|
+
this.changeDataSource(matchedDataSource);
|
|
1175
|
+
setTimeout(() => {
|
|
1176
|
+
proxy.ddTree.treeObj.expandAll();
|
|
1177
|
+
}, 100);
|
|
1178
|
+
}
|
|
1179
|
+
}
|
|
1180
|
+
changeDataSource(data) {
|
|
1181
|
+
this.ddTree.treeObj.fields = {
|
|
1182
|
+
dataSource: data,
|
|
1183
|
+
value: 'field',
|
|
1184
|
+
text: 'label',
|
|
1185
|
+
child: 'columns',
|
|
1186
|
+
expanded: 'expanded'
|
|
1187
|
+
};
|
|
1188
|
+
this.ddTree.treeObj.refresh();
|
|
1189
|
+
}
|
|
1190
|
+
nestedChildFilter(value, node) {
|
|
1191
|
+
const children = node[this.ddTree.fields.child];
|
|
1192
|
+
if (!children) {
|
|
1193
|
+
return this.isMatchedNode(value, node) ? node : null;
|
|
1194
|
+
}
|
|
1195
|
+
const matchedChildren = children
|
|
1196
|
+
.map((child) => this.nestedChildFilter(value, child))
|
|
1197
|
+
.filter((filteredChild) => filteredChild !== null);
|
|
1198
|
+
if (matchedChildren.length) {
|
|
1199
|
+
node[this.ddTree.fields.child] = matchedChildren;
|
|
1200
|
+
return node;
|
|
1201
|
+
}
|
|
1202
|
+
else {
|
|
1203
|
+
node[this.ddTree.fields.child] = children;
|
|
1204
|
+
return this.isMatchedNode(value, node) ? node : null;
|
|
1205
|
+
}
|
|
1206
|
+
}
|
|
1207
|
+
isMatchedNode(value, node) {
|
|
1208
|
+
const checkValue = node[this.ddTree.fields.text].toLowerCase();
|
|
1209
|
+
value = value ? value.toLowerCase() : '';
|
|
1210
|
+
return checkValue.indexOf(value) !== -1;
|
|
1211
|
+
}
|
|
1212
|
+
dropdownTreeClose() {
|
|
1213
|
+
if (this.ddTree) {
|
|
1214
|
+
this.changeDataSource(this.columns);
|
|
1215
|
+
}
|
|
1216
|
+
this.ddTree = null;
|
|
1217
|
+
}
|
|
1154
1218
|
updateDropdowntreeDS(columns) {
|
|
1155
1219
|
for (let i = 0; i < columns.length; i++) {
|
|
1156
1220
|
if (columns[parseInt(i.toString(), 10)].type === 'object') {
|
|
1221
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
1157
1222
|
if (this.isAngular && columns[parseInt(i.toString(), 10)].template) {
|
|
1158
1223
|
delete columns[parseInt(i.toString(), 10)].template;
|
|
1159
1224
|
}
|
|
1160
1225
|
columns[parseInt(i.toString(), 10)].selectable = false;
|
|
1161
1226
|
this.updateDropdowntreeDS(columns[parseInt(i.toString(), 10)].columns);
|
|
1227
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
1162
1228
|
}
|
|
1163
1229
|
else if (this.isAngular && columns[parseInt(i.toString(), 10)].template) {
|
|
1164
1230
|
delete columns[parseInt(i.toString(), 10)].template;
|
|
@@ -1323,10 +1389,12 @@ let QueryBuilder = class QueryBuilder extends Component {
|
|
|
1323
1389
|
}
|
|
1324
1390
|
if (excludeOprs.indexOf(rule.rules[index].operator) < -1 &&
|
|
1325
1391
|
(isNullOrUndefined(rule.rules[index].value) &&
|
|
1326
|
-
rule.rules[index].type !== 'date') || rule.rules[index].value === '' ||
|
|
1392
|
+
rule.rules[index].type !== 'date') || rule.rules[index].value === '' || rule.rules[index].value === null ||
|
|
1327
1393
|
(rule.rules[index].value instanceof Array && valArray.length < 1)) {
|
|
1328
1394
|
const valElem = tempElem.querySelectorAll('.e-rule-value .e-control');
|
|
1329
|
-
|
|
1395
|
+
if (excludeOprs.indexOf(rule.rules[index].operator) < 0) {
|
|
1396
|
+
isValid = false;
|
|
1397
|
+
}
|
|
1330
1398
|
for (let j = 0, jLen = valElem.length; j < jLen; j++) {
|
|
1331
1399
|
const element = valElem[j];
|
|
1332
1400
|
let elem;
|
|
@@ -1341,6 +1409,18 @@ let QueryBuilder = class QueryBuilder extends Component {
|
|
|
1341
1409
|
}
|
|
1342
1410
|
j++;
|
|
1343
1411
|
}
|
|
1412
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
1413
|
+
}
|
|
1414
|
+
else if (rule.rules[index].type === 'date' && (rule.rules[index].value === null || rule.rules[index].value.indexOf(null) > -1)) {
|
|
1415
|
+
const valElem = tempElem.querySelectorAll('.e-rule-value .e-control');
|
|
1416
|
+
if (excludeOprs.indexOf(rule.rules[index].operator) < 0) {
|
|
1417
|
+
isValid = false;
|
|
1418
|
+
}
|
|
1419
|
+
for (let j = 0, jLen = valElem.length; j < jLen; j++) {
|
|
1420
|
+
if (valElem[j].parentElement.className.indexOf('e-tooltip') < 0 && valElem[j].className.indexOf('e-tooltip') < 0 && (isNullOrUndefined(rule.rules[index].value) || rule.rules[index].value[j] == null)) {
|
|
1421
|
+
this.renderToolTip(valElem[j].parentElement);
|
|
1422
|
+
}
|
|
1423
|
+
}
|
|
1344
1424
|
}
|
|
1345
1425
|
}
|
|
1346
1426
|
else if ((dropDownObj && dropDownObj.element && isNullOrUndefined(dropDownObj.index)) ||
|
|
@@ -2092,6 +2172,9 @@ let QueryBuilder = class QueryBuilder extends Component {
|
|
|
2092
2172
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
2093
2173
|
element = args.element;
|
|
2094
2174
|
}
|
|
2175
|
+
if (!element) {
|
|
2176
|
+
return;
|
|
2177
|
+
}
|
|
2095
2178
|
if (element.className.indexOf('e-day') > -1 || element.className.indexOf('e-today') > -1 || element.className.indexOf('e-cell') > -1) {
|
|
2096
2179
|
const calenderArgs = args;
|
|
2097
2180
|
element = calenderArgs.element;
|
|
@@ -3717,6 +3800,9 @@ let QueryBuilder = class QueryBuilder extends Component {
|
|
|
3717
3800
|
if (valElem[1] && valElem[1].parentElement.className.indexOf('e-tooltip') > -1) {
|
|
3718
3801
|
getComponent(valElem[1].parentElement, 'tooltip').destroy();
|
|
3719
3802
|
}
|
|
3803
|
+
if (valElem[2] && valElem[2].parentElement.className.indexOf('e-tooltip') > -1) {
|
|
3804
|
+
getComponent(valElem[2].parentElement, 'tooltip').destroy();
|
|
3805
|
+
}
|
|
3720
3806
|
}
|
|
3721
3807
|
}
|
|
3722
3808
|
}
|
|
@@ -6482,6 +6568,7 @@ let QueryBuilder = class QueryBuilder extends Component {
|
|
|
6482
6568
|
let grpCount;
|
|
6483
6569
|
let operator;
|
|
6484
6570
|
let isLeftOpened = false;
|
|
6571
|
+
let isNotOpened = false;
|
|
6485
6572
|
for (let i = 0, iLen = parser.length; i < iLen; i++) {
|
|
6486
6573
|
if (parser[i][0] === 'Literal') {
|
|
6487
6574
|
const column = this.getColumn(parser[i][1]);
|
|
@@ -6617,6 +6704,7 @@ let QueryBuilder = class QueryBuilder extends Component {
|
|
|
6617
6704
|
}
|
|
6618
6705
|
else if (parser[i][0] === 'Left') {
|
|
6619
6706
|
if (!(parser[0][0] === 'Left') && (parser[i - 1][1] === 'not' || sqlLocale && this.l10n.getConstant('NOT').toLowerCase() === parser[i - 1][1])) {
|
|
6707
|
+
isNotOpened = true;
|
|
6620
6708
|
continue;
|
|
6621
6709
|
}
|
|
6622
6710
|
this.parser = parser.splice(i + 1, iLen - (i + 1));
|
|
@@ -6647,6 +6735,10 @@ let QueryBuilder = class QueryBuilder extends Component {
|
|
|
6647
6735
|
}
|
|
6648
6736
|
}
|
|
6649
6737
|
else if (parser[i][0] === 'Right') {
|
|
6738
|
+
if (isNotOpened && parser[i + 1][0] === 'Right') {
|
|
6739
|
+
isNotOpened = false;
|
|
6740
|
+
continue;
|
|
6741
|
+
}
|
|
6650
6742
|
this.parser = parser.splice(i + 1, iLen - (i + 1));
|
|
6651
6743
|
levelColl.pop(); //To get the parent Group
|
|
6652
6744
|
rules = this.rule;
|