@provoly/dashboard 1.1.5 → 1.1.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/esm2022/lib/core/model/filter.interface.mjs +1 -1
- package/esm2022/widgets/widget-map/utils/cql-utils.class.mjs +54 -48
- package/fesm2022/provoly-dashboard-widgets-widget-map.mjs +53 -47
- package/fesm2022/provoly-dashboard-widgets-widget-map.mjs.map +1 -1
- package/lib/core/model/filter.interface.d.ts +1 -1
- package/package.json +18 -18
- package/widgets/widget-map/utils/cql-utils.class.d.ts +1 -0
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLmludGVyZmFjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Byb3ZvbHkvZGFzaGJvYXJkL2xpYi9jb3JlL21vZGVsL2ZpbHRlci5pbnRlcmZhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBpbnRlcmZhY2UgRmlsdGVyIHtcbiAgaWQ6IHN0cmluZztcbiAgbmFtZTogc3RyaW5nO1xuICB0eXBlOiBzdHJpbmc7XG4gIGF0dHJpYnV0ZXM6IHsgaWQ6IHN0cmluZzsgY3VzdG9tSWQ/OiBzdHJpbmc7IHRlY2huaWNhbE5hbWU6IHN0cmluZzsgbGFiZWw6IHN0cmluZzsgZGF0YXNvdXJjZTogc3RyaW5nIH1bXTtcbiAgb3BlcmF0b3I/
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLmludGVyZmFjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Byb3ZvbHkvZGFzaGJvYXJkL2xpYi9jb3JlL21vZGVsL2ZpbHRlci5pbnRlcmZhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBpbnRlcmZhY2UgRmlsdGVyIHtcbiAgaWQ6IHN0cmluZztcbiAgbmFtZTogc3RyaW5nO1xuICB0eXBlOiBzdHJpbmc7XG4gIGF0dHJpYnV0ZXM6IHsgaWQ6IHN0cmluZzsgY3VzdG9tSWQ/OiBzdHJpbmc7IHRlY2huaWNhbE5hbWU6IHN0cmluZzsgbGFiZWw6IHN0cmluZzsgZGF0YXNvdXJjZTogc3RyaW5nIH1bXTtcbiAgb3BlcmF0b3I/OiBzdHJpbmc7XG4gIHZhbHVlPzogc3RyaW5nIHwgbnVtYmVyO1xuICBwb3NzaWJsZVZhbHVlcz86IHN0cmluZzsgLy8gb25seSB1c2VkIGluIGxpc3QtZmlsdGVyXG4gIGhhc0RhdGVSYW5nZT86IGJvb2xlYW47XG4gIGxpbWl0PzogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEZpbHRlckNvbnRleHQge1xuICBhdHRyaWJ1dGU6IHN0cmluZztcbiAgb3BlcmF0b3I6IHN0cmluZztcbiAgdmFsdWU6IHN0cmluZyB8IG51bWJlciB8IHN0cmluZ1tdIHwgbnVtYmVyW10gfCB1bmRlZmluZWQ7XG59XG4iXX0=
|
|
@@ -7,59 +7,65 @@ export class CqlUtils {
|
|
|
7
7
|
const attributesReference = classes.map((clazz) => clazz.attributes).flat();
|
|
8
8
|
return filters[datasourceId]
|
|
9
9
|
.map((cond) => {
|
|
10
|
-
const conditions = [];
|
|
11
10
|
const attribute = attributesReference.find((attr) => attr.id === cond.attribute);
|
|
12
11
|
const field = fields.find((f) => f.id === attribute?.field);
|
|
13
12
|
const attributeName = attribute?.technicalName;
|
|
14
|
-
|
|
15
|
-
const quoteSafeValue = `${cond.value}`.replace(/'/g, "''");
|
|
16
|
-
switch (cond.operator) {
|
|
17
|
-
case 'EQUALS':
|
|
18
|
-
if (!field || TextFieldTypes.includes(field?.type)) {
|
|
19
|
-
conditions.push(`${attributeName}='${quoteSafeValue}'`);
|
|
20
|
-
}
|
|
21
|
-
else {
|
|
22
|
-
conditions.push(`${attributeName}=${cond.value}`);
|
|
23
|
-
}
|
|
24
|
-
break;
|
|
25
|
-
case 'CONTAINS':
|
|
26
|
-
conditions.push(`${attributeName} LIKE '%${quoteSafeValue}%'`);
|
|
27
|
-
break;
|
|
28
|
-
case 'START_WITH':
|
|
29
|
-
conditions.push(`${attributeName} LIKE '${quoteSafeValue}%'`);
|
|
30
|
-
break;
|
|
31
|
-
case 'END_WITH':
|
|
32
|
-
conditions.push(`${attributeName} LIKE '%${quoteSafeValue}'`);
|
|
33
|
-
break;
|
|
34
|
-
case 'GREATER_THAN':
|
|
35
|
-
conditions.push(`${attributeName}>${cond.value}`);
|
|
36
|
-
break;
|
|
37
|
-
case 'LOWER_THAN':
|
|
38
|
-
conditions.push(`${attributeName}<${cond.value}`);
|
|
39
|
-
break;
|
|
40
|
-
case 'INSIDE':
|
|
41
|
-
const splitI = cond.value?.split(',');
|
|
42
|
-
if (splitI && splitI.length > 1) {
|
|
43
|
-
conditions.push(`${attributeName}<${splitI[0]}`);
|
|
44
|
-
conditions.push(`${attributeName}>${splitI[1]}`);
|
|
45
|
-
}
|
|
46
|
-
break;
|
|
47
|
-
case 'OUTSIDE':
|
|
48
|
-
const splitO = cond.value?.split(',');
|
|
49
|
-
if (splitO && splitO.length > 1) {
|
|
50
|
-
conditions.push(`${attributeName}>${splitO[0]}`);
|
|
51
|
-
conditions.push(`${attributeName}<${splitO[1]}`);
|
|
52
|
-
}
|
|
53
|
-
break;
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
else {
|
|
57
|
-
console.warn(`Cannot add cql filter on datasource ${datasourceId} because ${cond.attribute} attribute not found in classes`);
|
|
58
|
-
}
|
|
59
|
-
return conditions;
|
|
13
|
+
return this.getConditionsForValue(attributeName, cond, field, datasourceId);
|
|
60
14
|
})
|
|
61
15
|
.filter((conds) => conds.length > 0)
|
|
62
16
|
.join(' AND ');
|
|
63
17
|
}
|
|
18
|
+
static getConditionsForValue(attributeName, cond, field, datasourceId) {
|
|
19
|
+
let conditions = [];
|
|
20
|
+
const values = (Array.isArray(cond.value) ? cond.value : [cond.value]);
|
|
21
|
+
if (attributeName) {
|
|
22
|
+
values.forEach((value) => {
|
|
23
|
+
if (value && (typeof value !== 'string' || value.length > 0)) {
|
|
24
|
+
const quoteSafeValue = `${value}`.replace(/'/g, "''");
|
|
25
|
+
switch (cond.operator) {
|
|
26
|
+
case 'EQUALS':
|
|
27
|
+
if (!field || TextFieldTypes.includes(field?.type)) {
|
|
28
|
+
conditions.push(`${attributeName}='${quoteSafeValue}'`);
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
conditions.push(`${attributeName}=${value}`);
|
|
32
|
+
}
|
|
33
|
+
break;
|
|
34
|
+
case 'CONTAINS':
|
|
35
|
+
conditions.push(`${attributeName} LIKE '%${quoteSafeValue}%'`);
|
|
36
|
+
break;
|
|
37
|
+
case 'START_WITH':
|
|
38
|
+
conditions.push(`${attributeName} LIKE '${quoteSafeValue}%'`);
|
|
39
|
+
break;
|
|
40
|
+
case 'END_WITH':
|
|
41
|
+
conditions.push(`${attributeName} LIKE '%${quoteSafeValue}'`);
|
|
42
|
+
break;
|
|
43
|
+
case 'GREATER_THAN':
|
|
44
|
+
conditions.push(`${attributeName}>${value}`);
|
|
45
|
+
break;
|
|
46
|
+
case 'LOWER_THAN':
|
|
47
|
+
conditions.push(`${attributeName}<${value}`);
|
|
48
|
+
break;
|
|
49
|
+
case 'OUTSIDE':
|
|
50
|
+
const splitI = value?.split(',');
|
|
51
|
+
if (splitI && splitI.length > 1) {
|
|
52
|
+
conditions.push(`( ${attributeName}<${splitI[0]} AND ${attributeName}>${splitI[1]} )`);
|
|
53
|
+
}
|
|
54
|
+
break;
|
|
55
|
+
case 'INSIDE':
|
|
56
|
+
const splitO = value?.split(',');
|
|
57
|
+
if (splitO && splitO.length > 1) {
|
|
58
|
+
conditions.push(`( ${attributeName}>${splitO[0]} AND ${attributeName}<${splitO[1]} )`);
|
|
59
|
+
}
|
|
60
|
+
break;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
else {
|
|
66
|
+
console.warn(`Cannot add cql filter on datasource ${datasourceId} because ${cond.attribute} attribute not found in classes`);
|
|
67
|
+
}
|
|
68
|
+
return conditions.length > 1 ? '( ' + conditions.join(' OR ') + ' )' : conditions[0];
|
|
69
|
+
}
|
|
64
70
|
}
|
|
65
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
71
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3FsLXV0aWxzLmNsYXNzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcHJvdm9seS9kYXNoYm9hcmQvd2lkZ2V0cy93aWRnZXQtbWFwL3V0aWxzL2NxbC11dGlscy5jbGFzcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQStCLGNBQWMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRWpGLE1BQU0sT0FBTyxRQUFRO0lBQ25CLE1BQU0sQ0FBQyxlQUFlLENBQ3BCLFlBQW9CLEVBQ3BCLE9BQXlDLEVBQ3pDLE9BQWdCLEVBQ2hCLE1BQWU7UUFFZixJQUFJLENBQUMsT0FBTyxJQUFJLENBQUMsWUFBWSxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxJQUFJLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDOUYsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBRUQsTUFBTSxtQkFBbUIsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7UUFFNUUsT0FBTyxPQUFPLENBQUMsWUFBWSxDQUFDO2FBQ3pCLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1lBQ1osTUFBTSxTQUFTLEdBQUcsbUJBQW1CLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUNqRixNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUM1RCxNQUFNLGFBQWEsR0FBRyxTQUFTLEVBQUUsYUFB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TSxJQUFJLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0NBQ2hDLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxhQUFhLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxRQUFRLGFBQWEsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDOzRCQUN6RixDQUFDOzRCQUNELE1BQU07b0JBQ1YsQ0FBQztnQkFDSCxDQUFDO1lBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO2FBQU0sQ0FBQztZQUNOLE9BQU8sQ0FBQyxJQUFJLENBQ1YsdUNBQXVDLFlBQVksWUFBWSxJQUFJLENBQUMsU0FBUyxpQ0FBaUMsQ0FDL0csQ0FBQztRQUNKLENBQUM7UUFFRCxPQUFPLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN2RixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDbGFzcywgRmllbGQsIEZpbHRlckNvbnRleHQsIFRleHRGaWVsZFR5cGVzIH0gZnJvbSAnQHByb3ZvbHkvZGFzaGJvYXJkJztcblxuZXhwb3J0IGNsYXNzIENxbFV0aWxzIHtcbiAgc3RhdGljIGdldENRTFBhcmFtc0ZvcihcbiAgICBkYXRhc291cmNlSWQ6IHN0cmluZyxcbiAgICBmaWx0ZXJzOiB7IFtwOiBzdHJpbmddOiBGaWx0ZXJDb250ZXh0W10gfSxcbiAgICBjbGFzc2VzOiBDbGFzc1tdLFxuICAgIGZpZWxkczogRmllbGRbXVxuICApOiBzdHJpbmcgfCBudWxsIHtcbiAgICBpZiAoIWZpbHRlcnMgfHwgIWRhdGFzb3VyY2VJZCB8fCAhZmlsdGVyc1tkYXRhc291cmNlSWRdIHx8IGZpbHRlcnNbZGF0YXNvdXJjZUlkXS5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IGF0dHJpYnV0ZXNSZWZlcmVuY2UgPSBjbGFzc2VzLm1hcCgoY2xhenopID0+IGNsYXp6LmF0dHJpYnV0ZXMpLmZsYXQoKTtcblxuICAgIHJldHVybiBmaWx0ZXJzW2RhdGFzb3VyY2VJZF1cbiAgICAgIC5tYXAoKGNvbmQpID0+IHtcbiAgICAgICAgY29uc3QgYXR0cmlidXRlID0gYXR0cmlidXRlc1JlZmVyZW5jZS5maW5kKChhdHRyKSA9PiBhdHRyLmlkID09PSBjb25kLmF0dHJpYnV0ZSk7XG4gICAgICAgIGNvbnN0IGZpZWxkID0gZmllbGRzLmZpbmQoKGYpID0+IGYuaWQgPT09IGF0dHJpYnV0ZT8uZmllbGQpO1xuICAgICAgICBjb25zdCBhdHRyaWJ1dGVOYW1lID0gYXR0cmlidXRlPy50ZWNobmljYWxOYW1lO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmdldENvbmRpdGlvbnNGb3JWYWx1ZShhdHRyaWJ1dGVOYW1lLCBjb25kLCBmaWVsZCwgZGF0YXNvdXJjZUlkKTtcbiAgICAgIH0pXG4gICAgICAuZmlsdGVyKChjb25kcykgPT4gY29uZHMubGVuZ3RoID4gMClcbiAgICAgIC5qb2luKCcgQU5EICcpO1xuICB9XG5cbiAgc3RhdGljIGdldENvbmRpdGlvbnNGb3JWYWx1ZShcbiAgICBhdHRyaWJ1dGVOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gICAgY29uZDogRmlsdGVyQ29udGV4dCxcbiAgICBmaWVsZDogRmllbGQgfCB1bmRlZmluZWQsXG4gICAgZGF0YXNvdXJjZUlkOiBzdHJpbmdcbiAgKSB7XG4gICAgbGV0IGNvbmRpdGlvbnM6IHN0cmluZ1tdID0gW107XG5cbiAgICBjb25zdCB2YWx1ZXMgPSAoQXJyYXkuaXNBcnJheShjb25kLnZhbHVlKSA/IGNvbmQudmFsdWUgOiBbY29uZC52YWx1ZV0pIGFzIHN0cmluZ1tdIHwgbnVtYmVyW107XG5cbiAgICBpZiAoYXR0cmlidXRlTmFtZSkge1xuICAgICAgdmFsdWVzLmZvckVhY2goKHZhbHVlKSA9PiB7XG4gICAgICAgIGlmICh2YWx1ZSAmJiAodHlwZW9mIHZhbHVlICE9PSAnc3RyaW5nJyB8fCB2YWx1ZS5sZW5ndGggPiAwKSkge1xuICAgICAgICAgIGNvbnN0IHF1b3RlU2FmZVZhbHVlID0gYCR7dmFsdWV9YC5yZXBsYWNlKC8nL2csIFwiJydcIik7XG4gICAgICAgICAgc3dpdGNoIChjb25kLm9wZXJhdG9yKSB7XG4gICAgICAgICAgICBjYXNlICdFUVVBTFMnOlxuICAgICAgICAgICAgICBpZiAoIWZpZWxkIHx8IFRleHRGaWVsZFR5cGVzLmluY2x1ZGVzKGZpZWxkPy50eXBlKSkge1xuICAgICAgICAgICAgICAgIGNvbmRpdGlvbnMucHVzaChgJHthdHRyaWJ1dGVOYW1lfT0nJHtxdW90ZVNhZmVWYWx1ZX0nYCk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uZGl0aW9ucy5wdXNoKGAke2F0dHJpYnV0ZU5hbWV9PSR7dmFsdWV9YCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdDT05UQUlOUyc6XG4gICAgICAgICAgICAgIGNvbmRpdGlvbnMucHVzaChgJHthdHRyaWJ1dGVOYW1lfSBMSUtFICclJHtxdW90ZVNhZmVWYWx1ZX0lJ2ApO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ1NUQVJUX1dJVEgnOlxuICAgICAgICAgICAgICBjb25kaXRpb25zLnB1c2goYCR7YXR0cmlidXRlTmFtZX0gTElLRSAnJHtxdW90ZVNhZmVWYWx1ZX0lJ2ApO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ0VORF9XSVRIJzpcbiAgICAgICAgICAgICAgY29uZGl0aW9ucy5wdXNoKGAke2F0dHJpYnV0ZU5hbWV9IExJS0UgJyUke3F1b3RlU2FmZVZhbHVlfSdgKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdHUkVBVEVSX1RIQU4nOlxuICAgICAgICAgICAgICBjb25kaXRpb25zLnB1c2goYCR7YXR0cmlidXRlTmFtZX0+JHt2YWx1ZX1gKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdMT1dFUl9USEFOJzpcbiAgICAgICAgICAgICAgY29uZGl0aW9ucy5wdXNoKGAke2F0dHJpYnV0ZU5hbWV9PCR7dmFsdWV9YCk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnT1VUU0lERSc6XG4gICAgICAgICAgICAgIGNvbnN0IHNwbGl0SSA9ICh2YWx1ZSBhcyBzdHJpbmcpPy5zcGxpdCgnLCcpO1xuICAgICAgICAgICAgICBpZiAoc3BsaXRJICYmIHNwbGl0SS5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICAgICAgY29uZGl0aW9ucy5wdXNoKGAoICR7YXR0cmlidXRlTmFtZX08JHtzcGxpdElbMF19IEFORCAke2F0dHJpYnV0ZU5hbWV9PiR7c3BsaXRJWzFdfSApYCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdJTlNJREUnOlxuICAgICAgICAgICAgICBjb25zdCBzcGxpdE8gPSAodmFsdWUgYXMgc3RyaW5nKT8uc3BsaXQoJywnKTtcbiAgICAgICAgICAgICAgaWYgKHNwbGl0TyAmJiBzcGxpdE8ubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgICAgIGNvbmRpdGlvbnMucHVzaChgKCAke2F0dHJpYnV0ZU5hbWV9PiR7c3BsaXRPWzBdfSBBTkQgJHthdHRyaWJ1dGVOYW1lfTwke3NwbGl0T1sxXX0gKWApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgYENhbm5vdCBhZGQgY3FsIGZpbHRlciBvbiBkYXRhc291cmNlICR7ZGF0YXNvdXJjZUlkfSBiZWNhdXNlICR7Y29uZC5hdHRyaWJ1dGV9IGF0dHJpYnV0ZSBub3QgZm91bmQgaW4gY2xhc3Nlc2BcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbmRpdGlvbnMubGVuZ3RoID4gMSA/ICcoICcgKyBjb25kaXRpb25zLmpvaW4oJyBPUiAnKSArICcgKScgOiBjb25kaXRpb25zWzBdO1xuICB9XG59XG4iXX0=
|
|
@@ -278,60 +278,66 @@ class CqlUtils {
|
|
|
278
278
|
const attributesReference = classes.map((clazz) => clazz.attributes).flat();
|
|
279
279
|
return filters[datasourceId]
|
|
280
280
|
.map((cond) => {
|
|
281
|
-
const conditions = [];
|
|
282
281
|
const attribute = attributesReference.find((attr) => attr.id === cond.attribute);
|
|
283
282
|
const field = fields.find((f) => f.id === attribute?.field);
|
|
284
283
|
const attributeName = attribute?.technicalName;
|
|
285
|
-
|
|
286
|
-
const quoteSafeValue = `${cond.value}`.replace(/'/g, "''");
|
|
287
|
-
switch (cond.operator) {
|
|
288
|
-
case 'EQUALS':
|
|
289
|
-
if (!field || TextFieldTypes.includes(field?.type)) {
|
|
290
|
-
conditions.push(`${attributeName}='${quoteSafeValue}'`);
|
|
291
|
-
}
|
|
292
|
-
else {
|
|
293
|
-
conditions.push(`${attributeName}=${cond.value}`);
|
|
294
|
-
}
|
|
295
|
-
break;
|
|
296
|
-
case 'CONTAINS':
|
|
297
|
-
conditions.push(`${attributeName} LIKE '%${quoteSafeValue}%'`);
|
|
298
|
-
break;
|
|
299
|
-
case 'START_WITH':
|
|
300
|
-
conditions.push(`${attributeName} LIKE '${quoteSafeValue}%'`);
|
|
301
|
-
break;
|
|
302
|
-
case 'END_WITH':
|
|
303
|
-
conditions.push(`${attributeName} LIKE '%${quoteSafeValue}'`);
|
|
304
|
-
break;
|
|
305
|
-
case 'GREATER_THAN':
|
|
306
|
-
conditions.push(`${attributeName}>${cond.value}`);
|
|
307
|
-
break;
|
|
308
|
-
case 'LOWER_THAN':
|
|
309
|
-
conditions.push(`${attributeName}<${cond.value}`);
|
|
310
|
-
break;
|
|
311
|
-
case 'INSIDE':
|
|
312
|
-
const splitI = cond.value?.split(',');
|
|
313
|
-
if (splitI && splitI.length > 1) {
|
|
314
|
-
conditions.push(`${attributeName}<${splitI[0]}`);
|
|
315
|
-
conditions.push(`${attributeName}>${splitI[1]}`);
|
|
316
|
-
}
|
|
317
|
-
break;
|
|
318
|
-
case 'OUTSIDE':
|
|
319
|
-
const splitO = cond.value?.split(',');
|
|
320
|
-
if (splitO && splitO.length > 1) {
|
|
321
|
-
conditions.push(`${attributeName}>${splitO[0]}`);
|
|
322
|
-
conditions.push(`${attributeName}<${splitO[1]}`);
|
|
323
|
-
}
|
|
324
|
-
break;
|
|
325
|
-
}
|
|
326
|
-
}
|
|
327
|
-
else {
|
|
328
|
-
console.warn(`Cannot add cql filter on datasource ${datasourceId} because ${cond.attribute} attribute not found in classes`);
|
|
329
|
-
}
|
|
330
|
-
return conditions;
|
|
284
|
+
return this.getConditionsForValue(attributeName, cond, field, datasourceId);
|
|
331
285
|
})
|
|
332
286
|
.filter((conds) => conds.length > 0)
|
|
333
287
|
.join(' AND ');
|
|
334
288
|
}
|
|
289
|
+
static getConditionsForValue(attributeName, cond, field, datasourceId) {
|
|
290
|
+
let conditions = [];
|
|
291
|
+
const values = (Array.isArray(cond.value) ? cond.value : [cond.value]);
|
|
292
|
+
if (attributeName) {
|
|
293
|
+
values.forEach((value) => {
|
|
294
|
+
if (value && (typeof value !== 'string' || value.length > 0)) {
|
|
295
|
+
const quoteSafeValue = `${value}`.replace(/'/g, "''");
|
|
296
|
+
switch (cond.operator) {
|
|
297
|
+
case 'EQUALS':
|
|
298
|
+
if (!field || TextFieldTypes.includes(field?.type)) {
|
|
299
|
+
conditions.push(`${attributeName}='${quoteSafeValue}'`);
|
|
300
|
+
}
|
|
301
|
+
else {
|
|
302
|
+
conditions.push(`${attributeName}=${value}`);
|
|
303
|
+
}
|
|
304
|
+
break;
|
|
305
|
+
case 'CONTAINS':
|
|
306
|
+
conditions.push(`${attributeName} LIKE '%${quoteSafeValue}%'`);
|
|
307
|
+
break;
|
|
308
|
+
case 'START_WITH':
|
|
309
|
+
conditions.push(`${attributeName} LIKE '${quoteSafeValue}%'`);
|
|
310
|
+
break;
|
|
311
|
+
case 'END_WITH':
|
|
312
|
+
conditions.push(`${attributeName} LIKE '%${quoteSafeValue}'`);
|
|
313
|
+
break;
|
|
314
|
+
case 'GREATER_THAN':
|
|
315
|
+
conditions.push(`${attributeName}>${value}`);
|
|
316
|
+
break;
|
|
317
|
+
case 'LOWER_THAN':
|
|
318
|
+
conditions.push(`${attributeName}<${value}`);
|
|
319
|
+
break;
|
|
320
|
+
case 'OUTSIDE':
|
|
321
|
+
const splitI = value?.split(',');
|
|
322
|
+
if (splitI && splitI.length > 1) {
|
|
323
|
+
conditions.push(`( ${attributeName}<${splitI[0]} AND ${attributeName}>${splitI[1]} )`);
|
|
324
|
+
}
|
|
325
|
+
break;
|
|
326
|
+
case 'INSIDE':
|
|
327
|
+
const splitO = value?.split(',');
|
|
328
|
+
if (splitO && splitO.length > 1) {
|
|
329
|
+
conditions.push(`( ${attributeName}>${splitO[0]} AND ${attributeName}<${splitO[1]} )`);
|
|
330
|
+
}
|
|
331
|
+
break;
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
});
|
|
335
|
+
}
|
|
336
|
+
else {
|
|
337
|
+
console.warn(`Cannot add cql filter on datasource ${datasourceId} because ${cond.attribute} attribute not found in classes`);
|
|
338
|
+
}
|
|
339
|
+
return conditions.length > 1 ? '( ' + conditions.join(' OR ') + ' )' : conditions[0];
|
|
340
|
+
}
|
|
335
341
|
}
|
|
336
342
|
|
|
337
343
|
class XMLUtils {
|