@quillsql/react 2.11.15 → 2.11.17

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 (209) hide show
  1. package/dist/cjs/Chart.d.ts +117 -42
  2. package/dist/cjs/Chart.d.ts.map +1 -1
  3. package/dist/cjs/Chart.js +44 -18
  4. package/dist/cjs/ChartBuilder.d.ts +195 -28
  5. package/dist/cjs/ChartBuilder.d.ts.map +1 -1
  6. package/dist/cjs/ChartBuilder.js +124 -63
  7. package/dist/cjs/ChartEditor.d.ts +114 -18
  8. package/dist/cjs/ChartEditor.d.ts.map +1 -1
  9. package/dist/cjs/ChartEditor.js +47 -15
  10. package/dist/cjs/Dashboard.d.ts +148 -90
  11. package/dist/cjs/Dashboard.d.ts.map +1 -1
  12. package/dist/cjs/Dashboard.js +46 -152
  13. package/dist/cjs/DateRangePicker/QuillDateRangePicker.d.ts +21 -1
  14. package/dist/cjs/DateRangePicker/QuillDateRangePicker.d.ts.map +1 -1
  15. package/dist/cjs/DateRangePicker/QuillDateRangePicker.js +5 -2
  16. package/dist/cjs/DateRangePicker/dateRangePickerUtils.js +1 -1
  17. package/dist/cjs/QuillProvider.d.ts +105 -2
  18. package/dist/cjs/QuillProvider.d.ts.map +1 -1
  19. package/dist/cjs/QuillProvider.js +59 -0
  20. package/dist/cjs/ReportBuilder.d.ts +188 -34
  21. package/dist/cjs/ReportBuilder.d.ts.map +1 -1
  22. package/dist/cjs/ReportBuilder.js +551 -426
  23. package/dist/cjs/SQLEditor.d.ts +158 -29
  24. package/dist/cjs/SQLEditor.d.ts.map +1 -1
  25. package/dist/cjs/SQLEditor.js +52 -32
  26. package/dist/cjs/Table.d.ts +119 -15
  27. package/dist/cjs/Table.d.ts.map +1 -1
  28. package/dist/cjs/Table.js +37 -6
  29. package/dist/cjs/TableChart.d.ts.map +1 -1
  30. package/dist/cjs/TableChart.js +0 -194
  31. package/dist/cjs/{BarList.d.ts → components/Chart/BarList.d.ts} +1 -1
  32. package/dist/cjs/components/Chart/BarList.d.ts.map +1 -0
  33. package/dist/cjs/{BarList.js → components/Chart/BarList.js} +1 -1
  34. package/dist/cjs/components/Chart/LineChart.d.ts +2 -3
  35. package/dist/cjs/components/Chart/LineChart.d.ts.map +1 -1
  36. package/dist/cjs/components/Chart/LineChart.js +3 -3
  37. package/dist/cjs/components/Chart/PieChart.d.ts.map +1 -0
  38. package/dist/cjs/{PieChart.js → components/Chart/PieChart.js} +1 -1
  39. package/dist/cjs/components/Dashboard/ChartComponent.d.ts +2 -1
  40. package/dist/cjs/components/Dashboard/ChartComponent.d.ts.map +1 -1
  41. package/dist/cjs/components/Dashboard/ChartComponent.js +6 -7
  42. package/dist/cjs/components/Dashboard/DashboardFilter.d.ts +22 -0
  43. package/dist/cjs/components/Dashboard/DashboardFilter.d.ts.map +1 -0
  44. package/dist/cjs/components/Dashboard/DashboardFilter.js +75 -0
  45. package/dist/cjs/components/Dashboard/DataLoader.d.ts +1 -1
  46. package/dist/cjs/components/Dashboard/DataLoader.d.ts.map +1 -1
  47. package/dist/cjs/components/Dashboard/DataLoader.js +1 -1
  48. package/dist/cjs/components/Dashboard/MetricComponent.d.ts +2 -12
  49. package/dist/cjs/components/Dashboard/MetricComponent.d.ts.map +1 -1
  50. package/dist/cjs/components/Dashboard/MetricComponent.js +39 -17
  51. package/dist/cjs/components/Dashboard/TableComponent.d.ts +2 -1
  52. package/dist/cjs/components/Dashboard/TableComponent.d.ts.map +1 -1
  53. package/dist/cjs/components/Dashboard/TableComponent.js +6 -9
  54. package/dist/cjs/components/QuillSelect.d.ts +4 -1
  55. package/dist/cjs/components/QuillSelect.d.ts.map +1 -1
  56. package/dist/cjs/components/QuillSelect.js +13 -8
  57. package/dist/cjs/components/QuillTable.d.ts +16 -2
  58. package/dist/cjs/components/QuillTable.d.ts.map +1 -1
  59. package/dist/cjs/components/QuillTable.js +4 -4
  60. package/dist/cjs/components/ReportBuilder/AddColumnPopover.d.ts +30 -1
  61. package/dist/cjs/components/ReportBuilder/AddColumnPopover.d.ts.map +1 -1
  62. package/dist/cjs/components/ReportBuilder/AddColumnPopover.js +33 -14
  63. package/dist/cjs/components/ReportBuilder/AddLimitPopover.d.ts +25 -2
  64. package/dist/cjs/components/ReportBuilder/AddLimitPopover.d.ts.map +1 -1
  65. package/dist/cjs/components/ReportBuilder/AddLimitPopover.js +19 -19
  66. package/dist/cjs/components/ReportBuilder/AddSortPopover.d.ts +22 -2
  67. package/dist/cjs/components/ReportBuilder/AddSortPopover.d.ts.map +1 -1
  68. package/dist/cjs/components/ReportBuilder/AddSortPopover.js +18 -20
  69. package/dist/cjs/components/ReportBuilder/bigDateMap.js +1 -1
  70. package/dist/cjs/components/ReportBuilder/convert.d.ts +2 -1
  71. package/dist/cjs/components/ReportBuilder/convert.d.ts.map +1 -1
  72. package/dist/cjs/components/ReportBuilder/convert.js +40 -20
  73. package/dist/cjs/components/ReportBuilder/pivot.d.ts +2 -1
  74. package/dist/cjs/components/ReportBuilder/pivot.d.ts.map +1 -1
  75. package/dist/cjs/components/ReportBuilder/ui.d.ts +83 -19
  76. package/dist/cjs/components/ReportBuilder/ui.d.ts.map +1 -1
  77. package/dist/cjs/components/ReportBuilder/ui.js +68 -121
  78. package/dist/cjs/components/ReportBuilder/util.d.ts +3 -1
  79. package/dist/cjs/components/ReportBuilder/util.d.ts.map +1 -1
  80. package/dist/cjs/components/ReportBuilder/util.js +34 -8
  81. package/dist/cjs/components/UiComponents.d.ts +98 -97
  82. package/dist/cjs/components/UiComponents.d.ts.map +1 -1
  83. package/dist/cjs/components/UiComponents.js +132 -112
  84. package/dist/cjs/hooks/index.d.ts +1 -0
  85. package/dist/cjs/hooks/index.d.ts.map +1 -1
  86. package/dist/cjs/hooks/index.js +3 -1
  87. package/dist/cjs/hooks/useTheme.d.ts +7 -0
  88. package/dist/cjs/hooks/useTheme.d.ts.map +1 -0
  89. package/dist/cjs/hooks/useTheme.js +12 -0
  90. package/dist/cjs/index.d.ts +10 -2
  91. package/dist/cjs/index.d.ts.map +1 -1
  92. package/dist/cjs/internals/ReportBuilder/PivotList.d.ts.map +1 -1
  93. package/dist/cjs/internals/ReportBuilder/PivotList.js +10 -10
  94. package/dist/cjs/internals/ReportBuilder/PivotModal.d.ts +29 -14
  95. package/dist/cjs/internals/ReportBuilder/PivotModal.d.ts.map +1 -1
  96. package/dist/cjs/internals/ReportBuilder/PivotModal.js +73 -49
  97. package/dist/cjs/utils/dataFetcher.d.ts.map +1 -1
  98. package/dist/cjs/utils/dataFetcher.js +2 -0
  99. package/dist/cjs/utils/width.d.ts +12 -0
  100. package/dist/cjs/utils/width.d.ts.map +1 -0
  101. package/dist/cjs/utils/width.js +25 -0
  102. package/dist/esm/Chart.d.ts +117 -42
  103. package/dist/esm/Chart.d.ts.map +1 -1
  104. package/dist/esm/Chart.js +45 -19
  105. package/dist/esm/ChartBuilder.d.ts +195 -28
  106. package/dist/esm/ChartBuilder.d.ts.map +1 -1
  107. package/dist/esm/ChartBuilder.js +124 -63
  108. package/dist/esm/ChartEditor.d.ts +114 -18
  109. package/dist/esm/ChartEditor.d.ts.map +1 -1
  110. package/dist/esm/ChartEditor.js +51 -19
  111. package/dist/esm/Dashboard.d.ts +148 -90
  112. package/dist/esm/Dashboard.d.ts.map +1 -1
  113. package/dist/esm/Dashboard.js +49 -153
  114. package/dist/esm/DateRangePicker/QuillDateRangePicker.d.ts +21 -1
  115. package/dist/esm/DateRangePicker/QuillDateRangePicker.d.ts.map +1 -1
  116. package/dist/esm/DateRangePicker/QuillDateRangePicker.js +6 -3
  117. package/dist/esm/DateRangePicker/dateRangePickerUtils.js +1 -1
  118. package/dist/esm/QuillProvider.d.ts +105 -2
  119. package/dist/esm/QuillProvider.d.ts.map +1 -1
  120. package/dist/esm/QuillProvider.js +59 -0
  121. package/dist/esm/ReportBuilder.d.ts +188 -34
  122. package/dist/esm/ReportBuilder.d.ts.map +1 -1
  123. package/dist/esm/ReportBuilder.js +553 -428
  124. package/dist/esm/SQLEditor.d.ts +158 -29
  125. package/dist/esm/SQLEditor.d.ts.map +1 -1
  126. package/dist/esm/SQLEditor.js +53 -33
  127. package/dist/esm/Table.d.ts +119 -15
  128. package/dist/esm/Table.d.ts.map +1 -1
  129. package/dist/esm/Table.js +38 -7
  130. package/dist/esm/TableChart.d.ts.map +1 -1
  131. package/dist/esm/TableChart.js +0 -194
  132. package/dist/esm/{BarList.d.ts → components/Chart/BarList.d.ts} +1 -1
  133. package/dist/esm/components/Chart/BarList.d.ts.map +1 -0
  134. package/dist/esm/{BarList.js → components/Chart/BarList.js} +1 -1
  135. package/dist/esm/components/Chart/LineChart.d.ts +2 -3
  136. package/dist/esm/components/Chart/LineChart.d.ts.map +1 -1
  137. package/dist/esm/components/Chart/LineChart.js +3 -3
  138. package/dist/esm/components/Chart/PieChart.d.ts.map +1 -0
  139. package/dist/esm/{PieChart.js → components/Chart/PieChart.js} +1 -1
  140. package/dist/esm/components/Dashboard/ChartComponent.d.ts +2 -1
  141. package/dist/esm/components/Dashboard/ChartComponent.d.ts.map +1 -1
  142. package/dist/esm/components/Dashboard/ChartComponent.js +5 -6
  143. package/dist/esm/components/Dashboard/DashboardFilter.d.ts +22 -0
  144. package/dist/esm/components/Dashboard/DashboardFilter.d.ts.map +1 -0
  145. package/dist/esm/components/Dashboard/DashboardFilter.js +71 -0
  146. package/dist/esm/components/Dashboard/DataLoader.d.ts +1 -1
  147. package/dist/esm/components/Dashboard/DataLoader.d.ts.map +1 -1
  148. package/dist/esm/components/Dashboard/DataLoader.js +1 -1
  149. package/dist/esm/components/Dashboard/MetricComponent.d.ts +2 -12
  150. package/dist/esm/components/Dashboard/MetricComponent.d.ts.map +1 -1
  151. package/dist/esm/components/Dashboard/MetricComponent.js +39 -17
  152. package/dist/esm/components/Dashboard/TableComponent.d.ts +2 -1
  153. package/dist/esm/components/Dashboard/TableComponent.d.ts.map +1 -1
  154. package/dist/esm/components/Dashboard/TableComponent.js +6 -9
  155. package/dist/esm/components/QuillSelect.d.ts +4 -1
  156. package/dist/esm/components/QuillSelect.d.ts.map +1 -1
  157. package/dist/esm/components/QuillSelect.js +14 -9
  158. package/dist/esm/components/QuillTable.d.ts +16 -2
  159. package/dist/esm/components/QuillTable.d.ts.map +1 -1
  160. package/dist/esm/components/QuillTable.js +4 -4
  161. package/dist/esm/components/ReportBuilder/AddColumnPopover.d.ts +30 -1
  162. package/dist/esm/components/ReportBuilder/AddColumnPopover.d.ts.map +1 -1
  163. package/dist/esm/components/ReportBuilder/AddColumnPopover.js +34 -15
  164. package/dist/esm/components/ReportBuilder/AddLimitPopover.d.ts +25 -2
  165. package/dist/esm/components/ReportBuilder/AddLimitPopover.d.ts.map +1 -1
  166. package/dist/esm/components/ReportBuilder/AddLimitPopover.js +20 -20
  167. package/dist/esm/components/ReportBuilder/AddSortPopover.d.ts +22 -2
  168. package/dist/esm/components/ReportBuilder/AddSortPopover.d.ts.map +1 -1
  169. package/dist/esm/components/ReportBuilder/AddSortPopover.js +20 -22
  170. package/dist/esm/components/ReportBuilder/bigDateMap.js +1 -1
  171. package/dist/esm/components/ReportBuilder/convert.d.ts +2 -1
  172. package/dist/esm/components/ReportBuilder/convert.d.ts.map +1 -1
  173. package/dist/esm/components/ReportBuilder/convert.js +33 -13
  174. package/dist/esm/components/ReportBuilder/pivot.d.ts +2 -1
  175. package/dist/esm/components/ReportBuilder/pivot.d.ts.map +1 -1
  176. package/dist/esm/components/ReportBuilder/ui.d.ts +83 -19
  177. package/dist/esm/components/ReportBuilder/ui.d.ts.map +1 -1
  178. package/dist/esm/components/ReportBuilder/ui.js +67 -119
  179. package/dist/esm/components/ReportBuilder/util.d.ts +3 -1
  180. package/dist/esm/components/ReportBuilder/util.d.ts.map +1 -1
  181. package/dist/esm/components/ReportBuilder/util.js +31 -7
  182. package/dist/esm/components/UiComponents.d.ts +98 -97
  183. package/dist/esm/components/UiComponents.d.ts.map +1 -1
  184. package/dist/esm/components/UiComponents.js +125 -110
  185. package/dist/esm/hooks/index.d.ts +1 -0
  186. package/dist/esm/hooks/index.d.ts.map +1 -1
  187. package/dist/esm/hooks/index.js +1 -0
  188. package/dist/esm/hooks/useTheme.d.ts +7 -0
  189. package/dist/esm/hooks/useTheme.d.ts.map +1 -0
  190. package/dist/esm/hooks/useTheme.js +10 -0
  191. package/dist/esm/index.d.ts +10 -2
  192. package/dist/esm/index.d.ts.map +1 -1
  193. package/dist/esm/internals/ReportBuilder/PivotList.d.ts.map +1 -1
  194. package/dist/esm/internals/ReportBuilder/PivotList.js +10 -10
  195. package/dist/esm/internals/ReportBuilder/PivotModal.d.ts +29 -14
  196. package/dist/esm/internals/ReportBuilder/PivotModal.d.ts.map +1 -1
  197. package/dist/esm/internals/ReportBuilder/PivotModal.js +73 -49
  198. package/dist/esm/utils/dataFetcher.d.ts.map +1 -1
  199. package/dist/esm/utils/dataFetcher.js +2 -0
  200. package/dist/esm/utils/width.d.ts +12 -0
  201. package/dist/esm/utils/width.d.ts.map +1 -0
  202. package/dist/esm/utils/width.js +21 -0
  203. package/package.json +1 -1
  204. package/dist/cjs/BarList.d.ts.map +0 -1
  205. package/dist/cjs/PieChart.d.ts.map +0 -1
  206. package/dist/esm/BarList.d.ts.map +0 -1
  207. package/dist/esm/PieChart.d.ts.map +0 -1
  208. /package/dist/cjs/{PieChart.d.ts → components/Chart/PieChart.d.ts} +0 -0
  209. /package/dist/esm/{PieChart.d.ts → components/Chart/PieChart.d.ts} +0 -0
@@ -1,50 +1,180 @@
1
- import React from 'react';
2
- import { ModalComponentProps, TableComponentProps } from './components/UiComponents';
1
+ import React, { ReactNode } from 'react';
2
+ import { DashboardItem } from './Dashboard';
3
3
  export declare function convertPostgresColumn(column: any): {
4
4
  label: any;
5
5
  field: any;
6
6
  format: string;
7
7
  fieldType: string;
8
8
  };
9
- interface ButtonComponentProps {
10
- onClick: () => void;
11
- label: string;
12
- }
13
- interface SQLEditorProps {
14
- containerStyle: React.CSSProperties;
15
- ButtonComponent?: (props: ButtonComponentProps) => JSX.Element;
16
- SecondaryButtonComponent?: (props: ButtonComponentProps) => JSX.Element;
17
- TextInputComponent?: (props: TextInputComponentProps) => JSX.Element;
18
- TableComponent?: (props: TableComponentProps) => JSX.Element;
9
+ /**
10
+ * Props for the Quill SQLEditor component.
11
+ */
12
+ export interface SQLEditorProps {
13
+ /**
14
+ * A primary button component.
15
+ */
16
+ ButtonComponent?: (props: {
17
+ onClick: () => void;
18
+ label: string;
19
+ }) => JSX.Element;
20
+ /**
21
+ * A secondary button component.
22
+ */
23
+ SecondaryButtonComponent?: (props: {
24
+ onClick: () => void;
25
+ label: string;
26
+ }) => JSX.Element;
27
+ /**
28
+ * A input element for getting text from the user.
29
+ */
30
+ TextInputComponent?: (props: {
31
+ id: string;
32
+ width: number;
33
+ value: string;
34
+ placeholder?: string;
35
+ onChange: (event: React.ChangeEvent<HTMLInputElement>) => void;
36
+ }) => JSX.Element;
37
+ /**
38
+ * A table component to show the results of the SQL query.
39
+ */
40
+ TableComponent?: (props: {
41
+ rows: {
42
+ [key: string]: any;
43
+ }[];
44
+ columns: {
45
+ field: string;
46
+ label: string;
47
+ }[];
48
+ isLoading?: boolean;
49
+ }) => JSX.Element;
50
+ /**
51
+ * A component to show while the query results are loading.
52
+ */
19
53
  LoadingComponent?: () => JSX.Element;
20
- ModalComponent?: (_props: ModalComponentProps) => JSX.Element;
54
+ /**
55
+ * A modal component to use to open the add to dashboard dialog.
56
+ */
57
+ ModalComponent?: (props: {
58
+ isOpen: boolean;
59
+ setIsOpen: (isOpen: boolean) => void;
60
+ title?: string;
61
+ children: ReactNode;
62
+ width?: number;
63
+ height?: number;
64
+ }) => JSX.Element;
65
+ /**
66
+ * A callback that is fired when the query changes.
67
+ */
21
68
  onChangeQuery?: (query: string) => void;
69
+ /**
70
+ * A callback that is fired when the data changes.
71
+ */
22
72
  onChangeData?: (data: object[]) => void;
23
- onChangeColumns?: (columns: object[]) => void;
73
+ /**
74
+ * A callback that is fired when the data fields change.
75
+ */
24
76
  onChangeFields?: (fields: object[]) => void;
25
- defaultQuery?: string;
26
- chartBuilderEnabled?: boolean;
77
+ /**
78
+ * A callback that is fired when the data columns change.
79
+ */
80
+ onChangeColumns?: (columns: object[]) => void;
81
+ /**
82
+ * A callback that is fired when a dashboard item has been added to a dashboard.
83
+ */
84
+ onAddToDashboardComplete?: () => void;
85
+ /**
86
+ * Whether the chart builder is in horizontal view mode.
87
+ *
88
+ * Horizontal view mode is where the chart and table are displayed on the left
89
+ * and the editing form is displayed on the right, rather than being stacked
90
+ * vertically.
91
+ */
92
+ isChartBuilderHorizontalView?: boolean;
93
+ /**
94
+ * A callback that is fired when the data columns change.
95
+ */
96
+ isChartBuilderEnabled?: boolean;
97
+ /**
98
+ * Whether the "new query" button is enabled.
99
+ */
100
+ isNewQueryEnabled?: boolean;
101
+ /**
102
+ * Whether the SQLEditor is in edit mode.
103
+ */
104
+ isEditMode?: boolean;
105
+ /**
106
+ * Whether to show table format options.
107
+ */
27
108
  showTableFormatOptions?: boolean;
109
+ /**
110
+ * Whether to show date field options.
111
+ */
28
112
  showDateFieldOptions?: boolean;
113
+ /**
114
+ * Whether to show access control options.
115
+ */
29
116
  showAccessControlOptions?: boolean;
117
+ /**
118
+ * A dashboard item.
119
+ */
120
+ dashboardItem?: DashboardItem | any;
121
+ /**
122
+ * The default query to use as a placeholder.
123
+ */
124
+ defaultQuery?: string;
125
+ /**
126
+ * The default dashboard to dashboard items to.
127
+ */
30
128
  destinationDashboard?: string;
31
- newQueryEnabled?: boolean;
32
- isEditMode?: boolean;
33
- dashboardItem?: any;
129
+ /**
130
+ * The title of the ChartBuilder dialog.
131
+ */
34
132
  chartBuilderTitle?: string;
133
+ /**
134
+ * The label of the button to open the ChartBuilder dialog.
135
+ */
35
136
  chartBuilderButtonLabel?: string;
137
+ /**
138
+ * The label of the button to add the current query to a dashboard.
139
+ *
140
+ * @default "Add to dashboard"
141
+ */
36
142
  addToDashboardButtonLabel?: string;
37
- onAddToDashboardComplete?: () => void;
143
+ /**
144
+ * The name of the current organization.
145
+ */
38
146
  organizationName?: string;
39
- chartBuilderHorizontalView?: boolean;
40
- }
41
- interface TextInputComponentProps {
42
- onChange: (e: any) => void;
43
- value: string;
44
- id: string;
45
- placeholder?: string;
147
+ /**
148
+ * Styles the top-level container of the SQLEditor.
149
+ */
150
+ containerStyle?: React.CSSProperties;
46
151
  }
47
- export default function QueryEditor({ containerStyle, ButtonComponent, SecondaryButtonComponent, TextInputComponent, TableComponent, newQueryEnabled, LoadingComponent, ModalComponent, defaultQuery, onChangeQuery, onChangeData, onChangeColumns, onChangeFields, isEditMode, chartBuilderEnabled, showTableFormatOptions, showDateFieldOptions, showAccessControlOptions, destinationDashboard, chartBuilderTitle, chartBuilderButtonLabel, onAddToDashboardComplete, addToDashboardButtonLabel, dashboardItem, organizationName, chartBuilderHorizontalView, }: SQLEditorProps): import("react/jsx-runtime").JSX.Element;
152
+ /**
153
+ * ### Quill SQLEditor
154
+ *
155
+ * Allows your users to build and write custom SQL queries and then add those
156
+ * queries into their dashboard as a metric, chart, or table.
157
+ *
158
+ * @example
159
+ * ```js
160
+ * // Usage without custom components
161
+ * <SQLEditor />
162
+ * ```
163
+ *
164
+ * @example
165
+ * ```js
166
+ * // You can also pass your own components and default values.
167
+ * <SQLEditor
168
+ * defaultQuery="SELECT SUM(amount) FROM TRANSACTIONS"
169
+ * ButtonComponen={MyButton}
170
+ * SecondaryButtonComponen={MySecondaryButton}
171
+ * />
172
+ * ```
173
+ *
174
+ * ### SQLEditor API
175
+ * @see https://docs.quillsql.com/components/sql-editor
176
+ */
177
+ export default function SQLEditor({ ButtonComponent, SecondaryButtonComponent, TextInputComponent, TableComponent, isNewQueryEnabled, LoadingComponent, ModalComponent, defaultQuery, onChangeQuery, onChangeData, onChangeColumns, onChangeFields, isEditMode, isChartBuilderEnabled, showTableFormatOptions, showDateFieldOptions, showAccessControlOptions, destinationDashboard, chartBuilderTitle, chartBuilderButtonLabel, onAddToDashboardComplete, addToDashboardButtonLabel, dashboardItem, organizationName, isChartBuilderHorizontalView, containerStyle, }: SQLEditorProps): import("react/jsx-runtime").JSX.Element;
48
178
  export declare const SchemaListComponent: ({ schema, theme, loading, LoadingComponent, width, onClick, }: {
49
179
  schema: any;
50
180
  theme: any;
@@ -53,5 +183,4 @@ export declare const SchemaListComponent: ({ schema, theme, loading, LoadingComp
53
183
  width: any;
54
184
  onClick?: (() => void) | undefined;
55
185
  }) => import("react/jsx-runtime").JSX.Element;
56
- export {};
57
186
  //# sourceMappingURL=SQLEditor.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"SQLEditor.d.ts","sourceRoot":"","sources":["../../src/SQLEditor.tsx"],"names":[],"mappings":"AAEA,OAAO,KAMN,MAAM,OAAO,CAAC;AAQf,OAAO,EAGL,mBAAmB,EACnB,mBAAmB,EAEpB,MAAM,2BAA2B,CAAC;AAInC,wBAAgB,qBAAqB,CAAC,MAAM,KAAA;;;;;EAwE3C;AA2BD,UAAU,oBAAoB;IAC5B,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,UAAU,cAAc;IACtB,cAAc,EAAE,KAAK,CAAC,aAAa,CAAC;IAEpC,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE,oBAAoB,KAAK,GAAG,CAAC,OAAO,CAAC;IAC/D,wBAAwB,CAAC,EAAE,CAAC,KAAK,EAAE,oBAAoB,KAAK,GAAG,CAAC,OAAO,CAAC;IAExE,kBAAkB,CAAC,EAAE,CAAC,KAAK,EAAE,uBAAuB,KAAK,GAAG,CAAC,OAAO,CAAC;IACrE,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,mBAAmB,KAAK,GAAG,CAAC,OAAO,CAAC;IAC7D,gBAAgB,CAAC,EAAE,MAAM,GAAG,CAAC,OAAO,CAAC;IACrC,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,mBAAmB,KAAK,GAAG,CAAC,OAAO,CAAC;IAC9D,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IACxC,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IAC9C,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IAC5C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,wBAAwB,CAAC,EAAE,OAAO,CAAC;IACnC,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,aAAa,CAAC,EAAE,GAAG,CAAC;IACpB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,yBAAyB,CAAC,EAAE,MAAM,CAAC;IACnC,wBAAwB,CAAC,EAAE,MAAM,IAAI,CAAC;IACtC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,0BAA0B,CAAC,EAAE,OAAO,CAAC;CACtC;AAQD,UAAU,uBAAuB;IAC/B,QAAQ,EAAE,CAAC,CAAC,EAAE,GAAG,KAAK,IAAI,CAAC;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAuCD,MAAM,CAAC,OAAO,UAAU,WAAW,CAAC,EAClC,cAAoC,EACpC,eAAgC,EAChC,wBAAkD,EAClD,kBAAmC,EACnC,cAA2B,EAC3B,eAAuB,EACvB,gBAAgB,EAChB,cAAc,EACd,YAAY,EACZ,aAAa,EACb,YAAY,EACZ,eAAe,EACf,cAAc,EACd,UAAkB,EAClB,mBAA2B,EAC3B,sBAA8B,EAC9B,oBAA4B,EAC5B,wBAAgC,EAChC,oBAAoB,EACpB,iBAAiB,EACjB,uBAAuB,EACvB,wBAAwB,EACxB,yBAA8C,EAC9C,aAAyB,EACzB,gBAA4B,EAC5B,0BAAkC,GACnC,EAAE,cAAc,2CA+WhB;AA6JD,eAAO,MAAM,mBAAmB;;;;;;;6CAuG/B,CAAC"}
1
+ {"version":3,"file":"SQLEditor.d.ts","sourceRoot":"","sources":["../../src/SQLEditor.tsx"],"names":[],"mappings":"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"}
@@ -1,15 +1,15 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ /* eslint-disable no-unused-vars */
2
3
  // @ts-nocheck
3
4
  // eslint-disable-next-line @typescript-eslint/ban-ts-comment
4
- import { useState, useContext, useEffect, } from 'react';
5
+ import { useState, useContext, useEffect, useRef, } from 'react';
5
6
  import MonacoEditor from '@monaco-editor/react';
6
- // import './nightOwlLight.css';
7
7
  import { ClientContext, SchemaContext, ThemeContext } from './Context';
8
- import QuillTable from './components/QuillTable';
9
8
  import { getData, getDataFromCloud } from './utils/dataFetcher';
10
9
  import { ChartBuilderWithModal } from './ChartBuilder';
11
- import { MemoizedButton, MemoizedSecondaryButton, } from './components/UiComponents';
12
- import { QuillTextInput } from './components/ReportBuilder/ui';
10
+ import { MemoizedButton, MemoizedModal, MemoizedSecondaryButton, QuillTableComponent, } from './components/UiComponents';
11
+ import { QuillTextInput } from './components/UiComponents';
12
+ import { updateFirstChildWidth } from './utils/width';
13
13
  export function convertPostgresColumn(column) {
14
14
  let format;
15
15
  let fieldType;
@@ -105,26 +105,32 @@ function setEditorTheme(editor, monaco) {
105
105
  console.log('ERROR: ', e);
106
106
  }
107
107
  }
108
- const QuillButton = ({ onClick, label, theme, secondary, }) => (_jsx("button", { style: {
109
- borderRadius: '6px',
110
- backgroundColor: secondary
111
- ? theme?.secondaryButtonColor || '#F5F5F5'
112
- : theme?.primaryButtonColor,
113
- opacity: 1,
114
- paddingLeft: '16px',
115
- paddingRight: '16px',
116
- // paddingTop: '10px',
117
- // paddingBottom: '10px',
118
- fontSize: '14px',
119
- fontWeight: 600,
120
- color: secondary ? theme?.primaryTextColor : '#FFFFFF',
121
- cursor: 'pointer',
122
- outline: 'none',
123
- border: 'none',
124
- fontFamily: theme?.fontFamily,
125
- height: 38,
126
- }, onClick: onClick, children: label }));
127
- export default function QueryEditor({ containerStyle = { height: '100vh' }, ButtonComponent = MemoizedButton, SecondaryButtonComponent = MemoizedSecondaryButton, TextInputComponent = QuillTextInput, TableComponent = QuillTable, newQueryEnabled = false, LoadingComponent, ModalComponent, defaultQuery, onChangeQuery, onChangeData, onChangeColumns, onChangeFields, isEditMode = false, chartBuilderEnabled = false, showTableFormatOptions = false, showDateFieldOptions = false, showAccessControlOptions = false, destinationDashboard, chartBuilderTitle, chartBuilderButtonLabel, onAddToDashboardComplete, addToDashboardButtonLabel = 'Add to dashboard', dashboardItem = undefined, organizationName = undefined, chartBuilderHorizontalView = false, }) {
108
+ /**
109
+ * ### Quill SQLEditor
110
+ *
111
+ * Allows your users to build and write custom SQL queries and then add those
112
+ * queries into their dashboard as a metric, chart, or table.
113
+ *
114
+ * @example
115
+ * ```js
116
+ * // Usage without custom components
117
+ * <SQLEditor />
118
+ * ```
119
+ *
120
+ * @example
121
+ * ```js
122
+ * // You can also pass your own components and default values.
123
+ * <SQLEditor
124
+ * defaultQuery="SELECT SUM(amount) FROM TRANSACTIONS"
125
+ * ButtonComponen={MyButton}
126
+ * SecondaryButtonComponen={MySecondaryButton}
127
+ * />
128
+ * ```
129
+ *
130
+ * ### SQLEditor API
131
+ * @see https://docs.quillsql.com/components/sql-editor
132
+ */
133
+ export default function SQLEditor({ ButtonComponent = MemoizedButton, SecondaryButtonComponent = MemoizedSecondaryButton, TextInputComponent = QuillTextInput, TableComponent = QuillTableComponent, isNewQueryEnabled = false, LoadingComponent, ModalComponent = MemoizedModal, defaultQuery, onChangeQuery, onChangeData, onChangeColumns, onChangeFields, isEditMode = false, isChartBuilderEnabled = false, showTableFormatOptions = false, showDateFieldOptions = false, showAccessControlOptions = false, destinationDashboard, chartBuilderTitle, chartBuilderButtonLabel, onAddToDashboardComplete, addToDashboardButtonLabel = 'Add to dashboard', dashboardItem = undefined, organizationName = undefined, isChartBuilderHorizontalView = true, containerStyle = { height: '100vh' }, }) {
128
134
  const [sqlPrompt, setSqlPrompt] = useState('');
129
135
  const [client] = useContext(ClientContext);
130
136
  const [theme] = useContext(ThemeContext);
@@ -139,6 +145,20 @@ export default function QueryEditor({ containerStyle = { height: '100vh' }, Butt
139
145
  const [schemaLoading, setSchemaLoading] = useState(false);
140
146
  const [isChartBuilderOpen, setIsChartBuilderOpen] = useState(false);
141
147
  const [displayTable, setDisplayTable] = useState(false);
148
+ const formRef = useRef(null);
149
+ const [searchBarWidth, setSearchBarWidth] = useState(200);
150
+ useEffect(() => {
151
+ // Since the TextInput component takes a required numeric width parameter,
152
+ // we dynamically calculate the width of this component here.
153
+ function handleResize() {
154
+ updateFirstChildWidth(formRef, setSearchBarWidth, { gap: 12 });
155
+ }
156
+ handleResize();
157
+ window.addEventListener('resize', handleResize);
158
+ return () => {
159
+ window.removeEventListener('resize', handleResize);
160
+ };
161
+ }, []);
142
162
  const getSchema = async (isSubscribed) => {
143
163
  setSchemaLoading(true);
144
164
  const { queryEndpoint, queryHeaders, publicKey } = client;
@@ -269,8 +289,8 @@ export default function QueryEditor({ containerStyle = { height: '100vh' }, Butt
269
289
  onChangeQuery(query);
270
290
  }
271
291
  }, [query]);
272
- return (_jsxs("div", { style: containerStyle, children: [(!chartBuilderHorizontalView ||
273
- (chartBuilderHorizontalView && !isChartBuilderOpen)) && (_jsx("div", { style: {
292
+ return (_jsxs("div", { style: containerStyle, children: [(!isChartBuilderHorizontalView ||
293
+ (isChartBuilderHorizontalView && !isChartBuilderOpen)) && (_jsx("div", { style: {
274
294
  height: '100%',
275
295
  display: 'flex',
276
296
  flexDirection: 'column',
@@ -288,7 +308,7 @@ export default function QueryEditor({ containerStyle = { height: '100vh' }, Butt
288
308
  width: 'calc(100% - 290px)',
289
309
  height: '100%',
290
310
  overflowX: 'hidden',
291
- }, children: [_jsxs("form", { onSubmit: (e) => {
311
+ }, children: [_jsxs("form", { ref: formRef, onSubmit: (e) => {
292
312
  e.preventDefault();
293
313
  handleRunSqlPrompt();
294
314
  }, style: {
@@ -297,7 +317,7 @@ export default function QueryEditor({ containerStyle = { height: '100vh' }, Butt
297
317
  gap: 12,
298
318
  paddingTop: 16,
299
319
  paddingBottom: 16,
300
- }, children: [_jsx(TextInputComponent, { id: "ai-search", value: sqlPrompt, style: { width: '100%', fontSize: 14 }, onChange: (e) => setSqlPrompt(e.target.value), placeholder: "Ask a question..." }), (ButtonComponent && (_jsx(ButtonComponent, { onClick: handleRunSqlPrompt, label: "Ask AI" }))) || (_jsx(QuillButton, { theme: theme, onClick: handleRunSqlPrompt, label: "Ask AI" }))] }), _jsx("div", { style: { height: 'calc(50% - 40px)' }, children: _jsx(SQLEditorComponent, { query: query, setQuery: setQuery, handleRunQuery: handleRunQuery, handleFixWithAI: handleFixWithAI, newQueryEnabled: newQueryEnabled, handleClearQuery: handleClearQuery, theme: theme, defineEditorTheme: defineEditorTheme, setEditorTheme: setEditorTheme, ButtonComponent: ButtonComponent, SecondaryButtonComponent: SecondaryButtonComponent, loading: sqlResponseLoading, LoadingComponent: LoadingComponent }) }), _jsxs("div", { style: {
320
+ }, 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: { height: 'calc(50% - 40px)' }, children: _jsx(SQLEditorComponent, { query: query, setQuery: setQuery, handleRunQuery: handleRunQuery, handleFixWithAI: handleFixWithAI, isNewQueryEnabled: isNewQueryEnabled, handleClearQuery: handleClearQuery, theme: theme, defineEditorTheme: defineEditorTheme, setEditorTheme: setEditorTheme, ButtonComponent: ButtonComponent, SecondaryButtonComponent: SecondaryButtonComponent, loading: sqlResponseLoading, LoadingComponent: LoadingComponent }) }), _jsxs("div", { style: {
301
321
  display: 'flex',
302
322
  flexDirection: 'column',
303
323
  height: 'calc(50% - 108px)',
@@ -322,16 +342,16 @@ export default function QueryEditor({ containerStyle = { height: '100vh' }, Butt
322
342
  borderRadius: 6,
323
343
  padding: 20,
324
344
  width: '100%',
325
- }, children: [errorMessage, (SecondaryButtonComponent && (_jsx(SecondaryButtonComponent, { onClick: handleFixWithAI, label: "Fix with AI" }))) || (_jsx(QuillButton, { secondary: true, onClick: handleFixWithAI, label: "Fix with AI", theme: theme }))] }) })), errorMessage || !displayTable ? null : (_jsx(TableComponent, { rows: rows, columns: columns, containerStyle: { height: 'calc(100%)' }, LoadingComponent: LoadingComponent, loading: sqlQueryLoading }))] }), chartBuilderEnabled && rows.length > 0 && (_jsx("div", { style: {
345
+ }, children: [errorMessage, _jsx(SecondaryButtonComponent, { onClick: handleFixWithAI, label: "Fix with AI" })] }) })), errorMessage || !displayTable ? null : (_jsx(TableComponent, { isLoading: sqlQueryLoading, rows: rows, columns: columns }))] }), isChartBuilderEnabled && rows.length > 0 && (_jsx("div", { style: {
326
346
  display: 'flex',
327
347
  flexDirection: 'row',
328
348
  alignItems: 'center',
329
349
  justifyContent: 'flex-end',
330
350
  width: '100%',
331
351
  height: '70px',
332
- }, children: (ButtonComponent && (_jsx(ButtonComponent, { onClick: () => setIsChartBuilderOpen(true), label: addToDashboardButtonLabel }))) || (_jsx(QuillButton, { onClick: () => setIsChartBuilderOpen(true), label: addToDashboardButtonLabel, theme: theme })) }))] })] }) }) })), _jsx(ChartBuilderWithModal, { rows: rows, columns: columns, fields: fields, query: query, horizontalView: chartBuilderHorizontalView, isEditMode: isEditMode, isOpen: isChartBuilderOpen, setIsOpen: setIsChartBuilderOpen, onAddToDashboardComplete: onAddToDashboardComplete, showTableFormatOptions: showTableFormatOptions, showDateFieldOptions: showDateFieldOptions, showAccessControlOptions: showAccessControlOptions, destinationDashboard: destinationDashboard, title: chartBuilderTitle, button: chartBuilderButtonLabel, buttonLabel: addToDashboardButtonLabel, dashboardItem: dashboardItem, organizationName: organizationName, Modal: ModalComponent, Button: ButtonComponent })] }));
352
+ }, children: _jsx(ButtonComponent, { onClick: () => setIsChartBuilderOpen(true), label: addToDashboardButtonLabel }) }))] })] }) }) })), _jsx(ChartBuilderWithModal, { rows: rows, columns: columns, fields: fields, query: query, horizontalView: isChartBuilderHorizontalView, isEditMode: isEditMode, isOpen: isChartBuilderOpen, setIsOpen: setIsChartBuilderOpen, onAddToDashboardComplete: onAddToDashboardComplete, showTableFormatOptions: showTableFormatOptions, showDateFieldOptions: showDateFieldOptions, showAccessControlOptions: showAccessControlOptions, destinationDashboard: destinationDashboard, title: chartBuilderTitle, button: chartBuilderButtonLabel, buttonLabel: addToDashboardButtonLabel, dashboardItem: dashboardItem, organizationName: organizationName, Modal: ModalComponent, Button: ButtonComponent })] }));
333
353
  }
334
- const SQLEditorComponent = ({ query, setQuery, handleRunQuery, handleFixWithAI, handleClearQuery, defineEditorTheme, setEditorTheme, ButtonComponent, SecondaryButtonComponent, newQueryEnabled, theme, loading, LoadingComponent, }) => {
354
+ const SQLEditorComponent = ({ query, setQuery, handleRunQuery, handleFixWithAI, handleClearQuery, defineEditorTheme, setEditorTheme, ButtonComponent, SecondaryButtonComponent, isNewQueryEnabled, theme, loading, LoadingComponent, }) => {
335
355
  return (_jsxs("div", { style: {
336
356
  background: theme.backgroundColor,
337
357
  // maxHeight: 700,
@@ -366,7 +386,7 @@ const SQLEditorComponent = ({ query, setQuery, handleRunQuery, handleFixWithAI,
366
386
  flexDirection: 'row',
367
387
  alignItems: 'center',
368
388
  height: 70,
369
- }, children: _jsxs("div", { style: { display: 'flex', gap: 12 }, children: [(ButtonComponent && (_jsx(ButtonComponent, { onClick: handleRunQuery, label: "Run query" }))) || (_jsx(QuillButton, { onClick: handleRunQuery, label: "Run query", theme: theme })), newQueryEnabled && (_jsx("div", { children: (SecondaryButtonComponent && (_jsx(SecondaryButtonComponent, { onClick: handleClearQuery, label: "Clear query" }))) || (_jsx(QuillButton, { secondary: true, onClick: handleClearQuery, label: "Clear query", theme: theme })) }))] }) })] }));
389
+ }, children: _jsxs("div", { style: { display: 'flex', gap: 12 }, children: [_jsx(ButtonComponent, { onClick: handleRunQuery, label: "Run query" }), isNewQueryEnabled && (_jsx(SecondaryButtonComponent, { onClick: handleClearQuery, label: "Clear query" }))] }) })] }));
370
390
  };
371
391
  export const SchemaListComponent = ({ schema, theme, loading, LoadingComponent, width, onClick = () => { }, }) => {
372
392
  if (loading) {
@@ -3,25 +3,129 @@ export interface TableColumn {
3
3
  label: string;
4
4
  field: string;
5
5
  }
6
- interface ChartIdTableProps {
7
- chartId: string;
8
- containerStyle?: React.CSSProperties;
6
+ /**
7
+ * Props for the Quill Table component.
8
+ */
9
+ export interface TableProps {
10
+ /**
11
+ * The id of the table to render, if any.
12
+ *
13
+ * When a `chartId` is passed, the table will first fetch the data necessary
14
+ * to render this table, and then it will render the rows and columns that it
15
+ * receives from the server.
16
+ *
17
+ * NOTE: A `chartId` must be passed if `rows` and `columns` are not present.
18
+ */
19
+ chartId?: string;
20
+ /**
21
+ * The rows of the table to show, if any.
22
+ *
23
+ * When `rows` and `columns` are passed, the table will not refetch the given
24
+ * dashboard item and will instead simply render the rows and columns it was
25
+ * given.
26
+ *
27
+ * NOTE: Both `rows` and `columns` must be passed if `chartId` is not present.
28
+ *
29
+ * @example
30
+ * ```js
31
+ * let rows = {[
32
+ * { x: 1, y: 1, z: 0 },
33
+ * { x: 2, y: 2, z: 0 },
34
+ * { x: 3, y: 3, z: 0 },
35
+ * { x: 4, y: 4, z: 0 }
36
+ * ]};
37
+ * let columns = {[
38
+ * { label: "My X-Axis", field: "x" },
39
+ * { label: "My Y-Axis", field: "y" }
40
+ * ]}'
41
+ * ```
42
+ */
43
+ rows: {
44
+ [key: string]: any;
45
+ }[];
46
+ /**
47
+ * The columns of the table to show, if any.
48
+ *
49
+ * When `rows` and `columns` are passed, the table will not refetch the given
50
+ * dashboard item and will instead simply render the rows and columns it was
51
+ * given.
52
+ *
53
+ * NOTE: Both `rows` and `columns` must be passed if `chartId` is not present.
54
+ *
55
+ * @example
56
+ * ```js
57
+ * let rows = {[
58
+ * { x: 1, y: 1, z: 0 },
59
+ * { x: 2, y: 2, z: 0 },
60
+ * { x: 3, y: 3, z: 0 },
61
+ * { x: 4, y: 4, z: 0 }
62
+ * ]};
63
+ * let columns = {[
64
+ * { label: "My X-Axis", field: "x" },
65
+ * { label: "My Y-Axis", field: "y" }
66
+ * ]}'
67
+ * ```
68
+ */
69
+ columns: {
70
+ label: string;
71
+ field: string;
72
+ }[];
73
+ /**
74
+ * The placeholder filename to use when downloading this table as a csv file.
75
+ */
9
76
  csvFilename?: string;
77
+ /**
78
+ * Whether to show the download csv button.
79
+ */
10
80
  showDownloadCSVButton?: boolean;
81
+ /**
82
+ * Whether this table component is loading.
83
+ */
84
+ isLoading?: boolean;
85
+ /**
86
+ * A callback that is fired when the user clicks download csv.
87
+ */
88
+ downloadCSV?: () => void;
89
+ /**
90
+ * A loading component to show when the table is loading.
91
+ */
11
92
  LoadingComponent?: () => JSX.Element;
12
- }
13
- interface DataTableProps {
14
- columns: TableColumn[];
15
- rows: object[];
93
+ /**
94
+ * Styles the top-level container of the Table.
95
+ */
16
96
  containerStyle?: React.CSSProperties;
17
- csvFilename?: string;
18
- showDownloadCSVButton?: boolean;
19
- LoadingComponent?: () => JSX.Element;
20
- loading?: boolean;
21
- height?: string;
22
- downloadCSV?: () => void;
23
97
  }
24
- type TableWrapperProps = ChartIdTableProps | DataTableProps;
25
- declare const Table: (data: TableWrapperProps) => import("react/jsx-runtime").JSX.Element;
98
+ /**
99
+ * ### Quill Table
100
+ *
101
+ * A simple component that displays the given data as a table.
102
+ *
103
+ * @example
104
+ * ```js
105
+ * // Usage with chart id (will auto-fetch data)
106
+ * <Table chartId="12345" />
107
+ * ```
108
+ *
109
+ * @example
110
+ * ```js
111
+ * // Usage with rows and columns (will not auto-fetch data)
112
+ * <Table
113
+ * rows={[
114
+ * { x: 1, y: 1, z: 0 },
115
+ * { x: 2, y: 2, z: 0 },
116
+ * { x: 3, y: 3, z: 0 },
117
+ * { x: 4, y: 4, z: 0 }
118
+ * ]}
119
+ * columns={[
120
+ * { label: "My X-Axis", field: "x" },
121
+ * { label: "My Y-Axis", field: "y" }
122
+ * ]}
123
+ * />
124
+ * ```
125
+ *
126
+ * ### Table API
127
+ * @see https://docs.quillsql.com/components/table
128
+ */
129
+ declare const Table: (props: TableProps) => import("react/jsx-runtime").JSX.Element;
26
130
  export default Table;
27
131
  //# sourceMappingURL=Table.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Table.d.ts","sourceRoot":"","sources":["../../src/Table.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA0C,MAAM,OAAO,CAAC;AAc/D,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAED,UAAU,iBAAiB;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IACrC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,gBAAgB,CAAC,EAAE,MAAM,GAAG,CAAC,OAAO,CAAC;CACtC;AAED,UAAU,cAAc;IACtB,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,cAAc,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IACrC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,gBAAgB,CAAC,EAAE,MAAM,GAAG,CAAC,OAAO,CAAC;IACrC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;CAC1B;AAED,KAAK,iBAAiB,GAAG,iBAAiB,GAAG,cAAc,CAAC;AAE5D,QAAA,MAAM,KAAK,SAAU,iBAAiB,4CAmCrC,CAAC;AAgGF,eAAe,KAAK,CAAC"}
1
+ {"version":3,"file":"Table.d.ts","sourceRoot":"","sources":["../../src/Table.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAgC,MAAM,OAAO,CAAC;AAYrD,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAuBD;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB;;;;;;;;OAQG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACH,IAAI,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE,EAAE,CAAC;IAE/B;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACH,OAAO,EAAE;QACP,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,MAAM,CAAC;KACf,EAAE,CAAC;IAEJ;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;OAEG;IACH,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAEhC;;OAEG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;IAEzB;;OAEG;IACH,gBAAgB,CAAC,EAAE,MAAM,GAAG,CAAC,OAAO,CAAC;IAErC;;OAEG;IACH,cAAc,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;CACtC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,QAAA,MAAM,KAAK,UAAW,UAAU,4CAiC/B,CAAC;AA8FF,eAAe,KAAK,CAAC"}
package/dist/esm/Table.js CHANGED
@@ -1,22 +1,53 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
2
  import { useContext, useEffect } from 'react';
3
- import { ClientContext, DashboardContext, ThemeContext, DashboardFiltersContext, } from './Context';
3
+ import { ClientContext, DashboardContext, DashboardFiltersContext, } from './Context';
4
4
  import { getData } from './utils/dataFetcher';
5
5
  import { mergeComparisonRange } from './utils/merge';
6
6
  import QuillTable from './components/QuillTable';
7
7
  import { useMemoizedRows } from './hooks/useFormat';
8
8
  import { useExport } from './hooks/useExport';
9
- const Table = (data) => {
9
+ /**
10
+ * ### Quill Table
11
+ *
12
+ * A simple component that displays the given data as a table.
13
+ *
14
+ * @example
15
+ * ```js
16
+ * // Usage with chart id (will auto-fetch data)
17
+ * <Table chartId="12345" />
18
+ * ```
19
+ *
20
+ * @example
21
+ * ```js
22
+ * // Usage with rows and columns (will not auto-fetch data)
23
+ * <Table
24
+ * rows={[
25
+ * { x: 1, y: 1, z: 0 },
26
+ * { x: 2, y: 2, z: 0 },
27
+ * { x: 3, y: 3, z: 0 },
28
+ * { x: 4, y: 4, z: 0 }
29
+ * ]}
30
+ * columns={[
31
+ * { label: "My X-Axis", field: "x" },
32
+ * { label: "My Y-Axis", field: "y" }
33
+ * ]}
34
+ * />
35
+ * ```
36
+ *
37
+ * ### Table API
38
+ * @see https://docs.quillsql.com/components/table
39
+ */
40
+ const Table = (props) => {
41
+ let data = props;
10
42
  const { dispatch, dashboard } = useContext(DashboardContext);
11
43
  const { dashboardFilters } = useContext(DashboardFiltersContext);
12
44
  const [client, _] = useContext(ClientContext);
13
- const [theme] = useContext(ThemeContext);
14
45
  if ('rows' in data && 'columns' in data) {
15
- return (_jsx(QuillTable, { showDownloadCSVButton: data.showDownloadCSVButton, downloadFileName: data.csvFilename, columns: data.columns, rows: data.rows, containerStyle: data.containerStyle, LoadingComponent: data.LoadingComponent, loading: data.loading, downloadCSV: data.downloadCSV }));
46
+ return (_jsx(QuillTable, { showDownloadCSVButton: data.showDownloadCSVButton, downloadFileName: data.csvFilename, columns: data.columns, rows: data.rows, containerStyle: data.containerStyle, LoadingComponent: data.LoadingComponent, isLoading: data.isLoading, downloadCSV: data.downloadCSV }));
16
47
  }
17
- return (_jsx(ChartUpdater, { showDownloadCSVButton: data.showDownloadCSVButton, dispatch: dispatch, dashboard: dashboard, chartId: data.chartId, containerStyle: data.containerStyle, dashboardFilters: dashboardFilters, client: client, theme: theme, csvFilename: data.csvFilename, LoadingComponent: data.LoadingComponent }));
48
+ return (_jsx(ChartUpdater, { showDownloadCSVButton: data.showDownloadCSVButton, dispatch: dispatch, dashboard: dashboard, chartId: data.chartId, containerStyle: data.containerStyle, dashboardFilters: dashboardFilters, client: client, csvFilename: data.csvFilename, LoadingComponent: data.LoadingComponent }));
18
49
  };
19
- const ChartUpdater = ({ chartId, containerStyle, dashboard, dispatch, client, dashboardFilters, theme, csvFilename, showDownloadCSVButton = true, LoadingComponent, }) => {
50
+ const ChartUpdater = ({ chartId, containerStyle, dashboard, dispatch, client, dashboardFilters, csvFilename, showDownloadCSVButton = true, LoadingComponent, }) => {
20
51
  const { rows, loading } = useMemoizedRows(chartId);
21
52
  const { downloadCSV } = useExport(chartId);
22
53
  useEffect(() => {
@@ -69,6 +100,6 @@ const ChartUpdater = ({ chartId, containerStyle, dashboard, dispatch, client, da
69
100
  // @ts-ignore
70
101
  columns: dashboard[chartId]?.columns || [],
71
102
  // @ts-ignore
72
- rows: rows || dashboard[chartId]?.rows || [], containerStyle: containerStyle, LoadingComponent: LoadingComponent, loading: loading, downloadCSV: downloadCSV }));
103
+ rows: rows || dashboard[chartId]?.rows || [], containerStyle: containerStyle, LoadingComponent: LoadingComponent, isLoading: loading, downloadCSV: downloadCSV }));
73
104
  };
74
105
  export default Table;
@@ -1 +1 @@
1
- {"version":3,"file":"TableChart.d.ts","sourceRoot":"","sources":["../../src/TableChart.tsx"],"names":[],"mappings":"AAEA,OAAO,KAA4B,MAAM,OAAO,CAAC;AAqEjD,UAAU,UAAU;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,YAAa,SAAQ,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC;IACxE,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,WAAW,EAAE,UAAU,EAAE,CAAC;IAC1B,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,wBAAgB,2BAA2B,CAAC,GAAG,KAAA,UAW9C;AAuED,QAAA,MAAM,UAAU,qFAoQf,CAAC;AAEF,eAAe,UAAU,CAAC"}
1
+ {"version":3,"file":"TableChart.d.ts","sourceRoot":"","sources":["../../src/TableChart.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAkB,MAAM,OAAO,CAAC;AAGvC,UAAU,UAAU;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,YAAa,SAAQ,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC;IACxE,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,WAAW,EAAE,UAAU,EAAE,CAAC;IAC1B,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,wBAAgB,2BAA2B,CAAC,GAAG,KAAA,UAW9C;AAoED,QAAA,MAAM,UAAU,qFAsEf,CAAC;AAEF,eAAe,UAAU,CAAC"}