@quillsql/react 2.13.47 → 2.13.49

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 (298) hide show
  1. package/dist/cjs/Chart.d.ts +2 -2
  2. package/dist/cjs/Chart.d.ts.map +1 -1
  3. package/dist/cjs/Chart.js +56 -49
  4. package/dist/cjs/ChartBuilder.d.ts +3 -2
  5. package/dist/cjs/ChartBuilder.d.ts.map +1 -1
  6. package/dist/cjs/ChartBuilder.js +172 -138
  7. package/dist/cjs/ChartEditor.d.ts +2 -2
  8. package/dist/cjs/ChartEditor.d.ts.map +1 -1
  9. package/dist/cjs/ChartEditor.js +5 -2
  10. package/dist/cjs/Context.d.ts +121 -41
  11. package/dist/cjs/Context.d.ts.map +1 -1
  12. package/dist/cjs/Context.js +449 -261
  13. package/dist/cjs/Dashboard.d.ts.map +1 -1
  14. package/dist/cjs/Dashboard.js +26 -25
  15. package/dist/cjs/DateRangePicker/QuillDateRangePicker.js +0 -3
  16. package/dist/cjs/DateRangePicker/dateRangePickerUtils.d.ts +24 -10
  17. package/dist/cjs/DateRangePicker/dateRangePickerUtils.d.ts.map +1 -1
  18. package/dist/cjs/DateRangePicker/dateRangePickerUtils.js +472 -96
  19. package/dist/cjs/QuillProvider.d.ts +3 -1
  20. package/dist/cjs/QuillProvider.d.ts.map +1 -1
  21. package/dist/cjs/QuillProvider.js +2 -2
  22. package/dist/cjs/ReportBuilder.d.ts.map +1 -1
  23. package/dist/cjs/ReportBuilder.js +25 -14
  24. package/dist/cjs/SQLEditor.d.ts +1 -1
  25. package/dist/cjs/SQLEditor.d.ts.map +1 -1
  26. package/dist/cjs/SQLEditor.js +51 -16
  27. package/dist/cjs/Table.d.ts.map +1 -1
  28. package/dist/cjs/Table.js +85 -14
  29. package/dist/cjs/assets/ExclamationFilledIcon.d.ts.map +1 -1
  30. package/dist/cjs/components/Chart/BarChart.d.ts.map +1 -1
  31. package/dist/cjs/components/Chart/BarChart.js +2 -1
  32. package/dist/cjs/components/Chart/CustomReferenceLine.d.ts +1 -1
  33. package/dist/cjs/components/Chart/CustomReferenceLine.d.ts.map +1 -1
  34. package/dist/cjs/components/Chart/CustomReferenceLine.js +7 -6
  35. package/dist/cjs/components/Chart/GaugeChart.d.ts +1 -1
  36. package/dist/cjs/components/Chart/GaugeChart.d.ts.map +1 -1
  37. package/dist/cjs/components/Chart/GaugeChart.js +63 -36
  38. package/dist/cjs/components/Chart/InternalChart.d.ts.map +1 -1
  39. package/dist/cjs/components/Chart/InternalChart.js +30 -33
  40. package/dist/cjs/components/Chart/LineChart.d.ts.map +1 -1
  41. package/dist/cjs/components/Chart/LineChart.js +3 -1
  42. package/dist/cjs/components/Chart/MapChart.d.ts +3 -3
  43. package/dist/cjs/components/Chart/MapChart.d.ts.map +1 -1
  44. package/dist/cjs/components/Chart/MapChart.js +62 -34
  45. package/dist/cjs/components/Chart/PieChart.d.ts +3 -1
  46. package/dist/cjs/components/Chart/PieChart.d.ts.map +1 -1
  47. package/dist/cjs/components/Chart/PieChart.js +80 -39
  48. package/dist/cjs/components/Dashboard/DashboardFilter.d.ts.map +1 -1
  49. package/dist/cjs/components/Dashboard/DashboardFilter.js +4 -20
  50. package/dist/cjs/components/Dashboard/DashboardTemplate.d.ts.map +1 -1
  51. package/dist/cjs/components/Dashboard/DashboardTemplate.js +2 -1
  52. package/dist/cjs/components/Dashboard/DataLoader.d.ts +4 -4
  53. package/dist/cjs/components/Dashboard/DataLoader.d.ts.map +1 -1
  54. package/dist/cjs/components/Dashboard/DataLoader.js +101 -65
  55. package/dist/cjs/components/Dashboard/MetricComponent.d.ts.map +1 -1
  56. package/dist/cjs/components/Dashboard/MetricComponent.js +2 -2
  57. package/dist/cjs/components/Dashboard/util.d.ts +1 -1
  58. package/dist/cjs/components/Dashboard/util.d.ts.map +1 -1
  59. package/dist/cjs/components/Dashboard/util.js +7 -6
  60. package/dist/cjs/components/QuillMultiSelectSectionList.d.ts.map +1 -1
  61. package/dist/cjs/components/QuillMultiSelectSectionList.js +32 -22
  62. package/dist/cjs/components/QuillMultiSelectWithCombo.d.ts.map +1 -1
  63. package/dist/cjs/components/QuillMultiSelectWithCombo.js +186 -159
  64. package/dist/cjs/components/QuillSelect.d.ts.map +1 -1
  65. package/dist/cjs/components/QuillSelect.js +83 -75
  66. package/dist/cjs/components/QuillSelectWithCombo.d.ts.map +1 -1
  67. package/dist/cjs/components/QuillSelectWithCombo.js +18 -11
  68. package/dist/cjs/components/QuillTable.d.ts.map +1 -1
  69. package/dist/cjs/components/QuillTable.js +59 -61
  70. package/dist/cjs/components/ReportBuilder/FilterStack.d.ts +2 -1
  71. package/dist/cjs/components/ReportBuilder/FilterStack.d.ts.map +1 -1
  72. package/dist/cjs/components/ReportBuilder/FilterStack.js +3 -4
  73. package/dist/cjs/components/ReportBuilder/ui.d.ts +2 -2
  74. package/dist/cjs/components/ReportBuilder/ui.d.ts.map +1 -1
  75. package/dist/cjs/components/ReportBuilder/ui.js +4 -7
  76. package/dist/cjs/components/UiComponents.d.ts +1 -1
  77. package/dist/cjs/hooks/useAskQuill.d.ts.map +1 -1
  78. package/dist/cjs/hooks/useAskQuill.js +5 -1
  79. package/dist/cjs/hooks/useDashboard.d.ts +2 -2
  80. package/dist/cjs/hooks/useDashboard.d.ts.map +1 -1
  81. package/dist/cjs/hooks/useDashboard.js +160 -69
  82. package/dist/cjs/hooks/useExport.d.ts.map +1 -1
  83. package/dist/cjs/hooks/useExport.js +29 -15
  84. package/dist/cjs/hooks/useOnClickOutside.d.ts.map +1 -1
  85. package/dist/cjs/hooks/useQuill.d.ts +1 -0
  86. package/dist/cjs/hooks/useQuill.d.ts.map +1 -1
  87. package/dist/cjs/hooks/useQuill.js +22 -12
  88. package/dist/cjs/hooks/useReport.d.ts +2 -2
  89. package/dist/cjs/hooks/useReport.d.ts.map +1 -1
  90. package/dist/cjs/hooks/useReport.js +3 -4
  91. package/dist/cjs/hooks/useVirtualTables.d.ts.map +1 -1
  92. package/dist/cjs/hooks/useVirtualTables.js +16 -22
  93. package/dist/cjs/index.d.ts +2 -2
  94. package/dist/cjs/index.d.ts.map +1 -1
  95. package/dist/cjs/index.js +2 -1
  96. package/dist/cjs/internals/ReportBuilder/PivotModal.d.ts +2 -1
  97. package/dist/cjs/internals/ReportBuilder/PivotModal.d.ts.map +1 -1
  98. package/dist/cjs/internals/ReportBuilder/PivotModal.js +19 -7
  99. package/dist/cjs/models/Client.d.ts +0 -1
  100. package/dist/cjs/models/Client.d.ts.map +1 -1
  101. package/dist/cjs/models/Data.d.ts +20 -0
  102. package/dist/cjs/models/Data.d.ts.map +1 -0
  103. package/dist/cjs/models/Data.js +2 -0
  104. package/dist/cjs/models/Filter.d.ts +42 -4
  105. package/dist/cjs/models/Filter.d.ts.map +1 -1
  106. package/dist/cjs/models/Pivot.d.ts.map +1 -1
  107. package/dist/cjs/utils/astProcessing.d.ts +3 -2
  108. package/dist/cjs/utils/astProcessing.d.ts.map +1 -1
  109. package/dist/cjs/utils/astProcessing.js +28 -37
  110. package/dist/cjs/utils/client.d.ts +3 -2
  111. package/dist/cjs/utils/client.d.ts.map +1 -1
  112. package/dist/cjs/utils/client.js +38 -39
  113. package/dist/cjs/utils/columnProcessing.d.ts.map +1 -1
  114. package/dist/cjs/utils/columnProcessing.js +14 -3
  115. package/dist/cjs/utils/constants.d.ts +1 -0
  116. package/dist/cjs/utils/constants.d.ts.map +1 -1
  117. package/dist/cjs/utils/constants.js +2 -1
  118. package/dist/cjs/utils/dashboard.d.ts +3 -2
  119. package/dist/cjs/utils/dashboard.d.ts.map +1 -1
  120. package/dist/cjs/utils/dashboard.js +30 -12
  121. package/dist/cjs/utils/dataFetcher.d.ts +8 -5
  122. package/dist/cjs/utils/dataFetcher.d.ts.map +1 -1
  123. package/dist/cjs/utils/dataFetcher.js +189 -65
  124. package/dist/cjs/utils/filterProcessing.d.ts +2 -1
  125. package/dist/cjs/utils/filterProcessing.d.ts.map +1 -1
  126. package/dist/cjs/utils/filterProcessing.js +24 -38
  127. package/dist/cjs/utils/getDomain.d.ts.map +1 -1
  128. package/dist/cjs/utils/paginationProcessing.d.ts +1 -0
  129. package/dist/cjs/utils/paginationProcessing.d.ts.map +1 -1
  130. package/dist/cjs/utils/paginationProcessing.js +6 -1
  131. package/dist/cjs/utils/pivotConstructor.d.ts +2 -1
  132. package/dist/cjs/utils/pivotConstructor.d.ts.map +1 -1
  133. package/dist/cjs/utils/pivotConstructor.js +15 -9
  134. package/dist/cjs/utils/pivotProcessing.d.ts.map +1 -1
  135. package/dist/cjs/utils/pivotProcessing.js +3 -5
  136. package/dist/cjs/utils/queryConstructor.js +1 -1
  137. package/dist/cjs/utils/report.d.ts +10 -7
  138. package/dist/cjs/utils/report.d.ts.map +1 -1
  139. package/dist/cjs/utils/report.js +52 -60
  140. package/dist/cjs/utils/schema.d.ts +4 -3
  141. package/dist/cjs/utils/schema.d.ts.map +1 -1
  142. package/dist/cjs/utils/schema.js +30 -44
  143. package/dist/cjs/utils/tableProcessing.d.ts +16 -10
  144. package/dist/cjs/utils/tableProcessing.d.ts.map +1 -1
  145. package/dist/cjs/utils/tableProcessing.js +92 -90
  146. package/dist/cjs/utils/textProcessing.d.ts.map +1 -1
  147. package/dist/cjs/utils/textProcessing.js +2 -1
  148. package/dist/cjs/utils/ui.d.ts.map +1 -1
  149. package/dist/esm/Chart.d.ts +2 -2
  150. package/dist/esm/Chart.d.ts.map +1 -1
  151. package/dist/esm/Chart.js +60 -53
  152. package/dist/esm/ChartBuilder.d.ts +3 -2
  153. package/dist/esm/ChartBuilder.d.ts.map +1 -1
  154. package/dist/esm/ChartBuilder.js +173 -139
  155. package/dist/esm/ChartEditor.d.ts +2 -2
  156. package/dist/esm/ChartEditor.d.ts.map +1 -1
  157. package/dist/esm/ChartEditor.js +6 -3
  158. package/dist/esm/Context.d.ts +121 -41
  159. package/dist/esm/Context.d.ts.map +1 -1
  160. package/dist/esm/Context.js +450 -262
  161. package/dist/esm/Dashboard.d.ts.map +1 -1
  162. package/dist/esm/Dashboard.js +28 -27
  163. package/dist/esm/DateRangePicker/QuillDateRangePicker.js +0 -3
  164. package/dist/esm/DateRangePicker/dateRangePickerUtils.d.ts +24 -10
  165. package/dist/esm/DateRangePicker/dateRangePickerUtils.d.ts.map +1 -1
  166. package/dist/esm/DateRangePicker/dateRangePickerUtils.js +471 -95
  167. package/dist/esm/QuillProvider.d.ts +3 -1
  168. package/dist/esm/QuillProvider.d.ts.map +1 -1
  169. package/dist/esm/QuillProvider.js +2 -2
  170. package/dist/esm/ReportBuilder.d.ts.map +1 -1
  171. package/dist/esm/ReportBuilder.js +28 -17
  172. package/dist/esm/SQLEditor.d.ts +1 -1
  173. package/dist/esm/SQLEditor.d.ts.map +1 -1
  174. package/dist/esm/SQLEditor.js +54 -19
  175. package/dist/esm/Table.d.ts.map +1 -1
  176. package/dist/esm/Table.js +88 -17
  177. package/dist/esm/assets/ExclamationFilledIcon.d.ts.map +1 -1
  178. package/dist/esm/components/Chart/BarChart.d.ts.map +1 -1
  179. package/dist/esm/components/Chart/BarChart.js +2 -1
  180. package/dist/esm/components/Chart/CustomReferenceLine.d.ts +1 -1
  181. package/dist/esm/components/Chart/CustomReferenceLine.d.ts.map +1 -1
  182. package/dist/esm/components/Chart/CustomReferenceLine.js +8 -7
  183. package/dist/esm/components/Chart/GaugeChart.d.ts +1 -1
  184. package/dist/esm/components/Chart/GaugeChart.d.ts.map +1 -1
  185. package/dist/esm/components/Chart/GaugeChart.js +65 -38
  186. package/dist/esm/components/Chart/InternalChart.d.ts.map +1 -1
  187. package/dist/esm/components/Chart/InternalChart.js +32 -35
  188. package/dist/esm/components/Chart/LineChart.d.ts.map +1 -1
  189. package/dist/esm/components/Chart/LineChart.js +3 -1
  190. package/dist/esm/components/Chart/MapChart.d.ts +3 -3
  191. package/dist/esm/components/Chart/MapChart.d.ts.map +1 -1
  192. package/dist/esm/components/Chart/MapChart.js +67 -39
  193. package/dist/esm/components/Chart/PieChart.d.ts +3 -1
  194. package/dist/esm/components/Chart/PieChart.d.ts.map +1 -1
  195. package/dist/esm/components/Chart/PieChart.js +80 -39
  196. package/dist/esm/components/Dashboard/DashboardFilter.d.ts.map +1 -1
  197. package/dist/esm/components/Dashboard/DashboardFilter.js +5 -21
  198. package/dist/esm/components/Dashboard/DashboardSection.js +2 -2
  199. package/dist/esm/components/Dashboard/DashboardTemplate.d.ts.map +1 -1
  200. package/dist/esm/components/Dashboard/DashboardTemplate.js +3 -2
  201. package/dist/esm/components/Dashboard/DataLoader.d.ts +4 -4
  202. package/dist/esm/components/Dashboard/DataLoader.d.ts.map +1 -1
  203. package/dist/esm/components/Dashboard/DataLoader.js +102 -66
  204. package/dist/esm/components/Dashboard/MetricComponent.d.ts.map +1 -1
  205. package/dist/esm/components/Dashboard/MetricComponent.js +2 -2
  206. package/dist/esm/components/Dashboard/util.d.ts +1 -1
  207. package/dist/esm/components/Dashboard/util.d.ts.map +1 -1
  208. package/dist/esm/components/Dashboard/util.js +8 -7
  209. package/dist/esm/components/QuillMultiSelectSectionList.d.ts.map +1 -1
  210. package/dist/esm/components/QuillMultiSelectSectionList.js +32 -22
  211. package/dist/esm/components/QuillMultiSelectWithCombo.d.ts.map +1 -1
  212. package/dist/esm/components/QuillMultiSelectWithCombo.js +187 -160
  213. package/dist/esm/components/QuillSelect.d.ts.map +1 -1
  214. package/dist/esm/components/QuillSelect.js +85 -77
  215. package/dist/esm/components/QuillSelectWithCombo.d.ts.map +1 -1
  216. package/dist/esm/components/QuillSelectWithCombo.js +18 -11
  217. package/dist/esm/components/QuillTable.d.ts.map +1 -1
  218. package/dist/esm/components/QuillTable.js +59 -61
  219. package/dist/esm/components/ReportBuilder/FilterStack.d.ts +2 -1
  220. package/dist/esm/components/ReportBuilder/FilterStack.d.ts.map +1 -1
  221. package/dist/esm/components/ReportBuilder/FilterStack.js +3 -4
  222. package/dist/esm/components/ReportBuilder/ui.d.ts +2 -2
  223. package/dist/esm/components/ReportBuilder/ui.d.ts.map +1 -1
  224. package/dist/esm/components/ReportBuilder/ui.js +4 -7
  225. package/dist/esm/components/UiComponents.d.ts +1 -1
  226. package/dist/esm/hooks/useAskQuill.d.ts.map +1 -1
  227. package/dist/esm/hooks/useAskQuill.js +6 -2
  228. package/dist/esm/hooks/useDashboard.d.ts +2 -2
  229. package/dist/esm/hooks/useDashboard.d.ts.map +1 -1
  230. package/dist/esm/hooks/useDashboard.js +162 -71
  231. package/dist/esm/hooks/useExport.d.ts.map +1 -1
  232. package/dist/esm/hooks/useExport.js +31 -17
  233. package/dist/esm/hooks/useOnClickOutside.d.ts.map +1 -1
  234. package/dist/esm/hooks/useQuill.d.ts +1 -0
  235. package/dist/esm/hooks/useQuill.d.ts.map +1 -1
  236. package/dist/esm/hooks/useQuill.js +23 -13
  237. package/dist/esm/hooks/useReport.d.ts +2 -2
  238. package/dist/esm/hooks/useReport.d.ts.map +1 -1
  239. package/dist/esm/hooks/useReport.js +4 -5
  240. package/dist/esm/hooks/useVirtualTables.d.ts.map +1 -1
  241. package/dist/esm/hooks/useVirtualTables.js +17 -23
  242. package/dist/esm/index.d.ts +2 -2
  243. package/dist/esm/index.d.ts.map +1 -1
  244. package/dist/esm/index.js +1 -1
  245. package/dist/esm/internals/ReportBuilder/PivotModal.d.ts +2 -1
  246. package/dist/esm/internals/ReportBuilder/PivotModal.d.ts.map +1 -1
  247. package/dist/esm/internals/ReportBuilder/PivotModal.js +20 -8
  248. package/dist/esm/models/Client.d.ts +0 -1
  249. package/dist/esm/models/Client.d.ts.map +1 -1
  250. package/dist/esm/models/Data.d.ts +20 -0
  251. package/dist/esm/models/Data.d.ts.map +1 -0
  252. package/dist/esm/models/Data.js +1 -0
  253. package/dist/esm/models/Filter.d.ts +42 -4
  254. package/dist/esm/models/Filter.d.ts.map +1 -1
  255. package/dist/esm/models/Pivot.d.ts.map +1 -1
  256. package/dist/esm/utils/astProcessing.d.ts +3 -2
  257. package/dist/esm/utils/astProcessing.d.ts.map +1 -1
  258. package/dist/esm/utils/astProcessing.js +28 -37
  259. package/dist/esm/utils/client.d.ts +3 -2
  260. package/dist/esm/utils/client.d.ts.map +1 -1
  261. package/dist/esm/utils/client.js +38 -39
  262. package/dist/esm/utils/columnProcessing.d.ts.map +1 -1
  263. package/dist/esm/utils/columnProcessing.js +14 -3
  264. package/dist/esm/utils/constants.d.ts +1 -0
  265. package/dist/esm/utils/constants.d.ts.map +1 -1
  266. package/dist/esm/utils/constants.js +1 -0
  267. package/dist/esm/utils/dashboard.d.ts +3 -2
  268. package/dist/esm/utils/dashboard.d.ts.map +1 -1
  269. package/dist/esm/utils/dashboard.js +31 -13
  270. package/dist/esm/utils/dataFetcher.d.ts +8 -5
  271. package/dist/esm/utils/dataFetcher.d.ts.map +1 -1
  272. package/dist/esm/utils/dataFetcher.js +187 -65
  273. package/dist/esm/utils/filterProcessing.d.ts +2 -1
  274. package/dist/esm/utils/filterProcessing.d.ts.map +1 -1
  275. package/dist/esm/utils/filterProcessing.js +25 -39
  276. package/dist/esm/utils/getDomain.d.ts.map +1 -1
  277. package/dist/esm/utils/paginationProcessing.d.ts +1 -0
  278. package/dist/esm/utils/paginationProcessing.d.ts.map +1 -1
  279. package/dist/esm/utils/paginationProcessing.js +5 -0
  280. package/dist/esm/utils/pivotConstructor.d.ts +2 -1
  281. package/dist/esm/utils/pivotConstructor.d.ts.map +1 -1
  282. package/dist/esm/utils/pivotConstructor.js +16 -10
  283. package/dist/esm/utils/pivotProcessing.d.ts.map +1 -1
  284. package/dist/esm/utils/pivotProcessing.js +5 -7
  285. package/dist/esm/utils/queryConstructor.js +1 -1
  286. package/dist/esm/utils/report.d.ts +10 -7
  287. package/dist/esm/utils/report.d.ts.map +1 -1
  288. package/dist/esm/utils/report.js +53 -61
  289. package/dist/esm/utils/schema.d.ts +4 -3
  290. package/dist/esm/utils/schema.d.ts.map +1 -1
  291. package/dist/esm/utils/schema.js +30 -44
  292. package/dist/esm/utils/tableProcessing.d.ts +16 -10
  293. package/dist/esm/utils/tableProcessing.d.ts.map +1 -1
  294. package/dist/esm/utils/tableProcessing.js +94 -92
  295. package/dist/esm/utils/textProcessing.d.ts.map +1 -1
  296. package/dist/esm/utils/textProcessing.js +2 -1
  297. package/dist/esm/utils/ui.d.ts.map +1 -1
  298. package/package.json +2 -1
@@ -1,6 +1,4 @@
1
- import { useContext } from 'react';
2
- import { QUILL_SERVER } from './constants';
3
- import { TenantContext } from '../Context';
1
+ import { QUILL_QUERY_ENDPOINT, QUILL_SERVER } from './constants';
4
2
  function fetchQuillData(responseData) {
5
3
  if (!responseData) {
6
4
  return null;
@@ -32,39 +30,159 @@ function parseData(rows, queryType) {
32
30
  return rows;
33
31
  }
34
32
  }
35
- async function testSqlViewState(hostedRequestBody, client, referencedTables) {
33
+ async function testSqlViewState(client, referencedTables, getToken) {
36
34
  let errorMessage = null;
37
35
  await Promise.all(referencedTables.map(async (table) => {
38
36
  if (!table) {
39
37
  return;
40
38
  }
41
- const hostedBody = {
39
+ const { data: resp } = await quillFetch({
40
+ client,
41
+ task: 'test-view',
42
42
  metadata: {
43
43
  tables: [table],
44
- task: 'test-view',
45
- clientId: hostedRequestBody.metadata.clientId,
44
+ clientId: client.clientId,
46
45
  },
47
- };
48
- const cloudBody = { ...hostedBody };
49
- const resp = await getData(client, 'test-view', 'same-origin', hostedBody, cloudBody);
46
+ getToken,
47
+ });
50
48
  if (resp.success === false) {
51
49
  const brokenBody = {
52
50
  metadata: {
53
51
  table: table,
54
52
  task: 'set-broken-view',
55
- clientId: hostedRequestBody.metadata.clientId,
53
+ clientId: client.clientId,
56
54
  },
57
55
  };
58
- getData(client, 'test-view', 'same-origin', brokenBody, cloudBody);
56
+ quillFetch({
57
+ client,
58
+ task: 'set-broken-view',
59
+ metadata: brokenBody,
60
+ credentials: 'same-origin',
61
+ getToken,
62
+ });
59
63
  errorMessage = `Virtual Table Error: '${table}' is out of sync with datasource.`;
60
64
  }
61
65
  }));
62
66
  return errorMessage;
63
67
  }
64
- // this function gets the data either from the self hosted endpoint or
65
- // our cloud server
66
- // Tenants and Flags must be passed in as part of the body explicity
67
- export async function getData(client, cloudQueryEndpoint, noCred, hostedRequestBody, cloudRequestBody, method = 'POST', queryParam, abortSignal) {
68
+ export const quillFetch = async ({ client, task, method = 'POST', metadata, abortSignal, credentials = 'omit', urlParameters, getToken, }) => {
69
+ const token = await getToken();
70
+ const queryString = urlParameters ?? `task=${task}`;
71
+ const endpoint = client.queryEndpoint
72
+ ? `${client.queryEndpoint}?${queryString}`
73
+ : `${QUILL_SERVER}${QUILL_QUERY_ENDPOINT}?${queryString}`;
74
+ try {
75
+ const response = await fetch(endpoint, {
76
+ method,
77
+ headers: {
78
+ ...(token ? { Authorization: `Bearer ${token}` } : {}),
79
+ ...client.queryHeaders,
80
+ 'Content-Type': 'application/json',
81
+ 'Vercel-Env': process.env.NEXT_PUBLIC_VERCEL_ENV ?? 'production',
82
+ },
83
+ body: JSON.stringify({
84
+ metadata: {
85
+ task,
86
+ clientId: client.clientId,
87
+ ...metadata,
88
+ },
89
+ }),
90
+ credentials: client.withCredentials ? 'include' : credentials,
91
+ signal: abortSignal,
92
+ });
93
+ if (!response.ok) {
94
+ throw new Error('API request failed');
95
+ }
96
+ let result = await response.json();
97
+ // Not sure if this is required, but putting it here just in case
98
+ // based on other lines of code I've seen
99
+ // Probably happens if self-hosted endpoint was not set up correctly and
100
+ // the response was wrapped in an additional data object
101
+ if (result.data?.data &&
102
+ (result.data.queries || result.data.status || result.data.error)) {
103
+ result = result.data;
104
+ }
105
+ return {
106
+ data: result.data,
107
+ queries: result.queries,
108
+ status: result.status,
109
+ error: result.error,
110
+ };
111
+ }
112
+ catch (e) {
113
+ if (e instanceof Error && e.name === 'AbortError') {
114
+ throw e;
115
+ }
116
+ console.error('Failed to fetch:', e);
117
+ return { error: 'Failed to fetch data' };
118
+ }
119
+ };
120
+ // This function parses the response from the fetch call,
121
+ // which is what getData used to do after fetching data
122
+ export const parseFetchResponse = async (client, task, response, getToken) => {
123
+ try {
124
+ if (response.status === 'error' || response.data?.error) {
125
+ let errorPrefix = 'Error: ';
126
+ let errorMessage = 'Failed to fetch report: ' + (response.error || response.data?.error);
127
+ if (task === 'query' || task === 'patterns') {
128
+ errorPrefix = response.error?.includes('Query Parsing Error')
129
+ ? ''
130
+ : 'SQL Error: ';
131
+ errorMessage = errorPrefix + response.error;
132
+ }
133
+ else if (response.error?.includes('Virtual Table Error')) {
134
+ errorMessage = response.error;
135
+ }
136
+ let adminErrorMessage = undefined;
137
+ if (response?.data?.referencedTables) {
138
+ adminErrorMessage =
139
+ (await testSqlViewState(client, response.data.referencedTables, getToken)) ?? undefined;
140
+ }
141
+ return {
142
+ success: false,
143
+ errorMessage,
144
+ adminErrorMessage,
145
+ data: response,
146
+ };
147
+ }
148
+ if (response.error) {
149
+ return {
150
+ success: false,
151
+ errorMessage: response.error,
152
+ ...response,
153
+ };
154
+ }
155
+ const result = {
156
+ ...response.data,
157
+ };
158
+ const fields = response.queries?.queryResults[0]?.fields;
159
+ const rows = response.queries?.queryResults[0]?.rows;
160
+ const compareRows = response.queries?.queryResults[1]?.rows;
161
+ if (fields) {
162
+ result.fields = fields;
163
+ }
164
+ if (rows) {
165
+ result.rows = rows;
166
+ }
167
+ if (compareRows && task !== 'report') {
168
+ result.compareRows = compareRows;
169
+ }
170
+ if (response.data?.queryOrder) {
171
+ response.data.queryOrder.forEach((queryKey, index) => {
172
+ result[queryKey] = parseData(response.queries?.queryResults?.[index]?.rows, queryKey);
173
+ });
174
+ }
175
+ return result;
176
+ }
177
+ catch (e) {
178
+ console.error('Failed to parse response:', e);
179
+ return null;
180
+ }
181
+ };
182
+ /**
183
+ * @deprecated Use quillFetch instead. If post fetch parsing is required, use parseFetchResponse.
184
+ */
185
+ export async function getData(client, cloudQueryEndpoint, noCred, hostedRequestBody, cloudRequestBody, method = 'POST', getToken, queryParam, abortSignal) {
68
186
  if (!client) {
69
187
  return null;
70
188
  }
@@ -105,7 +223,7 @@ export async function getData(client, cloudQueryEndpoint, noCred, hostedRequestB
105
223
  processedData.data &&
106
224
  processedData.data.referencedTables) {
107
225
  adminErrorMessage =
108
- (await testSqlViewState(hostedRequestBody, client, processedData.data.referencedTables)) ?? undefined;
226
+ (await testSqlViewState(client, processedData.data.referencedTables, getToken)) ?? undefined;
109
227
  }
110
228
  return {
111
229
  success: false,
@@ -214,58 +332,62 @@ export async function getData(client, cloudQueryEndpoint, noCred, hostedRequestB
214
332
  return null;
215
333
  }
216
334
  }
217
- export function useQuillCloud() {
218
- const { tenants, flags } = useContext(TenantContext);
219
- const getDataFromCloud = async (client, cloudQueryEndpoint, cloudRequestBody, method = 'POST', abortSignal) => {
220
- try {
221
- const url = `${QUILL_SERVER}/${cloudQueryEndpoint}`;
222
- const resp = await fetch(url, {
223
- method,
224
- headers: {
225
- Authorization: 'Bearer ',
226
- 'Content-Type': 'application/json',
227
- },
228
- body: method === 'POST'
229
- ? JSON.stringify({
230
- ...cloudRequestBody,
231
- ...{
232
- publicKey: client?.publicKey,
233
- tenants: tenants,
234
- flags: flags,
235
- },
236
- })
237
- : null,
238
- signal: abortSignal,
239
- });
240
- return await resp.json();
241
- }
242
- catch (e) {
243
- if (e instanceof Error && e.name === 'AbortError') {
244
- throw e;
245
- }
246
- console.error('Failed to parse JSON:', e);
247
- return null;
248
- }
249
- };
250
- return {
251
- getDataFromCloud,
252
- };
253
- }
254
- export async function fetchSqlQuery(ast, client, formData) {
335
+ // export function useQuillCloud() {
336
+ // const { tenants, flags } = useContext(TenantContext);
337
+ // const getDataFromCloud = async (
338
+ // client: QuillProviderClient,
339
+ // cloudQueryEndpoint: string,
340
+ // cloudRequestBody: any,
341
+ // method = 'POST',
342
+ // abortSignal?: AbortSignal,
343
+ // ) => {
344
+ // try {
345
+ // const url = `${QUILL_SERVER}/${cloudQueryEndpoint}`;
346
+ // const resp = await fetch(url, {
347
+ // method,
348
+ // headers: {
349
+ // Authorization: 'Bearer ',
350
+ // 'Content-Type': 'application/json',
351
+ // },
352
+ // body:
353
+ // method === 'POST'
354
+ // ? JSON.stringify({
355
+ // ...cloudRequestBody,
356
+ // ...{
357
+ // publicKey: client?.publicKey,
358
+ // tenants: tenants,
359
+ // flags: flags,
360
+ // },
361
+ // })
362
+ // : null,
363
+ // signal: abortSignal,
364
+ // });
365
+ // return await resp.json();
366
+ // } catch (e) {
367
+ // if (e instanceof Error && e.name === 'AbortError') {
368
+ // throw e;
369
+ // }
370
+ // console.error('Failed to parse JSON:', e);
371
+ // return null;
372
+ // }
373
+ // };
374
+ // return {
375
+ // getDataFromCloud,
376
+ // };
377
+ // }
378
+ export async function fetchSqlQuery(ast, client, getToken, formData) {
255
379
  try {
256
380
  const where = formData ? formData : ast?.where || null;
257
- const response = await fetch(`${QUILL_SERVER}/sqlify`, {
258
- method: 'POST',
259
- headers: {
260
- 'Content-Type': 'application/json',
261
- },
262
- body: JSON.stringify({
381
+ const { data } = await quillFetch({
382
+ client,
383
+ task: 'sqlify',
384
+ metadata: {
385
+ clientId: client.clientId,
386
+ useNewNodeSql: true,
263
387
  ast: { ...ast, where },
264
- publicKey: client.publicKey,
265
- useNewNodeSql: true, // new flag
266
- }),
388
+ },
389
+ getToken,
267
390
  });
268
- const data = await response.json();
269
391
  return { query: data.query };
270
392
  }
271
393
  catch (error) {
@@ -2,6 +2,7 @@ import { FieldType, InternalFilter, DashboardDateFilter, Filter, DashboardFilter
2
2
  import { QuillReport } from '../models/Report';
3
3
  import { FilterTreeNode } from './astFilterProcessing';
4
4
  import { ReportBuilderState } from '../models/ReportBuilder';
5
+ import { QuillProviderClient } from '../models/Client';
5
6
  export declare function findAndProcessDateFilter(filters: any[]): any;
6
7
  export declare function processFilterFromBackend(filter: any): any;
7
8
  export declare function updateFilter(filter: any, value: any | undefined, comparison: any | undefined, dashboardName: string): any;
@@ -22,7 +23,7 @@ export declare function filterStackToFilterTree(stack: any[]): FilterTreeNode |
22
23
  /**
23
24
  * This function uses the baseAst and forms a SQL query using the a filters array
24
25
  */
25
- export declare function buildQueryFromFilters(reportBuilderState: ReportBuilderState, filters: FilterTreeNode[], endpoint: string, client: any): Promise<{
26
+ export declare function buildQueryFromFilters(reportBuilderState: ReportBuilderState, filters: FilterTreeNode[], client: QuillProviderClient, getToken: () => Promise<string>): Promise<{
26
27
  success: boolean;
27
28
  query?: string;
28
29
  error?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"filterProcessing.d.ts","sourceRoot":"","sources":["../../../src/utils/filterProcessing.ts"],"names":[],"mappings":"AAQA,OAAO,EAEL,SAAS,EACT,cAAc,EAGd,mBAAmB,EACnB,MAAM,EAEN,eAAe,EAEhB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAmB,MAAM,uBAAuB,CAAC;AAExE,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAG7D,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG,GAAG,CAoB5D;AAMD,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,GAAG,OAkBnD;AAED,wBAAgB,YAAY,CAC1B,MAAM,EAAE,GAAG,EACX,KAAK,EAAE,GAAG,YAAO,EACjB,UAAU,EAAE,GAAG,YAAO,EACtB,aAAa,EAAE,MAAM,OAmGtB;AAGD,eAAO,MAAM,OAAO,MAAO,MAAM,cA0DhC,CAAC;AAEF;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,CAwB7D;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,GAAG,GAAG,cAAc,EAAE,CAoCrE;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,GAAG,EAAE,yBAgCnD;AAED;;GAEG;AACH,wBAAsB,qBAAqB,CACzC,kBAAkB,EAAE,kBAAkB,EACtC,OAAO,EAAE,cAAc,EAAE,EACzB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,GAAG,GACV,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAiC/D;AAED,wBAAgB,iCAAiC,CAC/C,gBAAgB,EAAE,MAAM,EACxB,mBAAmB,EAAE,mBAAmB,GACvC,mBAAmB,CAkKrB;AAED,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,eAAe,EAAE,EAC1B,aAAa,EAAE,cAAc,EAAE,GAC9B,GAAG,EAAE,CA+CP;AAED,wBAAgB,oBAAoB,CAClC,QAAQ,CAAC,EAAE,cAAc,EAAE,EAC3B,QAAQ,CAAC,EAAE,cAAc,EAAE,GAC1B,OAAO,CA+BT;AAED,eAAO,MAAM,uBAAuB,WAC1B,mBAAmB,WAClB,WAAW,EAAE,iBACP,MAAM,KACpB,CAAC,mBAAmB,GAAG;IAAE,SAAS,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,GAAG,SAqDpD,CAAC"}
1
+ {"version":3,"file":"filterProcessing.d.ts","sourceRoot":"","sources":["../../../src/utils/filterProcessing.ts"],"names":[],"mappings":"AASA,OAAO,EAEL,SAAS,EACT,cAAc,EAGd,mBAAmB,EACnB,MAAM,EAEN,eAAe,EAEhB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAmB,MAAM,uBAAuB,CAAC;AAExE,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAE7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAGvD,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG,GAAG,CAoB5D;AAMD,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,GAAG,OAkBnD;AAED,wBAAgB,YAAY,CAC1B,MAAM,EAAE,GAAG,EACX,KAAK,EAAE,GAAG,YAAO,EACjB,UAAU,EAAE,GAAG,YAAO,EACtB,aAAa,EAAE,MAAM,OAqFtB;AAGD,eAAO,MAAM,OAAO,MAAO,MAAM,cA0DhC,CAAC;AAEF;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,CAwB7D;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,GAAG,GAAG,cAAc,EAAE,CAoCrE;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,GAAG,EAAE,yBAgCnD;AAED;;GAEG;AACH,wBAAsB,qBAAqB,CACzC,kBAAkB,EAAE,kBAAkB,EACtC,OAAO,EAAE,cAAc,EAAE,EACzB,MAAM,EAAE,mBAAmB,EAC3B,QAAQ,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,GAC9B,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAiC/D;AAED,wBAAgB,iCAAiC,CAC/C,gBAAgB,EAAE,MAAM,EACxB,mBAAmB,EAAE,mBAAmB,GACvC,mBAAmB,CAkKrB;AAED,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,eAAe,EAAE,EAC1B,aAAa,EAAE,cAAc,EAAE,GAC9B,GAAG,EAAE,CAgDP;AAED,wBAAgB,oBAAoB,CAClC,QAAQ,CAAC,EAAE,cAAc,EAAE,EAC3B,QAAQ,CAAC,EAAE,cAAc,EAAE,GAC1B,OAAO,CA+BT;AAED,eAAO,MAAM,uBAAuB,WAC1B,mBAAmB,WAClB,WAAW,EAAE,iBACP,MAAM,KACpB,CAAC,mBAAmB,GAAG;IAAE,SAAS,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,GAAG,SAkDpD,CAAC"}
@@ -1,9 +1,10 @@
1
1
  import { endOfDay, parse, startOfDay, sub } from 'date-fns';
2
- import { COMPARISON_RANGE, PRIMARY_RANGE, defaultOptionsV2, getRangeFromPresetOptions, } from '../DateRangePicker/dateRangePickerUtils';
2
+ import { COMPARISON_RANGE, PRIMARY_RANGE, convertPresetOptionsToSelectableList, defaultOptionsV2, getRangeFromPresetOptions, } from '../DateRangePicker/dateRangePickerUtils';
3
3
  import { DateOperator, FieldType, InternalFilterType, DashboardFilterType, TimeUnit, FilterType, } from '../models/Filter';
4
4
  import { filterTreeToAst } from './astFilterProcessing';
5
5
  import { snakeAndCamelCaseToTitleCase } from './textProcessing';
6
6
  import { reportBuilderStateToAst } from './reportBuilder';
7
+ import { quillFetch } from './dataFetcher';
7
8
  export function findAndProcessDateFilter(filters) {
8
9
  let dateFilter = filters.find((filter) => filter.filterType === 'date_range');
9
10
  if (dateFilter) {
@@ -70,25 +71,8 @@ export function updateFilter(filter, value = null, comparison = null, dashboardN
70
71
  }
71
72
  if (filter.filterType === 'date' || filter.filterType === 'date_range') {
72
73
  let presetsOptions = defaultOptionsV2;
73
- if (filter.presetRanges) {
74
- presetsOptions = filter.presetRanges.map((elem) => {
75
- if (!elem.isStatic) {
76
- return {
77
- label: elem.label,
78
- value: elem.value,
79
- startDate: (PRIMARY_RANGE[elem.value] ??
80
- PRIMARY_RANGE['LAST_30_DAYS']).startDate,
81
- endDate: (PRIMARY_RANGE[elem.value] ??
82
- PRIMARY_RANGE['LAST_30_DAYS']).endDate,
83
- };
84
- }
85
- return {
86
- label: elem.label,
87
- value: elem.value,
88
- startDate: new Date(elem.startDate),
89
- endDate: new Date(elem.endDate),
90
- };
91
- });
74
+ if (filter.presetOptions || filter.defaultPresetRanges) {
75
+ presetsOptions = convertPresetOptionsToSelectableList(filter.presetOptions ?? [], filter.defaultPresetRanges ?? []);
92
76
  }
93
77
  if (comparison ||
94
78
  (filter.comparison && filter.comparisonRange.value !== 'NO_COMPARISON')) {
@@ -307,29 +291,26 @@ export function filterStackToFilterTree(stack) {
307
291
  /**
308
292
  * This function uses the baseAst and forms a SQL query using the a filters array
309
293
  */
310
- export async function buildQueryFromFilters(reportBuilderState, filters, endpoint, client) {
294
+ export async function buildQueryFromFilters(reportBuilderState, filters, client, getToken) {
311
295
  const subTree = filterStackToFilterTree(filters);
312
296
  let whereNode = null;
313
297
  if (subTree) {
314
- whereNode = filterTreeToAst(subTree, client.databaseType.toLowerCase());
298
+ whereNode = filterTreeToAst(subTree, client.databaseType?.toLowerCase() || 'postgresql');
315
299
  }
316
- const ast = reportBuilderStateToAst({ ...reportBuilderState, filterStack: filters }, client.databaseType.toLowerCase());
300
+ const ast = reportBuilderStateToAst({ ...reportBuilderState, filterStack: filters }, client.databaseType?.toLowerCase() || 'postgresql');
317
301
  const queryAst = { ...ast, where: whereNode };
318
302
  try {
319
- const response = await fetch(`${endpoint}/sqlify`, {
320
- method: 'POST',
321
- headers: {
322
- 'Content-Type': 'application/json',
323
- },
324
- body: JSON.stringify({
325
- ast: queryAst,
326
- publicKey: client.publicKey,
303
+ const { data } = await quillFetch({
304
+ client,
305
+ task: 'sqlify',
306
+ metadata: {
307
+ clientId: client.clientId,
327
308
  useNewNodeSql: true,
328
- }),
329
- credentials: client.withCredentials ? 'include' : 'omit',
309
+ ast: queryAst,
310
+ },
311
+ getToken,
330
312
  });
331
- const data = await response.json();
332
- const query = data.query;
313
+ const query = data?.query;
333
314
  return { success: true, query };
334
315
  }
335
316
  catch (error) {
@@ -506,7 +487,8 @@ export function mergeCustomFilters(filters, customFilters) {
506
487
  value: 'LAST_30_DAYS',
507
488
  },
508
489
  dashboardName: 'none',
509
- presetRanges: defaultOptionsV2,
490
+ presetOptions: [],
491
+ defaultPresetRanges: [],
510
492
  preset: {
511
493
  label: 'Last 30 Days',
512
494
  value: 'LAST_30_DAYS',
@@ -544,8 +526,7 @@ export function filtersAreEquivalent(filters1, filters2) {
544
526
  export const createDefaultDateFilter = (filter, reports, dashboardName) => {
545
527
  const comparisonRangeStart = getComparisonRange(filter, 'startDate');
546
528
  const comparisonRangeEnd = getComparisonRange(filter, 'endDate');
547
- const range = filter?.presetRanges?.find((range) => range.value === filter.primaryRange?.value) ??
548
- PRIMARY_RANGE[filter.primaryRange?.value ?? 'LAST_30_DAYS'] ??
529
+ const range = PRIMARY_RANGE[filter.primaryRange?.value ?? 'LAST_30_DAYS'] ??
549
530
  PRIMARY_RANGE['LAST_30_DAYS'];
550
531
  return filter
551
532
  ? {
@@ -579,7 +560,12 @@ export const createDefaultDateFilter = (filter, reports, dashboardName) => {
579
560
  : undefined;
580
561
  };
581
562
  const getComparisonRange = (dateFilter, rangeType) => {
582
- const range = dateFilter?.presetRanges?.find((range) => range.value === dateFilter?.primaryRange?.value) ?? PRIMARY_RANGE[dateFilter?.primaryRange?.value ?? 'LAST_30_DAYS'];
563
+ const range = convertPresetOptionsToSelectableList(dateFilter?.presetOptions ?? [], dateFilter?.defaultPresetRanges ?? []).find((option) => option.value === dateFilter?.primaryRange?.value) ??
564
+ PRIMARY_RANGE[dateFilter?.primaryRange?.value ?? 'LAST_30_DAYS'] ??
565
+ PRIMARY_RANGE['LAST_30_DAYS'];
566
+ if (!range.startDate || !range.endDate) {
567
+ return undefined;
568
+ }
583
569
  return (dateFilter?.comparisonRange?.[rangeType] ??
584
570
  COMPARISON_RANGE[dateFilter?.defaultComparisonRange ??
585
571
  'NO_COMPARISON']({
@@ -1 +1 @@
1
- {"version":3,"file":"getDomain.d.ts","sourceRoot":"","sources":["../../../src/utils/getDomain.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,CAAC,OAAO,UAAU,SAAS,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,cAAc,EAAE;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,EAAE,CAAA;CAAC,EAAE,GAAG,SAAS,GAAG,MAAM,EAAE,CA6CtI"}
1
+ {"version":3,"file":"getDomain.d.ts","sourceRoot":"","sources":["../../../src/utils/getDomain.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,CAAC,OAAO,UAAU,SAAS,CAC/B,IAAI,EAAE,GAAG,EAAE,EACX,MAAM,EAAE,GAAG,EAAE,EACb,cAAc,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,EAAE,CAAA;CAAE,EAAE,GAAG,SAAS,GAC/D,MAAM,EAAE,CA6CV"}
@@ -1,5 +1,6 @@
1
1
  import { Pagination } from '../models/Pagination';
2
2
  export declare const DEFAULT_PAGINATION: Pagination;
3
+ export declare const DEFAULT_TABLE_PAGINATION: Pagination;
3
4
  export declare function shouldFetchMore(pagination: Pagination, page: number, maxPage: number, currentRowCount?: number): boolean;
4
5
  export declare function shouldSortInMemory(pagination: Pagination, rowCount?: number): boolean;
5
6
  //# sourceMappingURL=paginationProcessing.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"paginationProcessing.d.ts","sourceRoot":"","sources":["../../../src/utils/paginationProcessing.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAElD,eAAO,MAAM,kBAAkB,EAAE,UAIhC,CAAC;AAEF,wBAAgB,eAAe,CAC7B,UAAU,EAAE,UAAU,EACtB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,eAAe,CAAC,EAAE,MAAM,WAkBzB;AAED,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,UAAU,EAAE,QAAQ,CAAC,EAAE,MAAM,WAK3E"}
1
+ {"version":3,"file":"paginationProcessing.d.ts","sourceRoot":"","sources":["../../../src/utils/paginationProcessing.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAElD,eAAO,MAAM,kBAAkB,EAAE,UAIhC,CAAC;AAEF,eAAO,MAAM,wBAAwB,EAAE,UAItC,CAAC;AAEF,wBAAgB,eAAe,CAC7B,UAAU,EAAE,UAAU,EACtB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,eAAe,CAAC,EAAE,MAAM,WAkBzB;AAED,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,UAAU,EAAE,QAAQ,CAAC,EAAE,MAAM,WAK3E"}
@@ -3,6 +3,11 @@ export const DEFAULT_PAGINATION = {
3
3
  rowsPerPage: 10,
4
4
  rowsPerRequest: 600,
5
5
  };
6
+ export const DEFAULT_TABLE_PAGINATION = {
7
+ page: 0,
8
+ rowsPerPage: 10,
9
+ rowsPerRequest: 50,
10
+ };
6
11
  export function shouldFetchMore(pagination, page, maxPage, currentRowCount) {
7
12
  if (!pagination ||
8
13
  (currentRowCount && currentRowCount >= pagination.rowsPerPage * (page + 1))) {
@@ -2,7 +2,7 @@ import { QuillProviderClient } from '../models/Client';
2
2
  import { Pivot, PivotData } from '../models/Pivot';
3
3
  import { QuillReportInternal } from '../models/Report';
4
4
  import { AdditionalProcessing } from './tableProcessing';
5
- export declare function generatePivotWithSQL({ pivot, report, client, dateBucket, dateFilter, distinctStrings, dashboardName, tenants, additionalProcessing, pivotQuery, comparisonPivotQuery, getPivotRowCount, caller, }: {
5
+ export declare function generatePivotWithSQL({ pivot, report, client, dateBucket, dateFilter, distinctStrings, dashboardName, tenants, additionalProcessing, pivotQuery, comparisonPivotQuery, getPivotRowCount, caller, getToken, }: {
6
6
  pivot: Pivot;
7
7
  report?: QuillReportInternal;
8
8
  client: QuillProviderClient;
@@ -19,6 +19,7 @@ export declare function generatePivotWithSQL({ pivot, report, client, dateBucket
19
19
  comparisonPivotQuery?: string;
20
20
  getPivotRowCount?: boolean;
21
21
  caller?: string;
22
+ getToken: () => Promise<string>;
22
23
  }): Promise<PivotData>;
23
24
  export declare function disambiguatedValueField(pivot: Pivot): string | undefined;
24
25
  //# sourceMappingURL=pivotConstructor.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"pivotConstructor.d.ts","sourceRoot":"","sources":["../../../src/utils/pivotConstructor.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAYvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAGzD,wBAAsB,oBAAoB,CAAC,EACzC,KAAK,EACL,MAAM,EACN,MAAM,EACN,UAAU,EACV,UAAU,EACV,eAAe,EACf,aAAa,EACb,OAAO,EACP,oBAAoB,EACpB,UAAU,EACV,oBAAoB,EACpB,gBAAuB,EACvB,MAAM,GACP,EAAE;IACD,KAAK,EAAE,KAAK,CAAC;IACb,MAAM,CAAC,EAAE,mBAAmB,CAAC;IAC7B,MAAM,EAAE,mBAAmB,CAAC;IAC5B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,GAAG,CAAC;IACjB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,EACJ;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAA;KAAE,EAAE,GACzD,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC;IACxB,oBAAoB,CAAC,EAAE,oBAAoB,CAAC;IAC5C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,GAAG,OAAO,CAAC,SAAS,CAAC,CAyWrB;AAED,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,KAAK,sBAYnD"}
1
+ {"version":3,"file":"pivotConstructor.d.ts","sourceRoot":"","sources":["../../../src/utils/pivotConstructor.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAYvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAGzD,wBAAsB,oBAAoB,CAAC,EACzC,KAAK,EACL,MAAM,EACN,MAAM,EACN,UAAU,EACV,UAAU,EACV,eAAe,EACf,aAAa,EACb,OAAO,EACP,oBAAoB,EACpB,UAAU,EACV,oBAAoB,EACpB,gBAAuB,EACvB,MAAM,EACN,QAAQ,GACT,EAAE;IACD,KAAK,EAAE,KAAK,CAAC;IACb,MAAM,CAAC,EAAE,mBAAmB,CAAC;IAC7B,MAAM,EAAE,mBAAmB,CAAC;IAC5B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,GAAG,CAAC;IACjB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,EACJ;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAA;KAAE,EAAE,GACzD,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC;IACxB,oBAAoB,CAAC,EAAE,oBAAoB,CAAC;IAC5C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;CACjC,GAAG,OAAO,CAAC,SAAS,CAAC,CA6WrB;AAED,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,KAAK,sBAYnD"}
@@ -1,13 +1,13 @@
1
1
  import { getDateString } from '../internals/ReportBuilder/PivotModal';
2
2
  import { isStringType, processColumnName } from './columnProcessing';
3
3
  import { MAX_PIVOT_UNIQUE_VALUES } from './constants';
4
- import { getData } from './dataFetcher';
4
+ import { quillFetch } from './dataFetcher';
5
5
  import { parseValueFromBigQueryDates } from './dataProcessing';
6
6
  import { getComparisonInterval } from './dates';
7
7
  import { mergeComparisonPivotColumns, mergeComparisonPivotRows } from './merge';
8
8
  import { additionalProcessingOnPivotQuery, generatePivotQuery, generateRowCountQuery, } from './queryConstructor';
9
9
  import { matchCasing, snakeCaseToTitleCase } from './textProcessing';
10
- export async function generatePivotWithSQL({ pivot, report, client, dateBucket, dateFilter, distinctStrings, dashboardName, tenants, additionalProcessing, pivotQuery, comparisonPivotQuery, getPivotRowCount = true, caller, }) {
10
+ export async function generatePivotWithSQL({ pivot, report, client, dateBucket, dateFilter, distinctStrings, dashboardName, tenants, additionalProcessing, pivotQuery, comparisonPivotQuery, getPivotRowCount = true, caller, getToken, }) {
11
11
  let sqlQuery = pivotQuery;
12
12
  let comparisonPivotSql = comparisonPivotQuery;
13
13
  const databaseType = client.databaseType || 'postgresql';
@@ -82,10 +82,11 @@ export async function generatePivotWithSQL({ pivot, report, client, dateBucket,
82
82
  if (paginatedComparisonQuery) {
83
83
  preQueries.push(paginatedComparisonQuery);
84
84
  }
85
- const hostedBody = {
85
+ const { data: resp } = await quillFetch({
86
+ client,
87
+ task: 'query',
86
88
  metadata: {
87
89
  preQueries,
88
- task: 'query',
89
90
  clientId: client.publicKey,
90
91
  databaseType: databaseType,
91
92
  runQueryConfig: {
@@ -96,9 +97,10 @@ export async function generatePivotWithSQL({ pivot, report, client, dateBucket,
96
97
  dashboardName: dashboardName && tenants ? dashboardName : undefined,
97
98
  tenants: dashboardName && tenants ? tenants : undefined,
98
99
  },
99
- };
100
- const cloudBody = { ...hostedBody };
101
- const resp = await getData(client, 'query', 'same-origin', hostedBody, cloudBody, 'POST', 'fetch-pivot');
100
+ urlParameters: `caller=generatePivot&task=query`,
101
+ credentials: 'same-origin',
102
+ getToken,
103
+ });
102
104
  if (resp.success === false) {
103
105
  throw resp.errorMessage;
104
106
  }
@@ -146,9 +148,13 @@ export async function generatePivotWithSQL({ pivot, report, client, dateBucket,
146
148
  label: snakeCaseToTitleCase(processColumnName(field.name.replace('comparison_', 'comparison '))),
147
149
  format: field.name === pivot.rowField
148
150
  ? 'string'
149
- : pivot.aggregations?.[index]?.aggregationType === 'percentage'
150
- ? 'percent'
151
- : 'whole_number',
151
+ : // This scary equation is calculating which aggregation a column is associated with.
152
+ // Eg you have 7 columns and 2 aggregations, you can assume column 0 is the row field, 1-3 is aggregation 0, and 4-6 is aggregation 1.
153
+ pivot.aggregations?.[Math.floor((index - 1) /
154
+ Math.floor((responseFields.length - 1) /
155
+ (pivot.aggregations?.length ?? 1)))]?.aggregationType === 'percentage'
156
+ ? 'percent'
157
+ : 'whole_number',
152
158
  fieldType: field.fieldType,
153
159
  jsType: field.jsType,
154
160
  dataTypeID: field.dataTypeID,
@@ -1 +1 @@
1
- {"version":3,"file":"pivotProcessing.d.ts","sourceRoot":"","sources":["../../../src/utils/pivotProcessing.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAMxD,wBAAgB,YAAY,CAAC,KAAK,EAAE,KAAK,GAAG;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAuB7E;AAED,wBAAgB,4BAA4B,CAC1C,OAAO,EAAE,cAAc,EAAE,EACzB,YAAY,EAAE,oBAAoB;;;;EAyDnC;AAED,wBAAgB,UAAU,CACxB,KAAK,EAAE,KAAK,EACZ,eAAe,EAAE;IACf,SAAS,EAAE,GAAG,CAAC;IACf,YAAY,EAAE,GAAG,CAAC;IAClB,WAAW,EAAE,GAAG,CAAC;CAClB,GACA,KAAK,CAsCP;AAED,eAAO,MAAM,eAAe,WAAY,GAAG,SAAS,KAAK,YA8BxD,CAAC;AAEF,eAAO,MAAM,aAAa,UACjB,KAAK,WACH,cAAc,EAAE,WAChB,mBAAmB,kBACZ,MAAM,cACV,SAAS;;;;;;;;;;;CAuDtB,CAAC"}
1
+ {"version":3,"file":"pivotProcessing.d.ts","sourceRoot":"","sources":["../../../src/utils/pivotProcessing.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAWxD,wBAAgB,YAAY,CAAC,KAAK,EAAE,KAAK,GAAG;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAuB7E;AAED,wBAAgB,4BAA4B,CAC1C,OAAO,EAAE,cAAc,EAAE,EACzB,YAAY,EAAE,oBAAoB;;;;EAqDnC;AAED,wBAAgB,UAAU,CACxB,KAAK,EAAE,KAAK,EACZ,eAAe,EAAE;IACf,SAAS,EAAE,GAAG,CAAC;IACf,YAAY,EAAE,GAAG,CAAC;IAClB,WAAW,EAAE,GAAG,CAAC;CAClB,GACA,KAAK,CAsCP;AAED,eAAO,MAAM,eAAe,WAAY,GAAG,SAAS,KAAK,YA8BxD,CAAC;AAEF,eAAO,MAAM,aAAa,UACjB,KAAK,WACH,cAAc,EAAE,WAChB,mBAAmB,kBACZ,MAAM,cACV,SAAS;;;;;;;;;;;CAuDtB,CAAC"}
@@ -1,9 +1,9 @@
1
1
  import { isIdColumn } from '../components/ReportBuilder/util';
2
2
  import { isDateField } from '../internals/ReportBuilder/PivotModal';
3
- import { isDateType, isNumberType } from './columnProcessing';
3
+ import { isBoolType, isDateType, isNumberType, isStringType, } from './columnProcessing';
4
4
  import { MAX_PIVOT_UNIQUE_VALUES } from './constants';
5
5
  import { disambiguatedValueField } from './pivotConstructor';
6
- import { DATE_FORMAT_TYPES, NUMBER_FORMAT_TYPES } from './valueFormatter';
6
+ import { NUMBER_FORMAT_TYPES } from './valueFormatter';
7
7
  export function isValidPivot(pivot) {
8
8
  if (!pivot.rowField && !pivot.aggregations?.[0]?.valueField) {
9
9
  return {
@@ -31,7 +31,7 @@ export function getPossiblePivotFieldOptions(columns, uniqueValues) {
31
31
  const valueFields = [];
32
32
  for (const column of columns) {
33
33
  // row fields can be dates or strings
34
- if (DATE_FORMAT_TYPES.includes(column.format)) {
34
+ if (isDateType(column.fieldType)) {
35
35
  rowFields.push(column.field);
36
36
  }
37
37
  // include ID fields as rowField pivot option
@@ -39,7 +39,7 @@ export function getPossiblePivotFieldOptions(columns, uniqueValues) {
39
39
  // rowFields.push(column.field);
40
40
  // }
41
41
  // column fields can be strings
42
- if (column.jsType === 'string') {
42
+ if (isStringType(column.fieldType)) {
43
43
  const possibleValues = uniqueValues?.[column.field] ?? [];
44
44
  const isNullValuesOnly = !possibleValues ||
45
45
  (Object.keys(possibleValues).length === 1 &&
@@ -56,9 +56,7 @@ export function getPossiblePivotFieldOptions(columns, uniqueValues) {
56
56
  }
57
57
  }
58
58
  // value fields can be numbers or bools
59
- // TODO: should "format" be used as the indicator, or fieldType?
60
- if (NUMBER_FORMAT_TYPES.includes(column.format) ||
61
- column.jsType === 'bool') {
59
+ if (isNumberType(column.fieldType) || isBoolType(column.fieldType)) {
62
60
  if (!isIdColumn(column.field)) {
63
61
  valueFields.push(column.field);
64
62
  }
@@ -863,7 +863,7 @@ export function additionalProcessingOnPivotQuery(pivot, query, additionalProcess
863
863
  }
864
864
  const additionalProcessingQuery = `
865
865
  SELECT *
866
- FROM quill_base_pivot ${sortQuery}${databaseType === 'mssql' ? ` OFFSET ${offset} ROWS FETCH NEXT ${limit} ROWS ONLY` : ` LIMIT ${limit} OFFSET ${offset}`}
866
+ FROM quill_base_pivot ${sortQuery}${databaseType.toLowerCase() === 'mssql' ? ` OFFSET ${offset} ROWS FETCH NEXT ${limit} ROWS ONLY` : ` LIMIT ${limit} OFFSET ${offset}`}
867
867
  `
868
868
  .replace(/\s+/g, ' ')
869
869
  .trim();