@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.
- package/dist/cjs/Chart.d.ts +4 -0
- package/dist/cjs/Chart.d.ts.map +1 -1
- package/dist/cjs/Chart.js +10 -10
- package/dist/cjs/ChartBuilder.d.ts +3 -1
- package/dist/cjs/ChartBuilder.d.ts.map +1 -1
- package/dist/cjs/ChartBuilder.js +3 -3
- package/dist/cjs/ChartEditor.d.ts +3 -1
- package/dist/cjs/ChartEditor.d.ts.map +1 -1
- package/dist/cjs/ChartEditor.js +2 -2
- package/dist/cjs/Dashboard.d.ts +8 -2
- package/dist/cjs/Dashboard.d.ts.map +1 -1
- package/dist/cjs/Dashboard.js +3 -3
- package/dist/cjs/ReportBuilder.d.ts +3 -1
- package/dist/cjs/ReportBuilder.d.ts.map +1 -1
- package/dist/cjs/ReportBuilder.js +22 -19
- package/dist/cjs/SQLEditor.d.ts +3 -1
- package/dist/cjs/SQLEditor.d.ts.map +1 -1
- package/dist/cjs/SQLEditor.js +2 -2
- package/dist/cjs/components/Chart/BarChart.d.ts +2 -1
- package/dist/cjs/components/Chart/BarChart.d.ts.map +1 -1
- package/dist/cjs/components/Chart/BarChart.js +2 -2
- package/dist/cjs/components/Chart/BarList.d.ts +1 -0
- package/dist/cjs/components/Chart/BarList.d.ts.map +1 -1
- package/dist/cjs/components/Chart/BarList.js +2 -2
- package/dist/cjs/components/Chart/LineChart.d.ts +2 -1
- package/dist/cjs/components/Chart/LineChart.d.ts.map +1 -1
- package/dist/cjs/components/Chart/LineChart.js +2 -2
- package/dist/cjs/components/Chart/PieChart.d.ts +1 -0
- package/dist/cjs/components/Chart/PieChart.d.ts.map +1 -1
- package/dist/cjs/components/Chart/PieChart.js +2 -2
- package/dist/cjs/components/Dashboard/ChartComponent.d.ts +1 -1
- package/dist/cjs/components/Dashboard/ChartComponent.d.ts.map +1 -1
- package/dist/cjs/components/Dashboard/ChartComponent.js +1 -1
- package/dist/cjs/components/ReportBuilder/AddColumnModal.d.ts.map +1 -1
- package/dist/cjs/components/ReportBuilder/AddColumnModal.js +6 -3
- package/dist/cjs/components/ReportBuilder/AddSortPopover.js +2 -2
- package/dist/cjs/components/ReportBuilder/bigDateMap.js +1 -1
- package/dist/cjs/components/ReportBuilder/util.js +8 -8
- package/dist/cjs/internals/ReportBuilder/PivotForm.js +3 -3
- package/dist/cjs/internals/ReportBuilder/PivotList.js +3 -3
- package/dist/cjs/internals/ReportBuilder/PivotModal.d.ts +1 -1
- package/dist/cjs/internals/ReportBuilder/PivotModal.d.ts.map +1 -1
- package/dist/cjs/internals/ReportBuilder/PivotModal.js +35 -15
- package/dist/cjs/utils/axisFormatter.d.ts.map +1 -1
- package/dist/cjs/utils/axisFormatter.js +2 -0
- package/dist/cjs/utils/columnProcessing.d.ts.map +1 -1
- package/dist/cjs/utils/columnProcessing.js +1 -0
- package/dist/cjs/utils/textProcessing.d.ts +1 -0
- package/dist/cjs/utils/textProcessing.d.ts.map +1 -1
- package/dist/cjs/utils/textProcessing.js +21 -1
- package/dist/esm/Chart.d.ts +4 -0
- package/dist/esm/Chart.d.ts.map +1 -1
- package/dist/esm/Chart.js +10 -10
- package/dist/esm/ChartBuilder.d.ts +3 -1
- package/dist/esm/ChartBuilder.d.ts.map +1 -1
- package/dist/esm/ChartBuilder.js +4 -4
- package/dist/esm/ChartEditor.d.ts +3 -1
- package/dist/esm/ChartEditor.d.ts.map +1 -1
- package/dist/esm/ChartEditor.js +2 -2
- package/dist/esm/Dashboard.d.ts +8 -2
- package/dist/esm/Dashboard.d.ts.map +1 -1
- package/dist/esm/Dashboard.js +3 -3
- package/dist/esm/ReportBuilder.d.ts +3 -1
- package/dist/esm/ReportBuilder.d.ts.map +1 -1
- package/dist/esm/ReportBuilder.js +23 -20
- package/dist/esm/SQLEditor.d.ts +3 -1
- package/dist/esm/SQLEditor.d.ts.map +1 -1
- package/dist/esm/SQLEditor.js +2 -2
- package/dist/esm/components/Chart/BarChart.d.ts +2 -1
- package/dist/esm/components/Chart/BarChart.d.ts.map +1 -1
- package/dist/esm/components/Chart/BarChart.js +2 -2
- package/dist/esm/components/Chart/BarList.d.ts +1 -0
- package/dist/esm/components/Chart/BarList.d.ts.map +1 -1
- package/dist/esm/components/Chart/BarList.js +2 -2
- package/dist/esm/components/Chart/LineChart.d.ts +2 -1
- package/dist/esm/components/Chart/LineChart.d.ts.map +1 -1
- package/dist/esm/components/Chart/LineChart.js +2 -2
- package/dist/esm/components/Chart/PieChart.d.ts +1 -0
- package/dist/esm/components/Chart/PieChart.d.ts.map +1 -1
- package/dist/esm/components/Chart/PieChart.js +2 -2
- package/dist/esm/components/Dashboard/ChartComponent.d.ts +1 -1
- package/dist/esm/components/Dashboard/ChartComponent.d.ts.map +1 -1
- package/dist/esm/components/Dashboard/ChartComponent.js +1 -1
- package/dist/esm/components/ReportBuilder/AddColumnModal.d.ts.map +1 -1
- package/dist/esm/components/ReportBuilder/AddColumnModal.js +7 -4
- package/dist/esm/components/ReportBuilder/AddSortPopover.js +3 -3
- package/dist/esm/components/ReportBuilder/bigDateMap.js +2 -2
- package/dist/esm/components/ReportBuilder/util.js +9 -9
- package/dist/esm/internals/ReportBuilder/PivotForm.js +4 -4
- package/dist/esm/internals/ReportBuilder/PivotList.js +4 -4
- package/dist/esm/internals/ReportBuilder/PivotModal.d.ts +1 -1
- package/dist/esm/internals/ReportBuilder/PivotModal.d.ts.map +1 -1
- package/dist/esm/internals/ReportBuilder/PivotModal.js +36 -16
- package/dist/esm/utils/axisFormatter.d.ts.map +1 -1
- package/dist/esm/utils/axisFormatter.js +2 -0
- package/dist/esm/utils/columnProcessing.d.ts.map +1 -1
- package/dist/esm/utils/columnProcessing.js +1 -0
- package/dist/esm/utils/textProcessing.d.ts +1 -0
- package/dist/esm/utils/textProcessing.d.ts.map +1 -1
- package/dist/esm/utils/textProcessing.js +19 -0
- 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;
|
|
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 {
|
|
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
|
-
|
|
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
|
|
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:
|
|
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 {
|
|
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: `${
|
|
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:
|
|
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 {
|
|
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
|
|
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 {
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 {
|
|
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:
|
|
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:
|
|
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:
|
|
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 {
|
|
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:
|
|
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:
|
|
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:
|
|
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":"AAAA,OAAc,EAOZ,SAAS,EACV,MAAM,OAAO,CAAC;
|
|
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 {
|
|
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:
|
|
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:
|
|
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:
|
|
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
|
|
523
|
+
return snakeAndCamelCaseToTitleCase(`${pivot.aggregationType} of ${pivot.rowField}
|
|
524
524
|
`);
|
|
525
525
|
}
|
|
526
526
|
else if (pivot.valueField && !pivot.rowField) {
|
|
527
|
-
return
|
|
527
|
+
return snakeAndCamelCaseToTitleCase(`${pivot.aggregationType} of ${pivot.valueField}
|
|
528
528
|
`);
|
|
529
529
|
}
|
|
530
|
-
return
|
|
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
|
|
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' :
|
|
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
|
-
:
|
|
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 ${
|
|
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:
|
|
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,
|
|
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,
|
|
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"}
|
|
@@ -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;
|