@thoughtspot/visual-embed-sdk 1.52.1 → 1.52.2-beta.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/cjs/package.json +10 -3
- package/cjs/src/contracts/host-event-contracts.d.ts +49 -11
- package/cjs/src/contracts/host-event-contracts.d.ts.map +1 -1
- package/cjs/src/embed/app.d.ts +4 -3
- package/cjs/src/embed/app.d.ts.map +1 -1
- package/cjs/src/embed/app.js.map +1 -1
- package/cjs/src/embed/app.spec.js +10 -0
- package/cjs/src/embed/app.spec.js.map +1 -1
- package/cjs/src/embed/auto-frame-renderer.spec.js +24 -13
- package/cjs/src/embed/auto-frame-renderer.spec.js.map +1 -1
- package/cjs/src/embed/conversation.d.ts +1 -0
- package/cjs/src/embed/conversation.d.ts.map +1 -1
- package/cjs/src/embed/conversation.js +3 -3
- package/cjs/src/embed/conversation.js.map +1 -1
- package/cjs/src/embed/conversation.spec.js +35 -24
- package/cjs/src/embed/conversation.spec.js.map +1 -1
- package/cjs/src/embed/embedConfig.spec.js +2 -1
- package/cjs/src/embed/embedConfig.spec.js.map +1 -1
- package/cjs/src/embed/hostEventClient/host-event-client.d.ts +2 -2
- package/cjs/src/embed/hostEventClient/host-event-client.d.ts.map +1 -1
- package/cjs/src/embed/hostEventClient/host-event-client.js +16 -10
- package/cjs/src/embed/hostEventClient/host-event-client.js.map +1 -1
- package/cjs/src/embed/hostEventClient/host-event-client.spec.js +14 -8
- package/cjs/src/embed/hostEventClient/host-event-client.spec.js.map +1 -1
- package/cjs/src/embed/hostEventClient/utils.d.ts +9 -0
- package/cjs/src/embed/hostEventClient/utils.d.ts.map +1 -1
- package/cjs/src/embed/hostEventClient/utils.js +49 -3
- package/cjs/src/embed/hostEventClient/utils.js.map +1 -1
- package/cjs/src/embed/hostEventClient/utils.spec.js +151 -0
- package/cjs/src/embed/hostEventClient/utils.spec.js.map +1 -1
- package/cjs/src/embed/liveboard.d.ts +4 -3
- package/cjs/src/embed/liveboard.d.ts.map +1 -1
- package/cjs/src/embed/liveboard.js +17 -12
- package/cjs/src/embed/liveboard.js.map +1 -1
- package/cjs/src/embed/liveboard.spec.js +2 -1
- package/cjs/src/embed/liveboard.spec.js.map +1 -1
- package/cjs/src/embed/spotter-utils.d.ts +8 -1
- package/cjs/src/embed/spotter-utils.d.ts.map +1 -1
- package/cjs/src/embed/spotter-utils.js +14 -1
- package/cjs/src/embed/spotter-utils.js.map +1 -1
- package/cjs/src/embed/spotter-utils.spec.js +26 -0
- package/cjs/src/embed/spotter-utils.spec.js.map +1 -1
- package/cjs/src/embed/ts-embed.d.ts +35 -10
- package/cjs/src/embed/ts-embed.d.ts.map +1 -1
- package/cjs/src/embed/ts-embed.js +108 -73
- package/cjs/src/embed/ts-embed.js.map +1 -1
- package/cjs/src/embed/ts-embed.spec.d.ts.map +1 -1
- package/cjs/src/embed/ts-embed.spec.js +203 -30
- package/cjs/src/embed/ts-embed.spec.js.map +1 -1
- package/cjs/src/errors.js +1 -1
- package/cjs/src/errors.js.map +1 -1
- package/cjs/src/index.d.ts +2 -1
- package/cjs/src/index.d.ts.map +1 -1
- package/cjs/src/index.js +3 -1
- package/cjs/src/index.js.map +1 -1
- package/cjs/src/react/all-types-export.d.ts +1 -1
- package/cjs/src/react/all-types-export.d.ts.map +1 -1
- package/cjs/src/react/all-types-export.js +2 -1
- package/cjs/src/react/all-types-export.js.map +1 -1
- package/cjs/src/types.d.ts +45 -22
- package/cjs/src/types.d.ts.map +1 -1
- package/cjs/src/types.js +44 -21
- package/cjs/src/types.js.map +1 -1
- package/cjs/src/utils/authService/tokenizedAuthService.spec.js +2 -1
- package/cjs/src/utils/authService/tokenizedAuthService.spec.js.map +1 -1
- package/cjs/src/utils/custom-actions.spec.js +4 -2
- package/cjs/src/utils/custom-actions.spec.js.map +1 -1
- package/cjs/src/utils/filterConverter.d.ts +106 -0
- package/cjs/src/utils/filterConverter.d.ts.map +1 -0
- package/cjs/src/utils/filterConverter.js +215 -0
- package/cjs/src/utils/filterConverter.js.map +1 -0
- package/cjs/src/utils/filterConverter.spec.d.ts +2 -0
- package/cjs/src/utils/filterConverter.spec.d.ts.map +1 -0
- package/cjs/src/utils/filterConverter.spec.js +709 -0
- package/cjs/src/utils/filterConverter.spec.js.map +1 -0
- package/cjs/src/utils/processData.spec.js +2 -1
- package/cjs/src/utils/processData.spec.js.map +1 -1
- package/dist/{index-C1pmYb5H.js → index-BrJMbt8r.js} +1 -1
- package/dist/src/contracts/host-event-contracts.d.ts +49 -11
- package/dist/src/contracts/host-event-contracts.d.ts.map +1 -1
- package/dist/src/embed/app.d.ts +4 -3
- package/dist/src/embed/app.d.ts.map +1 -1
- package/dist/src/embed/conversation.d.ts +1 -0
- package/dist/src/embed/conversation.d.ts.map +1 -1
- package/dist/src/embed/hostEventClient/host-event-client.d.ts +2 -2
- package/dist/src/embed/hostEventClient/host-event-client.d.ts.map +1 -1
- package/dist/src/embed/hostEventClient/utils.d.ts +9 -0
- package/dist/src/embed/hostEventClient/utils.d.ts.map +1 -1
- package/dist/src/embed/liveboard.d.ts +4 -3
- package/dist/src/embed/liveboard.d.ts.map +1 -1
- package/dist/src/embed/spotter-utils.d.ts +8 -1
- package/dist/src/embed/spotter-utils.d.ts.map +1 -1
- package/dist/src/embed/ts-embed.d.ts +35 -10
- package/dist/src/embed/ts-embed.d.ts.map +1 -1
- package/dist/src/embed/ts-embed.spec.d.ts.map +1 -1
- package/dist/src/index.d.ts +2 -1
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/react/all-types-export.d.ts +1 -1
- package/dist/src/react/all-types-export.d.ts.map +1 -1
- package/dist/src/types.d.ts +45 -22
- package/dist/src/types.d.ts.map +1 -1
- package/dist/src/utils/filterConverter.d.ts +106 -0
- package/dist/src/utils/filterConverter.d.ts.map +1 -0
- package/dist/src/utils/filterConverter.spec.d.ts +2 -0
- package/dist/src/utils/filterConverter.spec.d.ts.map +1 -0
- package/dist/tsembed-react.es.js +252 -126
- package/dist/tsembed-react.js +251 -125
- package/dist/tsembed.es.js +460 -127
- package/dist/tsembed.js +459 -125
- package/dist/visual-embed-sdk-react-full.d.ts +233 -49
- package/dist/visual-embed-sdk-react.d.ts +139 -49
- package/dist/visual-embed-sdk.d.ts +233 -49
- package/lib/package.json +10 -3
- package/lib/src/contracts/host-event-contracts.d.ts +49 -11
- package/lib/src/contracts/host-event-contracts.d.ts.map +1 -1
- package/lib/src/embed/app.d.ts +4 -3
- package/lib/src/embed/app.d.ts.map +1 -1
- package/lib/src/embed/app.js.map +1 -1
- package/lib/src/embed/app.spec.js +10 -0
- package/lib/src/embed/app.spec.js.map +1 -1
- package/lib/src/embed/auto-frame-renderer.spec.js +24 -13
- package/lib/src/embed/auto-frame-renderer.spec.js.map +1 -1
- package/lib/src/embed/conversation.d.ts +1 -0
- package/lib/src/embed/conversation.d.ts.map +1 -1
- package/lib/src/embed/conversation.js +4 -4
- package/lib/src/embed/conversation.js.map +1 -1
- package/lib/src/embed/conversation.spec.js +35 -24
- package/lib/src/embed/conversation.spec.js.map +1 -1
- package/lib/src/embed/embedConfig.spec.js +2 -1
- package/lib/src/embed/embedConfig.spec.js.map +1 -1
- package/lib/src/embed/hostEventClient/host-event-client.d.ts +2 -2
- package/lib/src/embed/hostEventClient/host-event-client.d.ts.map +1 -1
- package/lib/src/embed/hostEventClient/host-event-client.js +17 -11
- package/lib/src/embed/hostEventClient/host-event-client.js.map +1 -1
- package/lib/src/embed/hostEventClient/host-event-client.spec.js +14 -8
- package/lib/src/embed/hostEventClient/host-event-client.spec.js.map +1 -1
- package/lib/src/embed/hostEventClient/utils.d.ts +9 -0
- package/lib/src/embed/hostEventClient/utils.d.ts.map +1 -1
- package/lib/src/embed/hostEventClient/utils.js +47 -2
- package/lib/src/embed/hostEventClient/utils.js.map +1 -1
- package/lib/src/embed/hostEventClient/utils.spec.js +152 -1
- package/lib/src/embed/hostEventClient/utils.spec.js.map +1 -1
- package/lib/src/embed/liveboard.d.ts +4 -3
- package/lib/src/embed/liveboard.d.ts.map +1 -1
- package/lib/src/embed/liveboard.js +17 -12
- package/lib/src/embed/liveboard.js.map +1 -1
- package/lib/src/embed/liveboard.spec.js +2 -1
- package/lib/src/embed/liveboard.spec.js.map +1 -1
- package/lib/src/embed/spotter-utils.d.ts +8 -1
- package/lib/src/embed/spotter-utils.d.ts.map +1 -1
- package/lib/src/embed/spotter-utils.js +12 -0
- package/lib/src/embed/spotter-utils.js.map +1 -1
- package/lib/src/embed/spotter-utils.spec.js +27 -1
- package/lib/src/embed/spotter-utils.spec.js.map +1 -1
- package/lib/src/embed/ts-embed.d.ts +35 -10
- package/lib/src/embed/ts-embed.d.ts.map +1 -1
- package/lib/src/embed/ts-embed.js +109 -74
- package/lib/src/embed/ts-embed.js.map +1 -1
- package/lib/src/embed/ts-embed.spec.d.ts.map +1 -1
- package/lib/src/embed/ts-embed.spec.js +203 -30
- package/lib/src/embed/ts-embed.spec.js.map +1 -1
- package/lib/src/errors.js +1 -1
- package/lib/src/errors.js.map +1 -1
- package/lib/src/index.d.ts +2 -1
- package/lib/src/index.d.ts.map +1 -1
- package/lib/src/index.js +2 -1
- package/lib/src/index.js.map +1 -1
- package/lib/src/react/all-types-export.d.ts +1 -1
- package/lib/src/react/all-types-export.d.ts.map +1 -1
- package/lib/src/react/all-types-export.js +1 -1
- package/lib/src/react/all-types-export.js.map +1 -1
- package/lib/src/types.d.ts +45 -22
- package/lib/src/types.d.ts.map +1 -1
- package/lib/src/types.js +44 -21
- package/lib/src/types.js.map +1 -1
- package/lib/src/utils/authService/tokenizedAuthService.spec.js +2 -1
- package/lib/src/utils/authService/tokenizedAuthService.spec.js.map +1 -1
- package/lib/src/utils/custom-actions.spec.js +4 -2
- package/lib/src/utils/custom-actions.spec.js.map +1 -1
- package/lib/src/utils/filterConverter.d.ts +106 -0
- package/lib/src/utils/filterConverter.d.ts.map +1 -0
- package/lib/src/utils/filterConverter.js +210 -0
- package/lib/src/utils/filterConverter.js.map +1 -0
- package/lib/src/utils/filterConverter.spec.d.ts +2 -0
- package/lib/src/utils/filterConverter.spec.d.ts.map +1 -0
- package/lib/src/utils/filterConverter.spec.js +707 -0
- package/lib/src/utils/filterConverter.spec.js.map +1 -0
- package/lib/src/utils/processData.spec.js +2 -1
- package/lib/src/utils/processData.spec.js.map +1 -1
- package/lib/src/visual-embed-sdk.d.ts +233 -49
- package/package.json +10 -3
- package/src/contracts/host-event-contracts.ts +55 -11
- package/src/embed/app.spec.ts +15 -0
- package/src/embed/app.ts +4 -3
- package/src/embed/auto-frame-renderer.spec.ts +24 -13
- package/src/embed/conversation.spec.ts +38 -27
- package/src/embed/conversation.ts +4 -4
- package/src/embed/embedConfig.spec.ts +2 -1
- package/src/embed/hostEventClient/host-event-client.spec.ts +14 -8
- package/src/embed/hostEventClient/host-event-client.ts +18 -10
- package/src/embed/hostEventClient/utils.spec.ts +176 -1
- package/src/embed/hostEventClient/utils.ts +51 -2
- package/src/embed/liveboard.spec.ts +4 -3
- package/src/embed/liveboard.ts +21 -15
- package/src/embed/spotter-utils.spec.ts +29 -0
- package/src/embed/spotter-utils.ts +16 -0
- package/src/embed/ts-embed.spec.ts +245 -30
- package/src/embed/ts-embed.ts +107 -74
- package/src/errors.ts +1 -1
- package/src/index.ts +10 -0
- package/src/react/all-types-export.ts +4 -0
- package/src/types.ts +44 -21
- package/src/utils/authService/tokenizedAuthService.spec.ts +2 -1
- package/src/utils/custom-actions.spec.ts +4 -2
- package/src/utils/filterConverter.spec.ts +801 -0
- package/src/utils/filterConverter.ts +304 -0
- package/src/utils/processData.spec.ts +2 -1
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2026
|
|
3
|
+
*
|
|
4
|
+
* Utility to convert the payload emitted by `EmbedEvent.FilterChanged`
|
|
5
|
+
* into the payload shape expected by `HostEvent.UpdateFilters`, so that
|
|
6
|
+
* the current filter state of a Liveboard can be captured and re-applied
|
|
7
|
+
* later without having to hand-parse the event payload.
|
|
8
|
+
* @summary Filter payload converter
|
|
9
|
+
*/
|
|
10
|
+
import isNil from 'lodash/isNil';
|
|
11
|
+
import { RuntimeFilterOp } from '../types';
|
|
12
|
+
import { ApplicabilityLevel } from '../contracts/ui-passthrough-contracts';
|
|
13
|
+
/**
|
|
14
|
+
* Coerces an epoch/count field to a number, returning `null` when the value is
|
|
15
|
+
* absent or not a finite number. The payload arrives as JSON from the iframe,
|
|
16
|
+
* so a missing field can be `null` as well as `undefined`, and `Number(null)`
|
|
17
|
+
* or `Number('')` would otherwise silently become a valid-looking `0`
|
|
18
|
+
* (i.e. the Unix epoch, or a zero-length period).
|
|
19
|
+
* @param value Raw value from the date filter payload.
|
|
20
|
+
*/
|
|
21
|
+
function toFiniteNumber(value) {
|
|
22
|
+
if (isNil(value) || value === '')
|
|
23
|
+
return null;
|
|
24
|
+
const numericValue = Number(value);
|
|
25
|
+
return Number.isFinite(numericValue) ? numericValue : null;
|
|
26
|
+
}
|
|
27
|
+
const DATE_FILTER_VALUE_EXTRACTORS = {
|
|
28
|
+
EXACT_DATE: (dateFilter) => {
|
|
29
|
+
const epoch = toFiniteNumber(dateFilter.epoch);
|
|
30
|
+
return epoch === null ? [] : [epoch];
|
|
31
|
+
},
|
|
32
|
+
EXACT_DATE_RANGE: (dateFilter) => {
|
|
33
|
+
var _a;
|
|
34
|
+
const { lowEpoch, highEpoch } = (_a = dateFilter.dateRange) !== null && _a !== void 0 ? _a : {};
|
|
35
|
+
const low = toFiniteNumber(lowEpoch);
|
|
36
|
+
const high = toFiniteNumber(highEpoch);
|
|
37
|
+
return low === null || high === null ? [] : [low, high];
|
|
38
|
+
},
|
|
39
|
+
MONTH_YEAR: (dateFilter) => (dateFilter.monthName && dateFilter.yearName
|
|
40
|
+
? [dateFilter.monthName, dateFilter.yearName]
|
|
41
|
+
: []),
|
|
42
|
+
QUARTER_YEAR: (dateFilter) => (dateFilter.quarterName && dateFilter.yearName
|
|
43
|
+
? [dateFilter.quarterName, dateFilter.yearName]
|
|
44
|
+
: []),
|
|
45
|
+
YEAR_ONLY: (dateFilter) => (dateFilter.yearName ? [dateFilter.yearName] : []),
|
|
46
|
+
LAST_N_PERIOD: (dateFilter) => {
|
|
47
|
+
const count = toFiniteNumber(dateFilter.number);
|
|
48
|
+
return count === null ? [] : [count];
|
|
49
|
+
},
|
|
50
|
+
NEXT_N_PERIOD: (dateFilter) => {
|
|
51
|
+
const count = toFiniteNumber(dateFilter.number);
|
|
52
|
+
return count === null ? [] : [count];
|
|
53
|
+
},
|
|
54
|
+
};
|
|
55
|
+
// Date filter types with no `values` (e.g. TODAY needs no operand).
|
|
56
|
+
const PERIOD_ONLY_DATE_FILTER_TYPES = new Set([
|
|
57
|
+
'THIS_PERIOD', 'PERIOD_TO_DATE', 'TODAY', 'YESTERDAY', 'TOMORROW',
|
|
58
|
+
]);
|
|
59
|
+
function convertDateFilterToParam(columnName, dateFilterContent) {
|
|
60
|
+
var _a;
|
|
61
|
+
const dateFilter = dateFilterContent === null || dateFilterContent === void 0 ? void 0 : dateFilterContent.dateFilter;
|
|
62
|
+
if (!(dateFilter === null || dateFilter === void 0 ? void 0 : dateFilter.type))
|
|
63
|
+
return null;
|
|
64
|
+
let values;
|
|
65
|
+
const getValues = DATE_FILTER_VALUE_EXTRACTORS[dateFilter.type];
|
|
66
|
+
if (getValues) {
|
|
67
|
+
values = getValues(dateFilter);
|
|
68
|
+
// Required fields (e.g. epoch, yearName) are missing - the source data
|
|
69
|
+
// can't be reconstructed faithfully, so skip rather than emit a filter
|
|
70
|
+
// that would clear/corrupt this column when re-applied.
|
|
71
|
+
if (values.length === 0)
|
|
72
|
+
return null;
|
|
73
|
+
}
|
|
74
|
+
else if (PERIOD_ONLY_DATE_FILTER_TYPES.has(dateFilter.type)) {
|
|
75
|
+
values = [];
|
|
76
|
+
}
|
|
77
|
+
else {
|
|
78
|
+
// Unrecognized date filter type - skip rather than guess.
|
|
79
|
+
return null;
|
|
80
|
+
}
|
|
81
|
+
const param = {
|
|
82
|
+
columnName,
|
|
83
|
+
operator: (_a = dateFilter.op) !== null && _a !== void 0 ? _a : RuntimeFilterOp.EQ,
|
|
84
|
+
values,
|
|
85
|
+
type: dateFilter.type,
|
|
86
|
+
};
|
|
87
|
+
if (dateFilter.datePeriod) {
|
|
88
|
+
param.datePeriod = dateFilter.datePeriod;
|
|
89
|
+
}
|
|
90
|
+
if (!isNil(dateFilter.includeCurrentPeriod)) {
|
|
91
|
+
param.includeCurrentPeriod = dateFilter.includeCurrentPeriod;
|
|
92
|
+
}
|
|
93
|
+
if (dateFilterContent.negate) {
|
|
94
|
+
param.negate = true;
|
|
95
|
+
}
|
|
96
|
+
return param;
|
|
97
|
+
}
|
|
98
|
+
function convertFilterContentToParam(columnName, filterContent) {
|
|
99
|
+
var _a;
|
|
100
|
+
if (!(filterContent === null || filterContent === void 0 ? void 0 : filterContent.filterType))
|
|
101
|
+
return null;
|
|
102
|
+
const values = ((_a = filterContent.value) !== null && _a !== void 0 ? _a : [])
|
|
103
|
+
.map((value) => value === null || value === void 0 ? void 0 : value.key)
|
|
104
|
+
.filter((value) => !isNil(value));
|
|
105
|
+
const param = {
|
|
106
|
+
columnName,
|
|
107
|
+
operator: filterContent.filterType,
|
|
108
|
+
values,
|
|
109
|
+
};
|
|
110
|
+
if (filterContent.negate) {
|
|
111
|
+
param.negate = true;
|
|
112
|
+
}
|
|
113
|
+
return param;
|
|
114
|
+
}
|
|
115
|
+
function convertFilterToParams(columnName, filter) {
|
|
116
|
+
var _a, _b;
|
|
117
|
+
const dateParams = ((_a = filter === null || filter === void 0 ? void 0 : filter.dateFilterContent) !== null && _a !== void 0 ? _a : [])
|
|
118
|
+
.map((dateFilterContent) => convertDateFilterToParam(columnName, dateFilterContent));
|
|
119
|
+
const contentParams = ((_b = filter === null || filter === void 0 ? void 0 : filter.filterContent) !== null && _b !== void 0 ? _b : [])
|
|
120
|
+
.map((filterContent) => convertFilterContentToParam(columnName, filterContent));
|
|
121
|
+
return [...dateParams, ...contentParams]
|
|
122
|
+
.filter((param) => param !== null);
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Runtime filters need no reshaping, but they still come off the wire as JSON,
|
|
126
|
+
* so a malformed entry is possible. Skip it rather than pass it through: an
|
|
127
|
+
* entry missing a column, operator or values array fails
|
|
128
|
+
* `isValidUpdateFiltersPayload`, and that rejects the *whole* `filters` array,
|
|
129
|
+
* so one bad runtime filter would drop every other converted filter with it.
|
|
130
|
+
* @param runtimeFilter A runtime filter from the `FilterChanged` payload.
|
|
131
|
+
*/
|
|
132
|
+
function convertRuntimeFilterToParam(runtimeFilter) {
|
|
133
|
+
const { columnName, operator, values } = runtimeFilter !== null && runtimeFilter !== void 0 ? runtimeFilter : {};
|
|
134
|
+
if (typeof columnName !== 'string' || !columnName)
|
|
135
|
+
return null;
|
|
136
|
+
if (typeof operator !== 'string' || !operator)
|
|
137
|
+
return null;
|
|
138
|
+
if (!Array.isArray(values))
|
|
139
|
+
return null;
|
|
140
|
+
return { columnName, operator, values };
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Mirrors `isValidApplicability` in `hostEventClient/utils`: a `TAB` or `GROUP`
|
|
144
|
+
* scope is meaningless without a `targetId`, and `UpdateFilters` rejects the
|
|
145
|
+
* whole `filters` array when any entry carries a malformed `applicability`.
|
|
146
|
+
* @param applicability Scope taken from the `FilterChanged` payload.
|
|
147
|
+
*/
|
|
148
|
+
function isUsableApplicability(applicability) {
|
|
149
|
+
const levels = Object.values(ApplicabilityLevel);
|
|
150
|
+
if (!levels.includes(applicability.level))
|
|
151
|
+
return false;
|
|
152
|
+
if (applicability.level === ApplicabilityLevel.Liveboard)
|
|
153
|
+
return true;
|
|
154
|
+
return typeof applicability.targetId === 'string' && applicability.targetId.trim().length > 0;
|
|
155
|
+
}
|
|
156
|
+
function convertFilterGroupToParams(filterGroup) {
|
|
157
|
+
var _a, _b;
|
|
158
|
+
const columnName = (_a = filterGroup === null || filterGroup === void 0 ? void 0 : filterGroup.columnInfo) === null || _a === void 0 ? void 0 : _a.name;
|
|
159
|
+
if (!columnName)
|
|
160
|
+
return [];
|
|
161
|
+
const { applicability } = filterGroup;
|
|
162
|
+
// A filter scoped to a tab or group has to keep that scope. Replaying it
|
|
163
|
+
// without `applicability` would silently widen it to the whole Liveboard,
|
|
164
|
+
// changing what every other tab shows. If a scope is present but unusable,
|
|
165
|
+
// skip the filter: widening is worse than dropping, and a malformed
|
|
166
|
+
// applicability would fail validation for every other filter alongside it.
|
|
167
|
+
if (!isNil(applicability) && !isUsableApplicability(applicability))
|
|
168
|
+
return [];
|
|
169
|
+
const params = ((_b = filterGroup.filters) !== null && _b !== void 0 ? _b : [])
|
|
170
|
+
.flatMap((filter) => convertFilterToParams(columnName, filter));
|
|
171
|
+
return isNil(applicability) ? params : params.map((param) => ({ ...param, applicability }));
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Converts the payload emitted by {@link EmbedEvent.FilterChanged} into the
|
|
175
|
+
* payload shape expected by {@link HostEvent.UpdateFilters}, so the same
|
|
176
|
+
* filter state can be captured and re-applied later, for example on a
|
|
177
|
+
* subsequent page load.
|
|
178
|
+
*
|
|
179
|
+
* Both the Liveboard filters and the runtime filters present in the
|
|
180
|
+
* `FilterChanged` payload are included in the returned `filters` array.
|
|
181
|
+
*
|
|
182
|
+
* Note: a column with multiple date-filter conditions (e.g. an OR of two
|
|
183
|
+
* date ranges) is not guaranteed to round-trip losslessly - `HostEvent.UpdateFilters`
|
|
184
|
+
* treats date filters as replace-not-merge per column, so only the last
|
|
185
|
+
* converted entry for such a column will apply.
|
|
186
|
+
* @param filterChangedPayload The filter state carried by the
|
|
187
|
+
* `EmbedEvent.FilterChanged` callback, which is `payload.data` - the
|
|
188
|
+
* callback argument is the event envelope, and the filters sit under its
|
|
189
|
+
* `data` key.
|
|
190
|
+
* @example
|
|
191
|
+
* ```js
|
|
192
|
+
* let savedFilters;
|
|
193
|
+
* liveboardEmbed.on(EmbedEvent.FilterChanged, (payload) => {
|
|
194
|
+
* savedFilters = convertFilterChangedToUpdateFiltersPayload(payload.data);
|
|
195
|
+
* });
|
|
196
|
+
*
|
|
197
|
+
* // later, e.g. after a fresh page load
|
|
198
|
+
* liveboardEmbed.trigger(HostEvent.UpdateFilters, savedFilters);
|
|
199
|
+
* ```
|
|
200
|
+
*/
|
|
201
|
+
export function convertFilterChangedToUpdateFiltersPayload(filterChangedPayload) {
|
|
202
|
+
var _a, _b;
|
|
203
|
+
const liveboardFilterParams = ((_a = filterChangedPayload === null || filterChangedPayload === void 0 ? void 0 : filterChangedPayload.liveboardFilters) !== null && _a !== void 0 ? _a : [])
|
|
204
|
+
.flatMap(convertFilterGroupToParams);
|
|
205
|
+
const runtimeFilterParams = ((_b = filterChangedPayload === null || filterChangedPayload === void 0 ? void 0 : filterChangedPayload.runtimeFilters) !== null && _b !== void 0 ? _b : [])
|
|
206
|
+
.map(convertRuntimeFilterToParam)
|
|
207
|
+
.filter((param) => param !== null);
|
|
208
|
+
return { filters: [...liveboardFilterParams, ...runtimeFilterParams] };
|
|
209
|
+
}
|
|
210
|
+
//# sourceMappingURL=filterConverter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"filterConverter.js","sourceRoot":"","sources":["../../../src/utils/filterConverter.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,MAAM,cAAc,CAAC;AACjC,OAAO,EAAiB,eAAe,EAAE,MAAM,UAAU,CAAC;AAC1D,OAAO,EAAiB,kBAAkB,EAAE,MAAM,uCAAuC,CAAC;AAgF1F;;;;;;;GAOG;AACH,SAAS,cAAc,CAAC,KAAyC;IAC7D,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,KAAK,EAAE;QAAE,OAAO,IAAI,CAAC;IAC9C,MAAM,YAAY,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IACnC,OAAO,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC;AAC/D,CAAC;AAED,MAAM,4BAA4B,GAA6C;IAC3E,UAAU,EAAE,CAAC,UAAU,EAAE,EAAE;QACvB,MAAM,KAAK,GAAG,cAAc,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QAC/C,OAAO,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IACzC,CAAC;IACD,gBAAgB,EAAE,CAAC,UAAU,EAAE,EAAE;;QAC7B,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,MAAA,UAAU,CAAC,SAAS,mCAAI,EAAE,CAAC;QAC3D,MAAM,GAAG,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC;QACrC,MAAM,IAAI,GAAG,cAAc,CAAC,SAAS,CAAC,CAAC;QACvC,OAAO,GAAG,KAAK,IAAI,IAAI,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IAC5D,CAAC;IACD,UAAU,EAAE,CAAC,UAAU,EAAE,EAAE,CAAC,CACxB,UAAU,CAAC,SAAS,IAAI,UAAU,CAAC,QAAQ;QACvC,CAAC,CAAC,CAAC,UAAU,CAAC,SAAS,EAAE,UAAU,CAAC,QAAQ,CAAC;QAC7C,CAAC,CAAC,EAAE,CACX;IACD,YAAY,EAAE,CAAC,UAAU,EAAE,EAAE,CAAC,CAC1B,UAAU,CAAC,WAAW,IAAI,UAAU,CAAC,QAAQ;QACzC,CAAC,CAAC,CAAC,UAAU,CAAC,WAAW,EAAE,UAAU,CAAC,QAAQ,CAAC;QAC/C,CAAC,CAAC,EAAE,CACX;IACD,SAAS,EAAE,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC7E,aAAa,EAAE,CAAC,UAAU,EAAE,EAAE;QAC1B,MAAM,KAAK,GAAG,cAAc,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QAChD,OAAO,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IACzC,CAAC;IACD,aAAa,EAAE,CAAC,UAAU,EAAE,EAAE;QAC1B,MAAM,KAAK,GAAG,cAAc,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QAChD,OAAO,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IACzC,CAAC;CACJ,CAAC;AAEF,oEAAoE;AACpE,MAAM,6BAA6B,GAAG,IAAI,GAAG,CAAC;IAC1C,aAAa,EAAE,gBAAgB,EAAE,OAAO,EAAE,WAAW,EAAE,UAAU;CACpE,CAAC,CAAC;AAEH,SAAS,wBAAwB,CAC7B,UAAkB,EAClB,iBAAiD;;IAEjD,MAAM,UAAU,GAAG,iBAAiB,aAAjB,iBAAiB,uBAAjB,iBAAiB,CAAE,UAAU,CAAC;IACjD,IAAI,CAAC,CAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,IAAI,CAAA;QAAE,OAAO,IAAI,CAAC;IAEnC,IAAI,MAA2B,CAAC;IAChC,MAAM,SAAS,GAAG,4BAA4B,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IAChE,IAAI,SAAS,EAAE;QACX,MAAM,GAAG,SAAS,CAAC,UAAU,CAAC,CAAC;QAC/B,uEAAuE;QACvE,uEAAuE;QACvE,wDAAwD;QACxD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;KACxC;SAAM,IAAI,6BAA6B,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;QAC3D,MAAM,GAAG,EAAE,CAAC;KACf;SAAM;QACH,0DAA0D;QAC1D,OAAO,IAAI,CAAC;KACf;IAED,MAAM,KAAK,GAA6B;QACpC,UAAU;QACV,QAAQ,EAAE,MAAA,UAAU,CAAC,EAAE,mCAAI,eAAe,CAAC,EAAE;QAC7C,MAAM;QACN,IAAI,EAAE,UAAU,CAAC,IAAI;KACxB,CAAC;IACF,IAAI,UAAU,CAAC,UAAU,EAAE;QACvB,KAAK,CAAC,UAAU,GAAG,UAAU,CAAC,UAAU,CAAC;KAC5C;IACD,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,oBAAoB,CAAC,EAAE;QACzC,KAAK,CAAC,oBAAoB,GAAG,UAAU,CAAC,oBAAoB,CAAC;KAChE;IACD,IAAI,iBAAiB,CAAC,MAAM,EAAE;QAC1B,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC;KACvB;IAED,OAAO,KAAK,CAAC;AACjB,CAAC;AAED,SAAS,2BAA2B,CAChC,UAAkB,EAClB,aAAyC;;IAEzC,IAAI,CAAC,CAAA,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,UAAU,CAAA;QAAE,OAAO,IAAI,CAAC;IAE5C,MAAM,MAAM,GAAG,CAAC,MAAA,aAAa,CAAC,KAAK,mCAAI,EAAE,CAAC;SACrC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,GAAG,CAAC;SAC1B,MAAM,CAAC,CAAC,KAAK,EAAsC,EAAE,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;IAE1E,MAAM,KAAK,GAA6B;QACpC,UAAU;QACV,QAAQ,EAAE,aAAa,CAAC,UAAU;QAClC,MAAM;KACT,CAAC;IACF,IAAI,aAAa,CAAC,MAAM,EAAE;QACtB,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC;KACvB;IAED,OAAO,KAAK,CAAC;AACjB,CAAC;AAED,SAAS,qBAAqB,CAAC,UAAkB,EAAE,MAA2B;;IAC1E,MAAM,UAAU,GAAG,CAAC,MAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,iBAAiB,mCAAI,EAAE,CAAC;SAC/C,GAAG,CAAC,CAAC,iBAAiB,EAAE,EAAE,CAAC,wBAAwB,CAAC,UAAU,EAAE,iBAAiB,CAAC,CAAC,CAAC;IACzF,MAAM,aAAa,GAAG,CAAC,MAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,aAAa,mCAAI,EAAE,CAAC;SAC9C,GAAG,CAAC,CAAC,aAAa,EAAE,EAAE,CAAC,2BAA2B,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC,CAAC;IAEpF,OAAO,CAAC,GAAG,UAAU,EAAE,GAAG,aAAa,CAAC;SACnC,MAAM,CAAC,CAAC,KAAK,EAAqC,EAAE,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC;AAC9E,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,2BAA2B,CAAC,aAA4B;IAC7D,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,aAAa,aAAb,aAAa,cAAb,aAAa,GAAI,EAAE,CAAC;IAC7D,IAAI,OAAO,UAAU,KAAK,QAAQ,IAAI,CAAC,UAAU;QAAE,OAAO,IAAI,CAAC;IAC/D,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,CAAC,QAAQ;QAAE,OAAO,IAAI,CAAC;IAC3D,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;QAAE,OAAO,IAAI,CAAC;IAExC,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;AAC5C,CAAC;AAED;;;;;GAKG;AACH,SAAS,qBAAqB,CAAC,aAA4B;IACvD,MAAM,MAAM,GAAa,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC;IAC3D,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACxD,IAAI,aAAa,CAAC,KAAK,KAAK,kBAAkB,CAAC,SAAS;QAAE,OAAO,IAAI,CAAC;IACtE,OAAO,OAAO,aAAa,CAAC,QAAQ,KAAK,QAAQ,IAAI,aAAa,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;AAClG,CAAC;AAED,SAAS,0BAA0B,CAAC,WAAqC;;IACrE,MAAM,UAAU,GAAG,MAAA,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,UAAU,0CAAE,IAAI,CAAC;IACjD,IAAI,CAAC,UAAU;QAAE,OAAO,EAAE,CAAC;IAE3B,MAAM,EAAE,aAAa,EAAE,GAAG,WAAW,CAAC;IACtC,yEAAyE;IACzE,0EAA0E;IAC1E,2EAA2E;IAC3E,oEAAoE;IACpE,2EAA2E;IAC3E,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,qBAAqB,CAAC,aAAa,CAAC;QAAE,OAAO,EAAE,CAAC;IAE9E,MAAM,MAAM,GAAG,CAAC,MAAA,WAAW,CAAC,OAAO,mCAAI,EAAE,CAAC;SACrC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,qBAAqB,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC;IAEpE,OAAO,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC;AAChG,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,MAAM,UAAU,0CAA0C,CACtD,oBAA0C;;IAE1C,MAAM,qBAAqB,GAAG,CAAC,MAAA,oBAAoB,aAApB,oBAAoB,uBAApB,oBAAoB,CAAE,gBAAgB,mCAAI,EAAE,CAAC;SACvE,OAAO,CAAC,0BAA0B,CAAC,CAAC;IAEzC,MAAM,mBAAmB,GAAG,CAAC,MAAA,oBAAoB,aAApB,oBAAoB,uBAApB,oBAAoB,CAAE,cAAc,mCAAI,EAAE,CAAC;SACnE,GAAG,CAAC,2BAA2B,CAAC;SAChC,MAAM,CAAC,CAAC,KAAK,EAAqC,EAAE,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC;IAE1E,OAAO,EAAE,OAAO,EAAE,CAAC,GAAG,qBAAqB,EAAE,GAAG,mBAAmB,CAAC,EAAE,CAAC;AAC3E,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"filterConverter.spec.d.ts","sourceRoot":"","sources":["../../../src/utils/filterConverter.spec.ts"],"names":[],"mappings":""}
|