@thoughtspot/visual-embed-sdk 1.24.0-dev → 1.24.0-preRender.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 (231) hide show
  1. package/cjs/package.json +2 -3
  2. package/cjs/src/embed/app.d.ts +3 -1
  3. package/cjs/src/embed/app.d.ts.map +1 -1
  4. package/cjs/src/embed/app.js +8 -2
  5. package/cjs/src/embed/app.js.map +1 -1
  6. package/cjs/src/embed/base.d.ts +2 -0
  7. package/cjs/src/embed/base.d.ts.map +1 -1
  8. package/cjs/src/embed/base.js +2 -0
  9. package/cjs/src/embed/base.js.map +1 -1
  10. package/cjs/src/embed/liveboard.d.ts +3 -2
  11. package/cjs/src/embed/liveboard.d.ts.map +1 -1
  12. package/cjs/src/embed/liveboard.js +6 -5
  13. package/cjs/src/embed/liveboard.js.map +1 -1
  14. package/cjs/src/embed/sage.d.ts +4 -1
  15. package/cjs/src/embed/sage.d.ts.map +1 -1
  16. package/cjs/src/embed/sage.js +9 -2
  17. package/cjs/src/embed/sage.js.map +1 -1
  18. package/cjs/src/embed/search-bar.d.ts +1 -0
  19. package/cjs/src/embed/search-bar.d.ts.map +1 -1
  20. package/cjs/src/embed/search-bar.js +1 -0
  21. package/cjs/src/embed/search-bar.js.map +1 -1
  22. package/cjs/src/embed/search.d.ts +5 -1
  23. package/cjs/src/embed/search.d.ts.map +1 -1
  24. package/cjs/src/embed/search.js +10 -2
  25. package/cjs/src/embed/search.js.map +1 -1
  26. package/cjs/src/embed/ts-embed.d.ts +9 -3
  27. package/cjs/src/embed/ts-embed.d.ts.map +1 -1
  28. package/cjs/src/embed/ts-embed.js +50 -20
  29. package/cjs/src/embed/ts-embed.js.map +1 -1
  30. package/cjs/src/embed/ts-embed.spec.js +47 -0
  31. package/cjs/src/embed/ts-embed.spec.js.map +1 -1
  32. package/cjs/src/index.d.ts +3 -2
  33. package/cjs/src/index.d.ts.map +1 -1
  34. package/cjs/src/index.js +3 -1
  35. package/cjs/src/index.js.map +1 -1
  36. package/cjs/src/mixpanel-service.d.ts.map +1 -1
  37. package/cjs/src/mixpanel-service.js +2 -0
  38. package/cjs/src/mixpanel-service.js.map +1 -1
  39. package/cjs/src/mixpanel-service.spec.js +1 -0
  40. package/cjs/src/mixpanel-service.spec.js.map +1 -1
  41. package/cjs/src/react/index.d.ts +5 -1
  42. package/cjs/src/react/index.d.ts.map +1 -1
  43. package/cjs/src/react/index.js +8 -8
  44. package/cjs/src/react/index.js.map +1 -1
  45. package/cjs/src/types.d.ts +46 -18
  46. package/cjs/src/types.d.ts.map +1 -1
  47. package/cjs/src/types.js +7 -13
  48. package/cjs/src/types.js.map +1 -1
  49. package/cjs/src/utils/graphql/answerService/answer-queries.d.ts +5 -0
  50. package/cjs/src/utils/graphql/answerService/answer-queries.d.ts.map +1 -0
  51. package/cjs/src/utils/graphql/answerService/answer-queries.js +80 -0
  52. package/cjs/src/utils/graphql/answerService/answer-queries.js.map +1 -0
  53. package/cjs/src/utils/graphql/answerService/answerService.d.ts +61 -0
  54. package/cjs/src/utils/graphql/answerService/answerService.d.ts.map +1 -0
  55. package/cjs/src/utils/graphql/answerService/answerService.js +182 -0
  56. package/cjs/src/utils/graphql/answerService/answerService.js.map +1 -0
  57. package/cjs/src/utils/graphql/answerService/answerService.spec.d.ts +2 -0
  58. package/cjs/src/utils/graphql/answerService/answerService.spec.d.ts.map +1 -0
  59. package/cjs/src/utils/graphql/answerService/answerService.spec.js +201 -0
  60. package/cjs/src/utils/graphql/answerService/answerService.spec.js.map +1 -0
  61. package/cjs/src/utils/graphql/graphql-request.d.ts +15 -0
  62. package/cjs/src/utils/graphql/graphql-request.d.ts.map +1 -0
  63. package/cjs/src/utils/graphql/graphql-request.js +40 -0
  64. package/cjs/src/utils/graphql/graphql-request.js.map +1 -0
  65. package/cjs/src/utils/graphql/sourceService.d.ts +8 -0
  66. package/cjs/src/utils/graphql/sourceService.d.ts.map +1 -0
  67. package/cjs/src/utils/graphql/sourceService.js +69 -0
  68. package/cjs/src/utils/graphql/sourceService.js.map +1 -0
  69. package/cjs/src/utils/graphql/sourceService.spec.d.ts +2 -0
  70. package/cjs/src/utils/graphql/sourceService.spec.d.ts.map +1 -0
  71. package/cjs/src/utils/graphql/sourceService.spec.js +12 -0
  72. package/cjs/src/utils/graphql/sourceService.spec.js.map +1 -0
  73. package/cjs/src/utils/processData.d.ts.map +1 -1
  74. package/cjs/src/utils/processData.js +7 -11
  75. package/cjs/src/utils/processData.js.map +1 -1
  76. package/cjs/src/utils/processData.spec.js +13 -17
  77. package/cjs/src/utils/processData.spec.js.map +1 -1
  78. package/cjs/src/utils.d.ts +6 -0
  79. package/cjs/src/utils.d.ts.map +1 -1
  80. package/cjs/src/utils.js +26 -1
  81. package/cjs/src/utils.js.map +1 -1
  82. package/dist/src/embed/app.d.ts +3 -1
  83. package/dist/src/embed/app.d.ts.map +1 -1
  84. package/dist/src/embed/base.d.ts +2 -0
  85. package/dist/src/embed/base.d.ts.map +1 -1
  86. package/dist/src/embed/liveboard.d.ts +3 -2
  87. package/dist/src/embed/liveboard.d.ts.map +1 -1
  88. package/dist/src/embed/sage.d.ts +4 -1
  89. package/dist/src/embed/sage.d.ts.map +1 -1
  90. package/dist/src/embed/search-bar.d.ts +1 -0
  91. package/dist/src/embed/search-bar.d.ts.map +1 -1
  92. package/dist/src/embed/search.d.ts +5 -1
  93. package/dist/src/embed/search.d.ts.map +1 -1
  94. package/dist/src/embed/ts-embed.d.ts +9 -3
  95. package/dist/src/embed/ts-embed.d.ts.map +1 -1
  96. package/dist/src/index.d.ts +3 -2
  97. package/dist/src/index.d.ts.map +1 -1
  98. package/dist/src/mixpanel-service.d.ts.map +1 -1
  99. package/dist/src/react/index.d.ts +5 -1
  100. package/dist/src/react/index.d.ts.map +1 -1
  101. package/dist/src/types.d.ts +46 -18
  102. package/dist/src/types.d.ts.map +1 -1
  103. package/dist/src/utils/graphql/answerService/answer-queries.d.ts +5 -0
  104. package/dist/src/utils/graphql/answerService/answer-queries.d.ts.map +1 -0
  105. package/dist/src/utils/graphql/answerService/answerService.d.ts +61 -0
  106. package/dist/src/utils/graphql/answerService/answerService.d.ts.map +1 -0
  107. package/dist/src/utils/graphql/answerService/answerService.spec.d.ts +2 -0
  108. package/dist/src/utils/graphql/answerService/answerService.spec.d.ts.map +1 -0
  109. package/dist/src/utils/graphql/graphql-request.d.ts +15 -0
  110. package/dist/src/utils/graphql/graphql-request.d.ts.map +1 -0
  111. package/dist/src/utils/graphql/sourceService.d.ts +8 -0
  112. package/dist/src/utils/graphql/sourceService.d.ts.map +1 -0
  113. package/dist/src/utils/graphql/sourceService.spec.d.ts +2 -0
  114. package/dist/src/utils/graphql/sourceService.spec.d.ts.map +1 -0
  115. package/dist/src/utils/processData.d.ts.map +1 -1
  116. package/dist/src/utils.d.ts +6 -0
  117. package/dist/src/utils.d.ts.map +1 -1
  118. package/dist/tsembed-react.es.js +468 -107
  119. package/dist/tsembed-react.js +471 -106
  120. package/dist/tsembed.es.js +511 -103
  121. package/dist/tsembed.js +511 -102
  122. package/dist/visual-embed-sdk-react-full.d.ts +132 -28
  123. package/dist/visual-embed-sdk-react.d.ts +132 -28
  124. package/dist/visual-embed-sdk.d.ts +127 -27
  125. package/lib/package.json +2 -3
  126. package/lib/src/embed/app.d.ts +3 -1
  127. package/lib/src/embed/app.d.ts.map +1 -1
  128. package/lib/src/embed/app.js +8 -2
  129. package/lib/src/embed/app.js.map +1 -1
  130. package/lib/src/embed/base.d.ts +2 -0
  131. package/lib/src/embed/base.d.ts.map +1 -1
  132. package/lib/src/embed/base.js +2 -0
  133. package/lib/src/embed/base.js.map +1 -1
  134. package/lib/src/embed/liveboard.d.ts +3 -2
  135. package/lib/src/embed/liveboard.d.ts.map +1 -1
  136. package/lib/src/embed/liveboard.js +6 -5
  137. package/lib/src/embed/liveboard.js.map +1 -1
  138. package/lib/src/embed/sage.d.ts +4 -1
  139. package/lib/src/embed/sage.d.ts.map +1 -1
  140. package/lib/src/embed/sage.js +9 -2
  141. package/lib/src/embed/sage.js.map +1 -1
  142. package/lib/src/embed/search-bar.d.ts +1 -0
  143. package/lib/src/embed/search-bar.d.ts.map +1 -1
  144. package/lib/src/embed/search-bar.js +1 -0
  145. package/lib/src/embed/search-bar.js.map +1 -1
  146. package/lib/src/embed/search.d.ts +5 -1
  147. package/lib/src/embed/search.d.ts.map +1 -1
  148. package/lib/src/embed/search.js +10 -2
  149. package/lib/src/embed/search.js.map +1 -1
  150. package/lib/src/embed/ts-embed.d.ts +9 -3
  151. package/lib/src/embed/ts-embed.d.ts.map +1 -1
  152. package/lib/src/embed/ts-embed.js +50 -20
  153. package/lib/src/embed/ts-embed.js.map +1 -1
  154. package/lib/src/embed/ts-embed.spec.js +47 -0
  155. package/lib/src/embed/ts-embed.spec.js.map +1 -1
  156. package/lib/src/index.d.ts +3 -2
  157. package/lib/src/index.d.ts.map +1 -1
  158. package/lib/src/index.js +2 -1
  159. package/lib/src/index.js.map +1 -1
  160. package/lib/src/mixpanel-service.d.ts.map +1 -1
  161. package/lib/src/mixpanel-service.js +2 -0
  162. package/lib/src/mixpanel-service.js.map +1 -1
  163. package/lib/src/mixpanel-service.spec.js +1 -0
  164. package/lib/src/mixpanel-service.spec.js.map +1 -1
  165. package/lib/src/react/index.d.ts +5 -1
  166. package/lib/src/react/index.d.ts.map +1 -1
  167. package/lib/src/react/index.js +7 -7
  168. package/lib/src/react/index.js.map +1 -1
  169. package/lib/src/types.d.ts +46 -18
  170. package/lib/src/types.d.ts.map +1 -1
  171. package/lib/src/types.js +6 -12
  172. package/lib/src/types.js.map +1 -1
  173. package/lib/src/utils/graphql/answerService/answer-queries.d.ts +5 -0
  174. package/lib/src/utils/graphql/answerService/answer-queries.d.ts.map +1 -0
  175. package/lib/src/utils/graphql/answerService/answer-queries.js +77 -0
  176. package/lib/src/utils/graphql/answerService/answer-queries.js.map +1 -0
  177. package/lib/src/utils/graphql/answerService/answerService.d.ts +61 -0
  178. package/lib/src/utils/graphql/answerService/answerService.d.ts.map +1 -0
  179. package/lib/src/utils/graphql/answerService/answerService.js +177 -0
  180. package/lib/src/utils/graphql/answerService/answerService.js.map +1 -0
  181. package/lib/src/utils/graphql/answerService/answerService.spec.d.ts +2 -0
  182. package/lib/src/utils/graphql/answerService/answerService.spec.d.ts.map +1 -0
  183. package/lib/src/utils/graphql/answerService/answerService.spec.js +199 -0
  184. package/lib/src/utils/graphql/answerService/answerService.spec.js.map +1 -0
  185. package/lib/src/utils/graphql/graphql-request.d.ts +15 -0
  186. package/lib/src/utils/graphql/graphql-request.d.ts.map +1 -0
  187. package/lib/src/utils/graphql/graphql-request.js +36 -0
  188. package/lib/src/utils/graphql/graphql-request.js.map +1 -0
  189. package/lib/src/utils/graphql/sourceService.d.ts +8 -0
  190. package/lib/src/utils/graphql/sourceService.d.ts.map +1 -0
  191. package/lib/src/utils/graphql/sourceService.js +65 -0
  192. package/lib/src/utils/graphql/sourceService.js.map +1 -0
  193. package/lib/src/utils/graphql/sourceService.spec.d.ts +2 -0
  194. package/lib/src/utils/graphql/sourceService.spec.d.ts.map +1 -0
  195. package/lib/src/utils/graphql/sourceService.spec.js +10 -0
  196. package/lib/src/utils/graphql/sourceService.spec.js.map +1 -0
  197. package/lib/src/utils/processData.d.ts.map +1 -1
  198. package/lib/src/utils/processData.js +8 -12
  199. package/lib/src/utils/processData.js.map +1 -1
  200. package/lib/src/utils/processData.spec.js +14 -18
  201. package/lib/src/utils/processData.spec.js.map +1 -1
  202. package/lib/src/utils.d.ts +6 -0
  203. package/lib/src/utils.d.ts.map +1 -1
  204. package/lib/src/utils.js +23 -0
  205. package/lib/src/utils.js.map +1 -1
  206. package/lib/src/visual-embed-sdk.d.ts +133 -28
  207. package/package.json +2 -3
  208. package/src/embed/app.ts +12 -2
  209. package/src/embed/base.ts +2 -0
  210. package/src/embed/liveboard.ts +7 -5
  211. package/src/embed/sage.ts +13 -2
  212. package/src/embed/search-bar.tsx +2 -0
  213. package/src/embed/search.ts +14 -2
  214. package/src/embed/ts-embed.spec.ts +49 -0
  215. package/src/embed/ts-embed.ts +61 -22
  216. package/src/index.ts +5 -0
  217. package/src/mixpanel-service.spec.ts +1 -0
  218. package/src/mixpanel-service.ts +1 -0
  219. package/src/react/index.tsx +40 -37
  220. package/src/types.ts +50 -19
  221. package/src/utils/graphql/answerService/answer-queries.ts +80 -0
  222. package/src/utils/graphql/answerService/answerService.spec.ts +231 -0
  223. package/src/utils/graphql/answerService/answerService.ts +234 -0
  224. package/src/utils/graphql/graphql-request.ts +45 -0
  225. package/src/utils/graphql/sourceService.spec.ts +10 -0
  226. package/src/utils/graphql/sourceService.ts +71 -0
  227. package/src/utils/processData.spec.ts +15 -25
  228. package/src/utils/processData.ts +13 -15
  229. package/src/utils.ts +25 -0
  230. package/src/utils/answerService.spec.ts +0 -41
  231. package/src/utils/answerService.ts +0 -63
@@ -0,0 +1,177 @@
1
+ import { deepMerge, removeTypename } from '../../../utils';
2
+ import { graphqlQuery } from '../graphql-request';
3
+ import { getSourceDetail } from '../sourceService';
4
+ import * as queries from './answer-queries';
5
+ // eslint-disable-next-line no-shadow
6
+ export var OperationType;
7
+ (function (OperationType) {
8
+ OperationType["GetChartWithData"] = "GetChartWithData";
9
+ OperationType["GetTableWithHeadlineData"] = "GetTableWithHeadlineData";
10
+ })(OperationType || (OperationType = {}));
11
+ /**
12
+ * Class representing the answer service provided with the
13
+ * custom action payload. This service could be used to run
14
+ * graphql queries in the context of the answer on which the
15
+ * custom action was triggered.
16
+ *
17
+ * @example
18
+ * ```js
19
+ * embed.on(EmbedEvent.CustomAction, e => {
20
+ * const underlying = await e.answerService.getUnderlyingDataForPoint([
21
+ * 'col name 1'
22
+ * ]);
23
+ * const data = await underlying.fetchData(0, 100);
24
+ * })
25
+ * ```
26
+ * @version
27
+ * ThoughtSpot: 9.9.0.cl / SDK: 1.25.0
28
+ */
29
+ export class AnswerService {
30
+ constructor(session, answer, thoughtSpotHost, selectedPoints) {
31
+ this.session = session;
32
+ this.answer = answer;
33
+ this.thoughtSpotHost = thoughtSpotHost;
34
+ this.selectedPoints = selectedPoints;
35
+ this.session = removeTypename(session);
36
+ }
37
+ async getSourceDetail() {
38
+ const sourceId = this.answer.sources[0].header.guid;
39
+ return getSourceDetail(this.thoughtSpotHost, sourceId);
40
+ }
41
+ async removeColumns(columnIds) {
42
+ return this.executeQuery(queries.removeColumns, {
43
+ logicalColumnIds: columnIds,
44
+ });
45
+ }
46
+ async addColumns(columnIds) {
47
+ return this.executeQuery(queries.addColumns, {
48
+ columns: columnIds.map((colId) => ({ logicalColumnId: colId })),
49
+ });
50
+ }
51
+ async fetchData(offset = 0, size = 1000) {
52
+ const { answer } = await this.executeQuery(queries.getAnswerData, {
53
+ deadline: 0,
54
+ dataPaginationParams: {
55
+ isClientPaginated: true,
56
+ offset,
57
+ size,
58
+ },
59
+ });
60
+ const { columns, data } = answer.visualizations[0];
61
+ return {
62
+ columns,
63
+ data,
64
+ };
65
+ }
66
+ /**
67
+ *
68
+ * @param userLocale
69
+ * @param omitInfo Omit the download Info on top of the CSV
70
+ * @returns Response
71
+ */
72
+ async fetchCSVBlob(userLocale = 'en-us', omitInfo = false) {
73
+ if (omitInfo) {
74
+ console.warn('omitInfo not supported yet.');
75
+ }
76
+ const fetchUrl = `${this.thoughtSpotHost}/prism/download/answer/csv?sessionId=${this.session.sessionId}&genNo=${this.session.genNo}&userLocale=${userLocale}&exportFileName=data&omitInfo=${omitInfo}`;
77
+ return fetch(fetchUrl, {
78
+ credentials: 'include',
79
+ });
80
+ }
81
+ async getUnderlyingDataForPoint(outputColumnNames, selectedPoints) {
82
+ if (!selectedPoints && !this.selectedPoints) {
83
+ throw new Error('Needs to be triggered in context of a point');
84
+ }
85
+ if (!selectedPoints) {
86
+ selectedPoints = getSelectedPointsForUnderlyingDataQuery(this.selectedPoints);
87
+ }
88
+ const sourceDetail = await this.getSourceDetail();
89
+ const ouputColumnGuids = getGuidsFromColumnNames(sourceDetail, outputColumnNames);
90
+ const unAggAnswer = await graphqlQuery({
91
+ query: queries.getUnaggregatedAnswerSession,
92
+ variables: {
93
+ session: this.session,
94
+ columns: selectedPoints,
95
+ },
96
+ thoughtSpotHost: this.thoughtSpotHost,
97
+ });
98
+ const unaggAnswerSession = new AnswerService(unAggAnswer.id, unAggAnswer.answer, this.thoughtSpotHost);
99
+ const currentColumns = new Set(unAggAnswer.answer.visualizations[0].columns
100
+ .map((c) => c.column.referencedColumns[0].guid));
101
+ const columnsToAdd = [...ouputColumnGuids].filter((col) => !currentColumns.has(col));
102
+ if (columnsToAdd.length) {
103
+ await unaggAnswerSession.addColumns(columnsToAdd);
104
+ }
105
+ const columnsToRemove = [...currentColumns].filter((col) => !ouputColumnGuids.has(col));
106
+ if (columnsToRemove.length) {
107
+ await unaggAnswerSession.removeColumns(columnsToRemove);
108
+ }
109
+ return unaggAnswerSession;
110
+ }
111
+ async executeQuery(query, variables) {
112
+ const data = await graphqlQuery({
113
+ query,
114
+ variables: {
115
+ session: this.session,
116
+ ...variables,
117
+ },
118
+ thoughtSpotHost: this.thoughtSpotHost,
119
+ isCompositeQuery: false,
120
+ });
121
+ this.session = deepMerge(this.session, (data === null || data === void 0 ? void 0 : data.id) || {});
122
+ return data;
123
+ }
124
+ getSession() {
125
+ return this.session;
126
+ }
127
+ }
128
+ /**
129
+ *
130
+ * @param sourceDetail
131
+ * @param colNames
132
+ */
133
+ function getGuidsFromColumnNames(sourceDetail, colNames) {
134
+ const cols = sourceDetail.columns.reduce((colSet, col) => {
135
+ colSet[col.name] = col;
136
+ return colSet;
137
+ }, {});
138
+ return new Set(colNames.map((colName) => {
139
+ const col = cols[colName];
140
+ return col.id;
141
+ }));
142
+ }
143
+ /**
144
+ *
145
+ * @param selectedPoints
146
+ */
147
+ function getSelectedPointsForUnderlyingDataQuery(selectedPoints) {
148
+ const underlyingDataPoint = [];
149
+ /**
150
+ *
151
+ * @param colVal
152
+ */
153
+ function addPointFromColVal(colVal) {
154
+ const dataType = colVal.column.dataType;
155
+ const id = colVal.column.id;
156
+ let dataValue;
157
+ if (dataType === 'DATE') {
158
+ dataValue = [{
159
+ epochRange: {
160
+ startEpoch: colVal.value,
161
+ },
162
+ }];
163
+ }
164
+ else {
165
+ dataValue = [{ value: colVal.value }];
166
+ }
167
+ underlyingDataPoint.push({
168
+ columnId: colVal.column.id,
169
+ dataValue,
170
+ });
171
+ }
172
+ selectedPoints.forEach((p) => {
173
+ p.selectedAttributes.forEach(addPointFromColVal);
174
+ });
175
+ return underlyingDataPoint;
176
+ }
177
+ //# sourceMappingURL=answerService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"answerService.js","sourceRoot":"","sources":["../../../../../src/utils/graphql/answerService/answerService.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import 'jest-fetch-mock';
2
+ //# sourceMappingURL=answerService.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"answerService.spec.d.ts","sourceRoot":"","sources":["../../../../../src/utils/graphql/answerService/answerService.spec.ts"],"names":[],"mappings":"AAAA,OAAO,iBAAiB,CAAC"}
@@ -0,0 +1,199 @@
1
+ import 'jest-fetch-mock';
2
+ import { AnswerService } from './answerService';
3
+ import { getAnswerData, removeColumns } from './answer-queries';
4
+ const defaultSession = {
5
+ sessionId: 'id',
6
+ genNo: 1,
7
+ acSession: {
8
+ sessionId: 'ac',
9
+ genNo: 0,
10
+ },
11
+ };
12
+ /**
13
+ *
14
+ * @param answer
15
+ * @param point
16
+ */
17
+ function createAnswerService(answer = {}, point) {
18
+ return new AnswerService(defaultSession, answer, 'https://tshost', point);
19
+ }
20
+ describe('Answer service tests', () => {
21
+ beforeEach(() => {
22
+ fetchMock.resetMocks();
23
+ });
24
+ test('Execute query should execute the supplied graphql on the session', async () => {
25
+ fetchMock.mockResponseOnce(JSON.stringify({
26
+ data: {
27
+ Bla: {
28
+ id: {},
29
+ },
30
+ },
31
+ }));
32
+ const answerService = createAnswerService();
33
+ answerService.executeQuery('query Bla {}', { a: 1 });
34
+ expect(fetchMock).toBeCalledWith('https://tshost/prism/?op=Bla', expect.objectContaining({
35
+ body: JSON.stringify({
36
+ operationName: 'Bla',
37
+ query: 'query Bla {}',
38
+ variables: {
39
+ session: defaultSession,
40
+ a: 1,
41
+ },
42
+ }),
43
+ }));
44
+ });
45
+ test('Should return error when failure', async () => {
46
+ fetchMock.mockRejectOnce(new Error('testError'));
47
+ const answerService = createAnswerService();
48
+ const data = await answerService.executeQuery('query Bla {}', { a: 1 });
49
+ expect(data.message).toBe('testError');
50
+ });
51
+ test('fetchData should call the right graphql, and return data', async () => {
52
+ fetchMock.mockResponseOnce(JSON.stringify({
53
+ data: {
54
+ getAnswer: {
55
+ id: {},
56
+ answer: {
57
+ visualizations: [{
58
+ columns: [{
59
+ column: {
60
+ id: 'id1',
61
+ },
62
+ }],
63
+ data: {
64
+ foo: 1,
65
+ },
66
+ }],
67
+ },
68
+ },
69
+ },
70
+ }));
71
+ const answerService = createAnswerService();
72
+ const data = await answerService.fetchData(20, 10);
73
+ expect(fetchMock).toHaveBeenCalledWith('https://tshost/prism/?op=GetTableWithHeadlineData', expect.objectContaining({
74
+ body: JSON.stringify({
75
+ operationName: 'GetTableWithHeadlineData',
76
+ query: getAnswerData,
77
+ variables: {
78
+ session: defaultSession,
79
+ deadline: 0,
80
+ dataPaginationParams: {
81
+ isClientPaginated: true,
82
+ offset: 20,
83
+ size: 10,
84
+ },
85
+ },
86
+ }),
87
+ }));
88
+ expect(data.columns[0].column.id).toBe('id1');
89
+ expect(data.data.foo).toBe(1);
90
+ });
91
+ test('fetchCSVBlob should call the right API', async () => {
92
+ fetchMock.once('Bla');
93
+ const answerService = createAnswerService();
94
+ answerService.fetchCSVBlob(undefined, true);
95
+ expect(fetchMock).toHaveBeenCalledWith(`https://tshost/prism/download/answer/csv?sessionId=${defaultSession.sessionId}&genNo=${defaultSession.genNo}&userLocale=en-us&exportFileName=data&omitInfo=true`, expect.objectContaining({}));
96
+ });
97
+ test('getUnderlyingDataForPoint should call the right APIs', async () => {
98
+ fetchMock.mockResponses(JSON.stringify({
99
+ data: {
100
+ getSourceDetailById: [{
101
+ columns: [{
102
+ id: 'id1',
103
+ name: 'col1',
104
+ }, {
105
+ id: 'id2',
106
+ name: 'col2',
107
+ }, {
108
+ id: 'id3',
109
+ name: 'col3',
110
+ }],
111
+ }],
112
+ },
113
+ }), JSON.stringify({
114
+ data: {
115
+ Answer__getUnaggregatedAnswer: {
116
+ id: {
117
+ ...defaultSession,
118
+ },
119
+ answer: {
120
+ visualizations: [{
121
+ columns: [{
122
+ column: {
123
+ id: 'oid1',
124
+ name: 'col1',
125
+ referencedColumns: [{
126
+ guid: 'id1',
127
+ }],
128
+ },
129
+ }],
130
+ }],
131
+ },
132
+ },
133
+ },
134
+ }), JSON.stringify({
135
+ data: {
136
+ Answer__addColumn: {
137
+ id: {
138
+ genNo: 2,
139
+ },
140
+ },
141
+ },
142
+ }), JSON.stringify({
143
+ data: {
144
+ Answer__removeColumns: {
145
+ id: {
146
+ genNo: 3,
147
+ },
148
+ },
149
+ },
150
+ }));
151
+ const answerService = createAnswerService({
152
+ sources: [{
153
+ header: {
154
+ guid: 'source1',
155
+ },
156
+ }],
157
+ }, [{
158
+ selectedAttributes: [{
159
+ column: {
160
+ id: 'oid1',
161
+ name: 'col1',
162
+ dataType: 'CHAR',
163
+ },
164
+ value: '1',
165
+ }, {
166
+ column: {
167
+ id: 'oid3',
168
+ name: 'col3',
169
+ dataType: 'DATE',
170
+ },
171
+ value: 12345,
172
+ }],
173
+ selectedMeasures: [],
174
+ }]);
175
+ const underlying = await answerService.getUnderlyingDataForPoint(['col2']);
176
+ expect(fetchMock).toHaveBeenCalledTimes(4);
177
+ expect(underlying.getSession().genNo).toBe(3);
178
+ expect(fetchMock).toHaveBeenCalledWith('https://tshost/prism/?op=RemoveColumns', expect.objectContaining({
179
+ body: JSON.stringify({
180
+ operationName: 'RemoveColumns',
181
+ query: removeColumns,
182
+ variables: {
183
+ session: {
184
+ ...defaultSession,
185
+ genNo: 2,
186
+ },
187
+ logicalColumnIds: [
188
+ 'id1',
189
+ ],
190
+ },
191
+ }),
192
+ }));
193
+ });
194
+ test('getUnderlyingDataForPoint should throw when no point is selected', async () => {
195
+ const answerService = createAnswerService({}, null);
196
+ await expect(answerService.getUnderlyingDataForPoint(['col2'])).rejects.toThrow();
197
+ });
198
+ });
199
+ //# sourceMappingURL=answerService.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"answerService.spec.js","sourceRoot":"","sources":["../../../../../src/utils/graphql/answerService/answerService.spec.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ *
3
+ * @param root0
4
+ * @param root0.query
5
+ * @param root0.variables
6
+ * @param root0.thoughtSpotHost
7
+ * @param root0.isCompositeQuery
8
+ */
9
+ export declare function graphqlQuery({ query, variables, thoughtSpotHost, isCompositeQuery, }: {
10
+ query: string;
11
+ variables: any;
12
+ thoughtSpotHost: string;
13
+ isCompositeQuery?: boolean;
14
+ }): Promise<any>;
15
+ //# sourceMappingURL=graphql-request.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graphql-request.d.ts","sourceRoot":"","sources":["../../../../src/utils/graphql/graphql-request.ts"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AACH,wBAAsB,YAAY,CAAC,EAC/B,KAAK,EACL,SAAS,EACT,eAAe,EACf,gBAAwB,GAC3B,EAAE;IACC,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,GAAG,CAAC;IACf,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,CAAC,EAAE,OAAO,CAAA;CAC7B,gBAwBA"}
@@ -0,0 +1,36 @@
1
+ import { getOperationNameFromQuery } from '../../utils';
2
+ /**
3
+ *
4
+ * @param root0
5
+ * @param root0.query
6
+ * @param root0.variables
7
+ * @param root0.thoughtSpotHost
8
+ * @param root0.isCompositeQuery
9
+ */
10
+ export async function graphqlQuery({ query, variables, thoughtSpotHost, isCompositeQuery = false, }) {
11
+ const operationName = getOperationNameFromQuery(query);
12
+ try {
13
+ const response = await fetch(`${thoughtSpotHost}/prism/?op=${operationName}`, {
14
+ method: 'POST',
15
+ headers: {
16
+ 'content-type': 'application/json;charset=UTF-8',
17
+ 'x-requested-by': 'ThoughtSpot',
18
+ accept: '*/*',
19
+ 'accept-language': 'en-us',
20
+ },
21
+ body: JSON.stringify({
22
+ operationName,
23
+ query,
24
+ variables,
25
+ }),
26
+ credentials: 'include',
27
+ });
28
+ const result = await response.json();
29
+ const dataValues = Object.values(result.data);
30
+ return (isCompositeQuery) ? result.data : dataValues[0];
31
+ }
32
+ catch (error) {
33
+ return error;
34
+ }
35
+ }
36
+ //# sourceMappingURL=graphql-request.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graphql-request.js","sourceRoot":"","sources":["../../../../src/utils/graphql/graphql-request.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AAExD;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,EAC/B,KAAK,EACL,SAAS,EACT,eAAe,EACf,gBAAgB,GAAG,KAAK,GAM3B;IACG,MAAM,aAAa,GAAG,yBAAyB,CAAC,KAAK,CAAC,CAAC;IACvD,IAAI;QACA,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,eAAe,cAAc,aAAa,EAAE,EAAE;YAC1E,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACL,cAAc,EAAE,gCAAgC;gBAChD,gBAAgB,EAAE,aAAa;gBAC/B,MAAM,EAAE,KAAK;gBACb,iBAAiB,EAAE,OAAO;aAC7B;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;gBACjB,aAAa;gBACb,KAAK;gBACL,SAAS;aACZ,CAAC;YACF,WAAW,EAAE,SAAS;SACzB,CAAC,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QACrC,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC9C,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;KAC3D;IAAC,OAAO,KAAK,EAAE;QACZ,OAAO,KAAK,CAAC;KAChB;AACL,CAAC"}
@@ -0,0 +1,8 @@
1
+ export declare const getSourceDetailQuery = "\n query GetSourceDetail($ids: [GUID!]!) {\n getSourceDetailById(ids: $ids, type: LOGICAL_TABLE) {\n id\n name\n description\n authorName\n authorDisplayName\n isExternal\n type\n created\n modified\n columns {\n id\n name\n author\n authorDisplayName\n description\n dataType\n type\n modified\n ownerName\n owner\n dataRecency\n sources {\n tableId\n tableName\n columnId\n columnName\n __typename\n }\n synonyms\n cohortAnswerId\n __typename\n }\n relationships\n destinationRelationships\n dataSourceId\n __typename\n }\n } \n";
2
+ /**
3
+ *
4
+ * @param thoughtSpotHost
5
+ * @param sourceId
6
+ */
7
+ export declare function getSourceDetail(thoughtSpotHost: string, sourceId: string): Promise<any>;
8
+ //# sourceMappingURL=sourceService.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sourceService.d.ts","sourceRoot":"","sources":["../../../../src/utils/graphql/sourceService.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,oBAAoB,43BAyChC,CAAC;AAIF;;;;GAIG;AACH,wBAAsB,eAAe,CACjC,eAAe,EAAE,MAAM,EACvB,QAAQ,EAAE,MAAM,GACjB,OAAO,CAAC,GAAG,CAAC,CAed"}
@@ -0,0 +1,65 @@
1
+ import { graphqlQuery } from './graphql-request';
2
+ export const getSourceDetailQuery = `
3
+ query GetSourceDetail($ids: [GUID!]!) {
4
+ getSourceDetailById(ids: $ids, type: LOGICAL_TABLE) {
5
+ id
6
+ name
7
+ description
8
+ authorName
9
+ authorDisplayName
10
+ isExternal
11
+ type
12
+ created
13
+ modified
14
+ columns {
15
+ id
16
+ name
17
+ author
18
+ authorDisplayName
19
+ description
20
+ dataType
21
+ type
22
+ modified
23
+ ownerName
24
+ owner
25
+ dataRecency
26
+ sources {
27
+ tableId
28
+ tableName
29
+ columnId
30
+ columnName
31
+ __typename
32
+ }
33
+ synonyms
34
+ cohortAnswerId
35
+ __typename
36
+ }
37
+ relationships
38
+ destinationRelationships
39
+ dataSourceId
40
+ __typename
41
+ }
42
+ }
43
+ `;
44
+ const sourceDetailCache = new Map();
45
+ /**
46
+ *
47
+ * @param thoughtSpotHost
48
+ * @param sourceId
49
+ */
50
+ export async function getSourceDetail(thoughtSpotHost, sourceId) {
51
+ if (sourceDetailCache.has(sourceId)) {
52
+ return sourceDetailCache.get(sourceId);
53
+ }
54
+ const details = await graphqlQuery({
55
+ query: getSourceDetailQuery,
56
+ variables: {
57
+ ids: [sourceId],
58
+ },
59
+ thoughtSpotHost,
60
+ });
61
+ const souceDetails = details[0];
62
+ sourceDetailCache.set(sourceId, souceDetails);
63
+ return souceDetails;
64
+ }
65
+ //# sourceMappingURL=sourceService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sourceService.js","sourceRoot":"","sources":["../../../../src/utils/graphql/sourceService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,MAAM,CAAC,MAAM,oBAAoB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyCnC,CAAC;AAEF,MAAM,iBAAiB,GAAG,IAAI,GAAG,EAAe,CAAC;AAEjD;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACjC,eAAuB,EACvB,QAAgB;IAEhB,IAAI,iBAAiB,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;QACjC,OAAO,iBAAiB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;KAC1C;IACD,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC;QAC/B,KAAK,EAAE,oBAAoB;QAC3B,SAAS,EAAE;YACP,GAAG,EAAE,CAAC,QAAQ,CAAC;SAClB;QACD,eAAe;KAClB,CAAC,CAAC;IAEH,MAAM,YAAY,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IAChC,iBAAiB,CAAC,GAAG,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;IAC9C,OAAO,YAAY,CAAC;AACxB,CAAC"}
@@ -0,0 +1,2 @@
1
+ import 'jest-fetch-mock';
2
+ //# sourceMappingURL=sourceService.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sourceService.spec.d.ts","sourceRoot":"","sources":["../../../../src/utils/graphql/sourceService.spec.ts"],"names":[],"mappings":"AAAA,OAAO,iBAAiB,CAAC"}
@@ -0,0 +1,10 @@
1
+ import 'jest-fetch-mock';
2
+ import { getSourceDetail } from './sourceService';
3
+ describe('Source service tests', () => {
4
+ test('Should return source detail and cache it', async () => {
5
+ await getSourceDetail('https://tshost', 'id');
6
+ await getSourceDetail('https://tshost', 'id');
7
+ expect(fetchMock).toBeCalledTimes(1);
8
+ });
9
+ });
10
+ //# sourceMappingURL=sourceService.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sourceService.spec.js","sourceRoot":"","sources":["../../../../src/utils/graphql/sourceService.spec.ts"],"names":[],"mappings":"AAAA,OAAO,iBAAiB,CAAC;AACzB,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAElD,QAAQ,CAAC,sBAAsB,EAAE,GAAG,EAAE;IAClC,IAAI,CAAC,0CAA0C,EAAE,KAAK,IAAI,EAAE;QACxD,MAAM,eAAe,CAAC,gBAAgB,EAAE,IAAI,CAAC,CAAC;QAC9C,MAAM,eAAe,CAAC,gBAAgB,EAAE,IAAI,CAAC,CAAC;QAC9C,MAAM,CAAC,SAAS,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"processData.d.ts","sourceRoot":"","sources":["../../../src/utils/processData.ts"],"names":[],"mappings":"AAQA,OAAO,EAAY,UAAU,EAAiB,MAAM,UAAU,CAAC;AAG/D;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,GAAG,EAAE,eAAe,EAAE,MAAM,OAclE;AA0ED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAC5B,IAAI,EAAE,UAAU,EAChB,CAAC,EAAE,GAAG,EACN,eAAe,EAAE,MAAM,EACvB,WAAW,EAAE,OAAO,GACrB,GAAG,CAeL"}
1
+ {"version":3,"file":"processData.d.ts","sourceRoot":"","sources":["../../../src/utils/processData.ts"],"names":[],"mappings":"AAQA,OAAO,EAAiC,UAAU,EAAE,MAAM,UAAU,CAAC;AAGrE;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,GAAG,EAAE,eAAe,EAAE,MAAM,OAYlE;AA0ED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAC5B,IAAI,EAAE,UAAU,EAChB,CAAC,EAAE,GAAG,EACN,eAAe,EAAE,MAAM,EACvB,WAAW,EAAE,OAAO,GACrB,GAAG,CAeL"}
@@ -1,23 +1,19 @@
1
1
  import { disableAutoLogin, getEmbedConfig, notifyAuthFailure, notifyAuthSuccess, notifyLogout, } from '../embed/base';
2
2
  import { AuthFailureType, initSession } from '../auth';
3
- import { AuthType, EmbedEvent, OperationType } from '../types';
4
- import { getAnswerServiceInstance } from './answerService';
3
+ import { AuthType, EmbedEvent } from '../types';
4
+ import { AnswerService } from './graphql/answerService/answerService';
5
5
  /**
6
6
  *
7
7
  * @param e
8
8
  * @param thoughtSpotHost
9
9
  */
10
10
  export function processCustomAction(e, thoughtSpotHost) {
11
- var _a;
12
- if ([OperationType.GetChartWithData, OperationType.GetTableWithHeadlineData].includes((_a = e.data) === null || _a === void 0 ? void 0 : _a.operation)) {
13
- const { session, query, operation } = e.data;
14
- const answerService = getAnswerServiceInstance(session, query, operation, thoughtSpotHost);
15
- return {
16
- ...e,
17
- answerService,
18
- };
19
- }
20
- return e;
11
+ const { session, embedAnswerData, contextMenuPoints } = e.data;
12
+ const answerService = new AnswerService(session, embedAnswerData, thoughtSpotHost, contextMenuPoints === null || contextMenuPoints === void 0 ? void 0 : contextMenuPoints.selectedPoints);
13
+ return {
14
+ ...e,
15
+ answerService,
16
+ };
21
17
  }
22
18
  /**
23
19
  *
@@ -1 +1 @@
1
- {"version":3,"file":"processData.js","sourceRoot":"","sources":["../../../src/utils/processData.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"processData.js","sourceRoot":"","sources":["../../../src/utils/processData.ts"],"names":[],"mappings":"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"}