@sisense/sdk-data 1.11.0 → 1.12.0
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/cjs/dimensional-model/analytics/factory.d.ts +47 -0
- package/dist/cjs/dimensional-model/analytics/factory.js +151 -0
- package/dist/cjs/dimensional-model/analytics/factory.test.d.ts +1 -0
- package/dist/cjs/dimensional-model/analytics/factory.test.js +99 -0
- package/dist/cjs/dimensional-model/attributes.d.ts +139 -0
- package/dist/cjs/dimensional-model/attributes.js +342 -0
- package/dist/cjs/dimensional-model/attributes.test.d.ts +1 -0
- package/dist/cjs/dimensional-model/attributes.test.js +154 -0
- package/dist/cjs/dimensional-model/base.d.ts +43 -0
- package/dist/cjs/dimensional-model/base.js +58 -0
- package/dist/cjs/dimensional-model/base.test.d.ts +1 -0
- package/dist/cjs/dimensional-model/base.test.js +17 -0
- package/dist/cjs/dimensional-model/data-model.d.ts +13 -0
- package/dist/cjs/dimensional-model/data-model.js +37 -0
- package/dist/cjs/dimensional-model/dimensions.d.ts +167 -0
- package/dist/cjs/dimensional-model/dimensions.js +307 -0
- package/dist/cjs/dimensional-model/dimensions.test.d.ts +1 -0
- package/dist/cjs/dimensional-model/dimensions.test.js +54 -0
- package/dist/cjs/dimensional-model/factory.d.ts +17 -0
- package/dist/cjs/dimensional-model/factory.js +54 -0
- package/dist/cjs/dimensional-model/filters/factory.d.ts +796 -0
- package/dist/cjs/dimensional-model/filters/factory.js +962 -0
- package/dist/cjs/dimensional-model/filters/factory.test.d.ts +1 -0
- package/dist/cjs/dimensional-model/filters/factory.test.js +366 -0
- package/dist/cjs/dimensional-model/filters/filters.d.ts +321 -0
- package/dist/cjs/dimensional-model/filters/filters.js +614 -0
- package/dist/cjs/dimensional-model/filters/filters.test.d.ts +1 -0
- package/dist/cjs/dimensional-model/filters/filters.test.js +225 -0
- package/dist/cjs/dimensional-model/filters/utils/attribute-measure-util.d.ts +47 -0
- package/dist/cjs/dimensional-model/filters/utils/attribute-measure-util.js +111 -0
- package/dist/cjs/dimensional-model/filters/utils/condition-filter-util.d.ts +21 -0
- package/dist/cjs/dimensional-model/filters/utils/condition-filter-util.js +194 -0
- package/dist/cjs/dimensional-model/filters/utils/date-time-filter-util.d.ts +2 -0
- package/dist/cjs/dimensional-model/filters/utils/date-time-filter-util.js +12 -0
- package/dist/cjs/dimensional-model/filters/utils/filter-code-util.d.ts +13 -0
- package/dist/cjs/dimensional-model/filters/utils/filter-code-util.js +54 -0
- package/dist/cjs/dimensional-model/filters/utils/filter-code-util.test.d.ts +1 -0
- package/dist/cjs/dimensional-model/filters/utils/filter-code-util.test.js +32 -0
- package/dist/cjs/dimensional-model/filters/utils/filter-from-jaql-util.d.ts +73 -0
- package/dist/cjs/dimensional-model/filters/utils/filter-from-jaql-util.js +190 -0
- package/dist/cjs/dimensional-model/filters/utils/filter-from-jaql-util.test.d.ts +1 -0
- package/dist/cjs/dimensional-model/filters/utils/filter-from-jaql-util.test.js +558 -0
- package/dist/cjs/dimensional-model/filters/utils/filter-matcher-utils.d.ts +5 -0
- package/dist/cjs/dimensional-model/filters/utils/filter-matcher-utils.js +174 -0
- package/dist/cjs/dimensional-model/filters/utils/filter-matcher-utils.test.d.ts +1 -0
- package/dist/cjs/dimensional-model/filters/utils/filter-matcher-utils.test.js +236 -0
- package/dist/cjs/dimensional-model/filters/utils/filter-types-util.d.ts +17 -0
- package/dist/cjs/dimensional-model/filters/utils/filter-types-util.js +79 -0
- package/dist/cjs/dimensional-model/filters/utils/types.d.ts +200 -0
- package/dist/cjs/dimensional-model/filters/utils/types.js +99 -0
- package/dist/cjs/dimensional-model/interfaces.d.ts +512 -0
- package/dist/cjs/dimensional-model/interfaces.js +31 -0
- package/dist/cjs/dimensional-model/measures/factory.d.ts +920 -0
- package/dist/cjs/dimensional-model/measures/factory.js +1188 -0
- package/dist/cjs/dimensional-model/measures/factory.test.d.ts +1 -0
- package/dist/cjs/dimensional-model/measures/factory.test.js +481 -0
- package/dist/cjs/dimensional-model/measures/measures.d.ts +217 -0
- package/dist/cjs/dimensional-model/measures/measures.js +416 -0
- package/dist/cjs/dimensional-model/measures/measures.test.d.ts +1 -0
- package/dist/cjs/dimensional-model/measures/measures.test.js +79 -0
- package/dist/cjs/dimensional-model/simple-column-types.d.ts +39 -0
- package/dist/cjs/dimensional-model/simple-column-types.js +134 -0
- package/dist/cjs/dimensional-model/simple-column-types.test.d.ts +1 -0
- package/dist/cjs/dimensional-model/simple-column-types.test.js +85 -0
- package/dist/cjs/dimensional-model/types.d.ts +256 -0
- package/dist/cjs/dimensional-model/types.js +298 -0
- package/dist/cjs/dimensional-model/types.test.d.ts +1 -0
- package/dist/cjs/dimensional-model/types.test.js +33 -0
- package/dist/cjs/index.d.ts +93 -0
- package/dist/cjs/index.js +123 -0
- package/dist/cjs/interfaces.d.ts +367 -0
- package/dist/cjs/interfaces.js +21 -0
- package/dist/cjs/translation/initialize-i18n.d.ts +2 -0
- package/dist/cjs/translation/initialize-i18n.js +14 -0
- package/dist/cjs/translation/resources/en.d.ts +28 -0
- package/dist/cjs/translation/resources/en.js +30 -0
- package/dist/cjs/translation/resources/index.d.ts +53 -0
- package/dist/cjs/translation/resources/index.js +10 -0
- package/dist/cjs/translation/resources/uk.d.ts +5 -0
- package/dist/cjs/translation/resources/uk.js +30 -0
- package/dist/cjs/translation/translatable-error.d.ts +5 -0
- package/dist/cjs/translation/translatable-error.js +15 -0
- package/dist/cjs/utils.d.ts +37 -0
- package/dist/cjs/utils.js +105 -0
- package/dist/cjs/utils.test.d.ts +1 -0
- package/dist/cjs/utils.test.js +158 -0
- package/dist/dimensional-model/filters/factory.d.ts +80 -42
- package/dist/dimensional-model/filters/factory.js +123 -85
- package/dist/dimensional-model/filters/filters.d.ts +34 -12
- package/dist/dimensional-model/filters/filters.js +69 -27
- package/dist/dimensional-model/filters/utils/condition-filter-util.d.ts +4 -2
- package/dist/dimensional-model/filters/utils/condition-filter-util.js +27 -25
- package/dist/dimensional-model/filters/utils/filter-code-util.js +1 -1
- package/dist/dimensional-model/filters/utils/filter-from-jaql-util.d.ts +16 -10
- package/dist/dimensional-model/filters/utils/filter-from-jaql-util.js +34 -27
- package/package.json +18 -9
|
@@ -0,0 +1,614 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.createFilter = exports.RelativeDateFilter = exports.DateRangeFilter = exports.TextFilter = exports.NumericFilter = exports.RankingFilter = exports.MeasureFilter = exports.DoubleOperatorFilter = exports.ExcludeFilter = exports.CascadingFilter = exports.MembersFilter = exports.LogicalAttributeFilter = exports.FilterTypes = exports.RankingOperators = exports.LogicalOperators = exports.DateOperators = exports.NumericOperators = exports.TextOperators = void 0;
|
|
7
|
+
/* eslint-disable @typescript-eslint/no-unsafe-assignment */
|
|
8
|
+
/* eslint-disable @typescript-eslint/no-unsafe-member-access */
|
|
9
|
+
/* eslint-disable @typescript-eslint/no-unsafe-return */
|
|
10
|
+
/* eslint-disable @typescript-eslint/no-unsafe-call */
|
|
11
|
+
/* eslint-disable max-params */
|
|
12
|
+
/* eslint-disable @typescript-eslint/restrict-template-expressions */
|
|
13
|
+
/* eslint-disable @typescript-eslint/no-unsafe-argument */
|
|
14
|
+
const object_hash_1 = __importDefault(require("object-hash"));
|
|
15
|
+
const base_js_1 = require("../base.js");
|
|
16
|
+
const types_js_1 = require("../types.js");
|
|
17
|
+
const factory_js_1 = require("../factory.js");
|
|
18
|
+
const measures_js_1 = require("../measures/measures.js");
|
|
19
|
+
const translatable_error_js_1 = require("../../translation/translatable-error.js");
|
|
20
|
+
const utils_js_1 = require("../../utils.js");
|
|
21
|
+
/**
|
|
22
|
+
* Different text operators that can be used with text filters
|
|
23
|
+
*
|
|
24
|
+
* @internal
|
|
25
|
+
*/
|
|
26
|
+
exports.TextOperators = {
|
|
27
|
+
Contains: 'contains',
|
|
28
|
+
StartsWith: 'startsWith',
|
|
29
|
+
EndsWith: 'endsWith',
|
|
30
|
+
Equals: 'equals',
|
|
31
|
+
DoesntEqual: 'doesntEqual',
|
|
32
|
+
DoesntStartWith: 'doesntStartWith',
|
|
33
|
+
DoesntContain: 'doesntContain',
|
|
34
|
+
DoesntEndWith: 'doesntEndWith',
|
|
35
|
+
Like: 'like',
|
|
36
|
+
};
|
|
37
|
+
/**
|
|
38
|
+
* Different numeric operators that can be used with numeric filters
|
|
39
|
+
*/
|
|
40
|
+
exports.NumericOperators = {
|
|
41
|
+
Equals: 'equals',
|
|
42
|
+
DoesntEqual: 'doesntEqual',
|
|
43
|
+
From: 'from',
|
|
44
|
+
FromNotEqual: 'fromNotEqual',
|
|
45
|
+
To: 'to',
|
|
46
|
+
ToNotEqual: 'toNotEqual',
|
|
47
|
+
};
|
|
48
|
+
/**
|
|
49
|
+
* Different date operators that can be used with date filters
|
|
50
|
+
*
|
|
51
|
+
* @internal
|
|
52
|
+
*/
|
|
53
|
+
exports.DateOperators = {
|
|
54
|
+
From: 'from',
|
|
55
|
+
To: 'to',
|
|
56
|
+
Last: 'last',
|
|
57
|
+
Next: 'next',
|
|
58
|
+
Anchor: 'Anchor',
|
|
59
|
+
};
|
|
60
|
+
/**
|
|
61
|
+
* Different logical operators that can be used with logical filters
|
|
62
|
+
*
|
|
63
|
+
* @internal
|
|
64
|
+
*/
|
|
65
|
+
exports.LogicalOperators = {
|
|
66
|
+
Union: 'or',
|
|
67
|
+
Intersection: 'and',
|
|
68
|
+
Exclude: 'exclude',
|
|
69
|
+
};
|
|
70
|
+
/**
|
|
71
|
+
* Different ranking operators that can be used with ranking filter
|
|
72
|
+
*
|
|
73
|
+
* @internal
|
|
74
|
+
*/
|
|
75
|
+
exports.RankingOperators = {
|
|
76
|
+
Top: 'top',
|
|
77
|
+
Bottom: 'bottom',
|
|
78
|
+
};
|
|
79
|
+
/**
|
|
80
|
+
* Different filter types
|
|
81
|
+
*
|
|
82
|
+
* @internal
|
|
83
|
+
*/
|
|
84
|
+
exports.FilterTypes = {
|
|
85
|
+
logicalAttribute: 'logicalAttribute',
|
|
86
|
+
members: 'members',
|
|
87
|
+
exclude: 'exclude',
|
|
88
|
+
measure: 'measure',
|
|
89
|
+
ranking: 'ranking',
|
|
90
|
+
text: 'text',
|
|
91
|
+
numeric: 'numeric',
|
|
92
|
+
date: 'date',
|
|
93
|
+
relativeDate: 'relativeDate',
|
|
94
|
+
cascading: 'cascading',
|
|
95
|
+
};
|
|
96
|
+
// CLASSES
|
|
97
|
+
/**
|
|
98
|
+
* base implementation for filter classes
|
|
99
|
+
*
|
|
100
|
+
* @internal
|
|
101
|
+
*/
|
|
102
|
+
class AbstractFilter extends base_js_1.DimensionalElement {
|
|
103
|
+
constructor(att, filterType, guid) {
|
|
104
|
+
super('filter', types_js_1.MetadataTypes.Filter);
|
|
105
|
+
this.filterType = filterType;
|
|
106
|
+
AbstractFilter.checkAttributeSupport(att);
|
|
107
|
+
this.attribute = att;
|
|
108
|
+
this.guid = guid || (0, utils_js_1.guidFast)(13);
|
|
109
|
+
this.disabled = false;
|
|
110
|
+
}
|
|
111
|
+
get name() {
|
|
112
|
+
return (0, object_hash_1.default)(this.jaql());
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Gets a serializable representation of the element
|
|
116
|
+
*/
|
|
117
|
+
serializable() {
|
|
118
|
+
const result = super.serializable();
|
|
119
|
+
result.filterType = this.filterType;
|
|
120
|
+
result.attribute = this.attribute.serializable();
|
|
121
|
+
return result;
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Gets the JAQL representation of this instance
|
|
125
|
+
*
|
|
126
|
+
* @param nested - defines whether the JAQL is nested within parent JAQL statement or a root JAQL element
|
|
127
|
+
*/
|
|
128
|
+
jaql(nested) {
|
|
129
|
+
if (this.disabled) {
|
|
130
|
+
return AbstractFilter.disabledJaql(nested);
|
|
131
|
+
}
|
|
132
|
+
const result = this.attribute.jaql(false);
|
|
133
|
+
const level = this.attribute;
|
|
134
|
+
if (level.getFormat && level.getFormat() !== undefined) {
|
|
135
|
+
const granularityJaql = level.translateGranularityToJaql();
|
|
136
|
+
result.format = {
|
|
137
|
+
mask: {
|
|
138
|
+
[granularityJaql.level]: level.getFormat(),
|
|
139
|
+
},
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
result.jaql.filter = this.filterJaql();
|
|
143
|
+
if (this.isScope) {
|
|
144
|
+
result.panel = 'scope';
|
|
145
|
+
}
|
|
146
|
+
return nested === true ? result.jaql : result;
|
|
147
|
+
}
|
|
148
|
+
static checkAttributeSupport(attribute) {
|
|
149
|
+
const { granularity } = attribute;
|
|
150
|
+
if (granularity === types_js_1.DateLevels.Hours ||
|
|
151
|
+
granularity === types_js_1.DateLevels.MinutesRoundTo30 ||
|
|
152
|
+
granularity === types_js_1.DateLevels.MinutesRoundTo15) {
|
|
153
|
+
throw new translatable_error_js_1.TranslatableError('errors.filter.unsupportedDatetimeLevel');
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
static disabledJaql(nested) {
|
|
157
|
+
return nested ? { filter: {} } : { jaql: { filter: {} } };
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* @internal
|
|
162
|
+
*/
|
|
163
|
+
class LogicalAttributeFilter extends AbstractFilter {
|
|
164
|
+
constructor(filters, operator, guid) {
|
|
165
|
+
super(filters[0].attribute, exports.FilterTypes.logicalAttribute, guid);
|
|
166
|
+
this.operator = operator;
|
|
167
|
+
this.filters = filters;
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* gets the element's ID
|
|
171
|
+
*/
|
|
172
|
+
get id() {
|
|
173
|
+
return `${this.operator}_${this.filters.map((f) => f.id).join()}`;
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Gets a serializable representation of the element
|
|
177
|
+
*/
|
|
178
|
+
serializable() {
|
|
179
|
+
const result = super.serializable();
|
|
180
|
+
result.operator = this.operator;
|
|
181
|
+
result.filters = this.filters.map((f) => f.serializable());
|
|
182
|
+
return result;
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Gets JAQL representing this Filter instance
|
|
186
|
+
*/
|
|
187
|
+
filterJaql() {
|
|
188
|
+
const result = {};
|
|
189
|
+
result[this.operator] = this.filters.map((f) => f.filterJaql());
|
|
190
|
+
return result;
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
exports.LogicalAttributeFilter = LogicalAttributeFilter;
|
|
194
|
+
/**
|
|
195
|
+
* @internal
|
|
196
|
+
*/
|
|
197
|
+
class MembersFilter extends AbstractFilter {
|
|
198
|
+
constructor(attribute, members, guid) {
|
|
199
|
+
super(attribute, exports.FilterTypes.members, guid);
|
|
200
|
+
this.members = members !== null && members !== void 0 ? members : [];
|
|
201
|
+
if (this.members.filter((m) => m === null || m === undefined).length > 0) {
|
|
202
|
+
throw new translatable_error_js_1.TranslatableError('errors.filter.membersFilterNullMember', {
|
|
203
|
+
attributeId: attribute.id,
|
|
204
|
+
});
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
/**
|
|
208
|
+
* gets the element's ID
|
|
209
|
+
*/
|
|
210
|
+
get id() {
|
|
211
|
+
return `${this.attribute.id}_${this.members.map((m) => m.toString()).join()}`;
|
|
212
|
+
}
|
|
213
|
+
/**
|
|
214
|
+
* Gets a serializable representation of the element
|
|
215
|
+
*/
|
|
216
|
+
serializable() {
|
|
217
|
+
const result = super.serializable();
|
|
218
|
+
result.members = this.members;
|
|
219
|
+
return result;
|
|
220
|
+
}
|
|
221
|
+
/**
|
|
222
|
+
* Gets JAQL representing this Filter instance
|
|
223
|
+
*/
|
|
224
|
+
filterJaql() {
|
|
225
|
+
return {
|
|
226
|
+
members: this.members.map((m) => m.toString()),
|
|
227
|
+
};
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
exports.MembersFilter = MembersFilter;
|
|
231
|
+
/**
|
|
232
|
+
* @internal
|
|
233
|
+
*/
|
|
234
|
+
class CascadingFilter extends AbstractFilter {
|
|
235
|
+
constructor(filters, guid) {
|
|
236
|
+
super(filters[0].attribute, exports.FilterTypes.cascading, guid);
|
|
237
|
+
this.filters = filters;
|
|
238
|
+
}
|
|
239
|
+
/**
|
|
240
|
+
* gets the element's ID
|
|
241
|
+
*/
|
|
242
|
+
get id() {
|
|
243
|
+
return `${this.filterType}_${this.filters.map((f) => f.id).join()}`;
|
|
244
|
+
}
|
|
245
|
+
/**
|
|
246
|
+
* Gets a serializable representation of the element
|
|
247
|
+
*/
|
|
248
|
+
serializable() {
|
|
249
|
+
const result = super.serializable();
|
|
250
|
+
result.filters = this.filters.map((f) => f.serializable());
|
|
251
|
+
return result;
|
|
252
|
+
}
|
|
253
|
+
/**
|
|
254
|
+
* Gets JAQL representing this Filter instance
|
|
255
|
+
*/
|
|
256
|
+
filterJaql() {
|
|
257
|
+
// return empty object as jaql is handled by jaql() method
|
|
258
|
+
return {};
|
|
259
|
+
}
|
|
260
|
+
jaql(nested) {
|
|
261
|
+
if (this.disabled) {
|
|
262
|
+
return AbstractFilter.disabledJaql(nested);
|
|
263
|
+
}
|
|
264
|
+
// return jaql of all level filters treated as scope filters
|
|
265
|
+
return this.filters.map((f) => {
|
|
266
|
+
f.isScope = true;
|
|
267
|
+
return f.jaql(nested);
|
|
268
|
+
});
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
exports.CascadingFilter = CascadingFilter;
|
|
272
|
+
/**
|
|
273
|
+
* @internal
|
|
274
|
+
*/
|
|
275
|
+
class ExcludeFilter extends AbstractFilter {
|
|
276
|
+
constructor(filter, input, guid) {
|
|
277
|
+
super(filter.attribute, exports.FilterTypes.exclude, guid);
|
|
278
|
+
this.input = input;
|
|
279
|
+
this.filter = filter;
|
|
280
|
+
}
|
|
281
|
+
/**
|
|
282
|
+
* gets the element's ID
|
|
283
|
+
*/
|
|
284
|
+
get id() {
|
|
285
|
+
let result = `exclude_${this.filter.id}`;
|
|
286
|
+
if (this.input) {
|
|
287
|
+
result += '_from_' + this.input.id;
|
|
288
|
+
}
|
|
289
|
+
return result;
|
|
290
|
+
}
|
|
291
|
+
/**
|
|
292
|
+
* Gets a serializable representation of the element
|
|
293
|
+
*/
|
|
294
|
+
serializable() {
|
|
295
|
+
const result = super.serializable();
|
|
296
|
+
result.filter = this.filter.serializable();
|
|
297
|
+
if (this.input) {
|
|
298
|
+
result.input = this.input.serializable();
|
|
299
|
+
}
|
|
300
|
+
return result;
|
|
301
|
+
}
|
|
302
|
+
/**
|
|
303
|
+
* Gets JAQL representing this Filter instance
|
|
304
|
+
*/
|
|
305
|
+
filterJaql() {
|
|
306
|
+
const result = {};
|
|
307
|
+
const exclusion = this.filter.filterJaql();
|
|
308
|
+
if (this.input) {
|
|
309
|
+
result.filter = this.input.filterJaql();
|
|
310
|
+
result.filter.filter = { exclude: exclusion };
|
|
311
|
+
}
|
|
312
|
+
else {
|
|
313
|
+
result.exclude = exclusion;
|
|
314
|
+
}
|
|
315
|
+
return result;
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
exports.ExcludeFilter = ExcludeFilter;
|
|
319
|
+
/**
|
|
320
|
+
* @internal
|
|
321
|
+
*/
|
|
322
|
+
class DoubleOperatorFilter extends AbstractFilter {
|
|
323
|
+
constructor(att, filterType, operatorA, valueA, operatorB, valueB, guid) {
|
|
324
|
+
super(att, filterType, guid);
|
|
325
|
+
if (operatorA && valueA !== undefined) {
|
|
326
|
+
this.valueA = valueA;
|
|
327
|
+
this.operatorA = operatorA;
|
|
328
|
+
}
|
|
329
|
+
if (operatorB && valueB !== undefined) {
|
|
330
|
+
this.operatorB = operatorB;
|
|
331
|
+
this.valueB = valueB;
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
/**
|
|
335
|
+
* gets the element's ID
|
|
336
|
+
*/
|
|
337
|
+
get id() {
|
|
338
|
+
let result = `${this.attribute.id}`;
|
|
339
|
+
if (this.operatorA && this.valueA !== undefined) {
|
|
340
|
+
result += `_${this.operatorA}:${this.valueA}`;
|
|
341
|
+
}
|
|
342
|
+
if (this.operatorB && this.valueB !== undefined) {
|
|
343
|
+
result += `_${this.operatorB}:${this.valueB}`;
|
|
344
|
+
}
|
|
345
|
+
return result;
|
|
346
|
+
}
|
|
347
|
+
/**
|
|
348
|
+
* Gets a serializable representation of the element
|
|
349
|
+
*/
|
|
350
|
+
serializable() {
|
|
351
|
+
const result = super.serializable();
|
|
352
|
+
if (this.operatorA) {
|
|
353
|
+
result.operatorA = this.operatorA;
|
|
354
|
+
}
|
|
355
|
+
if (this.operatorB) {
|
|
356
|
+
result.operatorB = this.operatorB;
|
|
357
|
+
}
|
|
358
|
+
if (this.valueA !== undefined) {
|
|
359
|
+
result.valueA = this.valueA;
|
|
360
|
+
}
|
|
361
|
+
if (this.valueB !== undefined) {
|
|
362
|
+
result.valueB = this.valueB;
|
|
363
|
+
}
|
|
364
|
+
return result;
|
|
365
|
+
}
|
|
366
|
+
/**
|
|
367
|
+
* Gets JAQL representing this Filter instance
|
|
368
|
+
*/
|
|
369
|
+
filterJaql() {
|
|
370
|
+
const result = {};
|
|
371
|
+
if (this.operatorA && this.valueA !== undefined) {
|
|
372
|
+
result[this.operatorA] = this.valueA;
|
|
373
|
+
}
|
|
374
|
+
if (this.operatorB && this.valueB !== undefined) {
|
|
375
|
+
result[this.operatorB] = this.valueB;
|
|
376
|
+
}
|
|
377
|
+
return result;
|
|
378
|
+
}
|
|
379
|
+
}
|
|
380
|
+
exports.DoubleOperatorFilter = DoubleOperatorFilter;
|
|
381
|
+
/**
|
|
382
|
+
* @internal
|
|
383
|
+
*/
|
|
384
|
+
class MeasureFilter extends DoubleOperatorFilter {
|
|
385
|
+
constructor(att, measure, operatorA, valueA, operatorB, valueB, guid) {
|
|
386
|
+
super(att, exports.FilterTypes.measure, operatorA, valueA, operatorB, valueB, guid);
|
|
387
|
+
this.measure = measure;
|
|
388
|
+
}
|
|
389
|
+
/**
|
|
390
|
+
* gets the element's ID
|
|
391
|
+
*/
|
|
392
|
+
get id() {
|
|
393
|
+
let result = `${this.attribute.id}_${this.measure.id}`;
|
|
394
|
+
if (this.operatorA && this.valueA !== undefined) {
|
|
395
|
+
result += `_${this.operatorA}:${this.valueA}`;
|
|
396
|
+
}
|
|
397
|
+
if (this.operatorB && this.valueB !== undefined) {
|
|
398
|
+
result += `_${this.operatorB}${this.valueB}`;
|
|
399
|
+
}
|
|
400
|
+
return result;
|
|
401
|
+
}
|
|
402
|
+
/**
|
|
403
|
+
* Gets a serializable representation of the element
|
|
404
|
+
*/
|
|
405
|
+
serializable() {
|
|
406
|
+
const result = super.serializable();
|
|
407
|
+
result.measure = this.measure.serializable();
|
|
408
|
+
return result;
|
|
409
|
+
}
|
|
410
|
+
jaql(nested) {
|
|
411
|
+
if (this.disabled) {
|
|
412
|
+
return AbstractFilter.disabledJaql(nested);
|
|
413
|
+
}
|
|
414
|
+
const result = super.jaql(nested);
|
|
415
|
+
if (this.measure instanceof measures_js_1.DimensionalBaseMeasure) {
|
|
416
|
+
Object.entries(this.measure.jaql().jaql).forEach(([key, value]) => {
|
|
417
|
+
result.jaql[key] = value;
|
|
418
|
+
});
|
|
419
|
+
}
|
|
420
|
+
return result;
|
|
421
|
+
}
|
|
422
|
+
}
|
|
423
|
+
exports.MeasureFilter = MeasureFilter;
|
|
424
|
+
/**
|
|
425
|
+
* @internal
|
|
426
|
+
*/
|
|
427
|
+
class RankingFilter extends AbstractFilter {
|
|
428
|
+
constructor(att, measure, operator, count, guid) {
|
|
429
|
+
super(att, exports.FilterTypes.ranking, guid);
|
|
430
|
+
this.count = count;
|
|
431
|
+
this.operator = operator;
|
|
432
|
+
this.measure = measure;
|
|
433
|
+
}
|
|
434
|
+
/**
|
|
435
|
+
* gets the element's ID
|
|
436
|
+
*/
|
|
437
|
+
get id() {
|
|
438
|
+
return `${this.operator}_${this.count}_${this.attribute.id}_by_${this.measure.id}`;
|
|
439
|
+
}
|
|
440
|
+
/**
|
|
441
|
+
* Gets a serializable representation of the element
|
|
442
|
+
*/
|
|
443
|
+
serializable() {
|
|
444
|
+
const result = super.serializable();
|
|
445
|
+
result.count = this.count;
|
|
446
|
+
result.operator = this.operator;
|
|
447
|
+
result.measure = this.measure.serializable();
|
|
448
|
+
return result;
|
|
449
|
+
}
|
|
450
|
+
/**
|
|
451
|
+
* Gets JAQL representing this Filter instance
|
|
452
|
+
*/
|
|
453
|
+
filterJaql() {
|
|
454
|
+
const result = {};
|
|
455
|
+
result[this.operator] = this.count;
|
|
456
|
+
result.by = this.measure.jaql(true);
|
|
457
|
+
return result;
|
|
458
|
+
}
|
|
459
|
+
}
|
|
460
|
+
exports.RankingFilter = RankingFilter;
|
|
461
|
+
/**
|
|
462
|
+
* @internal
|
|
463
|
+
*/
|
|
464
|
+
class NumericFilter extends DoubleOperatorFilter {
|
|
465
|
+
constructor(att, operatorA, valueA, operatorB, valueB, guid) {
|
|
466
|
+
super(att, exports.FilterTypes.numeric, operatorA, valueA, operatorB, valueB, guid);
|
|
467
|
+
}
|
|
468
|
+
}
|
|
469
|
+
exports.NumericFilter = NumericFilter;
|
|
470
|
+
/**
|
|
471
|
+
* @internal
|
|
472
|
+
*/
|
|
473
|
+
class TextFilter extends DoubleOperatorFilter {
|
|
474
|
+
constructor(att, operator, value, guid) {
|
|
475
|
+
super(att, exports.FilterTypes.text, operator, value, undefined, undefined, guid);
|
|
476
|
+
}
|
|
477
|
+
}
|
|
478
|
+
exports.TextFilter = TextFilter;
|
|
479
|
+
/**
|
|
480
|
+
* @internal
|
|
481
|
+
*/
|
|
482
|
+
class DateRangeFilter extends DoubleOperatorFilter {
|
|
483
|
+
constructor(l, valueFrom, valueTo, guid) {
|
|
484
|
+
super(l, exports.FilterTypes.date, exports.DateOperators.From, valueFrom, exports.DateOperators.To, valueTo, guid);
|
|
485
|
+
if (typeof valueFrom === 'object') {
|
|
486
|
+
this.valueA = valueFrom.toISOString();
|
|
487
|
+
}
|
|
488
|
+
if (typeof valueTo === 'object') {
|
|
489
|
+
this.valueB = valueTo.toISOString();
|
|
490
|
+
}
|
|
491
|
+
}
|
|
492
|
+
get level() {
|
|
493
|
+
return this.attribute;
|
|
494
|
+
}
|
|
495
|
+
get from() {
|
|
496
|
+
return this.valueA;
|
|
497
|
+
}
|
|
498
|
+
get to() {
|
|
499
|
+
return this.valueB;
|
|
500
|
+
}
|
|
501
|
+
/**
|
|
502
|
+
* Gets JAQL representing this Filter instance
|
|
503
|
+
*/
|
|
504
|
+
filterJaql() {
|
|
505
|
+
return super.filterJaql();
|
|
506
|
+
}
|
|
507
|
+
}
|
|
508
|
+
exports.DateRangeFilter = DateRangeFilter;
|
|
509
|
+
/**
|
|
510
|
+
* @internal
|
|
511
|
+
*/
|
|
512
|
+
class RelativeDateFilter extends AbstractFilter {
|
|
513
|
+
constructor(l, offset, count, operator, anchor, guid) {
|
|
514
|
+
super(l, exports.FilterTypes.relativeDate, guid);
|
|
515
|
+
if (!operator) {
|
|
516
|
+
operator = exports.DateOperators.Next;
|
|
517
|
+
}
|
|
518
|
+
this.anchor = anchor;
|
|
519
|
+
this.operator = operator;
|
|
520
|
+
this.offset = offset;
|
|
521
|
+
this.count = count;
|
|
522
|
+
}
|
|
523
|
+
get level() {
|
|
524
|
+
return this.attribute;
|
|
525
|
+
}
|
|
526
|
+
/**
|
|
527
|
+
* gets the element's ID
|
|
528
|
+
*/
|
|
529
|
+
get id() {
|
|
530
|
+
let result = `${this.level.id}_${this.operator}_${this.offset}_${this.count}`;
|
|
531
|
+
if (this.anchor) {
|
|
532
|
+
if (typeof this.anchor === 'string') {
|
|
533
|
+
result += `_${this.anchor}`;
|
|
534
|
+
}
|
|
535
|
+
else if (typeof this.anchor === 'object') {
|
|
536
|
+
result += `_${this.anchor.toISOString()}`;
|
|
537
|
+
}
|
|
538
|
+
}
|
|
539
|
+
return result;
|
|
540
|
+
}
|
|
541
|
+
/**
|
|
542
|
+
* Gets a serializable representation of the element
|
|
543
|
+
*/
|
|
544
|
+
serializable() {
|
|
545
|
+
const result = super.serializable();
|
|
546
|
+
result.offset = this.offset;
|
|
547
|
+
result.count = this.count;
|
|
548
|
+
result.operator = this.operator;
|
|
549
|
+
if (this.anchor) {
|
|
550
|
+
result.anchor = this.anchor;
|
|
551
|
+
}
|
|
552
|
+
return result;
|
|
553
|
+
}
|
|
554
|
+
/**
|
|
555
|
+
* Gets JAQL representing this Filter instance
|
|
556
|
+
*
|
|
557
|
+
*/
|
|
558
|
+
filterJaql() {
|
|
559
|
+
const result = {};
|
|
560
|
+
result[this.operator] = {
|
|
561
|
+
offset: this.offset,
|
|
562
|
+
count: this.count,
|
|
563
|
+
};
|
|
564
|
+
if (this.anchor) {
|
|
565
|
+
if (typeof this.anchor === 'string') {
|
|
566
|
+
result[this.operator].anchor = this.anchor;
|
|
567
|
+
}
|
|
568
|
+
else if (typeof this.anchor === 'object') {
|
|
569
|
+
result[this.operator].anchor = this.anchor.toISOString();
|
|
570
|
+
}
|
|
571
|
+
}
|
|
572
|
+
return result;
|
|
573
|
+
}
|
|
574
|
+
}
|
|
575
|
+
exports.RelativeDateFilter = RelativeDateFilter;
|
|
576
|
+
/**
|
|
577
|
+
* @param json - Filter JSON representation
|
|
578
|
+
* @internal
|
|
579
|
+
*/
|
|
580
|
+
function createFilter(json) {
|
|
581
|
+
switch (json.filterType) {
|
|
582
|
+
case exports.FilterTypes.logicalAttribute:
|
|
583
|
+
return new LogicalAttributeFilter(json.filters.map((f) => createFilter(f)), json.operator);
|
|
584
|
+
break;
|
|
585
|
+
case exports.FilterTypes.members:
|
|
586
|
+
return new MembersFilter((0, factory_js_1.create)(json.attribute), json.members);
|
|
587
|
+
break;
|
|
588
|
+
case exports.FilterTypes.exclude:
|
|
589
|
+
return new ExcludeFilter(createFilter(json.filter), json.input && createFilter(json.input));
|
|
590
|
+
break;
|
|
591
|
+
case exports.FilterTypes.measure:
|
|
592
|
+
return new MeasureFilter((0, factory_js_1.create)(json.attribute), (0, factory_js_1.create)(json.measure), json.operatorA, json.valueA, json.operatorB, json.valueB);
|
|
593
|
+
break;
|
|
594
|
+
case exports.FilterTypes.ranking:
|
|
595
|
+
return new RankingFilter((0, factory_js_1.create)(json.attribute), (0, factory_js_1.create)(json.measure), json.operator, json.count);
|
|
596
|
+
break;
|
|
597
|
+
case exports.FilterTypes.numeric:
|
|
598
|
+
return new NumericFilter((0, factory_js_1.create)(json.attribute), json.operatorA, json.valueA, json.operatorB, json.valueB);
|
|
599
|
+
break;
|
|
600
|
+
case exports.FilterTypes.text:
|
|
601
|
+
return new TextFilter((0, factory_js_1.create)(json.attribute), json.operatorA, json.valueA);
|
|
602
|
+
break;
|
|
603
|
+
case exports.FilterTypes.relativeDate:
|
|
604
|
+
return new RelativeDateFilter((0, factory_js_1.create)(json.attribute), json.offset, json.count, json.operator, json.anchor);
|
|
605
|
+
break;
|
|
606
|
+
case exports.FilterTypes.date:
|
|
607
|
+
return new DateRangeFilter((0, factory_js_1.create)(json.attribute), json.valueA, json.valueB);
|
|
608
|
+
break;
|
|
609
|
+
}
|
|
610
|
+
throw new translatable_error_js_1.TranslatableError('errors.filter.unsupportedType', {
|
|
611
|
+
filterType: json.filterType,
|
|
612
|
+
});
|
|
613
|
+
}
|
|
614
|
+
exports.createFilter = createFilter;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|