@quillsql/react 2.13.40 → 2.13.42

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 (267) 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 +30 -3
  5. package/dist/cjs/ChartBuilder.d.ts.map +1 -1
  6. package/dist/cjs/ChartBuilder.js +483 -182
  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 +95 -46
  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 +69 -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 +2 -1
  18. package/dist/cjs/ReportBuilder.d.ts.map +1 -1
  19. package/dist/cjs/ReportBuilder.js +190 -48
  20. package/dist/cjs/SQLEditor.d.ts +8 -1
  21. package/dist/cjs/SQLEditor.d.ts.map +1 -1
  22. package/dist/cjs/SQLEditor.js +94 -10
  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 +5 -2
  66. package/dist/cjs/components/UiComponents.d.ts.map +1 -1
  67. package/dist/cjs/components/UiComponents.js +34 -7
  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/index.d.ts +1 -1
  80. package/dist/cjs/index.d.ts.map +1 -1
  81. package/dist/cjs/internals/ReportBuilder/PivotModal.d.ts.map +1 -1
  82. package/dist/cjs/internals/ReportBuilder/PivotModal.js +7 -8
  83. package/dist/cjs/models/Columns.d.ts +1 -0
  84. package/dist/cjs/models/Columns.d.ts.map +1 -1
  85. package/dist/cjs/models/Filter.d.ts +20 -13
  86. package/dist/cjs/models/Filter.d.ts.map +1 -1
  87. package/dist/cjs/models/Filter.js +161 -87
  88. package/dist/cjs/models/Report.d.ts +12 -1
  89. package/dist/cjs/models/Report.d.ts.map +1 -1
  90. package/dist/cjs/models/Schema.d.ts +12 -1
  91. package/dist/cjs/models/Schema.d.ts.map +1 -1
  92. package/dist/cjs/utils/astFilterProcessing.js +22 -22
  93. package/dist/cjs/utils/astProcessing.d.ts +2 -2
  94. package/dist/cjs/utils/astProcessing.d.ts.map +1 -1
  95. package/dist/cjs/utils/astProcessing.js +25 -6
  96. package/dist/cjs/utils/axisFormatter.d.ts.map +1 -1
  97. package/dist/cjs/utils/axisFormatter.js +25 -0
  98. package/dist/cjs/utils/color.d.ts +159 -0
  99. package/dist/cjs/utils/color.d.ts.map +1 -1
  100. package/dist/cjs/utils/color.js +14 -5
  101. package/dist/cjs/utils/columnProcessing.js +3 -3
  102. package/dist/cjs/utils/constants.d.ts +1 -0
  103. package/dist/cjs/utils/constants.d.ts.map +1 -1
  104. package/dist/cjs/utils/constants.js +2 -1
  105. package/dist/cjs/utils/dashboard.d.ts +14 -3
  106. package/dist/cjs/utils/dashboard.d.ts.map +1 -1
  107. package/dist/cjs/utils/dashboard.js +79 -16
  108. package/dist/cjs/utils/dataFetcher.d.ts.map +1 -1
  109. package/dist/cjs/utils/dataFetcher.js +3 -1
  110. package/dist/cjs/utils/filterProcessing.d.ts.map +1 -1
  111. package/dist/cjs/utils/filterProcessing.js +9 -9
  112. package/dist/cjs/utils/getDomain.d.ts +4 -1
  113. package/dist/cjs/utils/getDomain.d.ts.map +1 -1
  114. package/dist/cjs/utils/getDomain.js +11 -1
  115. package/dist/cjs/utils/pivotConstructor.d.ts.map +1 -1
  116. package/dist/cjs/utils/pivotConstructor.js +9 -6
  117. package/dist/cjs/utils/queryConstructor.d.ts +1 -1
  118. package/dist/cjs/utils/queryConstructor.d.ts.map +1 -1
  119. package/dist/cjs/utils/queryConstructor.js +83 -49
  120. package/dist/cjs/utils/report.d.ts +23 -5
  121. package/dist/cjs/utils/report.d.ts.map +1 -1
  122. package/dist/cjs/utils/report.js +36 -14
  123. package/dist/cjs/utils/schema.d.ts +28 -3
  124. package/dist/cjs/utils/schema.d.ts.map +1 -1
  125. package/dist/cjs/utils/schema.js +79 -43
  126. package/dist/cjs/utils/tableProcessing.d.ts +12 -3
  127. package/dist/cjs/utils/tableProcessing.d.ts.map +1 -1
  128. package/dist/cjs/utils/tableProcessing.js +36 -8
  129. package/dist/cjs/utils/textProcessing.d.ts.map +1 -1
  130. package/dist/cjs/utils/textProcessing.js +0 -1
  131. package/dist/cjs/utils/valueFormatter.d.ts +1 -0
  132. package/dist/cjs/utils/valueFormatter.d.ts.map +1 -1
  133. package/dist/cjs/utils/valueFormatter.js +55 -1
  134. package/dist/esm/Chart.d.ts +5 -1
  135. package/dist/esm/Chart.d.ts.map +1 -1
  136. package/dist/esm/Chart.js +52 -29
  137. package/dist/esm/ChartBuilder.d.ts +30 -3
  138. package/dist/esm/ChartBuilder.d.ts.map +1 -1
  139. package/dist/esm/ChartBuilder.js +487 -187
  140. package/dist/esm/ChartEditor.d.ts.map +1 -1
  141. package/dist/esm/ChartEditor.js +11 -1
  142. package/dist/esm/Context.d.ts +16 -4
  143. package/dist/esm/Context.d.ts.map +1 -1
  144. package/dist/esm/Context.js +97 -48
  145. package/dist/esm/Dashboard.d.ts +6 -3
  146. package/dist/esm/Dashboard.d.ts.map +1 -1
  147. package/dist/esm/Dashboard.js +70 -29
  148. package/dist/esm/QuillProvider.d.ts +4 -8
  149. package/dist/esm/QuillProvider.d.ts.map +1 -1
  150. package/dist/esm/ReportBuilder.d.ts +2 -1
  151. package/dist/esm/ReportBuilder.d.ts.map +1 -1
  152. package/dist/esm/ReportBuilder.js +192 -50
  153. package/dist/esm/SQLEditor.d.ts +8 -1
  154. package/dist/esm/SQLEditor.d.ts.map +1 -1
  155. package/dist/esm/SQLEditor.js +95 -11
  156. package/dist/esm/Table.d.ts +21 -1
  157. package/dist/esm/Table.d.ts.map +1 -1
  158. package/dist/esm/Table.js +34 -196
  159. package/dist/esm/components/Chart/BarChart.d.ts +5 -1
  160. package/dist/esm/components/Chart/BarChart.d.ts.map +1 -1
  161. package/dist/esm/components/Chart/BarChart.js +5 -4
  162. package/dist/esm/components/Chart/CustomReferenceLine.d.ts +2 -0
  163. package/dist/esm/components/Chart/CustomReferenceLine.d.ts.map +1 -0
  164. package/dist/esm/components/Chart/CustomReferenceLine.js +23 -0
  165. package/dist/esm/components/Chart/GaugeChart.d.ts +11 -0
  166. package/dist/esm/components/Chart/GaugeChart.d.ts.map +1 -0
  167. package/dist/esm/components/Chart/GaugeChart.js +195 -0
  168. package/dist/esm/components/Chart/InternalChart.d.ts.map +1 -1
  169. package/dist/esm/components/Chart/InternalChart.js +14 -11
  170. package/dist/esm/components/Chart/LineChart.d.ts +5 -1
  171. package/dist/esm/components/Chart/LineChart.d.ts.map +1 -1
  172. package/dist/esm/components/Chart/LineChart.js +5 -4
  173. package/dist/esm/components/Chart/MapChart.d.ts +36 -0
  174. package/dist/esm/components/Chart/MapChart.d.ts.map +1 -0
  175. package/dist/esm/components/Chart/MapChart.js +541 -0
  176. package/dist/esm/components/Dashboard/DataLoader.d.ts.map +1 -1
  177. package/dist/esm/components/Dashboard/DataLoader.js +114 -42
  178. package/dist/esm/components/Dashboard/MetricComponent.d.ts.map +1 -1
  179. package/dist/esm/components/Dashboard/MetricComponent.js +57 -54
  180. package/dist/esm/components/Dashboard/TableComponent.d.ts.map +1 -1
  181. package/dist/esm/components/Dashboard/TableComponent.js +5 -1
  182. package/dist/esm/components/QuillMultiSelectWithCombo.d.ts.map +1 -1
  183. package/dist/esm/components/QuillMultiSelectWithCombo.js +5 -4
  184. package/dist/esm/components/QuillSelectWithCombo.d.ts.map +1 -1
  185. package/dist/esm/components/QuillSelectWithCombo.js +12 -11
  186. package/dist/esm/components/ReportBuilder/AddColumnModal.d.ts.map +1 -1
  187. package/dist/esm/components/ReportBuilder/AddColumnModal.js +2 -1
  188. package/dist/esm/components/ReportBuilder/FilterModal.js +14 -14
  189. package/dist/esm/components/ReportBuilder/FilterStack.d.ts +2 -1
  190. package/dist/esm/components/ReportBuilder/FilterStack.d.ts.map +1 -1
  191. package/dist/esm/components/ReportBuilder/FilterStack.js +4 -4
  192. package/dist/esm/components/ReportBuilder/convert.d.ts +2 -0
  193. package/dist/esm/components/ReportBuilder/convert.d.ts.map +1 -1
  194. package/dist/esm/components/ReportBuilder/convert.js +26 -7
  195. package/dist/esm/components/ReportBuilder/util.d.ts +1 -1
  196. package/dist/esm/components/ReportBuilder/util.d.ts.map +1 -1
  197. package/dist/esm/components/ReportBuilder/util.js +15 -2
  198. package/dist/esm/components/UiComponents.d.ts +5 -2
  199. package/dist/esm/components/UiComponents.d.ts.map +1 -1
  200. package/dist/esm/components/UiComponents.js +32 -6
  201. package/dist/esm/hooks/useDashboard.d.ts.map +1 -1
  202. package/dist/esm/hooks/useDashboard.js +11 -9
  203. package/dist/esm/hooks/useExport.d.ts.map +1 -1
  204. package/dist/esm/hooks/useExport.js +19 -5
  205. package/dist/esm/hooks/useQuill.d.ts.map +1 -1
  206. package/dist/esm/hooks/useQuill.js +16 -3
  207. package/dist/esm/hooks/useReport.d.ts.map +1 -1
  208. package/dist/esm/hooks/useReport.js +1 -7
  209. package/dist/esm/hooks/useVirtualTables.d.ts +6 -2
  210. package/dist/esm/hooks/useVirtualTables.d.ts.map +1 -1
  211. package/dist/esm/hooks/useVirtualTables.js +6 -3
  212. package/dist/esm/index.d.ts +1 -1
  213. package/dist/esm/index.d.ts.map +1 -1
  214. package/dist/esm/internals/ReportBuilder/PivotModal.d.ts.map +1 -1
  215. package/dist/esm/internals/ReportBuilder/PivotModal.js +7 -8
  216. package/dist/esm/models/Columns.d.ts +1 -0
  217. package/dist/esm/models/Columns.d.ts.map +1 -1
  218. package/dist/esm/models/Filter.d.ts +20 -13
  219. package/dist/esm/models/Filter.d.ts.map +1 -1
  220. package/dist/esm/models/Filter.js +160 -86
  221. package/dist/esm/models/Report.d.ts +12 -1
  222. package/dist/esm/models/Report.d.ts.map +1 -1
  223. package/dist/esm/models/Schema.d.ts +12 -1
  224. package/dist/esm/models/Schema.d.ts.map +1 -1
  225. package/dist/esm/utils/astFilterProcessing.js +23 -23
  226. package/dist/esm/utils/astProcessing.d.ts +2 -2
  227. package/dist/esm/utils/astProcessing.d.ts.map +1 -1
  228. package/dist/esm/utils/astProcessing.js +25 -6
  229. package/dist/esm/utils/axisFormatter.d.ts.map +1 -1
  230. package/dist/esm/utils/axisFormatter.js +25 -0
  231. package/dist/esm/utils/color.d.ts +159 -0
  232. package/dist/esm/utils/color.d.ts.map +1 -1
  233. package/dist/esm/utils/color.js +8 -2
  234. package/dist/esm/utils/columnProcessing.js +3 -3
  235. package/dist/esm/utils/constants.d.ts +1 -0
  236. package/dist/esm/utils/constants.d.ts.map +1 -1
  237. package/dist/esm/utils/constants.js +1 -0
  238. package/dist/esm/utils/dashboard.d.ts +14 -3
  239. package/dist/esm/utils/dashboard.d.ts.map +1 -1
  240. package/dist/esm/utils/dashboard.js +80 -17
  241. package/dist/esm/utils/dataFetcher.d.ts.map +1 -1
  242. package/dist/esm/utils/dataFetcher.js +3 -1
  243. package/dist/esm/utils/filterProcessing.d.ts.map +1 -1
  244. package/dist/esm/utils/filterProcessing.js +10 -10
  245. package/dist/esm/utils/getDomain.d.ts +4 -1
  246. package/dist/esm/utils/getDomain.d.ts.map +1 -1
  247. package/dist/esm/utils/getDomain.js +11 -1
  248. package/dist/esm/utils/pivotConstructor.d.ts.map +1 -1
  249. package/dist/esm/utils/pivotConstructor.js +9 -6
  250. package/dist/esm/utils/queryConstructor.d.ts +1 -1
  251. package/dist/esm/utils/queryConstructor.d.ts.map +1 -1
  252. package/dist/esm/utils/queryConstructor.js +83 -49
  253. package/dist/esm/utils/report.d.ts +23 -5
  254. package/dist/esm/utils/report.d.ts.map +1 -1
  255. package/dist/esm/utils/report.js +38 -16
  256. package/dist/esm/utils/schema.d.ts +28 -3
  257. package/dist/esm/utils/schema.d.ts.map +1 -1
  258. package/dist/esm/utils/schema.js +78 -43
  259. package/dist/esm/utils/tableProcessing.d.ts +12 -3
  260. package/dist/esm/utils/tableProcessing.d.ts.map +1 -1
  261. package/dist/esm/utils/tableProcessing.js +36 -8
  262. package/dist/esm/utils/textProcessing.d.ts.map +1 -1
  263. package/dist/esm/utils/textProcessing.js +0 -1
  264. package/dist/esm/utils/valueFormatter.d.ts +1 -0
  265. package/dist/esm/utils/valueFormatter.d.ts.map +1 -1
  266. package/dist/esm/utils/valueFormatter.js +53 -0
  267. package/package.json +10 -3
@@ -5,6 +5,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.dateFormatOptions = exports.numberFormatOptions = void 0;
7
7
  exports.createInitialFormData = createInitialFormData;
8
+ exports.createReportFromForm = createReportFromForm;
8
9
  exports.ChartBuilderWithModal = ChartBuilderWithModal;
9
10
  exports.default = ChartBuilder;
10
11
  exports.DashboardFilterModal = DashboardFilterModal;
@@ -35,7 +36,17 @@ const dataFetcher_1 = require("./utils/dataFetcher");
35
36
  const QuillMultiSelectSectionList_1 = require("./components/QuillMultiSelectSectionList");
36
37
  const constants_1 = require("./utils/constants");
37
38
  const pivotConstructor_1 = require("./utils/pivotConstructor");
38
- const CHART_TYPES = ['column', 'line', 'table', 'metric', 'bar', 'pie'];
39
+ const CHART_TYPES = [
40
+ 'column',
41
+ 'line',
42
+ 'table',
43
+ 'metric',
44
+ 'gauge',
45
+ 'bar',
46
+ 'pie',
47
+ 'US map',
48
+ 'World map',
49
+ ];
39
50
  const CHART_TO_LABELS = {
40
51
  column: { xAxisLabel: 'X-Axis', yAxisLabel: 'Y-Axis' },
41
52
  line: { xAxisLabel: 'X-Axis', yAxisLabel: 'Y-Axis' },
@@ -43,8 +54,19 @@ const CHART_TO_LABELS = {
43
54
  metric: { xAxisLabel: 'Value' },
44
55
  bar: { xAxisLabel: 'X-Axis', yAxisLabel: 'Y-Axis' },
45
56
  pie: { xAxisLabel: 'Category', yAxisLabel: 'Count' },
57
+ 'US map': { xAxisLabel: 'State', yAxisLabel: 'Value' },
58
+ 'World map': { xAxisLabel: 'Country', yAxisLabel: 'Value' },
59
+ gauge: { xAxisLabel: 'Value' },
46
60
  };
47
- function getPivotMetricOptions(pivot) {
61
+ function getPivotMetricOptions(pivot, selectedPivotTable, chartType) {
62
+ if (['metric', 'gauge'].includes(chartType) && selectedPivotTable) {
63
+ return selectedPivotTable.columns.map((elem) => ({
64
+ label: elem.field === pivot?.rowField
65
+ ? `Pivot Row (${elem.field})`
66
+ : elem.field,
67
+ value: elem.field,
68
+ }));
69
+ }
48
70
  if (!pivot.rowField) {
49
71
  const valueField = (0, pivotConstructor_1.disambiguatedValueField)(pivot);
50
72
  return [
@@ -83,17 +105,26 @@ function createInitialFormData(columns) {
83
105
  chartType: firstNumberColumn ? 'line' : 'table',
84
106
  pivot: null,
85
107
  template: true,
108
+ referenceLines: [],
86
109
  };
87
110
  return formEmptyState;
88
111
  }
89
112
  function getChartTypeOptions(formData, dashboard) {
90
113
  let viableCharts = CHART_TYPES;
91
114
  if (dashboard && dashboard.dateFilter && dashboard.dateFilter.comparison) {
92
- viableCharts = viableCharts.filter((chart) => !['table', 'metric', 'bar', 'pie'].includes(chart));
115
+ viableCharts = viableCharts.filter((chart) => ![
116
+ 'table',
117
+ 'metric',
118
+ 'gauge',
119
+ 'bar',
120
+ 'pie',
121
+ 'US map',
122
+ 'World map',
123
+ ].includes(chart));
93
124
  }
94
125
  if (formData.pivot && !formData.pivot.rowField) {
95
126
  return viableCharts
96
- .filter((elem) => elem === 'metric' || elem === 'table')
127
+ .filter((elem) => ['table', 'metric', 'gauge'].includes(elem))
97
128
  .map((elem) => ({
98
129
  label: elem,
99
130
  value: elem,
@@ -101,14 +132,16 @@ function getChartTypeOptions(formData, dashboard) {
101
132
  }
102
133
  else {
103
134
  return viableCharts
104
- .filter((elem) => !((formData.pivot && elem === 'metric') ||
105
- (formData.pivot &&
106
- formData.pivot.columnField &&
107
- (elem === 'bar' || elem === 'pie'))))
135
+ .filter((elem) => !(formData.pivot &&
136
+ formData.pivot.columnField &&
137
+ (elem === 'bar' ||
138
+ elem === 'pie' ||
139
+ elem === 'US map' ||
140
+ elem === 'World map')))
108
141
  .map((elem) => ({ label: elem, value: elem }));
109
142
  }
110
143
  }
111
- function createReportFromForm(formData, report, selectedPivotTable, rows = [], filtersApplied = []) {
144
+ function createReportFromForm(formData, report, selectedPivotTable, rows = [], filtersApplied = [], referenceLineQueryResults) {
112
145
  const newReport = (0, report_1.convertInternalReportToReport)((0, merge_1.mergeComparisonRange)({
113
146
  ...formData,
114
147
  dashboardName: formData.dashboardName || '',
@@ -128,6 +161,18 @@ function createReportFromForm(formData, report, selectedPivotTable, rows = [], f
128
161
  pivotColumns: selectedPivotTable?.columns ?? undefined,
129
162
  pivotRows: selectedPivotTable?.rows ?? undefined,
130
163
  columnInternal: report?.columnInternal ?? [],
164
+ referenceLines: formData.referenceLines?.map((elem) => ({
165
+ label: elem.label,
166
+ query: elem.label === constants_1.REFERENCE_LINE
167
+ ? [Number(elem.y1) || 0, Number(elem.y2) || 0]
168
+ : elem.label,
169
+ })) || [],
170
+ referenceLineYValues: formData.referenceLines?.map((elem, index) => ({
171
+ label: elem.label,
172
+ query: elem.label === constants_1.REFERENCE_LINE
173
+ ? [Number(elem.y1) || 0, Number(elem.y2) || 0]
174
+ : referenceLineQueryResults?.[index],
175
+ })) || [],
131
176
  }), filtersApplied);
132
177
  return newReport;
133
178
  }
@@ -163,7 +208,7 @@ const DATE_OPTIONS = [
163
208
  { value: 'MMM_dd_hh:mm_ap_pm', label: 'day and time' },
164
209
  { value: 'hh_ap_pm', label: 'hour' },
165
210
  ];
166
- const formatOptions = [
211
+ const ALL_FORMAT_OPTIONS = [
167
212
  ...NUMBER_OPTIONS,
168
213
  ...DATE_OPTIONS,
169
214
  { value: 'string', label: 'string' },
@@ -246,9 +291,9 @@ function ChartBuilderWithModal(props) {
246
291
  */
247
292
  function ChartBuilder({ TextInputComponent = UiComponents_1.QuillTextInput, SelectComponent = QuillSelect_1.QuillSelectComponent,
248
293
  // 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,
294
+ 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, hidePivotForm = false, onAddToDashboardComplete, onDelete, onDiscardChanges, reportId, tempReport, recommendedPivots: rp = [], createdPivots: cp = [], dateColumn, buttonLabel, organizationName, hideDeleteButton = false, hideSubmitButton = false, hideDateRangeFilter = false, showTableFormatOptions, initialUniqueValues, initialUniqueValuesIsLoading, pivotRecommendationsEnabled = true, hideTableView = false, hideChartView = false, hideChartType = false, hideDiscardChanges = false, filtersEnabled, onFiltersEnabledChanged,
250
295
  // isLoading,
251
- onClickChartElement, isEditingMode = false, disableSort = true, }) {
296
+ destinationDashboard, onClickChartElement, isEditingMode = false, disableSort = true, }) {
252
297
  const [client] = (0, react_1.useContext)(Context_1.ClientContext);
253
298
  const [theme] = (0, react_1.useContext)(Context_1.ThemeContext);
254
299
  const [schemaData] = (0, react_1.useContext)(Context_1.SchemaDataContext);
@@ -272,14 +317,14 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
272
317
  const inputRef = (0, react_1.useRef)(null);
273
318
  const selectRef = (0, react_1.useRef)(null);
274
319
  const processColumns = (columns) => {
275
- if (schemaData.schema) {
320
+ if (schemaData.schemaWithCustomFields) {
276
321
  const newProcessedColumns = columns?.map((col) => {
277
322
  if (col.jsType) {
278
323
  return col;
279
324
  }
280
325
  const newCol = { ...col };
281
326
  let foundColumn;
282
- schemaData.schema.forEach((table) => {
327
+ schemaData.schemaWithCustomFields.forEach((table) => {
283
328
  if (table.columns) {
284
329
  const matchedColumn = table.columns.find((c) => c.field === col.field);
285
330
  if (matchedColumn) {
@@ -364,6 +409,9 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
364
409
  const [isEdittingPivot, setIsEdittingPivot] = (0, react_1.useState)(false);
365
410
  const [selectedPivotIndex, setSelectedPivotIndex] = (0, react_1.useState)(-1);
366
411
  const [tableName, setTableName] = (0, react_1.useState)(undefined);
412
+ const [includeCustomFields, setIncludeCustomFields] = (0, react_1.useState)(report
413
+ ? !!report.includeCustomFields
414
+ : !!client?.featureFlags?.customFieldsEnabled);
367
415
  const selectedTable = schemaData.schema?.find((t) => t.displayName === tableName);
368
416
  const [pivotPopUpTitle, setPivotPopUpTitle] = (0, react_1.useState)('Add pivot');
369
417
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
@@ -378,7 +426,7 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
378
426
  }
379
427
  : undefined;
380
428
  const columns = report?.columnInternal ?? [];
381
- const destinationDashboard = report?.dashboardName;
429
+ const destinationDashboardName = destinationDashboard || report?.dashboardName;
382
430
  const query = report?.queryString;
383
431
  const [loadingFormData, setLoadingFormData] = (0, react_1.useState)(false);
384
432
  const [triggeredEditChart, setTriggeredEditChart] = (0, react_1.useState)(false);
@@ -386,11 +434,13 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
386
434
  const [recommendedPivots, setRecommendedPivots] = (0, react_1.useState)(rp);
387
435
  const [pivotRowField, setPivotRowField] = (0, react_1.useState)(report?.pivot?.rowField);
388
436
  const [pivotColumnField, setPivotColumnField] = (0, react_1.useState)(report?.pivot?.columnField);
389
- const [pivotAggregations, setPivotAggregations] = (0, react_1.useState)(report?.pivot?.aggregations ?? [{
437
+ const [pivotAggregations, setPivotAggregations] = (0, react_1.useState)(report?.pivot?.aggregations ?? [
438
+ {
390
439
  valueField: report?.pivot?.valueField,
391
440
  valueField2: report?.pivot?.valueField2,
392
- aggregationType: report?.pivot?.aggregationType
393
- }]);
441
+ aggregationType: report?.pivot?.aggregationType,
442
+ },
443
+ ]);
394
444
  const baseProcessing = {
395
445
  page: report?.pagination ?? {
396
446
  page: 0,
@@ -405,6 +455,7 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
405
455
  const [allTables, setAllTables] = (0, react_1.useState)([]);
406
456
  const [customFieldTableRef, setCustomFieldTableRef] = (0, react_1.useState)(false);
407
457
  const [referencedColumns, setReferencedColumns] = (0, react_1.useState)({});
458
+ const [referencedColumnsWithoutStar, setReferencedColumnsWithoutStar] = (0, react_1.useState)({});
408
459
  const [filterMap, setFilterMap] = (0, react_1.useState)(report?.filterMap ?? {});
409
460
  const canonicalFilterMap = (0, react_1.useMemo)(() => {
410
461
  return Object.fromEntries(Object.entries(filterMap).filter((f) => f[1].table !== undefined && f[1].field !== undefined));
@@ -417,7 +468,7 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
417
468
  }
418
469
  acc[filter.label] =
419
470
  !!allTables.find((table) => table === (filterMap[filter.label] ?? filter).table) &&
420
- !!schemaData.schema
471
+ !!schemaData.schemaWithCustomFields
421
472
  ?.find((table) => {
422
473
  return (table.displayName === (filterMap[filter.label] ?? filter).table);
423
474
  })
@@ -461,6 +512,7 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
461
512
  pivot: null,
462
513
  dateField: defaultDateField,
463
514
  template: true,
515
+ referenceLines: [],
464
516
  };
465
517
  const updateDashboardFilters = async (dashboardName) => {
466
518
  if (dashboardConfig && dashboardConfig[dashboardName]) {
@@ -501,8 +553,8 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
501
553
  const pivotFormData = (pivot) => {
502
554
  const yAxisField = pivot.columnField ?? (0, pivotConstructor_1.disambiguatedValueField)(pivot) ?? '';
503
555
  const yAxisLabel = report?.yAxisFields && report?.yAxisFields?.length > 0
504
- ? report.yAxisFields[0]?.label ?? ''
505
- : (0, pivotConstructor_1.disambiguatedValueField)(pivot) ?? '';
556
+ ? (report.yAxisFields[0]?.label ?? '')
557
+ : ((0, pivotConstructor_1.disambiguatedValueField)(pivot) ?? '');
506
558
  // date labels for pivots should be treated like strings since they are
507
559
  const yAxisIsDate = pivot.columnField
508
560
  ? (0, PivotModal_1.isDateField)(pivot.columnFieldType ?? '')
@@ -511,12 +563,14 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
511
563
  const result = {
512
564
  pivot,
513
565
  chartType: chartType,
514
- xAxisField: pivot.rowField ? pivot.rowField : (0, pivotConstructor_1.disambiguatedValueField)(pivot),
515
- xAxisFormat: (0, PivotModal_1.isDateField)(pivot.rowFieldType ?? '')
566
+ xAxisField: pivot.rowField
567
+ ? pivot.rowField
568
+ : (0, pivotConstructor_1.disambiguatedValueField)(pivot),
569
+ xAxisFormat: (0, columnProcessing_1.isDateType)(pivot.rowFieldType ?? '')
516
570
  ? 'string'
517
- : report?.columns.find((col) => col.field === pivot.rowField)?.format ||
518
- report?.xAxisFormat ||
519
- 'whole_number',
571
+ : (0, columnProcessing_1.isNumberType)(pivot.rowFieldType ?? '')
572
+ ? 'whole_number'
573
+ : 'string',
520
574
  xAxisLabel: report?.xAxisLabel || pivot.rowField,
521
575
  yAxisFields: [
522
576
  {
@@ -525,43 +579,71 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
525
579
  format: yAxisIsDate
526
580
  ? 'string'
527
581
  : 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',
582
+ ? (report?.yAxisFields[0]?.format ?? 'whole_number')
583
+ : (report?.columns.find((col) => col.field === (0, pivotConstructor_1.disambiguatedValueField)(pivot))?.format ?? 'whole_number'),
531
584
  },
532
585
  ],
533
586
  };
534
587
  return result;
535
588
  };
536
- const getReferencedTables = async (client, sqlQuery, dbTables) => {
589
+ const getReferencedTables = async (client, sqlQuery, dbTables, skipStar) => {
537
590
  const resp = await getDataFromCloud(client, `astify`, {
538
591
  query: sqlQuery,
539
592
  publicKey: client.publicKey,
540
593
  useNewNodeSql: true,
541
594
  });
542
595
  if (resp.success === false) {
543
- return (0, astProcessing_1.getTablesHelper)((0, astProcessing_1.getSelectFromAST)({}), dbTables);
596
+ return (0, astProcessing_1.getTablesHelper)((0, astProcessing_1.getSelectFromAST)({}), dbTables, skipStar);
544
597
  }
545
- return (0, astProcessing_1.getTablesHelper)((0, astProcessing_1.getSelectFromAST)(resp.ast), dbTables);
598
+ return (0, astProcessing_1.getTablesHelper)((0, astProcessing_1.getSelectFromAST)(resp.ast), dbTables, skipStar);
546
599
  };
547
600
  const formFormDataFromReport = (report) => {
548
- let pivotData = {};
601
+ // let pivotData = {};
549
602
  let dateField = defaultDateField;
550
- if (report?.pivot) {
551
- pivotData = pivotFormData(report.pivot);
552
- }
603
+ // if (report?.pivot) {
604
+ // pivotData = pivotFormData(report.pivot);
605
+ // }
553
606
  if (report) {
554
607
  dateField = report.dateField || defaultDateField;
555
608
  }
556
609
  return {
557
610
  ...formEmptyState,
558
611
  ...report,
559
- ...pivotData,
560
- ...(report?.dashboardName && { dashboardName: report?.dashboardName }),
612
+ // ...pivotData,
561
613
  dateField: dateField,
614
+ referenceLines: report?.referenceLines
615
+ ? report.referenceLines?.map(({ label, query }) => {
616
+ if (typeof query === 'string') {
617
+ return { label, y1: undefined, y2: undefined };
618
+ }
619
+ return {
620
+ label,
621
+ y1: query[0],
622
+ y2: query[1],
623
+ };
624
+ })
625
+ : [],
562
626
  };
563
627
  };
564
628
  const [formData, setFormData] = (0, react_1.useState)(formFormDataFromReport(report));
629
+ const reportCustomFields = (0, react_1.useMemo)(() => {
630
+ return (report?.columnsWithCustomFields?.filter((col) => !report?.columns?.some((c) => col.field === c.field)) ?? []);
631
+ }, [report?.columnsWithCustomFields, report?.columns]);
632
+ const referenceLineQueryResults = (0, react_1.useMemo)(() => {
633
+ return formData?.referenceLines?.map((line) => {
634
+ if (line.label === constants_1.REFERENCE_LINE) {
635
+ return [Number(line.y1) || 0, Number(line.y2) || 0];
636
+ }
637
+ // line.label is a field
638
+ // Get the first and last row of the field
639
+ const field = formData.columns.find((col) => col.field === line.label);
640
+ if (!field) {
641
+ return [0, 0];
642
+ }
643
+ // return [Number(rows[0]?.[field.field]) || 0, Number(rows[rows.length - 1]?.[field.field]) || 0];
644
+ return (pivotData?.rows ? pivotData.rows : rows).map((row) => Number(row[field.field]) || 0);
645
+ });
646
+ }, [formData?.referenceLines]);
565
647
  const currentDashboard = (0, react_1.useMemo)(() => {
566
648
  return dashboardConfig[formData.dashboardName ?? report?.dashboardName ?? '']?.config;
567
649
  }, [dashboardConfig, formData.dashboardName, report?.dashboardName]);
@@ -569,6 +651,19 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
569
651
  return (currentDashboard?.tenantKeys?.map((tenantKey) => client?.allTenantTypes?.find((t) => t.tenantField === tenantKey)) ?? []);
570
652
  }, [client?.allTenantTypes, currentDashboard?.tenantKeys]);
571
653
  const dashboardOwner = currentDashboardTenants?.[0];
654
+ const currentTenantAsFormFlags = (0, react_1.useMemo)(() => {
655
+ if (!tenants || !tenants.length) {
656
+ return undefined;
657
+ }
658
+ const tenantField = typeof tenants[0] !== 'object'
659
+ ? dashboardOwner?.name
660
+ : tenants[0]?.tenantField;
661
+ if (!tenantField) {
662
+ return undefined;
663
+ }
664
+ const tenantIds = typeof tenants[0] !== 'object' ? tenants : tenants[0]?.tenantIds;
665
+ return { [tenantField]: tenantIds };
666
+ }, [tenants, dashboardOwner]);
572
667
  const invalidColumns = (0, react_1.useMemo)(() => {
573
668
  if (!rows || !rows.length) {
574
669
  return [];
@@ -583,6 +678,62 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
583
678
  const data = formFormDataFromReport(report);
584
679
  return getChartTypeOptions(data, dashboardConfig[data.dashboardName || '']);
585
680
  })());
681
+ const reportContainsCustomFields = (0, react_1.useMemo)(() => {
682
+ // Check whether report query contains custom fields
683
+ const customFieldsMap = schemaData.customFields;
684
+ const reportQueryContainsCustomFields = allTables.some((table) => {
685
+ const tableColumns = referencedColumnsWithoutStar[table] ?? [];
686
+ const customFieldColumns = customFieldsMap?.[table] ?? [];
687
+ return tableColumns.some((column) => customFieldColumns.some((field) => field.field === column));
688
+ });
689
+ return reportQueryContainsCustomFields;
690
+ }, [allTables, referencedColumnsWithoutStar]);
691
+ const chartBuilderFormDataContainsCustomFields = (0, react_1.useMemo)(() => {
692
+ const customFields = allTables
693
+ .map((table) => schemaData.customFields?.[table] ?? [])
694
+ .flat();
695
+ const customFieldsMap = schemaData.customFields;
696
+ const pivotContainsCustomFields = customFields.some((field) => field.field === formData.pivot?.columnField ||
697
+ field.field === formData.pivot?.rowField ||
698
+ field.field === formData.pivot?.valueField);
699
+ const xAxisFieldContainsCustomFields = customFields.some((field) => field.field === formData.xAxisField);
700
+ const yAxisFieldsContainsCustomFields = formData.yAxisFields.some((yAxisField) => {
701
+ return customFields.some((field) => field.field === yAxisField.field);
702
+ });
703
+ const dateFieldContainsCustomFields = customFields.some((field) => field.field === formData.dateField?.field);
704
+ const canonicalFilterMapContainsCustomFields = Object.values(canonicalFilterMap).some((filter) => {
705
+ return customFieldsMap?.[filter.table || '']?.some((field) => field.field === filter.field);
706
+ });
707
+ return (pivotContainsCustomFields ||
708
+ xAxisFieldContainsCustomFields ||
709
+ yAxisFieldsContainsCustomFields ||
710
+ dateFieldContainsCustomFields ||
711
+ canonicalFilterMapContainsCustomFields);
712
+ }, [
713
+ allTables,
714
+ formData.pivot,
715
+ formData.xAxisField,
716
+ formData.yAxisFields,
717
+ formData.dateField,
718
+ canonicalFilterMap,
719
+ ]);
720
+ const customFieldsInTabularColumns = (0, react_1.useMemo)(() => {
721
+ const customFields = allTables
722
+ .map((table) => schemaData.customFields?.[table] ?? [])
723
+ .flat();
724
+ return formData.columns.some((col) => {
725
+ return customFields.some((field) => field.field === col.field);
726
+ });
727
+ }, [allTables, formData.columns]);
728
+ const containsCustomFields = (0, react_1.useMemo)(() => {
729
+ return (reportContainsCustomFields ||
730
+ customFieldsInTabularColumns ||
731
+ chartBuilderFormDataContainsCustomFields);
732
+ }, [
733
+ reportContainsCustomFields,
734
+ customFieldsInTabularColumns,
735
+ chartBuilderFormDataContainsCustomFields,
736
+ ]);
586
737
  (0, react_1.useEffect)(() => {
587
738
  if (!loadingFormData && triggeredEditChart) {
588
739
  editChart();
@@ -608,24 +759,25 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
608
759
  { label: 'New - Dashboard', value: 'New - Dashboard' },
609
760
  ];
610
761
  }
611
- if (destinationDashboard) {
762
+ if (destinationDashboardName) {
612
763
  dashboardOptions = [
613
- { label: destinationDashboard, value: destinationDashboard },
764
+ { label: destinationDashboardName, value: destinationDashboardName },
614
765
  ];
615
766
  }
616
767
  let dashboardName = report?.dashboardName ?? dashboardOptions[0]?.label ?? '';
617
- if (destinationDashboard) {
618
- dashboardName = destinationDashboard;
768
+ if (destinationDashboardName) {
769
+ dashboardName = destinationDashboardName;
619
770
  }
620
771
  const curDashboard = await updateDashboardFilters(dashboardName);
621
772
  setDashboardOptions(dashboardOptions);
622
773
  curFormData.dashboardName = dashboardName;
623
- const curSchemaData = schemaData.schema;
774
+ const curSchemaData = schemaData.schemaWithCustomFields;
624
775
  if (!query) {
625
776
  setLoadingFormData(false);
626
777
  return;
627
778
  }
628
779
  const result = await getReferencedTables(client, query, curSchemaData);
780
+ const referencedTablesWithoutStar = await getReferencedTables(client, query, curSchemaData, true);
629
781
  setDateFieldOptions(result.dateFields);
630
782
  if (result.dateFields[0] && result.dateFields[0].columns[0]) {
631
783
  setDefaultDateField({
@@ -649,6 +801,11 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
649
801
  acc[table.name] = table.columns.map((col) => col.field);
650
802
  return acc;
651
803
  }, {});
804
+ const referencedColumnsWithoutStar = referencedTablesWithoutStar.referencedTablesAndColumns.reduce((acc, table) => {
805
+ acc[table.name] = table.columns.map((col) => col.field);
806
+ return acc;
807
+ }, {});
808
+ setReferencedColumnsWithoutStar(referencedColumnsWithoutStar);
652
809
  setReferencedColumns(referencedColumns);
653
810
  setTableName(result.dateFields[0]?.name);
654
811
  const dateField = {
@@ -706,12 +863,21 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
706
863
  };
707
864
  }, [selectedPivotTable, formData.pivot]);
708
865
  const chartData = (0, react_1.useMemo)(() => {
709
- const data = createReportFromForm(formData, report ? { ...report, rowCount } : tempReport, selectedPivotTable, rows, currentDashboardFilters);
866
+ const data = createReportFromForm(formData, report ? { ...report, rowCount } : tempReport, selectedPivotTable, rows, currentDashboardFilters, referenceLineQueryResults);
710
867
  return {
711
868
  ...data,
712
869
  filterMap: canonicalFilterMap,
713
870
  };
714
871
  }, [formData, selectedPivotTable, report, rows, rowCount]);
872
+ const xAxisFormatOptions = (0, react_1.useMemo)(() => {
873
+ return chartData?.chartType === 'gauge'
874
+ ? [
875
+ { value: 'whole_number', label: 'whole number' },
876
+ { value: 'two_decimal_places', label: 'two decimal places' },
877
+ { value: 'percent', label: 'percentage' },
878
+ ]
879
+ : ALL_FORMAT_OPTIONS;
880
+ }, [chartData?.chartType]);
715
881
  const fetchPivotData = async (pivot, tableInfo, uniqueValues, overrideFilters) => {
716
882
  const dashboardFilters = filtersEnabled
717
883
  ? (overrideFilters ?? currentDashboardFilters)
@@ -739,7 +905,7 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
739
905
  : undefined,
740
906
  client,
741
907
  uniqueValues,
742
- dashboardName: destinationDashboard,
908
+ dashboardName: destinationDashboardName,
743
909
  tenants,
744
910
  additionalProcessing: baseProcessing,
745
911
  });
@@ -760,11 +926,10 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
760
926
  if (selectedPivotTable &&
761
927
  selectedPivotTable.columns &&
762
928
  formData.chartType === 'table') {
763
- console.log('selectedPivotTable', selectedPivotTable);
764
929
  const columns = selectedPivotTable.columns;
765
930
  columns.forEach((col, index) => {
766
931
  // ADD THE RIGHT FIELD TYPE FOR THE VALUE COLUMNS
767
- if ((['min', 'max'].includes(formData.pivot?.aggregations?.[0]?.aggregationType ?? '')) &&
932
+ if (['min', 'max'].includes(formData.pivot?.aggregations?.[0]?.aggregationType ?? '') &&
768
933
  index !== 0) {
769
934
  col.format = 'two_decimal_places';
770
935
  }
@@ -785,12 +950,17 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
785
950
  if (!rows)
786
951
  return [];
787
952
  return rows.map((row) => {
788
- return formData.columns.reduce((formattedRow, column) => {
953
+ const columns = formData.includeCustomFields && !containsCustomFields
954
+ ? formData.columns.concat(reportCustomFields)
955
+ : formData.columns;
956
+ return columns.reduce((formattedRow, column) => {
789
957
  // Apply the format function to each field in the row
790
- const formattedValue = (0, valueFormatter_1.quillFormat)({
791
- value: row[column.field],
792
- format: column.format,
793
- });
958
+ const formattedValue = column.inferFormat
959
+ ? (0, valueFormatter_1.quillAutoFormat)(row[column.field])
960
+ : (0, valueFormatter_1.quillFormat)({
961
+ value: row[column.field],
962
+ format: column.format,
963
+ });
794
964
  formattedRow[column.field] = formattedValue;
795
965
  return formattedRow;
796
966
  }, {});
@@ -821,7 +991,7 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
821
991
  rowsOnly: false,
822
992
  rowCountOnly: true,
823
993
  filterMap: canonicalFilterMap,
824
- dashboardName: destinationDashboard,
994
+ dashboardName: destinationDashboardName,
825
995
  });
826
996
  if (tableInfo.rowCount !== undefined) {
827
997
  setRowCount(tableInfo.rowCount);
@@ -873,7 +1043,7 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
873
1043
  rowsOnly: true,
874
1044
  rowCountOnly: false,
875
1045
  filterMap: canonicalFilterMap,
876
- dashboardName: destinationDashboard,
1046
+ dashboardName: destinationDashboardName,
877
1047
  });
878
1048
  setCurrentProcessing(processing);
879
1049
  setRows(tableInfo.rows);
@@ -882,7 +1052,7 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
882
1052
  fetchRowCount(processing, overrideFilters);
883
1053
  if (formData.pivot) {
884
1054
  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);
1055
+ 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, destinationDashboardName);
886
1056
  fetchPivotData(formData.pivot, tableInfo, uniqueValues, overrideFilters);
887
1057
  }
888
1058
  catch (e) {
@@ -949,7 +1119,7 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
949
1119
  rowsOnly: false,
950
1120
  rowCountOnly: false,
951
1121
  filterMap: canonicalFilterMap,
952
- dashboardName: destinationDashboard,
1122
+ dashboardName: destinationDashboardName,
953
1123
  pivot: isPivotTable ? report.pivot : undefined,
954
1124
  getPivotRowCount: false,
955
1125
  });
@@ -997,8 +1167,20 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
997
1167
  else if (index !== undefined) {
998
1168
  // For dynamic array fields
999
1169
  const [field, subfield] = fieldName.split('.');
1170
+ let newLabel = undefined;
1171
+ if (field === 'columns' && subfield === 'field') {
1172
+ if (!formData['columns'][index]?.label) {
1173
+ newLabel = (0, textProcessing_1.snakeAndCamelCaseToTitleCase)(value);
1174
+ }
1175
+ }
1000
1176
  // @ts-ignore
1001
- const updatedArray = formData[field].map((item, i) => i === index ? { ...item, [subfield]: value } : item);
1177
+ const updatedArray = formData[field].map((item, i) => i === index
1178
+ ? {
1179
+ ...item,
1180
+ label: newLabel ? newLabel : item.label,
1181
+ [subfield]: value,
1182
+ }
1183
+ : item);
1002
1184
  updatedForm = { ...formData, [field]: updatedArray };
1003
1185
  setFormData(updatedForm);
1004
1186
  setChartTypes(getChartTypeOptions(updatedForm, dashboardConfig[updatedForm.dashboardName ?? '']));
@@ -1035,7 +1217,7 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
1035
1217
  else if (field === 'dateField' &&
1036
1218
  subfield === 'table' &&
1037
1219
  !formData.dateField?.field) {
1038
- const field = schemaData.schema?.find((elem) => elem.name === value)?.columns?.[0]?.field;
1220
+ const field = schemaData.schemaWithCustomFields?.find((elem) => elem.name === value)?.columns?.[0]?.field;
1039
1221
  updatedForm.dateField = {
1040
1222
  // @ts-ignore
1041
1223
  ...updatedForm[field],
@@ -1053,6 +1235,14 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
1053
1235
  // For simple fields
1054
1236
  updatedForm = { ...updatedForm, [fieldName]: value };
1055
1237
  }
1238
+ if (fieldName === 'chartType') {
1239
+ if (value === 'metric') {
1240
+ updatedForm.xAxisFormat = 'whole_number';
1241
+ }
1242
+ else if (value === 'gauge') {
1243
+ updatedForm.xAxisFormat = 'percent';
1244
+ }
1245
+ }
1056
1246
  let dashboardName = updatedForm.dashboardName;
1057
1247
  if (fieldName === 'dashboardName') {
1058
1248
  dashboardName = value;
@@ -1104,6 +1294,11 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
1104
1294
  ...formData,
1105
1295
  dashboardName: formData.dashboardName,
1106
1296
  pivot: null,
1297
+ chartType: formEmptyState.chartType,
1298
+ xAxisField: formEmptyState.xAxisField,
1299
+ xAxisFormat: formEmptyState.xAxisFormat,
1300
+ xAxisLabel: formEmptyState.xAxisLabel,
1301
+ yAxisFields: formEmptyState.yAxisFields,
1107
1302
  });
1108
1303
  // maybe validate
1109
1304
  setSelectedPivotTable(undefined);
@@ -1113,7 +1308,10 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
1113
1308
  if (fieldName === 'columns') {
1114
1309
  setFormData({
1115
1310
  ...formData,
1116
- columns: [...formData.columns, { label: '', field: '', format: 'whole_number' }],
1311
+ columns: [
1312
+ ...formData.columns,
1313
+ { label: '', field: '', format: 'string' },
1314
+ ],
1117
1315
  });
1118
1316
  }
1119
1317
  else if (fieldName === 'yAxisFields') {
@@ -1121,7 +1319,7 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
1121
1319
  ...formData,
1122
1320
  yAxisFields: [
1123
1321
  ...formData.yAxisFields,
1124
- { label: '', field: '', format: 'whole_number' },
1322
+ { label: '', field: '', format: 'string' },
1125
1323
  ],
1126
1324
  });
1127
1325
  }
@@ -1139,6 +1337,15 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
1139
1337
  },
1140
1338
  });
1141
1339
  }
1340
+ else if (fieldName === 'referenceLines') {
1341
+ setFormData({
1342
+ ...formData,
1343
+ referenceLines: [
1344
+ ...formData.referenceLines,
1345
+ { label: '', y1: undefined, y2: undefined },
1346
+ ],
1347
+ });
1348
+ }
1142
1349
  };
1143
1350
  const handleRemoveField = (fieldName, index) => {
1144
1351
  if (fieldName === 'pivot') {
@@ -1186,31 +1393,40 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
1186
1393
  ...(formData.dateField?.table
1187
1394
  ? {}
1188
1395
  : { dateField: { ...defaultDateField } }),
1189
- ...(formData.dashboardName
1190
- ? {}
1191
- : { dashboardName: report?.dashboardName }),
1396
+ dashboardName: destinationDashboardName,
1192
1397
  query: report?.queryString ?? '',
1193
1398
  pivot: formData.pivot,
1194
1399
  referencedTables: allTables,
1195
1400
  referencedColumns,
1401
+ includeCustomFields: includeCustomFields || containsCustomFields,
1196
1402
  template: tenants
1197
1403
  ? undefined
1198
1404
  : report && !isAdmin && formData.template
1199
1405
  ? false
1200
1406
  : 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,
1407
+ reportFlags: containsCustomFields
1408
+ ? currentTenantAsFormFlags
1409
+ : formFlags
1410
+ ? Object.fromEntries(Object.entries(formFlags)
1411
+ .filter(([, value]) => value.length > 0)
1412
+ .map(([key, value]) => {
1413
+ return [
1414
+ key,
1415
+ Object.keys(allTenantMap).length > 1 &&
1416
+ allTenantMap[key]?.length === value.length
1417
+ ? constants_1.ALL_TENANTS
1418
+ : value,
1419
+ ];
1420
+ }))
1421
+ : undefined,
1422
+ referenceLines: formData.referenceLines.map((line) => {
1423
+ return {
1424
+ label: line.label,
1425
+ query: line.label === constants_1.REFERENCE_LINE
1426
+ ? [Number(line.y1 ?? 0) || 0, Number(line.y2 ?? 0) || 0]
1427
+ : '',
1428
+ };
1429
+ }),
1214
1430
  };
1215
1431
  const resp = await (0, report_1.saveReport)({
1216
1432
  report: { ...newReport, rows: undefined, pivotRows: undefined }, // stop including rows in request
@@ -1270,15 +1486,17 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
1270
1486
  gap: '20px',
1271
1487
  flexDirection: isHorizontalView ? 'row' : 'column',
1272
1488
  boxSizing: 'border-box',
1273
- }, children: [(0, jsx_runtime_1.jsxs)("div", { style: {
1489
+ }, children: [hideChartView ? null : ((0, jsx_runtime_1.jsxs)("div", { style: {
1274
1490
  display: 'flex',
1275
1491
  flexDirection: 'column',
1276
1492
  gap: isOpen ? 16 : 20,
1277
1493
  overflowY: 'scroll',
1278
1494
  height: isHorizontalView || !isOpen ? '100%' : 800,
1279
1495
  ...(isHorizontalView && {
1280
- flexGrow: 1,
1281
- maxWidth: !isOpen ? '100%' : `calc(100% - ${formWidth}px - 20px)`, // width of left sidebar plus gap
1496
+ // flexGrow: 1,
1497
+ width: !isOpen
1498
+ ? '100%'
1499
+ : `calc(100% - ${formWidth}px - 20px)`, // width of left sidebar plus gap
1282
1500
  }),
1283
1501
  ...(!isHorizontalView && isOpen && { width: formWidth }),
1284
1502
  }, children: [!isEditingMode && (report?.adminError || report?.error) ? ((0, jsx_runtime_1.jsx)(ErrorComponent, { label: report.adminError || report.error, onClick: onClickChartError })) : ((isHorizontalView || (!isOpen && windowWidth > 1200)) && ((0, jsx_runtime_1.jsx)(InternalChart_1.default, { report: chartData, filtersEnabled: filtersEnabled, setFiltersEnabled: (hide) => {
@@ -1289,10 +1507,13 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
1289
1507
  // formData.chartType === 'metric'
1290
1508
  // ? 100
1291
1509
  // : `calc(${filtersEnabled ? 50 : 70}%)`,
1292
- ...(isHorizontalView && { flexGrow: formData.chartType !== 'table' ? 1 : 0 }),
1510
+ ...(isHorizontalView && {
1511
+ flexGrow: !['table'].includes(formData.chartType) ? 1 : 0,
1512
+ }),
1293
1513
  }, onClickChartElement: onClickChartElement, filterToggleDisabled: Object.values(validFilter).includes(false), onDashboardFilterChange: onDashboardFilterChange, layoutChanged: isOpen }))),
1294
1514
  // Make sure to display non-pivoted table when using pivot chart
1295
- (isHorizontalView || (!isOpen && windowWidth < 1200)) && ((0, jsx_runtime_1.jsxs)("div", { style: {
1515
+ !hideChartView &&
1516
+ (isHorizontalView || (!isOpen && windowWidth < 1200)) && ((0, jsx_runtime_1.jsxs)("div", { style: {
1296
1517
  width: '100%',
1297
1518
  // height:
1298
1519
  // isHorizontalView || !isOpen
@@ -1306,21 +1527,29 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
1306
1527
  onFiltersEnabledChanged(hide);
1307
1528
  }, colors: theme?.chartColors, loading: false, hideDateRangeFilter: hideDateRangeFilter, isAdmin: isAdmin, containerStyle: {
1308
1529
  width: '100%',
1309
- height: formData.chartType === 'table' ? 200 : formData.chartType === 'metric' ? 300 : 500,
1530
+ height: formData.chartType === 'table'
1531
+ ? 200
1532
+ : formData.chartType === 'metric'
1533
+ ? 300
1534
+ : 500,
1310
1535
  flexGrow: formData.chartType !== 'table' ? 1 : 0,
1311
- }, 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) => {
1536
+ }, onClickChartElement: onClickChartElement, filterToggleDisabled: Object.values(validFilter).includes(false), onDashboardFilterChange: onDashboardFilterChange, layoutChanged: isOpen })), hideTableView ? null : formData.chartType !== 'table' ? ((0, jsx_runtime_1.jsx)(TableComponent, { rows: formattedRows, columns: includeCustomFields && !containsCustomFields
1537
+ ? formData.columns.concat(reportCustomFields)
1538
+ : formData.columns, onPageChange: (page) => {
1312
1539
  onPageChange(page);
1313
1540
  setCurrentPage(page);
1314
1541
  }, onSortChange: (sort) => {
1315
1542
  onSortChange && onSortChange(sort);
1316
- }, currentPage: currentPage, rowCount: rowCount, isLoading: isLoading, rowCountIsLoading: rowCountIsLoading, disableSort: disableSort })) : ((0, jsx_runtime_1.jsx)(TableComponent, { rows: formattedRows, columns: selectedPivotTable
1543
+ }, currentPage: currentPage, rowCount: rowCount, isLoading: isLoading, rowCountIsLoading: rowCountIsLoading, disableSort: disableSort, hideLabels: false })) : ((0, jsx_runtime_1.jsx)(TableComponent, { rows: formattedRows, columns: selectedPivotTable
1317
1544
  ? selectedPivotTable.columns
1318
- : formData.columns, onPageChange: (page) => {
1545
+ : includeCustomFields && !containsCustomFields
1546
+ ? formData.columns.concat(reportCustomFields)
1547
+ : formData.columns, onPageChange: (page) => {
1319
1548
  onPageChange(page, true);
1320
1549
  setCurrentPage(page);
1321
1550
  }, onSortChange: (sort) => {
1322
1551
  onSortChange && onSortChange(sort, true);
1323
- }, currentPage: currentPage, rowCount: selectedPivotTable ? pivotData?.rowCount : rowCount, rowCountIsLoading: rowCountIsLoading, isLoading: isLoading, disableSort: disableSort }))] }))] }), isOpen && ((0, jsx_runtime_1.jsxs)("form", { ref: parentRef, id: "quill-chart-form", onSubmit: handleSubmit, style: {
1552
+ }, currentPage: currentPage, rowCount: selectedPivotTable ? pivotData?.rowCount : rowCount, rowCountIsLoading: rowCountIsLoading, isLoading: isLoading, disableSort: disableSort, hideLabels: false }))] }))] })), isOpen && ((0, jsx_runtime_1.jsxs)("form", { ref: parentRef, id: "quill-chart-form", onSubmit: handleSubmit, style: {
1324
1553
  display: 'flex',
1325
1554
  flexDirection: 'column',
1326
1555
  gap: 20,
@@ -1336,27 +1565,35 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
1336
1565
  paddingTop: modalPadding,
1337
1566
  paddingBottom: modalPadding,
1338
1567
  }),
1339
- }, children: [(0, jsx_runtime_1.jsxs)(FormContainer, { children: [(formData.pivot || formData.chartType !== 'table') &&
1340
- windowWidth < 1200 && ((0, jsx_runtime_1.jsx)(InternalChart_1.default, { report: chartData, filtersEnabled: filtersEnabled, setFiltersEnabled: (hide) => {
1341
- onFiltersEnabledChanged(hide);
1342
- }, colors: theme?.chartColors, loading: false, hideDateRangeFilter: hideDateRangeFilter, isAdmin: isAdmin, containerStyle: {
1343
- width: '100%',
1344
- height: formData.chartType === 'table' ? 200 : formData.chartType === 'metric' ? 300 : 500,
1345
- flexGrow: formData.chartType !== 'table' ? 1 : 0,
1346
- }, 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
1568
+ }, children: [(0, jsx_runtime_1.jsxs)(FormContainer, { children: [hideChartView
1569
+ ? null
1570
+ : (formData.pivot || formData.chartType !== 'table') &&
1571
+ windowWidth < 1200 && ((0, jsx_runtime_1.jsx)(InternalChart_1.default, { report: chartData, filtersEnabled: filtersEnabled, setFiltersEnabled: (hide) => {
1572
+ onFiltersEnabledChanged(hide);
1573
+ }, colors: theme?.chartColors, loading: false, hideDateRangeFilter: hideDateRangeFilter, isAdmin: isAdmin, containerStyle: {
1574
+ width: '100%',
1575
+ height: formData.chartType === 'table'
1576
+ ? 200
1577
+ : formData.chartType === 'metric'
1578
+ ? 300
1579
+ : formData.chartType === 'US map' ||
1580
+ formData.chartType === 'World map'
1581
+ ? 'fit-content'
1582
+ : 500,
1583
+ flexGrow: !['table'].includes(formData.chartType)
1584
+ ? 1
1585
+ : 0,
1586
+ }, 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
1587
  // {...autofocusRefProp}
1348
1588
  , {
1349
1589
  // {...autofocusRefProp}
1350
- id: "chart-builder-name", label: "Name", width: 200, value: formData.name, onChange: (e) => handleChange(e.target.value, 'name'), placeholder: "Name" }) }), showDashboardDropdown && !destinationDashboard && ((0, jsx_runtime_1.jsx)("div", { style: { display: 'flex', flexDirection: 'column' }, children: (0, jsx_runtime_1.jsx)(SelectComponent, { label: "Dashboard", value: formData.dashboardName || '', onChange: async (e) => {
1590
+ id: "chart-builder-name", label: "Name", width: 200, value: formData.name, onChange: (e) => handleChange(e.target.value, 'name'), placeholder: "Name" }) }), showDashboardDropdown && !destinationDashboardName && ((0, jsx_runtime_1.jsx)("div", { style: { display: 'flex', flexDirection: 'column' }, children: (0, jsx_runtime_1.jsx)(SelectComponent, { label: "Dashboard", value: formData.dashboardName || '', onChange: async (e) => {
1351
1591
  handleChange(e.target.value, 'dashboardName');
1352
1592
  await updateDashboardFilters(e.target.value);
1353
1593
  }, options: dashboardOptions.map((elem) => ({
1354
1594
  label: elem.label,
1355
1595
  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: {
1596
+ })), width: 200 }) })), hideChartType ? ((0, jsx_runtime_1.jsx)("div", { style: { 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 }) }))] }), hidePivotForm ? null : ((0, jsx_runtime_1.jsxs)("div", { style: {
1360
1597
  display: 'flex',
1361
1598
  flexDirection: 'column',
1362
1599
  gap: 6,
@@ -1372,33 +1609,43 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
1372
1609
  setShowPivotPopover(true);
1373
1610
  setPivotRowField(formData.pivot?.rowField);
1374
1611
  setPivotColumnField(formData.pivot?.columnField);
1375
- setPivotAggregations(formData.pivot?.aggregations ?? [{
1612
+ setPivotAggregations(formData.pivot?.aggregations ?? [
1613
+ {
1376
1614
  valueField: formData.pivot?.valueField,
1377
1615
  aggregationType: formData.pivot?.aggregationType,
1378
1616
  valueField2: formData.pivot?.valueField2,
1379
- }]);
1617
+ },
1618
+ ]);
1380
1619
  setPivotPopUpTitle('Edit pivot');
1381
- }, 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: {
1620
+ }, selectedPivotIndex: -1, onEditPivot: () => { }, CardComponent: CardComponent, ButtonComponent: ButtonComponent, HeaderComponent: HeaderComponent, showEdit: false, onClose: handleDeletePivot, minHeight: 180, LabelComponent: LabelComponent, TextComponent: TextComponent }) }) }))] })] })), !hideChartView &&
1621
+ (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
1622
  display: 'flex',
1383
1623
  flexDirection: 'column',
1384
- }, 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)
1624
+ }, 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 ??
1625
+ '' }), (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
1626
+ ? getPivotMetricOptions(formData.pivot, selectedPivotTable, formData.chartType)
1386
1627
  : columns.map((elem) => ({
1387
1628
  label: elem.field,
1388
1629
  value: elem.field,
1389
1630
  })), 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'
1631
+ (0, PivotModal_1.isDateField)(formData.xAxisField ?? '')
1632
+ ? 'string'
1392
1633
  : 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'
1634
+ (0, PivotModal_1.isDateField)(formData.xAxisField ?? '')
1635
+ ? [{ value: 'string', label: 'date' }]
1636
+ : 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 ??
1637
+ '' }), (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
1638
+ ? formData.pivot.aggregations?.length
1639
+ ? ((0, pivotConstructor_1.disambiguatedValueField)(formData.pivot) ?? 'count')
1640
+ : 'count'
1397
1641
  : yAxisField.field, onChange: (e) => handleChange(e.target.value, 'yAxisFields.field', index), options: formData.pivot
1398
1642
  ? [
1399
1643
  {
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',
1644
+ label: `Pivot Column (${formData.pivot.aggregations?.length ? ((0, pivotConstructor_1.disambiguatedValueField)(formData.pivot) ?? 'count') : 'count'})`,
1645
+ value: formData.pivot.aggregations
1646
+ ?.length
1647
+ ? ((0, pivotConstructor_1.disambiguatedValueField)(formData.pivot) ?? 'count')
1648
+ : 'count',
1402
1649
  },
1403
1650
  ]
1404
1651
  : columns
@@ -1409,28 +1656,52 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
1409
1656
  label: elem.field,
1410
1657
  value: elem.field,
1411
1658
  })), 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) => {
1659
+ ? (NUMBER_OPTIONS.find((option) => {
1413
1660
  return (option.value === yAxisField.format);
1414
- })?.value ?? NUMBER_OPTIONS[0].value
1661
+ })?.value ?? NUMBER_OPTIONS[0].value)
1415
1662
  : yAxisField.format, onChange: (e) => handleChange(e.target.value, 'yAxisFields.format', index), options: formData.pivot
1416
1663
  ? 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: {
1664
+ : 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'] &&
1665
+ (chartData.chartType === 'line' ||
1666
+ 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),
1667
+ // only include numeric columns
1668
+ options: [
1669
+ {
1670
+ label: 'Custom Values',
1671
+ value: constants_1.REFERENCE_LINE,
1672
+ },
1673
+ ].concat((selectedPivotTable?.columns
1674
+ ? selectedPivotTable.columns
1675
+ : columns)
1676
+ .filter((c) => valueFormatter_1.NUMBER_FORMAT_TYPES.includes(c.format))
1677
+ .map((elem) => ({
1678
+ label: elem.field,
1679
+ value: elem.field,
1680
+ }))) }), 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
1681
  width: '100%',
1419
1682
  height: isHorizontalView || !isOpen ? 'calc(50% - 10px)' : 400,
1420
1683
  flexGrow: 1,
1421
- }, children: formData.chartType !== 'table' ? ((0, jsx_runtime_1.jsx)(TableComponent, { rows: formattedRows, columns: formData.columns, onPageChange: (page) => {
1684
+ }, children: formData.chartType !== 'table' ? ((0, jsx_runtime_1.jsx)(TableComponent, { rows: formattedRows, columns: includeCustomFields && !containsCustomFields
1685
+ ? formData.columns.concat(reportCustomFields)
1686
+ : formData.columns, onPageChange: (page) => {
1422
1687
  onPageChange(page);
1423
1688
  setCurrentPage(page);
1424
1689
  }, onSortChange: (sort) => {
1425
1690
  onSortChange && onSortChange(sort);
1426
- }, currentPage: currentPage, rowCount: rowCount, rowCountIsLoading: rowCountIsLoading, isLoading: isLoading, disableSort: disableSort })) : ((0, jsx_runtime_1.jsx)(TableComponent, { rows: formattedRows, columns: selectedPivotTable
1691
+ }, currentPage: currentPage, rowCount: rowCount, rowCountIsLoading: rowCountIsLoading, isLoading: isLoading, disableSort: disableSort, hideLabels: false })) : ((0, jsx_runtime_1.jsx)(TableComponent, { rows: formattedRows, columns: selectedPivotTable
1427
1692
  ? selectedPivotTable.columns
1428
- : formData.columns, onPageChange: (page) => {
1693
+ : includeCustomFields && !containsCustomFields
1694
+ ? formData.columns.concat(reportCustomFields)
1695
+ : formData.columns, onPageChange: (page) => {
1429
1696
  onPageChange(page, true);
1430
1697
  setCurrentPage(page);
1431
1698
  }, onSortChange: (sort) => {
1432
1699
  onSortChange && onSortChange(sort, true);
1433
- }, currentPage: currentPage, rowCount: selectedPivotTable ? pivotData?.rowCount : rowCount, rowCountIsLoading: rowCountIsLoading, isLoading: isLoading, disableSort: disableSort })) })), (showTableFormatOptions || isAdmin) && ((0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsxs)("div", { style: {
1700
+ }, currentPage: currentPage, rowCount: selectedPivotTable ? pivotData?.rowCount : rowCount, rowCountIsLoading: rowCountIsLoading, isLoading: isLoading, disableSort: disableSort, hideLabels: false })) })), (showTableFormatOptions || isAdmin) && ((0, jsx_runtime_1.jsxs)("div", { style: {
1701
+ display: 'flex',
1702
+ flexDirection: 'column',
1703
+ gap: 6,
1704
+ }, children: [(0, jsx_runtime_1.jsxs)("div", { style: {
1434
1705
  display: 'flex',
1435
1706
  flexDirection: 'column',
1436
1707
  }, children: [(0, jsx_runtime_1.jsx)(HeaderComponent, { label: "Table" }), (0, jsx_runtime_1.jsx)(SubHeaderComponent, { label: "Columns" })] }), (0, jsx_runtime_1.jsxs)(ChartBuilderInputColumnContainer, { children: [formData.pivot &&
@@ -1447,14 +1718,14 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
1447
1718
  column.field === formData.pivot.rowField
1448
1719
  ? formData.pivot &&
1449
1720
  (0, PivotModal_1.isDateField)(formData.pivot.rowFieldType || '')
1450
- ? 'pivot_date'
1721
+ ? 'string'
1451
1722
  : 'string'
1452
1723
  : formData.pivot?.aggregationType ===
1453
1724
  'percentage'
1454
1725
  ? 'percent'
1455
1726
  : 'two_decimal_places', onChange: (e) => handleChange(e.target.value, 'pivotColumn', index), options: formData.pivot && index === 0
1456
1727
  ? (0, PivotModal_1.isDateField)(formData.pivot.rowFieldType || '')
1457
- ? [{ label: 'date', value: 'pivot_date' }]
1728
+ ? [{ label: 'date', value: 'string' }]
1458
1729
  : [{ label: 'string', value: 'string' }]
1459
1730
  : [...NUMBER_OPTIONS], width: 200 })] }, 'column' + index)))
1460
1731
  : 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 +1736,24 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
1465
1736
  : columns.map((elem) => ({
1466
1737
  label: elem.field,
1467
1738
  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: !(
1739
+ })), 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
1740
  // hide when pivoted and chartType === 'table'
1470
1741
  (formData.pivot &&
1471
1742
  selectedPivotTable &&
1472
1743
  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: {
1744
+ formData.chartType === 'table')) && ((0, jsx_runtime_1.jsxs)("div", { style: {
1745
+ display: 'flex',
1746
+ flexDirection: 'row',
1747
+ gap: 10,
1748
+ }, children: [(0, jsx_runtime_1.jsx)(SecondaryButtonComponent, { onClick: () => handleAddField('columns'), label: "Add column +" }), isAdmin &&
1749
+ client?.featureFlags?.customFieldsEnabled && ((0, jsx_runtime_1.jsx)(UiComponents_1.QuillToolTip, { text: "Custom field directly referenced in report", enabled: containsCustomFields, textStyle: {
1750
+ maxWidth: '200px',
1751
+ whiteSpace: 'normal',
1752
+ }, children: (0, jsx_runtime_1.jsx)(CheckboxComponent, { isChecked: containsCustomFields || includeCustomFields, label: "Include Custom Fields", onChange: () => setIncludeCustomFields((prev) => !prev), disabled: containsCustomFields, containerStyle: {
1753
+ height: containsCustomFields
1754
+ ? '100%' // required when wrapped with QuillToolTip
1755
+ : undefined,
1756
+ } }) }))] })) })] })] })), isAdmin && tenants && dashboardOwner && ((0, jsx_runtime_1.jsxs)("div", { style: {
1474
1757
  display: 'flex',
1475
1758
  flexDirection: 'column',
1476
1759
  gap: 12,
@@ -1484,54 +1767,61 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
1484
1767
  width: 'fit-content',
1485
1768
  gap: 12,
1486
1769
  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({
1770
+ }, 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: {
1771
+ maxWidth: '200px',
1772
+ whiteSpace: 'normal',
1773
+ }, children: (0, jsx_runtime_1.jsxs)("div", { style: {
1774
+ outline: '1px solid #E7E7E7',
1775
+ borderRadius: 6,
1776
+ padding: 4,
1777
+ display: 'flex',
1778
+ flexDirection: 'row',
1779
+ marginLeft: 2,
1780
+ backgroundColor: '#FCFCFC',
1781
+ height: 38,
1782
+ width: 'fit-content',
1783
+ }, children: [(0, jsx_runtime_1.jsx)("button", { onClick: () => {
1784
+ if (!containsCustomFields) {
1785
+ setCustomTenantAccess(false);
1786
+ setFormFlags(undefined);
1787
+ }
1788
+ }, style: {
1789
+ width: 95,
1790
+ outline: !(customTenantAccess || containsCustomFields)
1791
+ ? '1px solid #E7E7E7'
1792
+ : undefined,
1793
+ backgroundColor: !(customTenantAccess || containsCustomFields)
1794
+ ? 'white'
1795
+ : undefined,
1796
+ // Center text vertically and horizontally
1797
+ display: 'flex',
1798
+ justifyContent: 'center',
1799
+ alignItems: 'center',
1800
+ borderRadius: 6,
1801
+ fontSize: 14,
1802
+ fontWeight: 500,
1803
+ userSelect: 'none',
1804
+ }, children: "Global" }), (0, jsx_runtime_1.jsx)("button", { onClick: () => {
1805
+ setCustomTenantAccess(true);
1806
+ }, style: {
1807
+ width: 95,
1808
+ outline: customTenantAccess || containsCustomFields
1809
+ ? '1px solid #E7E7E7'
1810
+ : undefined,
1811
+ backgroundColor: customTenantAccess || containsCustomFields
1812
+ ? 'white'
1813
+ : undefined,
1814
+ // Center text vertically and horizontally
1815
+ display: 'flex',
1816
+ justifyContent: 'center',
1817
+ alignItems: 'center',
1818
+ borderRadius: 6,
1819
+ fontSize: 14,
1820
+ fontWeight: 500,
1821
+ userSelect: 'none',
1822
+ }, children: "Custom" })] }) }), client?.allTenantTypes?.length === 1 ? ((0, jsx_runtime_1.jsx)(QuillMultiSelectWithCombo_1.QuillMultiSelectComponentWithCombo, { disabled: containsCustomFields, value: containsCustomFields
1823
+ ? (currentTenantAsFormFlags?.[dashboardOwner.tenantField] ?? []) // Even though value requires string[], turns out flags can be numbers
1824
+ : (formFlags?.[dashboardOwner.tenantField] ?? []), onChange: (e) => setFormFlags({
1535
1825
  ...formFlags,
1536
1826
  [dashboardOwner.tenantField]: e.target
1537
1827
  .value,
@@ -1548,7 +1838,9 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
1548
1838
  })) ?? []), width: 200, emptyLabel: dashboardOwner.scope === 'database'
1549
1839
  ? 'No flags supplied'
1550
1840
  : undefined, allSelectedLabel: 'All ' + dashboardOwner.name + 's', style: {
1551
- display: customTenantAccess ? 'inline' : 'none',
1841
+ display: customTenantAccess || containsCustomFields
1842
+ ? 'inline'
1843
+ : 'none',
1552
1844
  marginTop: -1,
1553
1845
  marginBottom: -4,
1554
1846
  } })) : ((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 +1851,9 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
1559
1851
  acc[tenantType.tenantField] = tenantType.name;
1560
1852
  return acc;
1561
1853
  }, {}) ?? {}, width: 200, allSelectedLabel: 'All ' + dashboardOwner.name + 's', style: {
1562
- display: customTenantAccess ? 'inline' : 'none',
1854
+ display: customTenantAccess || containsCustomFields
1855
+ ? 'inline'
1856
+ : 'none',
1563
1857
  marginTop: -1,
1564
1858
  marginBottom: -4,
1565
1859
  }, owner: dashboardOwner.tenantField }))] }) })] })), specificDashboardFilters.length > 0 && isAdmin && ((0, jsx_runtime_1.jsxs)("div", { style: {
@@ -1568,7 +1862,7 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
1568
1862
  gap: 6,
1569
1863
  }, children: [(0, jsx_runtime_1.jsx)(HeaderComponent, { label: "Dashboard filter fields" }), isAdmin &&
1570
1864
  formData.dateField &&
1571
- dashboardConfig[formData.dashboardName ?? destinationDashboard ?? '']?.config.dateFilter?.label && ((0, jsx_runtime_1.jsxs)(ChartBuilderInputRowContainer, { children: [(0, jsx_runtime_1.jsx)(TextInputComponent, { id: 'filterMap.dateFilter.' +
1865
+ dashboardConfig[formData.dashboardName ?? destinationDashboardName ?? '']?.config.dateFilter?.label && ((0, jsx_runtime_1.jsxs)(ChartBuilderInputRowContainer, { children: [(0, jsx_runtime_1.jsx)(TextInputComponent, { id: 'filterMap.dateFilter.' +
1572
1866
  (dashboardConfig[formData.dashboardName ?? '']
1573
1867
  ?.config.dateFilter?.label ?? 'Date'), value: dashboardConfig[formData.dashboardName ?? '']
1574
1868
  ?.config.dateFilter?.label ?? 'Date', width: 200, onChange: () => { }, label: 'Filter', disabled: true }), (0, jsx_runtime_1.jsx)("div", { style: { display: 'flex', flexDirection: 'column' }, children: (0, jsx_runtime_1.jsx)(SelectComponent, { label: "Virtual Table", value: formData.dateField?.table, onChange: (e) => handleChange(e.target.value, 'dateField.table'), options: dateFieldOptions.map((elem) => ({
@@ -1593,18 +1887,20 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
1593
1887
  .map((filter, index) => ((0, jsx_runtime_1.jsxs)(ChartBuilderInputRowContainer, { children: [(0, jsx_runtime_1.jsx)(TextInputComponent, { id: 'filterMap.' + filter.label, value: filter.label, width: 200, onChange: () => { }, label: index === 0 &&
1594
1888
  !(isAdmin &&
1595
1889
  formData.dateField &&
1596
- dashboardConfig[formData.dashboardName ?? '']?.config.dateFilter?.label)
1890
+ dashboardConfig[formData.dashboardName ?? '']
1891
+ ?.config.dateFilter?.label)
1597
1892
  ? 'Filter'
1598
1893
  : '', disabled: true }), (0, jsx_runtime_1.jsx)(SelectComponent, { label: index === 0 &&
1599
1894
  !(isAdmin &&
1600
1895
  formData.dateField &&
1601
- dashboardConfig[formData.dashboardName ?? '']?.config.dateFilter?.label)
1896
+ dashboardConfig[formData.dashboardName ?? '']
1897
+ ?.config.dateFilter?.label)
1602
1898
  ? 'Virtual Table'
1603
1899
  : '', value: filterMap[filter.label]?.table ?? filter.table, onChange: (e) => setFilterMap({
1604
1900
  ...filterMap,
1605
1901
  [filter.label]: {
1606
1902
  table: e.target.value,
1607
- field: schemaData.schema
1903
+ field: schemaData.schemaWithCustomFields
1608
1904
  .find((t) => t.name == e.target.value)
1609
1905
  ?.columns.find((elem) => elem.field ===
1610
1906
  (filterMap[filter.label]?.field ??
@@ -1616,7 +1912,8 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
1616
1912
  })), width: 200 }), (0, jsx_runtime_1.jsx)(SelectComponent, { label: index === 0 &&
1617
1913
  !(isAdmin &&
1618
1914
  formData.dateField &&
1619
- dashboardConfig[formData.dashboardName ?? '']?.config.dateFilter?.label)
1915
+ dashboardConfig[formData.dashboardName ?? '']
1916
+ ?.config.dateFilter?.label)
1620
1917
  ? 'Field'
1621
1918
  : '', value: filterMap[filter.label]?.field ?? filter.field, onChange: (e) => setFilterMap({
1622
1919
  ...filterMap,
@@ -1625,7 +1922,7 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
1625
1922
  filter.table,
1626
1923
  field: e.target.value,
1627
1924
  },
1628
- }), options: schemaData.schema
1925
+ }), options: schemaData.schemaWithCustomFields
1629
1926
  .find((t) => t.name ==
1630
1927
  (filterMap[filter.label]?.table ??
1631
1928
  filter.table) &&
@@ -1655,11 +1952,15 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
1655
1952
  justifyContent: 'space-between',
1656
1953
  alignItems: 'center',
1657
1954
  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: () => {
1955
+ }, children: [!!filterIssues?.length && ((0, jsx_runtime_1.jsx)(ErrorMessageComponent, { errorMessage: filterIssues[0] || 'Dashboard - Report issues', containerStyle: { height: '100%' } })), (0, jsx_runtime_1.jsxs)("div", { style: {
1956
+ display: 'flex',
1957
+ flexDirection: 'row',
1958
+ gap: 10,
1959
+ backgroundColor: 'white',
1960
+ }, children: [hideDiscardChanges ? null : ((0, jsx_runtime_1.jsx)(SecondaryButtonComponent, { onClick: () => {
1660
1961
  setIsOpen(false);
1661
1962
  onDiscardChanges && onDiscardChanges();
1662
- }, label: 'Discard changes' }), (0, jsx_runtime_1.jsx)(ButtonComponent, { onClick: () => {
1963
+ }, label: 'Discard changes' })), (0, jsx_runtime_1.jsx)(ButtonComponent, { onClick: () => {
1663
1964
  if (loadingFormData) {
1664
1965
  setTriggeredEditChart(true);
1665
1966
  }