@quillsql/react 2.9.8 → 2.9.91

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.
@@ -1 +1 @@
1
- {"version":3,"file":"Chart.d.ts","sourceRoot":"","sources":["../../src/Chart.tsx"],"names":[],"mappings":";AA0HA,QAAA,MAAM,KAAK;aAcA,MAAM;aACN,GAAG;;;;;uBAKO,OAAO;eACf,OAAO;eACP,OAAO;uBACC,OAAO;6BACD,OAAO;6CAqCjC,CAAC;AA0hBF,eAAe,KAAK,CAAC"}
1
+ {"version":3,"file":"Chart.d.ts","sourceRoot":"","sources":["../../src/Chart.tsx"],"names":[],"mappings":";AA0HA,QAAA,MAAM,KAAK;aAcA,MAAM;aACN,GAAG;;;;;uBAKO,OAAO;eACf,OAAO;eACP,OAAO;uBACC,OAAO;6BACD,OAAO;6CAqCjC,CAAC;AA2hBF,eAAe,KAAK,CAAC"}
package/dist/cjs/Chart.js CHANGED
@@ -265,7 +265,7 @@ const ChartUpdater = ({ colors, chartId, config, containerStyle, dashboard, disp
265
265
  }
266
266
  if (chartTypes.includes('table')) {
267
267
  const data = dashboard[chartId] ? dashboard[chartId] : config;
268
- return ((0, jsx_runtime_1.jsx)(Table_1.SpecialTable, { rows: pivotTable?.rows ?? data.rows ?? [], columns: pivotTable?.columns || data.columns || data.yAxisFields, height: '400px', containerStyle: {
268
+ return ((0, jsx_runtime_1.jsx)(Table_1.SpecialTable, { rows: pivotTable?.rows ?? data.rows ?? [], columns: pivotTable?.columns ?? data.yAxisFields ?? data.columns, height: '400px', containerStyle: {
269
269
  ...containerStyle,
270
270
  }, theme: theme, isTableChart: true, name: data.name }));
271
271
  }
@@ -477,7 +477,7 @@ function ChartBuilderForm({ TextInput = UiComponents_1.MemoizedTextInput, Select
477
477
  ...resp,
478
478
  rows,
479
479
  fields,
480
- filtersApplied: dashboardFilters
480
+ filtersApplied: dashboardFilters,
481
481
  },
482
482
  });
483
483
  }
@@ -511,12 +511,10 @@ function ChartBuilderForm({ TextInput = UiComponents_1.MemoizedTextInput, Select
511
511
  })) })] })), (0, jsx_runtime_1.jsxs)("div", { style: { display: 'flex', flexDirection: 'column' }, children: [(0, jsx_runtime_1.jsx)(Label, { children: "Chart type" }), (0, jsx_runtime_1.jsx)(Select, { label: 'Chart Type', value: formData.chartType, onChange: (e) => handleChange(e, 'chartType'),
512
512
  // filter out metric for all pivots
513
513
  // filter out bar and pie for row and column pivot
514
- options: CHART_TYPES.filter((elem) => !firstNumberColumn
515
- ? elem === 'table'
516
- : !((formData.pivot && elem === 'metric') ||
517
- (formData.pivot &&
518
- formData.pivot.columnField &&
519
- (elem === 'bar' || elem === 'pie')))).map((elem) => ({ label: elem, value: elem })) })] })] }), (0, jsx_runtime_1.jsx)("br", {}), (0, jsx_runtime_1.jsxs)("div", { style: {
514
+ options: CHART_TYPES.filter((elem) => !((formData.pivot && elem === 'metric') ||
515
+ (formData.pivot &&
516
+ formData.pivot.columnField &&
517
+ (elem === 'bar' || elem === 'pie')))).map((elem) => ({ label: elem, value: elem })) })] })] }), (0, jsx_runtime_1.jsx)("br", {}), (0, jsx_runtime_1.jsxs)("div", { style: {
520
518
  display: 'flex',
521
519
  flexDirection: 'column',
522
520
  gap: 12,
@@ -1 +1 @@
1
- {"version":3,"file":"SQLEditor.d.ts","sourceRoot":"","sources":["../../src/SQLEditor.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAmD,MAAM,OAAO,CAAC;AAUxE,wBAAgB,qBAAqB,CAAC,MAAM,KAAA;;;;;EAoE3C;AA2BD,UAAU,oBAAoB;IAC5B,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,UAAU,cAAc;IACtB,cAAc,EAAE,KAAK,CAAC,aAAa,CAAC;IAEpC,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE,oBAAoB,KAAK,GAAG,CAAC,OAAO,CAAC;IAC/D,wBAAwB,CAAC,EAAE,CAAC,KAAK,EAAE,oBAAoB,KAAK,GAAG,CAAC,OAAO,CAAC;IAExE,kBAAkB,CAAC,EAAE,CAAC,KAAK,EAAE,uBAAuB,KAAK,GAAG,CAAC,OAAO,CAAC;IACrE,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,mBAAmB,KAAK,GAAG,CAAC,OAAO,CAAC;IAC7D,gBAAgB,CAAC,EAAE,MAAM,GAAG,CAAC,OAAO,CAAC;IACrC,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IACxC,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IAC9C,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IAC5C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,wBAAwB,CAAC,EAAE,OAAO,CAAC;IACnC,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,aAAa,CAAC,EAAE,GAAG,CAAC;IACpB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,yBAAyB,CAAC,EAAE,MAAM,CAAC;IACnC,wBAAwB,CAAC,EAAE,MAAM,IAAI,CAAC;CACvC;AAQD,UAAU,mBAAmB;IAC3B,IAAI,EAAE,GAAG,EAAE,CAAC;IACZ,OAAO,EAAE,GAAG,EAAE,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,UAAU,uBAAuB;IAC/B,QAAQ,EAAE,CAAC,CAAC,EAAE,GAAG,KAAK,IAAI,CAAC;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AA+ED,MAAM,CAAC,OAAO,UAAU,WAAW,CAAC,EAClC,cAAoC,EACpC,eAAe,EACf,wBAAwB,EACxB,kBAAkB,EAClB,cAAc,EACd,eAAuB,EACvB,gBAAgB,EAChB,YAAY,EACZ,aAAa,EACb,YAAY,EACZ,eAAe,EACf,cAAc,EACd,UAAkB,EAClB,mBAA2B,EAC3B,sBAA8B,EAC9B,oBAA4B,EAC5B,wBAAgC,EAChC,oBAAoB,EACpB,iBAAiB,EACjB,uBAAuB,EACvB,wBAAwB,EACxB,yBAA8C,EAC9C,aAAyB,GAC1B,EAAE,cAAc,2CA2YhB"}
1
+ {"version":3,"file":"SQLEditor.d.ts","sourceRoot":"","sources":["../../src/SQLEditor.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAmD,MAAM,OAAO,CAAC;AAUxE,wBAAgB,qBAAqB,CAAC,MAAM,KAAA;;;;;EA0E3C;AA2BD,UAAU,oBAAoB;IAC5B,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,UAAU,cAAc;IACtB,cAAc,EAAE,KAAK,CAAC,aAAa,CAAC;IAEpC,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE,oBAAoB,KAAK,GAAG,CAAC,OAAO,CAAC;IAC/D,wBAAwB,CAAC,EAAE,CAAC,KAAK,EAAE,oBAAoB,KAAK,GAAG,CAAC,OAAO,CAAC;IAExE,kBAAkB,CAAC,EAAE,CAAC,KAAK,EAAE,uBAAuB,KAAK,GAAG,CAAC,OAAO,CAAC;IACrE,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,mBAAmB,KAAK,GAAG,CAAC,OAAO,CAAC;IAC7D,gBAAgB,CAAC,EAAE,MAAM,GAAG,CAAC,OAAO,CAAC;IACrC,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IACxC,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IAC9C,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IAC5C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,wBAAwB,CAAC,EAAE,OAAO,CAAC;IACnC,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,aAAa,CAAC,EAAE,GAAG,CAAC;IACpB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,yBAAyB,CAAC,EAAE,MAAM,CAAC;IACnC,wBAAwB,CAAC,EAAE,MAAM,IAAI,CAAC;CACvC;AAQD,UAAU,mBAAmB;IAC3B,IAAI,EAAE,GAAG,EAAE,CAAC;IACZ,OAAO,EAAE,GAAG,EAAE,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,UAAU,uBAAuB;IAC/B,QAAQ,EAAE,CAAC,CAAC,EAAE,GAAG,KAAK,IAAI,CAAC;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AA+ED,MAAM,CAAC,OAAO,UAAU,WAAW,CAAC,EAClC,cAAoC,EACpC,eAAe,EACf,wBAAwB,EACxB,kBAAkB,EAClB,cAAc,EACd,eAAuB,EACvB,gBAAgB,EAChB,YAAY,EACZ,aAAa,EACb,YAAY,EACZ,eAAe,EACf,cAAc,EACd,UAAkB,EAClB,mBAA2B,EAC3B,sBAA8B,EAC9B,oBAA4B,EAC5B,wBAAgC,EAChC,oBAAoB,EACpB,iBAAiB,EACjB,uBAAuB,EACvB,wBAAwB,EACxB,yBAA8C,EAC9C,aAAyB,GAC1B,EAAE,cAAc,2CA2YhB"}
@@ -31,6 +31,9 @@ function convertPostgresColumn(column) {
31
31
  case 1082: // date
32
32
  case 1083: // time
33
33
  case 1184: // timestamptz
34
+ case 1186: // interval
35
+ format = 'interval';
36
+ break;
34
37
  case 1114: // timestamp
35
38
  format = 'MMM_dd_yyyy';
36
39
  break;
@@ -66,6 +69,9 @@ function convertPostgresColumn(column) {
66
69
  case 1184: // timestamptz
67
70
  fieldType = 'timestamptz';
68
71
  break;
72
+ case 1186: // interval
73
+ fieldType = 'interval';
74
+ break;
69
75
  case 1114: // timestamp
70
76
  fieldType = 'timestamp';
71
77
  break;
package/dist/cjs/Table.js CHANGED
@@ -458,7 +458,7 @@ const ChartUpdater = ({ chartId, containerStyle, dashboard, dispatch, client, da
458
458
  id: chartId,
459
459
  data: {
460
460
  ...resp,
461
- filtersApplied: dashboardFilters
461
+ filtersApplied: dashboardFilters,
462
462
  },
463
463
  });
464
464
  }
@@ -1 +1 @@
1
- {"version":3,"file":"axisFormatter.d.ts","sourceRoot":"","sources":["../../../src/utils/axisFormatter.ts"],"names":[],"mappings":"AAGA,KAAK,KAAK,GAAG;IACX,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,SAAS,CAAC;CACnB,CAAC;AAEF,KAAK,KAAK,GAAG;IACX,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,GAAG,IAAI,CAAC;IACpD,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAAC;IACjC,MAAM,EAAE,KAAK,EAAE,CAAC;CACjB,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,aAAa,8BAIvB,KAAK,KAAG,MAAM,GAAG,MAAM,GAAG,OA+B5B,CAAC"}
1
+ {"version":3,"file":"axisFormatter.d.ts","sourceRoot":"","sources":["../../../src/utils/axisFormatter.ts"],"names":[],"mappings":"AAGA,KAAK,KAAK,GAAG;IACX,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,SAAS,CAAC;CACnB,CAAC;AAEF,KAAK,KAAK,GAAG;IACX,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,GAAG,IAAI,CAAC;IACpD,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAAC;IACjC,MAAM,EAAE,KAAK,EAAE,CAAC;CACjB,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,aAAa,8BAIvB,KAAK,KAAG,MAAM,GAAG,MAAM,GAAG,OAgC5B,CAAC"}
@@ -25,6 +25,7 @@ const axisFormatter = ({ value, field, fields, }) => {
25
25
  one_decimal_place: formatOneDecimalPlace,
26
26
  two_decimal_places: formatTwoDecimalPlaces,
27
27
  string: formatString,
28
+ interval: formatInterval,
28
29
  yyyy: format_YYYY,
29
30
  MMM_yyyy: format_MMM_yyyy,
30
31
  MMM_dd_yyyy: format_MMM_dd_yyyy,
@@ -48,6 +49,21 @@ exports.axisFormatter = axisFormatter;
48
49
  * Formats the value as a string using the built-in converstion.
49
50
  */
50
51
  const formatString = (value) => value.toString();
52
+ /**
53
+ * Formats the value as an interval.
54
+ */
55
+ const INTERVALS = [
56
+ 'years',
57
+ 'months',
58
+ 'days',
59
+ 'hours',
60
+ 'minutes',
61
+ 'seconds',
62
+ ];
63
+ const formatInterval = (interval) => INTERVALS.map((component) => interval[component])
64
+ .filter((value) => value !== undefined && value !== null)
65
+ .map((value, index) => `${value} ${INTERVALS[index]}`)
66
+ .join(', ');
51
67
  /**
52
68
  * Formats the value as a (rounded) currency amount in dollars.
53
69
  *
@@ -4,18 +4,18 @@ exports.getDataFromCloud = exports.getData = void 0;
4
4
  // this function gets the data either from the self hosted endpoint or
5
5
  // our cloud server
6
6
  async function getData(client, cloudQueryEndpoint, noCred, hostedRequestBody, cloudRequestBody, method = 'POST') {
7
- if (client.queryEndpoint) {
8
- // self hosted
9
- const resp = await fetch(client.queryEndpoint, {
10
- method: 'POST',
11
- headers: {
12
- ...client.queryHeaders,
13
- 'Content-Type': 'application/json',
14
- },
15
- credentials: client.withCredentials ? 'include' : noCred,
16
- body: JSON.stringify(hostedRequestBody),
17
- });
18
- try {
7
+ try {
8
+ if (client.queryEndpoint) {
9
+ // self hosted
10
+ const resp = await fetch(client.queryEndpoint, {
11
+ method: 'POST',
12
+ headers: {
13
+ ...client.queryHeaders,
14
+ 'Content-Type': 'application/json',
15
+ },
16
+ credentials: client.withCredentials ? 'include' : noCred,
17
+ body: JSON.stringify(hostedRequestBody),
18
+ });
19
19
  const responseJson = await resp.json();
20
20
  const result = {
21
21
  ...responseJson.data,
@@ -24,14 +24,14 @@ async function getData(client, cloudQueryEndpoint, noCred, hostedRequestBody, cl
24
24
  };
25
25
  return result;
26
26
  }
27
- catch (e) {
28
- console.error('Failed to parse JSON:', e);
29
- return null;
27
+ else {
28
+ // cloud
29
+ return await getDataFromCloud(client, cloudQueryEndpoint, cloudRequestBody, method);
30
30
  }
31
31
  }
32
- else {
33
- // cloud
34
- return await getDataFromCloud(client, cloudQueryEndpoint, cloudRequestBody, method);
32
+ catch (e) {
33
+ console.error('Failed to parse JSON:', e);
34
+ return null;
35
35
  }
36
36
  }
37
37
  exports.getData = getData;
@@ -1 +1 @@
1
- {"version":3,"file":"valueFormatter.d.ts","sourceRoot":"","sources":["../../../src/utils/valueFormatter.ts"],"names":[],"mappings":"AAGA,KAAK,KAAK,GAAG;IACX,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,SAAS,CAAC;CACnB,CAAC;AAEF,KAAK,KAAK,GAAG;IACX,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,GAAG,IAAI,CAAC;IACpD,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAAC;IACjC,MAAM,EAAE,KAAK,EAAE,CAAC;CACjB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,cAAc,8BAIxB,KAAK,KAAG,MAAM,GAAG,MAAM,GAAG,OA+B5B,CAAC"}
1
+ {"version":3,"file":"valueFormatter.d.ts","sourceRoot":"","sources":["../../../src/utils/valueFormatter.ts"],"names":[],"mappings":"AAGA,KAAK,KAAK,GAAG;IACX,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,SAAS,CAAC;CACnB,CAAC;AAEF,KAAK,KAAK,GAAG;IACX,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,GAAG,IAAI,CAAC;IACpD,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAAC;IACjC,MAAM,EAAE,KAAK,EAAE,CAAC;CACjB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,cAAc,8BAIxB,KAAK,KAAG,MAAM,GAAG,MAAM,GAAG,OAgC5B,CAAC"}
@@ -22,6 +22,7 @@ const valueFormatter = ({ value, field, fields, }) => {
22
22
  one_decimal_place: formatOneDecimalPlace,
23
23
  two_decimal_places: formatTwoDecimalPlaces,
24
24
  string: formatString,
25
+ interval: formatInterval,
25
26
  yyyy: format_YYYY,
26
27
  MMM_yyyy: format_MMM_yyyy,
27
28
  MMM_dd_yyyy: format_MMM_dd_yyyy,
@@ -45,6 +46,21 @@ exports.valueFormatter = valueFormatter;
45
46
  * Formats the value as a string using the built-in converstion.
46
47
  */
47
48
  const formatString = (value) => value.toString();
49
+ /**
50
+ * Formats the value as an interval.
51
+ */
52
+ const INTERVALS = [
53
+ 'years',
54
+ 'months',
55
+ 'days',
56
+ 'hours',
57
+ 'minutes',
58
+ 'seconds',
59
+ ];
60
+ const formatInterval = (interval) => INTERVALS.map((component) => interval[component])
61
+ .filter((value) => value !== undefined && value !== null)
62
+ .map((value, index) => `${value} ${INTERVALS[index]}`)
63
+ .join(', ');
48
64
  /**
49
65
  * Formats the value as a (rounded) currency amount in dollars.
50
66
  *
@@ -1 +1 @@
1
- {"version":3,"file":"valueFormatterCSV.d.ts","sourceRoot":"","sources":["../../../src/utils/valueFormatterCSV.ts"],"names":[],"mappings":"AAGA,KAAK,KAAK,GAAG;IACX,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,SAAS,CAAC;CACnB,CAAC;AAEF,KAAK,KAAK,GAAG;IACX,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,GAAG,IAAI,CAAC;IACpD,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAAC;IACjC,MAAM,EAAE,KAAK,EAAE,CAAC;CACjB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,iBAAiB,8BAI3B,KAAK,KAAG,MAAM,GAAG,MAAM,GAAG,OA+B5B,CAAC"}
1
+ {"version":3,"file":"valueFormatterCSV.d.ts","sourceRoot":"","sources":["../../../src/utils/valueFormatterCSV.ts"],"names":[],"mappings":"AAGA,KAAK,KAAK,GAAG;IACX,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,SAAS,CAAC;CACnB,CAAC;AAEF,KAAK,KAAK,GAAG;IACX,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,GAAG,IAAI,CAAC;IACpD,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAAC;IACjC,MAAM,EAAE,KAAK,EAAE,CAAC;CACjB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,iBAAiB,8BAI3B,KAAK,KAAG,MAAM,GAAG,MAAM,GAAG,OAgC5B,CAAC"}
@@ -22,6 +22,7 @@ const valueFormatterCSV = ({ value, field, fields, }) => {
22
22
  one_decimal_place: formatOneDecimalPlace,
23
23
  two_decimal_places: formatTwoDecimalPlaces,
24
24
  string: formatString,
25
+ interval: formatInterval,
25
26
  yyyy: format_YYYY,
26
27
  MMM_yyyy: format_MMM_yyyy,
27
28
  MMM_dd_yyyy: format_MMM_dd_yyyy,
@@ -92,3 +93,15 @@ const format_wo_yyyy = (value) => {
92
93
  return 'Invalid date';
93
94
  return `${(0, date_fns_1.getWeek)(utcDate)},${utcDate.getFullYear()}`;
94
95
  };
96
+ const INTERVALS = [
97
+ 'years',
98
+ 'months',
99
+ 'days',
100
+ 'hours',
101
+ 'minutes',
102
+ 'seconds',
103
+ ];
104
+ const formatInterval = (interval) => INTERVALS.map((component) => interval[component])
105
+ .filter((value) => value !== undefined && value !== null)
106
+ .map((value, index) => `${value} ${INTERVALS[index]}`)
107
+ .join(', ');
@@ -1 +1 @@
1
- {"version":3,"file":"Chart.d.ts","sourceRoot":"","sources":["../../src/Chart.tsx"],"names":[],"mappings":";AA0HA,QAAA,MAAM,KAAK;aAcA,MAAM;aACN,GAAG;;;;;uBAKO,OAAO;eACf,OAAO;eACP,OAAO;uBACC,OAAO;6BACD,OAAO;6CAqCjC,CAAC;AA0hBF,eAAe,KAAK,CAAC"}
1
+ {"version":3,"file":"Chart.d.ts","sourceRoot":"","sources":["../../src/Chart.tsx"],"names":[],"mappings":";AA0HA,QAAA,MAAM,KAAK;aAcA,MAAM;aACN,GAAG;;;;;uBAKO,OAAO;eACf,OAAO;eACP,OAAO;uBACC,OAAO;6BACD,OAAO;6CAqCjC,CAAC;AA2hBF,eAAe,KAAK,CAAC"}
package/dist/esm/Chart.js CHANGED
@@ -260,7 +260,7 @@ const ChartUpdater = ({ colors, chartId, config, containerStyle, dashboard, disp
260
260
  }
261
261
  if (chartTypes.includes('table')) {
262
262
  const data = dashboard[chartId] ? dashboard[chartId] : config;
263
- return (_jsx(SpecialTable, { rows: pivotTable?.rows ?? data.rows ?? [], columns: pivotTable?.columns || data.columns || data.yAxisFields, height: '400px', containerStyle: {
263
+ return (_jsx(SpecialTable, { rows: pivotTable?.rows ?? data.rows ?? [], columns: pivotTable?.columns ?? data.yAxisFields ?? data.columns, height: '400px', containerStyle: {
264
264
  ...containerStyle,
265
265
  }, theme: theme, isTableChart: true, name: data.name }));
266
266
  }
@@ -469,7 +469,7 @@ function ChartBuilderForm({ TextInput = MemoizedTextInput, Select = MemoizedSele
469
469
  ...resp,
470
470
  rows,
471
471
  fields,
472
- filtersApplied: dashboardFilters
472
+ filtersApplied: dashboardFilters,
473
473
  },
474
474
  });
475
475
  }
@@ -503,12 +503,10 @@ function ChartBuilderForm({ TextInput = MemoizedTextInput, Select = MemoizedSele
503
503
  })) })] })), _jsxs("div", { style: { display: 'flex', flexDirection: 'column' }, children: [_jsx(Label, { children: "Chart type" }), _jsx(Select, { label: 'Chart Type', value: formData.chartType, onChange: (e) => handleChange(e, 'chartType'),
504
504
  // filter out metric for all pivots
505
505
  // filter out bar and pie for row and column pivot
506
- options: CHART_TYPES.filter((elem) => !firstNumberColumn
507
- ? elem === 'table'
508
- : !((formData.pivot && elem === 'metric') ||
509
- (formData.pivot &&
510
- formData.pivot.columnField &&
511
- (elem === 'bar' || elem === 'pie')))).map((elem) => ({ label: elem, value: elem })) })] })] }), _jsx("br", {}), _jsxs("div", { style: {
506
+ options: CHART_TYPES.filter((elem) => !((formData.pivot && elem === 'metric') ||
507
+ (formData.pivot &&
508
+ formData.pivot.columnField &&
509
+ (elem === 'bar' || elem === 'pie')))).map((elem) => ({ label: elem, value: elem })) })] })] }), _jsx("br", {}), _jsxs("div", { style: {
512
510
  display: 'flex',
513
511
  flexDirection: 'column',
514
512
  gap: 12,
@@ -1 +1 @@
1
- {"version":3,"file":"SQLEditor.d.ts","sourceRoot":"","sources":["../../src/SQLEditor.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAmD,MAAM,OAAO,CAAC;AAUxE,wBAAgB,qBAAqB,CAAC,MAAM,KAAA;;;;;EAoE3C;AA2BD,UAAU,oBAAoB;IAC5B,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,UAAU,cAAc;IACtB,cAAc,EAAE,KAAK,CAAC,aAAa,CAAC;IAEpC,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE,oBAAoB,KAAK,GAAG,CAAC,OAAO,CAAC;IAC/D,wBAAwB,CAAC,EAAE,CAAC,KAAK,EAAE,oBAAoB,KAAK,GAAG,CAAC,OAAO,CAAC;IAExE,kBAAkB,CAAC,EAAE,CAAC,KAAK,EAAE,uBAAuB,KAAK,GAAG,CAAC,OAAO,CAAC;IACrE,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,mBAAmB,KAAK,GAAG,CAAC,OAAO,CAAC;IAC7D,gBAAgB,CAAC,EAAE,MAAM,GAAG,CAAC,OAAO,CAAC;IACrC,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IACxC,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IAC9C,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IAC5C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,wBAAwB,CAAC,EAAE,OAAO,CAAC;IACnC,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,aAAa,CAAC,EAAE,GAAG,CAAC;IACpB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,yBAAyB,CAAC,EAAE,MAAM,CAAC;IACnC,wBAAwB,CAAC,EAAE,MAAM,IAAI,CAAC;CACvC;AAQD,UAAU,mBAAmB;IAC3B,IAAI,EAAE,GAAG,EAAE,CAAC;IACZ,OAAO,EAAE,GAAG,EAAE,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,UAAU,uBAAuB;IAC/B,QAAQ,EAAE,CAAC,CAAC,EAAE,GAAG,KAAK,IAAI,CAAC;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AA+ED,MAAM,CAAC,OAAO,UAAU,WAAW,CAAC,EAClC,cAAoC,EACpC,eAAe,EACf,wBAAwB,EACxB,kBAAkB,EAClB,cAAc,EACd,eAAuB,EACvB,gBAAgB,EAChB,YAAY,EACZ,aAAa,EACb,YAAY,EACZ,eAAe,EACf,cAAc,EACd,UAAkB,EAClB,mBAA2B,EAC3B,sBAA8B,EAC9B,oBAA4B,EAC5B,wBAAgC,EAChC,oBAAoB,EACpB,iBAAiB,EACjB,uBAAuB,EACvB,wBAAwB,EACxB,yBAA8C,EAC9C,aAAyB,GAC1B,EAAE,cAAc,2CA2YhB"}
1
+ {"version":3,"file":"SQLEditor.d.ts","sourceRoot":"","sources":["../../src/SQLEditor.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAmD,MAAM,OAAO,CAAC;AAUxE,wBAAgB,qBAAqB,CAAC,MAAM,KAAA;;;;;EA0E3C;AA2BD,UAAU,oBAAoB;IAC5B,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,UAAU,cAAc;IACtB,cAAc,EAAE,KAAK,CAAC,aAAa,CAAC;IAEpC,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE,oBAAoB,KAAK,GAAG,CAAC,OAAO,CAAC;IAC/D,wBAAwB,CAAC,EAAE,CAAC,KAAK,EAAE,oBAAoB,KAAK,GAAG,CAAC,OAAO,CAAC;IAExE,kBAAkB,CAAC,EAAE,CAAC,KAAK,EAAE,uBAAuB,KAAK,GAAG,CAAC,OAAO,CAAC;IACrE,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,mBAAmB,KAAK,GAAG,CAAC,OAAO,CAAC;IAC7D,gBAAgB,CAAC,EAAE,MAAM,GAAG,CAAC,OAAO,CAAC;IACrC,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IACxC,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IAC9C,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IAC5C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,wBAAwB,CAAC,EAAE,OAAO,CAAC;IACnC,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,aAAa,CAAC,EAAE,GAAG,CAAC;IACpB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,yBAAyB,CAAC,EAAE,MAAM,CAAC;IACnC,wBAAwB,CAAC,EAAE,MAAM,IAAI,CAAC;CACvC;AAQD,UAAU,mBAAmB;IAC3B,IAAI,EAAE,GAAG,EAAE,CAAC;IACZ,OAAO,EAAE,GAAG,EAAE,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,UAAU,uBAAuB;IAC/B,QAAQ,EAAE,CAAC,CAAC,EAAE,GAAG,KAAK,IAAI,CAAC;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AA+ED,MAAM,CAAC,OAAO,UAAU,WAAW,CAAC,EAClC,cAAoC,EACpC,eAAe,EACf,wBAAwB,EACxB,kBAAkB,EAClB,cAAc,EACd,eAAuB,EACvB,gBAAgB,EAChB,YAAY,EACZ,aAAa,EACb,YAAY,EACZ,eAAe,EACf,cAAc,EACd,UAAkB,EAClB,mBAA2B,EAC3B,sBAA8B,EAC9B,oBAA4B,EAC5B,wBAAgC,EAChC,oBAAoB,EACpB,iBAAiB,EACjB,uBAAuB,EACvB,wBAAwB,EACxB,yBAA8C,EAC9C,aAAyB,GAC1B,EAAE,cAAc,2CA2YhB"}
@@ -25,6 +25,9 @@ export function convertPostgresColumn(column) {
25
25
  case 1082: // date
26
26
  case 1083: // time
27
27
  case 1184: // timestamptz
28
+ case 1186: // interval
29
+ format = 'interval';
30
+ break;
28
31
  case 1114: // timestamp
29
32
  format = 'MMM_dd_yyyy';
30
33
  break;
@@ -60,6 +63,9 @@ export function convertPostgresColumn(column) {
60
63
  case 1184: // timestamptz
61
64
  fieldType = 'timestamptz';
62
65
  break;
66
+ case 1186: // interval
67
+ fieldType = 'interval';
68
+ break;
63
69
  case 1114: // timestamp
64
70
  fieldType = 'timestamp';
65
71
  break;
package/dist/esm/Table.js CHANGED
@@ -454,7 +454,7 @@ const ChartUpdater = ({ chartId, containerStyle, dashboard, dispatch, client, da
454
454
  id: chartId,
455
455
  data: {
456
456
  ...resp,
457
- filtersApplied: dashboardFilters
457
+ filtersApplied: dashboardFilters,
458
458
  },
459
459
  });
460
460
  }
@@ -1 +1 @@
1
- {"version":3,"file":"axisFormatter.d.ts","sourceRoot":"","sources":["../../../src/utils/axisFormatter.ts"],"names":[],"mappings":"AAGA,KAAK,KAAK,GAAG;IACX,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,SAAS,CAAC;CACnB,CAAC;AAEF,KAAK,KAAK,GAAG;IACX,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,GAAG,IAAI,CAAC;IACpD,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAAC;IACjC,MAAM,EAAE,KAAK,EAAE,CAAC;CACjB,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,aAAa,8BAIvB,KAAK,KAAG,MAAM,GAAG,MAAM,GAAG,OA+B5B,CAAC"}
1
+ {"version":3,"file":"axisFormatter.d.ts","sourceRoot":"","sources":["../../../src/utils/axisFormatter.ts"],"names":[],"mappings":"AAGA,KAAK,KAAK,GAAG;IACX,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,SAAS,CAAC;CACnB,CAAC;AAEF,KAAK,KAAK,GAAG;IACX,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,GAAG,IAAI,CAAC;IACpD,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAAC;IACjC,MAAM,EAAE,KAAK,EAAE,CAAC;CACjB,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,aAAa,8BAIvB,KAAK,KAAG,MAAM,GAAG,MAAM,GAAG,OAgC5B,CAAC"}
@@ -22,6 +22,7 @@ export const axisFormatter = ({ value, field, fields, }) => {
22
22
  one_decimal_place: formatOneDecimalPlace,
23
23
  two_decimal_places: formatTwoDecimalPlaces,
24
24
  string: formatString,
25
+ interval: formatInterval,
25
26
  yyyy: format_YYYY,
26
27
  MMM_yyyy: format_MMM_yyyy,
27
28
  MMM_dd_yyyy: format_MMM_dd_yyyy,
@@ -44,6 +45,21 @@ export const axisFormatter = ({ value, field, fields, }) => {
44
45
  * Formats the value as a string using the built-in converstion.
45
46
  */
46
47
  const formatString = (value) => value.toString();
48
+ /**
49
+ * Formats the value as an interval.
50
+ */
51
+ const INTERVALS = [
52
+ 'years',
53
+ 'months',
54
+ 'days',
55
+ 'hours',
56
+ 'minutes',
57
+ 'seconds',
58
+ ];
59
+ const formatInterval = (interval) => INTERVALS.map((component) => interval[component])
60
+ .filter((value) => value !== undefined && value !== null)
61
+ .map((value, index) => `${value} ${INTERVALS[index]}`)
62
+ .join(', ');
47
63
  /**
48
64
  * Formats the value as a (rounded) currency amount in dollars.
49
65
  *
@@ -1,18 +1,18 @@
1
1
  // this function gets the data either from the self hosted endpoint or
2
2
  // our cloud server
3
3
  export async function getData(client, cloudQueryEndpoint, noCred, hostedRequestBody, cloudRequestBody, method = 'POST') {
4
- if (client.queryEndpoint) {
5
- // self hosted
6
- const resp = await fetch(client.queryEndpoint, {
7
- method: 'POST',
8
- headers: {
9
- ...client.queryHeaders,
10
- 'Content-Type': 'application/json',
11
- },
12
- credentials: client.withCredentials ? 'include' : noCred,
13
- body: JSON.stringify(hostedRequestBody),
14
- });
15
- try {
4
+ try {
5
+ if (client.queryEndpoint) {
6
+ // self hosted
7
+ const resp = await fetch(client.queryEndpoint, {
8
+ method: 'POST',
9
+ headers: {
10
+ ...client.queryHeaders,
11
+ 'Content-Type': 'application/json',
12
+ },
13
+ credentials: client.withCredentials ? 'include' : noCred,
14
+ body: JSON.stringify(hostedRequestBody),
15
+ });
16
16
  const responseJson = await resp.json();
17
17
  const result = {
18
18
  ...responseJson.data,
@@ -21,14 +21,14 @@ export async function getData(client, cloudQueryEndpoint, noCred, hostedRequestB
21
21
  };
22
22
  return result;
23
23
  }
24
- catch (e) {
25
- console.error('Failed to parse JSON:', e);
26
- return null;
24
+ else {
25
+ // cloud
26
+ return await getDataFromCloud(client, cloudQueryEndpoint, cloudRequestBody, method);
27
27
  }
28
28
  }
29
- else {
30
- // cloud
31
- return await getDataFromCloud(client, cloudQueryEndpoint, cloudRequestBody, method);
29
+ catch (e) {
30
+ console.error('Failed to parse JSON:', e);
31
+ return null;
32
32
  }
33
33
  }
34
34
  export async function getDataFromCloud(client, cloudQueryEndpoint, cloudRequestBody, method = 'POST') {
@@ -1 +1 @@
1
- {"version":3,"file":"valueFormatter.d.ts","sourceRoot":"","sources":["../../../src/utils/valueFormatter.ts"],"names":[],"mappings":"AAGA,KAAK,KAAK,GAAG;IACX,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,SAAS,CAAC;CACnB,CAAC;AAEF,KAAK,KAAK,GAAG;IACX,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,GAAG,IAAI,CAAC;IACpD,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAAC;IACjC,MAAM,EAAE,KAAK,EAAE,CAAC;CACjB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,cAAc,8BAIxB,KAAK,KAAG,MAAM,GAAG,MAAM,GAAG,OA+B5B,CAAC"}
1
+ {"version":3,"file":"valueFormatter.d.ts","sourceRoot":"","sources":["../../../src/utils/valueFormatter.ts"],"names":[],"mappings":"AAGA,KAAK,KAAK,GAAG;IACX,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,SAAS,CAAC;CACnB,CAAC;AAEF,KAAK,KAAK,GAAG;IACX,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,GAAG,IAAI,CAAC;IACpD,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAAC;IACjC,MAAM,EAAE,KAAK,EAAE,CAAC;CACjB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,cAAc,8BAIxB,KAAK,KAAG,MAAM,GAAG,MAAM,GAAG,OAgC5B,CAAC"}
@@ -19,6 +19,7 @@ export const valueFormatter = ({ value, field, fields, }) => {
19
19
  one_decimal_place: formatOneDecimalPlace,
20
20
  two_decimal_places: formatTwoDecimalPlaces,
21
21
  string: formatString,
22
+ interval: formatInterval,
22
23
  yyyy: format_YYYY,
23
24
  MMM_yyyy: format_MMM_yyyy,
24
25
  MMM_dd_yyyy: format_MMM_dd_yyyy,
@@ -41,6 +42,21 @@ export const valueFormatter = ({ value, field, fields, }) => {
41
42
  * Formats the value as a string using the built-in converstion.
42
43
  */
43
44
  const formatString = (value) => value.toString();
45
+ /**
46
+ * Formats the value as an interval.
47
+ */
48
+ const INTERVALS = [
49
+ 'years',
50
+ 'months',
51
+ 'days',
52
+ 'hours',
53
+ 'minutes',
54
+ 'seconds',
55
+ ];
56
+ const formatInterval = (interval) => INTERVALS.map((component) => interval[component])
57
+ .filter((value) => value !== undefined && value !== null)
58
+ .map((value, index) => `${value} ${INTERVALS[index]}`)
59
+ .join(', ');
44
60
  /**
45
61
  * Formats the value as a (rounded) currency amount in dollars.
46
62
  *
@@ -1 +1 @@
1
- {"version":3,"file":"valueFormatterCSV.d.ts","sourceRoot":"","sources":["../../../src/utils/valueFormatterCSV.ts"],"names":[],"mappings":"AAGA,KAAK,KAAK,GAAG;IACX,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,SAAS,CAAC;CACnB,CAAC;AAEF,KAAK,KAAK,GAAG;IACX,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,GAAG,IAAI,CAAC;IACpD,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAAC;IACjC,MAAM,EAAE,KAAK,EAAE,CAAC;CACjB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,iBAAiB,8BAI3B,KAAK,KAAG,MAAM,GAAG,MAAM,GAAG,OA+B5B,CAAC"}
1
+ {"version":3,"file":"valueFormatterCSV.d.ts","sourceRoot":"","sources":["../../../src/utils/valueFormatterCSV.ts"],"names":[],"mappings":"AAGA,KAAK,KAAK,GAAG;IACX,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,SAAS,CAAC;CACnB,CAAC;AAEF,KAAK,KAAK,GAAG;IACX,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,GAAG,IAAI,CAAC;IACpD,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAAC;IACjC,MAAM,EAAE,KAAK,EAAE,CAAC;CACjB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,iBAAiB,8BAI3B,KAAK,KAAG,MAAM,GAAG,MAAM,GAAG,OAgC5B,CAAC"}
@@ -19,6 +19,7 @@ export const valueFormatterCSV = ({ value, field, fields, }) => {
19
19
  one_decimal_place: formatOneDecimalPlace,
20
20
  two_decimal_places: formatTwoDecimalPlaces,
21
21
  string: formatString,
22
+ interval: formatInterval,
22
23
  yyyy: format_YYYY,
23
24
  MMM_yyyy: format_MMM_yyyy,
24
25
  MMM_dd_yyyy: format_MMM_dd_yyyy,
@@ -88,3 +89,15 @@ const format_wo_yyyy = (value) => {
88
89
  return 'Invalid date';
89
90
  return `${getWeek(utcDate)},${utcDate.getFullYear()}`;
90
91
  };
92
+ const INTERVALS = [
93
+ 'years',
94
+ 'months',
95
+ 'days',
96
+ 'hours',
97
+ 'minutes',
98
+ 'seconds',
99
+ ];
100
+ const formatInterval = (interval) => INTERVALS.map((component) => interval[component])
101
+ .filter((value) => value !== undefined && value !== null)
102
+ .map((value, index) => `${value} ${INTERVALS[index]}`)
103
+ .join(', ');
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@quillsql/react",
3
- "version": "2.9.8",
3
+ "version": "2.9.91",
4
4
  "exports": {
5
5
  ".": {
6
6
  "import": "./dist/esm/index.js",