fuse-importer 0.1.3-testing → 0.1.5-testing
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/lib/esm/Importer/ImporterWithContext.js +38 -7
- package/lib/esm/Importer/Matcher/EnumFieldsMatchers/EnumFieldMatcher/index.js +1 -1
- package/lib/esm/Importer/Matcher/EnumFieldsMatchers/index.js +4 -3
- package/lib/esm/Importer/Matcher/HeaderMatcher/index.js +14 -9
- package/lib/esm/Importer/Matcher/index.js +0 -11
- package/lib/esm/Importer/PreviewFirstTime.js +1 -1
- package/lib/esm/Importer/Review/ReviewContextProvider.d.ts +6 -6
- package/lib/esm/Importer/Review/ReviewContextProvider.js +53 -184
- package/lib/esm/Importer/Review/ReviewWithContext.js +2 -2
- package/lib/esm/Importer/Stepper/StepperSubmitModal.d.ts +2 -1
- package/lib/esm/Importer/Stepper/StepperSubmitModal.js +4 -2
- package/lib/esm/Importer/Stepper/UnmatchedHeadersModal.js +1 -1
- package/lib/esm/Importer/Stepper/index.js +21 -11
- package/lib/esm/Importer/Uploader/DragAndDropImporter/ImporterDropzone.d.ts +2 -1
- package/lib/esm/Importer/Uploader/DragAndDropImporter/ImporterDropzone.js +14 -86
- package/lib/esm/Importer/Uploader/DragAndDropImporter/index.js +11 -3
- package/lib/esm/Importer/Uploader/HeadersPreview.js +1 -1
- package/lib/esm/Importer/common/Spreadsheet/DataSetContextProvider/index.d.ts +16 -0
- package/lib/esm/Importer/common/Spreadsheet/DataSetContextProvider/index.js +63 -0
- package/lib/esm/Importer/common/Spreadsheet/DuplicateDataContextProvider/index.d.ts +18 -0
- package/lib/esm/Importer/common/Spreadsheet/DuplicateDataContextProvider/index.js +101 -0
- package/lib/esm/Importer/common/Spreadsheet/FilteredDataContextProvider/index.d.ts +29 -0
- package/lib/esm/Importer/common/Spreadsheet/FilteredDataContextProvider/index.js +150 -0
- package/lib/esm/Importer/common/Spreadsheet/SpreadsheetContextProvider/filterMethods.d.ts +6 -4
- package/lib/esm/Importer/common/Spreadsheet/SpreadsheetContextProvider/filterMethods.js +37 -37
- package/lib/esm/Importer/common/Spreadsheet/SpreadsheetContextProvider/hashCalculators.d.ts +6 -0
- package/lib/esm/Importer/common/Spreadsheet/SpreadsheetContextProvider/hashCalculators.js +138 -0
- package/lib/esm/Importer/common/Spreadsheet/SpreadsheetContextProvider/index.d.ts +7 -29
- package/lib/esm/Importer/common/Spreadsheet/SpreadsheetContextProvider/index.js +11 -193
- package/lib/esm/Importer/common/Spreadsheet/SpreadsheetContextProvider/useBatchProcessing.d.ts +5 -0
- package/lib/esm/Importer/common/Spreadsheet/SpreadsheetContextProvider/useBatchProcessing.js +72 -0
- package/lib/esm/Importer/common/Spreadsheet/SpreadsheetContextProvider/useDataSetManipulation.d.ts +4 -0
- package/lib/esm/Importer/common/Spreadsheet/SpreadsheetContextProvider/useDataSetManipulation.js +46 -0
- package/lib/esm/Importer/common/Spreadsheet/SpreadsheetContextProvider/utils.js +2 -1
- package/lib/esm/Importer/common/Spreadsheet/ValidationContextProvider/index.d.ts +31 -0
- package/lib/esm/Importer/common/Spreadsheet/ValidationContextProvider/index.js +304 -0
- package/lib/esm/Importer/common/Spreadsheet/common/index.js +5 -4
- package/lib/esm/Importer/common/Spreadsheet/common/types.d.ts +2 -3
- package/lib/esm/Importer/common/Spreadsheet/components/FieldHeader.d.ts +0 -2
- package/lib/esm/Importer/common/Spreadsheet/components/FieldHeader.js +26 -11
- package/lib/esm/Importer/common/Spreadsheet/components/SpreadsheetData.js +21 -13
- package/lib/esm/Importer/common/Spreadsheet/components/SpreadsheetRowCheckboxes.js +35 -36
- package/lib/esm/Importer/common/Spreadsheet/components/SpreadsheetRowNumbers.js +3 -3
- package/lib/esm/Importer/common/Spreadsheet/components/fields/SpreadsheetInput.js +5 -1
- package/lib/esm/Importer/common/Spreadsheet/components/fields/index.js +57 -26
- package/lib/esm/Importer/common/Spreadsheet/components/inputs/index.js +1 -2
- package/lib/esm/Importer/common/Spreadsheet/index.d.ts +0 -1
- package/lib/esm/Importer/common/Spreadsheet/index.js +1 -84
- package/lib/esm/Importer/common/Spreadsheet/styles.d.ts +1 -2
- package/lib/esm/Importer/common/Spreadsheet/styles.js +13 -1
- package/lib/esm/Importer/common/Spreadsheet/useFieldSorting.d.ts +5 -0
- package/lib/esm/Importer/common/Spreadsheet/useFieldSorting.js +81 -0
- package/lib/esm/Importer/common/Spreadsheet/validation/index.d.ts +5 -3
- package/lib/esm/Importer/common/Spreadsheet/validation/index.js +13 -17
- package/lib/esm/Importer/common/Spreadsheet/validation/validators.d.ts +3 -2
- package/lib/esm/Importer/common/Spreadsheet/validation/validators.js +16 -7
- package/lib/esm/Importer/contexts/ImporterContextProvider.d.ts +4 -2
- package/lib/esm/Importer/contexts/ImporterContextProvider.js +137 -18
- package/lib/esm/Importer/data/index.js +7 -5
- package/lib/esm/Importer/hooks/useExportDataToFile.d.ts +5 -0
- package/lib/esm/Importer/hooks/useExportDataToFile.js +54 -0
- package/lib/esm/Importer/hooks/useSubmitToServer.d.ts +7 -0
- package/lib/esm/Importer/hooks/useSubmitToServer.js +192 -0
- package/lib/esm/common/EventManagerContextProvider/index.d.ts +22 -0
- package/lib/esm/common/EventManagerContextProvider/index.js +38 -0
- package/lib/esm/common/FileUploadDropzone/ImporterDropzone.d.ts +16 -0
- package/lib/esm/common/FileUploadDropzone/ImporterDropzone.js +108 -0
- package/lib/esm/common/FileUploadDropzone/index.d.ts +1 -0
- package/lib/esm/common/FileUploadDropzone/index.js +1 -0
- package/lib/esm/common/Table/TableActions/CustomActions/CustomActions.js +55 -41
- package/lib/esm/common/Table/TableActions/DeleteSelectedRows.js +25 -16
- package/lib/esm/common/Table/TableActions/ExportData.js +5 -3
- package/lib/esm/common/Table/TableActions/FilterByErrors/FilterByErrors.js +36 -9
- package/lib/esm/common/Table/TableActions/RowFilters.js +53 -5
- package/lib/esm/common/Table/TableActions/SearchRows.js +3 -1
- package/lib/esm/common/Table/TableActions/TableActions.js +2 -1
- package/lib/esm/common/Table/TableActions/TransformedRecordsCount.js +16 -9
- package/lib/esm/common/Table/TableActions/ValidationProgress.d.ts +2 -0
- package/lib/esm/common/Table/TableActions/ValidationProgress.js +22 -0
- package/lib/esm/common/Table/TableView/TableRows/TableRow.d.ts +1 -1
- package/lib/esm/common/Table/TableView/TableRows/TableRow.js +2 -2
- package/lib/esm/common/Table/TableView/TableRows/index.js +21 -6
- package/lib/esm/common/Table/TableView/index.d.ts +1 -1
- package/lib/esm/common/Table/TableView/index.js +6 -15
- package/lib/esm/common/Table/TableView/types.d.ts +8 -9
- package/lib/esm/common/Table/index.d.ts +2 -1
- package/lib/esm/common/Table/index.js +2 -2
- package/lib/esm/common/Toast.js +3 -2
- package/lib/esm/common/TooltipProvider.d.ts +2 -0
- package/lib/esm/common/TooltipProvider.js +12 -9
- package/lib/esm/common/buttons.d.ts +5 -1
- package/lib/esm/common/buttons.js +13 -7
- package/lib/esm/common/columnsTransformations.js +1 -1
- package/lib/esm/common/datePatterns.js +10 -10
- package/lib/esm/common/icons/index.d.ts +1 -0
- package/lib/esm/common/icons/index.js +1 -0
- package/lib/esm/common/index.d.ts +1 -0
- package/lib/esm/common/index.js +1 -0
- package/lib/esm/common/inputs/Autocomplete.js +1 -1
- package/lib/esm/locales/de.d.ts +1 -1
- package/lib/esm/locales/de.js +1 -1
- package/lib/esm/locales/en.d.ts +1 -1
- package/lib/esm/locales/en.js +4 -4
- package/lib/esm/locales/es.d.ts +1 -1
- package/lib/esm/locales/es.js +1 -1
- package/lib/esm/locales/fr.d.ts +1 -1
- package/lib/esm/locales/fr.js +1 -1
- package/lib/esm/types.d.ts +27 -4
- package/lib/main.js +24 -24
- package/package.json +6 -4
- package/lib/esm/Importer/Stepper/common/getEnumFieldValueMatchingsInitialValue.d.ts +0 -8
- package/lib/esm/Importer/Stepper/common/getEnumFieldValueMatchingsInitialValue.js +0 -33
- package/lib/esm/Importer/common/Spreadsheet/components/ValidationProgress.d.ts +0 -5
- package/lib/esm/Importer/common/Spreadsheet/components/ValidationProgress.js +0 -19
- package/lib/esm/Importer/common/Spreadsheet/components/inputs/EmailInput.d.ts +0 -3
- package/lib/esm/Importer/common/Spreadsheet/components/inputs/EmailInput.js +0 -14
- package/lib/esm/Importer/common/Spreadsheet/hooks.d.ts +0 -33
- package/lib/esm/Importer/common/Spreadsheet/hooks.js +0 -256
- package/lib/esm/common/Table/TableActions/FilterByErrors/functions.d.ts +0 -11
- package/lib/esm/common/Table/TableActions/FilterByErrors/functions.js +0 -35
- package/lib/esm/common/Table/TableActions/hooks.d.ts +0 -18
- package/lib/esm/common/Table/TableActions/hooks.js +0 -41
|
@@ -45,6 +45,7 @@ import { Checkbox } from "../../../../common/inputs/Checkbox";
|
|
|
45
45
|
import { useImporterContext } from "../../../contexts/ImporterContextProvider";
|
|
46
46
|
import ReactVirtualizedAutoSizer from "react-virtualized-auto-sizer";
|
|
47
47
|
import { rowIsEmpty } from "../SpreadsheetContextProvider/utils";
|
|
48
|
+
import { useDataSetContext } from "../DataSetContextProvider";
|
|
48
49
|
var StyledGrid = styled(Grid)(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n background: ", ";\n overflow-y: scroll;\n"], ["\n background: ", ";\n overflow-y: scroll;\n"])), function (_a) {
|
|
49
50
|
var theme = _a.theme;
|
|
50
51
|
return theme.colors.white50;
|
|
@@ -57,52 +58,55 @@ var gridStyles = {
|
|
|
57
58
|
};
|
|
58
59
|
export var SpreadsheetRowCheckboxes = function (_a) {
|
|
59
60
|
var height = _a.height, gridRef = _a.gridRef, isLoadingData = _a.isLoadingData, props = __rest(_a, ["height", "gridRef", "isLoadingData"]);
|
|
60
|
-
var _b = useSpreadsheetContext(),
|
|
61
|
+
var _b = useSpreadsheetContext(), selectedRows = _b.selectedRows, options = _b.options, filteredDataIds = _b.filteredDataIds, lastClickedIndexRef = _b.lastClickedIndexRef, setSelectedRows = _b.setSelectedRows, checkboxColumnWidth = _b.checkboxColumnWidth, isTransformTooltipOpened = _b.isTransformTooltipOpened;
|
|
62
|
+
var getRecord = useDataSetContext().getRecord;
|
|
61
63
|
var currentStepIndex = useImporterContext().currentStepIndex;
|
|
62
|
-
var nonEmptyRows = useMemo(function () { return
|
|
63
|
-
data,
|
|
64
|
-
]);
|
|
64
|
+
var nonEmptyRows = useMemo(function () { return filteredDataIds.filter(function (rowId) { return !rowIsEmpty(getRecord(rowId)); }); }, [filteredDataIds]);
|
|
65
65
|
var isIndeterminate = selectedRows.length > 0 && selectedRows.length < nonEmptyRows.length;
|
|
66
66
|
var handleRowSelect = function (checked, rowIndex, rowMetaId) {
|
|
67
|
-
var _a
|
|
67
|
+
var _a;
|
|
68
68
|
if (isTransformTooltipOpened)
|
|
69
69
|
return;
|
|
70
|
-
var
|
|
71
|
-
var
|
|
72
|
-
var
|
|
70
|
+
var recordId = filteredDataIds[rowIndex];
|
|
71
|
+
var record = getRecord(recordId);
|
|
72
|
+
var lastRowRecordId = filteredDataIds[filteredDataIds.length - 1];
|
|
73
|
+
var isLastRow = rowMetaId === lastRowRecordId;
|
|
74
|
+
var isLastRowAndEmpty = isLastRow && rowIsEmpty(getRecord(lastRowRecordId));
|
|
73
75
|
if (isLastRowAndEmpty)
|
|
74
76
|
return;
|
|
75
77
|
if (options.withSingleRowSelect) {
|
|
76
|
-
if (!rowIsEmpty(
|
|
77
|
-
setSelectedRows([(
|
|
78
|
+
if (!rowIsEmpty(record))
|
|
79
|
+
setSelectedRows([(_a = record === null || record === void 0 ? void 0 : record._meta) === null || _a === void 0 ? void 0 : _a.id]);
|
|
78
80
|
return;
|
|
79
81
|
}
|
|
80
82
|
if (checked) {
|
|
81
|
-
setSelectedRows(function (prev) { var _a
|
|
83
|
+
setSelectedRows(function (prev) { var _a; return __spreadArray(__spreadArray([], prev, true), [(_a = record === null || record === void 0 ? void 0 : record._meta) === null || _a === void 0 ? void 0 : _a.id], false); });
|
|
82
84
|
}
|
|
83
85
|
else {
|
|
84
86
|
setSelectedRows(function (prev) {
|
|
85
|
-
return prev.filter(function (row) { var _a
|
|
87
|
+
return prev.filter(function (row) { var _a; return row !== ((_a = record === null || record === void 0 ? void 0 : record._meta) === null || _a === void 0 ? void 0 : _a.id); });
|
|
86
88
|
});
|
|
87
89
|
}
|
|
88
90
|
lastClickedIndexRef.current = rowIndex;
|
|
89
91
|
};
|
|
90
92
|
var handleSelectMultipleRows = function (rowIndex) {
|
|
91
|
-
var _a
|
|
93
|
+
var _a;
|
|
92
94
|
if (isTransformTooltipOpened)
|
|
93
95
|
return;
|
|
94
|
-
var
|
|
96
|
+
var rowId = filteredDataIds[rowIndex];
|
|
97
|
+
var record = getRecord(rowId);
|
|
98
|
+
var clickedRowId = (_a = record === null || record === void 0 ? void 0 : record._meta) === null || _a === void 0 ? void 0 : _a.id;
|
|
95
99
|
if (selectedRows.includes(clickedRowId)) {
|
|
96
100
|
// The clicked row is already selected, so we have to remove it
|
|
97
101
|
var clickedRowIndex = selectedRows.indexOf(clickedRowId);
|
|
98
102
|
var lastClickedIndex = lastClickedIndexRef.current;
|
|
99
103
|
var rangeStartIndex_1 = Math.min(clickedRowIndex, lastClickedIndex);
|
|
100
104
|
var rangeEndIndex_1 = Math.max(clickedRowIndex, lastClickedIndex);
|
|
101
|
-
var lastRowId_1 =
|
|
105
|
+
var lastRowId_1 = filteredDataIds[filteredDataIds.length - 1];
|
|
102
106
|
var updatedSelectedRows = selectedRows.filter(function (value, index) {
|
|
103
107
|
return index < rangeStartIndex_1 ||
|
|
104
108
|
index > rangeEndIndex_1 ||
|
|
105
|
-
(value === lastRowId_1 && rowIsEmpty(
|
|
109
|
+
(value === lastRowId_1 && rowIsEmpty(getRecord(lastRowId_1)));
|
|
106
110
|
});
|
|
107
111
|
setSelectedRows(updatedSelectedRows);
|
|
108
112
|
}
|
|
@@ -110,14 +114,14 @@ export var SpreadsheetRowCheckboxes = function (_a) {
|
|
|
110
114
|
// The clicked row is not selected, so we have to add it
|
|
111
115
|
var lastSelectedRowIndex = selectedRows.length - 1;
|
|
112
116
|
var lastSelectedRowId_1 = selectedRows[lastSelectedRowIndex];
|
|
113
|
-
var lastSelectedRow =
|
|
114
|
-
var clickedRow =
|
|
115
|
-
var rangeStartIndex =
|
|
116
|
-
var rangeEndIndex =
|
|
117
|
-
var range =
|
|
118
|
-
var rangeIds = range.map(function (row) { return row
|
|
119
|
-
var lastRowId_2 =
|
|
120
|
-
var isLastRowEmpty_1 = rowIsEmpty(
|
|
117
|
+
var lastSelectedRow = filteredDataIds.find(function (id) { return id === lastSelectedRowId_1; });
|
|
118
|
+
var clickedRow = filteredDataIds[rowIndex];
|
|
119
|
+
var rangeStartIndex = filteredDataIds.indexOf(lastSelectedRow);
|
|
120
|
+
var rangeEndIndex = filteredDataIds.indexOf(clickedRow);
|
|
121
|
+
var range = filteredDataIds.slice(Math.min(rangeStartIndex, rangeEndIndex), Math.max(rangeStartIndex, rangeEndIndex) + 1);
|
|
122
|
+
var rangeIds = range.map(function (row) { return row; });
|
|
123
|
+
var lastRowId_2 = filteredDataIds[filteredDataIds.length - 1];
|
|
124
|
+
var isLastRowEmpty_1 = rowIsEmpty(getRecord(lastRowId_2));
|
|
121
125
|
var updatedSelectedRows = __spreadArray(__spreadArray([], selectedRows, true), rangeIds, true).filter(function (value, index, array) {
|
|
122
126
|
return array.indexOf(value) === index &&
|
|
123
127
|
(value !== lastRowId_2 || (value === lastRowId_2 && !isLastRowEmpty_1));
|
|
@@ -130,14 +134,10 @@ export var SpreadsheetRowCheckboxes = function (_a) {
|
|
|
130
134
|
if (isTransformTooltipOpened)
|
|
131
135
|
return;
|
|
132
136
|
if (checked) {
|
|
133
|
-
var allRows =
|
|
134
|
-
.
|
|
135
|
-
var
|
|
136
|
-
var isLastRowAndEmpty = isLastRow && rowIsEmpty(row);
|
|
137
|
+
var allRows = filteredDataIds.filter(function (recordId) {
|
|
138
|
+
var isLastRow = recordId === filteredDataIds[filteredDataIds.length - 1];
|
|
139
|
+
var isLastRowAndEmpty = isLastRow && rowIsEmpty(getRecord(recordId));
|
|
137
140
|
return !isLastRowAndEmpty;
|
|
138
|
-
})
|
|
139
|
-
.map(function (row) {
|
|
140
|
-
return row === null || row === void 0 ? void 0 : row._meta.id;
|
|
141
141
|
});
|
|
142
142
|
setSelectedRows(allRows);
|
|
143
143
|
}
|
|
@@ -147,9 +147,8 @@ export var SpreadsheetRowCheckboxes = function (_a) {
|
|
|
147
147
|
lastClickedIndexRef.current = null;
|
|
148
148
|
};
|
|
149
149
|
var CheckboxCell = function (_a) {
|
|
150
|
-
var _b, _c;
|
|
151
150
|
var rowIndex = _a.rowIndex;
|
|
152
|
-
var rowMetaId =
|
|
151
|
+
var rowMetaId = filteredDataIds[rowIndex];
|
|
153
152
|
return (_jsx(Div, __assign({ className: "checkbox-cell", "data-test-id": "checkbox-cell-".concat(rowIndex) }, { children: _jsx(Checkbox, { isChecked: rowMetaId && selectedRows.includes(rowMetaId), onChange: function (checked) {
|
|
154
153
|
return !isLoadingData && handleRowSelect(checked, rowIndex, rowMetaId);
|
|
155
154
|
}, onShiftKeyPressed: function () {
|
|
@@ -163,16 +162,16 @@ export var SpreadsheetRowCheckboxes = function (_a) {
|
|
|
163
162
|
};
|
|
164
163
|
var Cell = function (_a) {
|
|
165
164
|
var rowIndex = _a.rowIndex, style = _a.style;
|
|
166
|
-
return (_jsxs(RowCheckbox, __assign({ style: style, alignCenter: true, justifyCenter: true, isLast: rowIndex ===
|
|
165
|
+
return (_jsxs(RowCheckbox, __assign({ style: style, alignCenter: true, justifyCenter: true, isLast: rowIndex === filteredDataIds.length - 1 }, { children: [_jsx(CheckboxCell, { rowIndex: rowIndex }), _jsx(RowNumbersCell, { rowIndex: rowIndex })] }), rowIndex));
|
|
167
166
|
};
|
|
168
167
|
var isSelectAllRowsChekboxChecked = (selectedRows === null || selectedRows === void 0 ? void 0 : selectedRows.length) > 0 &&
|
|
169
|
-
(
|
|
168
|
+
(filteredDataIds === null || filteredDataIds === void 0 ? void 0 : filteredDataIds.length) > 0 &&
|
|
170
169
|
(selectedRows === null || selectedRows === void 0 ? void 0 : selectedRows.length) >= (nonEmptyRows === null || nonEmptyRows === void 0 ? void 0 : nonEmptyRows.length);
|
|
171
170
|
return (_jsxs(SpreadsheetRowCheckboxesContainer, __assign({ className: "spreadsheet-row-container", columnWidth: checkboxColumnWidth }, props, { h100: true }, { children: [_jsx(SpreadsheetRowCheckboxesHeader, { children: currentStepIndex === 2 && (_jsx(Checkbox, { isChecked: isSelectAllRowsChekboxChecked, onChange: function (checked) {
|
|
172
171
|
return !isLoadingData && handleSelectAllRows(checked);
|
|
173
172
|
}, isIndeterminate: isIndeterminate, isDisabled: isLoadingData })) }), _jsx(ReactVirtualizedAutoSizer, { children: function (_a) {
|
|
174
173
|
var height = _a.height;
|
|
175
|
-
return (_jsx(StyledGrid, __assign({ ref: gridRef, style: gridStyles, width: checkboxColumnWidth, columnCount: 1, columnWidth: checkboxColumnWidth, rowHeight: 40, rowCount:
|
|
174
|
+
return (_jsx(StyledGrid, __assign({ ref: gridRef, style: gridStyles, width: checkboxColumnWidth, columnCount: 1, columnWidth: checkboxColumnWidth, rowHeight: 40, rowCount: filteredDataIds.length, height: height - spreadsheetHeaderHeightPx }, { children: Cell })));
|
|
176
175
|
} })] })));
|
|
177
176
|
};
|
|
178
177
|
var RowCheckbox = styled(Div)(templateObject_3 || (templateObject_3 = __makeTemplateObject(["\n background-color: ", ";\n ", ";\n ", "\n display: flex;\n justify-content: center;\n position: relative;\n user-select: none;\n\n .checkbox-cell {\n left: 50%;\n position: absolute;\n top: 50%;\n transform: translate(-50%, -50%);\n visibility: hidden;\n z-index: 1;\n }\n\n .row-numbers-cell {\n left: 50%;\n position: absolute;\n top: 50%;\n transform: translate(-50%, -50%);\n }\n"], ["\n background-color: ", ";\n ", ";\n ", "\n display: flex;\n justify-content: center;\n position: relative;\n user-select: none;\n\n .checkbox-cell {\n left: 50%;\n position: absolute;\n top: 50%;\n transform: translate(-50%, -50%);\n visibility: hidden;\n z-index: 1;\n }\n\n .row-numbers-cell {\n left: 50%;\n position: absolute;\n top: 50%;\n transform: translate(-50%, -50%);\n }\n"])), function (p) { return p.theme.colors.tableHeader; }, function (p) { return p.theme.css.label3; }, function (p) {
|
|
@@ -40,12 +40,12 @@ var gridStyles = {
|
|
|
40
40
|
};
|
|
41
41
|
export var SpreadsheetRowNumbers = function (_a) {
|
|
42
42
|
var height = _a.height, spreadsheetHasXScroll = _a.spreadsheetHasXScroll, gridRef = _a.gridRef, props = __rest(_a, ["height", "spreadsheetHasXScroll", "gridRef"]);
|
|
43
|
-
var
|
|
43
|
+
var filteredDataIds = useSpreadsheetContext().filteredDataIds;
|
|
44
44
|
var Cell = function (_a) {
|
|
45
45
|
var rowIndex = _a.rowIndex, style = _a.style;
|
|
46
|
-
return (_jsx(RowNumber, __assign({ style: style, alignCenter: true, justifyCenter: true, isLast: rowIndex ===
|
|
46
|
+
return (_jsx(RowNumber, __assign({ style: style, alignCenter: true, justifyCenter: true, isLast: rowIndex === filteredDataIds.length - 1 }, { children: _jsx(Div, __assign({ truncateText: true, textAlignCenter: true, body2: true }, { children: rowIndex + 1 })) }), rowIndex));
|
|
47
47
|
};
|
|
48
|
-
return (_jsxs(SpreadsheetRowNumbersContainer, __assign({}, props, { h: height }, { children: [_jsx(SpreadsheetRowNumbersHeader, {}), _jsx(Grid, __assign({ ref: gridRef, style: gridStyles, width: SPREADSHEET_ROW_NUMBERS_WIDTH, columnCount: 1, columnWidth: SPREADSHEET_ROW_NUMBERS_WIDTH, height: height - spreadsheetHeaderHeightPx, rowHeight: 40, rowCount:
|
|
48
|
+
return (_jsxs(SpreadsheetRowNumbersContainer, __assign({}, props, { h: height }, { children: [_jsx(SpreadsheetRowNumbersHeader, {}), _jsx(Grid, __assign({ ref: gridRef, style: gridStyles, width: SPREADSHEET_ROW_NUMBERS_WIDTH, columnCount: 1, columnWidth: SPREADSHEET_ROW_NUMBERS_WIDTH, height: height - spreadsheetHeaderHeightPx, rowHeight: 40, rowCount: filteredDataIds.length }, { children: Cell }))] })));
|
|
49
49
|
};
|
|
50
50
|
var RowNumber = styled(Div)(templateObject_2 || (templateObject_2 = __makeTemplateObject(["\n background-color: ", ";\n ", ";\n ", "\n"], ["\n background-color: ", ";\n ", ";\n ", "\n"])), function (p) { return p.theme.colors.tableHeader; }, function (p) { return p.theme.css.label3; }, function (p) {
|
|
51
51
|
return !p.isLast && css(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n box-shadow: inset 0 -1px 0 ", ";\n "], ["\n box-shadow: inset 0 -1px 0 ", ";\n "])), function (p) { return p.theme.colors.gray300; });
|
|
@@ -31,6 +31,10 @@ import { SpreadsheetField, useSpreadsheetField } from ".";
|
|
|
31
31
|
import { Div } from "../../../../../styled/utils";
|
|
32
32
|
import { useSpreadsheetContext } from "../../SpreadsheetContextProvider";
|
|
33
33
|
import { AVERAGE_CHAR_SIZE, getFieldContentWidth } from "./utils";
|
|
34
|
+
var parseValue = function (value) {
|
|
35
|
+
var isFalsyButNotZero = !value && value !== 0;
|
|
36
|
+
return isFalsyButNotZero ? "" : value;
|
|
37
|
+
};
|
|
34
38
|
export var SpreadsheetInput = function (_a) {
|
|
35
39
|
var _b, _c, _d, _e, _f, _g;
|
|
36
40
|
var name = _a.name, record = _a.record, fieldType = _a.fieldType, columnWidth = _a.columnWidth, props = __rest(_a, ["name", "record", "fieldType", "columnWidth"]);
|
|
@@ -56,7 +60,7 @@ export var SpreadsheetInput = function (_a) {
|
|
|
56
60
|
? "".concat(totalInputSize, "px")
|
|
57
61
|
: "".concat(defaultWidthAsNumber, "px");
|
|
58
62
|
}, [value, record, columnWidth]);
|
|
59
|
-
return (_jsxs(SpreadsheetField, __assign({ validationError: validationError, validationWarning: validationWarning, isHighlighted: isHighlighted, defaultFieldWidth: defaultWidthAsNumber, expandedFieldWidth: expandedFieldWidth, shouldExpandInput: true }, { children: [_jsx(Input, __assign({ autoComplete: "off", hasError: !!validationError, hasWarning: !!validationWarning, value: value
|
|
63
|
+
return (_jsxs(SpreadsheetField, __assign({ validationError: validationError, validationWarning: validationWarning, isHighlighted: isHighlighted, defaultFieldWidth: defaultWidthAsNumber, expandedFieldWidth: expandedFieldWidth, shouldExpandInput: true }, { children: [_jsx(Input, __assign({ autoComplete: "off", hasError: !!validationError, hasWarning: !!validationWarning, value: parseValue(value), onChange: function (_a) {
|
|
60
64
|
var value = _a.target.value;
|
|
61
65
|
return !isTransformTooltipOpened && setValue(value);
|
|
62
66
|
}, disabledWhen: isTransformTooltipOpened }, props)), ((_g = (_f = (_e = record === null || record === void 0 ? void 0 : record._meta) === null || _e === void 0 ? void 0 : _e.transformedRow) === null || _f === void 0 ? void 0 : _f[name]) === null || _g === void 0 ? void 0 : _g.original) &&
|
|
@@ -53,33 +53,59 @@ import { jsx as _jsx } from "react/jsx-runtime";
|
|
|
53
53
|
import { debounce, get } from "lodash";
|
|
54
54
|
import { useCallback, useEffect, useState } from "react";
|
|
55
55
|
import styled, { css } from "styled-components";
|
|
56
|
+
import { useEventManagerContext } from "../../../../../common/EventManagerContextProvider";
|
|
56
57
|
import { TooltipProvider } from "../../../../../common/TooltipProvider";
|
|
57
58
|
import { Div } from "../../../../../styled/utils";
|
|
58
|
-
import {
|
|
59
|
+
import { useDataSetContext } from "../../DataSetContextProvider";
|
|
60
|
+
import { useFilteredDataContext } from "../../FilteredDataContextProvider";
|
|
59
61
|
import { useSpreadsheetContext } from "../../SpreadsheetContextProvider";
|
|
62
|
+
import { useDataSetManipulation } from "../../SpreadsheetContextProvider/useDataSetManipulation";
|
|
63
|
+
import { useValidationContext } from "../../ValidationContextProvider";
|
|
64
|
+
import { parseValue } from "../../common";
|
|
60
65
|
export var useSpreadsheetField = function (name, record, fieldType) {
|
|
61
|
-
var
|
|
62
|
-
var
|
|
63
|
-
var
|
|
64
|
-
var
|
|
66
|
+
var appendNewRecordToSpreadsheet = useDataSetManipulation().appendNewRecordToSpreadsheet;
|
|
67
|
+
var lastFilteredRecordId = useFilteredDataContext().lastFilteredRecordId;
|
|
68
|
+
var _a = useValidationContext(), updateRecordAndRevalidate = _a.updateRecordAndRevalidate, warnings = _a.warnings, errors = _a.errors;
|
|
69
|
+
var getRecord = useDataSetContext().getRecord;
|
|
70
|
+
var _b = useState(record), recordState = _b[0], setRecordState = _b[1];
|
|
71
|
+
var _c = useState(record[name]), value = _c[0], setValue = _c[1];
|
|
72
|
+
var _d = useEventManagerContext(), on = _d.on, off = _d.off;
|
|
73
|
+
var _e = useState(get(errors.current, "".concat(record._meta.id, ".").concat(name), null)), validationError = _e[0], setValidationError = _e[1];
|
|
74
|
+
var _f = useState(get(warnings.current, "".concat(record._meta.id, ".").concat(name), null)), validationWarning = _f[0], setValidationWarning = _f[1];
|
|
65
75
|
useEffect(function () {
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
76
|
+
var listener = function (newRecord) {
|
|
77
|
+
var _record = getRecord(record._meta.id);
|
|
78
|
+
setValidationError(get(errors.current, "".concat(_record._meta.id, ".").concat(name), null));
|
|
79
|
+
setValidationWarning(get(warnings.current, "".concat(_record._meta.id, ".").concat(name), null));
|
|
80
|
+
setRecordState(_record);
|
|
81
|
+
};
|
|
82
|
+
on(record._meta.id, listener);
|
|
83
|
+
return function () {
|
|
84
|
+
off(record._meta.id, listener);
|
|
85
|
+
};
|
|
86
|
+
}, []);
|
|
70
87
|
var updateData = useCallback(debounce(function (value) { return __awaiter(void 0, void 0, void 0, function () {
|
|
71
|
-
var
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
88
|
+
var _record;
|
|
89
|
+
return __generator(this, function (_a) {
|
|
90
|
+
_record = __assign({}, getRecord(record._meta.id));
|
|
91
|
+
_record[name] = parseValue(fieldType, value);
|
|
92
|
+
updateRecordAndRevalidate(_record);
|
|
93
|
+
setRecordState(_record);
|
|
94
|
+
if (record._meta.id === lastFilteredRecordId.current) {
|
|
95
|
+
appendNewRecordToSpreadsheet();
|
|
96
|
+
}
|
|
76
97
|
return [2 /*return*/];
|
|
77
98
|
});
|
|
78
|
-
}); },
|
|
99
|
+
}); }, 200), [record]);
|
|
100
|
+
useEffect(function () {
|
|
101
|
+
if (recordState[name] !== value) {
|
|
102
|
+
setValue(recordState[name]);
|
|
103
|
+
}
|
|
104
|
+
}, [recordState[name], recordState]);
|
|
79
105
|
var updateValue = useCallback(function (value) {
|
|
80
106
|
setValue(value);
|
|
81
107
|
updateData(value);
|
|
82
|
-
}, [record, updateData]);
|
|
108
|
+
}, [record, recordState, updateData]);
|
|
83
109
|
return {
|
|
84
110
|
value: value,
|
|
85
111
|
setValue: updateValue,
|
|
@@ -87,29 +113,34 @@ export var useSpreadsheetField = function (name, record, fieldType) {
|
|
|
87
113
|
validationWarning: validationWarning,
|
|
88
114
|
};
|
|
89
115
|
};
|
|
90
|
-
var ContentContainer = styled(Div)(
|
|
116
|
+
var ContentContainer = styled(Div)(templateObject_8 || (templateObject_8 = __makeTemplateObject(["\n height: calc(100% - 1px);\n width: ", ";\n overflow: hidden;\n\n ", "\n\n &:focus-within, \n &:hover {\n ", "\n }\n\n &:focus-within, \n &:hover {\n ", "\n }\n\n ", ";\n ", "\n ", "\n ", "\n ", "\n"], ["\n height: calc(100% - 1px);\n width: ", ";\n overflow: hidden;\n\n ", "\n\n &:focus-within, \n &:hover {\n ", "\n }\n\n &:focus-within, \n &:hover {\n ", "\n }\n\n ", ";\n ", "\n ", "\n ", "\n ", "\n"])), function (_a) {
|
|
91
117
|
var defaultFieldWidth = _a.defaultFieldWidth;
|
|
92
118
|
return defaultFieldWidth ? "".concat(defaultFieldWidth, "px") : "100%";
|
|
93
119
|
}, function (_a) {
|
|
94
120
|
var expandedFieldWidth = _a.expandedFieldWidth;
|
|
95
121
|
return expandedFieldWidth && css(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n position: absolute;\n "], ["\n position: absolute;\n "])));
|
|
96
122
|
}, function (_a) {
|
|
97
|
-
var
|
|
98
|
-
return shouldExpandInput &&
|
|
123
|
+
var hasError = _a.hasError, hasWarning = _a.hasWarning, isHighlighted = _a.isHighlighted, theme = _a.theme, shouldExpandInput = _a.shouldExpandInput;
|
|
124
|
+
return shouldExpandInput &&
|
|
125
|
+
!hasError &&
|
|
126
|
+
!hasWarning && css(templateObject_2 || (templateObject_2 = __makeTemplateObject(["\n background: ", ";\n box-shadow: 0px 0px 0px 2px ", " inset;\n "], ["\n background: ", ";\n box-shadow: 0px 0px 0px 2px ", " inset;\n "])), !isHighlighted
|
|
99
127
|
? theme.colors.white
|
|
100
|
-
: theme.colors.blue100, function (p) { return p.theme.colors.blue500; }
|
|
128
|
+
: theme.colors.blue100, function (p) { return p.theme.colors.blue500; });
|
|
129
|
+
}, function (_a) {
|
|
130
|
+
var expandedFieldWidth = _a.expandedFieldWidth, shouldExpandInput = _a.shouldExpandInput;
|
|
131
|
+
return shouldExpandInput && css(templateObject_3 || (templateObject_3 = __makeTemplateObject(["\n width: ", ";\n z-index: 1;\n\n .suffix {\n right: 12px;\n }\n "], ["\n width: ", ";\n z-index: 1;\n\n .suffix {\n right: 12px;\n }\n "])), expandedFieldWidth || "auto");
|
|
101
132
|
}, function (p) { return p.theme.css.alignCenter; }, function (p) {
|
|
102
|
-
return p.isHighlighted && css(
|
|
133
|
+
return p.isHighlighted && css(templateObject_4 || (templateObject_4 = __makeTemplateObject(["\n background: ", ";\n /* internal border */\n box-shadow: 0px 0px 0px 2px ", " inset;\n "], ["\n background: ", ";\n /* internal border */\n box-shadow: 0px 0px 0px 2px ", " inset;\n "])), function (p) { return p.theme.colors.blue100; }, function (p) { return p.theme.colors.blue500; });
|
|
103
134
|
}, function (p) {
|
|
104
|
-
return p.hasWarning && css(
|
|
135
|
+
return p.hasWarning && css(templateObject_5 || (templateObject_5 = __makeTemplateObject(["\n color: ", ";\n background: ", ";\n /* internal border */\n box-shadow: 0px 0px 0px 1px ", " inset;\n "], ["\n color: ", ";\n background: ", ";\n /* internal border */\n box-shadow: 0px 0px 0px 1px ", " inset;\n "])), function (p) { return p.theme.colors.orange1200; }, function (p) { return p.theme.colors.orange1100; }, function (p) { return p.theme.colors.orange500; });
|
|
105
136
|
}, function (p) {
|
|
106
|
-
return p.hasError && css(
|
|
137
|
+
return p.hasError && css(templateObject_6 || (templateObject_6 = __makeTemplateObject(["\n color: ", ";\n background: ", ";\n /* internal border */\n box-shadow: 0px 0px 0px 1px ", " inset;\n "], ["\n color: ", ";\n background: ", ";\n /* internal border */\n box-shadow: 0px 0px 0px 1px ", " inset;\n "])), function (p) { return p.theme.colors.error; }, function (p) { return p.theme.colors.red100; }, function (p) { return p.theme.colors.error; });
|
|
107
138
|
}, function (p) {
|
|
108
|
-
return p.isReadOnly && css(
|
|
139
|
+
return p.isReadOnly && css(templateObject_7 || (templateObject_7 = __makeTemplateObject(["\n pointer-events: none;\n "], ["\n pointer-events: none;\n "])));
|
|
109
140
|
});
|
|
110
141
|
export var SpreadsheetField = function (_a) {
|
|
111
142
|
var validationError = _a.validationError, validationWarning = _a.validationWarning, children = _a.children, isHighlighted = _a.isHighlighted, expandedFieldWidth = _a.expandedFieldWidth, shouldExpandInput = _a.shouldExpandInput, defaultFieldWidth = _a.defaultFieldWidth;
|
|
112
143
|
var isReadOnly = useSpreadsheetContext().isReadOnly;
|
|
113
|
-
return (_jsx(Div, __assign({ dim: "100%" }, { children: _jsx(TooltipProvider, __assign({ tooltip: validationError || validationWarning }, { children: _jsx(Div, __assign({ dim: "100%" }, { children: _jsx(ContentContainer, __assign({ hasError:
|
|
144
|
+
return (_jsx(Div, __assign({ dim: "100%" }, { children: _jsx(TooltipProvider, __assign({ tooltip: validationError || validationWarning }, { children: _jsx(Div, __assign({ dim: "100%" }, { children: _jsx(ContentContainer, __assign({ hasError: validationError !== null, hasWarning: validationWarning !== null, isHighlighted: isHighlighted, expandedFieldWidth: expandedFieldWidth, defaultFieldWidth: defaultFieldWidth, shouldExpandInput: shouldExpandInput, isReadOnly: isReadOnly, className: "input-content" }, { children: children })) })) })) })));
|
|
114
145
|
};
|
|
115
|
-
var templateObject_1, templateObject_2, templateObject_3, templateObject_4, templateObject_5, templateObject_6, templateObject_7;
|
|
146
|
+
var templateObject_1, templateObject_2, templateObject_3, templateObject_4, templateObject_5, templateObject_6, templateObject_7, templateObject_8;
|
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
var _a;
|
|
2
2
|
import { FieldTypes } from "../../../../../types";
|
|
3
3
|
import { BooleanInput } from "./Boolean";
|
|
4
|
-
import { EmailInput } from "./EmailInput";
|
|
5
4
|
import { EnumInput } from "./EnumInput";
|
|
6
5
|
import { FloatInput } from "./FloatInput";
|
|
7
6
|
import { IntegerInput } from "./IntegerInput";
|
|
8
7
|
import { StringInput } from "./StringInput";
|
|
9
8
|
export var inputTypes = (_a = {},
|
|
10
9
|
_a[FieldTypes.boolean] = BooleanInput,
|
|
11
|
-
_a[FieldTypes.email] =
|
|
10
|
+
_a[FieldTypes.email] = StringInput,
|
|
12
11
|
_a[FieldTypes.enum] = EnumInput,
|
|
13
12
|
_a[FieldTypes.float] = FloatInput,
|
|
14
13
|
_a[FieldTypes.integer] = IntegerInput,
|
|
@@ -3,4 +3,3 @@ import { SpreadsheetProps } from "./common/types";
|
|
|
3
3
|
declare const _default: React.MemoExoticComponent<({ initialDataSet, initialDataSetUpdatedAt, ...props }: SpreadsheetProps) => JSX.Element>;
|
|
4
4
|
export default _default;
|
|
5
5
|
export * from "./SpreadsheetContextProvider";
|
|
6
|
-
export * from "./hooks";
|
|
@@ -21,99 +21,16 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
|
21
21
|
return t;
|
|
22
22
|
};
|
|
23
23
|
import { jsx as _jsx, Fragment as _Fragment } from "react/jsx-runtime";
|
|
24
|
-
import { get } from "lodash";
|
|
25
|
-
import { DateTime } from "luxon";
|
|
26
24
|
import React from "react";
|
|
27
25
|
import { areEqual } from "react-window";
|
|
28
|
-
import { useImporterContext } from "../../contexts/ImporterContextProvider";
|
|
29
26
|
import { SpreadsheetContextProvider } from "./SpreadsheetContextProvider";
|
|
30
27
|
import SpreadsheetData from "./components/SpreadsheetData";
|
|
31
|
-
var useFieldSorting = function () {
|
|
32
|
-
var templateHeaders = useImporterContext().templateHeaders;
|
|
33
|
-
var getDefaultSortCompareFn = function (sortBy) {
|
|
34
|
-
return function (a, b) {
|
|
35
|
-
var aField = get(a, sortBy.field);
|
|
36
|
-
var bField = get(b, sortBy.field);
|
|
37
|
-
var fieldTypes = templateHeaders.reduce(function (acc, header) {
|
|
38
|
-
var type = header.column_type;
|
|
39
|
-
var pattern = header.pattern || null;
|
|
40
|
-
acc[header.internal_key] = { type: type, pattern: pattern };
|
|
41
|
-
return acc;
|
|
42
|
-
}, {});
|
|
43
|
-
var fieldType = fieldTypes[sortBy.field];
|
|
44
|
-
var isAEmpty = aField === undefined || aField === null || aField === "";
|
|
45
|
-
var isBEmpty = bField === undefined || bField === null || bField === "";
|
|
46
|
-
// sort empty values to the end
|
|
47
|
-
if (isAEmpty && isBEmpty) {
|
|
48
|
-
if (a._meta.rowIndex === b._meta.rowIndex)
|
|
49
|
-
return 0;
|
|
50
|
-
return a._meta.rowIndex < b._meta.rowIndex ? -1 : 1;
|
|
51
|
-
}
|
|
52
|
-
if (isAEmpty)
|
|
53
|
-
return 1;
|
|
54
|
-
if (isBEmpty)
|
|
55
|
-
return -1;
|
|
56
|
-
if (fieldType && fieldType.type === "boolean") {
|
|
57
|
-
var aString = aField ? "true" : "false";
|
|
58
|
-
var bString = bField ? "true" : "false";
|
|
59
|
-
if (aString === bString) {
|
|
60
|
-
if (a._meta.rowIndex === b._meta.rowIndex)
|
|
61
|
-
return 0;
|
|
62
|
-
return a._meta.rowIndex < b._meta.rowIndex ? -1 : 1;
|
|
63
|
-
}
|
|
64
|
-
if (aString === "true")
|
|
65
|
-
return sortBy.direction === "asc" ? -1 : 1;
|
|
66
|
-
if (bString === "true")
|
|
67
|
-
return sortBy.direction === "asc" ? 1 : -1;
|
|
68
|
-
}
|
|
69
|
-
else if (fieldType &&
|
|
70
|
-
(fieldType.type === "date" ||
|
|
71
|
-
fieldType.type === "datetime" ||
|
|
72
|
-
fieldType.type === "time")) {
|
|
73
|
-
var aDateTime = aField
|
|
74
|
-
? DateTime.fromFormat(aField, fieldType.pattern)
|
|
75
|
-
: null;
|
|
76
|
-
var bDateTime = bField
|
|
77
|
-
? DateTime.fromFormat(bField, fieldType.pattern)
|
|
78
|
-
: null;
|
|
79
|
-
// sort invalid date values to the end before empty values
|
|
80
|
-
if (aDateTime && !aDateTime.isValid)
|
|
81
|
-
return 1;
|
|
82
|
-
if (bDateTime && !bDateTime.isValid)
|
|
83
|
-
return -1;
|
|
84
|
-
if (aDateTime && bDateTime && aDateTime.equals(bDateTime)) {
|
|
85
|
-
if (a._meta.rowIndex === b._meta.rowIndex)
|
|
86
|
-
return 0;
|
|
87
|
-
return a._meta.rowIndex < b._meta.rowIndex ? -1 : 1;
|
|
88
|
-
}
|
|
89
|
-
if (sortBy.direction === "asc") {
|
|
90
|
-
return (aDateTime === null || aDateTime === void 0 ? void 0 : aDateTime.valueOf()) - (bDateTime === null || bDateTime === void 0 ? void 0 : bDateTime.valueOf());
|
|
91
|
-
}
|
|
92
|
-
return (bDateTime === null || bDateTime === void 0 ? void 0 : bDateTime.valueOf()) - (aDateTime === null || aDateTime === void 0 ? void 0 : aDateTime.valueOf());
|
|
93
|
-
}
|
|
94
|
-
else {
|
|
95
|
-
if (aField === bField) {
|
|
96
|
-
if (a._meta.rowIndex === b._meta.rowIndex)
|
|
97
|
-
return 0;
|
|
98
|
-
return a._meta.rowIndex < b._meta.rowIndex ? -1 : 1;
|
|
99
|
-
}
|
|
100
|
-
if (sortBy.direction === "asc") {
|
|
101
|
-
return aField > bField ? 1 : -1;
|
|
102
|
-
}
|
|
103
|
-
return aField < bField ? 1 : -1;
|
|
104
|
-
}
|
|
105
|
-
};
|
|
106
|
-
};
|
|
107
|
-
return { getDefaultSortCompareFn: getDefaultSortCompareFn };
|
|
108
|
-
};
|
|
109
28
|
var SpreadsheetWrapper = function (_a) {
|
|
110
29
|
var initialDataSet = _a.initialDataSet, initialDataSetUpdatedAt = _a.initialDataSetUpdatedAt, props = __rest(_a, ["initialDataSet", "initialDataSetUpdatedAt"]);
|
|
111
30
|
return (_jsx(_Fragment, { children: initialDataSet && (_jsx(Spreadsheet, __assign({ initialDataSet: initialDataSet }, props), initialDataSetUpdatedAt || 0)) }));
|
|
112
31
|
};
|
|
113
32
|
var Spreadsheet = function (props) {
|
|
114
|
-
|
|
115
|
-
return (_jsx(SpreadsheetContextProvider, __assign({}, props, { getSortCompareFn: getDefaultSortCompareFn }, { children: _jsx(SpreadsheetData, { className: props.className }) })));
|
|
33
|
+
return (_jsx(SpreadsheetContextProvider, __assign({}, props, { children: _jsx(SpreadsheetData, { className: props.className }) })));
|
|
116
34
|
};
|
|
117
35
|
export default React.memo(SpreadsheetWrapper, areEqual);
|
|
118
36
|
export * from "./SpreadsheetContextProvider";
|
|
119
|
-
export * from "./hooks";
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
/// <reference types="react" />
|
|
2
1
|
interface SpreadSheetWrapperProps {
|
|
3
2
|
canShowCheckboxOnHover?: boolean;
|
|
4
3
|
shouldShowOnlyCheckbox?: boolean;
|
|
@@ -6,5 +5,5 @@ interface SpreadSheetWrapperProps {
|
|
|
6
5
|
export declare const SpreadSheetData: import("styled-components").StyledComponent<"div", import("styled-components").DefaultTheme, import("../../../styled/utils").CSSProps, never>;
|
|
7
6
|
export declare const SpreadSheetWrapper: import("styled-components").StyledComponent<"div", import("styled-components").DefaultTheme, import("../../../styled/utils").CSSProps & SpreadSheetWrapperProps, never>;
|
|
8
7
|
export declare const SpreadSheetContainer: import("styled-components").StyledComponent<"div", import("styled-components").DefaultTheme, import("../../../styled/utils").CSSProps, never>;
|
|
9
|
-
export declare const TableView: import("styled-components").StyledComponent<
|
|
8
|
+
export declare const TableView: import("styled-components").StyledComponent<(props: any) => JSX.Element, import("styled-components").DefaultTheme, {}, never>;
|
|
10
9
|
export {};
|
|
@@ -2,6 +2,18 @@ var __makeTemplateObject = (this && this.__makeTemplateObject) || function (cook
|
|
|
2
2
|
if (Object.defineProperty) { Object.defineProperty(cooked, "raw", { value: raw }); } else { cooked.raw = raw; }
|
|
3
3
|
return cooked;
|
|
4
4
|
};
|
|
5
|
+
var __assign = (this && this.__assign) || function () {
|
|
6
|
+
__assign = Object.assign || function(t) {
|
|
7
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
8
|
+
s = arguments[i];
|
|
9
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
10
|
+
t[p] = s[p];
|
|
11
|
+
}
|
|
12
|
+
return t;
|
|
13
|
+
};
|
|
14
|
+
return __assign.apply(this, arguments);
|
|
15
|
+
};
|
|
16
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
5
17
|
import styled, { css } from "styled-components";
|
|
6
18
|
import { TableView as TableViewBase, TableViewCellContainer, TableViewRow, } from "../../../common/Table/TableView";
|
|
7
19
|
import { Div } from "../../../styled/utils";
|
|
@@ -12,5 +24,5 @@ export var SpreadSheetWrapper = styled(Div)(templateObject_5 || (templateObject_
|
|
|
12
24
|
canShowCheckboxOnHover && css(templateObject_3 || (templateObject_3 = __makeTemplateObject(["\n &:hover {\n .row-numbers-cell {\n visibility: hidden;\n }\n\n .checkbox-cell {\n visibility: visible;\n }\n }\n "], ["\n &:hover {\n .row-numbers-cell {\n visibility: hidden;\n }\n\n .checkbox-cell {\n visibility: visible;\n }\n }\n "]))));
|
|
13
25
|
});
|
|
14
26
|
export var SpreadSheetContainer = styled(Div)(templateObject_6 || (templateObject_6 = __makeTemplateObject([""], [""])));
|
|
15
|
-
export var TableView = styled(TableViewBase)(templateObject_7 || (templateObject_7 = __makeTemplateObject(["\n width: 100%;\n border: none;\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n overflow: hidden;\n background-color: ", ";\n ", " {\n border-bottom: none;\n height: 40px;\n }\n ", " {\n padding: 0 !important;\n box-shadow: inset 0 -1px 0 ", ",\n inset -1px 0 0 ", ";\n &.last-column {\n box-shadow: inset 0 -1px 0 ", ",\n inset 1px 0 0 transparent, inset -1px 0 0 transparent !important;\n }\n }\n"], ["\n width: 100%;\n border: none;\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n overflow: hidden;\n background-color: ", ";\n ", " {\n border-bottom: none;\n height: 40px;\n }\n ", " {\n padding: 0 !important;\n box-shadow: inset 0 -1px 0 ", ",\n inset -1px 0 0 ", ";\n &.last-column {\n box-shadow: inset 0 -1px 0 ", ",\n inset 1px 0 0 transparent, inset -1px 0 0 transparent !important;\n }\n }\n"])), function (p) { return p.theme.colors.gray50; }, TableViewRow, TableViewCellContainer, function (p) { return p.theme.colors.gray300; }, function (p) { return p.theme.colors.gray300; }, function (p) { return p.theme.colors.gray300; });
|
|
27
|
+
export var TableView = styled(function (props) { return _jsx(TableViewBase, __assign({}, props)); })(templateObject_7 || (templateObject_7 = __makeTemplateObject(["\n width: 100%;\n border: none;\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n overflow: hidden;\n background-color: ", ";\n ", " {\n border-bottom: none;\n height: 40px;\n }\n ", " {\n padding: 0 !important;\n box-shadow: inset 0 -1px 0 ", ",\n inset -1px 0 0 ", ";\n &.last-column {\n box-shadow: inset 0 -1px 0 ", ",\n inset 1px 0 0 transparent, inset -1px 0 0 transparent !important;\n }\n }\n"], ["\n width: 100%;\n border: none;\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n overflow: hidden;\n background-color: ", ";\n ", " {\n border-bottom: none;\n height: 40px;\n }\n ", " {\n padding: 0 !important;\n box-shadow: inset 0 -1px 0 ", ",\n inset -1px 0 0 ", ";\n &.last-column {\n box-shadow: inset 0 -1px 0 ", ",\n inset 1px 0 0 transparent, inset -1px 0 0 transparent !important;\n }\n }\n"])), function (p) { return p.theme.colors.gray50; }, TableViewRow, TableViewCellContainer, function (p) { return p.theme.colors.gray300; }, function (p) { return p.theme.colors.gray300; }, function (p) { return p.theme.colors.gray300; });
|
|
16
28
|
var templateObject_1, templateObject_2, templateObject_3, templateObject_4, templateObject_5, templateObject_6, templateObject_7;
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { get } from "lodash";
|
|
2
|
+
import { DateTime } from "luxon";
|
|
3
|
+
import { useImporterContext } from "../../contexts/ImporterContextProvider";
|
|
4
|
+
export var useFieldSorting = function () {
|
|
5
|
+
var templateHeaders = useImporterContext().templateHeaders;
|
|
6
|
+
var getDefaultSortCompareFn = function (sortBy) {
|
|
7
|
+
return function (a, b) {
|
|
8
|
+
var aField = get(a, sortBy.field);
|
|
9
|
+
var bField = get(b, sortBy.field);
|
|
10
|
+
var fieldTypes = templateHeaders.reduce(function (acc, header) {
|
|
11
|
+
var type = header.column_type;
|
|
12
|
+
var pattern = header.pattern || null;
|
|
13
|
+
acc[header.internal_key] = { type: type, pattern: pattern };
|
|
14
|
+
return acc;
|
|
15
|
+
}, {});
|
|
16
|
+
var fieldType = fieldTypes[sortBy.field];
|
|
17
|
+
var isAEmpty = aField === undefined || aField === null || aField === "";
|
|
18
|
+
var isBEmpty = bField === undefined || bField === null || bField === "";
|
|
19
|
+
// sort empty values to the end
|
|
20
|
+
if (isAEmpty && isBEmpty) {
|
|
21
|
+
if (a._meta.rowIndex === b._meta.rowIndex)
|
|
22
|
+
return 0;
|
|
23
|
+
return a._meta.rowIndex < b._meta.rowIndex ? -1 : 1;
|
|
24
|
+
}
|
|
25
|
+
if (isAEmpty)
|
|
26
|
+
return 1;
|
|
27
|
+
if (isBEmpty)
|
|
28
|
+
return -1;
|
|
29
|
+
if (fieldType && fieldType.type === "boolean") {
|
|
30
|
+
var aString = aField ? "true" : "false";
|
|
31
|
+
var bString = bField ? "true" : "false";
|
|
32
|
+
if (aString === bString) {
|
|
33
|
+
if (a._meta.rowIndex === b._meta.rowIndex)
|
|
34
|
+
return 0;
|
|
35
|
+
return a._meta.rowIndex < b._meta.rowIndex ? -1 : 1;
|
|
36
|
+
}
|
|
37
|
+
if (aString === "true")
|
|
38
|
+
return sortBy.direction === "asc" ? -1 : 1;
|
|
39
|
+
if (bString === "true")
|
|
40
|
+
return sortBy.direction === "asc" ? 1 : -1;
|
|
41
|
+
}
|
|
42
|
+
else if (fieldType &&
|
|
43
|
+
(fieldType.type === "date" ||
|
|
44
|
+
fieldType.type === "datetime" ||
|
|
45
|
+
fieldType.type === "time")) {
|
|
46
|
+
var aDateTime = aField
|
|
47
|
+
? DateTime.fromFormat(aField, fieldType.pattern)
|
|
48
|
+
: null;
|
|
49
|
+
var bDateTime = bField
|
|
50
|
+
? DateTime.fromFormat(bField, fieldType.pattern)
|
|
51
|
+
: null;
|
|
52
|
+
// sort invalid date values to the end before empty values
|
|
53
|
+
if (aDateTime && !aDateTime.isValid)
|
|
54
|
+
return 1;
|
|
55
|
+
if (bDateTime && !bDateTime.isValid)
|
|
56
|
+
return -1;
|
|
57
|
+
if (aDateTime && bDateTime && aDateTime.equals(bDateTime)) {
|
|
58
|
+
if (a._meta.rowIndex === b._meta.rowIndex)
|
|
59
|
+
return 0;
|
|
60
|
+
return a._meta.rowIndex < b._meta.rowIndex ? -1 : 1;
|
|
61
|
+
}
|
|
62
|
+
if (sortBy.direction === "asc") {
|
|
63
|
+
return (aDateTime === null || aDateTime === void 0 ? void 0 : aDateTime.valueOf()) - (bDateTime === null || bDateTime === void 0 ? void 0 : bDateTime.valueOf());
|
|
64
|
+
}
|
|
65
|
+
return (bDateTime === null || bDateTime === void 0 ? void 0 : bDateTime.valueOf()) - (aDateTime === null || aDateTime === void 0 ? void 0 : aDateTime.valueOf());
|
|
66
|
+
}
|
|
67
|
+
else {
|
|
68
|
+
if (aField === bField) {
|
|
69
|
+
if (a._meta.rowIndex === b._meta.rowIndex)
|
|
70
|
+
return 0;
|
|
71
|
+
return a._meta.rowIndex < b._meta.rowIndex ? -1 : 1;
|
|
72
|
+
}
|
|
73
|
+
if (sortBy.direction === "asc") {
|
|
74
|
+
return aField > bField ? 1 : -1;
|
|
75
|
+
}
|
|
76
|
+
return aField < bField ? 1 : -1;
|
|
77
|
+
}
|
|
78
|
+
};
|
|
79
|
+
};
|
|
80
|
+
return { getDefaultSortCompareFn: getDefaultSortCompareFn };
|
|
81
|
+
};
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { MutableRefObject } from "react";
|
|
2
|
+
import { DuplicateValuesCollection, Field, FieldValidation, OnValidateRecord, Record, ValidationErrors } from "../../../../types";
|
|
2
3
|
import { FieldValidator } from "./validators";
|
|
3
4
|
type SelectedValidator = {
|
|
4
5
|
validator: FieldValidation;
|
|
@@ -13,10 +14,11 @@ type ValidateRecordArgs = {
|
|
|
13
14
|
validatorsCache?: SelectedFieldValidators[];
|
|
14
15
|
record: Record;
|
|
15
16
|
fields: Field[];
|
|
16
|
-
|
|
17
|
+
duplicateValues: MutableRefObject<DuplicateValuesCollection>;
|
|
18
|
+
backendErrors?: ValidationErrors;
|
|
17
19
|
};
|
|
18
20
|
export declare function selectValidatorsFor(fields: Field[]): SelectedFieldValidators[];
|
|
19
|
-
export declare function validateRecord({ record, fields,
|
|
21
|
+
export declare function validateRecord({ record, fields, onValidateRecord, validatorsCache, duplicateValues, backendErrors, }: ValidateRecordArgs): Promise<{
|
|
20
22
|
errors?: ValidationErrors;
|
|
21
23
|
warnings?: ValidationErrors;
|
|
22
24
|
}>;
|