@quillsql/react 2.13.25 → 2.13.26

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 (183) hide show
  1. package/dist/cjs/Chart.d.ts +0 -1
  2. package/dist/cjs/Chart.d.ts.map +1 -1
  3. package/dist/cjs/Chart.js +28 -16
  4. package/dist/cjs/ChartBuilder.d.ts +8 -37
  5. package/dist/cjs/ChartBuilder.d.ts.map +1 -1
  6. package/dist/cjs/ChartBuilder.js +402 -189
  7. package/dist/cjs/ChartEditor.d.ts +1 -1
  8. package/dist/cjs/ChartEditor.d.ts.map +1 -1
  9. package/dist/cjs/ChartEditor.js +31 -167
  10. package/dist/cjs/Context.d.ts +13 -2
  11. package/dist/cjs/Context.d.ts.map +1 -1
  12. package/dist/cjs/Context.js +32 -12
  13. package/dist/cjs/Dashboard.d.ts.map +1 -1
  14. package/dist/cjs/Dashboard.js +3 -6
  15. package/dist/cjs/DateRangePicker/QuillDateRangePicker.d.ts +2 -1
  16. package/dist/cjs/DateRangePicker/QuillDateRangePicker.d.ts.map +1 -1
  17. package/dist/cjs/DateRangePicker/QuillDateRangePicker.js +7 -3
  18. package/dist/cjs/ReportBuilder.d.ts +1 -3
  19. package/dist/cjs/ReportBuilder.d.ts.map +1 -1
  20. package/dist/cjs/ReportBuilder.js +120 -137
  21. package/dist/cjs/SQLEditor.d.ts +2 -2
  22. package/dist/cjs/SQLEditor.d.ts.map +1 -1
  23. package/dist/cjs/SQLEditor.js +47 -24
  24. package/dist/cjs/components/Chart/BarChart.js +1 -1
  25. package/dist/cjs/components/Chart/InternalChart.d.ts +25 -0
  26. package/dist/cjs/components/Chart/InternalChart.d.ts.map +1 -0
  27. package/dist/cjs/components/Chart/InternalChart.js +385 -0
  28. package/dist/cjs/components/Chart/LineChart.d.ts.map +1 -1
  29. package/dist/cjs/components/Chart/LineChart.js +3 -1
  30. package/dist/cjs/components/Dashboard/DashboardFilter.d.ts +7 -4
  31. package/dist/cjs/components/Dashboard/DashboardFilter.d.ts.map +1 -1
  32. package/dist/cjs/components/Dashboard/DashboardFilter.js +8 -5
  33. package/dist/cjs/components/Dashboard/DataLoader.d.ts +3 -3
  34. package/dist/cjs/components/Dashboard/DataLoader.d.ts.map +1 -1
  35. package/dist/cjs/components/Dashboard/DataLoader.js +23 -9
  36. package/dist/cjs/components/Dashboard/MetricComponent.js +1 -1
  37. package/dist/cjs/components/QuillMultiSelectWithCombo.js +1 -1
  38. package/dist/cjs/components/ReportBuilder/convert.d.ts.map +1 -1
  39. package/dist/cjs/components/ReportBuilder/convert.js +54 -8
  40. package/dist/cjs/components/ReportBuilder/util.d.ts +1 -0
  41. package/dist/cjs/components/ReportBuilder/util.d.ts.map +1 -1
  42. package/dist/cjs/components/ReportBuilder/util.js +48 -0
  43. package/dist/cjs/components/UiComponents.d.ts +3 -1
  44. package/dist/cjs/components/UiComponents.d.ts.map +1 -1
  45. package/dist/cjs/components/UiComponents.js +4 -4
  46. package/dist/cjs/hooks/useDashboard.d.ts.map +1 -1
  47. package/dist/cjs/hooks/useDashboard.js +13 -0
  48. package/dist/cjs/hooks/useExport.d.ts.map +1 -1
  49. package/dist/cjs/hooks/useExport.js +6 -1
  50. package/dist/cjs/hooks/useQuill.js +9 -9
  51. package/dist/cjs/internals/ReportBuilder/PivotList.js +1 -1
  52. package/dist/cjs/internals/ReportBuilder/PivotModal.d.ts +3 -2
  53. package/dist/cjs/internals/ReportBuilder/PivotModal.d.ts.map +1 -1
  54. package/dist/cjs/internals/ReportBuilder/PivotModal.js +3 -8
  55. package/dist/cjs/models/Report.d.ts +9 -2
  56. package/dist/cjs/models/Report.d.ts.map +1 -1
  57. package/dist/cjs/models/Report.js +2 -0
  58. package/dist/cjs/models/Tables.d.ts +5 -6
  59. package/dist/cjs/models/Tables.d.ts.map +1 -1
  60. package/dist/cjs/utils/astProcessing.d.ts.map +1 -1
  61. package/dist/cjs/utils/astProcessing.js +1 -0
  62. package/dist/cjs/utils/columnProcessing.d.ts +1 -0
  63. package/dist/cjs/utils/columnProcessing.d.ts.map +1 -1
  64. package/dist/cjs/utils/columnProcessing.js +4 -0
  65. package/dist/cjs/utils/constants.d.ts.map +1 -1
  66. package/dist/cjs/utils/constants.js +6 -2
  67. package/dist/cjs/utils/dashboard.d.ts +1 -1
  68. package/dist/cjs/utils/dashboard.d.ts.map +1 -1
  69. package/dist/cjs/utils/dashboard.js +13 -18
  70. package/dist/cjs/utils/dataFetcher.d.ts.map +1 -1
  71. package/dist/cjs/utils/dataFetcher.js +2 -2
  72. package/dist/cjs/utils/filterProcessing.d.ts +5 -2
  73. package/dist/cjs/utils/filterProcessing.d.ts.map +1 -1
  74. package/dist/cjs/utils/filterProcessing.js +5 -2
  75. package/dist/cjs/utils/merge.d.ts.map +1 -1
  76. package/dist/cjs/utils/merge.js +0 -4
  77. package/dist/cjs/utils/paginationProcessing.d.ts +1 -1
  78. package/dist/cjs/utils/paginationProcessing.d.ts.map +1 -1
  79. package/dist/cjs/utils/paginationProcessing.js +1 -4
  80. package/dist/cjs/utils/pivotConstructor.d.ts +3 -2
  81. package/dist/cjs/utils/pivotConstructor.d.ts.map +1 -1
  82. package/dist/cjs/utils/pivotConstructor.js +16 -7
  83. package/dist/cjs/utils/pivotProcessing.d.ts +5 -2
  84. package/dist/cjs/utils/pivotProcessing.d.ts.map +1 -1
  85. package/dist/cjs/utils/report.d.ts +2 -1
  86. package/dist/cjs/utils/report.d.ts.map +1 -1
  87. package/dist/cjs/utils/report.js +23 -24
  88. package/dist/cjs/utils/tableProcessing.d.ts +18 -5
  89. package/dist/cjs/utils/tableProcessing.d.ts.map +1 -1
  90. package/dist/cjs/utils/tableProcessing.js +13 -6
  91. package/dist/cjs/utils/validation.js +1 -1
  92. package/dist/esm/Chart.d.ts +0 -1
  93. package/dist/esm/Chart.d.ts.map +1 -1
  94. package/dist/esm/Chart.js +28 -16
  95. package/dist/esm/ChartBuilder.d.ts +8 -37
  96. package/dist/esm/ChartBuilder.d.ts.map +1 -1
  97. package/dist/esm/ChartBuilder.js +408 -192
  98. package/dist/esm/ChartEditor.d.ts +1 -1
  99. package/dist/esm/ChartEditor.d.ts.map +1 -1
  100. package/dist/esm/ChartEditor.js +33 -169
  101. package/dist/esm/Context.d.ts +13 -2
  102. package/dist/esm/Context.d.ts.map +1 -1
  103. package/dist/esm/Context.js +32 -12
  104. package/dist/esm/Dashboard.d.ts.map +1 -1
  105. package/dist/esm/Dashboard.js +5 -8
  106. package/dist/esm/DateRangePicker/QuillDateRangePicker.d.ts +2 -1
  107. package/dist/esm/DateRangePicker/QuillDateRangePicker.d.ts.map +1 -1
  108. package/dist/esm/DateRangePicker/QuillDateRangePicker.js +7 -3
  109. package/dist/esm/ReportBuilder.d.ts +1 -3
  110. package/dist/esm/ReportBuilder.d.ts.map +1 -1
  111. package/dist/esm/ReportBuilder.js +120 -137
  112. package/dist/esm/SQLEditor.d.ts +2 -2
  113. package/dist/esm/SQLEditor.d.ts.map +1 -1
  114. package/dist/esm/SQLEditor.js +48 -25
  115. package/dist/esm/components/Chart/BarChart.js +1 -1
  116. package/dist/esm/components/Chart/InternalChart.d.ts +25 -0
  117. package/dist/esm/components/Chart/InternalChart.d.ts.map +1 -0
  118. package/dist/esm/components/Chart/InternalChart.js +379 -0
  119. package/dist/esm/components/Chart/LineChart.d.ts.map +1 -1
  120. package/dist/esm/components/Chart/LineChart.js +4 -2
  121. package/dist/esm/components/Dashboard/DashboardFilter.d.ts +7 -4
  122. package/dist/esm/components/Dashboard/DashboardFilter.d.ts.map +1 -1
  123. package/dist/esm/components/Dashboard/DashboardFilter.js +8 -5
  124. package/dist/esm/components/Dashboard/DataLoader.d.ts +3 -3
  125. package/dist/esm/components/Dashboard/DataLoader.d.ts.map +1 -1
  126. package/dist/esm/components/Dashboard/DataLoader.js +23 -9
  127. package/dist/esm/components/Dashboard/MetricComponent.js +1 -1
  128. package/dist/esm/components/QuillMultiSelectWithCombo.js +1 -1
  129. package/dist/esm/components/ReportBuilder/convert.d.ts.map +1 -1
  130. package/dist/esm/components/ReportBuilder/convert.js +54 -8
  131. package/dist/esm/components/ReportBuilder/util.d.ts +1 -0
  132. package/dist/esm/components/ReportBuilder/util.d.ts.map +1 -1
  133. package/dist/esm/components/ReportBuilder/util.js +47 -0
  134. package/dist/esm/components/UiComponents.d.ts +3 -1
  135. package/dist/esm/components/UiComponents.d.ts.map +1 -1
  136. package/dist/esm/components/UiComponents.js +4 -4
  137. package/dist/esm/hooks/useDashboard.d.ts.map +1 -1
  138. package/dist/esm/hooks/useDashboard.js +14 -1
  139. package/dist/esm/hooks/useExport.d.ts.map +1 -1
  140. package/dist/esm/hooks/useExport.js +6 -1
  141. package/dist/esm/hooks/useQuill.js +9 -9
  142. package/dist/esm/internals/ReportBuilder/PivotList.js +1 -1
  143. package/dist/esm/internals/ReportBuilder/PivotModal.d.ts +3 -2
  144. package/dist/esm/internals/ReportBuilder/PivotModal.d.ts.map +1 -1
  145. package/dist/esm/internals/ReportBuilder/PivotModal.js +3 -8
  146. package/dist/esm/models/Report.d.ts +9 -2
  147. package/dist/esm/models/Report.d.ts.map +1 -1
  148. package/dist/esm/models/Report.js +1 -1
  149. package/dist/esm/models/Tables.d.ts +5 -6
  150. package/dist/esm/models/Tables.d.ts.map +1 -1
  151. package/dist/esm/utils/astProcessing.d.ts.map +1 -1
  152. package/dist/esm/utils/astProcessing.js +2 -1
  153. package/dist/esm/utils/columnProcessing.d.ts +1 -0
  154. package/dist/esm/utils/columnProcessing.d.ts.map +1 -1
  155. package/dist/esm/utils/columnProcessing.js +3 -0
  156. package/dist/esm/utils/constants.d.ts.map +1 -1
  157. package/dist/esm/utils/constants.js +6 -2
  158. package/dist/esm/utils/dashboard.d.ts +1 -1
  159. package/dist/esm/utils/dashboard.d.ts.map +1 -1
  160. package/dist/esm/utils/dashboard.js +13 -18
  161. package/dist/esm/utils/dataFetcher.d.ts.map +1 -1
  162. package/dist/esm/utils/dataFetcher.js +2 -2
  163. package/dist/esm/utils/filterProcessing.d.ts +5 -2
  164. package/dist/esm/utils/filterProcessing.d.ts.map +1 -1
  165. package/dist/esm/utils/filterProcessing.js +5 -2
  166. package/dist/esm/utils/merge.d.ts.map +1 -1
  167. package/dist/esm/utils/merge.js +0 -4
  168. package/dist/esm/utils/paginationProcessing.d.ts +1 -1
  169. package/dist/esm/utils/paginationProcessing.d.ts.map +1 -1
  170. package/dist/esm/utils/paginationProcessing.js +1 -4
  171. package/dist/esm/utils/pivotConstructor.d.ts +3 -2
  172. package/dist/esm/utils/pivotConstructor.d.ts.map +1 -1
  173. package/dist/esm/utils/pivotConstructor.js +16 -7
  174. package/dist/esm/utils/pivotProcessing.d.ts +5 -2
  175. package/dist/esm/utils/pivotProcessing.d.ts.map +1 -1
  176. package/dist/esm/utils/report.d.ts +2 -1
  177. package/dist/esm/utils/report.d.ts.map +1 -1
  178. package/dist/esm/utils/report.js +24 -25
  179. package/dist/esm/utils/tableProcessing.d.ts +18 -5
  180. package/dist/esm/utils/tableProcessing.d.ts.map +1 -1
  181. package/dist/esm/utils/tableProcessing.js +13 -6
  182. package/dist/esm/utils/validation.js +1 -1
  183. package/package.json +1 -1
@@ -16,6 +16,7 @@ const ChartBuilder_1 = require("./ChartBuilder");
16
16
  const UiComponents_1 = require("./components/UiComponents");
17
17
  const UiComponents_2 = require("./components/UiComponents");
18
18
  const width_1 = require("./utils/width");
19
+ const Report_1 = require("./models/Report");
19
20
  const QuillCard_1 = require("./components/QuillCard");
20
21
  const QuillSelect_1 = require("./components/QuillSelect");
21
22
  const tableProcessing_1 = require("./utils/tableProcessing");
@@ -90,17 +91,17 @@ function setEditorTheme(_editor, monaco, schema, databaseType, clientName) {
90
91
  * ### SQLEditor API
91
92
  * @see https://docs.quillsql.com/components/sql-editor
92
93
  */
93
- function SQLEditor({ ButtonComponent = UiComponents_1.MemoizedButton, SecondaryButtonComponent = UiComponents_1.MemoizedSecondaryButton, DeleteButtonComponent = UiComponents_1.MemoizedDeleteButton, TextInputComponent = UiComponents_2.QuillTextInput, SelectComponent = QuillSelect_1.QuillSelectComponent, TableComponent = UiComponents_1.QuillTableSQLEditorComponent, isNewQueryEnabled = false, LoadingComponent = UiComponents_1.QuillLoadingComponent, ModalComponent = UiComponents_1.MemoizedModal, PopoverComponent = UiComponents_1.MemoizedPopover, CardComponent = QuillCard_1.QuillCard, LabelComponent = UiComponents_1.MemoizedLabel, HeaderComponent = UiComponents_1.MemoizedHeader, SubHeaderComponent = UiComponents_1.MemoizedSubHeader, TextComponent = UiComponents_1.MemoizedText, ErrorMessageComponent = UiComponents_1.QuillErrorMessageComponent, ChartBuilderInputRowContainer = UiComponents_1.QuillChartBuilderInputRowContainer, ChartBuilderInputColumnContainer = UiComponents_1.QuillChartBuilderInputColumnContainer, PivotRowContainer = UiComponents_1.QuillPivotRowContainer, PivotColumnContainer = UiComponents_1.QuillPivotColumnContainer, ChartBuilderFormContainer = UiComponents_1.QuillChartBuilderFormContainer, defaultQuery, destinationDashboard, onChangeQuery, onChangeData, onChangeColumns, onChangeFields, onDiscardChanges, onSaveChanges, onCloseChartBuilder, isChartBuilderEnabled = false, showTableFormatOptions = false, showDateFieldOptions = false, showAccessControlOptions = false, isAdminEnabled = false, chartBuilderTitle, runQueryOnMount = false, onAddToDashboardComplete, addToDashboardButtonLabel = 'Add to dashboard', report = undefined, organizationName = undefined, isChartBuilderHorizontalView = true, containerStyle = { height: '100vh' }, className, onClickChartElement, }) {
94
+ function SQLEditor({ ButtonComponent = UiComponents_1.MemoizedButton, SecondaryButtonComponent = UiComponents_1.MemoizedSecondaryButton, DeleteButtonComponent = UiComponents_1.MemoizedDeleteButton, TextInputComponent = UiComponents_2.QuillTextInput, SelectComponent = QuillSelect_1.QuillSelectComponent, TableComponent = UiComponents_1.QuillTableSQLEditorComponent, isNewQueryEnabled = false, LoadingComponent = UiComponents_1.QuillLoadingComponent, ModalComponent = UiComponents_1.MemoizedModal, PopoverComponent = UiComponents_1.MemoizedPopover, CardComponent = QuillCard_1.QuillCard, LabelComponent = UiComponents_1.MemoizedLabel, HeaderComponent = UiComponents_1.MemoizedHeader, SubHeaderComponent = UiComponents_1.MemoizedSubHeader, TextComponent = UiComponents_1.MemoizedText, ErrorMessageComponent = UiComponents_1.QuillErrorMessageComponent, ChartBuilderInputRowContainer = UiComponents_1.QuillChartBuilderInputRowContainer, ChartBuilderInputColumnContainer = UiComponents_1.QuillChartBuilderInputColumnContainer, PivotRowContainer = UiComponents_1.QuillPivotRowContainer, PivotColumnContainer = UiComponents_1.QuillPivotColumnContainer, ChartBuilderFormContainer = UiComponents_1.QuillChartBuilderFormContainer, defaultQuery, destinationDashboard, onChangeQuery, onChangeData, onChangeColumns, onChangeFields, onDiscardChanges, onSaveChanges, onCloseChartBuilder, isChartBuilderEnabled = false, isAdminEnabled = false, chartBuilderTitle, runQueryOnMount = false, onAddToDashboardComplete, addToDashboardButtonLabel = 'Add to dashboard', report = undefined, organizationName = undefined, isChartBuilderHorizontalView = true, containerStyle = { height: '100vh' }, className, onClickChartElement, }) {
94
95
  const [sqlPrompt, setSqlPrompt] = (0, react_1.useState)('');
95
96
  const [client] = (0, react_1.useContext)(Context_1.ClientContext);
96
97
  const [theme] = (0, react_1.useContext)(Context_1.ThemeContext);
97
98
  const [query, setQuery] = (0, react_1.useState)(defaultQuery);
98
99
  const [rows, setRows] = (0, react_1.useState)([]);
99
- const [filteredRows, setFilteredRows] = (0, react_1.useState)([]);
100
- const [chartBuilderInFilteredPreview, setChartBuilderInFilteredPreview] = (0, react_1.useState)(true);
100
+ const [filtersEnabled, setFiltersEnabled] = (0, react_1.useState)(!!report);
101
101
  const [columns, setColumns] = (0, react_1.useState)([]);
102
102
  const [schemaData] = (0, react_1.useContext)(Context_1.SchemaDataContext);
103
103
  const { dashboardFilters } = (0, react_1.useContext)(Context_1.DashboardFiltersContext);
104
+ const [, dashboardDispatch] = (0, react_1.useContext)(Context_1.DashboardContext);
104
105
  const specificDashboardFilters = (0, react_1.useMemo)(() => {
105
106
  return Object.values(dashboardFilters[report?.dashboardName ?? destinationDashboard ?? ''] ??
106
107
  {}).map((f) => f.filter);
@@ -181,7 +182,6 @@ function SQLEditor({ ButtonComponent = UiComponents_1.MemoizedButton, SecondaryB
181
182
  (0, react_1.useEffect)(() => {
182
183
  if (client) {
183
184
  setRows([]);
184
- setFilteredRows([]);
185
185
  setColumns([]);
186
186
  setDisplayTable(false);
187
187
  }
@@ -218,7 +218,7 @@ function SQLEditor({ ButtonComponent = UiComponents_1.MemoizedButton, SecondaryB
218
218
  }
219
219
  };
220
220
  const onSortChange = (sort) => {
221
- if (tempReport && (0, paginationProcessing_1.shouldSortInMemory)(pagination, rowCount, false)) {
221
+ if (tempReport && (0, paginationProcessing_1.shouldSortInMemory)(pagination, rowCount)) {
222
222
  return;
223
223
  }
224
224
  const updatedProcessing = { page: pagination, sort };
@@ -226,9 +226,6 @@ function SQLEditor({ ButtonComponent = UiComponents_1.MemoizedButton, SecondaryB
226
226
  setCurrentProcessing(updatedProcessing);
227
227
  setMaxPage(0);
228
228
  };
229
- const onFilterPreviewChange = (preview) => {
230
- setChartBuilderInFilteredPreview(preview);
231
- };
232
229
  const fetchRowCount = async (processing, includeFilters) => {
233
230
  if (!client || !query) {
234
231
  return;
@@ -257,27 +254,25 @@ function SQLEditor({ ButtonComponent = UiComponents_1.MemoizedButton, SecondaryB
257
254
  setMaxPage(1);
258
255
  }
259
256
  const tableInfo = await (0, tableProcessing_1.fetchResultsByQuery)(query, client, processing, schemaData.customFields, undefined, undefined, true);
260
- const filteredTableInfo = await (0, tableProcessing_1.fetchResultsByQuery)(query, client, processing, schemaData.customFields, specificDashboardFilters, tempReport.dateField ?? report?.dateField, true);
261
257
  if (!!tableInfo.error) {
262
258
  throw new Error(tableInfo.error);
263
259
  }
264
- else if (filteredTableInfo.error) {
265
- throw new Error(filteredTableInfo.error);
260
+ // Search through tableInfo.columns for any two columns with the same 'field' value
261
+ const duplicateColumns = tableInfo.columns
262
+ .map((col) => col.field)
263
+ .filter((field, index, self) => self.indexOf(field) !== index);
264
+ if (duplicateColumns.length > 0) {
265
+ setErrorMessage(`Column named "${duplicateColumns[0]}" occurs more than once in results.`);
266
+ return;
266
267
  }
267
- // else if (tableInfo.rows.length === 0) {
268
- // throw new Error('No data found');
269
- // }
270
268
  fetchRowCount(processing, includeFilters);
271
269
  setSqlQueryLoading(false);
272
270
  setCurrentProcessing(processing);
273
271
  let tempRows = [...rows, ...tableInfo.rows];
274
- let tempFilteredRows = [...filteredRows, ...filteredTableInfo.rows];
275
272
  if (resetRows) {
276
273
  tempRows = tableInfo.rows;
277
- tempFilteredRows = filteredTableInfo.rows;
278
274
  }
279
275
  setRows(tempRows);
280
- setFilteredRows(tempFilteredRows);
281
276
  setFormattedRows((0, report_1.formatRowsFromReport)({ rows: tempRows, columns: tableInfo.columns }));
282
277
  if (onChangeData) {
283
278
  onChangeData(tempRows);
@@ -297,7 +292,6 @@ function SQLEditor({ ButtonComponent = UiComponents_1.MemoizedButton, SecondaryB
297
292
  ...formData,
298
293
  itemQuery: tableInfo.itemQuery,
299
294
  rowCount: tableInfo.rowCount ?? tableInfo.rows.length,
300
- filtersApplied: tempReport.filtersApplied ?? [],
301
295
  rows: tempRows,
302
296
  columns: tableInfo.columns,
303
297
  };
@@ -429,6 +423,21 @@ function SQLEditor({ ButtonComponent = UiComponents_1.MemoizedButton, SecondaryB
429
423
  }, label: "Run query" })), isNewQueryEnabled && ((0, jsx_runtime_1.jsx)(SecondaryButtonComponent, { onClick: handleClearQuery, label: "Clear query" })), addToDashboardButtonLabel ===
430
424
  'Add to dashboard' && ((0, jsx_runtime_1.jsx)(ButtonComponent, { onClick: async () => {
431
425
  onSaveChanges && onSaveChanges();
426
+ dashboardDispatch({
427
+ id: Report_1.TEMP_REPORT_ID,
428
+ type: 'ADD_DASHBOARD_ITEM',
429
+ data: {
430
+ ...tempReport,
431
+ id: Report_1.TEMP_REPORT_ID,
432
+ rows,
433
+ columns: columns,
434
+ columnInternal: columns,
435
+ rowCount: rowCount ?? 0,
436
+ queryString: query ?? '',
437
+ dashboardName: report?.dashboardName ??
438
+ destinationDashboard,
439
+ },
440
+ });
432
441
  setIsChartBuilderOpen(true);
433
442
  }, label: addToDashboardButtonLabel, disabled: !!errorMessage ||
434
443
  !(lastSuccessfulQuery === query) ||
@@ -478,13 +487,27 @@ function SQLEditor({ ButtonComponent = UiComponents_1.MemoizedButton, SecondaryB
478
487
  marginBottom: 5,
479
488
  }, children: [onDiscardChanges && ((0, jsx_runtime_1.jsx)(SecondaryButtonComponent, { onClick: onDiscardChanges, label: "Discard changes" })), addToDashboardButtonLabel !== 'Add to dashboard' && ((0, jsx_runtime_1.jsx)(ButtonComponent, { onClick: async () => {
480
489
  onSaveChanges && onSaveChanges();
490
+ dashboardDispatch({
491
+ id: Report_1.TEMP_REPORT_ID,
492
+ type: 'ADD_DASHBOARD_ITEM',
493
+ data: {
494
+ ...tempReport,
495
+ id: Report_1.TEMP_REPORT_ID,
496
+ rows,
497
+ columns: columns,
498
+ columnInternal: columns,
499
+ rowCount: rowCount ?? 0,
500
+ queryString: query ?? '',
501
+ dashboardName: report?.dashboardName ?? destinationDashboard,
502
+ },
503
+ });
481
504
  setIsChartBuilderOpen(true);
482
- }, label: addToDashboardButtonLabel, disabled: !!errorMessage || !(lastSuccessfulQuery === query) }))] }))] })] }) }) })), (!isChartBuilderHorizontalView || isChartBuilderOpen) && ((0, jsx_runtime_1.jsx)(ChartBuilder_1.ChartBuilderWithModal, { rows: chartBuilderInFilteredPreview ? filteredRows : rows, columns: columns, query: query, isHorizontalView: isChartBuilderHorizontalView, isOpen: isChartBuilderOpen, setIsOpen: setIsChartBuilderOpen, onAddToDashboardComplete: onAddToDashboardComplete, showTableFormatOptions: showTableFormatOptions, showDateFieldOptions: showDateFieldOptions, showAccessControlOptions: showAccessControlOptions, isAdmin: isAdminEnabled, destinationDashboard: destinationDashboard, title: chartBuilderTitle, buttonLabel: addToDashboardButtonLabel, report: tempReport, pivot: tempReport?.pivot ?? undefined, pivotData: tempReport?.pivotRows && tempReport?.pivotColumns
483
- ? {
484
- rows: tempReport.pivotRows,
485
- columns: tempReport.pivotColumns,
486
- }
487
- : undefined, organizationName: organizationName, CardComponent: CardComponent, TableComponent: TableComponent, ModalComponent: ModalComponent, ButtonComponent: ButtonComponent, TextInputComponent: TextInputComponent, SelectComponent: SelectComponent, SecondaryButtonComponent: SecondaryButtonComponent, HeaderComponent: HeaderComponent, SubHeaderComponent: SubHeaderComponent, LabelComponent: LabelComponent, TextComponent: TextComponent, PopoverComponent: PopoverComponent, DeleteButtonComponent: DeleteButtonComponent, LoadingComponent: LoadingComponent, ChartBuilderInputRowContainer: ChartBuilderInputRowContainer, ChartBuilderInputColumnContainer: ChartBuilderInputColumnContainer, ErrorMessageComponent: ErrorMessageComponent, PivotRowContainer: PivotRowContainer, PivotColumnContainer: PivotColumnContainer, FormContainer: ChartBuilderFormContainer, hideDateRangeFilter: true, onClickChartElement: onClickChartElement, rowCount: rowCount, onPageChange: onPageChange, onSortChange: onSortChange, onFilterPreviewChange: onFilterPreviewChange, isLoading: sqlQueryLoading, isEditingMode: true }))] }));
505
+ }, label: addToDashboardButtonLabel, disabled: !!errorMessage || !(lastSuccessfulQuery === query) }))] }))] })] }) }) })), (!isChartBuilderHorizontalView || isChartBuilderOpen) && ((0, jsx_runtime_1.jsx)(ChartBuilder_1.ChartBuilderWithModal, { isHorizontalView: isChartBuilderHorizontalView, isOpen: isChartBuilderOpen, setIsOpen: setIsChartBuilderOpen, onAddToDashboardComplete: onAddToDashboardComplete, isAdmin: isAdminEnabled, title: chartBuilderTitle, buttonLabel: addToDashboardButtonLabel, reportId: report?.id, organizationName: organizationName, CardComponent: CardComponent, TableComponent: TableComponent, ModalComponent: ModalComponent, ButtonComponent: ButtonComponent, TextInputComponent: TextInputComponent, SelectComponent: SelectComponent, SecondaryButtonComponent: SecondaryButtonComponent, HeaderComponent: HeaderComponent, SubHeaderComponent: SubHeaderComponent, LabelComponent: LabelComponent, TextComponent: TextComponent, PopoverComponent: PopoverComponent, DeleteButtonComponent: DeleteButtonComponent, LoadingComponent: LoadingComponent, ChartBuilderInputRowContainer: ChartBuilderInputRowContainer, ChartBuilderInputColumnContainer: ChartBuilderInputColumnContainer, ErrorMessageComponent: ErrorMessageComponent, PivotRowContainer: PivotRowContainer, PivotColumnContainer: PivotColumnContainer, FormContainer: ChartBuilderFormContainer, hideDateRangeFilter: true, onClickChartElement: onClickChartElement,
506
+ // onPageChange={onPageChange}
507
+ // onSortChange={onSortChange}
508
+ filtersEnabled: filtersEnabled, onFiltersEnabledChanged: (enabled) => setFiltersEnabled(enabled),
509
+ // isLoading={sqlQueryLoading}
510
+ isEditingMode: true }))] }));
488
511
  }
489
512
  const SQLEditorComponent = ({ query, schema, databaseType, clientName, setQuery, setEditorMounted, handleRunQuery, defineEditorTheme, setEditorTheme, runQueryOnMount = false, theme, loading, LoadingComponent = UiComponents_1.QuillLoadingComponent, }) => {
490
513
  const [editorKey, setEditorKey] = (0, react_1.useState)(0);
@@ -45,7 +45,7 @@ function BarChart({ colors, colorMap, yAxisFields, data, containerStyle, classNa
45
45
  return ((0, jsx_runtime_1.jsx)("div", { style: {
46
46
  boxSizing: 'content-box',
47
47
  ...containerStyle,
48
- }, className: className, children: (0, jsx_runtime_1.jsx)(recharts_1.ResponsiveContainer, { width: "100%", height: '100%', children: (0, jsx_runtime_1.jsxs)(recharts_1.BarChart, { data: data ?? [], layout: 'horizontal', onClick: (event) => onClickChartElement
48
+ }, className: className, children: (0, jsx_runtime_1.jsx)(recharts_1.ResponsiveContainer, { width: "100%", height: "100%", children: (0, jsx_runtime_1.jsxs)(recharts_1.BarChart, { data: data ?? [], layout: 'horizontal', onClick: (event) => onClickChartElement
49
49
  ? onClickChartElement(event?.activePayload
50
50
  ? event.activePayload[0].payload
51
51
  : undefined)
@@ -0,0 +1,25 @@
1
+ import { ChartProps } from '../../Chart';
2
+ import { QuillReport } from '../../models/Report';
3
+ export declare function isEquivalent(filters1: any[], filters2: any[]): boolean;
4
+ export declare function didFiltersChange(dashboardItem: any, filters: any[]): boolean;
5
+ export type ColorMapType = {
6
+ [key: string]: {
7
+ primary: string;
8
+ comparison?: string;
9
+ primaryGradientStart?: string;
10
+ primaryGradientStop?: string;
11
+ comparisonGradientStart?: string;
12
+ comparisonGradientStop?: string;
13
+ };
14
+ };
15
+ export default function InternalChart({ report, colors, className, containerStyle, isAnimationActive, hideXAxis, hideYAxis, hideCartesianGrid, hideHorizontalCartesianGrid, hideVerticalCartesianGrid, hideSubsequentXAxisTicks, cartesianGridLineStyle, cartesianGridLineColor, comparisonLineStyle, hideDateRangeFilter, filtersEnabled, setFiltersEnabled, mapColorsToFields, LoadingComponent, SelectComponent, MultiSelectComponent, DateRangePickerComponent, MetricComponent, filters, onDashboardFilterChange, onClickChartElement, loading, error, isAdmin, filterToggleDisabled, }: Omit<ChartProps, 'reportId'> & {
16
+ report: QuillReport;
17
+ loading: boolean;
18
+ error?: string;
19
+ filtersEnabled: boolean;
20
+ setFiltersEnabled: (hide: boolean) => void;
21
+ isAdmin?: boolean;
22
+ onDashboardFilterChange: (label: string, value: any) => void;
23
+ filterToggleDisabled?: boolean;
24
+ }): import("react/jsx-runtime").JSX.Element;
25
+ //# sourceMappingURL=InternalChart.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InternalChart.d.ts","sourceRoot":"","sources":["../../../../src/components/Chart/InternalChart.tsx"],"names":[],"mappings":"AA6BA,OAAO,EAAgB,UAAU,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,WAAW,EAAkB,MAAM,qBAAqB,CAAC;AAMlE,wBAAgB,YAAY,CAAC,QAAQ,EAAE,GAAG,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,WAiH5D;AAED,wBAAgB,gBAAgB,CAAC,aAAa,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,WAKlE;AAkFD,MAAM,MAAM,YAAY,GAAG;IACzB,CAAC,GAAG,EAAE,MAAM,GAAG;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,oBAAoB,CAAC,EAAE,MAAM,CAAC;QAC9B,mBAAmB,CAAC,EAAE,MAAM,CAAC;QAC7B,uBAAuB,CAAC,EAAE,MAAM,CAAC;QACjC,sBAAsB,CAAC,EAAE,MAAM,CAAC;KACjC,CAAC;CACH,CAAC;AAEF,MAAM,CAAC,OAAO,UAAU,aAAa,CAAC,EACpC,MAAM,EACN,MAAM,EACN,SAAS,EACT,cAAc,EACd,iBAAiB,EACjB,SAAS,EACT,SAAS,EACT,iBAAiB,EACjB,2BAAmC,EACnC,yBAAgC,EAChC,wBAAgC,EAChC,sBAAgC,EAChC,sBAAsB,EACtB,mBAAmB,EACnB,mBAA2B,EAC3B,cAAc,EACd,iBAAiB,EACjB,iBAAiB,EACjB,gBAAuC,EACvC,eAAsC,EACtC,oBAAgD,EAChD,wBAA+C,EAC/C,eAAsC,EACtC,OAAO,EACP,uBAAuB,EACvB,mBAAmB,EACnB,OAAO,EACP,KAAK,EACL,OAAO,EACP,oBAAoB,GACrB,EAAE,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,GAAG;IAChC,MAAM,EAAE,WAAW,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,OAAO,CAAC;IACxB,iBAAiB,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IAC3C,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,uBAAuB,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,KAAK,IAAI,CAAC;IAC7D,oBAAoB,CAAC,EAAE,OAAO,CAAC;CAChC,2CA8VA"}
@@ -0,0 +1,385 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.isEquivalent = isEquivalent;
7
+ exports.didFiltersChange = didFiltersChange;
8
+ exports.default = InternalChart;
9
+ const jsx_runtime_1 = require("react/jsx-runtime");
10
+ const react_1 = require("react");
11
+ const date_fns_1 = require("date-fns");
12
+ const Context_1 = require("../../Context");
13
+ const ChartSkeleton_1 = require("../../components/Chart/ChartSkeleton");
14
+ const ChartError_1 = __importDefault(require("../../components/Chart/ChartError"));
15
+ const Filter_1 = require("../../models/Filter");
16
+ const filterProcessing_1 = require("../../utils/filterProcessing");
17
+ const DashboardFilter_1 = require("../../components/Dashboard/DashboardFilter");
18
+ const QuillSelect_1 = require("../../components/QuillSelect");
19
+ const QuillMultiSelect_1 = require("../../components/QuillMultiSelect");
20
+ const QuillDateRangePicker_1 = require("../../DateRangePicker/QuillDateRangePicker");
21
+ const MetricComponent_1 = __importDefault(require("../../components/Dashboard/MetricComponent"));
22
+ const dateRangePickerUtils_1 = require("../../DateRangePicker/dateRangePickerUtils");
23
+ const Chart_1 = require("../../Chart");
24
+ const Report_1 = require("../../models/Report");
25
+ function areDatesNearby(date1, date2) {
26
+ return Math.abs((0, date_fns_1.differenceInHours)(date1, date2)) < 24;
27
+ }
28
+ function isEquivalent(filters1, filters2) {
29
+ if (filters2.length !== filters1.length) {
30
+ return false;
31
+ }
32
+ // const filterKeys = Object.keys(filters2);
33
+ for (let i = 0; i < filters1.length; i++) {
34
+ const filter1 = filters1[i];
35
+ if (!filter1) {
36
+ return false;
37
+ }
38
+ const filter2 = filters2[i];
39
+ if (filter1.isUserFilter !== filter2.isUserFilter) {
40
+ return false;
41
+ }
42
+ else if (filter1.isUserFilter) {
43
+ if (filter1.operator !== filter2.operator ||
44
+ filter1.value !== filter2.value) {
45
+ return false;
46
+ }
47
+ }
48
+ const filterType = filter2.filterType;
49
+ if (filterType === 'string') {
50
+ if (filter1.stringFilterType === 'multiselect') {
51
+ if (filter1.values &&
52
+ filter2.values &&
53
+ filter1.values.length !== filter2.values.length) {
54
+ return false;
55
+ }
56
+ if ((filter1.values && !filter2.values) ||
57
+ (filter2.values && !filter1.values)) {
58
+ return false;
59
+ }
60
+ // make sure that filter1.values is equivalent to filter2.values ignoring order
61
+ const sortedValues1 = filter1.values?.slice().sort() || [];
62
+ const sortedValues2 = filter2.values?.slice().sort() || [];
63
+ if (!sortedValues1.every((value, index) => value === sortedValues2[index])) {
64
+ return false;
65
+ }
66
+ }
67
+ if (filter1.selectedValue !== filter2.selectedValue) {
68
+ return false;
69
+ }
70
+ }
71
+ else if (filter1?.operator === 'BETWEEN' &&
72
+ filter2?.operator === 'BETWEEN') {
73
+ if (!filter1?.values && !filter2?.values) {
74
+ continue;
75
+ }
76
+ else if (!filter1?.values || !filter2?.values) {
77
+ return false;
78
+ }
79
+ if (filter1?.values && filter2?.values) {
80
+ if (!areDatesNearby(filter1.values[0], filter2.values[0]) ||
81
+ !areDatesNearby(filter1.values[1], filter2.values[1])) {
82
+ return false;
83
+ }
84
+ }
85
+ }
86
+ else if (filterType === 'date_range') {
87
+ if (!filter1.startDate && !filter2.startDate) {
88
+ continue;
89
+ }
90
+ if (!areDatesNearby(filter1.startDate, filter2.startDate) ||
91
+ !areDatesNearby(filter1.endDate, filter2.endDate)) {
92
+ return false;
93
+ }
94
+ if (filter1.comparison !== filter2.comparison) {
95
+ return false;
96
+ }
97
+ if (filter1.comparisonRange && !filter2.comparisonRange) {
98
+ return false;
99
+ }
100
+ if (!filter1.comparisonRange && filter2.comparisonRange) {
101
+ return false;
102
+ }
103
+ if (filter1.comparisonRange && filter2.comparisonRange) {
104
+ if (!filter1.comparisonRange.startDate &&
105
+ !filter2.comparisonRange.endDate) {
106
+ continue;
107
+ }
108
+ if (!areDatesNearby(filter1.comparisonRange.startDate, filter2.comparisonRange.startDate) ||
109
+ !areDatesNearby(filter1.comparisonRange.endDate, filter2.comparisonRange.endDate)) {
110
+ return false;
111
+ }
112
+ }
113
+ }
114
+ }
115
+ return true;
116
+ }
117
+ function didFiltersChange(dashboardItem, filters) {
118
+ if (!dashboardItem?.filtersApplied || !filters) {
119
+ return true;
120
+ }
121
+ return !isEquivalent(dashboardItem.filtersApplied, filters);
122
+ }
123
+ const TogglePrimitive = ({ value, onClick, style, disabled, }) => {
124
+ const toggleStyle = {
125
+ container: {
126
+ display: 'inline-block',
127
+ position: 'relative',
128
+ width: '30px',
129
+ height: '18px',
130
+ borderRadius: '24px',
131
+ backgroundColor: value ? '#212121' : '#ccc',
132
+ cursor: 'pointer',
133
+ transition: 'background-color 0.4s',
134
+ // Fade out the toggle when disabled
135
+ opacity: disabled ? 0.5 : 1,
136
+ ...style,
137
+ },
138
+ circle: {
139
+ position: 'absolute',
140
+ top: '3px',
141
+ left: value ? '15px' : '3px',
142
+ width: '12px',
143
+ height: '12px',
144
+ borderRadius: '50%',
145
+ backgroundColor: '#FFF',
146
+ transition: 'left 0.4s',
147
+ },
148
+ icon: {
149
+ position: 'absolute',
150
+ top: '3px',
151
+ left: '3px',
152
+ display: 'flex',
153
+ alignItems: 'center',
154
+ justifyContent: 'center',
155
+ width: '20px',
156
+ height: '20px',
157
+ color: '#FFF',
158
+ },
159
+ };
160
+ return ((0, jsx_runtime_1.jsxs)("div", { style: toggleStyle.container, onClick: disabled ? () => { } : onClick, "aria-checked": value, role: "switch", "aria-label": "Toggle", children: [(0, jsx_runtime_1.jsx)("div", { style: toggleStyle.circle }), value ? ((0, jsx_runtime_1.jsx)("div", { style: {
161
+ ...toggleStyle.icon,
162
+ left: '35px',
163
+ color: '#FFC107',
164
+ } })) : ((0, jsx_runtime_1.jsx)("div", { style: {
165
+ ...toggleStyle.icon,
166
+ color: '#607D8B',
167
+ } }))] }));
168
+ };
169
+ function InternalChart({ report, colors, className, containerStyle, isAnimationActive, hideXAxis, hideYAxis, hideCartesianGrid, hideHorizontalCartesianGrid = false, hideVerticalCartesianGrid = true, hideSubsequentXAxisTicks = false, cartesianGridLineStyle = 'solid', cartesianGridLineColor, comparisonLineStyle, hideDateRangeFilter = false, filtersEnabled, setFiltersEnabled, mapColorsToFields, LoadingComponent = ChartSkeleton_1.QuillLoadingSkeleton, SelectComponent = QuillSelect_1.QuillSelectComponent, MultiSelectComponent = QuillMultiSelect_1.QuillMultiSelectComponent, DateRangePickerComponent = QuillDateRangePicker_1.QuillDateRangePicker, MetricComponent = MetricComponent_1.default, filters, onDashboardFilterChange, onClickChartElement, loading, error, isAdmin, filterToggleDisabled, }) {
170
+ const { reportFilters } = (0, react_1.useContext)(Context_1.ReportFiltersContext);
171
+ const { dashboardConfig } = (0, react_1.useContext)(Context_1.DashboardConfigContext);
172
+ const currentReportFilters = (0, react_1.useMemo)(() => {
173
+ const dashFilters = dashboardConfig[report?.dashboardName ?? '']?.config.filters;
174
+ if (!dashFilters)
175
+ return Object.values(reportFilters[report?.id ?? ''] ?? {});
176
+ // Sort the filters with "date_range" type first, followed by the rest in the same order as the dashFilters, by label.
177
+ return Object.values(reportFilters[report?.id ?? ''] ?? {}).sort((a, b) => {
178
+ if (a.filter.filterType === 'date_range' &&
179
+ b.filter.filterType !== 'date_range') {
180
+ return -1;
181
+ }
182
+ else if (a.filter.filterType !== 'date_range' &&
183
+ b.filter.filterType === 'date_range') {
184
+ return 1;
185
+ }
186
+ else {
187
+ return (dashFilters.findIndex((f) => f.label === a.filter.label) -
188
+ dashFilters.findIndex((f) => f.label === b.filter.label));
189
+ }
190
+ });
191
+ }, [reportFilters, report?.id]);
192
+ const reportDateFilter = (0, react_1.useMemo)(() => {
193
+ return Object.values(reportFilters[report?.id ?? ''] ?? {}).find((f) => f.filter.filterType === 'date_range')?.filter;
194
+ }, [reportFilters, report?.id]);
195
+ const presetOptions = (0, react_1.useMemo)(() => {
196
+ return reportDateFilter
197
+ ? (reportDateFilter.presetRanges?.map((elem) => {
198
+ if (!elem.isStatic) {
199
+ return {
200
+ label: elem.label,
201
+ value: elem.value,
202
+ startDate: dateRangePickerUtils_1.PRIMARY_RANGE[elem.value]?.startDate ??
203
+ dateRangePickerUtils_1.PRIMARY_RANGE['LAST_30_DAYS'].startDate,
204
+ endDate: dateRangePickerUtils_1.PRIMARY_RANGE[elem.value]?.endDate ??
205
+ dateRangePickerUtils_1.PRIMARY_RANGE['LAST_30_DAYS'].endDate,
206
+ };
207
+ }
208
+ return {
209
+ label: elem.label,
210
+ value: elem.value,
211
+ startDate: new Date(elem.startDate),
212
+ endDate: new Date(elem.endDate),
213
+ };
214
+ }) ?? dateRangePickerUtils_1.defaultOptionsV2)
215
+ : dateRangePickerUtils_1.defaultOptionsV2;
216
+ }, [reportDateFilter]);
217
+ // const userFilters = useMemo(() => {
218
+ // return filters?.filter(
219
+ // (f) =>
220
+ // f.filterType !== FilterType.DateCustomFilter &&
221
+ // f.filterType !== FilterType.DateFilter &&
222
+ // f.filterType !== FilterType.DateComparisonFilter,
223
+ // );
224
+ // }, [filters]);
225
+ // A filter value can either be a string, an array of strings for a multiselect, or a date range (that could have a comparison range)
226
+ const [filterValues, setFilterValues] = (0, react_1.useState)({});
227
+ (0, react_1.useEffect)(() => {
228
+ if (reportDateFilter) {
229
+ // Filter for custom date filter that applies to the report's dateField
230
+ const customDateFilter = filters?.find((f) => f.filterType === Filter_1.FilterType.DateCustomFilter ||
231
+ f.filterType === Filter_1.FilterType.DateFilter ||
232
+ f.filterType === Filter_1.FilterType.DateComparisonFilter);
233
+ if (!customDateFilter) {
234
+ return;
235
+ }
236
+ const newFilter = (0, filterProcessing_1.applyCustomFilterToDashDateFilter)(customDateFilter, reportDateFilter);
237
+ setFilterValues((filterValues) => ({
238
+ ...filterValues,
239
+ [reportDateFilter.label]: {
240
+ startDate: newFilter.startDate,
241
+ endDate: newFilter.endDate,
242
+ preset: newFilter.preset,
243
+ comparisonRange: newFilter.comparisonRange,
244
+ },
245
+ }));
246
+ }
247
+ }, [filters]);
248
+ const [theme] = (0, react_1.useContext)(Context_1.ThemeContext);
249
+ const colorMap = (0, react_1.useMemo)(() => {
250
+ if (mapColorsToFields && report && theme) {
251
+ return mapColorsToFields(report, theme);
252
+ }
253
+ }, [report, theme]);
254
+ const updateFilter = (filter, value, comparison) => {
255
+ let filterValue = {};
256
+ if (filter.filterType === Filter_1.DashboardFilterType.String) {
257
+ if (filter.stringFilterType === 'multiselect') {
258
+ if ((value?.length ?? 0) === 0) {
259
+ filterValue = { values: undefined, operator: undefined };
260
+ }
261
+ else {
262
+ filterValue = { values: value, operator: 'IN' };
263
+ }
264
+ }
265
+ else {
266
+ filterValue = { selectedValue: value };
267
+ }
268
+ }
269
+ else if (filter.filterType === Filter_1.DashboardFilterType.Date) {
270
+ if (comparison ||
271
+ (filter.comparison &&
272
+ (filter.comparisonRange?.value ?? 'NO_COMPARISON') !==
273
+ 'NO_COMPARISON')) {
274
+ let preset = '';
275
+ if (comparison) {
276
+ preset = filter.preset.value;
277
+ }
278
+ const key = comparison?.value ||
279
+ (filter.comparisonRange?.value ?? 'NO_COMPARISON');
280
+ let primaryRange = {
281
+ startDate: value ? value.startDate : filter.startDate,
282
+ endDate: value ? value.endDate : filter.endDate,
283
+ };
284
+ if (value && value.preset) {
285
+ preset = value.preset;
286
+ primaryRange = (0, dateRangePickerUtils_1.getRangeFromPresetOptions)(value.preset, presetOptions);
287
+ }
288
+ filterValue = {
289
+ startDate: primaryRange.startDate,
290
+ endDate: primaryRange.endDate,
291
+ preset: {
292
+ label: presetOptions.find((o) => o.value === preset)?.label ?? preset,
293
+ value: preset,
294
+ },
295
+ comparisonRange: {
296
+ startDate: dateRangePickerUtils_1.COMPARISON_RANGE[key](primaryRange)
297
+ ?.startDate,
298
+ endDate: dateRangePickerUtils_1.COMPARISON_RANGE[key](primaryRange)
299
+ ?.endDate,
300
+ value: key,
301
+ },
302
+ };
303
+ }
304
+ else {
305
+ const primaryRange = value && value.preset
306
+ ? (0, dateRangePickerUtils_1.getRangeFromPresetOptions)(value.preset, presetOptions)
307
+ : {
308
+ startDate: value?.startDate || filter.startDate,
309
+ endDate: value?.endDate || filter.endDate,
310
+ };
311
+ const preset = value?.preset ? value.preset : '';
312
+ filterValue = {
313
+ startDate: primaryRange.startDate,
314
+ endDate: primaryRange.endDate,
315
+ preset: {
316
+ label: presetOptions.find((o) => o.value === preset)?.label ?? preset,
317
+ value: preset,
318
+ },
319
+ };
320
+ }
321
+ }
322
+ setFilterValues((filterValues) => ({
323
+ ...filterValues,
324
+ [filter.label]: filterValue,
325
+ }));
326
+ onDashboardFilterChange(filter.label, filterValue);
327
+ };
328
+ if (error) {
329
+ return ((0, jsx_runtime_1.jsx)("div", { style: containerStyle, className: className, children: (0, jsx_runtime_1.jsx)(ChartError_1.default, { errorMessage: error }) }));
330
+ }
331
+ return ((0, jsx_runtime_1.jsxs)("div", { style: {
332
+ display: 'flex',
333
+ flexDirection: 'column',
334
+ ...containerStyle,
335
+ }, id: `quill-internal-chart-${report.id}`, className: className, children: [isAdmin && !!currentReportFilters?.length && ((0, jsx_runtime_1.jsxs)("div", { style: {
336
+ maxWidth: 'fit-content',
337
+ marginBottom: 25,
338
+ display: 'flex',
339
+ flexDirection: 'column',
340
+ gap: 4,
341
+ alignItems: 'flex-start',
342
+ flexWrap: 'wrap',
343
+ border: filtersEnabled
344
+ ? `1px solid ${theme?.borderColor ?? 'black'}`
345
+ : 'none',
346
+ padding: filtersEnabled ? 12 : 0,
347
+ borderRadius: 6,
348
+ opacity: filterToggleDisabled ? 0.5 : 1,
349
+ }, children: [(0, jsx_runtime_1.jsxs)("div", { style: {
350
+ display: 'flex',
351
+ flexDirection: 'row',
352
+ gap: 8,
353
+ border: `1px solid ${theme?.borderColor ?? 'black'}`,
354
+ padding: 8,
355
+ borderRadius: 6,
356
+ }, children: [(0, jsx_runtime_1.jsx)(TogglePrimitive, { value: filtersEnabled, onClick: () => setFiltersEnabled(!filtersEnabled), style: {
357
+ marginTop: 2,
358
+ cursor: filterToggleDisabled ? 'not-allowed' : 'pointer',
359
+ }, disabled: filterToggleDisabled }), (0, jsx_runtime_1.jsx)("h1", { style: {
360
+ fontSize: 14,
361
+ fontWeight: 600,
362
+ fontFamily: theme?.fontFamily,
363
+ color: theme?.primaryTextColor || '#575E6A',
364
+ userSelect: 'none',
365
+ margin: 0,
366
+ }, children: filtersEnabled
367
+ ? 'Previewing with dashboard filters'
368
+ : 'Previewing without dashboard filters' })] }), (0, jsx_runtime_1.jsx)("div", { style: {
369
+ display: 'flex',
370
+ flexDirection: 'row',
371
+ alignItems: 'flex-end',
372
+ flexWrap: 'wrap',
373
+ gap: 12,
374
+ }, children: filtersEnabled &&
375
+ currentReportFilters.map((filter, index) => ((0, jsx_runtime_1.jsx)(DashboardFilter_1.DashboardFilter, { filter: {
376
+ ...filter.filter,
377
+ ...(filter.filter.filterType === 'date_range' && {
378
+ options: presetOptions,
379
+ }),
380
+ ...filterValues[filter.filter.label],
381
+ }, isLoading: filter.loading, onChangeFilter: updateFilter, theme: theme, SelectComponent: SelectComponent, MultiSelectComponent: MultiSelectComponent, DateRangePickerComponent: DateRangePickerComponent, disabled: !filtersEnabled }, index))) })] })), loading || !report ? ((0, jsx_runtime_1.jsx)(LoadingComponent, {})) : ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: ['metric' === report.chartType && ((0, jsx_runtime_1.jsx)(MetricComponent, { error: error, isLoading: loading, report: report })), report.chartType !== 'table' && report.chartType !== 'metric' && ((0, jsx_runtime_1.jsx)(Chart_1.ChartDisplay, { config: report, containerStyle: {
382
+ width: '100%',
383
+ height: '100%',
384
+ }, reportId: Report_1.TEMP_REPORT_ID, colors: colors, className: className, hideXAxis: hideXAxis, hideYAxis: hideYAxis, hideCartesianGrid: hideCartesianGrid, hideHorizontalCartesianGrid: hideHorizontalCartesianGrid, hideVerticalCartesianGrid: hideVerticalCartesianGrid, hideSubsequentXAxisTicks: hideSubsequentXAxisTicks, cartesianGridLineStyle: cartesianGridLineStyle, cartesianGridLineColor: cartesianGridLineColor, hideDateRangeFilter: hideDateRangeFilter, comparisonLineStyle: comparisonLineStyle, isAnimationActive: isAnimationActive, loading: loading, scrollable: true, colorMap: colorMap, LoadingComponent: LoadingComponent, onClickChartElement: onClickChartElement }))] }))] }));
385
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"LineChart.d.ts","sourceRoot":"","sources":["../../../../src/components/Chart/LineChart.tsx"],"names":[],"mappings":"AAiBA,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAyB7C,MAAM,CAAC,OAAO,UAAU,SAAS,CAAC,EAChC,MAAM,EACN,QAAa,EACb,WAAW,EACX,IAAI,EACJ,cAAc,EACd,SAAS,EACT,UAAU,EACV,WAAW,EACX,KAAK,EACL,UAAU,EACV,iBAAwB,EACxB,SAAiB,EACjB,SAAiB,EACjB,iBAAyB,EACzB,2BAAmC,EACnC,yBAAgC,EAChC,wBAAgC,EAChC,sBAAgC,EAChC,mBAA6B,EAC7B,sBAAsB,EACtB,mBAA8B,EAC9B,UAAU,GACX,EAAE;IACD,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,WAAW,EAAE,GAAG,EAAE,CAAC;IACnB,IAAI,EAAE,GAAG,EAAE,CAAC;IACZ,cAAc,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IACrC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,UAAU,CAAC;IACxB,KAAK,EAAE,GAAG,CAAC;IACX,UAAU,EAAE,GAAG,CAAC;IAChB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;IACnB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,2BAA2B,EAAE,OAAO,CAAC;IACrC,yBAAyB,EAAE,OAAO,CAAC;IACnC,wBAAwB,EAAE,OAAO,CAAC;IAClC,sBAAsB,EAAE,OAAO,GAAG,QAAQ,CAAC;IAC3C,mBAAmB,EAAE,OAAO,GAAG,QAAQ,CAAC;IACxC,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,mBAAmB,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,KAAK,IAAI,CAAC;IACvC,UAAU,CAAC,EAAE,GAAG,CAAC;CAClB,2CAsRA"}
1
+ {"version":3,"file":"LineChart.d.ts","sourceRoot":"","sources":["../../../../src/components/Chart/LineChart.tsx"],"names":[],"mappings":"AAcA,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AA2B7C,MAAM,CAAC,OAAO,UAAU,SAAS,CAAC,EAChC,MAAM,EACN,QAAa,EACb,WAAW,EACX,IAAI,EACJ,cAAc,EACd,SAAS,EACT,UAAU,EACV,WAAW,EACX,KAAK,EACL,UAAU,EACV,iBAAwB,EACxB,SAAiB,EACjB,SAAiB,EACjB,iBAAyB,EACzB,2BAAmC,EACnC,yBAAgC,EAChC,wBAAgC,EAChC,sBAAgC,EAChC,mBAA6B,EAC7B,sBAAsB,EACtB,mBAA8B,EAC9B,UAAU,GACX,EAAE;IACD,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,WAAW,EAAE,GAAG,EAAE,CAAC;IACnB,IAAI,EAAE,GAAG,EAAE,CAAC;IACZ,cAAc,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IACrC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,UAAU,CAAC;IACxB,KAAK,EAAE,GAAG,CAAC;IACX,UAAU,EAAE,GAAG,CAAC;IAChB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;IACnB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,2BAA2B,EAAE,OAAO,CAAC;IACrC,yBAAyB,EAAE,OAAO,CAAC;IACnC,wBAAwB,EAAE,OAAO,CAAC;IAClC,sBAAsB,EAAE,OAAO,GAAG,QAAQ,CAAC;IAC3C,mBAAmB,EAAE,OAAO,GAAG,QAAQ,CAAC;IACxC,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,mBAAmB,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,KAAK,IAAI,CAAC;IACvC,UAAU,CAAC,EAAE,GAAG,CAAC;CAClB,2CAsRA"}
@@ -15,7 +15,9 @@ const crypto_1 = require("../../utils/crypto");
15
15
  const react_1 = require("react");
16
16
  function createLineForEmptyChart(yAxisFields, dateFilter, xAxisField, xAxisFormat) {
17
17
  let lineChartData = [];
18
- if (dateFilter && dateFilter.startDate && dateFilter.endDate &&
18
+ if (dateFilter &&
19
+ dateFilter.startDate &&
20
+ dateFilter.endDate &&
19
21
  valueFormatter_1.DATE_FORMAT_TYPES.includes(xAxisFormat || '') &&
20
22
  (!lineChartData || lineChartData.length === 0)) {
21
23
  const xAxis = xAxisField || '';