@quillsql/react 2.12.30 → 2.12.31

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 (201) hide show
  1. package/dist/cjs/Chart.d.ts +6 -37
  2. package/dist/cjs/Chart.d.ts.map +1 -1
  3. package/dist/cjs/Chart.js +86 -327
  4. package/dist/cjs/ChartBuilder.d.ts +12 -49
  5. package/dist/cjs/ChartBuilder.d.ts.map +1 -1
  6. package/dist/cjs/ChartBuilder.js +68 -36
  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 +11 -7
  10. package/dist/cjs/Context.d.ts +4 -1
  11. package/dist/cjs/Context.d.ts.map +1 -1
  12. package/dist/cjs/Context.js +10 -4
  13. package/dist/cjs/Dashboard.d.ts +61 -114
  14. package/dist/cjs/Dashboard.d.ts.map +1 -1
  15. package/dist/cjs/Dashboard.js +261 -30
  16. package/dist/cjs/DateRangePicker/DateRangePicker.d.ts.map +1 -1
  17. package/dist/cjs/DateRangePicker/DateRangePicker.js +0 -26
  18. package/dist/cjs/ReportBuilder.d.ts +1 -1
  19. package/dist/cjs/ReportBuilder.d.ts.map +1 -1
  20. package/dist/cjs/ReportBuilder.js +62 -97
  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 +10 -5
  24. package/dist/cjs/Table.d.ts.map +1 -1
  25. package/dist/cjs/Table.js +41 -43
  26. package/dist/cjs/components/Chart/BarChart.d.ts.map +1 -1
  27. package/dist/cjs/components/Chart/BarChart.js +12 -1
  28. package/dist/cjs/components/Chart/LineChart.d.ts +2 -1
  29. package/dist/cjs/components/Chart/LineChart.d.ts.map +1 -1
  30. package/dist/cjs/components/Chart/LineChart.js +25 -1
  31. package/dist/cjs/components/Dashboard/DataLoader.d.ts +7 -7
  32. package/dist/cjs/components/Dashboard/DataLoader.d.ts.map +1 -1
  33. package/dist/cjs/components/Dashboard/DataLoader.js +64 -28
  34. package/dist/cjs/components/Dashboard/MetricComponent.d.ts.map +1 -1
  35. package/dist/cjs/components/Dashboard/MetricComponent.js +11 -45
  36. package/dist/cjs/components/Dashboard/TableComponent.d.ts +1 -1
  37. package/dist/cjs/components/Dashboard/TableComponent.d.ts.map +1 -1
  38. package/dist/cjs/components/Dashboard/TableComponent.js +1 -30
  39. package/dist/cjs/components/QuillMultiSelectWithCombo.d.ts.map +1 -1
  40. package/dist/cjs/components/QuillMultiSelectWithCombo.js +16 -1
  41. package/dist/cjs/components/QuillSelectWithCombo.d.ts.map +1 -1
  42. package/dist/cjs/components/QuillSelectWithCombo.js +4 -1
  43. package/dist/cjs/components/ReportBuilder/FilterModal.d.ts +10 -2
  44. package/dist/cjs/components/ReportBuilder/FilterModal.d.ts.map +1 -1
  45. package/dist/cjs/components/ReportBuilder/FilterModal.js +94 -70
  46. package/dist/cjs/components/ReportBuilder/convert.d.ts +7 -2
  47. package/dist/cjs/components/ReportBuilder/convert.d.ts.map +1 -1
  48. package/dist/cjs/components/ReportBuilder/convert.js +53 -1
  49. package/dist/cjs/components/ReportBuilder/ui.d.ts +6 -6
  50. package/dist/cjs/components/ReportBuilder/ui.d.ts.map +1 -1
  51. package/dist/cjs/components/ReportBuilder/ui.js +6 -22
  52. package/dist/cjs/components/UiComponents.d.ts +26 -1
  53. package/dist/cjs/components/UiComponents.d.ts.map +1 -1
  54. package/dist/cjs/components/UiComponents.js +97 -4
  55. package/dist/cjs/hooks/useQuill.d.ts.map +1 -1
  56. package/dist/cjs/hooks/useQuill.js +19 -3
  57. package/dist/cjs/index.d.ts +2 -1
  58. package/dist/cjs/index.d.ts.map +1 -1
  59. package/dist/cjs/internals/ReportBuilder/PivotModal.d.ts +1 -0
  60. package/dist/cjs/internals/ReportBuilder/PivotModal.d.ts.map +1 -1
  61. package/dist/cjs/models/Columns.d.ts +2 -1
  62. package/dist/cjs/models/Columns.d.ts.map +1 -1
  63. package/dist/cjs/models/Filter.d.ts +15 -4
  64. package/dist/cjs/models/Filter.d.ts.map +1 -1
  65. package/dist/cjs/models/Filter.js +9 -1
  66. package/dist/cjs/models/Report.d.ts +10 -23
  67. package/dist/cjs/models/Report.d.ts.map +1 -1
  68. package/dist/cjs/utils/astFilterProcessing.d.ts.map +1 -1
  69. package/dist/cjs/utils/astFilterProcessing.js +37 -2
  70. package/dist/cjs/utils/columnProcessing.d.ts +2 -0
  71. package/dist/cjs/utils/columnProcessing.d.ts.map +1 -1
  72. package/dist/cjs/utils/columnProcessing.js +54 -1
  73. package/dist/cjs/utils/dashboard.d.ts +1 -1
  74. package/dist/cjs/utils/dashboard.d.ts.map +1 -1
  75. package/dist/cjs/utils/dashboard.js +3 -56
  76. package/dist/cjs/utils/dataProcessing.d.ts +4 -2
  77. package/dist/cjs/utils/dataProcessing.d.ts.map +1 -1
  78. package/dist/cjs/utils/dataProcessing.js +18 -1
  79. package/dist/cjs/utils/dates.d.ts +2 -1
  80. package/dist/cjs/utils/dates.d.ts.map +1 -1
  81. package/dist/cjs/utils/dates.js +23 -1
  82. package/dist/cjs/utils/filterProcessing.d.ts +7 -1
  83. package/dist/cjs/utils/filterProcessing.d.ts.map +1 -1
  84. package/dist/cjs/utils/filterProcessing.js +100 -13
  85. package/dist/cjs/utils/pivotConstructor.d.ts +2 -1
  86. package/dist/cjs/utils/pivotConstructor.d.ts.map +1 -1
  87. package/dist/cjs/utils/pivotConstructor.js +7 -1
  88. package/dist/cjs/utils/report.d.ts +4 -1
  89. package/dist/cjs/utils/report.d.ts.map +1 -1
  90. package/dist/cjs/utils/report.js +94 -7
  91. package/dist/cjs/utils/tableProcessing.d.ts +1 -1
  92. package/dist/esm/Chart.d.ts +6 -37
  93. package/dist/esm/Chart.d.ts.map +1 -1
  94. package/dist/esm/Chart.js +87 -329
  95. package/dist/esm/ChartBuilder.d.ts +12 -49
  96. package/dist/esm/ChartBuilder.d.ts.map +1 -1
  97. package/dist/esm/ChartBuilder.js +68 -33
  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 +11 -7
  101. package/dist/esm/Context.d.ts +4 -1
  102. package/dist/esm/Context.d.ts.map +1 -1
  103. package/dist/esm/Context.js +9 -3
  104. package/dist/esm/Dashboard.d.ts +61 -114
  105. package/dist/esm/Dashboard.d.ts.map +1 -1
  106. package/dist/esm/Dashboard.js +263 -32
  107. package/dist/esm/DateRangePicker/DateRangePicker.d.ts.map +1 -1
  108. package/dist/esm/DateRangePicker/DateRangePicker.js +0 -26
  109. package/dist/esm/ReportBuilder.d.ts +1 -1
  110. package/dist/esm/ReportBuilder.d.ts.map +1 -1
  111. package/dist/esm/ReportBuilder.js +64 -99
  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 +11 -6
  115. package/dist/esm/Table.d.ts.map +1 -1
  116. package/dist/esm/Table.js +42 -44
  117. package/dist/esm/components/Chart/BarChart.d.ts.map +1 -1
  118. package/dist/esm/components/Chart/BarChart.js +13 -2
  119. package/dist/esm/components/Chart/LineChart.d.ts +2 -1
  120. package/dist/esm/components/Chart/LineChart.d.ts.map +1 -1
  121. package/dist/esm/components/Chart/LineChart.js +26 -2
  122. package/dist/esm/components/Dashboard/DataLoader.d.ts +7 -7
  123. package/dist/esm/components/Dashboard/DataLoader.d.ts.map +1 -1
  124. package/dist/esm/components/Dashboard/DataLoader.js +65 -29
  125. package/dist/esm/components/Dashboard/MetricComponent.d.ts.map +1 -1
  126. package/dist/esm/components/Dashboard/MetricComponent.js +11 -45
  127. package/dist/esm/components/Dashboard/TableComponent.d.ts +1 -1
  128. package/dist/esm/components/Dashboard/TableComponent.d.ts.map +1 -1
  129. package/dist/esm/components/Dashboard/TableComponent.js +1 -30
  130. package/dist/esm/components/QuillMultiSelectWithCombo.d.ts.map +1 -1
  131. package/dist/esm/components/QuillMultiSelectWithCombo.js +16 -1
  132. package/dist/esm/components/QuillSelectWithCombo.d.ts.map +1 -1
  133. package/dist/esm/components/QuillSelectWithCombo.js +5 -2
  134. package/dist/esm/components/ReportBuilder/FilterModal.d.ts +10 -2
  135. package/dist/esm/components/ReportBuilder/FilterModal.d.ts.map +1 -1
  136. package/dist/esm/components/ReportBuilder/FilterModal.js +94 -70
  137. package/dist/esm/components/ReportBuilder/convert.d.ts +7 -2
  138. package/dist/esm/components/ReportBuilder/convert.d.ts.map +1 -1
  139. package/dist/esm/components/ReportBuilder/convert.js +51 -0
  140. package/dist/esm/components/ReportBuilder/convert.uspec.js +280 -13
  141. package/dist/esm/components/ReportBuilder/ui.d.ts +6 -6
  142. package/dist/esm/components/ReportBuilder/ui.d.ts.map +1 -1
  143. package/dist/esm/components/ReportBuilder/ui.js +6 -22
  144. package/dist/esm/components/UiComponents.d.ts +26 -1
  145. package/dist/esm/components/UiComponents.d.ts.map +1 -1
  146. package/dist/esm/components/UiComponents.js +95 -3
  147. package/dist/esm/hooks/useQuill.d.ts.map +1 -1
  148. package/dist/esm/hooks/useQuill.js +19 -3
  149. package/dist/esm/index.d.ts +2 -1
  150. package/dist/esm/index.d.ts.map +1 -1
  151. package/dist/esm/internals/ReportBuilder/PivotModal.d.ts +1 -0
  152. package/dist/esm/internals/ReportBuilder/PivotModal.d.ts.map +1 -1
  153. package/dist/esm/models/Columns.d.ts +2 -1
  154. package/dist/esm/models/Columns.d.ts.map +1 -1
  155. package/dist/esm/models/Filter.d.ts +15 -4
  156. package/dist/esm/models/Filter.d.ts.map +1 -1
  157. package/dist/esm/models/Filter.js +8 -0
  158. package/dist/esm/models/Report.d.ts +10 -23
  159. package/dist/esm/models/Report.d.ts.map +1 -1
  160. package/dist/esm/test-utils/constants.d.ts +56 -0
  161. package/dist/esm/test-utils/constants.d.ts.map +1 -0
  162. package/dist/esm/test-utils/constants.js +271 -0
  163. package/dist/esm/test-utils/generators.d.ts +4 -0
  164. package/dist/esm/test-utils/generators.d.ts.map +1 -0
  165. package/dist/esm/test-utils/generators.js +37 -0
  166. package/dist/esm/utils/astFilterProcessing.d.ts.map +1 -1
  167. package/dist/esm/utils/astFilterProcessing.js +38 -3
  168. package/dist/esm/utils/astFilterProcessing.uspec.js +153 -5
  169. package/dist/esm/utils/columnProcessing.d.ts +2 -0
  170. package/dist/esm/utils/columnProcessing.d.ts.map +1 -1
  171. package/dist/esm/utils/columnProcessing.js +52 -0
  172. package/dist/esm/utils/columnProcessing.uspec.d.ts +2 -0
  173. package/dist/esm/utils/columnProcessing.uspec.d.ts.map +1 -0
  174. package/dist/esm/utils/columnProcessing.uspec.js +65 -0
  175. package/dist/esm/utils/dashboard.d.ts +1 -1
  176. package/dist/esm/utils/dashboard.d.ts.map +1 -1
  177. package/dist/esm/utils/dashboard.js +3 -56
  178. package/dist/esm/utils/dataProcessing.d.ts +4 -2
  179. package/dist/esm/utils/dataProcessing.d.ts.map +1 -1
  180. package/dist/esm/utils/dataProcessing.js +16 -0
  181. package/dist/esm/utils/dataProcessing.uspec.js +1 -0
  182. package/dist/esm/utils/dates.d.ts +2 -1
  183. package/dist/esm/utils/dates.d.ts.map +1 -1
  184. package/dist/esm/utils/dates.js +21 -0
  185. package/dist/esm/utils/filterProcessing.d.ts +7 -1
  186. package/dist/esm/utils/filterProcessing.d.ts.map +1 -1
  187. package/dist/esm/utils/filterProcessing.js +97 -12
  188. package/dist/esm/utils/filterProcessing.uspec.d.ts +2 -0
  189. package/dist/esm/utils/filterProcessing.uspec.d.ts.map +1 -0
  190. package/dist/esm/utils/filterProcessing.uspec.js +245 -0
  191. package/dist/esm/utils/pivotConstructor.d.ts +2 -1
  192. package/dist/esm/utils/pivotConstructor.d.ts.map +1 -1
  193. package/dist/esm/utils/pivotConstructor.js +7 -1
  194. package/dist/esm/utils/report.d.ts +4 -1
  195. package/dist/esm/utils/report.d.ts.map +1 -1
  196. package/dist/esm/utils/report.js +92 -6
  197. package/dist/esm/utils/report.uspec.d.ts +2 -0
  198. package/dist/esm/utils/report.uspec.d.ts.map +1 -0
  199. package/dist/esm/utils/report.uspec.js +66 -0
  200. package/dist/esm/utils/tableProcessing.d.ts +1 -1
  201. package/package.json +1 -1
@@ -1,17 +1,40 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  // @ts-nocheck
3
3
  import { Area, CartesianGrid, ComposedChart as ReChartsAreaChart, ResponsiveContainer, Tooltip, XAxis, YAxis, } from 'recharts';
4
- import { valueFormatter } from '../../utils/valueFormatter';
4
+ import { DATE_FORMAT_TYPES, quillFormat, valueFormatter, } from '../../utils/valueFormatter';
5
5
  import { axisFormatter } from '../../utils/axisFormatter';
6
6
  import { selectColor } from '../../utils/color';
7
7
  import ChartTooltip from '../../components/Chart/ChartTooltip';
8
8
  import getDomain from '../../utils/getDomain';
9
9
  import { useEffect, useState } from 'react';
10
10
  import { hashCode } from '../../utils/crypto';
11
+ function createLineForEmptyChart(yAxisFields, dateFilter, xAxisField, xAxisFormat) {
12
+ let lineChartData = [];
13
+ if (dateFilter &&
14
+ DATE_FORMAT_TYPES.includes(xAxisFormat || '') &&
15
+ (!lineChartData || lineChartData.length === 0)) {
16
+ const xAxis = xAxisField || '';
17
+ const yAxis = yAxisFields[0]?.field;
18
+ const startDate = quillFormat({
19
+ value: dateFilter?.startDate,
20
+ format: xAxisFormat,
21
+ });
22
+ const endDate = quillFormat({
23
+ value: dateFilter?.endDate,
24
+ format: xAxisFormat,
25
+ });
26
+ lineChartData = [
27
+ { [xAxis]: startDate, [yAxis]: '0' },
28
+ { [xAxis]: endDate, [yAxis]: '0' },
29
+ ];
30
+ }
31
+ return lineChartData;
32
+ }
11
33
  export default function LineChart({ colors, colorMap = {}, yAxisFields, data, containerStyle, className, xAxisField, xAxisFormat, theme, comparison, isAnimationActive = true, hideXAxis = false, hideYAxis = false, hideCartesianGrid = false, hideHorizontalCartesianGrid = false, hideVerticalCartesianGrid = true, hideSubsequentXAxisTicks = false, cartesianGridLineStyle = 'solid', comparisonLineStyle = 'solid', cartesianGridLineColor, onClickChartElement = () => { }, dateFilter, }) {
12
34
  const [formattedData, setFormattedData] = useState(data);
13
35
  useEffect(() => {
14
36
  if (!data || data.length === 0) {
37
+ setFormattedData(createLineForEmptyChart(yAxisFields, dateFilter, xAxisField, xAxisFormat));
15
38
  return;
16
39
  }
17
40
  let newData = [...data];
@@ -31,7 +54,7 @@ export default function LineChart({ colors, colorMap = {}, yAxisFields, data, co
31
54
  }
32
55
  setFormattedData(newData);
33
56
  }, [data]);
34
- if (!data || data.length === 0) {
57
+ if (!formattedData || formattedData.length === 0) {
35
58
  return (_jsx("div", { style: {
36
59
  display: 'flex',
37
60
  flex: '1 0 auto',
@@ -57,6 +80,7 @@ export default function LineChart({ colors, colorMap = {}, yAxisFields, data, co
57
80
  key = 'comparisonGradientStart';
58
81
  if (index === 0 && gradient === 'stop')
59
82
  key = 'comparisonGradientStop';
83
+ // @ts-ignore
60
84
  return colorMap[field][key];
61
85
  }
62
86
  return undefined; // use the default colors from the theme
@@ -1,5 +1,5 @@
1
1
  /// <reference types="react" />
2
- import { QuillReport } from '../../Dashboard';
2
+ import { QuillReport } from '../../models/Report';
3
3
  import { QuillTheme } from '../../QuillProvider';
4
4
  export type DataLoaderChildProps = {
5
5
  isLoading: boolean;
@@ -9,10 +9,10 @@ export type DataLoaderChildProps = {
9
9
  field: string;
10
10
  direction: string;
11
11
  }) => void;
12
- data?: any;
12
+ data: QuillReport;
13
13
  };
14
- export default function DataLoader({ id, children, filters, }: {
15
- id: string;
14
+ export default function DataLoader({ item, children, filters, }: {
15
+ item: any;
16
16
  filters?: any;
17
17
  children: ({ isLoading, error, onPageChange, onSortChange, data, }: DataLoaderChildProps) => JSX.Element;
18
18
  }): JSX.Element;
@@ -29,11 +29,11 @@ type ColorMapType = {
29
29
  export type ChartDataLoaderChildProps = {
30
30
  isLoading: boolean;
31
31
  error?: string;
32
- data?: any;
32
+ data: QuillReport;
33
33
  dateBucket?: string;
34
34
  };
35
- export declare const ChartDataLoader: ({ id, children, dateBucket, additionalProcessing, filters, }: {
36
- id: string;
35
+ export declare const ChartDataLoader: ({ item, children, dateBucket, additionalProcessing, filters, }: {
36
+ item: any;
37
37
  dateBucket?: string | undefined;
38
38
  mapColorsToFields?: ((_report: QuillReport, _theme: QuillTheme) => ColorMapType) | undefined;
39
39
  additionalProcessing?: any;
@@ -1 +1 @@
1
- {"version":3,"file":"DataLoader.d.ts","sourceRoot":"","sources":["../../../../src/components/Dashboard/DataLoader.tsx"],"names":[],"mappings":";AAOA,OAAO,EAAE,WAAW,EAAuB,MAAM,iBAAiB,CAAC;AACnE,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAUjD,MAAM,MAAM,oBAAoB,GAAG;IACjC,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,YAAY,EAAE,CAAC,IAAI,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;IACnE,IAAI,CAAC,EAAE,GAAG,CAAC;CACZ,CAAC;AAEF,MAAM,CAAC,OAAO,UAAU,UAAU,CAAC,EACjC,EAAE,EACF,QAAQ,EACR,OAAO,GACR,EAAE;IACD,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,CAAC,EAAE,GAAG,CAAC;IACd,QAAQ,EAAE,CAAC,EACT,SAAS,EACT,KAAK,EACL,YAAY,EACZ,YAAY,EACZ,IAAI,GACL,EAAE,oBAAoB,KAAK,GAAG,CAAC,OAAO,CAAC;CACzC,GAAG,GAAG,CAAC,OAAO,CA4Hd;AAED,KAAK,YAAY,GAAG;IAClB,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,MAAM,yBAAyB,GAAG;IACtC,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,GAAG,CAAC;IACX,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AAIF,eAAO,MAAM,eAAe;QAOtB,MAAM;;mCAGC,WAAW,UACZ,UAAU,KACf,YAAY;2BACM,GAAG;cAChB,GAAG;wDAMV,yBAAyB,KAAK,WAAW;MAC1C,WAgEH,CAAC"}
1
+ {"version":3,"file":"DataLoader.d.ts","sourceRoot":"","sources":["../../../../src/components/Dashboard/DataLoader.tsx"],"names":[],"mappings":";AAOA,OAAO,EAAE,WAAW,EAAuB,MAAM,qBAAqB,CAAC;AACvE,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAmCjD,MAAM,MAAM,oBAAoB,GAAG;IACjC,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,YAAY,EAAE,CAAC,IAAI,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;IACnE,IAAI,EAAE,WAAW,CAAC;CACnB,CAAC;AAEF,MAAM,CAAC,OAAO,UAAU,UAAU,CAAC,EACjC,IAAI,EACJ,QAAQ,EACR,OAAO,GACR,EAAE;IACD,IAAI,EAAE,GAAG,CAAC;IACV,OAAO,CAAC,EAAE,GAAG,CAAC;IACd,QAAQ,EAAE,CAAC,EACT,SAAS,EACT,KAAK,EACL,YAAY,EACZ,YAAY,EACZ,IAAI,GACL,EAAE,oBAAoB,KAAK,GAAG,CAAC,OAAO,CAAC;CACzC,GAAG,GAAG,CAAC,OAAO,CA4Id;AAED,KAAK,YAAY,GAAG;IAClB,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,MAAM,yBAAyB,GAAG;IACtC,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,WAAW,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AAIF,eAAO,MAAM,eAAe;UAOpB,GAAG;;mCAGE,WAAW,UACZ,UAAU,KACf,YAAY;2BACM,GAAG;cAChB,GAAG;wDAMV,yBAAyB,KAAK,WAAW;MAC1C,WAsEH,CAAC"}
@@ -2,17 +2,37 @@ import { Fragment as _Fragment, jsx as _jsx } from "react/jsx-runtime";
2
2
  import { useContext, useEffect, useState } from 'react';
3
3
  import { didFiltersChange } from '../../Chart';
4
4
  import { ClientContext, CustomFieldContext, DashboardContext, } from '../../Context';
5
- import { fetchReport } from '../../utils/report';
5
+ import { convertInternalReportToReport, EMPTY_REPORT, fetchReport, } from '../../utils/report';
6
6
  import { shouldFetchMore, DEFAULT_PAGINATION, shouldSortInMemory, } from '../../utils/paginationProcessing';
7
7
  import { fetchTableByReport } from '../../utils/tableProcessing';
8
- export default function DataLoader({ id, children, filters, }) {
8
+ const constructReportFromItem = (item) => {
9
+ return {
10
+ ...EMPTY_REPORT,
11
+ id: item._id,
12
+ name: item.name,
13
+ dashboardName: item.dashboardName,
14
+ rows: [],
15
+ columns: [],
16
+ chartType: item.chartType,
17
+ dateField: item.dateField,
18
+ pivot: item.pivot,
19
+ xAxisLabel: item.xAxisLabel,
20
+ xAxisField: item.xAxisField,
21
+ xAxisFormat: item.xAxisFormat,
22
+ yAxisFields: item.yAxisFields,
23
+ order: item.order,
24
+ compareRows: item.compareRows,
25
+ filtersApplied: item.filtersApplied,
26
+ };
27
+ };
28
+ export default function DataLoader({ item, children, filters, }) {
9
29
  const [client] = useContext(ClientContext);
10
- const { dispatch, dashboard } = useContext(DashboardContext);
30
+ const [dashboard, dispatch] = useContext(DashboardContext);
11
31
  const [customFields] = useContext(CustomFieldContext);
12
32
  const [loading, setLoading] = useState(false);
13
33
  const [error, setError] = useState(undefined);
14
34
  const [previousPage, setPreviousPage] = useState(0);
15
- const [report, setReport] = useState(dashboard[id]);
35
+ const [report, setReport] = useState(dashboard[item._id] ?? constructReportFromItem(item));
16
36
  const [additionalProcessing, setAdditionProcessing] = useState({
17
37
  page: DEFAULT_PAGINATION,
18
38
  });
@@ -33,7 +53,7 @@ export default function DataLoader({ id, children, filters, }) {
33
53
  }
34
54
  };
35
55
  const onSortChange = (sort) => {
36
- if (shouldSortInMemory(DEFAULT_PAGINATION, report.rowCount, report.pivot)) {
56
+ if (shouldSortInMemory(DEFAULT_PAGINATION, report.rowCount, !!report.pivot)) {
37
57
  return;
38
58
  }
39
59
  const updatedProcessing = { page: DEFAULT_PAGINATION, sort };
@@ -54,7 +74,11 @@ export default function DataLoader({ id, children, filters, }) {
54
74
  if (resetRows) {
55
75
  tempRows = paginatedRows.rows;
56
76
  }
57
- setReport({ ...report, rows: tempRows });
77
+ const convertedReport = convertInternalReportToReport({
78
+ ...report,
79
+ rows: tempRows,
80
+ });
81
+ setReport(convertedReport);
58
82
  setAdditionProcessing(updatedProcessing);
59
83
  setTimeout(() => {
60
84
  setLoading(false);
@@ -67,70 +91,81 @@ export default function DataLoader({ id, children, filters, }) {
67
91
  }
68
92
  };
69
93
  const fetchReportHelper = async (useReportTask = true, processing) => {
70
- if (!didFiltersChange(dashboard[id], filters) &&
94
+ if (dashboard[item._id] &&
95
+ !didFiltersChange(dashboard[item._id], filters) &&
71
96
  !loading &&
72
- !dashboard[id].triggerReload) {
97
+ // @ts-ignore
98
+ !dashboard[item._id].triggerReload) {
73
99
  setLoading(false);
74
- setReport(dashboard[id]);
100
+ const convertedReport = convertInternalReportToReport(
101
+ // @ts-ignore
102
+ dashboard[item._id]);
103
+ setReport(convertedReport);
75
104
  return;
76
105
  }
77
106
  setLoading(true);
78
- const { report, error } = await fetchReport(id, client, useReportTask, filters, processing, undefined, customFields);
107
+ const { report, error } = await fetchReport(item._id, client, useReportTask, filters, processing, undefined, customFields);
79
108
  dispatch({
80
109
  type: 'UPDATE_DASHBOARD_ITEM',
81
- id: id,
110
+ id: item._id,
82
111
  data: { ...report, triggerReload: false },
83
112
  });
84
- setReport(report);
113
+ const convertedReport = convertInternalReportToReport(report);
114
+ setReport(convertedReport);
85
115
  setAdditionProcessing(processing);
86
116
  setError(error);
87
117
  setLoading(false);
88
118
  };
89
119
  useEffect(() => {
90
120
  fetchReportHelper(true, additionalProcessing);
91
- }, [filters, id]);
121
+ }, [filters, item._id]);
92
122
  useEffect(() => {
93
- if (dashboard[id] && dashboard[id].triggerReload) {
123
+ // @ts-ignore
124
+ if (dashboard[item._id] && dashboard[item._id].triggerReload) {
94
125
  fetchReportHelper(true, additionalProcessing);
95
126
  }
96
- }, [dashboard[id]]);
127
+ }, [dashboard[item._id]]);
97
128
  return (_jsx(_Fragment, { children: children({
98
129
  isLoading: loading,
99
130
  error,
100
131
  onPageChange,
101
132
  onSortChange,
102
- data: report ?? undefined,
133
+ data: report,
103
134
  }) }));
104
135
  }
105
136
  // The same data-loader pattern as above, but with special logic for charts
106
137
  // At some point these may be able to get merged into one function.
107
- export const ChartDataLoader = ({ id, children, dateBucket, additionalProcessing, filters, }) => {
108
- const { dispatch, dashboard } = useContext(DashboardContext);
138
+ export const ChartDataLoader = ({ item, children, dateBucket, additionalProcessing, filters, }) => {
139
+ const [dashboard, dispatch] = useContext(DashboardContext);
109
140
  const [initialLoad, setInitialLoad] = useState(true);
110
141
  const [loading, setLoading] = useState(false);
111
142
  const [error, setError] = useState(undefined);
112
143
  const [localDateBucket, setLocalDateBucket] = useState(undefined);
113
144
  const [localAdditionalProcessing, setLocalAdditionalProcessing] = useState();
114
- const [report, setReport] = useState(dashboard[id]);
145
+ const [report, setReport] = useState(dashboard[item._id] ?? constructReportFromItem(item));
115
146
  const [client] = useContext(ClientContext);
116
147
  const [customFields] = useContext(CustomFieldContext);
117
148
  const fetchReportHelper = async (useReportTask = true) => {
118
- if (!didFiltersChange(dashboard[id], filters) &&
119
- !dashboard[id].triggerReload &&
149
+ const tempReport = dashboard[item._id];
150
+ if (tempReport &&
151
+ !didFiltersChange(tempReport, filters) &&
152
+ !tempReport.triggerReload &&
120
153
  dateBucket === localDateBucket &&
121
154
  additionalProcessing?.last === localAdditionalProcessing?.last) {
122
155
  setLoading(false);
123
- setReport(dashboard[id]);
156
+ const convertedReport = convertInternalReportToReport(tempReport);
157
+ setReport(convertedReport);
124
158
  return;
125
159
  }
126
160
  setLoading(true);
127
- const { report, error } = await fetchReport(id, client, useReportTask, filters, additionalProcessing, dateBucket, customFields);
161
+ const { report, error } = await fetchReport(item._id, client, useReportTask, filters, additionalProcessing, dateBucket, customFields);
128
162
  dispatch({
129
163
  type: 'UPDATE_DASHBOARD_ITEM',
130
- id: id,
164
+ id: item._id,
131
165
  data: { ...report, triggerReload: false },
132
166
  });
133
- setReport(report);
167
+ const convertedReport = convertInternalReportToReport(report);
168
+ setReport(convertedReport);
134
169
  setLocalDateBucket(dateBucket);
135
170
  setLocalAdditionalProcessing(additionalProcessing);
136
171
  setError(error);
@@ -139,15 +174,16 @@ export const ChartDataLoader = ({ id, children, dateBucket, additionalProcessing
139
174
  useEffect(() => {
140
175
  setInitialLoad(false);
141
176
  fetchReportHelper();
142
- }, [filters, id, dateBucket, additionalProcessing]);
177
+ }, [filters, item._id, dateBucket, additionalProcessing]);
143
178
  useEffect(() => {
144
- if (dashboard[id] && dashboard[id].triggerReload) {
179
+ const tempReport = dashboard[item._id];
180
+ if (tempReport && tempReport.triggerReload) {
145
181
  fetchReportHelper();
146
182
  }
147
- }, [dashboard[id]]);
183
+ }, [dashboard[item._id]]);
148
184
  return children({
149
185
  isLoading: loading || initialLoad,
150
- data: report ?? undefined,
186
+ data: report,
151
187
  error,
152
188
  dateBucket,
153
189
  });
@@ -1 +1 @@
1
- {"version":3,"file":"MetricComponent.d.ts","sourceRoot":"","sources":["../../../../src/components/Dashboard/MetricComponent.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAQnD,MAAM,CAAC,OAAO,UAAU,oBAAoB,CAAC,EAC3C,MAAM,EACN,OAAO,EACP,KAAK,EACL,SAAS,GACV,EAAE,gBAAgB,GAAG,GAAG,CAAC,OAAO,CA8PhC"}
1
+ {"version":3,"file":"MetricComponent.d.ts","sourceRoot":"","sources":["../../../../src/components/Dashboard/MetricComponent.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAMnD,MAAM,CAAC,OAAO,UAAU,oBAAoB,CAAC,EAC3C,MAAM,EACN,OAAO,EACP,KAAK,EACL,SAAS,GACV,EAAE,gBAAgB,GAAG,GAAG,CAAC,OAAO,CAgOhC"}
@@ -1,27 +1,11 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { useEffect, useState } from 'react';
3
2
  import { COMPARISON_OPTIONS } from '../../DateRangePicker/dateRangePickerUtils';
4
- import { valueFormatter } from '../../utils/valueFormatter';
5
3
  import ChartError from '../Chart/ChartError';
6
4
  import ChartSkeleton from '../Chart/ChartSkeleton';
7
5
  import { useTheme } from '../../hooks';
8
- import { usePivot } from '../../hooks/useQuill';
9
6
  export default function QuillMetricComponent({ report, onClick, error, isLoading, }) {
10
7
  const theme = useTheme();
11
8
  const dateFilter = report?.filtersApplied?.find((filter) => filter.filterType == 'date_range');
12
- const [rows, setRows] = useState(report?.rows ?? []);
13
- const pivotData = usePivot(report.id);
14
- useEffect(() => {
15
- if (pivotData.data) {
16
- setRows(pivotData.data.rows);
17
- }
18
- else if (report?.rows) {
19
- setRows(report.rows);
20
- }
21
- else {
22
- setRows([]);
23
- }
24
- }, [pivotData?.data?.rows, report?.rows]);
25
9
  const primaryMetricLabel = report?.filtersApplied?.date_range?.preset?.label;
26
10
  const comparisonKey = report?.filtersApplied?.date_range?.comparisonRange?.value;
27
11
  const comparisonLabel = COMPARISON_OPTIONS.find((opt) => opt.value === comparisonKey)?.text;
@@ -30,6 +14,7 @@ export default function QuillMetricComponent({ report, onClick, error, isLoading
30
14
  boxSizing: 'content-box',
31
15
  borderRadius: 8,
32
16
  paddingBottom: isLoading ? 0 : 30,
17
+ width: '100%',
33
18
  }, children: _jsx("div", { style: {
34
19
  width: '100%',
35
20
  height: '100%',
@@ -50,7 +35,7 @@ export default function QuillMetricComponent({ report, onClick, error, isLoading
50
35
  justifyContent: 'space-between',
51
36
  boxSizing: 'content-box',
52
37
  paddingBottom: 5,
53
- }, children: [_jsx("div", { style: {
38
+ }, children: [onClick && (_jsx("div", { style: {
54
39
  fontFamily: theme.fontFamily,
55
40
  color: theme.primaryTextColor,
56
41
  boxSizing: 'content-box',
@@ -62,7 +47,7 @@ export default function QuillMetricComponent({ report, onClick, error, isLoading
62
47
  display: 'block',
63
48
  maxWidth: '100%',
64
49
  overflow: 'hidden',
65
- }, children: report?.name }), onClick && report?.name ? (_jsx("div", { style: {
50
+ }, children: report?.name })), onClick && report?.name ? (_jsx("div", { style: {
66
51
  fontFamily: theme.fontFamily,
67
52
  color: theme.primaryTextColor,
68
53
  boxSizing: 'content-box',
@@ -75,7 +60,8 @@ export default function QuillMetricComponent({ report, onClick, error, isLoading
75
60
  }, children: 'view report →' })) : null] }), isLoading ? (_jsx(ChartSkeleton, { containerStyle: {
76
61
  maxHeight: '78px',
77
62
  height: '100%',
78
- } })) : error ? (_jsx("div", { children: _jsx(ChartError, { errorMessage: error }) })) : rows?.length === 0 || rows[0][report.xAxisField] === null ? (_jsx("div", { style: {
63
+ } })) : error ? (_jsx("div", { children: _jsx(ChartError, { errorMessage: error }) })) : report.rows?.length === 0 ||
64
+ report.rows[0][report.xAxisField] === null ? (_jsx("div", { style: {
79
65
  display: 'flex',
80
66
  flex: '1 0 auto',
81
67
  height: '100%',
@@ -112,19 +98,9 @@ export default function QuillMetricComponent({ report, onClick, error, isLoading
112
98
  gap: 4,
113
99
  alignItems: 'baseline',
114
100
  marginRight: 'auto',
115
- }, children: [_jsx("span", { children: rows.length > 0 &&
116
- valueFormatter({
117
- value: rows[0][report.xAxisField] ?? 0,
118
- field: report.xAxisField,
119
- fields: [
120
- {
121
- field: report.xAxisField,
122
- format: report.xAxisFormat,
123
- label: report.xAxisLabel,
124
- _id: report.id || 'dummy',
125
- },
126
- ],
127
- }) }), dateFilter?.comparison && (_jsx("span", { style: {
101
+ }, children: [_jsx("span", { children: (report.rows.length > 0 &&
102
+ report.rows[0][report.xAxisField]) ??
103
+ 0 }), dateFilter?.comparison && (_jsx("span", { style: {
128
104
  fontSize: 13,
129
105
  fontWeight: '500',
130
106
  fontFamily: theme?.fontFamily,
@@ -143,19 +119,9 @@ export default function QuillMetricComponent({ report, onClick, error, isLoading
143
119
  fontWeight: '500',
144
120
  fontFamily: theme?.fontFamily,
145
121
  color: theme?.secondaryTextColor,
146
- }, children: rows.length > 0 &&
147
- valueFormatter({
148
- value: rows[0][`comparison_${report.xAxisField}`] ?? 0,
149
- field: report.xAxisField,
150
- fields: [
151
- {
152
- field: report.xAxisField,
153
- format: report.xAxisFormat,
154
- label: report.xAxisLabel,
155
- _id: report.id || 'dummy',
156
- },
157
- ],
158
- }) }), _jsx("span", { style: {
122
+ }, children: (report.rows.length > 0 &&
123
+ report.rows[0][`comparison_${report.xAxisField}`]) ??
124
+ 0 }), _jsx("span", { style: {
159
125
  fontSize: 13,
160
126
  fontWeight: '500',
161
127
  fontFamily: theme?.fontFamily,
@@ -1,5 +1,5 @@
1
1
  /// <reference types="react" />
2
- import { QuillReport } from '../../Dashboard';
2
+ import { QuillReport } from '../../models/Report';
3
3
  export default function QuillTableComponent({ report, onClick, isLoading, error, rowCount, onPageChange, onSortChange, }: {
4
4
  report: QuillReport;
5
5
  onClick?: (report: QuillReport) => void;
@@ -1 +1 @@
1
- {"version":3,"file":"TableComponent.d.ts","sourceRoot":"","sources":["../../../../src/components/Dashboard/TableComponent.tsx"],"names":[],"mappings":";AAKA,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAK9C,MAAM,CAAC,OAAO,UAAU,mBAAmB,CAAC,EAC1C,MAAM,EACN,OAAO,EACP,SAAS,EACT,KAAK,EACL,QAAQ,EACR,YAAY,EACZ,YAAY,GACb,EAAE;IACD,MAAM,EAAE,WAAW,CAAC;IACpB,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,IAAI,CAAC;IACxC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;CACrE,GAAG,GAAG,CAAC,OAAO,CAyId"}
1
+ {"version":3,"file":"TableComponent.d.ts","sourceRoot":"","sources":["../../../../src/components/Dashboard/TableComponent.tsx"],"names":[],"mappings":";AAIA,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAIlD,MAAM,CAAC,OAAO,UAAU,mBAAmB,CAAC,EAC1C,MAAM,EACN,OAAO,EACP,SAAS,EACT,KAAK,EACL,QAAQ,EACR,YAAY,EACZ,YAAY,GACb,EAAE;IACD,MAAM,EAAE,WAAW,CAAC;IACpB,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,IAAI,CAAC;IACxC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;CACrE,GAAG,GAAG,CAAC,OAAO,CAwGd"}
@@ -1,48 +1,19 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { useEffect, useState } from 'react';
3
3
  import QuillTable from '../QuillTable';
4
- import { quillFormat } from '../../utils/valueFormatter';
5
4
  import ChartSkeleton from '../Chart/ChartSkeleton';
6
5
  import ChartError from '../Chart/ChartError';
7
6
  import { useTheme } from '../../hooks';
8
7
  import { useExport } from '../../hooks/useExport';
9
- import { usePivot } from '../../hooks/useQuill';
10
8
  export default function QuillTableComponent({ report, onClick, isLoading, error, rowCount, onPageChange, onSortChange, }) {
11
9
  const theme = useTheme();
12
10
  const [initialLoad, setInitialLoad] = useState(true);
13
11
  const { downloadCSV } = useExport(report?.id);
14
- const pivotData = usePivot(report.id);
15
- const [rows, setRows] = useState(report?.rows ?? []);
16
- const [columns, setColumns] = useState(report?.columns ?? report?.yAxisFields ?? []);
17
- useEffect(() => {
18
- if (!report.rows || !report.columns) {
19
- return;
20
- }
21
- if (report.pivot !== null && pivotData.data) {
22
- setRows(pivotData.data.rows);
23
- setColumns(pivotData.data.columns);
24
- }
25
- else {
26
- setRows(report?.rows ?? []);
27
- setColumns(report?.columns ?? report?.yAxisFields ?? []);
28
- }
29
- }, [pivotData, report]);
30
12
  useEffect(() => {
31
13
  if (!isLoading) {
32
14
  setInitialLoad(false);
33
15
  }
34
16
  }, [isLoading]);
35
- const formattedRows = rows.map((row) => {
36
- return columns.reduce((formattedRow, column) => {
37
- // Apply the format function to each field in the row
38
- const formattedValue = quillFormat({
39
- value: row[column.field],
40
- format: column.format,
41
- });
42
- formattedRow[column.field] = formattedValue;
43
- return formattedRow;
44
- }, {});
45
- });
46
17
  return (_jsxs("div", { style: { cursor: 'pointer' }, onClick: () => onClick && onClick(report), children: [_jsxs("div", { style: {
47
18
  display: 'flex',
48
19
  flexDirection: 'row',
@@ -78,7 +49,7 @@ export default function QuillTableComponent({ report, onClick, isLoading, error,
78
49
  } })) : error ? (_jsx("div", { style: {
79
50
  width: '100%',
80
51
  height: '400px',
81
- }, children: _jsx(ChartError, { errorMessage: error }) })) : (_jsx(QuillTable, { isLoading: isLoading, rows: formattedRows ?? [], rowCount: rowCount, columns: columns, rowsPerPage: 10, containerStyle: {
52
+ }, children: _jsx(ChartError, { errorMessage: error }) })) : (_jsx(QuillTable, { isLoading: isLoading, rows: report.rows ?? [], rowCount: rowCount, columns: report.columns, rowsPerPage: 10, containerStyle: {
82
53
  width: '100%',
83
54
  height: '400px',
84
55
  }, downloadCSV: () => {
@@ -1 +1 @@
1
- {"version":3,"file":"QuillMultiSelectWithCombo.d.ts","sourceRoot":"","sources":["../../../src/components/QuillMultiSelectWithCombo.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,yBAAyB,EAAE,MAAM,gBAAgB,CAAC;AAW3D;;GAEG;AACH,wBAAgB,kCAAkC,CAAC,EACjD,OAAO,EACP,KAAK,EACL,QAAQ,EACR,KAAK,EACL,KAAK,GACN,EAAE,yBAAyB,2CAqS3B;AAED,eAAO,MAAM,gBAAgB;WAKpB,MAAM;kBACC,MAAM,KAAK,IAAI;iBAChB,MAAM;6CAwDpB,CAAC"}
1
+ {"version":3,"file":"QuillMultiSelectWithCombo.d.ts","sourceRoot":"","sources":["../../../src/components/QuillMultiSelectWithCombo.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,yBAAyB,EAAE,MAAM,gBAAgB,CAAC;AAiC3D;;GAEG;AACH,wBAAgB,kCAAkC,CAAC,EACjD,OAAO,EACP,KAAK,EACL,QAAQ,EACR,KAAK,EACL,KAAK,GACN,EAAE,yBAAyB,2CAqS3B;AAED,eAAO,MAAM,gBAAgB;WAKpB,MAAM;kBACC,MAAM,KAAK,IAAI;iBAChB,MAAM;6CAwDpB,CAAC"}
@@ -2,6 +2,21 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { useOnClickOutside } from '../hooks';
3
3
  import React, { useContext, useEffect, useRef, useState, } from 'react';
4
4
  import { ThemeContext } from '../Context';
5
+ /**
6
+ * Helper function for displaying option labels
7
+ */
8
+ function displaySelectedOptionLabels({ options, value, }) {
9
+ if (!value || !value.length) {
10
+ return 'Select';
11
+ }
12
+ const matchingOptions = options.filter((elem) => value.includes(elem.value));
13
+ if (!matchingOptions.length) {
14
+ return 'Select';
15
+ }
16
+ return matchingOptions
17
+ .map((elem) => elem.label)
18
+ .join(', ');
19
+ }
5
20
  /**
6
21
  * A robust select component that implements the new minimal Select interface.
7
22
  */
@@ -100,7 +115,7 @@ export function QuillMultiSelectComponentWithCombo({ options, width, onChange, l
100
115
  width: '100%',
101
116
  textAlign: 'left',
102
117
  zIndex: 1,
103
- }, children: value && value.length > 0 ? value.join(', ') : 'Select' }), _jsx("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 20 20", fill: "currentColor", "aria-hidden": "true", "data-slot": "icon", height: 20, width: 20, style: { minHeight: 20, minWidth: 20 }, children: _jsx("path", { fillRule: "evenodd", d: "M5.22 8.22a.75.75 0 0 1 1.06 0L10 11.94l3.72-3.72a.75.75 0 1 1 1.06 1.06l-4.25 4.25a.75.75 0 0 1-1.06 0L5.22 9.28a.75.75 0 0 1 0-1.06Z", clipRule: "evenodd" }) })] }), showModal && (_jsxs("div", { ref: modalRef, style: {
118
+ }, children: displaySelectedOptionLabels({ options, value }) }), _jsx("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 20 20", fill: "currentColor", "aria-hidden": "true", "data-slot": "icon", height: 20, width: 20, style: { minHeight: 20, minWidth: 20 }, children: _jsx("path", { fillRule: "evenodd", d: "M5.22 8.22a.75.75 0 0 1 1.06 0L10 11.94l3.72-3.72a.75.75 0 1 1 1.06 1.06l-4.25 4.25a.75.75 0 0 1-1.06 0L5.22 9.28a.75.75 0 0 1 0-1.06Z", clipRule: "evenodd" }) })] }), showModal && (_jsxs("div", { ref: modalRef, style: {
104
119
  position: 'absolute',
105
120
  width: '100%',
106
121
  display: 'flex',
@@ -1 +1 @@
1
- {"version":3,"file":"QuillSelectWithCombo.d.ts","sourceRoot":"","sources":["../../../src/components/QuillSelectWithCombo.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAMtD;;GAEG;AACH,wBAAgB,6BAA6B,CAAC,EAC5C,OAAO,EACP,KAAK,EACL,KAAK,EACL,QAAQ,EACR,KAAK,GACN,EAAE,oBAAoB,2CAgPtB"}
1
+ {"version":3,"file":"QuillSelectWithCombo.d.ts","sourceRoot":"","sources":["../../../src/components/QuillSelectWithCombo.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAYtD;;GAEG;AACH,wBAAgB,6BAA6B,CAAC,EAC5C,OAAO,EACP,KAAK,EACL,KAAK,EACL,QAAQ,EACR,KAAK,GACN,EAAE,oBAAoB,2CAoPtB"}
@@ -1,6 +1,6 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { useOnClickOutside } from '../hooks';
3
- import React, { useContext, useRef, useState } from 'react';
3
+ import React, { useContext, useEffect, useRef, useState, } from 'react';
4
4
  import { ThemeContext } from '../Context';
5
5
  import { ListboxTextInput } from './QuillMultiSelectWithCombo';
6
6
  /**
@@ -11,8 +11,11 @@ export function QuillSelectComponentWithCombo({ options, value, width, onChange,
11
11
  const [showModal, setShowModal] = useState(false);
12
12
  const modalRef = useRef(null);
13
13
  const [searchQuery, setSearchQuery] = React.useState('');
14
- const [filteredItems, setFilteredItems] = React.useState(options.slice(0, 20));
14
+ const [filteredItems, setFilteredItems] = React.useState([]);
15
15
  useOnClickOutside(modalRef, () => setShowModal(false));
16
+ useEffect(() => {
17
+ setFilteredItems(options.slice(0, 20));
18
+ }, [options]);
16
19
  const handleSearchChange = (value) => {
17
20
  setSearchQuery(value);
18
21
  const curFilteredItems = value === ''
@@ -1,11 +1,16 @@
1
1
  /// <reference types="react" />
2
- import { Filter } from '../../models/Filter';
2
+ import { Filter, Operator } from '../../models/Filter';
3
3
  interface FilterModalProps {
4
4
  schema: any;
5
5
  filter?: Filter;
6
6
  fieldValuesMap: {
7
7
  [key: string]: string[];
8
+ } | {
9
+ [key: string]: {
10
+ [key: string]: string[];
11
+ };
8
12
  };
13
+ customOperatorOptions?: OperatorOptionsMap;
9
14
  onSubmitFilter: (filter: Filter) => void;
10
15
  onDeleteFilter: () => void;
11
16
  ButtonComponent: React.ComponentType<any>;
@@ -14,9 +19,12 @@ interface FilterModalProps {
14
19
  SecondaryButtonComponent?: React.ComponentType<any>;
15
20
  MultiSelectComponent: React.ComponentType<any>;
16
21
  }
22
+ type OperatorOptionsMap = {
23
+ [key: string]: Operator[];
24
+ };
17
25
  /**
18
26
  * Modal for adding, editing, and deleting Filters
19
27
  */
20
- export default function FilterModal({ schema, filter, fieldValuesMap, onSubmitFilter, onDeleteFilter, ButtonComponent, SelectComponent, TextInputComponent, SecondaryButtonComponent, MultiSelectComponent, }: FilterModalProps): import("react/jsx-runtime").JSX.Element;
28
+ export default function FilterModal({ schema, filter, fieldValuesMap, customOperatorOptions, onSubmitFilter, onDeleteFilter, ButtonComponent, SelectComponent, TextInputComponent, SecondaryButtonComponent, MultiSelectComponent, }: FilterModalProps): import("react/jsx-runtime").JSX.Element;
21
29
  export {};
22
30
  //# sourceMappingURL=FilterModal.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"FilterModal.d.ts","sourceRoot":"","sources":["../../../../src/components/ReportBuilder/FilterModal.tsx"],"names":[],"mappings":";AAIA,OAAO,EACL,MAAM,EAUP,MAAM,qBAAqB,CAAC;AAK7B,UAAU,gBAAgB;IACxB,MAAM,EAAE,GAAG,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;KAAE,CAAC;IAC5C,cAAc,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,cAAc,EAAE,MAAM,IAAI,CAAC;IAC3B,eAAe,EAAE,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;IAC1C,eAAe,EAAE,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;IAC1C,kBAAkB,EAAE,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;IAC7C,wBAAwB,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;IACpD,oBAAoB,EAAE,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;CAChD;AAWD;;GAEG;AACH,MAAM,CAAC,OAAO,UAAU,WAAW,CAAC,EAClC,MAAM,EACN,MAAM,EACN,cAAc,EACd,cAAc,EACd,cAAc,EACd,eAAe,EACf,eAAe,EACf,kBAAkB,EAClB,wBAAwB,EACxB,oBAAoB,GACrB,EAAE,gBAAgB,2CAstBlB"}
1
+ {"version":3,"file":"FilterModal.d.ts","sourceRoot":"","sources":["../../../../src/components/ReportBuilder/FilterModal.tsx"],"names":[],"mappings":";AAIA,OAAO,EACL,MAAM,EAIN,QAAQ,EAOT,MAAM,qBAAqB,CAAC;AAM7B,UAAU,gBAAgB;IACxB,MAAM,EAAE,GAAG,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,cAAc,EACZ;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;KAAE,GACzB;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG;YAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;SAAE,CAAA;KAAE,CAAC;IACnD,qBAAqB,CAAC,EAAE,kBAAkB,CAAC;IAC3C,cAAc,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,cAAc,EAAE,MAAM,IAAI,CAAC;IAC3B,eAAe,EAAE,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;IAC1C,eAAe,EAAE,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;IAC1C,kBAAkB,EAAE,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;IAC7C,wBAAwB,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;IACpD,oBAAoB,EAAE,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;CAChD;AAQD,KAAK,kBAAkB,GAAG;IACxB,CAAC,GAAG,EAAE,MAAM,GAAG,QAAQ,EAAE,CAAC;CAC3B,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,OAAO,UAAU,WAAW,CAAC,EAClC,MAAM,EACN,MAAM,EACN,cAAc,EACd,qBAAqB,EACrB,cAAc,EACd,cAAc,EACd,eAAe,EACf,eAAe,EACf,kBAAkB,EAClB,wBAAwB,EACxB,oBAAoB,GACrB,EAAE,gBAAgB,2CAwvBlB"}