@quillsql/react 2.13.40 → 2.13.41

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 (253) hide show
  1. package/dist/cjs/Chart.d.ts +5 -1
  2. package/dist/cjs/Chart.d.ts.map +1 -1
  3. package/dist/cjs/Chart.js +51 -28
  4. package/dist/cjs/ChartBuilder.d.ts +13 -1
  5. package/dist/cjs/ChartBuilder.d.ts.map +1 -1
  6. package/dist/cjs/ChartBuilder.js +342 -138
  7. package/dist/cjs/ChartEditor.d.ts.map +1 -1
  8. package/dist/cjs/ChartEditor.js +11 -1
  9. package/dist/cjs/Context.d.ts +16 -4
  10. package/dist/cjs/Context.d.ts.map +1 -1
  11. package/dist/cjs/Context.js +57 -38
  12. package/dist/cjs/Dashboard.d.ts +6 -3
  13. package/dist/cjs/Dashboard.d.ts.map +1 -1
  14. package/dist/cjs/Dashboard.js +70 -28
  15. package/dist/cjs/QuillProvider.d.ts +4 -8
  16. package/dist/cjs/QuillProvider.d.ts.map +1 -1
  17. package/dist/cjs/ReportBuilder.d.ts +1 -1
  18. package/dist/cjs/ReportBuilder.d.ts.map +1 -1
  19. package/dist/cjs/ReportBuilder.js +117 -45
  20. package/dist/cjs/SQLEditor.d.ts +7 -1
  21. package/dist/cjs/SQLEditor.d.ts.map +1 -1
  22. package/dist/cjs/SQLEditor.js +53 -9
  23. package/dist/cjs/Table.d.ts +21 -1
  24. package/dist/cjs/Table.d.ts.map +1 -1
  25. package/dist/cjs/Table.js +30 -192
  26. package/dist/cjs/components/Chart/BarChart.d.ts +5 -1
  27. package/dist/cjs/components/Chart/BarChart.d.ts.map +1 -1
  28. package/dist/cjs/components/Chart/BarChart.js +4 -3
  29. package/dist/cjs/components/Chart/CustomReferenceLine.d.ts +2 -0
  30. package/dist/cjs/components/Chart/CustomReferenceLine.d.ts.map +1 -0
  31. package/dist/cjs/components/Chart/CustomReferenceLine.js +26 -0
  32. package/dist/cjs/components/Chart/GaugeChart.d.ts +11 -0
  33. package/dist/cjs/components/Chart/GaugeChart.d.ts.map +1 -0
  34. package/dist/cjs/components/Chart/GaugeChart.js +198 -0
  35. package/dist/cjs/components/Chart/InternalChart.d.ts.map +1 -1
  36. package/dist/cjs/components/Chart/InternalChart.js +14 -11
  37. package/dist/cjs/components/Chart/LineChart.d.ts +5 -1
  38. package/dist/cjs/components/Chart/LineChart.d.ts.map +1 -1
  39. package/dist/cjs/components/Chart/LineChart.js +4 -3
  40. package/dist/cjs/components/Chart/MapChart.d.ts +36 -0
  41. package/dist/cjs/components/Chart/MapChart.d.ts.map +1 -0
  42. package/dist/cjs/components/Chart/MapChart.js +548 -0
  43. package/dist/cjs/components/Dashboard/DataLoader.d.ts.map +1 -1
  44. package/dist/cjs/components/Dashboard/DataLoader.js +114 -42
  45. package/dist/cjs/components/Dashboard/MetricComponent.d.ts.map +1 -1
  46. package/dist/cjs/components/Dashboard/MetricComponent.js +57 -54
  47. package/dist/cjs/components/Dashboard/TableComponent.d.ts.map +1 -1
  48. package/dist/cjs/components/Dashboard/TableComponent.js +5 -1
  49. package/dist/cjs/components/QuillMultiSelectWithCombo.d.ts.map +1 -1
  50. package/dist/cjs/components/QuillMultiSelectWithCombo.js +5 -4
  51. package/dist/cjs/components/QuillSelectWithCombo.d.ts.map +1 -1
  52. package/dist/cjs/components/QuillSelectWithCombo.js +12 -11
  53. package/dist/cjs/components/ReportBuilder/AddColumnModal.d.ts.map +1 -1
  54. package/dist/cjs/components/ReportBuilder/AddColumnModal.js +2 -1
  55. package/dist/cjs/components/ReportBuilder/FilterModal.js +13 -13
  56. package/dist/cjs/components/ReportBuilder/FilterStack.d.ts +2 -1
  57. package/dist/cjs/components/ReportBuilder/FilterStack.d.ts.map +1 -1
  58. package/dist/cjs/components/ReportBuilder/FilterStack.js +4 -4
  59. package/dist/cjs/components/ReportBuilder/convert.d.ts +2 -0
  60. package/dist/cjs/components/ReportBuilder/convert.d.ts.map +1 -1
  61. package/dist/cjs/components/ReportBuilder/convert.js +28 -7
  62. package/dist/cjs/components/ReportBuilder/util.d.ts +1 -1
  63. package/dist/cjs/components/ReportBuilder/util.d.ts.map +1 -1
  64. package/dist/cjs/components/ReportBuilder/util.js +15 -2
  65. package/dist/cjs/components/UiComponents.d.ts +4 -1
  66. package/dist/cjs/components/UiComponents.d.ts.map +1 -1
  67. package/dist/cjs/components/UiComponents.js +31 -5
  68. package/dist/cjs/hooks/useDashboard.d.ts.map +1 -1
  69. package/dist/cjs/hooks/useDashboard.js +11 -9
  70. package/dist/cjs/hooks/useExport.d.ts.map +1 -1
  71. package/dist/cjs/hooks/useExport.js +18 -4
  72. package/dist/cjs/hooks/useQuill.d.ts.map +1 -1
  73. package/dist/cjs/hooks/useQuill.js +16 -3
  74. package/dist/cjs/hooks/useReport.d.ts.map +1 -1
  75. package/dist/cjs/hooks/useReport.js +1 -7
  76. package/dist/cjs/hooks/useVirtualTables.d.ts +6 -2
  77. package/dist/cjs/hooks/useVirtualTables.d.ts.map +1 -1
  78. package/dist/cjs/hooks/useVirtualTables.js +5 -2
  79. package/dist/cjs/internals/ReportBuilder/PivotModal.d.ts.map +1 -1
  80. package/dist/cjs/internals/ReportBuilder/PivotModal.js +6 -7
  81. package/dist/cjs/models/Filter.d.ts +20 -13
  82. package/dist/cjs/models/Filter.d.ts.map +1 -1
  83. package/dist/cjs/models/Filter.js +161 -87
  84. package/dist/cjs/models/Report.d.ts +12 -1
  85. package/dist/cjs/models/Report.d.ts.map +1 -1
  86. package/dist/cjs/models/Schema.d.ts +12 -1
  87. package/dist/cjs/models/Schema.d.ts.map +1 -1
  88. package/dist/cjs/utils/astFilterProcessing.js +22 -22
  89. package/dist/cjs/utils/astProcessing.d.ts +2 -2
  90. package/dist/cjs/utils/astProcessing.d.ts.map +1 -1
  91. package/dist/cjs/utils/astProcessing.js +25 -6
  92. package/dist/cjs/utils/axisFormatter.d.ts.map +1 -1
  93. package/dist/cjs/utils/axisFormatter.js +25 -0
  94. package/dist/cjs/utils/color.d.ts +159 -0
  95. package/dist/cjs/utils/color.d.ts.map +1 -1
  96. package/dist/cjs/utils/color.js +14 -5
  97. package/dist/cjs/utils/columnProcessing.js +3 -3
  98. package/dist/cjs/utils/constants.d.ts +1 -0
  99. package/dist/cjs/utils/constants.d.ts.map +1 -1
  100. package/dist/cjs/utils/constants.js +2 -1
  101. package/dist/cjs/utils/dashboard.d.ts +13 -3
  102. package/dist/cjs/utils/dashboard.d.ts.map +1 -1
  103. package/dist/cjs/utils/dashboard.js +73 -16
  104. package/dist/cjs/utils/dataFetcher.d.ts.map +1 -1
  105. package/dist/cjs/utils/dataFetcher.js +3 -1
  106. package/dist/cjs/utils/filterProcessing.d.ts.map +1 -1
  107. package/dist/cjs/utils/filterProcessing.js +9 -9
  108. package/dist/cjs/utils/getDomain.d.ts +4 -1
  109. package/dist/cjs/utils/getDomain.d.ts.map +1 -1
  110. package/dist/cjs/utils/getDomain.js +11 -1
  111. package/dist/cjs/utils/pivotConstructor.d.ts.map +1 -1
  112. package/dist/cjs/utils/pivotConstructor.js +5 -5
  113. package/dist/cjs/utils/queryConstructor.d.ts +1 -1
  114. package/dist/cjs/utils/queryConstructor.d.ts.map +1 -1
  115. package/dist/cjs/utils/queryConstructor.js +71 -43
  116. package/dist/cjs/utils/report.d.ts +23 -5
  117. package/dist/cjs/utils/report.d.ts.map +1 -1
  118. package/dist/cjs/utils/report.js +28 -8
  119. package/dist/cjs/utils/schema.d.ts +26 -3
  120. package/dist/cjs/utils/schema.d.ts.map +1 -1
  121. package/dist/cjs/utils/schema.js +75 -43
  122. package/dist/cjs/utils/tableProcessing.d.ts +10 -3
  123. package/dist/cjs/utils/tableProcessing.d.ts.map +1 -1
  124. package/dist/cjs/utils/tableProcessing.js +4 -6
  125. package/dist/cjs/utils/textProcessing.d.ts.map +1 -1
  126. package/dist/cjs/utils/textProcessing.js +0 -1
  127. package/dist/esm/Chart.d.ts +5 -1
  128. package/dist/esm/Chart.d.ts.map +1 -1
  129. package/dist/esm/Chart.js +52 -29
  130. package/dist/esm/ChartBuilder.d.ts +13 -1
  131. package/dist/esm/ChartBuilder.d.ts.map +1 -1
  132. package/dist/esm/ChartBuilder.js +347 -143
  133. package/dist/esm/ChartEditor.d.ts.map +1 -1
  134. package/dist/esm/ChartEditor.js +11 -1
  135. package/dist/esm/Context.d.ts +16 -4
  136. package/dist/esm/Context.d.ts.map +1 -1
  137. package/dist/esm/Context.js +59 -40
  138. package/dist/esm/Dashboard.d.ts +6 -3
  139. package/dist/esm/Dashboard.d.ts.map +1 -1
  140. package/dist/esm/Dashboard.js +71 -29
  141. package/dist/esm/QuillProvider.d.ts +4 -8
  142. package/dist/esm/QuillProvider.d.ts.map +1 -1
  143. package/dist/esm/ReportBuilder.d.ts +1 -1
  144. package/dist/esm/ReportBuilder.d.ts.map +1 -1
  145. package/dist/esm/ReportBuilder.js +119 -47
  146. package/dist/esm/SQLEditor.d.ts +7 -1
  147. package/dist/esm/SQLEditor.d.ts.map +1 -1
  148. package/dist/esm/SQLEditor.js +54 -10
  149. package/dist/esm/Table.d.ts +21 -1
  150. package/dist/esm/Table.d.ts.map +1 -1
  151. package/dist/esm/Table.js +34 -196
  152. package/dist/esm/components/Chart/BarChart.d.ts +5 -1
  153. package/dist/esm/components/Chart/BarChart.d.ts.map +1 -1
  154. package/dist/esm/components/Chart/BarChart.js +5 -4
  155. package/dist/esm/components/Chart/CustomReferenceLine.d.ts +2 -0
  156. package/dist/esm/components/Chart/CustomReferenceLine.d.ts.map +1 -0
  157. package/dist/esm/components/Chart/CustomReferenceLine.js +23 -0
  158. package/dist/esm/components/Chart/GaugeChart.d.ts +11 -0
  159. package/dist/esm/components/Chart/GaugeChart.d.ts.map +1 -0
  160. package/dist/esm/components/Chart/GaugeChart.js +195 -0
  161. package/dist/esm/components/Chart/InternalChart.d.ts.map +1 -1
  162. package/dist/esm/components/Chart/InternalChart.js +14 -11
  163. package/dist/esm/components/Chart/LineChart.d.ts +5 -1
  164. package/dist/esm/components/Chart/LineChart.d.ts.map +1 -1
  165. package/dist/esm/components/Chart/LineChart.js +5 -4
  166. package/dist/esm/components/Chart/MapChart.d.ts +36 -0
  167. package/dist/esm/components/Chart/MapChart.d.ts.map +1 -0
  168. package/dist/esm/components/Chart/MapChart.js +541 -0
  169. package/dist/esm/components/Dashboard/DataLoader.d.ts.map +1 -1
  170. package/dist/esm/components/Dashboard/DataLoader.js +114 -42
  171. package/dist/esm/components/Dashboard/MetricComponent.d.ts.map +1 -1
  172. package/dist/esm/components/Dashboard/MetricComponent.js +57 -54
  173. package/dist/esm/components/Dashboard/TableComponent.d.ts.map +1 -1
  174. package/dist/esm/components/Dashboard/TableComponent.js +5 -1
  175. package/dist/esm/components/QuillMultiSelectWithCombo.d.ts.map +1 -1
  176. package/dist/esm/components/QuillMultiSelectWithCombo.js +5 -4
  177. package/dist/esm/components/QuillSelectWithCombo.d.ts.map +1 -1
  178. package/dist/esm/components/QuillSelectWithCombo.js +12 -11
  179. package/dist/esm/components/ReportBuilder/AddColumnModal.d.ts.map +1 -1
  180. package/dist/esm/components/ReportBuilder/AddColumnModal.js +2 -1
  181. package/dist/esm/components/ReportBuilder/FilterModal.js +14 -14
  182. package/dist/esm/components/ReportBuilder/FilterStack.d.ts +2 -1
  183. package/dist/esm/components/ReportBuilder/FilterStack.d.ts.map +1 -1
  184. package/dist/esm/components/ReportBuilder/FilterStack.js +4 -4
  185. package/dist/esm/components/ReportBuilder/convert.d.ts +2 -0
  186. package/dist/esm/components/ReportBuilder/convert.d.ts.map +1 -1
  187. package/dist/esm/components/ReportBuilder/convert.js +26 -7
  188. package/dist/esm/components/ReportBuilder/util.d.ts +1 -1
  189. package/dist/esm/components/ReportBuilder/util.d.ts.map +1 -1
  190. package/dist/esm/components/ReportBuilder/util.js +15 -2
  191. package/dist/esm/components/UiComponents.d.ts +4 -1
  192. package/dist/esm/components/UiComponents.d.ts.map +1 -1
  193. package/dist/esm/components/UiComponents.js +29 -4
  194. package/dist/esm/hooks/useDashboard.d.ts.map +1 -1
  195. package/dist/esm/hooks/useDashboard.js +11 -9
  196. package/dist/esm/hooks/useExport.d.ts.map +1 -1
  197. package/dist/esm/hooks/useExport.js +19 -5
  198. package/dist/esm/hooks/useQuill.d.ts.map +1 -1
  199. package/dist/esm/hooks/useQuill.js +16 -3
  200. package/dist/esm/hooks/useReport.d.ts.map +1 -1
  201. package/dist/esm/hooks/useReport.js +1 -7
  202. package/dist/esm/hooks/useVirtualTables.d.ts +6 -2
  203. package/dist/esm/hooks/useVirtualTables.d.ts.map +1 -1
  204. package/dist/esm/hooks/useVirtualTables.js +6 -3
  205. package/dist/esm/internals/ReportBuilder/PivotModal.d.ts.map +1 -1
  206. package/dist/esm/internals/ReportBuilder/PivotModal.js +6 -7
  207. package/dist/esm/models/Filter.d.ts +20 -13
  208. package/dist/esm/models/Filter.d.ts.map +1 -1
  209. package/dist/esm/models/Filter.js +160 -86
  210. package/dist/esm/models/Report.d.ts +12 -1
  211. package/dist/esm/models/Report.d.ts.map +1 -1
  212. package/dist/esm/models/Schema.d.ts +12 -1
  213. package/dist/esm/models/Schema.d.ts.map +1 -1
  214. package/dist/esm/utils/astFilterProcessing.js +23 -23
  215. package/dist/esm/utils/astProcessing.d.ts +2 -2
  216. package/dist/esm/utils/astProcessing.d.ts.map +1 -1
  217. package/dist/esm/utils/astProcessing.js +25 -6
  218. package/dist/esm/utils/axisFormatter.d.ts.map +1 -1
  219. package/dist/esm/utils/axisFormatter.js +25 -0
  220. package/dist/esm/utils/color.d.ts +159 -0
  221. package/dist/esm/utils/color.d.ts.map +1 -1
  222. package/dist/esm/utils/color.js +8 -2
  223. package/dist/esm/utils/columnProcessing.js +3 -3
  224. package/dist/esm/utils/constants.d.ts +1 -0
  225. package/dist/esm/utils/constants.d.ts.map +1 -1
  226. package/dist/esm/utils/constants.js +1 -0
  227. package/dist/esm/utils/dashboard.d.ts +13 -3
  228. package/dist/esm/utils/dashboard.d.ts.map +1 -1
  229. package/dist/esm/utils/dashboard.js +73 -16
  230. package/dist/esm/utils/dataFetcher.d.ts.map +1 -1
  231. package/dist/esm/utils/dataFetcher.js +3 -1
  232. package/dist/esm/utils/filterProcessing.d.ts.map +1 -1
  233. package/dist/esm/utils/filterProcessing.js +10 -10
  234. package/dist/esm/utils/getDomain.d.ts +4 -1
  235. package/dist/esm/utils/getDomain.d.ts.map +1 -1
  236. package/dist/esm/utils/getDomain.js +11 -1
  237. package/dist/esm/utils/pivotConstructor.d.ts.map +1 -1
  238. package/dist/esm/utils/pivotConstructor.js +5 -5
  239. package/dist/esm/utils/queryConstructor.d.ts +1 -1
  240. package/dist/esm/utils/queryConstructor.d.ts.map +1 -1
  241. package/dist/esm/utils/queryConstructor.js +71 -43
  242. package/dist/esm/utils/report.d.ts +23 -5
  243. package/dist/esm/utils/report.d.ts.map +1 -1
  244. package/dist/esm/utils/report.js +29 -9
  245. package/dist/esm/utils/schema.d.ts +26 -3
  246. package/dist/esm/utils/schema.d.ts.map +1 -1
  247. package/dist/esm/utils/schema.js +74 -43
  248. package/dist/esm/utils/tableProcessing.d.ts +10 -3
  249. package/dist/esm/utils/tableProcessing.d.ts.map +1 -1
  250. package/dist/esm/utils/tableProcessing.js +4 -6
  251. package/dist/esm/utils/textProcessing.d.ts.map +1 -1
  252. package/dist/esm/utils/textProcessing.js +0 -1
  253. package/package.json +8 -3
@@ -35,7 +35,7 @@ const dataFetcher_1 = require("./utils/dataFetcher");
35
35
  const QuillMultiSelectSectionList_1 = require("./components/QuillMultiSelectSectionList");
36
36
  const constants_1 = require("./utils/constants");
37
37
  const pivotConstructor_1 = require("./utils/pivotConstructor");
38
- const CHART_TYPES = ['column', 'line', 'table', 'metric', 'bar', 'pie'];
38
+ const CHART_TYPES = ['column', 'line', 'table', 'metric', 'gauge', 'bar', 'pie', 'US map', 'World map'];
39
39
  const CHART_TO_LABELS = {
40
40
  column: { xAxisLabel: 'X-Axis', yAxisLabel: 'Y-Axis' },
41
41
  line: { xAxisLabel: 'X-Axis', yAxisLabel: 'Y-Axis' },
@@ -43,8 +43,17 @@ const CHART_TO_LABELS = {
43
43
  metric: { xAxisLabel: 'Value' },
44
44
  bar: { xAxisLabel: 'X-Axis', yAxisLabel: 'Y-Axis' },
45
45
  pie: { xAxisLabel: 'Category', yAxisLabel: 'Count' },
46
+ 'US map': { xAxisLabel: 'State', yAxisLabel: 'Value' },
47
+ 'World map': { xAxisLabel: 'Country', yAxisLabel: 'Value' },
48
+ gauge: { xAxisLabel: 'Value' },
46
49
  };
47
- function getPivotMetricOptions(pivot) {
50
+ function getPivotMetricOptions(pivot, selectedPivotTable, chartType) {
51
+ if (['metric', 'gauge'].includes(chartType) && selectedPivotTable) {
52
+ return selectedPivotTable.columns.map((elem) => ({
53
+ label: elem.field === pivot?.rowField ? `Pivot Row (${elem.field})` : elem.field,
54
+ value: elem.field,
55
+ }));
56
+ }
48
57
  if (!pivot.rowField) {
49
58
  const valueField = (0, pivotConstructor_1.disambiguatedValueField)(pivot);
50
59
  return [
@@ -83,17 +92,18 @@ function createInitialFormData(columns) {
83
92
  chartType: firstNumberColumn ? 'line' : 'table',
84
93
  pivot: null,
85
94
  template: true,
95
+ referenceLines: [],
86
96
  };
87
97
  return formEmptyState;
88
98
  }
89
99
  function getChartTypeOptions(formData, dashboard) {
90
100
  let viableCharts = CHART_TYPES;
91
101
  if (dashboard && dashboard.dateFilter && dashboard.dateFilter.comparison) {
92
- viableCharts = viableCharts.filter((chart) => !['table', 'metric', 'bar', 'pie'].includes(chart));
102
+ viableCharts = viableCharts.filter((chart) => !['table', 'metric', 'gauge', 'bar', 'pie', 'US map', 'World map'].includes(chart));
93
103
  }
94
104
  if (formData.pivot && !formData.pivot.rowField) {
95
105
  return viableCharts
96
- .filter((elem) => elem === 'metric' || elem === 'table')
106
+ .filter((elem) => ['table', 'metric', 'gauge'].includes(elem))
97
107
  .map((elem) => ({
98
108
  label: elem,
99
109
  value: elem,
@@ -101,14 +111,13 @@ function getChartTypeOptions(formData, dashboard) {
101
111
  }
102
112
  else {
103
113
  return viableCharts
104
- .filter((elem) => !((formData.pivot && elem === 'metric') ||
105
- (formData.pivot &&
106
- formData.pivot.columnField &&
107
- (elem === 'bar' || elem === 'pie'))))
114
+ .filter((elem) => !((formData.pivot &&
115
+ formData.pivot.columnField &&
116
+ (elem === 'bar' || elem === 'pie' || elem === 'US map' || elem === 'World map'))))
108
117
  .map((elem) => ({ label: elem, value: elem }));
109
118
  }
110
119
  }
111
- function createReportFromForm(formData, report, selectedPivotTable, rows = [], filtersApplied = []) {
120
+ function createReportFromForm(formData, report, selectedPivotTable, rows = [], filtersApplied = [], referenceLineQueryResults) {
112
121
  const newReport = (0, report_1.convertInternalReportToReport)((0, merge_1.mergeComparisonRange)({
113
122
  ...formData,
114
123
  dashboardName: formData.dashboardName || '',
@@ -128,6 +137,14 @@ function createReportFromForm(formData, report, selectedPivotTable, rows = [], f
128
137
  pivotColumns: selectedPivotTable?.columns ?? undefined,
129
138
  pivotRows: selectedPivotTable?.rows ?? undefined,
130
139
  columnInternal: report?.columnInternal ?? [],
140
+ referenceLines: formData.referenceLines?.map((elem) => ({
141
+ label: elem.label,
142
+ query: elem.label === constants_1.REFERENCE_LINE ? [Number(elem.y1) || 0, Number(elem.y2) || 0] : elem.label,
143
+ })) || [],
144
+ referenceLineYValues: formData.referenceLines?.map((elem, index) => ({
145
+ label: elem.label,
146
+ query: elem.label === constants_1.REFERENCE_LINE ? [Number(elem.y1) || 0, Number(elem.y2) || 0] : referenceLineQueryResults?.[index],
147
+ })) || [],
131
148
  }), filtersApplied);
132
149
  return newReport;
133
150
  }
@@ -163,7 +180,7 @@ const DATE_OPTIONS = [
163
180
  { value: 'MMM_dd_hh:mm_ap_pm', label: 'day and time' },
164
181
  { value: 'hh_ap_pm', label: 'hour' },
165
182
  ];
166
- const formatOptions = [
183
+ const ALL_FORMAT_OPTIONS = [
167
184
  ...NUMBER_OPTIONS,
168
185
  ...DATE_OPTIONS,
169
186
  { value: 'string', label: 'string' },
@@ -246,7 +263,7 @@ function ChartBuilderWithModal(props) {
246
263
  */
247
264
  function ChartBuilder({ TextInputComponent = UiComponents_1.QuillTextInput, SelectComponent = QuillSelect_1.QuillSelectComponent,
248
265
  // MultiSelectComponent = QuillMultiSelectComponentWithCombo,
249
- ButtonComponent = UiComponents_1.MemoizedButton, SecondaryButtonComponent = UiComponents_1.MemoizedSecondaryButton, HeaderComponent = UiComponents_1.MemoizedHeader, SubHeaderComponent = UiComponents_1.MemoizedSubHeader, LabelComponent = UiComponents_1.MemoizedLabel, DeleteButtonComponent = UiComponents_1.MemoizedDeleteButton, TextComponent = UiComponents_1.MemoizedText, PopoverComponent = UiComponents_1.MemoizedPopover, CardComponent = QuillCard_1.QuillCard, TableComponent = UiComponents_1.QuillTableComponent, ModalComponent = UiComponents_1.MemoizedModal, LoadingComponent = UiComponents_1.QuillLoadingComponent, ErrorMessageComponent = UiComponents_1.QuillErrorMessageComponent, ChartBuilderInputRowContainer = UiComponents_1.QuillChartBuilderInputRowContainer, ChartBuilderInputColumnContainer = UiComponents_1.QuillChartBuilderInputColumnContainer, PivotRowContainer = UiComponents_1.QuillPivotRowContainer, PivotColumnContainer = UiComponents_1.QuillPivotColumnContainer, FormContainer = UiComponents_1.QuillChartBuilderFormContainer, ErrorComponent = ChartError_1.QuillChartErrorWithAction, onClickChartError, isOpen, isHorizontalView = true, setIsOpen, dateRange, isAdmin = false, showDashboardDropdown = true, onAddToDashboardComplete, onDelete, onDiscardChanges, reportId, tempReport, recommendedPivots: rp = [], createdPivots: cp = [], dateColumn, buttonLabel, organizationName, hideDeleteButton = false, hideSubmitButton = false, hideDateRangeFilter = false, showTableFormatOptions, initialUniqueValues, initialUniqueValuesIsLoading, pivotRecommendationsEnabled = true, filtersEnabled, onFiltersEnabledChanged,
266
+ ButtonComponent = UiComponents_1.MemoizedButton, SecondaryButtonComponent = UiComponents_1.MemoizedSecondaryButton, HeaderComponent = UiComponents_1.MemoizedHeader, SubHeaderComponent = UiComponents_1.MemoizedSubHeader, LabelComponent = UiComponents_1.MemoizedLabel, DeleteButtonComponent = UiComponents_1.MemoizedDeleteButton, TextComponent = UiComponents_1.MemoizedText, PopoverComponent = UiComponents_1.MemoizedPopover, CardComponent = QuillCard_1.QuillCard, TableComponent = UiComponents_1.QuillTableComponent, ModalComponent = UiComponents_1.MemoizedModal, LoadingComponent = UiComponents_1.QuillLoadingComponent, ErrorMessageComponent = UiComponents_1.QuillErrorMessageComponent, ChartBuilderInputRowContainer = UiComponents_1.QuillChartBuilderInputRowContainer, ChartBuilderInputColumnContainer = UiComponents_1.QuillChartBuilderInputColumnContainer, PivotRowContainer = UiComponents_1.QuillPivotRowContainer, PivotColumnContainer = UiComponents_1.QuillPivotColumnContainer, FormContainer = UiComponents_1.QuillChartBuilderFormContainer, ErrorComponent = ChartError_1.QuillChartErrorWithAction, CheckboxComponent = UiComponents_1.QuillChartBuilderCheckboxComponent, onClickChartError, isOpen, isHorizontalView = true, setIsOpen, dateRange, isAdmin = false, showDashboardDropdown = true, onAddToDashboardComplete, onDelete, onDiscardChanges, reportId, tempReport, recommendedPivots: rp = [], createdPivots: cp = [], dateColumn, buttonLabel, organizationName, hideDeleteButton = false, hideSubmitButton = false, hideDateRangeFilter = false, showTableFormatOptions, initialUniqueValues, initialUniqueValuesIsLoading, pivotRecommendationsEnabled = true, filtersEnabled, onFiltersEnabledChanged,
250
267
  // isLoading,
251
268
  onClickChartElement, isEditingMode = false, disableSort = true, }) {
252
269
  const [client] = (0, react_1.useContext)(Context_1.ClientContext);
@@ -272,14 +289,14 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
272
289
  const inputRef = (0, react_1.useRef)(null);
273
290
  const selectRef = (0, react_1.useRef)(null);
274
291
  const processColumns = (columns) => {
275
- if (schemaData.schema) {
292
+ if (schemaData.schemaWithCustomFields) {
276
293
  const newProcessedColumns = columns?.map((col) => {
277
294
  if (col.jsType) {
278
295
  return col;
279
296
  }
280
297
  const newCol = { ...col };
281
298
  let foundColumn;
282
- schemaData.schema.forEach((table) => {
299
+ schemaData.schemaWithCustomFields.forEach((table) => {
283
300
  if (table.columns) {
284
301
  const matchedColumn = table.columns.find((c) => c.field === col.field);
285
302
  if (matchedColumn) {
@@ -364,6 +381,9 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
364
381
  const [isEdittingPivot, setIsEdittingPivot] = (0, react_1.useState)(false);
365
382
  const [selectedPivotIndex, setSelectedPivotIndex] = (0, react_1.useState)(-1);
366
383
  const [tableName, setTableName] = (0, react_1.useState)(undefined);
384
+ const [includeCustomFields, setIncludeCustomFields] = (0, react_1.useState)(report
385
+ ? !!report.includeCustomFields
386
+ : !!client?.featureFlags?.customFieldsEnabled);
367
387
  const selectedTable = schemaData.schema?.find((t) => t.displayName === tableName);
368
388
  const [pivotPopUpTitle, setPivotPopUpTitle] = (0, react_1.useState)('Add pivot');
369
389
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
@@ -386,11 +406,13 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
386
406
  const [recommendedPivots, setRecommendedPivots] = (0, react_1.useState)(rp);
387
407
  const [pivotRowField, setPivotRowField] = (0, react_1.useState)(report?.pivot?.rowField);
388
408
  const [pivotColumnField, setPivotColumnField] = (0, react_1.useState)(report?.pivot?.columnField);
389
- const [pivotAggregations, setPivotAggregations] = (0, react_1.useState)(report?.pivot?.aggregations ?? [{
409
+ const [pivotAggregations, setPivotAggregations] = (0, react_1.useState)(report?.pivot?.aggregations ?? [
410
+ {
390
411
  valueField: report?.pivot?.valueField,
391
412
  valueField2: report?.pivot?.valueField2,
392
- aggregationType: report?.pivot?.aggregationType
393
- }]);
413
+ aggregationType: report?.pivot?.aggregationType,
414
+ },
415
+ ]);
394
416
  const baseProcessing = {
395
417
  page: report?.pagination ?? {
396
418
  page: 0,
@@ -405,6 +427,7 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
405
427
  const [allTables, setAllTables] = (0, react_1.useState)([]);
406
428
  const [customFieldTableRef, setCustomFieldTableRef] = (0, react_1.useState)(false);
407
429
  const [referencedColumns, setReferencedColumns] = (0, react_1.useState)({});
430
+ const [referencedColumnsWithoutStar, setReferencedColumnsWithoutStar] = (0, react_1.useState)({});
408
431
  const [filterMap, setFilterMap] = (0, react_1.useState)(report?.filterMap ?? {});
409
432
  const canonicalFilterMap = (0, react_1.useMemo)(() => {
410
433
  return Object.fromEntries(Object.entries(filterMap).filter((f) => f[1].table !== undefined && f[1].field !== undefined));
@@ -417,7 +440,7 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
417
440
  }
418
441
  acc[filter.label] =
419
442
  !!allTables.find((table) => table === (filterMap[filter.label] ?? filter).table) &&
420
- !!schemaData.schema
443
+ !!schemaData.schemaWithCustomFields
421
444
  ?.find((table) => {
422
445
  return (table.displayName === (filterMap[filter.label] ?? filter).table);
423
446
  })
@@ -461,6 +484,7 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
461
484
  pivot: null,
462
485
  dateField: defaultDateField,
463
486
  template: true,
487
+ referenceLines: [],
464
488
  };
465
489
  const updateDashboardFilters = async (dashboardName) => {
466
490
  if (dashboardConfig && dashboardConfig[dashboardName]) {
@@ -501,8 +525,8 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
501
525
  const pivotFormData = (pivot) => {
502
526
  const yAxisField = pivot.columnField ?? (0, pivotConstructor_1.disambiguatedValueField)(pivot) ?? '';
503
527
  const yAxisLabel = report?.yAxisFields && report?.yAxisFields?.length > 0
504
- ? report.yAxisFields[0]?.label ?? ''
505
- : (0, pivotConstructor_1.disambiguatedValueField)(pivot) ?? '';
528
+ ? (report.yAxisFields[0]?.label ?? '')
529
+ : ((0, pivotConstructor_1.disambiguatedValueField)(pivot) ?? '');
506
530
  // date labels for pivots should be treated like strings since they are
507
531
  const yAxisIsDate = pivot.columnField
508
532
  ? (0, PivotModal_1.isDateField)(pivot.columnFieldType ?? '')
@@ -511,12 +535,14 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
511
535
  const result = {
512
536
  pivot,
513
537
  chartType: chartType,
514
- xAxisField: pivot.rowField ? pivot.rowField : (0, pivotConstructor_1.disambiguatedValueField)(pivot),
515
- xAxisFormat: (0, PivotModal_1.isDateField)(pivot.rowFieldType ?? '')
538
+ xAxisField: pivot.rowField
539
+ ? pivot.rowField
540
+ : (0, pivotConstructor_1.disambiguatedValueField)(pivot),
541
+ xAxisFormat: (0, columnProcessing_1.isDateType)(pivot.rowFieldType ?? '')
516
542
  ? 'string'
517
- : report?.columns.find((col) => col.field === pivot.rowField)?.format ||
518
- report?.xAxisFormat ||
519
- 'whole_number',
543
+ : (0, columnProcessing_1.isNumberType)(pivot.rowFieldType ?? '')
544
+ ? 'whole_number'
545
+ : 'string',
520
546
  xAxisLabel: report?.xAxisLabel || pivot.rowField,
521
547
  yAxisFields: [
522
548
  {
@@ -525,43 +551,66 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
525
551
  format: yAxisIsDate
526
552
  ? 'string'
527
553
  : report?.yAxisFields && report?.yAxisFields?.length > 0
528
- ? report?.yAxisFields[0]?.format ?? 'whole_number'
529
- : report?.columns.find((col) => col.field === (0, pivotConstructor_1.disambiguatedValueField)(pivot))
530
- ?.format ?? 'whole_number',
554
+ ? (report?.yAxisFields[0]?.format ?? 'whole_number')
555
+ : (report?.columns.find((col) => col.field === (0, pivotConstructor_1.disambiguatedValueField)(pivot))?.format ?? 'whole_number'),
531
556
  },
532
557
  ],
533
558
  };
534
559
  return result;
535
560
  };
536
- const getReferencedTables = async (client, sqlQuery, dbTables) => {
561
+ const getReferencedTables = async (client, sqlQuery, dbTables, skipStar) => {
537
562
  const resp = await getDataFromCloud(client, `astify`, {
538
563
  query: sqlQuery,
539
564
  publicKey: client.publicKey,
540
565
  useNewNodeSql: true,
541
566
  });
542
567
  if (resp.success === false) {
543
- return (0, astProcessing_1.getTablesHelper)((0, astProcessing_1.getSelectFromAST)({}), dbTables);
568
+ return (0, astProcessing_1.getTablesHelper)((0, astProcessing_1.getSelectFromAST)({}), dbTables, skipStar);
544
569
  }
545
- return (0, astProcessing_1.getTablesHelper)((0, astProcessing_1.getSelectFromAST)(resp.ast), dbTables);
570
+ return (0, astProcessing_1.getTablesHelper)((0, astProcessing_1.getSelectFromAST)(resp.ast), dbTables, skipStar);
546
571
  };
547
572
  const formFormDataFromReport = (report) => {
548
- let pivotData = {};
573
+ // let pivotData = {};
549
574
  let dateField = defaultDateField;
550
- if (report?.pivot) {
551
- pivotData = pivotFormData(report.pivot);
552
- }
575
+ // if (report?.pivot) {
576
+ // pivotData = pivotFormData(report.pivot);
577
+ // }
553
578
  if (report) {
554
579
  dateField = report.dateField || defaultDateField;
555
580
  }
556
581
  return {
557
582
  ...formEmptyState,
558
583
  ...report,
559
- ...pivotData,
560
- ...(report?.dashboardName && { dashboardName: report?.dashboardName }),
584
+ // ...pivotData,
561
585
  dateField: dateField,
586
+ referenceLines: report?.referenceLines ? report.referenceLines?.map(({ label, query }) => {
587
+ if (typeof query === 'string') {
588
+ return { label, y1: undefined, y2: undefined };
589
+ }
590
+ return {
591
+ label,
592
+ y1: query[0],
593
+ y2: query[1],
594
+ };
595
+ }) : [],
562
596
  };
563
597
  };
564
598
  const [formData, setFormData] = (0, react_1.useState)(formFormDataFromReport(report));
599
+ const referenceLineQueryResults = (0, react_1.useMemo)(() => {
600
+ return formData?.referenceLines?.map((line) => {
601
+ if (line.label === constants_1.REFERENCE_LINE) {
602
+ return [Number(line.y1) || 0, Number(line.y2) || 0];
603
+ }
604
+ // line.label is a field
605
+ // Get the first and last row of the field
606
+ const field = formData.columns.find((col) => col.field === line.label);
607
+ if (!field) {
608
+ return [0, 0];
609
+ }
610
+ // return [Number(rows[0]?.[field.field]) || 0, Number(rows[rows.length - 1]?.[field.field]) || 0];
611
+ return (pivotData?.rows ? pivotData.rows : rows).map((row) => Number(row[field.field]) || 0);
612
+ });
613
+ }, [formData?.referenceLines]);
565
614
  const currentDashboard = (0, react_1.useMemo)(() => {
566
615
  return dashboardConfig[formData.dashboardName ?? report?.dashboardName ?? '']?.config;
567
616
  }, [dashboardConfig, formData.dashboardName, report?.dashboardName]);
@@ -569,6 +618,19 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
569
618
  return (currentDashboard?.tenantKeys?.map((tenantKey) => client?.allTenantTypes?.find((t) => t.tenantField === tenantKey)) ?? []);
570
619
  }, [client?.allTenantTypes, currentDashboard?.tenantKeys]);
571
620
  const dashboardOwner = currentDashboardTenants?.[0];
621
+ const currentTenantAsFormFlags = (0, react_1.useMemo)(() => {
622
+ if (!tenants || !tenants.length) {
623
+ return undefined;
624
+ }
625
+ const tenantField = typeof tenants[0] !== 'object'
626
+ ? dashboardOwner?.name
627
+ : tenants[0]?.tenantField;
628
+ if (!tenantField) {
629
+ return undefined;
630
+ }
631
+ const tenantIds = typeof tenants[0] !== 'object' ? tenants : tenants[0]?.tenantIds;
632
+ return { [tenantField]: tenantIds };
633
+ }, [tenants, dashboardOwner]);
572
634
  const invalidColumns = (0, react_1.useMemo)(() => {
573
635
  if (!rows || !rows.length) {
574
636
  return [];
@@ -583,6 +645,62 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
583
645
  const data = formFormDataFromReport(report);
584
646
  return getChartTypeOptions(data, dashboardConfig[data.dashboardName || '']);
585
647
  })());
648
+ const reportContainsCustomFields = (0, react_1.useMemo)(() => {
649
+ // Check whether report query contains custom fields
650
+ const customFieldsMap = schemaData.customFields;
651
+ const reportQueryContainsCustomFields = allTables.some((table) => {
652
+ const tableColumns = referencedColumnsWithoutStar[table] ?? [];
653
+ const customFieldColumns = customFieldsMap?.[table] ?? [];
654
+ return tableColumns.some((column) => customFieldColumns.some((field) => field.field === column));
655
+ });
656
+ return reportQueryContainsCustomFields;
657
+ }, [allTables, referencedColumnsWithoutStar]);
658
+ const chartBuilderFormDataContainsCustomFields = (0, react_1.useMemo)(() => {
659
+ const customFields = allTables
660
+ .map((table) => schemaData.customFields?.[table] ?? [])
661
+ .flat();
662
+ const customFieldsMap = schemaData.customFields;
663
+ const pivotContainsCustomFields = customFields.some((field) => field.field === formData.pivot?.columnField ||
664
+ field.field === formData.pivot?.rowField ||
665
+ field.field === formData.pivot?.valueField);
666
+ const xAxisFieldContainsCustomFields = customFields.some((field) => field.field === formData.xAxisField);
667
+ const yAxisFieldsContainsCustomFields = formData.yAxisFields.some((yAxisField) => {
668
+ return customFields.some((field) => field.field === yAxisField.field);
669
+ });
670
+ const dateFieldContainsCustomFields = customFields.some((field) => field.field === formData.dateField?.field);
671
+ const canonicalFilterMapContainsCustomFields = Object.values(canonicalFilterMap).some((filter) => {
672
+ return customFieldsMap?.[filter.table || '']?.some((field) => field.field === filter.field);
673
+ });
674
+ return (pivotContainsCustomFields ||
675
+ xAxisFieldContainsCustomFields ||
676
+ yAxisFieldsContainsCustomFields ||
677
+ dateFieldContainsCustomFields ||
678
+ canonicalFilterMapContainsCustomFields);
679
+ }, [
680
+ allTables,
681
+ formData.pivot,
682
+ formData.xAxisField,
683
+ formData.yAxisFields,
684
+ formData.dateField,
685
+ canonicalFilterMap,
686
+ ]);
687
+ const customFieldsInTabularColumns = (0, react_1.useMemo)(() => {
688
+ const customFields = allTables
689
+ .map((table) => schemaData.customFields?.[table] ?? [])
690
+ .flat();
691
+ return formData.columns.some((col) => {
692
+ return customFields.some((field) => field.field === col.field);
693
+ });
694
+ }, [allTables, formData.columns]);
695
+ const containsCustomFields = (0, react_1.useMemo)(() => {
696
+ return (reportContainsCustomFields ||
697
+ customFieldsInTabularColumns ||
698
+ chartBuilderFormDataContainsCustomFields);
699
+ }, [
700
+ reportContainsCustomFields,
701
+ customFieldsInTabularColumns,
702
+ chartBuilderFormDataContainsCustomFields,
703
+ ]);
586
704
  (0, react_1.useEffect)(() => {
587
705
  if (!loadingFormData && triggeredEditChart) {
588
706
  editChart();
@@ -620,12 +738,13 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
620
738
  const curDashboard = await updateDashboardFilters(dashboardName);
621
739
  setDashboardOptions(dashboardOptions);
622
740
  curFormData.dashboardName = dashboardName;
623
- const curSchemaData = schemaData.schema;
741
+ const curSchemaData = schemaData.schemaWithCustomFields;
624
742
  if (!query) {
625
743
  setLoadingFormData(false);
626
744
  return;
627
745
  }
628
746
  const result = await getReferencedTables(client, query, curSchemaData);
747
+ const referencedTablesWithoutStar = await getReferencedTables(client, query, curSchemaData, true);
629
748
  setDateFieldOptions(result.dateFields);
630
749
  if (result.dateFields[0] && result.dateFields[0].columns[0]) {
631
750
  setDefaultDateField({
@@ -649,6 +768,11 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
649
768
  acc[table.name] = table.columns.map((col) => col.field);
650
769
  return acc;
651
770
  }, {});
771
+ const referencedColumnsWithoutStar = referencedTablesWithoutStar.referencedTablesAndColumns.reduce((acc, table) => {
772
+ acc[table.name] = table.columns.map((col) => col.field);
773
+ return acc;
774
+ }, {});
775
+ setReferencedColumnsWithoutStar(referencedColumnsWithoutStar);
652
776
  setReferencedColumns(referencedColumns);
653
777
  setTableName(result.dateFields[0]?.name);
654
778
  const dateField = {
@@ -706,12 +830,20 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
706
830
  };
707
831
  }, [selectedPivotTable, formData.pivot]);
708
832
  const chartData = (0, react_1.useMemo)(() => {
709
- const data = createReportFromForm(formData, report ? { ...report, rowCount } : tempReport, selectedPivotTable, rows, currentDashboardFilters);
833
+ const data = createReportFromForm(formData, report ? { ...report, rowCount } : tempReport, selectedPivotTable, rows, currentDashboardFilters, referenceLineQueryResults);
710
834
  return {
711
835
  ...data,
712
836
  filterMap: canonicalFilterMap,
713
837
  };
714
838
  }, [formData, selectedPivotTable, report, rows, rowCount]);
839
+ const xAxisFormatOptions = (0, react_1.useMemo)(() => {
840
+ return chartData?.chartType === 'gauge'
841
+ ? [
842
+ { value: 'whole_number', label: 'whole number' },
843
+ { value: 'two_decimal_places', label: 'two decimal places' },
844
+ { value: 'percent', label: 'percentage' },
845
+ ] : ALL_FORMAT_OPTIONS;
846
+ }, [chartData?.chartType]);
715
847
  const fetchPivotData = async (pivot, tableInfo, uniqueValues, overrideFilters) => {
716
848
  const dashboardFilters = filtersEnabled
717
849
  ? (overrideFilters ?? currentDashboardFilters)
@@ -760,11 +892,10 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
760
892
  if (selectedPivotTable &&
761
893
  selectedPivotTable.columns &&
762
894
  formData.chartType === 'table') {
763
- console.log('selectedPivotTable', selectedPivotTable);
764
895
  const columns = selectedPivotTable.columns;
765
896
  columns.forEach((col, index) => {
766
897
  // ADD THE RIGHT FIELD TYPE FOR THE VALUE COLUMNS
767
- if ((['min', 'max'].includes(formData.pivot?.aggregations?.[0]?.aggregationType ?? '')) &&
898
+ if (['min', 'max'].includes(formData.pivot?.aggregations?.[0]?.aggregationType ?? '') &&
768
899
  index !== 0) {
769
900
  col.format = 'two_decimal_places';
770
901
  }
@@ -882,7 +1013,7 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
882
1013
  fetchRowCount(processing, overrideFilters);
883
1014
  if (formData.pivot) {
884
1015
  try {
885
- const uniqueValues = await (0, tableProcessing_1.getUniqueValuesByColumns)(tableInfo.columns.filter((column) => column.field === formData.pivot?.columnField), report.queryString, tableInfo.rows, client, tenants, schemaData.customFields ?? [], overrideFilters, destinationDashboard);
1016
+ const uniqueValues = await (0, tableProcessing_1.getUniqueValuesByColumns)(tableInfo.columns.filter((column) => column.field === formData.pivot?.columnField), report.queryString, tableInfo.rows, client, tenants, schemaData.customFields ?? {}, overrideFilters, destinationDashboard);
886
1017
  fetchPivotData(formData.pivot, tableInfo, uniqueValues, overrideFilters);
887
1018
  }
888
1019
  catch (e) {
@@ -1035,7 +1166,7 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
1035
1166
  else if (field === 'dateField' &&
1036
1167
  subfield === 'table' &&
1037
1168
  !formData.dateField?.field) {
1038
- const field = schemaData.schema?.find((elem) => elem.name === value)?.columns?.[0]?.field;
1169
+ const field = schemaData.schemaWithCustomFields?.find((elem) => elem.name === value)?.columns?.[0]?.field;
1039
1170
  updatedForm.dateField = {
1040
1171
  // @ts-ignore
1041
1172
  ...updatedForm[field],
@@ -1053,6 +1184,14 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
1053
1184
  // For simple fields
1054
1185
  updatedForm = { ...updatedForm, [fieldName]: value };
1055
1186
  }
1187
+ if (fieldName === 'chartType') {
1188
+ if (value === 'metric') {
1189
+ updatedForm.xAxisFormat = 'whole_number';
1190
+ }
1191
+ else if (value === 'gauge') {
1192
+ updatedForm.xAxisFormat = 'percent';
1193
+ }
1194
+ }
1056
1195
  let dashboardName = updatedForm.dashboardName;
1057
1196
  if (fieldName === 'dashboardName') {
1058
1197
  dashboardName = value;
@@ -1113,7 +1252,10 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
1113
1252
  if (fieldName === 'columns') {
1114
1253
  setFormData({
1115
1254
  ...formData,
1116
- columns: [...formData.columns, { label: '', field: '', format: 'whole_number' }],
1255
+ columns: [
1256
+ ...formData.columns,
1257
+ { label: '', field: '', format: 'string' },
1258
+ ],
1117
1259
  });
1118
1260
  }
1119
1261
  else if (fieldName === 'yAxisFields') {
@@ -1121,7 +1263,7 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
1121
1263
  ...formData,
1122
1264
  yAxisFields: [
1123
1265
  ...formData.yAxisFields,
1124
- { label: '', field: '', format: 'whole_number' },
1266
+ { label: '', field: '', format: 'string' },
1125
1267
  ],
1126
1268
  });
1127
1269
  }
@@ -1139,6 +1281,15 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
1139
1281
  },
1140
1282
  });
1141
1283
  }
1284
+ else if (fieldName === 'referenceLines') {
1285
+ setFormData({
1286
+ ...formData,
1287
+ referenceLines: [
1288
+ ...formData.referenceLines,
1289
+ { label: '', y1: undefined, y2: undefined },
1290
+ ],
1291
+ });
1292
+ }
1142
1293
  };
1143
1294
  const handleRemoveField = (fieldName, index) => {
1144
1295
  if (fieldName === 'pivot') {
@@ -1193,24 +1344,33 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
1193
1344
  pivot: formData.pivot,
1194
1345
  referencedTables: allTables,
1195
1346
  referencedColumns,
1347
+ includeCustomFields: includeCustomFields || containsCustomFields,
1196
1348
  template: tenants
1197
1349
  ? undefined
1198
1350
  : report && !isAdmin && formData.template
1199
1351
  ? false
1200
1352
  : formData.template,
1201
- reportFlags: formFlags
1202
- ? Object.fromEntries(Object.entries(formFlags)
1203
- .filter(([, value]) => value.length > 0)
1204
- .map(([key, value]) => {
1205
- return [
1206
- key,
1207
- Object.keys(allTenantMap).length > 1 &&
1208
- allTenantMap[key]?.length === value.length
1209
- ? constants_1.ALL_TENANTS
1210
- : value,
1211
- ];
1212
- }))
1213
- : undefined,
1353
+ reportFlags: containsCustomFields
1354
+ ? currentTenantAsFormFlags
1355
+ : formFlags
1356
+ ? Object.fromEntries(Object.entries(formFlags)
1357
+ .filter(([, value]) => value.length > 0)
1358
+ .map(([key, value]) => {
1359
+ return [
1360
+ key,
1361
+ Object.keys(allTenantMap).length > 1 &&
1362
+ allTenantMap[key]?.length === value.length
1363
+ ? constants_1.ALL_TENANTS
1364
+ : value,
1365
+ ];
1366
+ }))
1367
+ : undefined,
1368
+ referenceLines: formData.referenceLines.map((line) => {
1369
+ return {
1370
+ label: line.label,
1371
+ query: line.label === constants_1.REFERENCE_LINE ? [Number(line.y1 ?? 0) || 0, Number(line.y2 ?? 0) || 0] : ''
1372
+ };
1373
+ }),
1214
1374
  };
1215
1375
  const resp = await (0, report_1.saveReport)({
1216
1376
  report: { ...newReport, rows: undefined, pivotRows: undefined }, // stop including rows in request
@@ -1289,7 +1449,7 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
1289
1449
  // formData.chartType === 'metric'
1290
1450
  // ? 100
1291
1451
  // : `calc(${filtersEnabled ? 50 : 70}%)`,
1292
- ...(isHorizontalView && { flexGrow: formData.chartType !== 'table' ? 1 : 0 }),
1452
+ ...(isHorizontalView && { flexGrow: !['table'].includes(formData.chartType) ? 1 : 0 }),
1293
1453
  }, onClickChartElement: onClickChartElement, filterToggleDisabled: Object.values(validFilter).includes(false), onDashboardFilterChange: onDashboardFilterChange, layoutChanged: isOpen }))),
1294
1454
  // Make sure to display non-pivoted table when using pivot chart
1295
1455
  (isHorizontalView || (!isOpen && windowWidth < 1200)) && ((0, jsx_runtime_1.jsxs)("div", { style: {
@@ -1306,8 +1466,14 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
1306
1466
  onFiltersEnabledChanged(hide);
1307
1467
  }, colors: theme?.chartColors, loading: false, hideDateRangeFilter: hideDateRangeFilter, isAdmin: isAdmin, containerStyle: {
1308
1468
  width: '100%',
1309
- height: formData.chartType === 'table' ? 200 : formData.chartType === 'metric' ? 300 : 500,
1310
- flexGrow: formData.chartType !== 'table' ? 1 : 0,
1469
+ height: formData.chartType === 'table'
1470
+ ? 200
1471
+ : formData.chartType === 'metric'
1472
+ ? 300
1473
+ : formData.chartType === 'US map' || formData.chartType === 'World map'
1474
+ ? 'fit-content'
1475
+ : 500,
1476
+ flexGrow: !['table'].includes(formData.chartType) ? 1 : 0,
1311
1477
  }, onClickChartElement: onClickChartElement, filterToggleDisabled: Object.values(validFilter).includes(false), onDashboardFilterChange: onDashboardFilterChange, layoutChanged: isOpen })), formData.chartType !== 'table' ? ((0, jsx_runtime_1.jsx)(TableComponent, { rows: formattedRows, columns: formData.columns, onPageChange: (page) => {
1312
1478
  onPageChange(page);
1313
1479
  setCurrentPage(page);
@@ -1341,8 +1507,14 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
1341
1507
  onFiltersEnabledChanged(hide);
1342
1508
  }, colors: theme?.chartColors, loading: false, hideDateRangeFilter: hideDateRangeFilter, isAdmin: isAdmin, containerStyle: {
1343
1509
  width: '100%',
1344
- height: formData.chartType === 'table' ? 200 : formData.chartType === 'metric' ? 300 : 500,
1345
- flexGrow: formData.chartType !== 'table' ? 1 : 0,
1510
+ height: formData.chartType === 'table'
1511
+ ? 200
1512
+ : formData.chartType === 'metric'
1513
+ ? 300
1514
+ : formData.chartType === 'US map' || formData.chartType === 'World map'
1515
+ ? 'fit-content'
1516
+ : 500,
1517
+ flexGrow: !['table'].includes(formData.chartType) ? 1 : 0,
1346
1518
  }, onClickChartElement: onClickChartElement, filterToggleDisabled: Object.values(validFilter).includes(false), onDashboardFilterChange: onDashboardFilterChange, layoutChanged: isOpen })), (0, jsx_runtime_1.jsxs)(ChartBuilderInputRowContainer, { children: [(0, jsx_runtime_1.jsx)("div", { ref: inputRef, style: { display: 'flex', flexDirection: 'column' }, children: (0, jsx_runtime_1.jsx)(TextInputComponent
1347
1519
  // {...autofocusRefProp}
1348
1520
  , {
@@ -1353,10 +1525,7 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
1353
1525
  }, options: dashboardOptions.map((elem) => ({
1354
1526
  label: elem.label,
1355
1527
  value: elem.label,
1356
- })), width: 200 }) })), (0, jsx_runtime_1.jsx)("div", { ref: selectRef, style: { display: 'flex', flexDirection: 'column' }, children: (0, jsx_runtime_1.jsx)(SelectComponent, { label: "Chart type", value: formData.chartType, onChange: (e) => handleChange(e.target.value, 'chartType'),
1357
- // filter out metric for all pivots
1358
- // filter out bar and pie for row and column pivot
1359
- options: chartTypes, width: 200 }) })] }), (0, jsx_runtime_1.jsxs)("div", { style: {
1528
+ })), width: 200 }) })), (0, jsx_runtime_1.jsx)("div", { ref: selectRef, style: { display: 'flex', flexDirection: 'column' }, children: (0, jsx_runtime_1.jsx)(SelectComponent, { label: "Chart type", value: formData.chartType, onChange: (e) => handleChange(e.target.value, 'chartType'), options: chartTypes, width: 200 }) })] }), (0, jsx_runtime_1.jsxs)("div", { style: {
1360
1529
  display: 'flex',
1361
1530
  flexDirection: 'column',
1362
1531
  gap: 6,
@@ -1372,33 +1541,40 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
1372
1541
  setShowPivotPopover(true);
1373
1542
  setPivotRowField(formData.pivot?.rowField);
1374
1543
  setPivotColumnField(formData.pivot?.columnField);
1375
- setPivotAggregations(formData.pivot?.aggregations ?? [{
1544
+ setPivotAggregations(formData.pivot?.aggregations ?? [
1545
+ {
1376
1546
  valueField: formData.pivot?.valueField,
1377
1547
  aggregationType: formData.pivot?.aggregationType,
1378
1548
  valueField2: formData.pivot?.valueField2,
1379
- }]);
1549
+ },
1550
+ ]);
1380
1551
  setPivotPopUpTitle('Edit pivot');
1381
1552
  }, selectedPivotIndex: -1, onEditPivot: () => { }, CardComponent: CardComponent, ButtonComponent: ButtonComponent, HeaderComponent: HeaderComponent, showEdit: false, onClose: handleDeletePivot, minHeight: 180, LabelComponent: LabelComponent, TextComponent: TextComponent }) }) }))] })] }), (formData.pivot || formData.chartType !== 'table') && ((0, jsx_runtime_1.jsxs)("div", { children: [CHART_TO_LABELS[formData.chartType]?.xAxisLabel && ((0, jsx_runtime_1.jsx)("div", { style: {
1382
1553
  display: 'flex',
1383
1554
  flexDirection: 'column',
1384
1555
  }, children: (0, jsx_runtime_1.jsx)(HeaderComponent, { label: "Chart" }) })), CHART_TO_LABELS[formData.chartType]?.xAxisLabel && ((0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsx)(SubHeaderComponent, { label: CHART_TO_LABELS[formData.chartType]?.xAxisLabel ?? '' }), (0, jsx_runtime_1.jsxs)(ChartBuilderInputRowContainer, { children: [(0, jsx_runtime_1.jsx)(SelectComponent, { value: formData.xAxisField, onChange: (e) => handleChange(e.target.value, 'xAxisField'), options: formData.pivot
1385
- ? getPivotMetricOptions(formData.pivot)
1556
+ ? getPivotMetricOptions(formData.pivot, selectedPivotTable, formData.chartType)
1386
1557
  : columns.map((elem) => ({
1387
1558
  label: elem.field,
1388
1559
  value: elem.field,
1389
1560
  })), width: 200 }), (0, jsx_runtime_1.jsx)(TextInputComponent, { id: "chart-builder-x-axis-label", width: 200, value: formData.xAxisLabel, placeholder: "Column Label", onChange: (e) => handleChange(e.target.value, 'xAxisLabel') }), (0, jsx_runtime_1.jsx)(SelectComponent, { value: formData.pivot &&
1390
- (0, PivotModal_1.isDateField)(formData.pivot.rowFieldType ?? '')
1391
- ? 'pivot_date'
1561
+ (0, PivotModal_1.isDateField)(formData.xAxisField ?? '')
1562
+ ? 'string'
1392
1563
  : formData.xAxisFormat, onChange: (e) => handleChange(e.target.value, 'xAxisFormat'), options: formData.pivot &&
1393
- (0, PivotModal_1.isDateField)(formData.pivot.rowFieldType ?? '')
1394
- ? [{ value: 'pivot_date', label: 'date' }]
1395
- : formatOptions, width: 200, hideEmptyOption: true })] })] })), CHART_TO_LABELS[formData.chartType]?.yAxisLabel && ((0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsx)(SubHeaderComponent, { label: CHART_TO_LABELS[formData.chartType]?.yAxisLabel ?? '' }), (0, jsx_runtime_1.jsxs)(ChartBuilderInputColumnContainer, { children: [formData.yAxisFields.map((yAxisField, index) => ((0, jsx_runtime_1.jsxs)(ChartBuilderInputRowContainer, { children: [(0, jsx_runtime_1.jsx)(SelectComponent, { value: formData.pivot
1396
- ? formData.pivot.aggregations?.length ? (0, pivotConstructor_1.disambiguatedValueField)(formData.pivot) ?? 'count' : 'count'
1564
+ (0, PivotModal_1.isDateField)(formData.xAxisField ?? '')
1565
+ ? [{ value: 'string', label: 'date' }]
1566
+ : xAxisFormatOptions, width: 200, hideEmptyOption: true })] })] })), CHART_TO_LABELS[formData.chartType]?.yAxisLabel && ((0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsx)(SubHeaderComponent, { label: CHART_TO_LABELS[formData.chartType]?.yAxisLabel ?? '' }), (0, jsx_runtime_1.jsxs)(ChartBuilderInputColumnContainer, { children: [formData.yAxisFields.map((yAxisField, index) => ((0, jsx_runtime_1.jsxs)(ChartBuilderInputRowContainer, { children: [(0, jsx_runtime_1.jsx)(SelectComponent, { value: formData.pivot
1567
+ ? formData.pivot.aggregations?.length
1568
+ ? ((0, pivotConstructor_1.disambiguatedValueField)(formData.pivot) ?? 'count')
1569
+ : 'count'
1397
1570
  : yAxisField.field, onChange: (e) => handleChange(e.target.value, 'yAxisFields.field', index), options: formData.pivot
1398
1571
  ? [
1399
1572
  {
1400
- label: `Pivot Column (${formData.pivot.aggregations?.length ? (0, pivotConstructor_1.disambiguatedValueField)(formData.pivot) ?? 'count' : 'count'})`,
1401
- value: formData.pivot.aggregations?.length ? (0, pivotConstructor_1.disambiguatedValueField)(formData.pivot) ?? 'count' : 'count',
1573
+ label: `Pivot Column (${formData.pivot.aggregations?.length ? ((0, pivotConstructor_1.disambiguatedValueField)(formData.pivot) ?? 'count') : 'count'})`,
1574
+ value: formData.pivot.aggregations
1575
+ ?.length
1576
+ ? ((0, pivotConstructor_1.disambiguatedValueField)(formData.pivot) ?? 'count')
1577
+ : 'count',
1402
1578
  },
1403
1579
  ]
1404
1580
  : columns
@@ -1409,12 +1585,20 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
1409
1585
  label: elem.field,
1410
1586
  value: elem.field,
1411
1587
  })), width: 200 }), (0, jsx_runtime_1.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) }), (0, jsx_runtime_1.jsx)(SelectComponent, { value: formData.pivot
1412
- ? NUMBER_OPTIONS.find((option) => {
1588
+ ? (NUMBER_OPTIONS.find((option) => {
1413
1589
  return (option.value === yAxisField.format);
1414
- })?.value ?? NUMBER_OPTIONS[0].value
1590
+ })?.value ?? NUMBER_OPTIONS[0].value)
1415
1591
  : yAxisField.format, onChange: (e) => handleChange(e.target.value, 'yAxisFields.format', index), options: formData.pivot
1416
1592
  ? NUMBER_OPTIONS
1417
- : formatOptions, width: 200, hideEmptyOption: true }), !formData.pivot && ((0, jsx_runtime_1.jsx)("div", { ref: deleteRef, style: { marginLeft: deleteButtonMargin }, children: (0, jsx_runtime_1.jsx)(DeleteButtonComponent, { onClick: () => handleRemoveField('yAxisFields', index) }) }))] }, 'yAxisField' + index))), !formData.pivot && ((0, jsx_runtime_1.jsx)("div", { children: (0, jsx_runtime_1.jsx)(SecondaryButtonComponent, { onClick: () => handleAddField('yAxisFields'), label: "Add field +" }) }))] })] }))] })), windowWidth < 1200 && ((0, jsx_runtime_1.jsx)("div", { style: {
1593
+ : ALL_FORMAT_OPTIONS, width: 200, hideEmptyOption: true }), !formData.pivot && ((0, jsx_runtime_1.jsx)("div", { ref: deleteRef, style: { marginLeft: deleteButtonMargin }, children: (0, jsx_runtime_1.jsx)(DeleteButtonComponent, { onClick: () => handleRemoveField('yAxisFields', index) }) }))] }, 'yAxisField' + index))), !formData.pivot && ((0, jsx_runtime_1.jsx)("div", { children: (0, jsx_runtime_1.jsx)(SecondaryButtonComponent, { onClick: () => handleAddField('yAxisFields'), label: "Add field +" }) }))] })] })), client?.featureFlags?.['referenceLines'] && (chartData.chartType === 'line' || chartData.chartType === 'column') && (0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsx)(SubHeaderComponent, { label: 'Reference Lines' }), (0, jsx_runtime_1.jsxs)(ChartBuilderInputColumnContainer, { children: [formData.referenceLines?.map((refLine, index) => ((0, jsx_runtime_1.jsxs)(ChartBuilderInputRowContainer, { children: [(0, jsx_runtime_1.jsx)(SelectComponent, { width: 200, value: refLine.label, onChange: (e) => handleChange(e.target.value, 'referenceLines.label', index),
1594
+ // only include numeric columns
1595
+ options: [{
1596
+ label: 'Custom Values',
1597
+ value: constants_1.REFERENCE_LINE
1598
+ }].concat((selectedPivotTable?.columns ? selectedPivotTable.columns : columns).filter((c) => valueFormatter_1.NUMBER_FORMAT_TYPES.includes(c.format)).map((elem) => ({
1599
+ label: elem.field,
1600
+ value: elem.field,
1601
+ }))) }), refLine.label === constants_1.REFERENCE_LINE && ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(TextInputComponent, { id: "chart-builder-ref-line-y1", width: 200, value: refLine.y1?.toString() ?? '', placeholder: "Start value", onChange: (e) => handleChange(e.target.value, 'referenceLines.y1', index) }), (0, jsx_runtime_1.jsx)(TextInputComponent, { id: "chart-builder-ref-line-y2", width: 200, value: refLine.y2?.toString() ?? '', placeholder: "End value", onChange: (e) => handleChange(e.target.value, 'referenceLines.y2', index) })] })), (0, jsx_runtime_1.jsx)("div", { ref: deleteRef, style: { marginLeft: deleteButtonMargin }, children: (0, jsx_runtime_1.jsx)(DeleteButtonComponent, { onClick: () => handleRemoveField('referenceLines', index) }) })] }, 'referenceLine' + index))), (0, jsx_runtime_1.jsx)("div", { children: (0, jsx_runtime_1.jsx)(SecondaryButtonComponent, { onClick: () => handleAddField('referenceLines'), label: "Add line +" }) })] })] })] })), windowWidth < 1200 && ((0, jsx_runtime_1.jsx)("div", { style: {
1418
1602
  width: '100%',
1419
1603
  height: isHorizontalView || !isOpen ? 'calc(50% - 10px)' : 400,
1420
1604
  flexGrow: 1,
@@ -1447,14 +1631,14 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
1447
1631
  column.field === formData.pivot.rowField
1448
1632
  ? formData.pivot &&
1449
1633
  (0, PivotModal_1.isDateField)(formData.pivot.rowFieldType || '')
1450
- ? 'pivot_date'
1634
+ ? 'string'
1451
1635
  : 'string'
1452
1636
  : formData.pivot?.aggregationType ===
1453
1637
  'percentage'
1454
1638
  ? 'percent'
1455
1639
  : 'two_decimal_places', onChange: (e) => handleChange(e.target.value, 'pivotColumn', index), options: formData.pivot && index === 0
1456
1640
  ? (0, PivotModal_1.isDateField)(formData.pivot.rowFieldType || '')
1457
- ? [{ label: 'date', value: 'pivot_date' }]
1641
+ ? [{ label: 'date', value: 'string' }]
1458
1642
  : [{ label: 'string', value: 'string' }]
1459
1643
  : [...NUMBER_OPTIONS], width: 200 })] }, 'column' + index)))
1460
1644
  : formData.columns.map((column, index) => ((0, jsx_runtime_1.jsxs)(ChartBuilderInputRowContainer, { children: [(0, jsx_runtime_1.jsx)(SelectComponent, { value: column.field, onChange: (e) => handleChange(e.target.value, 'columns.field', index), options: rows[0]
@@ -1465,12 +1649,17 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
1465
1649
  : columns.map((elem) => ({
1466
1650
  label: elem.field,
1467
1651
  value: elem.field,
1468
- })), width: 200 }), (0, jsx_runtime_1.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) }), (0, jsx_runtime_1.jsx)(SelectComponent, { value: column.format, onChange: (e) => handleChange(e.target.value, 'columns.format', index), options: formatOptions, width: 200 }), (0, jsx_runtime_1.jsx)("div", { ref: deleteRef, style: { marginLeft: deleteButtonMargin }, children: (0, jsx_runtime_1.jsx)(DeleteButtonComponent, { onClick: () => handleRemoveField('columns', index) }) })] }, 'column' + index))), (0, jsx_runtime_1.jsx)("div", { children: !(
1652
+ })), width: 200 }), (0, jsx_runtime_1.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) }), (0, jsx_runtime_1.jsx)(SelectComponent, { value: column.format, onChange: (e) => handleChange(e.target.value, 'columns.format', index), options: ALL_FORMAT_OPTIONS, width: 200 }), (0, jsx_runtime_1.jsx)("div", { ref: deleteRef, style: { marginLeft: deleteButtonMargin }, children: (0, jsx_runtime_1.jsx)(DeleteButtonComponent, { onClick: () => handleRemoveField('columns', index) }) })] }, 'column' + index))), (0, jsx_runtime_1.jsx)("div", { children: !(
1469
1653
  // hide when pivoted and chartType === 'table'
1470
1654
  (formData.pivot &&
1471
1655
  selectedPivotTable &&
1472
1656
  selectedPivotTable.columns &&
1473
- formData.chartType === 'table')) && ((0, jsx_runtime_1.jsx)(SecondaryButtonComponent, { onClick: () => handleAddField('columns'), label: "Add column +" })) })] })] })), isAdmin && tenants && dashboardOwner && ((0, jsx_runtime_1.jsxs)("div", { style: {
1657
+ formData.chartType === 'table')) && ((0, jsx_runtime_1.jsxs)("div", { style: {
1658
+ display: 'flex',
1659
+ flexDirection: 'row',
1660
+ gap: 10,
1661
+ }, children: [(0, jsx_runtime_1.jsx)(SecondaryButtonComponent, { onClick: () => handleAddField('columns'), label: "Add column +" }), isAdmin &&
1662
+ client?.featureFlags?.customFieldsEnabled && ((0, jsx_runtime_1.jsx)(CheckboxComponent, { isChecked: containsCustomFields || includeCustomFields, label: "Include Custom Fields", onChange: () => setIncludeCustomFields((prev) => !prev), disabled: containsCustomFields }))] })) })] })] })), isAdmin && tenants && dashboardOwner && ((0, jsx_runtime_1.jsxs)("div", { style: {
1474
1663
  display: 'flex',
1475
1664
  flexDirection: 'column',
1476
1665
  gap: 12,
@@ -1484,54 +1673,61 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
1484
1673
  width: 'fit-content',
1485
1674
  gap: 12,
1486
1675
  marginBottom: 8,
1487
- }, children: [(0, jsx_runtime_1.jsxs)("div", { style: {
1488
- outline: '1px solid #E7E7E7',
1489
- borderRadius: 6,
1490
- padding: 4,
1491
- display: 'flex',
1492
- flexDirection: 'row',
1493
- marginLeft: 2,
1494
- backgroundColor: '#FCFCFC',
1495
- height: 38,
1496
- width: 'fit-content',
1497
- }, children: [(0, jsx_runtime_1.jsx)("button", { onClick: () => {
1498
- setCustomTenantAccess(false);
1499
- setFormFlags(undefined);
1500
- }, style: {
1501
- width: 95,
1502
- outline: !customTenantAccess
1503
- ? '1px solid #E7E7E7'
1504
- : undefined,
1505
- backgroundColor: !customTenantAccess
1506
- ? 'white'
1507
- : undefined,
1508
- // Center text vertically and horizontally
1509
- display: 'flex',
1510
- justifyContent: 'center',
1511
- alignItems: 'center',
1512
- borderRadius: 6,
1513
- fontSize: 14,
1514
- fontWeight: 500,
1515
- userSelect: 'none',
1516
- }, children: "Global" }), (0, jsx_runtime_1.jsx)("button", { onClick: () => {
1517
- setCustomTenantAccess(true);
1518
- }, style: {
1519
- width: 95,
1520
- outline: customTenantAccess
1521
- ? '1px solid #E7E7E7'
1522
- : undefined,
1523
- backgroundColor: customTenantAccess
1524
- ? 'white'
1525
- : undefined,
1526
- // Center text vertically and horizontally
1527
- display: 'flex',
1528
- justifyContent: 'center',
1529
- alignItems: 'center',
1530
- borderRadius: 6,
1531
- fontSize: 14,
1532
- fontWeight: 500,
1533
- userSelect: 'none',
1534
- }, children: "Custom" })] }), client?.allTenantTypes?.length === 1 ? ((0, jsx_runtime_1.jsx)(QuillMultiSelectWithCombo_1.QuillMultiSelectComponentWithCombo, { value: formFlags?.[dashboardOwner.tenantField] ?? [], onChange: (e) => setFormFlags({
1676
+ }, children: [(0, jsx_runtime_1.jsx)(UiComponents_1.QuillToolTip, { text: 'Tenant access is restricted to current tenant with direct custom field reference.', enabled: containsCustomFields, textStyle: {
1677
+ maxWidth: '200px',
1678
+ whiteSpace: 'normal',
1679
+ }, children: (0, jsx_runtime_1.jsxs)("div", { style: {
1680
+ outline: '1px solid #E7E7E7',
1681
+ borderRadius: 6,
1682
+ padding: 4,
1683
+ display: 'flex',
1684
+ flexDirection: 'row',
1685
+ marginLeft: 2,
1686
+ backgroundColor: '#FCFCFC',
1687
+ height: 38,
1688
+ width: 'fit-content',
1689
+ }, children: [(0, jsx_runtime_1.jsx)("button", { onClick: () => {
1690
+ if (!containsCustomFields) {
1691
+ setCustomTenantAccess(false);
1692
+ setFormFlags(undefined);
1693
+ }
1694
+ }, style: {
1695
+ width: 95,
1696
+ outline: !(customTenantAccess || containsCustomFields)
1697
+ ? '1px solid #E7E7E7'
1698
+ : undefined,
1699
+ backgroundColor: !(customTenantAccess || containsCustomFields)
1700
+ ? 'white'
1701
+ : undefined,
1702
+ // Center text vertically and horizontally
1703
+ display: 'flex',
1704
+ justifyContent: 'center',
1705
+ alignItems: 'center',
1706
+ borderRadius: 6,
1707
+ fontSize: 14,
1708
+ fontWeight: 500,
1709
+ userSelect: 'none',
1710
+ }, children: "Global" }), (0, jsx_runtime_1.jsx)("button", { onClick: () => {
1711
+ setCustomTenantAccess(true);
1712
+ }, style: {
1713
+ width: 95,
1714
+ outline: customTenantAccess || containsCustomFields
1715
+ ? '1px solid #E7E7E7'
1716
+ : undefined,
1717
+ backgroundColor: customTenantAccess || containsCustomFields
1718
+ ? 'white'
1719
+ : undefined,
1720
+ // Center text vertically and horizontally
1721
+ display: 'flex',
1722
+ justifyContent: 'center',
1723
+ alignItems: 'center',
1724
+ borderRadius: 6,
1725
+ fontSize: 14,
1726
+ fontWeight: 500,
1727
+ userSelect: 'none',
1728
+ }, children: "Custom" })] }) }), client?.allTenantTypes?.length === 1 ? ((0, jsx_runtime_1.jsx)(QuillMultiSelectWithCombo_1.QuillMultiSelectComponentWithCombo, { disabled: containsCustomFields, value: containsCustomFields
1729
+ ? (currentTenantAsFormFlags?.[dashboardOwner.tenantField] ?? []) // Even though value requires string[], turns out flags can be numbers
1730
+ : (formFlags?.[dashboardOwner.tenantField] ?? []), onChange: (e) => setFormFlags({
1535
1731
  ...formFlags,
1536
1732
  [dashboardOwner.tenantField]: e.target
1537
1733
  .value,
@@ -1548,7 +1744,9 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
1548
1744
  })) ?? []), width: 200, emptyLabel: dashboardOwner.scope === 'database'
1549
1745
  ? 'No flags supplied'
1550
1746
  : undefined, allSelectedLabel: 'All ' + dashboardOwner.name + 's', style: {
1551
- display: customTenantAccess ? 'inline' : 'none',
1747
+ display: customTenantAccess || containsCustomFields
1748
+ ? 'inline'
1749
+ : 'none',
1552
1750
  marginTop: -1,
1553
1751
  marginBottom: -4,
1554
1752
  } })) : ((0, jsx_runtime_1.jsx)(QuillMultiSelectSectionList_1.QuillMultiSelectSectionList, { value: formFlags ?? {}, onChange: (e) => setFormFlags(e.target.value), options: allTenantMap, sectionHeaderMap: client?.allTenantTypes?.reduce((acc, tenantType) => {
@@ -1559,7 +1757,9 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
1559
1757
  acc[tenantType.tenantField] = tenantType.name;
1560
1758
  return acc;
1561
1759
  }, {}) ?? {}, width: 200, allSelectedLabel: 'All ' + dashboardOwner.name + 's', style: {
1562
- display: customTenantAccess ? 'inline' : 'none',
1760
+ display: customTenantAccess || containsCustomFields
1761
+ ? 'inline'
1762
+ : 'none',
1563
1763
  marginTop: -1,
1564
1764
  marginBottom: -4,
1565
1765
  }, owner: dashboardOwner.tenantField }))] }) })] })), specificDashboardFilters.length > 0 && isAdmin && ((0, jsx_runtime_1.jsxs)("div", { style: {
@@ -1604,7 +1804,7 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
1604
1804
  ...filterMap,
1605
1805
  [filter.label]: {
1606
1806
  table: e.target.value,
1607
- field: schemaData.schema
1807
+ field: schemaData.schemaWithCustomFields
1608
1808
  .find((t) => t.name == e.target.value)
1609
1809
  ?.columns.find((elem) => elem.field ===
1610
1810
  (filterMap[filter.label]?.field ??
@@ -1625,7 +1825,7 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
1625
1825
  filter.table,
1626
1826
  field: e.target.value,
1627
1827
  },
1628
- }), options: schemaData.schema
1828
+ }), options: schemaData.schemaWithCustomFields
1629
1829
  .find((t) => t.name ==
1630
1830
  (filterMap[filter.label]?.table ??
1631
1831
  filter.table) &&
@@ -1655,8 +1855,12 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
1655
1855
  justifyContent: 'space-between',
1656
1856
  alignItems: 'center',
1657
1857
  gap: 6,
1658
- }, children: [!!filterIssues?.length &&
1659
- (0, jsx_runtime_1.jsx)(ErrorMessageComponent, { errorMessage: filterIssues[0] || 'Dashbord - Report issues', containerStyle: { height: '100%' } }), (0, jsx_runtime_1.jsxs)("div", { style: { display: 'flex', flexDirection: 'row', gap: 10, backgroundColor: 'white' }, children: [(0, jsx_runtime_1.jsx)(SecondaryButtonComponent, { onClick: () => {
1858
+ }, children: [!!filterIssues?.length && ((0, jsx_runtime_1.jsx)(ErrorMessageComponent, { errorMessage: filterIssues[0] || 'Dashbord - Report issues', containerStyle: { height: '100%' } })), (0, jsx_runtime_1.jsxs)("div", { style: {
1859
+ display: 'flex',
1860
+ flexDirection: 'row',
1861
+ gap: 10,
1862
+ backgroundColor: 'white',
1863
+ }, children: [(0, jsx_runtime_1.jsx)(SecondaryButtonComponent, { onClick: () => {
1660
1864
  setIsOpen(false);
1661
1865
  onDiscardChanges && onDiscardChanges();
1662
1866
  }, label: 'Discard changes' }), (0, jsx_runtime_1.jsx)(ButtonComponent, { onClick: () => {