@quillsql/react 2.12.14 → 2.12.16

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 (101) hide show
  1. package/dist/cjs/Chart.d.ts +4 -0
  2. package/dist/cjs/Chart.d.ts.map +1 -1
  3. package/dist/cjs/Chart.js +10 -10
  4. package/dist/cjs/ChartBuilder.d.ts +3 -1
  5. package/dist/cjs/ChartBuilder.d.ts.map +1 -1
  6. package/dist/cjs/ChartBuilder.js +3 -3
  7. package/dist/cjs/ChartEditor.d.ts +3 -1
  8. package/dist/cjs/ChartEditor.d.ts.map +1 -1
  9. package/dist/cjs/ChartEditor.js +2 -2
  10. package/dist/cjs/Dashboard.d.ts +8 -2
  11. package/dist/cjs/Dashboard.d.ts.map +1 -1
  12. package/dist/cjs/Dashboard.js +3 -3
  13. package/dist/cjs/ReportBuilder.d.ts +3 -1
  14. package/dist/cjs/ReportBuilder.d.ts.map +1 -1
  15. package/dist/cjs/ReportBuilder.js +22 -19
  16. package/dist/cjs/SQLEditor.d.ts +3 -1
  17. package/dist/cjs/SQLEditor.d.ts.map +1 -1
  18. package/dist/cjs/SQLEditor.js +2 -2
  19. package/dist/cjs/components/Chart/BarChart.d.ts +2 -1
  20. package/dist/cjs/components/Chart/BarChart.d.ts.map +1 -1
  21. package/dist/cjs/components/Chart/BarChart.js +2 -2
  22. package/dist/cjs/components/Chart/BarList.d.ts +1 -0
  23. package/dist/cjs/components/Chart/BarList.d.ts.map +1 -1
  24. package/dist/cjs/components/Chart/BarList.js +2 -2
  25. package/dist/cjs/components/Chart/LineChart.d.ts +2 -1
  26. package/dist/cjs/components/Chart/LineChart.d.ts.map +1 -1
  27. package/dist/cjs/components/Chart/LineChart.js +2 -2
  28. package/dist/cjs/components/Chart/PieChart.d.ts +1 -0
  29. package/dist/cjs/components/Chart/PieChart.d.ts.map +1 -1
  30. package/dist/cjs/components/Chart/PieChart.js +2 -2
  31. package/dist/cjs/components/Dashboard/ChartComponent.d.ts +1 -1
  32. package/dist/cjs/components/Dashboard/ChartComponent.d.ts.map +1 -1
  33. package/dist/cjs/components/Dashboard/ChartComponent.js +1 -1
  34. package/dist/cjs/components/ReportBuilder/AddColumnModal.d.ts.map +1 -1
  35. package/dist/cjs/components/ReportBuilder/AddColumnModal.js +6 -3
  36. package/dist/cjs/components/ReportBuilder/AddSortPopover.js +2 -2
  37. package/dist/cjs/components/ReportBuilder/bigDateMap.js +1 -1
  38. package/dist/cjs/components/ReportBuilder/util.js +8 -8
  39. package/dist/cjs/internals/ReportBuilder/PivotForm.js +3 -3
  40. package/dist/cjs/internals/ReportBuilder/PivotList.js +3 -3
  41. package/dist/cjs/internals/ReportBuilder/PivotModal.d.ts +1 -1
  42. package/dist/cjs/internals/ReportBuilder/PivotModal.d.ts.map +1 -1
  43. package/dist/cjs/internals/ReportBuilder/PivotModal.js +35 -15
  44. package/dist/cjs/utils/axisFormatter.d.ts.map +1 -1
  45. package/dist/cjs/utils/axisFormatter.js +2 -0
  46. package/dist/cjs/utils/columnProcessing.d.ts.map +1 -1
  47. package/dist/cjs/utils/columnProcessing.js +1 -0
  48. package/dist/cjs/utils/textProcessing.d.ts +1 -0
  49. package/dist/cjs/utils/textProcessing.d.ts.map +1 -1
  50. package/dist/cjs/utils/textProcessing.js +21 -1
  51. package/dist/esm/Chart.d.ts +4 -0
  52. package/dist/esm/Chart.d.ts.map +1 -1
  53. package/dist/esm/Chart.js +10 -10
  54. package/dist/esm/ChartBuilder.d.ts +3 -1
  55. package/dist/esm/ChartBuilder.d.ts.map +1 -1
  56. package/dist/esm/ChartBuilder.js +4 -4
  57. package/dist/esm/ChartEditor.d.ts +3 -1
  58. package/dist/esm/ChartEditor.d.ts.map +1 -1
  59. package/dist/esm/ChartEditor.js +2 -2
  60. package/dist/esm/Dashboard.d.ts +8 -2
  61. package/dist/esm/Dashboard.d.ts.map +1 -1
  62. package/dist/esm/Dashboard.js +3 -3
  63. package/dist/esm/ReportBuilder.d.ts +3 -1
  64. package/dist/esm/ReportBuilder.d.ts.map +1 -1
  65. package/dist/esm/ReportBuilder.js +23 -20
  66. package/dist/esm/SQLEditor.d.ts +3 -1
  67. package/dist/esm/SQLEditor.d.ts.map +1 -1
  68. package/dist/esm/SQLEditor.js +2 -2
  69. package/dist/esm/components/Chart/BarChart.d.ts +2 -1
  70. package/dist/esm/components/Chart/BarChart.d.ts.map +1 -1
  71. package/dist/esm/components/Chart/BarChart.js +2 -2
  72. package/dist/esm/components/Chart/BarList.d.ts +1 -0
  73. package/dist/esm/components/Chart/BarList.d.ts.map +1 -1
  74. package/dist/esm/components/Chart/BarList.js +2 -2
  75. package/dist/esm/components/Chart/LineChart.d.ts +2 -1
  76. package/dist/esm/components/Chart/LineChart.d.ts.map +1 -1
  77. package/dist/esm/components/Chart/LineChart.js +2 -2
  78. package/dist/esm/components/Chart/PieChart.d.ts +1 -0
  79. package/dist/esm/components/Chart/PieChart.d.ts.map +1 -1
  80. package/dist/esm/components/Chart/PieChart.js +2 -2
  81. package/dist/esm/components/Dashboard/ChartComponent.d.ts +1 -1
  82. package/dist/esm/components/Dashboard/ChartComponent.d.ts.map +1 -1
  83. package/dist/esm/components/Dashboard/ChartComponent.js +1 -1
  84. package/dist/esm/components/ReportBuilder/AddColumnModal.d.ts.map +1 -1
  85. package/dist/esm/components/ReportBuilder/AddColumnModal.js +7 -4
  86. package/dist/esm/components/ReportBuilder/AddSortPopover.js +3 -3
  87. package/dist/esm/components/ReportBuilder/bigDateMap.js +2 -2
  88. package/dist/esm/components/ReportBuilder/util.js +9 -9
  89. package/dist/esm/internals/ReportBuilder/PivotForm.js +4 -4
  90. package/dist/esm/internals/ReportBuilder/PivotList.js +4 -4
  91. package/dist/esm/internals/ReportBuilder/PivotModal.d.ts +1 -1
  92. package/dist/esm/internals/ReportBuilder/PivotModal.d.ts.map +1 -1
  93. package/dist/esm/internals/ReportBuilder/PivotModal.js +36 -16
  94. package/dist/esm/utils/axisFormatter.d.ts.map +1 -1
  95. package/dist/esm/utils/axisFormatter.js +2 -0
  96. package/dist/esm/utils/columnProcessing.d.ts.map +1 -1
  97. package/dist/esm/utils/columnProcessing.js +1 -0
  98. package/dist/esm/utils/textProcessing.d.ts +1 -0
  99. package/dist/esm/utils/textProcessing.d.ts.map +1 -1
  100. package/dist/esm/utils/textProcessing.js +19 -0
  101. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"AddColumnModal.d.ts","sourceRoot":"","sources":["../../../../src/components/ReportBuilder/AddColumnModal.tsx"],"names":[],"mappings":";AAoBA,OAAO,EAEL,uBAAuB,EACxB,MAAM,iBAAiB,CAAC;AAGzB,MAAM,CAAC,OAAO,UAAU,cAAc,CAAC,EACrC,MAAM,EACN,kBAAkB,EAClB,qBAAqB,EACrB,eAAe,EACf,kBAAkB,EAClB,oBAAoB,EACpB,aAAa,EACb,YAAY,EACZ,OAAO,EACP,UAAU,EACV,KAAK,EACL,gBAAgB,EAChB,UAAU,EACV,YAAY,EACZ,QAAQ,EACR,SAAS,EACT,YAAY,EACZ,eAAe,EACf,MAAM,EACN,sBAAoD,GACrD,EAAE;IACD,MAAM,EAAE,GAAG,CAAC;IACZ,kBAAkB,EAAE,GAAG,CAAC;IACxB,qBAAqB,EAAE,GAAG,CAAC;IAC3B,eAAe,EAAE,GAAG,CAAC;IACrB,kBAAkB,EAAE,GAAG,CAAC;IACxB,oBAAoB,EAAE,GAAG,CAAC;IAC1B,aAAa,EAAE,GAAG,CAAC;IACnB,YAAY,EAAE,GAAG,CAAC;IAClB,OAAO,EAAE,GAAG,CAAC;IACb,UAAU,EAAE,GAAG,CAAC;IAChB,KAAK,EAAE,GAAG,CAAC;IACX,gBAAgB,EAAE,GAAG,CAAC;IACtB,UAAU,EAAE,GAAG,CAAC;IAChB,YAAY,EAAE,GAAG,CAAC;IAClB,QAAQ,EAAE,GAAG,CAAC;IACd,SAAS,EAAE,CAAC,KAAK,EAAE,uBAAuB,KAAK,GAAG,CAAC,OAAO,CAAC;IAC3D,YAAY,EAAE,CAAC,KAAK,EAAE;QACpB,KAAK,EAAE,MAAM,CAAC;QACd,UAAU,EAAE,OAAO,CAAC;QACpB,WAAW,EAAE,MAAM,IAAI,CAAC;QACxB,UAAU,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE;YAAE,QAAQ,EAAE,MAAM,GAAG,CAAC,OAAO,CAAA;SAAE,KAAK,GAAG,CAAC,OAAO,CAAC;KAC5E,KAAK,GAAG,CAAC,OAAO,CAAC;IAClB,eAAe,EAAE,GAAG,CAAC;IACrB,MAAM,EAAE,GAAG,CAAC;IACZ,sBAAsB,EAAE,MAAM,GAAG,CAAC,OAAO,CAAC;CAC3C,2CA+MA"}
1
+ {"version":3,"file":"AddColumnModal.d.ts","sourceRoot":"","sources":["../../../../src/components/ReportBuilder/AddColumnModal.tsx"],"names":[],"mappings":";AAoBA,OAAO,EAEL,uBAAuB,EACxB,MAAM,iBAAiB,CAAC;AAMzB,MAAM,CAAC,OAAO,UAAU,cAAc,CAAC,EACrC,MAAM,EACN,kBAAkB,EAClB,qBAAqB,EACrB,eAAe,EACf,kBAAkB,EAClB,oBAAoB,EACpB,aAAa,EACb,YAAY,EACZ,OAAO,EACP,UAAU,EACV,KAAK,EACL,gBAAgB,EAChB,UAAU,EACV,YAAY,EACZ,QAAQ,EACR,SAAS,EACT,YAAY,EACZ,eAAe,EACf,MAAM,EACN,sBAAoD,GACrD,EAAE;IACD,MAAM,EAAE,GAAG,CAAC;IACZ,kBAAkB,EAAE,GAAG,CAAC;IACxB,qBAAqB,EAAE,GAAG,CAAC;IAC3B,eAAe,EAAE,GAAG,CAAC;IACrB,kBAAkB,EAAE,GAAG,CAAC;IACxB,oBAAoB,EAAE,GAAG,CAAC;IAC1B,aAAa,EAAE,GAAG,CAAC;IACnB,YAAY,EAAE,GAAG,CAAC;IAClB,OAAO,EAAE,GAAG,CAAC;IACb,UAAU,EAAE,GAAG,CAAC;IAChB,KAAK,EAAE,GAAG,CAAC;IACX,gBAAgB,EAAE,GAAG,CAAC;IACtB,UAAU,EAAE,GAAG,CAAC;IAChB,YAAY,EAAE,GAAG,CAAC;IAClB,QAAQ,EAAE,GAAG,CAAC;IACd,SAAS,EAAE,CAAC,KAAK,EAAE,uBAAuB,KAAK,GAAG,CAAC,OAAO,CAAC;IAC3D,YAAY,EAAE,CAAC,KAAK,EAAE;QACpB,KAAK,EAAE,MAAM,CAAC;QACd,UAAU,EAAE,OAAO,CAAC;QACpB,WAAW,EAAE,MAAM,IAAI,CAAC;QACxB,UAAU,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE;YAAE,QAAQ,EAAE,MAAM,GAAG,CAAC,OAAO,CAAA;SAAE,KAAK,GAAG,CAAC,OAAO,CAAC;KAC5E,KAAK,GAAG,CAAC,OAAO,CAAC;IAClB,eAAe,EAAE,GAAG,CAAC;IACrB,MAAM,EAAE,GAAG,CAAC;IACZ,sBAAsB,EAAE,MAAM,GAAG,CAAC,OAAO,CAAC;CAC3C,2CAkNA"}
@@ -6,7 +6,7 @@ import { arrayMove, SortableContext, sortableKeyboardCoordinates, verticalListSo
6
6
  import { CSS as DND_CSS } from '@dnd-kit/utilities';
7
7
  import { ThemeContext } from '../../Context';
8
8
  import { QuillColumnSearchEmptyState, } from '../UiComponents';
9
- import { snakeCaseToTitleCase } from '../../utils/textProcessing';
9
+ import { snakeAndCamelCaseToTitleCase, } from '../../utils/textProcessing';
10
10
  export default function AddColumnModal({ onSave, orderedColumnNames, setOrderedColumnNames, selectedColumns, setSelectedColumns, isSelectedAllColumns, clearAllState, nameToColumn, baseAst, setBaseAst, pivot, initialTableName, defaultAST, defaultTable, setPivot, TextInput, SelectColumn, SecondaryButton, Button, ColumnSearchEmptyState = QuillColumnSearchEmptyState, }) {
11
11
  const [theme] = useContext(ThemeContext);
12
12
  const [search, setSearch] = useState('');
@@ -43,7 +43,7 @@ export default function AddColumnModal({ onSave, orderedColumnNames, setOrderedC
43
43
  })
44
44
  .filter((row) => search.length === 0 ||
45
45
  row.includes(search) ||
46
- snakeCaseToTitleCase(row)
46
+ snakeAndCamelCaseToTitleCase(row)
47
47
  .toLowerCase()
48
48
  .includes(search.toLowerCase())));
49
49
  }, [search, orderedColumnNames, selectedColumns]);
@@ -70,7 +70,10 @@ export default function AddColumnModal({ onSave, orderedColumnNames, setOrderedC
70
70
  overflowY: 'auto',
71
71
  maxWidth: '400px',
72
72
  }, children: [searchResults.map((value) => {
73
- return (_jsx(SortableItem, { selectedColumns: selectedColumns, setSelectedColumns: setSelectedColumns, id: value, label: value.replace('.', ' | '), SelectColumn: SelectColumn }, value));
73
+ return (_jsx(SortableItem, { selectedColumns: selectedColumns, setSelectedColumns: setSelectedColumns, id: value, label: value
74
+ .split('.')
75
+ .map((v) => snakeAndCamelCaseToTitleCase(v))
76
+ .join(' | '), SelectColumn: SelectColumn }, value));
74
77
  }), search.length > 0 && searchResults.length === 0 && (_jsx(ColumnSearchEmptyState, {}))] }) }) }), _jsxs("div", { style: {
75
78
  display: 'flex',
76
79
  width: '100%',
@@ -139,7 +142,7 @@ const SortableItem = ({ id, label, setSelectedColumns, selectedColumns, SelectCo
139
142
  }
140
143
  });
141
144
  };
142
- return (_jsx("div", { style: { userSelect: 'none', ...style }, ref: setNodeRef, children: _jsx(SelectColumn, { isSelected: selectedColumns?.includes(id), setSelected: handleSelect, label: snakeCaseToTitleCase(label), DragHandle: (props) => (_jsx("div", { style: {
145
+ return (_jsx("div", { style: { userSelect: 'none', ...style }, ref: setNodeRef, children: _jsx(SelectColumn, { isSelected: selectedColumns?.includes(id), setSelected: handleSelect, label: snakeAndCamelCaseToTitleCase(label), DragHandle: (props) => (_jsx("div", { style: {
143
146
  cursor: 'grab',
144
147
  }, ...attributes, ...listeners, children: _jsx(props.dragIcon, {}) })) }) }));
145
148
  };
@@ -2,7 +2,7 @@ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-run
2
2
  import { useState } from 'react';
3
3
  import { QuillSelectComponent } from '../QuillSelect';
4
4
  import { MemoizedButton, MemoizedSecondaryButton, } from '../UiComponents';
5
- import { snakeCaseToTitleCase } from '../../utils/textProcessing';
5
+ import { snakeAndCamelCaseToTitleCase } from '../../utils/textProcessing';
6
6
  const SORT_VALUE_TO_LABEL = {
7
7
  ASC: 'ascending',
8
8
  DESC: 'descending',
@@ -28,7 +28,7 @@ export const SortSentence = ({ sortData, keyPrefix, columns, handleDelete, setEd
28
28
  if (!sortData && (!sortData.expr.column || !sortData.expr.value)) {
29
29
  return null;
30
30
  }
31
- return (_jsx("div", { children: _jsx(SortPopover, { isOpen: isOpen, setIsOpen: handleSetIsOpen, sortLabel: `${snakeCaseToTitleCase(sortData.expr.column) || snakeCaseToTitleCase(sortData.expr.value)} ${SORT_VALUE_TO_LABEL[sortData.type]}`, onClickDelete: handleClickDelete, popoverTitle: popoverTitle, popoverChildren: _jsx(EditPopover, { onSave: (column, direction) => {
31
+ return (_jsx("div", { children: _jsx(SortPopover, { isOpen: isOpen, setIsOpen: handleSetIsOpen, sortLabel: `${snakeAndCamelCaseToTitleCase(sortData.expr.column) || snakeAndCamelCaseToTitleCase(sortData.expr.value)} ${SORT_VALUE_TO_LABEL[sortData.type]}`, onClickDelete: handleClickDelete, popoverTitle: popoverTitle, popoverChildren: _jsx(EditPopover, { onSave: (column, direction) => {
32
32
  setIsOpen(false);
33
33
  onSave(column, direction);
34
34
  }, columns: columns, isEdit: true, onDelete: handleClickDelete, column: sortData.expr.column || sortData.expr.value, direction: sortData.type, Select: Select, Button: Button, SecondaryButton: SecondaryButton }) }) }));
@@ -45,7 +45,7 @@ export const AddSortPopover = ({ onSave, columns, isEdit, onDelete, column, dire
45
45
  setSortColumn(e.target.value);
46
46
  }, options: [
47
47
  ...columns.map((column) => ({
48
- label: snakeCaseToTitleCase(column.split('.')[1] || ''),
48
+ label: snakeAndCamelCaseToTitleCase(column.split('.')[1] || ''),
49
49
  value: column.split('.')[1],
50
50
  })),
51
51
  ], width: 200 }), _jsx(Select, { label: "Sort Direction", value: sortDirection, onChange: (e) => {
@@ -1,13 +1,13 @@
1
1
  // A giant map of partial objects keys to functions that take the root node
2
2
  // and return a strinified version of the node. Used to populate the filters.
3
- import { snakeCaseToTitleCase } from '../../utils/textProcessing';
3
+ import { snakeAndCamelCaseToTitleCase } from '../../utils/textProcessing';
4
4
  /**
5
5
  * Trims off the _at suffix of columnNames so "created_at" becomes "created"
6
6
  */
7
7
  function cleanDateFieldName(fieldName) {
8
8
  if (!fieldName)
9
9
  return undefined;
10
- return snakeCaseToTitleCase(fieldName.replace('_at', ''));
10
+ return snakeAndCamelCaseToTitleCase(fieldName.replace('_at', ''));
11
11
  }
12
12
  /**
13
13
  * A big map of partial objects and a callback to convert each to a string.
@@ -1,7 +1,7 @@
1
1
  // A collection of reusable, pure, utility functions for the Report Builder.
2
2
  import { getQuarter, format, addMinutes, } from 'date-fns';
3
3
  import { DATE_DESCRIPTION_MAP } from './bigDateMap';
4
- import { snakeCaseToTitleCase } from '../../utils/textProcessing';
4
+ import { snakeAndCamelCaseToTitleCase } from '../../utils/textProcessing';
5
5
  import { isAfterBigQuery, isBeforeBigQuery, isEqualsBigQuery, isInTheLastIntervalBigQuery, isTheCurrentIntervalBigQuery, } from '../../utils/parserBigQuery';
6
6
  import { isInTheLastIntervalPostgres, isTheCurrentIntervalPostgres, } from '../../utils/parserPostgres';
7
7
  /**
@@ -123,7 +123,7 @@ export function formatDateComparisonNode(node) {
123
123
  }
124
124
  export function getInTheCurrentIntervalSentence(node, databaseType) {
125
125
  if (databaseType === 'BigQuery') {
126
- const dateColumn = snakeCaseToTitleCase(node.left.args.value[0].column);
126
+ const dateColumn = snakeAndCamelCaseToTitleCase(node.left.args.value[0].column);
127
127
  const periodValue = node.left.args.value[1].column.toLowerCase();
128
128
  return `${dateColumn} in the current ${periodValue}`;
129
129
  }
@@ -136,7 +136,7 @@ const BIG_QUERY_DAY_TO_INTERVAL_MAP = {
136
136
  };
137
137
  export function getInTheLastIntervalSentence(node, databaseType) {
138
138
  if (databaseType === 'BigQuery') {
139
- const dateColumn = snakeCaseToTitleCase(node.left.column || node.left.args.value[0].columns || '');
139
+ const dateColumn = snakeAndCamelCaseToTitleCase(node.left.column || node.left.args.value[0].columns || '');
140
140
  const amount = node.right.args.value[1].expr.value;
141
141
  let unit = node.right.args.value[1].unit.toLowerCase();
142
142
  if (unit.includes('*')) {
@@ -148,7 +148,7 @@ export function getInTheLastIntervalSentence(node, databaseType) {
148
148
  }
149
149
  export function getInThePreviousIntervalSentence(node, databaseType) {
150
150
  if (databaseType === 'BigQuery') {
151
- const dateColumn = snakeCaseToTitleCase(node.left.args.value[0].column);
151
+ const dateColumn = snakeAndCamelCaseToTitleCase(node.left.args.value[0].column);
152
152
  const periodValue = node.left.args.value[1].column.toLowerCase();
153
153
  return `${dateColumn} in the previous ${periodValue}`;
154
154
  }
@@ -156,7 +156,7 @@ export function getInThePreviousIntervalSentence(node, databaseType) {
156
156
  }
157
157
  export function getIsEqualsSentence(node, databaseType) {
158
158
  if (databaseType === 'BigQuery') {
159
- const dateColumn = snakeCaseToTitleCase(node.left.args.value[1].column);
159
+ const dateColumn = snakeAndCamelCaseToTitleCase(node.left.args.value[1].column);
160
160
  const type = node.right.args.value[1].column.toLowerCase();
161
161
  const value = node.right.args.value[0].value;
162
162
  // using date-fns can I parse the date to short month year
@@ -176,7 +176,7 @@ export function getIsEqualsSentence(node, databaseType) {
176
176
  }
177
177
  export function getIsAfterSentence(node, databaseType) {
178
178
  if (databaseType === 'BigQuery') {
179
- const dateColumn = snakeCaseToTitleCase(node.left?.column || node.left?.args?.value[0]?.columns || '');
179
+ const dateColumn = snakeAndCamelCaseToTitleCase(node.left?.column || node.left?.args?.value[0]?.columns || '');
180
180
  const value = node.right?.value || node.right?.args?.value[0]?.value || '';
181
181
  if (!dateColumn || !value) {
182
182
  return null;
@@ -187,7 +187,7 @@ export function getIsAfterSentence(node, databaseType) {
187
187
  }
188
188
  export function getIsBeforeSentence(node, databaseType) {
189
189
  if (databaseType === 'BigQuery') {
190
- const dateColumn = snakeCaseToTitleCase(node.left?.column || node.left?.args?.value[0]?.columns || '');
190
+ const dateColumn = snakeAndCamelCaseToTitleCase(node.left?.column || node.left?.args?.value[0]?.columns || '');
191
191
  const value = node.right?.value || node.right?.args?.value[0]?.value || '';
192
192
  if (!dateColumn || !value) {
193
193
  return null;
@@ -367,14 +367,14 @@ export function tryConvertDateEquality(node, databaseType) {
367
367
  if (isDateTruncEquals(node, databaseType)) {
368
368
  const columnNode = node.left.args.value[1];
369
369
  const columnName = columnNode.column ?? columnNode.value;
370
- const cleanColumnName = snakeCaseToTitleCase(columnName.replaceAll('_at', ''));
370
+ const cleanColumnName = snakeAndCamelCaseToTitleCase(columnName.replaceAll('_at', ''));
371
371
  const prettyDateSuffix = dateTruncSuffixToString(node, databaseType);
372
372
  return `${cleanColumnName} ${prettyDateSuffix}`;
373
373
  }
374
374
  else if (isExtractEquals(node)) {
375
375
  const columnNode = node.left.args.source;
376
376
  const columnName = columnNode.column ?? columnNode.value;
377
- const cleanColumnName = snakeCaseToTitleCase(columnName.replaceAll('_at', ''));
377
+ const cleanColumnName = snakeAndCamelCaseToTitleCase(columnName.replaceAll('_at', ''));
378
378
  const prettyDateSuffix = extractSuffixToString(node);
379
379
  return `${cleanColumnName} ${prettyDateSuffix}`;
380
380
  }
@@ -1,7 +1,7 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { useEffect, useState } from 'react';
3
3
  import { QuillPivotColumnContainer, } from '../../components/UiComponents';
4
- import { snakeCaseToTitleCase } from '../../utils/textProcessing';
4
+ import { snakeAndCamelCaseToTitleCase } from '../../utils/textProcessing';
5
5
  import { numberFormatOptions } from '../../ChartBuilder';
6
6
  import { getPossiblePivotFieldOptions } from '../../utils/pivotProcessing';
7
7
  export default function PivotForm({ pivotRowField, setPivotRowField, pivotColumnField, setPivotColumnField, pivotValueField, setPivotValueField, pivotAggregation, setPivotAggregation, columns, uniqueValues, onDelete, SecondaryButtonComponent, SelectComponent, PivotColumnContainer = QuillPivotColumnContainer, }) {
@@ -18,21 +18,21 @@ export default function PivotForm({ pivotRowField, setPivotRowField, pivotColumn
18
18
  setPivotRowField(e.target.value === '' ? undefined : e.target.value);
19
19
  }, options: allowedRowFields.map((field) => {
20
20
  return {
21
- label: snakeCaseToTitleCase(field),
21
+ label: snakeAndCamelCaseToTitleCase(field),
22
22
  value: field,
23
23
  };
24
24
  }), width: 200 }), _jsx(SelectComponent, { id: "pivot-row-field", label: "Column field", value: pivotColumnField, onChange: (e) => {
25
25
  setPivotColumnField(e.target.value === '' ? undefined : e.target.value);
26
26
  }, options: allowedColumnFields.map((field) => {
27
27
  return {
28
- label: snakeCaseToTitleCase(field),
28
+ label: snakeAndCamelCaseToTitleCase(field),
29
29
  value: field,
30
30
  };
31
31
  }), width: 200 }), _jsx(SelectComponent, { id: "pivot-row-field", label: "Value field", value: pivotValueField, onChange: (e) => {
32
32
  setPivotValueField(e.target.value === '' ? undefined : e.target.value);
33
33
  }, options: allowedValueFields.map((field) => {
34
34
  return {
35
- label: snakeCaseToTitleCase(field),
35
+ label: snakeAndCamelCaseToTitleCase(field),
36
36
  value: field,
37
37
  };
38
38
  }), width: 200 }), _jsx(SelectComponent, { id: "pivot-row-field", label: "Aggregation type", value: pivotAggregation, onChange: (e) => {
@@ -1,6 +1,6 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { quillFormat } from '../../utils/valueFormatter';
3
- import { snakeCaseToTitleCase } from '../../utils/textProcessing';
3
+ import { snakeAndCamelCaseToTitleCase } from '../../utils/textProcessing';
4
4
  import { QuillCard } from '../../components/QuillCard';
5
5
  export const PivotCard = ({ pivotTable, theme, index, onSelectPivot, selectedPivotIndex, onEditPivot, ButtonComponent, showEdit = false, clickable = true, onClose, minHeight = 0, CardComponent = QuillCard, LabelComponent, TextComponent, HeaderComponent, }) => {
6
6
  const maxRowsInPivotPeak = 5;
@@ -27,14 +27,14 @@ export const PivotCard = ({ pivotTable, theme, index, onSelectPivot, selectedPiv
27
27
  textAlign: 'left',
28
28
  whiteSpace: 'nowrap',
29
29
  textOverflow: 'ellipsis',
30
- }, children: _jsx(LabelComponent, { label: snakeCaseToTitleCase(pivotTable.pivot.rowField) }) }, pivotTable.pivot.rowField)), pivotTable.pivot.columnField && (_jsx("th", { style: {
30
+ }, children: _jsx(LabelComponent, { label: snakeAndCamelCaseToTitleCase(pivotTable.pivot.rowField) }) }, pivotTable.pivot.rowField)), pivotTable.pivot.columnField && (_jsx("th", { style: {
31
31
  fontWeight: 600,
32
32
  paddingRight: 5,
33
33
  flex: 1,
34
34
  textAlign: 'left',
35
35
  whiteSpace: 'nowrap',
36
36
  textOverflow: 'ellipsis',
37
- }, children: _jsx(LabelComponent, { label: snakeCaseToTitleCase(pivotTable.pivot.columnField) }) }, pivotTable.pivot.columnField)), !pivotTable.pivot.columnField &&
37
+ }, children: _jsx(LabelComponent, { label: snakeAndCamelCaseToTitleCase(pivotTable.pivot.columnField) }) }, pivotTable.pivot.columnField)), !pivotTable.pivot.columnField &&
38
38
  pivotTable.pivot.valueField && (_jsx("th", { style: {
39
39
  fontWeight: 600,
40
40
  paddingRight: 5,
@@ -42,7 +42,7 @@ export const PivotCard = ({ pivotTable, theme, index, onSelectPivot, selectedPiv
42
42
  textAlign: 'left',
43
43
  whiteSpace: 'nowrap',
44
44
  textOverflow: 'ellipsis',
45
- }, children: _jsx(LabelComponent, { label: snakeCaseToTitleCase(pivotTable.pivot.valueField) }) }, pivotTable.pivot.valueField))] }) }), _jsx("div", { style: {
45
+ }, children: _jsx(LabelComponent, { label: snakeAndCamelCaseToTitleCase(pivotTable.pivot.valueField) }) }, pivotTable.pivot.valueField))] }) }), _jsx("div", { style: {
46
46
  paddingLeft: '2px',
47
47
  width: '100%',
48
48
  }, children: _jsx(TextComponent, { label: 'No results' }) })] })) : (_jsxs("table", { children: [_jsx("thead", { children: _jsx("tr", { children: pivotTable.columns.map((column) => (_jsx("th", { style: {
@@ -104,7 +104,7 @@ export declare function generatePivotTable(pivot: Pivot, data: any, dateRange: {
104
104
  } | undefined, isComparison: boolean, rowLimit?: number, compRange?: {
105
105
  start: Date;
106
106
  end: Date;
107
- } | undefined): {
107
+ } | undefined, dateBucket?: string): {
108
108
  rows: any[];
109
109
  columns: {
110
110
  label: string;
@@ -1 +1 @@
1
- {"version":3,"file":"PivotModal.d.ts","sourceRoot":"","sources":["../../../../src/internals/ReportBuilder/PivotModal.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"PivotModal.d.ts","sourceRoot":"","sources":["../../../../src/internals/ReportBuilder/PivotModal.tsx"],"names":[],"mappings":"AAAA,OAAc,EAOZ,SAAS,EACV,MAAM,OAAO,CAAC;AAuBf,OAAO,EACL,oBAAoB,EAKrB,MAAM,+BAA+B,CAAC;AAavC,OAAO,EAAU,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAE9D,MAAM,WAAW,KAAK;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAkBD,MAAM,WAAW,eAAe;IAC9B,aAAa,EAAE,GAAG,CAAC;IACnB,gBAAgB,EAAE,GAAG,CAAC;IACtB,gBAAgB,EAAE,GAAG,CAAC;IACtB,mBAAmB,EAAE,GAAG,CAAC;IACzB,eAAe,EAAE,GAAG,CAAC;IACrB,kBAAkB,EAAE,GAAG,CAAC;IACxB,gBAAgB,EAAE,GAAG,CAAC;IACtB,mBAAmB,EAAE,GAAG,CAAC;IACzB,UAAU,EAAE,GAAG,CAAC;IAChB,aAAa,EAAE,GAAG,CAAC;IACnB,aAAa,EAAE,GAAG,CAAC;IACnB,eAAe,EAAE,GAAG,CAAC;IACrB,eAAe,EAAE,GAAG,CAAC;IACrB,aAAa,EAAE,GAAG,CAAC;IACnB,wBAAwB,EAAE,CAAC,KAAK,EAAE,oBAAoB,KAAK,GAAG,CAAC,OAAO,CAAC;IACvE,gBAAgB,EAAE,CAAC,KAAK,EAAE;QACxB,MAAM,EAAE,OAAO,CAAC;QAChB,SAAS,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;QACrC,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;QAClC,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;QAClC,eAAe,EAAE,SAAS,CAAC;KAC5B,KAAK,GAAG,CAAC,OAAO,CAAC;IAClB,eAAe,EAAE,CAAC,KAAK,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,KAAK,GAAG,CAAC,OAAO,CAAC;IAC3D,cAAc,EAAE,CAAC,KAAK,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,KAAK,GAAG,CAAC,OAAO,CAAC;IAC1D,aAAa,EAAE,CAAC,KAAK,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,KAAK,GAAG,CAAC,OAAO,CAAC;IACzD,qBAAqB,CAAC,EAAE,CAAC,KAAK,EAAE;QAAE,YAAY,EAAE,MAAM,CAAA;KAAE,KAAK,GAAG,CAAC,OAAO,CAAC;IACzE,iBAAiB,CAAC,EAAE,CAAC,KAAK,EAAE;QAAE,QAAQ,EAAE,SAAS,CAAA;KAAE,KAAK,GAAG,CAAC,OAAO,CAAC;IACpE,oBAAoB,CAAC,EAAE,CAAC,KAAK,EAAE;QAAE,QAAQ,EAAE,SAAS,CAAA;KAAE,KAAK,GAAG,CAAC,OAAO,CAAC;IACvE,gBAAgB,CAAC,EAAE,MAAM,GAAG,CAAC,OAAO,CAAC;IACrC,kBAAkB,EAAE,GAAG,CAAC;IACxB,qBAAqB,EAAE,GAAG,CAAC;IAC3B,WAAW,EAAE,GAAG,CAAC;IACjB,WAAW,EAAE,GAAG,CAAC;IACjB,eAAe,EAAE,GAAG,CAAC;IACrB,kBAAkB,EAAE,GAAG,CAAC;IACxB,IAAI,EAAE,GAAG,CAAC;IACV,OAAO,EAAE,cAAc,EAAE,CAAC;IAC1B,KAAK,EAAE,GAAG,CAAC;IACX,MAAM,EAAE,GAAG,CAAC;IACZ,SAAS,EAAE,GAAG,CAAC;IACf,SAAS,EAAE,GAAG,CAAC;IACf,aAAa,EAAE,GAAG,CAAC;IACnB,gBAAgB,EAAE,GAAG,CAAC;IACtB,iBAAiB,EAAE,GAAG,CAAC;IACvB,oBAAoB,EAAE,GAAG,CAAC;IAC1B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,SAAS,EAAE,GAAG,CAAC;IACf,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,mBAAmB,CAAC,EAAE,GAAG,CAAC;IAC1B,yBAAyB,CAAC,EAAE,GAAG,CAAC;IAChC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,2BAA2B,CAAC,EAAE,OAAO,CAAC;CACvC;AAED,eAAO,MAAM,UAAU,m3BAqDpB,eAAe,4CA8xBjB,CAAC;AAEF,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,KAAK,EACZ,IAAI,EAAE;IACJ,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf,EAAE,EACH,MAAM,EAAE,MAAM;;;;IAsBf;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,CAiBvD;AAkLD,wBAAgB,WAAW,CAAC,SAAS,EAAE,MAAM,WAY5C;AAgCD,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,KAAK,EACZ,IAAI,EAAE,GAAG,EACT,SAAS,EAAE;IAAE,KAAK,EAAE,IAAI,CAAC;IAAC,GAAG,EAAE,IAAI,CAAA;CAAE,GAAG,SAAS,EACjD,YAAY,EAAE,OAAO,EACrB,QAAQ,SAAK,EACb,SAAS,GAAE;IAAE,KAAK,EAAE,IAAI,CAAC;IAAC,GAAG,EAAE,IAAI,CAAA;CAAE,GAAG,SAAqB,EAC7D,UAAU,CAAC,EAAE,MAAM;;;;;;EA2cpB"}
@@ -6,7 +6,7 @@ import { PivotList, PivotCard } from './PivotList';
6
6
  import { differenceInDays, eachDayOfInterval, eachMonthOfInterval, eachWeekOfInterval, eachYearOfInterval, endOfDay, isWithinInterval, subMilliseconds, } from 'date-fns';
7
7
  import { valueFormatter } from '../../utils/valueFormatter';
8
8
  import { numberFormatOptions, dateFormatOptions } from '../../ChartBuilder';
9
- import { snakeCaseToTitleCase } from '../../utils/textProcessing';
9
+ import { snakeAndCamelCaseToTitleCase, } from '../../utils/textProcessing';
10
10
  import { QuillErrorMessageComponent, QuillLoadingComponent, QuillPivotColumnContainer, QuillPivotRowContainer, } from '../../components/UiComponents';
11
11
  import { isNumericColumnType, } from '../../components/ReportBuilder/ast';
12
12
  import { QuillCard } from '../../components/QuillCard';
@@ -292,7 +292,7 @@ export const PivotModal = ({ pivotRowField, setPivotRowField, pivotColumnField,
292
292
  allowedColumnFields,
293
293
  allowedRowFields,
294
294
  allowedValueFields,
295
- columns
295
+ columns,
296
296
  ]);
297
297
  const pivotFieldChange = async (field, value) => {
298
298
  setErrors([]);
@@ -402,7 +402,7 @@ export const PivotModal = ({ pivotRowField, setPivotRowField, pivotColumnField,
402
402
  : e.target.value);
403
403
  }, options: allowedRowFields.map((field) => {
404
404
  return {
405
- label: snakeCaseToTitleCase(field),
405
+ label: snakeAndCamelCaseToTitleCase(field),
406
406
  value: field,
407
407
  };
408
408
  }), width: 200 }) }), _jsx("div", { ref: colFieldRef, children: _jsx(SelectComponent, { id: "pivot-row-field", label: "Column field", value: pivotColumnField, onChange: (e) => {
@@ -412,7 +412,7 @@ export const PivotModal = ({ pivotRowField, setPivotRowField, pivotColumnField,
412
412
  : e.target.value);
413
413
  }, options: allowedColumnFields.map((field) => {
414
414
  return {
415
- label: snakeCaseToTitleCase(field),
415
+ label: snakeAndCamelCaseToTitleCase(field),
416
416
  value: field,
417
417
  };
418
418
  }), width: 200 }) })] }), _jsxs(PivotRowContainer, { children: [_jsx(SelectComponent, { id: "pivot-row-field", label: "Value field", value: pivotValueField, onChange: (e) => {
@@ -422,7 +422,7 @@ export const PivotModal = ({ pivotRowField, setPivotRowField, pivotColumnField,
422
422
  : e.target.value);
423
423
  }, options: allowedValueFields.map((field) => {
424
424
  return {
425
- label: snakeCaseToTitleCase(field),
425
+ label: snakeAndCamelCaseToTitleCase(field),
426
426
  value: field,
427
427
  };
428
428
  }), width: 200 }), _jsx(SelectComponent, { id: "pivot-row-field", label: "Aggregation type", value: pivotAggregation, onChange: (e) => {
@@ -520,14 +520,14 @@ export function generatePivotTableYAxis(pivot, cols, format) {
520
520
  }
521
521
  export function generatePivotTitle(pivot) {
522
522
  if (pivot.rowField && !pivot.valueField) {
523
- return snakeCaseToTitleCase(`${pivot.aggregationType} of ${pivot.rowField}
523
+ return snakeAndCamelCaseToTitleCase(`${pivot.aggregationType} of ${pivot.rowField}
524
524
  `);
525
525
  }
526
526
  else if (pivot.valueField && !pivot.rowField) {
527
- return snakeCaseToTitleCase(`${pivot.aggregationType} of ${pivot.valueField}
527
+ return snakeAndCamelCaseToTitleCase(`${pivot.aggregationType} of ${pivot.valueField}
528
528
  `);
529
529
  }
530
- return snakeCaseToTitleCase(`${pivot.aggregationType} of ${pivot.valueField} by ${pivot.rowField}${pivot.columnField ? ` and ${pivot.columnField}` : ''}`);
530
+ return snakeAndCamelCaseToTitleCase(`${pivot.aggregationType} of ${pivot.valueField} by ${pivot.rowField}${pivot.columnField ? ` and ${pivot.columnField}` : ''}`);
531
531
  }
532
532
  function castValueToDate(value) {
533
533
  if (!value) {
@@ -600,10 +600,30 @@ function getDateRange(dateRange, column, data) {
600
600
  return dateRange;
601
601
  }
602
602
  }
603
- function getDateBuckets(dateRange, column, data) {
603
+ function determineIntervalThroughOverride(dateBucket, dateRange) {
604
+ switch (dateBucket) {
605
+ case 'day':
606
+ return eachDayOfInterval(dateRange);
607
+ case 'week':
608
+ return eachWeekOfInterval(dateRange, { weekStartsOn: 1 });
609
+ case 'month':
610
+ return eachMonthOfInterval(dateRange);
611
+ case 'year':
612
+ return eachYearOfInterval(dateRange);
613
+ default:
614
+ return eachMonthOfInterval(dateRange);
615
+ }
616
+ }
617
+ function getDateBuckets(dateRange, column, data, dateBucket) {
604
618
  if (!dateRange) {
619
+ if (dateBucket) {
620
+ return determineIntervalThroughOverride(dateBucket, getDateRange(undefined, column, data));
621
+ }
605
622
  return eachMonthOfInterval(getDateRange(dateRange, column, data));
606
623
  }
624
+ if (dateBucket) {
625
+ return determineIntervalThroughOverride(dateBucket, dateRange);
626
+ }
607
627
  const dayDifference = differenceInDays(dateRange.end, dateRange.start);
608
628
  return dayDifferenceToInterval(dayDifference, dateRange);
609
629
  }
@@ -690,7 +710,7 @@ const fixBigQueryData = (data = []) => {
690
710
  }
691
711
  return newData;
692
712
  };
693
- export function generatePivotTable(pivot, data, dateRange, isComparison, rowLimit = -1, compRange = undefined) {
713
+ export function generatePivotTable(pivot, data, dateRange, isComparison, rowLimit = -1, compRange = undefined, dateBucket) {
694
714
  // If there is no rowField, aggregate on the valueField
695
715
  if (!pivot.rowField) {
696
716
  return valueFieldAggregation(data, pivot.valueField, pivot.aggregationType, isComparison);
@@ -709,7 +729,7 @@ export function generatePivotTable(pivot, data, dateRange, isComparison, rowLimi
709
729
  }
710
730
  const pivotRows = [];
711
731
  const uniqueRows = (isDateField(pivot.rowFieldType)
712
- ? getDateBuckets(dateRange, pivot.rowField, data)
732
+ ? getDateBuckets(dateRange, pivot.rowField, data, dateBucket)
713
733
  : [...new Set(data.map((item) => item[pivot.rowField]))]).filter((row) => Boolean(row));
714
734
  const rowDateRange = getDateRange(dateRange, pivot.rowField, data);
715
735
  const compRowDateRange = getDateRange(compRange ?? dateRange, pivot.rowField, data);
@@ -717,7 +737,7 @@ export function generatePivotTable(pivot, data, dateRange, isComparison, rowLimi
717
737
  // @ts-ignore
718
738
  const uniqueColumns = (pivot.columnField
719
739
  ? isDateField(pivot.columnFieldType || '')
720
- ? getDateBuckets(dateRange, pivot.columnField, data)
740
+ ? getDateBuckets(dateRange, pivot.columnField, data, dateBucket)
721
741
  : [...new Set(data.map((item) => item[pivot.columnField || '']))]
722
742
  : [pivot.valueField]).filter((col) => Boolean(col));
723
743
  // Map from new dates to their corresponding prior dates
@@ -974,7 +994,7 @@ export function generatePivotTable(pivot, data, dateRange, isComparison, rowLimi
974
994
  });
975
995
  const columns = [
976
996
  {
977
- label: pivot.rowField === null ? 'Null' : snakeCaseToTitleCase(pivot.rowField),
997
+ label: pivot.rowField === null ? 'Null' : snakeAndCamelCaseToTitleCase(pivot.rowField),
978
998
  field: pivot.rowField,
979
999
  },
980
1000
  ...uniqueColumns.map((column, index) => {
@@ -990,7 +1010,7 @@ export function generatePivotTable(pivot, data, dateRange, isComparison, rowLimi
990
1010
  !pivot.columnField &&
991
1011
  index === 1
992
1012
  ? 'Count'
993
- : snakeCaseToTitleCase(columnName),
1013
+ : snakeAndCamelCaseToTitleCase(columnName),
994
1014
  field: columnName,
995
1015
  };
996
1016
  }),
@@ -1011,7 +1031,7 @@ export function generatePivotTable(pivot, data, dateRange, isComparison, rowLimi
1011
1031
  : isDateField(pivot.columnFieldType || '')
1012
1032
  ? COL_DATE_MAP[getDateString(column, dateRange)] ??
1013
1033
  'Comparison'
1014
- : `comparison ${snakeCaseToTitleCase(columnName)}`,
1034
+ : `comparison ${snakeAndCamelCaseToTitleCase(columnName)}`,
1015
1035
  field: `comparison_${columnName}`,
1016
1036
  };
1017
1037
  })
@@ -1093,6 +1113,6 @@ function valueFieldAggregation(data, valueField, aggregationType, isComparison)
1093
1113
  }
1094
1114
  return {
1095
1115
  rows: [row],
1096
- columns: [{ label: snakeCaseToTitleCase(valueField), field: valueField }],
1116
+ columns: [{ label: snakeAndCamelCaseToTitleCase(valueField), field: valueField }],
1097
1117
  };
1098
1118
  }
@@ -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,OA8B5B,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,OA+B5B,CAAC"}
@@ -24,6 +24,7 @@ export const axisFormatter = ({ value, field, fields, }) => {
24
24
  string: formatString,
25
25
  yyyy: format_YYYY,
26
26
  MMM_yyyy: format_MMM_yyyy,
27
+ MMM_dd: format_MMM_dd,
27
28
  MMM_dd_yyyy: format_MMM_dd_yyyy,
28
29
  hh_ap_pm: format_hh_ap_pm,
29
30
  'MMM_dd-MMM_dd': format_MMM_dd_MMM_dd,
@@ -201,6 +202,7 @@ const _getUTCDateHelper = (value, fmt) => {
201
202
  return format(utcDate, fmt);
202
203
  };
203
204
  const format_YYYY = (value) => _getUTCDateHelper(value, 'yyyy');
205
+ const format_MMM_dd = (value) => _getUTCDateHelper(value, 'dd MMM');
204
206
  const format_MMM_yyyy = (value) => _getUTCDateHelper(value, 'MMM yyyy');
205
207
  const format_hh_ap_pm = (value) => _getUTCDateHelper(value, 'hh:mm aa');
206
208
  const format_MMM_dd_yyyy = (value) => _getUTCDateHelper(value, 'dd MMM yyyy');
@@ -1 +1 @@
1
- {"version":3,"file":"columnProcessing.d.ts","sourceRoot":"","sources":["../../../src/utils/columnProcessing.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAC;AAChE,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAE3D,wBAAgB,qBAAqB,CAAC,KAAK,EAAE;IAC3C,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;CACpB,GAAG,cAAc,CAyGjB;AAED,wBAAgB,iCAAiC,CAC/C,UAAU,EAAE,UAAU,GACrB,cAAc,CAShB;AA0DD,wBAAgB,wBAAwB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAqBlE;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAY5D"}
1
+ {"version":3,"file":"columnProcessing.d.ts","sourceRoot":"","sources":["../../../src/utils/columnProcessing.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAC;AAChE,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAE3D,wBAAgB,qBAAqB,CAAC,KAAK,EAAE;IAC3C,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;CACpB,GAAG,cAAc,CAyGjB;AAED,wBAAgB,iCAAiC,CAC/C,UAAU,EAAE,UAAU,GACrB,cAAc,CAShB;AA0DD,wBAAgB,wBAAwB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAsBlE;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAY5D"}
@@ -182,6 +182,7 @@ export function convertFieldTypeToJSType(fieldType) {
182
182
  return 'date';
183
183
  case 'interval':
184
184
  case 'varchar':
185
+ case 'text':
185
186
  default:
186
187
  return 'string';
187
188
  }
@@ -1,5 +1,6 @@
1
1
  export declare function capitalize(text: string): string;
2
2
  export declare function depluralize(text: string): string;
3
3
  export declare function snakeCaseToTitleCase(str: string): string;
4
+ export declare function snakeAndCamelCaseToTitleCase(str: string): string;
4
5
  export declare function removeDoubleQuotes(str: string): string;
5
6
  //# sourceMappingURL=textProcessing.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"textProcessing.d.ts","sourceRoot":"","sources":["../../../src/utils/textProcessing.ts"],"names":[],"mappings":"AAAA,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE/C;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAQhD;AAED,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,UAa/C;AAED,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,UAK7C"}
1
+ {"version":3,"file":"textProcessing.d.ts","sourceRoot":"","sources":["../../../src/utils/textProcessing.ts"],"names":[],"mappings":"AAAA,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE/C;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAQhD;AAED,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,UAa/C;AAED,wBAAgB,4BAA4B,CAAC,GAAG,EAAE,MAAM,UAiBvD;AAED,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,UAK7C"}
@@ -22,6 +22,25 @@ export function snakeCaseToTitleCase(str) {
22
22
  : word.charAt(0).toUpperCase() + word.slice(1).toLowerCase())
23
23
  .join(' ');
24
24
  }
25
+ export function snakeAndCamelCaseToTitleCase(str) {
26
+ if (!str) {
27
+ return str;
28
+ }
29
+ if (str.includes('_')) {
30
+ return str
31
+ .split(/_| /)
32
+ .map((word) => (word === 'id' ? 'ID' : capitalize(word)))
33
+ .join(' ');
34
+ }
35
+ else {
36
+ const text = str.replace(/([a-z])([A-Z])/g, '$1 $2');
37
+ const newText = text
38
+ .split(' ')
39
+ .map((word) => (word === 'Id' || word === 'id' ? 'ID' : capitalize(word)))
40
+ .join(' ');
41
+ return newText;
42
+ }
43
+ }
25
44
  export function removeDoubleQuotes(str) {
26
45
  if (!str) {
27
46
  return str;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@quillsql/react",
3
- "version": "2.12.14",
3
+ "version": "2.12.16",
4
4
  "exports": {
5
5
  ".": {
6
6
  "import": "./dist/esm/index.js",