@sisense/sdk-data 1.11.0 → 1.13.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.
Files changed (99) hide show
  1. package/dist/cjs/dimensional-model/analytics/factory.d.ts +47 -0
  2. package/dist/cjs/dimensional-model/analytics/factory.js +153 -0
  3. package/dist/cjs/dimensional-model/analytics/factory.test.d.ts +1 -0
  4. package/dist/cjs/dimensional-model/analytics/factory.test.js +99 -0
  5. package/dist/cjs/dimensional-model/attributes.d.ts +139 -0
  6. package/dist/cjs/dimensional-model/attributes.js +342 -0
  7. package/dist/cjs/dimensional-model/attributes.test.d.ts +1 -0
  8. package/dist/cjs/dimensional-model/attributes.test.js +154 -0
  9. package/dist/cjs/dimensional-model/base.d.ts +43 -0
  10. package/dist/cjs/dimensional-model/base.js +58 -0
  11. package/dist/cjs/dimensional-model/base.test.d.ts +1 -0
  12. package/dist/cjs/dimensional-model/base.test.js +17 -0
  13. package/dist/cjs/dimensional-model/data-model.d.ts +13 -0
  14. package/dist/cjs/dimensional-model/data-model.js +37 -0
  15. package/dist/cjs/dimensional-model/dimensions.d.ts +167 -0
  16. package/dist/cjs/dimensional-model/dimensions.js +307 -0
  17. package/dist/cjs/dimensional-model/dimensions.test.d.ts +1 -0
  18. package/dist/cjs/dimensional-model/dimensions.test.js +54 -0
  19. package/dist/cjs/dimensional-model/factory.d.ts +17 -0
  20. package/dist/cjs/dimensional-model/factory.js +54 -0
  21. package/dist/cjs/dimensional-model/filters/factory.d.ts +797 -0
  22. package/dist/cjs/dimensional-model/filters/factory.js +962 -0
  23. package/dist/cjs/dimensional-model/filters/factory.test.d.ts +1 -0
  24. package/dist/cjs/dimensional-model/filters/factory.test.js +366 -0
  25. package/dist/cjs/dimensional-model/filters/filters.d.ts +344 -0
  26. package/dist/cjs/dimensional-model/filters/filters.js +663 -0
  27. package/dist/cjs/dimensional-model/filters/filters.test.d.ts +1 -0
  28. package/dist/cjs/dimensional-model/filters/filters.test.js +225 -0
  29. package/dist/cjs/dimensional-model/filters/utils/attribute-measure-util.d.ts +47 -0
  30. package/dist/cjs/dimensional-model/filters/utils/attribute-measure-util.js +111 -0
  31. package/dist/cjs/dimensional-model/filters/utils/condition-filter-util.d.ts +21 -0
  32. package/dist/cjs/dimensional-model/filters/utils/condition-filter-util.js +196 -0
  33. package/dist/cjs/dimensional-model/filters/utils/date-time-filter-util.d.ts +2 -0
  34. package/dist/cjs/dimensional-model/filters/utils/date-time-filter-util.js +12 -0
  35. package/dist/cjs/dimensional-model/filters/utils/filter-code-util.d.ts +13 -0
  36. package/dist/cjs/dimensional-model/filters/utils/filter-code-util.js +58 -0
  37. package/dist/cjs/dimensional-model/filters/utils/filter-code-util.test.d.ts +1 -0
  38. package/dist/cjs/dimensional-model/filters/utils/filter-code-util.test.js +32 -0
  39. package/dist/cjs/dimensional-model/filters/utils/filter-from-jaql-util.d.ts +82 -0
  40. package/dist/cjs/dimensional-model/filters/utils/filter-from-jaql-util.js +215 -0
  41. package/dist/cjs/dimensional-model/filters/utils/filter-from-jaql-util.test.d.ts +1 -0
  42. package/dist/cjs/dimensional-model/filters/utils/filter-from-jaql-util.test.js +623 -0
  43. package/dist/cjs/dimensional-model/filters/utils/filter-matcher-utils.d.ts +5 -0
  44. package/dist/cjs/dimensional-model/filters/utils/filter-matcher-utils.js +174 -0
  45. package/dist/cjs/dimensional-model/filters/utils/filter-matcher-utils.test.d.ts +1 -0
  46. package/dist/cjs/dimensional-model/filters/utils/filter-matcher-utils.test.js +236 -0
  47. package/dist/cjs/dimensional-model/filters/utils/filter-types-util.d.ts +17 -0
  48. package/dist/cjs/dimensional-model/filters/utils/filter-types-util.js +79 -0
  49. package/dist/cjs/dimensional-model/filters/utils/types.d.ts +206 -0
  50. package/dist/cjs/dimensional-model/filters/utils/types.js +99 -0
  51. package/dist/cjs/dimensional-model/interfaces.d.ts +512 -0
  52. package/dist/cjs/dimensional-model/interfaces.js +31 -0
  53. package/dist/cjs/dimensional-model/measures/factory.d.ts +920 -0
  54. package/dist/cjs/dimensional-model/measures/factory.js +1188 -0
  55. package/dist/cjs/dimensional-model/measures/factory.test.d.ts +1 -0
  56. package/dist/cjs/dimensional-model/measures/factory.test.js +481 -0
  57. package/dist/cjs/dimensional-model/measures/measures.d.ts +217 -0
  58. package/dist/cjs/dimensional-model/measures/measures.js +416 -0
  59. package/dist/cjs/dimensional-model/measures/measures.test.d.ts +1 -0
  60. package/dist/cjs/dimensional-model/measures/measures.test.js +79 -0
  61. package/dist/cjs/dimensional-model/simple-column-types.d.ts +39 -0
  62. package/dist/cjs/dimensional-model/simple-column-types.js +134 -0
  63. package/dist/cjs/dimensional-model/simple-column-types.test.d.ts +1 -0
  64. package/dist/cjs/dimensional-model/simple-column-types.test.js +85 -0
  65. package/dist/cjs/dimensional-model/types.d.ts +256 -0
  66. package/dist/cjs/dimensional-model/types.js +298 -0
  67. package/dist/cjs/dimensional-model/types.test.d.ts +1 -0
  68. package/dist/cjs/dimensional-model/types.test.js +33 -0
  69. package/dist/cjs/index.d.ts +93 -0
  70. package/dist/cjs/index.js +123 -0
  71. package/dist/cjs/interfaces.d.ts +367 -0
  72. package/dist/cjs/interfaces.js +21 -0
  73. package/dist/cjs/translation/initialize-i18n.d.ts +2 -0
  74. package/dist/cjs/translation/initialize-i18n.js +14 -0
  75. package/dist/cjs/translation/resources/en.d.ts +28 -0
  76. package/dist/cjs/translation/resources/en.js +30 -0
  77. package/dist/cjs/translation/resources/index.d.ts +53 -0
  78. package/dist/cjs/translation/resources/index.js +10 -0
  79. package/dist/cjs/translation/resources/uk.d.ts +5 -0
  80. package/dist/cjs/translation/resources/uk.js +30 -0
  81. package/dist/cjs/translation/translatable-error.d.ts +5 -0
  82. package/dist/cjs/translation/translatable-error.js +15 -0
  83. package/dist/cjs/utils.d.ts +37 -0
  84. package/dist/cjs/utils.js +105 -0
  85. package/dist/cjs/utils.test.d.ts +1 -0
  86. package/dist/cjs/utils.test.js +158 -0
  87. package/dist/dimensional-model/analytics/factory.js +6 -4
  88. package/dist/dimensional-model/filters/factory.d.ts +81 -42
  89. package/dist/dimensional-model/filters/factory.js +125 -87
  90. package/dist/dimensional-model/filters/filters.d.ts +58 -13
  91. package/dist/dimensional-model/filters/filters.js +117 -27
  92. package/dist/dimensional-model/filters/utils/condition-filter-util.d.ts +4 -2
  93. package/dist/dimensional-model/filters/utils/condition-filter-util.js +30 -26
  94. package/dist/dimensional-model/filters/utils/filter-code-util.js +5 -1
  95. package/dist/dimensional-model/filters/utils/filter-from-jaql-util.d.ts +26 -11
  96. package/dist/dimensional-model/filters/utils/filter-from-jaql-util.js +58 -27
  97. package/dist/dimensional-model/filters/utils/filter-types-util.js +3 -3
  98. package/dist/dimensional-model/filters/utils/types.d.ts +6 -0
  99. package/package.json +18 -9
@@ -73,6 +73,8 @@ export declare const FilterTypes: {
73
73
  numeric: string;
74
74
  date: string;
75
75
  relativeDate: string;
76
+ cascading: string;
77
+ advanced: string;
76
78
  };
77
79
  /**
78
80
  * base implementation for filter classes
@@ -92,13 +94,15 @@ declare abstract class AbstractFilter extends DimensionalElement implements Filt
92
94
  * Global filter identifier
93
95
  */
94
96
  readonly guid: string;
97
+ private _disabled;
95
98
  /**
96
99
  * Boolean flag whether the filter is disabled
97
100
  *
98
101
  * @internal
99
102
  */
100
- disabled: boolean;
101
- constructor(att: Attribute, filterType: string);
103
+ get disabled(): boolean;
104
+ set disabled(value: boolean);
105
+ constructor(att: Attribute, filterType: string, guid?: string);
102
106
  get name(): string;
103
107
  /**
104
108
  * Gets JAQL representing this Filter instance
@@ -123,6 +127,7 @@ declare abstract class AbstractFilter extends DimensionalElement implements Filt
123
127
  */
124
128
  jaql(nested?: boolean): any;
125
129
  static checkAttributeSupport(attribute: Attribute): void;
130
+ static disabledJaql(nested?: boolean): any;
126
131
  }
127
132
  /**
128
133
  * @internal
@@ -130,7 +135,7 @@ declare abstract class AbstractFilter extends DimensionalElement implements Filt
130
135
  export declare class LogicalAttributeFilter extends AbstractFilter {
131
136
  readonly filters: Filter[];
132
137
  readonly operator: string;
133
- constructor(filters: Filter[], operator: string);
138
+ constructor(filters: Filter[], operator: string, guid?: string);
134
139
  /**
135
140
  * gets the element's ID
136
141
  */
@@ -149,7 +154,9 @@ export declare class LogicalAttributeFilter extends AbstractFilter {
149
154
  */
150
155
  export declare class MembersFilter extends AbstractFilter {
151
156
  readonly members: any[];
152
- constructor(attribute: Attribute, members?: any[]);
157
+ /** @internal */
158
+ _deactivatedMembers: any[];
159
+ constructor(attribute: Attribute, members?: any[], _deactivatedMembers?: any[], guid?: string);
153
160
  /**
154
161
  * gets the element's ID
155
162
  */
@@ -163,13 +170,35 @@ export declare class MembersFilter extends AbstractFilter {
163
170
  */
164
171
  filterJaql(): any;
165
172
  }
173
+ /**
174
+ * @internal
175
+ */
176
+ export declare class CascadingFilter extends AbstractFilter {
177
+ readonly filters: Filter[];
178
+ constructor(filters: Filter[], guid?: string);
179
+ /**
180
+ * gets the element's ID
181
+ */
182
+ get id(): string;
183
+ get disabled(): boolean;
184
+ set disabled(value: boolean);
185
+ /**
186
+ * Gets a serializable representation of the element
187
+ */
188
+ serializable(): any;
189
+ /**
190
+ * Gets JAQL representing this Filter instance
191
+ */
192
+ filterJaql(): any;
193
+ jaql(nested?: boolean): any;
194
+ }
166
195
  /**
167
196
  * @internal
168
197
  */
169
198
  export declare class ExcludeFilter extends AbstractFilter {
170
199
  readonly filter: Filter;
171
200
  readonly input?: Filter;
172
- constructor(filter: Filter, input?: Filter);
201
+ constructor(filter: Filter, input?: Filter, guid?: string);
173
202
  /**
174
203
  * gets the element's ID
175
204
  */
@@ -191,7 +220,7 @@ export declare class DoubleOperatorFilter<Type> extends AbstractFilter {
191
220
  operatorB?: string;
192
221
  valueA?: Type;
193
222
  valueB?: Type;
194
- constructor(att: Attribute, filterType: string, operatorA?: string, valueA?: Type, operatorB?: string, valueB?: Type);
223
+ constructor(att: Attribute, filterType: string, operatorA?: string, valueA?: Type, operatorB?: string, valueB?: Type, guid?: string);
195
224
  /**
196
225
  * gets the element's ID
197
226
  */
@@ -210,7 +239,7 @@ export declare class DoubleOperatorFilter<Type> extends AbstractFilter {
210
239
  */
211
240
  export declare class MeasureFilter extends DoubleOperatorFilter<number> {
212
241
  measure: Measure;
213
- constructor(att: Attribute, measure: Measure, operatorA?: string, valueA?: number, operatorB?: string, valueB?: number);
242
+ constructor(att: Attribute, measure: Measure, operatorA?: string, valueA?: number, operatorB?: string, valueB?: number, guid?: string);
214
243
  /**
215
244
  * gets the element's ID
216
245
  */
@@ -228,7 +257,7 @@ export declare class RankingFilter extends AbstractFilter {
228
257
  count: number;
229
258
  operator: string;
230
259
  measure: Measure;
231
- constructor(att: Attribute, measure: Measure, operator: string, count: number);
260
+ constructor(att: Attribute, measure: Measure, operator: string, count: number, guid?: string);
232
261
  /**
233
262
  * gets the element's ID
234
263
  */
@@ -246,19 +275,19 @@ export declare class RankingFilter extends AbstractFilter {
246
275
  * @internal
247
276
  */
248
277
  export declare class NumericFilter extends DoubleOperatorFilter<number> {
249
- constructor(att: Attribute, operatorA?: string, valueA?: number, operatorB?: string, valueB?: number);
278
+ constructor(att: Attribute, operatorA?: string, valueA?: number, operatorB?: string, valueB?: number, guid?: string);
250
279
  }
251
280
  /**
252
281
  * @internal
253
282
  */
254
283
  export declare class TextFilter extends DoubleOperatorFilter<string> {
255
- constructor(att: Attribute, operator: string, value: string);
284
+ constructor(att: Attribute, operator: string, value: string, guid?: string);
256
285
  }
257
286
  /**
258
287
  * @internal
259
288
  */
260
289
  export declare class DateRangeFilter extends DoubleOperatorFilter<Date | string> {
261
- constructor(l: LevelAttribute, valueFrom?: Date | string, valueTo?: Date | string);
290
+ constructor(l: LevelAttribute, valueFrom?: Date | string, valueTo?: Date | string, guid?: string);
262
291
  get level(): LevelAttribute;
263
292
  get from(): string;
264
293
  get to(): string;
@@ -275,7 +304,7 @@ export declare class RelativeDateFilter extends AbstractFilter {
275
304
  readonly count: number;
276
305
  readonly operator: string;
277
306
  readonly anchor?: Date | string;
278
- constructor(l: LevelAttribute, offset: number, count: number, operator?: string, anchor?: Date | string);
307
+ constructor(l: LevelAttribute, offset: number, count: number, operator?: string, anchor?: Date | string, guid?: string);
279
308
  get level(): LevelAttribute;
280
309
  /**
281
310
  * gets the element's ID
@@ -292,7 +321,23 @@ export declare class RelativeDateFilter extends AbstractFilter {
292
321
  filterJaql(): any;
293
322
  }
294
323
  /**
295
- * @param json
324
+ * @internal
325
+ */
326
+ export declare class CustomFilter extends AbstractFilter {
327
+ readonly jaqlExpression: any;
328
+ constructor(att: Attribute, jaql: any, guid?: string);
329
+ /**
330
+ * gets the element's ID
331
+ */
332
+ get id(): string;
333
+ /**
334
+ * Gets JAQL representing this Filter instance
335
+ *
336
+ */
337
+ filterJaql(): any;
338
+ }
339
+ /**
340
+ * @param json - Filter JSON representation
296
341
  * @internal
297
342
  */
298
343
  export declare function createFilter(json: any): Filter;
@@ -85,6 +85,8 @@ export const FilterTypes = {
85
85
  numeric: 'numeric',
86
86
  date: 'date',
87
87
  relativeDate: 'relativeDate',
88
+ cascading: 'cascading',
89
+ advanced: 'advanced',
88
90
  };
89
91
  // CLASSES
90
92
  /**
@@ -93,14 +95,25 @@ export const FilterTypes = {
93
95
  * @internal
94
96
  */
95
97
  class AbstractFilter extends DimensionalElement {
96
- constructor(att, filterType) {
98
+ constructor(att, filterType, guid) {
97
99
  super('filter', MetadataTypes.Filter);
98
100
  this.filterType = filterType;
99
101
  AbstractFilter.checkAttributeSupport(att);
100
102
  this.attribute = att;
101
- this.guid = guidFast(13);
103
+ this.guid = guid || guidFast(13);
102
104
  this.disabled = false;
103
105
  }
106
+ /**
107
+ * Boolean flag whether the filter is disabled
108
+ *
109
+ * @internal
110
+ */
111
+ get disabled() {
112
+ return this._disabled;
113
+ }
114
+ set disabled(value) {
115
+ this._disabled = value;
116
+ }
104
117
  get name() {
105
118
  return hash(this.jaql());
106
119
  }
@@ -119,9 +132,8 @@ class AbstractFilter extends DimensionalElement {
119
132
  * @param nested - defines whether the JAQL is nested within parent JAQL statement or a root JAQL element
120
133
  */
121
134
  jaql(nested) {
122
- // if the filter is disabled, return empty filter JAQL
123
135
  if (this.disabled) {
124
- return nested ? { filter: {} } : { jaql: { filter: {} } };
136
+ return AbstractFilter.disabledJaql(nested);
125
137
  }
126
138
  const result = this.attribute.jaql(false);
127
139
  const level = this.attribute;
@@ -147,13 +159,16 @@ class AbstractFilter extends DimensionalElement {
147
159
  throw new TranslatableError('errors.filter.unsupportedDatetimeLevel');
148
160
  }
149
161
  }
162
+ static disabledJaql(nested) {
163
+ return nested ? { filter: {} } : { jaql: { filter: {} } };
164
+ }
150
165
  }
151
166
  /**
152
167
  * @internal
153
168
  */
154
169
  export class LogicalAttributeFilter extends AbstractFilter {
155
- constructor(filters, operator) {
156
- super(filters[0].attribute, FilterTypes.logicalAttribute);
170
+ constructor(filters, operator, guid) {
171
+ super(filters[0].attribute, FilterTypes.logicalAttribute, guid);
157
172
  this.operator = operator;
158
173
  this.filters = filters;
159
174
  }
@@ -185,9 +200,10 @@ export class LogicalAttributeFilter extends AbstractFilter {
185
200
  * @internal
186
201
  */
187
202
  export class MembersFilter extends AbstractFilter {
188
- constructor(attribute, members) {
189
- super(attribute, FilterTypes.members);
203
+ constructor(attribute, members, _deactivatedMembers, guid) {
204
+ super(attribute, FilterTypes.members, guid);
190
205
  this.members = members !== null && members !== void 0 ? members : [];
206
+ this._deactivatedMembers = _deactivatedMembers !== null && _deactivatedMembers !== void 0 ? _deactivatedMembers : [];
191
207
  if (this.members.filter((m) => m === null || m === undefined).length > 0) {
192
208
  throw new TranslatableError('errors.filter.membersFilterNullMember', {
193
209
  attributeId: attribute.id,
@@ -217,12 +233,63 @@ export class MembersFilter extends AbstractFilter {
217
233
  };
218
234
  }
219
235
  }
236
+ /**
237
+ * @internal
238
+ */
239
+ export class CascadingFilter extends AbstractFilter {
240
+ constructor(filters, guid) {
241
+ super(filters[0].attribute, FilterTypes.cascading, guid);
242
+ this.filters = filters;
243
+ }
244
+ /**
245
+ * gets the element's ID
246
+ */
247
+ get id() {
248
+ return `${this.filterType}_${this.filters.map((f) => f.id).join()}`;
249
+ }
250
+ get disabled() {
251
+ return super.disabled;
252
+ }
253
+ set disabled(value) {
254
+ super.disabled = value;
255
+ if (this.filters) {
256
+ this.filters.forEach((filter) => {
257
+ filter.disabled = value;
258
+ });
259
+ }
260
+ }
261
+ /**
262
+ * Gets a serializable representation of the element
263
+ */
264
+ serializable() {
265
+ const result = super.serializable();
266
+ result.filters = this.filters.map((f) => f.serializable());
267
+ return result;
268
+ }
269
+ /**
270
+ * Gets JAQL representing this Filter instance
271
+ */
272
+ filterJaql() {
273
+ // return empty object as jaql is handled by jaql() method
274
+ return {};
275
+ }
276
+ jaql(nested) {
277
+ if (this.disabled) {
278
+ return AbstractFilter.disabledJaql(nested);
279
+ }
280
+ // return jaql of all level filters treated as scope filters
281
+ return this.filters.map((f) => {
282
+ f.isScope = true;
283
+ return f.jaql(nested);
284
+ });
285
+ }
286
+ }
220
287
  /**
221
288
  * @internal
222
289
  */
223
290
  export class ExcludeFilter extends AbstractFilter {
224
- constructor(filter, input) {
225
- super(filter.attribute, FilterTypes.exclude);
291
+ constructor(filter, input, guid) {
292
+ super(filter.attribute, FilterTypes.exclude, guid);
226
293
  this.input = input;
227
294
  this.filter = filter;
228
295
  }
@@ -267,8 +334,8 @@ export class ExcludeFilter extends AbstractFilter {
267
334
  * @internal
268
335
  */
269
336
  export class DoubleOperatorFilter extends AbstractFilter {
270
- constructor(att, filterType, operatorA, valueA, operatorB, valueB) {
271
- super(att, filterType);
337
+ constructor(att, filterType, operatorA, valueA, operatorB, valueB, guid) {
338
+ super(att, filterType, guid);
272
339
  if (operatorA && valueA !== undefined) {
273
340
  this.valueA = valueA;
274
341
  this.operatorA = operatorA;
@@ -328,8 +395,8 @@ export class DoubleOperatorFilter extends AbstractFilter {
328
395
  * @internal
329
396
  */
330
397
  export class MeasureFilter extends DoubleOperatorFilter {
331
- constructor(att, measure, operatorA, valueA, operatorB, valueB) {
332
- super(att, FilterTypes.measure, operatorA, valueA, operatorB, valueB);
398
+ constructor(att, measure, operatorA, valueA, operatorB, valueB, guid) {
399
+ super(att, FilterTypes.measure, operatorA, valueA, operatorB, valueB, guid);
333
400
  this.measure = measure;
334
401
  }
335
402
  /**
@@ -354,9 +421,8 @@ export class MeasureFilter extends DoubleOperatorFilter {
354
421
  return result;
355
422
  }
356
423
  jaql(nested) {
357
- // if the filter is disabled, return empty filter JAQL
358
424
  if (this.disabled) {
359
- return nested ? { filter: {} } : { jaql: { filter: {} } };
425
+ return AbstractFilter.disabledJaql(nested);
360
426
  }
361
427
  const result = super.jaql(nested);
362
428
  if (this.measure instanceof DimensionalBaseMeasure) {
@@ -371,8 +437,8 @@ export class MeasureFilter extends DoubleOperatorFilter {
371
437
  * @internal
372
438
  */
373
439
  export class RankingFilter extends AbstractFilter {
374
- constructor(att, measure, operator, count) {
375
- super(att, FilterTypes.ranking);
440
+ constructor(att, measure, operator, count, guid) {
441
+ super(att, FilterTypes.ranking, guid);
376
442
  this.count = count;
377
443
  this.operator = operator;
378
444
  this.measure = measure;
@@ -407,24 +473,24 @@ export class RankingFilter extends AbstractFilter {
407
473
  * @internal
408
474
  */
409
475
  export class NumericFilter extends DoubleOperatorFilter {
410
- constructor(att, operatorA, valueA, operatorB, valueB) {
411
- super(att, FilterTypes.numeric, operatorA, valueA, operatorB, valueB);
476
+ constructor(att, operatorA, valueA, operatorB, valueB, guid) {
477
+ super(att, FilterTypes.numeric, operatorA, valueA, operatorB, valueB, guid);
412
478
  }
413
479
  }
414
480
  /**
415
481
  * @internal
416
482
  */
417
483
  export class TextFilter extends DoubleOperatorFilter {
418
- constructor(att, operator, value) {
419
- super(att, FilterTypes.text, operator, value);
484
+ constructor(att, operator, value, guid) {
485
+ super(att, FilterTypes.text, operator, value, undefined, undefined, guid);
420
486
  }
421
487
  }
422
488
  /**
423
489
  * @internal
424
490
  */
425
491
  export class DateRangeFilter extends DoubleOperatorFilter {
426
- constructor(l, valueFrom, valueTo) {
427
- super(l, FilterTypes.date, DateOperators.From, valueFrom, DateOperators.To, valueTo);
492
+ constructor(l, valueFrom, valueTo, guid) {
493
+ super(l, FilterTypes.date, DateOperators.From, valueFrom, DateOperators.To, valueTo, guid);
428
494
  if (typeof valueFrom === 'object') {
429
495
  this.valueA = valueFrom.toISOString();
430
496
  }
@@ -452,8 +518,8 @@ export class DateRangeFilter extends DoubleOperatorFilter {
452
518
  * @internal
453
519
  */
454
520
  export class RelativeDateFilter extends AbstractFilter {
455
- constructor(l, offset, count, operator, anchor) {
456
- super(l, FilterTypes.relativeDate);
521
+ constructor(l, offset, count, operator, anchor, guid) {
522
+ super(l, FilterTypes.relativeDate, guid);
457
523
  if (!operator) {
458
524
  operator = DateOperators.Next;
459
525
  }
@@ -515,7 +581,31 @@ export class RelativeDateFilter extends AbstractFilter {
515
581
  }
516
582
  }
517
583
  /**
518
- * @param json
584
+ * @internal
585
+ */
586
+ export class CustomFilter extends AbstractFilter {
587
+ constructor(att, jaql, guid) {
588
+ super(att, FilterTypes.advanced, guid);
589
+ // remove filterType from jaql as it is not needed
590
+ delete jaql.filterType;
591
+ this.jaqlExpression = jaql;
592
+ }
593
+ /**
594
+ * gets the element's ID
595
+ */
596
+ get id() {
597
+ return `custom_${this.attribute.id}_${this.guid}`;
598
+ }
599
+ /**
600
+ * Gets JAQL representing this Filter instance
601
+ *
602
+ */
603
+ filterJaql() {
604
+ return this.jaqlExpression;
605
+ }
606
+ }
607
+ /**
608
+ * @param json - Filter JSON representation
519
609
  * @internal
520
610
  */
521
611
  export function createFilter(json) {
@@ -6,14 +6,16 @@ export declare const getSelectedConditionOption: (filter: ConditionFilterJaql) =
6
6
  *
7
7
  * @param attribute - Provided attribute
8
8
  * @param conditionFilterJaql - Condition filter JAQL object
9
+ * @param guid - Optional GUID for the filter
9
10
  * @returns attribute filter
10
11
  */
11
- export declare const createAttributeFilterFromConditionFilterJaql: (attribute: Attribute, conditionFilterJaql: ConditionFilterJaql) => Filter;
12
+ export declare const createAttributeFilterFromConditionFilterJaql: (attribute: Attribute, conditionFilterJaql: ConditionFilterJaql, guid?: string) => Filter;
12
13
  /**
13
14
  * Creates a measure filter from the provided measure and condition filter JAQL object
14
15
  *
15
16
  * @param measure - Provided measure
16
17
  * @param conditionFilterJaql - Condition filter JAQL object
18
+ * @param guid - Optional GUID for the filter
17
19
  * @returns measure filter
18
20
  */
19
- export declare const createMeasureFilterFromConditionFilterJaql: (measure: BaseMeasure, conditionFilterJaql: ConditionFilterJaql) => Filter;
21
+ export declare const createMeasureFilterFromConditionFilterJaql: (measure: BaseMeasure, conditionFilterJaql: ConditionFilterJaql, guid?: string) => Filter;
@@ -77,56 +77,59 @@ export const getSelectedConditionOption = (filter) => {
77
77
  *
78
78
  * @param attribute - Provided attribute
79
79
  * @param conditionFilterJaql - Condition filter JAQL object
80
+ * @param guid - Optional GUID for the filter
80
81
  * @returns attribute filter
81
82
  */
82
- export const createAttributeFilterFromConditionFilterJaql = (attribute, conditionFilterJaql) => {
83
- var _a, _b;
83
+ export const createAttributeFilterFromConditionFilterJaql = (attribute, conditionFilterJaql, guid) => {
84
+ var _a, _b, _c;
84
85
  const conditionType = getSelectedConditionOption(conditionFilterJaql);
85
86
  switch (conditionType) {
86
87
  case ConditionFilterType.BOTTOM:
87
88
  if (conditionFilterJaql.by && 'agg' in conditionFilterJaql.by) {
88
- return withComposeCode(filterFactory.bottomRanking)(attribute, createMeasureFromRankingFilterJaql(conditionFilterJaql.by), conditionFilterJaql[ConditionFilterType.BOTTOM]);
89
+ return withComposeCode(filterFactory.bottomRanking)(attribute, createMeasureFromRankingFilterJaql(conditionFilterJaql.by), conditionFilterJaql[ConditionFilterType.BOTTOM], guid);
89
90
  }
90
91
  break;
91
92
  case ConditionFilterType.EQUALS:
92
- return withComposeCode(filterFactory.equals)(attribute, conditionFilterJaql[ConditionFilterType.EQUALS]);
93
+ return withComposeCode(filterFactory.equals)(attribute, conditionFilterJaql[ConditionFilterType.EQUALS], guid);
93
94
  case ConditionFilterType.GREATER_THAN:
94
- return withComposeCode(filterFactory.greaterThan)(attribute, conditionFilterJaql[ConditionFilterType.GREATER_THAN]);
95
+ return withComposeCode(filterFactory.greaterThan)(attribute, conditionFilterJaql[ConditionFilterType.GREATER_THAN], guid);
95
96
  case ConditionFilterType.GREATER_THAN_OR_EQUAL:
96
- return withComposeCode(filterFactory.greaterThanOrEqual)(attribute, conditionFilterJaql[ConditionFilterType.GREATER_THAN_OR_EQUAL]);
97
+ return withComposeCode(filterFactory.greaterThanOrEqual)(attribute, conditionFilterJaql[ConditionFilterType.GREATER_THAN_OR_EQUAL], guid);
97
98
  case ConditionFilterType.TOP:
98
99
  if (conditionFilterJaql.by) {
99
- return withComposeCode(filterFactory.topRanking)(attribute, createMeasureFromRankingFilterJaql(conditionFilterJaql.by), conditionFilterJaql[ConditionFilterType.TOP]);
100
+ return withComposeCode(filterFactory.topRanking)(attribute, createMeasureFromRankingFilterJaql(conditionFilterJaql.by), conditionFilterJaql[ConditionFilterType.TOP], guid);
100
101
  }
101
102
  break;
102
103
  case ConditionFilterType.STARTS_WITH:
103
- return withComposeCode(filterFactory.startsWith)(attribute, conditionFilterJaql[ConditionFilterType.STARTS_WITH]);
104
+ return withComposeCode(filterFactory.startsWith)(attribute, conditionFilterJaql[ConditionFilterType.STARTS_WITH], guid);
104
105
  case ConditionFilterType.DOESNT_START_WITH:
105
- return withComposeCode(filterFactory.doesntStartWith)(attribute, conditionFilterJaql[ConditionFilterType.DOESNT_START_WITH]);
106
+ return withComposeCode(filterFactory.doesntStartWith)(attribute, conditionFilterJaql[ConditionFilterType.DOESNT_START_WITH], guid);
106
107
  case ConditionFilterType.ENDS_WITH:
107
- return withComposeCode(filterFactory.endsWith)(attribute, conditionFilterJaql[ConditionFilterType.ENDS_WITH]);
108
+ return withComposeCode(filterFactory.endsWith)(attribute, conditionFilterJaql[ConditionFilterType.ENDS_WITH], guid);
108
109
  case ConditionFilterType.DOESNT_END_WITH:
109
- return withComposeCode(filterFactory.doesntEndWith)(attribute, conditionFilterJaql[ConditionFilterType.DOESNT_END_WITH]);
110
+ return withComposeCode(filterFactory.doesntEndWith)(attribute, conditionFilterJaql[ConditionFilterType.DOESNT_END_WITH], guid);
110
111
  case ConditionFilterType.CONTAINS:
111
- return withComposeCode(filterFactory.contains)(attribute, conditionFilterJaql[ConditionFilterType.CONTAINS]);
112
+ return withComposeCode(filterFactory.contains)(attribute, conditionFilterJaql[ConditionFilterType.CONTAINS], guid);
112
113
  case ConditionFilterType.DOESNT_CONTAIN:
113
- return withComposeCode(filterFactory.doesntContain)(attribute, conditionFilterJaql[ConditionFilterType.DOESNT_CONTAIN]);
114
+ return withComposeCode(filterFactory.doesntContain)(attribute, conditionFilterJaql[ConditionFilterType.DOESNT_CONTAIN], guid);
114
115
  case ConditionFilterType.LESS_THAN:
115
- return withComposeCode(filterFactory.lessThan)(attribute, conditionFilterJaql[ConditionFilterType.LESS_THAN]);
116
+ return withComposeCode(filterFactory.lessThan)(attribute, conditionFilterJaql[ConditionFilterType.LESS_THAN], guid);
116
117
  case ConditionFilterType.LESS_THAN_OR_EQUAL:
117
- return withComposeCode(filterFactory.lessThanOrEqual)(attribute, conditionFilterJaql[ConditionFilterType.LESS_THAN_OR_EQUAL]);
118
+ return withComposeCode(filterFactory.lessThanOrEqual)(attribute, conditionFilterJaql[ConditionFilterType.LESS_THAN_OR_EQUAL], guid);
118
119
  case ConditionFilterType.BETWEEN:
119
- return withComposeCode(filterFactory.between)(attribute, conditionFilterJaql.from, conditionFilterJaql.to);
120
+ return withComposeCode(filterFactory.between)(attribute, conditionFilterJaql.from, conditionFilterJaql.to, guid);
120
121
  case ConditionFilterType.IS_NOT_BETWEEN:
121
- return withComposeCode(filterFactory.exclude)(withComposeCode(filterFactory.between)(attribute, (_a = conditionFilterJaql.exclude) === null || _a === void 0 ? void 0 : _a.from, (_b = conditionFilterJaql.exclude) === null || _b === void 0 ? void 0 : _b.to));
122
+ return withComposeCode(filterFactory.exclude)(withComposeCode(filterFactory.between)(attribute, (_a = conditionFilterJaql.exclude) === null || _a === void 0 ? void 0 : _a.from, (_b = conditionFilterJaql.exclude) === null || _b === void 0 ? void 0 : _b.to, guid), undefined, guid);
122
123
  case ConditionFilterType.MULTIPLE_CONDITION:
123
124
  if (conditionFilterJaql.and) {
124
- return withComposeCode(filterFactory.intersection)(conditionFilterJaql.and.map((c) => createAttributeFilterFromConditionFilterJaql(attribute, c)));
125
+ return withComposeCode(filterFactory.intersection)(conditionFilterJaql.and.map((c) => createAttributeFilterFromConditionFilterJaql(attribute, c, guid)), guid);
125
126
  }
126
127
  if (conditionFilterJaql.or) {
127
- return withComposeCode(filterFactory.union)(conditionFilterJaql.or.map((c) => createAttributeFilterFromConditionFilterJaql(attribute, c)));
128
+ return withComposeCode(filterFactory.union)(conditionFilterJaql.or.map((c) => createAttributeFilterFromConditionFilterJaql(attribute, c, guid)), guid);
128
129
  }
129
130
  break;
131
+ case ConditionFilterType.IS_NOT:
132
+ return withComposeCode(filterFactory.exclude)(withComposeCode(filterFactory.members)(attribute, ((_c = conditionFilterJaql.exclude) === null || _c === void 0 ? void 0 : _c.members) || [], undefined, guid), undefined, guid);
130
133
  case ConditionFilterType.AFTER:
131
134
  case ConditionFilterType.BEFORE:
132
135
  case ConditionFilterType.IS_EMPTY:
@@ -141,23 +144,24 @@ export const createAttributeFilterFromConditionFilterJaql = (attribute, conditio
141
144
  *
142
145
  * @param measure - Provided measure
143
146
  * @param conditionFilterJaql - Condition filter JAQL object
147
+ * @param guid - Optional GUID for the filter
144
148
  * @returns measure filter
145
149
  */
146
- export const createMeasureFilterFromConditionFilterJaql = (measure, conditionFilterJaql) => {
150
+ export const createMeasureFilterFromConditionFilterJaql = (measure, conditionFilterJaql, guid) => {
147
151
  const conditionType = getSelectedConditionOption(conditionFilterJaql);
148
152
  switch (conditionType) {
149
153
  case ConditionFilterType.EQUALS:
150
- return withComposeCode(filterFactory.measureEquals)(measure, conditionFilterJaql[ConditionFilterType.EQUALS]);
154
+ return withComposeCode(filterFactory.measureEquals)(measure, conditionFilterJaql[ConditionFilterType.EQUALS], guid);
151
155
  case ConditionFilterType.GREATER_THAN:
152
- return withComposeCode(filterFactory.measureGreaterThan)(measure, conditionFilterJaql[ConditionFilterType.GREATER_THAN]);
156
+ return withComposeCode(filterFactory.measureGreaterThan)(measure, conditionFilterJaql[ConditionFilterType.GREATER_THAN], guid);
153
157
  case ConditionFilterType.GREATER_THAN_OR_EQUAL:
154
- return withComposeCode(filterFactory.measureGreaterThanOrEqual)(measure, conditionFilterJaql[ConditionFilterType.GREATER_THAN_OR_EQUAL]);
158
+ return withComposeCode(filterFactory.measureGreaterThanOrEqual)(measure, conditionFilterJaql[ConditionFilterType.GREATER_THAN_OR_EQUAL], guid);
155
159
  case ConditionFilterType.LESS_THAN:
156
- return withComposeCode(filterFactory.measureLessThan)(measure, conditionFilterJaql[ConditionFilterType.LESS_THAN]);
160
+ return withComposeCode(filterFactory.measureLessThan)(measure, conditionFilterJaql[ConditionFilterType.LESS_THAN], guid);
157
161
  case ConditionFilterType.LESS_THAN_OR_EQUAL:
158
- return withComposeCode(filterFactory.measureLessThanOrEqual)(measure, conditionFilterJaql[ConditionFilterType.LESS_THAN_OR_EQUAL]);
162
+ return withComposeCode(filterFactory.measureLessThanOrEqual)(measure, conditionFilterJaql[ConditionFilterType.LESS_THAN_OR_EQUAL], guid);
159
163
  case ConditionFilterType.BETWEEN:
160
- return withComposeCode(filterFactory.measureBetween)(measure, conditionFilterJaql.from, conditionFilterJaql.to);
164
+ return withComposeCode(filterFactory.measureBetween)(measure, conditionFilterJaql.from, conditionFilterJaql.to, guid);
161
165
  }
162
166
  throw 'Jaql contains unsupported condition filter: ' + JSON.stringify(conditionFilterJaql);
163
167
  };
@@ -40,7 +40,11 @@ export function stringifyHelper(arg) {
40
40
  */
41
41
  export function withComposeCode(func) {
42
42
  return function (...args) {
43
- const argValues = args.map(stringifyHelper).join(', ');
43
+ const argValues = args
44
+ .map(stringifyHelper)
45
+ .join(', ')
46
+ // remove any number of trailing commas
47
+ .replace(/(,\s*)+$/, '');
44
48
  const signature = `filterFactory.${func.name}(${argValues})`;
45
49
  const filter = func(...args);
46
50
  filter.composeCode = signature;