@quillsql/react 2.13.4 → 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 (137) 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.d.ts.map +1 -1
  11. package/dist/cjs/Dashboard.js +9 -9
  12. package/dist/cjs/DateRangePicker/QuillDateRangePicker.d.ts.map +1 -1
  13. package/dist/cjs/DateRangePicker/QuillDateRangePicker.js +7 -7
  14. package/dist/cjs/DateRangePicker/dateRangePickerUtils.d.ts +0 -1
  15. package/dist/cjs/DateRangePicker/dateRangePickerUtils.d.ts.map +1 -1
  16. package/dist/cjs/DateRangePicker/dateRangePickerUtils.js +0 -22
  17. package/dist/cjs/QuillProvider.d.ts.map +1 -1
  18. package/dist/cjs/QuillProvider.js +2 -1
  19. package/dist/cjs/ReportBuilder.d.ts +0 -1
  20. package/dist/cjs/ReportBuilder.d.ts.map +1 -1
  21. package/dist/cjs/ReportBuilder.js +4 -182
  22. package/dist/cjs/SQLEditor.d.ts +1 -1
  23. package/dist/cjs/SQLEditor.d.ts.map +1 -1
  24. package/dist/cjs/SQLEditor.js +12 -8
  25. package/dist/cjs/components/Dashboard/DashboardTemplate.js +2 -2
  26. package/dist/cjs/components/Dashboard/DataLoader.js +1 -1
  27. package/dist/cjs/components/QuillMultiSelect.d.ts.map +1 -1
  28. package/dist/cjs/components/QuillMultiSelect.js +4 -3
  29. package/dist/cjs/components/QuillMultiSelectWithCombo.d.ts.map +1 -1
  30. package/dist/cjs/components/QuillMultiSelectWithCombo.js +4 -3
  31. package/dist/cjs/components/QuillSelect.js +3 -3
  32. package/dist/cjs/components/QuillSelectWithCombo.js +4 -4
  33. package/dist/cjs/components/QuillTable.d.ts.map +1 -1
  34. package/dist/cjs/components/QuillTable.js +46 -44
  35. package/dist/cjs/components/ReportBuilder/FilterModal.js +10 -10
  36. package/dist/cjs/components/ReportBuilder/FilterStack.js +2 -2
  37. package/dist/cjs/components/ReportBuilder/convert.d.ts.map +1 -1
  38. package/dist/cjs/components/ReportBuilder/convert.js +4 -3
  39. package/dist/cjs/components/UiComponents.d.ts.map +1 -1
  40. package/dist/cjs/components/UiComponents.js +19 -5
  41. package/dist/cjs/hooks/useDashboard.d.ts +22 -3
  42. package/dist/cjs/hooks/useDashboard.d.ts.map +1 -1
  43. package/dist/cjs/hooks/useDashboard.js +201 -127
  44. package/dist/cjs/hooks/useExport.d.ts.map +1 -1
  45. package/dist/cjs/hooks/useExport.js +12 -5
  46. package/dist/cjs/hooks/useOnClickOutside.d.ts +1 -1
  47. package/dist/cjs/hooks/useOnClickOutside.d.ts.map +1 -1
  48. package/dist/cjs/hooks/useOnClickOutside.js +10 -6
  49. package/dist/cjs/index.d.ts +1 -1
  50. package/dist/cjs/index.d.ts.map +1 -1
  51. package/dist/cjs/index.js +2 -1
  52. package/dist/cjs/internals/ReportBuilder/PivotModal.js +3 -3
  53. package/dist/cjs/lib/utils.d.ts +1 -0
  54. package/dist/cjs/lib/utils.d.ts.map +1 -1
  55. package/dist/cjs/lib/utils.js +9 -1
  56. package/dist/cjs/models/Dashboard.d.ts +6 -1
  57. package/dist/cjs/models/Dashboard.d.ts.map +1 -1
  58. package/dist/cjs/utils/astFilterProcessing.js +3 -3
  59. package/dist/cjs/utils/columnProcessing.js +4 -4
  60. package/dist/cjs/utils/constants.d.ts +2 -1
  61. package/dist/cjs/utils/constants.d.ts.map +1 -1
  62. package/dist/cjs/utils/constants.js +3 -2
  63. package/dist/cjs/utils/dataFetcher.d.ts.map +1 -1
  64. package/dist/cjs/utils/dataFetcher.js +1 -2
  65. package/dist/cjs/utils/pivotConstructor.js +1 -1
  66. package/dist/esm/Chart.js +1 -1
  67. package/dist/esm/ChartBuilder.d.ts +1 -1
  68. package/dist/esm/ChartBuilder.d.ts.map +1 -1
  69. package/dist/esm/ChartBuilder.js +6 -22
  70. package/dist/esm/ChartEditor.d.ts +1 -1
  71. package/dist/esm/ChartEditor.d.ts.map +1 -1
  72. package/dist/esm/Context.d.ts +21 -6
  73. package/dist/esm/Context.d.ts.map +1 -1
  74. package/dist/esm/Context.js +193 -18
  75. package/dist/esm/Dashboard.d.ts.map +1 -1
  76. package/dist/esm/Dashboard.js +9 -9
  77. package/dist/esm/DateRangePicker/QuillDateRangePicker.d.ts.map +1 -1
  78. package/dist/esm/DateRangePicker/QuillDateRangePicker.js +7 -7
  79. package/dist/esm/DateRangePicker/dateRangePickerUtils.d.ts +0 -1
  80. package/dist/esm/DateRangePicker/dateRangePickerUtils.d.ts.map +1 -1
  81. package/dist/esm/DateRangePicker/dateRangePickerUtils.js +0 -22
  82. package/dist/esm/QuillProvider.d.ts.map +1 -1
  83. package/dist/esm/QuillProvider.js +2 -1
  84. package/dist/esm/ReportBuilder.d.ts +0 -1
  85. package/dist/esm/ReportBuilder.d.ts.map +1 -1
  86. package/dist/esm/ReportBuilder.js +3 -180
  87. package/dist/esm/SQLEditor.d.ts +1 -1
  88. package/dist/esm/SQLEditor.d.ts.map +1 -1
  89. package/dist/esm/SQLEditor.js +13 -9
  90. package/dist/esm/components/Dashboard/DashboardTemplate.js +2 -2
  91. package/dist/esm/components/Dashboard/DataLoader.js +1 -1
  92. package/dist/esm/components/QuillMultiSelect.d.ts.map +1 -1
  93. package/dist/esm/components/QuillMultiSelect.js +4 -3
  94. package/dist/esm/components/QuillMultiSelectWithCombo.d.ts.map +1 -1
  95. package/dist/esm/components/QuillMultiSelectWithCombo.js +4 -3
  96. package/dist/esm/components/QuillSelect.js +3 -3
  97. package/dist/esm/components/QuillSelectWithCombo.js +4 -4
  98. package/dist/esm/components/QuillTable.d.ts.map +1 -1
  99. package/dist/esm/components/QuillTable.js +46 -44
  100. package/dist/esm/components/ReportBuilder/FilterModal.js +10 -10
  101. package/dist/esm/components/ReportBuilder/FilterStack.js +1 -1
  102. package/dist/esm/components/ReportBuilder/convert.d.ts.map +1 -1
  103. package/dist/esm/components/ReportBuilder/convert.js +4 -3
  104. package/dist/esm/components/UiComponents.d.ts.map +1 -1
  105. package/dist/esm/components/UiComponents.js +19 -5
  106. package/dist/esm/hooks/useDashboard.d.ts +22 -3
  107. package/dist/esm/hooks/useDashboard.d.ts.map +1 -1
  108. package/dist/esm/hooks/useDashboard.js +200 -124
  109. package/dist/esm/hooks/useExport.d.ts.map +1 -1
  110. package/dist/esm/hooks/useExport.js +12 -5
  111. package/dist/esm/hooks/useOnClickOutside.d.ts +1 -1
  112. package/dist/esm/hooks/useOnClickOutside.d.ts.map +1 -1
  113. package/dist/esm/hooks/useOnClickOutside.js +10 -6
  114. package/dist/esm/index.d.ts +1 -1
  115. package/dist/esm/index.d.ts.map +1 -1
  116. package/dist/esm/index.js +1 -1
  117. package/dist/esm/internals/ReportBuilder/PivotModal.js +3 -3
  118. package/dist/esm/lib/utils.d.ts +1 -0
  119. package/dist/esm/lib/utils.d.ts.map +1 -1
  120. package/dist/esm/lib/utils.js +7 -0
  121. package/dist/esm/models/Dashboard.d.ts +6 -1
  122. package/dist/esm/models/Dashboard.d.ts.map +1 -1
  123. package/dist/esm/utils/astFilterProcessing.js +3 -3
  124. package/dist/esm/utils/columnProcessing.js +4 -4
  125. package/dist/esm/utils/constants.d.ts +2 -1
  126. package/dist/esm/utils/constants.d.ts.map +1 -1
  127. package/dist/esm/utils/constants.js +2 -1
  128. package/dist/esm/utils/dataFetcher.d.ts.map +1 -1
  129. package/dist/esm/utils/dataFetcher.js +1 -2
  130. package/dist/esm/utils/pivotConstructor.js +1 -1
  131. package/package.json +20 -7
  132. package/dist/cjs/components/BigModal/BigModal.d.ts +0 -15
  133. package/dist/cjs/components/BigModal/BigModal.d.ts.map +0 -1
  134. package/dist/cjs/components/BigModal/BigModal.js +0 -81
  135. package/dist/esm/components/BigModal/BigModal.d.ts +0 -15
  136. package/dist/esm/components/BigModal/BigModal.d.ts.map +0 -1
  137. package/dist/esm/components/BigModal/BigModal.js +0 -56
@@ -1,14 +1,10 @@
1
1
  "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
2
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.useDashboard = exports.useReports = void 0;
3
+ exports.useDashboards = exports.useDashboard = exports.useReports = void 0;
7
4
  const react_1 = require("react");
8
5
  const Context_1 = require("../Context");
9
- const dashboard_1 = require("../utils/dashboard");
10
6
  const dateRangePickerUtils_1 = require("../DateRangePicker/dateRangePickerUtils");
11
- const fast_deep_equal_1 = __importDefault(require("fast-deep-equal"));
7
+ const Filter_1 = require("../models/Filter");
12
8
  const useReports = () => {
13
9
  const [dashboard, dispatch] = (0, react_1.useContext)(Context_1.DashboardContext);
14
10
  const reloadReport = (id) => {
@@ -31,17 +27,19 @@ const useReports = () => {
31
27
  };
32
28
  exports.useReports = useReports;
33
29
  const useDashboard = (dashboardName) => {
34
- const [dashboardConfig, dashboardConfigContext] = (0, react_1.useContext)(Context_1.DashboardConfigContext);
30
+ const { dashboardConfig, loadDashboard } = (0, react_1.useContext)(Context_1.DashboardConfigContext);
35
31
  const { dashboardFilters, loadFiltersForDashboard } = (0, react_1.useContext)(Context_1.DashboardFiltersContext);
36
- const [dashboard] = (0, react_1.useContext)(Context_1.DashboardContext);
37
- const [isLoading, setIsLoading] = (0, react_1.useState)(true);
38
- const [error, setError] = (0, react_1.useState)(null);
39
- const [client, isClientLoading] = (0, react_1.useContext)(Context_1.ClientContext);
40
- const loading = (0, react_1.useMemo)(() => isLoading ||
32
+ //TODO: handle error states
33
+ // const [error, setError] = useState<any>(null);
34
+ const [, isClientLoading] = (0, react_1.useContext)(Context_1.ClientContext);
35
+ const loading = (0, react_1.useMemo)(() => !dashboardName ||
41
36
  isClientLoading ||
37
+ dashboardConfig[dashboardName]?.loading ||
42
38
  (dashboardConfig[dashboardName] &&
43
- !dashboardConfig[dashboardName]?.sections), [isLoading, isClientLoading, dashboardConfig, dashboardName]);
39
+ !dashboardConfig[dashboardName]?.config.sections), [isClientLoading, dashboardConfig, dashboardName]);
44
40
  const handleReload = async (overrideDashboardName, fetchFromServer = false, reportAction, overrideFilters) => {
41
+ if (!dashboardName)
42
+ return;
45
43
  if (overrideFilters) {
46
44
  // Pull the date filter out of the override filters, process it, and append it to the filters
47
45
  const dateFilter = overrideFilters.filters.find((f) => f.filterType === 'date_range');
@@ -52,7 +50,7 @@ const useDashboard = (dashboardName) => {
52
50
  ...dateFilter,
53
51
  dateField: [
54
52
  ...new Map(Object.values(dashboardConfig[overrideDashboardName ?? dashboardName]
55
- ?.sections ?? {})
53
+ ?.config.sections ?? {})
56
54
  .flat()
57
55
  .map((report) => {
58
56
  const key = JSON.stringify(report.dateField);
@@ -66,16 +64,29 @@ const useDashboard = (dashboardName) => {
66
64
  ], overrideFilters.editedFilterLabel);
67
65
  return;
68
66
  }
69
- const dashboard = await getDashboards(overrideDashboardName ?? dashboardName, fetchFromServer, reportAction);
67
+ const dashboard = await loadDashboard(overrideDashboardName ?? dashboardName, fetchFromServer, reportAction);
70
68
  if (!fetchFromServer &&
71
- Object.keys(dashboardFilters[dashboardName] ?? {}).length)
69
+ Object.keys(dashboardFilters[dashboardName] ?? {}).length) {
72
70
  return;
71
+ }
72
+ const comparisonRangeStart = dashboard?.dateFilter?.comparisonRange?.startDate ??
73
+ dateRangePickerUtils_1.COMPARISON_RANGE[dashboard?.dateFilter?.defaultComparisonRange ??
74
+ 'NO_COMPARISON']({
75
+ start: dateRangePickerUtils_1.PRIMARY_RANGE[dashboard?.dateFilter?.primaryRange?.value ?? 'LAST_30_DAYS']?.start,
76
+ end: dateRangePickerUtils_1.PRIMARY_RANGE[dashboard?.dateFilter?.primaryRange?.value ?? 'LAST_30_DAYS']?.end,
77
+ })?.start;
78
+ const comparisonRangeEnd = dashboard?.dateFilter?.comparisonRange?.endDate ??
79
+ dateRangePickerUtils_1.COMPARISON_RANGE[dashboard?.dateFilter?.defaultComparisonRange ??
80
+ 'NO_COMPARISON']({
81
+ start: dateRangePickerUtils_1.PRIMARY_RANGE[dashboard?.dateFilter?.primaryRange?.value ?? 'LAST_30_DAYS']?.start,
82
+ end: dateRangePickerUtils_1.PRIMARY_RANGE[dashboard?.dateFilter?.primaryRange?.value ?? 'LAST_30_DAYS']?.end,
83
+ })?.end;
73
84
  const dateFilter = dashboard?.dateFilter
74
85
  ? {
75
86
  ...dashboard?.dateFilter,
76
- startDate: dateRangePickerUtils_1.PRIMARY_RANGE[dashboard?.dateFilter.primaryRange?.value ?? 'LAST_30_DAYS']?.start,
77
- endDate: dateRangePickerUtils_1.PRIMARY_RANGE[dashboard?.dateFilter.primaryRange?.value ?? 'LAST_30_DAYS']?.end,
78
- filterType: 'date_range',
87
+ startDate: dateRangePickerUtils_1.PRIMARY_RANGE[dashboard?.dateFilter.primaryRange?.value ?? 'LAST_30_DAYS'].start,
88
+ endDate: dateRangePickerUtils_1.PRIMARY_RANGE[dashboard?.dateFilter.primaryRange?.value ?? 'LAST_30_DAYS'].end,
89
+ filterType: Filter_1.DashboardFilterType.Date,
79
90
  dateField: [
80
91
  ...new Map(Object.values(dashboard?.sections ?? {})
81
92
  .flat()
@@ -86,28 +97,15 @@ const useDashboard = (dashboardName) => {
86
97
  ],
87
98
  preset: dashboard?.dateFilter.primaryRange,
88
99
  dashboardName: overrideDashboardName ?? dashboardName,
89
- comparisonRange: dashboard?.dateFilter.comparison
100
+ comparisonRange: dashboard?.dateFilter.comparison &&
101
+ comparisonRangeStart &&
102
+ comparisonRangeEnd
90
103
  ? {
91
- startDate: dashboard?.dateFilter.comparsionRange?.startDate ??
92
- dateRangePickerUtils_1.COMPARISON_RANGE[dashboard?.dateFilter
93
- .defaultComparisonRange ??
94
- 'NO_COMPARISON']({
95
- start: dateRangePickerUtils_1.PRIMARY_RANGE[dashboard?.dateFilter.primaryRange?.value ??
96
- 'LAST_30_DAYS']?.start,
97
- end: dateRangePickerUtils_1.PRIMARY_RANGE[dashboard?.dateFilter.primaryRange?.value ??
98
- 'LAST_30_DAYS']?.end,
99
- })?.start,
100
- endDate: dashboard?.dateFilter.comparsionRange?.endDate ??
101
- dateRangePickerUtils_1.COMPARISON_RANGE[dashboard?.dateFilter
102
- .defaultComparisonRange ??
103
- 'NO_COMPARISON']({
104
- start: dateRangePickerUtils_1.PRIMARY_RANGE[dashboard?.dateFilter.primaryRange?.value ??
105
- 'LAST_30_DAYS']?.start,
106
- end: dateRangePickerUtils_1.PRIMARY_RANGE[dashboard?.dateFilter.primaryRange?.value ??
107
- 'LAST_30_DAYS']?.end,
108
- })?.end,
109
- value: dashboard?.dateFilter.comparsionRange?.value ??
110
- dashboard.dateFilter?.defaultComparisonRange,
104
+ startDate: comparisonRangeStart,
105
+ endDate: comparisonRangeEnd,
106
+ value: dashboard?.dateFilter.comparisonRange?.value ??
107
+ dashboard.dateFilter?.defaultComparisonRange ??
108
+ 'NO_COMPARISON',
111
109
  }
112
110
  : undefined,
113
111
  }
@@ -118,102 +116,178 @@ const useDashboard = (dashboardName) => {
118
116
  ...(dashboard?.filters ?? []),
119
117
  ]);
120
118
  };
121
- async function getDashboards(dashboardName, fetchFromServer = false, reportAction) {
122
- let curDashboardConfig = dashboardConfig[dashboardName];
123
- if (!fetchFromServer && curDashboardConfig?.sections) {
124
- if (reportAction?.action === 'delete') {
125
- curDashboardConfig = {
126
- ...curDashboardConfig,
127
- sections: Object.fromEntries(Object.entries(curDashboardConfig?.sections ?? {}).map(([sectionKey, reports]) => [
128
- sectionKey,
129
- reports.filter((report) => report.id !== reportAction.report.id),
130
- ])),
131
- };
132
- }
133
- else if (reportAction?.action === 'upsert') {
134
- const containsReport = Object.values(curDashboardConfig?.sections ?? {})
135
- .flat()
136
- .some((report) => report.id === reportAction?.report.id);
137
- curDashboardConfig = {
138
- ...curDashboardConfig,
139
- sections: Object.fromEntries(Object.entries(curDashboardConfig?.sections ?? {}).map(([sectionKey, reports]) => [
140
- sectionKey,
141
- containsReport
142
- ? reports.map((report) => {
143
- return {
144
- report,
145
- ...(reportAction?.report.id === report.id
146
- ? reportAction?.report
147
- : dashboard[report.id]),
148
- _id: report.id,
149
- id: report.id,
150
- };
151
- })
152
- : [
153
- ...(reports ?? []),
154
- {
155
- report: reportAction?.report,
156
- ...dashboard[reportAction?.report.id],
157
- id: reportAction?.report.id,
158
- _id: reportAction?.report.id,
159
- },
160
- ],
161
- ])),
162
- };
163
- }
164
- dashboardConfigContext({
165
- type: 'UPDATE_DASHBOARD',
166
- id: dashboardName,
167
- data: curDashboardConfig,
168
- });
169
- setIsLoading(false);
170
- return curDashboardConfig;
171
- }
172
- if (!fetchFromServer &&
173
- curDashboardConfig &&
174
- curDashboardConfig.newQueries) {
175
- setIsLoading(false);
176
- return curDashboardConfig;
177
- }
178
- if (!client || !client.publicKey || !client.organizationId) {
179
- return curDashboardConfig;
180
- }
181
- if (dashboardName === null || dashboardName === undefined)
182
- return curDashboardConfig;
183
- try {
184
- setIsLoading(true);
185
- const resp = await (0, dashboard_1.getDashboard)(dashboardName, client);
186
- // if dashboard has changed
187
- if (!(0, fast_deep_equal_1.default)(resp, curDashboardConfig)) {
188
- dashboardConfigContext({
189
- type: 'ADD_DASHBOARD',
190
- id: dashboardName,
191
- data: { ...resp },
192
- });
193
- }
194
- setError(null);
195
- return resp;
196
- }
197
- catch (error) {
198
- setError(error);
199
- console.error('Error fetching data:', error);
200
- }
201
- finally {
202
- setIsLoading(false);
203
- }
204
- }
205
119
  function isDashboardFilterLoading(filterName) {
120
+ if (!dashboardName)
121
+ return true;
206
122
  return dashboardFilters[dashboardName]?.[filterName]?.loading;
207
123
  }
208
124
  return {
209
- data: loading ? null : dashboardConfig[dashboardName],
210
- dashboardFilters: dashboardFilters[dashboardName] !== undefined
125
+ data: loading || !dashboardName
126
+ ? null
127
+ : (dashboardConfig[dashboardName]?.config ?? null),
128
+ dashboardFilters: dashboardName && dashboardFilters[dashboardName] !== undefined
211
129
  ? Object.values(dashboardFilters[dashboardName] ?? {}).map((f) => f.filter)
212
130
  : null,
213
131
  isLoading: loading,
214
132
  isDashboardFilterLoading,
215
- error,
216
133
  reload: handleReload,
217
134
  };
218
135
  };
219
136
  exports.useDashboard = useDashboard;
137
+ const useDashboards = () => {
138
+ const { dashboardConfig, dashboardConfigDispatch } = (0, react_1.useContext)(Context_1.DashboardConfigContext);
139
+ const { loadFiltersForDashboard, dispatch: dashboardFiltersDispatch } = (0, react_1.useContext)(Context_1.DashboardFiltersContext);
140
+ const [client, isLoading] = (0, react_1.useContext)(Context_1.ClientContext);
141
+ const dashboards = (0, react_1.useMemo)(() => {
142
+ return Object.values(dashboardConfig).map((dashboard) => {
143
+ return {
144
+ name: dashboard.config.name,
145
+ id: dashboard.config.dashboardId,
146
+ reports: Object.values(dashboard.config.sections ?? {}).flat(),
147
+ };
148
+ });
149
+ }, [dashboardConfig]);
150
+ const createDashboard = async ({ name, filters, dateFilter, }) => {
151
+ if (!client)
152
+ return;
153
+ dashboardConfigDispatch({
154
+ type: 'UPDATE_DASHBOARD',
155
+ id: name,
156
+ data: {
157
+ config: {
158
+ dashboardId: name,
159
+ name,
160
+ filters,
161
+ dateFilter,
162
+ },
163
+ loading: true,
164
+ },
165
+ });
166
+ const body = {
167
+ newDashboardName: name.trim(),
168
+ filters,
169
+ dateFilter,
170
+ name: name.trim(),
171
+ task: 'edit-dashboard',
172
+ clientId: client.clientId,
173
+ };
174
+ try {
175
+ const response = await fetch(client.queryEndpoint, {
176
+ method: 'POST',
177
+ headers: {
178
+ ...client.queryHeaders,
179
+ 'Content-Type': 'application/json',
180
+ },
181
+ body: JSON.stringify({ metadata: body }),
182
+ });
183
+ const updated = await response.json();
184
+ dashboardConfigDispatch({
185
+ type: 'UPDATE_DASHBOARD',
186
+ id: name,
187
+ data: { config: updated.data.dashboard, loading: false },
188
+ });
189
+ }
190
+ catch (e) {
191
+ console.error(e);
192
+ }
193
+ };
194
+ const updateDashboard = async (name, { newName, filters, dateFilter, }) => {
195
+ if (!client)
196
+ return;
197
+ const dashboard = dashboardConfig[name]?.config;
198
+ dashboardConfigDispatch({
199
+ type: 'DELETE_DASHBOARD',
200
+ id: name,
201
+ });
202
+ dashboardFiltersDispatch({
203
+ type: 'DELETE_DASHBOARD_FILTERS',
204
+ dashboardName: name,
205
+ });
206
+ const body = {
207
+ newDashboardName: newName.trim(),
208
+ filters,
209
+ dateFilter,
210
+ name: name.trim(),
211
+ task: 'edit-dashboard',
212
+ clientId: client.clientId,
213
+ };
214
+ try {
215
+ const response = await fetch(client.queryEndpoint, {
216
+ method: 'POST',
217
+ headers: {
218
+ ...client.queryHeaders,
219
+ 'Content-Type': 'application/json',
220
+ },
221
+ body: JSON.stringify({ metadata: body }),
222
+ });
223
+ const updated = await response.json();
224
+ dashboardConfigDispatch({
225
+ type: 'ADD_DASHBOARD',
226
+ id: updated.data.dashboard.name,
227
+ data: {
228
+ ...dashboard,
229
+ ...updated.data.dashboard,
230
+ },
231
+ });
232
+ const updatedDateFilter = updated.data.dashboard.dateFilter
233
+ ? {
234
+ ...updated.data.dashboard.dateFilter,
235
+ dashboardName: updated.data.dashboard.name,
236
+ preset: updated.data.dashboard.dateFilter.primaryRange,
237
+ filterType: Filter_1.DashboardFilterType.Date,
238
+ dateField: [
239
+ ...new Map(Object.values(dashboardConfig[updated.data.dashboard.name]?.config
240
+ .sections ?? {})
241
+ .flat()
242
+ .map((report) => {
243
+ const key = JSON.stringify(report.dateField);
244
+ return [key, report.dateField];
245
+ })).values(),
246
+ ],
247
+ startDate: dateRangePickerUtils_1.PRIMARY_RANGE[updated.data.dashboard.dateFilter.primaryRange?.value ??
248
+ 'LAST_30_DAYS'].start,
249
+ endDate: dateRangePickerUtils_1.PRIMARY_RANGE[updated.data.dashboard.dateFilter.primaryRange?.value ??
250
+ 'LAST_30_DAYS'].end,
251
+ }
252
+ : undefined;
253
+ loadFiltersForDashboard(updated.data.dashboard.name, [
254
+ ...(updatedDateFilter ? [updatedDateFilter] : []),
255
+ ...(updated.data.dashboard.filters ?? []),
256
+ ]);
257
+ }
258
+ catch (e) {
259
+ console.error(e);
260
+ }
261
+ };
262
+ const deleteDashboard = async (name) => {
263
+ if (!client)
264
+ return;
265
+ await fetch(client.queryEndpoint, {
266
+ method: 'POST',
267
+ headers: {
268
+ ...client.queryHeaders,
269
+ 'Content-Type': 'application/json',
270
+ },
271
+ body: JSON.stringify({
272
+ metadata: {
273
+ task: 'delete-dashboard',
274
+ clientId: client.clientId,
275
+ databaseType: client.databaseType,
276
+ name,
277
+ },
278
+ }),
279
+ });
280
+ dashboardConfigDispatch({
281
+ type: 'DELETE_DASHBOARD',
282
+ id: name,
283
+ });
284
+ };
285
+ return {
286
+ dashboards: isLoading ? null : dashboards,
287
+ isLoading,
288
+ createDashboard,
289
+ updateDashboard,
290
+ deleteDashboard,
291
+ };
292
+ };
293
+ exports.useDashboards = useDashboards;
@@ -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"}
@@ -57,11 +57,18 @@ sectionField, } = {}) => {
57
57
  const { dashboardFilters } = (0, react_1.useContext)(Context_1.DashboardFiltersContext);
58
58
  const [dashboard] = (0, react_1.useContext)(Context_1.DashboardContext);
59
59
  const specificDashboardFilters = (0, react_1.useMemo)(() => {
60
- //FIXME: Pretty sure this won't work with multiple dashboards
61
- Object.values(dashboardFilters).map((dashboardFilter) => {
60
+ if (!reportId) {
61
+ return [];
62
+ }
63
+ const dashboardName = dashboard[reportId]?.dashboardName;
64
+ if (!dashboardName || !dashboardFilters[dashboardName]) {
65
+ return [];
66
+ }
67
+ // @ts-ignore
68
+ return Object.values(dashboardFilters[dashboardName]).map((dashboardFilter) => {
62
69
  return dashboardFilter.filter;
63
70
  });
64
- }, [dashboardFilters]);
71
+ }, [dashboardFilters, dashboard, reportId]);
65
72
  // const [theme] = useContext(ThemeContext);
66
73
  const [client] = (0, react_1.useContext)(Context_1.ClientContext);
67
74
  const [isLoading, setIsLoading] = (0, react_1.useState)(false);
@@ -76,8 +83,8 @@ sectionField, } = {}) => {
76
83
  setIsLoading(true);
77
84
  const resp = await getExportData(client, specificDashboardFilters, reportId);
78
85
  (0, csv_1.downloadCSV)({
79
- rows: resp.rows,
80
- fields: resp.columns,
86
+ rows: resp.pivot && resp.pivotRows ? resp.pivotRows : resp.rows,
87
+ fields: resp.pivot && resp.pivotColumns ? resp.pivotColumns : resp.columns,
81
88
  name: resp.name,
82
89
  });
83
90
  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,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const react_1 = require("react");
4
- const useOnClickOutside = (ref, handler) => {
4
+ const useOnClickOutside = (ref, handler, listening) => {
5
5
  (0, react_1.useEffect)(() => {
6
6
  const listener = (event) => {
7
7
  if (!ref.current || ref.current.contains(event.target)) {
@@ -9,14 +9,18 @@ const useOnClickOutside = (ref, handler) => {
9
9
  }
10
10
  handler(event);
11
11
  };
12
- // document.addEventListener('click', listener);
13
- document.addEventListener('mousedown', listener);
14
- document.addEventListener('touchstart', listener);
12
+ if (listening !== false) {
13
+ document.addEventListener('mousedown', listener);
14
+ document.addEventListener('touchstart', listener);
15
+ }
16
+ else {
17
+ document.removeEventListener('mousedown', listener);
18
+ document.removeEventListener('touchstart', listener);
19
+ }
15
20
  return () => {
16
- // document.removeEventListener('click', listener);
17
21
  document.removeEventListener('mousedown', listener);
18
22
  document.removeEventListener('touchstart', listener);
19
23
  };
20
- }, [ref, handler]);
24
+ }, [ref, handler, listening]);
21
25
  };
22
26
  exports.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/cjs/index.js CHANGED
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.Calculation = exports.ThemeContext = exports.downloadCSV = exports.useVirtualTables = exports.useAskQuill = exports.useMemoizedRows = exports.useExport = exports.usePivot = exports.useQuill = exports.useReports = exports.useDashboard = exports.format = exports.ChartEditor = exports.ReportBuilder = exports.SchemaListComponent = exports.SQLEditor = exports.Table = exports.Chart = exports.QuillProvider = exports.Dashboard = void 0;
6
+ exports.Calculation = exports.ThemeContext = exports.downloadCSV = exports.useVirtualTables = exports.useAskQuill = exports.useMemoizedRows = exports.useExport = exports.usePivot = exports.useQuill = exports.useDashboards = exports.useReports = exports.useDashboard = exports.format = exports.ChartEditor = exports.ReportBuilder = exports.SchemaListComponent = exports.SQLEditor = exports.Table = exports.Chart = exports.QuillProvider = exports.Dashboard = void 0;
7
7
  // src/index.ts
8
8
  var Dashboard_1 = require("./Dashboard");
9
9
  Object.defineProperty(exports, "Dashboard", { enumerable: true, get: function () { return __importDefault(Dashboard_1).default; } });
@@ -25,6 +25,7 @@ Object.defineProperty(exports, "format", { enumerable: true, get: function () {
25
25
  var useDashboard_1 = require("./hooks/useDashboard");
26
26
  Object.defineProperty(exports, "useDashboard", { enumerable: true, get: function () { return useDashboard_1.useDashboard; } });
27
27
  Object.defineProperty(exports, "useReports", { enumerable: true, get: function () { return useDashboard_1.useReports; } });
28
+ Object.defineProperty(exports, "useDashboards", { enumerable: true, get: function () { return useDashboard_1.useDashboards; } });
28
29
  var useQuill_1 = require("./hooks/useQuill");
29
30
  Object.defineProperty(exports, "useQuill", { enumerable: true, get: function () { return useQuill_1.useQuill; } });
30
31
  Object.defineProperty(exports, "usePivot", { enumerable: true, get: function () { return useQuill_1.usePivot; } });
@@ -928,11 +928,11 @@ function generatePivotTableInMemory(pivot, data, dateRange, isComparison, rowLim
928
928
  let value;
929
929
  const nextRowValue = isDateField(pivot.rowFieldType || '')
930
930
  ? // @ts-ignore
931
- uniqueRows[rowIndex + 1] ?? (0, date_fns_1.endOfDay)(rowDateRange.end)
931
+ (uniqueRows[rowIndex + 1] ?? (0, date_fns_1.endOfDay)(rowDateRange.end))
932
932
  : null;
933
933
  const compRowValue = compUniqueRows[rowIndex];
934
934
  const compNextRowValue = isDateField(pivot.rowFieldType || '')
935
- ? compUniqueRows[rowIndex + 1] ?? (0, date_fns_1.endOfDay)(compRowDateRange.end)
935
+ ? (compUniqueRows[rowIndex + 1] ?? (0, date_fns_1.endOfDay)(compRowDateRange.end))
936
936
  : null;
937
937
  if (pivot.columnField) {
938
938
  const columnDateRange = getDateRange(dateRange, pivot.columnField, data);
@@ -1150,7 +1150,7 @@ function generatePivotTableInMemory(pivot, data, dateRange, isComparison, rowLim
1150
1150
  index === 1
1151
1151
  ? `comparison Count`
1152
1152
  : isDateField(pivot.columnFieldType || '')
1153
- ? COL_DATE_MAP[getDateString(column, dateRange, dateBucket)] ?? 'comparison'
1153
+ ? (COL_DATE_MAP[getDateString(column, dateRange, dateBucket)] ?? 'comparison')
1154
1154
  : `comparison ${(0, textProcessing_1.snakeAndCamelCaseToTitleCase)(columnName)}`,
1155
1155
  field: `comparison_${columnName}`,
1156
1156
  };
@@ -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"}
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.mergeRefs = exports.stringEndsWithNumber = exports.stringIsNumeric = exports.isValueInArray = exports.removeValueFromArray = exports.sumNumericArray = exports.defaultValueFormatter = void 0;
3
+ exports.createDebounce = exports.mergeRefs = exports.stringEndsWithNumber = exports.stringIsNumeric = exports.isValueInArray = exports.removeValueFromArray = exports.sumNumericArray = exports.defaultValueFormatter = void 0;
4
4
  const defaultValueFormatter = (value) => value.toString();
5
5
  exports.defaultValueFormatter = defaultValueFormatter;
6
6
  const sumNumericArray = (arr) => arr.reduce((prefixSum, num) => prefixSum + num, 0);
@@ -43,3 +43,11 @@ function mergeRefs(refs) {
43
43
  };
44
44
  }
45
45
  exports.mergeRefs = mergeRefs;
46
+ const createDebounce = (func, delay) => {
47
+ let timeoutId;
48
+ return (...args) => {
49
+ clearTimeout(timeoutId);
50
+ timeoutId = setTimeout(() => func(...args), delay);
51
+ };
52
+ };
53
+ exports.createDebounce = createDebounce;
@@ -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"}
@@ -284,7 +284,7 @@ const queryPatterns = [
284
284
  WHERE transaction_date >= DATEADD(day, -90, GETDATE())
285
285
  `,
286
286
  value: function (astWhere) {
287
- return -astWhere.right?.args?.value[1]?.value ?? null;
287
+ return -astWhere.right?.args?.value[1]?.value;
288
288
  },
289
289
  unit: function (astWhere) {
290
290
  return astWhere.right?.args?.value[0]?.column?.expr?.value ?? null;
@@ -393,7 +393,7 @@ const queryPatterns = [
393
393
  WHERE transaction_date >= DATEADD(day, -90, CURRENT_DATE)
394
394
  `,
395
395
  value: function (astWhere) {
396
- return -astWhere.right?.args?.value[1]?.value ?? null;
396
+ return -astWhere.right?.args?.value[1]?.value;
397
397
  },
398
398
  unit: function (astWhere) {
399
399
  return astWhere.right?.args?.value[0]?.column?.expr?.value ?? null;
@@ -600,7 +600,7 @@ const queryPatterns = [
600
600
  WHERE transaction_date >= DATEADD(DAY, -90, CURRENT_DATE())
601
601
  `,
602
602
  value: function (astWhere) {
603
- return -astWhere.right?.args?.value[1]?.value ?? null;
603
+ return -astWhere.right?.args?.value[1]?.value;
604
604
  },
605
605
  unit: function (astWhere) {
606
606
  return astWhere.right?.args?.value[0]?.column.toLowerCase() ?? null;
@@ -136,10 +136,10 @@ function convertPostgresColumn(field) {
136
136
  jsType = 'string';
137
137
  }
138
138
  return {
139
- label: 'field' in field
139
+ label: ('field' in field
140
140
  ? (0, textProcessing_1.snakeAndCamelCaseToTitleCase)(field.field)
141
- : (0, textProcessing_1.snakeAndCamelCaseToTitleCase)(field.name),
142
- field: 'field' in field ? field.field : field.name,
141
+ : (0, textProcessing_1.snakeAndCamelCaseToTitleCase)(field.name)) ?? '',
142
+ field: ('field' in field ? field.field : field.name) ?? '',
143
143
  format,
144
144
  fieldType,
145
145
  dataTypeID: field.dataTypeID,
@@ -324,7 +324,7 @@ const getYAxisFields = (report) => {
324
324
  }
325
325
  else {
326
326
  if (curDateFilter?.comparison &&
327
- curDateFilter.comparisonRange.value !== 'NO_COMPARISON') {
327
+ curDateFilter.comparisonRange?.value !== 'NO_COMPARISON') {
328
328
  const comparisonYAxisFields = report.yAxisFields?.map((field) => {
329
329
  return {
330
330
  ...field,