@sisense/sdk-data 1.10.1 → 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/attributes.d.ts +1 -0
- package/dist/dimensional-model/attributes.js +31 -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 +40 -12
- package/dist/dimensional-model/filters/filters.js +75 -24
- package/dist/dimensional-model/filters/utils/attribute-measure-util.d.ts +2 -2
- package/dist/dimensional-model/filters/utils/attribute-measure-util.js +6 -3
- package/dist/dimensional-model/filters/utils/condition-filter-util.d.ts +4 -2
- package/dist/dimensional-model/filters/utils/condition-filter-util.js +34 -31
- 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/dist/dimensional-model/filters/utils/filter-matcher-utils.d.ts +5 -0
- package/dist/dimensional-model/filters/utils/filter-matcher-utils.js +170 -0
- package/dist/dimensional-model/filters/utils/filter-types-util.d.ts +3 -1
- package/dist/dimensional-model/filters/utils/filter-types-util.js +2 -2
- package/dist/dimensional-model/filters/utils/types.d.ts +1 -1
- package/dist/dimensional-model/interfaces.d.ts +6 -0
- package/dist/dimensional-model/types.d.ts +9 -3
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/package.json +18 -9
|
@@ -4,16 +4,17 @@ import { createAttributeFilterFromConditionFilterJaql, createMeasureFilterFromCo
|
|
|
4
4
|
import { extractFilterTypeFromFilterJaql } from './filter-types-util.js';
|
|
5
5
|
import { withComposeCode } from './filter-code-util.js';
|
|
6
6
|
import { createAttributeFromFilterJaql, createMeasureFromFilterJaql, } from './attribute-measure-util.js';
|
|
7
|
+
import { guidFast } from '../../../utils.js';
|
|
7
8
|
/**
|
|
8
9
|
* Creates a generic filter (aka pass-through JAQL filter) if the JAQL cannot be translated to a specific filter type.
|
|
9
10
|
*
|
|
10
11
|
* @param jaql - The JAQL object.
|
|
11
|
-
* @param
|
|
12
|
+
* @param guid - Optional GUID for the filter
|
|
12
13
|
* @returns A generic Filter object.
|
|
13
14
|
*/
|
|
14
|
-
export const createGenericFilter = (jaql,
|
|
15
|
+
export const createGenericFilter = (jaql, guid) => {
|
|
15
16
|
return {
|
|
16
|
-
guid:
|
|
17
|
+
guid: guid || guidFast(13),
|
|
17
18
|
jaql: (nested) => {
|
|
18
19
|
if (nested) {
|
|
19
20
|
return jaql;
|
|
@@ -39,54 +40,59 @@ export const createGenericFilter = (jaql, instanceid) => {
|
|
|
39
40
|
* Creates a filter that includes all members of the attribute.
|
|
40
41
|
*
|
|
41
42
|
* @param attribute - The attribute.
|
|
43
|
+
* @param guid - Optional GUID for the filter
|
|
42
44
|
* @returns The created Filter object.
|
|
43
45
|
*/
|
|
44
|
-
export const createFilterIncludeAll = (attribute) => {
|
|
45
|
-
return withComposeCode(filterFactory.members)(attribute, []);
|
|
46
|
+
export const createFilterIncludeAll = (attribute, guid) => {
|
|
47
|
+
return withComposeCode(filterFactory.members)(attribute, [], guid);
|
|
46
48
|
};
|
|
47
49
|
/**
|
|
48
50
|
* Creates a filter from a specific items filter JAQL object.
|
|
49
51
|
*
|
|
50
52
|
* @param attribute - attribute
|
|
51
53
|
* @param specificItemsFilterJaql - Specific Items Filter Jaql
|
|
54
|
+
* @param guid - Optional GUID for the filter
|
|
52
55
|
* @returns Filter object
|
|
53
56
|
*/
|
|
54
|
-
export const createFilterFromSpecificItemsFilterJaql = (attribute, specificItemsFilterJaql) => {
|
|
55
|
-
return withComposeCode(filterFactory.members)(attribute, specificItemsFilterJaql.members);
|
|
57
|
+
export const createFilterFromSpecificItemsFilterJaql = (attribute, specificItemsFilterJaql, guid) => {
|
|
58
|
+
return withComposeCode(filterFactory.members)(attribute, specificItemsFilterJaql.members, guid);
|
|
56
59
|
};
|
|
57
60
|
/**
|
|
58
61
|
* Creates a filter from a date range filter JAQL object.
|
|
59
62
|
*
|
|
60
63
|
* @param attribute - attribute
|
|
61
64
|
* @param rangeFilterJaql - Range Filter Jaql
|
|
65
|
+
* @param guid - Optional GUID for the filter
|
|
62
66
|
* @returns Filter object
|
|
63
67
|
*/
|
|
64
|
-
export const createFilterFromDateRangeFilterJaql = (attribute, rangeFilterJaql) => {
|
|
65
|
-
return withComposeCode(filterFactory.dateRange)(attribute, rangeFilterJaql.from, rangeFilterJaql.to);
|
|
68
|
+
export const createFilterFromDateRangeFilterJaql = (attribute, rangeFilterJaql, guid) => {
|
|
69
|
+
return withComposeCode(filterFactory.dateRange)(attribute, rangeFilterJaql.from, rangeFilterJaql.to, guid);
|
|
66
70
|
};
|
|
67
71
|
/**
|
|
68
72
|
* Creates a filter from a numeric range filter JAQL object.
|
|
69
73
|
*
|
|
70
74
|
* @param attribute - attribute
|
|
71
75
|
* @param rangeFilterJaql - Range Filter Jaql
|
|
76
|
+
* @param guid - Optional GUID for the filter
|
|
72
77
|
* @returns Filter object
|
|
73
78
|
*/
|
|
74
|
-
export const createFilterFromNumericRangeJaql = (attribute, rangeFilterJaql) => {
|
|
75
|
-
return withComposeCode(filterFactory.between)(attribute, rangeFilterJaql.from, rangeFilterJaql.to);
|
|
79
|
+
export const createFilterFromNumericRangeJaql = (attribute, rangeFilterJaql, guid) => {
|
|
80
|
+
return withComposeCode(filterFactory.between)(attribute, rangeFilterJaql.from, rangeFilterJaql.to, guid);
|
|
76
81
|
};
|
|
77
82
|
/**
|
|
78
83
|
* Creates a filter from a period filter JAQL object.
|
|
79
84
|
*
|
|
80
85
|
* @param attribute - attribute
|
|
81
86
|
* @param periodFilterJaql - Period Filter Jaql
|
|
87
|
+
* @param guid - Optional GUID for the filter
|
|
82
88
|
* @returns Filter object
|
|
83
89
|
*/
|
|
84
|
-
export const createFilterFromPeriodFilterJaql = (attribute, periodFilterJaql) => {
|
|
90
|
+
export const createFilterFromPeriodFilterJaql = (attribute, periodFilterJaql, guid) => {
|
|
85
91
|
if (periodFilterJaql.last) {
|
|
86
|
-
return withComposeCode(filterFactory.dateRelativeTo)(attribute, periodFilterJaql.last.offset, periodFilterJaql.last.count, periodFilterJaql.last.anchor);
|
|
92
|
+
return withComposeCode(filterFactory.dateRelativeTo)(attribute, periodFilterJaql.last.offset, periodFilterJaql.last.count, periodFilterJaql.last.anchor, guid);
|
|
87
93
|
}
|
|
88
94
|
else {
|
|
89
|
-
return withComposeCode(filterFactory.dateRelativeFrom)(attribute, periodFilterJaql.next.offset, periodFilterJaql.next.count, periodFilterJaql.next.anchor);
|
|
95
|
+
return withComposeCode(filterFactory.dateRelativeFrom)(attribute, periodFilterJaql.next.offset, periodFilterJaql.next.count, periodFilterJaql.next.anchor, guid);
|
|
90
96
|
}
|
|
91
97
|
};
|
|
92
98
|
/**
|
|
@@ -95,24 +101,25 @@ export const createFilterFromPeriodFilterJaql = (attribute, periodFilterJaql) =>
|
|
|
95
101
|
* @param attribute - attribute
|
|
96
102
|
* @param conditionFilterJaql - Condition Filter Jaql
|
|
97
103
|
* @param measure - measure
|
|
104
|
+
* @param guid - Optional GUID for the filter
|
|
98
105
|
* @returns Filter object
|
|
99
106
|
*/
|
|
100
|
-
export const createFilterFromConditionFilterJaql = (attribute, conditionFilterJaql, measure) => {
|
|
107
|
+
export const createFilterFromConditionFilterJaql = (attribute, conditionFilterJaql, measure, guid) => {
|
|
101
108
|
if (measure) {
|
|
102
|
-
return createMeasureFilterFromConditionFilterJaql(measure, conditionFilterJaql);
|
|
109
|
+
return createMeasureFilterFromConditionFilterJaql(measure, conditionFilterJaql, guid);
|
|
103
110
|
}
|
|
104
111
|
else {
|
|
105
|
-
return createAttributeFilterFromConditionFilterJaql(attribute, conditionFilterJaql);
|
|
112
|
+
return createAttributeFilterFromConditionFilterJaql(attribute, conditionFilterJaql, guid);
|
|
106
113
|
}
|
|
107
114
|
};
|
|
108
115
|
/**
|
|
109
116
|
* Creates a filter from a filter JAQL object.
|
|
110
117
|
*
|
|
111
118
|
* @param jaql - The filter JAQL object.
|
|
112
|
-
* @param
|
|
119
|
+
* @param guid - Optional GUID for the filter
|
|
113
120
|
* @returns Filter object.
|
|
114
121
|
*/
|
|
115
|
-
export const createFilterFromJaqlInternal = (jaql,
|
|
122
|
+
export const createFilterFromJaqlInternal = (jaql, guid) => {
|
|
116
123
|
try {
|
|
117
124
|
if ('formula' in jaql) {
|
|
118
125
|
// generic pass-through JAQL filter will be used instead
|
|
@@ -125,25 +132,25 @@ export const createFilterFromJaqlInternal = (jaql, instanceid) => {
|
|
|
125
132
|
const measure = createMeasureFromFilterJaql(jaql);
|
|
126
133
|
switch (filterType) {
|
|
127
134
|
case FILTER_TYPES.INCLUDE_ALL:
|
|
128
|
-
return createFilterIncludeAll(attribute);
|
|
135
|
+
return createFilterIncludeAll(attribute, guid);
|
|
129
136
|
case FILTER_TYPES.SPECIFIC_ITEMS:
|
|
130
|
-
return createFilterFromSpecificItemsFilterJaql(attribute, filterJaqlWithType);
|
|
137
|
+
return createFilterFromSpecificItemsFilterJaql(attribute, filterJaqlWithType, guid);
|
|
131
138
|
case FILTER_TYPES.CONDITION:
|
|
132
|
-
return createFilterFromConditionFilterJaql(attribute, filterJaqlWithType, measure);
|
|
139
|
+
return createFilterFromConditionFilterJaql(attribute, filterJaqlWithType, measure, guid);
|
|
133
140
|
case FILTER_TYPES.DATE_RANGE:
|
|
134
|
-
return createFilterFromDateRangeFilterJaql(attribute, filterJaqlWithType);
|
|
141
|
+
return createFilterFromDateRangeFilterJaql(attribute, filterJaqlWithType, guid);
|
|
135
142
|
case FILTER_TYPES.PERIOD:
|
|
136
|
-
return createFilterFromPeriodFilterJaql(attribute, filterJaqlWithType);
|
|
143
|
+
return createFilterFromPeriodFilterJaql(attribute, filterJaqlWithType, guid);
|
|
137
144
|
case FILTER_TYPES.NUMERIC_RANGE:
|
|
138
|
-
return createFilterFromNumericRangeJaql(attribute, filterJaqlWithType);
|
|
145
|
+
return createFilterFromNumericRangeJaql(attribute, filterJaqlWithType, guid);
|
|
139
146
|
case FILTER_TYPES.ADVANCED:
|
|
140
147
|
case FILTER_TYPES.INVALID:
|
|
141
|
-
return createGenericFilter(jaql,
|
|
148
|
+
return createGenericFilter(jaql, guid);
|
|
142
149
|
}
|
|
143
150
|
}
|
|
144
151
|
catch (e) {
|
|
145
152
|
// if a filter type is untranslatable, fall back to the generic pass-through JAQL filter
|
|
146
153
|
// console.error(e);
|
|
147
154
|
}
|
|
148
|
-
return createGenericFilter(jaql,
|
|
155
|
+
return createGenericFilter(jaql, guid);
|
|
149
156
|
};
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
import { getSelectedConditionOption } from './condition-filter-util.js';
|
|
2
|
+
import { isConditionFilter, isSpecificItemsFilter } from './filter-types-util.js';
|
|
3
|
+
import { ConditionFilterType, } from './types.js';
|
|
4
|
+
const defaultFormatter = (value) => {
|
|
5
|
+
if (value === undefined) {
|
|
6
|
+
return undefined;
|
|
7
|
+
}
|
|
8
|
+
return `${value}`;
|
|
9
|
+
};
|
|
10
|
+
const defaultDatetimeFormatter = (value) => {
|
|
11
|
+
if (value === undefined) {
|
|
12
|
+
return undefined;
|
|
13
|
+
}
|
|
14
|
+
return new Date(value).toISOString();
|
|
15
|
+
};
|
|
16
|
+
const defaultMatcher = () => false;
|
|
17
|
+
function createCombinedFilterMatcher(createFilterMatcherFn, filterJaql) {
|
|
18
|
+
const filter = filterJaql.filter;
|
|
19
|
+
if ('or' in filter) {
|
|
20
|
+
return (value) => {
|
|
21
|
+
return filter.or
|
|
22
|
+
.map((filterItem) => createFilterMatcherFn(Object.assign(Object.assign({}, filterJaql), { filter: filterItem })))
|
|
23
|
+
.reduce((acc, filterMatcher) => {
|
|
24
|
+
return acc || filterMatcher(value);
|
|
25
|
+
}, false);
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
if ('and' in filter) {
|
|
29
|
+
return (value) => {
|
|
30
|
+
return filter.and
|
|
31
|
+
.map((filterItem) => createFilterMatcherFn(Object.assign(Object.assign({}, filterJaql), { filter: filterItem })))
|
|
32
|
+
.reduce((acc, filterMatcher) => {
|
|
33
|
+
return acc && filterMatcher(value);
|
|
34
|
+
}, true);
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
return createFilterMatcherFn(filterJaql);
|
|
38
|
+
}
|
|
39
|
+
function createMembersFilterMatcher(filterJaql) {
|
|
40
|
+
const { datatype } = filterJaql;
|
|
41
|
+
const filter = filterJaql.filter;
|
|
42
|
+
const formatter = datatype === 'datetime' ? defaultDatetimeFormatter : defaultFormatter;
|
|
43
|
+
return (value) => {
|
|
44
|
+
const formattedMembers = filter.members.map(formatter);
|
|
45
|
+
const formattedValue = formatter(value);
|
|
46
|
+
return formattedMembers.includes(formattedValue);
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
function createExcludeMembersFilterMatcher(filterJaql) {
|
|
50
|
+
const { datatype } = filterJaql;
|
|
51
|
+
const filter = filterJaql.filter;
|
|
52
|
+
const formatter = datatype === 'datetime' ? defaultDatetimeFormatter : defaultFormatter;
|
|
53
|
+
return (value) => {
|
|
54
|
+
var _a, _b;
|
|
55
|
+
const formattedMembers = ((_b = (_a = filter.exclude) === null || _a === void 0 ? void 0 : _a.members) === null || _b === void 0 ? void 0 : _b.map(formatter)) || [];
|
|
56
|
+
const formattedValue = formatter(value);
|
|
57
|
+
return !formattedMembers.includes(formattedValue);
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
function createTextFilterMatcher(filterJaql) {
|
|
61
|
+
const filter = filterJaql.filter;
|
|
62
|
+
const conditionFilterType = getSelectedConditionOption(filter);
|
|
63
|
+
if (conditionFilterType === ConditionFilterType.STARTS_WITH) {
|
|
64
|
+
return (value) => {
|
|
65
|
+
return new RegExp(`^${filter.startsWith}`, 'i').test(value);
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
if (conditionFilterType === ConditionFilterType.ENDS_WITH) {
|
|
69
|
+
return (value) => {
|
|
70
|
+
return new RegExp(`${filter.endsWith}$`, 'i').test(value);
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
if (conditionFilterType === ConditionFilterType.CONTAINS) {
|
|
74
|
+
return (value) => {
|
|
75
|
+
return new RegExp(filter.contains, 'i').test(value);
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
if (conditionFilterType === ConditionFilterType.EQUALS) {
|
|
79
|
+
return (value) => {
|
|
80
|
+
return (value.localeCompare(filter.equals, undefined, {
|
|
81
|
+
sensitivity: 'base',
|
|
82
|
+
}) === 0);
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
if (conditionFilterType === ConditionFilterType.DOESNT_START_WITH) {
|
|
86
|
+
return (value) => {
|
|
87
|
+
return !new RegExp(`^${filter.doesntStartWith}`, 'i').test(value);
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
if (conditionFilterType === ConditionFilterType.DOESNT_END_WITH) {
|
|
91
|
+
return (value) => {
|
|
92
|
+
return !new RegExp(`${filter.doesntEndWith}$`, 'i').test(value);
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
if (conditionFilterType === ConditionFilterType.DOESNT_CONTAIN) {
|
|
96
|
+
return (value) => {
|
|
97
|
+
return !new RegExp(filter.doesntContain, 'i').test(value);
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
if (conditionFilterType === ConditionFilterType.DOESNT_EQUAL) {
|
|
101
|
+
return (value) => {
|
|
102
|
+
return (value.localeCompare(filter.doesntEqual, undefined, {
|
|
103
|
+
sensitivity: 'base',
|
|
104
|
+
}) !== 0);
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
return defaultMatcher;
|
|
108
|
+
}
|
|
109
|
+
function createNumericFilterMatcher(filterJaql) {
|
|
110
|
+
const filter = filterJaql.filter;
|
|
111
|
+
const conditionFilterType = getSelectedConditionOption(filter);
|
|
112
|
+
if (conditionFilterType === ConditionFilterType.EQUALS) {
|
|
113
|
+
return (value) => {
|
|
114
|
+
return Number(filter.equals) === Number(value);
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
if (conditionFilterType === ConditionFilterType.DOESNT_EQUAL) {
|
|
118
|
+
return (value) => {
|
|
119
|
+
return Number(filter.doesntEqual) !== Number(value);
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
if (conditionFilterType === ConditionFilterType.LESS_THAN) {
|
|
123
|
+
return (value) => {
|
|
124
|
+
return Number(value) < Number(filter.toNotEqual);
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
if (conditionFilterType === ConditionFilterType.GREATER_THAN) {
|
|
128
|
+
return (value) => {
|
|
129
|
+
return Number(value) > Number(filter.fromNotEqual);
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
if (conditionFilterType === ConditionFilterType.BETWEEN) {
|
|
133
|
+
return (value) => {
|
|
134
|
+
return Number(filter.to) >= Number(value) && Number(value) >= Number(filter.from);
|
|
135
|
+
};
|
|
136
|
+
}
|
|
137
|
+
if (conditionFilterType === ConditionFilterType.GREATER_THAN_OR_EQUAL) {
|
|
138
|
+
return (value) => {
|
|
139
|
+
return Number(value) >= Number(filter.from);
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
if (conditionFilterType === ConditionFilterType.LESS_THAN_OR_EQUAL) {
|
|
143
|
+
return (value) => {
|
|
144
|
+
return Number(filter.to) >= Number(value);
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
return defaultMatcher;
|
|
148
|
+
}
|
|
149
|
+
/** @internal */
|
|
150
|
+
export function createFilterMatcher(filterJaql) {
|
|
151
|
+
const filterJaqlInternal = filterJaql;
|
|
152
|
+
const { datatype } = filterJaqlInternal;
|
|
153
|
+
const filter = filterJaqlInternal.filter;
|
|
154
|
+
if (isSpecificItemsFilter(filter)) {
|
|
155
|
+
return createMembersFilterMatcher(filterJaqlInternal);
|
|
156
|
+
}
|
|
157
|
+
if (isConditionFilter(filter) &&
|
|
158
|
+
getSelectedConditionOption(filter) === ConditionFilterType.IS_NOT) {
|
|
159
|
+
return createExcludeMembersFilterMatcher(filterJaqlInternal);
|
|
160
|
+
}
|
|
161
|
+
// text filters
|
|
162
|
+
if (datatype === 'text') {
|
|
163
|
+
return createCombinedFilterMatcher(createTextFilterMatcher, filterJaqlInternal);
|
|
164
|
+
}
|
|
165
|
+
// // numeric filters
|
|
166
|
+
if (datatype === 'numeric') {
|
|
167
|
+
return createCombinedFilterMatcher(createNumericFilterMatcher, filterJaqlInternal);
|
|
168
|
+
}
|
|
169
|
+
return defaultMatcher;
|
|
170
|
+
}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
|
-
import { FilterModalType, AnyTypeFilterJaql, DatetimeLevel, FilterType, FilterJaqlInternal, FilterJaqlWrapperWithType } from './types.js';
|
|
1
|
+
import { FilterModalType, AnyTypeFilterJaql, DatetimeLevel, FilterType, SpecificItemsFilterJaql, ConditionFilterJaql, FilterJaqlInternal, FilterJaqlWrapperWithType } from './types.js';
|
|
2
|
+
export declare const isSpecificItemsFilter: (filter: AnyTypeFilterJaql) => filter is SpecificItemsFilterJaql;
|
|
2
3
|
export declare const isNumericRangeFilter: (filter: AnyTypeFilterJaql) => boolean;
|
|
4
|
+
export declare const isConditionFilter: (filter: AnyTypeFilterJaql) => filter is ConditionFilterJaql;
|
|
3
5
|
export declare const getFilterType: (filter: AnyTypeFilterJaql, dataType?: FilterModalType, timeData?: {
|
|
4
6
|
level?: DatetimeLevel;
|
|
5
7
|
bucket?: string;
|
|
@@ -4,7 +4,7 @@ import { getCorrectTimeLevel } from './date-time-filter-util.js';
|
|
|
4
4
|
const isIncludeAllFilter = (filter) => filter === null || filter === void 0 ? void 0 : filter.all;
|
|
5
5
|
const getInnerPeriodFilter = (filter) => (filter.last ? filter.last : filter.next);
|
|
6
6
|
const isPeriodFilter = (filter) => { var _a; return ((_a = getInnerPeriodFilter(filter)) === null || _a === void 0 ? void 0 : _a.offset) < 2; };
|
|
7
|
-
const isSpecificItemsFilter = (filter) => { var _a; return ((_a = filter === null || filter === void 0 ? void 0 : filter.members) === null || _a === void 0 ? void 0 : _a.length) > 0; };
|
|
7
|
+
export const isSpecificItemsFilter = (filter) => { var _a; return ((_a = filter === null || filter === void 0 ? void 0 : filter.members) === null || _a === void 0 ? void 0 : _a.length) > 0; };
|
|
8
8
|
const isFromOrToDefined = (fromRange, toRange) => (fromRange && typeof fromRange === 'string') || (toRange && typeof toRange === 'string');
|
|
9
9
|
const isFromAndToEmpty = (from, to) => from === '' && to === '';
|
|
10
10
|
const isDateRangeFilter = (filter, dataType) => {
|
|
@@ -19,7 +19,7 @@ export const isNumericRangeFilter = (filter) => {
|
|
|
19
19
|
const { from, to } = filter;
|
|
20
20
|
return !!(from !== undefined && to !== undefined && !filter.isBetween);
|
|
21
21
|
};
|
|
22
|
-
const isConditionFilter = (filter) => getSelectedConditionOption(filter) !== ConditionFilterType.NONE;
|
|
22
|
+
export const isConditionFilter = (filter) => getSelectedConditionOption(filter) !== ConditionFilterType.NONE;
|
|
23
23
|
const isAdvancedFilter = (filter) => Object.keys(filter).includes('isAdvanced');
|
|
24
24
|
const isTimeLevelNotSupported = (timeData) => !!(timeData.level &&
|
|
25
25
|
timeData.bucket &&
|
|
@@ -340,6 +340,12 @@ export interface Filter extends Element {
|
|
|
340
340
|
* Boolean flag whether the filter is a scope filter
|
|
341
341
|
*/
|
|
342
342
|
isScope: boolean;
|
|
343
|
+
/**
|
|
344
|
+
* Boolean flag whether the filter is disabled
|
|
345
|
+
*
|
|
346
|
+
* @internal
|
|
347
|
+
*/
|
|
348
|
+
disabled: boolean;
|
|
343
349
|
/**
|
|
344
350
|
* Gets JAQL representing this Filter instance
|
|
345
351
|
*
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { type ConditionFilterJaql } from './filters/utils/types.js';
|
|
1
2
|
/**
|
|
2
3
|
* Different aggregation types
|
|
3
4
|
*/
|
|
@@ -175,13 +176,18 @@ export declare type PivotJaql = (BaseJaql | FormulaJaql) & {
|
|
|
175
176
|
/** @internal */
|
|
176
177
|
export declare type BaseJaql = {
|
|
177
178
|
agg?: string;
|
|
178
|
-
datatype: DataType
|
|
179
|
+
datatype: `${DataType}`;
|
|
179
180
|
dim: string;
|
|
180
181
|
table: string;
|
|
181
182
|
column: string;
|
|
182
183
|
title: string;
|
|
183
184
|
level?: 'years' | 'quarters' | 'months' | 'weeks' | 'minutes' | 'days';
|
|
184
|
-
sort?: JaqlSortDirection
|
|
185
|
+
sort?: `${JaqlSortDirection}`;
|
|
186
|
+
in?: {
|
|
187
|
+
selected?: {
|
|
188
|
+
jaql: FilterJaql;
|
|
189
|
+
};
|
|
190
|
+
};
|
|
185
191
|
};
|
|
186
192
|
/** @internal */
|
|
187
193
|
export declare type FormulaID = string;
|
|
@@ -196,7 +202,7 @@ export declare type FormulaJaql = {
|
|
|
196
202
|
context?: Record<FormulaID, FormulaContext>;
|
|
197
203
|
};
|
|
198
204
|
/** @internal */
|
|
199
|
-
export declare type BaseFilter = IncludeAllFilter | IncludeMembersFilter | ExcludeMembersFilter | JaqlNumericFilter | AndFilter<JaqlNumericFilter> | OrFilter<JaqlNumericFilter>;
|
|
205
|
+
export declare type BaseFilter = IncludeAllFilter | IncludeMembersFilter | ExcludeMembersFilter | JaqlNumericFilter | ConditionFilterJaql | AndFilter<JaqlNumericFilter | ConditionFilterJaql> | OrFilter<JaqlNumericFilter | ConditionFilterJaql>;
|
|
200
206
|
/** @internal */
|
|
201
207
|
export declare type BackgroundFilter = BaseFilter & {
|
|
202
208
|
level?: 'string';
|
package/dist/index.d.ts
CHANGED
|
@@ -15,6 +15,7 @@ export * from './dimensional-model/attributes.js';
|
|
|
15
15
|
export * from './dimensional-model/dimensions.js';
|
|
16
16
|
export * from './dimensional-model/factory.js';
|
|
17
17
|
export * from './dimensional-model/filters/filters.js';
|
|
18
|
+
export { createFilterMatcher } from './dimensional-model/filters/utils/filter-matcher-utils.js';
|
|
18
19
|
/**
|
|
19
20
|
* Functions to create date, text, or numeric filters on specified data.
|
|
20
21
|
*
|
package/dist/index.js
CHANGED
|
@@ -15,6 +15,7 @@ export * from './dimensional-model/attributes.js';
|
|
|
15
15
|
export * from './dimensional-model/dimensions.js';
|
|
16
16
|
export * from './dimensional-model/factory.js';
|
|
17
17
|
export * from './dimensional-model/filters/filters.js';
|
|
18
|
+
export { createFilterMatcher } from './dimensional-model/filters/utils/filter-matcher-utils.js';
|
|
18
19
|
/**
|
|
19
20
|
* Functions to create date, text, or numeric filters on specified data.
|
|
20
21
|
*
|
package/package.json
CHANGED
|
@@ -11,20 +11,29 @@
|
|
|
11
11
|
"Sisense",
|
|
12
12
|
"Compose SDK"
|
|
13
13
|
],
|
|
14
|
-
"version": "1.
|
|
14
|
+
"version": "1.12.0",
|
|
15
15
|
"type": "module",
|
|
16
|
-
"
|
|
17
|
-
".": "./dist/index.js",
|
|
18
|
-
"./dist/dimensional-model/filters/filters": "./dist/dimensional-model/filters/filters.js"
|
|
19
|
-
},
|
|
20
|
-
"main": "./dist/index.js",
|
|
16
|
+
"main": "./dist/cjs/index.js",
|
|
21
17
|
"module": "./dist/index.js",
|
|
22
18
|
"types": "./dist/index.d.ts",
|
|
19
|
+
"exports": {
|
|
20
|
+
".": {
|
|
21
|
+
"require": "./dist/cjs/index.js",
|
|
22
|
+
"import": "./dist/index.js",
|
|
23
|
+
"types": "./dist/index.d.ts",
|
|
24
|
+
"default": "./dist/index.js"
|
|
25
|
+
},
|
|
26
|
+
"./dist/dimensional-model/filters/filters": {
|
|
27
|
+
"default": "./dist/dimensional-model/filters/filters.js",
|
|
28
|
+
"import": "./dist/dimensional-model/filters/filters.js",
|
|
29
|
+
"require": "./dist/cjs/dimensional-model/filters/filters.js"
|
|
30
|
+
}
|
|
31
|
+
},
|
|
23
32
|
"author": "Sisense",
|
|
24
33
|
"license": "SEE LICENSE IN LICENSE.md",
|
|
25
34
|
"dependencies": {
|
|
26
|
-
"@sisense/sdk-common": "^1.
|
|
27
|
-
"@sisense/sdk-rest-client": "^1.
|
|
35
|
+
"@sisense/sdk-common": "^1.12.0",
|
|
36
|
+
"@sisense/sdk-rest-client": "^1.12.0",
|
|
28
37
|
"guid-typescript": "^1.0.9",
|
|
29
38
|
"lodash": "^4.17.21",
|
|
30
39
|
"numeral": "^2.0.6",
|
|
@@ -33,7 +42,7 @@
|
|
|
33
42
|
"scripts": {
|
|
34
43
|
"type-check": "tsc --noEmit",
|
|
35
44
|
"build": "tsc --build tsconfig.build.json",
|
|
36
|
-
"build:prod": "tsc --project tsconfig.prod.json",
|
|
45
|
+
"build:prod": "tsc --project tsconfig.prod.json && tsc --project tsconfig.cjs.json",
|
|
37
46
|
"build.watch": "tsc --build --watch",
|
|
38
47
|
"clean": "rm -rf dist coverage tsconfig.build.tsbuildinfo tsconfig.prod.tsbuildinfo",
|
|
39
48
|
"lint": "eslint . --fix",
|