@thoughtspot/visual-embed-sdk 1.52.1 → 1.52.2-beta

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 (241) hide show
  1. package/cjs/package.json +11 -4
  2. package/cjs/src/contracts/host-event-contracts.d.ts +49 -11
  3. package/cjs/src/contracts/host-event-contracts.d.ts.map +1 -1
  4. package/cjs/src/embed/app.d.ts +4 -3
  5. package/cjs/src/embed/app.d.ts.map +1 -1
  6. package/cjs/src/embed/app.js +1 -1
  7. package/cjs/src/embed/app.js.map +1 -1
  8. package/cjs/src/embed/app.spec.js +10 -0
  9. package/cjs/src/embed/app.spec.js.map +1 -1
  10. package/cjs/src/embed/auto-frame-renderer.js +1 -1
  11. package/cjs/src/embed/auto-frame-renderer.js.map +1 -1
  12. package/cjs/src/embed/auto-frame-renderer.spec.js +24 -13
  13. package/cjs/src/embed/auto-frame-renderer.spec.js.map +1 -1
  14. package/cjs/src/embed/bodyless-conversation.js +1 -1
  15. package/cjs/src/embed/bodyless-conversation.js.map +1 -1
  16. package/cjs/src/embed/conversation.d.ts +1 -0
  17. package/cjs/src/embed/conversation.d.ts.map +1 -1
  18. package/cjs/src/embed/conversation.js +4 -4
  19. package/cjs/src/embed/conversation.js.map +1 -1
  20. package/cjs/src/embed/conversation.spec.js +35 -24
  21. package/cjs/src/embed/conversation.spec.js.map +1 -1
  22. package/cjs/src/embed/embedConfig.spec.js +2 -1
  23. package/cjs/src/embed/embedConfig.spec.js.map +1 -1
  24. package/cjs/src/embed/hostEventClient/host-event-client.d.ts +2 -2
  25. package/cjs/src/embed/hostEventClient/host-event-client.d.ts.map +1 -1
  26. package/cjs/src/embed/hostEventClient/host-event-client.js +16 -10
  27. package/cjs/src/embed/hostEventClient/host-event-client.js.map +1 -1
  28. package/cjs/src/embed/hostEventClient/host-event-client.spec.js +14 -8
  29. package/cjs/src/embed/hostEventClient/host-event-client.spec.js.map +1 -1
  30. package/cjs/src/embed/hostEventClient/utils.d.ts +9 -0
  31. package/cjs/src/embed/hostEventClient/utils.d.ts.map +1 -1
  32. package/cjs/src/embed/hostEventClient/utils.js +49 -3
  33. package/cjs/src/embed/hostEventClient/utils.js.map +1 -1
  34. package/cjs/src/embed/hostEventClient/utils.spec.js +151 -0
  35. package/cjs/src/embed/hostEventClient/utils.spec.js.map +1 -1
  36. package/cjs/src/embed/liveboard.d.ts +4 -3
  37. package/cjs/src/embed/liveboard.d.ts.map +1 -1
  38. package/cjs/src/embed/liveboard.js +18 -13
  39. package/cjs/src/embed/liveboard.js.map +1 -1
  40. package/cjs/src/embed/liveboard.spec.js +2 -1
  41. package/cjs/src/embed/liveboard.spec.js.map +1 -1
  42. package/cjs/src/embed/search-bar.js +1 -1
  43. package/cjs/src/embed/search-bar.js.map +1 -1
  44. package/cjs/src/embed/search.js +1 -1
  45. package/cjs/src/embed/search.js.map +1 -1
  46. package/cjs/src/embed/search.spec.js +20 -0
  47. package/cjs/src/embed/search.spec.js.map +1 -1
  48. package/cjs/src/embed/spotter-utils.d.ts +8 -1
  49. package/cjs/src/embed/spotter-utils.d.ts.map +1 -1
  50. package/cjs/src/embed/spotter-utils.js +14 -1
  51. package/cjs/src/embed/spotter-utils.js.map +1 -1
  52. package/cjs/src/embed/spotter-utils.spec.js +26 -0
  53. package/cjs/src/embed/spotter-utils.spec.js.map +1 -1
  54. package/cjs/src/embed/ts-embed.d.ts +3 -0
  55. package/cjs/src/embed/ts-embed.d.ts.map +1 -1
  56. package/cjs/src/embed/ts-embed.js +108 -29
  57. package/cjs/src/embed/ts-embed.js.map +1 -1
  58. package/cjs/src/embed/ts-embed.spec.js +163 -23
  59. package/cjs/src/embed/ts-embed.spec.js.map +1 -1
  60. package/cjs/src/errors.js +1 -1
  61. package/cjs/src/errors.js.map +1 -1
  62. package/cjs/src/index.d.ts +2 -1
  63. package/cjs/src/index.d.ts.map +1 -1
  64. package/cjs/src/index.js +3 -1
  65. package/cjs/src/index.js.map +1 -1
  66. package/cjs/src/react/all-types-export.d.ts +1 -1
  67. package/cjs/src/react/all-types-export.d.ts.map +1 -1
  68. package/cjs/src/react/all-types-export.js +2 -1
  69. package/cjs/src/react/all-types-export.js.map +1 -1
  70. package/cjs/src/types.d.ts +45 -22
  71. package/cjs/src/types.d.ts.map +1 -1
  72. package/cjs/src/types.js +44 -21
  73. package/cjs/src/types.js.map +1 -1
  74. package/cjs/src/utils/authService/tokenizedAuthService.spec.js +2 -1
  75. package/cjs/src/utils/authService/tokenizedAuthService.spec.js.map +1 -1
  76. package/cjs/src/utils/custom-actions.spec.js +4 -2
  77. package/cjs/src/utils/custom-actions.spec.js.map +1 -1
  78. package/cjs/src/utils/filterConverter.d.ts +106 -0
  79. package/cjs/src/utils/filterConverter.d.ts.map +1 -0
  80. package/cjs/src/utils/filterConverter.js +215 -0
  81. package/cjs/src/utils/filterConverter.js.map +1 -0
  82. package/cjs/src/utils/filterConverter.spec.d.ts +2 -0
  83. package/cjs/src/utils/filterConverter.spec.d.ts.map +1 -0
  84. package/cjs/src/utils/filterConverter.spec.js +709 -0
  85. package/cjs/src/utils/filterConverter.spec.js.map +1 -0
  86. package/cjs/src/utils/processData.spec.js +2 -1
  87. package/cjs/src/utils/processData.spec.js.map +1 -1
  88. package/dist/{index-C1pmYb5H.js → index-CcBYlGo9.js} +1 -1
  89. package/dist/src/contracts/host-event-contracts.d.ts +49 -11
  90. package/dist/src/contracts/host-event-contracts.d.ts.map +1 -1
  91. package/dist/src/embed/app.d.ts +4 -3
  92. package/dist/src/embed/app.d.ts.map +1 -1
  93. package/dist/src/embed/conversation.d.ts +1 -0
  94. package/dist/src/embed/conversation.d.ts.map +1 -1
  95. package/dist/src/embed/hostEventClient/host-event-client.d.ts +2 -2
  96. package/dist/src/embed/hostEventClient/host-event-client.d.ts.map +1 -1
  97. package/dist/src/embed/hostEventClient/utils.d.ts +9 -0
  98. package/dist/src/embed/hostEventClient/utils.d.ts.map +1 -1
  99. package/dist/src/embed/liveboard.d.ts +4 -3
  100. package/dist/src/embed/liveboard.d.ts.map +1 -1
  101. package/dist/src/embed/spotter-utils.d.ts +8 -1
  102. package/dist/src/embed/spotter-utils.d.ts.map +1 -1
  103. package/dist/src/embed/ts-embed.d.ts +3 -0
  104. package/dist/src/embed/ts-embed.d.ts.map +1 -1
  105. package/dist/src/index.d.ts +2 -1
  106. package/dist/src/index.d.ts.map +1 -1
  107. package/dist/src/react/all-types-export.d.ts +1 -1
  108. package/dist/src/react/all-types-export.d.ts.map +1 -1
  109. package/dist/src/types.d.ts +45 -22
  110. package/dist/src/types.d.ts.map +1 -1
  111. package/dist/src/utils/filterConverter.d.ts +106 -0
  112. package/dist/src/utils/filterConverter.d.ts.map +1 -0
  113. package/dist/src/utils/filterConverter.spec.d.ts +2 -0
  114. package/dist/src/utils/filterConverter.spec.d.ts.map +1 -0
  115. package/dist/tsembed-react.es.js +257 -87
  116. package/dist/tsembed-react.js +256 -86
  117. package/dist/tsembed.es.js +466 -89
  118. package/dist/tsembed.js +465 -87
  119. package/dist/visual-embed-sdk-react-full.d.ts +202 -40
  120. package/dist/visual-embed-sdk-react.d.ts +108 -40
  121. package/dist/visual-embed-sdk.d.ts +202 -40
  122. package/lib/package.json +11 -4
  123. package/lib/src/contracts/host-event-contracts.d.ts +49 -11
  124. package/lib/src/contracts/host-event-contracts.d.ts.map +1 -1
  125. package/lib/src/embed/app.d.ts +4 -3
  126. package/lib/src/embed/app.d.ts.map +1 -1
  127. package/lib/src/embed/app.js +1 -1
  128. package/lib/src/embed/app.js.map +1 -1
  129. package/lib/src/embed/app.spec.js +10 -0
  130. package/lib/src/embed/app.spec.js.map +1 -1
  131. package/lib/src/embed/auto-frame-renderer.js +1 -1
  132. package/lib/src/embed/auto-frame-renderer.js.map +1 -1
  133. package/lib/src/embed/auto-frame-renderer.spec.js +24 -13
  134. package/lib/src/embed/auto-frame-renderer.spec.js.map +1 -1
  135. package/lib/src/embed/bodyless-conversation.js +1 -1
  136. package/lib/src/embed/bodyless-conversation.js.map +1 -1
  137. package/lib/src/embed/conversation.d.ts +1 -0
  138. package/lib/src/embed/conversation.d.ts.map +1 -1
  139. package/lib/src/embed/conversation.js +5 -5
  140. package/lib/src/embed/conversation.js.map +1 -1
  141. package/lib/src/embed/conversation.spec.js +35 -24
  142. package/lib/src/embed/conversation.spec.js.map +1 -1
  143. package/lib/src/embed/embedConfig.spec.js +2 -1
  144. package/lib/src/embed/embedConfig.spec.js.map +1 -1
  145. package/lib/src/embed/hostEventClient/host-event-client.d.ts +2 -2
  146. package/lib/src/embed/hostEventClient/host-event-client.d.ts.map +1 -1
  147. package/lib/src/embed/hostEventClient/host-event-client.js +17 -11
  148. package/lib/src/embed/hostEventClient/host-event-client.js.map +1 -1
  149. package/lib/src/embed/hostEventClient/host-event-client.spec.js +14 -8
  150. package/lib/src/embed/hostEventClient/host-event-client.spec.js.map +1 -1
  151. package/lib/src/embed/hostEventClient/utils.d.ts +9 -0
  152. package/lib/src/embed/hostEventClient/utils.d.ts.map +1 -1
  153. package/lib/src/embed/hostEventClient/utils.js +47 -2
  154. package/lib/src/embed/hostEventClient/utils.js.map +1 -1
  155. package/lib/src/embed/hostEventClient/utils.spec.js +152 -1
  156. package/lib/src/embed/hostEventClient/utils.spec.js.map +1 -1
  157. package/lib/src/embed/liveboard.d.ts +4 -3
  158. package/lib/src/embed/liveboard.d.ts.map +1 -1
  159. package/lib/src/embed/liveboard.js +18 -13
  160. package/lib/src/embed/liveboard.js.map +1 -1
  161. package/lib/src/embed/liveboard.spec.js +2 -1
  162. package/lib/src/embed/liveboard.spec.js.map +1 -1
  163. package/lib/src/embed/search-bar.js +1 -1
  164. package/lib/src/embed/search-bar.js.map +1 -1
  165. package/lib/src/embed/search.js +1 -1
  166. package/lib/src/embed/search.js.map +1 -1
  167. package/lib/src/embed/search.spec.js +20 -0
  168. package/lib/src/embed/search.spec.js.map +1 -1
  169. package/lib/src/embed/spotter-utils.d.ts +8 -1
  170. package/lib/src/embed/spotter-utils.d.ts.map +1 -1
  171. package/lib/src/embed/spotter-utils.js +12 -0
  172. package/lib/src/embed/spotter-utils.js.map +1 -1
  173. package/lib/src/embed/spotter-utils.spec.js +27 -1
  174. package/lib/src/embed/spotter-utils.spec.js.map +1 -1
  175. package/lib/src/embed/ts-embed.d.ts +3 -0
  176. package/lib/src/embed/ts-embed.d.ts.map +1 -1
  177. package/lib/src/embed/ts-embed.js +108 -29
  178. package/lib/src/embed/ts-embed.js.map +1 -1
  179. package/lib/src/embed/ts-embed.spec.js +164 -24
  180. package/lib/src/embed/ts-embed.spec.js.map +1 -1
  181. package/lib/src/errors.js +1 -1
  182. package/lib/src/errors.js.map +1 -1
  183. package/lib/src/index.d.ts +2 -1
  184. package/lib/src/index.d.ts.map +1 -1
  185. package/lib/src/index.js +2 -1
  186. package/lib/src/index.js.map +1 -1
  187. package/lib/src/react/all-types-export.d.ts +1 -1
  188. package/lib/src/react/all-types-export.d.ts.map +1 -1
  189. package/lib/src/react/all-types-export.js +1 -1
  190. package/lib/src/react/all-types-export.js.map +1 -1
  191. package/lib/src/types.d.ts +45 -22
  192. package/lib/src/types.d.ts.map +1 -1
  193. package/lib/src/types.js +44 -21
  194. package/lib/src/types.js.map +1 -1
  195. package/lib/src/utils/authService/tokenizedAuthService.spec.js +2 -1
  196. package/lib/src/utils/authService/tokenizedAuthService.spec.js.map +1 -1
  197. package/lib/src/utils/custom-actions.spec.js +4 -2
  198. package/lib/src/utils/custom-actions.spec.js.map +1 -1
  199. package/lib/src/utils/filterConverter.d.ts +106 -0
  200. package/lib/src/utils/filterConverter.d.ts.map +1 -0
  201. package/lib/src/utils/filterConverter.js +210 -0
  202. package/lib/src/utils/filterConverter.js.map +1 -0
  203. package/lib/src/utils/filterConverter.spec.d.ts +2 -0
  204. package/lib/src/utils/filterConverter.spec.d.ts.map +1 -0
  205. package/lib/src/utils/filterConverter.spec.js +707 -0
  206. package/lib/src/utils/filterConverter.spec.js.map +1 -0
  207. package/lib/src/utils/processData.spec.js +2 -1
  208. package/lib/src/utils/processData.spec.js.map +1 -1
  209. package/lib/src/visual-embed-sdk.d.ts +202 -40
  210. package/package.json +11 -4
  211. package/src/contracts/host-event-contracts.ts +55 -11
  212. package/src/embed/app.spec.ts +15 -0
  213. package/src/embed/app.ts +5 -4
  214. package/src/embed/auto-frame-renderer.spec.ts +24 -13
  215. package/src/embed/auto-frame-renderer.ts +1 -1
  216. package/src/embed/bodyless-conversation.ts +1 -1
  217. package/src/embed/conversation.spec.ts +38 -27
  218. package/src/embed/conversation.ts +5 -5
  219. package/src/embed/embedConfig.spec.ts +2 -1
  220. package/src/embed/hostEventClient/host-event-client.spec.ts +14 -8
  221. package/src/embed/hostEventClient/host-event-client.ts +18 -10
  222. package/src/embed/hostEventClient/utils.spec.ts +176 -1
  223. package/src/embed/hostEventClient/utils.ts +51 -2
  224. package/src/embed/liveboard.spec.ts +4 -3
  225. package/src/embed/liveboard.ts +22 -16
  226. package/src/embed/search-bar.tsx +1 -1
  227. package/src/embed/search.spec.ts +23 -0
  228. package/src/embed/search.ts +1 -1
  229. package/src/embed/spotter-utils.spec.ts +29 -0
  230. package/src/embed/spotter-utils.ts +16 -0
  231. package/src/embed/ts-embed.spec.ts +204 -23
  232. package/src/embed/ts-embed.ts +114 -28
  233. package/src/errors.ts +1 -1
  234. package/src/index.ts +10 -0
  235. package/src/react/all-types-export.ts +4 -0
  236. package/src/types.ts +44 -21
  237. package/src/utils/authService/tokenizedAuthService.spec.ts +2 -1
  238. package/src/utils/custom-actions.spec.ts +4 -2
  239. package/src/utils/filterConverter.spec.ts +801 -0
  240. package/src/utils/filterConverter.ts +304 -0
  241. 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":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=filterConverter.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filterConverter.spec.d.ts","sourceRoot":"","sources":["../../../src/utils/filterConverter.spec.ts"],"names":[],"mappings":""}