@quillsql/react 2.10.17 → 2.10.19

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 (67) hide show
  1. package/dist/cjs/ChartEditor.d.ts.map +1 -1
  2. package/dist/cjs/Dashboard.d.ts +24 -16
  3. package/dist/cjs/Dashboard.d.ts.map +1 -1
  4. package/dist/cjs/Dashboard.js +88 -478
  5. package/dist/cjs/DateRangePicker/QuillDateRangePicker.d.ts +3 -0
  6. package/dist/cjs/DateRangePicker/QuillDateRangePicker.d.ts.map +1 -0
  7. package/dist/cjs/DateRangePicker/QuillDateRangePicker.js +260 -0
  8. package/dist/cjs/DateRangePicker/dateRangePickerUtils.d.ts +20 -1
  9. package/dist/cjs/DateRangePicker/dateRangePickerUtils.d.ts.map +1 -1
  10. package/dist/cjs/DateRangePicker/dateRangePickerUtils.js +93 -4
  11. package/dist/cjs/QuillProvider.d.ts +1 -0
  12. package/dist/cjs/QuillProvider.d.ts.map +1 -1
  13. package/dist/cjs/QuillProvider.js +1 -0
  14. package/dist/cjs/ReportBuilder.d.ts.map +1 -1
  15. package/dist/cjs/ReportBuilder.js +1 -2
  16. package/dist/cjs/components/Dashboard/ChartComponent.js +1 -1
  17. package/dist/cjs/components/Dashboard/DashboardSection.js +1 -1
  18. package/dist/cjs/components/Dashboard/MetricComponent.js +1 -1
  19. package/dist/cjs/components/Dashboard/TableComponent.js +1 -1
  20. package/dist/cjs/components/QuillSelect.d.ts +3 -0
  21. package/dist/cjs/components/QuillSelect.d.ts.map +1 -0
  22. package/dist/cjs/components/QuillSelect.js +128 -0
  23. package/dist/cjs/components/UiComponents.d.ts +1 -0
  24. package/dist/cjs/components/UiComponents.d.ts.map +1 -1
  25. package/dist/cjs/index.d.ts +0 -1
  26. package/dist/cjs/index.d.ts.map +1 -1
  27. package/dist/cjs/index.js +1 -3
  28. package/dist/cjs/internals/ReportBuilder/PivotModal.d.ts.map +1 -1
  29. package/dist/cjs/internals/ReportBuilder/PivotModal.js +9 -0
  30. package/dist/cjs/utils/aggregate.js +2 -2
  31. package/dist/esm/ChartEditor.d.ts.map +1 -1
  32. package/dist/esm/Dashboard.d.ts +24 -16
  33. package/dist/esm/Dashboard.d.ts.map +1 -1
  34. package/dist/esm/Dashboard.js +86 -475
  35. package/dist/esm/DateRangePicker/QuillDateRangePicker.d.ts +3 -0
  36. package/dist/esm/DateRangePicker/QuillDateRangePicker.d.ts.map +1 -0
  37. package/dist/esm/DateRangePicker/QuillDateRangePicker.js +256 -0
  38. package/dist/esm/DateRangePicker/dateRangePickerUtils.d.ts +20 -1
  39. package/dist/esm/DateRangePicker/dateRangePickerUtils.d.ts.map +1 -1
  40. package/dist/esm/DateRangePicker/dateRangePickerUtils.js +91 -3
  41. package/dist/esm/QuillProvider.d.ts +1 -0
  42. package/dist/esm/QuillProvider.d.ts.map +1 -1
  43. package/dist/esm/QuillProvider.js +1 -0
  44. package/dist/esm/ReportBuilder.d.ts.map +1 -1
  45. package/dist/esm/ReportBuilder.js +0 -1
  46. package/dist/esm/components/Dashboard/ChartComponent.js +1 -1
  47. package/dist/esm/components/Dashboard/DashboardSection.js +1 -1
  48. package/dist/esm/components/Dashboard/MetricComponent.js +1 -1
  49. package/dist/esm/components/Dashboard/TableComponent.js +1 -1
  50. package/dist/esm/components/QuillSelect.d.ts +3 -0
  51. package/dist/esm/components/QuillSelect.d.ts.map +1 -0
  52. package/dist/esm/components/QuillSelect.js +124 -0
  53. package/dist/esm/components/UiComponents.d.ts +1 -0
  54. package/dist/esm/components/UiComponents.d.ts.map +1 -1
  55. package/dist/esm/index.d.ts +0 -1
  56. package/dist/esm/index.d.ts.map +1 -1
  57. package/dist/esm/index.js +0 -1
  58. package/dist/esm/internals/ReportBuilder/PivotModal.d.ts.map +1 -1
  59. package/dist/esm/internals/ReportBuilder/PivotModal.js +10 -1
  60. package/dist/esm/utils/aggregate.js +1 -1
  61. package/package.json +1 -1
  62. package/dist/cjs/AddToDashboardModal.d.ts +0 -82
  63. package/dist/cjs/AddToDashboardModal.d.ts.map +0 -1
  64. package/dist/cjs/AddToDashboardModal.js +0 -1469
  65. package/dist/esm/AddToDashboardModal.d.ts +0 -82
  66. package/dist/esm/AddToDashboardModal.d.ts.map +0 -1
  67. package/dist/esm/AddToDashboardModal.js +0 -1435
@@ -3,16 +3,13 @@ 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.QuillDateRangePicker = exports.DashboardFilter = exports.PRIMARY_OPTIONS = exports.COMPARISON_OPTIONS = void 0;
6
+ exports.DashboardFilter = void 0;
7
7
  const jsx_runtime_1 = require("react/jsx-runtime");
8
8
  const react_1 = require("react");
9
9
  const Chart_1 = __importDefault(require("./Chart"));
10
10
  const dateRangePickerUtils_1 = require("./DateRangePicker/dateRangePickerUtils");
11
11
  const Context_1 = require("./Context");
12
- const date_fns_1 = require("date-fns");
13
12
  const assets_1 = require("./assets");
14
- const hooks_1 = require("./hooks");
15
- const locale_1 = require("date-fns/locale");
16
13
  const useDashboard_1 = require("./hooks/useDashboard");
17
14
  const crypto_1 = require("./utils/crypto");
18
15
  const DashboardSectionContainer_1 = __importDefault(require("./components/Dashboard/DashboardSectionContainer"));
@@ -22,71 +19,21 @@ const ChartComponent_1 = __importDefault(require("./components/Dashboard/ChartCo
22
19
  const DashboardSection_1 = __importDefault(require("./components/Dashboard/DashboardSection"));
23
20
  const styles_1 = require("./utils/styles");
24
21
  const dashboard_1 = require("./utils/dashboard");
22
+ const QuillDateRangePicker_1 = require("./DateRangePicker/QuillDateRangePicker");
25
23
  const DataLoader_1 = __importDefault(require("./components/Dashboard/DataLoader"));
26
- exports.COMPARISON_OPTIONS = [
27
- {
28
- value: 'PREV_PERIOD',
29
- text: 'Previous Period',
30
- },
31
- {
32
- value: 'PREV_7_DAYS',
33
- text: 'Previous 7 days',
34
- },
35
- {
36
- value: 'PREV_30_DAYS',
37
- text: 'Previous 30 days',
38
- },
39
- {
40
- value: 'PREV_90_DAYS',
41
- text: 'Previous 90 days',
42
- },
43
- {
44
- value: 'NO_COMPARISON',
45
- text: 'No comparison',
46
- },
47
- ];
48
- exports.PRIMARY_OPTIONS = [
49
- { value: 'THIS_WEEK', text: 'This Week' },
50
- { value: 'THIS_MONTH', text: 'This Month' },
51
- { value: 'THIS_YEAR', text: 'This year' },
52
- { value: 'LAST_7_DAYS', text: 'Last 7 days' },
53
- { value: 'LAST_30_DAYS', text: 'Last 30 days' },
54
- { value: 'LAST_90_DAYS', text: 'Last 90 days' },
55
- { value: 'LAST_6_MONTHS', text: 'Last 6 months' },
56
- { value: 'ALL_TIME', text: 'All time' },
57
- ];
58
- const FILTER_CODE_MAP = {
59
- wk: 'This week',
60
- m: 'This month',
61
- y: 'This year',
62
- w: 'Last 7 days',
63
- t: 'Last 30 days',
64
- '90d': 'Last 90 days',
65
- '6m': 'Last 6 months',
66
- at: 'All time',
67
- };
24
+ const QuillSelect_1 = require("./components/QuillSelect");
68
25
  function DashboardFilter({ filter, onChangeFilter, SelectComponent, DateRangePickerComponent, theme, }) {
69
26
  const { comparisonRange, setComparisonRange } = (0, Context_1.useComparisonRange)();
70
27
  const { setDateFilter } = (0, Context_1.useDateFilter)();
71
28
  const [filterValue, setFilterValue] = (0, react_1.useState)(null);
72
29
  (0, react_1.useEffect)(() => {
73
- if (filter.filterType === 'date_range' &&
74
- !filter.selectedValue &&
75
- !filterValue) {
76
- setFilterValue([filter.startDate, filter.endDate, null]);
77
- }
78
- else if (filter.filterType === 'date_range' && !filterValue) {
79
- setFilterValue(filter.selectedValue);
80
- }
81
- else if (filter.filterType === 'string') {
30
+ if (filter.filterType === 'string') {
82
31
  setFilterValue(filter.selectedValue);
83
32
  }
84
33
  if (filter.filterType == 'date_range') {
85
- setDateFilter(filter.selectedValue
86
- ? FILTER_CODE_MAP[filter.selectedValue[2]]
87
- : null);
34
+ setDateFilter(filter.preset.label);
88
35
  if (filter?.comparisonRange?.value) {
89
- const newComparisonRange = exports.COMPARISON_OPTIONS.find((option) => {
36
+ const newComparisonRange = dateRangePickerUtils_1.COMPARISON_OPTIONS.find((option) => {
90
37
  return option.value === filter.comparisonRange.value;
91
38
  });
92
39
  setComparisonRange(newComparisonRange);
@@ -97,7 +44,7 @@ function DashboardFilter({ filter, onChangeFilter, SelectComponent, DateRangePic
97
44
  }
98
45
  }, [filter]);
99
46
  if (filter.filterType === 'string') {
100
- return ((0, jsx_runtime_1.jsx)(SelectComponent, { label: filter.label, value: filterValue, onChange: (e) => {
47
+ return ((0, jsx_runtime_1.jsx)(QuillSelect_1.QuillSelectComponent, { theme: theme, label: filter.label, value: filterValue, onChange: (e) => {
101
48
  onChangeFilter(filter, e);
102
49
  }, options: [
103
50
  ...filter.options.map((elem) => {
@@ -113,31 +60,16 @@ function DashboardFilter({ filter, onChangeFilter, SelectComponent, DateRangePic
113
60
  display: 'flex',
114
61
  flexDirection: 'row',
115
62
  alignItems: 'flex-end',
116
- }, children: [(0, jsx_runtime_1.jsx)(DateRangePickerComponent, { dateRange: filterValue ? [filterValue[0], filterValue[1]] : [null, null], label: filter.label,
117
- // value={filterValue}
118
- onChangeDateRange: (dateRange) => {
119
- onChangeFilter(filter, [dateRange[0], dateRange[1], null]);
120
- setFilterValue([dateRange[0], dateRange[1], null]);
121
- }, preset: filterValue && filterValue.length === 3 && filterValue[2] !== null
122
- ? filterValue[2]
123
- : '', onChangePreset: (preset) => {
124
- if (typeof preset === 'string') {
125
- const fullPreset = (0, dateRangePickerUtils_1.getRangeFromPreset)(preset);
126
- onChangeFilter(filter, fullPreset);
127
- setFilterValue(fullPreset);
128
- return;
129
- }
130
- onChangeFilter(filter, [
131
- preset?.startDate || null,
132
- new Date(),
133
- preset?.value || '',
134
- ]);
135
- setFilterValue([
136
- preset?.startDate || null,
137
- new Date(),
138
- preset?.value || '',
139
- ]);
140
- }, presetOptions: dateRangePickerUtils_1.defaultOptions }), comparisonRange && ((0, jsx_runtime_1.jsx)("div", { children: (0, jsx_runtime_1.jsxs)("div", { style: {
63
+ }, children: [(0, jsx_runtime_1.jsx)(DateRangePickerComponent, { label: filter.label, dateRange: { startDate: filter.startDate, endDate: filter.endDate }, preset: filter.preset.label, onChangeDateRange: (value) => {
64
+ onChangeFilter(filter, {
65
+ startDate: value.startDate,
66
+ endDate: value.endDate,
67
+ });
68
+ }, onChangePreset: (value) => {
69
+ onChangeFilter(filter, { preset: value });
70
+ }, presetOptions: filter.options.map((option) => {
71
+ return { label: option.label, value: option.label };
72
+ }) }), comparisonRange && ((0, jsx_runtime_1.jsx)("div", { children: (0, jsx_runtime_1.jsxs)("div", { style: {
141
73
  display: 'flex',
142
74
  flexDirection: 'row',
143
75
  alignItems: 'center',
@@ -146,11 +78,12 @@ function DashboardFilter({ filter, onChangeFilter, SelectComponent, DateRangePic
146
78
  paddingRight: 12,
147
79
  color: theme?.secondaryTextColor,
148
80
  fontFamily: theme?.fontFamily,
149
- }, children: "compared to" }), (0, jsx_runtime_1.jsx)(SelectComponent, { value: comparisonRange.value, onChange: (e) => {
150
- onChangeFilter(filter, null, exports.COMPARISON_OPTIONS.find((option) => {
81
+ fontSize: 14,
82
+ }, children: "compared to" }), (0, jsx_runtime_1.jsx)(QuillSelect_1.QuillSelectComponent, { theme: theme, value: comparisonRange.value, onChange: (e) => {
83
+ onChangeFilter(filter, null, dateRangePickerUtils_1.COMPARISON_OPTIONS.find((option) => {
151
84
  return option.value === e;
152
85
  }));
153
- }, options: exports.COMPARISON_OPTIONS.map((compareOption) => {
86
+ }, options: dateRangePickerUtils_1.COMPARISON_OPTIONS.map((compareOption) => {
154
87
  return {
155
88
  value: compareOption.value,
156
89
  label: compareOption.text,
@@ -160,32 +93,6 @@ function DashboardFilter({ filter, onChangeFilter, SelectComponent, DateRangePic
160
93
  return null;
161
94
  }
162
95
  exports.DashboardFilter = DashboardFilter;
163
- const options = [
164
- {
165
- date_range: [(0, date_fns_1.startOfWeek)((0, date_fns_1.startOfToday)()), (0, date_fns_1.startOfToday)(), 'wk'],
166
- },
167
- {
168
- date_range: [(0, date_fns_1.sub)((0, date_fns_1.startOfToday)(), { days: 90 }), (0, date_fns_1.startOfToday)(), '90d'],
169
- },
170
- {
171
- date_range: [(0, date_fns_1.sub)((0, date_fns_1.startOfToday)(), { days: 30 }), (0, date_fns_1.startOfToday)(), 't'],
172
- },
173
- {
174
- date_range: [(0, date_fns_1.sub)((0, date_fns_1.startOfToday)(), { years: 100 }), (0, date_fns_1.startOfToday)(), 'at'],
175
- },
176
- {
177
- date_range: [(0, date_fns_1.startOfYear)((0, date_fns_1.startOfToday)()), (0, date_fns_1.startOfToday)(), 'y'],
178
- },
179
- {
180
- date_range: [(0, date_fns_1.startOfMonth)((0, date_fns_1.startOfToday)()), (0, date_fns_1.startOfToday)(), 'm'],
181
- },
182
- {
183
- date_range: [(0, date_fns_1.sub)((0, date_fns_1.startOfToday)(), { days: 7 }), (0, date_fns_1.startOfToday)(), 'w'],
184
- },
185
- {
186
- date_range: [(0, date_fns_1.sub)((0, date_fns_1.startOfToday)(), { months: 6 }), (0, date_fns_1.startOfToday)(), '6m'],
187
- },
188
- ];
189
96
  const QuillDropdownComponent = ({ onChange, value, label, options, }) => {
190
97
  const [theme] = (0, react_1.useContext)(Context_1.ThemeContext);
191
98
  const handleOnChange = (0, react_1.useCallback)((event) => {
@@ -231,320 +138,14 @@ const QuillDropdownComponent = ({ onChange, value, label, options, }) => {
231
138
  color: theme?.secondaryTextColor,
232
139
  }, "aria-hidden": "true" })] })] }));
233
140
  };
234
- const isBetween = (date, startDate, endDate) => {
235
- return (0, date_fns_1.isAfter)(date, startDate) && (0, date_fns_1.isBefore)(date, endDate);
236
- };
237
- function Calendar({ anchorDate, onClickDate, theme, localStartDate, localEndDate, }) {
238
- const firstDayOfDisplayedMonth = (0, date_fns_1.startOfMonth)(anchorDate);
239
- const lastDayOfDisplayedMonth = (0, date_fns_1.endOfMonth)(anchorDate);
240
- const weekdays = (0, dateRangePickerUtils_1.getWeekdays)(locale_1.enUS).map((dayName) => (0, dateRangePickerUtils_1.capitalize)(dayName, locale_1.enUS));
241
- const displayedDates = (0, date_fns_1.eachDayOfInterval)({
242
- start: (0, date_fns_1.isSunday)(firstDayOfDisplayedMonth)
243
- ? firstDayOfDisplayedMonth
244
- : (0, date_fns_1.previousSunday)(firstDayOfDisplayedMonth),
245
- end: (0, date_fns_1.isSaturday)(lastDayOfDisplayedMonth)
246
- ? lastDayOfDisplayedMonth
247
- : (0, date_fns_1.nextSaturday)(lastDayOfDisplayedMonth),
248
- });
249
- const displayedTitle = (0, dateRangePickerUtils_1.capitalize)((0, date_fns_1.format)(firstDayOfDisplayedMonth, 'MMMM yyyy', { locale: locale_1.enUS }), locale_1.enUS);
250
- return ((0, jsx_runtime_1.jsxs)("div", { style: {
251
- display: 'flex',
252
- flexDirection: 'column',
253
- flex: 1,
254
- // alignItems: 'center',
255
- }, children: [(0, jsx_runtime_1.jsx)("h2", { style: {
256
- color: theme?.textColor || '#364153',
257
- fontSize: '13px',
258
- fontFamily: theme?.fontFamily,
259
- fontWeight: '700',
260
- width: '100%',
261
- textAlign: 'center',
262
- height: 36,
263
- display: 'flex',
264
- flexDirection: 'row',
265
- alignItems: 'center',
266
- justifyContent: 'center',
267
- marginBottom: 3,
268
- marginTop: 6,
269
- }, children: displayedTitle }), (0, jsx_runtime_1.jsx)("div", { style: {
270
- color: theme?.primaryTextColor || '#364153',
271
- textAlign: 'center',
272
- fontSize: 12,
273
- fontWeight: '500',
274
- display: 'grid',
275
- gridTemplateColumns: 'repeat(7, minmax(0, 1fr))',
276
- paddingTop: 6,
277
- }, children: weekdays.map((dayName) => ((0, jsx_runtime_1.jsx)("div", { style: { width: '100%', display: 'flex', justifyContent: 'center' }, children: (0, jsx_runtime_1.jsx)("div", { style: {
278
- display: 'flex',
279
- alignItems: 'center',
280
- justifyContent: 'center',
281
- width: '100%',
282
- // height: '2.25rem',
283
- fontFamily: theme?.fontFamily,
284
- color: theme.secondaryTextColor,
285
- paddingBottom: 4,
286
- }, children: dayName }) }, dayName))) }), (0, jsx_runtime_1.jsx)("div", { style: {
287
- display: 'grid',
288
- gridTemplateColumns: 'repeat(7, minmax(0, 1fr))',
289
- borderRadius: 3,
290
- overflow: 'hidden',
291
- rowGap: 6,
292
- }, children: displayedDates.map((date, index) => {
293
- return ((0, jsx_runtime_1.jsx)("div", { style: { width: '100%' }, children: (0, jsx_runtime_1.jsx)("button", { style: {
294
- border: 'none',
295
- height: '34px',
296
- display: 'flex',
297
- width: '100%',
298
- alignItems: 'center',
299
- justifyContent: 'center',
300
- fontFamily: theme?.fontFamily,
301
- fontSize: 13,
302
- background: (0, date_fns_1.isEqual)(localStartDate, date) || (0, date_fns_1.isEqual)(localEndDate, date)
303
- ? theme.primaryTextColor
304
- : isBetween(date, localStartDate, localEndDate)
305
- ? '#F4F4F5'
306
- : 'transparent',
307
- color: (0, date_fns_1.isEqual)(localStartDate, date) || (0, date_fns_1.isEqual)(localEndDate, date)
308
- ? theme.backgroundColor
309
- : theme.primaryTextColor,
310
- borderRadius: (0, date_fns_1.isEqual)(localStartDate, date) || (0, date_fns_1.isEqual)(localEndDate, date)
311
- ? 3
312
- : 0,
313
- ...isBeginningOrEndOfWeek(index),
314
- }, type: "button", onClick: () => {
315
- onClickDate(date);
316
- }, children: (0, jsx_runtime_1.jsx)("time", { dateTime: (0, date_fns_1.format)(date, 'yyyy-MM-dd', { locale: locale_1.enUS }), children: (0, date_fns_1.format)(date, 'd', { locale: locale_1.enUS }) }) }) }, date.toString()));
317
- }) }), (0, jsx_runtime_1.jsx)("div", { style: { height: 8 } })] }));
318
- }
319
- function isBeginningOrEndOfWeek(num) {
320
- // Check if the number is 0
321
- if (num === 0)
322
- return { borderTopLeftRadius: 3, borderBottomLeftRadius: 3 };
323
- // Check if the number is divisible by 7
324
- if (num % 7 === 0)
325
- return { borderTopLeftRadius: 3, borderBottomLeftRadius: 3 };
326
- // Check if the number is one less than a multiple of 7
327
- if ((num + 1) % 7 === 0)
328
- return { borderTopRightRadius: 3, borderBottomRightRadius: 3 };
329
- // If none of the conditions are met, return false
330
- return {};
331
- }
332
- const formatDateText = (dateRange, localStartDate, localEndDate) => {
333
- if (dateRange.length && dateRange[0] && dateRange[1]) {
334
- return ((0, date_fns_1.format)(dateRange[0], 'MMM dd, yyyy') +
335
- ' - ' +
336
- (0, date_fns_1.format)(dateRange[1], 'MMM dd, yyyy'));
337
- }
338
- if (localStartDate && localEndDate) {
339
- return ((0, date_fns_1.format)(localStartDate, 'MMM dd, yyyy') +
340
- ' - ' +
341
- (0, date_fns_1.format)(localEndDate, 'MMM dd, yyyy'));
342
- }
343
- return '';
344
- };
345
- function CalendarDropdown({ onChangeDateRange, dateRange }) {
346
- const [theme] = (0, react_1.useContext)(Context_1.ThemeContext);
347
- const [showModal, setShowModal] = (0, react_1.useState)(false);
348
- const modalRef = (0, react_1.useRef)(null);
349
- const parentRef = (0, react_1.useRef)(null);
350
- const [anchorDate, setAnchorDate] = (0, react_1.useState)(null);
351
- const [localStartDate, setLocalStartDate] = (0, react_1.useState)(null);
352
- const [localEndDate, setLocalEndDate] = (0, react_1.useState)(null);
353
- const prevMonthAnchor = (0, date_fns_1.subDays)((0, date_fns_1.startOfMonth)(anchorDate), 1);
354
- const onClickDate = (date) => {
355
- if (localStartDate && (0, date_fns_1.isBefore)(date, localStartDate)) {
356
- setLocalStartDate(date);
357
- return;
358
- }
359
- if (localEndDate && (0, date_fns_1.isAfter)(date, localEndDate)) {
360
- setLocalEndDate(date);
361
- return;
362
- }
363
- if (localEndDate && (0, date_fns_1.isBefore)(date, localEndDate)) {
364
- setLocalEndDate(date);
365
- return;
366
- }
367
- if ((0, date_fns_1.isEqual)(localStartDate, date) || (0, date_fns_1.isEqual)(localEndDate, date)) {
368
- setLocalStartDate(null);
369
- setLocalEndDate(null);
370
- }
371
- if (!localStartDate) {
372
- setLocalStartDate(date);
373
- return;
374
- }
375
- if (!localEndDate) {
376
- setLocalEndDate(date);
377
- return;
378
- }
379
- };
380
- (0, react_1.useEffect)(() => {
381
- if (localEndDate &&
382
- localStartDate &&
383
- (0, date_fns_1.isBefore)(localStartDate, localEndDate)) {
384
- onChangeDateRange([localStartDate, localEndDate]);
385
- }
386
- }, [localEndDate, localStartDate]);
387
- (0, react_1.useEffect)(() => {
388
- if (dateRange.length && !anchorDate) {
389
- setAnchorDate(dateRange[1]);
390
- }
391
- }, [dateRange, anchorDate]);
392
- (0, hooks_1.useOnClickOutside)(modalRef, (e) => {
393
- // Exclude click on trigger button (e.g. Dropdown Button) from outside click handler
394
- const isTriggerElem = parentRef
395
- ? parentRef.current?.contains(e.target)
396
- : false;
397
- if (!isTriggerElem) {
398
- setShowModal(false);
399
- }
400
- });
401
- return ((0, jsx_runtime_1.jsxs)("div", { ref: parentRef, style: { position: 'relative', height: 38 }, children: [(0, jsx_runtime_1.jsx)("button", {
402
- // onChange={handleOnChange}
403
- // value={value}
404
- onClick: () => setShowModal((showModal) => !showModal), id: 'reportbuilderdropdown', defaultValue: "Select", style: {
405
- width: '100%',
406
- WebkitAppearance: 'none',
407
- minWidth: 275,
408
- maxWidth: 275,
409
- outline: 'none',
410
- textAlign: 'left',
411
- whiteSpace: 'nowrap',
412
- overflow: 'hidden',
413
- textOverflow: 'ellipsis',
414
- borderRadius: 6,
415
- // paddingLeft: 12,
416
- paddingRight: 12,
417
- height: 38,
418
- borderStyle: 'solid',
419
- borderWidth: theme.borderWidth,
420
- borderColor: theme.borderColor,
421
- background: theme.backgroundColor,
422
- color: theme.primaryTextColor,
423
- boxShadow: '0 1px 2px 0 rgba(0,0,0,.05)',
424
- fontFamily: theme.fontFamily,
425
- fontSize: 14,
426
- fontWeight: 500,
427
- minHeight: 38,
428
- marginBottom: 0,
429
- paddingLeft: 14 + 15 + 3,
430
- }, children: formatDateText(dateRange, localStartDate, localEndDate) }), (0, jsx_runtime_1.jsx)(assets_1.CalendarNormalIcon, { style: {
431
- height: '15px',
432
- width: '15px',
433
- flex: 'none',
434
- position: 'absolute',
435
- left: 12,
436
- top: 11,
437
- color: theme?.primaryTextColor,
438
- } }), showModal && ((0, jsx_runtime_1.jsxs)("div", { ref: modalRef, style: {
439
- position: 'absolute',
440
- zIndex: 1,
441
- overflowY: 'auto',
442
- top: 38 + 8,
443
- width: 230 + 245 + 12,
444
- // left: getAbsoluteSpacing(),
445
- // right: getAbsoluteSpacing(),
446
- // height: 230 + 10,
447
- backgroundColor: theme?.backgroundColor || 'white',
448
- borderColor: theme?.borderColor || '#E5E7EB',
449
- borderTopStyle: 'solid',
450
- borderBottomStyle: 'solid',
451
- borderLeftStyle: 'solid',
452
- borderRightStyle: 'solid',
453
- borderTopWidth: 1,
454
- borderBottomWidth: 1,
455
- borderLeftWidth: 1,
456
- borderRightWidth: 1,
457
- marginTop: 0,
458
- // marginTop: '6px',
459
- borderRadius: 5,
460
- display: 'flex',
461
- flexDirection: 'row',
462
- alignItems: 'flex-start',
463
- boxShadow: '0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1)',
464
- gap: 12,
465
- paddingLeft: 8,
466
- paddingRight: 8,
467
- paddingBottom: 1,
468
- }, children: [(0, jsx_runtime_1.jsx)("button", { style: {
469
- height: 32,
470
- width: 32,
471
- position: 'absolute',
472
- borderColor: theme?.borderColor || '#E5E7EB',
473
- borderTopStyle: 'solid',
474
- borderBottomStyle: 'solid',
475
- borderLeftStyle: 'solid',
476
- borderRightStyle: 'solid',
477
- borderTopWidth: 1,
478
- borderBottomWidth: 1,
479
- borderLeftWidth: 1,
480
- borderRightWidth: 1,
481
- top: 8,
482
- left: 8,
483
- borderRadius: 3,
484
- display: 'flex',
485
- alignItems: 'center',
486
- justifyContent: 'center',
487
- background: 'transparent',
488
- }, onClick: () => setAnchorDate((date) => (0, date_fns_1.subDays)((0, date_fns_1.startOfMonth)(date), 1)), children: (0, jsx_runtime_1.jsx)(assets_1.ArrowLeftHeadIcon, { style: {
489
- height: '20px',
490
- width: '20px',
491
- color: theme?.secondaryTextColor,
492
- }, "aria-hidden": "true" }) }), (0, jsx_runtime_1.jsx)("button", { style: {
493
- height: 32,
494
- width: 32,
495
- borderColor: theme?.borderColor || '#E5E7EB',
496
- borderTopStyle: 'solid',
497
- borderBottomStyle: 'solid',
498
- borderLeftStyle: 'solid',
499
- borderRightStyle: 'solid',
500
- borderTopWidth: 1,
501
- borderBottomWidth: 1,
502
- borderLeftWidth: 1,
503
- borderRightWidth: 1,
504
- position: 'absolute',
505
- top: 8,
506
- right: 8,
507
- borderRadius: 3,
508
- display: 'flex',
509
- alignItems: 'center',
510
- justifyContent: 'center',
511
- background: 'transparent',
512
- }, onClick: () => setAnchorDate((date) => (0, date_fns_1.addDays)((0, date_fns_1.endOfMonth)(date), 1)), children: (0, jsx_runtime_1.jsx)(assets_1.ArrowRightHeadIcon, { style: {
513
- height: '20px',
514
- width: '20px',
515
- color: theme?.secondaryTextColor,
516
- }, "aria-hidden": "true" }) }), anchorDate && ((0, jsx_runtime_1.jsx)(Calendar, { anchorDate: prevMonthAnchor, dateRange: dateRange, theme: theme, onClickDate: onClickDate, localStartDate: localStartDate, localEndDate: localEndDate })), anchorDate && ((0, jsx_runtime_1.jsx)(Calendar, { anchorDate: anchorDate, dateRange: dateRange, theme: theme, onClickDate: onClickDate, localStartDate: localStartDate, localEndDate: localEndDate }))] }))] }));
517
- }
518
- const QuillDateRangePicker = ({ label, dateRange, onChangeDateRange, presetOptions, preset, onChangePreset, }) => {
519
- const [theme] = (0, react_1.useContext)(Context_1.ThemeContext);
520
- return ((0, jsx_runtime_1.jsxs)("div", { children: [label !== '' && ((0, jsx_runtime_1.jsx)("div", { style: {
521
- marginBottom: 6,
522
- fontWeight: theme.labelFontWeight || '600',
523
- color: theme.secondaryTextColor,
524
- fontFamily: theme.fontFamily,
525
- fontSize: 14,
526
- }, children: label })), (0, jsx_runtime_1.jsxs)("div", { style: {
527
- display: 'flex',
528
- flexDirection: 'row',
529
- alignItems: 'center',
530
- gap: 12,
531
- }, children: [(0, jsx_runtime_1.jsx)(MemoizedCalendarDropdown, { dateRange: dateRange, onChangeDateRange: onChangeDateRange, theme: theme }), (0, jsx_runtime_1.jsx)(MemoizedDropdown, { options: presetOptions.map((option) => ({
532
- label: option.text,
533
- value: option.value,
534
- })), onChange: onChangePreset, value: preset })] })] }));
535
- };
536
- exports.QuillDateRangePicker = QuillDateRangePicker;
537
- const MemoizedCalendarDropdown = (0, react_1.memo)(CalendarDropdown);
538
141
  const MemoizedDropdown = (0, react_1.memo)(QuillDropdownComponent);
539
142
  const areEqual = (prevProps, nextProps) => {
540
143
  // This function returns true if passing nextProps to render would return
541
144
  // the same result as passing prevProps to render, otherwise it returns false
542
- // You can replace 'someProperty' with the actual prop you want to compare
543
- return (prevProps.dateRange.length === nextProps.dateRange.length &&
544
- prevProps.dateRange[0] === nextProps.dateRange[0] &&
545
- prevProps.dateRange[1] === nextProps.dateRange[1]);
145
+ return (prevProps.dateRange.startDate === nextProps.dateRange.startDate &&
146
+ prevProps.dateRange.endDate === nextProps.dateRange.endDate);
546
147
  };
547
- const MemoizedDateRangePicker = (0, react_1.memo)(exports.QuillDateRangePicker, areEqual);
148
+ const MemoizedDateRangePicker = (0, react_1.memo)(QuillDateRangePicker_1.QuillDateRangePicker, areEqual);
548
149
  const QuillEmptyDashboardComponent = () => (0, jsx_runtime_1.jsx)("div", {});
549
150
  const defaultChartContainerStyles = {
550
151
  display: 'flex',
@@ -560,6 +161,7 @@ function Dashboard({ name, containerStyle, chartContainerStyle = defaultChartCon
560
161
  const { dispatch } = (0, react_1.useContext)(Context_1.DashboardContext);
561
162
  const { isLoading: isDataLoading, data, reload, } = (0, useDashboard_1.useDashboard)(name);
562
163
  const [dashboardSections, setDashboardSections] = (0, react_1.useState)(null);
164
+ const [presetFilters, setPresetFilters] = (0, react_1.useState)(null);
563
165
  const { dashboard } = (0, react_1.useContext)(Context_1.DashboardContext);
564
166
  const [client] = (0, react_1.useContext)(Context_1.ClientContext);
565
167
  const [isLoading, setIsLoading] = (0, react_1.useState)(isDataLoading);
@@ -581,19 +183,45 @@ function Dashboard({ name, containerStyle, chartContainerStyle = defaultChartCon
581
183
  setDashboardSections(resp.sections);
582
184
  const bigFilterObj = {};
583
185
  if (resp.dateFilter && Object.keys(resp.dateFilter).length) {
584
- const key = resp.dateFilter.defaultPrimaryRange ?? 'LAST_6_MONTHS';
186
+ let presetsOptions = dateRangePickerUtils_1.defaultOptionsV2;
187
+ if (resp.dateFilter.presetRanges) {
188
+ presetsOptions = resp.dateFilter.presetRanges.map((elem) => {
189
+ if (!elem.isStatic) {
190
+ return {
191
+ label: elem.label,
192
+ value: elem.value,
193
+ startDate: dateRangePickerUtils_1.PRIMARY_RANGE[elem.value].start,
194
+ endDate: dateRangePickerUtils_1.PRIMARY_RANGE[elem.value].end,
195
+ };
196
+ }
197
+ return {
198
+ label: elem.label,
199
+ value: elem.value,
200
+ startDate: new Date(elem.startDate),
201
+ endDate: new Date(elem.endDate),
202
+ };
203
+ });
204
+ }
205
+ setPresetFilters(presetsOptions);
206
+ const key = resp.dateFilter?.primaryRange?.value || 'LAST_6_MONTHS';
207
+ const primaryPreset = presetsOptions.find((option) => {
208
+ return option.value === key;
209
+ });
585
210
  const filter = {
586
- startDate: dateRangePickerUtils_1.PRIMARY_RANGE[key]?.start,
587
- endDate: dateRangePickerUtils_1.PRIMARY_RANGE[key]?.end,
211
+ startDate: primaryPreset.startDate,
212
+ endDate: primaryPreset.endDate,
588
213
  filterType: 'date_range',
589
- selectedValue: [
590
- dateRangePickerUtils_1.PRIMARY_RANGE[key]?.start,
591
- dateRangePickerUtils_1.PRIMARY_RANGE[key]?.end,
592
- dateRangePickerUtils_1.PRIMARY_CODES[key],
593
- ],
594
- options: options,
214
+ options: presetsOptions.map((elem) => {
215
+ return {
216
+ label: elem.label,
217
+ value: elem.value,
218
+ };
219
+ }),
595
220
  field: 'date_range',
596
221
  label: 'Date',
222
+ preset: {
223
+ label: primaryPreset.label,
224
+ },
597
225
  };
598
226
  if (resp.dateFilter.comparison) {
599
227
  filter.comparison = true;
@@ -617,13 +245,12 @@ function Dashboard({ name, containerStyle, chartContainerStyle = defaultChartCon
617
245
  });
618
246
  }
619
247
  bigFilterObj[filter.field] = filter;
620
- setDateFilter(exports.PRIMARY_OPTIONS.find((opt) => opt.value === resp.dateFilter.defaultPrimaryRange)?.text ?? null);
248
+ setDateFilter(presetsOptions.find((opt) => opt.value === resp.dateFilter.defaultPrimaryRange)?.label ?? null);
621
249
  }
622
250
  if (resp.filters && resp.filters.length) {
623
251
  Object.values(resp.filters)
624
252
  .filter((filter) => filter.filterType !== 'date')
625
253
  .forEach((filter) => {
626
- // processFilter(filter);
627
254
  bigFilterObj[filter.field] = processFilter(filter);
628
255
  });
629
256
  }
@@ -655,18 +282,6 @@ function Dashboard({ name, containerStyle, chartContainerStyle = defaultChartCon
655
282
  });
656
283
  }
657
284
  };
658
- const onChangeDateFilter = (dateFilter) => {
659
- // setGlobalDateFilter(dateFilter[0], dateFilter[1]);
660
- dashboardFiltersDispatch({
661
- type: 'ADD_DASHBOARD_FILTER',
662
- id: 'date_range',
663
- data: {
664
- startDate: dateFilter[0],
665
- endDate: dateFilter[1],
666
- filterType: 'date_range',
667
- },
668
- });
669
- };
670
285
  function removeQuotes(str) {
671
286
  if (str.startsWith('"') && str.endsWith('"')) {
672
287
  return str.slice(1, -1);
@@ -691,22 +306,13 @@ function Dashboard({ name, containerStyle, chartContainerStyle = defaultChartCon
691
306
  };
692
307
  }
693
308
  if (filter.filterType === 'date' || filter.filterType === 'date_range') {
694
- if (value[2]) {
695
- selectedElem = filter.options.find((elem) => {
696
- return value[2] === elem[removeQuotes(filter.field)][2];
697
- });
698
- if (selectedElem) {
699
- selectedValue = selectedElem[removeQuotes(filter.field)];
700
- }
701
- }
702
309
  return {
703
310
  startDate: value ? value[0] : filter.startDate,
704
311
  endDate: value ? value[1] : filter.endDate,
705
312
  filterType: 'date_range',
706
313
  label: 'Date',
707
- ...(selectedValue ? { selectedValue } : {}),
708
314
  field: 'date_range',
709
- options: options,
315
+ options: filter.options,
710
316
  };
711
317
  }
712
318
  };
@@ -731,35 +337,32 @@ function Dashboard({ name, containerStyle, chartContainerStyle = defaultChartCon
731
337
  return;
732
338
  }
733
339
  if (filter.filterType === 'date' || filter.filterType === 'date_range') {
734
- if (value && value[2]) {
735
- selectedElem = filter.options.find((elem) => {
736
- return value[2] === elem[removeQuotes(filter.field)][2];
737
- });
738
- if (selectedElem) {
739
- selectedValue = selectedElem[removeQuotes(filter.field)];
740
- }
741
- }
742
340
  if (comparison ||
743
341
  (filter.comparison && filter.comparisonRange.value !== 'NO_COMPARISON')) {
342
+ let preset = '';
744
343
  if (comparison) {
745
- selectedValue = filter.selectedValue;
344
+ preset = filter.preset.label;
746
345
  }
747
346
  const key = comparison?.value || filter.comparisonRange.value;
748
- const primaryRange = {
749
- start: value ? value[0] : filter.startDate,
750
- end: value ? value[1] : filter.endDate,
347
+ let primaryRange = {
348
+ start: value ? value.startDate : filter.startDate,
349
+ end: value ? value.endDate : filter.endDate,
751
350
  };
351
+ if (value && value.preset) {
352
+ preset = value.preset;
353
+ primaryRange = (0, dateRangePickerUtils_1.getRangeFromPresetOptions)(value.preset, presetFilters);
354
+ }
752
355
  dashboardFiltersDispatch({
753
356
  type: 'ADD_DASHBOARD_FILTER',
754
357
  id: 'date_range',
755
358
  data: {
756
- startDate: value ? value[0] : filter.startDate,
757
- endDate: value ? value[1] : filter.endDate,
359
+ startDate: primaryRange.start,
360
+ endDate: primaryRange.end,
758
361
  filterType: 'date_range',
759
362
  label: 'Date',
760
- ...(selectedValue ? { selectedValue } : {}),
761
363
  field: 'date_range',
762
- options: options,
364
+ preset: { label: preset },
365
+ options: filter.options,
763
366
  comparison: true,
764
367
  comparisonRange: {
765
368
  startDate: dateRangePickerUtils_1.COMPARISON_RANGE[key](primaryRange)
@@ -771,17 +374,24 @@ function Dashboard({ name, containerStyle, chartContainerStyle = defaultChartCon
771
374
  });
772
375
  }
773
376
  else {
377
+ const primaryRange = value.preset
378
+ ? (0, dateRangePickerUtils_1.getRangeFromPresetOptions)(value.preset, presetFilters)
379
+ : {
380
+ start: value.startDate || filter.startDate,
381
+ end: value.endDate || filter.endDate,
382
+ };
383
+ const preset = value.preset ? value.preset : '';
774
384
  dashboardFiltersDispatch({
775
385
  type: 'ADD_DASHBOARD_FILTER',
776
386
  id: 'date_range',
777
387
  data: {
778
388
  ...filter,
779
- startDate: value ? value[0] : filter.startDate,
780
- endDate: value ? value[1] : filter.endDate,
389
+ preset: { label: preset },
390
+ startDate: primaryRange.start,
391
+ endDate: primaryRange.end,
781
392
  filterType: 'date_range',
782
- ...(selectedValue ? { selectedValue } : {}),
783
393
  field: 'date_range',
784
- options: options,
394
+ options: filter.options,
785
395
  label: 'Date',
786
396
  },
787
397
  });
@@ -839,7 +449,7 @@ function Dashboard({ name, containerStyle, chartContainerStyle = defaultChartCon
839
449
  flexDirection: 'row',
840
450
  alignItems: 'center',
841
451
  gap: 12,
842
- }, children: sortedFilters.map((filter, index) => ((0, jsx_runtime_1.jsx)(DashboardFilter, { filter: filter, onChangeFilter: updateFilter, theme: theme, filterValue: dashboardFilters, SelectComponent: SelectComponent ? SelectComponent : MemoizedDropdown, DateRangePickerComponent: DateRangePickerComponent
452
+ }, children: sortedFilters.map((filter, index) => ((0, jsx_runtime_1.jsx)(DashboardFilter, { filter: filter, onChangeFilter: updateFilter, theme: theme, SelectComponent: SelectComponent ? SelectComponent : MemoizedDropdown, DateRangePickerComponent: DateRangePickerComponent
843
453
  ? DateRangePickerComponent
844
454
  : MemoizedDateRangePicker }, index))) }) })), Object.keys(dashboardSections)
845
455
  .sort(function (a, b) {
@@ -882,7 +492,7 @@ function Dashboard({ name, containerStyle, chartContainerStyle = defaultChartCon
882
492
  height: '400px',
883
493
  }, chartId: item._id, colors: theme.chartColors?.length
884
494
  ? theme.chartColors
885
- : undefined, hideXAxis: hideXAxis, hideYAxis: hideYAxis, hideCartesianGrid: hideCartesianGrid }) }, `${item.name}${index}`)) }))) }))] }, section + '' + sectionIndex));
495
+ : undefined, hideXAxis: hideXAxis, hideYAxis: hideYAxis, hideCartesianGrid: hideCartesianGrid }) })) }, `${item.name}${index}`))) }))] }, section + '' + sectionIndex));
886
496
  })] }));
887
497
  }
888
498
  exports.default = Dashboard;