@vuu-ui/vuu-table-extras 3.3.11 → 4.0.0-alpha.1
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/package.json +17 -17
- package/src/column-expression-input/column-language-parser/column-expression-parse-utils.js +1 -1
- package/src/column-expression-input/useColumnExpressionEditor.js +0 -1
- package/src/csv-upload/CsvUpload.js +32 -52
- package/src/csv-upload/data-upload-preview/DataUploadPreview.js +1 -1
- package/src/csv-upload/parse/csv-constants.js +2 -2
- package/src/csv-upload/parse/csv-errors.js +0 -1
- package/src/csv-upload/parse/csv-schema-validation.js +0 -9
- package/src/csv-upload/useCsvUpload.js +5 -7
- package/src/tabbed-table-config-panel/TabbedTableConfigPanel.css.js +3 -3
- package/src/tabbed-table-config-panel/TabbedTableConfigPanel.js +29 -27
- package/types/calculated-column/CalculatedColumnPanel.d.ts +1 -1
- package/types/cell-renderers/background-cell/BackgroundCell.d.ts +1 -1
- package/types/cell-renderers/background-cell/BackgroundCellConfigurationEditor.d.ts +1 -1
- package/types/cell-renderers/button-cell/IconButtonCell.d.ts +1 -1
- package/types/cell-renderers/dropdown-cell/DropdownCell.d.ts +1 -1
- package/types/cell-renderers/lookup-cell/LookupCell.d.ts +1 -1
- package/types/cell-renderers/pct-progress-cell/PctProgressCell.d.ts +1 -1
- package/types/column-expression-input/ColumnExpressionInput.d.ts +1 -1
- package/types/column-expression-input/column-language-parser/column-expression-parse-utils.d.ts +1 -1
- package/types/column-expression-input/column-language-parser/generated/column-parser.d.ts +1 -1
- package/types/column-expression-input/column-language-parser/generated/column-parser.terms.d.ts +1 -24
- package/types/column-expression-input/useColumnExpressionEditor.d.ts +4 -4
- package/types/column-formatting-settings/BaseNumericFormattingSettings.d.ts +1 -1
- package/types/column-formatting-settings/ColumnFormattingPanel.d.ts +1 -1
- package/types/column-formatting-settings/LongTypeFormattingSettings.d.ts +2 -1
- package/types/column-menu/ColumnMenu.d.ts +1 -1
- package/types/column-picker/ColumnPickerAction.d.ts +1 -1
- package/types/column-settings-panel/ColumnNameLabel.d.ts +1 -1
- package/types/column-settings-panel/ColumnSettingsPanel.d.ts +1 -1
- package/types/csv-upload/CsvUpload.d.ts +2 -3
- package/types/csv-upload/data-upload-preview/DataUploadPreview.d.ts +1 -1
- package/types/csv-upload/data-upload-preview/useDataUploadPreview.d.ts +1 -1
- package/types/csv-upload/index.d.ts +1 -1
- package/types/csv-upload/parse/csv-constants.d.ts +2 -2
- package/types/csv-upload/parse/csv-errors.d.ts +1 -2
- package/types/csv-upload/parse/csv-schema-validation.d.ts +0 -2
- package/types/csv-upload/parse/index.d.ts +1 -1
- package/types/csv-upload/useCsvUpload.d.ts +2 -3
- package/types/datasource-stats/DatasourceStats.d.ts +1 -1
- package/types/freeze-control/FreezeControl.d.ts +1 -1
- package/types/freeze-control/FrozenBanner.d.ts +1 -1
- package/types/freeze-control/useFreezeControl.d.ts +1 -1
- package/types/inline-add-row/InlineAddRow.d.ts +1 -1
- package/types/inline-add-row/useInlineAddRow.d.ts +23 -23
- package/types/src/csv-upload/CsvUpload.d.ts +1 -2
- package/types/src/csv-upload/index.d.ts +1 -1
- package/types/src/csv-upload/parse/csv-constants.d.ts +2 -2
- package/types/src/csv-upload/parse/csv-errors.d.ts +1 -2
- package/types/src/csv-upload/parse/csv-schema-validation.d.ts +0 -2
- package/types/src/csv-upload/parse/index.d.ts +1 -1
- package/types/src/csv-upload/useCsvUpload.d.ts +2 -3
- package/types/tabbed-table-config-panel/TabbedTableConfigPanel.d.ts +5 -5
- package/types/tabbed-table-config-panel/TabbedTableSettingsAction.d.ts +1 -1
- package/types/table-footer/TableFooter.d.ts +3 -3
- package/types/table-provider/TableProvider.d.ts +1 -1
- package/types/table-settings-panel/TableSettingsPanel.d.ts +1 -1
package/package.json
CHANGED
|
@@ -1,43 +1,43 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "
|
|
2
|
+
"version": "4.0.0-alpha.1",
|
|
3
3
|
"author": "heswell",
|
|
4
4
|
"main": "./src/index.js",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
|
+
"type": "module",
|
|
6
7
|
"scripts": {
|
|
7
8
|
"prebuild": "npm run lezer-generate:column",
|
|
8
9
|
"build:dev": "node ../../scripts/run-build.mjs",
|
|
9
10
|
"build": "node ../../scripts/run-build-rslib.ts",
|
|
10
11
|
"type-defs": "node ../../scripts/build-type-defs.mjs",
|
|
11
|
-
"lezer-generate:column": "lezer-generator --output ./src/column-expression-input/column-language-parser/generated/column-parser.
|
|
12
|
+
"lezer-generate:column": "lezer-generator --output ./src/column-expression-input/column-language-parser/generated/column-parser.ts ./src/column-expression-input/column-language-parser/grammar/column.grammar"
|
|
12
13
|
},
|
|
13
14
|
"devDependencies": {
|
|
14
|
-
"@vuu-ui/vuu-filter-types": "
|
|
15
|
-
"@vuu-ui/vuu-protocol-types": "
|
|
15
|
+
"@vuu-ui/vuu-filter-types": "4.0.0-alpha.1",
|
|
16
|
+
"@vuu-ui/vuu-protocol-types": "4.0.0-alpha.1"
|
|
16
17
|
},
|
|
17
18
|
"dependencies": {
|
|
18
|
-
"@vuu-ui/vuu-codemirror": "
|
|
19
|
-
"@vuu-ui/vuu-data-editing": "
|
|
20
|
-
"@vuu-ui/vuu-data-react": "
|
|
21
|
-
"@vuu-ui/vuu-data-types": "
|
|
22
|
-
"@vuu-ui/vuu-table-types": "
|
|
23
|
-
"@vuu-ui/vuu-popups": "
|
|
24
|
-
"@vuu-ui/vuu-table": "
|
|
25
|
-
"@vuu-ui/vuu-utils": "
|
|
26
|
-
"@vuu-ui/vuu-ui-controls": "
|
|
19
|
+
"@vuu-ui/vuu-codemirror": "4.0.0-alpha.1",
|
|
20
|
+
"@vuu-ui/vuu-data-editing": "4.0.0-alpha.1",
|
|
21
|
+
"@vuu-ui/vuu-data-react": "4.0.0-alpha.1",
|
|
22
|
+
"@vuu-ui/vuu-data-types": "4.0.0-alpha.1",
|
|
23
|
+
"@vuu-ui/vuu-table-types": "4.0.0-alpha.1",
|
|
24
|
+
"@vuu-ui/vuu-popups": "4.0.0-alpha.1",
|
|
25
|
+
"@vuu-ui/vuu-table": "4.0.0-alpha.1",
|
|
26
|
+
"@vuu-ui/vuu-utils": "4.0.0-alpha.1",
|
|
27
|
+
"@vuu-ui/vuu-ui-controls": "4.0.0-alpha.1",
|
|
27
28
|
"@lezer/lr": "1.4.2",
|
|
28
|
-
"@salt-ds/core": "1.
|
|
29
|
-
"@salt-ds/lab": "1.0.0-alpha.
|
|
29
|
+
"@salt-ds/core": "1.67.0",
|
|
30
|
+
"@salt-ds/lab": "1.0.0-alpha.99",
|
|
30
31
|
"@salt-ds/styles": "0.2.1",
|
|
31
32
|
"@salt-ds/window": "0.1.1",
|
|
32
33
|
"csv-parse": "^7.0.0"
|
|
33
34
|
},
|
|
34
35
|
"peerDependencies": {
|
|
35
|
-
"@floating-ui/react": "^0.
|
|
36
|
+
"@floating-ui/react": "^0.27.19",
|
|
36
37
|
"clsx": "^2.0.0",
|
|
37
38
|
"react": "^19.2.3",
|
|
38
39
|
"react-dom": "^19.2.3"
|
|
39
40
|
},
|
|
40
|
-
"type": "module",
|
|
41
41
|
"files": [
|
|
42
42
|
"README.md",
|
|
43
43
|
"src",
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { Button, Dialog, DialogActions, DialogContent, DialogHeader, FileDropZone, FileDropZoneIcon, FileDropZoneTrigger
|
|
2
|
+
import { Button, Dialog, DialogActions, DialogContent, DialogHeader, FileDropZone, FileDropZoneIcon, FileDropZoneTrigger } from "@salt-ds/core";
|
|
3
3
|
import { useComponentCssInjection } from "@salt-ds/styles";
|
|
4
4
|
import { useWindow } from "@salt-ds/window";
|
|
5
5
|
import { useCallback, useState } from "react";
|
|
@@ -18,10 +18,6 @@ const CsvUpload_CsvUpload = (props)=>{
|
|
|
18
18
|
window: targetWindow
|
|
19
19
|
});
|
|
20
20
|
const { canImport, cancelImport, isProcessingFile, isImporting, importData, onDrop, onTriggerChange, schema, validation, error } = useCsvUpload(props);
|
|
21
|
-
const fileErrors = validation?.errors.filter((e)=>e.column in validation.errorMap.fileErrors) ?? [];
|
|
22
|
-
const hasErrors = !!error || validation && validation.errors.length > 0;
|
|
23
|
-
const isUploaded = canImport || isImporting;
|
|
24
|
-
const status = hasErrors ? "error" : isUploaded ? "success" : void 0;
|
|
25
21
|
const handleCancel = useCallback(async ()=>{
|
|
26
22
|
await cancelImport();
|
|
27
23
|
if (!isControlledOpen) setInternalOpen(false);
|
|
@@ -40,55 +36,38 @@ const CsvUpload_CsvUpload = (props)=>{
|
|
|
40
36
|
const content = /*#__PURE__*/ jsxs("div", {
|
|
41
37
|
className: classBase,
|
|
42
38
|
children: [
|
|
43
|
-
/*#__PURE__*/
|
|
39
|
+
/*#__PURE__*/ jsxs(FileDropZone, {
|
|
44
40
|
className: `${classBase}-dropZone`,
|
|
45
41
|
disabled: void 0 === schema || isProcessingFile || isImporting,
|
|
46
42
|
onDrop: onDrop,
|
|
47
|
-
status:
|
|
48
|
-
children:
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
children: "Please rectify and reupload"
|
|
76
|
-
})
|
|
77
|
-
]
|
|
78
|
-
}) : /*#__PURE__*/ jsx("div", {
|
|
79
|
-
children: "Drop a file here or"
|
|
80
|
-
}),
|
|
81
|
-
/*#__PURE__*/ jsx(FileDropZoneTrigger, {
|
|
82
|
-
accept: ".csv,text/csv",
|
|
83
|
-
onChange: onTriggerChange,
|
|
84
|
-
children: "BROWSE FILES"
|
|
85
|
-
}),
|
|
86
|
-
/*#__PURE__*/ jsx(Text, {
|
|
87
|
-
children: "Only .csv files"
|
|
88
|
-
}),
|
|
89
|
-
children
|
|
90
|
-
]
|
|
91
|
-
})
|
|
43
|
+
status: validation && validation.errors.length > 0 || error ? "error" : void 0,
|
|
44
|
+
children: [
|
|
45
|
+
/*#__PURE__*/ jsx(FileDropZoneIcon, {}),
|
|
46
|
+
validation && validation.errors.length > 0 ? /*#__PURE__*/ jsxs(Fragment, {
|
|
47
|
+
children: [
|
|
48
|
+
/*#__PURE__*/ jsx("div", {
|
|
49
|
+
children: "Your file contains errors"
|
|
50
|
+
}),
|
|
51
|
+
/*#__PURE__*/ jsx("ul", {
|
|
52
|
+
className: `${classBase}-errorList`,
|
|
53
|
+
children: validation.errors.filter((e)=>e.column in validation.errorMap.fileErrors).map((error, i)=>/*#__PURE__*/ jsx("li", {
|
|
54
|
+
className: `${classBase}-errorItem`,
|
|
55
|
+
children: error.message
|
|
56
|
+
}, `${error.column}-${error.message}-${i}`))
|
|
57
|
+
}),
|
|
58
|
+
/*#__PURE__*/ jsx("div", {
|
|
59
|
+
children: "Please rectify and reupload"
|
|
60
|
+
})
|
|
61
|
+
]
|
|
62
|
+
}) : /*#__PURE__*/ jsx("div", {
|
|
63
|
+
children: "Drop a file here or"
|
|
64
|
+
}),
|
|
65
|
+
/*#__PURE__*/ jsx(FileDropZoneTrigger, {
|
|
66
|
+
accept: ".csv,text/csv",
|
|
67
|
+
onChange: onTriggerChange,
|
|
68
|
+
children: "BROWSE FILES"
|
|
69
|
+
})
|
|
70
|
+
]
|
|
92
71
|
}),
|
|
93
72
|
error && (renderError ? renderError(error) : /*#__PURE__*/ jsxs("div", {
|
|
94
73
|
className: `${classBase}-errors`,
|
|
@@ -102,7 +81,8 @@ const CsvUpload_CsvUpload = (props)=>{
|
|
|
102
81
|
children: error.errors.importError?.message || error.errors.schemaError?.message || error.errors.validationError?.message || "An unexpected error occurred during import."
|
|
103
82
|
})
|
|
104
83
|
]
|
|
105
|
-
}))
|
|
84
|
+
})),
|
|
85
|
+
children
|
|
106
86
|
]
|
|
107
87
|
});
|
|
108
88
|
const actions = /*#__PURE__*/ jsxs(DialogActions, {
|
|
@@ -15,7 +15,6 @@ var csv_errors_CsvValidationErrorEnum = /*#__PURE__*/ function(CsvValidationErro
|
|
|
15
15
|
CsvValidationErrorEnum["MAX_ROWS_EXCEEDED"] = "MAX_ROWS_EXCEEDED";
|
|
16
16
|
CsvValidationErrorEnum["EMPTY_NON_STRING_VALUE"] = "EMPTY_NON_STRING_VALUE";
|
|
17
17
|
CsvValidationErrorEnum["TYPE_MISMATCH"] = "TYPE_MISMATCH";
|
|
18
|
-
CsvValidationErrorEnum["CUSTOM_VALIDATION"] = "CUSTOM_VALIDATION";
|
|
19
18
|
return CsvValidationErrorEnum;
|
|
20
19
|
}({});
|
|
21
20
|
const createCsvErrorState = ()=>({
|
|
@@ -20,10 +20,6 @@ const validateCsvAgainstSchema = (parsed, tableSchema, options)=>{
|
|
|
20
20
|
parsed.rows.forEach((rowValues, rowIndex)=>{
|
|
21
21
|
const rowNum = rowIndex + CSV_FIRST_DATA_ROW_NUMBER;
|
|
22
22
|
const typedRow = {};
|
|
23
|
-
const rawRow = parsed.header.reduce((acc, headerCol, idx)=>{
|
|
24
|
-
acc[headerCol] = rowValues[idx];
|
|
25
|
-
return acc;
|
|
26
|
-
}, {});
|
|
27
23
|
parsed.header.forEach((columnName, columnIndex)=>{
|
|
28
24
|
const rawValue = rowValues[columnIndex];
|
|
29
25
|
const schemaType = schemaColumns.get(columnName);
|
|
@@ -37,11 +33,6 @@ const validateCsvAgainstSchema = (parsed, tableSchema, options)=>{
|
|
|
37
33
|
return;
|
|
38
34
|
}
|
|
39
35
|
if (void 0 === value) return void addCsvRowError(errorState, rowNum, columnName, CsvValidationErrorEnum.TYPE_MISMATCH, `Value '${rawValue}' is not a valid ${toType}`, rawValue);
|
|
40
|
-
const customValidator = options?.validators?.[columnName];
|
|
41
|
-
if (customValidator) {
|
|
42
|
-
const validationResult = customValidator(rawValue, columnName, rawRow);
|
|
43
|
-
if (true !== validationResult) return void addCsvRowError(errorState, rowNum, columnName, CsvValidationErrorEnum.CUSTOM_VALIDATION, "string" == typeof validationResult ? validationResult : `Value '${rawValue}' failed custom validation.`, rawValue);
|
|
44
|
-
}
|
|
45
36
|
typedRow[columnName] = value;
|
|
46
37
|
});
|
|
47
38
|
typedRows.push(typedRow);
|
|
@@ -5,7 +5,7 @@ import { parseCsv } from "./parse/csv-parse.js";
|
|
|
5
5
|
import { validateCsvAgainstSchema } from "./parse/csv-schema-validation.js";
|
|
6
6
|
import { buildRowErrorMessage, createUploadError, hasFileParseErrors, isCsvParseError, mergeValidationWithParseErrors, toErrorMessage } from "./parse/csv-upload-utils.js";
|
|
7
7
|
import { CSV_FIRST_DATA_ROW_NUMBER } from "./parse/csv-constants.js";
|
|
8
|
-
const useCsvUpload = ({ dataSource, importMode = "direct", importSchema, importTable, onImportSessionEnded, onImportSessionStarted, onError, onImported, onPreview, onProcessingStarted, maxRows, parseOptions, rowDefaults
|
|
8
|
+
const useCsvUpload = ({ dataSource, importMode = "direct", importSchema, importTable, onImportSessionEnded, onImportSessionStarted, onError, onImported, onPreview, onProcessingStarted, maxRows, parseOptions, rowDefaults })=>{
|
|
9
9
|
const { getServerAPI } = useData();
|
|
10
10
|
const [validation, setValidation] = useState();
|
|
11
11
|
const [sessionTable, setSessionTable] = useState();
|
|
@@ -140,7 +140,7 @@ const useCsvUpload = ({ dataSource, importMode = "direct", importSchema, importT
|
|
|
140
140
|
if (rowNum < CSV_FIRST_DATA_ROW_NUMBER) continue;
|
|
141
141
|
const existing = vuuMsgByRow.get(rowNum);
|
|
142
142
|
const columnError = `${column}: ${message}`;
|
|
143
|
-
vuuMsgByRow.set(rowNum, existing ? `${existing}; ${columnError}` :
|
|
143
|
+
vuuMsgByRow.set(rowNum, existing ? `${existing}; ${columnError}` : `Row ${rowNum}: ${columnError}`);
|
|
144
144
|
}
|
|
145
145
|
const parsedRowCount = mergedValidation.rows.length;
|
|
146
146
|
const unparsedErrorRows = [
|
|
@@ -174,7 +174,7 @@ const useCsvUpload = ({ dataSource, importMode = "direct", importSchema, importT
|
|
|
174
174
|
if (isRpcError(result)) throw Error(result.errorMessage);
|
|
175
175
|
if ("string" == typeof result) throw Error(result);
|
|
176
176
|
} catch (error) {
|
|
177
|
-
rpcErrors.push(
|
|
177
|
+
rpcErrors.push(`Row ${rowNum}: ${toErrorMessage(error)}`);
|
|
178
178
|
}
|
|
179
179
|
}
|
|
180
180
|
if (rpcErrors.length > 0) throw Error(buildRowErrorMessage("Import failed", rpcErrors));
|
|
@@ -240,8 +240,7 @@ const useCsvUpload = ({ dataSource, importMode = "direct", importSchema, importT
|
|
|
240
240
|
return;
|
|
241
241
|
}
|
|
242
242
|
const schemaValidation = validateCsvAgainstSchema(parsedCsv, schema, {
|
|
243
|
-
maxRows
|
|
244
|
-
validators
|
|
243
|
+
maxRows
|
|
245
244
|
});
|
|
246
245
|
if (Object.keys(schemaValidation.errorMap.fileErrors).length > 0) {
|
|
247
246
|
setValidation(schemaValidation);
|
|
@@ -289,8 +288,7 @@ const useCsvUpload = ({ dataSource, importMode = "direct", importSchema, importT
|
|
|
289
288
|
dataSource.table,
|
|
290
289
|
table,
|
|
291
290
|
endEditSessionAndNotify,
|
|
292
|
-
schema
|
|
293
|
-
validators
|
|
291
|
+
schema
|
|
294
292
|
]);
|
|
295
293
|
const handleFiles = useCallback(async (files)=>{
|
|
296
294
|
const file = files[0];
|
|
@@ -4,15 +4,15 @@ const css = `
|
|
|
4
4
|
position: absolute;
|
|
5
5
|
inset: 0;
|
|
6
6
|
|
|
7
|
-
& .
|
|
7
|
+
& .saltTabs {
|
|
8
8
|
height: 100%;
|
|
9
9
|
|
|
10
|
-
& .
|
|
10
|
+
& .saltTabList {
|
|
11
11
|
border-bottom: solid var(--salt-separable-secondary-borderColor) 1px;
|
|
12
12
|
height: var(--tabs-height);
|
|
13
13
|
}
|
|
14
14
|
|
|
15
|
-
& .
|
|
15
|
+
& .saltTabPanel {
|
|
16
16
|
height: calc(100% - var(--tabs-height));
|
|
17
17
|
}
|
|
18
18
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
2
|
-
import {
|
|
2
|
+
import { Tab, TabBar, TabList, TabPanel, TabTrigger, Tabs } from "@salt-ds/core";
|
|
3
3
|
import { useComponentCssInjection } from "@salt-ds/styles";
|
|
4
4
|
import { useWindow } from "@salt-ds/window";
|
|
5
5
|
import clsx from "clsx";
|
|
@@ -39,42 +39,44 @@ const TabbedTableConfigPanel_TabbedTableConfigPanel = ({ allowCreateCalculatedCo
|
|
|
39
39
|
return /*#__PURE__*/ jsx("div", {
|
|
40
40
|
...htmlAttributes,
|
|
41
41
|
className: clsx(classBase, className),
|
|
42
|
-
children: /*#__PURE__*/ jsxs(
|
|
42
|
+
children: /*#__PURE__*/ jsxs(Tabs, {
|
|
43
43
|
onChange: handleChange,
|
|
44
44
|
value: value,
|
|
45
45
|
children: [
|
|
46
|
-
/*#__PURE__*/
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
children:
|
|
46
|
+
/*#__PURE__*/ jsx(TabBar, {
|
|
47
|
+
children: /*#__PURE__*/ jsxs(TabList, {
|
|
48
|
+
appearance: "transparent",
|
|
49
|
+
children: [
|
|
50
|
+
/*#__PURE__*/ jsx(Tab, {
|
|
51
|
+
value: "table-settings",
|
|
52
|
+
children: /*#__PURE__*/ jsx(TabTrigger, {
|
|
53
|
+
children: "Table settings"
|
|
54
|
+
})
|
|
55
|
+
}),
|
|
56
|
+
/*#__PURE__*/ jsx(Tab, {
|
|
57
|
+
value: "table-columns",
|
|
58
|
+
children: /*#__PURE__*/ jsx(TabTrigger, {
|
|
59
|
+
children: "Table columns"
|
|
60
|
+
})
|
|
61
|
+
}),
|
|
62
|
+
/*#__PURE__*/ jsx(Tab, {
|
|
63
|
+
disabled: 0 === columns.length,
|
|
64
|
+
value: "column-settings",
|
|
65
|
+
children: /*#__PURE__*/ jsx(TabTrigger, {
|
|
66
|
+
children: "Column settings"
|
|
67
|
+
})
|
|
53
68
|
})
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
value: "table-columns",
|
|
57
|
-
children: /*#__PURE__*/ jsx(TabNextTrigger, {
|
|
58
|
-
children: "Table columns"
|
|
59
|
-
})
|
|
60
|
-
}),
|
|
61
|
-
/*#__PURE__*/ jsx(TabNext, {
|
|
62
|
-
disabled: 0 === columns.length,
|
|
63
|
-
value: "column-settings",
|
|
64
|
-
children: /*#__PURE__*/ jsx(TabNextTrigger, {
|
|
65
|
-
children: "Column settings"
|
|
66
|
-
})
|
|
67
|
-
})
|
|
68
|
-
]
|
|
69
|
+
]
|
|
70
|
+
})
|
|
69
71
|
}),
|
|
70
|
-
/*#__PURE__*/ jsx(
|
|
72
|
+
/*#__PURE__*/ jsx(TabPanel, {
|
|
71
73
|
value: "table-settings",
|
|
72
74
|
children: /*#__PURE__*/ jsx(TableSettingsPanel, {
|
|
73
75
|
onDisplayAttributeChange: onDisplayAttributeChange,
|
|
74
76
|
tableDisplayAttributes: config
|
|
75
77
|
})
|
|
76
78
|
}),
|
|
77
|
-
/*#__PURE__*/ jsx(
|
|
79
|
+
/*#__PURE__*/ jsx(TabPanel, {
|
|
78
80
|
value: "table-columns",
|
|
79
81
|
children: /*#__PURE__*/ jsx(ColumnPicker, {
|
|
80
82
|
allowCreateCalculatedColumn: allowCreateCalculatedColumn,
|
|
@@ -84,7 +86,7 @@ const TabbedTableConfigPanel_TabbedTableConfigPanel = ({ allowCreateCalculatedCo
|
|
|
84
86
|
selected: columns
|
|
85
87
|
})
|
|
86
88
|
}),
|
|
87
|
-
/*#__PURE__*/ jsx(
|
|
89
|
+
/*#__PURE__*/ jsx(TabPanel, {
|
|
88
90
|
value: "column-settings",
|
|
89
91
|
children: columns.length > 0 ? /*#__PURE__*/ jsx(ColumnSettingsPanel, {
|
|
90
92
|
column: columns[0],
|
|
@@ -9,4 +9,4 @@ export interface CalculatedColumnPanelProps extends HTMLAttributes<HTMLDivElemen
|
|
|
9
9
|
onChangeServerDataType?: (name: VuuColumnDataType) => void;
|
|
10
10
|
vuuTable: VuuTable;
|
|
11
11
|
}
|
|
12
|
-
export declare const CalculatedColumnPanel: ({ column: columnProp, columnModel, onChangeColumn, onChangeServerDataType: onChangeServerDataTypeProp, vuuTable, }: CalculatedColumnPanelProps) => import("react
|
|
12
|
+
export declare const CalculatedColumnPanel: ({ column: columnProp, columnModel, onChangeColumn, onChangeServerDataType: onChangeServerDataTypeProp, vuuTable, }: CalculatedColumnPanelProps) => import("react").JSX.Element;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import { TableCellRendererProps } from "@vuu-ui/vuu-table-types";
|
|
2
|
-
export declare const BackgroundCell: import("react").
|
|
2
|
+
export declare const BackgroundCell: import("react").MemoExoticComponent<({ column, dataRow, }: TableCellRendererProps) => import("react").JSX.Element>;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import { ConfigurationEditorProps } from "@vuu-ui/vuu-utils";
|
|
2
|
-
export declare const BackgroundCellConfigurationEditor: ({ column, onChangeRendering, }: ConfigurationEditorProps) => import("react
|
|
2
|
+
export declare const BackgroundCellConfigurationEditor: ({ column, onChangeRendering, }: ConfigurationEditorProps) => import("react").JSX.Element;
|
|
@@ -3,4 +3,4 @@ import { TableCellRendererProps } from "@vuu-ui/vuu-table-types";
|
|
|
3
3
|
* To assign an icon to the cell, give the columndescriptor
|
|
4
4
|
* a className. In css, assign an icon variable to --vuu-svg-icon.
|
|
5
5
|
*/
|
|
6
|
-
export declare const IconButtonCell: ({ column, dataRow }: TableCellRendererProps) => import("react
|
|
6
|
+
export declare const IconButtonCell: ({ column, dataRow }: TableCellRendererProps) => import("react").JSX.Element;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import { TableCellRendererProps } from "@vuu-ui/vuu-table-types";
|
|
2
|
-
export declare const DropdownCell: import("react").
|
|
2
|
+
export declare const DropdownCell: import("react").MemoExoticComponent<({ column, dataRow, editedDuringCurrentSession, onEdit, }: TableCellRendererProps) => import("react").JSX.Element>;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import { TableCellRendererProps } from "@vuu-ui/vuu-table-types";
|
|
2
|
-
export declare const LookupCell: import("react").
|
|
2
|
+
export declare const LookupCell: import("react").MemoExoticComponent<({ column, dataRow, }: TableCellRendererProps) => import("react").JSX.Element>;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import { TableCellProps } from "@vuu-ui/vuu-table-types";
|
|
2
|
-
export declare const PctProgressCell: ({ column, dataRow }: TableCellProps) => import("react
|
|
2
|
+
export declare const PctProgressCell: ({ column, dataRow }: TableCellProps) => import("react").JSX.Element;
|
|
@@ -7,4 +7,4 @@ export interface ColumnExpressionInputProps extends ExpressionSuggestionConsumer
|
|
|
7
7
|
onSubmitExpression?: ColumnExpressionSubmitHandler;
|
|
8
8
|
source?: string;
|
|
9
9
|
}
|
|
10
|
-
export declare const ColumnExpressionInput: import("react").MemoExoticComponent<({ onChange, onSubmitExpression, source, suggestionProvider, }: ColumnExpressionInputProps) => import("react
|
|
10
|
+
export declare const ColumnExpressionInput: import("react").MemoExoticComponent<({ onChange, onSubmitExpression, source, suggestionProvider, }: ColumnExpressionInputProps) => import("react").JSX.Element>;
|
package/types/column-expression-input/column-language-parser/column-expression-parse-utils.d.ts
CHANGED
|
@@ -2,4 +2,4 @@ import type { SyntaxNode } from "@vuu-ui/vuu-codemirror";
|
|
|
2
2
|
export declare const ColumnNamedTerms: readonly string[];
|
|
3
3
|
export declare const isCompleteExpression: (src: string) => boolean;
|
|
4
4
|
export declare const lastNamedChild: (node: SyntaxNode) => SyntaxNode | null;
|
|
5
|
-
export declare const isCompleteRelationalExpression: (node?:
|
|
5
|
+
export declare const isCompleteRelationalExpression: (node?: any) => boolean;
|
package/types/column-expression-input/column-language-parser/generated/column-parser.terms.d.ts
CHANGED
|
@@ -1,24 +1 @@
|
|
|
1
|
-
export const ColumnDefinitionExpression
|
|
2
|
-
export const Column: 2;
|
|
3
|
-
export const Number: 3;
|
|
4
|
-
export const String: 4;
|
|
5
|
-
export const True: 5;
|
|
6
|
-
export const False: 6;
|
|
7
|
-
export const ParenthesizedExpression: 7;
|
|
8
|
-
export const OpenBrace: 8;
|
|
9
|
-
export const CloseBrace: 9;
|
|
10
|
-
export const ArithmeticExpression: 10;
|
|
11
|
-
export const Divide: 11;
|
|
12
|
-
export const Times: 12;
|
|
13
|
-
export const Plus: 13;
|
|
14
|
-
export const Minus: 14;
|
|
15
|
-
export const ConditionalExpression: 15;
|
|
16
|
-
export const If: 16;
|
|
17
|
-
export const RelationalExpression: 17;
|
|
18
|
-
export const RelationalOperator: 18;
|
|
19
|
-
export const AndCondition: 19;
|
|
20
|
-
export const OrCondition: 20;
|
|
21
|
-
export const Comma: 21;
|
|
22
|
-
export const CallExpression: 22;
|
|
23
|
-
export const Function: 23;
|
|
24
|
-
export const ArgList: 24;
|
|
1
|
+
export declare const ColumnDefinitionExpression = 1, Column = 2, Number = 3, String = 4, True = 5, False = 6, ParenthesizedExpression = 7, OpenBrace = 8, CloseBrace = 9, ArithmeticExpression = 10, Divide = 11, Times = 12, Plus = 13, Minus = 14, ConditionalExpression = 15, If = 16, RelationalExpression = 17, RelationalOperator = 18, AndCondition = 19, OrCondition = 20, Comma = 21, CallExpression = 22, Function = 23, ArgList = 24;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { Completion } from "@vuu-ui/vuu-codemirror";
|
|
2
|
-
import { FocusEventHandler } from "react";
|
|
3
|
-
import { ColumnExpressionInputProps } from "./ColumnExpressionInput";
|
|
1
|
+
import { type Completion } from "@vuu-ui/vuu-codemirror";
|
|
2
|
+
import { type FocusEventHandler, type RefObject } from "react";
|
|
3
|
+
import type { ColumnExpressionInputProps } from "./ColumnExpressionInput";
|
|
4
4
|
export type ColumnExpressionOperator = "Times" | "Divide" | "Minus" | "Plus";
|
|
5
5
|
export type ColumnExpressionSuggestionType = "column" | "columnValue" | "expression" | "condition-operator" | "operator" | "relational-operator";
|
|
6
6
|
export type ColumnExpressionSuggestionOptions = {
|
|
@@ -19,7 +19,7 @@ export interface ExpressionSuggestionConsumer {
|
|
|
19
19
|
suggestionProvider: IExpressionSuggestionProvider;
|
|
20
20
|
}
|
|
21
21
|
export declare const useColumnExpressionEditor: ({ onChange, onSubmitExpression, source, suggestionProvider, }: ColumnExpressionInputProps) => {
|
|
22
|
-
editorRef:
|
|
22
|
+
editorRef: RefObject<HTMLDivElement | null>;
|
|
23
23
|
clearInput: () => void;
|
|
24
24
|
onBlur: FocusEventHandler;
|
|
25
25
|
};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import { FormattingSettingsProps } from "@vuu-ui/vuu-table-types";
|
|
2
|
-
export declare const BaseNumericFormattingSettings: ({ column, onChangeFormatting: onChange, }: FormattingSettingsProps) => import("react
|
|
2
|
+
export declare const BaseNumericFormattingSettings: ({ column, onChangeFormatting: onChange, }: FormattingSettingsProps) => import("react").JSX.Element;
|
|
@@ -6,4 +6,4 @@ export interface ColumnFormattingPanelProps extends HTMLAttributes<HTMLDivElemen
|
|
|
6
6
|
column: ColumnDescriptor;
|
|
7
7
|
onChangeRendering: (renderProps: ColumnTypeRendering) => void;
|
|
8
8
|
}
|
|
9
|
-
export declare const ColumnFormattingPanel: ({ availableRenderers, className, column, onChangeFormatting, onChangeColumnType, onChangeRendering, ...htmlAttributes }: ColumnFormattingPanelProps) => import("react
|
|
9
|
+
export declare const ColumnFormattingPanel: ({ availableRenderers, className, column, onChangeFormatting, onChangeColumnType, onChangeRendering, ...htmlAttributes }: ColumnFormattingPanelProps) => import("react").JSX.Element;
|
|
@@ -1,2 +1,3 @@
|
|
|
1
1
|
import { FormattingSettingsProps } from "@vuu-ui/vuu-table-types";
|
|
2
|
-
|
|
2
|
+
import React from "react";
|
|
3
|
+
export declare const LongTypeFormattingSettings: (props: FormattingSettingsProps) => React.JSX.Element;
|
|
@@ -7,4 +7,4 @@ export interface ColumnMenuProps extends HTMLAttributes<HTMLSpanElement> {
|
|
|
7
7
|
menuActionHandler?: MenuActionHandler<ColumnMenuActionType, ColumnDescriptor>;
|
|
8
8
|
menuPermissions?: ColumnMenuPermissions;
|
|
9
9
|
}
|
|
10
|
-
export declare const ColumnMenu: ({ className, column, menuActionHandler: menuActionHandlerProp, menuPermissions: { allowSort, allowGroup, allowAggregation, allowHide, allowRemove, allowPin, }, }: ColumnMenuProps) => import("react
|
|
10
|
+
export declare const ColumnMenu: ({ className, column, menuActionHandler: menuActionHandlerProp, menuPermissions: { allowSort, allowGroup, allowAggregation, allowHide, allowRemove, allowPin, }, }: ColumnMenuProps) => import("react").JSX.Element;
|
|
@@ -2,4 +2,4 @@ import { IconButtonProps } from "@vuu-ui/vuu-ui-controls";
|
|
|
2
2
|
import { ColumnPickerHookProps } from "./useColumnPicker";
|
|
3
3
|
export interface ColumnPickerActionProps extends Partial<IconButtonProps>, ColumnPickerHookProps {
|
|
4
4
|
}
|
|
5
|
-
export declare const ColumnPickerAction: ({ appearance, columnModel, icon, sentiment, ...IconButtonProps }: ColumnPickerActionProps) => import("react
|
|
5
|
+
export declare const ColumnPickerAction: ({ appearance, columnModel, icon, sentiment, ...IconButtonProps }: ColumnPickerActionProps) => import("react").JSX.Element;
|
|
@@ -4,4 +4,4 @@ export interface ColumnNameLabelProps {
|
|
|
4
4
|
column: ColumnDescriptor;
|
|
5
5
|
onClick?: MouseEventHandler;
|
|
6
6
|
}
|
|
7
|
-
export declare const ColumnNameLabel: ({ column, onClick }: ColumnNameLabelProps) => import("react
|
|
7
|
+
export declare const ColumnNameLabel: ({ column, onClick }: ColumnNameLabelProps) => import("react").JSX.Element;
|
|
@@ -2,4 +2,4 @@ import { ColumnSettingsProps } from "./useColumnSettings";
|
|
|
2
2
|
export interface ColumnSettinsPanelProps extends ColumnSettingsProps {
|
|
3
3
|
onClickEditCalculatedColumn?: () => void;
|
|
4
4
|
}
|
|
5
|
-
export declare const ColumnSettingsPanel: ({ column: columnProp, columnModel, onClickEditCalculatedColumn, onConfigChange, }: ColumnSettinsPanelProps) => import("react
|
|
5
|
+
export declare const ColumnSettingsPanel: ({ column: columnProp, columnModel, onClickEditCalculatedColumn, onConfigChange, }: ColumnSettinsPanelProps) => import("react").JSX.Element;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { type ReactNode } from "react";
|
|
2
2
|
import type { RowDefaultDataItemValues, EditSession } from "@vuu-ui/vuu-data-editing";
|
|
3
3
|
import type { CsvParseError, CsvParseOptions } from "./parse/csv-parse";
|
|
4
|
-
import type { CsvValidationStructuredError
|
|
4
|
+
import type { CsvValidationStructuredError } from "./parse/csv-schema-validation";
|
|
5
5
|
import type { DataSource, TableSchema } from "@vuu-ui/vuu-data-types";
|
|
6
6
|
import type { VuuTable } from "@vuu-ui/vuu-protocol-types";
|
|
7
7
|
import type { CsvUploadTableData } from "./parse/csv-upload-utils";
|
|
@@ -60,10 +60,9 @@ export interface CsvUploadProps {
|
|
|
60
60
|
parseOptions?: CsvParseOptions;
|
|
61
61
|
importMode?: "direct" | "preview";
|
|
62
62
|
rowDefaults?: RowDefaultDataItemValues;
|
|
63
|
-
validators?: Record<string, CsvColumnValidator>;
|
|
64
63
|
/**
|
|
65
64
|
* Custom renderer for the error panel.
|
|
66
65
|
*/
|
|
67
66
|
renderError?: (error: CsvUploadErrorResult) => ReactNode;
|
|
68
67
|
}
|
|
69
|
-
export declare const CsvUpload: (props: CsvUploadProps) => import("react
|
|
68
|
+
export declare const CsvUpload: (props: CsvUploadProps) => import("react").JSX.Element;
|
|
@@ -7,4 +7,4 @@ export interface DataUploadPreviewProps extends Omit<HTMLAttributes<HTMLDivEleme
|
|
|
7
7
|
saveLabel?: string;
|
|
8
8
|
tableSchema: TableSchema;
|
|
9
9
|
}
|
|
10
|
-
export declare const DataUploadPreview: ({ className, editSession, onClose, saveLabel, tableSchema, ...htmlAttributes }: DataUploadPreviewProps) => import("react
|
|
10
|
+
export declare const DataUploadPreview: ({ className, editSession, onClose, saveLabel, tableSchema, ...htmlAttributes }: DataUploadPreviewProps) => import("react").JSX.Element;
|
|
@@ -11,7 +11,7 @@ export declare const useDataUploadPreview: ({ dataSource, editSession, onClose,
|
|
|
11
11
|
canSave: boolean;
|
|
12
12
|
hasSelection: boolean;
|
|
13
13
|
onCancel: () => Promise<void>;
|
|
14
|
-
onDelete: () => Promise<
|
|
14
|
+
onDelete: () => Promise<void>;
|
|
15
15
|
onSave: (force?: boolean) => Promise<void>;
|
|
16
16
|
sessionError: string | undefined;
|
|
17
17
|
};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
export { CsvUpload, type CsvUploadError, type CsvUploadProps, type CsvUploadErrorResult, type CsvUploadErrors, type CsvUploadPhase, type CsvUploadImportedResult, type CsvUploadPreviewResult, type CsvUploadSessionEndReason, type CsvUploadSessionEndResult, type CsvUploadSessionTable, } from "./CsvUpload";
|
|
2
2
|
export { useCsvUpload, type CsvUploadHookProps, type UseCsvUploadReturn, } from "./useCsvUpload";
|
|
3
3
|
export { DataUploadPreview, type DataUploadPreviewProps, } from "./data-upload-preview/DataUploadPreview";
|
|
4
|
-
export { validateCsvAgainstSchema, type
|
|
4
|
+
export { validateCsvAgainstSchema, type CsvValidationOptions, type CsvValidationResult, } from "./parse/csv-schema-validation";
|
|
5
5
|
export { parseCsv, type CsvParseOptions, type CsvParseResult, } from "./parse/csv-parse";
|
|
6
6
|
export { CsvValidationErrorEnum, CsvParseErrorEnum, type CsvError, type CsvErrorMap, type CsvStructuredError, type CsvValidationError, type CsvValidationErrorMap, type CsvValidationErrorType, type CsvValidationStructuredError, type CsvParseError, type CsvParseErrorMap, } from "./parse/csv-errors";
|
|
7
7
|
export { CSV_FIRST_DATA_ROW_NUMBER, CSV_HEADER_ROW_NUMBER, } from "./parse/csv-constants";
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export declare const CSV_HEADER_ROW_NUMBER =
|
|
2
|
-
export declare const CSV_FIRST_DATA_ROW_NUMBER =
|
|
1
|
+
export declare const CSV_HEADER_ROW_NUMBER = 1;
|
|
2
|
+
export declare const CSV_FIRST_DATA_ROW_NUMBER = 2;
|
|
3
3
|
export declare const MAX_ROWS_IN_CSV = 10000;
|
|
@@ -12,8 +12,7 @@ export declare enum CsvValidationErrorEnum {
|
|
|
12
12
|
UNKNOWN_COLUMN = "UNKNOWN_COLUMN",
|
|
13
13
|
MAX_ROWS_EXCEEDED = "MAX_ROWS_EXCEEDED",
|
|
14
14
|
EMPTY_NON_STRING_VALUE = "EMPTY_NON_STRING_VALUE",
|
|
15
|
-
TYPE_MISMATCH = "TYPE_MISMATCH"
|
|
16
|
-
CUSTOM_VALIDATION = "CUSTOM_VALIDATION"
|
|
15
|
+
TYPE_MISMATCH = "TYPE_MISMATCH"
|
|
17
16
|
}
|
|
18
17
|
export type CsvErrorMap<TError extends string> = {
|
|
19
18
|
rowErrors: Record<number, Record<string, TError[]>>;
|
|
@@ -3,7 +3,6 @@ import type { VuuRowDataItemType } from "@vuu-ui/vuu-protocol-types";
|
|
|
3
3
|
import type { CsvValidationError, CsvValidationErrorMap, CsvParseError } from "./csv-errors";
|
|
4
4
|
import type { CsvParseResult } from "./csv-parse";
|
|
5
5
|
export { CsvValidationErrorEnum, type CsvValidationError, type CsvValidationErrorMap, type CsvValidationErrorType, type CsvValidationStructuredError, } from "./csv-errors";
|
|
6
|
-
export type CsvColumnValidator = (value: string, columnName: string, row: Record<string, string>) => boolean | string;
|
|
7
6
|
export type CsvValidationResult = {
|
|
8
7
|
columns: string[];
|
|
9
8
|
errorMap: CsvValidationErrorMap;
|
|
@@ -13,6 +12,5 @@ export type CsvValidationResult = {
|
|
|
13
12
|
};
|
|
14
13
|
export type CsvValidationOptions = {
|
|
15
14
|
maxRows?: number;
|
|
16
|
-
validators?: Record<string, CsvColumnValidator>;
|
|
17
15
|
};
|
|
18
16
|
export declare const validateCsvAgainstSchema: (parsed: CsvParseResult, tableSchema: TableSchema, options?: CsvValidationOptions) => CsvValidationResult;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export { CSV_FIRST_DATA_ROW_NUMBER, CSV_HEADER_ROW_NUMBER, } from "./csv-constants";
|
|
2
2
|
export { CsvParseErrorEnum, CsvValidationErrorEnum, type CsvError, type CsvErrorMap, type CsvErrorState, type CsvParseError, type CsvParseErrorMap, type CsvStructuredError, type CsvValidationError, type CsvValidationErrorMap, type CsvValidationErrorType, type CsvValidationStructuredError, addCsvFileError, addCsvRowError, createCsvErrorState, hasCsvErrors, } from "./csv-errors";
|
|
3
3
|
export { parseCsv, type CsvParseOptions, type CsvParseResult, } from "./csv-parse";
|
|
4
|
-
export { validateCsvAgainstSchema, type
|
|
4
|
+
export { validateCsvAgainstSchema, type CsvValidationOptions, type CsvValidationResult, } from "./csv-schema-validation";
|
|
5
5
|
export { buildRowErrorMessage, executeBatchRpcCalls, hasFileParseErrors, isCsvParseError, mergeValidationWithParseErrors, normalizeTableData, toErrorMessage, toValidationErrorsFromParseRowErrors, type CsvUploadTableData, type RpcBatchResult, } from "./csv-upload-utils";
|
|
@@ -2,7 +2,7 @@ import type { DataSource, TableSchema } from "@vuu-ui/vuu-data-types";
|
|
|
2
2
|
import { type RowDefaultDataItemValues } from "@vuu-ui/vuu-data-editing";
|
|
3
3
|
import type { VuuTable } from "@vuu-ui/vuu-protocol-types";
|
|
4
4
|
import { type CsvParseOptions } from "./parse/csv-parse";
|
|
5
|
-
import { type CsvValidationResult
|
|
5
|
+
import { type CsvValidationResult } from "./parse/csv-schema-validation";
|
|
6
6
|
import type { CsvUploadErrorResult, CsvUploadImportedResult, CsvUploadPreviewResult, CsvUploadSessionEndResult, CsvUploadSessionTable } from "./CsvUpload";
|
|
7
7
|
export interface CsvUploadHookProps {
|
|
8
8
|
dataSource: DataSource;
|
|
@@ -25,7 +25,6 @@ export interface CsvUploadHookProps {
|
|
|
25
25
|
parseOptions?: CsvParseOptions;
|
|
26
26
|
/** Default column values applied to every addRow call. Pass a stable reference — a new object triggers EditSession recreation. */
|
|
27
27
|
rowDefaults?: RowDefaultDataItemValues;
|
|
28
|
-
validators?: Record<string, CsvColumnValidator>;
|
|
29
28
|
}
|
|
30
29
|
export type UseCsvUploadReturn = {
|
|
31
30
|
canImport: boolean;
|
|
@@ -40,4 +39,4 @@ export type UseCsvUploadReturn = {
|
|
|
40
39
|
validation: CsvValidationResult | undefined;
|
|
41
40
|
error: CsvUploadErrorResult | undefined;
|
|
42
41
|
};
|
|
43
|
-
export declare const useCsvUpload: ({ dataSource, importMode, importSchema, importTable, onImportSessionEnded, onImportSessionStarted, onError, onImported, onPreview, onProcessingStarted, maxRows, parseOptions, rowDefaults,
|
|
42
|
+
export declare const useCsvUpload: ({ dataSource, importMode, importSchema, importTable, onImportSessionEnded, onImportSessionStarted, onError, onImported, onPreview, onProcessingStarted, maxRows, parseOptions, rowDefaults, }: CsvUploadHookProps) => UseCsvUploadReturn;
|
|
@@ -14,4 +14,4 @@ export interface DataSourceStatsProps extends DatasourceStatsHookProps, Omit<HTM
|
|
|
14
14
|
selectionActions?: ReactNode;
|
|
15
15
|
tooltrayActions?: ReactNode;
|
|
16
16
|
}
|
|
17
|
-
export declare const DataSourceStats: ({ children, className, dataSource, showRowStats, tooltrayActions, ...htmlAttributes }: DataSourceStatsProps) => import("react
|
|
17
|
+
export declare const DataSourceStats: ({ children, className, dataSource, showRowStats, tooltrayActions, ...htmlAttributes }: DataSourceStatsProps) => import("react").JSX.Element;
|
|
@@ -12,4 +12,4 @@ export interface FreezeControlProps extends HTMLAttributes<HTMLDivElement>, Free
|
|
|
12
12
|
*/
|
|
13
13
|
flashDuration?: number;
|
|
14
14
|
}
|
|
15
|
-
export declare const FreezeControl: ({ dataSource, className, newItemsLabel, flashDuration, ...htmlAttributes }: FreezeControlProps) => import("react
|
|
15
|
+
export declare const FreezeControl: ({ dataSource, className, newItemsLabel, flashDuration, ...htmlAttributes }: FreezeControlProps) => import("react").JSX.Element;
|
|
@@ -3,4 +3,4 @@ import { DataSource } from "@vuu-ui/vuu-data-types";
|
|
|
3
3
|
export interface FrozenBannerProps extends HTMLAttributes<HTMLDivElement> {
|
|
4
4
|
dataSource: DataSource;
|
|
5
5
|
}
|
|
6
|
-
export declare const FrozenBanner: ({ dataSource, className, ...htmlAttributes }: FrozenBannerProps) => import("react
|
|
6
|
+
export declare const FrozenBanner: ({ dataSource, className, ...htmlAttributes }: FrozenBannerProps) => import("react").JSX.Element | null;
|
|
@@ -4,7 +4,7 @@ export interface FreezeProps {
|
|
|
4
4
|
dataSource: DataSource;
|
|
5
5
|
}
|
|
6
6
|
export declare const useFreezeControl: ({ dataSource }: FreezeProps) => {
|
|
7
|
-
onToggleChange: (evt: SyntheticEvent<HTMLButtonElement>) => void;
|
|
8
7
|
isFrozen: boolean;
|
|
9
8
|
newRecordCount: number;
|
|
9
|
+
onToggleChange: (evt: SyntheticEvent<HTMLButtonElement>) => void;
|
|
10
10
|
};
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import type { BaseRowProps } from "@vuu-ui/vuu-table-types";
|
|
2
2
|
export type InlineAddRowProps = BaseRowProps;
|
|
3
|
-
export declare const InlineAddRow: ({ ariaRowIndex, className, columns, style, }: InlineAddRowProps) => import("react
|
|
3
|
+
export declare const InlineAddRow: ({ ariaRowIndex, className, columns, style, }: InlineAddRowProps) => import("react").JSX.Element;
|
|
@@ -7,8 +7,27 @@ export declare const useInlineAddRow: ({ columns }: UseInlineAddRowProps) => {
|
|
|
7
7
|
dataRow: DataRow;
|
|
8
8
|
draftRevision: number;
|
|
9
9
|
inlineAddColumns: {
|
|
10
|
-
|
|
11
|
-
|
|
10
|
+
editableBulk?: import("@vuu-ui/vuu-data-types").BulkEdit;
|
|
11
|
+
name: string;
|
|
12
|
+
required?: boolean;
|
|
13
|
+
serverDataType?: import("@vuu-ui/vuu-protocol-types").VuuColumnDataType;
|
|
14
|
+
type?: import("@vuu-ui/vuu-data-types").DataValueType;
|
|
15
|
+
aggregate?: import("@vuu-ui/vuu-protocol-types").VuuAggType;
|
|
16
|
+
allowColumnHeaderMenu?: false;
|
|
17
|
+
colHeaderContentRenderer?: string;
|
|
18
|
+
colHeaderLabelRenderer?: string;
|
|
19
|
+
exportFormatter?: (value: unknown) => string;
|
|
20
|
+
getIcon?: (row: DataRow) => string | undefined;
|
|
21
|
+
groupable?: boolean;
|
|
22
|
+
hidden?: boolean;
|
|
23
|
+
locked?: Exclude<import("@vuu-ui/vuu-table-types").PinLocation, "left"> | false;
|
|
24
|
+
maxWidth?: number;
|
|
25
|
+
minWidth?: number;
|
|
26
|
+
pin?: import("@vuu-ui/vuu-table-types").PinLocation | false;
|
|
27
|
+
removeable?: boolean;
|
|
28
|
+
selected?: boolean;
|
|
29
|
+
source?: "client" | "server";
|
|
30
|
+
status?: import("@salt-ds/core").ValidationStatus;
|
|
12
31
|
align?: "left" | "right";
|
|
13
32
|
ariaColIndex: number;
|
|
14
33
|
HeaderCellContentRenderer?: import("react").FunctionComponent<Omit<import("@vuu-ui/vuu-table-types").HeaderCellProps, "id" | "index">>;
|
|
@@ -34,26 +53,7 @@ export declare const useInlineAddRow: ({ columns }: UseInlineAddRowProps) => {
|
|
|
34
53
|
sorted?: import("@vuu-ui/vuu-table-types").ColumnSort;
|
|
35
54
|
valueFormatter: import("@vuu-ui/vuu-table-types").ValueFormatter;
|
|
36
55
|
width: number;
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
colHeaderContentRenderer?: string;
|
|
40
|
-
colHeaderLabelRenderer?: string;
|
|
41
|
-
exportFormatter?: (value: unknown) => string;
|
|
42
|
-
getIcon?: (row: DataRow) => string | undefined;
|
|
43
|
-
groupable?: boolean;
|
|
44
|
-
hidden?: boolean;
|
|
45
|
-
locked?: Exclude<import("@vuu-ui/vuu-table-types").PinLocation, "left"> | false;
|
|
46
|
-
maxWidth?: number;
|
|
47
|
-
minWidth?: number;
|
|
48
|
-
pin?: import("@vuu-ui/vuu-table-types").PinLocation | false;
|
|
49
|
-
removeable?: boolean;
|
|
50
|
-
selected?: boolean;
|
|
51
|
-
source?: "client" | "server";
|
|
52
|
-
status?: import("@salt-ds/core").ValidationStatus;
|
|
53
|
-
editableBulk?: import("@vuu-ui/vuu-data-types").BulkEdit;
|
|
54
|
-
name: string;
|
|
55
|
-
required?: boolean;
|
|
56
|
-
serverDataType?: import("@vuu-ui/vuu-protocol-types").VuuColumnDataType;
|
|
57
|
-
type?: import("@vuu-ui/vuu-data-types").DataValueType;
|
|
56
|
+
editable: boolean;
|
|
57
|
+
CellRenderer: import("react").FunctionComponent<import("@vuu-ui/vuu-table-types").TableCellRendererProps> | undefined;
|
|
58
58
|
}[];
|
|
59
59
|
};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { type ReactNode } from "react";
|
|
2
2
|
import type { RowDefaultDataItemValues, EditSession } from "@vuu-ui/vuu-data-editing";
|
|
3
3
|
import type { CsvParseError, CsvParseOptions } from "./parse/csv-parse";
|
|
4
|
-
import type { CsvValidationStructuredError
|
|
4
|
+
import type { CsvValidationStructuredError } from "./parse/csv-schema-validation";
|
|
5
5
|
import type { DataSource, TableSchema } from "@vuu-ui/vuu-data-types";
|
|
6
6
|
import type { VuuTable } from "@vuu-ui/vuu-protocol-types";
|
|
7
7
|
import type { CsvUploadTableData } from "./parse/csv-upload-utils";
|
|
@@ -60,7 +60,6 @@ export interface CsvUploadProps {
|
|
|
60
60
|
parseOptions?: CsvParseOptions;
|
|
61
61
|
importMode?: "direct" | "preview";
|
|
62
62
|
rowDefaults?: RowDefaultDataItemValues;
|
|
63
|
-
validators?: Record<string, CsvColumnValidator>;
|
|
64
63
|
/**
|
|
65
64
|
* Custom renderer for the error panel.
|
|
66
65
|
*/
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
export { CsvUpload, type CsvUploadError, type CsvUploadProps, type CsvUploadErrorResult, type CsvUploadErrors, type CsvUploadPhase, type CsvUploadImportedResult, type CsvUploadPreviewResult, type CsvUploadSessionEndReason, type CsvUploadSessionEndResult, type CsvUploadSessionTable, } from "./CsvUpload";
|
|
2
2
|
export { useCsvUpload, type CsvUploadHookProps, type UseCsvUploadReturn, } from "./useCsvUpload";
|
|
3
3
|
export { DataUploadPreview, type DataUploadPreviewProps, } from "./data-upload-preview/DataUploadPreview";
|
|
4
|
-
export { validateCsvAgainstSchema, type
|
|
4
|
+
export { validateCsvAgainstSchema, type CsvValidationOptions, type CsvValidationResult, } from "./parse/csv-schema-validation";
|
|
5
5
|
export { parseCsv, type CsvParseOptions, type CsvParseResult, } from "./parse/csv-parse";
|
|
6
6
|
export { CsvValidationErrorEnum, CsvParseErrorEnum, type CsvError, type CsvErrorMap, type CsvStructuredError, type CsvValidationError, type CsvValidationErrorMap, type CsvValidationErrorType, type CsvValidationStructuredError, type CsvParseError, type CsvParseErrorMap, } from "./parse/csv-errors";
|
|
7
7
|
export { CSV_FIRST_DATA_ROW_NUMBER, CSV_HEADER_ROW_NUMBER, } from "./parse/csv-constants";
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export declare const CSV_HEADER_ROW_NUMBER =
|
|
2
|
-
export declare const CSV_FIRST_DATA_ROW_NUMBER =
|
|
1
|
+
export declare const CSV_HEADER_ROW_NUMBER = 1;
|
|
2
|
+
export declare const CSV_FIRST_DATA_ROW_NUMBER = 2;
|
|
3
3
|
export declare const MAX_ROWS_IN_CSV = 10000;
|
|
@@ -12,8 +12,7 @@ export declare enum CsvValidationErrorEnum {
|
|
|
12
12
|
UNKNOWN_COLUMN = "UNKNOWN_COLUMN",
|
|
13
13
|
MAX_ROWS_EXCEEDED = "MAX_ROWS_EXCEEDED",
|
|
14
14
|
EMPTY_NON_STRING_VALUE = "EMPTY_NON_STRING_VALUE",
|
|
15
|
-
TYPE_MISMATCH = "TYPE_MISMATCH"
|
|
16
|
-
CUSTOM_VALIDATION = "CUSTOM_VALIDATION"
|
|
15
|
+
TYPE_MISMATCH = "TYPE_MISMATCH"
|
|
17
16
|
}
|
|
18
17
|
export type CsvErrorMap<TError extends string> = {
|
|
19
18
|
rowErrors: Record<number, Record<string, TError[]>>;
|
|
@@ -3,7 +3,6 @@ import type { VuuRowDataItemType } from "@vuu-ui/vuu-protocol-types";
|
|
|
3
3
|
import type { CsvValidationError, CsvValidationErrorMap, CsvParseError } from "./csv-errors";
|
|
4
4
|
import type { CsvParseResult } from "./csv-parse";
|
|
5
5
|
export { CsvValidationErrorEnum, type CsvValidationError, type CsvValidationErrorMap, type CsvValidationErrorType, type CsvValidationStructuredError, } from "./csv-errors";
|
|
6
|
-
export type CsvColumnValidator = (value: string, columnName: string, row: Record<string, string>) => boolean | string;
|
|
7
6
|
export type CsvValidationResult = {
|
|
8
7
|
columns: string[];
|
|
9
8
|
errorMap: CsvValidationErrorMap;
|
|
@@ -13,6 +12,5 @@ export type CsvValidationResult = {
|
|
|
13
12
|
};
|
|
14
13
|
export type CsvValidationOptions = {
|
|
15
14
|
maxRows?: number;
|
|
16
|
-
validators?: Record<string, CsvColumnValidator>;
|
|
17
15
|
};
|
|
18
16
|
export declare const validateCsvAgainstSchema: (parsed: CsvParseResult, tableSchema: TableSchema, options?: CsvValidationOptions) => CsvValidationResult;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export { CSV_FIRST_DATA_ROW_NUMBER, CSV_HEADER_ROW_NUMBER, } from "./csv-constants";
|
|
2
2
|
export { CsvParseErrorEnum, CsvValidationErrorEnum, type CsvError, type CsvErrorMap, type CsvErrorState, type CsvParseError, type CsvParseErrorMap, type CsvStructuredError, type CsvValidationError, type CsvValidationErrorMap, type CsvValidationErrorType, type CsvValidationStructuredError, addCsvFileError, addCsvRowError, createCsvErrorState, hasCsvErrors, } from "./csv-errors";
|
|
3
3
|
export { parseCsv, type CsvParseOptions, type CsvParseResult, } from "./csv-parse";
|
|
4
|
-
export { validateCsvAgainstSchema, type
|
|
4
|
+
export { validateCsvAgainstSchema, type CsvValidationOptions, type CsvValidationResult, } from "./csv-schema-validation";
|
|
5
5
|
export { buildRowErrorMessage, executeBatchRpcCalls, hasFileParseErrors, isCsvParseError, mergeValidationWithParseErrors, normalizeTableData, toErrorMessage, toValidationErrorsFromParseRowErrors, type CsvUploadTableData, type RpcBatchResult, } from "./csv-upload-utils";
|
|
@@ -2,7 +2,7 @@ import type { DataSource, TableSchema } from "@vuu-ui/vuu-data-types";
|
|
|
2
2
|
import { type RowDefaultDataItemValues } from "@vuu-ui/vuu-data-editing";
|
|
3
3
|
import type { VuuTable } from "@vuu-ui/vuu-protocol-types";
|
|
4
4
|
import { type CsvParseOptions } from "./parse/csv-parse";
|
|
5
|
-
import { type CsvValidationResult
|
|
5
|
+
import { type CsvValidationResult } from "./parse/csv-schema-validation";
|
|
6
6
|
import type { CsvUploadErrorResult, CsvUploadImportedResult, CsvUploadPreviewResult, CsvUploadSessionEndResult, CsvUploadSessionTable } from "./CsvUpload";
|
|
7
7
|
export interface CsvUploadHookProps {
|
|
8
8
|
dataSource: DataSource;
|
|
@@ -25,7 +25,6 @@ export interface CsvUploadHookProps {
|
|
|
25
25
|
parseOptions?: CsvParseOptions;
|
|
26
26
|
/** Default column values applied to every addRow call. Pass a stable reference — a new object triggers EditSession recreation. */
|
|
27
27
|
rowDefaults?: RowDefaultDataItemValues;
|
|
28
|
-
validators?: Record<string, CsvColumnValidator>;
|
|
29
28
|
}
|
|
30
29
|
export type UseCsvUploadReturn = {
|
|
31
30
|
canImport: boolean;
|
|
@@ -40,4 +39,4 @@ export type UseCsvUploadReturn = {
|
|
|
40
39
|
validation: CsvValidationResult | undefined;
|
|
41
40
|
error: CsvUploadErrorResult | undefined;
|
|
42
41
|
};
|
|
43
|
-
export declare const useCsvUpload: ({ dataSource, importMode, importSchema, importTable, onImportSessionEnded, onImportSessionStarted, onError, onImported, onPreview, onProcessingStarted, maxRows, parseOptions, rowDefaults,
|
|
42
|
+
export declare const useCsvUpload: ({ dataSource, importMode, importSchema, importTable, onImportSessionEnded, onImportSessionStarted, onError, onImported, onPreview, onProcessingStarted, maxRows, parseOptions, rowDefaults, }: CsvUploadHookProps) => UseCsvUploadReturn;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { VuuTable } from "@vuu-ui/vuu-protocol-types";
|
|
1
|
+
import type { VuuTable } from "@vuu-ui/vuu-protocol-types";
|
|
2
2
|
import type { TableProps } from "@vuu-ui/vuu-table";
|
|
3
|
-
import { HTMLAttributes } from "react";
|
|
4
|
-
import { ColumnPickerProps } from "../column-picker/ColumnPicker";
|
|
5
|
-
import { TableSettingsPanelProps } from "../table-settings-panel/TableSettingsPanel";
|
|
3
|
+
import { type HTMLAttributes } from "react";
|
|
4
|
+
import { type ColumnPickerProps } from "../column-picker/ColumnPicker";
|
|
5
|
+
import { type TableSettingsPanelProps } from "../table-settings-panel/TableSettingsPanel";
|
|
6
6
|
declare const TabLabels: {
|
|
7
7
|
readonly "table-settings": "Table";
|
|
8
8
|
readonly "table-columns": "Columns";
|
|
@@ -13,5 +13,5 @@ export interface TabbedTableConfigPanelProps extends ColumnPickerProps, Pick<Tab
|
|
|
13
13
|
selectedTab?: TabName;
|
|
14
14
|
vuuTable?: VuuTable;
|
|
15
15
|
}
|
|
16
|
-
export declare const TabbedTableConfigPanel: ({ allowCreateCalculatedColumn, className, columnModel, config, onDisplayAttributeChange, selectedTab, vuuTable, ...htmlAttributes }: TabbedTableConfigPanelProps) => import("react
|
|
16
|
+
export declare const TabbedTableConfigPanel: ({ allowCreateCalculatedColumn, className, columnModel, config, onDisplayAttributeChange, selectedTab, vuuTable, ...htmlAttributes }: TabbedTableConfigPanelProps) => import("react").JSX.Element;
|
|
17
17
|
export {};
|
|
@@ -4,4 +4,4 @@ import { TableDisplayAttributeChangeHandler } from "../table-settings-panel/Tabl
|
|
|
4
4
|
export interface TabbedTableSettingsActionProps extends Partial<IconButtonProps>, TabbedTableConfigPanelHookProps {
|
|
5
5
|
onDisplayAttributeChange: TableDisplayAttributeChangeHandler;
|
|
6
6
|
}
|
|
7
|
-
export declare const TabbedTableSettingsAction: ({ allowCreateCalculatedColumn, appearance, columnModel, config, icon, onDisplayAttributeChange, sentiment, vuuTable, ...IconButtonProps }: TabbedTableSettingsActionProps) => import("react
|
|
7
|
+
export declare const TabbedTableSettingsAction: ({ allowCreateCalculatedColumn, appearance, columnModel, config, icon, onDisplayAttributeChange, sentiment, vuuTable, ...IconButtonProps }: TabbedTableSettingsActionProps) => import("react").JSX.Element;
|
|
@@ -5,6 +5,6 @@ export interface TableFooterProps extends HTMLAttributes<HTMLDivElement> {
|
|
|
5
5
|
}
|
|
6
6
|
export declare const TableFooterTray: ({ children, position }: {
|
|
7
7
|
children: ReactNode;
|
|
8
|
-
position?:
|
|
9
|
-
}) => import("react
|
|
10
|
-
export declare const TableFooter: ({ children, className, onInvokeAction, tooltrayActions, ...htmlAttributes }: TableFooterProps) => import("react
|
|
8
|
+
position?: 'center' | 'end';
|
|
9
|
+
}) => import("react").JSX.Element;
|
|
10
|
+
export declare const TableFooter: ({ children, className, onInvokeAction, tooltrayActions, ...htmlAttributes }: TableFooterProps) => import("react").JSX.Element;
|
|
@@ -10,7 +10,7 @@ export interface TableContextProps extends Pick<TableProps, "dataSource" | "rowA
|
|
|
10
10
|
export declare const TableContext: import("react").Context<TableContextProps>;
|
|
11
11
|
export declare const TableProvider: ({ children, dataSource, menuActionHandler, rowActionHandlers, }: TableContextProps & {
|
|
12
12
|
children: ReactNode;
|
|
13
|
-
}) => import("react
|
|
13
|
+
}) => import("react").JSX.Element;
|
|
14
14
|
export declare function useTableContext(throwIfNoDataSource?: boolean): {
|
|
15
15
|
dataSource: DataSource;
|
|
16
16
|
menuActionHandler: MenuActionHandler<ColumnMenuActionType, ColumnDescriptor>;
|
|
@@ -19,4 +19,4 @@ export interface TableSettingsPanelProps {
|
|
|
19
19
|
It updates the settings in state locally and notifies caller of
|
|
20
20
|
every change via onChange callback
|
|
21
21
|
*/
|
|
22
|
-
export declare const TableSettingsPanel: ({ onDisplayAttributeChange, tableDisplayAttributes: tableDisplayAttributesProp, permissions: permissionsProp, }: TableSettingsPanelProps) => import("react
|
|
22
|
+
export declare const TableSettingsPanel: ({ onDisplayAttributeChange, tableDisplayAttributes: tableDisplayAttributesProp, permissions: permissionsProp, }: TableSettingsPanelProps) => import("react").JSX.Element;
|