@quillsql/react 2.13.2 → 2.13.4

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 (123) hide show
  1. package/dist/cjs/Chart.d.ts.map +1 -1
  2. package/dist/cjs/Chart.js +3 -13
  3. package/dist/cjs/ChartBuilder.d.ts +1 -1
  4. package/dist/cjs/ChartBuilder.d.ts.map +1 -1
  5. package/dist/cjs/ChartBuilder.js +2 -2
  6. package/dist/cjs/ChartEditor.d.ts.map +1 -1
  7. package/dist/cjs/ChartEditor.js +1 -3
  8. package/dist/cjs/Context.d.ts +51 -15
  9. package/dist/cjs/Context.d.ts.map +1 -1
  10. package/dist/cjs/Context.js +44 -24
  11. package/dist/cjs/Dashboard.d.ts +1 -1
  12. package/dist/cjs/Dashboard.d.ts.map +1 -1
  13. package/dist/cjs/Dashboard.js +39 -39
  14. package/dist/cjs/DateRangePicker/QuillDateRangePicker.js +1 -1
  15. package/dist/cjs/ReportBuilder.d.ts.map +1 -1
  16. package/dist/cjs/ReportBuilder.js +179 -114
  17. package/dist/cjs/SQLEditor.d.ts.map +1 -1
  18. package/dist/cjs/SQLEditor.js +18 -11
  19. package/dist/cjs/Table.js +1 -1
  20. package/dist/cjs/components/Dashboard/DashboardFilter.js +1 -1
  21. package/dist/cjs/components/Dashboard/DataLoader.d.ts.map +1 -1
  22. package/dist/cjs/components/Dashboard/DataLoader.js +109 -43
  23. package/dist/cjs/components/Dashboard/MetricComponent.d.ts.map +1 -1
  24. package/dist/cjs/components/Dashboard/MetricComponent.js +14 -3
  25. package/dist/cjs/components/QuillMultiSelectWithCombo.d.ts +1 -1
  26. package/dist/cjs/components/QuillMultiSelectWithCombo.d.ts.map +1 -1
  27. package/dist/cjs/components/QuillMultiSelectWithCombo.js +6 -2
  28. package/dist/cjs/components/QuillSelect.js +3 -3
  29. package/dist/cjs/components/QuillSelectWithCombo.d.ts +1 -1
  30. package/dist/cjs/components/QuillSelectWithCombo.d.ts.map +1 -1
  31. package/dist/cjs/components/QuillSelectWithCombo.js +14 -4
  32. package/dist/cjs/components/ReportBuilder/FilterStack.d.ts +33 -0
  33. package/dist/cjs/components/ReportBuilder/FilterStack.d.ts.map +1 -0
  34. package/dist/cjs/components/ReportBuilder/FilterStack.js +121 -0
  35. package/dist/cjs/components/UiComponents.d.ts +1 -0
  36. package/dist/cjs/components/UiComponents.d.ts.map +1 -1
  37. package/dist/cjs/hooks/useDashboard.d.ts.map +1 -1
  38. package/dist/cjs/hooks/useDashboard.js +41 -46
  39. package/dist/cjs/hooks/useExport.d.ts +14 -1
  40. package/dist/cjs/hooks/useExport.d.ts.map +1 -1
  41. package/dist/cjs/hooks/useExport.js +120 -38
  42. package/dist/cjs/models/Client.d.ts +2 -0
  43. package/dist/cjs/models/Client.d.ts.map +1 -1
  44. package/dist/cjs/models/Filter.d.ts +1 -1
  45. package/dist/cjs/models/Filter.d.ts.map +1 -1
  46. package/dist/cjs/utils/client.d.ts.map +1 -1
  47. package/dist/cjs/utils/client.js +1 -0
  48. package/dist/cjs/utils/dashboard.d.ts.map +1 -1
  49. package/dist/cjs/utils/dashboard.js +3 -1
  50. package/dist/cjs/utils/dataFetcher.d.ts +2 -2
  51. package/dist/cjs/utils/dataFetcher.d.ts.map +1 -1
  52. package/dist/cjs/utils/dataFetcher.js +30 -22
  53. package/dist/cjs/utils/filterProcessing.d.ts +1 -1
  54. package/dist/cjs/utils/filterProcessing.d.ts.map +1 -1
  55. package/dist/cjs/utils/filterProcessing.js +3 -3
  56. package/dist/cjs/utils/report.d.ts +2 -2
  57. package/dist/cjs/utils/report.d.ts.map +1 -1
  58. package/dist/cjs/utils/report.js +7 -4
  59. package/dist/cjs/utils/tableProcessing.d.ts +1 -1
  60. package/dist/cjs/utils/tableProcessing.d.ts.map +1 -1
  61. package/dist/cjs/utils/tableProcessing.js +6 -2
  62. package/dist/esm/Chart.d.ts.map +1 -1
  63. package/dist/esm/Chart.js +3 -13
  64. package/dist/esm/ChartBuilder.d.ts +1 -1
  65. package/dist/esm/ChartBuilder.d.ts.map +1 -1
  66. package/dist/esm/ChartBuilder.js +2 -2
  67. package/dist/esm/ChartEditor.d.ts.map +1 -1
  68. package/dist/esm/ChartEditor.js +1 -3
  69. package/dist/esm/Context.d.ts +51 -15
  70. package/dist/esm/Context.d.ts.map +1 -1
  71. package/dist/esm/Context.js +44 -24
  72. package/dist/esm/Dashboard.d.ts +1 -1
  73. package/dist/esm/Dashboard.d.ts.map +1 -1
  74. package/dist/esm/Dashboard.js +41 -41
  75. package/dist/esm/DateRangePicker/QuillDateRangePicker.js +1 -1
  76. package/dist/esm/ReportBuilder.d.ts.map +1 -1
  77. package/dist/esm/ReportBuilder.js +182 -117
  78. package/dist/esm/SQLEditor.d.ts.map +1 -1
  79. package/dist/esm/SQLEditor.js +18 -11
  80. package/dist/esm/Table.js +1 -1
  81. package/dist/esm/components/Dashboard/DashboardFilter.js +1 -1
  82. package/dist/esm/components/Dashboard/DataLoader.d.ts.map +1 -1
  83. package/dist/esm/components/Dashboard/DataLoader.js +109 -43
  84. package/dist/esm/components/Dashboard/MetricComponent.d.ts.map +1 -1
  85. package/dist/esm/components/Dashboard/MetricComponent.js +14 -3
  86. package/dist/esm/components/QuillMultiSelectWithCombo.d.ts +1 -1
  87. package/dist/esm/components/QuillMultiSelectWithCombo.d.ts.map +1 -1
  88. package/dist/esm/components/QuillMultiSelectWithCombo.js +6 -2
  89. package/dist/esm/components/QuillSelect.js +3 -3
  90. package/dist/esm/components/QuillSelectWithCombo.d.ts +1 -1
  91. package/dist/esm/components/QuillSelectWithCombo.d.ts.map +1 -1
  92. package/dist/esm/components/QuillSelectWithCombo.js +14 -4
  93. package/dist/esm/components/ReportBuilder/FilterStack.d.ts +33 -0
  94. package/dist/esm/components/ReportBuilder/FilterStack.d.ts.map +1 -0
  95. package/dist/esm/components/ReportBuilder/FilterStack.js +118 -0
  96. package/dist/esm/components/UiComponents.d.ts +1 -0
  97. package/dist/esm/components/UiComponents.d.ts.map +1 -1
  98. package/dist/esm/hooks/useDashboard.d.ts.map +1 -1
  99. package/dist/esm/hooks/useDashboard.js +41 -46
  100. package/dist/esm/hooks/useExport.d.ts +14 -1
  101. package/dist/esm/hooks/useExport.d.ts.map +1 -1
  102. package/dist/esm/hooks/useExport.js +122 -40
  103. package/dist/esm/models/Client.d.ts +2 -0
  104. package/dist/esm/models/Client.d.ts.map +1 -1
  105. package/dist/esm/models/Filter.d.ts +1 -1
  106. package/dist/esm/models/Filter.d.ts.map +1 -1
  107. package/dist/esm/utils/client.d.ts.map +1 -1
  108. package/dist/esm/utils/client.js +1 -0
  109. package/dist/esm/utils/dashboard.d.ts.map +1 -1
  110. package/dist/esm/utils/dashboard.js +3 -1
  111. package/dist/esm/utils/dataFetcher.d.ts +2 -2
  112. package/dist/esm/utils/dataFetcher.d.ts.map +1 -1
  113. package/dist/esm/utils/dataFetcher.js +30 -22
  114. package/dist/esm/utils/filterProcessing.d.ts +1 -1
  115. package/dist/esm/utils/filterProcessing.d.ts.map +1 -1
  116. package/dist/esm/utils/filterProcessing.js +3 -3
  117. package/dist/esm/utils/report.d.ts +2 -2
  118. package/dist/esm/utils/report.d.ts.map +1 -1
  119. package/dist/esm/utils/report.js +7 -4
  120. package/dist/esm/utils/tableProcessing.d.ts +1 -1
  121. package/dist/esm/utils/tableProcessing.d.ts.map +1 -1
  122. package/dist/esm/utils/tableProcessing.js +6 -2
  123. package/package.json +3 -3
@@ -100,11 +100,12 @@ export default function SQLEditor({ ButtonComponent = MemoizedButton, SecondaryB
100
100
  const [isAddLoading, setIsAddLoading] = useState(false);
101
101
  const [isChartBuilderOpen, setIsChartBuilderOpen] = useState(false);
102
102
  const [displayTable, setDisplayTable] = useState(false);
103
+ const [formattedRows, setFormattedRows] = useState([]);
103
104
  const formRef = useRef(null);
104
105
  const sidebarRef = useRef(null);
105
106
  const [searchBarWidth, setSearchBarWidth] = useState(200);
107
+ const [showSearchBar, setShowSearchBar] = useState(false);
106
108
  const [filterBarWidth, setFilterBarWidth] = useState(200);
107
- const [formattedRows, setFormattedRows] = useState([]);
108
109
  const [rowCount, setRowCount] = useState(undefined);
109
110
  const [rowCountIsLoading, setRowCountIsLoading] = useState(false);
110
111
  const [maxPage, setMaxPage] = useState(1);
@@ -114,12 +115,12 @@ export default function SQLEditor({ ButtonComponent = MemoizedButton, SecondaryB
114
115
  ...EMPTY_INTERNAL_REPORT,
115
116
  ...report,
116
117
  });
117
- const DEFAULT_ROWS_PER_PAGE = 10;
118
+ const tableRef = useRef(null);
119
+ const DEFAULT_ROWS_PER_PAGE = 5;
118
120
  const ROW_HEIGHT = 37;
119
121
  const TABLE_TAB_HEIGHT = 75;
120
- const dynamicHeight = window.innerHeight * 0.8 - 310;
121
- const rowsPerPage = Math.max(DEFAULT_ROWS_PER_PAGE, Math.floor((dynamicHeight - TABLE_TAB_HEIGHT) / ROW_HEIGHT));
122
- const calculatedHeight = TABLE_TAB_HEIGHT + rowsPerPage * ROW_HEIGHT; // height needs to be 75 + rows * rowheight <= window.innerHeight * 0.8 - 330
122
+ const dynamicHeight = tableRef.current ? tableRef.current.clientHeight : 0;
123
+ const rowsPerPage = Math.max(DEFAULT_ROWS_PER_PAGE, Math.ceil((dynamicHeight - TABLE_TAB_HEIGHT) / ROW_HEIGHT));
123
124
  const pagination = {
124
125
  page: 0,
125
126
  rowsPerPage,
@@ -145,6 +146,7 @@ export default function SQLEditor({ ButtonComponent = MemoizedButton, SecondaryB
145
146
  function handleResize() {
146
147
  updateFirstChildWidth(formRef, setSearchBarWidth, { gap: 12 });
147
148
  updateFirstChildWidth(sidebarRef, setFilterBarWidth, { gap: 12 });
149
+ setShowSearchBar(true);
148
150
  }
149
151
  handleResize();
150
152
  window.addEventListener('resize', handleResize);
@@ -313,6 +315,9 @@ export default function SQLEditor({ ButtonComponent = MemoizedButton, SecondaryB
313
315
  onChangeQuery(query || '');
314
316
  }
315
317
  }, [query]);
318
+ if (schemaData.isSchemaLoading) {
319
+ return _jsx(LoadingComponent, {});
320
+ }
316
321
  return (_jsxs("div", { style: { backgroundColor: theme?.backgroundColor, ...containerStyle }, className: className, children: [(!isChartBuilderHorizontalView ||
317
322
  (isChartBuilderHorizontalView && !isChartBuilderOpen)) &&
318
323
  !schemaData.isSchemaLoading && (_jsx("div", { style: {
@@ -360,14 +365,15 @@ export default function SQLEditor({ ButtonComponent = MemoizedButton, SecondaryB
360
365
  handleRunSqlPrompt();
361
366
  }, style: {
362
367
  display: 'flex',
368
+ visibility: showSearchBar ? 'visible' : 'hidden',
363
369
  flexDirection: 'row',
364
370
  gap: 12,
365
371
  paddingTop: 16,
366
372
  paddingBottom: 16,
367
373
  }, children: [_jsx(TextInputComponent, { id: "ai-search", value: sqlPrompt, width: searchBarWidth, onChange: (e) => setSqlPrompt(e.target.value), placeholder: "Ask a question..." }), _jsx(ButtonComponent, { onClick: handleRunSqlPrompt, label: "Ask AI" })] }), _jsx("div", { style: {
368
- minHeight: Math.max(210, window.innerHeight * 0.2),
374
+ minHeight: 'max(210px, 20vh)',
369
375
  maxHeight: '30%',
370
- height: window.innerHeight * 0.2,
376
+ height: '20vh',
371
377
  }, children: _jsx(SQLEditorComponent, { query: query || '', schema: schemaData.schema, databaseType: client?.databaseType ?? 'postgresql', clientName: client?.publicKey || '', setQuery: setQuery, handleRunQuery: () => {
372
378
  handleRunQuery(currentProcessing, true);
373
379
  }, handleFixWithAI: handleFixWithAI, isNewQueryEnabled: isNewQueryEnabled, runQueryOnMount: runQueryOnMount, handleClearQuery: handleClearQuery, theme: theme, defineEditorTheme: defineEditorTheme, setEditorTheme: setEditorTheme, setEditorMounted: () => { }, ButtonComponent: ButtonComponent, SecondaryButtonComponent: SecondaryButtonComponent, loading: sqlResponseLoading && schemaData.isSchemaLoading, LoadingComponent: LoadingComponent }) }), _jsx("div", { style: {
@@ -428,10 +434,11 @@ export default function SQLEditor({ ButtonComponent = MemoizedButton, SecondaryB
428
434
  width: '100%',
429
435
  alignItems: 'center',
430
436
  }, children: [errorMessage, errorMessage !== 'No data found' &&
431
- errorMessage !== 'No query found' && (_jsx(SecondaryButtonComponent, { onClick: handleFixWithAI, label: "Fix with AI" }))] }) })), errorMessage || !displayTable ? null : (_jsx(TableComponent, { isLoading: sqlQueryLoading && !isAddLoading, rows: formattedRows, columns: columns, rowCount: rowCount, rowsPerPage: rowsPerPage, rowCountIsLoading: rowCountIsLoading, onPageChange: onPageChange, onSortChange: onSortChange, containerStyle: {
432
- height: calculatedHeight,
433
- maxHeight: calculatedHeight,
434
- }, currentPage: currentPage, setCurrentPage: setCurrentPage }))] })] }) }), isChartBuilderEnabled && (_jsxs("div", { style: {
437
+ errorMessage !== 'No query found' && (_jsx(SecondaryButtonComponent, { onClick: handleFixWithAI, label: "Fix with AI" }))] }) })), errorMessage || !displayTable ? null : (_jsx("div", { ref: tableRef, children: _jsx(TableComponent, { isLoading: sqlQueryLoading && !isAddLoading, rows: formattedRows, columns: columns, rowCount: rowCount, rowsPerPage: rowsPerPage, rowCountIsLoading: rowCountIsLoading, onPageChange: onPageChange, onSortChange: onSortChange, containerStyle: {
438
+ height: 'calc(100vh - max(210px, 20vh) - 310px)',
439
+ minHeight: `calc(${DEFAULT_ROWS_PER_PAGE} * ${ROW_HEIGHT}px + ${TABLE_TAB_HEIGHT}px)`, // at least 10 rows tall
440
+ maxHeight: 'calc(100vh - max(210px, 20vh) - 310px)',
441
+ }, currentPage: currentPage, setCurrentPage: setCurrentPage }) }))] })] }) }), isChartBuilderEnabled && (_jsxs("div", { style: {
435
442
  display: 'flex',
436
443
  flexDirection: 'row',
437
444
  alignItems: 'center',
package/dist/esm/Table.js CHANGED
@@ -197,7 +197,7 @@ const ChartUpdater = ({ reportId, containerStyle, className, dashboardContext, c
197
197
  if (f.field === filter.field ||
198
198
  (f.filterType === 'date_range' &&
199
199
  filter.filterType === 'date_range')) {
200
- return updateFilter(f, value, comparison);
200
+ return updateFilter(f, value, comparison, f.dashboardName);
201
201
  }
202
202
  return f;
203
203
  });
@@ -83,7 +83,7 @@ export function DashboardFilter({ filter, onChangeFilter, SelectComponent = Quil
83
83
  whiteSpace: 'nowrap',
84
84
  minWidth: 80,
85
85
  justifyContent: 'center',
86
- }, children: "compared to" }), _jsx(SelectComponent, { value: filter.comparisonRange?.value, onChange: (e) => {
86
+ }, children: "compared to" }), _jsx(SelectComponent, { value: filter.comparisonRange?.value ?? 'NO_COMPARISON', onChange: (e) => {
87
87
  onChangeFilter(filter, null, COMPARISON_OPTIONS.find((option) => option.value === e.target.value));
88
88
  }, options: COMPARISON_OPTIONS.map((compareOption) => ({
89
89
  value: compareOption.value,
@@ -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;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;AAoCF,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,CAiPd;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,WAmGH,CAAC"}
@@ -48,7 +48,9 @@ function filterValuesEquivalent(filters1, filters2) {
48
48
  mappedFilters1[key].table !== mappedFilters2[key]?.table ||
49
49
  mappedFilters1[key].filterType !== mappedFilters2[key]?.filterType ||
50
50
  mappedFilters1[key].startDate !== mappedFilters2[key]?.startDate ||
51
- mappedFilters1[key].endDate !== mappedFilters2[key]?.endDate) {
51
+ mappedFilters1[key].endDate !== mappedFilters2[key]?.endDate ||
52
+ mappedFilters1[key].comparisonRange !==
53
+ mappedFilters2[key]?.comparisonRange) {
52
54
  return false;
53
55
  }
54
56
  }
@@ -66,21 +68,44 @@ export default function DataLoader({ item, children, filters, additionalProcessi
66
68
  const previousFilters = useRef(null);
67
69
  const [rowCount, setRowCount] = useState(dashboard[item.id]?.rowCount ?? 0);
68
70
  const [rowCountIsLoading, setRowCountIsLoading] = useState(false);
71
+ const rowsRequestId = useRef(0);
72
+ const rowsAbortController = useRef(null);
73
+ const rowCountRequestId = useRef(0);
74
+ const rowCountAbortController = useRef(null);
75
+ const updateTableRowsRequestId = useRef(0);
76
+ const updateTableRowsAbortController = useRef(null);
69
77
  const fetchRowCount = async (processing) => {
70
78
  if (!client || !filters) {
71
79
  return;
72
80
  }
81
+ const fetchReportRowCountRequestId = rowCountRequestId.current + 1;
82
+ rowCountRequestId.current = fetchReportRowCountRequestId;
73
83
  setRowCountIsLoading(true);
74
- const rowCount = await fetchReportRowCount(item.id, client, true, filters, processing, schemaData.customFields);
75
- if (rowCount) {
76
- dispatch({
77
- type: 'UPDATE_DASHBOARD_ITEM',
78
- id: item.id,
79
- data: { rowCount },
80
- });
81
- setRowCount(rowCount);
84
+ rowCountAbortController.current?.abort();
85
+ rowCountAbortController.current = new AbortController();
86
+ try {
87
+ const rowCount = await fetchReportRowCount(item.id, client, true, filters, processing, schemaData.customFields, rowCountAbortController.current.signal);
88
+ rowCountAbortController.current = null;
89
+ if (rowCount) {
90
+ dispatch({
91
+ type: 'UPDATE_DASHBOARD_ITEM',
92
+ id: item.id,
93
+ data: { rowCount },
94
+ });
95
+ setRowCount(rowCount);
96
+ }
97
+ }
98
+ catch (e) {
99
+ if (e instanceof Error && e.name === 'AbortError') {
100
+ // console.log('Aborted fetching row count');
101
+ return;
102
+ }
103
+ }
104
+ finally {
105
+ if (fetchReportRowCountRequestId === rowCountRequestId.current) {
106
+ setRowCountIsLoading(false);
107
+ }
82
108
  }
83
- setRowCountIsLoading(false);
84
109
  };
85
110
  const onPageChange = (page) => {
86
111
  if (additionalProcessing &&
@@ -99,10 +124,10 @@ export default function DataLoader({ item, children, filters, additionalProcessi
99
124
  }
100
125
  };
101
126
  const onSortChange = (sort) => {
102
- if (shouldSortInMemory(DEFAULT_PAGINATION, report.rowCount, !!report.pivot)) {
127
+ if (shouldSortInMemory(additionalProcessing.page ?? DEFAULT_PAGINATION, report.rowCount, !!report.pivot)) {
103
128
  return;
104
129
  }
105
- const updatedProcessing = { page: DEFAULT_PAGINATION, sort };
130
+ const updatedProcessing = { page: additionalProcessing.page, sort };
106
131
  fetchReportHelper(additionalProcessing);
107
132
  updateTableRows(updatedProcessing, true);
108
133
  setPreviousPage(0);
@@ -112,10 +137,15 @@ export default function DataLoader({ item, children, filters, additionalProcessi
112
137
  return;
113
138
  }
114
139
  if (!loading) {
140
+ const fetchUpdateTableRowsRequestId = updateTableRowsRequestId.current + 1;
141
+ updateTableRowsRequestId.current = fetchUpdateTableRowsRequestId;
115
142
  setLoading(true);
116
143
  try {
144
+ updateTableRowsAbortController.current?.abort();
145
+ updateTableRowsAbortController.current = new AbortController();
117
146
  const updatedProcessing = { ...additionalProcessing, ...processing };
118
- const paginatedRows = await fetchResultsByReport(report.id, client, updatedProcessing, filters, schemaData.customFields, true);
147
+ const paginatedRows = await fetchResultsByReport(report.id, client, updatedProcessing, filters, schemaData.customFields, true, undefined, updateTableRowsAbortController.current.signal);
148
+ updateTableRowsAbortController.current = null;
119
149
  if (paginatedRows.error) {
120
150
  throw new Error('Error fetching chart');
121
151
  }
@@ -125,11 +155,14 @@ export default function DataLoader({ item, children, filters, additionalProcessi
125
155
  }
126
156
  setReport({ ...report, rows: tempRows });
127
157
  setAdditionProcessing(updatedProcessing);
128
- setLoading(false);
129
158
  }
130
159
  catch (e) {
131
160
  console.log(e);
132
- setLoading(false);
161
+ }
162
+ finally {
163
+ if (fetchUpdateTableRowsRequestId === updateTableRowsRequestId.current) {
164
+ setLoading(false);
165
+ }
133
166
  }
134
167
  }
135
168
  };
@@ -149,19 +182,38 @@ export default function DataLoader({ item, children, filters, additionalProcessi
149
182
  setReport(convertedReport);
150
183
  return;
151
184
  }
185
+ const fetchRowsRequestId = rowsRequestId.current + 1;
186
+ rowsRequestId.current = fetchRowsRequestId;
152
187
  setLoading(true);
153
- const { report: fetchedReport, error } = await fetchReport(item.id, client, true, filters, processing, undefined, schemaData.customFields, true);
154
- dispatch({
155
- type: 'ADD_DASHBOARD_ITEM',
156
- id: item.id,
157
- data: { ...fetchedReport, triggerReload: false, rowCount: 0 }, // rowCount 0 indicates it's still loading if row length is nonzero
158
- });
159
- fetchRowCount(processing);
160
- const convertedReport = convertInternalReportToReport(fetchedReport);
161
- setReport(convertedReport);
162
- setAdditionProcessing(processing);
163
- setError(error);
164
- setLoading(false);
188
+ console.log('fetching', item.id, filters);
189
+ rowsAbortController.current?.abort();
190
+ rowsAbortController.current = new AbortController();
191
+ try {
192
+ const { report: fetchedReport, error } = await fetchReport(item.id, client, true, filters, processing, undefined, schemaData.customFields, true, false, rowsAbortController.current.signal);
193
+ rowsAbortController.current = null;
194
+ dispatch({
195
+ type: 'ADD_DASHBOARD_ITEM',
196
+ id: item.id,
197
+ data: { ...fetchedReport, triggerReload: false, rowCount: 0 }, // rowCount 0 indicates it's still loading if row length is nonzero
198
+ });
199
+ fetchRowCount(processing);
200
+ const convertedReport = convertInternalReportToReport(fetchedReport);
201
+ setReport(convertedReport);
202
+ setAdditionProcessing(processing);
203
+ setError(error);
204
+ }
205
+ catch (e) {
206
+ if (e instanceof Error && e.name === 'AbortError') {
207
+ // console.log('Aborted fetching rows');
208
+ return;
209
+ }
210
+ throw e;
211
+ }
212
+ finally {
213
+ if (fetchRowsRequestId === rowsRequestId.current) {
214
+ setLoading(false);
215
+ }
216
+ }
165
217
  };
166
218
  useEffect(() => {
167
219
  if (!filters) {
@@ -176,8 +228,7 @@ export default function DataLoader({ item, children, filters, additionalProcessi
176
228
  fetchReportHelper(additionalProcessing);
177
229
  }, [filters, item.id]);
178
230
  useEffect(() => {
179
- // @ts-ignore
180
- if (dashboard[item.id] && dashboard[item.id].triggerReload) {
231
+ if (dashboard[item.id]?.triggerReload) {
181
232
  fetchReportHelper(additionalProcessing);
182
233
  }
183
234
  }, [dashboard[item.id]]);
@@ -203,6 +254,7 @@ export const ChartDataLoader = ({ item, children, dateBucket, additionalProcessi
203
254
  const [client] = useContext(ClientContext);
204
255
  const [schemaData] = useContext(SchemaDataContext);
205
256
  const previousFilters = useRef(null);
257
+ const fetchReportAbortController = useRef(null);
206
258
  const fetchReportHelper = async (useReportTask = true) => {
207
259
  if (!client || !filters) {
208
260
  return;
@@ -218,20 +270,34 @@ export const ChartDataLoader = ({ item, children, dateBucket, additionalProcessi
218
270
  return;
219
271
  }
220
272
  setLoading(true);
221
- const { report, error } = await fetchReport(item.id, client, useReportTask, filters, {
222
- ...additionalProcessing,
223
- ...(item.pivot ? {} : { page: DEFAULT_PAGINATION }),
224
- }, dateBucket, schemaData.customFields);
225
- dispatch({
226
- type: 'ADD_DASHBOARD_ITEM',
227
- id: item.id,
228
- data: { ...report, triggerReload: false },
229
- });
230
- const convertedReport = convertInternalReportToReport(report);
231
- setReport(convertedReport);
232
- setLocalDateBucket(dateBucket);
233
- setError(error);
234
- setLoading(false);
273
+ fetchReportAbortController.current?.abort();
274
+ fetchReportAbortController.current = new AbortController();
275
+ try {
276
+ const { report, error } = await fetchReport(item.id, client, useReportTask, filters, {
277
+ ...additionalProcessing,
278
+ ...(item.pivot ? {} : { page: DEFAULT_PAGINATION }),
279
+ }, dateBucket, schemaData.customFields, undefined, undefined, fetchReportAbortController.current.signal);
280
+ fetchReportAbortController.current = null;
281
+ dispatch({
282
+ type: 'ADD_DASHBOARD_ITEM',
283
+ id: item.id,
284
+ data: { ...report, triggerReload: false },
285
+ });
286
+ const convertedReport = convertInternalReportToReport(report);
287
+ setReport(convertedReport);
288
+ setLocalDateBucket(dateBucket);
289
+ setError(error);
290
+ }
291
+ catch (e) {
292
+ if (e instanceof Error && e.name === 'AbortError') {
293
+ // console.log('Aborted fetching rows for chart');
294
+ return;
295
+ }
296
+ throw e;
297
+ }
298
+ finally {
299
+ setLoading(false);
300
+ }
235
301
  };
236
302
  useEffect(() => {
237
303
  if (!filters) {
@@ -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;AAMnD,MAAM,CAAC,OAAO,UAAU,oBAAoB,CAAC,EAC3C,MAAM,EACN,OAAO,EACP,KAAK,EACL,SAAS,GACV,EAAE,gBAAgB,GAAG,GAAG,CAAC,OAAO,CA+MhC"}
1
+ {"version":3,"file":"MetricComponent.d.ts","sourceRoot":"","sources":["../../../../src/components/Dashboard/MetricComponent.tsx"],"names":[],"mappings":";AACA,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,CA2NhC"}
@@ -10,8 +10,8 @@ export default function QuillMetricComponent({ report, onClick, error, isLoading
10
10
  const primaryMetricLabel = report?.filtersApplied?.date_range?.preset?.label;
11
11
  const comparisonKey = report?.filtersApplied?.date_range?.comparisonRange?.value;
12
12
  const comparisonLabel = COMPARISON_OPTIONS.find((opt) => opt.value === comparisonKey)?.text;
13
- return (_jsx("div", { onClick: () => onClick && !error && onClick(report), style: {
14
- cursor: error || !onClick ? 'default' : 'pointer',
13
+ return (_jsx("div", { onClick: () => onClick && onClick(report), style: {
14
+ cursor: !onClick ? 'default' : 'pointer',
15
15
  boxSizing: 'content-box',
16
16
  borderRadius: 8,
17
17
  paddingBottom: isLoading ? 0 : 30,
@@ -51,7 +51,18 @@ export default function QuillMetricComponent({ report, onClick, error, isLoading
51
51
  }, children: report?.name })) }), isLoading ? (_jsx(ChartSkeleton, { containerStyle: {
52
52
  maxHeight: '78px',
53
53
  height: '100%',
54
- } })) : error ? (_jsx("div", { children: _jsx(ChartError, { errorMessage: error }) })) : report.rows?.length === 0 ||
54
+ } })) : error ? (_jsx(ChartError, { errorMessage: error, containerStyle: {
55
+ display: 'flex',
56
+ flex: '1 0 auto',
57
+ height: '80%',
58
+ margin: 'auto',
59
+ justifyContent: 'center',
60
+ alignItems: 'center',
61
+ fontSize: 13,
62
+ color: theme?.secondaryTextColor,
63
+ maxWidth: '100%',
64
+ width: '100%',
65
+ } })) : report.rows?.length === 0 ||
55
66
  report.rows[0][report.xAxisField] === null ? (_jsx("div", { style: {
56
67
  display: 'flex',
57
68
  flex: '1 0 auto',
@@ -2,7 +2,7 @@ import { MultiSelectComponentProps } from './UiComponents';
2
2
  /**
3
3
  * A robust select component that implements the new minimal Select interface.
4
4
  */
5
- export declare function QuillMultiSelectComponentWithCombo({ options, width, onChange, label, value, isLoading, }: MultiSelectComponentProps): import("react/jsx-runtime").JSX.Element;
5
+ export declare function QuillMultiSelectComponentWithCombo({ options, width, onChange, label, value, isLoading, disabled, }: MultiSelectComponentProps): import("react/jsx-runtime").JSX.Element;
6
6
  export declare const ListboxTextInput: ({ value, onChange, placeholder, }: {
7
7
  value: string;
8
8
  onChange: (e: string) => void;
@@ -1 +1 @@
1
- {"version":3,"file":"QuillMultiSelectWithCombo.d.ts","sourceRoot":"","sources":["../../../src/components/QuillMultiSelectWithCombo.tsx"],"names":[],"mappings":"AACA,OAAO,EAAkB,yBAAyB,EAAE,MAAM,gBAAgB,CAAC;AAiC3E;;GAEG;AACH,wBAAgB,kCAAkC,CAAC,EACjD,OAAO,EACP,KAAK,EACL,QAAQ,EACR,KAAK,EACL,KAAK,EACL,SAAS,GACV,EAAE,yBAAyB,2CA4U3B;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,EAAkB,yBAAyB,EAAE,MAAM,gBAAgB,CAAC;AAiC3E;;GAEG;AACH,wBAAgB,kCAAkC,CAAC,EACjD,OAAO,EACP,KAAK,EACL,QAAQ,EACR,KAAK,EACL,KAAK,EACL,SAAS,EACT,QAAQ,GACT,EAAE,yBAAyB,2CAiV3B;AAED,eAAO,MAAM,gBAAgB;WAKpB,MAAM;kBACC,MAAM,KAAK,IAAI;iBAChB,MAAM;6CAwDpB,CAAC"}
@@ -21,7 +21,7 @@ function displaySelectedOptionLabels({ options, value, }) {
21
21
  /**
22
22
  * A robust select component that implements the new minimal Select interface.
23
23
  */
24
- export function QuillMultiSelectComponentWithCombo({ options, width, onChange, label, value, isLoading, }) {
24
+ export function QuillMultiSelectComponentWithCombo({ options, width, onChange, label, value, isLoading, disabled, }) {
25
25
  const [theme] = useContext(ThemeContext);
26
26
  const [selectedOptions, setSelectedOptions] = useState([]);
27
27
  const [showModal, setShowModal] = useState(false);
@@ -124,8 +124,12 @@ export function QuillMultiSelectComponentWithCombo({ options, width, onChange, l
124
124
  height: 40,
125
125
  minHeight: 40,
126
126
  maxHeight: 40,
127
- }, className: "quill-select-button", onClick: () => setShowModal((showModal) => !showModal), children: [_jsx("style", { children: ` .quill-select-button { background: ${theme?.backgroundColor}; }
127
+ }, className: 'quill-select-button', onClick: () => setShowModal((showModal) => !showModal), disabled: disabled, children: [_jsx("style", { children: ` .quill-select-button { background: ${theme?.backgroundColor}; }
128
128
  .quill-select-button:hover { background: ${theme?.hoverBackgroundColor}; }
129
+ .quill-select-button:disabled {
130
+ cursor: not-allowed;
131
+ background: ${theme?.hoverBackgroundColor};
132
+ }
129
133
  ` }), _jsx("span", { style: {
130
134
  textOverflow: 'ellipsis',
131
135
  whiteSpace: 'nowrap',
@@ -63,8 +63,8 @@ export function QuillSelectComponent({ options, value, width, onChange, label, i
63
63
  }, className: "quill-select-button", onClick: () => setShowModal((showModal) => !showModal), disabled: disabled, children: [_jsx("style", { children: `
64
64
  .quill-select-button { background: ${theme?.backgroundColor}; }
65
65
  .quill-select-button:hover { background: ${theme?.hoverBackgroundColor}; }
66
- .quill-select-button:disabled {
67
- opacity: 0.5;
66
+ .quill-select-button:disabled, {
67
+ background: ${theme?.hoverBackgroundColor};
68
68
  cursor: not-allowed;
69
69
  }
70
70
  ` }), _jsx("span", { style: {
@@ -91,7 +91,7 @@ export function QuillSelectComponent({ options, value, width, onChange, label, i
91
91
  fontFamily: theme?.fontFamily,
92
92
  maxHeight: '50vh',
93
93
  overflow: 'scroll',
94
- }, children: [!isLoading && !hideEmptyOption && (_jsxs("button", { style: {
94
+ }, children: [!isLoading && (!hideEmptyOption || !options.length) && (_jsxs("button", { style: {
95
95
  display: 'flex',
96
96
  alignItems: 'center',
97
97
  justifyContent: 'space-between',
@@ -2,5 +2,5 @@ import { SelectComponentProps } from './UiComponents';
2
2
  /**
3
3
  * A robust select component that implements the new minimal Select interface.
4
4
  */
5
- export declare function QuillSelectComponentWithCombo({ options, value, width, onChange, label, isLoading, hideEmptyOption, }: SelectComponentProps): import("react/jsx-runtime").JSX.Element;
5
+ export declare function QuillSelectComponentWithCombo({ options, value, width, onChange, label, isLoading, hideEmptyOption, disabled, }: SelectComponentProps): import("react/jsx-runtime").JSX.Element;
6
6
  //# sourceMappingURL=QuillSelectWithCombo.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"QuillSelectWithCombo.d.ts","sourceRoot":"","sources":["../../../src/components/QuillSelectWithCombo.tsx"],"names":[],"mappings":"AACA,OAAO,EAAkB,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAWtE;;GAEG;AACH,wBAAgB,6BAA6B,CAAC,EAC5C,OAAO,EACP,KAAK,EACL,KAAK,EACL,QAAQ,EACR,KAAK,EACL,SAAS,EACT,eAAe,GAChB,EAAE,oBAAoB,2CA8QtB"}
1
+ {"version":3,"file":"QuillSelectWithCombo.d.ts","sourceRoot":"","sources":["../../../src/components/QuillSelectWithCombo.tsx"],"names":[],"mappings":"AACA,OAAO,EAAkB,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAWtE;;GAEG;AACH,wBAAgB,6BAA6B,CAAC,EAC5C,OAAO,EACP,KAAK,EACL,KAAK,EACL,QAAQ,EACR,KAAK,EACL,SAAS,EACT,eAAe,EACf,QAAQ,GACT,EAAE,oBAAoB,2CA2RtB"}
@@ -7,7 +7,7 @@ import { ListboxTextInput } from './QuillMultiSelectWithCombo';
7
7
  /**
8
8
  * A robust select component that implements the new minimal Select interface.
9
9
  */
10
- export function QuillSelectComponentWithCombo({ options, value, width, onChange, label, isLoading, hideEmptyOption, }) {
10
+ export function QuillSelectComponentWithCombo({ options, value, width, onChange, label, isLoading, hideEmptyOption, disabled, }) {
11
11
  const [theme] = useContext(ThemeContext);
12
12
  const [showModal, setShowModal] = useState(false);
13
13
  const modalRef = useRef(null);
@@ -90,7 +90,15 @@ export function QuillSelectComponentWithCombo({ options, value, width, onChange,
90
90
  height: 40,
91
91
  minHeight: 40,
92
92
  maxHeight: 40,
93
- }, className: "quill-select-button", onClick: () => setShowModal((showModal) => !showModal), children: [_jsx("style", { children: ` .quill-select-button { background: ${theme?.backgroundColor}; } .quill-select-button:hover { background: ${theme?.hoverBackgroundColor}; }` }), _jsx("span", { style: {
93
+ }, className: 'quill-select-button', onClick: () => setShowModal((showModal) => !showModal), disabled: disabled, children: [_jsx("style", { children: `
94
+ .quill-select-button { background: ${theme?.backgroundColor}; }
95
+ .quill-select-button:hover { background: ${theme?.hoverBackgroundColor}; }
96
+ .quill-select-button:disabled {
97
+ cursor: not-allowed;
98
+ background: ${theme?.hoverBackgroundColor};
99
+ }
100
+
101
+ ` }), _jsx("span", { style: {
94
102
  textOverflow: 'ellipsis',
95
103
  whiteSpace: 'nowrap',
96
104
  overflow: 'hidden',
@@ -117,7 +125,9 @@ export function QuillSelectComponentWithCombo({ options, value, width, onChange,
117
125
  fontSize: 14,
118
126
  }, children: [options && options.length > 20 && !isLoading && (_jsx(ListboxTextInput, { value: searchQuery, placeholder: "Search", onChange: (value) => {
119
127
  setSearchQuery(value);
120
- } })), searchQuery === '' && !isLoading && !hideEmptyOption && (_jsxs("button", { style: {
128
+ } })), searchQuery === '' &&
129
+ !isLoading &&
130
+ (!hideEmptyOption || !options.length) && (_jsxs("button", { style: {
121
131
  display: 'flex',
122
132
  alignItems: 'center',
123
133
  justifyContent: 'space-between',
@@ -137,7 +147,7 @@ export function QuillSelectComponentWithCombo({ options, value, width, onChange,
137
147
  minHeight: 34,
138
148
  }, className: "quill-option", onClick: () => {
139
149
  // Manually create a synthetic ChangeEvent and pass it to callback
140
- const changeEvent = { target: { value: '' } };
150
+ const changeEvent = { target: { value: undefined } };
141
151
  onChange(changeEvent);
142
152
  setShowModal(false);
143
153
  }, children: [_jsx("style", { children: `
@@ -0,0 +1,33 @@
1
+ import { FilterTreeNode } from '../../utils/astFilterProcessing';
2
+ interface FilterStackProps {
3
+ client: any;
4
+ filterStack: FilterTreeNode[];
5
+ filterTree: FilterTreeNode | null;
6
+ defaultAST: any;
7
+ baseAst: any;
8
+ setBaseAst: any;
9
+ setFormData: any;
10
+ fetchSqlQuery: any;
11
+ schemaData: any;
12
+ defaultColumn: any;
13
+ defaultTable: any;
14
+ currentTable: any;
15
+ initialTableName: string;
16
+ globalUniqueValues: any;
17
+ globalUniqueValuesIsLoading: boolean;
18
+ columns: any;
19
+ removingFilter: any;
20
+ setRemovingFilter: any;
21
+ TabsComponent: any;
22
+ FilterPopoverComponent: any;
23
+ FilterModal: any;
24
+ ButtonComponent: any;
25
+ SecondaryButtonComponent: any;
26
+ SelectComponent: any;
27
+ TextInputComponent: any;
28
+ MultiSelectComponent: any;
29
+ actionsEnabled: boolean;
30
+ }
31
+ export default function FilterStack({ client, filterStack, filterTree, defaultAST, baseAst, setBaseAst, setFormData, fetchSqlQuery, schemaData, defaultColumn, defaultTable, currentTable, initialTableName, globalUniqueValues, globalUniqueValuesIsLoading, columns, removingFilter, setRemovingFilter, TabsComponent, FilterPopoverComponent, FilterModal, ButtonComponent, SecondaryButtonComponent, SelectComponent, TextInputComponent, MultiSelectComponent, actionsEnabled, }: FilterStackProps): import("react/jsx-runtime").JSX.Element;
32
+ export {};
33
+ //# sourceMappingURL=FilterStack.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FilterStack.d.ts","sourceRoot":"","sources":["../../../../src/components/ReportBuilder/FilterStack.tsx"],"names":[],"mappings":"AAGA,OAAO,EACL,cAAc,EAEf,MAAM,iCAAiC,CAAC;AAUzC,UAAU,gBAAgB;IACxB,MAAM,EAAE,GAAG,CAAC;IACZ,WAAW,EAAE,cAAc,EAAE,CAAC;IAC9B,UAAU,EAAE,cAAc,GAAG,IAAI,CAAC;IAClC,UAAU,EAAE,GAAG,CAAC;IAChB,OAAO,EAAE,GAAG,CAAC;IACb,UAAU,EAAE,GAAG,CAAC;IAChB,WAAW,EAAE,GAAG,CAAC;IACjB,aAAa,EAAE,GAAG,CAAC;IACnB,UAAU,EAAE,GAAG,CAAC;IAChB,aAAa,EAAE,GAAG,CAAC;IACnB,YAAY,EAAE,GAAG,CAAC;IAClB,YAAY,EAAE,GAAG,CAAC;IAClB,gBAAgB,EAAE,MAAM,CAAC;IACzB,kBAAkB,EAAE,GAAG,CAAC;IACxB,2BAA2B,EAAE,OAAO,CAAC;IACrC,OAAO,EAAE,GAAG,CAAC;IACb,cAAc,EAAE,GAAG,CAAC;IACpB,iBAAiB,EAAE,GAAG,CAAC;IACvB,aAAa,EAAE,GAAG,CAAC;IACnB,sBAAsB,EAAE,GAAG,CAAC;IAC5B,WAAW,EAAE,GAAG,CAAC;IACjB,eAAe,EAAE,GAAG,CAAC;IACrB,wBAAwB,EAAE,GAAG,CAAC;IAC9B,eAAe,EAAE,GAAG,CAAC;IACrB,kBAAkB,EAAE,GAAG,CAAC;IACxB,oBAAoB,EAAE,GAAG,CAAC;IAC1B,cAAc,EAAE,OAAO,CAAC;CACzB;AAED,MAAM,CAAC,OAAO,UAAU,WAAW,CAAC,EAClC,MAAM,EACN,WAAW,EACX,UAAU,EACV,UAAU,EACV,OAAO,EACP,UAAU,EACV,WAAW,EACX,aAAa,EACb,UAAU,EACV,aAAa,EACb,YAAY,EACZ,YAAY,EACZ,gBAAgB,EAChB,kBAAkB,EAClB,2BAA2B,EAC3B,OAAO,EACP,cAAc,EACd,iBAAiB,EACjB,aAAa,EACb,sBAAsB,EACtB,WAAW,EACX,eAAe,EACf,wBAAwB,EACxB,eAAe,EACf,kBAAkB,EAClB,oBAAoB,EACpB,cAAqB,GACtB,EAAE,gBAAgB,2CAgLlB"}