@syncfusion/ej2-querybuilder 30.1.42 → 30.2.6
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/aceconfig.js +17 -0
- 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 +358 -274
- package/dist/es6/ej2-querybuilder.es2015.js.map +1 -1
- package/dist/es6/ej2-querybuilder.es5.js +401 -313
- 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 +7 -7
- package/src/query-builder/query-builder-model.d.ts +4 -4
- package/src/query-builder/query-builder.d.ts +2 -0
- package/src/query-builder/query-builder.js +400 -312
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ChildProperty, Property, Collection, Component,
|
|
1
|
+
import { ChildProperty, Property, Collection, Component, removeClass, isNullOrUndefined, Animation, extend, closest, addClass, select, append, getComponent, detach, rippleEffect, getInstance, getValue, getNumericObject, Browser, classList, Internationalization, getUniqueID, L10n, Draggable, remove, compile, EventHandler, cldrData, Event, Complex, NotifyPropertyChanges } from '@syncfusion/ej2-base';
|
|
2
2
|
import { Button, CheckBox, RadioButton } from '@syncfusion/ej2-buttons';
|
|
3
3
|
import { MultiSelect, CheckBoxSelection, DropDownList, DropDownTree } from '@syncfusion/ej2-dropdowns';
|
|
4
4
|
import { Query, DataManager, Deferred, Predicate } from '@syncfusion/ej2-data';
|
|
@@ -174,37 +174,71 @@ let QueryBuilder = class QueryBuilder extends Component {
|
|
|
174
174
|
reset() {
|
|
175
175
|
this.isImportRules = false;
|
|
176
176
|
let bodyElem = this.element.querySelector('.e-group-body');
|
|
177
|
-
const
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
177
|
+
const inputElements = this.element.querySelectorAll('input.e-control');
|
|
178
|
+
const batchSize = 20;
|
|
179
|
+
let currentIndex = 0;
|
|
180
|
+
const processBatch = () => {
|
|
181
|
+
const endIndex = Math.min(currentIndex + batchSize, inputElements.length);
|
|
182
|
+
for (let i = currentIndex; i < endIndex; i++) {
|
|
183
|
+
const element = inputElements[i];
|
|
184
|
+
try {
|
|
185
|
+
if (element.className.indexOf('e-tooltip') > -1) {
|
|
186
|
+
const tooltip = getComponent(element, 'tooltip');
|
|
187
|
+
if (tooltip) {
|
|
188
|
+
tooltip.destroy();
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
else if (element.parentElement && element.parentElement.className.indexOf('e-tooltip') > -1) {
|
|
192
|
+
const tooltip = getComponent(element.parentElement, 'tooltip');
|
|
193
|
+
if (tooltip) {
|
|
194
|
+
tooltip.destroy();
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
catch (e) {
|
|
199
|
+
console.warn('Error destroying tooltip:', e);
|
|
200
|
+
}
|
|
181
201
|
}
|
|
182
|
-
|
|
183
|
-
|
|
202
|
+
currentIndex = endIndex;
|
|
203
|
+
if (currentIndex < inputElements.length) {
|
|
204
|
+
requestAnimationFrame(processBatch);
|
|
184
205
|
}
|
|
206
|
+
};
|
|
207
|
+
if (inputElements.length > 0) {
|
|
208
|
+
processBatch();
|
|
185
209
|
}
|
|
186
210
|
if (bodyElem) {
|
|
187
|
-
bodyElem.
|
|
211
|
+
bodyElem.textContent = '';
|
|
188
212
|
}
|
|
189
213
|
else {
|
|
214
|
+
const fragment = document.createDocumentFragment();
|
|
190
215
|
const grpContainer = this.createElement('div', { attrs: { class: 'e-group-container' } });
|
|
191
216
|
const grpHeader = this.createElement('div', { attrs: { class: 'e-group-header' } });
|
|
192
217
|
const grpBody = this.createElement('div', { attrs: { class: 'e-group-body' } });
|
|
193
|
-
grpContainer.appendChild(grpHeader)
|
|
194
|
-
|
|
218
|
+
grpContainer.appendChild(grpHeader);
|
|
219
|
+
grpContainer.appendChild(grpBody);
|
|
220
|
+
fragment.appendChild(grpContainer);
|
|
221
|
+
this.element.appendChild(fragment);
|
|
195
222
|
bodyElem = this.element.querySelector('.e-group-body');
|
|
196
223
|
}
|
|
197
224
|
if (this.headerTemplate && this.isRoot) {
|
|
198
|
-
this.element.
|
|
225
|
+
this.element.textContent = '';
|
|
199
226
|
this.isRoot = false;
|
|
200
227
|
}
|
|
201
228
|
if (this.enableNotCondition) {
|
|
202
|
-
|
|
229
|
+
const toggleElements = this.element.querySelectorAll('.e-qb-toggle');
|
|
230
|
+
for (let i = 0; i < toggleElements.length; i++) {
|
|
231
|
+
removeClass([toggleElements[i]], 'e-active-toggle');
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
if (bodyElem) {
|
|
235
|
+
bodyElem.appendChild(this.createElement('div', { attrs: { class: 'e-rule-list' } }));
|
|
203
236
|
}
|
|
204
|
-
bodyElem.appendChild(this.createElement('div', { attrs: { class: 'e-rule-list' } }));
|
|
205
237
|
this.levelColl[this.element.id + '_group0'] = [0];
|
|
206
238
|
this.setProperties({ rule: { condition: 'and', not: false, rules: [] } }, true);
|
|
207
|
-
|
|
239
|
+
if (bodyElem && bodyElem.parentElement) {
|
|
240
|
+
this.disableRuleCondition(bodyElem.parentElement);
|
|
241
|
+
}
|
|
208
242
|
}
|
|
209
243
|
getWrapper() {
|
|
210
244
|
return this.element;
|
|
@@ -239,11 +273,11 @@ let QueryBuilder = class QueryBuilder extends Component {
|
|
|
239
273
|
if (this.columns.length) {
|
|
240
274
|
this.columnSort();
|
|
241
275
|
const columns = this.columns;
|
|
242
|
-
|
|
243
|
-
this.updateCustomOperator(
|
|
244
|
-
if (!
|
|
245
|
-
if (columnKeys.indexOf(
|
|
246
|
-
value = this.dataColl[0][
|
|
276
|
+
columns.forEach((column) => {
|
|
277
|
+
this.updateCustomOperator(column, 'initial');
|
|
278
|
+
if (!column.type) {
|
|
279
|
+
if (columnKeys.indexOf(column.field) > -1) {
|
|
280
|
+
value = this.dataColl[0][column.field];
|
|
247
281
|
type = typeof value;
|
|
248
282
|
if (type === 'string') {
|
|
249
283
|
isDate = !isNaN(Date.parse(value));
|
|
@@ -252,28 +286,28 @@ let QueryBuilder = class QueryBuilder extends Component {
|
|
|
252
286
|
isDate = value instanceof Date && !isNaN(value.getTime());
|
|
253
287
|
type = 'string';
|
|
254
288
|
}
|
|
255
|
-
|
|
289
|
+
column.type = type;
|
|
256
290
|
isDate = false;
|
|
257
291
|
}
|
|
258
292
|
type = 'string';
|
|
259
293
|
}
|
|
260
|
-
if (!
|
|
261
|
-
|
|
294
|
+
if (!column.validation) {
|
|
295
|
+
column.validation = validateObj;
|
|
262
296
|
}
|
|
263
|
-
if (
|
|
297
|
+
if (column.category) {
|
|
264
298
|
groupBy = true;
|
|
265
299
|
}
|
|
266
300
|
else {
|
|
267
|
-
|
|
301
|
+
column.category = this.l10n.getConstant('OtherFields');
|
|
268
302
|
}
|
|
269
|
-
if (categories.indexOf(
|
|
270
|
-
categories.push(
|
|
303
|
+
if (categories.indexOf(column.category) < 0) {
|
|
304
|
+
categories.push(column.category);
|
|
271
305
|
}
|
|
272
|
-
if (!
|
|
273
|
-
(this.isLocale && this.isCustomOprCols.indexOf(
|
|
274
|
-
|
|
306
|
+
if (!column.operators ||
|
|
307
|
+
(this.isLocale && this.isCustomOprCols.indexOf(column.field) === -1)) {
|
|
308
|
+
column.operators = this.customOperators[column.type + 'Operator'];
|
|
275
309
|
}
|
|
276
|
-
}
|
|
310
|
+
});
|
|
277
311
|
if (groupBy && (categories.length > 1 || categories[0] !== this.l10n.getConstant('OtherFields'))) {
|
|
278
312
|
this.fields = { text: 'label', value: 'field', groupBy: 'category' };
|
|
279
313
|
}
|
|
@@ -290,8 +324,10 @@ let QueryBuilder = class QueryBuilder extends Component {
|
|
|
290
324
|
isDate = value instanceof Date && !isNaN(value.getTime());
|
|
291
325
|
type = 'string';
|
|
292
326
|
}
|
|
293
|
-
cols[i] = {
|
|
294
|
-
'
|
|
327
|
+
cols[i] = {
|
|
328
|
+
'field': columnKeys[i], 'label': columnKeys[i], 'type': isDate ? 'date' : type,
|
|
329
|
+
'validation': validateObj
|
|
330
|
+
};
|
|
295
331
|
isDate = false;
|
|
296
332
|
cols[i].operators = this.customOperators[cols[i].type + 'Operator'];
|
|
297
333
|
if (type === 'object') {
|
|
@@ -302,8 +338,28 @@ let QueryBuilder = class QueryBuilder extends Component {
|
|
|
302
338
|
}
|
|
303
339
|
}
|
|
304
340
|
else if (this.columns && this.columns.length) {
|
|
305
|
-
|
|
306
|
-
|
|
341
|
+
if (this.sortDirection !== 'Default') {
|
|
342
|
+
this.columnSort();
|
|
343
|
+
}
|
|
344
|
+
this.processColumnsInBatches();
|
|
345
|
+
if (this.columns.length > 50) {
|
|
346
|
+
setTimeout(() => {
|
|
347
|
+
this.updateSubFieldsFromColumns(this.columns);
|
|
348
|
+
}, 0);
|
|
349
|
+
}
|
|
350
|
+
else {
|
|
351
|
+
this.updateSubFieldsFromColumns(this.columns);
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
this.trigger('dataBound', { type: 'dataBound' });
|
|
355
|
+
}
|
|
356
|
+
processColumnsInBatches() {
|
|
357
|
+
const columns = this.columns;
|
|
358
|
+
const batchSize = 10;
|
|
359
|
+
let processedCount = 0;
|
|
360
|
+
const processBatch = () => {
|
|
361
|
+
const endIdx = Math.min(processedCount + batchSize, columns.length);
|
|
362
|
+
for (let i = processedCount; i < endIdx; i++) {
|
|
307
363
|
if (columns[i].category && columns[i].category !== this.l10n.getConstant('OtherFields')) {
|
|
308
364
|
this.fields = { text: 'label', value: 'field', groupBy: 'category' };
|
|
309
365
|
}
|
|
@@ -316,11 +372,18 @@ let QueryBuilder = class QueryBuilder extends Component {
|
|
|
316
372
|
columns[i].operators = this.customOperators[columns[i].type + 'Operator'];
|
|
317
373
|
}
|
|
318
374
|
}
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
375
|
+
processedCount = endIdx;
|
|
376
|
+
if (processedCount < columns.length) {
|
|
377
|
+
requestAnimationFrame(processBatch);
|
|
378
|
+
}
|
|
379
|
+
};
|
|
380
|
+
processBatch();
|
|
322
381
|
}
|
|
323
382
|
updateSubFieldsFromColumns(col, field) {
|
|
383
|
+
if (col.length > 50) {
|
|
384
|
+
this.updateSubFieldsLarge(col, field);
|
|
385
|
+
return;
|
|
386
|
+
}
|
|
324
387
|
for (let i = 0; i < col.length; i++) {
|
|
325
388
|
if (this.separator !== '' && col[i].field.indexOf(this.separator) < 0) {
|
|
326
389
|
col[i].field = field ? field + this.separator + col[i].field : col[i].field;
|
|
@@ -337,6 +400,38 @@ let QueryBuilder = class QueryBuilder extends Component {
|
|
|
337
400
|
}
|
|
338
401
|
}
|
|
339
402
|
}
|
|
403
|
+
updateSubFieldsLarge(col, field) {
|
|
404
|
+
let i = 0;
|
|
405
|
+
const colLength = col.length;
|
|
406
|
+
const processNextBatch = () => {
|
|
407
|
+
const endIdx = Math.min(i + 10, colLength);
|
|
408
|
+
for (; i < endIdx; i++) {
|
|
409
|
+
if (this.separator !== '' && col[i].field.indexOf(this.separator) < 0) {
|
|
410
|
+
col[i].field = field ? field + this.separator + col[i].field : col[i].field;
|
|
411
|
+
}
|
|
412
|
+
if (col[i].operators) {
|
|
413
|
+
this.updateCustomOperator(col[i]);
|
|
414
|
+
}
|
|
415
|
+
else if (col[i].type && col[i].type !== 'object') {
|
|
416
|
+
col[i].operators = this.customOperators[col[i].type + 'Operator'];
|
|
417
|
+
}
|
|
418
|
+
}
|
|
419
|
+
if (i < colLength) {
|
|
420
|
+
requestAnimationFrame(processNextBatch);
|
|
421
|
+
}
|
|
422
|
+
else {
|
|
423
|
+
setTimeout(() => {
|
|
424
|
+
for (let j = 0; j < colLength; j++) {
|
|
425
|
+
if (col[j].columns) {
|
|
426
|
+
col[j].type = 'object';
|
|
427
|
+
this.updateSubFieldsFromColumns(col[j].columns, col[j].field);
|
|
428
|
+
}
|
|
429
|
+
}
|
|
430
|
+
}, 0);
|
|
431
|
+
}
|
|
432
|
+
};
|
|
433
|
+
processNextBatch();
|
|
434
|
+
}
|
|
340
435
|
updateSubFields(value, col, data) {
|
|
341
436
|
let sampCol;
|
|
342
437
|
col.columns = [];
|
|
@@ -501,8 +596,10 @@ let QueryBuilder = class QueryBuilder extends Component {
|
|
|
501
596
|
}
|
|
502
597
|
args = { groupID: groupID, cancel: false, type: 'condition', value: targetValue.toLowerCase() };
|
|
503
598
|
if (this.enableNotCondition) {
|
|
504
|
-
args = {
|
|
505
|
-
'
|
|
599
|
+
args = {
|
|
600
|
+
groupID: groupID, cancel: false, type: 'condition', value: targetValue.toLowerCase(),
|
|
601
|
+
'not': ariaChecked
|
|
602
|
+
};
|
|
506
603
|
}
|
|
507
604
|
}
|
|
508
605
|
if (!this.isImportRules) {
|
|
@@ -600,7 +697,7 @@ let QueryBuilder = class QueryBuilder extends Component {
|
|
|
600
697
|
appendRuleElem(target, column, type, parentId, action, rule) {
|
|
601
698
|
let ruleElem;
|
|
602
699
|
let elem;
|
|
603
|
-
const ruleListElem = target.querySelector('.e-rule-list');
|
|
700
|
+
const ruleListElem = target && target.querySelector('.e-rule-list');
|
|
604
701
|
let args;
|
|
605
702
|
if (type === 'change') {
|
|
606
703
|
ruleElem = select('#' + parentId, target);
|
|
@@ -951,7 +1048,6 @@ let QueryBuilder = class QueryBuilder extends Component {
|
|
|
951
1048
|
const ruleElem = document.getElementById(ruleElemID);
|
|
952
1049
|
this.ddTree = getComponent(ruleElem.querySelector('input.e-dropdowntree'), 'dropdowntree');
|
|
953
1050
|
const hierarchicalData = extend([], this.columns, [], true);
|
|
954
|
-
// Cancel the default filtering.
|
|
955
1051
|
args.cancel = true;
|
|
956
1052
|
if (args.text === '') {
|
|
957
1053
|
this.changeDataSource(hierarchicalData);
|
|
@@ -1110,7 +1206,8 @@ let QueryBuilder = class QueryBuilder extends Component {
|
|
|
1110
1206
|
}
|
|
1111
1207
|
}
|
|
1112
1208
|
renderToolTip(element) {
|
|
1113
|
-
const tooltip = new Tooltip({
|
|
1209
|
+
const tooltip = new Tooltip({
|
|
1210
|
+
content: this.l10n.getConstant('ValidationMessage'), isSticky: true,
|
|
1114
1211
|
position: 'BottomCenter', cssClass: 'e-querybuilder-error', afterClose: () => {
|
|
1115
1212
|
tooltip.destroy();
|
|
1116
1213
|
}, beforeOpen: (args) => {
|
|
@@ -1118,7 +1215,8 @@ let QueryBuilder = class QueryBuilder extends Component {
|
|
|
1118
1215
|
if (tooltipCloseElement) {
|
|
1119
1216
|
tooltipCloseElement.style.display = 'none';
|
|
1120
1217
|
}
|
|
1121
|
-
}
|
|
1218
|
+
}
|
|
1219
|
+
});
|
|
1122
1220
|
tooltip.appendTo(element);
|
|
1123
1221
|
tooltip.open(element);
|
|
1124
1222
|
}
|
|
@@ -1276,7 +1374,6 @@ let QueryBuilder = class QueryBuilder extends Component {
|
|
|
1276
1374
|
groupElem.appendChild(groupHdrElem);
|
|
1277
1375
|
grpBodyElem.appendChild(rulesElem);
|
|
1278
1376
|
groupElem.appendChild(grpBodyElem);
|
|
1279
|
-
// create button group in OR and AND process
|
|
1280
1377
|
if (!this.headerTemplate) {
|
|
1281
1378
|
if (this.allowDragAndDrop) {
|
|
1282
1379
|
dragClsName = 'e-icons e-drag-qb-rule';
|
|
@@ -1284,8 +1381,12 @@ let QueryBuilder = class QueryBuilder extends Component {
|
|
|
1284
1381
|
else {
|
|
1285
1382
|
dragClsName = 'e-icons e-drag-qb-rule e-hidden';
|
|
1286
1383
|
}
|
|
1287
|
-
const spanDragElement = this.createElement('span', {
|
|
1288
|
-
|
|
1384
|
+
const spanDragElement = this.createElement('span', {
|
|
1385
|
+
attrs: {
|
|
1386
|
+
class: dragClsName, 'aria-label': 'drag handle',
|
|
1387
|
+
title: 'drag handle'
|
|
1388
|
+
}
|
|
1389
|
+
});
|
|
1289
1390
|
groupHdrElem.appendChild(spanDragElement);
|
|
1290
1391
|
const className = this.enableSeparateConnector && !isConnector ? 'e-lib e-btn-group e-qb-toggle-btn' : 'e-lib e-btn-group';
|
|
1291
1392
|
glueElem = this.createElement('div', { attrs: { class: className, role: 'group' } });
|
|
@@ -1303,13 +1404,17 @@ let QueryBuilder = class QueryBuilder extends Component {
|
|
|
1303
1404
|
}
|
|
1304
1405
|
inputElem = this.createElement('input', { attrs: { type: 'radio', class: 'e-btngroup-and', value: 'AND' } });
|
|
1305
1406
|
glueElem.appendChild(inputElem);
|
|
1306
|
-
labelElem = this.createElement('label', {
|
|
1307
|
-
|
|
1407
|
+
labelElem = this.createElement('label', {
|
|
1408
|
+
attrs: { class: 'e-lib e-btn e-btngroup-and-lbl e-small' },
|
|
1409
|
+
innerHTML: this.l10n.getConstant('AND')
|
|
1410
|
+
});
|
|
1308
1411
|
glueElem.appendChild(labelElem);
|
|
1309
1412
|
inputElem = this.createElement('input', { attrs: { type: 'radio', class: 'e-btngroup-or', value: 'OR' } });
|
|
1310
1413
|
glueElem.appendChild(inputElem);
|
|
1311
|
-
labelElem = this.createElement('label', {
|
|
1312
|
-
|
|
1414
|
+
labelElem = this.createElement('label', {
|
|
1415
|
+
attrs: { class: 'e-lib e-btn e-btngroup-or-lbl e-small' },
|
|
1416
|
+
innerHTML: this.l10n.getConstant('OR')
|
|
1417
|
+
});
|
|
1313
1418
|
glueElem.appendChild(labelElem);
|
|
1314
1419
|
groupHdrElem.appendChild(glueElem);
|
|
1315
1420
|
grpActElem = this.createElement('div', { attrs: { class: 'e-group-action' } });
|
|
@@ -1342,8 +1447,12 @@ let QueryBuilder = class QueryBuilder extends Component {
|
|
|
1342
1447
|
else {
|
|
1343
1448
|
dragClsName = 'e-icons e-drag-qb-rule e-hidden';
|
|
1344
1449
|
}
|
|
1345
|
-
const spanDragElement = this.createElement('span', {
|
|
1346
|
-
|
|
1450
|
+
const spanDragElement = this.createElement('span', {
|
|
1451
|
+
attrs: {
|
|
1452
|
+
class: dragClsName, 'aria-label': 'drag handle',
|
|
1453
|
+
title: 'drag handle'
|
|
1454
|
+
}
|
|
1455
|
+
});
|
|
1347
1456
|
fieldElem.appendChild(spanDragElement);
|
|
1348
1457
|
const filterElem = this.createElement('input', { attrs: { type: 'text', class: 'e-filter-input' } });
|
|
1349
1458
|
tempElem.appendChild(filterElem);
|
|
@@ -1622,8 +1731,10 @@ let QueryBuilder = class QueryBuilder extends Component {
|
|
|
1622
1731
|
}
|
|
1623
1732
|
this.updatedRule = null;
|
|
1624
1733
|
if (this.headerTemplate) {
|
|
1625
|
-
const args = {
|
|
1626
|
-
|
|
1734
|
+
const args = {
|
|
1735
|
+
requestType: 'header-template-create', ruleID: groupElem.id, condition: condition,
|
|
1736
|
+
notCondition: this.enableNotCondition ? not : undefined
|
|
1737
|
+
};
|
|
1627
1738
|
this.trigger('actionBegin', args);
|
|
1628
1739
|
}
|
|
1629
1740
|
else {
|
|
@@ -1662,9 +1773,10 @@ let QueryBuilder = class QueryBuilder extends Component {
|
|
|
1662
1773
|
}
|
|
1663
1774
|
}
|
|
1664
1775
|
setMultiConnector(trgt) {
|
|
1665
|
-
if (this.enableSeparateConnector && !this.headerTemplate) {
|
|
1666
|
-
|
|
1667
|
-
|
|
1776
|
+
if (this.enableSeparateConnector && !this.headerTemplate && trgt.previousElementSibling) {
|
|
1777
|
+
const btnGroupElem = this.groupTemplate(true).querySelector('.e-btn-group');
|
|
1778
|
+
if (btnGroupElem) {
|
|
1779
|
+
trgt.parentElement.insertBefore(btnGroupElem, trgt);
|
|
1668
1780
|
const notElem = trgt.previousElementSibling.childNodes[0];
|
|
1669
1781
|
if (notElem.classList.contains('e-qb-toggle')) {
|
|
1670
1782
|
notElem.style.display = 'none';
|
|
@@ -1707,9 +1819,11 @@ let QueryBuilder = class QueryBuilder extends Component {
|
|
|
1707
1819
|
groupHdr = groupElem;
|
|
1708
1820
|
}
|
|
1709
1821
|
if (this.headerTemplate) {
|
|
1710
|
-
args = {
|
|
1822
|
+
args = {
|
|
1823
|
+
requestType: 'header-template-initialize', ruleID: groupElem.id,
|
|
1711
1824
|
notCondition: this.enableNotCondition ? not : undefined,
|
|
1712
|
-
condition: condition, rule: this.getRuleCollection(rule, false), groupID: groupID
|
|
1825
|
+
condition: condition, rule: this.getRuleCollection(rule, false), groupID: groupID
|
|
1826
|
+
};
|
|
1713
1827
|
this.trigger('actionBegin', args);
|
|
1714
1828
|
if (this.enableSeparateConnector && groupElem.id.indexOf('rule') !== -1) {
|
|
1715
1829
|
args.requestType = 'rule-template-create';
|
|
@@ -1862,7 +1976,7 @@ let QueryBuilder = class QueryBuilder extends Component {
|
|
|
1862
1976
|
templateChange(element, value, type) {
|
|
1863
1977
|
const grpElem = closest(element, '.e-group-container');
|
|
1864
1978
|
let eventsArgs;
|
|
1865
|
-
const rules = this.getParentGroup(grpElem);
|
|
1979
|
+
const rules = grpElem && this.getParentGroup(grpElem);
|
|
1866
1980
|
let ruleElem = closest(element, '.e-rule-container');
|
|
1867
1981
|
let index = 0;
|
|
1868
1982
|
if (this.allowValidation) {
|
|
@@ -1877,7 +1991,7 @@ let QueryBuilder = class QueryBuilder extends Component {
|
|
|
1877
1991
|
index++;
|
|
1878
1992
|
}
|
|
1879
1993
|
}
|
|
1880
|
-
const rule = rules.rules[index];
|
|
1994
|
+
const rule = rules && rules.rules[index];
|
|
1881
1995
|
if (type === 'field') {
|
|
1882
1996
|
this.selectedColumn = this.getColumn(value);
|
|
1883
1997
|
}
|
|
@@ -1885,7 +1999,7 @@ let QueryBuilder = class QueryBuilder extends Component {
|
|
|
1885
1999
|
this.selectedColumn = this.getColumn(rule.field);
|
|
1886
2000
|
}
|
|
1887
2001
|
let operVal;
|
|
1888
|
-
this.previousColumn = this.getColumn(rule.field);
|
|
2002
|
+
this.previousColumn = rule && this.getColumn(rule.field);
|
|
1889
2003
|
const beforeRules = this.getValidRules(this.rule);
|
|
1890
2004
|
if (this.selectedColumn) {
|
|
1891
2005
|
if (this.selectedColumn.operators) {
|
|
@@ -1900,11 +2014,16 @@ let QueryBuilder = class QueryBuilder extends Component {
|
|
|
1900
2014
|
switch (type) {
|
|
1901
2015
|
case 'field':
|
|
1902
2016
|
if (isNullOrUndefined(value)) {
|
|
1903
|
-
rule
|
|
1904
|
-
|
|
1905
|
-
|
|
1906
|
-
|
|
1907
|
-
|
|
2017
|
+
if (!isNullOrUndefined(rule)) {
|
|
2018
|
+
rule.field = '';
|
|
2019
|
+
rule.label = '';
|
|
2020
|
+
rule.type = '';
|
|
2021
|
+
rule.value = '';
|
|
2022
|
+
rule.operator = '';
|
|
2023
|
+
}
|
|
2024
|
+
else {
|
|
2025
|
+
return;
|
|
2026
|
+
}
|
|
1908
2027
|
}
|
|
1909
2028
|
else {
|
|
1910
2029
|
rule.field = value;
|
|
@@ -1955,10 +2074,14 @@ let QueryBuilder = class QueryBuilder extends Component {
|
|
|
1955
2074
|
ruleElement.className.indexOf('e-separate-rule') < 0) {
|
|
1956
2075
|
ruleElement.className += ' e-separate-rule';
|
|
1957
2076
|
}
|
|
1958
|
-
const args = {
|
|
1959
|
-
|
|
1960
|
-
|
|
1961
|
-
|
|
2077
|
+
const args = {
|
|
2078
|
+
requestType: 'template-create', action: type, ruleID: grpEle.id,
|
|
2079
|
+
fields: this.fields, rule: rule
|
|
2080
|
+
};
|
|
2081
|
+
eventsArgs = {
|
|
2082
|
+
groupID: grpElem.id.replace(this.element.id + '_', ''), ruleID: grpEle.id.replace(this.element.id + '_', ''),
|
|
2083
|
+
value: rule.field, type: 'field'
|
|
2084
|
+
};
|
|
1962
2085
|
this.trigger('actionBegin', args);
|
|
1963
2086
|
this.trigger('change', eventsArgs);
|
|
1964
2087
|
}
|
|
@@ -2097,8 +2220,10 @@ let QueryBuilder = class QueryBuilder extends Component {
|
|
|
2097
2220
|
const item = ddl.popupObj && ddl.popupObj.element.querySelector('.e-active');
|
|
2098
2221
|
const itemData = ddl.getItemData();
|
|
2099
2222
|
ddl.value = itemData.value;
|
|
2100
|
-
const customArgs = {
|
|
2101
|
-
|
|
2223
|
+
const customArgs = {
|
|
2224
|
+
element: ddl.element, value: itemData.value, isInteracted: true,
|
|
2225
|
+
previousItemData: this.prevItemData, previousItem: null, item: item, itemData: itemData, event: null, e: null
|
|
2226
|
+
};
|
|
2102
2227
|
if (ddl.previousValue !== ddl.value) {
|
|
2103
2228
|
this.changeField(customArgs);
|
|
2104
2229
|
}
|
|
@@ -2210,8 +2335,10 @@ let QueryBuilder = class QueryBuilder extends Component {
|
|
|
2210
2335
|
this.selectedColumn = this.getColumn(ddlValue);
|
|
2211
2336
|
const ruleElem = closest(flt, '.e-rule-container');
|
|
2212
2337
|
const ruleID = ruleElem.id.replace(this.element.id + '_', '');
|
|
2213
|
-
const eventsArgs = {
|
|
2214
|
-
|
|
2338
|
+
const eventsArgs = {
|
|
2339
|
+
groupID: grID, ruleID: ruleID, selectedField: this.fieldMode === 'DropdownTree' ?
|
|
2340
|
+
dl.value[0] : dl.value, cancel: false, type: 'field'
|
|
2341
|
+
};
|
|
2215
2342
|
if (!this.isImportRules && !this.prvtEvtTgrDaD) {
|
|
2216
2343
|
this.trigger('beforeChange', eventsArgs, (observedChangeArgs) => {
|
|
2217
2344
|
this.fieldChangeSuccess(observedChangeArgs, tmpRl, flt, rl, dArg);
|
|
@@ -2794,19 +2921,25 @@ let QueryBuilder = class QueryBuilder extends Component {
|
|
|
2794
2921
|
: getComponent(container.querySelector('.e-rule-filter .e-filter-input'), 'dropdownlist');
|
|
2795
2922
|
const column = this.fieldMode === 'DropdownTree' ? this.getColumn(ddlObj.value[0]) : this.getColumn(ddlObj.value);
|
|
2796
2923
|
if (typeof itemData.template === 'string' || itemData.template.write === undefined) {
|
|
2797
|
-
const args = {
|
|
2798
|
-
|
|
2924
|
+
const args = {
|
|
2925
|
+
rule: rule, ruleID: container.id, operator: tempRule.operator, field: column.field,
|
|
2926
|
+
requestType: 'value-template-create'
|
|
2927
|
+
};
|
|
2799
2928
|
this.trigger('actionBegin', args);
|
|
2800
2929
|
}
|
|
2801
2930
|
else {
|
|
2802
2931
|
const template = itemData.template;
|
|
2803
2932
|
if (typeof template.write === 'string') {
|
|
2804
|
-
getValue(template.write, window)({
|
|
2805
|
-
|
|
2933
|
+
getValue(template.write, window)({
|
|
2934
|
+
elements: tempElements.length > 1 ? tempElements : tempElements[0], values: rule.value,
|
|
2935
|
+
operator: tempRule.operator, field: column.field, dataSource: column.values
|
|
2936
|
+
});
|
|
2806
2937
|
}
|
|
2807
2938
|
else if (typeof itemData.template !== 'function') {
|
|
2808
|
-
itemData.template.write({
|
|
2809
|
-
|
|
2939
|
+
itemData.template.write({
|
|
2940
|
+
elements: tempElements.length > 1 ? tempElements : tempElements[0],
|
|
2941
|
+
values: rule.value, operator: tempRule.operator, field: column.field, dataSource: column.values
|
|
2942
|
+
});
|
|
2810
2943
|
}
|
|
2811
2944
|
}
|
|
2812
2945
|
}
|
|
@@ -3303,8 +3436,10 @@ let QueryBuilder = class QueryBuilder extends Component {
|
|
|
3303
3436
|
}
|
|
3304
3437
|
else {
|
|
3305
3438
|
if (typeof itemData.template === 'string' || itemData.template.create === undefined) {
|
|
3306
|
-
args = {
|
|
3307
|
-
|
|
3439
|
+
args = {
|
|
3440
|
+
requestType: 'value-template-initialize', ruleID: ruleID, field: field, operator: operator, rule: rule,
|
|
3441
|
+
renderTemplate: true
|
|
3442
|
+
};
|
|
3308
3443
|
this.trigger('actionBegin', args, (observedActionArgs) => {
|
|
3309
3444
|
isRendered = this.actionBeginSuccessCallBack(observedActionArgs, itemData, ruleID, field, target);
|
|
3310
3445
|
});
|
|
@@ -3512,7 +3647,6 @@ let QueryBuilder = class QueryBuilder extends Component {
|
|
|
3512
3647
|
element = element ? element : ruleElement.nextElementSibling.nextElementSibling.querySelector('input.e-control');
|
|
3513
3648
|
operator = getComponent(element, 'dropdownlist').value.toString();
|
|
3514
3649
|
rule.rules[index].operator = operator;
|
|
3515
|
-
// Value Fields
|
|
3516
3650
|
const valueContainer = ruleElement.nextElementSibling.nextElementSibling;
|
|
3517
3651
|
let elementCln = valueContainer.querySelectorAll('input.e-control');
|
|
3518
3652
|
if (elementCln.length < 1) {
|
|
@@ -3674,6 +3808,9 @@ let QueryBuilder = class QueryBuilder extends Component {
|
|
|
3674
3808
|
}
|
|
3675
3809
|
}
|
|
3676
3810
|
validateValue(rule, ruleElem, index) {
|
|
3811
|
+
if (isNullOrUndefined(rule) && isNullOrUndefined(ruleElem)) {
|
|
3812
|
+
return;
|
|
3813
|
+
}
|
|
3677
3814
|
if (!isNullOrUndefined(index)) {
|
|
3678
3815
|
rule = rule.rules[index];
|
|
3679
3816
|
}
|
|
@@ -3835,8 +3972,10 @@ let QueryBuilder = class QueryBuilder extends Component {
|
|
|
3835
3972
|
if (grouplen) {
|
|
3836
3973
|
this.isPublic = true;
|
|
3837
3974
|
for (let i = 0, len = groups.length; i < len; i++) {
|
|
3838
|
-
this.updatedRule = {
|
|
3839
|
-
|
|
3975
|
+
this.updatedRule = {
|
|
3976
|
+
isLocked: groups[i].isLocked, condition: groups[i].condition,
|
|
3977
|
+
not: groups[i].not
|
|
3978
|
+
};
|
|
3840
3979
|
this.importRules(groups[i], groupElem, false, groups[i].not);
|
|
3841
3980
|
}
|
|
3842
3981
|
this.isPublic = false;
|
|
@@ -3965,10 +4104,10 @@ let QueryBuilder = class QueryBuilder extends Component {
|
|
|
3965
4104
|
this.element.querySelector('.e-group-header').appendChild(collapseElem);
|
|
3966
4105
|
}
|
|
3967
4106
|
columnSort() {
|
|
3968
|
-
if (this.sortDirection.toLowerCase() === 'descending') {
|
|
4107
|
+
if (this.sortDirection && this.sortDirection.toLowerCase() === 'descending') {
|
|
3969
4108
|
this.columns = new DataManager(this.columns).executeLocal(new Query().sortByDesc('field'));
|
|
3970
4109
|
}
|
|
3971
|
-
else if (this.sortDirection.toLowerCase() === 'ascending') {
|
|
4110
|
+
else if (this.sortDirection && this.sortDirection.toLowerCase() === 'ascending') {
|
|
3972
4111
|
this.columns = new DataManager(this.columns).executeLocal(new Query().sortBy('field'));
|
|
3973
4112
|
}
|
|
3974
4113
|
}
|
|
@@ -4454,8 +4593,10 @@ let QueryBuilder = class QueryBuilder extends Component {
|
|
|
4454
4593
|
}
|
|
4455
4594
|
}
|
|
4456
4595
|
}
|
|
4457
|
-
const dragEventArgs = {
|
|
4458
|
-
|
|
4596
|
+
const dragEventArgs = {
|
|
4597
|
+
dragRuleID: targetElem !== null ? targetElem.id : grpElem !== null ? grpElem.id : null,
|
|
4598
|
+
dragGroupID: grpElem !== null ? grpElem.id : null, cancel: false
|
|
4599
|
+
};
|
|
4459
4600
|
this.trigger('drag', dragEventArgs);
|
|
4460
4601
|
this.isDragEventPrevent = dragEventArgs.cancel;
|
|
4461
4602
|
}
|
|
@@ -4475,8 +4616,10 @@ let QueryBuilder = class QueryBuilder extends Component {
|
|
|
4475
4616
|
let prevRule;
|
|
4476
4617
|
if (!isPreventelem) {
|
|
4477
4618
|
const targetGrp = closest(e.target, '.e-group-container');
|
|
4478
|
-
const dropEventArgs = {
|
|
4479
|
-
|
|
4619
|
+
const dropEventArgs = {
|
|
4620
|
+
cancel: false, dropRuleID: targetGroup !== null ? targetGroup.id
|
|
4621
|
+
: targetGrp !== null ? targetGrp.id : null, dropGroupID: targetGrp !== null ? targetGrp.id : null
|
|
4622
|
+
};
|
|
4480
4623
|
this.trigger('drop', dropEventArgs);
|
|
4481
4624
|
if (dropEventArgs.cancel) {
|
|
4482
4625
|
isPreventelem = true;
|
|
@@ -5242,7 +5385,8 @@ let QueryBuilder = class QueryBuilder extends Component {
|
|
|
5242
5385
|
else {
|
|
5243
5386
|
if (customObj && (customObj.type === 'question' || customObj.type === 'answer')) {
|
|
5244
5387
|
const notValue = rule.not;
|
|
5245
|
-
rule = {
|
|
5388
|
+
rule = {
|
|
5389
|
+
'label': rule.label, 'field': rule.field, 'operator': rule.operator, 'type': rule.type, 'value': rule.value,
|
|
5246
5390
|
'condition': rule.condition, 'rules': rule.rules
|
|
5247
5391
|
};
|
|
5248
5392
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
@@ -5564,21 +5708,40 @@ let QueryBuilder = class QueryBuilder extends Component {
|
|
|
5564
5708
|
let columns = this.columns;
|
|
5565
5709
|
let column;
|
|
5566
5710
|
columns = col ? col : columns;
|
|
5567
|
-
|
|
5711
|
+
const fieldParts = this.separator !== '' ? (field ? field.split(this.separator) : []) : [field];
|
|
5712
|
+
const rootField = fieldParts && fieldParts.length > 0 ? fieldParts[0] : null;
|
|
5713
|
+
for (let i = 0; i < columns.length; i++) {
|
|
5568
5714
|
if (columns[i].field === field) {
|
|
5569
5715
|
column = columns[i];
|
|
5570
5716
|
break;
|
|
5571
5717
|
}
|
|
5572
|
-
|
|
5573
|
-
|
|
5574
|
-
|
|
5718
|
+
}
|
|
5719
|
+
if (!column && this.separator !== '') {
|
|
5720
|
+
for (let i = 0; i < columns.length; i++) {
|
|
5721
|
+
if (columns[i].field === rootField) {
|
|
5722
|
+
if (columns[i].columns) {
|
|
5723
|
+
const subField = field.substring(rootField.length + this.separator.length);
|
|
5724
|
+
if (subField) {
|
|
5725
|
+
column = this.getColumn(subField, columns[i].columns);
|
|
5726
|
+
}
|
|
5727
|
+
else {
|
|
5728
|
+
column = columns[i];
|
|
5729
|
+
}
|
|
5730
|
+
}
|
|
5731
|
+
else {
|
|
5732
|
+
column = columns[i];
|
|
5733
|
+
}
|
|
5575
5734
|
break;
|
|
5576
5735
|
}
|
|
5577
5736
|
}
|
|
5578
|
-
|
|
5579
|
-
|
|
5580
|
-
|
|
5581
|
-
|
|
5737
|
+
}
|
|
5738
|
+
if (!column) {
|
|
5739
|
+
for (let i = 0; i < columns.length; i++) {
|
|
5740
|
+
if (columns[i].columns) {
|
|
5741
|
+
column = this.getColumn(field, columns[i].columns);
|
|
5742
|
+
if (column) {
|
|
5743
|
+
break;
|
|
5744
|
+
}
|
|
5582
5745
|
}
|
|
5583
5746
|
}
|
|
5584
5747
|
}
|
|
@@ -6039,86 +6202,74 @@ let QueryBuilder = class QueryBuilder extends Component {
|
|
|
6039
6202
|
else {
|
|
6040
6203
|
queryStr += '(';
|
|
6041
6204
|
}
|
|
6042
|
-
let condition = rules.condition;
|
|
6043
6205
|
if (rules.not) {
|
|
6044
|
-
|
|
6045
|
-
|
|
6046
|
-
rulesNotCondition = sqlLocale ? this.l10n.getConstant('NOT').toUpperCase() + ' (' : 'NOT (';
|
|
6047
|
-
queryStr += rulesNotCondition;
|
|
6048
|
-
}
|
|
6049
|
-
else {
|
|
6050
|
-
rulesNotCondition = sqlLocale ? ' ' + this.l10n.getConstant('NOT').toUpperCase() + ' (' : ' NOT (';
|
|
6051
|
-
queryStr += rulesNotCondition;
|
|
6052
|
-
}
|
|
6206
|
+
const notPrefix = sqlLocale ? this.l10n.getConstant('NOT').toUpperCase() + ' ' : 'NOT ';
|
|
6207
|
+
queryStr += isRoot ? notPrefix + '(' : ' ' + notPrefix + '(';
|
|
6053
6208
|
}
|
|
6054
|
-
if (rules.rules) {
|
|
6055
|
-
|
|
6056
|
-
|
|
6057
|
-
|
|
6209
|
+
if (rules.rules && rules.rules.length) {
|
|
6210
|
+
queryStr += rules.rules.reduce((result, rule, j) => {
|
|
6211
|
+
let ruleStr = '';
|
|
6212
|
+
if (rule.rules) {
|
|
6213
|
+
ruleStr = this.getSqlString(rule, enableEscape, '', sqlLocale);
|
|
6058
6214
|
if (this.enableSeparateConnector) {
|
|
6059
|
-
condition =
|
|
6215
|
+
rules.condition = rule.condition;
|
|
6060
6216
|
}
|
|
6061
6217
|
}
|
|
6062
6218
|
else {
|
|
6063
|
-
const rule = rules.rules[j];
|
|
6064
|
-
let valueStr = '';
|
|
6065
6219
|
const ruleOpertor = sqlLocale ? this.sqlOperators[rule.operator] : this.operators[rule.operator];
|
|
6220
|
+
let valueStr = '';
|
|
6066
6221
|
if (rule.value instanceof Array) {
|
|
6067
6222
|
if (rule.operator.toString().indexOf('between') > -1) {
|
|
6068
|
-
const ruleCondition = sqlLocale ? ' ' + this.l10n.getConstant('AND').toUpperCase() + ' ' : '
|
|
6223
|
+
const ruleCondition = sqlLocale ? ' ' + this.l10n.getConstant('AND').toUpperCase() + ' ' : ' AND ';
|
|
6069
6224
|
if (rule.type === 'date' && !this.isDateFunction(rule.value[0])) {
|
|
6070
|
-
valueStr
|
|
6225
|
+
valueStr = `"${rule.value[0]}"${ruleCondition}"${rule.value[1]}"`;
|
|
6071
6226
|
}
|
|
6072
6227
|
else {
|
|
6073
|
-
valueStr
|
|
6228
|
+
valueStr = `${rule.value[0]}${ruleCondition}${rule.value[1]}`;
|
|
6074
6229
|
}
|
|
6075
6230
|
}
|
|
6076
6231
|
else {
|
|
6077
6232
|
if (typeof rule.value[0] === 'string' && rule.value !== null) {
|
|
6078
|
-
|
|
6079
|
-
|
|
6080
|
-
valueStr += ',"' + rule.value[k] + '"';
|
|
6081
|
-
}
|
|
6082
|
-
valueStr += ')';
|
|
6233
|
+
const valueArray = rule.value;
|
|
6234
|
+
valueStr = '("' + valueArray.join('","') + '")';
|
|
6083
6235
|
}
|
|
6084
6236
|
else {
|
|
6085
|
-
valueStr
|
|
6237
|
+
valueStr = `(${rule.value})`;
|
|
6086
6238
|
}
|
|
6087
6239
|
}
|
|
6088
6240
|
}
|
|
6089
6241
|
else {
|
|
6090
6242
|
if (rule.operator.toString().indexOf('startswith') > -1) {
|
|
6091
|
-
valueStr
|
|
6243
|
+
valueStr = rule.value ? `("${rule.value}%")` : `(${rule.value})`;
|
|
6092
6244
|
}
|
|
6093
6245
|
else if (rule.operator.toString().indexOf('endswith') > -1) {
|
|
6094
|
-
valueStr
|
|
6246
|
+
valueStr = rule.value ? `("%${rule.value}")` : `(${rule.value})`;
|
|
6095
6247
|
}
|
|
6096
6248
|
else if (rule.operator.toString().indexOf('contains') > -1) {
|
|
6097
|
-
valueStr
|
|
6249
|
+
valueStr = rule.value ? `("%${rule.value}%")` : `(${rule.value})`;
|
|
6098
6250
|
}
|
|
6099
6251
|
else {
|
|
6100
6252
|
if (rule.type === 'number' || typeof rule.value === 'boolean' ||
|
|
6101
6253
|
(rule.value === null && (rule.operator.toString().indexOf('empty') < -1))) {
|
|
6102
|
-
valueStr
|
|
6254
|
+
valueStr = `${rule.value}`;
|
|
6103
6255
|
}
|
|
6104
6256
|
else if (rule.operator.toString().indexOf('empty') > -1) {
|
|
6105
|
-
valueStr
|
|
6257
|
+
valueStr = '""';
|
|
6106
6258
|
}
|
|
6107
6259
|
else {
|
|
6108
|
-
valueStr
|
|
6260
|
+
valueStr = `"${rule.value}"`;
|
|
6109
6261
|
}
|
|
6110
6262
|
}
|
|
6111
6263
|
}
|
|
6264
|
+
let fieldName = rule.field;
|
|
6265
|
+
if (enableEscape) {
|
|
6266
|
+
fieldName = '`' + fieldName + '`';
|
|
6267
|
+
}
|
|
6268
|
+
else if (fieldName.indexOf(' ') > -1) {
|
|
6269
|
+
fieldName = '"' + fieldName + '"';
|
|
6270
|
+
}
|
|
6112
6271
|
if (rule.operator.toString().indexOf('null') > -1) {
|
|
6113
|
-
|
|
6114
|
-
rule.field = '`' + rule.field + '`';
|
|
6115
|
-
}
|
|
6116
|
-
else {
|
|
6117
|
-
if (rule.field.indexOf(' ') > -1) {
|
|
6118
|
-
rule.field = '"' + rule.field + '"';
|
|
6119
|
-
}
|
|
6120
|
-
}
|
|
6121
|
-
queryStr += rule.field + ' ' + ruleOpertor;
|
|
6272
|
+
ruleStr = fieldName + ' ' + ruleOpertor;
|
|
6122
6273
|
}
|
|
6123
6274
|
else {
|
|
6124
6275
|
let custOper = ruleOpertor;
|
|
@@ -6128,33 +6279,21 @@ let QueryBuilder = class QueryBuilder extends Component {
|
|
|
6128
6279
|
else if (rule.operator === 'isnotempty') {
|
|
6129
6280
|
custOper = '!=';
|
|
6130
6281
|
}
|
|
6131
|
-
|
|
6132
|
-
rule.field = '`' + rule.field + '`';
|
|
6133
|
-
}
|
|
6134
|
-
else {
|
|
6135
|
-
if (rule.field.indexOf(' ') > -1) {
|
|
6136
|
-
rule.field = '"' + rule.field + '"';
|
|
6137
|
-
}
|
|
6138
|
-
}
|
|
6139
|
-
queryStr += rule.field + ' ' + custOper + ' ' + valueStr;
|
|
6140
|
-
}
|
|
6141
|
-
if (rule.condition && rule.condition !== '') {
|
|
6142
|
-
condition = rule.condition;
|
|
6282
|
+
ruleStr = fieldName + ' ' + custOper + ' ' + valueStr;
|
|
6143
6283
|
}
|
|
6144
6284
|
}
|
|
6145
|
-
if (j !==
|
|
6146
|
-
|
|
6147
|
-
const rule = rules.rules[j];
|
|
6148
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
6285
|
+
if (j !== rules.rules.length - 1) {
|
|
6286
|
+
let condition = rules.condition;
|
|
6149
6287
|
if (condition === '' || (rule && rule.condition !== '' && rule.custom && rule.custom.isCustom)) {
|
|
6150
6288
|
condition = rule.condition;
|
|
6151
6289
|
}
|
|
6152
6290
|
if (condition) {
|
|
6153
6291
|
condition = sqlLocale ? this.l10n.getConstant(condition.toUpperCase()).toUpperCase() : condition.toUpperCase();
|
|
6154
|
-
|
|
6292
|
+
ruleStr += ' ' + condition + ' ';
|
|
6155
6293
|
}
|
|
6156
6294
|
}
|
|
6157
|
-
|
|
6295
|
+
return result + ruleStr;
|
|
6296
|
+
}, '');
|
|
6158
6297
|
}
|
|
6159
6298
|
if (!isRoot) {
|
|
6160
6299
|
queryStr += ')';
|
|
@@ -6472,23 +6611,19 @@ let QueryBuilder = class QueryBuilder extends Component {
|
|
|
6472
6611
|
return subOp[i].length;
|
|
6473
6612
|
}
|
|
6474
6613
|
}
|
|
6475
|
-
//Left Parenthesis
|
|
6476
6614
|
if (/^\(/.exec(sqlString)) {
|
|
6477
6615
|
this.parser.push(['Left', '(']);
|
|
6478
6616
|
return 1;
|
|
6479
6617
|
}
|
|
6480
|
-
//Right Parenthesis
|
|
6481
6618
|
if (/^\)/.exec(sqlString)) {
|
|
6482
6619
|
this.parser.push(['Right', ')']);
|
|
6483
6620
|
return 1;
|
|
6484
6621
|
}
|
|
6485
|
-
//Boolean
|
|
6486
6622
|
if (/^(true|false)/.exec(sqlString)) {
|
|
6487
6623
|
matchValue = /^(true|false)/.exec(sqlString)[0];
|
|
6488
6624
|
this.parser.push(['String', matchValue]);
|
|
6489
6625
|
return matchValue.length;
|
|
6490
6626
|
}
|
|
6491
|
-
//Null
|
|
6492
6627
|
if (/^null/.exec(sqlString)) {
|
|
6493
6628
|
matchValue = /^null/.exec(sqlString)[0];
|
|
6494
6629
|
this.parser.push(['String', null]);
|
|
@@ -6513,7 +6648,6 @@ let QueryBuilder = class QueryBuilder extends Component {
|
|
|
6513
6648
|
return matchValue.length;
|
|
6514
6649
|
}
|
|
6515
6650
|
}
|
|
6516
|
-
//String
|
|
6517
6651
|
const singleString = this.getSingleQuoteString(sqlString);
|
|
6518
6652
|
if (singleString !== '') {
|
|
6519
6653
|
matchValue = singleString;
|
|
@@ -6533,24 +6667,20 @@ let QueryBuilder = class QueryBuilder extends Component {
|
|
|
6533
6667
|
!this.checkCondition(sqlString, matchValue)) {
|
|
6534
6668
|
matchValue = this.combineSingleQuoteString(sqlString, matchValue);
|
|
6535
6669
|
}
|
|
6536
|
-
// end
|
|
6537
6670
|
this.parser.push(['String', matchValue]);
|
|
6538
6671
|
return matchValue.length;
|
|
6539
6672
|
}
|
|
6540
|
-
// Double String
|
|
6541
6673
|
const doubleString = this.getDoubleQuoteString(sqlString);
|
|
6542
6674
|
if (doubleString !== '') {
|
|
6543
6675
|
matchValue = doubleString;
|
|
6544
6676
|
this.parser.push(['DoubleString', matchValue]);
|
|
6545
6677
|
return matchValue.length;
|
|
6546
6678
|
}
|
|
6547
|
-
//Number
|
|
6548
6679
|
if (/^\d*\.?\d+/.exec(sqlString)) {
|
|
6549
6680
|
matchValue = /^\d*\.?\d+/.exec(sqlString)[0];
|
|
6550
6681
|
this.parser.push(['Number', matchValue]);
|
|
6551
6682
|
return matchValue.length;
|
|
6552
6683
|
}
|
|
6553
|
-
//Negative Number
|
|
6554
6684
|
if (/^-?\d*\.?\d+/.exec(sqlString)) {
|
|
6555
6685
|
matchValue = /^-?\d*\.?\d+/.exec(sqlString)[0];
|
|
6556
6686
|
this.parser.push(['Number', matchValue]);
|
|
@@ -6718,7 +6848,7 @@ let QueryBuilder = class QueryBuilder extends Component {
|
|
|
6718
6848
|
fieldName += this.separator;
|
|
6719
6849
|
}
|
|
6720
6850
|
}
|
|
6721
|
-
return this.getColumn(fieldName).label;
|
|
6851
|
+
return this.getColumn(fieldName) ? this.getColumn(fieldName).label : '';
|
|
6722
6852
|
}
|
|
6723
6853
|
processParser(parser, rules, levelColl, sqlLocale) {
|
|
6724
6854
|
let j;
|
|
@@ -6950,12 +7080,16 @@ let QueryBuilder = class QueryBuilder extends Component {
|
|
|
6950
7080
|
}
|
|
6951
7081
|
}
|
|
6952
7082
|
if (this.enableSeparateConnector) {
|
|
6953
|
-
this.addRules([{
|
|
6954
|
-
'
|
|
7083
|
+
this.addRules([{
|
|
7084
|
+
'label': getRule.label, 'field': getRule.field, 'type': getRule.type, 'operator': getRule.operator,
|
|
7085
|
+
'value': getRule.value, 'condition': getRule.condition
|
|
7086
|
+
}], groupId);
|
|
6955
7087
|
}
|
|
6956
7088
|
else {
|
|
6957
|
-
this.addRules([{
|
|
6958
|
-
'
|
|
7089
|
+
this.addRules([{
|
|
7090
|
+
'label': getRule.label, 'field': getRule.field, 'type': getRule.type, 'operator': getRule.operator,
|
|
7091
|
+
'value': getRule.value
|
|
7092
|
+
}], groupId);
|
|
6959
7093
|
}
|
|
6960
7094
|
this.ruleIndex = -1;
|
|
6961
7095
|
}
|
|
@@ -7130,115 +7264,65 @@ let QueryBuilder = class QueryBuilder extends Component {
|
|
|
7130
7264
|
this.disableRuleControls(target, groupElem, isDisabled);
|
|
7131
7265
|
}
|
|
7132
7266
|
disableRuleControls(target, groupElem, isDisabled) {
|
|
7133
|
-
const
|
|
7134
|
-
|
|
7135
|
-
|
|
7136
|
-
|
|
7137
|
-
|
|
7138
|
-
|
|
7139
|
-
|
|
7140
|
-
|
|
7141
|
-
|
|
7142
|
-
|
|
7143
|
-
|
|
7144
|
-
|
|
7267
|
+
const disableComponents = (elements, componentGetter, isDisabled) => {
|
|
7268
|
+
elements.forEach((element) => {
|
|
7269
|
+
const component = componentGetter(element);
|
|
7270
|
+
if ('enabled' in component) {
|
|
7271
|
+
component.enabled = !isDisabled;
|
|
7272
|
+
}
|
|
7273
|
+
else if ('disabled' in component) {
|
|
7274
|
+
component.disabled = isDisabled;
|
|
7275
|
+
}
|
|
7276
|
+
});
|
|
7277
|
+
};
|
|
7278
|
+
const elements = {
|
|
7279
|
+
ddl: groupElem.querySelectorAll('.e-control.e-dropdownlist'),
|
|
7280
|
+
numeric: groupElem.querySelectorAll('.e-control.e-numerictextbox'),
|
|
7281
|
+
text: groupElem.querySelectorAll('.e-control.e-textbox'),
|
|
7282
|
+
date: groupElem.querySelectorAll('.e-control.e-datepicker'),
|
|
7283
|
+
checkbox: groupElem.querySelectorAll('.e-control.e-checkbox'),
|
|
7284
|
+
radio: groupElem.querySelectorAll('.e-control.e-radio'),
|
|
7285
|
+
multiSelect: groupElem.querySelectorAll('.e-control.e-multiselect'),
|
|
7286
|
+
deleteElem: groupElem.querySelectorAll('.e-rule-delete'),
|
|
7287
|
+
lockElem: groupElem.querySelectorAll('.e-lock-rule'),
|
|
7288
|
+
cloneElem: groupElem.querySelectorAll('.e-clone-rule'),
|
|
7289
|
+
ruleElem: groupElem.querySelectorAll('.e-rule-container')
|
|
7290
|
+
};
|
|
7291
|
+
elements.deleteElem.forEach((elem, i) => {
|
|
7145
7292
|
if (isDisabled) {
|
|
7146
|
-
if (ruleElem[i] && ruleElem[i].classList.contains('e-disable')) {
|
|
7147
|
-
ruleElem[i].classList.add('e-disable');
|
|
7293
|
+
if (elements.ruleElem[i] && elements.ruleElem[i].classList.contains('e-disable')) {
|
|
7294
|
+
elements.ruleElem[i].classList.add('e-disable');
|
|
7148
7295
|
}
|
|
7149
|
-
deleteElem[i].disabled = true;
|
|
7150
|
-
if (cloneElem[i]) {
|
|
7151
|
-
cloneElem[i].disabled = true;
|
|
7296
|
+
elements.deleteElem[i].disabled = true;
|
|
7297
|
+
if (elements.cloneElem[i]) {
|
|
7298
|
+
elements.cloneElem[i].disabled = true;
|
|
7152
7299
|
}
|
|
7153
|
-
if (lockElem[i] !== target) {
|
|
7154
|
-
lockElem[i].disabled = true;
|
|
7155
|
-
lockElem[i].children[0].classList.remove('e-unlock');
|
|
7156
|
-
lockElem[i].children[0].classList.add('e-lock');
|
|
7300
|
+
if (elements.lockElem[i] !== target) {
|
|
7301
|
+
elements.lockElem[i].disabled = true;
|
|
7302
|
+
elements.lockElem[i].children[0].classList.remove('e-unlock');
|
|
7303
|
+
elements.lockElem[i].children[0].classList.add('e-lock');
|
|
7157
7304
|
}
|
|
7158
7305
|
}
|
|
7159
7306
|
else {
|
|
7160
|
-
if (ruleElem[i]) {
|
|
7161
|
-
ruleElem[i].classList.remove('e-disable');
|
|
7307
|
+
if (elements.ruleElem[i]) {
|
|
7308
|
+
elements.ruleElem[i].classList.remove('e-disable');
|
|
7162
7309
|
}
|
|
7163
|
-
if (cloneElem[i]) {
|
|
7164
|
-
cloneElem[i].disabled = false;
|
|
7310
|
+
if (elements.cloneElem[i]) {
|
|
7311
|
+
elements.cloneElem[i].disabled = false;
|
|
7165
7312
|
}
|
|
7166
|
-
deleteElem[i].disabled = false;
|
|
7167
|
-
lockElem[i].disabled = false;
|
|
7168
|
-
lockElem[i].children[0].classList.remove('e-lock');
|
|
7169
|
-
lockElem[i].children[0].classList.add('e-unlock');
|
|
7170
|
-
}
|
|
7171
|
-
}
|
|
7172
|
-
let dropDownObj;
|
|
7173
|
-
let numericObj;
|
|
7174
|
-
let textObj;
|
|
7175
|
-
let dateObj;
|
|
7176
|
-
let checkBoxObj;
|
|
7177
|
-
let radioBtnObj;
|
|
7178
|
-
let multiSelectObj;
|
|
7179
|
-
for (let i = 0; i < ddlElement.length; i++) {
|
|
7180
|
-
dropDownObj = getComponent(ddlElement[i], 'dropdownlist');
|
|
7181
|
-
if (isDisabled) {
|
|
7182
|
-
dropDownObj.enabled = false;
|
|
7183
|
-
}
|
|
7184
|
-
else {
|
|
7185
|
-
dropDownObj.enabled = true;
|
|
7186
|
-
}
|
|
7187
|
-
}
|
|
7188
|
-
for (let i = 0; i < numericElement.length; i++) {
|
|
7189
|
-
numericObj = getComponent(numericElement[i], 'numerictextbox');
|
|
7190
|
-
if (isDisabled) {
|
|
7191
|
-
numericObj.enabled = false;
|
|
7192
|
-
}
|
|
7193
|
-
else {
|
|
7194
|
-
numericObj.enabled = true;
|
|
7195
|
-
}
|
|
7196
|
-
}
|
|
7197
|
-
for (let i = 0; i < textElement.length; i++) {
|
|
7198
|
-
textObj = getComponent(textElement[i], 'textbox');
|
|
7199
|
-
if (isDisabled) {
|
|
7200
|
-
textObj.enabled = false;
|
|
7201
|
-
}
|
|
7202
|
-
else {
|
|
7203
|
-
textObj.enabled = true;
|
|
7204
|
-
}
|
|
7205
|
-
}
|
|
7206
|
-
for (let i = 0; i < dateElement.length; i++) {
|
|
7207
|
-
dateObj = getComponent(dateElement[i], 'datepicker');
|
|
7208
|
-
if (isDisabled) {
|
|
7209
|
-
dateObj.enabled = false;
|
|
7210
|
-
}
|
|
7211
|
-
else {
|
|
7212
|
-
dateObj.enabled = true;
|
|
7213
|
-
}
|
|
7214
|
-
}
|
|
7215
|
-
for (let i = 0; i < checkboxElement.length; i++) {
|
|
7216
|
-
checkBoxObj = getComponent(checkboxElement[i], 'checkbox');
|
|
7217
|
-
if (isDisabled) {
|
|
7218
|
-
checkBoxObj.disabled = true;
|
|
7219
|
-
}
|
|
7220
|
-
else {
|
|
7221
|
-
checkBoxObj.disabled = false;
|
|
7222
|
-
}
|
|
7223
|
-
}
|
|
7224
|
-
for (let i = 0; i < radioBtnElement.length; i++) {
|
|
7225
|
-
radioBtnObj = getComponent(radioBtnElement[i], 'radio');
|
|
7226
|
-
if (isDisabled) {
|
|
7227
|
-
radioBtnObj.disabled = true;
|
|
7228
|
-
}
|
|
7229
|
-
else {
|
|
7230
|
-
radioBtnObj.disabled = false;
|
|
7231
|
-
}
|
|
7232
|
-
}
|
|
7233
|
-
for (let i = 0; i < multiSelectElement.length; i++) {
|
|
7234
|
-
multiSelectObj = getComponent(multiSelectElement[i], 'multiselect');
|
|
7235
|
-
if (isDisabled) {
|
|
7236
|
-
multiSelectObj.enabled = false;
|
|
7237
|
-
}
|
|
7238
|
-
else {
|
|
7239
|
-
multiSelectObj.enabled = true;
|
|
7313
|
+
elements.deleteElem[i].disabled = false;
|
|
7314
|
+
elements.lockElem[i].disabled = false;
|
|
7315
|
+
elements.lockElem[i].children[0].classList.remove('e-lock');
|
|
7316
|
+
elements.lockElem[i].children[0].classList.add('e-unlock');
|
|
7240
7317
|
}
|
|
7241
|
-
}
|
|
7318
|
+
});
|
|
7319
|
+
disableComponents(elements.ddl, (elem) => getComponent(elem, 'dropdownlist'), isDisabled);
|
|
7320
|
+
disableComponents(elements.numeric, (elem) => getComponent(elem, 'numerictextbox'), isDisabled);
|
|
7321
|
+
disableComponents(elements.text, (elem) => getComponent(elem, 'textbox'), isDisabled);
|
|
7322
|
+
disableComponents(elements.date, (elem) => getComponent(elem, 'datepicker'), isDisabled);
|
|
7323
|
+
disableComponents(elements.checkbox, (elem) => getComponent(elem, 'checkbox'), isDisabled);
|
|
7324
|
+
disableComponents(elements.radio, (elem) => getComponent(elem, 'radio'), isDisabled);
|
|
7325
|
+
disableComponents(elements.multiSelect, (elem) => getComponent(elem, 'multiselect'), isDisabled);
|
|
7242
7326
|
}
|
|
7243
7327
|
};
|
|
7244
7328
|
__decorate([
|