@quillsql/react 2.13.20 → 2.13.22

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 (85) hide show
  1. package/dist/cjs/Chart.d.ts.map +1 -1
  2. package/dist/cjs/Chart.js +208 -40
  3. package/dist/cjs/Context.d.ts.map +1 -1
  4. package/dist/cjs/Context.js +15 -10
  5. package/dist/cjs/Dashboard.d.ts.map +1 -1
  6. package/dist/cjs/Dashboard.js +58 -13
  7. package/dist/cjs/components/Chart/LineChart.d.ts.map +1 -1
  8. package/dist/cjs/components/Chart/LineChart.js +12 -22
  9. package/dist/cjs/components/Dashboard/DashboardFilter.d.ts.map +1 -1
  10. package/dist/cjs/components/Dashboard/DashboardFilter.js +19 -1
  11. package/dist/cjs/components/Dashboard/DataLoader.d.ts.map +1 -1
  12. package/dist/cjs/components/Dashboard/DataLoader.js +26 -15
  13. package/dist/cjs/hooks/useDashboard.d.ts +1 -4
  14. package/dist/cjs/hooks/useDashboard.d.ts.map +1 -1
  15. package/dist/cjs/hooks/useDashboard.js +1 -22
  16. package/dist/cjs/hooks/useExport.d.ts +1 -8
  17. package/dist/cjs/hooks/useExport.d.ts.map +1 -1
  18. package/dist/cjs/hooks/useExport.js +105 -72
  19. package/dist/cjs/hooks/useQuill.d.ts.map +1 -1
  20. package/dist/cjs/hooks/useQuill.js +23 -21
  21. package/dist/cjs/hooks/useReport.d.ts +12 -0
  22. package/dist/cjs/hooks/useReport.d.ts.map +1 -0
  23. package/dist/cjs/hooks/useReport.js +56 -0
  24. package/dist/cjs/index.d.ts +2 -1
  25. package/dist/cjs/index.d.ts.map +1 -1
  26. package/dist/cjs/index.js +3 -2
  27. package/dist/cjs/internals/ReportBuilder/PivotModal.d.ts.map +1 -1
  28. package/dist/cjs/internals/ReportBuilder/PivotModal.js +1 -0
  29. package/dist/cjs/utils/dataProcessing.js +2 -2
  30. package/dist/cjs/utils/filterProcessing.d.ts +2 -1
  31. package/dist/cjs/utils/filterProcessing.d.ts.map +1 -1
  32. package/dist/cjs/utils/filterProcessing.js +168 -22
  33. package/dist/cjs/utils/pivotConstructor.d.ts.map +1 -1
  34. package/dist/cjs/utils/pivotConstructor.js +47 -10
  35. package/dist/cjs/utils/queryConstructor.d.ts.map +1 -1
  36. package/dist/cjs/utils/queryConstructor.js +3 -2
  37. package/dist/cjs/utils/report.d.ts +1 -1
  38. package/dist/cjs/utils/report.d.ts.map +1 -1
  39. package/dist/cjs/utils/report.js +4 -2
  40. package/dist/cjs/utils/valueFormatter.d.ts +5 -1
  41. package/dist/cjs/utils/valueFormatter.d.ts.map +1 -1
  42. package/dist/cjs/utils/valueFormatter.js +32 -12
  43. package/dist/esm/Chart.d.ts.map +1 -1
  44. package/dist/esm/Chart.js +211 -43
  45. package/dist/esm/Context.d.ts.map +1 -1
  46. package/dist/esm/Context.js +15 -10
  47. package/dist/esm/Dashboard.d.ts.map +1 -1
  48. package/dist/esm/Dashboard.js +61 -16
  49. package/dist/esm/components/Chart/LineChart.d.ts.map +1 -1
  50. package/dist/esm/components/Chart/LineChart.js +15 -25
  51. package/dist/esm/components/Dashboard/DashboardFilter.d.ts.map +1 -1
  52. package/dist/esm/components/Dashboard/DashboardFilter.js +20 -2
  53. package/dist/esm/components/Dashboard/DataLoader.d.ts.map +1 -1
  54. package/dist/esm/components/Dashboard/DataLoader.js +26 -15
  55. package/dist/esm/hooks/useDashboard.d.ts +1 -4
  56. package/dist/esm/hooks/useDashboard.d.ts.map +1 -1
  57. package/dist/esm/hooks/useDashboard.js +1 -21
  58. package/dist/esm/hooks/useExport.d.ts +1 -8
  59. package/dist/esm/hooks/useExport.d.ts.map +1 -1
  60. package/dist/esm/hooks/useExport.js +106 -73
  61. package/dist/esm/hooks/useQuill.d.ts.map +1 -1
  62. package/dist/esm/hooks/useQuill.js +23 -21
  63. package/dist/esm/hooks/useReport.d.ts +12 -0
  64. package/dist/esm/hooks/useReport.d.ts.map +1 -0
  65. package/dist/esm/hooks/useReport.js +51 -0
  66. package/dist/esm/index.d.ts +2 -1
  67. package/dist/esm/index.d.ts.map +1 -1
  68. package/dist/esm/index.js +2 -1
  69. package/dist/esm/internals/ReportBuilder/PivotModal.d.ts.map +1 -1
  70. package/dist/esm/internals/ReportBuilder/PivotModal.js +1 -0
  71. package/dist/esm/utils/dataProcessing.js +2 -2
  72. package/dist/esm/utils/filterProcessing.d.ts +2 -1
  73. package/dist/esm/utils/filterProcessing.d.ts.map +1 -1
  74. package/dist/esm/utils/filterProcessing.js +168 -23
  75. package/dist/esm/utils/pivotConstructor.d.ts.map +1 -1
  76. package/dist/esm/utils/pivotConstructor.js +47 -10
  77. package/dist/esm/utils/queryConstructor.d.ts.map +1 -1
  78. package/dist/esm/utils/queryConstructor.js +3 -2
  79. package/dist/esm/utils/report.d.ts +1 -1
  80. package/dist/esm/utils/report.d.ts.map +1 -1
  81. package/dist/esm/utils/report.js +4 -2
  82. package/dist/esm/utils/valueFormatter.d.ts +5 -1
  83. package/dist/esm/utils/valueFormatter.d.ts.map +1 -1
  84. package/dist/esm/utils/valueFormatter.js +33 -13
  85. package/package.json +4 -4
@@ -1,6 +1,6 @@
1
+ import { endOfDay, parse, startOfDay, sub } from 'date-fns';
1
2
  import { COMPARISON_RANGE, PRIMARY_RANGE, defaultOptionsV2, getRangeFromPresetOptions, } from '../DateRangePicker/dateRangePickerUtils';
2
- // import { Client, QuillProviderClient } from '../models/Client';
3
- import { DateOperator, FieldType, FilterType, DashboardFilterType, } from '../models/Filter';
3
+ import { DateOperator, FieldType, FilterType, DashboardFilterType, TimeUnit, } from '../models/Filter';
4
4
  import { filterTreeToAst } from './astFilterProcessing';
5
5
  import { snakeAndCamelCaseToTitleCase } from './textProcessing';
6
6
  export function findAndProcessDateFilter(filters) {
@@ -331,36 +331,181 @@ export async function buildQueryFromFilters(baseAst, filters, endpoint, client)
331
331
  return { success: false, error: `error: ${error.message}` };
332
332
  }
333
333
  }
334
+ export function applyCustomFilterToDashDateFilter(customDateFilter, dashboardDateFilter) {
335
+ if (customDateFilter.filterType === FilterType.DateCustomFilter &&
336
+ customDateFilter.value &&
337
+ typeof customDateFilter.value === 'object' &&
338
+ 'startDate' in customDateFilter.value &&
339
+ 'endDate' in customDateFilter.value) {
340
+ const startDate = customDateFilter.value.startDate;
341
+ const endDate = customDateFilter.value.endDate;
342
+ return {
343
+ ...dashboardDateFilter,
344
+ startDate: new Date(startDate),
345
+ endDate: new Date(endDate),
346
+ };
347
+ }
348
+ else if (customDateFilter.filterType === FilterType.DateFilter &&
349
+ customDateFilter.value &&
350
+ typeof customDateFilter.value === 'object' &&
351
+ 'value' in customDateFilter.value &&
352
+ 'unit' in customDateFilter.value) {
353
+ const { value, unit } = customDateFilter.value;
354
+ let processedUnit;
355
+ let processedValue = value;
356
+ switch (unit) {
357
+ case TimeUnit.Day:
358
+ processedUnit = 'days';
359
+ break;
360
+ case TimeUnit.Week:
361
+ processedUnit = 'weeks';
362
+ break;
363
+ case TimeUnit.Month:
364
+ processedUnit = 'months';
365
+ break;
366
+ case TimeUnit.Year:
367
+ processedUnit = 'years';
368
+ break;
369
+ case TimeUnit.Hour:
370
+ processedUnit = 'hours';
371
+ break;
372
+ case TimeUnit.Quarter:
373
+ processedUnit = 'months';
374
+ processedValue *= 3;
375
+ break;
376
+ }
377
+ switch (customDateFilter.operator) {
378
+ case DateOperator.InTheLast:
379
+ return {
380
+ ...dashboardDateFilter,
381
+ startDate: sub(new Date(), { [processedUnit]: processedValue }),
382
+ endDate: new Date(),
383
+ };
384
+ // This represents the previous period compared to the current period.
385
+ // For instance, if the current period is the last 30 days, the previous period would be the 30 days before that.
386
+ case DateOperator.InThePrevious:
387
+ return {
388
+ ...dashboardDateFilter,
389
+ startDate: sub(new Date(), { [processedUnit]: processedValue * 2 }),
390
+ endDate: sub(new Date(), { [processedUnit]: processedValue }),
391
+ };
392
+ // This represents the current period, and value is always 0.
393
+ // For instance if today was the 5th of August, the current month would be from the 1st to the 5th of August.
394
+ case DateOperator.InTheCurrent:
395
+ switch (unit) {
396
+ case TimeUnit.Day:
397
+ return {
398
+ ...dashboardDateFilter,
399
+ startDate: startOfDay(new Date()),
400
+ endDate: endOfDay(new Date()),
401
+ };
402
+ case TimeUnit.Week:
403
+ return {
404
+ ...dashboardDateFilter,
405
+ startDate: sub(new Date(), { days: new Date().getDay() }),
406
+ endDate: new Date(),
407
+ };
408
+ case TimeUnit.Month:
409
+ return {
410
+ ...dashboardDateFilter,
411
+ startDate: new Date(new Date().getFullYear(), new Date().getMonth(), 1),
412
+ endDate: new Date(),
413
+ };
414
+ case TimeUnit.Year:
415
+ return {
416
+ ...dashboardDateFilter,
417
+ startDate: new Date(new Date().getFullYear(), 0, 1),
418
+ endDate: new Date(),
419
+ };
420
+ case TimeUnit.Quarter:
421
+ return {
422
+ ...dashboardDateFilter,
423
+ startDate: new Date(new Date().getFullYear(), Math.floor(new Date().getMonth() / 3) * 3, 1),
424
+ endDate: new Date(),
425
+ };
426
+ case TimeUnit.Hour:
427
+ return {
428
+ ...dashboardDateFilter,
429
+ startDate: new Date(new Date().getFullYear(), new Date().getMonth(), new Date().getDate(), new Date().getHours()),
430
+ endDate: new Date(),
431
+ };
432
+ }
433
+ break;
434
+ default:
435
+ return dashboardDateFilter;
436
+ }
437
+ }
438
+ else if (customDateFilter.filterType === FilterType.DateComparisonFilter &&
439
+ customDateFilter.value &&
440
+ typeof customDateFilter.value === 'string') {
441
+ const parsedDate = parse(customDateFilter.value, 'yyyy-mm-dd', new Date());
442
+ switch (customDateFilter.operator) {
443
+ case DateOperator.GreaterThanOrEqualTo:
444
+ return {
445
+ ...dashboardDateFilter,
446
+ startDate: parsedDate,
447
+ endDate: undefined,
448
+ };
449
+ case DateOperator.LessThanOrEqualTo:
450
+ return {
451
+ ...dashboardDateFilter,
452
+ startDate: undefined,
453
+ endDate: parsedDate,
454
+ };
455
+ case DateOperator.LessThan:
456
+ return {
457
+ ...dashboardDateFilter,
458
+ startDate: undefined,
459
+ endDate: sub(parsedDate, { days: 1 }),
460
+ };
461
+ case DateOperator.GreaterThan:
462
+ return {
463
+ ...dashboardDateFilter,
464
+ startDate: sub(parsedDate, { days: 1 }),
465
+ endDate: undefined,
466
+ };
467
+ case DateOperator.EqualTo:
468
+ return {
469
+ ...dashboardDateFilter,
470
+ startDate: parsedDate,
471
+ endDate: parsedDate,
472
+ };
473
+ default: return dashboardDateFilter;
474
+ }
475
+ }
476
+ return dashboardDateFilter;
477
+ }
334
478
  export function mergeCustomFilters(filters, customFilters) {
335
- const customDateFilters = customFilters.filter((filter) => filter.filterType === FilterType.DateCustomFilter);
479
+ const customDateFilters = customFilters.filter((filter) => filter.filterType === FilterType.DateCustomFilter || filter.filterType === FilterType.DateFilter || filter.filterType === FilterType.DateComparisonFilter);
336
480
  if (customDateFilters.length === 0) {
337
481
  return filters.concat(customFilters);
338
482
  }
339
483
  const withoutDate = filters.filter((filter) => filter.filterType !== DashboardFilterType.Date);
340
484
  const customWithoutDate = customFilters.filter((filter) => filter.filterType !== FilterType.DateCustomFilter);
341
- const startDate = customDateFilters[0]?.value.startDate;
342
- const endDate = customDateFilters[0]?.value.endDate;
485
+ const withDate = filters.find((filter) => filter.filterType === DashboardFilterType.Date);
343
486
  return withoutDate
344
487
  .concat([
345
- {
346
- filterType: DashboardFilterType.Date,
347
- label: 'Date',
348
- field: customDateFilters[0].field,
349
- table: customDateFilters[0].table,
350
- options: undefined,
351
- primaryRange: {
352
- label: 'Custom',
353
- value: 'custom',
354
- },
355
- dashboardName: 'none',
356
- presetRanges: [],
357
- preset: {
358
- label: 'Custom',
359
- value: 'custom',
488
+ withDate
489
+ ? applyCustomFilterToDashDateFilter(customDateFilters[0], withDate)
490
+ : {
491
+ filterType: DashboardFilterType.Date,
492
+ label: 'Date',
493
+ field: customDateFilters[0].field,
494
+ table: customDateFilters[0].table,
495
+ options: defaultOptionsV2,
496
+ primaryRange: {
497
+ label: 'Last 30 Days',
498
+ value: 'LAST_30_DAYS',
499
+ },
500
+ dashboardName: 'none',
501
+ presetRanges: defaultOptionsV2,
502
+ preset: {
503
+ label: 'Last 30 Days',
504
+ value: 'LAST_30_DAYS',
505
+ },
506
+ startDate: new Date(customDateFilters[0].value.startDate),
507
+ endDate: new Date(customDateFilters[0].value.endDate),
360
508
  },
361
- startDate: new Date(startDate),
362
- endDate: new Date(endDate),
363
- },
364
509
  ])
365
510
  .concat(customWithoutDate);
366
511
  }
@@ -1 +1 @@
1
- {"version":3,"file":"pivotConstructor.d.ts","sourceRoot":"","sources":["../../../src/utils/pivotConstructor.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AACxC,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAQvD,wBAAsB,oBAAoB,CACxC,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,mBAAmB,EAC3B,MAAM,EAAE,mBAAmB,EAC3B,UAAU,CAAC,EAAE,MAAM,EACnB,UAAU,CAAC,EAAE,GAAG,EAChB,eAAe,CAAC,EAAE,GAAG,EACrB,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC;IAAE,IAAI,EAAE,GAAG,EAAE,CAAC;IAAC,OAAO,EAAE,GAAG,EAAE,CAAA;CAAE,CAAC,CAoL1C"}
1
+ {"version":3,"file":"pivotConstructor.d.ts","sourceRoot":"","sources":["../../../src/utils/pivotConstructor.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AACxC,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAQvD,wBAAsB,oBAAoB,CACxC,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,mBAAmB,EAC3B,MAAM,EAAE,mBAAmB,EAC3B,UAAU,CAAC,EAAE,MAAM,EACnB,UAAU,CAAC,EAAE,GAAG,EAChB,eAAe,CAAC,EAAE,GAAG,EACrB,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC;IAAE,IAAI,EAAE,GAAG,EAAE,CAAC;IAAC,OAAO,EAAE,GAAG,EAAE,CAAA;CAAE,CAAC,CAgO1C"}
@@ -70,7 +70,9 @@ export async function generatePivotWithSQL(pivot, report, client, dateBucket, da
70
70
  label: snakeCaseToTitleCase(processColumnName(field.name.replace('comparison_', 'comparison '))),
71
71
  format: field.name === pivot.rowField
72
72
  ? 'string'
73
- : (pivot.valueFieldType ?? 'whole_number'),
73
+ : (pivot.valueFieldType ?? pivot.aggregationType === 'percentage')
74
+ ? 'percentage'
75
+ : 'whole_number',
74
76
  }))
75
77
  .filter((field, index) => field.field !== 'comparison_' + pivot.rowField || index === 0)
76
78
  .sort((a, b) => {
@@ -85,9 +87,26 @@ export async function generatePivotWithSQL(pivot, report, client, dateBucket, da
85
87
  if (pivot.rowField &&
86
88
  !['string', 'varchar'].includes(pivot.rowFieldType || '')) {
87
89
  rows.forEach((row) => {
88
- row[pivot.rowField || ''] = getDateString(typeof row[pivot.rowField || ''] === 'object' // BigQuery
90
+ row.__quillRawDate = typeof row[pivot.rowField || ''] === 'object' // BigQuery
89
91
  ? row[pivot.rowField || ''].value
90
- : row[pivot.rowField || ''], undefined, dateBucket);
92
+ : row[pivot.rowField || ''];
93
+ let value = typeof row[pivot.rowField || ''] === 'object' // BigQuery
94
+ ? row[pivot.rowField || ''].value
95
+ : row[pivot.rowField || ''];
96
+ if (dateBucket === 'week' && dateFilter) {
97
+ const rowDate = new Date(value);
98
+ // check if row value is within dateFilter, else push it to within the date filter
99
+ if (rowDate < dateFilter.startDate) {
100
+ value = dateFilter.startDate.toISOString();
101
+ }
102
+ else if (rowDate > dateFilter.endDate) {
103
+ value = dateFilter.endDate.toISOString();
104
+ }
105
+ }
106
+ const dateString = getDateString(value, dateFilter
107
+ ? { start: dateFilter.startDate, end: dateFilter.endDate }
108
+ : undefined, dateBucket);
109
+ row[pivot.rowField || ''] = dateString;
91
110
  });
92
111
  // add a row for each date in the range that doesn't have a value
93
112
  if (pivot.rowField &&
@@ -97,27 +116,38 @@ export async function generatePivotWithSQL(pivot, report, client, dateBucket, da
97
116
  const dateSet = new Set(rows.map((row) => row[pivot.rowField || '']));
98
117
  // create a loop that will go through each formatted date and add a row if it doesn't exist going to the current date
99
118
  for (let date = dateFilter.startDate; date <= dateFilter.endDate; date = new Date(date.getTime() + 24 * 60 * 60 * 1000)) {
100
- const formattedDate = getDateString(date.toISOString().split('T')[0], undefined, dateBucket);
119
+ const formattedDate = getDateString(date.toISOString(), { start: dateFilter.startDate, end: dateFilter.endDate }, dateBucket);
101
120
  if (!dateSet.has(formattedDate)) {
102
121
  const newRow = {};
103
122
  newRow[pivot.rowField] = formattedDate;
123
+ newRow.__quillRawDate = date.toISOString();
104
124
  rows.push(newRow);
105
125
  dateSet.add(formattedDate);
106
126
  }
107
- // order the rows by the date field
108
- // rows.sort((a: any, b: any) => {
109
- // return compareValues(a, b, pivot.rowField ?? '');
110
- // });
111
127
  }
112
128
  }
129
+ // sort the rows by date
130
+ rows.sort((a, b) => {
131
+ if (a.__quillRawDate < b.__quillRawDate) {
132
+ return -1;
133
+ }
134
+ if (a.__quillRawDate > b.__quillRawDate) {
135
+ return 1;
136
+ }
137
+ return 0;
138
+ });
139
+ // remove the raw date field
140
+ // rows.forEach((row: any) => {
141
+ // delete row.__quillRawDate;
142
+ // });
113
143
  }
114
144
  if (pivot.sort) {
115
145
  rows.sort((a, b) => {
116
146
  if (pivot.sortDirection === 'ASC') {
117
- return compareValues(a, b, pivot.sortField ?? '');
147
+ return compareValues(a, b, pivot.sortField || '');
118
148
  }
119
149
  else {
120
- return compareValues(b, a, pivot.sortField ?? '');
150
+ return compareValues(b, a, pivot.sortField || '');
121
151
  }
122
152
  });
123
153
  }
@@ -130,6 +160,13 @@ export async function generatePivotWithSQL(pivot, report, client, dateBucket, da
130
160
  column.label = 'Count';
131
161
  }
132
162
  });
163
+ // If a numeric column field is not present add it with a value of 0
164
+ const numericColumns = columns?.filter((column) => column.format === 'whole_number' || column.format === 'percentage');
165
+ rows.forEach((row) => {
166
+ numericColumns?.forEach((column) => {
167
+ row[column.field] = row[column.field] ?? 0;
168
+ });
169
+ });
133
170
  return {
134
171
  rows: rows,
135
172
  columns: columns ?? [],
@@ -1 +1 @@
1
- {"version":3,"file":"queryConstructor.d.ts","sourceRoot":"","sources":["../../../src/utils/queryConstructor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAoBxC,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,MAAM,EACpB,cAAc,CAAC,EAAE,MAAM,EAEvB,uBAAuB,CAAC,EAAE,OAAO,EACjC,sBAAsB,CAAC,EAAE,OAAO,UAqEjC;AAED,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,MAAM,UAE1D;AAwDD,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,MAAM,EAAE,EAChB,KAAK,EAAE,MAAM,EACb,YAAY,EAAE,MAAM,UAsBrB;AAED,wBAAgB,qBAAqB,CACnC,YAAY,EAAE,MAAM,EAAE,EACtB,KAAK,EAAE,MAAM,EACb,YAAY,EAAE,MAAM,UAYrB;AAiDD,wBAAgB,0BAA0B,CACxC,YAAY,EAAE,MAAM,EAAE,EACtB,KAAK,EAAE,MAAM,EACb,YAAY,EAAE,MAAM,UAarB;AAED,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,KAAK,EACZ,WAAW,EAAE,MAAM,EAAE,EACrB,YAAY,EAAE,MAAM,EACpB,kBAAkB,CAAC,EAAE,MAAM,EAC3B,eAAe,CAAC,EAAE,MAAM,EAAE,EAC1B,UAAU,CAAC,EAAE,MAAM,EACnB,QAAQ,CAAC,EAAE,MAAM,GAChB,MAAM,GAAG,SAAS,CAgCpB"}
1
+ {"version":3,"file":"queryConstructor.d.ts","sourceRoot":"","sources":["../../../src/utils/queryConstructor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAoBxC,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,MAAM,EACpB,cAAc,CAAC,EAAE,MAAM,EAEvB,uBAAuB,CAAC,EAAE,OAAO,EACjC,sBAAsB,CAAC,EAAE,OAAO,UAqEjC;AAED,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,MAAM,UAE1D;AAwDD,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,MAAM,EAAE,EAChB,KAAK,EAAE,MAAM,EACb,YAAY,EAAE,MAAM,UAsBrB;AAED,wBAAgB,qBAAqB,CACnC,YAAY,EAAE,MAAM,EAAE,EACtB,KAAK,EAAE,MAAM,EACb,YAAY,EAAE,MAAM,UAYrB;AAiDD,wBAAgB,0BAA0B,CACxC,YAAY,EAAE,MAAM,EAAE,EACtB,KAAK,EAAE,MAAM,EACb,YAAY,EAAE,MAAM,UAcrB;AAED,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,KAAK,EACZ,WAAW,EAAE,MAAM,EAAE,EACrB,YAAY,EAAE,MAAM,EACpB,kBAAkB,CAAC,EAAE,MAAM,EAC3B,eAAe,CAAC,EAAE,MAAM,EAAE,EAC1B,UAAU,CAAC,EAAE,MAAM,EACnB,QAAQ,CAAC,EAAE,MAAM,GAChB,MAAM,GAAG,SAAS,CAgCpB"}
@@ -183,11 +183,12 @@ function generateDistinctQuerySnowflake(stringFields, query) {
183
183
  }
184
184
  export function generateMinMaxRangeQueries(columnFields, query, databaseType) {
185
185
  const max = databaseType.toLowerCase() === 'snowflake' ? 'GREATEST' : 'MAX';
186
+ const min = databaseType.toLowerCase() === 'snowflake' ? 'LEAST' : 'MIN';
186
187
  const distinctQueries = columnFields.map((field) => {
187
188
  const wrappedField = ['postgresql'].includes(databaseType.toLowerCase())
188
189
  ? `"${field}"`
189
190
  : field;
190
- return `SELECT '${field}' AS field, MIN(${wrappedField}) AS min_range, ${max}(${wrappedField}) AS max_range FROM querytable`;
191
+ return `SELECT '${field}' AS field, ${min}(${wrappedField}) AS min_range, ${max}(${wrappedField}) AS max_range FROM querytable`;
191
192
  });
192
193
  const distinctQuery = distinctQueries.join(' UNION ALL ');
193
194
  return `WITH querytable AS (${query.replace(';', '')}) ` + distinctQuery;
@@ -570,5 +571,5 @@ function createAggregationValuePivot(pivot, itemQueries, databaseType, rowLimit)
570
571
  quill_qt_agg AS (SELECT ${aggregationType}(${valueAlias}) as ${processColumnReference(`${valueField}`, databaseType)} FROM quill_alias)
571
572
  ${compareCTE} ${aliasCTE} ${compareAggregation}
572
573
  SELECT * FROM quill_qt_agg qt
573
- ${joinQuery}${rowLimit ? ` LIMIT ${rowLimit}` : ''}`;
574
+ ${joinQuery} ${rowLimit ? ` LIMIT ${rowLimit}` : ''}`;
574
575
  }
@@ -46,7 +46,7 @@ export declare function saveReport({ report, dashboardItemId, client, }: {
46
46
  client: QuillProviderClient;
47
47
  }): Promise<any>;
48
48
  export declare const formatRowsFromReport: (report: any) => any;
49
- export declare function convertInternalReportToReport(report: QuillReportInternal, dashboardFilters: DashboardFilter[]): QuillReport;
49
+ export declare function convertInternalReportToReport(report: QuillReportInternal, dashboardFilters: DashboardFilter[], initiator?: string): QuillReport;
50
50
  export declare const fetchReportBuilderDataFromAST: (baseAst: any, formData: any, schema: Table[], client: QuillProviderClient, pivot?: Pivot, previousFormData?: any, currentTable?: string, previousRelevant?: {
51
51
  uniqueStrings: UniqueValuesByTable;
52
52
  dateRanges: DateRangesByColumn;
@@ -1 +1 @@
1
- {"version":3,"file":"report.d.ts","sourceRoot":"","sources":["../../../src/utils/report.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"report.d.ts","sourceRoot":"","sources":["../../../src/utils/report.ts"],"names":[],"mappings":"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"}
@@ -272,7 +272,7 @@ export const formatRowsFromReport = (report) => {
272
272
  }, {});
273
273
  });
274
274
  };
275
- export function convertInternalReportToReport(report, dashboardFilters) {
275
+ export function convertInternalReportToReport(report, dashboardFilters, initiator) {
276
276
  try {
277
277
  if (!report) {
278
278
  return EMPTY_REPORT;
@@ -280,7 +280,9 @@ export function convertInternalReportToReport(report, dashboardFilters) {
280
280
  const formattedReport = {
281
281
  ...report,
282
282
  };
283
- if (formattedReport.pivot && isValidPivot(formattedReport.pivot)) {
283
+ if (formattedReport.pivot &&
284
+ isValidPivot(formattedReport.pivot) &&
285
+ initiator !== 'useQuill') {
284
286
  let columns = report.pivotColumns ?? report.columns;
285
287
  let rows = report.pivotRows ?? report.rows;
286
288
  if (report.chartType === 'table') {
@@ -7,13 +7,17 @@ type Props = {
7
7
  value: any;
8
8
  field: string | undefined | null;
9
9
  fields: Field[];
10
+ dateRange?: {
11
+ start: Date;
12
+ end: Date;
13
+ };
10
14
  };
11
15
  export declare const DATE_FORMAT_TYPES: string[];
12
16
  export declare const NUMBER_FORMAT_TYPES: string[];
13
17
  /**
14
18
  * Pretty-prints the given values to their nice-looking string form.
15
19
  */
16
- export declare const valueFormatter: ({ value, field, fields }: Props) => string;
20
+ export declare const valueFormatter: ({ value, field, fields, dateRange, }: Props) => string;
17
21
  export declare const quillFormat: ({ value, format, }: {
18
22
  value: any;
19
23
  format: string;
@@ -1 +1 @@
1
- {"version":3,"file":"valueFormatter.d.ts","sourceRoot":"","sources":["../../../src/utils/valueFormatter.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,MAAM,MAAM,KAAK,GAAG;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,UAAU,CAAC;CACpB,CAAC;AAEF,KAAK,KAAK,GAAG;IACX,KAAK,EAAE,GAAG,CAAC;IACX,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAAC;IACjC,MAAM,EAAE,KAAK,EAAE,CAAC;CACjB,CAAC;AAEF,eAAO,MAAM,iBAAiB,UAQ7B,CAAC;AAEF,eAAO,MAAM,mBAAmB,UAO/B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,cAAc,6BAA8B,KAAK,KAAG,MA8ChE,CAAC;AAEF,eAAO,MAAM,WAAW,uBAGrB;IACD,KAAK,EAAE,GAAG,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;CAChB,KAAG,MAgDH,CAAC;AA+MF,wBAAgB,YAAY,CAAC,UAAU,EAAE,MAAM,oBAG9C;AAED,eAAO,MAAM,aAAa,MACrB;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;CAAE,KACtB;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;CAAE,UACjB,MAAM,KACb,MAkDF,CAAC"}
1
+ {"version":3,"file":"valueFormatter.d.ts","sourceRoot":"","sources":["../../../src/utils/valueFormatter.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,MAAM,MAAM,KAAK,GAAG;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,UAAU,CAAC;CACpB,CAAC;AAEF,KAAK,KAAK,GAAG;IACX,KAAK,EAAE,GAAG,CAAC;IACX,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAAC;IACjC,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,SAAS,CAAC,EAAE;QAAE,KAAK,EAAE,IAAI,CAAC;QAAC,GAAG,EAAE,IAAI,CAAA;KAAE,CAAC;CACxC,CAAC;AAEF,eAAO,MAAM,iBAAiB,UAQ7B,CAAC;AAEF,eAAO,MAAM,mBAAmB,UAO/B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,cAAc,yCAKxB,KAAK,KAAG,MA8CV,CAAC;AAEF,eAAO,MAAM,WAAW,uBAGrB;IACD,KAAK,EAAE,GAAG,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;CAChB,KAAG,MAkDH,CAAC;AA0OF,wBAAgB,YAAY,CAAC,UAAU,EAAE,MAAM,oBAG9C;AAED,eAAO,MAAM,aAAa,MACrB;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;CAAE,KACtB;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;CAAE,UACjB,MAAM,KACb,MAkDF,CAAC"}
@@ -1,4 +1,4 @@
1
- import { endOfWeek, format, getWeek, isValid, parse, startOfWeek, } from 'date-fns';
1
+ import { endOfWeek, format, getWeek, isAfter, isBefore, isValid, parse, parseISO, startOfWeek, } from 'date-fns';
2
2
  import { utcToZonedTime } from 'date-fns-tz';
3
3
  export const DATE_FORMAT_TYPES = [
4
4
  'yyyy',
@@ -20,7 +20,7 @@ export const NUMBER_FORMAT_TYPES = [
20
20
  /**
21
21
  * Pretty-prints the given values to their nice-looking string form.
22
22
  */
23
- export const valueFormatter = ({ value, field, fields }) => {
23
+ export const valueFormatter = ({ value, field, fields, dateRange, }) => {
24
24
  if (field === undefined || field === null)
25
25
  return '';
26
26
  if (value === undefined || value === null)
@@ -47,7 +47,7 @@ export const valueFormatter = ({ value, field, fields }) => {
47
47
  case 'yyyy':
48
48
  return format_YYYY(value);
49
49
  case 'MMM_dd':
50
- return format_MMM_dd(value);
50
+ return format_MMM_d(value);
51
51
  case 'MMM_yyyy':
52
52
  return format_MMM_yyyy(value);
53
53
  case 'MMM_dd_yyyy':
@@ -58,7 +58,7 @@ export const valueFormatter = ({ value, field, fields }) => {
58
58
  case 'hh_ap_pm':
59
59
  return format_hh_ap_pm(value);
60
60
  case 'MMM_dd-MMM_dd':
61
- return format_MMM_dd_MMM_dd(value);
61
+ return format_MMM_d_MMM_d(value, dateRange);
62
62
  case 'MMM_dd_hh:mm_ap_pm':
63
63
  return format_MMM_dd_hh_mm_ap_pm(value);
64
64
  case 'wo, yyyy':
@@ -92,8 +92,9 @@ export const quillFormat = ({ value, format, }) => {
92
92
  return formatString(value);
93
93
  case 'yyyy':
94
94
  return format_YYYY(value);
95
+ case 'MMM_d':
95
96
  case 'MMM_dd':
96
- return format_MMM_dd(value);
97
+ return format_MMM_d(value);
97
98
  case 'MMM_yyyy':
98
99
  return format_MMM_yyyy(value);
99
100
  case 'MMM_dd_yyyy':
@@ -103,8 +104,9 @@ export const quillFormat = ({ value, format, }) => {
103
104
  // return format_MMM_ww_yyyy(value);
104
105
  case 'hh_ap_pm':
105
106
  return format_hh_ap_pm(value);
107
+ case 'MMM_d-MMM_d':
106
108
  case 'MMM_dd-MMM_dd':
107
- return format_MMM_dd_MMM_dd(value);
109
+ return format_MMM_d_MMM_d(value);
108
110
  case 'MMM_dd_hh:mm_ap_pm':
109
111
  return format_MMM_dd_hh_mm_ap_pm(value);
110
112
  case 'wo, yyyy':
@@ -226,22 +228,40 @@ const _getUTCDateHelper = (value, fmt) => {
226
228
  const format_YYYY = (value) => _getUTCDateHelper(value, 'yyyy');
227
229
  const format_MMM_yyyy = (value) => _getUTCDateHelper(value, 'MMM yyyy');
228
230
  const format_hh_ap_pm = (value) => _getUTCDateHelper(value, 'hh:mm aa');
229
- const format_MMM_dd = (value) => _getUTCDateHelper(value, 'MMM dd');
231
+ const format_MMM_d = (value) => _getUTCDateHelper(value, 'MMM d');
230
232
  const format_MMM_dd_yyyy = (value) => {
231
233
  return _getUTCDateHelper(value, 'dd MMM yyyy');
232
234
  };
233
- const format_MMM_dd_MMM_dd = (value) => {
234
- const utcDate = utcToZonedTime(new Date(value), 'UTC');
235
+ const format_MMM_d_MMM_d = (value, dateRange) => {
236
+ const utcDate = parseISO(value.split('T')[0]);
235
237
  if (!isValid(utcDate))
236
238
  return 'Invalid date';
237
- const monday = startOfWeek(utcDate, { weekStartsOn: 1 });
238
- const sunday = endOfWeek(utcDate, { weekStartsOn: 1 });
239
+ let monday = startOfWeek(utcDate, { weekStartsOn: 1 });
240
+ let sunday = endOfWeek(utcDate, { weekStartsOn: 1 });
241
+ // If date range is provided, adjust the start and end dates
242
+ if (dateRange && dateRange.start && dateRange.end) {
243
+ const utcStartString = dateRange.start.toISOString().split('T')[0];
244
+ const utcEndString = dateRange.end.toISOString().split('T')[0];
245
+ if (utcStartString && utcEndString) {
246
+ const utcStart = parseISO(utcStartString);
247
+ const utcEnd = parseISO(utcEndString);
248
+ if (isBefore(monday, utcStart)) {
249
+ monday = utcStart;
250
+ }
251
+ if (isAfter(sunday, utcEnd)) {
252
+ sunday = utcEnd;
253
+ }
254
+ if (isAfter(monday, utcEnd) || isBefore(sunday, utcStart)) {
255
+ return 'Date outside range';
256
+ }
257
+ }
258
+ }
239
259
  // Check if start and end are in the same month
240
260
  if (format(monday, 'MMM') === format(sunday, 'MMM')) {
241
- return `${format(monday, 'MMM dd')} - ${format(sunday, 'dd')}`;
261
+ return `${format(monday, 'MMM d')} - ${format(sunday, 'd')}`;
242
262
  }
243
263
  else {
244
- return `${format(monday, 'MMM dd')} - ${format(sunday, 'MMM dd')}`;
264
+ return `${format(monday, 'MMM d')} - ${format(sunday, 'MMM d')}`;
245
265
  }
246
266
  };
247
267
  const format_MMM_dd_hh_mm_ap_pm = (value) => {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@quillsql/react",
3
- "version": "2.13.20",
3
+ "version": "2.13.22",
4
4
  "exports": {
5
5
  ".": {
6
6
  "import": "./dist/esm/index.js",
@@ -15,9 +15,9 @@
15
15
  "scripts": {
16
16
  "build": "rm -rf dist && tsc -p tsconfig.json && tsc -p tsconfig.esm.json",
17
17
  "dev": "concurrently \"npm run dev:types\" \"npm run dev:esm\" \"npm run dev:cjs\"",
18
- "dev:types": "tsc --emitDeclarationOnly -w",
19
- "dev:esm": "babel src --out-dir dist/esm --extensions \".ts,.tsx\" --copy-files --watch --env-name esm",
20
18
  "dev:cjs": "babel src --out-dir dist/cjs --extensions \".ts,.tsx\" --copy-files --watch --env-name cjs",
19
+ "dev:esm": "babel src --out-dir dist/esm --extensions \".ts,.tsx\" --copy-files --watch --env-name esm",
20
+ "dev:types": "tsc --emitDeclarationOnly -w",
21
21
  "lint": "eslint . --max-warnings 0",
22
22
  "pub": "rm -rf dist && tsc -p tsconfig.json && tsc -p tsconfig.esm.json && npm publish --access public"
23
23
  },
@@ -56,4 +56,4 @@
56
56
  "react-dom": "^18"
57
57
  },
58
58
  "access": "public"
59
- }
59
+ }