@quillsql/react 2.13.5 → 2.13.6

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 (129) hide show
  1. package/dist/cjs/Chart.js +1 -1
  2. package/dist/cjs/ChartBuilder.d.ts +1 -1
  3. package/dist/cjs/ChartBuilder.d.ts.map +1 -1
  4. package/dist/cjs/ChartBuilder.js +6 -22
  5. package/dist/cjs/ChartEditor.d.ts +1 -1
  6. package/dist/cjs/ChartEditor.d.ts.map +1 -1
  7. package/dist/cjs/Context.d.ts +21 -6
  8. package/dist/cjs/Context.d.ts.map +1 -1
  9. package/dist/cjs/Context.js +196 -18
  10. package/dist/cjs/Dashboard.js +7 -7
  11. package/dist/cjs/DateRangePicker/QuillDateRangePicker.d.ts.map +1 -1
  12. package/dist/cjs/DateRangePicker/QuillDateRangePicker.js +7 -7
  13. package/dist/cjs/DateRangePicker/dateRangePickerUtils.d.ts +0 -1
  14. package/dist/cjs/DateRangePicker/dateRangePickerUtils.d.ts.map +1 -1
  15. package/dist/cjs/DateRangePicker/dateRangePickerUtils.js +0 -22
  16. package/dist/cjs/QuillProvider.d.ts.map +1 -1
  17. package/dist/cjs/QuillProvider.js +2 -1
  18. package/dist/cjs/ReportBuilder.d.ts +0 -1
  19. package/dist/cjs/ReportBuilder.d.ts.map +1 -1
  20. package/dist/cjs/ReportBuilder.js +4 -182
  21. package/dist/cjs/SQLEditor.d.ts +1 -1
  22. package/dist/cjs/SQLEditor.d.ts.map +1 -1
  23. package/dist/cjs/SQLEditor.js +12 -8
  24. package/dist/cjs/components/Dashboard/DashboardTemplate.js +2 -2
  25. package/dist/cjs/components/QuillMultiSelect.js +3 -3
  26. package/dist/cjs/components/QuillMultiSelectWithCombo.js +3 -3
  27. package/dist/cjs/components/QuillSelect.js +3 -3
  28. package/dist/cjs/components/QuillSelectWithCombo.js +4 -4
  29. package/dist/cjs/components/QuillTable.d.ts.map +1 -1
  30. package/dist/cjs/components/QuillTable.js +46 -44
  31. package/dist/cjs/components/ReportBuilder/FilterModal.js +10 -10
  32. package/dist/cjs/components/ReportBuilder/FilterStack.js +2 -2
  33. package/dist/cjs/components/ReportBuilder/convert.d.ts.map +1 -1
  34. package/dist/cjs/components/ReportBuilder/convert.js +4 -3
  35. package/dist/cjs/components/UiComponents.d.ts.map +1 -1
  36. package/dist/cjs/components/UiComponents.js +19 -5
  37. package/dist/cjs/hooks/useDashboard.d.ts +22 -3
  38. package/dist/cjs/hooks/useDashboard.d.ts.map +1 -1
  39. package/dist/cjs/hooks/useDashboard.js +201 -127
  40. package/dist/cjs/hooks/useExport.d.ts.map +1 -1
  41. package/dist/cjs/hooks/useExport.js +12 -5
  42. package/dist/cjs/hooks/useOnClickOutside.d.ts +1 -1
  43. package/dist/cjs/hooks/useOnClickOutside.d.ts.map +1 -1
  44. package/dist/cjs/hooks/useOnClickOutside.js +10 -6
  45. package/dist/cjs/index.d.ts +1 -1
  46. package/dist/cjs/index.d.ts.map +1 -1
  47. package/dist/cjs/index.js +2 -1
  48. package/dist/cjs/internals/ReportBuilder/PivotModal.js +3 -3
  49. package/dist/cjs/lib/utils.d.ts +1 -0
  50. package/dist/cjs/lib/utils.d.ts.map +1 -1
  51. package/dist/cjs/lib/utils.js +9 -1
  52. package/dist/cjs/models/Dashboard.d.ts +6 -1
  53. package/dist/cjs/models/Dashboard.d.ts.map +1 -1
  54. package/dist/cjs/utils/astFilterProcessing.js +3 -3
  55. package/dist/cjs/utils/columnProcessing.js +4 -4
  56. package/dist/cjs/utils/constants.d.ts +2 -1
  57. package/dist/cjs/utils/constants.d.ts.map +1 -1
  58. package/dist/cjs/utils/constants.js +3 -2
  59. package/dist/cjs/utils/dataFetcher.d.ts.map +1 -1
  60. package/dist/cjs/utils/dataFetcher.js +1 -2
  61. package/dist/cjs/utils/pivotConstructor.js +1 -1
  62. package/dist/esm/Chart.js +1 -1
  63. package/dist/esm/ChartBuilder.d.ts +1 -1
  64. package/dist/esm/ChartBuilder.d.ts.map +1 -1
  65. package/dist/esm/ChartBuilder.js +6 -22
  66. package/dist/esm/ChartEditor.d.ts +1 -1
  67. package/dist/esm/ChartEditor.d.ts.map +1 -1
  68. package/dist/esm/Context.d.ts +21 -6
  69. package/dist/esm/Context.d.ts.map +1 -1
  70. package/dist/esm/Context.js +193 -18
  71. package/dist/esm/Dashboard.js +7 -7
  72. package/dist/esm/DateRangePicker/QuillDateRangePicker.d.ts.map +1 -1
  73. package/dist/esm/DateRangePicker/QuillDateRangePicker.js +7 -7
  74. package/dist/esm/DateRangePicker/dateRangePickerUtils.d.ts +0 -1
  75. package/dist/esm/DateRangePicker/dateRangePickerUtils.d.ts.map +1 -1
  76. package/dist/esm/DateRangePicker/dateRangePickerUtils.js +0 -22
  77. package/dist/esm/QuillProvider.d.ts.map +1 -1
  78. package/dist/esm/QuillProvider.js +2 -1
  79. package/dist/esm/ReportBuilder.d.ts +0 -1
  80. package/dist/esm/ReportBuilder.d.ts.map +1 -1
  81. package/dist/esm/ReportBuilder.js +3 -180
  82. package/dist/esm/SQLEditor.d.ts +1 -1
  83. package/dist/esm/SQLEditor.d.ts.map +1 -1
  84. package/dist/esm/SQLEditor.js +13 -9
  85. package/dist/esm/components/Dashboard/DashboardTemplate.js +2 -2
  86. package/dist/esm/components/QuillMultiSelect.js +3 -3
  87. package/dist/esm/components/QuillMultiSelectWithCombo.js +3 -3
  88. package/dist/esm/components/QuillSelect.js +3 -3
  89. package/dist/esm/components/QuillSelectWithCombo.js +4 -4
  90. package/dist/esm/components/QuillTable.d.ts.map +1 -1
  91. package/dist/esm/components/QuillTable.js +46 -44
  92. package/dist/esm/components/ReportBuilder/FilterModal.js +10 -10
  93. package/dist/esm/components/ReportBuilder/FilterStack.js +1 -1
  94. package/dist/esm/components/ReportBuilder/convert.d.ts.map +1 -1
  95. package/dist/esm/components/ReportBuilder/convert.js +4 -3
  96. package/dist/esm/components/UiComponents.d.ts.map +1 -1
  97. package/dist/esm/components/UiComponents.js +19 -5
  98. package/dist/esm/hooks/useDashboard.d.ts +22 -3
  99. package/dist/esm/hooks/useDashboard.d.ts.map +1 -1
  100. package/dist/esm/hooks/useDashboard.js +200 -124
  101. package/dist/esm/hooks/useExport.d.ts.map +1 -1
  102. package/dist/esm/hooks/useExport.js +12 -5
  103. package/dist/esm/hooks/useOnClickOutside.d.ts +1 -1
  104. package/dist/esm/hooks/useOnClickOutside.d.ts.map +1 -1
  105. package/dist/esm/hooks/useOnClickOutside.js +10 -6
  106. package/dist/esm/index.d.ts +1 -1
  107. package/dist/esm/index.d.ts.map +1 -1
  108. package/dist/esm/index.js +1 -1
  109. package/dist/esm/internals/ReportBuilder/PivotModal.js +3 -3
  110. package/dist/esm/lib/utils.d.ts +1 -0
  111. package/dist/esm/lib/utils.d.ts.map +1 -1
  112. package/dist/esm/lib/utils.js +7 -0
  113. package/dist/esm/models/Dashboard.d.ts +6 -1
  114. package/dist/esm/models/Dashboard.d.ts.map +1 -1
  115. package/dist/esm/utils/astFilterProcessing.js +3 -3
  116. package/dist/esm/utils/columnProcessing.js +4 -4
  117. package/dist/esm/utils/constants.d.ts +2 -1
  118. package/dist/esm/utils/constants.d.ts.map +1 -1
  119. package/dist/esm/utils/constants.js +2 -1
  120. package/dist/esm/utils/dataFetcher.d.ts.map +1 -1
  121. package/dist/esm/utils/dataFetcher.js +1 -2
  122. package/dist/esm/utils/pivotConstructor.js +1 -1
  123. package/package.json +20 -7
  124. package/dist/cjs/components/BigModal/BigModal.d.ts +0 -15
  125. package/dist/cjs/components/BigModal/BigModal.d.ts.map +0 -1
  126. package/dist/cjs/components/BigModal/BigModal.js +0 -81
  127. package/dist/esm/components/BigModal/BigModal.d.ts +0 -15
  128. package/dist/esm/components/BigModal/BigModal.d.ts.map +0 -1
  129. package/dist/esm/components/BigModal/BigModal.js +0 -56
@@ -1,8 +1,7 @@
1
- import { useContext, useMemo, useState } from 'react';
1
+ import { useContext, useMemo } from 'react';
2
2
  import { ClientContext, DashboardConfigContext, DashboardContext, DashboardFiltersContext, } from '../Context';
3
- import { getDashboard } from '../utils/dashboard';
4
3
  import { COMPARISON_RANGE, PRIMARY_RANGE, } from '../DateRangePicker/dateRangePickerUtils';
5
- import equal from 'fast-deep-equal';
4
+ import { DashboardFilterType } from '../models/Filter';
6
5
  export const useReports = () => {
7
6
  const [dashboard, dispatch] = useContext(DashboardContext);
8
7
  const reloadReport = (id) => {
@@ -24,17 +23,19 @@ export const useReports = () => {
24
23
  };
25
24
  };
26
25
  export const useDashboard = (dashboardName) => {
27
- const [dashboardConfig, dashboardConfigContext] = useContext(DashboardConfigContext);
26
+ const { dashboardConfig, loadDashboard } = useContext(DashboardConfigContext);
28
27
  const { dashboardFilters, loadFiltersForDashboard } = useContext(DashboardFiltersContext);
29
- const [dashboard] = useContext(DashboardContext);
30
- const [isLoading, setIsLoading] = useState(true);
31
- const [error, setError] = useState(null);
32
- const [client, isClientLoading] = useContext(ClientContext);
33
- const loading = useMemo(() => isLoading ||
28
+ //TODO: handle error states
29
+ // const [error, setError] = useState<any>(null);
30
+ const [, isClientLoading] = useContext(ClientContext);
31
+ const loading = useMemo(() => !dashboardName ||
34
32
  isClientLoading ||
33
+ dashboardConfig[dashboardName]?.loading ||
35
34
  (dashboardConfig[dashboardName] &&
36
- !dashboardConfig[dashboardName]?.sections), [isLoading, isClientLoading, dashboardConfig, dashboardName]);
35
+ !dashboardConfig[dashboardName]?.config.sections), [isClientLoading, dashboardConfig, dashboardName]);
37
36
  const handleReload = async (overrideDashboardName, fetchFromServer = false, reportAction, overrideFilters) => {
37
+ if (!dashboardName)
38
+ return;
38
39
  if (overrideFilters) {
39
40
  // Pull the date filter out of the override filters, process it, and append it to the filters
40
41
  const dateFilter = overrideFilters.filters.find((f) => f.filterType === 'date_range');
@@ -45,7 +46,7 @@ export const useDashboard = (dashboardName) => {
45
46
  ...dateFilter,
46
47
  dateField: [
47
48
  ...new Map(Object.values(dashboardConfig[overrideDashboardName ?? dashboardName]
48
- ?.sections ?? {})
49
+ ?.config.sections ?? {})
49
50
  .flat()
50
51
  .map((report) => {
51
52
  const key = JSON.stringify(report.dateField);
@@ -59,16 +60,29 @@ export const useDashboard = (dashboardName) => {
59
60
  ], overrideFilters.editedFilterLabel);
60
61
  return;
61
62
  }
62
- const dashboard = await getDashboards(overrideDashboardName ?? dashboardName, fetchFromServer, reportAction);
63
+ const dashboard = await loadDashboard(overrideDashboardName ?? dashboardName, fetchFromServer, reportAction);
63
64
  if (!fetchFromServer &&
64
- Object.keys(dashboardFilters[dashboardName] ?? {}).length)
65
+ Object.keys(dashboardFilters[dashboardName] ?? {}).length) {
65
66
  return;
67
+ }
68
+ const comparisonRangeStart = dashboard?.dateFilter?.comparisonRange?.startDate ??
69
+ COMPARISON_RANGE[dashboard?.dateFilter?.defaultComparisonRange ??
70
+ 'NO_COMPARISON']({
71
+ start: PRIMARY_RANGE[dashboard?.dateFilter?.primaryRange?.value ?? 'LAST_30_DAYS']?.start,
72
+ end: PRIMARY_RANGE[dashboard?.dateFilter?.primaryRange?.value ?? 'LAST_30_DAYS']?.end,
73
+ })?.start;
74
+ const comparisonRangeEnd = dashboard?.dateFilter?.comparisonRange?.endDate ??
75
+ COMPARISON_RANGE[dashboard?.dateFilter?.defaultComparisonRange ??
76
+ 'NO_COMPARISON']({
77
+ start: PRIMARY_RANGE[dashboard?.dateFilter?.primaryRange?.value ?? 'LAST_30_DAYS']?.start,
78
+ end: PRIMARY_RANGE[dashboard?.dateFilter?.primaryRange?.value ?? 'LAST_30_DAYS']?.end,
79
+ })?.end;
66
80
  const dateFilter = dashboard?.dateFilter
67
81
  ? {
68
82
  ...dashboard?.dateFilter,
69
- startDate: PRIMARY_RANGE[dashboard?.dateFilter.primaryRange?.value ?? 'LAST_30_DAYS']?.start,
70
- endDate: PRIMARY_RANGE[dashboard?.dateFilter.primaryRange?.value ?? 'LAST_30_DAYS']?.end,
71
- filterType: 'date_range',
83
+ startDate: PRIMARY_RANGE[dashboard?.dateFilter.primaryRange?.value ?? 'LAST_30_DAYS'].start,
84
+ endDate: PRIMARY_RANGE[dashboard?.dateFilter.primaryRange?.value ?? 'LAST_30_DAYS'].end,
85
+ filterType: DashboardFilterType.Date,
72
86
  dateField: [
73
87
  ...new Map(Object.values(dashboard?.sections ?? {})
74
88
  .flat()
@@ -79,28 +93,15 @@ export const useDashboard = (dashboardName) => {
79
93
  ],
80
94
  preset: dashboard?.dateFilter.primaryRange,
81
95
  dashboardName: overrideDashboardName ?? dashboardName,
82
- comparisonRange: dashboard?.dateFilter.comparison
96
+ comparisonRange: dashboard?.dateFilter.comparison &&
97
+ comparisonRangeStart &&
98
+ comparisonRangeEnd
83
99
  ? {
84
- startDate: dashboard?.dateFilter.comparsionRange?.startDate ??
85
- COMPARISON_RANGE[dashboard?.dateFilter
86
- .defaultComparisonRange ??
87
- 'NO_COMPARISON']({
88
- start: PRIMARY_RANGE[dashboard?.dateFilter.primaryRange?.value ??
89
- 'LAST_30_DAYS']?.start,
90
- end: PRIMARY_RANGE[dashboard?.dateFilter.primaryRange?.value ??
91
- 'LAST_30_DAYS']?.end,
92
- })?.start,
93
- endDate: dashboard?.dateFilter.comparsionRange?.endDate ??
94
- COMPARISON_RANGE[dashboard?.dateFilter
95
- .defaultComparisonRange ??
96
- 'NO_COMPARISON']({
97
- start: PRIMARY_RANGE[dashboard?.dateFilter.primaryRange?.value ??
98
- 'LAST_30_DAYS']?.start,
99
- end: PRIMARY_RANGE[dashboard?.dateFilter.primaryRange?.value ??
100
- 'LAST_30_DAYS']?.end,
101
- })?.end,
102
- value: dashboard?.dateFilter.comparsionRange?.value ??
103
- dashboard.dateFilter?.defaultComparisonRange,
100
+ startDate: comparisonRangeStart,
101
+ endDate: comparisonRangeEnd,
102
+ value: dashboard?.dateFilter.comparisonRange?.value ??
103
+ dashboard.dateFilter?.defaultComparisonRange ??
104
+ 'NO_COMPARISON',
104
105
  }
105
106
  : undefined,
106
107
  }
@@ -111,101 +112,176 @@ export const useDashboard = (dashboardName) => {
111
112
  ...(dashboard?.filters ?? []),
112
113
  ]);
113
114
  };
114
- async function getDashboards(dashboardName, fetchFromServer = false, reportAction) {
115
- let curDashboardConfig = dashboardConfig[dashboardName];
116
- if (!fetchFromServer && curDashboardConfig?.sections) {
117
- if (reportAction?.action === 'delete') {
118
- curDashboardConfig = {
119
- ...curDashboardConfig,
120
- sections: Object.fromEntries(Object.entries(curDashboardConfig?.sections ?? {}).map(([sectionKey, reports]) => [
121
- sectionKey,
122
- reports.filter((report) => report.id !== reportAction.report.id),
123
- ])),
124
- };
125
- }
126
- else if (reportAction?.action === 'upsert') {
127
- const containsReport = Object.values(curDashboardConfig?.sections ?? {})
128
- .flat()
129
- .some((report) => report.id === reportAction?.report.id);
130
- curDashboardConfig = {
131
- ...curDashboardConfig,
132
- sections: Object.fromEntries(Object.entries(curDashboardConfig?.sections ?? {}).map(([sectionKey, reports]) => [
133
- sectionKey,
134
- containsReport
135
- ? reports.map((report) => {
136
- return {
137
- report,
138
- ...(reportAction?.report.id === report.id
139
- ? reportAction?.report
140
- : dashboard[report.id]),
141
- _id: report.id,
142
- id: report.id,
143
- };
144
- })
145
- : [
146
- ...(reports ?? []),
147
- {
148
- report: reportAction?.report,
149
- ...dashboard[reportAction?.report.id],
150
- id: reportAction?.report.id,
151
- _id: reportAction?.report.id,
152
- },
153
- ],
154
- ])),
155
- };
156
- }
157
- dashboardConfigContext({
158
- type: 'UPDATE_DASHBOARD',
159
- id: dashboardName,
160
- data: curDashboardConfig,
161
- });
162
- setIsLoading(false);
163
- return curDashboardConfig;
164
- }
165
- if (!fetchFromServer &&
166
- curDashboardConfig &&
167
- curDashboardConfig.newQueries) {
168
- setIsLoading(false);
169
- return curDashboardConfig;
170
- }
171
- if (!client || !client.publicKey || !client.organizationId) {
172
- return curDashboardConfig;
173
- }
174
- if (dashboardName === null || dashboardName === undefined)
175
- return curDashboardConfig;
176
- try {
177
- setIsLoading(true);
178
- const resp = await getDashboard(dashboardName, client);
179
- // if dashboard has changed
180
- if (!equal(resp, curDashboardConfig)) {
181
- dashboardConfigContext({
182
- type: 'ADD_DASHBOARD',
183
- id: dashboardName,
184
- data: { ...resp },
185
- });
186
- }
187
- setError(null);
188
- return resp;
189
- }
190
- catch (error) {
191
- setError(error);
192
- console.error('Error fetching data:', error);
193
- }
194
- finally {
195
- setIsLoading(false);
196
- }
197
- }
198
115
  function isDashboardFilterLoading(filterName) {
116
+ if (!dashboardName)
117
+ return true;
199
118
  return dashboardFilters[dashboardName]?.[filterName]?.loading;
200
119
  }
201
120
  return {
202
- data: loading ? null : dashboardConfig[dashboardName],
203
- dashboardFilters: dashboardFilters[dashboardName] !== undefined
121
+ data: loading || !dashboardName
122
+ ? null
123
+ : (dashboardConfig[dashboardName]?.config ?? null),
124
+ dashboardFilters: dashboardName && dashboardFilters[dashboardName] !== undefined
204
125
  ? Object.values(dashboardFilters[dashboardName] ?? {}).map((f) => f.filter)
205
126
  : null,
206
127
  isLoading: loading,
207
128
  isDashboardFilterLoading,
208
- error,
209
129
  reload: handleReload,
210
130
  };
211
131
  };
132
+ export const useDashboards = () => {
133
+ const { dashboardConfig, dashboardConfigDispatch } = useContext(DashboardConfigContext);
134
+ const { loadFiltersForDashboard, dispatch: dashboardFiltersDispatch } = useContext(DashboardFiltersContext);
135
+ const [client, isLoading] = useContext(ClientContext);
136
+ const dashboards = useMemo(() => {
137
+ return Object.values(dashboardConfig).map((dashboard) => {
138
+ return {
139
+ name: dashboard.config.name,
140
+ id: dashboard.config.dashboardId,
141
+ reports: Object.values(dashboard.config.sections ?? {}).flat(),
142
+ };
143
+ });
144
+ }, [dashboardConfig]);
145
+ const createDashboard = async ({ name, filters, dateFilter, }) => {
146
+ if (!client)
147
+ return;
148
+ dashboardConfigDispatch({
149
+ type: 'UPDATE_DASHBOARD',
150
+ id: name,
151
+ data: {
152
+ config: {
153
+ dashboardId: name,
154
+ name,
155
+ filters,
156
+ dateFilter,
157
+ },
158
+ loading: true,
159
+ },
160
+ });
161
+ const body = {
162
+ newDashboardName: name.trim(),
163
+ filters,
164
+ dateFilter,
165
+ name: name.trim(),
166
+ task: 'edit-dashboard',
167
+ clientId: client.clientId,
168
+ };
169
+ try {
170
+ const response = await fetch(client.queryEndpoint, {
171
+ method: 'POST',
172
+ headers: {
173
+ ...client.queryHeaders,
174
+ 'Content-Type': 'application/json',
175
+ },
176
+ body: JSON.stringify({ metadata: body }),
177
+ });
178
+ const updated = await response.json();
179
+ dashboardConfigDispatch({
180
+ type: 'UPDATE_DASHBOARD',
181
+ id: name,
182
+ data: { config: updated.data.dashboard, loading: false },
183
+ });
184
+ }
185
+ catch (e) {
186
+ console.error(e);
187
+ }
188
+ };
189
+ const updateDashboard = async (name, { newName, filters, dateFilter, }) => {
190
+ if (!client)
191
+ return;
192
+ const dashboard = dashboardConfig[name]?.config;
193
+ dashboardConfigDispatch({
194
+ type: 'DELETE_DASHBOARD',
195
+ id: name,
196
+ });
197
+ dashboardFiltersDispatch({
198
+ type: 'DELETE_DASHBOARD_FILTERS',
199
+ dashboardName: name,
200
+ });
201
+ const body = {
202
+ newDashboardName: newName.trim(),
203
+ filters,
204
+ dateFilter,
205
+ name: name.trim(),
206
+ task: 'edit-dashboard',
207
+ clientId: client.clientId,
208
+ };
209
+ try {
210
+ const response = await fetch(client.queryEndpoint, {
211
+ method: 'POST',
212
+ headers: {
213
+ ...client.queryHeaders,
214
+ 'Content-Type': 'application/json',
215
+ },
216
+ body: JSON.stringify({ metadata: body }),
217
+ });
218
+ const updated = await response.json();
219
+ dashboardConfigDispatch({
220
+ type: 'ADD_DASHBOARD',
221
+ id: updated.data.dashboard.name,
222
+ data: {
223
+ ...dashboard,
224
+ ...updated.data.dashboard,
225
+ },
226
+ });
227
+ const updatedDateFilter = updated.data.dashboard.dateFilter
228
+ ? {
229
+ ...updated.data.dashboard.dateFilter,
230
+ dashboardName: updated.data.dashboard.name,
231
+ preset: updated.data.dashboard.dateFilter.primaryRange,
232
+ filterType: DashboardFilterType.Date,
233
+ dateField: [
234
+ ...new Map(Object.values(dashboardConfig[updated.data.dashboard.name]?.config
235
+ .sections ?? {})
236
+ .flat()
237
+ .map((report) => {
238
+ const key = JSON.stringify(report.dateField);
239
+ return [key, report.dateField];
240
+ })).values(),
241
+ ],
242
+ startDate: PRIMARY_RANGE[updated.data.dashboard.dateFilter.primaryRange?.value ??
243
+ 'LAST_30_DAYS'].start,
244
+ endDate: PRIMARY_RANGE[updated.data.dashboard.dateFilter.primaryRange?.value ??
245
+ 'LAST_30_DAYS'].end,
246
+ }
247
+ : undefined;
248
+ loadFiltersForDashboard(updated.data.dashboard.name, [
249
+ ...(updatedDateFilter ? [updatedDateFilter] : []),
250
+ ...(updated.data.dashboard.filters ?? []),
251
+ ]);
252
+ }
253
+ catch (e) {
254
+ console.error(e);
255
+ }
256
+ };
257
+ const deleteDashboard = async (name) => {
258
+ if (!client)
259
+ return;
260
+ await fetch(client.queryEndpoint, {
261
+ method: 'POST',
262
+ headers: {
263
+ ...client.queryHeaders,
264
+ 'Content-Type': 'application/json',
265
+ },
266
+ body: JSON.stringify({
267
+ metadata: {
268
+ task: 'delete-dashboard',
269
+ clientId: client.clientId,
270
+ databaseType: client.databaseType,
271
+ name,
272
+ },
273
+ }),
274
+ });
275
+ dashboardConfigDispatch({
276
+ type: 'DELETE_DASHBOARD',
277
+ id: name,
278
+ });
279
+ };
280
+ return {
281
+ dashboards: isLoading ? null : dashboards,
282
+ isLoading,
283
+ createDashboard,
284
+ updateDashboard,
285
+ deleteDashboard,
286
+ };
287
+ };
@@ -1 +1 @@
1
- {"version":3,"file":"useExport.d.ts","sourceRoot":"","sources":["../../../src/hooks/useExport.tsx"],"names":[],"mappings":";AASA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAwD/C,eAAO,MAAM,SAAS,cACT,MAAM;uCAOmB,aAAa,KAAK,WAAW;;;;;;;CA2LlE,CAAC;AAEF,UAAU,aAAa;IACrB,MAAM,EAAE,WAAW,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,kBAAkB,EAAE,MAAM,CAAC;CAC5B"}
1
+ {"version":3,"file":"useExport.d.ts","sourceRoot":"","sources":["../../../src/hooks/useExport.tsx"],"names":[],"mappings":";AASA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAwD/C,eAAO,MAAM,SAAS,cACT,MAAM;uCAOmB,aAAa,KAAK,WAAW;;;;;;;CAqMlE,CAAC;AAEF,UAAU,aAAa;IACrB,MAAM,EAAE,WAAW,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,kBAAkB,EAAE,MAAM,CAAC;CAC5B"}
@@ -51,11 +51,18 @@ sectionField, } = {}) => {
51
51
  const { dashboardFilters } = useContext(DashboardFiltersContext);
52
52
  const [dashboard] = useContext(DashboardContext);
53
53
  const specificDashboardFilters = useMemo(() => {
54
- //FIXME: Pretty sure this won't work with multiple dashboards
55
- Object.values(dashboardFilters).map((dashboardFilter) => {
54
+ if (!reportId) {
55
+ return [];
56
+ }
57
+ const dashboardName = dashboard[reportId]?.dashboardName;
58
+ if (!dashboardName || !dashboardFilters[dashboardName]) {
59
+ return [];
60
+ }
61
+ // @ts-ignore
62
+ return Object.values(dashboardFilters[dashboardName]).map((dashboardFilter) => {
56
63
  return dashboardFilter.filter;
57
64
  });
58
- }, [dashboardFilters]);
65
+ }, [dashboardFilters, dashboard, reportId]);
59
66
  // const [theme] = useContext(ThemeContext);
60
67
  const [client] = useContext(ClientContext);
61
68
  const [isLoading, setIsLoading] = useState(false);
@@ -70,8 +77,8 @@ sectionField, } = {}) => {
70
77
  setIsLoading(true);
71
78
  const resp = await getExportData(client, specificDashboardFilters, reportId);
72
79
  downloadCSV({
73
- rows: resp.rows,
74
- fields: resp.columns,
80
+ rows: resp.pivot && resp.pivotRows ? resp.pivotRows : resp.rows,
81
+ fields: resp.pivot && resp.pivotColumns ? resp.pivotColumns : resp.columns,
75
82
  name: resp.name,
76
83
  });
77
84
  setIsLoading(false);
@@ -1,3 +1,3 @@
1
- declare const useOnClickOutside: (ref: React.RefObject<HTMLDivElement>, handler: (event: any) => void) => void;
1
+ declare const useOnClickOutside: (ref: React.RefObject<HTMLDivElement>, handler: (event: any) => void, listening?: boolean) => void;
2
2
  export default useOnClickOutside;
3
3
  //# sourceMappingURL=useOnClickOutside.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useOnClickOutside.d.ts","sourceRoot":"","sources":["../../../src/hooks/useOnClickOutside.tsx"],"names":[],"mappings":"AAEA,QAAA,MAAM,iBAAiB,QAChB,MAAM,SAAS,CAAC,cAAc,CAAC,mBACjB,GAAG,KAAG,IAAI,SAkB9B,CAAC;AAEF,eAAe,iBAAiB,CAAC"}
1
+ {"version":3,"file":"useOnClickOutside.d.ts","sourceRoot":"","sources":["../../../src/hooks/useOnClickOutside.tsx"],"names":[],"mappings":"AAEA,QAAA,MAAM,iBAAiB,QAChB,MAAM,SAAS,CAAC,cAAc,CAAC,mBACjB,GAAG,KAAG,IAAI,cACjB,OAAO,SAqBpB,CAAC;AAEF,eAAe,iBAAiB,CAAC"}
@@ -1,5 +1,5 @@
1
1
  import { useEffect } from 'react';
2
- const useOnClickOutside = (ref, handler) => {
2
+ const useOnClickOutside = (ref, handler, listening) => {
3
3
  useEffect(() => {
4
4
  const listener = (event) => {
5
5
  if (!ref.current || ref.current.contains(event.target)) {
@@ -7,14 +7,18 @@ const useOnClickOutside = (ref, handler) => {
7
7
  }
8
8
  handler(event);
9
9
  };
10
- // document.addEventListener('click', listener);
11
- document.addEventListener('mousedown', listener);
12
- document.addEventListener('touchstart', listener);
10
+ if (listening !== false) {
11
+ document.addEventListener('mousedown', listener);
12
+ document.addEventListener('touchstart', listener);
13
+ }
14
+ else {
15
+ document.removeEventListener('mousedown', listener);
16
+ document.removeEventListener('touchstart', listener);
17
+ }
13
18
  return () => {
14
- // document.removeEventListener('click', listener);
15
19
  document.removeEventListener('mousedown', listener);
16
20
  document.removeEventListener('touchstart', listener);
17
21
  };
18
- }, [ref, handler]);
22
+ }, [ref, handler, listening]);
19
23
  };
20
24
  export default useOnClickOutside;
@@ -14,7 +14,7 @@ export type { ReportBuilderProps } from './ReportBuilder';
14
14
  export { default as ChartEditor } from './ChartEditor';
15
15
  export type { ChartEditorProps } from './ChartEditor';
16
16
  export { quillFormat as format } from './utils/valueFormatter';
17
- export { useDashboard, useReports } from './hooks/useDashboard';
17
+ export { useDashboard, useReports, useDashboards } from './hooks/useDashboard';
18
18
  export { useQuill, usePivot } from './hooks/useQuill';
19
19
  export { useExport } from './hooks/useExport';
20
20
  export { useMemoizedRows } from './hooks/useFormat';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,aAAa,CAAC;AACnD,YAAY,EAAE,cAAc,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAChF,YAAY,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAC3D,YAAY,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AACtE,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,SAAS,CAAC;AAC3C,YAAY,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACxD,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,SAAS,CAAC;AAC3C,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAC1C,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AACxE,YAAY,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAC3D,YAAY,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAC1D,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,eAAe,CAAC;AACvD,YAAY,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAAE,WAAW,IAAI,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAChE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,YAAY,EACV,uBAAuB,EACvB,oBAAoB,EACpB,0BAA0B,EAC1B,oBAAoB,EACpB,qBAAqB,EACrB,kBAAkB,EAClB,sBAAsB,EACtB,qBAAqB,EACrB,uBAAuB,EACvB,oBAAoB,EACpB,mBAAmB,EACnB,kBAAkB,EAClB,MAAM,EACN,mBAAmB,EACnB,WAAW,GACZ,MAAM,2BAA2B,CAAC;AACnC,YAAY,EACV,0BAA0B,EAC1B,6BAA6B,EAC7B,4BAA4B,EAC5B,2BAA2B,EAC3B,yBAAyB,EACzB,0BAA0B,GAC3B,MAAM,+BAA+B,CAAC;AACvC,YAAY,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AACnE,YAAY,EACV,6BAA6B,EAC7B,qBAAqB,EACrB,SAAS,GACV,MAAM,wCAAwC,CAAC;AAChD,YAAY,EAAE,8BAA8B,EAAE,MAAM,yCAAyC,CAAC;AAC9F,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,aAAa,CAAC;AACnD,YAAY,EAAE,cAAc,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAChF,YAAY,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAC3D,YAAY,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AACtE,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,SAAS,CAAC;AAC3C,YAAY,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACxD,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,SAAS,CAAC;AAC3C,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAC1C,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AACxE,YAAY,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAC3D,YAAY,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAC1D,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,eAAe,CAAC;AACvD,YAAY,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAAE,WAAW,IAAI,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC/E,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,YAAY,EACV,uBAAuB,EACvB,oBAAoB,EACpB,0BAA0B,EAC1B,oBAAoB,EACpB,qBAAqB,EACrB,kBAAkB,EAClB,sBAAsB,EACtB,qBAAqB,EACrB,uBAAuB,EACvB,oBAAoB,EACpB,mBAAmB,EACnB,kBAAkB,EAClB,MAAM,EACN,mBAAmB,EACnB,WAAW,GACZ,MAAM,2BAA2B,CAAC;AACnC,YAAY,EACV,0BAA0B,EAC1B,6BAA6B,EAC7B,4BAA4B,EAC5B,2BAA2B,EAC3B,yBAAyB,EACzB,0BAA0B,GAC3B,MAAM,+BAA+B,CAAC;AACvC,YAAY,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AACnE,YAAY,EACV,6BAA6B,EAC7B,qBAAqB,EACrB,SAAS,GACV,MAAM,wCAAwC,CAAC;AAChD,YAAY,EAAE,8BAA8B,EAAE,MAAM,yCAAyC,CAAC;AAC9F,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC"}
package/dist/esm/index.js CHANGED
@@ -7,7 +7,7 @@ export { default as SQLEditor, SchemaListComponent } from './SQLEditor';
7
7
  export { default as ReportBuilder } from './ReportBuilder';
8
8
  export { default as ChartEditor } from './ChartEditor';
9
9
  export { quillFormat as format } from './utils/valueFormatter';
10
- export { useDashboard, useReports } from './hooks/useDashboard';
10
+ export { useDashboard, useReports, useDashboards } from './hooks/useDashboard';
11
11
  export { useQuill, usePivot } from './hooks/useQuill';
12
12
  export { useExport } from './hooks/useExport';
13
13
  export { useMemoizedRows } from './hooks/useFormat';
@@ -914,11 +914,11 @@ export function generatePivotTableInMemory(pivot, data, dateRange, isComparison,
914
914
  let value;
915
915
  const nextRowValue = isDateField(pivot.rowFieldType || '')
916
916
  ? // @ts-ignore
917
- uniqueRows[rowIndex + 1] ?? endOfDay(rowDateRange.end)
917
+ (uniqueRows[rowIndex + 1] ?? endOfDay(rowDateRange.end))
918
918
  : null;
919
919
  const compRowValue = compUniqueRows[rowIndex];
920
920
  const compNextRowValue = isDateField(pivot.rowFieldType || '')
921
- ? compUniqueRows[rowIndex + 1] ?? endOfDay(compRowDateRange.end)
921
+ ? (compUniqueRows[rowIndex + 1] ?? endOfDay(compRowDateRange.end))
922
922
  : null;
923
923
  if (pivot.columnField) {
924
924
  const columnDateRange = getDateRange(dateRange, pivot.columnField, data);
@@ -1136,7 +1136,7 @@ export function generatePivotTableInMemory(pivot, data, dateRange, isComparison,
1136
1136
  index === 1
1137
1137
  ? `comparison Count`
1138
1138
  : isDateField(pivot.columnFieldType || '')
1139
- ? COL_DATE_MAP[getDateString(column, dateRange, dateBucket)] ?? 'comparison'
1139
+ ? (COL_DATE_MAP[getDateString(column, dateRange, dateBucket)] ?? 'comparison')
1140
1140
  : `comparison ${snakeAndCamelCaseToTitleCase(columnName)}`,
1141
1141
  field: `comparison_${columnName}`,
1142
1142
  };
@@ -7,4 +7,5 @@ export declare const isValueInArray: (value: any, array: any[]) => boolean;
7
7
  export declare const stringIsNumeric: (str: string | undefined) => boolean;
8
8
  export declare const stringEndsWithNumber: (str: string) => boolean;
9
9
  export declare function mergeRefs<T = any>(refs: Array<React.MutableRefObject<T> | React.LegacyRef<T>>): React.RefCallback<T>;
10
+ export declare const createDebounce: (func: any, delay: number) => (...args: any) => void;
10
11
  //# sourceMappingURL=utils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/lib/utils.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE9C,eAAO,MAAM,qBAAqB,EAAE,cAClB,CAAC;AAEnB,eAAO,MAAM,eAAe,QAAS,MAAM,EAAE,WACO,CAAC;AAErD,eAAO,MAAM,oBAAoB,UAAW,GAAG,SAAS,GAAG,EAAE,KAAG,GAAG,EAMlE,CAAC;AAEF,eAAO,MAAM,cAAc,UAAW,GAAG,SAAS,GAAG,EAAE,KAAG,OAOzD,CAAC;AAEF,eAAO,MAAM,eAAe,QAAS,MAAM,GAAG,SAAS,KAAG,OAEzD,CAAC;AAEF,eAAO,MAAM,oBAAoB,QAAS,MAAM,KAAG,OAElD,CAAC;AAEF,wBAAgB,SAAS,CAAC,CAAC,GAAG,GAAG,EAC/B,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,GAC1D,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAUtB"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/lib/utils.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE9C,eAAO,MAAM,qBAAqB,EAAE,cAClB,CAAC;AAEnB,eAAO,MAAM,eAAe,QAAS,MAAM,EAAE,WACO,CAAC;AAErD,eAAO,MAAM,oBAAoB,UAAW,GAAG,SAAS,GAAG,EAAE,KAAG,GAAG,EAMlE,CAAC;AAEF,eAAO,MAAM,cAAc,UAAW,GAAG,SAAS,GAAG,EAAE,KAAG,OAOzD,CAAC;AAEF,eAAO,MAAM,eAAe,QAAS,MAAM,GAAG,SAAS,KAAG,OAEzD,CAAC;AAEF,eAAO,MAAM,oBAAoB,QAAS,MAAM,KAAG,OAElD,CAAC;AAEF,wBAAgB,SAAS,CAAC,CAAC,GAAG,GAAG,EAC/B,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,GAC1D,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAUtB;AAED,eAAO,MAAM,cAAc,SAAU,GAAG,SAAS,MAAM,eAEpC,GAAG,SAIrB,CAAC"}
@@ -33,3 +33,10 @@ export function mergeRefs(refs) {
33
33
  });
34
34
  };
35
35
  }
36
+ export const createDebounce = (func, delay) => {
37
+ let timeoutId;
38
+ return (...args) => {
39
+ clearTimeout(timeoutId);
40
+ timeoutId = setTimeout(() => func(...args), delay);
41
+ };
42
+ };
@@ -4,11 +4,16 @@ export type DashboardConfig = {
4
4
  dashboardId: string;
5
5
  name: string;
6
6
  filters: DashboardStringFilter[];
7
- dateFilter: DashboardDateFilter;
7
+ dateFilter?: DashboardDateFilter;
8
8
  customFiltersEnabled?: boolean;
9
9
  sections?: {
10
10
  [key: string]: QuillReport[];
11
11
  };
12
12
  newQueries?: QuillReport[];
13
13
  };
14
+ export type Dashboard = {
15
+ id: string;
16
+ name: string;
17
+ reports: QuillReport[];
18
+ };
14
19
  //# sourceMappingURL=Dashboard.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Dashboard.d.ts","sourceRoot":"","sources":["../../../src/models/Dashboard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AACtE,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAEvC,MAAM,MAAM,eAAe,GAAG;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,qBAAqB,EAAE,CAAC;IACjC,UAAU,EAAE,mBAAmB,CAAC;IAChC,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,QAAQ,CAAC,EAAE;QACT,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW,EAAE,CAAC;KAC9B,CAAC;IACF,UAAU,CAAC,EAAE,WAAW,EAAE,CAAC;CAC5B,CAAC"}
1
+ {"version":3,"file":"Dashboard.d.ts","sourceRoot":"","sources":["../../../src/models/Dashboard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AACtE,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAEvC,MAAM,MAAM,eAAe,GAAG;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,qBAAqB,EAAE,CAAC;IACjC,UAAU,CAAC,EAAE,mBAAmB,CAAC;IACjC,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,QAAQ,CAAC,EAAE;QACT,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW,EAAE,CAAC;KAC9B,CAAC;IACF,UAAU,CAAC,EAAE,WAAW,EAAE,CAAC;CAC5B,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,WAAW,EAAE,CAAC;CACxB,CAAC"}
@@ -281,7 +281,7 @@ const queryPatterns = [
281
281
  WHERE transaction_date >= DATEADD(day, -90, GETDATE())
282
282
  `,
283
283
  value: function (astWhere) {
284
- return -astWhere.right?.args?.value[1]?.value ?? null;
284
+ return -astWhere.right?.args?.value[1]?.value;
285
285
  },
286
286
  unit: function (astWhere) {
287
287
  return astWhere.right?.args?.value[0]?.column?.expr?.value ?? null;
@@ -390,7 +390,7 @@ const queryPatterns = [
390
390
  WHERE transaction_date >= DATEADD(day, -90, CURRENT_DATE)
391
391
  `,
392
392
  value: function (astWhere) {
393
- return -astWhere.right?.args?.value[1]?.value ?? null;
393
+ return -astWhere.right?.args?.value[1]?.value;
394
394
  },
395
395
  unit: function (astWhere) {
396
396
  return astWhere.right?.args?.value[0]?.column?.expr?.value ?? null;
@@ -597,7 +597,7 @@ const queryPatterns = [
597
597
  WHERE transaction_date >= DATEADD(DAY, -90, CURRENT_DATE())
598
598
  `,
599
599
  value: function (astWhere) {
600
- return -astWhere.right?.args?.value[1]?.value ?? null;
600
+ return -astWhere.right?.args?.value[1]?.value;
601
601
  },
602
602
  unit: function (astWhere) {
603
603
  return astWhere.right?.args?.value[0]?.column.toLowerCase() ?? null;
@@ -133,10 +133,10 @@ export function convertPostgresColumn(field) {
133
133
  jsType = 'string';
134
134
  }
135
135
  return {
136
- label: 'field' in field
136
+ label: ('field' in field
137
137
  ? snakeAndCamelCaseToTitleCase(field.field)
138
- : snakeAndCamelCaseToTitleCase(field.name),
139
- field: 'field' in field ? field.field : field.name,
138
+ : snakeAndCamelCaseToTitleCase(field.name)) ?? '',
139
+ field: ('field' in field ? field.field : field.name) ?? '',
140
140
  format,
141
141
  fieldType,
142
142
  dataTypeID: field.dataTypeID,
@@ -316,7 +316,7 @@ export const getYAxisFields = (report) => {
316
316
  }
317
317
  else {
318
318
  if (curDateFilter?.comparison &&
319
- curDateFilter.comparisonRange.value !== 'NO_COMPARISON') {
319
+ curDateFilter.comparisonRange?.value !== 'NO_COMPARISON') {
320
320
  const comparisonYAxisFields = report.yAxisFields?.map((field) => {
321
321
  return {
322
322
  ...field,
@@ -1,4 +1,5 @@
1
1
  export declare const MAX_COLUMN_ROWS_LIMIT = 500;
2
- export declare const QUILL_SERVER = "https://quill-344421.uc.r.appspot.com";
3
2
  export declare const MAX_PIVOT_UNIQUE_VALUES = 250;
3
+ export declare const QUILL_SERVER: string;
4
+ export declare const QUILL_QUERY_ENDPOINT: string;
4
5
  //# sourceMappingURL=constants.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../src/utils/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,qBAAqB,MAAM,CAAC;AACzC,eAAO,MAAM,YAAY,0CAA0C,CAAC;AACpE,eAAO,MAAM,uBAAuB,MAAM,CAAC"}
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../src/utils/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,qBAAqB,MAAM,CAAC;AACzC,eAAO,MAAM,uBAAuB,MAAM,CAAC;AAC3C,eAAO,MAAM,YAAY,QACiD,CAAC;AAC3E,eAAO,MAAM,oBAAoB,QACa,CAAC"}
@@ -1,3 +1,4 @@
1
1
  export const MAX_COLUMN_ROWS_LIMIT = 500;
2
- export const QUILL_SERVER = 'https://quill-344421.uc.r.appspot.com';
3
2
  export const MAX_PIVOT_UNIQUE_VALUES = 250;
3
+ export const QUILL_SERVER = process.env.QUILL_SERVER_HOST ?? 'https://quill-344421.uc.r.appspot.com';
4
+ export const QUILL_QUERY_ENDPOINT = process.env.QUILL_QUERY_ENDPOINT ?? '/cloud';
@@ -1 +1 @@
1
- {"version":3,"file":"dataFetcher.d.ts","sourceRoot":"","sources":["../../../src/utils/dataFetcher.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AA8EvD,wBAAsB,OAAO,CAC3B,MAAM,EAAE,mBAAmB,EAC3B,kBAAkB,EAAE,MAAM,EAC1B,MAAM,EAAE,kBAAkB,EAC1B,iBAAiB,EAAE,GAAG,EACtB,gBAAgB,EAAE,GAAG,EACrB,MAAM,SAAS,EACf,UAAU,CAAC,EAAE,MAAM,EACnB,WAAW,CAAC,EAAE,WAAW,gBAqJ1B;AAED,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,mBAAmB,EAC3B,kBAAkB,EAAE,MAAM,EAC1B,gBAAgB,EAAE,GAAG,EACrB,MAAM,SAAS,EACf,WAAW,CAAC,EAAE,WAAW,gBAiC1B;AAED,wBAAsB,aAAa,CACjC,GAAG,EAAE,GAAG,EACR,MAAM,EAAE,mBAAmB,EAC3B,QAAQ,CAAC,EAAE,GAAG,GACb,OAAO,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAmB5C"}
1
+ {"version":3,"file":"dataFetcher.d.ts","sourceRoot":"","sources":["../../../src/utils/dataFetcher.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AA8EvD,wBAAsB,OAAO,CAC3B,MAAM,EAAE,mBAAmB,EAC3B,kBAAkB,EAAE,MAAM,EAC1B,MAAM,EAAE,kBAAkB,EAC1B,iBAAiB,EAAE,GAAG,EACtB,gBAAgB,EAAE,GAAG,EACrB,MAAM,SAAS,EACf,UAAU,CAAC,EAAE,MAAM,EACnB,WAAW,CAAC,EAAE,WAAW,gBAqJ1B;AAED,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,mBAAmB,EAC3B,kBAAkB,EAAE,MAAM,EAC1B,gBAAgB,EAAE,GAAG,EACrB,MAAM,SAAS,EACf,WAAW,CAAC,EAAE,WAAW,gBA+B1B;AAED,wBAAsB,aAAa,CACjC,GAAG,EAAE,GAAG,EACR,MAAM,EAAE,mBAAmB,EAC3B,QAAQ,CAAC,EAAE,GAAG,GACb,OAAO,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAmB5C"}