@quillsql/react 2.12.35 → 2.12.37

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 (475) hide show
  1. package/dist/cjs/Chart.d.ts +2 -1
  2. package/dist/cjs/Chart.d.ts.map +1 -1
  3. package/dist/cjs/Chart.js +3 -3
  4. package/dist/cjs/ChartBuilder.d.ts.map +1 -1
  5. package/dist/cjs/ChartBuilder.js +3 -3
  6. package/dist/cjs/Dashboard.d.ts.map +1 -1
  7. package/dist/cjs/Dashboard.js +2 -2
  8. package/dist/cjs/ReportBuilder.d.ts.map +1 -1
  9. package/dist/cjs/ReportBuilder.js +13 -0
  10. package/dist/cjs/SQLEditor.js +2 -1
  11. package/dist/cjs/components/Chart/BarList.d.ts +1 -0
  12. package/dist/cjs/components/Chart/BarList.d.ts.map +1 -1
  13. package/dist/cjs/components/Chart/BarList.js +3 -3
  14. package/dist/cjs/components/Chart/ChartError.js +1 -1
  15. package/dist/cjs/utils/dashboard.js +1 -1
  16. package/dist/cjs/utils/dataFetcher.d.ts.map +1 -1
  17. package/dist/cjs/utils/dataFetcher.js +7 -1
  18. package/dist/cjs/utils/dataProcessing.d.ts +1 -0
  19. package/dist/cjs/utils/dataProcessing.d.ts.map +1 -1
  20. package/dist/cjs/utils/dataProcessing.js +20 -1
  21. package/dist/cjs/utils/queryConstructor.d.ts +1 -1
  22. package/dist/cjs/utils/queryConstructor.d.ts.map +1 -1
  23. package/dist/cjs/utils/queryConstructor.js +8 -5
  24. package/dist/cjs/utils/report.d.ts.map +1 -1
  25. package/dist/cjs/utils/report.js +17 -5
  26. package/dist/cjs/utils/tableProcessing.d.ts.map +1 -1
  27. package/dist/cjs/utils/tableProcessing.js +7 -0
  28. package/package.json +1 -1
  29. package/dist/esm/Chart.d.ts +0 -203
  30. package/dist/esm/Chart.d.ts.map +0 -1
  31. package/dist/esm/Chart.js +0 -431
  32. package/dist/esm/ChartBuilder.d.ts +0 -339
  33. package/dist/esm/ChartBuilder.d.ts.map +0 -1
  34. package/dist/esm/ChartBuilder.js +0 -1312
  35. package/dist/esm/ChartEditor.d.ts +0 -209
  36. package/dist/esm/ChartEditor.d.ts.map +0 -1
  37. package/dist/esm/ChartEditor.js +0 -182
  38. package/dist/esm/Context.d.ts +0 -14
  39. package/dist/esm/Context.d.ts.map +0 -1
  40. package/dist/esm/Context.js +0 -269
  41. package/dist/esm/Dashboard.d.ts +0 -279
  42. package/dist/esm/Dashboard.d.ts.map +0 -1
  43. package/dist/esm/Dashboard.js +0 -660
  44. package/dist/esm/DateRangePicker/Calendar.d.ts +0 -17
  45. package/dist/esm/DateRangePicker/Calendar.d.ts.map +0 -1
  46. package/dist/esm/DateRangePicker/Calendar.js +0 -164
  47. package/dist/esm/DateRangePicker/DateRangePicker.d.ts +0 -39
  48. package/dist/esm/DateRangePicker/DateRangePicker.d.ts.map +0 -1
  49. package/dist/esm/DateRangePicker/DateRangePicker.js +0 -95
  50. package/dist/esm/DateRangePicker/DateRangePickerButton.d.ts +0 -22
  51. package/dist/esm/DateRangePicker/DateRangePickerButton.d.ts.map +0 -1
  52. package/dist/esm/DateRangePicker/DateRangePickerButton.js +0 -134
  53. package/dist/esm/DateRangePicker/QuillDateRangePicker.d.ts +0 -25
  54. package/dist/esm/DateRangePicker/QuillDateRangePicker.d.ts.map +0 -1
  55. package/dist/esm/DateRangePicker/QuillDateRangePicker.js +0 -260
  56. package/dist/esm/DateRangePicker/dateRangePickerUtils.d.ts +0 -80
  57. package/dist/esm/DateRangePicker/dateRangePickerUtils.d.ts.map +0 -1
  58. package/dist/esm/DateRangePicker/dateRangePickerUtils.js +0 -521
  59. package/dist/esm/DateRangePicker/index.d.ts +0 -3
  60. package/dist/esm/DateRangePicker/index.d.ts.map +0 -1
  61. package/dist/esm/DateRangePicker/index.js +0 -2
  62. package/dist/esm/QuillProvider.d.ts +0 -163
  63. package/dist/esm/QuillProvider.d.ts.map +0 -1
  64. package/dist/esm/QuillProvider.js +0 -104
  65. package/dist/esm/ReportBuilder.d.ts +0 -318
  66. package/dist/esm/ReportBuilder.d.ts.map +0 -1
  67. package/dist/esm/ReportBuilder.js +0 -3266
  68. package/dist/esm/SQLEditor.d.ts +0 -272
  69. package/dist/esm/SQLEditor.d.ts.map +0 -1
  70. package/dist/esm/SQLEditor.js +0 -509
  71. package/dist/esm/Table.d.ts +0 -167
  72. package/dist/esm/Table.d.ts.map +0 -1
  73. package/dist/esm/Table.js +0 -215
  74. package/dist/esm/TableChart.d.ts +0 -15
  75. package/dist/esm/TableChart.d.ts.map +0 -1
  76. package/dist/esm/TableChart.js +0 -95
  77. package/dist/esm/assets/ArrowDownHeadIcon.d.ts +0 -5
  78. package/dist/esm/assets/ArrowDownHeadIcon.d.ts.map +0 -1
  79. package/dist/esm/assets/ArrowDownHeadIcon.js +0 -3
  80. package/dist/esm/assets/ArrowDownIcon.d.ts +0 -5
  81. package/dist/esm/assets/ArrowDownIcon.d.ts.map +0 -1
  82. package/dist/esm/assets/ArrowDownIcon.js +0 -3
  83. package/dist/esm/assets/ArrowDownRightIcon.d.ts +0 -5
  84. package/dist/esm/assets/ArrowDownRightIcon.d.ts.map +0 -1
  85. package/dist/esm/assets/ArrowDownRightIcon.js +0 -3
  86. package/dist/esm/assets/ArrowLeftHeadIcon.d.ts +0 -5
  87. package/dist/esm/assets/ArrowLeftHeadIcon.d.ts.map +0 -1
  88. package/dist/esm/assets/ArrowLeftHeadIcon.js +0 -3
  89. package/dist/esm/assets/ArrowRightHeadIcon.d.ts +0 -5
  90. package/dist/esm/assets/ArrowRightHeadIcon.d.ts.map +0 -1
  91. package/dist/esm/assets/ArrowRightHeadIcon.js +0 -3
  92. package/dist/esm/assets/ArrowRightIcon.d.ts +0 -5
  93. package/dist/esm/assets/ArrowRightIcon.d.ts.map +0 -1
  94. package/dist/esm/assets/ArrowRightIcon.js +0 -3
  95. package/dist/esm/assets/ArrowUpHeadIcon.d.ts +0 -5
  96. package/dist/esm/assets/ArrowUpHeadIcon.d.ts.map +0 -1
  97. package/dist/esm/assets/ArrowUpHeadIcon.js +0 -3
  98. package/dist/esm/assets/ArrowUpIcon.d.ts +0 -5
  99. package/dist/esm/assets/ArrowUpIcon.d.ts.map +0 -1
  100. package/dist/esm/assets/ArrowUpIcon.js +0 -3
  101. package/dist/esm/assets/ArrowUpRightIcon.d.ts +0 -5
  102. package/dist/esm/assets/ArrowUpRightIcon.d.ts.map +0 -1
  103. package/dist/esm/assets/ArrowUpRightIcon.js +0 -3
  104. package/dist/esm/assets/CalendarIcon.d.ts +0 -5
  105. package/dist/esm/assets/CalendarIcon.d.ts.map +0 -1
  106. package/dist/esm/assets/CalendarIcon.js +0 -3
  107. package/dist/esm/assets/CalendarNormalIcon.d.ts +0 -5
  108. package/dist/esm/assets/CalendarNormalIcon.d.ts.map +0 -1
  109. package/dist/esm/assets/CalendarNormalIcon.js +0 -3
  110. package/dist/esm/assets/DoubleArrowLeftHeadIcon.d.ts +0 -5
  111. package/dist/esm/assets/DoubleArrowLeftHeadIcon.d.ts.map +0 -1
  112. package/dist/esm/assets/DoubleArrowLeftHeadIcon.js +0 -3
  113. package/dist/esm/assets/DoubleArrowRightHeadIcon.d.ts +0 -5
  114. package/dist/esm/assets/DoubleArrowRightHeadIcon.d.ts.map +0 -1
  115. package/dist/esm/assets/DoubleArrowRightHeadIcon.js +0 -3
  116. package/dist/esm/assets/ExclamationFilledIcon.d.ts +0 -5
  117. package/dist/esm/assets/ExclamationFilledIcon.d.ts.map +0 -1
  118. package/dist/esm/assets/ExclamationFilledIcon.js +0 -3
  119. package/dist/esm/assets/FilterIcon.d.ts +0 -5
  120. package/dist/esm/assets/FilterIcon.d.ts.map +0 -1
  121. package/dist/esm/assets/FilterIcon.js +0 -3
  122. package/dist/esm/assets/LoadingSpinner.d.ts +0 -5
  123. package/dist/esm/assets/LoadingSpinner.d.ts.map +0 -1
  124. package/dist/esm/assets/LoadingSpinner.js +0 -3
  125. package/dist/esm/assets/RefreshIcon.d.ts +0 -5
  126. package/dist/esm/assets/RefreshIcon.d.ts.map +0 -1
  127. package/dist/esm/assets/RefreshIcon.js +0 -3
  128. package/dist/esm/assets/SearchIcon.d.ts +0 -5
  129. package/dist/esm/assets/SearchIcon.d.ts.map +0 -1
  130. package/dist/esm/assets/SearchIcon.js +0 -3
  131. package/dist/esm/assets/UpLeftArrowsIcon.d.ts +0 -5
  132. package/dist/esm/assets/UpLeftArrowsIcon.d.ts.map +0 -1
  133. package/dist/esm/assets/UpLeftArrowsIcon.js +0 -3
  134. package/dist/esm/assets/XCircleIcon.d.ts +0 -5
  135. package/dist/esm/assets/XCircleIcon.d.ts.map +0 -1
  136. package/dist/esm/assets/XCircleIcon.js +0 -3
  137. package/dist/esm/assets/XIcon.d.ts +0 -5
  138. package/dist/esm/assets/XIcon.d.ts.map +0 -1
  139. package/dist/esm/assets/XIcon.js +0 -3
  140. package/dist/esm/assets/index.d.ts +0 -22
  141. package/dist/esm/assets/index.d.ts.map +0 -1
  142. package/dist/esm/assets/index.js +0 -21
  143. package/dist/esm/components/Banner/index.d.ts +0 -3
  144. package/dist/esm/components/Banner/index.d.ts.map +0 -1
  145. package/dist/esm/components/Banner/index.js +0 -24
  146. package/dist/esm/components/BigModal/BigModal.d.ts +0 -15
  147. package/dist/esm/components/BigModal/BigModal.d.ts.map +0 -1
  148. package/dist/esm/components/BigModal/BigModal.js +0 -56
  149. package/dist/esm/components/Chart/BarChart.d.ts +0 -23
  150. package/dist/esm/components/Chart/BarChart.d.ts.map +0 -1
  151. package/dist/esm/components/Chart/BarChart.js +0 -110
  152. package/dist/esm/components/Chart/BarList.d.ts +0 -26
  153. package/dist/esm/components/Chart/BarList.d.ts.map +0 -1
  154. package/dist/esm/components/Chart/BarList.js +0 -148
  155. package/dist/esm/components/Chart/ChartError.d.ts +0 -10
  156. package/dist/esm/components/Chart/ChartError.d.ts.map +0 -1
  157. package/dist/esm/components/Chart/ChartError.js +0 -65
  158. package/dist/esm/components/Chart/ChartSkeleton.d.ts +0 -8
  159. package/dist/esm/components/Chart/ChartSkeleton.d.ts.map +0 -1
  160. package/dist/esm/components/Chart/ChartSkeleton.js +0 -19
  161. package/dist/esm/components/Chart/ChartTooltip.d.ts +0 -31
  162. package/dist/esm/components/Chart/ChartTooltip.d.ts.map +0 -1
  163. package/dist/esm/components/Chart/ChartTooltip.js +0 -234
  164. package/dist/esm/components/Chart/ChartTooltipFrame.d.ts +0 -6
  165. package/dist/esm/components/Chart/ChartTooltipFrame.d.ts.map +0 -1
  166. package/dist/esm/components/Chart/ChartTooltipFrame.js +0 -14
  167. package/dist/esm/components/Chart/ChartTooltipGroup.d.ts +0 -11
  168. package/dist/esm/components/Chart/ChartTooltipGroup.d.ts.map +0 -1
  169. package/dist/esm/components/Chart/ChartTooltipGroup.js +0 -23
  170. package/dist/esm/components/Chart/ChartTooltipRow.d.ts +0 -8
  171. package/dist/esm/components/Chart/ChartTooltipRow.d.ts.map +0 -1
  172. package/dist/esm/components/Chart/ChartTooltipRow.js +0 -41
  173. package/dist/esm/components/Chart/LineChart.d.ts +0 -29
  174. package/dist/esm/components/Chart/LineChart.d.ts.map +0 -1
  175. package/dist/esm/components/Chart/LineChart.js +0 -163
  176. package/dist/esm/components/Chart/PieChart.d.ts +0 -62
  177. package/dist/esm/components/Chart/PieChart.d.ts.map +0 -1
  178. package/dist/esm/components/Chart/PieChart.js +0 -195
  179. package/dist/esm/components/Dashboard/ChartComponent.d.ts +0 -4
  180. package/dist/esm/components/Dashboard/ChartComponent.d.ts.map +0 -1
  181. package/dist/esm/components/Dashboard/ChartComponent.js +0 -60
  182. package/dist/esm/components/Dashboard/DashboardFilter.d.ts +0 -38
  183. package/dist/esm/components/Dashboard/DashboardFilter.d.ts.map +0 -1
  184. package/dist/esm/components/Dashboard/DashboardFilter.js +0 -89
  185. package/dist/esm/components/Dashboard/DashboardSection.d.ts +0 -7
  186. package/dist/esm/components/Dashboard/DashboardSection.d.ts.map +0 -1
  187. package/dist/esm/components/Dashboard/DashboardSection.js +0 -22
  188. package/dist/esm/components/Dashboard/DashboardSectionContainer.d.ts +0 -3
  189. package/dist/esm/components/Dashboard/DashboardSectionContainer.d.ts.map +0 -1
  190. package/dist/esm/components/Dashboard/DashboardSectionContainer.js +0 -10
  191. package/dist/esm/components/Dashboard/DataLoader.d.ts +0 -44
  192. package/dist/esm/components/Dashboard/DataLoader.d.ts.map +0 -1
  193. package/dist/esm/components/Dashboard/DataLoader.js +0 -190
  194. package/dist/esm/components/Dashboard/MetricComponent.d.ts +0 -4
  195. package/dist/esm/components/Dashboard/MetricComponent.d.ts.map +0 -1
  196. package/dist/esm/components/Dashboard/MetricComponent.js +0 -133
  197. package/dist/esm/components/Dashboard/TableComponent.d.ts +0 -15
  198. package/dist/esm/components/Dashboard/TableComponent.d.ts.map +0 -1
  199. package/dist/esm/components/Dashboard/TableComponent.js +0 -62
  200. package/dist/esm/components/Dropdown/Dropdown.d.ts +0 -14
  201. package/dist/esm/components/Dropdown/Dropdown.d.ts.map +0 -1
  202. package/dist/esm/components/Dropdown/Dropdown.js +0 -69
  203. package/dist/esm/components/Dropdown/DropdownItem.d.ts +0 -11
  204. package/dist/esm/components/Dropdown/DropdownItem.d.ts.map +0 -1
  205. package/dist/esm/components/Dropdown/DropdownItem.js +0 -37
  206. package/dist/esm/components/Dropdown/index.d.ts +0 -3
  207. package/dist/esm/components/Dropdown/index.d.ts.map +0 -1
  208. package/dist/esm/components/Dropdown/index.js +0 -2
  209. package/dist/esm/components/Modal/Modal.d.ts +0 -15
  210. package/dist/esm/components/Modal/Modal.d.ts.map +0 -1
  211. package/dist/esm/components/Modal/Modal.js +0 -64
  212. package/dist/esm/components/Modal/index.d.ts +0 -2
  213. package/dist/esm/components/Modal/index.d.ts.map +0 -1
  214. package/dist/esm/components/Modal/index.js +0 -1
  215. package/dist/esm/components/QuillCard.d.ts +0 -9
  216. package/dist/esm/components/QuillCard.d.ts.map +0 -1
  217. package/dist/esm/components/QuillCard.js +0 -56
  218. package/dist/esm/components/QuillMultiSelect.d.ts +0 -11
  219. package/dist/esm/components/QuillMultiSelect.d.ts.map +0 -1
  220. package/dist/esm/components/QuillMultiSelect.js +0 -193
  221. package/dist/esm/components/QuillMultiSelectWithCombo.d.ts +0 -11
  222. package/dist/esm/components/QuillMultiSelectWithCombo.d.ts.map +0 -1
  223. package/dist/esm/components/QuillMultiSelectWithCombo.js +0 -215
  224. package/dist/esm/components/QuillSelect.d.ts +0 -6
  225. package/dist/esm/components/QuillSelect.d.ts.map +0 -1
  226. package/dist/esm/components/QuillSelect.js +0 -136
  227. package/dist/esm/components/QuillSelectWithCombo.d.ts +0 -6
  228. package/dist/esm/components/QuillSelectWithCombo.d.ts.map +0 -1
  229. package/dist/esm/components/QuillSelectWithCombo.js +0 -163
  230. package/dist/esm/components/QuillTable.d.ts +0 -31
  231. package/dist/esm/components/QuillTable.d.ts.map +0 -1
  232. package/dist/esm/components/QuillTable.js +0 -261
  233. package/dist/esm/components/ReportBuilder/AddColumnModal.d.ts +0 -34
  234. package/dist/esm/components/ReportBuilder/AddColumnModal.d.ts.map +0 -1
  235. package/dist/esm/components/ReportBuilder/AddColumnModal.js +0 -145
  236. package/dist/esm/components/ReportBuilder/AddLimitPopover.d.ts +0 -26
  237. package/dist/esm/components/ReportBuilder/AddLimitPopover.d.ts.map +0 -1
  238. package/dist/esm/components/ReportBuilder/AddLimitPopover.js +0 -36
  239. package/dist/esm/components/ReportBuilder/AddSortPopover.d.ts +0 -23
  240. package/dist/esm/components/ReportBuilder/AddSortPopover.d.ts.map +0 -1
  241. package/dist/esm/components/ReportBuilder/AddSortPopover.js +0 -73
  242. package/dist/esm/components/ReportBuilder/FilterModal.d.ts +0 -30
  243. package/dist/esm/components/ReportBuilder/FilterModal.d.ts.map +0 -1
  244. package/dist/esm/components/ReportBuilder/FilterModal.js +0 -576
  245. package/dist/esm/components/ReportBuilder/ast.d.ts +0 -523
  246. package/dist/esm/components/ReportBuilder/ast.d.ts.map +0 -1
  247. package/dist/esm/components/ReportBuilder/ast.js +0 -230
  248. package/dist/esm/components/ReportBuilder/bigDateMap.d.ts +0 -7
  249. package/dist/esm/components/ReportBuilder/bigDateMap.d.ts.map +0 -1
  250. package/dist/esm/components/ReportBuilder/bigDateMap.js +0 -687
  251. package/dist/esm/components/ReportBuilder/constants.d.ts +0 -117
  252. package/dist/esm/components/ReportBuilder/constants.d.ts.map +0 -1
  253. package/dist/esm/components/ReportBuilder/constants.js +0 -161
  254. package/dist/esm/components/ReportBuilder/convert.d.ts +0 -65
  255. package/dist/esm/components/ReportBuilder/convert.d.ts.map +0 -1
  256. package/dist/esm/components/ReportBuilder/convert.js +0 -717
  257. package/dist/esm/components/ReportBuilder/operators.d.ts +0 -462
  258. package/dist/esm/components/ReportBuilder/operators.d.ts.map +0 -1
  259. package/dist/esm/components/ReportBuilder/operators.js +0 -581
  260. package/dist/esm/components/ReportBuilder/pivot.d.ts +0 -16
  261. package/dist/esm/components/ReportBuilder/pivot.d.ts.map +0 -1
  262. package/dist/esm/components/ReportBuilder/pivot.js +0 -1
  263. package/dist/esm/components/ReportBuilder/postgres.d.ts +0 -150
  264. package/dist/esm/components/ReportBuilder/postgres.d.ts.map +0 -1
  265. package/dist/esm/components/ReportBuilder/postgres.js +0 -355
  266. package/dist/esm/components/ReportBuilder/schema.d.ts +0 -23
  267. package/dist/esm/components/ReportBuilder/schema.d.ts.map +0 -1
  268. package/dist/esm/components/ReportBuilder/schema.js +0 -1
  269. package/dist/esm/components/ReportBuilder/ui.d.ts +0 -119
  270. package/dist/esm/components/ReportBuilder/ui.d.ts.map +0 -1
  271. package/dist/esm/components/ReportBuilder/ui.js +0 -382
  272. package/dist/esm/components/ReportBuilder/util.d.ts +0 -76
  273. package/dist/esm/components/ReportBuilder/util.d.ts.map +0 -1
  274. package/dist/esm/components/ReportBuilder/util.js +0 -729
  275. package/dist/esm/components/UiComponents.d.ts +0 -221
  276. package/dist/esm/components/UiComponents.d.ts.map +0 -1
  277. package/dist/esm/components/UiComponents.js +0 -571
  278. package/dist/esm/components/selectUtils.d.ts +0 -9
  279. package/dist/esm/components/selectUtils.d.ts.map +0 -1
  280. package/dist/esm/components/selectUtils.js +0 -17
  281. package/dist/esm/contexts/BaseColorContext.d.ts +0 -4
  282. package/dist/esm/contexts/BaseColorContext.d.ts.map +0 -1
  283. package/dist/esm/contexts/BaseColorContext.js +0 -3
  284. package/dist/esm/contexts/HoveredValueContext.d.ts +0 -8
  285. package/dist/esm/contexts/HoveredValueContext.d.ts.map +0 -1
  286. package/dist/esm/contexts/HoveredValueContext.js +0 -5
  287. package/dist/esm/contexts/RootStylesContext.d.ts +0 -4
  288. package/dist/esm/contexts/RootStylesContext.d.ts.map +0 -1
  289. package/dist/esm/contexts/RootStylesContext.js +0 -3
  290. package/dist/esm/contexts/SelectedValueContext.d.ts +0 -8
  291. package/dist/esm/contexts/SelectedValueContext.d.ts.map +0 -1
  292. package/dist/esm/contexts/SelectedValueContext.js +0 -6
  293. package/dist/esm/contexts/index.d.ts +0 -5
  294. package/dist/esm/contexts/index.d.ts.map +0 -1
  295. package/dist/esm/contexts/index.js +0 -4
  296. package/dist/esm/hooks/index.d.ts +0 -6
  297. package/dist/esm/hooks/index.d.ts.map +0 -1
  298. package/dist/esm/hooks/index.js +0 -5
  299. package/dist/esm/hooks/useAstToFilterTree.d.ts +0 -11
  300. package/dist/esm/hooks/useAstToFilterTree.d.ts.map +0 -1
  301. package/dist/esm/hooks/useAstToFilterTree.js +0 -24
  302. package/dist/esm/hooks/useDashboard.d.ts +0 -7
  303. package/dist/esm/hooks/useDashboard.d.ts.map +0 -1
  304. package/dist/esm/hooks/useDashboard.js +0 -69
  305. package/dist/esm/hooks/useExport.d.ts +0 -6
  306. package/dist/esm/hooks/useExport.d.ts.map +0 -1
  307. package/dist/esm/hooks/useExport.js +0 -125
  308. package/dist/esm/hooks/useFormat.d.ts +0 -5
  309. package/dist/esm/hooks/useFormat.d.ts.map +0 -1
  310. package/dist/esm/hooks/useFormat.js +0 -25
  311. package/dist/esm/hooks/useInternalState.d.ts +0 -4
  312. package/dist/esm/hooks/useInternalState.d.ts.map +0 -1
  313. package/dist/esm/hooks/useInternalState.js +0 -14
  314. package/dist/esm/hooks/useOnClickOutside.d.ts +0 -3
  315. package/dist/esm/hooks/useOnClickOutside.d.ts.map +0 -1
  316. package/dist/esm/hooks/useOnClickOutside.js +0 -18
  317. package/dist/esm/hooks/useOnWindowResize.d.ts +0 -5
  318. package/dist/esm/hooks/useOnWindowResize.d.ts.map +0 -1
  319. package/dist/esm/hooks/useOnWindowResize.js +0 -14
  320. package/dist/esm/hooks/useQuill.d.ts +0 -37
  321. package/dist/esm/hooks/useQuill.d.ts.map +0 -1
  322. package/dist/esm/hooks/useQuill.js +0 -182
  323. package/dist/esm/hooks/useSelectOnKeyDown.d.ts +0 -3
  324. package/dist/esm/hooks/useSelectOnKeyDown.d.ts.map +0 -1
  325. package/dist/esm/hooks/useSelectOnKeyDown.js +0 -63
  326. package/dist/esm/hooks/useTheme.d.ts +0 -7
  327. package/dist/esm/hooks/useTheme.d.ts.map +0 -1
  328. package/dist/esm/hooks/useTheme.js +0 -10
  329. package/dist/esm/index.d.ts +0 -29
  330. package/dist/esm/index.d.ts.map +0 -1
  331. package/dist/esm/index.js +0 -16
  332. package/dist/esm/internals/ReportBuilder/PivotForm.d.ts +0 -28
  333. package/dist/esm/internals/ReportBuilder/PivotForm.d.ts.map +0 -1
  334. package/dist/esm/internals/ReportBuilder/PivotForm.js +0 -62
  335. package/dist/esm/internals/ReportBuilder/PivotList.d.ts +0 -39
  336. package/dist/esm/internals/ReportBuilder/PivotList.d.ts.map +0 -1
  337. package/dist/esm/internals/ReportBuilder/PivotList.js +0 -89
  338. package/dist/esm/internals/ReportBuilder/PivotModal.d.ts +0 -146
  339. package/dist/esm/internals/ReportBuilder/PivotModal.d.ts.map +0 -1
  340. package/dist/esm/internals/ReportBuilder/PivotModal.js +0 -1210
  341. package/dist/esm/lib/font.d.ts +0 -14
  342. package/dist/esm/lib/font.d.ts.map +0 -1
  343. package/dist/esm/lib/font.js +0 -13
  344. package/dist/esm/lib/index.d.ts +0 -4
  345. package/dist/esm/lib/index.d.ts.map +0 -1
  346. package/dist/esm/lib/index.js +0 -3
  347. package/dist/esm/lib/inputTypes.d.ts +0 -21
  348. package/dist/esm/lib/inputTypes.d.ts.map +0 -1
  349. package/dist/esm/lib/inputTypes.js +0 -55
  350. package/dist/esm/lib/utils.d.ts +0 -10
  351. package/dist/esm/lib/utils.d.ts.map +0 -1
  352. package/dist/esm/lib/utils.js +0 -35
  353. package/dist/esm/models/Columns.d.ts +0 -12
  354. package/dist/esm/models/Columns.d.ts.map +0 -1
  355. package/dist/esm/models/Columns.js +0 -1
  356. package/dist/esm/models/Filter.d.ts +0 -118
  357. package/dist/esm/models/Filter.d.ts.map +0 -1
  358. package/dist/esm/models/Filter.js +0 -98
  359. package/dist/esm/models/Pagination.d.ts +0 -10
  360. package/dist/esm/models/Pagination.d.ts.map +0 -1
  361. package/dist/esm/models/Pagination.js +0 -1
  362. package/dist/esm/models/Pivots.d.ts +0 -2
  363. package/dist/esm/models/Pivots.d.ts.map +0 -1
  364. package/dist/esm/models/Pivots.js +0 -1
  365. package/dist/esm/models/Report.d.ts +0 -103
  366. package/dist/esm/models/Report.d.ts.map +0 -1
  367. package/dist/esm/models/Report.js +0 -1
  368. package/dist/esm/models/Tables.d.ts +0 -8
  369. package/dist/esm/models/Tables.d.ts.map +0 -1
  370. package/dist/esm/models/Tables.js +0 -1
  371. package/dist/esm/utils/aggregate.d.ts +0 -4
  372. package/dist/esm/utils/aggregate.d.ts.map +0 -1
  373. package/dist/esm/utils/aggregate.js +0 -422
  374. package/dist/esm/utils/astFilterProcessing.d.ts +0 -36
  375. package/dist/esm/utils/astFilterProcessing.d.ts.map +0 -1
  376. package/dist/esm/utils/astFilterProcessing.js +0 -8084
  377. package/dist/esm/utils/astProcessing.d.ts +0 -26
  378. package/dist/esm/utils/astProcessing.d.ts.map +0 -1
  379. package/dist/esm/utils/astProcessing.js +0 -254
  380. package/dist/esm/utils/axisFormatter.d.ts +0 -20
  381. package/dist/esm/utils/axisFormatter.d.ts.map +0 -1
  382. package/dist/esm/utils/axisFormatter.js +0 -179
  383. package/dist/esm/utils/color.d.ts +0 -44
  384. package/dist/esm/utils/color.d.ts.map +0 -1
  385. package/dist/esm/utils/color.js +0 -425
  386. package/dist/esm/utils/columnProcessing.d.ts +0 -13
  387. package/dist/esm/utils/columnProcessing.d.ts.map +0 -1
  388. package/dist/esm/utils/columnProcessing.js +0 -260
  389. package/dist/esm/utils/constants.d.ts +0 -2
  390. package/dist/esm/utils/constants.d.ts.map +0 -1
  391. package/dist/esm/utils/constants.js +0 -1
  392. package/dist/esm/utils/crypto.d.ts +0 -2
  393. package/dist/esm/utils/crypto.d.ts.map +0 -1
  394. package/dist/esm/utils/crypto.js +0 -10
  395. package/dist/esm/utils/csv.d.ts +0 -6
  396. package/dist/esm/utils/csv.d.ts.map +0 -1
  397. package/dist/esm/utils/csv.js +0 -78
  398. package/dist/esm/utils/dashboard.d.ts +0 -13
  399. package/dist/esm/utils/dashboard.d.ts.map +0 -1
  400. package/dist/esm/utils/dashboard.js +0 -171
  401. package/dist/esm/utils/dataFetcher.d.ts +0 -3
  402. package/dist/esm/utils/dataFetcher.d.ts.map +0 -1
  403. package/dist/esm/utils/dataFetcher.js +0 -199
  404. package/dist/esm/utils/dataProcessing.d.ts +0 -10
  405. package/dist/esm/utils/dataProcessing.d.ts.map +0 -1
  406. package/dist/esm/utils/dataProcessing.js +0 -144
  407. package/dist/esm/utils/dates.d.ts +0 -20
  408. package/dist/esm/utils/dates.d.ts.map +0 -1
  409. package/dist/esm/utils/dates.js +0 -95
  410. package/dist/esm/utils/error.d.ts +0 -5
  411. package/dist/esm/utils/error.d.ts.map +0 -1
  412. package/dist/esm/utils/error.js +0 -8
  413. package/dist/esm/utils/errorProcessing.d.ts +0 -2
  414. package/dist/esm/utils/errorProcessing.d.ts.map +0 -1
  415. package/dist/esm/utils/errorProcessing.js +0 -5
  416. package/dist/esm/utils/filterConstants.d.ts +0 -34
  417. package/dist/esm/utils/filterConstants.d.ts.map +0 -1
  418. package/dist/esm/utils/filterConstants.js +0 -33
  419. package/dist/esm/utils/filterProcessing.d.ts +0 -10
  420. package/dist/esm/utils/filterProcessing.d.ts.map +0 -1
  421. package/dist/esm/utils/filterProcessing.js +0 -232
  422. package/dist/esm/utils/getDomain.d.ts +0 -8
  423. package/dist/esm/utils/getDomain.d.ts.map +0 -1
  424. package/dist/esm/utils/getDomain.js +0 -52
  425. package/dist/esm/utils/logging.d.ts +0 -2
  426. package/dist/esm/utils/logging.d.ts.map +0 -1
  427. package/dist/esm/utils/logging.js +0 -7
  428. package/dist/esm/utils/merge.d.ts +0 -2
  429. package/dist/esm/utils/merge.d.ts.map +0 -1
  430. package/dist/esm/utils/merge.js +0 -18
  431. package/dist/esm/utils/monacoConfig.d.ts +0 -21
  432. package/dist/esm/utils/monacoConfig.d.ts.map +0 -1
  433. package/dist/esm/utils/monacoConfig.js +0 -319
  434. package/dist/esm/utils/paginationProcessing.d.ts +0 -5
  435. package/dist/esm/utils/paginationProcessing.d.ts.map +0 -1
  436. package/dist/esm/utils/paginationProcessing.js +0 -25
  437. package/dist/esm/utils/parserBigQuery.d.ts +0 -6
  438. package/dist/esm/utils/parserBigQuery.d.ts.map +0 -1
  439. package/dist/esm/utils/parserBigQuery.js +0 -52
  440. package/dist/esm/utils/parserPostgres.d.ts +0 -3
  441. package/dist/esm/utils/parserPostgres.d.ts.map +0 -1
  442. package/dist/esm/utils/parserPostgres.js +0 -37
  443. package/dist/esm/utils/pivotConstructor.d.ts +0 -7
  444. package/dist/esm/utils/pivotConstructor.d.ts.map +0 -1
  445. package/dist/esm/utils/pivotConstructor.js +0 -151
  446. package/dist/esm/utils/pivotProcessing.d.ts +0 -17
  447. package/dist/esm/utils/pivotProcessing.d.ts.map +0 -1
  448. package/dist/esm/utils/pivotProcessing.js +0 -132
  449. package/dist/esm/utils/queryConstructor.d.ts +0 -7
  450. package/dist/esm/utils/queryConstructor.d.ts.map +0 -1
  451. package/dist/esm/utils/queryConstructor.js +0 -223
  452. package/dist/esm/utils/report.d.ts +0 -10
  453. package/dist/esm/utils/report.d.ts.map +0 -1
  454. package/dist/esm/utils/report.js +0 -174
  455. package/dist/esm/utils/schema.d.ts +0 -6
  456. package/dist/esm/utils/schema.d.ts.map +0 -1
  457. package/dist/esm/utils/schema.js +0 -153
  458. package/dist/esm/utils/styles.d.ts +0 -17
  459. package/dist/esm/utils/styles.d.ts.map +0 -1
  460. package/dist/esm/utils/styles.js +0 -16
  461. package/dist/esm/utils/tableProcessing.d.ts +0 -45
  462. package/dist/esm/utils/tableProcessing.d.ts.map +0 -1
  463. package/dist/esm/utils/tableProcessing.js +0 -293
  464. package/dist/esm/utils/textProcessing.d.ts +0 -6
  465. package/dist/esm/utils/textProcessing.d.ts.map +0 -1
  466. package/dist/esm/utils/textProcessing.js +0 -49
  467. package/dist/esm/utils/validation.d.ts +0 -9
  468. package/dist/esm/utils/validation.d.ts.map +0 -1
  469. package/dist/esm/utils/validation.js +0 -20
  470. package/dist/esm/utils/valueFormatter.d.ts +0 -29
  471. package/dist/esm/utils/valueFormatter.d.ts.map +0 -1
  472. package/dist/esm/utils/valueFormatter.js +0 -342
  473. package/dist/esm/utils/width.d.ts +0 -12
  474. package/dist/esm/utils/width.d.ts.map +0 -1
  475. package/dist/esm/utils/width.js +0 -21
@@ -1,1312 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { useEffect, useRef, useState, useContext, useMemo, } from 'react';
3
- import { ClientContext, DashboardContext, DashboardDataContext, DashboardFiltersContext, SchemaContext, ThemeContext, } from './Context';
4
- import { getData, getDataFromCloud } from './utils/dataFetcher';
5
- import { PivotModal, generatePivotTable, isDateField, } from './internals/ReportBuilder/PivotModal';
6
- import { PivotCard } from './internals/ReportBuilder/PivotList';
7
- import { ChartDisplay } from './Chart';
8
- import { MemoizedModal, QuillTextInput, MemoizedButton, MemoizedSecondaryButton, MemoizedHeader, MemoizedLabel, MemoizedDeleteButton, MemoizedText, MemoizedPopover, QuillTableComponent, QuillChartBuilderInputRowContainer, QuillChartBuilderInputColumnContainer, MemoizedSubHeader, QuillErrorMessageComponent, QuillPivotRowContainer, QuillPivotColumnContainer, QuillChartBuilderFormContainer, QuillLoadingComponent, } from './components/UiComponents';
9
- import { mergeComparisonRange } from './utils/merge';
10
- import { removeDoubleQuotes, snakeAndCamelCaseToTitleCase, } from './utils/textProcessing';
11
- import { QuillSelectComponent } from './components/QuillSelect';
12
- import { QuillCard } from './components/QuillCard';
13
- import { quillFormat } from './utils/valueFormatter';
14
- import { convertColumnInfoToColumnInternal, convertFieldTypeToJSType, } from './utils/columnProcessing';
15
- import { createTableNameToTableAliasMap, getColumnsByTableFromASTAndSchema, getSelectFromAST, } from './utils/astProcessing';
16
- import { getSchemaInfoWithCustomFields } from './utils/schema';
17
- import { getDateBucketFromRange } from './utils/dates';
18
- import { validateReport } from './utils/validation';
19
- import { QuillChartErrorWithAction } from './components/Chart/ChartError';
20
- import { convertInternalReportToReport } from './utils/report';
21
- const CHART_TYPES = ['column', 'line', 'table', 'metric', 'bar', 'pie'];
22
- const POSTGRES_DATE_TYPES = [
23
- 'timestamp',
24
- 'date',
25
- 'timestamptz',
26
- 'time',
27
- 'timetz',
28
- ];
29
- const CHART_TO_LABELS = {
30
- column: { xAxisLabel: 'X-Axis', yAxisLabel: 'Y-Axis' },
31
- line: { xAxisLabel: 'X-Axis', yAxisLabel: 'Y-Axis' },
32
- table: {},
33
- metric: { xAxisLabel: 'Value' },
34
- bar: { xAxisLabel: 'X-Axis', yAxisLabel: 'Y-Axis' },
35
- pie: { xAxisLabel: 'Category', yAxisLabel: 'Count' },
36
- };
37
- function getPivotMetricOptions(pivot) {
38
- if (!pivot.rowField) {
39
- return [
40
- {
41
- label: `Pivot Value (${pivot.valueField})`,
42
- value: pivot.valueField,
43
- },
44
- ];
45
- }
46
- else {
47
- return [
48
- {
49
- label: `Pivot Row (${pivot.rowField})`,
50
- value: pivot.rowField,
51
- },
52
- ];
53
- }
54
- }
55
- export function createInitialFormData(columns) {
56
- const firstNumberColumn = columns?.find((col) => numberFormatOptions.includes(col.format));
57
- const formEmptyState = {
58
- name: 'My Chart',
59
- columns: columns.map((col) => {
60
- return { ...col, label: snakeAndCamelCaseToTitleCase(col.label) };
61
- }),
62
- xAxisField: columns?.[0]?.field || '',
63
- xAxisFormat: columns?.[0]?.format || 'whole_number',
64
- yAxisFields: [
65
- {
66
- field: firstNumberColumn?.field || columns?.[0]?.field || '',
67
- label: '',
68
- format: firstNumberColumn?.format || columns?.[0]?.format || 'string',
69
- },
70
- ],
71
- xAxisLabel: '',
72
- chartType: firstNumberColumn ? 'line' : 'table',
73
- pivot: null,
74
- dateField: { table: '', field: '' },
75
- template: false,
76
- };
77
- return formEmptyState;
78
- }
79
- function getChartTypeOptions(formData, dashboard) {
80
- let viableCharts = CHART_TYPES;
81
- if (dashboard.dateFilter && dashboard.dateFilter.comparison) {
82
- viableCharts = viableCharts.filter((chart) => !['table', 'metric', 'bar', 'pie'].includes(chart));
83
- }
84
- if (formData.pivot && !formData.pivot.rowField) {
85
- return viableCharts
86
- .filter((elem) => elem === 'metric' || elem === 'table')
87
- .map((elem) => ({
88
- label: elem,
89
- value: elem,
90
- }));
91
- }
92
- else {
93
- return viableCharts
94
- .filter((elem) => !((formData.pivot && elem === 'metric') ||
95
- (formData.pivot &&
96
- formData.pivot.columnField &&
97
- (elem === 'bar' || elem === 'pie'))))
98
- .map((elem) => ({ label: elem, value: elem }));
99
- }
100
- }
101
- function getTablesHelper(ast, allTables) {
102
- const tableAliasMap = createTableNameToTableAliasMap(ast);
103
- const tablesInQuery = Object.values(tableAliasMap);
104
- // Remove all aliased tables (with statements and subqueries)
105
- const onlyReferenceTables = allTables
106
- .filter((table) => tablesInQuery.includes(table.displayName))
107
- .map((table) => table.displayName);
108
- let referencedColumns = {};
109
- // Get non with statement column references
110
- referencedColumns = getColumnsByTableFromASTAndSchema(ast, allTables, tableAliasMap);
111
- // With statement column references
112
- if (ast.with) {
113
- for (const withStmt of ast.with) {
114
- const astFrom = withStmt.stmt.from ?? withStmt.stmt.ast.from;
115
- if (astFrom) {
116
- const withReferencedColumns = getColumnsByTableFromASTAndSchema(withStmt.stmt.ast ?? withStmt.stmt, allTables, tableAliasMap);
117
- // @ts-ignore
118
- Object.keys(withReferencedColumns).forEach((tableName) => {
119
- if (referencedColumns[tableName]) {
120
- // @ts-ignore
121
- referencedColumns[tableName].push(...(withReferencedColumns[tableName] || []));
122
- }
123
- else {
124
- // @ts-ignore
125
- referencedColumns[tableName] = withReferencedColumns[tableName];
126
- }
127
- });
128
- }
129
- }
130
- }
131
- // Make all the column strings unique
132
- for (const table in referencedColumns) {
133
- referencedColumns[table] = Array.from(new Set(referencedColumns[table]));
134
- }
135
- const referencedTablesAndColumns = Object.keys(referencedColumns).map((tableName) => {
136
- return {
137
- name: tableName,
138
- columns: referencedColumns[tableName]?.map((column) => {
139
- return { field: column };
140
- }) || [],
141
- };
142
- });
143
- const dateFields = allTables
144
- .filter((table) => onlyReferenceTables.includes(table.displayName))
145
- .map((table) => {
146
- return {
147
- name: table.displayName,
148
- columns: table.columns
149
- .filter((column) => POSTGRES_DATE_TYPES.includes(column.fieldType))
150
- .map((col) => {
151
- return convertColumnInfoToColumnInternal(col);
152
- }),
153
- };
154
- });
155
- return { referencedTablesAndColumns, dateFields };
156
- }
157
- async function getReferencedTables(client, sqlQuery, dbTables) {
158
- const resp = await getDataFromCloud(client, `astify`, {
159
- query: sqlQuery,
160
- useNewNodeSql: true,
161
- });
162
- if (resp.success === false) {
163
- return getTablesHelper(getSelectFromAST({}), dbTables);
164
- }
165
- return getTablesHelper(getSelectFromAST(resp.ast), dbTables);
166
- }
167
- function createReportFromForm(formData, report, selectedPivotTable, rows = []) {
168
- return convertInternalReportToReport({
169
- ...formData,
170
- dashboardName: formData.dashboardName || '',
171
- pivot: formData.pivot,
172
- id: '',
173
- order: -1,
174
- compareRows: report?.compareRows || [],
175
- filtersApplied: report?.filtersApplied || [],
176
- queryString: '',
177
- rows: selectedPivotTable?.rows ?? rows,
178
- rowCount: report?.rowCount || selectedPivotTable?.rows?.length || rows.length || 0,
179
- yAxisFields: formData.yAxisFields ?? [],
180
- pivotColumns: selectedPivotTable?.columns ?? undefined,
181
- pivotRows: selectedPivotTable?.rows ?? undefined,
182
- });
183
- }
184
- export const numberFormatOptions = [
185
- 'whole_number',
186
- 'one_decimal_place',
187
- 'two_decimal_places',
188
- 'dollar_amount',
189
- 'dollar_cents',
190
- ];
191
- export const dateFormatOptions = [
192
- 'MMM_yyyy',
193
- 'MMM_dd',
194
- 'MMM_dd_yyyy',
195
- 'MMM_dd_hh:mm_ap_pm',
196
- 'hh_ap_pm',
197
- 'date',
198
- ];
199
- const NUMBER_OPTIONS = [
200
- { value: 'whole_number', label: 'whole number' },
201
- { value: 'one_decimal_place', label: 'one decimal place' },
202
- { value: 'two_decimal_places', label: 'two decimal places' },
203
- { value: 'dollar_amount', label: 'dollar amount' },
204
- { value: 'dollar_cents', label: 'dollar and cent amount' },
205
- ];
206
- const DATE_OPTIONS = [
207
- { value: 'MMM_yyyy', label: 'month' },
208
- { value: 'MMM_dd', label: 'day' },
209
- { value: 'MMM_dd_yyyy', label: 'day and year' },
210
- { value: 'MMM_dd_hh:mm_ap_pm', label: 'day and time' },
211
- { value: 'hh_ap_pm', label: 'hour' },
212
- ];
213
- const formatOptions = [
214
- ...NUMBER_OPTIONS,
215
- ...DATE_OPTIONS,
216
- { value: 'percent', label: 'percent' },
217
- { value: 'string', label: 'string' },
218
- ];
219
- /**
220
- * ### Quill Chart Builder with Modal
221
- *
222
- * Renders a ChartBuilder component with a modal.
223
- *
224
- * @example
225
- * ```js
226
- * // Usage without custom components
227
- * <ChartBuilder />
228
- * ```
229
- *
230
- * @example
231
- * ```js
232
- * // You can also pass your own components
233
- * <ChartBuilder
234
- * ButtonComponent={MyButton}
235
- * SecondaryButtonComponent={MySecondaryButton}
236
- * />
237
- * ```
238
- *
239
- * ### Chart Builder API
240
- * @see https://docs.quillsql.com/components/chart-builder#with-modal
241
- */
242
- export function ChartBuilderWithModal(props) {
243
- const parentRef = useRef(null);
244
- const [modalWidth, setModalWidth] = useState(200);
245
- const [modalHeight, setModalHeight] = useState(200);
246
- const { isOpen, setIsOpen, title, isHorizontalView } = props;
247
- const Modal = props.ModalComponent ?? MemoizedModal;
248
- useEffect(() => {
249
- function handleResize() {
250
- const screenSize = window.innerWidth;
251
- if (screenSize >= 1200) {
252
- setModalWidth(window.innerWidth - 80);
253
- }
254
- else {
255
- setModalWidth(undefined); // use dynamic width of contents
256
- }
257
- setModalHeight(window.innerHeight - 80);
258
- }
259
- handleResize();
260
- window.addEventListener('resize', handleResize);
261
- return () => {
262
- window.removeEventListener('resize', handleResize);
263
- };
264
- }, []);
265
- return (_jsx("div", { style: { height: '100%' }, ref: parentRef, children: _jsx(Modal, { isOpen: isOpen, setIsOpen: setIsOpen, title: title || 'Add to dashboard',
266
- // For isHorizontalView, use full viewport size minus 80px for padding,
267
- // otherwise use the default layout method of the modal (contents).
268
- width: isHorizontalView ? modalWidth : undefined, height: isHorizontalView ? modalHeight : undefined, children: _jsx(ChartBuilder, { ...props }) }) }));
269
- }
270
- /**
271
- * ### Quill Chart Builder
272
- *
273
- * A simple form that lets users turn a SQL query into a chart, metric, or table
274
- * and then add that dashboard item into one of their dashboards.
275
- *
276
- * @example
277
- * ```js
278
- * // Usage without custom components
279
- * <ChartBuilder />
280
- * ```
281
- *
282
- * @example
283
- * ```js
284
- * // You can also pass your own components
285
- * <ChartBuilder
286
- * ButtonComponent={MyButton}
287
- * SecondaryButtonComponent={MySecondaryButton}
288
- * />
289
- * ```
290
- *
291
- * ### Chart Builder API
292
- * @see https://docs.quillsql.com/components/chart-builder
293
- */
294
- export default function ChartBuilder({ TextInputComponent = QuillTextInput, SelectComponent = QuillSelectComponent, ButtonComponent = MemoizedButton, SecondaryButtonComponent = MemoizedSecondaryButton, HeaderComponent = MemoizedHeader, SubHeaderComponent = MemoizedSubHeader, LabelComponent = MemoizedLabel, DeleteButtonComponent = MemoizedDeleteButton, TextComponent = MemoizedText, PopoverComponent = MemoizedPopover, CardComponent = QuillCard, TableComponent = QuillTableComponent, ModalComponent = MemoizedModal, LoadingComponent = QuillLoadingComponent, ErrorMessageComponent = QuillErrorMessageComponent, ChartBuilderInputRowContainer = QuillChartBuilderInputRowContainer, ChartBuilderInputColumnContainer = QuillChartBuilderInputColumnContainer, PivotRowContainer = QuillPivotRowContainer, PivotColumnContainer = QuillPivotColumnContainer, FormContainer = QuillChartBuilderFormContainer, ErrorComponent = QuillChartErrorWithAction, onClickChartError, isOpen, isHorizontalView = true, pivot, setIsOpen, rows, columns, query, queryNoDateColumn, dateRange: dr, showTableFormatOptions = false, showDateFieldOptions = false, showAccessControlOptions = false, showDashboardDropdown = true, onAddToDashboardComplete, onDelete, report = undefined, recommendedPivots: rp = [], createdPivots: cp = [], destinationDashboard, dateColumn, buttonLabel, organizationName, pivotData, hideDeleteButton = false, hideSubmitButton = false, hideDateRangeFilter = false, initialUniqueValues, pivotRecommendationsEnabled = true, onSortChange, onPageChange, rowCount, isLoading, isComparison, onClickChartElement, }) {
295
- const dateRange = dr;
296
- const [client] = useContext(ClientContext);
297
- const [theme] = useContext(ThemeContext);
298
- const [schema, setSchema] = useContext(SchemaContext);
299
- const [windowWidth, setWindowWidth] = useState(1200);
300
- const [isSubmitting, setIsSubmitting] = useState(false);
301
- const [pivotCardWidth, setPivotCardWidth] = useState(665);
302
- const [chartTypes, setChartTypes] = useState(CHART_TYPES.map((type) => {
303
- return { label: type, value: type };
304
- }));
305
- const [formWidth, setFormWidth] = useState(665);
306
- const inputRef = useRef(null);
307
- const selectRef = useRef(null);
308
- const [, dispatch] = useContext(DashboardContext);
309
- const [processedColumns, setProcessedColumns] = useState(columns);
310
- const parentRef = useRef(null);
311
- const deleteRef = useRef(null);
312
- const modalPadding = 20;
313
- const deleteButtonMargin = -12;
314
- const validationHelper = (formData, dashboard, dateField, tables) => {
315
- const issues = validateReport(formData, dashboard, dateField || defaultDateField, tables || allTables);
316
- if (issues.length > 0) {
317
- setFilterIssues(issues);
318
- }
319
- else {
320
- setFilterIssues([]);
321
- }
322
- };
323
- useEffect(() => {
324
- if (schema) {
325
- const newProcessedColumns = columns.map((col) => {
326
- if (col.jsType) {
327
- return col;
328
- }
329
- const newCol = { ...col };
330
- let foundColumn;
331
- schema.forEach((table) => {
332
- if (table.columns) {
333
- const matchedColumn = table.columns.find((c) => c.name === col.field);
334
- if (matchedColumn) {
335
- foundColumn = matchedColumn;
336
- }
337
- }
338
- });
339
- if (!foundColumn) {
340
- return col;
341
- }
342
- newCol.fieldType = foundColumn.fieldType;
343
- newCol.jsType = convertFieldTypeToJSType(foundColumn.fieldType);
344
- return newCol;
345
- });
346
- setProcessedColumns(newProcessedColumns);
347
- }
348
- }, [schema]);
349
- useEffect(() => {
350
- const handleResize = () => setWindowWidth(window.innerWidth);
351
- handleResize();
352
- window.addEventListener('resize', handleResize);
353
- return () => {
354
- window.removeEventListener('resize', handleResize);
355
- };
356
- }, []);
357
- useEffect(() => {
358
- const handleResize = () => {
359
- // The pivot card should be the same width as the row of inputs
360
- // above it (an input, two selects, plus the gaps between them).
361
- if (inputRef.current && selectRef.current) {
362
- const inputSize = inputRef.current?.getBoundingClientRect();
363
- const selectSize = selectRef.current?.getBoundingClientRect();
364
- const selectWidth = selectSize.width;
365
- const showDash = showDashboardDropdown && !destinationDashboard;
366
- const spaceBetween = selectSize.left - inputSize.right;
367
- const gap = showDash ? (spaceBetween - selectWidth) / 2 : spaceBetween;
368
- const width = inputSize.width + 2 * gap + 2 * selectWidth;
369
- setPivotCardWidth(width);
370
- // Calculate the form width by adding the width of the delete button
371
- const deleteSize = deleteRef.current?.getBoundingClientRect();
372
- const deleteWidth = deleteSize?.width ?? 0;
373
- setFormWidth(width + deleteWidth);
374
- }
375
- };
376
- handleResize();
377
- }, [isOpen]);
378
- useEffect(() => {
379
- const handleResize = () => {
380
- // The pivot card should be the same width as the row of inputs
381
- // above it (an input, two selects, plus the gaps between them).
382
- if (inputRef.current && selectRef.current) {
383
- const inputSize = inputRef.current?.getBoundingClientRect();
384
- const selectSize = selectRef.current?.getBoundingClientRect();
385
- const selectWidth = selectSize.width;
386
- const showDash = showDashboardDropdown && !destinationDashboard;
387
- const spaceBetween = selectSize.left - inputSize.right;
388
- const gap = showDash ? (spaceBetween - selectWidth) / 2 : spaceBetween;
389
- const width = inputSize.width + 2 * gap + 2 * selectWidth;
390
- setPivotCardWidth(width);
391
- // Calculate the form width by adding the width of the delete button
392
- const deleteSize = deleteRef.current?.getBoundingClientRect();
393
- const deleteWidth = deleteSize?.width ?? 0;
394
- setFormWidth(width + deleteWidth);
395
- }
396
- };
397
- handleResize();
398
- window.addEventListener('resize', handleResize);
399
- return () => {
400
- window.removeEventListener('resize', handleResize);
401
- };
402
- }, []);
403
- // get dashboards
404
- const [dashboardOptions, setDashboardOptions] = useState([]);
405
- const [defaultDashboardName, setDefaultDashboardName] = useState(destinationDashboard || report?.dashboardName || '');
406
- const { dashboardFilters } = useContext(DashboardFiltersContext);
407
- const { dashboardData } = useContext(DashboardDataContext);
408
- const specificDashboardFilter = useMemo(() => {
409
- return dashboardFilters.filter((f) => f && defaultDashboardName === f.dashboardName);
410
- }, [dashboardFilters]);
411
- const [showFilterModal, setShowFilterModal] = useState(false);
412
- const [filterIssues, setFilterIssues] = useState([]);
413
- const [showPivotPopover, setShowPivotPopover] = useState(false);
414
- const [isEdittingPivot, setIsEdittingPivot] = useState(false);
415
- const [selectedPivotIndex, setSelectedPivotIndex] = useState(-1);
416
- const [tableName, setTableName] = useState(undefined);
417
- const selectedTable = schema?.find((t) => t.displayName === tableName);
418
- const [pivotPopUpTitle, setPivotPopUpTitle] = useState('Add pivot');
419
- const [loadingFormData, setLoadingFormData] = useState(false);
420
- const [triggeredEditChart, setTriggeredEditChart] = useState(false);
421
- const [createdPivots, setCreatedPivots] = useState(pivot ? [pivot] : report?.pivot ? [report.pivot] : cp);
422
- const [recommendedPivots, setRecommendedPivots] = useState(rp);
423
- const [pivotRowField, setPivotRowField] = useState(pivot?.rowField);
424
- const [pivotColumnField, setPivotColumnField] = useState(pivot?.columnField);
425
- const [pivotValueField, setPivotValueField] = useState(pivot?.valueField);
426
- const [pivotAggregation, setPivotAggregation] = useState(pivot?.aggregationType);
427
- // initial state is the fields array passed in, but can eventually be changed to be the pivot fields
428
- const [dateFieldOptions, setDateFieldOptions] = useState([]);
429
- const [allTables, setAllTables] = useState([]);
430
- const [customFieldTableRef, setCustomFieldTableRef] = useState(false);
431
- const [referencedColumns, setReferencedColumns] = useState({});
432
- const [defaultDateField, setDefaultDateField] = useState({
433
- table: dateFieldOptions[0]?.name || '',
434
- field: dateFieldOptions[0]?.columns[0]?.name || '',
435
- });
436
- const firstNumberColumn = columns?.find((col) => numberFormatOptions.includes(col.format));
437
- const formEmptyState = {
438
- name: 'My Chart',
439
- dashboardName: dashboardOptions[0]?.label || '',
440
- columns: columns.map((col) => {
441
- return { ...col, label: snakeAndCamelCaseToTitleCase(col.label) };
442
- }),
443
- xAxisField: columns?.[0]?.field || '',
444
- xAxisFormat: columns?.[0]?.format || 'string',
445
- yAxisFields: [
446
- {
447
- field: firstNumberColumn?.field || columns?.[0]?.field || '',
448
- label: '',
449
- format: firstNumberColumn?.format || columns?.[0]?.format || 'string',
450
- },
451
- ],
452
- xAxisLabel: '',
453
- chartType: firstNumberColumn ? 'line' : 'table',
454
- pivot: null,
455
- dateField: defaultDateField,
456
- template: false,
457
- };
458
- const updateDashboardFilters = async (dashboardName) => {
459
- if (dashboardData && dashboardData[dashboardName]) {
460
- return dashboardData[dashboardName];
461
- }
462
- const { queryEndpoint, queryHeaders, publicKey, customerId } = client;
463
- if (queryEndpoint) {
464
- const response = await fetch(queryEndpoint, {
465
- method: 'POST',
466
- headers: {
467
- ...queryHeaders,
468
- 'Content-Type': 'application/json',
469
- },
470
- body: JSON.stringify({
471
- metadata: {
472
- orgId: customerId || '*',
473
- task: 'config',
474
- name: dashboardName,
475
- clientId: publicKey,
476
- databaseType: client.databaseType,
477
- useNewNodeSql: true,
478
- },
479
- }),
480
- credentials: 'omit', // If withCredentials is true, set to 'include'. Otherwise, set to 'omit'.
481
- });
482
- const responseData = (await response.json()).data;
483
- if (responseData) {
484
- return responseData;
485
- }
486
- }
487
- };
488
- const pivotFormData = (pivot) => {
489
- const yAxisField = pivot.columnField || pivot.valueField;
490
- const yAxisLabel = report?.yAxisFields && report?.yAxisFields?.length > 0
491
- ? // @ts-ignore
492
- report.yAxisFields[0].label
493
- : pivot.valueField;
494
- // date labels for pivots should be treated like strings since they are
495
- const yAxisIsDate = pivot.columnField
496
- ? isDateField(pivot.columnFieldType || '')
497
- : false;
498
- const chartType = report?.chartType ?? (pivot.rowField ? 'column' : 'metric');
499
- return {
500
- pivot,
501
- chartType: chartType,
502
- xAxisField: pivot.rowField ? pivot.rowField : pivot.valueField,
503
- xAxisFormat: isDateField(pivot.rowFieldType)
504
- ? 'string'
505
- : columns.find((col) => col.field === pivot.rowField)?.format ||
506
- report?.xAxisFormat ||
507
- 'whole_number',
508
- xAxisLabel: report?.xAxisLabel || pivot.rowField,
509
- yAxisFields: [
510
- {
511
- field: yAxisField,
512
- label: yAxisLabel,
513
- format: yAxisIsDate
514
- ? 'string'
515
- : report?.yAxisFields && report?.yAxisFields?.length > 0
516
- ? // @ts-ignore
517
- report?.yAxisFields[0].format
518
- : columns.find((col) => col.field === pivot.valueField)?.format ||
519
- 'whole_number',
520
- },
521
- ],
522
- };
523
- };
524
- const formFormDataFromReport = (report) => {
525
- let pivotData = {};
526
- let dateField = defaultDateField;
527
- if (pivot) {
528
- pivotData = pivotFormData(pivot);
529
- }
530
- if (report) {
531
- dateField = report.dateField || defaultDateField;
532
- }
533
- return {
534
- ...formEmptyState,
535
- ...report,
536
- ...pivotData,
537
- ...(destinationDashboard && { dashboardName: destinationDashboard }),
538
- dateField: dateField,
539
- };
540
- };
541
- const [formData, setFormData] = useState(formFormDataFromReport(report));
542
- useEffect(() => {
543
- if (!loadingFormData && triggeredEditChart) {
544
- editChart();
545
- }
546
- }, [loadingFormData]);
547
- useEffect(() => {
548
- async function getFormData() {
549
- setLoadingFormData(true);
550
- const curFormData = formData;
551
- let dashNames = Object.keys(dashboardData).map((dashboard) => {
552
- return dashboard;
553
- }) ?? [];
554
- if (dashNames.length === 0) {
555
- const resp = await getDataFromCloud(client, `dashnames/${client.publicKey}/`, null, 'GET');
556
- dashNames = resp.dashboardNames;
557
- }
558
- let dashboardOptions = dashNames
559
- .filter((elem) => elem !== null)
560
- .map((key) => ({ label: key, value: key }));
561
- if (!dashboardOptions.length) {
562
- dashboardOptions = [
563
- { label: 'New - Dashboard', value: 'New - Dashboard' },
564
- ];
565
- }
566
- if (destinationDashboard) {
567
- dashboardOptions = [
568
- { label: destinationDashboard, value: destinationDashboard },
569
- ];
570
- }
571
- let dashboardName = report?.dashboardName
572
- ? report.dashboardName
573
- : dashboardOptions[0]?.label || '';
574
- if (destinationDashboard) {
575
- dashboardName = destinationDashboard;
576
- }
577
- const curDashboard = await updateDashboardFilters(dashboardName);
578
- setDashboardOptions(dashboardOptions);
579
- curFormData.dashboardName = dashboardName;
580
- setDefaultDashboardName(dashboardName ??
581
- (report ? report?.dashboardName : dashboardOptions[0]?.label));
582
- let curSchemaData = schema;
583
- if (!curSchemaData || curSchemaData.length === 0) {
584
- const { schemaData } = await getSchemaInfoWithCustomFields(client, 'cb');
585
- curSchemaData = schemaData;
586
- setSchema(curSchemaData);
587
- }
588
- if (!query) {
589
- setLoadingFormData(false);
590
- return;
591
- }
592
- const result = await getReferencedTables(client, query, curSchemaData);
593
- setDateFieldOptions(result.dateFields);
594
- if (result.dateFields[0] && result.dateFields[0].columns[0]) {
595
- setDefaultDateField({
596
- table: result.dateFields[0].name,
597
- field: result.dateFields[0].columns[0].field,
598
- });
599
- }
600
- // check if the referenced table is a table with custom field info.. If so block template settings
601
- const tableNames = result.referencedTablesAndColumns.map((table) => table.name);
602
- setAllTables(tableNames);
603
- let customFieldUsage = false;
604
- for (const table of tableNames) {
605
- const tableInfo = curSchemaData.find((elem) => elem.name === table);
606
- if (tableInfo?.customFieldInfo) {
607
- customFieldUsage = true;
608
- break;
609
- }
610
- }
611
- setCustomFieldTableRef(customFieldUsage && client.customerId && client.customerId !== '*');
612
- const referencedColumns = result.referencedTablesAndColumns.reduce((acc, table) => {
613
- acc[table.name] = table.columns.map((col) => col.field);
614
- return acc;
615
- }, {});
616
- setReferencedColumns(referencedColumns);
617
- setTableName(result.dateFields[0]?.name);
618
- const dateField = {
619
- table: result.dateFields[0]?.name || '',
620
- field: result.dateFields[0]?.columns?.find((elem) => elem.field === dateColumn)?.field || '',
621
- };
622
- let isTemplate = curFormData.template;
623
- if (customFieldUsage) {
624
- isTemplate = false;
625
- }
626
- curFormData.dashboardName =
627
- report && report.dashboardName
628
- ? report?.dashboardName
629
- : dashboardOptions[0]?.label;
630
- curFormData.template = isTemplate;
631
- if (!curFormData.dateField) {
632
- curFormData.dateField = { field: '', table: '' };
633
- }
634
- if (!curFormData.dateField.field || !curFormData.dateField.table) {
635
- if (dateField && dateField.field) {
636
- curFormData.dateField = dateField;
637
- }
638
- }
639
- setFormData(curFormData);
640
- validationHelper(curFormData, curDashboard, curFormData.dateField ?? dateField, tableNames);
641
- setLoadingFormData(false);
642
- }
643
- getFormData();
644
- }, []);
645
- const [selectedPivotTable, setSelectedPivotTable] = useState(pivotData || undefined);
646
- const fetchPivotData = async (pivot, uniqueValues, overrideDateRange) => {
647
- if (pivot && rows) {
648
- const dateFilter = report
649
- ? report.filtersApplied.find((filter) => {
650
- return filter.filterType === 'date_range';
651
- })
652
- : undefined;
653
- let dateBucket = undefined;
654
- if (overrideDateRange) {
655
- dateBucket = getDateBucketFromRange(overrideDateRange);
656
- }
657
- setSelectedPivotTable(await generatePivotTable(pivot, rows, overrideDateRange ?? dateRange, isComparison ?? false, -1, dateFilter ? dateFilter.comparisonRange : undefined, dateBucket, report, client, uniqueValues));
658
- }
659
- else {
660
- setSelectedPivotTable(undefined);
661
- }
662
- };
663
- const formattedRows = useMemo(() => {
664
- if (selectedPivotTable &&
665
- selectedPivotTable.columns &&
666
- formData.chartType === 'table') {
667
- const columns = selectedPivotTable.columns;
668
- columns.forEach((col, index) => {
669
- // ADD THE RIGHT FIELD TYPE FOR THE VALUE COLUMNS
670
- if ((formData.pivot?.valueFieldType ||
671
- ['min', 'max'].includes(formData.pivot?.aggregationType || '')) &&
672
- index !== 0) {
673
- col.format = formData?.pivot?.valueFieldType || 'two_decimal_places';
674
- }
675
- });
676
- return selectedPivotTable.rows.map((row) => {
677
- return columns.reduce((formattedRow, column) => {
678
- // Apply the format function to each field in the row
679
- const formattedValue = quillFormat({
680
- value: row[column.field],
681
- format: column.format,
682
- });
683
- formattedRow[column.field] = formattedValue;
684
- return formattedRow;
685
- }, {});
686
- });
687
- }
688
- else {
689
- if (!rows)
690
- return [];
691
- return rows.map((row) => {
692
- return formData.columns.reduce((formattedRow, column) => {
693
- // Apply the format function to each field in the row
694
- const formattedValue = quillFormat({
695
- value: row[column.field],
696
- format: column.format,
697
- });
698
- formattedRow[column.field] = formattedValue;
699
- return formattedRow;
700
- }, {});
701
- });
702
- }
703
- }, [
704
- selectedPivotTable,
705
- formData.columns,
706
- formData.chartType,
707
- rows,
708
- formData.pivot,
709
- ]);
710
- const handleChange = async (value, fieldName, index) => {
711
- let updatedForm = { ...formData };
712
- try {
713
- // WE NEED TO REPROCESS THE PIVOT TABLE IF THE PIVOT COLUMN CHANGES
714
- // WE NEED TO UPDATE BOTH VALUEFIELDTYPE AND COLUMN FIELD TYPES
715
- if (fieldName === 'pivotColumn') {
716
- // CAN'T EDIT THE TYPE OF THE RowField
717
- if (index === 0) {
718
- return;
719
- }
720
- const updatedPivot = {
721
- ...formData.pivot,
722
- valueFieldType: value,
723
- };
724
- // @ts-ignore
725
- updatedForm.pivot = updatedPivot;
726
- }
727
- else if (index !== undefined) {
728
- // For dynamic array fields
729
- const [field, subfield] = fieldName.split('.');
730
- // @ts-ignore
731
- const updatedArray = formData[field].map((item, i) => i === index ? { ...item, [subfield]: value } : item);
732
- updatedForm = { ...formData, [field]: updatedArray };
733
- setFormData({ ...formData, [field]: updatedArray });
734
- }
735
- else if (fieldName.includes('.')) {
736
- // For nested fields
737
- const [field, subfield] = fieldName.split('.');
738
- if (field === 'pivot' && subfield !== '') {
739
- const subfieldTypeFieldName = subfield + 'Type';
740
- if (value.length) {
741
- const subFieldType = columns.find((columns) => columns.field === value).fieldType;
742
- updatedForm = {
743
- ...updatedForm,
744
- // @ts-ignore
745
- [field]: {
746
- ...updatedForm[field],
747
- [subfield]: value,
748
- [subfieldTypeFieldName]: subFieldType,
749
- },
750
- };
751
- }
752
- else {
753
- updatedForm = {
754
- ...formData,
755
- // @ts-ignore
756
- [field]: {
757
- ...formData[field],
758
- [subfield]: '',
759
- [subfieldTypeFieldName]: '',
760
- },
761
- };
762
- }
763
- }
764
- else if (field === 'dateField' &&
765
- subfield === 'table' &&
766
- !formData.dateField.field) {
767
- const field = schema?.find((elem) => elem.name === value)
768
- ?.columns?.[0]?.name;
769
- updatedForm.dateField = {
770
- // @ts-ignore
771
- ...updatedForm[field],
772
- [subfield]: value,
773
- field: field,
774
- };
775
- }
776
- updatedForm = {
777
- ...updatedForm,
778
- // @ts-ignore
779
- [field]: { ...updatedForm[field], [subfield]: value },
780
- };
781
- }
782
- else {
783
- // For simple fields
784
- updatedForm = { ...updatedForm, [fieldName]: value };
785
- }
786
- let dashboardName = updatedForm.dashboardName;
787
- if (fieldName === 'dashboardName') {
788
- dashboardName = value;
789
- }
790
- validationHelper(updatedForm, dashboardData[dashboardName || '']);
791
- setChartTypes(getChartTypeOptions(updatedForm, dashboardData[dashboardName || '']));
792
- }
793
- catch (e) {
794
- updatedForm = { ...updatedForm, [fieldName]: value };
795
- }
796
- setFormData(updatedForm);
797
- };
798
- const handleAddPivot = async (pivot, uniqueValues, dateRange, pivotData) => {
799
- const newPivotFormData = pivotFormData(pivot);
800
- // Only keep the old chart type if the shapes of the pivots are the same
801
- // since the valid chart types for some pivots might have changed (eg. going
802
- // from a 1D pivot to a 2D pivot would make bar lists not an option).
803
- // They don't have to have the same value, just same 'truthiness'.
804
- const isPivotSameShape = Boolean(formData.pivot?.rowField) === Boolean(pivot.rowField) &&
805
- Boolean(formData.pivot?.columnField) === Boolean(pivot.columnField);
806
- const isNewChartType = formData.chartType !== newPivotFormData.chartType;
807
- const keepOldChartType = isNewChartType && isPivotSameShape;
808
- if (pivotData) {
809
- setSelectedPivotTable({
810
- rows: pivotData.rows,
811
- columns: pivotData.columns,
812
- });
813
- }
814
- else {
815
- await fetchPivotData(pivot, uniqueValues, dateRange);
816
- }
817
- setFormData((formData) => ({
818
- ...formData,
819
- ...newPivotFormData,
820
- ...(keepOldChartType && { chartType: formData.chartType }),
821
- }));
822
- };
823
- const handleDeletePivot = () => {
824
- if (!formData.pivot) {
825
- return;
826
- }
827
- setFormData({
828
- ...formEmptyState,
829
- dashboardName: formData.dashboardName,
830
- pivot: null,
831
- });
832
- setSelectedPivotTable(undefined);
833
- };
834
- const handleAddField = (fieldName) => {
835
- if (fieldName === 'columns') {
836
- setFormData({
837
- ...formData,
838
- // @ts-ignore
839
- columns: [...formData.columns, { label: '', field: '', format: '' }],
840
- });
841
- }
842
- else if (fieldName === 'yAxisFields') {
843
- setFormData({
844
- ...formData,
845
- yAxisFields: [
846
- ...formData.yAxisFields,
847
- // @ts-ignore
848
- { label: '', field: '', chartType: '', format: '' },
849
- ],
850
- });
851
- }
852
- else if (fieldName === 'pivot') {
853
- setFormData({
854
- ...formData,
855
- pivot: {
856
- title: '',
857
- rowField: '',
858
- rowFieldType: '',
859
- columnField: '',
860
- columnFieldType: '',
861
- valueField: '',
862
- aggregationType: 'sum',
863
- },
864
- });
865
- }
866
- };
867
- const handleRemoveField = (fieldName, index) => {
868
- if (fieldName === 'pivot') {
869
- setFormData({
870
- ...formData,
871
- pivot: null,
872
- });
873
- return;
874
- }
875
- // @ts-ignore
876
- const updatedArray = formData[fieldName].filter((_, i) => i !== index);
877
- setFormData({ ...formData, [fieldName]: updatedArray });
878
- };
879
- const handleSubmit = (event) => {
880
- event.preventDefault();
881
- };
882
- const deleteChart = async () => {
883
- if (!report?.id || !client) {
884
- return;
885
- }
886
- const { publicKey, customerId } = client;
887
- const cloudBody = {
888
- dashboardItemId: report.id,
889
- };
890
- const searchParams = new URLSearchParams(customerId
891
- ? {
892
- clientId: publicKey,
893
- customerId: customerId,
894
- }
895
- : { clientId: publicKey }).toString();
896
- const resp = await getDataFromCloud(client, `deletedash/${publicKey}/${customerId}/?${searchParams}`, cloudBody);
897
- if (resp) {
898
- if (onDelete) {
899
- onDelete();
900
- }
901
- }
902
- setIsOpen(false);
903
- setIsSubmitting(false);
904
- };
905
- const editChart = async () => {
906
- if (isSubmitting) {
907
- setTriggeredEditChart(false);
908
- return;
909
- }
910
- setIsSubmitting(true);
911
- const { publicKey, customerId, databaseType } = client;
912
- if (!client) {
913
- setTriggeredEditChart(false);
914
- return;
915
- }
916
- // If the dashbaordItem is a template but the editor isn't an admin, create a new dashboardItem and set the template to false
917
- let dashboardItemId = report ? report.id : undefined;
918
- if (report && !showAccessControlOptions && formData.template) {
919
- dashboardItemId = undefined;
920
- }
921
- const cloudBody = {
922
- ...formData,
923
- ...(formData.dateField?.table
924
- ? {}
925
- : { dateField: { ...defaultDateField } }),
926
- ...(formData.dashboardName
927
- ? {}
928
- : { dashboardName: defaultDashboardName }),
929
- dashboardItemId,
930
- query: queryNoDateColumn || query,
931
- queryString: queryNoDateColumn || query,
932
- pivot: formData.pivot,
933
- referencedTables: allTables,
934
- referencedColumns,
935
- template: report && !showAccessControlOptions && formData.template
936
- ? false
937
- : formData.template,
938
- customerId: customerId || '*',
939
- useNewNodeSql: true,
940
- };
941
- // @ts-ignore
942
- if (cloudBody['rows']) {
943
- // @ts-ignore
944
- delete cloudBody['rows'];
945
- // @ts-ignore
946
- delete cloudBody['compareRows'];
947
- }
948
- // add orgId: customerId if present for hostedBody
949
- // set defaultDateField if date field not present
950
- const hostedBody = {
951
- metadata: {
952
- task: 'create',
953
- clientId: publicKey,
954
- databaseType: databaseType,
955
- ...cloudBody,
956
- orgId: customerId || '*',
957
- useNewNodeSql: true,
958
- },
959
- };
960
- const searchParams = new URLSearchParams(customerId
961
- ? {
962
- clientId: publicKey,
963
- customerId: customerId,
964
- }
965
- : { clientId: publicKey }).toString();
966
- const resp = await getData(client, `dashedit2?${searchParams}`, 'same-origin', hostedBody, cloudBody);
967
- if (resp && resp.name !== 'error') {
968
- if (resp.compareRows) {
969
- mergeComparisonRange(resp);
970
- }
971
- dispatch({
972
- type: 'UPDATE_DASHBOARD_ITEM',
973
- id: resp._id,
974
- data: {
975
- ...resp,
976
- rows,
977
- columns,
978
- pivotRows: selectedPivotTable?.rows || undefined,
979
- pivotColumns: selectedPivotTable?.columns || undefined,
980
- filtersApplied: specificDashboardFilter,
981
- triggerReload: true,
982
- },
983
- });
984
- }
985
- setIsOpen(false);
986
- setIsSubmitting(false);
987
- setTriggeredEditChart(false);
988
- if (onAddToDashboardComplete) {
989
- onAddToDashboardComplete({
990
- ...resp,
991
- rows,
992
- columns,
993
- filtersApplied: specificDashboardFilter,
994
- });
995
- }
996
- };
997
- // Prevent horizontal view on small screens.
998
- isHorizontalView = windowWidth < 1200 ? false : isHorizontalView;
999
- if (!schema) {
1000
- return null;
1001
- }
1002
- return (_jsxs("div", { style: {
1003
- width: '100%',
1004
- height: '100%',
1005
- display: 'flex',
1006
- flexDirection: 'column',
1007
- flexGrow: 1,
1008
- }, children: [_jsxs("div", { id: "quill-chart-modal", style: {
1009
- width: '100%',
1010
- height: '100%',
1011
- maxWidth: '100%',
1012
- display: 'flex',
1013
- padding: modalPadding,
1014
- gap: '20px',
1015
- flexDirection: isHorizontalView ? 'row' : 'column',
1016
- boxSizing: 'border-box',
1017
- }, children: [_jsxs("div", { style: {
1018
- display: 'flex',
1019
- flexDirection: 'column',
1020
- gap: '20px',
1021
- height: isHorizontalView || !isOpen ? '100%' : 800,
1022
- ...(isHorizontalView && {
1023
- flexGrow: 1,
1024
- maxWidth: !isOpen ? '100%' : `calc(100% - ${formWidth}px - 20px)`, // width of left sidebar plus gap
1025
- }),
1026
- ...(!isHorizontalView && isOpen && { width: formWidth }),
1027
- }, children: [report?.adminError || report?.error ? (_jsx(ErrorComponent, { label: report.adminError || report.error, onClick: onClickChartError })) : (((!isHorizontalView && windowWidth >= 1200) ||
1028
- formData.chartType !== 'table') && (_jsx(ChartDisplay, { reportId: report ? report.id : undefined, config: createReportFromForm(formData, report, selectedPivotTable, rows), colors: theme.chartColors, loading: isLoading ? true : false, hideDateRangeFilter: hideDateRangeFilter, containerStyle: {
1029
- width: '100%',
1030
- height: formData.chartType === 'metric'
1031
- ? 100
1032
- : isHorizontalView || !isOpen
1033
- ? showTableFormatOptions
1034
- ? 'calc(50% - 10px)'
1035
- : 'calc(100% - 10px)'
1036
- : 400,
1037
- ...(isHorizontalView && { flexGrow: 1 }),
1038
- }, onClickChartElement: onClickChartElement }))),
1039
- // Make sure to display non-pivoted table when using pivot chart
1040
- showTableFormatOptions &&
1041
- (isHorizontalView || (!isOpen && windowWidth < 1200)) && (_jsx("div", { style: {
1042
- width: '100%',
1043
- height: isHorizontalView || !isOpen ? 'calc(50% - 10px)' : 400,
1044
- flexGrow: 1,
1045
- }, children: formData.chartType !== 'table' ? (_jsx(TableComponent, { rows: formattedRows, columns: formData.columns, onPageChange: (page) => {
1046
- onPageChange && onPageChange(page);
1047
- }, onSortChange: (sort) => {
1048
- onSortChange && onSortChange(sort);
1049
- }, rowCount: rowCount, isLoading: isLoading })) : (_jsx(TableComponent, { rows: formattedRows, columns: selectedPivotTable
1050
- ? selectedPivotTable.columns
1051
- : formData.columns, onPageChange: (page) => {
1052
- onPageChange && onPageChange(page);
1053
- }, onSortChange: (sort) => {
1054
- onSortChange && onSortChange(sort);
1055
- }, rowCount: rowCount, isLoading: isLoading })) }))] }), isOpen && (_jsxs("form", { ref: parentRef, id: "quill-chart-form", onSubmit: handleSubmit, style: {
1056
- display: 'flex',
1057
- flexDirection: 'column',
1058
- gap: 20,
1059
- ...(isHorizontalView && {
1060
- height: '100%',
1061
- minWidth: formWidth,
1062
- maxWidth: formWidth,
1063
- width: formWidth,
1064
- }),
1065
- ...(windowWidth < 1200 && {
1066
- width: formWidth,
1067
- paddingTop: modalPadding,
1068
- paddingBottom: modalPadding,
1069
- }),
1070
- }, children: [_jsxs(FormContainer, { children: [_jsxs(ChartBuilderInputRowContainer, { children: [_jsx("div", { ref: inputRef, style: { display: 'flex', flexDirection: 'column' }, children: _jsx(TextInputComponent, { id: "chart-builder-name", label: "Name", width: 200, value: formData.name, onChange: (e) => handleChange(e.target.value, 'name'), placeholder: "Name" }) }), showDashboardDropdown && !destinationDashboard && (_jsx("div", { style: { display: 'flex', flexDirection: 'column' }, children: _jsx(SelectComponent, { label: "Dashboard", value: formData.dashboardName || '', onChange: async (e) => {
1071
- handleChange(e.target.value, 'dashboardName');
1072
- await updateDashboardFilters(e.target.value);
1073
- }, options: dashboardOptions.map((elem) => ({
1074
- label: elem.label,
1075
- value: elem.label,
1076
- })), width: 200 }) })), _jsx("div", { ref: selectRef, style: { display: 'flex', flexDirection: 'column' }, children: _jsx(SelectComponent, { label: "Chart type", value: formData.chartType, onChange: (e) => handleChange(e.target.value, 'chartType'),
1077
- // filter out metric for all pivots
1078
- // filter out bar and pie for row and column pivot
1079
- options: chartTypes, width: 200 }) })] }), _jsxs("div", { style: {
1080
- display: 'flex',
1081
- flexDirection: 'column',
1082
- gap: 6,
1083
- }, children: [_jsx(HeaderComponent, { label: "Pivot" }), _jsxs("div", { style: { fontFamily: theme?.fontFamily }, children: [_jsx("div", { style: {
1084
- maxWidth: 200,
1085
- // marginTop: 6,
1086
- display: 'flex',
1087
- flexDirection: 'column',
1088
- }, children: _jsx(PivotModal, { pivotRowField: pivotRowField, setPivotRowField: setPivotRowField, pivotColumnField: pivotColumnField, setPivotColumnField: setPivotColumnField, pivotValueField: pivotValueField, setPivotValueField: setPivotValueField, pivotAggregation: pivotAggregation, setPivotAggregation: setPivotAggregation, createdPivots: createdPivots, setCreatedPivots: setCreatedPivots, recommendedPivots: recommendedPivots, setRecommendedPivots: setRecommendedPivots, popUpTitle: pivotPopUpTitle, setPopUpTitle: setPivotPopUpTitle, selectedTable: selectedTable, SelectComponent: SelectComponent, ButtonComponent: ButtonComponent, CardComponent: CardComponent, SecondaryButtonComponent: SecondaryButtonComponent, PopoverComponent: PopoverComponent, LabelComponent: LabelComponent, TextComponent: TextComponent, HeaderComponent: HeaderComponent, ErrorMessageComponent: ErrorMessageComponent, PivotRowContainer: PivotRowContainer, PivotColumnContainer: PivotColumnContainer, LoadingComponent: LoadingComponent, theme: theme, isOpen: showPivotPopover, setIsOpen: setShowPivotPopover, showUpdatePivot: isEdittingPivot, setShowUpdatePivot: setIsEdittingPivot, parentRef: parentRef, data: rows, columns: processedColumns, triggerButtonText: 'Add pivot +', selectedPivotIndex: selectedPivotIndex, setSelectedPivotIndex: setSelectedPivotIndex, removePivot: handleDeletePivot, selectPivot: handleAddPivot, dateRange: dateRange, selectPivotOnEdit: true, showTrigger: !formData.pivot, query: query, pivotCountRequest: 4, initialUniqueValues: initialUniqueValues, initialSelectedPivotTable: selectedPivotTable, pivotRecommendationsEnabled: pivotRecommendationsEnabled, report: report }) }), formData.pivot && selectedPivotTable && (_jsx("div", { children: _jsx("div", { style: { width: pivotCardWidth }, children: _jsx(PivotCard, { pivotTable: {
1089
- pivot: formData.pivot,
1090
- rows: selectedPivotTable?.rows,
1091
- columns: selectedPivotTable?.columns,
1092
- }, theme: theme, index: 0, onSelectPivot: () => {
1093
- setIsEdittingPivot(true);
1094
- setShowPivotPopover(true);
1095
- setPivotRowField(formData.pivot?.rowField);
1096
- setPivotColumnField(formData.pivot?.columnField);
1097
- setPivotValueField(formData.pivot?.valueField);
1098
- setPivotAggregation(formData.pivot?.aggregationType);
1099
- setPivotPopUpTitle('Edit pivot');
1100
- }, selectedPivotIndex: -1, onEditPivot: () => { }, CardComponent: CardComponent, ButtonComponent: ButtonComponent, HeaderComponent: HeaderComponent, showEdit: false, onClose: handleDeletePivot, minHeight: 180, LabelComponent: LabelComponent, TextComponent: TextComponent }) }) }))] })] }), (formData.pivot || formData.chartType !== 'table') && (_jsxs("div", { children: [CHART_TO_LABELS[formData.chartType]?.xAxisLabel && (_jsx("div", { style: {
1101
- display: 'flex',
1102
- flexDirection: 'column',
1103
- }, children: _jsx(HeaderComponent, { label: "Chart" }) })), CHART_TO_LABELS[formData.chartType]?.xAxisLabel && (_jsxs("div", { children: [_jsx(SubHeaderComponent, { label: CHART_TO_LABELS[formData.chartType]?.xAxisLabel ?? '' }), _jsxs(ChartBuilderInputRowContainer, { children: [_jsx(SelectComponent, { value: formData.xAxisField, onChange: (e) => handleChange(e.target.value, 'xAxisField'), options: formData.pivot
1104
- ? getPivotMetricOptions(formData.pivot)
1105
- : columns.map((elem) => ({
1106
- label: elem.field,
1107
- value: elem.field,
1108
- })), width: 200 }), _jsx(TextInputComponent, { id: "chart-builder-x-axis-label", width: 200, value: formData.xAxisLabel, placeholder: "Column Label", onChange: (e) => handleChange(e.target.value, 'xAxisLabel') }), _jsx(SelectComponent, { value: formData.pivot &&
1109
- isDateField(formData.pivot.rowFieldType)
1110
- ? 'pivot_date'
1111
- : formData.xAxisFormat, onChange: (e) => handleChange(e.target.value, 'xAxisFormat'), options: formData.pivot &&
1112
- isDateField(formData.pivot.rowFieldType)
1113
- ? [{ value: 'pivot_date', label: 'date' }]
1114
- : formatOptions, width: 200 })] })] })), CHART_TO_LABELS[formData.chartType]?.yAxisLabel && (_jsxs("div", { children: [_jsx(SubHeaderComponent, { label: CHART_TO_LABELS[formData.chartType]?.yAxisLabel ?? '' }), _jsxs(ChartBuilderInputColumnContainer, { children: [formData.yAxisFields
1115
- .filter((yAxisField) => {
1116
- return !yAxisField.field.startsWith('comparison_');
1117
- })
1118
- .map((yAxisField, index) => (_jsxs(ChartBuilderInputRowContainer, { children: [_jsx(SelectComponent, { value: formData.pivot
1119
- ? formData.pivot.valueField || 'count'
1120
- : yAxisField.field, onChange: (e) => handleChange(e.target.value, 'yAxisFields.field', index), options: formData.pivot
1121
- ? [
1122
- {
1123
- label: `Pivot Column (${formData.pivot.valueField || 'count'})`,
1124
- value: formData.pivot.valueField ||
1125
- 'count',
1126
- },
1127
- ]
1128
- : columns
1129
- .filter((elem) => {
1130
- return numberFormatOptions.includes(columns.find((col) => col.field === elem.field)?.format || '');
1131
- })
1132
- .map((elem) => ({
1133
- label: elem.field,
1134
- value: elem.field,
1135
- })), width: 200 }), _jsx(TextInputComponent, { id: "chart-builder-y-axis-label", width: 200, value: yAxisField.label, placeholder: "Column Label", onChange: (e) => handleChange(e.target.value, 'yAxisFields.label', index) }), _jsx(SelectComponent, { value: formData.pivot
1136
- ? NUMBER_OPTIONS.find((option) => {
1137
- return (option.value === yAxisField.format);
1138
- })
1139
- ? // @ts-ignore
1140
- NUMBER_OPTIONS.find((option) => option.value === yAxisField.format).value
1141
- : ''
1142
- : yAxisField.format, onChange: (e) => handleChange(e.target.value, 'yAxisFields.format', index), options: formData.pivot
1143
- ? NUMBER_OPTIONS
1144
- : formatOptions, width: 200 }), formData.pivot === null && (_jsx("div", { ref: deleteRef, style: { marginLeft: deleteButtonMargin }, children: _jsx(DeleteButtonComponent, { onClick: () => handleRemoveField('yAxisFields', index) }) }))] }, 'yAxisField' + index))), formData.pivot === null && (_jsx("div", { children: _jsx(SecondaryButtonComponent, { onClick: () => handleAddField('yAxisFields'), label: "Add field +" }) }))] })] }))] })), showTableFormatOptions && windowWidth < 1200 && (_jsx("div", { style: {
1145
- width: '100%',
1146
- height: isHorizontalView || !isOpen ? 'calc(50% - 10px)' : 400,
1147
- flexGrow: 1,
1148
- }, children: formData.chartType !== 'table' ? (_jsx(TableComponent, { rows: formattedRows, columns: formData.columns, onPageChange: (page) => {
1149
- onPageChange && onPageChange(page);
1150
- }, onSortChange: (sort) => {
1151
- onSortChange && onSortChange(sort);
1152
- }, rowCount: rowCount, isLoading: isLoading })) : (_jsx(TableComponent, { rows: formattedRows, columns: selectedPivotTable
1153
- ? selectedPivotTable.columns
1154
- : formData.columns, onPageChange: (page) => {
1155
- onPageChange && onPageChange(page);
1156
- }, onSortChange: (sort) => {
1157
- onSortChange && onSortChange(sort);
1158
- }, rowCount: rowCount, isLoading: isLoading })) })), showTableFormatOptions && (_jsxs("div", { children: [_jsxs("div", { style: {
1159
- display: 'flex',
1160
- flexDirection: 'column',
1161
- }, children: [_jsx(HeaderComponent, { label: "Table" }), _jsx(SubHeaderComponent, { label: "Columns" })] }), _jsxs(ChartBuilderInputColumnContainer, { children: [formData.pivot &&
1162
- selectedPivotTable &&
1163
- selectedPivotTable.columns &&
1164
- formData.chartType === 'table'
1165
- ? // THIS CASE IF FOR PIVOT TABLES ONLY
1166
- selectedPivotTable.columns.map((column, index) => (_jsxs(ChartBuilderInputRowContainer, { children: [_jsx(SelectComponent, { value: column.label, onChange: (e) => handleChange(e.target.value, 'columns.field', index), options: selectedPivotTable.columns.map((elem) => ({
1167
- label: elem.label,
1168
- value: elem.label,
1169
- })), width: 200 }), _jsx(TextInputComponent, { id: `chart-builder-column-label-${index}`, width: 200, value: column.label, placeholder: "Column Label", onChange: (e) => handleChange(e.target.value, 'columns.label', index) }), _jsx(SelectComponent, { value:
1170
- // The first index use rowField for the rest of them use value fields
1171
- formData.pivot &&
1172
- column.field === formData.pivot.rowField
1173
- ? formData.pivot &&
1174
- isDateField(formData.pivot.rowFieldType)
1175
- ? 'pivot_date'
1176
- : 'string'
1177
- : formData.pivot?.valueFieldType ||
1178
- 'two_decimal_places', onChange: (e) => handleChange(e.target.value, 'pivotColumn', index), options: formData.pivot && index === 0
1179
- ? isDateField(formData.pivot.rowFieldType)
1180
- ? [{ label: 'date', value: 'pivot_date' }]
1181
- : [{ label: 'string', value: 'string' }]
1182
- : [...NUMBER_OPTIONS], width: 200 })] }, 'column' + index)))
1183
- : formData.columns.map((column, index) => (_jsxs(ChartBuilderInputRowContainer, { children: [_jsx(SelectComponent, { value: column.field, onChange: (e) => handleChange(e.target.value, 'columns.field', index), options: columns.map((elem) => ({
1184
- label: elem.field,
1185
- value: elem.field,
1186
- })), width: 200 }), _jsx(TextInputComponent, { id: `chart-builder-column-label-${index}`, width: 200, value: column.label, placeholder: "Column Label", onChange: (e) => handleChange(e.target.value, 'columns.label', index) }), _jsx(SelectComponent, { value: column.format, onChange: (e) => handleChange(e.target.value, 'columns.format', index), options: formatOptions, width: 200 }), _jsx("div", { ref: deleteRef, style: { marginLeft: deleteButtonMargin }, children: _jsx(DeleteButtonComponent, { onClick: () => handleRemoveField('columns', index) }) })] }, 'column' + index))), _jsx("div", { children: !(
1187
- // hide when pivoted and chartType === 'table'
1188
- (formData.pivot &&
1189
- selectedPivotTable &&
1190
- selectedPivotTable.columns &&
1191
- formData.chartType === 'table')) && (_jsx(SecondaryButtonComponent, { onClick: () => handleAddField('columns'), label: "Add column +" })) })] })] })), showDateFieldOptions && formData.dateField && (_jsxs("div", { style: {
1192
- display: 'flex',
1193
- flexDirection: 'column',
1194
- gap: 6,
1195
- }, children: [_jsx(HeaderComponent, { label: "Date field" }), _jsxs(ChartBuilderInputRowContainer, { children: [_jsx("div", { style: { display: 'flex', flexDirection: 'column' }, children: _jsx(SelectComponent, { label: "Table", value: formData.dateField?.table, onChange: (e) => handleChange(e.target.value, 'dateField.table'), options: dateFieldOptions.map((elem) => ({
1196
- label: elem.name,
1197
- value: elem.name,
1198
- })), width: 200 }) }), _jsx("div", { style: { display: 'flex', flexDirection: 'column' }, children: _jsx(SelectComponent, { label: "Field", value: removeDoubleQuotes(formData.dateField?.field), onChange: (e) => handleChange(e.target.value, 'dateField.field'), options: dateFieldOptions
1199
- ?.find((elem) => elem.name === formData.dateField?.table)
1200
- ?.columns?.map((elem) => ({
1201
- label: elem.field,
1202
- value: elem.field,
1203
- })) || [], width: 200 }) })] })] })), showAccessControlOptions && (_jsxs("div", { style: {
1204
- display: 'flex',
1205
- flexDirection: 'column',
1206
- gap: 12,
1207
- }, children: [_jsx(HeaderComponent, { label: "Organization access" }), _jsx(SegmentedControl, { onChange: (e) => handleChange(e, 'template'), value: formData.template || !organizationName, theme: theme, organizationName: organizationName, customFieldTableRef: customFieldTableRef })] }))] }), _jsxs("div", { style: {
1208
- display: 'flex',
1209
- flexDirection: 'row',
1210
- justifyContent: 'flex-end',
1211
- marginTop: 'auto',
1212
- gap: 10,
1213
- }, children: [!hideDeleteButton && !isHorizontalView && report && (_jsx(SecondaryButtonComponent, { onClick: deleteChart, label: 'Delete' })), !hideSubmitButton && (_jsxs("div", { style: {
1214
- display: 'flex',
1215
- flexDirection: 'row',
1216
- width: '100%',
1217
- justifyContent: 'space-between',
1218
- alignItems: 'center',
1219
- gap: 6,
1220
- }, children: [filterIssues.length === 0 ? (_jsx("div", {})) : (_jsx(ErrorMessageComponent, { errorMessage: filterIssues[0] || 'Dashbord - Report issues', containerStyle: { height: '100%' } })), _jsx(ButtonComponent, { onClick: () => {
1221
- if (loadingFormData) {
1222
- setTriggeredEditChart(true);
1223
- }
1224
- else {
1225
- editChart();
1226
- }
1227
- }, disabled: filterIssues.length !== 0, label: buttonLabel
1228
- ? buttonLabel
1229
- : report
1230
- ? 'Save changes'
1231
- : 'Add to dashboard' })] }))] })] }))] }), _jsx(DashboardFilterModal, { isOpen: showFilterModal, setIsOpen: setShowFilterModal, issues: filterIssues, ButtonComponent: ButtonComponent, ModalComponent: ModalComponent })] }));
1232
- }
1233
- function SegmentedControl({ onChange, value, theme, organizationName, customFieldTableRef, }) {
1234
- return (_jsxs("div", { style: {
1235
- display: 'flex',
1236
- flexDirection: 'row',
1237
- alignItems: 'center',
1238
- background: '#F5F5F6',
1239
- maxWidth: organizationName ? 418 : 209,
1240
- padding: 4,
1241
- borderRadius: 6,
1242
- }, children: [!customFieldTableRef && (_jsxs("button", { className: "quill-tab", onClick: () => onChange(true), style: {
1243
- border: value === true ? '1px solid #E7E7E7' : '1px solid transparent',
1244
- outline: 'none',
1245
- width: '100%',
1246
- borderRadius: 4,
1247
- padding: 10,
1248
- boxShadow: value === true
1249
- ? '0px 1px 4px 0px rgba(56, 65, 81, 0.08)'
1250
- : undefined,
1251
- color: value === true ? 'rgba(56, 65, 81, 1)' : 'rgba(56, 65, 81, 0.85)',
1252
- fontWeight: value === true ? 600 : 500,
1253
- fontSize: 14,
1254
- fontFamily: theme?.fontFamily,
1255
- }, children: [_jsx("style", { children: `
1256
- .quill-tab {
1257
- background-color: ${value === true ? 'white' : 'transparent'};
1258
- }
1259
- .quill-tab:hover {
1260
- background-color: ${value === false ? 'rgba(56, 65, 81, 0.05)' : undefined};
1261
- }
1262
- .quill-tab:active {
1263
- background-color: "rgba(56, 65, 81, 0.15)";
1264
- }
1265
- ` }), 'All Organizations'] })), organizationName && (_jsxs("button", { className: "quill-tab2", onClick: () => onChange(false), style: {
1266
- border: value === false ? '1px solid #E7E7E7' : '1px solid transparent',
1267
- boxShadow: value === false
1268
- ? '0px 1px 4px 0px rgba(56, 65, 81, 0.08)'
1269
- : undefined,
1270
- outline: 'none',
1271
- width: '100%',
1272
- borderRadius: 4,
1273
- color: value === false
1274
- ? 'rgba(56, 65, 81, 1)'
1275
- : 'rgba(56, 65, 81, 0.85)',
1276
- padding: 10,
1277
- fontWeight: value === false ? 600 : 500,
1278
- fontSize: 14,
1279
- fontFamily: theme?.fontFamily,
1280
- }, children: [_jsx("style", { children: `
1281
- .quill-tab2 {
1282
- background-color: ${value === false ? 'white' : 'transparent'};
1283
- }
1284
- .quill-tab2:hover {
1285
- background-color: ${value === true ? 'rgba(56, 65, 81, 0.05)' : undefined};
1286
- }
1287
- .quill-tab2:focused {
1288
- background-color: blue;
1289
- }
1290
- .quill-tab2:active {
1291
- background-color: "rgba(56, 65, 81, 0.15)";
1292
- }
1293
- ` }), organizationName] }))] }));
1294
- }
1295
- export function DashboardFilterModal({ isOpen, setIsOpen, issues, ModalComponent = MemoizedModal, ButtonComponent = MemoizedButton, }) {
1296
- if (!isOpen)
1297
- return null;
1298
- return (_jsx(ModalComponent, { isOpen: isOpen, setIsOpen: setIsOpen, title: 'Chart not compatible with selected dashboard', width: 600, children: _jsxs("div", { style: {
1299
- display: 'flex',
1300
- flexDirection: 'column',
1301
- width: '600px',
1302
- padding: '20px',
1303
- boxSizing: 'border-box',
1304
- overflow: 'scroll',
1305
- maxHeight: 600,
1306
- }, children: [issues.map((issue) => (_jsx("span", { style: { paddingTop: '10px' }, children: issue }, issue))), _jsx("div", { style: {
1307
- display: 'flex',
1308
- flexDirection: 'row',
1309
- justifyContent: 'flex-end',
1310
- paddingTop: '14px',
1311
- }, children: _jsx(ButtonComponent, { label: "Got It", onClick: () => setIsOpen(false) }) })] }) }));
1312
- }