@thoughtspot/visual-embed-sdk 1.24.0 → 1.24.2

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 (245) hide show
  1. package/cjs/package.json +2 -3
  2. package/cjs/src/embed/app.d.ts +23 -1
  3. package/cjs/src/embed/app.d.ts.map +1 -1
  4. package/cjs/src/embed/app.js +5 -1
  5. package/cjs/src/embed/app.js.map +1 -1
  6. package/cjs/src/embed/base.d.ts +3 -4
  7. package/cjs/src/embed/base.d.ts.map +1 -1
  8. package/cjs/src/embed/base.js +3 -4
  9. package/cjs/src/embed/base.js.map +1 -1
  10. package/cjs/src/embed/liveboard.d.ts +23 -1
  11. package/cjs/src/embed/liveboard.d.ts.map +1 -1
  12. package/cjs/src/embed/liveboard.js +11 -1
  13. package/cjs/src/embed/liveboard.js.map +1 -1
  14. package/cjs/src/embed/sage.d.ts +2 -1
  15. package/cjs/src/embed/sage.d.ts.map +1 -1
  16. package/cjs/src/embed/sage.js +1 -0
  17. package/cjs/src/embed/sage.js.map +1 -1
  18. package/cjs/src/embed/search-bar.d.ts +2 -1
  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 +2 -1
  23. package/cjs/src/embed/search.d.ts.map +1 -1
  24. package/cjs/src/embed/search.js +1 -0
  25. package/cjs/src/embed/search.js.map +1 -1
  26. package/cjs/src/embed/ts-embed.d.ts +1 -0
  27. package/cjs/src/embed/ts-embed.d.ts.map +1 -1
  28. package/cjs/src/embed/ts-embed.js +4 -10
  29. package/cjs/src/embed/ts-embed.js.map +1 -1
  30. package/cjs/src/embed/ts-embed.spec.js +49 -2
  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/types.d.ts +46 -39
  42. package/cjs/src/types.d.ts.map +1 -1
  43. package/cjs/src/types.js +7 -13
  44. package/cjs/src/types.js.map +1 -1
  45. package/cjs/src/utils/graphql/answerService/answer-queries.d.ts +5 -0
  46. package/cjs/src/utils/graphql/answerService/answer-queries.d.ts.map +1 -0
  47. package/cjs/src/utils/graphql/answerService/answer-queries.js +80 -0
  48. package/cjs/src/utils/graphql/answerService/answer-queries.js.map +1 -0
  49. package/cjs/src/utils/graphql/answerService/answerService.d.ts +61 -0
  50. package/cjs/src/utils/graphql/answerService/answerService.d.ts.map +1 -0
  51. package/cjs/src/utils/graphql/answerService/answerService.js +182 -0
  52. package/cjs/src/utils/graphql/answerService/answerService.js.map +1 -0
  53. package/cjs/src/utils/graphql/answerService/answerService.spec.d.ts +2 -0
  54. package/cjs/src/utils/graphql/answerService/answerService.spec.d.ts.map +1 -0
  55. package/cjs/src/utils/graphql/answerService/answerService.spec.js +201 -0
  56. package/cjs/src/utils/graphql/answerService/answerService.spec.js.map +1 -0
  57. package/cjs/src/utils/graphql/graphql-request.d.ts +15 -0
  58. package/cjs/src/utils/graphql/graphql-request.d.ts.map +1 -0
  59. package/cjs/src/utils/graphql/graphql-request.js +40 -0
  60. package/cjs/src/utils/graphql/graphql-request.js.map +1 -0
  61. package/cjs/src/utils/graphql/sourceService.d.ts +8 -0
  62. package/cjs/src/utils/graphql/sourceService.d.ts.map +1 -0
  63. package/cjs/src/utils/graphql/sourceService.js +69 -0
  64. package/cjs/src/utils/graphql/sourceService.js.map +1 -0
  65. package/cjs/src/utils/graphql/sourceService.spec.d.ts +2 -0
  66. package/cjs/src/utils/graphql/sourceService.spec.d.ts.map +1 -0
  67. package/cjs/src/utils/graphql/sourceService.spec.js +12 -0
  68. package/cjs/src/utils/graphql/sourceService.spec.js.map +1 -0
  69. package/cjs/src/utils/processData.d.ts.map +1 -1
  70. package/cjs/src/utils/processData.js +7 -11
  71. package/cjs/src/utils/processData.js.map +1 -1
  72. package/cjs/src/utils/processData.spec.js +13 -17
  73. package/cjs/src/utils/processData.spec.js.map +1 -1
  74. package/cjs/src/utils.d.ts +6 -0
  75. package/cjs/src/utils.d.ts.map +1 -1
  76. package/cjs/src/utils.js +27 -2
  77. package/cjs/src/utils.js.map +1 -1
  78. package/cjs/src/utils.spec.js +10 -0
  79. package/cjs/src/utils.spec.js.map +1 -1
  80. package/dist/src/embed/app.d.ts +23 -1
  81. package/dist/src/embed/app.d.ts.map +1 -1
  82. package/dist/src/embed/base.d.ts +3 -4
  83. package/dist/src/embed/base.d.ts.map +1 -1
  84. package/dist/src/embed/liveboard.d.ts +23 -1
  85. package/dist/src/embed/liveboard.d.ts.map +1 -1
  86. package/dist/src/embed/sage.d.ts +2 -1
  87. package/dist/src/embed/sage.d.ts.map +1 -1
  88. package/dist/src/embed/search-bar.d.ts +2 -1
  89. package/dist/src/embed/search-bar.d.ts.map +1 -1
  90. package/dist/src/embed/search.d.ts +2 -1
  91. package/dist/src/embed/search.d.ts.map +1 -1
  92. package/dist/src/embed/ts-embed.d.ts +1 -0
  93. package/dist/src/embed/ts-embed.d.ts.map +1 -1
  94. package/dist/src/index.d.ts +3 -2
  95. package/dist/src/index.d.ts.map +1 -1
  96. package/dist/src/mixpanel-service.d.ts.map +1 -1
  97. package/dist/src/types.d.ts +46 -39
  98. package/dist/src/types.d.ts.map +1 -1
  99. package/dist/src/utils/graphql/answerService/answer-queries.d.ts +5 -0
  100. package/dist/src/utils/graphql/answerService/answer-queries.d.ts.map +1 -0
  101. package/dist/src/utils/graphql/answerService/answerService.d.ts +61 -0
  102. package/dist/src/utils/graphql/answerService/answerService.d.ts.map +1 -0
  103. package/dist/src/utils/graphql/answerService/answerService.spec.d.ts +2 -0
  104. package/dist/src/utils/graphql/answerService/answerService.spec.d.ts.map +1 -0
  105. package/dist/src/utils/graphql/graphql-request.d.ts +15 -0
  106. package/dist/src/utils/graphql/graphql-request.d.ts.map +1 -0
  107. package/dist/src/utils/graphql/sourceService.d.ts +8 -0
  108. package/dist/src/utils/graphql/sourceService.d.ts.map +1 -0
  109. package/dist/src/utils/graphql/sourceService.spec.d.ts +2 -0
  110. package/dist/src/utils/graphql/sourceService.spec.d.ts.map +1 -0
  111. package/dist/src/utils/processData.d.ts.map +1 -1
  112. package/dist/src/utils.d.ts +6 -0
  113. package/dist/src/utils.d.ts.map +1 -1
  114. package/dist/tsembed-react.es.js +400 -81
  115. package/dist/tsembed-react.js +400 -81
  116. package/dist/tsembed.es.js +452 -89
  117. package/dist/tsembed.js +452 -88
  118. package/dist/visual-embed-sdk-react-full.d.ts +158 -49
  119. package/dist/visual-embed-sdk-react.d.ts +158 -49
  120. package/dist/visual-embed-sdk.d.ts +158 -49
  121. package/lib/package.json +2 -3
  122. package/lib/src/embed/app.d.ts +23 -1
  123. package/lib/src/embed/app.d.ts.map +1 -1
  124. package/lib/src/embed/app.js +5 -1
  125. package/lib/src/embed/app.js.map +1 -1
  126. package/lib/src/embed/base.d.ts +3 -4
  127. package/lib/src/embed/base.d.ts.map +1 -1
  128. package/lib/src/embed/base.js +3 -4
  129. package/lib/src/embed/base.js.map +1 -1
  130. package/lib/src/embed/liveboard.d.ts +23 -1
  131. package/lib/src/embed/liveboard.d.ts.map +1 -1
  132. package/lib/src/embed/liveboard.js +11 -1
  133. package/lib/src/embed/liveboard.js.map +1 -1
  134. package/lib/src/embed/sage.d.ts +2 -1
  135. package/lib/src/embed/sage.d.ts.map +1 -1
  136. package/lib/src/embed/sage.js +1 -0
  137. package/lib/src/embed/sage.js.map +1 -1
  138. package/lib/src/embed/search-bar.d.ts +2 -1
  139. package/lib/src/embed/search-bar.d.ts.map +1 -1
  140. package/lib/src/embed/search-bar.js +1 -0
  141. package/lib/src/embed/search-bar.js.map +1 -1
  142. package/lib/src/embed/search.d.ts +2 -1
  143. package/lib/src/embed/search.d.ts.map +1 -1
  144. package/lib/src/embed/search.js +1 -0
  145. package/lib/src/embed/search.js.map +1 -1
  146. package/lib/src/embed/ts-embed.d.ts +1 -0
  147. package/lib/src/embed/ts-embed.d.ts.map +1 -1
  148. package/lib/src/embed/ts-embed.js +4 -10
  149. package/lib/src/embed/ts-embed.js.map +1 -1
  150. package/lib/src/embed/ts-embed.spec.js +49 -2
  151. package/lib/src/embed/ts-embed.spec.js.map +1 -1
  152. package/lib/src/index.d.ts +3 -2
  153. package/lib/src/index.d.ts.map +1 -1
  154. package/lib/src/index.js +2 -1
  155. package/lib/src/index.js.map +1 -1
  156. package/lib/src/mixpanel-service.d.ts.map +1 -1
  157. package/lib/src/mixpanel-service.js +2 -0
  158. package/lib/src/mixpanel-service.js.map +1 -1
  159. package/lib/src/mixpanel-service.spec.js +1 -0
  160. package/lib/src/mixpanel-service.spec.js.map +1 -1
  161. package/lib/src/types.d.ts +46 -39
  162. package/lib/src/types.d.ts.map +1 -1
  163. package/lib/src/types.js +6 -12
  164. package/lib/src/types.js.map +1 -1
  165. package/lib/src/utils/graphql/answerService/answer-queries.d.ts +5 -0
  166. package/lib/src/utils/graphql/answerService/answer-queries.d.ts.map +1 -0
  167. package/lib/src/utils/graphql/answerService/answer-queries.js +77 -0
  168. package/lib/src/utils/graphql/answerService/answer-queries.js.map +1 -0
  169. package/lib/src/utils/graphql/answerService/answerService.d.ts +61 -0
  170. package/lib/src/utils/graphql/answerService/answerService.d.ts.map +1 -0
  171. package/lib/src/utils/graphql/answerService/answerService.js +177 -0
  172. package/lib/src/utils/graphql/answerService/answerService.js.map +1 -0
  173. package/lib/src/utils/graphql/answerService/answerService.spec.d.ts +2 -0
  174. package/lib/src/utils/graphql/answerService/answerService.spec.d.ts.map +1 -0
  175. package/lib/src/utils/graphql/answerService/answerService.spec.js +199 -0
  176. package/lib/src/utils/graphql/answerService/answerService.spec.js.map +1 -0
  177. package/lib/src/utils/graphql/graphql-request.d.ts +15 -0
  178. package/lib/src/utils/graphql/graphql-request.d.ts.map +1 -0
  179. package/lib/src/utils/graphql/graphql-request.js +36 -0
  180. package/lib/src/utils/graphql/graphql-request.js.map +1 -0
  181. package/lib/src/utils/graphql/sourceService.d.ts +8 -0
  182. package/lib/src/utils/graphql/sourceService.d.ts.map +1 -0
  183. package/lib/src/utils/graphql/sourceService.js +65 -0
  184. package/lib/src/utils/graphql/sourceService.js.map +1 -0
  185. package/lib/src/utils/graphql/sourceService.spec.d.ts +2 -0
  186. package/lib/src/utils/graphql/sourceService.spec.d.ts.map +1 -0
  187. package/lib/src/utils/graphql/sourceService.spec.js +10 -0
  188. package/lib/src/utils/graphql/sourceService.spec.js.map +1 -0
  189. package/lib/src/utils/processData.d.ts.map +1 -1
  190. package/lib/src/utils/processData.js +8 -12
  191. package/lib/src/utils/processData.js.map +1 -1
  192. package/lib/src/utils/processData.spec.js +14 -18
  193. package/lib/src/utils/processData.spec.js.map +1 -1
  194. package/lib/src/utils.d.ts +6 -0
  195. package/lib/src/utils.d.ts.map +1 -1
  196. package/lib/src/utils.js +24 -1
  197. package/lib/src/utils.js.map +1 -1
  198. package/lib/src/utils.spec.js +10 -0
  199. package/lib/src/utils.spec.js.map +1 -1
  200. package/lib/src/visual-embed-sdk.d.ts +164 -50
  201. package/package.json +4 -5
  202. package/src/embed/app.ts +30 -1
  203. package/src/embed/base.ts +3 -4
  204. package/src/embed/liveboard.ts +36 -1
  205. package/src/embed/sage.ts +9 -4
  206. package/src/embed/search-bar.tsx +12 -1
  207. package/src/embed/search.ts +7 -1
  208. package/src/embed/ts-embed.spec.ts +51 -2
  209. package/src/embed/ts-embed.ts +4 -12
  210. package/src/index.ts +5 -0
  211. package/src/mixpanel-service.spec.ts +1 -0
  212. package/src/mixpanel-service.ts +1 -0
  213. package/src/types.ts +50 -40
  214. package/src/utils/graphql/answerService/answer-queries.ts +80 -0
  215. package/src/utils/graphql/answerService/answerService.spec.ts +231 -0
  216. package/src/utils/graphql/answerService/answerService.ts +234 -0
  217. package/src/utils/graphql/graphql-request.ts +45 -0
  218. package/src/utils/graphql/sourceService.spec.ts +10 -0
  219. package/src/utils/graphql/sourceService.ts +71 -0
  220. package/src/utils/processData.spec.ts +15 -25
  221. package/src/utils/processData.ts +13 -15
  222. package/src/utils.spec.ts +13 -0
  223. package/src/utils.ts +25 -1
  224. package/cjs/src/utils/answerService.d.ts +0 -10
  225. package/cjs/src/utils/answerService.d.ts.map +0 -1
  226. package/cjs/src/utils/answerService.js +0 -61
  227. package/cjs/src/utils/answerService.js.map +0 -1
  228. package/cjs/src/utils/answerService.spec.d.ts +0 -2
  229. package/cjs/src/utils/answerService.spec.d.ts.map +0 -1
  230. package/cjs/src/utils/answerService.spec.js +0 -31
  231. package/cjs/src/utils/answerService.spec.js.map +0 -1
  232. package/dist/src/utils/answerService.d.ts +0 -10
  233. package/dist/src/utils/answerService.d.ts.map +0 -1
  234. package/dist/src/utils/answerService.spec.d.ts +0 -2
  235. package/dist/src/utils/answerService.spec.d.ts.map +0 -1
  236. package/lib/src/utils/answerService.d.ts +0 -10
  237. package/lib/src/utils/answerService.d.ts.map +0 -1
  238. package/lib/src/utils/answerService.js +0 -57
  239. package/lib/src/utils/answerService.js.map +0 -1
  240. package/lib/src/utils/answerService.spec.d.ts +0 -2
  241. package/lib/src/utils/answerService.spec.d.ts.map +0 -1
  242. package/lib/src/utils/answerService.spec.js +0 -29
  243. package/lib/src/utils/answerService.spec.js.map +0 -1
  244. package/src/utils/answerService.spec.ts +0 -41
  245. package/src/utils/answerService.ts +0 -63
@@ -0,0 +1,77 @@
1
+ const bachSessionId = `
2
+ id {
3
+ sessionId
4
+ genNo
5
+ acSession {
6
+ sessionId
7
+ genNo
8
+ }
9
+ }
10
+ `;
11
+ export const getUnaggregatedAnswerSession = `
12
+ mutation GetUnAggregatedAnswerSession($session: BachSessionIdInput!, $columns: [UserPointSelectionInput!]!) {
13
+ Answer__getUnaggregatedAnswer(session: $session, columns: $columns) {
14
+ ${bachSessionId}
15
+ answer {
16
+ visualizations {
17
+ ... on TableViz {
18
+ columns {
19
+ column {
20
+ id
21
+ name
22
+ referencedColumns {
23
+ guid
24
+ displayName
25
+ }
26
+ }
27
+ }
28
+ }
29
+ }
30
+ }
31
+ }
32
+ }
33
+ `;
34
+ export const removeColumns = `
35
+ mutation RemoveColumns($session: BachSessionIdInput!, $logicalColumnIds: [GUID!], $columnIds: [GUID!]) {
36
+ Answer__removeColumns(
37
+ session: $session
38
+ logicalColumnIds: $logicalColumnIds
39
+ columnIds: $columnIds
40
+ ) {
41
+ ${bachSessionId}
42
+ }
43
+ }
44
+ `;
45
+ export const addColumns = `
46
+ mutation AddColumns($session: BachSessionIdInput!, $columns: [AnswerColumnInfo!]!) {
47
+ Answer__addColumn(session: $session, columns: $columns) {
48
+ ${bachSessionId}
49
+ }
50
+ }
51
+ `;
52
+ export const getAnswerData = `
53
+ query GetTableWithHeadlineData($session: BachSessionIdInput!, $deadline: Int!, $dataPaginationParams: DataPaginationParamsInput!) {
54
+ getAnswer(session: $session) {
55
+ ${bachSessionId}
56
+ answer {
57
+ id
58
+ visualizations {
59
+ id
60
+ ... on TableViz {
61
+ columns {
62
+ column {
63
+ id
64
+ name
65
+ type
66
+ aggregationType
67
+ dataType
68
+ }
69
+ }
70
+ data(deadline: $deadline, pagination: $dataPaginationParams)
71
+ }
72
+ }
73
+ }
74
+ }
75
+ }
76
+ `;
77
+ //# sourceMappingURL=answer-queries.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"answer-queries.js","sourceRoot":"","sources":["../../../../../src/utils/graphql/answerService/answer-queries.ts"],"names":[],"mappings":"AAAA,MAAM,aAAa,GAAG;;;;;;;;;CASrB,CAAC;AAEF,MAAM,CAAC,MAAM,4BAA4B,GAAG;;;UAGlC,aAAa;;;;;;;;;;;;;;;;;;;CAmBtB,CAAC;AAEF,MAAM,CAAC,MAAM,aAAa,GAAG;;;;;;;cAOf,aAAa;;;KAGtB,CAAC;AAEN,MAAM,CAAC,MAAM,UAAU,GAAG;;;cAGZ,aAAa;;;KAGtB,CAAC;AAEN,MAAM,CAAC,MAAM,aAAa,GAAG;;;cAGf,aAAa;;;;;;;;;;;;;;;;;;;;;CAqB1B,CAAC"}
@@ -0,0 +1,61 @@
1
+ import type { VizPoint } from '../../../types';
2
+ export interface SessionInterface {
3
+ sessionId: string;
4
+ genNo: number;
5
+ acSession: {
6
+ sessionId: string;
7
+ genNo: number;
8
+ };
9
+ }
10
+ export declare enum OperationType {
11
+ GetChartWithData = "GetChartWithData",
12
+ GetTableWithHeadlineData = "GetTableWithHeadlineData"
13
+ }
14
+ interface UnderlyingDataPoint {
15
+ columnId: string;
16
+ dataValue: any;
17
+ }
18
+ /**
19
+ * Class representing the answer service provided with the
20
+ * custom action payload. This service could be used to run
21
+ * graphql queries in the context of the answer on which the
22
+ * custom action was triggered.
23
+ *
24
+ * @example
25
+ * ```js
26
+ * embed.on(EmbedEvent.CustomAction, e => {
27
+ * const underlying = await e.answerService.getUnderlyingDataForPoint([
28
+ * 'col name 1'
29
+ * ]);
30
+ * const data = await underlying.fetchData(0, 100);
31
+ * })
32
+ * ```
33
+ * @version
34
+ * ThoughtSpot: 9.9.0.cl / SDK: 1.25.0
35
+ */
36
+ export declare class AnswerService {
37
+ private session;
38
+ private answer;
39
+ private thoughtSpotHost;
40
+ private selectedPoints?;
41
+ constructor(session: SessionInterface, answer: any, thoughtSpotHost: string, selectedPoints?: VizPoint[]);
42
+ getSourceDetail(): Promise<any>;
43
+ removeColumns(columnIds: string[]): Promise<any>;
44
+ addColumns(columnIds: string[]): Promise<any>;
45
+ fetchData(offset?: number, size?: number): Promise<{
46
+ columns: any;
47
+ data: any;
48
+ }>;
49
+ /**
50
+ *
51
+ * @param userLocale
52
+ * @param omitInfo Omit the download Info on top of the CSV
53
+ * @returns Response
54
+ */
55
+ fetchCSVBlob(userLocale?: string, omitInfo?: boolean): Promise<Response>;
56
+ getUnderlyingDataForPoint(outputColumnNames: string[], selectedPoints?: UnderlyingDataPoint[]): Promise<AnswerService>;
57
+ executeQuery(query: string, variables: any): Promise<any>;
58
+ getSession(): SessionInterface;
59
+ }
60
+ export {};
61
+ //# sourceMappingURL=answerService.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"answerService.d.ts","sourceRoot":"","sources":["../../../../../src/utils/graphql/answerService/answerService.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAe,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAM5D,MAAM,WAAW,gBAAgB;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;CACnD;AAGD,oBAAY,aAAa;IACrB,gBAAgB,qBAAqB;IACrC,wBAAwB,6BAA6B;CACxD;AAED,UAAU,mBAAmB;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,GAAG,CAAC;CAClB;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,qBAAa,aAAa;IAElB,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,eAAe;IACvB,OAAO,CAAC,cAAc,CAAC;gBAHf,OAAO,EAAE,gBAAgB,EACzB,MAAM,EAAE,GAAG,EACX,eAAe,EAAE,MAAM,EACvB,cAAc,CAAC,EAAE,QAAQ,EAAE;IAK1B,eAAe;IAQf,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE;IASjC,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE;IAS9B,SAAS,CAAC,MAAM,SAAI,EAAE,IAAI,SAAO;;;;IAmB9C;;;;;OAKG;IACU,YAAY,CAAC,UAAU,SAAU,EAAE,QAAQ,UAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;IAUvE,yBAAyB,CAClC,iBAAiB,EAAE,MAAM,EAAE,EAC3B,cAAc,CAAC,EAAE,mBAAmB,EAAE,GACvC,OAAO,CAAC,aAAa,CAAC;IA8CZ,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;IAe/D,UAAU;CAGpB"}
@@ -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"}