@quillsql/react 2.13.0 → 2.13.1

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 (87) hide show
  1. package/dist/cjs/Chart.d.ts.map +1 -1
  2. package/dist/cjs/Chart.js +2 -4
  3. package/dist/cjs/ChartBuilder.d.ts +1 -4
  4. package/dist/cjs/ChartBuilder.d.ts.map +1 -1
  5. package/dist/cjs/ChartBuilder.js +5 -5
  6. package/dist/cjs/ChartEditor.d.ts.map +1 -1
  7. package/dist/cjs/ChartEditor.js +17 -40
  8. package/dist/cjs/Context.d.ts +1 -1
  9. package/dist/cjs/Context.d.ts.map +1 -1
  10. package/dist/cjs/Context.js +25 -5
  11. package/dist/cjs/Dashboard.d.ts +1 -4
  12. package/dist/cjs/Dashboard.d.ts.map +1 -1
  13. package/dist/cjs/Dashboard.js +44 -34
  14. package/dist/cjs/Table.d.ts.map +1 -1
  15. package/dist/cjs/Table.js +2 -5
  16. package/dist/cjs/components/Dashboard/DataLoader.d.ts +4 -6
  17. package/dist/cjs/components/Dashboard/DataLoader.d.ts.map +1 -1
  18. package/dist/cjs/components/Dashboard/DataLoader.js +67 -74
  19. package/dist/cjs/components/Dashboard/TableComponent.d.ts.map +1 -1
  20. package/dist/cjs/components/Dashboard/TableComponent.js +1 -8
  21. package/dist/cjs/components/QuillTable.d.ts +1 -1
  22. package/dist/cjs/components/QuillTable.d.ts.map +1 -1
  23. package/dist/cjs/components/QuillTable.js +14 -17
  24. package/dist/cjs/components/ReportBuilder/ui.d.ts +1 -0
  25. package/dist/cjs/components/ReportBuilder/ui.d.ts.map +1 -1
  26. package/dist/cjs/components/ReportBuilder/ui.js +13 -1
  27. package/dist/cjs/components/UiComponents.d.ts +1 -1
  28. package/dist/cjs/components/UiComponents.d.ts.map +1 -1
  29. package/dist/cjs/components/UiComponents.js +3 -3
  30. package/dist/cjs/hooks/useDashboard.d.ts.map +1 -1
  31. package/dist/cjs/hooks/useDashboard.js +13 -9
  32. package/dist/cjs/hooks/useQuill.d.ts.map +1 -1
  33. package/dist/cjs/hooks/useQuill.js +1 -3
  34. package/dist/cjs/models/Dashboard.d.ts +1 -1
  35. package/dist/cjs/models/Dashboard.d.ts.map +1 -1
  36. package/dist/cjs/utils/dashboard.d.ts.map +1 -1
  37. package/dist/cjs/utils/dashboard.js +2 -3
  38. package/dist/cjs/utils/report.d.ts +2 -2
  39. package/dist/cjs/utils/report.d.ts.map +1 -1
  40. package/dist/cjs/utils/report.js +4 -5
  41. package/dist/cjs/utils/tableProcessing.d.ts +2 -2
  42. package/dist/cjs/utils/tableProcessing.d.ts.map +1 -1
  43. package/dist/cjs/utils/tableProcessing.js +1 -3
  44. package/dist/esm/Chart.d.ts.map +1 -1
  45. package/dist/esm/Chart.js +2 -4
  46. package/dist/esm/ChartBuilder.d.ts +1 -4
  47. package/dist/esm/ChartBuilder.d.ts.map +1 -1
  48. package/dist/esm/ChartBuilder.js +5 -5
  49. package/dist/esm/ChartEditor.d.ts.map +1 -1
  50. package/dist/esm/ChartEditor.js +18 -41
  51. package/dist/esm/Context.d.ts +1 -1
  52. package/dist/esm/Context.d.ts.map +1 -1
  53. package/dist/esm/Context.js +25 -5
  54. package/dist/esm/Dashboard.d.ts +1 -4
  55. package/dist/esm/Dashboard.d.ts.map +1 -1
  56. package/dist/esm/Dashboard.js +44 -34
  57. package/dist/esm/Table.d.ts.map +1 -1
  58. package/dist/esm/Table.js +2 -5
  59. package/dist/esm/components/Dashboard/DataLoader.d.ts +4 -6
  60. package/dist/esm/components/Dashboard/DataLoader.d.ts.map +1 -1
  61. package/dist/esm/components/Dashboard/DataLoader.js +68 -75
  62. package/dist/esm/components/Dashboard/TableComponent.d.ts.map +1 -1
  63. package/dist/esm/components/Dashboard/TableComponent.js +1 -8
  64. package/dist/esm/components/QuillTable.d.ts +1 -1
  65. package/dist/esm/components/QuillTable.d.ts.map +1 -1
  66. package/dist/esm/components/QuillTable.js +14 -17
  67. package/dist/esm/components/ReportBuilder/ui.d.ts +1 -0
  68. package/dist/esm/components/ReportBuilder/ui.d.ts.map +1 -1
  69. package/dist/esm/components/ReportBuilder/ui.js +8 -0
  70. package/dist/esm/components/UiComponents.d.ts +1 -1
  71. package/dist/esm/components/UiComponents.d.ts.map +1 -1
  72. package/dist/esm/components/UiComponents.js +3 -3
  73. package/dist/esm/hooks/useDashboard.d.ts.map +1 -1
  74. package/dist/esm/hooks/useDashboard.js +13 -9
  75. package/dist/esm/hooks/useQuill.d.ts.map +1 -1
  76. package/dist/esm/hooks/useQuill.js +1 -3
  77. package/dist/esm/models/Dashboard.d.ts +1 -1
  78. package/dist/esm/models/Dashboard.d.ts.map +1 -1
  79. package/dist/esm/utils/dashboard.d.ts.map +1 -1
  80. package/dist/esm/utils/dashboard.js +2 -3
  81. package/dist/esm/utils/report.d.ts +2 -2
  82. package/dist/esm/utils/report.d.ts.map +1 -1
  83. package/dist/esm/utils/report.js +4 -5
  84. package/dist/esm/utils/tableProcessing.d.ts +2 -2
  85. package/dist/esm/utils/tableProcessing.d.ts.map +1 -1
  86. package/dist/esm/utils/tableProcessing.js +1 -3
  87. package/package.json +1 -1
@@ -55,7 +55,6 @@ const TemplateMetricComponent_1 = __importDefault(require("./components/Dashboar
55
55
  const TemplateTableComponent_1 = __importDefault(require("./components/Dashboard/TemplateTableComponent"));
56
56
  const DashboardTemplate_1 = __importDefault(require("./components/Dashboard/DashboardTemplate"));
57
57
  const Filter_2 = require("./models/Filter");
58
- const paginationProcessing_1 = require("./utils/paginationProcessing");
59
58
  const defaultChartContainerStyles = {
60
59
  display: 'flex',
61
60
  width: '100%',
@@ -111,15 +110,15 @@ const sortByOrdering = (a, b) => {
111
110
  * ### API Reference
112
111
  * @see https://docs.quillsql.com/components/dashboard
113
112
  */
114
- function Dashboard({ name, hidden = false, SelectComponent = QuillSelectWithCombo_1.QuillSelectComponentWithCombo, MultiSelectComponent = QuillMultiSelectWithCombo_1.QuillMultiSelectComponentWithCombo, ModalComponent = UiComponents_1.QuillModalComponent, ButtonComponent = UiComponents_1.MemoizedButton, SecondaryButtonComponent = UiComponents_1.MemoizedSecondaryButton, FilterTagComponent = ui_1.QuillFilterPopover, PopoverComponent = UiComponents_1.MemoizedPopover, TextInputComponent = UiComponents_1.QuillTextInput, EmptyDashboardComponent = UiComponents_1.QuillEmptyDashboardComponent, DateRangePickerComponent = QuillDateRangePicker_1.QuillDateRangePicker, MetricComponent = MetricComponent_1.default, ChartComponent = ChartComponent_1.default, TableComponent = TableComponent_1.default, TemplateMetricComponent = TemplateMetricComponent_1.default, TemplateChartComponent = TemplateChartComponent_1.default, TemplateTableComponent = TemplateTableComponent_1.default, DashboardSectionComponent = DashboardSection_1.default, DashboardSectionContainerComponent = DashboardSectionContainer_1.default, FilterContainerComponent = UiComponents_1.QuillFilterContainerComponent, DashboardLoadingComponent = UiComponents_1.QuillLoadingDashboardComponent, ErrorComponent = ChartError_1.QuillChartErrorWithAction, onClickReport, hoverActions, onChangeLoading, hideFilters, hideXAxis = false, hideYAxis = false, hideCartesianGrid = false, comparisonLineStyle = 'solid', containerStyle, className, chartContainerStyle = defaultChartContainerStyles,
115
- // TODO: do something with these custom filters
116
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
117
- filters, onClickChartElement, dateBucket, additionalProcessing, hideAdminErrors = true, templateDashboardName, pagination = { rowsPerPage: 10, rowsPerRequest: 50 }, }) {
113
+ function Dashboard({ name, hidden = false, SelectComponent = QuillSelectWithCombo_1.QuillSelectComponentWithCombo, MultiSelectComponent = QuillMultiSelectWithCombo_1.QuillMultiSelectComponentWithCombo, ModalComponent = UiComponents_1.QuillModalComponent, ButtonComponent = UiComponents_1.MemoizedButton, SecondaryButtonComponent = UiComponents_1.MemoizedSecondaryButton, FilterTagComponent = ui_1.QuillFilterPopover, PopoverComponent = UiComponents_1.MemoizedPopover, TextInputComponent = UiComponents_1.QuillTextInput, EmptyDashboardComponent = UiComponents_1.QuillEmptyDashboardComponent, DateRangePickerComponent = QuillDateRangePicker_1.QuillDateRangePicker, MetricComponent = MetricComponent_1.default, ChartComponent = ChartComponent_1.default, TableComponent = TableComponent_1.default, TemplateMetricComponent = TemplateMetricComponent_1.default, TemplateChartComponent = TemplateChartComponent_1.default, TemplateTableComponent = TemplateTableComponent_1.default, DashboardSectionComponent = DashboardSection_1.default, DashboardSectionContainerComponent = DashboardSectionContainer_1.default, FilterContainerComponent = UiComponents_1.QuillFilterContainerComponent, DashboardLoadingComponent = UiComponents_1.QuillLoadingDashboardComponent, ErrorComponent = ChartError_1.QuillChartErrorWithAction, onClickReport, hoverActions, onChangeLoading, hideFilters, hideXAxis = false, hideYAxis = false, hideCartesianGrid = false, comparisonLineStyle = 'solid', containerStyle, className, chartContainerStyle = defaultChartContainerStyles, filters, onClickChartElement, dateBucket, additionalProcessing, hideAdminErrors = true, templateDashboardName, }) {
118
114
  const { isLoading, data, isDashboardFilterLoading, dashboardFilters: populatedDashboardFilters, reload, } = (0, useDashboard_1.useDashboard)(name);
119
115
  const [client, isClientLoading] = (0, react_1.useContext)(Context_1.ClientContext);
120
116
  const [theme] = (0, react_1.useContext)(Context_1.ThemeContext);
117
+ const [initialLoad, setInitialLoad] = (0, react_1.useState)(true);
121
118
  const { dispatch: dashboardFiltersDispatch } = (0, react_1.useContext)(Context_1.DashboardFiltersContext);
122
119
  const [schemaData] = (0, react_1.useContext)(Context_1.SchemaDataContext);
120
+ const [filterSchemaIsLoaded, setFilterSchemaIsLoaded] = (0, react_1.useState)(false);
121
+ const [filterSchema, setFilterSchema] = (0, react_1.useState)({ columns: [] }); // Schema to be passed into FilterModal
123
122
  const [fieldValuesMap, setFieldValuesMap] = (0, react_1.useState)({}); // Mapping of unique values per field, used in string filter 'in' and 'not in'
124
123
  const [referencedTables, setReferencedTables] = (0, react_1.useState)([]); // Intersection of tables referenced in the dashboard
125
124
  const [fieldValuesIsLoaded, setFieldValuesIsLoaded] = (0, react_1.useState)(false);
@@ -184,6 +183,11 @@ filters, onClickChartElement, dateBucket, additionalProcessing, hideAdminErrors
184
183
  Filter_1.NullOperator.IsNull,
185
184
  ],
186
185
  };
186
+ (0, react_1.useEffect)(() => {
187
+ if (!data)
188
+ return;
189
+ onDashboardDataChange(data, schemaData.schema);
190
+ }, [data, filters, schemaData.schema]);
187
191
  // Go through all columns in the referenced tables and get the unique values to use in fieldValuesMap
188
192
  (0, react_1.useEffect)(() => {
189
193
  const fetchData = async () => {
@@ -208,18 +212,22 @@ filters, onClickChartElement, dateBucket, additionalProcessing, hideAdminErrors
208
212
  fetchData();
209
213
  }
210
214
  }, [referencedTables]);
211
- const filterSchema = (0, react_1.useMemo)(() => {
212
- if (!data?.sections ||
213
- !schemaData.schema ||
214
- schemaData.schema.length === 0) {
215
- return { columns: [] };
215
+ // Get the relevant information from the dashboard and schema to pass to FilterModal
216
+ const updateFilterSchema = (sections, schema) => {
217
+ if (!sections || !schema || schema.length === 0) {
218
+ return;
216
219
  }
217
- const sections = data?.sections;
218
- const schema = schemaData.schema;
220
+ setFilterSchemaIsLoaded(false);
219
221
  // find intersection of all referenced tables
220
- const tables = Object.values(sections)
221
- .flatMap((section) => section.map((chart) => chart.referencedTables))
222
- .flat();
222
+ const tables = Object.keys(sections)
223
+ .map((section) => {
224
+ return sections[section].map((chart) => {
225
+ return chart.referencedTables;
226
+ });
227
+ })
228
+ .reduce((accumulator, currentArray) => {
229
+ return accumulator.concat(currentArray);
230
+ }, []);
223
231
  if (tables && tables.length > 0) {
224
232
  let intersection = new Set(tables[0]);
225
233
  for (let i = 1; i < tables.length; ++i) {
@@ -243,13 +251,23 @@ filters, onClickChartElement, dateBucket, additionalProcessing, hideAdminErrors
243
251
  .reduce((accumulator, currentArray) => {
244
252
  return accumulator.concat(currentArray);
245
253
  }, []);
246
- return { columns };
254
+ setFilterSchema({ columns });
247
255
  }
248
256
  else {
249
- return { columns: [] };
257
+ setFilterSchema({ columns: [] });
250
258
  }
251
- }, [data?.sections, schemaData.schema]);
252
- const handleOnClickDashboardItem = (elem) => onClickReport && onClickReport({ ...elem, _id: elem.id });
259
+ setFilterSchemaIsLoaded(true);
260
+ };
261
+ const onDashboardDataChange = (resp, schema) => {
262
+ // setDashboardSections(resp.sections ?? {});
263
+ updateFilterSchema(resp.sections, schema);
264
+ setInitialLoad(false);
265
+ };
266
+ const handleOnClickDashboardItem = (elem) => {
267
+ if (onClickReport) {
268
+ onClickReport({ ...elem, _id: elem.id });
269
+ }
270
+ };
253
271
  const updateFilter = (filter, value = null, comparison = null) => {
254
272
  if (!populatedDashboardFilters)
255
273
  return;
@@ -362,10 +380,10 @@ filters, onClickChartElement, dateBucket, additionalProcessing, hideAdminErrors
362
380
  }));
363
381
  };
364
382
  (0, react_1.useEffect)(() => {
365
- if (onChangeLoading && isLoading) {
366
- onChangeLoading(isLoading);
383
+ if (onChangeLoading) {
384
+ onChangeLoading(isLoading || initialLoad);
367
385
  }
368
- }, [isLoading, onChangeLoading]);
386
+ }, [isLoading, initialLoad, onChangeLoading]);
369
387
  if (!isLoading &&
370
388
  (Object.keys(data?.sections ?? {}).length === 0 ||
371
389
  Object.values(data?.sections ?? {})[0]?.length === 0)) {
@@ -376,6 +394,7 @@ filters, onClickChartElement, dateBucket, additionalProcessing, hideAdminErrors
376
394
  }
377
395
  return ((0, jsx_runtime_1.jsxs)("div", { className: className, ...(0, styles_1.styleToProps)(containerStyle), children: [data &&
378
396
  data.customFiltersEnabled &&
397
+ filterSchemaIsLoaded &&
379
398
  !hideAdminErrors &&
380
399
  !hideFilters &&
381
400
  data &&
@@ -446,19 +465,13 @@ filters, onClickChartElement, dateBucket, additionalProcessing, hideAdminErrors
446
465
  textAlign: 'left',
447
466
  marginTop: 12,
448
467
  }, children: section })] })), metrics(data.sections, section, sortByOrdering).length > 0 && ((0, jsx_runtime_1.jsx)(DashboardSectionComponent, { section: "metrics", children: metrics(data.sections, section, sortByOrdering).map((item, index) => {
449
- return ((0, jsx_runtime_1.jsx)(DataLoader_1.default, { item: item, filters: populatedDashboardFilters, additionalProcessing: {
450
- page: paginationProcessing_1.DEFAULT_PAGINATION,
451
- last: additionalProcessing?.last,
452
- }, children: ({ isLoading, error, data, }) => ((0, jsx_runtime_1.jsx)(MetricComponent, { error: error, isLoading: isLoading, report: data, onClick: !isLoading && onClickReport
468
+ return ((0, jsx_runtime_1.jsx)(DataLoader_1.default, { item: item, filters: populatedDashboardFilters, children: ({ isLoading, error, data, }) => ((0, jsx_runtime_1.jsx)(MetricComponent, { error: error, isLoading: isLoading, report: data, onClick: !isLoading && onClickReport
453
469
  ? () => handleOnClickDashboardItem({
454
470
  ...item,
455
471
  ...data,
456
472
  })
457
473
  : () => { }, hoverActions: hoverActions }, item.name + '' + index)) }, `metric${index}`));
458
- }) })), charts(data.sections, section, sortByOrdering).length > 0 && ((0, jsx_runtime_1.jsx)(DashboardSectionComponent, { section: "charts", children: charts(data.sections, section, sortByOrdering).map((item, index) => ((0, jsx_runtime_1.jsx)(DataLoader_1.ChartDataLoader, { item: item, dateBucket: dateBucket, additionalProcessing: {
459
- page: pagination,
460
- last: additionalProcessing?.last,
461
- }, filters: populatedDashboardFilters, children: ({ isLoading, data, error, dateBucket, }) => ((0, jsx_runtime_1.jsx)(ChartComponent, { report: data, error: error, onClick: () => {
474
+ }) })), charts(data.sections, section, sortByOrdering).length > 0 && ((0, jsx_runtime_1.jsx)(DashboardSectionComponent, { section: "charts", children: charts(data.sections, section, sortByOrdering).map((item, index) => ((0, jsx_runtime_1.jsx)(DataLoader_1.ChartDataLoader, { item: item, dateBucket: dateBucket, additionalProcessing: additionalProcessing, filters: populatedDashboardFilters, children: ({ isLoading, data, error, dateBucket, }) => ((0, jsx_runtime_1.jsx)(ChartComponent, { report: data, error: error, onClick: () => {
462
475
  if (!isLoading && onClickReport) {
463
476
  handleOnClickDashboardItem({
464
477
  ...item,
@@ -470,10 +483,7 @@ filters, onClickChartElement, dateBucket, additionalProcessing, hideAdminErrors
470
483
  height: 300,
471
484
  } })) : ((0, jsx_runtime_1.jsx)(Chart_1.ChartDisplay, { reportId: data.id, config: data, loading: isLoading, containerStyle: chartContainerStyle, colors: theme.chartColors?.length
472
485
  ? theme.chartColors
473
- : undefined, scrollable: false, hideXAxis: hideXAxis, hideYAxis: hideYAxis, hideCartesianGrid: hideCartesianGrid, comparisonLineStyle: comparisonLineStyle, onClickChartElement: onClickChartElement })) }, item.name + '' + index)) }, `chart${index}`))) })), tables(data.sections, section, sortByOrdering).length > 0 && ((0, jsx_runtime_1.jsx)(DashboardSectionComponent, { section: "tables", children: tables(data.sections, section, sortByOrdering).map((item, index) => ((0, jsx_runtime_1.jsx)(DataLoader_1.default, { item: item, filters: populatedDashboardFilters, additionalProcessing: {
474
- page: pagination,
475
- last: additionalProcessing?.last,
476
- }, children: ({ isLoading, error, onPageChange, onSortChange, data, rowCount, rowCountIsLoading, }) => ((0, jsx_runtime_1.jsx)(TableComponent, { report: data, isLoading: isLoading, error: error, onClick: !isLoading && onClickReport
486
+ : undefined, scrollable: false, hideXAxis: hideXAxis, hideYAxis: hideYAxis, hideCartesianGrid: hideCartesianGrid, comparisonLineStyle: comparisonLineStyle, onClickChartElement: onClickChartElement })) }, item.name + '' + index)) }, `chart${index}`))) })), tables(data.sections, section, sortByOrdering).length > 0 && ((0, jsx_runtime_1.jsx)(DashboardSectionComponent, { section: "tables", children: tables(data.sections, section, sortByOrdering).map((item, index) => ((0, jsx_runtime_1.jsx)(DataLoader_1.default, { item: item, filters: populatedDashboardFilters, children: ({ isLoading, error, onPageChange, onSortChange, data, rowCount, rowCountIsLoading, }) => ((0, jsx_runtime_1.jsx)(TableComponent, { report: data, isLoading: isLoading, error: error, onClick: !isLoading && onClickReport
477
487
  ? () => handleOnClickDashboardItem({
478
488
  ...item,
479
489
  ...data,
@@ -1 +1 @@
1
- {"version":3,"file":"Table.d.ts","sourceRoot":"","sources":["../../src/Table.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EACZ,WAAW,EACX,SAAS,EAIV,MAAM,OAAO,CAAC;AAcf,OAAO,EACL,yBAAyB,EAEzB,oBAAoB,EACrB,MAAM,2BAA2B,CAAC;AAuBnC,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAwDD;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB;;;;;;;;OAQG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACH,IAAI,CAAC,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE,EAAE,CAAC;IAEhC;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACH,OAAO,CAAC,EAAE;QACR,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,MAAM,CAAC;KACf,EAAE,CAAC;IAEJ;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;OAEG;IACH,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAEhC,qEAAqE;IACrE,WAAW,CAAC,EAAE,OAAO,CAAC;IAEtB;;OAEG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;IAEzB;;OAEG;IACH,gBAAgB,CAAC,EAAE,MAAM,GAAG,CAAC,OAAO,CAAC;IAErC,oDAAoD;IACpD,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE,oBAAoB,KAAK,GAAG,CAAC,OAAO,CAAC;IAE/D,0DAA0D;IAC1D,oBAAoB,CAAC,EAAE,CAAC,KAAK,EAAE,yBAAyB,KAAK,GAAG,CAAC,OAAO,CAAC;IAEzE,+DAA+D;IAC/D,wBAAwB,CAAC,EAAE,CAAC,EAC1B,SAAS,EACT,KAAK,EACL,aAAa,EACb,MAAM,EACN,WAAW,EACX,iBAAiB,EACjB,cAAc,GACf,EAAE;QACD,MAAM,EAAE,MAAM,CAAC;QACf,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,SAAS,EAAE;YAAE,SAAS,EAAE,IAAI,CAAC;YAAC,OAAO,EAAE,IAAI,CAAA;SAAE,CAAC;QAC9C,aAAa,EAAE;YAAE,KAAK,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAA;SAAE,EAAE,CAAC;QAClD,iBAAiB,EAAE,CAAC,EAClB,SAAS,EACT,OAAO,GACR,EAAE;YACD,SAAS,EAAE,IAAI,CAAC;YAChB,OAAO,EAAE,IAAI,CAAC;SACf,KAAK,IAAI,CAAC;QACX,cAAc,EAAE,CAAC,KAAK,EAAE,WAAW,CAAC,iBAAiB,CAAC,KAAK,IAAI,CAAC;KACjE,KAAK,GAAG,CAAC,OAAO,CAAC;IAElB,wEAAwE;IACxE,wBAAwB,CAAC,EAAE,CAAC,EAC1B,QAAQ,GACT,EAAE;QACD,QAAQ,EAAE,SAAS,CAAC;KACrB,KAAK,GAAG,CAAC,OAAO,CAAC;IAElB;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;OAEG;IACH,cAAc,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;CACtC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,QAAA,MAAM,KAAK,UAAW,UAAU,mDAyC/B,CAAC;AAsSF,eAAe,KAAK,CAAC"}
1
+ {"version":3,"file":"Table.d.ts","sourceRoot":"","sources":["../../src/Table.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EACZ,WAAW,EACX,SAAS,EAIV,MAAM,OAAO,CAAC;AAcf,OAAO,EACL,yBAAyB,EAEzB,oBAAoB,EACrB,MAAM,2BAA2B,CAAC;AAuBnC,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAwDD;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB;;;;;;;;OAQG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACH,IAAI,CAAC,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE,EAAE,CAAC;IAEhC;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACH,OAAO,CAAC,EAAE;QACR,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,MAAM,CAAC;KACf,EAAE,CAAC;IAEJ;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;OAEG;IACH,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAEhC,qEAAqE;IACrE,WAAW,CAAC,EAAE,OAAO,CAAC;IAEtB;;OAEG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;IAEzB;;OAEG;IACH,gBAAgB,CAAC,EAAE,MAAM,GAAG,CAAC,OAAO,CAAC;IAErC,oDAAoD;IACpD,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE,oBAAoB,KAAK,GAAG,CAAC,OAAO,CAAC;IAE/D,0DAA0D;IAC1D,oBAAoB,CAAC,EAAE,CAAC,KAAK,EAAE,yBAAyB,KAAK,GAAG,CAAC,OAAO,CAAC;IAEzE,+DAA+D;IAC/D,wBAAwB,CAAC,EAAE,CAAC,EAC1B,SAAS,EACT,KAAK,EACL,aAAa,EACb,MAAM,EACN,WAAW,EACX,iBAAiB,EACjB,cAAc,GACf,EAAE;QACD,MAAM,EAAE,MAAM,CAAC;QACf,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,SAAS,EAAE;YAAE,SAAS,EAAE,IAAI,CAAC;YAAC,OAAO,EAAE,IAAI,CAAA;SAAE,CAAC;QAC9C,aAAa,EAAE;YAAE,KAAK,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAA;SAAE,EAAE,CAAC;QAClD,iBAAiB,EAAE,CAAC,EAClB,SAAS,EACT,OAAO,GACR,EAAE;YACD,SAAS,EAAE,IAAI,CAAC;YAChB,OAAO,EAAE,IAAI,CAAC;SACf,KAAK,IAAI,CAAC;QACX,cAAc,EAAE,CAAC,KAAK,EAAE,WAAW,CAAC,iBAAiB,CAAC,KAAK,IAAI,CAAC;KACjE,KAAK,GAAG,CAAC,OAAO,CAAC;IAElB,wEAAwE;IACxE,wBAAwB,CAAC,EAAE,CAAC,EAC1B,QAAQ,GACT,EAAE;QACD,QAAQ,EAAE,SAAS,CAAC;KACrB,KAAK,GAAG,CAAC,OAAO,CAAC;IAElB;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;OAEG;IACH,cAAc,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;CACtC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,QAAA,MAAM,KAAK,UAAW,UAAU,mDAsC/B,CAAC;AAmSF,eAAe,KAAK,CAAC"}
package/dist/cjs/Table.js CHANGED
@@ -52,9 +52,8 @@ const Table = (props) => {
52
52
  const data = props;
53
53
  const [dashboard] = (0, react_1.useContext)(Context_1.DashboardContext);
54
54
  const [client] = (0, react_1.useContext)(Context_1.ClientContext);
55
- const [page, setPage] = (0, react_1.useState)(0);
56
55
  if ('rows' in data && 'columns' in data) {
57
- return ((0, jsx_runtime_1.jsx)(QuillTable_1.default, { hideCSVDownloadButton: data.hideCSVDownloadButton, columns: data.columns, rows: data.rows, className: data.className, containerStyle: data.containerStyle, LoadingComponent: data.LoadingComponent, isLoading: data.isLoading, downloadCSV: data.downloadCSV, currentPage: page, onPageChange: setPage }));
56
+ return ((0, jsx_runtime_1.jsx)(QuillTable_1.default, { hideCSVDownloadButton: data.hideCSVDownloadButton, columns: data.columns, rows: data.rows, className: data.className, containerStyle: data.containerStyle, LoadingComponent: data.LoadingComponent, isLoading: data.isLoading, downloadCSV: data.downloadCSV }));
58
57
  }
59
58
  if (!client) {
60
59
  return null;
@@ -72,14 +71,12 @@ const ChartUpdater = ({ reportId, containerStyle, className, dashboardContext, c
72
71
  const [filterUpdateIndex, setFilterUpdateIndex] = (0, react_1.useState)(0);
73
72
  const [previousPage, setPreviousPage] = (0, react_1.useState)(1);
74
73
  const [rowCount, setRowCount] = (0, react_1.useState)(0);
75
- const [currentPage, setCurrentPage] = (0, react_1.useState)(0);
76
74
  const { reportFiltersDispatch, reportFilters } = (0, react_1.useContext)(Context_1.ReportFiltersContext);
77
75
  const [currentProcessing, setCurrentProcessing] = (0, react_1.useState)({
78
76
  page: pagination,
79
77
  });
80
78
  const [theme] = (0, react_1.useContext)(Context_1.ThemeContext);
81
79
  const onPageChange = (page) => {
82
- setCurrentPage(page);
83
80
  if (currentProcessing.page &&
84
81
  page > previousPage &&
85
82
  (0, paginationProcessing_1.shouldFetchMore)(paginationProcessing_1.DEFAULT_PAGINATION, page, previousPage)) {
@@ -220,6 +217,6 @@ const ChartUpdater = ({ reportId, containerStyle, className, dashboardContext, c
220
217
  updateIndex: filterUpdateIndex + 1,
221
218
  },
222
219
  });
223
- }, theme: theme, SelectComponent: SelectComponent, MultiSelectComponent: MultiSelectComponent, DateRangePickerComponent: DateRangePickerComponent }, index))) })), (0, jsx_runtime_1.jsx)(QuillTable_1.default, { hideCSVDownloadButton: hideCSVDownloadButton, columns: columns ?? [], rows: rows ?? [], containerStyle: containerStyle, className: className, LoadingComponent: LoadingComponent, sort: currentProcessing.sort, isLoading: loading || initialLoad, downloadCSV: downloadCSV, onPageChange: onPageChange, onSortChange: onSortChange, rowCount: rowCount, currentPage: currentPage })] }));
220
+ }, theme: theme, SelectComponent: SelectComponent, MultiSelectComponent: MultiSelectComponent, DateRangePickerComponent: DateRangePickerComponent }, index))) })), (0, jsx_runtime_1.jsx)(QuillTable_1.default, { hideCSVDownloadButton: hideCSVDownloadButton, columns: columns ?? [], rows: rows ?? [], containerStyle: containerStyle, className: className, LoadingComponent: LoadingComponent, sort: currentProcessing.sort, isLoading: loading || initialLoad, downloadCSV: downloadCSV, onPageChange: onPageChange, onSortChange: onSortChange, rowCount: rowCount })] }));
224
221
  };
225
222
  exports.default = Table;
@@ -1,7 +1,6 @@
1
1
  /// <reference types="react" />
2
2
  import { QuillReport } from '../../models/Report';
3
3
  import { QuillTheme } from '../../QuillProvider';
4
- import { AdditionalProcessing } from '../../utils/tableProcessing';
5
4
  export type DataLoaderChildProps = {
6
5
  isLoading: boolean;
7
6
  error?: string;
@@ -14,10 +13,9 @@ export type DataLoaderChildProps = {
14
13
  rowCount?: number;
15
14
  rowCountIsLoading?: boolean;
16
15
  };
17
- export default function DataLoader({ item, children, filters, additionalProcessing: defaultAdditionalProcessing, }: {
18
- item: QuillReport;
16
+ export default function DataLoader({ item, children, filters, }: {
17
+ item: any;
19
18
  filters: any[] | null;
20
- additionalProcessing: AdditionalProcessing;
21
19
  children: ({ isLoading, error, onPageChange, onSortChange, data, }: DataLoaderChildProps) => JSX.Element;
22
20
  }): JSX.Element;
23
21
  type ColorMapType = {
@@ -39,10 +37,10 @@ export type ChartDataLoaderChildProps = {
39
37
  rowCountIsLoading?: boolean;
40
38
  };
41
39
  export declare const ChartDataLoader: ({ item, children, dateBucket, additionalProcessing, filters, }: {
42
- item: QuillReport;
40
+ item: any;
43
41
  dateBucket?: string | undefined;
44
42
  mapColorsToFields?: ((_report: QuillReport, _theme: QuillTheme) => ColorMapType) | undefined;
45
- additionalProcessing: AdditionalProcessing;
43
+ additionalProcessing?: any;
46
44
  filters: any[] | null;
47
45
  children: ({ isLoading, error, data, dateBucket, rowCount, rowCountIsLoading, }: ChartDataLoaderChildProps) => JSX.Element;
48
46
  }) => JSX.Element;
@@ -1 +1 @@
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;AAajD,OAAO,EACL,oBAAoB,EAErB,MAAM,6BAA6B,CAAC;AAuBrC,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;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B,CAAC;AAkCF,MAAM,CAAC,OAAO,UAAU,UAAU,CAAC,EACjC,IAAI,EACJ,QAAQ,EACR,OAAO,EACP,oBAAoB,EAAE,2BAA2B,GAClD,EAAE;IACD,IAAI,EAAE,WAAW,CAAC;IAClB,OAAO,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;IACtB,oBAAoB,EAAE,oBAAoB,CAAC;IAC3C,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,CAyLd;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;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B,CAAC;AAIF,eAAO,MAAM,eAAe;UAOpB,WAAW;;mCAGN,WAAW,UACZ,UAAU,KACf,YAAY;0BACK,oBAAoB;aACjC,GAAG,EAAE,GAAG,IAAI;qFAQlB,yBAAyB,KAAK,WAAW;MAC1C,WAmFH,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;AAoCjD,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;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B,CAAC;AAEF,MAAM,CAAC,OAAO,UAAU,UAAU,CAAC,EACjC,IAAI,EACJ,QAAQ,EACR,OAAO,GACR,EAAE;IACD,IAAI,EAAE,GAAG,CAAC;IACV,OAAO,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;IACtB,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,CAqNd;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;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B,CAAC;AAIF,eAAO,MAAM,eAAe;UAOpB,GAAG;;mCAGE,WAAW,UACZ,UAAU,KACf,YAAY;2BACM,GAAG;aACjB,GAAG,EAAE,GAAG,IAAI;qFAQlB,yBAAyB,KAAK,WAAW;MAC1C,WA4EH,CAAC"}
@@ -28,67 +28,38 @@ const constructReportFromItem = (item) => {
28
28
  filtersApplied: item.filtersApplied,
29
29
  };
30
30
  };
31
- function filterValuesEquivalent(filters1, filters2) {
32
- if (filters1.length !== filters2.length) {
33
- return false;
34
- }
35
- // The two filters arrays aren't necessarily in the same order
36
- // we can build two dictionaries of [label, filter] and compare them
37
- const mappedFilters1 = filters1.reduce((acc, filter) => {
38
- acc[filter.label] = filter;
39
- return acc;
40
- }, {});
41
- const mappedFilters2 = filters2.reduce((acc, filter) => {
42
- acc[filter.label] = filter;
43
- return acc;
44
- }, {});
45
- for (const key in mappedFilters1) {
46
- if (mappedFilters1[key].selectedValue !==
47
- mappedFilters2[key]?.selectedValue ||
48
- mappedFilters1[key].values !== mappedFilters2[key]?.values ||
49
- mappedFilters1[key].field !== mappedFilters2[key]?.field ||
50
- mappedFilters1[key].label !== mappedFilters2[key]?.label ||
51
- mappedFilters1[key].table !== mappedFilters2[key]?.table ||
52
- mappedFilters1[key].filterType !== mappedFilters2[key]?.filterType ||
53
- mappedFilters1[key].startDate !== mappedFilters2[key]?.startDate ||
54
- mappedFilters1[key].endDate !== mappedFilters2[key]?.endDate) {
55
- return false;
56
- }
57
- }
58
- return true;
59
- }
60
- function DataLoader({ item, children, filters, additionalProcessing: defaultAdditionalProcessing, }) {
31
+ function DataLoader({ item, children, filters, }) {
61
32
  const [client] = (0, react_1.useContext)(Context_1.ClientContext);
62
33
  const [dashboard, dispatch] = (0, react_1.useContext)(Context_1.DashboardContext);
63
34
  const [schemaData] = (0, react_1.useContext)(Context_1.SchemaDataContext);
64
35
  const [loading, setLoading] = (0, react_1.useState)(false);
65
36
  const [error, setError] = (0, react_1.useState)(undefined);
66
37
  const [previousPage, setPreviousPage] = (0, react_1.useState)(0);
67
- const [report, setReport] = (0, react_1.useState)(dashboard[item.id] ?? constructReportFromItem(item));
68
- const [additionalProcessing, setAdditionProcessing] = (0, react_1.useState)(defaultAdditionalProcessing);
38
+ const [report, setReport] = (0, react_1.useState)(dashboard[item._id] ?? constructReportFromItem(item));
39
+ const [additionalProcessing, setAdditionProcessing] = (0, react_1.useState)({
40
+ page: paginationProcessing_1.DEFAULT_PAGINATION,
41
+ });
69
42
  const previousFilters = (0, react_1.useRef)(null);
70
- const [rowCount, setRowCount] = (0, react_1.useState)(dashboard[item.id]?.rowCount ?? 0);
43
+ const [rowCount, setRowCount] = (0, react_1.useState)(dashboard[item._id]?.rowCount ?? 0);
71
44
  const [rowCountIsLoading, setRowCountIsLoading] = (0, react_1.useState)(false);
72
45
  const fetchRowCount = async (processing) => {
73
46
  if (!client || !filters) {
74
47
  return;
75
48
  }
76
49
  setRowCountIsLoading(true);
77
- const rowCount = await (0, report_1.fetchReportRowCount)(item.id, client, true, filters, processing, schemaData.customFields);
78
- if (rowCount) {
79
- dispatch({
80
- type: 'UPDATE_DASHBOARD_ITEM',
81
- id: item.id,
82
- data: { rowCount },
83
- });
84
- setRowCount(rowCount);
85
- }
50
+ const rowCount = await (0, report_1.fetchReportRowCount)(item._id, client, true, filters, processing, schemaData.customFields);
51
+ dispatch({
52
+ type: 'UPDATE_DASHBOARD_ITEM',
53
+ id: item._id,
54
+ data: { rowCount },
55
+ });
56
+ setRowCount(rowCount);
86
57
  setRowCountIsLoading(false);
87
58
  };
88
59
  const onPageChange = (page) => {
89
60
  if (additionalProcessing &&
90
61
  additionalProcessing.page &&
91
- (0, paginationProcessing_1.shouldFetchMore)(additionalProcessing.page, page, previousPage)) {
62
+ (0, paginationProcessing_1.shouldFetchMore)(paginationProcessing_1.DEFAULT_PAGINATION, page, previousPage)) {
92
63
  const newPagination = { ...additionalProcessing.page, page };
93
64
  const updatedProcessing = {
94
65
  ...additionalProcessing,
@@ -118,7 +89,7 @@ function DataLoader({ item, children, filters, additionalProcessing: defaultAddi
118
89
  setLoading(true);
119
90
  try {
120
91
  const updatedProcessing = { ...additionalProcessing, ...processing };
121
- const paginatedRows = await (0, tableProcessing_1.fetchResultsByReport)(report.id, client, updatedProcessing, filters, schemaData.customFields, true);
92
+ const paginatedRows = await (0, tableProcessing_1.fetchResultsByReport)(report.id, client, updatedProcessing, filters, schemaData.customFields);
122
93
  if (paginatedRows.error) {
123
94
  throw new Error('Error fetching chart');
124
95
  }
@@ -140,26 +111,26 @@ function DataLoader({ item, children, filters, additionalProcessing: defaultAddi
140
111
  if (!client || !filters) {
141
112
  return;
142
113
  }
143
- if (dashboard[item.id] &&
144
- !(0, Chart_1.didFiltersChange)(dashboard[item.id], filters) &&
114
+ if (dashboard[item._id] &&
115
+ !(0, Chart_1.didFiltersChange)(dashboard[item._id], filters) &&
145
116
  !loading &&
146
117
  // @ts-ignore
147
- !dashboard[item.id].triggerReload) {
118
+ !dashboard[item._id].triggerReload) {
148
119
  setLoading(false);
149
120
  const convertedReport = (0, report_1.convertInternalReportToReport)(
150
121
  // @ts-ignore
151
- dashboard[item.id]);
122
+ dashboard[item._id]);
152
123
  setReport(convertedReport);
153
124
  return;
154
125
  }
155
126
  setLoading(true);
156
- const { report: fetchedReport, error } = await (0, report_1.fetchReport)(item.id, client, true, filters, processing, undefined, schemaData.customFields, true);
127
+ const { report: fetchedReport, error } = await (0, report_1.fetchReport)(item._id, client, true, filters, processing, undefined, schemaData.customFields);
128
+ fetchRowCount(processing);
157
129
  dispatch({
158
130
  type: 'ADD_DASHBOARD_ITEM',
159
- id: item.id,
160
- data: { ...fetchedReport, triggerReload: false, rowCount: 0 }, // rowCount 0 indicates it's still loading if row length is nonzero
131
+ id: item._id,
132
+ data: { ...fetchedReport, triggerReload: false },
161
133
  });
162
- fetchRowCount(processing);
163
134
  const convertedReport = (0, report_1.convertInternalReportToReport)(fetchedReport);
164
135
  setReport(convertedReport);
165
136
  setAdditionProcessing(processing);
@@ -175,22 +146,50 @@ function DataLoader({ item, children, filters, additionalProcessing: defaultAddi
175
146
  return;
176
147
  }
177
148
  previousFilters.current = filters;
178
- setPreviousPage(0);
179
149
  fetchReportHelper(additionalProcessing);
180
- }, [filters, item.id]);
150
+ }, [filters, item._id]);
151
+ function filterValuesEquivalent(filters1, filters2) {
152
+ if (filters1.length !== filters2.length) {
153
+ return false;
154
+ }
155
+ // The two filters arrays aren't necessarily in the same order
156
+ // we can build two dictionaries of [label, filter] and compare them
157
+ const mappedFilters1 = filters1.reduce((acc, filter) => {
158
+ acc[filter.label] = filter;
159
+ return acc;
160
+ }, {});
161
+ const mappedFilters2 = filters2.reduce((acc, filter) => {
162
+ acc[filter.label] = filter;
163
+ return acc;
164
+ }, {});
165
+ for (const key in mappedFilters1) {
166
+ if (mappedFilters1[key].selectedValue !==
167
+ mappedFilters2[key]?.selectedValue ||
168
+ mappedFilters1[key].values !== mappedFilters2[key]?.values ||
169
+ mappedFilters1[key].field !== mappedFilters2[key]?.field ||
170
+ mappedFilters1[key].label !== mappedFilters2[key]?.label ||
171
+ mappedFilters1[key].table !== mappedFilters2[key]?.table ||
172
+ mappedFilters1[key].filterType !== mappedFilters2[key]?.filterType ||
173
+ mappedFilters1[key].startDate !== mappedFilters2[key]?.startDate ||
174
+ mappedFilters1[key].endDate !== mappedFilters2[key]?.endDate) {
175
+ return false;
176
+ }
177
+ }
178
+ return true;
179
+ }
181
180
  (0, react_1.useEffect)(() => {
182
181
  // @ts-ignore
183
- if (dashboard[item.id] && dashboard[item.id].triggerReload) {
182
+ if (dashboard[item._id] && dashboard[item._id].triggerReload) {
184
183
  fetchReportHelper(additionalProcessing);
185
184
  }
186
- }, [dashboard[item.id]]);
185
+ }, [dashboard[item._id]]);
187
186
  return ((0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: children({
188
187
  isLoading: loading,
189
188
  error,
190
189
  onPageChange,
191
190
  onSortChange,
192
191
  data: report,
193
- rowCount: report.pivot ? report.rowCount : rowCount,
192
+ rowCount,
194
193
  rowCountIsLoading,
195
194
  }) }));
196
195
  }
@@ -203,37 +202,36 @@ const ChartDataLoader = ({ item, children, dateBucket, additionalProcessing, fil
203
202
  const [loading, setLoading] = (0, react_1.useState)(false);
204
203
  const [error, setError] = (0, react_1.useState)(undefined);
205
204
  const [localDateBucket, setLocalDateBucket] = (0, react_1.useState)(undefined);
206
- const [report, setReport] = (0, react_1.useState)(dashboard[item.id] ?? constructReportFromItem(item));
205
+ const [localAdditionalProcessing, setLocalAdditionalProcessing] = (0, react_1.useState)();
206
+ const [report, setReport] = (0, react_1.useState)(dashboard[item._id] ?? constructReportFromItem(item));
207
207
  const [client] = (0, react_1.useContext)(Context_1.ClientContext);
208
208
  const [schemaData] = (0, react_1.useContext)(Context_1.SchemaDataContext);
209
- const previousFilters = (0, react_1.useRef)(null);
210
209
  const fetchReportHelper = async (useReportTask = true) => {
211
210
  if (!client || !filters) {
212
211
  return;
213
212
  }
214
- const tempReport = dashboard[item.id];
213
+ const tempReport = dashboard[item._id];
215
214
  if (tempReport &&
216
215
  !(0, Chart_1.didFiltersChange)(tempReport, filters) &&
217
216
  !tempReport.triggerReload &&
218
- dateBucket === localDateBucket) {
217
+ dateBucket === localDateBucket &&
218
+ additionalProcessing?.last === localAdditionalProcessing?.last) {
219
219
  setLoading(false);
220
220
  const convertedReport = (0, report_1.convertInternalReportToReport)(tempReport);
221
221
  setReport(convertedReport);
222
222
  return;
223
223
  }
224
224
  setLoading(true);
225
- const { report, error } = await (0, report_1.fetchReport)(item.id, client, useReportTask, filters, {
226
- ...additionalProcessing,
227
- ...(item.pivot ? {} : { page: paginationProcessing_1.DEFAULT_PAGINATION }),
228
- }, dateBucket, schemaData.customFields);
225
+ const { report, error } = await (0, report_1.fetchReport)(item._id, client, useReportTask, filters, additionalProcessing, dateBucket, schemaData.customFields);
229
226
  dispatch({
230
227
  type: 'ADD_DASHBOARD_ITEM',
231
- id: item.id,
228
+ id: item._id,
232
229
  data: { ...report, triggerReload: false },
233
230
  });
234
231
  const convertedReport = (0, report_1.convertInternalReportToReport)(report);
235
232
  setReport(convertedReport);
236
233
  setLocalDateBucket(dateBucket);
234
+ setLocalAdditionalProcessing(additionalProcessing);
237
235
  setError(error);
238
236
  setLoading(false);
239
237
  };
@@ -241,20 +239,15 @@ const ChartDataLoader = ({ item, children, dateBucket, additionalProcessing, fil
241
239
  if (!filters) {
242
240
  return;
243
241
  }
244
- if (previousFilters.current &&
245
- filterValuesEquivalent(previousFilters.current, filters)) {
246
- return;
247
- }
248
- previousFilters.current = filters;
249
242
  setInitialLoad(false);
250
243
  fetchReportHelper();
251
- }, [filters, item.id, dateBucket]);
244
+ }, [filters, item._id, dateBucket, additionalProcessing]);
252
245
  (0, react_1.useEffect)(() => {
253
- const tempReport = dashboard[item.id];
246
+ const tempReport = dashboard[item._id];
254
247
  if (tempReport && tempReport.triggerReload) {
255
248
  fetchReportHelper();
256
249
  }
257
- }, [dashboard[item.id]]);
250
+ }, [dashboard[item._id]]);
258
251
  return children({
259
252
  isLoading: loading || initialLoad,
260
253
  data: report,
@@ -1 +1 @@
1
- {"version":3,"file":"TableComponent.d.ts","sourceRoot":"","sources":["../../../../src/components/Dashboard/TableComponent.tsx"],"names":[],"mappings":";AAIA,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAKlD,MAAM,CAAC,OAAO,UAAU,mBAAmB,CAAC,EAC1C,MAAM,EACN,OAAO,EACP,SAAS,EACT,KAAK,EACL,QAAQ,EACR,iBAAiB,EACjB,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,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,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,CAkGd"}
1
+ {"version":3,"file":"TableComponent.d.ts","sourceRoot":"","sources":["../../../../src/components/Dashboard/TableComponent.tsx"],"names":[],"mappings":";AAIA,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAKlD,MAAM,CAAC,OAAO,UAAU,mBAAmB,CAAC,EAC1C,MAAM,EACN,OAAO,EACP,SAAS,EACT,KAAK,EACL,QAAQ,EACR,iBAAiB,EACjB,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,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,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,CA0Fd"}
@@ -15,17 +15,11 @@ function QuillTableComponent({ report, onClick, isLoading, error, rowCount, rowC
15
15
  const [theme] = (0, react_1.useContext)(Context_1.ThemeContext);
16
16
  const [initialLoad, setInitialLoad] = (0, react_1.useState)(true);
17
17
  const { downloadCSV } = (0, useExport_1.useExport)(report?.id);
18
- const [page, setPage] = (0, react_1.useState)(0);
19
18
  (0, react_1.useEffect)(() => {
20
19
  if (!isLoading) {
21
20
  setInitialLoad(false);
22
21
  }
23
22
  }, [isLoading]);
24
- (0, react_1.useEffect)(() => {
25
- if (rowCountIsLoading) {
26
- setPage(0);
27
- }
28
- }, [rowCountIsLoading]);
29
23
  return ((0, jsx_runtime_1.jsxs)("div", { style: { cursor: error || !onClick ? 'default' : 'pointer' }, onClick: () => onClick && onClick(report), children: [(0, jsx_runtime_1.jsx)("div", { style: {
30
24
  display: 'flex',
31
25
  flexDirection: 'row',
@@ -58,9 +52,8 @@ function QuillTableComponent({ report, onClick, isLoading, error, rowCount, rowC
58
52
  downloadCSV();
59
53
  }, onPageChange: (page) => {
60
54
  onPageChange && onPageChange(page);
61
- setPage(page);
62
55
  }, onSortChange: (sort) => {
63
56
  onSortChange && onSortChange(sort);
64
- }, currentPage: report?.pagination?.page ?? page, sort: report?.sort }))] }, report?.name));
57
+ }, currentPage: report?.pagination?.page, sort: report?.sort }))] }, report?.name));
65
58
  }
66
59
  exports.default = QuillTableComponent;
@@ -8,7 +8,7 @@ export interface TableComponentProps {
8
8
  label: string;
9
9
  field: string;
10
10
  }[];
11
- currentPage: number;
11
+ currentPage?: number;
12
12
  sort?: {
13
13
  field: string;
14
14
  direction: string;
@@ -1 +1 @@
1
- {"version":3,"file":"QuillTable.d.ts","sourceRoot":"","sources":["../../../src/components/QuillTable.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA0C,MAAM,OAAO,CAAC;AAG/D,OAAO,EAAE,oBAAoB,EAAyB,MAAM,gBAAgB,CAAC;AAE7E,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,OAAO,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC5C,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;IAC5C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IACrC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;IACzB,gBAAgB,CAAC,EAAE,MAAM,GAAG,CAAC,OAAO,CAAC;IACrC,0BAA0B,CAAC,EAAE,CAAC,KAAK,EAAE,oBAAoB,KAAK,GAAG,CAAC,OAAO,CAAC;IAC1E,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,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;AAED,MAAM,CAAC,OAAO,UAAU,UAAU,CAAC,EACjC,IAAI,EACJ,QAAQ,EACR,iBAAiB,EACjB,OAAO,EACP,SAAS,EACT,WAAW,EACX,IAAI,EACJ,qBAA4B,EAC5B,cAAc,EACd,SAAS,EACT,gBAAwC,EACxC,WAAgB,EAChB,eAA8B,EAC9B,WAAW,EACX,YAAY,EACZ,YAAY,GACb,EAAE,mBAAmB,2CA+drB"}
1
+ {"version":3,"file":"QuillTable.d.ts","sourceRoot":"","sources":["../../../src/components/QuillTable.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA0C,MAAM,OAAO,CAAC;AAG/D,OAAO,EAAE,oBAAoB,EAAyB,MAAM,gBAAgB,CAAC;AAE7E,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,OAAO,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC5C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;IAC5C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IACrC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;IACzB,gBAAgB,CAAC,EAAE,MAAM,GAAG,CAAC,OAAO,CAAC;IACrC,0BAA0B,CAAC,EAAE,CAAC,KAAK,EAAE,oBAAoB,KAAK,GAAG,CAAC,OAAO,CAAC;IAC1E,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,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;AAED,MAAM,CAAC,OAAO,UAAU,UAAU,CAAC,EACjC,IAAI,EACJ,QAAQ,EACR,iBAAiB,EACjB,OAAO,EACP,SAAS,EACT,WAAW,EACX,IAAI,EACJ,qBAA4B,EAC5B,cAAc,EACd,SAAS,EACT,gBAAwC,EACxC,WAAgB,EAChB,eAA8B,EAC9B,WAAW,EACX,YAAY,EACZ,YAAY,GACb,EAAE,mBAAmB,2CAwdrB"}