@quillsql/react 2.13.42 → 2.13.44

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 (257) hide show
  1. package/dist/cjs/Chart.d.ts.map +1 -1
  2. package/dist/cjs/Chart.js +2 -2
  3. package/dist/cjs/ChartBuilder.d.ts +1 -0
  4. package/dist/cjs/ChartBuilder.d.ts.map +1 -1
  5. package/dist/cjs/ChartBuilder.js +48 -14
  6. package/dist/cjs/ChartEditor.d.ts +1 -1
  7. package/dist/cjs/ChartEditor.d.ts.map +1 -1
  8. package/dist/cjs/ChartEditor.js +2 -2
  9. package/dist/cjs/Context.d.ts.map +1 -1
  10. package/dist/cjs/Context.js +37 -26
  11. package/dist/cjs/Dashboard.d.ts +2 -2
  12. package/dist/cjs/Dashboard.d.ts.map +1 -1
  13. package/dist/cjs/Dashboard.js +115 -99
  14. package/dist/cjs/ReportBuilder.d.ts.map +1 -1
  15. package/dist/cjs/ReportBuilder.js +871 -1574
  16. package/dist/cjs/SQLEditor.d.ts.map +1 -1
  17. package/dist/cjs/SQLEditor.js +23 -4
  18. package/dist/cjs/Table.d.ts.map +1 -1
  19. package/dist/cjs/components/Chart/CustomReferenceLine.js +1 -1
  20. package/dist/cjs/components/Chart/GaugeChart.d.ts.map +1 -1
  21. package/dist/cjs/components/Chart/GaugeChart.js +64 -12
  22. package/dist/cjs/components/Chart/InternalChart.js +1 -1
  23. package/dist/cjs/components/Chart/MapChart.d.ts.map +1 -1
  24. package/dist/cjs/components/Chart/MapChart.js +65 -7
  25. package/dist/cjs/components/Dashboard/DashboardFilter.d.ts.map +1 -1
  26. package/dist/cjs/components/Dashboard/DashboardFilter.js +3 -3
  27. package/dist/cjs/components/Dashboard/DashboardSection.d.ts +1 -1
  28. package/dist/cjs/components/Dashboard/DashboardSection.d.ts.map +1 -1
  29. package/dist/cjs/components/Dashboard/DashboardSection.js +20 -19
  30. package/dist/cjs/components/Dashboard/MetricComponent.d.ts.map +1 -1
  31. package/dist/cjs/components/Dashboard/MetricComponent.js +1 -0
  32. package/dist/cjs/components/Dashboard/TableComponent.d.ts.map +1 -1
  33. package/dist/cjs/components/Dashboard/TableComponent.js +5 -1
  34. package/dist/cjs/components/QuillMultiSelectWithCombo.d.ts.map +1 -1
  35. package/dist/cjs/components/QuillMultiSelectWithCombo.js +58 -8
  36. package/dist/cjs/components/QuillSelect.d.ts.map +1 -1
  37. package/dist/cjs/components/QuillSelect.js +91 -14
  38. package/dist/cjs/components/QuillSelectWithCombo.js +6 -6
  39. package/dist/cjs/components/ReportBuilder/AddColumnModal.d.ts +6 -16
  40. package/dist/cjs/components/ReportBuilder/AddColumnModal.d.ts.map +1 -1
  41. package/dist/cjs/components/ReportBuilder/AddColumnModal.js +172 -75
  42. package/dist/cjs/components/ReportBuilder/AddSortPopover.d.ts +1 -5
  43. package/dist/cjs/components/ReportBuilder/AddSortPopover.d.ts.map +1 -1
  44. package/dist/cjs/components/ReportBuilder/AddSortPopover.js +2 -9
  45. package/dist/cjs/components/ReportBuilder/DraggableColumns.d.ts +17 -0
  46. package/dist/cjs/components/ReportBuilder/DraggableColumns.d.ts.map +1 -0
  47. package/dist/cjs/components/ReportBuilder/DraggableColumns.js +52 -0
  48. package/dist/cjs/components/ReportBuilder/DraggableItem.d.ts +17 -0
  49. package/dist/cjs/components/ReportBuilder/DraggableItem.d.ts.map +1 -0
  50. package/dist/cjs/components/ReportBuilder/DraggableItem.js +17 -0
  51. package/dist/cjs/components/ReportBuilder/FilterModal.d.ts +6 -12
  52. package/dist/cjs/components/ReportBuilder/FilterModal.d.ts.map +1 -1
  53. package/dist/cjs/components/ReportBuilder/FilterModal.js +29 -20
  54. package/dist/cjs/components/ReportBuilder/FilterStack.d.ts +8 -17
  55. package/dist/cjs/components/ReportBuilder/FilterStack.d.ts.map +1 -1
  56. package/dist/cjs/components/ReportBuilder/FilterStack.js +20 -86
  57. package/dist/cjs/components/ReportBuilder/convert.js +6 -6
  58. package/dist/cjs/components/ReportBuilder/ui.d.ts +8 -9
  59. package/dist/cjs/components/ReportBuilder/ui.d.ts.map +1 -1
  60. package/dist/cjs/components/ReportBuilder/ui.js +30 -8
  61. package/dist/cjs/components/ReportBuilder/util.d.ts +2 -5
  62. package/dist/cjs/components/ReportBuilder/util.d.ts.map +1 -1
  63. package/dist/cjs/components/ReportBuilder/util.js +1 -1
  64. package/dist/cjs/components/UiComponents.d.ts +3 -2
  65. package/dist/cjs/components/UiComponents.d.ts.map +1 -1
  66. package/dist/cjs/components/UiComponents.js +13 -13
  67. package/dist/cjs/hooks/useAskQuill.d.ts +1 -1
  68. package/dist/cjs/hooks/useAskQuill.d.ts.map +1 -1
  69. package/dist/cjs/hooks/useAskQuill.js +14 -12
  70. package/dist/cjs/hooks/useDashboard.d.ts +5 -3
  71. package/dist/cjs/hooks/useDashboard.d.ts.map +1 -1
  72. package/dist/cjs/hooks/useDashboard.js +8 -6
  73. package/dist/cjs/hooks/useOnClickOutside.d.ts +1 -0
  74. package/dist/cjs/hooks/useOnClickOutside.d.ts.map +1 -1
  75. package/dist/cjs/hooks/useOnClickOutside.js +33 -0
  76. package/dist/cjs/internals/ReportBuilder/PivotForm.d.ts +2 -1
  77. package/dist/cjs/internals/ReportBuilder/PivotForm.d.ts.map +1 -1
  78. package/dist/cjs/internals/ReportBuilder/PivotForm.js +22 -15
  79. package/dist/cjs/internals/ReportBuilder/PivotModal.d.ts +7 -5
  80. package/dist/cjs/internals/ReportBuilder/PivotModal.d.ts.map +1 -1
  81. package/dist/cjs/internals/ReportBuilder/PivotModal.js +100 -48
  82. package/dist/cjs/models/Client.d.ts +4 -0
  83. package/dist/cjs/models/Client.d.ts.map +1 -1
  84. package/dist/cjs/models/Dashboard.d.ts +1 -0
  85. package/dist/cjs/models/Dashboard.d.ts.map +1 -1
  86. package/dist/cjs/models/Report.d.ts +2 -0
  87. package/dist/cjs/models/Report.d.ts.map +1 -1
  88. package/dist/cjs/models/ReportBuilder.d.ts +46 -0
  89. package/dist/cjs/models/ReportBuilder.d.ts.map +1 -0
  90. package/dist/cjs/models/ReportBuilder.js +19 -0
  91. package/dist/cjs/models/Tables.d.ts +5 -5
  92. package/dist/cjs/models/Tables.d.ts.map +1 -1
  93. package/dist/cjs/utils/astFilterProcessing.d.ts +4 -0
  94. package/dist/cjs/utils/astFilterProcessing.d.ts.map +1 -1
  95. package/dist/cjs/utils/astFilterProcessing.js +301 -97
  96. package/dist/cjs/utils/astProcessing.d.ts +14 -4
  97. package/dist/cjs/utils/astProcessing.d.ts.map +1 -1
  98. package/dist/cjs/utils/astProcessing.js +38 -4
  99. package/dist/cjs/utils/dashboard.d.ts.map +1 -1
  100. package/dist/cjs/utils/dashboard.js +18 -3
  101. package/dist/cjs/utils/dataFetcher.d.ts.map +1 -1
  102. package/dist/cjs/utils/dataFetcher.js +4 -3
  103. package/dist/cjs/utils/filterProcessing.d.ts +2 -11
  104. package/dist/cjs/utils/filterProcessing.d.ts.map +1 -1
  105. package/dist/cjs/utils/filterProcessing.js +4 -16
  106. package/dist/cjs/utils/pivotConstructor.d.ts +2 -1
  107. package/dist/cjs/utils/pivotConstructor.d.ts.map +1 -1
  108. package/dist/cjs/utils/pivotConstructor.js +4 -2
  109. package/dist/cjs/utils/pivotProcessing.d.ts +17 -7
  110. package/dist/cjs/utils/pivotProcessing.d.ts.map +1 -1
  111. package/dist/cjs/utils/pivotProcessing.js +60 -51
  112. package/dist/cjs/utils/queryConstructor.d.ts.map +1 -1
  113. package/dist/cjs/utils/queryConstructor.js +15 -2
  114. package/dist/cjs/utils/report.d.ts +12 -9
  115. package/dist/cjs/utils/report.d.ts.map +1 -1
  116. package/dist/cjs/utils/report.js +114 -47
  117. package/dist/cjs/utils/reportBuilder.d.ts +88 -0
  118. package/dist/cjs/utils/reportBuilder.d.ts.map +1 -0
  119. package/dist/cjs/utils/reportBuilder.js +395 -0
  120. package/dist/cjs/utils/schema.d.ts +7 -0
  121. package/dist/cjs/utils/schema.d.ts.map +1 -1
  122. package/dist/cjs/utils/schema.js +36 -2
  123. package/dist/cjs/utils/tableProcessing.d.ts +59 -29
  124. package/dist/cjs/utils/tableProcessing.d.ts.map +1 -1
  125. package/dist/cjs/utils/tableProcessing.js +75 -90
  126. package/dist/cjs/utils/ui.d.ts +2 -0
  127. package/dist/cjs/utils/ui.d.ts.map +1 -0
  128. package/dist/cjs/utils/ui.js +18 -0
  129. package/dist/esm/Chart.d.ts.map +1 -1
  130. package/dist/esm/Chart.js +2 -2
  131. package/dist/esm/ChartBuilder.d.ts +1 -0
  132. package/dist/esm/ChartBuilder.d.ts.map +1 -1
  133. package/dist/esm/ChartBuilder.js +49 -15
  134. package/dist/esm/ChartEditor.d.ts +1 -1
  135. package/dist/esm/ChartEditor.d.ts.map +1 -1
  136. package/dist/esm/ChartEditor.js +2 -2
  137. package/dist/esm/Context.d.ts.map +1 -1
  138. package/dist/esm/Context.js +37 -26
  139. package/dist/esm/Dashboard.d.ts +2 -2
  140. package/dist/esm/Dashboard.d.ts.map +1 -1
  141. package/dist/esm/Dashboard.js +119 -103
  142. package/dist/esm/ReportBuilder.d.ts.map +1 -1
  143. package/dist/esm/ReportBuilder.js +878 -1581
  144. package/dist/esm/SQLEditor.d.ts.map +1 -1
  145. package/dist/esm/SQLEditor.js +23 -4
  146. package/dist/esm/Table.d.ts.map +1 -1
  147. package/dist/esm/components/Chart/CustomReferenceLine.js +1 -1
  148. package/dist/esm/components/Chart/GaugeChart.d.ts.map +1 -1
  149. package/dist/esm/components/Chart/GaugeChart.js +27 -8
  150. package/dist/esm/components/Chart/InternalChart.js +1 -1
  151. package/dist/esm/components/Chart/MapChart.d.ts.map +1 -1
  152. package/dist/esm/components/Chart/MapChart.js +30 -5
  153. package/dist/esm/components/Dashboard/DashboardFilter.d.ts.map +1 -1
  154. package/dist/esm/components/Dashboard/DashboardFilter.js +3 -3
  155. package/dist/esm/components/Dashboard/DashboardSection.d.ts +1 -1
  156. package/dist/esm/components/Dashboard/DashboardSection.d.ts.map +1 -1
  157. package/dist/esm/components/Dashboard/DashboardSection.js +21 -20
  158. package/dist/esm/components/Dashboard/MetricComponent.d.ts.map +1 -1
  159. package/dist/esm/components/Dashboard/MetricComponent.js +1 -0
  160. package/dist/esm/components/Dashboard/TableComponent.d.ts.map +1 -1
  161. package/dist/esm/components/Dashboard/TableComponent.js +5 -1
  162. package/dist/esm/components/QuillMultiSelectWithCombo.d.ts.map +1 -1
  163. package/dist/esm/components/QuillMultiSelectWithCombo.js +57 -7
  164. package/dist/esm/components/QuillSelect.d.ts.map +1 -1
  165. package/dist/esm/components/QuillSelect.js +58 -14
  166. package/dist/esm/components/QuillSelectWithCombo.js +6 -6
  167. package/dist/esm/components/ReportBuilder/AddColumnModal.d.ts +6 -16
  168. package/dist/esm/components/ReportBuilder/AddColumnModal.d.ts.map +1 -1
  169. package/dist/esm/components/ReportBuilder/AddColumnModal.js +173 -76
  170. package/dist/esm/components/ReportBuilder/AddSortPopover.d.ts +1 -5
  171. package/dist/esm/components/ReportBuilder/AddSortPopover.d.ts.map +1 -1
  172. package/dist/esm/components/ReportBuilder/AddSortPopover.js +2 -9
  173. package/dist/esm/components/ReportBuilder/DraggableColumns.d.ts +17 -0
  174. package/dist/esm/components/ReportBuilder/DraggableColumns.d.ts.map +1 -0
  175. package/dist/esm/components/ReportBuilder/DraggableColumns.js +46 -0
  176. package/dist/esm/components/ReportBuilder/DraggableItem.d.ts +17 -0
  177. package/dist/esm/components/ReportBuilder/DraggableItem.d.ts.map +1 -0
  178. package/dist/esm/components/ReportBuilder/DraggableItem.js +14 -0
  179. package/dist/esm/components/ReportBuilder/FilterModal.d.ts +6 -12
  180. package/dist/esm/components/ReportBuilder/FilterModal.d.ts.map +1 -1
  181. package/dist/esm/components/ReportBuilder/FilterModal.js +29 -20
  182. package/dist/esm/components/ReportBuilder/FilterStack.d.ts +8 -17
  183. package/dist/esm/components/ReportBuilder/FilterStack.d.ts.map +1 -1
  184. package/dist/esm/components/ReportBuilder/FilterStack.js +21 -87
  185. package/dist/esm/components/ReportBuilder/convert.js +6 -6
  186. package/dist/esm/components/ReportBuilder/ui.d.ts +8 -9
  187. package/dist/esm/components/ReportBuilder/ui.d.ts.map +1 -1
  188. package/dist/esm/components/ReportBuilder/ui.js +33 -11
  189. package/dist/esm/components/ReportBuilder/util.d.ts +2 -5
  190. package/dist/esm/components/ReportBuilder/util.d.ts.map +1 -1
  191. package/dist/esm/components/ReportBuilder/util.js +1 -1
  192. package/dist/esm/components/UiComponents.d.ts +3 -2
  193. package/dist/esm/components/UiComponents.d.ts.map +1 -1
  194. package/dist/esm/components/UiComponents.js +13 -13
  195. package/dist/esm/hooks/useAskQuill.d.ts +1 -1
  196. package/dist/esm/hooks/useAskQuill.d.ts.map +1 -1
  197. package/dist/esm/hooks/useAskQuill.js +14 -12
  198. package/dist/esm/hooks/useDashboard.d.ts +5 -3
  199. package/dist/esm/hooks/useDashboard.d.ts.map +1 -1
  200. package/dist/esm/hooks/useDashboard.js +8 -6
  201. package/dist/esm/hooks/useOnClickOutside.d.ts +1 -0
  202. package/dist/esm/hooks/useOnClickOutside.d.ts.map +1 -1
  203. package/dist/esm/hooks/useOnClickOutside.js +31 -0
  204. package/dist/esm/internals/ReportBuilder/PivotForm.d.ts +2 -1
  205. package/dist/esm/internals/ReportBuilder/PivotForm.d.ts.map +1 -1
  206. package/dist/esm/internals/ReportBuilder/PivotForm.js +23 -16
  207. package/dist/esm/internals/ReportBuilder/PivotModal.d.ts +7 -5
  208. package/dist/esm/internals/ReportBuilder/PivotModal.d.ts.map +1 -1
  209. package/dist/esm/internals/ReportBuilder/PivotModal.js +101 -49
  210. package/dist/esm/models/Client.d.ts +4 -0
  211. package/dist/esm/models/Client.d.ts.map +1 -1
  212. package/dist/esm/models/Dashboard.d.ts +1 -0
  213. package/dist/esm/models/Dashboard.d.ts.map +1 -1
  214. package/dist/esm/models/Report.d.ts +2 -0
  215. package/dist/esm/models/Report.d.ts.map +1 -1
  216. package/dist/esm/models/ReportBuilder.d.ts +46 -0
  217. package/dist/esm/models/ReportBuilder.d.ts.map +1 -0
  218. package/dist/esm/models/ReportBuilder.js +16 -0
  219. package/dist/esm/models/Tables.d.ts +5 -5
  220. package/dist/esm/models/Tables.d.ts.map +1 -1
  221. package/dist/esm/utils/astFilterProcessing.d.ts +4 -0
  222. package/dist/esm/utils/astFilterProcessing.d.ts.map +1 -1
  223. package/dist/esm/utils/astFilterProcessing.js +300 -97
  224. package/dist/esm/utils/astProcessing.d.ts +14 -4
  225. package/dist/esm/utils/astProcessing.d.ts.map +1 -1
  226. package/dist/esm/utils/astProcessing.js +38 -5
  227. package/dist/esm/utils/dashboard.d.ts.map +1 -1
  228. package/dist/esm/utils/dashboard.js +18 -3
  229. package/dist/esm/utils/dataFetcher.d.ts.map +1 -1
  230. package/dist/esm/utils/dataFetcher.js +4 -3
  231. package/dist/esm/utils/filterProcessing.d.ts +2 -11
  232. package/dist/esm/utils/filterProcessing.d.ts.map +1 -1
  233. package/dist/esm/utils/filterProcessing.js +4 -15
  234. package/dist/esm/utils/pivotConstructor.d.ts +2 -1
  235. package/dist/esm/utils/pivotConstructor.d.ts.map +1 -1
  236. package/dist/esm/utils/pivotConstructor.js +4 -2
  237. package/dist/esm/utils/pivotProcessing.d.ts +17 -7
  238. package/dist/esm/utils/pivotProcessing.d.ts.map +1 -1
  239. package/dist/esm/utils/pivotProcessing.js +58 -49
  240. package/dist/esm/utils/queryConstructor.d.ts.map +1 -1
  241. package/dist/esm/utils/queryConstructor.js +15 -2
  242. package/dist/esm/utils/report.d.ts +12 -9
  243. package/dist/esm/utils/report.d.ts.map +1 -1
  244. package/dist/esm/utils/report.js +116 -46
  245. package/dist/esm/utils/reportBuilder.d.ts +88 -0
  246. package/dist/esm/utils/reportBuilder.d.ts.map +1 -0
  247. package/dist/esm/utils/reportBuilder.js +386 -0
  248. package/dist/esm/utils/schema.d.ts +7 -0
  249. package/dist/esm/utils/schema.d.ts.map +1 -1
  250. package/dist/esm/utils/schema.js +34 -1
  251. package/dist/esm/utils/tableProcessing.d.ts +59 -29
  252. package/dist/esm/utils/tableProcessing.d.ts.map +1 -1
  253. package/dist/esm/utils/tableProcessing.js +71 -86
  254. package/dist/esm/utils/ui.d.ts +2 -0
  255. package/dist/esm/utils/ui.d.ts.map +1 -0
  256. package/dist/esm/utils/ui.js +14 -0
  257. package/package.json +5 -2
@@ -0,0 +1,17 @@
1
+ interface DraggableItemProps {
2
+ id: string;
3
+ label: string;
4
+ onDelete: () => void;
5
+ DraggableColumnComponent: (props: {
6
+ label: string;
7
+ onDelete: () => void;
8
+ DragHandle: ({ dragIcon }: {
9
+ dragIcon: () => JSX.Element;
10
+ }) => JSX.Element;
11
+ deleteDisabled?: boolean;
12
+ }) => JSX.Element;
13
+ loading: boolean;
14
+ }
15
+ export default function DraggableItem({ id, label, onDelete, DraggableColumnComponent, loading, }: DraggableItemProps): import("react/jsx-runtime").JSX.Element;
16
+ export {};
17
+ //# sourceMappingURL=DraggableItem.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DraggableItem.d.ts","sourceRoot":"","sources":["../../../../src/components/ReportBuilder/DraggableItem.tsx"],"names":[],"mappings":"AAIA,UAAU,kBAAkB;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,wBAAwB,EAAE,CAAC,KAAK,EAAE;QAChC,KAAK,EAAE,MAAM,CAAC;QACd,QAAQ,EAAE,MAAM,IAAI,CAAC;QACrB,UAAU,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE;YAAE,QAAQ,EAAE,MAAM,GAAG,CAAC,OAAO,CAAA;SAAE,KAAK,GAAG,CAAC,OAAO,CAAC;QAC3E,cAAc,CAAC,EAAE,OAAO,CAAC;KAC1B,KAAK,GAAG,CAAC,OAAO,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,CAAC,OAAO,UAAU,aAAa,CAAC,EACpC,EAAE,EACF,KAAK,EACL,QAAQ,EACR,wBAAwB,EACxB,OAAO,GACR,EAAE,kBAAkB,2CA6BpB"}
@@ -0,0 +1,14 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { useSortable } from '@dnd-kit/sortable';
3
+ import { CSS as DND_CSS } from '@dnd-kit/utilities';
4
+ import { snakeAndCamelCaseToTitleCase } from '../../utils/textProcessing';
5
+ export default function DraggableItem({ id, label, onDelete, DraggableColumnComponent, loading, }) {
6
+ const { attributes, listeners, setNodeRef, transform, transition } = useSortable({ id: id });
7
+ const style = {
8
+ transform: DND_CSS.Transform.toString(transform),
9
+ transition,
10
+ };
11
+ return (_jsx("div", { style: { ...style }, ref: setNodeRef, children: _jsx(DraggableColumnComponent, { label: snakeAndCamelCaseToTitleCase(label), onDelete: onDelete, DragHandle: (props) => (_jsx("div", { style: {
12
+ cursor: 'grab',
13
+ }, ...attributes, ...listeners, children: _jsx(props.dragIcon, {}) })), deleteDisabled: loading }) }));
14
+ }
@@ -1,19 +1,13 @@
1
1
  import { InternalFilter, Operator } from '../../models/Filter';
2
- import { ColumnInternal } from '../../models/Columns';
2
+ import { UniqueValuesByTable, Table, UniqueValuesByColumn } from '../../models/Tables';
3
3
  interface FilterModalProps {
4
- schema?: {
5
- columns: ColumnInternal[];
6
- };
4
+ schema: Table[];
5
+ tables?: string[];
7
6
  filter?: InternalFilter;
8
- fieldValuesMap: {
9
- [key: string]: string[];
10
- } | {
11
- [key: string]: {
12
- [key: string]: string[];
13
- };
14
- };
7
+ fieldValuesMap: UniqueValuesByColumn | UniqueValuesByTable;
15
8
  fieldValuesMapIsLoading?: boolean;
16
9
  customOperatorOptions?: OperatorOptionsMap;
10
+ hideTableName?: boolean;
17
11
  onSubmitFilter: (filter: InternalFilter) => void;
18
12
  onDeleteFilter: () => void;
19
13
  ButtonComponent: React.ComponentType<any>;
@@ -28,6 +22,6 @@ type OperatorOptionsMap = {
28
22
  /**
29
23
  * Modal for adding, editing, and deleting Filters
30
24
  */
31
- export default function FilterModal({ schema, filter, fieldValuesMap, fieldValuesMapIsLoading, customOperatorOptions, onSubmitFilter, onDeleteFilter, ButtonComponent, SelectComponent, TextInputComponent, SecondaryButtonComponent, MultiSelectComponent, }: FilterModalProps): import("react/jsx-runtime").JSX.Element | null;
25
+ export default function FilterModal({ schema, tables, filter, fieldValuesMap, fieldValuesMapIsLoading, customOperatorOptions, hideTableName, onSubmitFilter, onDeleteFilter, ButtonComponent, SelectComponent, TextInputComponent, SecondaryButtonComponent, MultiSelectComponent, }: FilterModalProps): import("react/jsx-runtime").JSX.Element | null;
32
26
  export {};
33
27
  //# 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,cAAc,EAId,QAAQ,EAMT,MAAM,qBAAqB,CAAC;AAM7B,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,UAAU,gBAAgB;IACxB,MAAM,CAAC,EAAE;QAAE,OAAO,EAAE,cAAc,EAAE,CAAA;KAAE,CAAC;IACvC,MAAM,CAAC,EAAE,cAAc,CAAC;IACxB,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,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,qBAAqB,CAAC,EAAE,kBAAkB,CAAC;IAC3C,cAAc,EAAE,CAAC,MAAM,EAAE,cAAc,KAAK,IAAI,CAAC;IACjD,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,uBAAuB,EACvB,qBAAqB,EACrB,cAAc,EACd,cAAc,EACd,eAAe,EACf,eAAe,EACf,kBAAkB,EAClB,wBAAwB,EACxB,oBAAoB,GACrB,EAAE,gBAAgB,kDAi3BlB"}
1
+ {"version":3,"file":"FilterModal.d.ts","sourceRoot":"","sources":["../../../../src/components/ReportBuilder/FilterModal.tsx"],"names":[],"mappings":"AAIA,OAAO,EACL,cAAc,EAId,QAAQ,EAMT,MAAM,qBAAqB,CAAC;AAO7B,OAAO,EACL,mBAAmB,EACnB,KAAK,EACL,oBAAoB,EACrB,MAAM,qBAAqB,CAAC;AAC7B,UAAU,gBAAgB;IACxB,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,CAAC,EAAE,cAAc,CAAC;IACxB,cAAc,EACZ,oBAAoB,GAClB,mBAAmB,CAAC;IACxB,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,qBAAqB,CAAC,EAAE,kBAAkB,CAAC;IAC3C,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,cAAc,EAAE,CAAC,MAAM,EAAE,cAAc,KAAK,IAAI,CAAC;IACjD,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,MAAM,EACN,cAAc,EACd,uBAAuB,EACvB,qBAAqB,EACrB,aAAa,EACb,cAAc,EACd,cAAc,EACd,eAAe,EACf,eAAe,EACf,kBAAkB,EAClB,wBAAwB,EACxB,oBAAoB,GACrB,EAAE,gBAAgB,kDAk4BlB"}
@@ -10,7 +10,7 @@ import { getType } from '../../utils/filterProcessing';
10
10
  /**
11
11
  * Modal for adding, editing, and deleting Filters
12
12
  */
13
- export default function FilterModal({ schema, filter, fieldValuesMap, fieldValuesMapIsLoading, customOperatorOptions, onSubmitFilter, onDeleteFilter, ButtonComponent, SelectComponent, TextInputComponent, SecondaryButtonComponent, MultiSelectComponent, }) {
13
+ export default function FilterModal({ schema, tables, filter, fieldValuesMap, fieldValuesMapIsLoading, customOperatorOptions, hideTableName, onSubmitFilter, onDeleteFilter, ButtonComponent, SelectComponent, TextInputComponent, SecondaryButtonComponent, MultiSelectComponent, }) {
14
14
  const [field, setField] = useState('');
15
15
  const [fieldOptions, setFieldOptions] = useState([]);
16
16
  const [fieldValues, setFieldValues] = useState([]);
@@ -29,7 +29,7 @@ export default function FilterModal({ schema, filter, fieldValuesMap, fieldValue
29
29
  const memoizedFilter = useMemo(() => filter, [JSON.stringify(filter)]);
30
30
  useEffect(() => {
31
31
  if (!filter) {
32
- onFieldChange(field, fieldOptions);
32
+ onFieldChange(field, fieldOptions, table);
33
33
  }
34
34
  }, [memoizedFieldValuesMap]);
35
35
  // Define all supported operator options for each field type
@@ -77,7 +77,8 @@ export default function FilterModal({ schema, filter, fieldValuesMap, fieldValue
77
77
  useEffect(() => {
78
78
  if (filter) {
79
79
  setField(filter.field);
80
- onFieldChange(filter.field, fieldOptions);
80
+ setTable(filter.table);
81
+ onFieldChange(filter.field, fieldOptions, filter.table);
81
82
  setType(filter.fieldType);
82
83
  onTypeChange(filter.fieldType);
83
84
  setValue(filter.filterType === 'date-filter' ? filter.value.value : filter.value);
@@ -99,21 +100,26 @@ export default function FilterModal({ schema, filter, fieldValuesMap, fieldValue
99
100
  }, [memoizedFilter]);
100
101
  // Given the schema, set the options for the field
101
102
  useEffect(() => {
102
- if (schema && schema.columns) {
103
- const fo = schema.columns.map((column) => {
104
- return {
105
- name: column.field,
106
- type: column.fieldType,
107
- table: column.table ?? '',
108
- };
103
+ if (schema) {
104
+ const fo = schema.flatMap((table) => {
105
+ if (tables && !tables.includes(table.name)) {
106
+ return [];
107
+ }
108
+ return table.columns.map((column) => {
109
+ return {
110
+ name: column.field,
111
+ type: column.fieldType,
112
+ table: table.name,
113
+ };
114
+ });
109
115
  });
110
116
  setFieldOptions(fo);
111
117
  if (!filter && fo.length > 0 && fo[0]) {
112
118
  setField(fo[0].name);
113
- onFieldChange(fo[0].name, fo);
119
+ onFieldChange(fo[0].name, fo, fo[0].table);
114
120
  }
115
121
  else {
116
- onFieldChange(field !== '' ? field : (filter?.field ?? ''), fo);
122
+ onFieldChange(field !== '' ? field : (filter?.field ?? ''), fo, table ?? filter?.table);
117
123
  }
118
124
  }
119
125
  }, [schema]);
@@ -206,9 +212,9 @@ export default function FilterModal({ schema, filter, fieldValuesMap, fieldValue
206
212
  setUnit('');
207
213
  }
208
214
  }
209
- function onFieldChange(field, fieldOptions) {
215
+ function onFieldChange(field, fieldOptions, table) {
210
216
  if (field !== '') {
211
- const selectedOption = fieldOptions.find((option) => option.name === field);
217
+ const selectedOption = fieldOptions.find((option) => option.name === field && (!table || option.table === table));
212
218
  if (selectedOption) {
213
219
  const fieldValues = getFieldValues(selectedOption.name, selectedOption.table);
214
220
  if (filterInitialized || !filter) {
@@ -298,10 +304,13 @@ export default function FilterModal({ schema, filter, fieldValuesMap, fieldValue
298
304
  }
299
305
  };
300
306
  const handleFieldChange = (event) => {
301
- const newField = event.target.value;
302
- if (typeof newField === 'string' && newField !== field) {
307
+ const value = event.target.value;
308
+ if (typeof value === 'string') {
309
+ const [_table, _field] = value.split(':');
310
+ const newField = _field;
311
+ const newTable = _table !== '' ? _table : undefined;
303
312
  setField(newField);
304
- onFieldChange(newField, fieldOptions);
313
+ onFieldChange(newField, fieldOptions, newTable);
305
314
  }
306
315
  };
307
316
  // Handler for date range selection
@@ -555,10 +564,10 @@ export default function FilterModal({ schema, filter, fieldValuesMap, fieldValue
555
564
  gap: '20px',
556
565
  flexDirection: 'row',
557
566
  width: '100%',
558
- }, children: [_jsx("div", { style: { display: 'flex', gap: 20 }, children: _jsx(SelectComponent, { value: field, width: 200, onChange: handleFieldChange, options: [
567
+ }, children: [_jsx("div", { style: { display: 'flex', gap: 20 }, children: _jsx(SelectComponent, { value: `${table ?? ''}:${field}`, width: 200, onChange: handleFieldChange, options: [
559
568
  ...fieldOptions.map((option) => ({
560
- value: option.name,
561
- label: option.table !== ''
569
+ value: `${option.table}:${option.name}`,
570
+ label: option.table !== '' && !hideTableName
562
571
  ? `${snakeAndCamelCaseToTitleCase(option.name)} (${option.table})`
563
572
  : snakeAndCamelCaseToTitleCase(option.name),
564
573
  })),
@@ -1,24 +1,15 @@
1
1
  import { FilterTreeNode } from '../../utils/astFilterProcessing';
2
2
  import { SchemaData } from '../../models/Schema';
3
+ import { ReportBuilderTable } from '../../models/ReportBuilder';
4
+ import { UniqueValuesByTable } from '../../models/Tables';
3
5
  interface FilterStackProps {
4
6
  client: any;
5
7
  filterStack: FilterTreeNode[];
6
- filterTree: FilterTreeNode | null;
7
- defaultAST: any;
8
- baseAst: any;
9
- setBaseAst: any;
10
- setFormData: any;
11
- fetchSqlQuery: any;
8
+ handleFilterStackChange: (newStack: FilterTreeNode[], fetchData?: boolean) => void;
12
9
  schemaData: SchemaData;
13
- defaultColumn: any;
14
- defaultTable: any;
15
- currentTable: any;
16
- initialTableName: string;
17
- globalUniqueValues: any;
18
- globalUniqueValuesIsLoading: boolean;
19
- columns: any;
20
- removingFilter: any;
21
- setRemovingFilter: any;
10
+ uniqueValues: UniqueValuesByTable;
11
+ uniqueValuesIsLoading: boolean;
12
+ tables: ReportBuilderTable[];
22
13
  TabsComponent: any;
23
14
  FilterPopoverComponent: any;
24
15
  FilterModal: any;
@@ -28,8 +19,8 @@ interface FilterStackProps {
28
19
  TextInputComponent: any;
29
20
  MultiSelectComponent: any;
30
21
  actionsEnabled: boolean;
31
- dashboardName?: string;
22
+ dashboardName: string;
32
23
  }
33
- 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, dashboardName, }: FilterStackProps): import("react/jsx-runtime").JSX.Element;
24
+ export default function FilterStack({ client, filterStack, handleFilterStackChange, schemaData, uniqueValues, uniqueValuesIsLoading, tables, TabsComponent, FilterPopoverComponent, FilterModal, ButtonComponent, SecondaryButtonComponent, SelectComponent, TextInputComponent, MultiSelectComponent, actionsEnabled, dashboardName, }: FilterStackProps): import("react/jsx-runtime").JSX.Element;
34
25
  export {};
35
26
  //# sourceMappingURL=FilterStack.d.ts.map
@@ -1 +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;AASzC,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEjD,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,UAAU,CAAC;IACvB,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;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;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,EACrB,aAAa,GACd,EAAE,gBAAgB,2CAiLlB"}
1
+ {"version":3,"file":"FilterStack.d.ts","sourceRoot":"","sources":["../../../../src/components/ReportBuilder/FilterStack.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AAKjE,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAE1D,UAAU,gBAAgB;IACxB,MAAM,EAAE,GAAG,CAAC;IACZ,WAAW,EAAE,cAAc,EAAE,CAAC;IAC9B,uBAAuB,EAAE,CACvB,QAAQ,EAAE,cAAc,EAAE,EAC1B,SAAS,CAAC,EAAE,OAAO,KAChB,IAAI,CAAC;IACV,UAAU,EAAE,UAAU,CAAC;IACvB,YAAY,EAAE,mBAAmB,CAAC;IAClC,qBAAqB,EAAE,OAAO,CAAC;IAC/B,MAAM,EAAE,kBAAkB,EAAE,CAAC;IAC7B,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;IACxB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,CAAC,OAAO,UAAU,WAAW,CAAC,EAClC,MAAM,EACN,WAAW,EACX,uBAAuB,EACvB,UAAU,EACV,YAAY,EACZ,qBAAqB,EACrB,MAAM,EACN,aAAa,EACb,sBAAsB,EACtB,WAAW,EACX,eAAe,EACf,wBAAwB,EACxB,eAAe,EACf,kBAAkB,EAClB,oBAAoB,EACpB,cAAqB,EACrB,aAAa,GACd,EAAE,gBAAgB,2CAoFlB"}
@@ -1,12 +1,10 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
2
  import { QUILL_SERVER } from '../../utils/constants';
3
- import { filterTreeToAst, } from '../../utils/astFilterProcessing';
4
- import { getAllPossibleColumns } from '../../utils/astProcessing';
5
- import { filterSentence, filterStackToFilterTree, } from '../../utils/filterProcessing';
3
+ import { filterSentence } from '../../utils/filterProcessing';
6
4
  import { DEFAULT_TAB_OPTIONS } from '../UiComponents';
7
5
  import { FilterPopoverWrapper } from './ui';
8
6
  import { deepCopy } from './util';
9
- 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 = true, dashboardName, }) {
7
+ export default function FilterStack({ client, filterStack, handleFilterStackChange, schemaData, uniqueValues, uniqueValuesIsLoading, tables, TabsComponent, FilterPopoverComponent, FilterModal, ButtonComponent, SecondaryButtonComponent, SelectComponent, TextInputComponent, MultiSelectComponent, actionsEnabled = true, dashboardName, }) {
10
8
  return (_jsx("div", { style: {
11
9
  display: 'flex',
12
10
  flexDirection: 'column',
@@ -17,101 +15,37 @@ export default function FilterStack({ client, filterStack, filterTree, defaultAS
17
15
  marginBottom: '8px',
18
16
  marginTop: '8px',
19
17
  }, children: _jsx(TabsComponent, { value: item.operator.toUpperCase(), options: DEFAULT_TAB_OPTIONS, onChange: () => {
18
+ const newItem = { ...item };
20
19
  if (item.operator === 'and') {
21
- item.operator = 'or';
20
+ newItem.operator = 'or';
22
21
  }
23
22
  else {
24
- item.operator = 'and';
23
+ newItem.operator = 'and';
25
24
  }
26
- let newFormData = null;
27
- if (filterTree) {
28
- newFormData = filterTreeToAst(filterTree, client.databaseType.toLowerCase());
29
- }
30
- const newAst = deepCopy({
31
- ...defaultAST,
32
- ...baseAst,
33
- ...(!baseAst?.columns && {
34
- columns: getAllPossibleColumns(baseAst, schemaData.schemaWithCustomFields).map((c) => {
35
- const newColumn = deepCopy(defaultColumn);
36
- newColumn.expr.column = c.field;
37
- return newColumn;
38
- }),
39
- }),
40
- ...(!baseAst?.from && {
41
- from: [{ ...defaultTable, table: initialTableName }],
42
- }),
43
- where: newFormData,
44
- });
45
- setBaseAst(newAst);
46
- setFormData(newFormData);
47
- fetchSqlQuery(newAst, newFormData);
25
+ const newStack = deepCopy(filterStack);
26
+ newStack[index] = { ...newItem };
27
+ handleFilterStackChange(newStack, true);
48
28
  } }) }, index));
49
29
  }
50
30
  else if (item.value) {
51
- return (_jsx(FilterPopoverWrapper, { schema: schemaData.schemaWithCustomFields.find((s) => s.name === currentTable || s.displayName === currentTable) ?? schemaData.schemaWithCustomFields[0], filter: item.value, filterLabel: item.value ? filterSentence(item.value) : '', index: index, FilterTagComponent: FilterPopoverComponent, FilterModal: FilterModal, fieldValuesMap: globalUniqueValues, fieldValuesMapIsLoading: globalUniqueValuesIsLoading, priorFilters: filterStack.slice(0, index > 0 ? index - 1 : 0), columns: columns, client: client, customFields: schemaData.customFields, baseAst: baseAst, endpoint: QUILL_SERVER, ButtonComponent: ButtonComponent, SecondaryButtonComponent: SecondaryButtonComponent, SelectComponent: SelectComponent, TextInputComponent: TextInputComponent, MultiSelectComponent: MultiSelectComponent, handleFilterSave: (filter) => {
52
- item.value = filter;
53
- let newFormData = null;
54
- if (filterTree) {
55
- newFormData = filterTreeToAst(filterTree, client.databaseType.toLowerCase());
56
- }
57
- const newAst = deepCopy({
58
- ...defaultAST,
59
- ...baseAst,
60
- ...(!baseAst?.columns && {
61
- columns: getAllPossibleColumns(baseAst, schemaData.schemaWithCustomFields).map((c) => {
62
- const newColumn = deepCopy(defaultColumn);
63
- newColumn.expr.column = c.field;
64
- return newColumn;
65
- }),
66
- }),
67
- ...(!baseAst?.from && {
68
- from: [{ ...defaultTable, table: initialTableName }],
69
- }),
70
- where: newFormData,
71
- });
72
- setBaseAst(newAst);
73
- setFormData(newFormData);
74
- fetchSqlQuery(newAst, newFormData);
31
+ return (_jsx(FilterPopoverWrapper, { schema: schemaData.schemaWithCustomFields, filter: item.value, filterLabel: item.value ? filterSentence(item.value) : '', index: index, FilterTagComponent: FilterPopoverComponent, FilterModal: FilterModal, fieldValuesMap: uniqueValues, fieldValuesMapIsLoading: uniqueValuesIsLoading, priorFilters: filterStack.slice(0, index > 0 ? index - 1 : 0), tables: tables, client: client, customFields: schemaData.customFields, endpoint: QUILL_SERVER, ButtonComponent: ButtonComponent, SecondaryButtonComponent: SecondaryButtonComponent, SelectComponent: SelectComponent, TextInputComponent: TextInputComponent, MultiSelectComponent: MultiSelectComponent, handleFilterSave: (filter) => {
32
+ const newStack = deepCopy(filterStack);
33
+ newStack[index] = { ...item, value: filter };
34
+ handleFilterStackChange(newStack, true);
75
35
  }, handleFilterDelete: (i) => {
76
- if (!removingFilter) {
77
- setRemovingFilter(true);
78
- const newStack = filterStack;
79
- if (i > 0) {
80
- newStack.splice(i - 1, 2);
36
+ const newStack = deepCopy(filterStack);
37
+ if (i > 0) {
38
+ newStack.splice(i - 1, 2);
39
+ }
40
+ else {
41
+ if (filterStack.length > 1) {
42
+ newStack.splice(i, 2);
81
43
  }
82
44
  else {
83
- if (filterStack.length > 1) {
84
- newStack.splice(i, 2);
85
- }
86
- else {
87
- newStack.splice(i, 1);
88
- }
89
- }
90
- const tree = filterStackToFilterTree(newStack);
91
- let newFormData = null;
92
- if (tree) {
93
- newFormData = filterTreeToAst(tree, client.databaseType.toLowerCase());
45
+ newStack.splice(i, 1);
94
46
  }
95
- const newAst = deepCopy({
96
- ...defaultAST,
97
- ...baseAst,
98
- ...(!baseAst?.columns && {
99
- columns: getAllPossibleColumns(baseAst, schemaData.schemaWithCustomFields).map((c) => {
100
- const newColumn = deepCopy(defaultColumn);
101
- newColumn.expr.column = c.field;
102
- return newColumn;
103
- }),
104
- }),
105
- ...(!baseAst?.from && {
106
- from: [{ ...defaultTable, table: initialTableName }],
107
- }),
108
- where: newFormData,
109
- });
110
- setBaseAst(newAst);
111
- setFormData(newFormData);
112
- fetchSqlQuery(newAst, newFormData);
113
- setRemovingFilter(false);
114
47
  }
48
+ handleFilterStackChange(newStack, true);
115
49
  }, disabled: !actionsEnabled, dashboardName: dashboardName }, `filter_${index}_${item.value ? filterSentence(item.value) : ''}`));
116
50
  }
117
51
  }) }));
@@ -89,9 +89,9 @@ export function convertBigQuery(ast) {
89
89
  recursiveSearchAndReplaceByKey(newAst.where, 'week', '* 7 DAY', 'unit');
90
90
  recursiveSearchAndReplaceByKey(newAst.where, 'month', '* 30 DAY', 'unit');
91
91
  // TODO: handle joins nicely
92
- if (newAst.from && newAst.from.length > 1) {
93
- newAst.from = [newAst.from[0]];
94
- }
92
+ // if (newAst.from && newAst.from.length > 1) {
93
+ // newAst.from = [newAst.from![0]!];
94
+ // }
95
95
  // TODO: handle UNION ALL joins
96
96
  if (newAst._next) {
97
97
  delete newAst._next;
@@ -100,9 +100,9 @@ export function convertBigQuery(ast) {
100
100
  }
101
101
  else {
102
102
  // TODO: handle joins nicely
103
- if (ast.from && ast.from.length > 1) {
104
- ast.from = [ast.from[0]];
105
- }
103
+ // if (ast.from && ast.from.length > 1) {
104
+ // ast.from = [ast.from![0]!];
105
+ // }
106
106
  // TODO: handle UNION ALL joins
107
107
  if (ast._next) {
108
108
  delete ast._next;
@@ -1,9 +1,10 @@
1
1
  import { ReactNode } from 'react';
2
2
  import { SidebarComponentProps, ContainerComponentProps } from '../UiComponents';
3
3
  import { InternalFilter } from '../../models/Filter';
4
- import { ColumnInternal } from '../../models/Columns';
5
4
  import { FilterTreeNode } from '../../utils/astFilterProcessing';
6
5
  import { QuillProviderClient } from '../../models/Client';
6
+ import { ReportBuilderState, ReportBuilderTable } from '../../models/ReportBuilder';
7
+ import { UniqueValuesByTable, Table } from '../../models/Tables';
7
8
  /**
8
9
  * This file is a collection of basic UI components that conform to the shape
9
10
  * expected by the Report Builder. Where possible, we use our existing
@@ -104,21 +105,19 @@ export interface TagWrapperProps {
104
105
  export declare const TagWrapper: ({ isCard, isRow, editPopoverKey, keyPrefix, formData, activeEditItem, setEditPopoverKey, setActiveEditItem, setActivePath, setOpenPopover, setIsPending, clearCheckboxes, handleDelete, setCheckboxes, handleReplaceSubtree, FilterPopover, getByKey, EditPopover, Button, SecondaryButton, renderNode, children, }: TagWrapperProps) => import("react/jsx-runtime").JSX.Element;
105
106
  export declare const AddFilterPopover: ({ onSave, Button, renderNode, activeEditItem, }: any) => import("react/jsx-runtime").JSX.Element;
106
107
  export interface FilterPopoverWrapperProps {
107
- schema?: {
108
- columns: ColumnInternal[];
109
- };
108
+ reportBuilderState?: ReportBuilderState;
109
+ schema: Table[];
110
110
  filter: InternalFilter;
111
111
  filterLabel: string;
112
112
  index: number;
113
113
  FilterTagComponent: any;
114
114
  FilterModal: any;
115
- fieldValuesMap: any;
115
+ fieldValuesMap: UniqueValuesByTable;
116
116
  fieldValuesMapIsLoading?: boolean;
117
117
  priorFilters?: FilterTreeNode[];
118
- columns?: ColumnInternal[];
118
+ tables?: ReportBuilderTable[];
119
119
  client?: QuillProviderClient;
120
120
  customFields?: any;
121
- baseAst?: any;
122
121
  endpoint?: string;
123
122
  customOperatorOptions?: any;
124
123
  ButtonComponent: any;
@@ -130,7 +129,7 @@ export interface FilterPopoverWrapperProps {
130
129
  handleFilterSave: (filter: InternalFilter) => void;
131
130
  disabled?: boolean;
132
131
  containerStyle?: any;
133
- dashboardName?: string;
132
+ dashboardName: string;
134
133
  }
135
- export declare const FilterPopoverWrapper: ({ schema, filter, filterLabel, index, FilterTagComponent, FilterModal, fieldValuesMap, fieldValuesMapIsLoading, priorFilters, columns, client, customFields, baseAst, endpoint, customOperatorOptions, ButtonComponent, SecondaryButtonComponent, SelectComponent, TextInputComponent, MultiSelectComponent, handleFilterDelete, handleFilterSave, disabled, containerStyle, dashboardName, }: FilterPopoverWrapperProps) => import("react/jsx-runtime").JSX.Element;
134
+ export declare const FilterPopoverWrapper: ({ reportBuilderState, schema, filter, filterLabel, index, FilterTagComponent, FilterModal, fieldValuesMap, fieldValuesMapIsLoading, priorFilters, tables, client, endpoint, customOperatorOptions, ButtonComponent, SecondaryButtonComponent, SelectComponent, TextInputComponent, MultiSelectComponent, handleFilterDelete, handleFilterSave, disabled, containerStyle, dashboardName, }: FilterPopoverWrapperProps) => import("react/jsx-runtime").JSX.Element;
136
135
  //# sourceMappingURL=ui.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ui.d.ts","sourceRoot":"","sources":["../../../../src/components/ReportBuilder/ui.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ui.d.ts","sourceRoot":"","sources":["../../../../src/components/ReportBuilder/ui.tsx"],"names":[],"mappings":"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"}
@@ -1,10 +1,10 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
- import { forwardRef, useContext, useEffect, useRef, useState, } from 'react';
2
+ import { forwardRef, useContext, useEffect, useMemo, useRef, useState, } from 'react';
3
3
  import { MemoizedCheckbox, LoadingSpinner, MemoizedPopover, } from '../UiComponents';
4
4
  import { TenantContext, ThemeContext } from '../../Context';
5
5
  import { isNodeEmptyCollection, allNumericNodesValidInTree } from './util';
6
- import { buildQueryFromFilters, uniqueValuesToStringMap, } from '../../utils/filterProcessing';
7
- import { getRelevantInfoFromQuery } from '../../utils/tableProcessing';
6
+ import { buildQueryFromFilters } from '../../utils/filterProcessing';
7
+ import { getUniqueStringValuesByTable } from '../../utils/tableProcessing';
8
8
  /**
9
9
  * This file is a collection of basic UI components that conform to the shape
10
10
  * expected by the Report Builder. Where possible, we use our existing
@@ -364,13 +364,27 @@ export const AddFilterPopover = ({ onSave, Button, renderNode, activeEditItem, }
364
364
  justifyContent: 'end',
365
365
  }, children: _jsx(Button, { onClick: handleOnClick, label: 'Add filter' }) })] }));
366
366
  };
367
- export const FilterPopoverWrapper = ({ schema, filter, filterLabel, index, FilterTagComponent, FilterModal, fieldValuesMap, fieldValuesMapIsLoading, priorFilters, columns, client, customFields, baseAst, endpoint, customOperatorOptions, ButtonComponent, SecondaryButtonComponent, SelectComponent, TextInputComponent, MultiSelectComponent, handleFilterDelete, handleFilterSave, disabled, containerStyle, dashboardName, }) => {
367
+ export const FilterPopoverWrapper = ({ reportBuilderState, schema, filter, filterLabel, index, FilterTagComponent, FilterModal, fieldValuesMap, fieldValuesMapIsLoading, priorFilters, tables, client, endpoint, customOperatorOptions, ButtonComponent, SecondaryButtonComponent, SelectComponent, TextInputComponent, MultiSelectComponent, handleFilterDelete, handleFilterSave, disabled, containerStyle, dashboardName, }) => {
368
368
  const { tenants } = useContext(TenantContext);
369
369
  const [isOpen, setIsOpen] = useState(false);
370
370
  const [uniqueValues, setUniqueValues] = useState(undefined);
371
371
  const [uniqueValuesIsLoading, setUniqueValuesIsLoading] = useState(false);
372
372
  // Use a ref to store the previous value of priorFilters
373
373
  const prevFiltersRef = useRef('');
374
+ const columnInternals = useMemo(() => {
375
+ if (!tables) {
376
+ return null;
377
+ }
378
+ const relevantColumns = tables.flatMap((table) => {
379
+ const schemaTable = schema.find((s) => s.name === table.name);
380
+ const columns = schemaTable ? schemaTable.columns : [];
381
+ return columns.map((column) => ({
382
+ ...column,
383
+ table: table.name,
384
+ }));
385
+ });
386
+ return relevantColumns;
387
+ }, [schema, tables]);
374
388
  useEffect(() => {
375
389
  const currentFiltersString = JSON.stringify(priorFilters);
376
390
  if (currentFiltersString !== prevFiltersRef.current) {
@@ -382,17 +396,25 @@ export const FilterPopoverWrapper = ({ schema, filter, filterLabel, index, Filte
382
396
  }, [priorFilters]);
383
397
  // This function retrieves the appropriate unique values given a set of filters
384
398
  async function getFieldValuesMapByFilters(filters) {
385
- if (!columns || !client || !endpoint || !baseAst) {
399
+ if (!columnInternals ||
400
+ !tables ||
401
+ !client ||
402
+ !endpoint ||
403
+ !reportBuilderState) {
386
404
  return;
387
405
  }
388
406
  else {
389
407
  setUniqueValuesIsLoading(true);
390
- const { query, success, error } = await buildQueryFromFilters(baseAst, filters, endpoint, client);
408
+ const { query, success, error } = await buildQueryFromFilters(reportBuilderState, filters, endpoint, client);
391
409
  if (success && query) {
392
- const { uniqueStrings } = await getRelevantInfoFromQuery(columns, client, tenants, query, customFields, dashboardName);
393
- const fieldValues = uniqueStrings && Object.keys(uniqueStrings).length !== 0
394
- ? uniqueValuesToStringMap(uniqueStrings)
395
- : fieldValuesMap; // Fallback in case Promise comes up empty
410
+ const uniqueStrings = await getUniqueStringValuesByTable({
411
+ tables: tables.map((table) => table.name),
412
+ columns: columnInternals,
413
+ client,
414
+ tenants,
415
+ dashboardName,
416
+ });
417
+ const fieldValues = uniqueStrings ? uniqueStrings : fieldValuesMap; // Fallback in case Promise comes up empty
396
418
  setUniqueValues(fieldValues);
397
419
  }
398
420
  else if (error) {
@@ -404,7 +426,7 @@ export const FilterPopoverWrapper = ({ schema, filter, filterLabel, index, Filte
404
426
  function handleClickDelete() {
405
427
  handleFilterDelete(index);
406
428
  }
407
- return (_jsx("div", { style: containerStyle, children: _jsx(FilterTagComponent, { isOpen: isOpen, popoverTitle: "Edit Filter", filterLabel: filterLabel, onClickDelete: handleClickDelete, disabled: disabled, setIsOpen: setIsOpen, popoverChildren: _jsx(FilterModal, { schema: schema, filter: filter, fieldValuesMap: uniqueValues ?? fieldValuesMap, fieldValuesMapIsLoading: fieldValuesMapIsLoading && uniqueValuesIsLoading, customOperatorOptions: customOperatorOptions, onSubmitFilter: (filter) => {
429
+ return (_jsx("div", { style: containerStyle, children: _jsx(FilterTagComponent, { isOpen: isOpen, popoverTitle: "Edit Filter", filterLabel: filterLabel, onClickDelete: handleClickDelete, disabled: disabled, setIsOpen: setIsOpen, popoverChildren: _jsx(FilterModal, { schema: schema, tables: tables?.map((table) => table.name), filter: filter, fieldValuesMap: uniqueValues ?? fieldValuesMap, fieldValuesMapIsLoading: fieldValuesMapIsLoading && uniqueValuesIsLoading, customOperatorOptions: customOperatorOptions, hideTableName: tables?.length === 1, onSubmitFilter: (filter) => {
408
430
  handleFilterSave(filter);
409
431
  setIsOpen(false);
410
432
  }, onDeleteFilter: handleClickDelete, ButtonComponent: ButtonComponent, SelectComponent: SelectComponent, TextInputComponent: TextInputComponent, SecondaryButtonComponent: SecondaryButtonComponent ?? undefined, MultiSelectComponent: MultiSelectComponent }) }) }));
@@ -1,3 +1,4 @@
1
+ import { UniqueValuesByColumn } from '../../models/Tables';
1
2
  /**
2
3
  * A node that is "in" or "not in" where none of the variants are selected.
3
4
  */
@@ -69,11 +70,7 @@ export declare const getDateFilterInfo: (node: any) => {
69
70
  intervalType: any;
70
71
  intervalPaths: any;
71
72
  };
72
- export declare function removeNonSelectedTableReferences(ast: any, table: string, columns: string[], uniqueValues: {
73
- [column: string]: {
74
- [value: string]: boolean;
75
- };
76
- } | null): any;
73
+ export declare function removeNonSelectedTableReferences(ast: any, table: string, columns: string[], uniqueValues: UniqueValuesByColumn | null): any;
77
74
  export declare function removeTableNameAlias(ast: any, schema: any): any;
78
75
  export declare function allNumericNodesValidInTree(node: any): boolean;
79
76
  export declare function isIdColumn(columnName?: string): boolean | "" | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../../../src/components/ReportBuilder/util.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../../../src/components/ReportBuilder/util.ts"],"names":[],"mappings":"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"}
@@ -648,7 +648,7 @@ function removeNonSelectedTableFilters(node, table, columns, uniqueValues) {
648
648
  const field = getFieldFromExpression(value);
649
649
  const check = field &&
650
650
  uniqueValues[referencedColumn] &&
651
- Object.keys(uniqueValues[referencedColumn]).includes(field);
651
+ uniqueValues[referencedColumn].includes(field);
652
652
  return check;
653
653
  });
654
654
  if (!node.right.value || !node.right.value.length) {