@sisense/sdk-data 1.24.0 → 1.25.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 (42) hide show
  1. package/dist/cjs/dimensional-model/filter-relations.d.ts +9 -0
  2. package/dist/cjs/dimensional-model/filter-relations.js +18 -0
  3. package/dist/cjs/dimensional-model/filters/factory.d.ts +84 -85
  4. package/dist/cjs/dimensional-model/filters/factory.js +126 -127
  5. package/dist/cjs/dimensional-model/filters/filter-config-utils.d.ts +25 -0
  6. package/dist/cjs/dimensional-model/filters/filter-config-utils.js +49 -0
  7. package/dist/cjs/dimensional-model/filters/filters.d.ts +22 -45
  8. package/dist/cjs/dimensional-model/filters/filters.js +51 -95
  9. package/dist/cjs/dimensional-model/filters/utils/condition-filter-util.d.ts +4 -4
  10. package/dist/cjs/dimensional-model/filters/utils/condition-filter-util.js +35 -28
  11. package/dist/cjs/dimensional-model/filters/utils/filter-code-util.d.ts +9 -5
  12. package/dist/cjs/dimensional-model/filters/utils/filter-code-util.js +32 -8
  13. package/dist/cjs/dimensional-model/filters/utils/filter-from-jaql-util.d.ts +17 -27
  14. package/dist/cjs/dimensional-model/filters/utils/filter-from-jaql-util.js +37 -39
  15. package/dist/cjs/dimensional-model/interfaces.d.ts +113 -15
  16. package/dist/cjs/dimensional-model/types.d.ts +11 -11
  17. package/dist/cjs/index.d.ts +2 -0
  18. package/dist/cjs/index.js +2 -0
  19. package/dist/cjs/utils.d.ts +5 -3
  20. package/dist/cjs/utils.js +33 -9
  21. package/dist/dimensional-model/filter-relations.d.ts +9 -0
  22. package/dist/dimensional-model/filter-relations.js +14 -0
  23. package/dist/dimensional-model/filters/factory.d.ts +84 -85
  24. package/dist/dimensional-model/filters/factory.js +126 -127
  25. package/dist/dimensional-model/filters/filter-config-utils.d.ts +25 -0
  26. package/dist/dimensional-model/filters/filter-config-utils.js +39 -0
  27. package/dist/dimensional-model/filters/filters.d.ts +22 -45
  28. package/dist/dimensional-model/filters/filters.js +51 -95
  29. package/dist/dimensional-model/filters/utils/condition-filter-util.d.ts +4 -4
  30. package/dist/dimensional-model/filters/utils/condition-filter-util.js +35 -28
  31. package/dist/dimensional-model/filters/utils/filter-code-util.d.ts +9 -5
  32. package/dist/dimensional-model/filters/utils/filter-code-util.js +32 -8
  33. package/dist/dimensional-model/filters/utils/filter-from-jaql-util.d.ts +17 -27
  34. package/dist/dimensional-model/filters/utils/filter-from-jaql-util.js +36 -37
  35. package/dist/dimensional-model/interfaces.d.ts +113 -15
  36. package/dist/dimensional-model/types.d.ts +11 -11
  37. package/dist/index.d.ts +2 -0
  38. package/dist/index.js +2 -0
  39. package/dist/tsconfig.prod.cjs.tsbuildinfo +1 -1
  40. package/dist/utils.d.ts +5 -3
  41. package/dist/utils.js +31 -7
  42. package/package.json +3 -3
@@ -0,0 +1,39 @@
1
+ import isEqual from 'lodash-es/isEqual.js';
2
+ import { guidFast } from '../../utils.js';
3
+ /**
4
+ * Returns a default configuration for a base filter.
5
+ * @internal
6
+ */
7
+ export const getDefaultBaseFilterConfig = () => ({
8
+ guid: guidFast(13),
9
+ disabled: false,
10
+ locked: false,
11
+ });
12
+ /**
13
+ * Returns a default configuration for a members filter.
14
+ * @internal
15
+ */
16
+ export const getDefaultMembersFilterConfig = () => (Object.assign(Object.assign({}, getDefaultBaseFilterConfig()), { excludeMembers: false, enableMultiSelection: true, deactivatedMembers: [] }));
17
+ /**
18
+ * Checks whether the given configuration is a members filter configuration.
19
+ * @param config - The filter configuration.
20
+ * @returns Whether the configuration is a members filter configuration.
21
+ * @internal
22
+ */
23
+ export function isMembersFilterConfig(config) {
24
+ return 'excludeMembers' in config;
25
+ }
26
+ /**
27
+ * Simplifies the filter configuration by removing default values.
28
+ * @param config - The filter configuration.
29
+ * @returns The simplified filter configuration.
30
+ * @internal
31
+ */
32
+ export const simplifyFilterConfig = (config) => {
33
+ const defaultConfig = isMembersFilterConfig(config)
34
+ ? getDefaultMembersFilterConfig()
35
+ : getDefaultBaseFilterConfig();
36
+ // Filter out properties that match their default values
37
+ const simplifiedConfig = Object.fromEntries(Object.entries(config).filter(([key, value]) => !isEqual(value, defaultConfig[key])));
38
+ return simplifiedConfig;
39
+ };
@@ -1,4 +1,4 @@
1
- import { LevelAttribute, Attribute, Measure, Filter } from '../interfaces.js';
1
+ import { LevelAttribute, Attribute, Measure, Filter, MembersFilterConfig, CompleteMembersFilterConfig, CompleteBaseFilterConfig, BaseFilterConfig } from '../interfaces.js';
2
2
  import { DimensionalElement } from '../base.js';
3
3
  import { AnyObject } from '../types.js';
4
4
  /**
@@ -92,26 +92,10 @@ declare abstract class AbstractFilter extends DimensionalElement implements Filt
92
92
  */
93
93
  readonly filterType: string;
94
94
  /**
95
- * Global filter identifier
95
+ * Filter configuration
96
96
  */
97
- readonly guid: string;
98
- private _disabled;
99
- private _locked;
100
- /**
101
- * Boolean flag whether the filter is disabled
102
- *
103
- * @internal
104
- */
105
- get disabled(): boolean;
106
- set disabled(value: boolean);
107
- /**
108
- * Boolean flag whether the filter is locked
109
- *
110
- * @internal
111
- */
112
- get locked(): boolean;
113
- set locked(value: boolean);
114
- constructor(att: Attribute, filterType: string, guid?: string);
97
+ config: CompleteBaseFilterConfig;
98
+ constructor(att: Attribute, filterType: string, config?: BaseFilterConfig);
115
99
  get name(): string;
116
100
  /**
117
101
  * Gets JAQL representing this Filter instance
@@ -144,7 +128,7 @@ declare abstract class AbstractFilter extends DimensionalElement implements Filt
144
128
  export declare class LogicalAttributeFilter extends AbstractFilter {
145
129
  readonly filters: Filter[];
146
130
  readonly operator: string;
147
- constructor(filters: Filter[], operator: string, guid?: string);
131
+ constructor(filters: Filter[], operator: string, config?: BaseFilterConfig);
148
132
  /**
149
133
  * gets the element's ID
150
134
  */
@@ -162,16 +146,9 @@ export declare class LogicalAttributeFilter extends AbstractFilter {
162
146
  * @internal
163
147
  */
164
148
  export declare class MembersFilter extends AbstractFilter {
165
- readonly members: any[];
166
- /** @internal */
167
- excludeMembers: boolean;
168
- /** @internal */
169
- multiSelection: boolean;
170
- /** @internal */
171
- deactivatedMembers: any[];
172
- /** @internal */
173
- backgroundFilter?: Filter;
174
- constructor(attribute: Attribute, members?: any[], excludeMembers?: boolean, guid?: string, deactivatedMembers?: any[], backgroundFilter?: Filter, multiSelection?: boolean);
149
+ readonly members: string[];
150
+ config: CompleteMembersFilterConfig;
151
+ constructor(attribute: Attribute, members?: string[], config?: MembersFilterConfig);
175
152
  /**
176
153
  * gets the element's ID
177
154
  */
@@ -190,15 +167,15 @@ export declare class MembersFilter extends AbstractFilter {
190
167
  */
191
168
  export declare class CascadingFilter extends AbstractFilter {
192
169
  readonly filters: Filter[];
193
- constructor(filters: Filter[], guid?: string);
170
+ constructor(filters: Filter[], config?: BaseFilterConfig);
171
+ /**
172
+ * Propagates the parent config to all level filters
173
+ */
174
+ propagateConfig(): void;
194
175
  /**
195
176
  * gets the element's ID
196
177
  */
197
178
  get id(): string;
198
- get disabled(): boolean;
199
- set disabled(value: boolean);
200
- get locked(): boolean;
201
- set locked(value: boolean);
202
179
  /**
203
180
  * Gets a serializable representation of the element
204
181
  */
@@ -215,7 +192,7 @@ export declare class CascadingFilter extends AbstractFilter {
215
192
  export declare class ExcludeFilter extends AbstractFilter {
216
193
  readonly filter: Filter;
217
194
  readonly input?: Filter;
218
- constructor(filter: Filter, input?: Filter, guid?: string);
195
+ constructor(filter: Filter, input?: Filter, config?: BaseFilterConfig);
219
196
  /**
220
197
  * gets the element's ID
221
198
  */
@@ -237,7 +214,7 @@ export declare class DoubleOperatorFilter<Type> extends AbstractFilter {
237
214
  operatorB?: string;
238
215
  valueA?: Type;
239
216
  valueB?: Type;
240
- constructor(att: Attribute, filterType: string, operatorA?: string, valueA?: Type, operatorB?: string, valueB?: Type, guid?: string);
217
+ constructor(att: Attribute, filterType: string, operatorA?: string, valueA?: Type, operatorB?: string, valueB?: Type, config?: BaseFilterConfig);
241
218
  /**
242
219
  * gets the element's ID
243
220
  */
@@ -256,7 +233,7 @@ export declare class DoubleOperatorFilter<Type> extends AbstractFilter {
256
233
  */
257
234
  export declare class MeasureFilter extends DoubleOperatorFilter<number> {
258
235
  measure: Measure;
259
- constructor(att: Attribute, measure: Measure, operatorA?: string, valueA?: number, operatorB?: string, valueB?: number, guid?: string);
236
+ constructor(att: Attribute, measure: Measure, operatorA?: string, valueA?: number, operatorB?: string, valueB?: number, config?: BaseFilterConfig);
260
237
  /**
261
238
  * gets the element's ID
262
239
  */
@@ -274,7 +251,7 @@ export declare class RankingFilter extends AbstractFilter {
274
251
  count: number;
275
252
  operator: string;
276
253
  measure: Measure;
277
- constructor(att: Attribute, measure: Measure, operator: string, count: number, guid?: string);
254
+ constructor(att: Attribute, measure: Measure, operator: string, count: number, config?: BaseFilterConfig);
278
255
  /**
279
256
  * gets the element's ID
280
257
  */
@@ -292,19 +269,19 @@ export declare class RankingFilter extends AbstractFilter {
292
269
  * @internal
293
270
  */
294
271
  export declare class NumericFilter extends DoubleOperatorFilter<number> {
295
- constructor(att: Attribute, operatorA?: string, valueA?: number, operatorB?: string, valueB?: number, guid?: string);
272
+ constructor(att: Attribute, operatorA?: string, valueA?: number, operatorB?: string, valueB?: number, config?: BaseFilterConfig);
296
273
  }
297
274
  /**
298
275
  * @internal
299
276
  */
300
277
  export declare class TextFilter extends DoubleOperatorFilter<string> {
301
- constructor(att: Attribute, operator: string, value: string, guid?: string);
278
+ constructor(att: Attribute, operator: string, value: string, config?: BaseFilterConfig);
302
279
  }
303
280
  /**
304
281
  * @internal
305
282
  */
306
283
  export declare class DateRangeFilter extends DoubleOperatorFilter<Date | string> {
307
- constructor(l: LevelAttribute, valueFrom?: Date | string, valueTo?: Date | string, guid?: string);
284
+ constructor(l: LevelAttribute, valueFrom?: Date | string, valueTo?: Date | string, config?: BaseFilterConfig);
308
285
  get level(): LevelAttribute;
309
286
  get from(): string;
310
287
  get to(): string;
@@ -321,7 +298,7 @@ export declare class RelativeDateFilter extends AbstractFilter {
321
298
  readonly count: number;
322
299
  readonly operator: typeof DateOperators.Last | typeof DateOperators.Next;
323
300
  readonly anchor?: Date | string;
324
- constructor(l: LevelAttribute, offset: number, count: number, operator?: typeof DateOperators.Last | typeof DateOperators.Next, anchor?: Date | string, guid?: string);
301
+ constructor(l: LevelAttribute, offset: number, count: number, operator?: typeof DateOperators.Last | typeof DateOperators.Next, anchor?: Date | string, config?: BaseFilterConfig);
325
302
  get level(): LevelAttribute;
326
303
  /**
327
304
  * gets the element's ID
@@ -342,7 +319,7 @@ export declare class RelativeDateFilter extends AbstractFilter {
342
319
  */
343
320
  export declare class CustomFilter extends AbstractFilter {
344
321
  readonly jaqlExpression: any;
345
- constructor(att: Attribute, jaql: any, guid?: string);
322
+ constructor(att: Attribute, jaql: any, config?: BaseFilterConfig);
346
323
  /**
347
324
  * gets the element's ID
348
325
  */
@@ -1,18 +1,11 @@
1
- /* eslint-disable max-lines */
2
- /* eslint-disable @typescript-eslint/no-unsafe-assignment */
3
- /* eslint-disable @typescript-eslint/no-unsafe-member-access */
4
- /* eslint-disable @typescript-eslint/no-unsafe-return */
5
- /* eslint-disable @typescript-eslint/no-unsafe-call */
6
- /* eslint-disable max-params */
7
- /* eslint-disable @typescript-eslint/restrict-template-expressions */
8
- /* eslint-disable @typescript-eslint/no-unsafe-argument */
9
1
  import hash from 'hash-it';
10
2
  import { DimensionalElement } from '../base.js';
11
3
  import { DateLevels, MetadataTypes } from '../types.js';
12
4
  import { create } from '../factory.js';
13
5
  import { DimensionalBaseMeasure } from '../measures/measures.js';
14
6
  import { TranslatableError } from '../../translation/translatable-error.js';
15
- import { guidFast } from '../../utils.js';
7
+ import { getDefaultBaseFilterConfig, getDefaultMembersFilterConfig, } from './filter-config-utils.js';
8
+ import merge from 'lodash-es/merge.js';
16
9
  /**
17
10
  * Different text operators that can be used with text filters
18
11
  *
@@ -96,36 +89,12 @@ export const FilterTypes = {
96
89
  * @internal
97
90
  */
98
91
  class AbstractFilter extends DimensionalElement {
99
- constructor(att, filterType, guid) {
92
+ constructor(att, filterType, config) {
100
93
  super('filter', MetadataTypes.Filter);
101
94
  this.filterType = filterType;
102
95
  AbstractFilter.checkAttributeSupport(att);
103
96
  this.attribute = att;
104
- this.guid = guid || guidFast(13);
105
- this.disabled = false;
106
- this.locked = false;
107
- }
108
- /**
109
- * Boolean flag whether the filter is disabled
110
- *
111
- * @internal
112
- */
113
- get disabled() {
114
- return this._disabled;
115
- }
116
- set disabled(value) {
117
- this._disabled = value;
118
- }
119
- /**
120
- * Boolean flag whether the filter is locked
121
- *
122
- * @internal
123
- */
124
- get locked() {
125
- return this._locked;
126
- }
127
- set locked(value) {
128
- this._locked = value;
97
+ this.config = merge({}, getDefaultBaseFilterConfig(), config !== null && config !== void 0 ? config : {});
129
98
  }
130
99
  get name() {
131
100
  // to hexadecimal string
@@ -146,7 +115,7 @@ class AbstractFilter extends DimensionalElement {
146
115
  * @param nested - defines whether the JAQL is nested within parent JAQL statement or a root JAQL element
147
116
  */
148
117
  jaql(nested) {
149
- if (this.disabled) {
118
+ if (this.config.disabled) {
150
119
  return AbstractFilter.disabledJaql(nested);
151
120
  }
152
121
  const result = this.attribute.jaql(false);
@@ -187,8 +156,8 @@ class AbstractFilter extends DimensionalElement {
187
156
  * @internal
188
157
  */
189
158
  export class LogicalAttributeFilter extends AbstractFilter {
190
- constructor(filters, operator, guid) {
191
- super(filters[0].attribute, FilterTypes.logicalAttribute, guid);
159
+ constructor(filters, operator, config) {
160
+ super(filters[0].attribute, FilterTypes.logicalAttribute, config);
192
161
  this.operator = operator;
193
162
  this.filters = filters;
194
163
  }
@@ -220,18 +189,17 @@ export class LogicalAttributeFilter extends AbstractFilter {
220
189
  * @internal
221
190
  */
222
191
  export class MembersFilter extends AbstractFilter {
223
- constructor(attribute, members, excludeMembers, guid, deactivatedMembers, backgroundFilter, multiSelection = true) {
224
- super(attribute, FilterTypes.members, guid);
192
+ constructor(attribute, members, config) {
193
+ super(attribute, FilterTypes.members);
225
194
  this.members = members !== null && members !== void 0 ? members : [];
226
- this.excludeMembers = excludeMembers !== null && excludeMembers !== void 0 ? excludeMembers : false;
227
- this.multiSelection = multiSelection;
228
- this.deactivatedMembers = deactivatedMembers !== null && deactivatedMembers !== void 0 ? deactivatedMembers : [];
229
- this.backgroundFilter = backgroundFilter;
230
195
  if (this.members.filter((m) => m === null || m === undefined).length > 0) {
231
196
  throw new TranslatableError('errors.filter.membersFilterNullMember', {
232
197
  attributeId: attribute.id,
233
198
  });
234
199
  }
200
+ // merge default config and input config into a new object
201
+ // to avoid mutation
202
+ this.config = merge({}, getDefaultMembersFilterConfig(), config !== null && config !== void 0 ? config : {});
235
203
  }
236
204
  /**
237
205
  * gets the element's ID
@@ -245,9 +213,6 @@ export class MembersFilter extends AbstractFilter {
245
213
  serializable() {
246
214
  const result = super.serializable();
247
215
  result.members = this.members;
248
- if (this.backgroundFilter) {
249
- result.backgroundFilter = this.backgroundFilter.serializable();
250
- }
251
216
  return result;
252
217
  }
253
218
  /**
@@ -257,10 +222,12 @@ export class MembersFilter extends AbstractFilter {
257
222
  const membersFilterJaql = {
258
223
  members: this.members.map((m) => m.toString()),
259
224
  };
260
- const filterJaql = this.excludeMembers ? { exclude: membersFilterJaql } : membersFilterJaql;
261
- if (this.backgroundFilter) {
225
+ const filterJaql = this.config.excludeMembers
226
+ ? { exclude: membersFilterJaql }
227
+ : membersFilterJaql;
228
+ if (this.config.backgroundFilter) {
262
229
  return {
263
- and: [filterJaql, this.backgroundFilter.filterJaql()],
230
+ and: [filterJaql, this.config.backgroundFilter.filterJaql()],
264
231
  };
265
232
  }
266
233
  return filterJaql;
@@ -270,9 +237,20 @@ export class MembersFilter extends AbstractFilter {
270
237
  * @internal
271
238
  */
272
239
  export class CascadingFilter extends AbstractFilter {
273
- constructor(filters, guid) {
274
- super(filters[0].attribute, FilterTypes.cascading, guid);
240
+ constructor(filters, config) {
241
+ super(filters[0].attribute, FilterTypes.cascading, config);
275
242
  this.filters = filters;
243
+ this.propagateConfig();
244
+ }
245
+ /**
246
+ * Propagates the parent config to all level filters
247
+ */
248
+ propagateConfig() {
249
+ const { disabled, locked } = this.config;
250
+ this.filters.forEach((f) => {
251
+ f.config.disabled = disabled;
252
+ f.config.locked = locked;
253
+ });
276
254
  }
277
255
  /**
278
256
  * gets the element's ID
@@ -280,28 +258,6 @@ export class CascadingFilter extends AbstractFilter {
280
258
  get id() {
281
259
  return `${this.filterType}_${this.filters.map((f) => f.id).join()}`;
282
260
  }
283
- get disabled() {
284
- return super.disabled;
285
- }
286
- set disabled(value) {
287
- super.disabled = value;
288
- if (this.filters) {
289
- this.filters.forEach((filter) => {
290
- filter.disabled = value;
291
- });
292
- }
293
- }
294
- get locked() {
295
- return super.locked;
296
- }
297
- set locked(value) {
298
- super.locked = value;
299
- if (this.filters) {
300
- this.filters.forEach((filter) => {
301
- filter.locked = value;
302
- });
303
- }
304
- }
305
261
  /**
306
262
  * Gets a serializable representation of the element
307
263
  */
@@ -318,7 +274,7 @@ export class CascadingFilter extends AbstractFilter {
318
274
  return {};
319
275
  }
320
276
  jaql(nested) {
321
- if (this.disabled) {
277
+ if (this.config.disabled) {
322
278
  return AbstractFilter.disabledJaql(nested);
323
279
  }
324
280
  // return jaql of all level filters treated as scope filters
@@ -332,8 +288,8 @@ export class CascadingFilter extends AbstractFilter {
332
288
  * @internal
333
289
  */
334
290
  export class ExcludeFilter extends AbstractFilter {
335
- constructor(filter, input, guid) {
336
- super(filter.attribute, FilterTypes.exclude, guid);
291
+ constructor(filter, input, config) {
292
+ super(filter.attribute, FilterTypes.exclude, config);
337
293
  this.input = input;
338
294
  this.filter = filter;
339
295
  }
@@ -378,8 +334,8 @@ export class ExcludeFilter extends AbstractFilter {
378
334
  * @internal
379
335
  */
380
336
  export class DoubleOperatorFilter extends AbstractFilter {
381
- constructor(att, filterType, operatorA, valueA, operatorB, valueB, guid) {
382
- super(att, filterType, guid);
337
+ constructor(att, filterType, operatorA, valueA, operatorB, valueB, config) {
338
+ super(att, filterType, config);
383
339
  if (operatorA && valueA !== undefined) {
384
340
  this.valueA = valueA;
385
341
  this.operatorA = operatorA;
@@ -439,8 +395,8 @@ export class DoubleOperatorFilter extends AbstractFilter {
439
395
  * @internal
440
396
  */
441
397
  export class MeasureFilter extends DoubleOperatorFilter {
442
- constructor(att, measure, operatorA, valueA, operatorB, valueB, guid) {
443
- super(att, FilterTypes.measure, operatorA, valueA, operatorB, valueB, guid);
398
+ constructor(att, measure, operatorA, valueA, operatorB, valueB, config) {
399
+ super(att, FilterTypes.measure, operatorA, valueA, operatorB, valueB, config);
444
400
  this.measure = measure;
445
401
  }
446
402
  /**
@@ -465,7 +421,7 @@ export class MeasureFilter extends DoubleOperatorFilter {
465
421
  return result;
466
422
  }
467
423
  jaql(nested) {
468
- if (this.disabled) {
424
+ if (this.config.disabled) {
469
425
  return AbstractFilter.disabledJaql(nested);
470
426
  }
471
427
  const result = super.jaql(nested);
@@ -481,8 +437,8 @@ export class MeasureFilter extends DoubleOperatorFilter {
481
437
  * @internal
482
438
  */
483
439
  export class RankingFilter extends AbstractFilter {
484
- constructor(att, measure, operator, count, guid) {
485
- super(att, FilterTypes.ranking, guid);
440
+ constructor(att, measure, operator, count, config) {
441
+ super(att, FilterTypes.ranking, config);
486
442
  this.count = count;
487
443
  this.operator = operator;
488
444
  this.measure = measure;
@@ -517,24 +473,24 @@ export class RankingFilter extends AbstractFilter {
517
473
  * @internal
518
474
  */
519
475
  export class NumericFilter extends DoubleOperatorFilter {
520
- constructor(att, operatorA, valueA, operatorB, valueB, guid) {
521
- super(att, FilterTypes.numeric, operatorA, valueA, operatorB, valueB, guid);
476
+ constructor(att, operatorA, valueA, operatorB, valueB, config) {
477
+ super(att, FilterTypes.numeric, operatorA, valueA, operatorB, valueB, config);
522
478
  }
523
479
  }
524
480
  /**
525
481
  * @internal
526
482
  */
527
483
  export class TextFilter extends DoubleOperatorFilter {
528
- constructor(att, operator, value, guid) {
529
- super(att, FilterTypes.text, operator, value, undefined, undefined, guid);
484
+ constructor(att, operator, value, config) {
485
+ super(att, FilterTypes.text, operator, value, undefined, undefined, config);
530
486
  }
531
487
  }
532
488
  /**
533
489
  * @internal
534
490
  */
535
491
  export class DateRangeFilter extends DoubleOperatorFilter {
536
- constructor(l, valueFrom, valueTo, guid) {
537
- super(l, FilterTypes.dateRange, DateOperators.From, valueFrom, DateOperators.To, valueTo, guid);
492
+ constructor(l, valueFrom, valueTo, config) {
493
+ super(l, FilterTypes.dateRange, DateOperators.From, valueFrom, DateOperators.To, valueTo, config);
538
494
  if (typeof valueFrom === 'object') {
539
495
  this.valueA = valueFrom.toISOString();
540
496
  }
@@ -562,8 +518,8 @@ export class DateRangeFilter extends DoubleOperatorFilter {
562
518
  * @internal
563
519
  */
564
520
  export class RelativeDateFilter extends AbstractFilter {
565
- constructor(l, offset, count, operator, anchor, guid) {
566
- super(l, FilterTypes.relativeDate, guid);
521
+ constructor(l, offset, count, operator, anchor, config) {
522
+ super(l, FilterTypes.relativeDate, config);
567
523
  if (!operator) {
568
524
  operator = DateOperators.Next;
569
525
  }
@@ -628,8 +584,8 @@ export class RelativeDateFilter extends AbstractFilter {
628
584
  * @internal
629
585
  */
630
586
  export class CustomFilter extends AbstractFilter {
631
- constructor(att, jaql, guid) {
632
- super(att, FilterTypes.advanced, guid);
587
+ constructor(att, jaql, config) {
588
+ super(att, FilterTypes.advanced, config);
633
589
  // remove filterType from jaql as it is not needed
634
590
  delete jaql.filterType;
635
591
  this.jaqlExpression = jaql;
@@ -638,7 +594,7 @@ export class CustomFilter extends AbstractFilter {
638
594
  * gets the element's ID
639
595
  */
640
596
  get id() {
641
- return `custom_${this.attribute.id}_${this.guid}`;
597
+ return `custom_${this.attribute.id}_${this.config.guid}`;
642
598
  }
643
599
  /**
644
600
  * Gets JAQL representing this Filter instance
@@ -6,16 +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
+ * @param guid - GUID for the filter
10
10
  * @returns attribute filter
11
11
  */
12
- export declare const createAttributeFilterFromConditionFilterJaql: (attribute: Attribute, conditionFilterJaql: ConditionFilterJaql, guid?: string) => Filter;
12
+ export declare const createAttributeFilterFromConditionFilterJaql: (attribute: Attribute, conditionFilterJaql: ConditionFilterJaql, guid: string) => Filter;
13
13
  /**
14
14
  * Creates a measure filter from the provided measure and condition filter JAQL object
15
15
  *
16
16
  * @param measure - Provided measure
17
17
  * @param conditionFilterJaql - Condition filter JAQL object
18
- * @param guid - Optional GUID for the filter
18
+ * @param guid - GUID for the filter
19
19
  * @returns measure filter
20
20
  */
21
- export declare const createMeasureFilterFromConditionFilterJaql: (measure: BaseMeasure, conditionFilterJaql: ConditionFilterJaql, guid?: string) => Filter;
21
+ export declare const createMeasureFilterFromConditionFilterJaql: (measure: BaseMeasure, conditionFilterJaql: ConditionFilterJaql, guid: string) => Filter;
@@ -3,6 +3,7 @@ import { withComposeCode } from './filter-code-util.js';
3
3
  import * as filterFactory from '../factory.js';
4
4
  import { createMeasureFromRankingFilterJaql } from './attribute-measure-util.js';
5
5
  import { TranslatableError } from '../../../translation/translatable-error.js';
6
+ import { simplifyFilterConfig } from '../filter-config-utils.js';
6
7
  const isTopCondition = (filter) => filter.top !== undefined;
7
8
  const isBottomCondition = (filter) => filter.bottom !== undefined;
8
9
  const isExcludeCondition = (filter) => { var _a; return !!((_a = filter.exclude) === null || _a === void 0 ? void 0 : _a.members); };
@@ -78,57 +79,57 @@ export const getSelectedConditionOption = (filter) => {
78
79
  *
79
80
  * @param attribute - Provided attribute
80
81
  * @param conditionFilterJaql - Condition filter JAQL object
81
- * @param guid - Optional GUID for the filter
82
+ * @param guid - GUID for the filter
82
83
  * @returns attribute filter
83
84
  */
84
85
  export const createAttributeFilterFromConditionFilterJaql = (attribute, conditionFilterJaql, guid) => {
85
- var _a, _b, _c, _d, _e, _f;
86
+ var _a, _b, _c, _d, _e, _f, _g;
86
87
  const conditionType = getSelectedConditionOption(conditionFilterJaql);
87
88
  switch (conditionType) {
88
89
  case ConditionFilterType.BOTTOM:
89
90
  if (conditionFilterJaql.by) {
90
- return withComposeCode(filterFactory.bottomRanking)(attribute, createMeasureFromRankingFilterJaql(conditionFilterJaql.by, conditionFilterJaql.rankingMessage), conditionFilterJaql[ConditionFilterType.BOTTOM], guid);
91
+ return withComposeCode(filterFactory.bottomRanking, 'bottomRanking')(attribute, createMeasureFromRankingFilterJaql(conditionFilterJaql.by, conditionFilterJaql.rankingMessage), conditionFilterJaql[ConditionFilterType.BOTTOM], { guid });
91
92
  }
92
93
  break;
93
94
  case ConditionFilterType.EQUALS:
94
- return withComposeCode(filterFactory.equals)(attribute, conditionFilterJaql[ConditionFilterType.EQUALS], guid);
95
+ return withComposeCode(filterFactory.equals, 'equals')(attribute, conditionFilterJaql[ConditionFilterType.EQUALS], { guid });
95
96
  case ConditionFilterType.DOESNT_EQUAL:
96
- return withComposeCode(filterFactory.doesntEqual)(attribute, conditionFilterJaql[ConditionFilterType.DOESNT_EQUAL], guid);
97
+ return withComposeCode(filterFactory.doesntEqual, 'doesntEqual')(attribute, conditionFilterJaql[ConditionFilterType.DOESNT_EQUAL], { guid });
97
98
  case ConditionFilterType.GREATER_THAN:
98
- return withComposeCode(filterFactory.greaterThan)(attribute, conditionFilterJaql[ConditionFilterType.GREATER_THAN], guid);
99
+ return withComposeCode(filterFactory.greaterThan, 'greaterThan')(attribute, conditionFilterJaql[ConditionFilterType.GREATER_THAN], { guid });
99
100
  case ConditionFilterType.GREATER_THAN_OR_EQUAL:
100
- return withComposeCode(filterFactory.greaterThanOrEqual)(attribute, conditionFilterJaql[ConditionFilterType.GREATER_THAN_OR_EQUAL], guid);
101
+ return withComposeCode(filterFactory.greaterThanOrEqual, 'greaterThanOrEqual')(attribute, conditionFilterJaql[ConditionFilterType.GREATER_THAN_OR_EQUAL], { guid });
101
102
  case ConditionFilterType.TOP:
102
103
  if (conditionFilterJaql.by) {
103
- return withComposeCode(filterFactory.topRanking)(attribute, createMeasureFromRankingFilterJaql(conditionFilterJaql.by, conditionFilterJaql.rankingMessage), conditionFilterJaql[ConditionFilterType.TOP], guid);
104
+ return withComposeCode(filterFactory.topRanking, 'topRanking')(attribute, createMeasureFromRankingFilterJaql(conditionFilterJaql.by, conditionFilterJaql.rankingMessage), conditionFilterJaql[ConditionFilterType.TOP], { guid });
104
105
  }
105
106
  break;
106
107
  case ConditionFilterType.STARTS_WITH:
107
- return withComposeCode(filterFactory.startsWith)(attribute, conditionFilterJaql[ConditionFilterType.STARTS_WITH], guid);
108
+ return withComposeCode(filterFactory.startsWith, 'startsWith')(attribute, conditionFilterJaql[ConditionFilterType.STARTS_WITH], { guid });
108
109
  case ConditionFilterType.DOESNT_START_WITH:
109
- return withComposeCode(filterFactory.doesntStartWith)(attribute, conditionFilterJaql[ConditionFilterType.DOESNT_START_WITH], guid);
110
+ return withComposeCode(filterFactory.doesntStartWith, 'doesntStartWith')(attribute, conditionFilterJaql[ConditionFilterType.DOESNT_START_WITH], { guid });
110
111
  case ConditionFilterType.ENDS_WITH:
111
- return withComposeCode(filterFactory.endsWith)(attribute, conditionFilterJaql[ConditionFilterType.ENDS_WITH], guid);
112
+ return withComposeCode(filterFactory.endsWith, 'endsWith')(attribute, conditionFilterJaql[ConditionFilterType.ENDS_WITH], { guid });
112
113
  case ConditionFilterType.DOESNT_END_WITH:
113
- return withComposeCode(filterFactory.doesntEndWith)(attribute, conditionFilterJaql[ConditionFilterType.DOESNT_END_WITH], guid);
114
+ return withComposeCode(filterFactory.doesntEndWith, 'doesntEndWith')(attribute, conditionFilterJaql[ConditionFilterType.DOESNT_END_WITH], { guid });
114
115
  case ConditionFilterType.CONTAINS:
115
- return withComposeCode(filterFactory.contains)(attribute, conditionFilterJaql[ConditionFilterType.CONTAINS], guid);
116
+ return withComposeCode(filterFactory.contains, 'contains')(attribute, conditionFilterJaql[ConditionFilterType.CONTAINS], { guid });
116
117
  case ConditionFilterType.DOESNT_CONTAIN:
117
- return withComposeCode(filterFactory.doesntContain)(attribute, conditionFilterJaql[ConditionFilterType.DOESNT_CONTAIN], guid);
118
+ return withComposeCode(filterFactory.doesntContain, 'doesntContain')(attribute, conditionFilterJaql[ConditionFilterType.DOESNT_CONTAIN], { guid });
118
119
  case ConditionFilterType.LESS_THAN:
119
- return withComposeCode(filterFactory.lessThan)(attribute, conditionFilterJaql[ConditionFilterType.LESS_THAN], guid);
120
+ return withComposeCode(filterFactory.lessThan, 'lessThan')(attribute, conditionFilterJaql[ConditionFilterType.LESS_THAN], { guid });
120
121
  case ConditionFilterType.LESS_THAN_OR_EQUAL:
121
- return withComposeCode(filterFactory.lessThanOrEqual)(attribute, conditionFilterJaql[ConditionFilterType.LESS_THAN_OR_EQUAL], guid);
122
+ return withComposeCode(filterFactory.lessThanOrEqual, 'lessThanOrEqual')(attribute, conditionFilterJaql[ConditionFilterType.LESS_THAN_OR_EQUAL], { guid });
122
123
  case ConditionFilterType.BETWEEN:
123
- return withComposeCode(filterFactory.between)(attribute, conditionFilterJaql.from, conditionFilterJaql.to, guid);
124
+ return withComposeCode(filterFactory.between, 'between')(attribute, conditionFilterJaql.from, conditionFilterJaql.to, { guid });
124
125
  case ConditionFilterType.IS_NOT_BETWEEN:
125
- 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);
126
+ return withComposeCode(filterFactory.exclude, 'exclude')(withComposeCode(filterFactory.between, '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 });
126
127
  case ConditionFilterType.MULTIPLE_CONDITION:
127
128
  if (conditionFilterJaql.and) {
128
- return withComposeCode(filterFactory.intersection)(conditionFilterJaql.and.map((c) => createAttributeFilterFromConditionFilterJaql(attribute, c, guid)), guid);
129
+ return withComposeCode(filterFactory.intersection, 'intersection')(conditionFilterJaql.and.map((c) => createAttributeFilterFromConditionFilterJaql(attribute, c, guid)), { guid });
129
130
  }
130
131
  if (conditionFilterJaql.or) {
131
- return withComposeCode(filterFactory.union)(conditionFilterJaql.or.map((c) => createAttributeFilterFromConditionFilterJaql(attribute, c, guid)), guid);
132
+ return withComposeCode(filterFactory.union, 'union')(conditionFilterJaql.or.map((c) => createAttributeFilterFromConditionFilterJaql(attribute, c, guid)), { guid });
132
133
  }
133
134
  break;
134
135
  case ConditionFilterType.IS_NOT: {
@@ -136,7 +137,13 @@ export const createAttributeFilterFromConditionFilterJaql = (attribute, conditio
136
137
  [];
137
138
  const selectedMembers = ((_f = (_e = conditionFilterJaql.exclude) === null || _e === void 0 ? void 0 : _e.members) === null || _f === void 0 ? void 0 : _f.filter((member) => !deactivatedMembers.includes(member))) || [];
138
139
  // use members filter with exclude instead of exclude filter
139
- return withComposeCode(filterFactory.members)(attribute, selectedMembers, true, guid, deactivatedMembers, undefined, conditionFilterJaql.multiSelection);
140
+ const config = simplifyFilterConfig({
141
+ guid,
142
+ excludeMembers: true,
143
+ enableMultiSelection: (_g = conditionFilterJaql.multiSelection) !== null && _g !== void 0 ? _g : true,
144
+ deactivatedMembers,
145
+ });
146
+ return withComposeCode(filterFactory.members, 'members')(attribute, selectedMembers, config);
140
147
  }
141
148
  case ConditionFilterType.AFTER:
142
149
  case ConditionFilterType.BEFORE:
@@ -154,24 +161,24 @@ export const createAttributeFilterFromConditionFilterJaql = (attribute, conditio
154
161
  *
155
162
  * @param measure - Provided measure
156
163
  * @param conditionFilterJaql - Condition filter JAQL object
157
- * @param guid - Optional GUID for the filter
164
+ * @param guid - GUID for the filter
158
165
  * @returns measure filter
159
166
  */
160
167
  export const createMeasureFilterFromConditionFilterJaql = (measure, conditionFilterJaql, guid) => {
161
168
  const conditionType = getSelectedConditionOption(conditionFilterJaql);
162
169
  switch (conditionType) {
163
170
  case ConditionFilterType.EQUALS:
164
- return withComposeCode(filterFactory.measureEquals)(measure, conditionFilterJaql[ConditionFilterType.EQUALS], guid);
171
+ return withComposeCode(filterFactory.measureEquals, 'measureEquals')(measure, conditionFilterJaql[ConditionFilterType.EQUALS], { guid });
165
172
  case ConditionFilterType.GREATER_THAN:
166
- return withComposeCode(filterFactory.measureGreaterThan)(measure, conditionFilterJaql[ConditionFilterType.GREATER_THAN], guid);
173
+ return withComposeCode(filterFactory.measureGreaterThan, 'measureGreaterThan')(measure, conditionFilterJaql[ConditionFilterType.GREATER_THAN], { guid });
167
174
  case ConditionFilterType.GREATER_THAN_OR_EQUAL:
168
- return withComposeCode(filterFactory.measureGreaterThanOrEqual)(measure, conditionFilterJaql[ConditionFilterType.GREATER_THAN_OR_EQUAL], guid);
175
+ return withComposeCode(filterFactory.measureGreaterThanOrEqual, 'measureGreaterThanOrEqual')(measure, conditionFilterJaql[ConditionFilterType.GREATER_THAN_OR_EQUAL], { guid });
169
176
  case ConditionFilterType.LESS_THAN:
170
- return withComposeCode(filterFactory.measureLessThan)(measure, conditionFilterJaql[ConditionFilterType.LESS_THAN], guid);
177
+ return withComposeCode(filterFactory.measureLessThan, 'measureLessThan')(measure, conditionFilterJaql[ConditionFilterType.LESS_THAN], { guid });
171
178
  case ConditionFilterType.LESS_THAN_OR_EQUAL:
172
- return withComposeCode(filterFactory.measureLessThanOrEqual)(measure, conditionFilterJaql[ConditionFilterType.LESS_THAN_OR_EQUAL], guid);
179
+ return withComposeCode(filterFactory.measureLessThanOrEqual, 'measureLessThanOrEqual')(measure, conditionFilterJaql[ConditionFilterType.LESS_THAN_OR_EQUAL], { guid });
173
180
  case ConditionFilterType.BETWEEN:
174
- return withComposeCode(filterFactory.measureBetween)(measure, conditionFilterJaql.from, conditionFilterJaql.to, guid);
181
+ return withComposeCode(filterFactory.measureBetween, 'measureBetween')(measure, conditionFilterJaql.from, conditionFilterJaql.to, { guid });
175
182
  }
176
183
  throw new TranslatableError('errors.filter.unsupportedConditionFilter', {
177
184
  filter: JSON.stringify(conditionFilterJaql),