fuse-importer 0.1.2-testing → 0.1.4-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.d.ts +2 -0
- package/lib/esm/Importer/ImporterWithContext.js +12 -8
- package/lib/esm/Importer/Matcher/index.js +0 -11
- package/lib/esm/Importer/Review/ReviewContextProvider.js +55 -14
- package/lib/esm/Importer/Stepper/common/getEnumFieldValueMatchingsInitialValue.js +7 -4
- package/lib/esm/Importer/Stepper/index.js +61 -2
- package/lib/esm/Importer/Uploader/DragAndDropImporter/ImporterDropzone.js +19 -11
- package/lib/esm/Importer/common/Spreadsheet/SpreadsheetContextProvider/filterMethods.js +2 -9
- package/lib/esm/Importer/common/Spreadsheet/SpreadsheetContextProvider/index.d.ts +2 -3
- package/lib/esm/Importer/common/Spreadsheet/SpreadsheetContextProvider/index.js +66 -15
- package/lib/esm/Importer/common/Spreadsheet/SpreadsheetContextProvider/useSpreadsheetFilter.d.ts +1 -1
- package/lib/esm/Importer/common/Spreadsheet/SpreadsheetContextProvider/utils.d.ts +1 -0
- package/lib/esm/Importer/common/Spreadsheet/SpreadsheetContextProvider/utils.js +7 -0
- package/lib/esm/Importer/common/Spreadsheet/components/SpreadsheetData.js +2 -2
- package/lib/esm/Importer/common/Spreadsheet/components/SpreadsheetRowCheckboxes.js +1 -7
- package/lib/esm/Importer/common/Spreadsheet/components/fields/SpreadsheetInput.js +1 -1
- package/lib/esm/Importer/common/Spreadsheet/components/fields/index.js +16 -15
- package/lib/esm/Importer/common/Spreadsheet/hooks.d.ts +1 -2
- package/lib/esm/Importer/common/Spreadsheet/hooks.js +21 -39
- package/lib/esm/Importer/common/Spreadsheet/transformation/transformators.js +1 -25
- package/lib/esm/Importer/contexts/ImporterContextProvider.d.ts +3 -3
- package/lib/esm/Importer/contexts/ImporterContextProvider.js +31 -20
- package/lib/esm/common/Table/TableActions/CustomActions/CustomActions.js +81 -31
- package/lib/esm/common/Table/TableActions/DeleteSelectedRows.js +9 -1
- package/lib/esm/common/Table/TableActions/RowFilters.js +10 -6
- package/lib/esm/common/columnsTransformations.js +0 -8
- package/lib/esm/common/datePatterns.js +10 -10
- package/lib/esm/common/inputs/SelectMenu.js +6 -2
- package/lib/esm/common/inputs/TextInput.js +1 -1
- package/lib/esm/locales/de.d.ts +2 -1
- package/lib/esm/locales/de.js +2 -1
- package/lib/esm/locales/en.d.ts +2 -1
- package/lib/esm/locales/en.js +2 -1
- package/lib/esm/locales/es.d.ts +2 -1
- package/lib/esm/locales/es.js +2 -1
- package/lib/esm/locales/fr.d.ts +2 -1
- package/lib/esm/locales/fr.js +2 -1
- package/lib/esm/types.d.ts +17 -5
- package/lib/esm/types.js +0 -1
- package/lib/main.js +24 -24
- package/package.json +1 -1
|
@@ -44,6 +44,7 @@ import { useSpreadsheetContext } from "../SpreadsheetContextProvider";
|
|
|
44
44
|
import { Checkbox } from "../../../../common/inputs/Checkbox";
|
|
45
45
|
import { useImporterContext } from "../../../contexts/ImporterContextProvider";
|
|
46
46
|
import ReactVirtualizedAutoSizer from "react-virtualized-auto-sizer";
|
|
47
|
+
import { rowIsEmpty } from "../SpreadsheetContextProvider/utils";
|
|
47
48
|
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) {
|
|
48
49
|
var theme = _a.theme;
|
|
49
50
|
return theme.colors.white50;
|
|
@@ -54,13 +55,6 @@ var gridStyles = {
|
|
|
54
55
|
overflowY: "hidden",
|
|
55
56
|
overflowX: "scroll",
|
|
56
57
|
};
|
|
57
|
-
var rowIsEmpty = function (row) {
|
|
58
|
-
return Object.keys(row).every(function (key) {
|
|
59
|
-
if (key === "_meta")
|
|
60
|
-
return true;
|
|
61
|
-
return !row[key];
|
|
62
|
-
});
|
|
63
|
-
};
|
|
64
58
|
export var SpreadsheetRowCheckboxes = function (_a) {
|
|
65
59
|
var height = _a.height, gridRef = _a.gridRef, isLoadingData = _a.isLoadingData, props = __rest(_a, ["height", "gridRef", "isLoadingData"]);
|
|
66
60
|
var _b = useSpreadsheetContext(), data = _b.data, selectedRows = _b.selectedRows, options = _b.options, lastClickedIndexRef = _b.lastClickedIndexRef, setSelectedRows = _b.setSelectedRows, checkboxColumnWidth = _b.checkboxColumnWidth, isTransformTooltipOpened = _b.isTransformTooltipOpened;
|
|
@@ -56,7 +56,7 @@ export var SpreadsheetInput = function (_a) {
|
|
|
56
56
|
? "".concat(totalInputSize, "px")
|
|
57
57
|
: "".concat(defaultWidthAsNumber, "px");
|
|
58
58
|
}, [value, record, columnWidth]);
|
|
59
|
-
return (_jsxs(SpreadsheetField, __assign({ validationError: validationError, validationWarning: validationWarning, isHighlighted: isHighlighted, defaultFieldWidth: defaultWidthAsNumber, expandedFieldWidth: expandedFieldWidth, shouldExpandInput: true }, { children: [_jsx(Input, __assign({ hasError: !!validationError, hasWarning: !!validationWarning, value: value || "", onChange: function (_a) {
|
|
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 || "", onChange: function (_a) {
|
|
60
60
|
var value = _a.target.value;
|
|
61
61
|
return !isTransformTooltipOpened && setValue(value);
|
|
62
62
|
}, 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) &&
|
|
@@ -87,33 +87,34 @@ export var useSpreadsheetField = function (name, record, fieldType) {
|
|
|
87
87
|
validationWarning: validationWarning,
|
|
88
88
|
};
|
|
89
89
|
};
|
|
90
|
-
var ContentContainer = styled(Div)(
|
|
90
|
+
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
91
|
var defaultFieldWidth = _a.defaultFieldWidth;
|
|
92
92
|
return defaultFieldWidth ? "".concat(defaultFieldWidth, "px") : "100%";
|
|
93
93
|
}, function (_a) {
|
|
94
94
|
var expandedFieldWidth = _a.expandedFieldWidth;
|
|
95
95
|
return expandedFieldWidth && css(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n position: absolute;\n "], ["\n position: absolute;\n "])));
|
|
96
96
|
}, function (_a) {
|
|
97
|
-
var
|
|
98
|
-
return shouldExpandInput &&
|
|
97
|
+
var hasError = _a.hasError, hasWarning = _a.hasWarning, isHighlighted = _a.isHighlighted, theme = _a.theme, shouldExpandInput = _a.shouldExpandInput;
|
|
98
|
+
return shouldExpandInput &&
|
|
99
|
+
!hasError &&
|
|
100
|
+
!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
101
|
? theme.colors.white
|
|
100
|
-
: theme.colors.blue100, function (p) { return p.theme.colors.blue500; }
|
|
102
|
+
: theme.colors.blue100, function (p) { return p.theme.colors.blue500; });
|
|
103
|
+
}, function (_a) {
|
|
104
|
+
var expandedFieldWidth = _a.expandedFieldWidth, shouldExpandInput = _a.shouldExpandInput;
|
|
105
|
+
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
106
|
}, function (p) { return p.theme.css.alignCenter; }, function (p) {
|
|
102
|
-
return p.isHighlighted && css(
|
|
107
|
+
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
108
|
}, function (p) {
|
|
104
|
-
return p.hasWarning && css(
|
|
109
|
+
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
110
|
}, function (p) {
|
|
106
|
-
return p.hasError && css(
|
|
111
|
+
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
112
|
}, function (p) {
|
|
108
|
-
return p.isReadOnly && css(
|
|
109
|
-
});
|
|
110
|
-
var Wrapper = styled(Div)(function (_a) {
|
|
111
|
-
var isLoading = _a.isLoading;
|
|
112
|
-
return css(templateObject_9 || (templateObject_9 = __makeTemplateObject(["\n ", "\n "], ["\n ", "\n "])), isLoading && css(templateObject_8 || (templateObject_8 = __makeTemplateObject(["\n pointer-events: none;\n "], ["\n pointer-events: none;\n "]))));
|
|
113
|
+
return p.isReadOnly && css(templateObject_7 || (templateObject_7 = __makeTemplateObject(["\n pointer-events: none;\n "], ["\n pointer-events: none;\n "])));
|
|
113
114
|
});
|
|
114
115
|
export var SpreadsheetField = function (_a) {
|
|
115
116
|
var validationError = _a.validationError, validationWarning = _a.validationWarning, children = _a.children, isHighlighted = _a.isHighlighted, expandedFieldWidth = _a.expandedFieldWidth, shouldExpandInput = _a.shouldExpandInput, defaultFieldWidth = _a.defaultFieldWidth;
|
|
116
|
-
var
|
|
117
|
-
return (_jsx(
|
|
117
|
+
var isReadOnly = useSpreadsheetContext().isReadOnly;
|
|
118
|
+
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, hasWarning: !!validationWarning, isHighlighted: isHighlighted, expandedFieldWidth: expandedFieldWidth, defaultFieldWidth: defaultFieldWidth, shouldExpandInput: shouldExpandInput, isReadOnly: isReadOnly, className: "input-content" }, { children: children })) })) })) })));
|
|
118
119
|
};
|
|
119
|
-
var templateObject_1, templateObject_2, templateObject_3, templateObject_4, templateObject_5, templateObject_6, templateObject_7, templateObject_8
|
|
120
|
+
var templateObject_1, templateObject_2, templateObject_3, templateObject_4, templateObject_5, templateObject_6, templateObject_7, templateObject_8;
|
|
@@ -5,7 +5,6 @@ import { BatchValidationErrors, Field, OnValidateRecord, Record, RecordDataSet }
|
|
|
5
5
|
type UseValidationStateArgs = {
|
|
6
6
|
onValidateRecord?: OnValidateRecord;
|
|
7
7
|
setDataSet: React.Dispatch<React.SetStateAction<RecordDataSet>>;
|
|
8
|
-
setIsLoading: React.Dispatch<React.SetStateAction<boolean>>;
|
|
9
8
|
initialDataSet: RecordDataSet;
|
|
10
9
|
dataSet: RecordDataSet;
|
|
11
10
|
fields: Field[];
|
|
@@ -30,5 +29,5 @@ type UseValidationStateReturnValue = ValidationState & {
|
|
|
30
29
|
deleteRecords: DeleteRecords;
|
|
31
30
|
updateRecordAndRevalidate: (record: Record) => Promise<void>;
|
|
32
31
|
};
|
|
33
|
-
export declare const useValidationState: ({ initialDataSet, dataSet, fields, options, isReadOnly, setDataSet,
|
|
32
|
+
export declare const useValidationState: ({ initialDataSet, dataSet, fields, options, isReadOnly, setDataSet, onValidateRecord, }: UseValidationStateArgs) => UseValidationStateReturnValue;
|
|
34
33
|
export {};
|
|
@@ -45,7 +45,6 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
|
45
45
|
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
46
46
|
}
|
|
47
47
|
};
|
|
48
|
-
import { omit, set } from "lodash";
|
|
49
48
|
import { useCallback, useEffect, useMemo, useState } from "react";
|
|
50
49
|
import { useTableActions, } from "../../../common/Table/TableActions/hooks";
|
|
51
50
|
import { selectValidatorsFor, validateRecord } from "./validation";
|
|
@@ -56,7 +55,7 @@ var checkIfHasErrors = function (errors) {
|
|
|
56
55
|
export var useValidationState = function (_a) {
|
|
57
56
|
var initialDataSet = _a.initialDataSet, //Initial Data Set, used to run the initial validation
|
|
58
57
|
dataSet = _a.dataSet, //Current Updated Data Set
|
|
59
|
-
fields = _a.fields, options = _a.options, isReadOnly = _a.isReadOnly, setDataSet = _a.setDataSet,
|
|
58
|
+
fields = _a.fields, options = _a.options, isReadOnly = _a.isReadOnly, setDataSet = _a.setDataSet, onValidateRecord = _a.onValidateRecord;
|
|
60
59
|
var _b = useState({}), errors = _b[0], setErrors = _b[1];
|
|
61
60
|
var _c = useState({}), warnings = _c[0], setWarnings = _c[1];
|
|
62
61
|
var _d = useState(0), validationPercentage = _d[0], setValidationPercentage = _d[1];
|
|
@@ -69,14 +68,14 @@ export var useValidationState = function (_a) {
|
|
|
69
68
|
}).deleteRecords;
|
|
70
69
|
// Validate record and update dataSet
|
|
71
70
|
var updateRecordAndRevalidate = useCallback(function (records) { return __awaiter(void 0, void 0, void 0, function () {
|
|
72
|
-
var recordsArray, newDataSet,
|
|
71
|
+
var recordsArray, newDataSet, newErrors, newWarnings, i, record, recordId, data, _a, recordErrors, recordWarnings, hasError, hasWarning;
|
|
73
72
|
return __generator(this, function (_b) {
|
|
74
73
|
switch (_b.label) {
|
|
75
74
|
case 0:
|
|
76
75
|
recordsArray = Array.isArray(records) ? records : [records];
|
|
77
76
|
newDataSet = __assign({}, dataSet);
|
|
78
|
-
|
|
79
|
-
|
|
77
|
+
newErrors = __assign({}, errors);
|
|
78
|
+
newWarnings = __assign({}, warnings);
|
|
80
79
|
i = 0;
|
|
81
80
|
_b.label = 1;
|
|
82
81
|
case 1:
|
|
@@ -100,51 +99,35 @@ export var useValidationState = function (_a) {
|
|
|
100
99
|
hasWarning = checkIfHasErrors(recordWarnings);
|
|
101
100
|
newDataSet[recordId]._meta.isInvalid = hasError;
|
|
102
101
|
newDataSet[recordId]._meta.hasWarning = hasWarning;
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
102
|
+
if (hasError) {
|
|
103
|
+
newErrors[recordId] = recordErrors;
|
|
104
|
+
}
|
|
105
|
+
else {
|
|
106
|
+
delete newErrors[recordId];
|
|
107
|
+
}
|
|
108
|
+
if (hasWarning) {
|
|
109
|
+
newWarnings[recordId] = recordWarnings;
|
|
110
|
+
}
|
|
111
|
+
else {
|
|
112
|
+
delete newWarnings[recordId];
|
|
113
|
+
}
|
|
109
114
|
_b.label = 3;
|
|
110
115
|
case 3:
|
|
111
116
|
i++;
|
|
112
117
|
return [3 /*break*/, 1];
|
|
113
118
|
case 4:
|
|
114
|
-
setErrors(
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
for (var errorId in errorUpdates) {
|
|
118
|
-
var updatedError = errorUpdates[errorId];
|
|
119
|
-
var hasUpdatedError = updatedError && Object.keys(updatedError).length > 0;
|
|
120
|
-
newErrors = hasUpdatedError
|
|
121
|
-
? set(currentErrors, errorId, updatedError)
|
|
122
|
-
: omit(currentErrors, errorId);
|
|
123
|
-
}
|
|
124
|
-
return newErrors;
|
|
125
|
-
});
|
|
126
|
-
setWarnings(function (warnings) {
|
|
127
|
-
var currentWarnings = __assign({}, warnings);
|
|
128
|
-
var newWarnings = {};
|
|
129
|
-
for (var warningId in warningUpdates) {
|
|
130
|
-
var updatedWarning = warningUpdates[warningId];
|
|
131
|
-
var hasUpdatedWarning = updatedWarning && Object.keys(updatedWarning).length > 0;
|
|
132
|
-
newWarnings = hasUpdatedWarning
|
|
133
|
-
? set(currentWarnings, warningId, updatedWarning)
|
|
134
|
-
: omit(currentWarnings, warningId);
|
|
135
|
-
}
|
|
136
|
-
return newWarnings;
|
|
137
|
-
});
|
|
138
|
-
setDataSet(newDataSet); //Update the dataSet
|
|
119
|
+
setErrors(newErrors);
|
|
120
|
+
setWarnings(newWarnings);
|
|
121
|
+
setDataSet(newDataSet); // Update the dataSet
|
|
139
122
|
return [2 /*return*/];
|
|
140
123
|
}
|
|
141
124
|
});
|
|
142
|
-
}); }, [dataSet, validatorsCache]);
|
|
125
|
+
}); }, [dataSet, errors, warnings, validatorsCache]);
|
|
143
126
|
// Initial data validation and update dataSet
|
|
144
127
|
useEffect(function () {
|
|
145
128
|
if (!initialDataSet || isReadOnly)
|
|
146
129
|
return;
|
|
147
|
-
|
|
130
|
+
setIsLoadingApp(true);
|
|
148
131
|
var initialValidation = function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
149
132
|
var errors, warnings, initialData, length, _a, batchValidationDelayMs, _b, batchValidationSize, batchSize, batchCount, batchIdx, idx, batch, index, record, recordId, _c, recordErrors, recordWarnings, hasError, hasWarning, validationPercentage_1;
|
|
150
133
|
return __generator(this, function (_d) {
|
|
@@ -223,7 +206,6 @@ export var useValidationState = function (_a) {
|
|
|
223
206
|
case 2: return [4 /*yield*/, initialValidation()];
|
|
224
207
|
case 3:
|
|
225
208
|
_a.sent();
|
|
226
|
-
setIsLoading(false);
|
|
227
209
|
setIsLoadingApp(false);
|
|
228
210
|
return [2 /*return*/];
|
|
229
211
|
}
|
|
@@ -209,28 +209,4 @@ var integerTransformations = {
|
|
|
209
209
|
return isTransformationNeeded(fieldValue, valueWithCorrectType);
|
|
210
210
|
},
|
|
211
211
|
};
|
|
212
|
-
var
|
|
213
|
-
autodetect: function (fieldValue, _, fieldOptions) {
|
|
214
|
-
var options = fieldOptions.options.map(function (option) {
|
|
215
|
-
return option.toLowerCase();
|
|
216
|
-
});
|
|
217
|
-
if (!fieldValue || options.length === 0)
|
|
218
|
-
return {
|
|
219
|
-
transformationWasNeeded: false,
|
|
220
|
-
original: fieldValue,
|
|
221
|
-
transformed: null,
|
|
222
|
-
};
|
|
223
|
-
var parsedRecord = String(fieldValue).toLowerCase();
|
|
224
|
-
var trueOptionIndex = options.findIndex(function (option) { return option === "true" || option === "1"; });
|
|
225
|
-
var falseOptionIndex = options.findIndex(function (option) { return option === "false" || option === "0"; });
|
|
226
|
-
if (trueOptionIndex !== -1 && falseOptionIndex !== -1) {
|
|
227
|
-
var transformedValue_1 = parsedRecord === options[trueOptionIndex]
|
|
228
|
-
? fieldOptions.options[trueOptionIndex]
|
|
229
|
-
: fieldOptions.options[falseOptionIndex];
|
|
230
|
-
return isTransformationNeeded(fieldValue, transformedValue_1);
|
|
231
|
-
}
|
|
232
|
-
var transformedValue = fieldOptions.options[0];
|
|
233
|
-
return isTransformationNeeded(fieldValue, transformedValue);
|
|
234
|
-
},
|
|
235
|
-
};
|
|
236
|
-
export var fieldTransformations = __assign(__assign(__assign(__assign(__assign(__assign({}, stringFieldTransformations), datesDateTimesAndTimesTransformations), urlTransformations), floatTransformations), integerTransformations), enumTransformations);
|
|
212
|
+
export var fieldTransformations = __assign(__assign(__assign(__assign(__assign({}, stringFieldTransformations), datesDateTimesAndTimesTransformations), urlTransformations), floatTransformations), integerTransformations);
|
|
@@ -1,8 +1,6 @@
|
|
|
1
|
-
import Fuse from "fuse.js";
|
|
2
1
|
import React from "react";
|
|
3
|
-
import { CustomAction, FormatRecord, ImporterOptions, Integration, OnSubmit, OnValidateRecord, Record, TemplateHeader } from "../../types";
|
|
2
|
+
import { ColumnMapping, CustomAction, FormatRecord, ImporterOptions, Integration, OnSubmit, OnValidateRecord, Record, TemplateHeader } from "../../types";
|
|
4
3
|
import { FuseApi } from "../common/FuseApi";
|
|
5
|
-
export declare const fusejsOptions: Fuse.IFuseOptions<string>;
|
|
6
4
|
export type HeaderMatchings = {
|
|
7
5
|
[templateHeaderLabel: string]: string;
|
|
8
6
|
};
|
|
@@ -46,6 +44,7 @@ export type State = {
|
|
|
46
44
|
setCurrentStepIndex: React.Dispatch<number>;
|
|
47
45
|
setEnumFieldValueMatchings: React.Dispatch<React.SetStateAction<EnumFieldValueMatchings>>;
|
|
48
46
|
setUploadedData: React.Dispatch<any[]>;
|
|
47
|
+
setHeadersMappings: React.Dispatch<any[]>;
|
|
49
48
|
setTemplateHeaderMatchings: React.Dispatch<React.SetStateAction<HeaderMatchings>>;
|
|
50
49
|
setPreviewFirstTime: React.Dispatch<boolean>;
|
|
51
50
|
formatRecord: FormatRecord;
|
|
@@ -56,6 +55,7 @@ export type State = {
|
|
|
56
55
|
isUsingManualImport: React.MutableRefObject<boolean>;
|
|
57
56
|
resetImporterWhenUsingManualImport: () => void;
|
|
58
57
|
manualDataImportSelected: () => void;
|
|
58
|
+
columnMappingsAttributes: ColumnMapping[];
|
|
59
59
|
customActions: CustomAction[];
|
|
60
60
|
};
|
|
61
61
|
export type Props = {
|
|
@@ -55,16 +55,11 @@ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
|
55
55
|
return to.concat(ar || Array.prototype.slice.call(from));
|
|
56
56
|
};
|
|
57
57
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
58
|
-
import Fuse from "fuse.js";
|
|
59
58
|
import { createContext, useContext, useEffect, useMemo, useRef, useState, } from "react";
|
|
60
59
|
import { FieldTypes, } from "../../types";
|
|
61
60
|
import { FuseApi } from "../common/FuseApi";
|
|
62
61
|
import { getCustomTheme, theme } from "../common/theme";
|
|
63
62
|
import { getColumnType, verifyDuplicateValue } from "../common/utils";
|
|
64
|
-
export var fusejsOptions = {
|
|
65
|
-
includeScore: true,
|
|
66
|
-
threshold: 0.35,
|
|
67
|
-
};
|
|
68
63
|
var ImporterContext = createContext({});
|
|
69
64
|
export var ImporterContextProvider = function (_a) {
|
|
70
65
|
var templateSlug = _a.templateSlug, initialRecords = _a.initialRecords, apiToken = _a.apiToken, children = _a.children, options = _a.options, onSubmit = _a.onSubmit, onClose = _a.onClose, formatRecord = _a.formatRecord, onValidateRecord = _a.onValidateRecord, dynamicColumns = _a.dynamicColumns, customActions = _a.customActions;
|
|
@@ -76,16 +71,18 @@ export var ImporterContextProvider = function (_a) {
|
|
|
76
71
|
var _g = useState(null), uploadedData = _g[0], setUploadedData = _g[1];
|
|
77
72
|
var _h = useState(null), organization = _h[0], setOrganization = _h[1];
|
|
78
73
|
var _j = useState(null), previewFirstTime = _j[0], setPreviewFirstTime = _j[1];
|
|
79
|
-
var _k = useState(
|
|
74
|
+
var _k = useState(null), columnMappingsAttributes = _k[0], setColumnMappingsAttributes = _k[1];
|
|
75
|
+
var _l = useState(null), headersMappings = _l[0], setHeadersMappings = _l[1];
|
|
76
|
+
var _m = useState({
|
|
80
77
|
theme: theme,
|
|
81
78
|
logoURL: null,
|
|
82
|
-
}), style =
|
|
83
|
-
var
|
|
84
|
-
var
|
|
85
|
-
var
|
|
86
|
-
var
|
|
79
|
+
}), style = _m[0], setStyle = _m[1];
|
|
80
|
+
var _o = useState(null), templateHeaderMatchings = _o[0], setTemplateHeaderMatchings = _o[1];
|
|
81
|
+
var _p = useState(null), enumFieldValueMatchings = _p[0], setEnumFieldValueMatchings = _p[1];
|
|
82
|
+
var _q = useState(null), uploadedDataEnumFieldValues = _q[0], setUploadedDataEnumFieldValues = _q[1];
|
|
83
|
+
var _r = useState([]), selectedRows = _r[0], setSelectedRows = _r[1];
|
|
87
84
|
var isUsingManualImport = useRef(false);
|
|
88
|
-
var
|
|
85
|
+
var _s = useState(0), headerRowIndex = _s[0], setHeaderRowIndex = _s[1];
|
|
89
86
|
var fuseApi = useMemo(function () { return new FuseApi(options.env, apiToken); }, [
|
|
90
87
|
options.env,
|
|
91
88
|
apiToken,
|
|
@@ -107,18 +104,29 @@ export var ImporterContextProvider = function (_a) {
|
|
|
107
104
|
useEffect(function () {
|
|
108
105
|
var setHeadersFromDataset = function () {
|
|
109
106
|
var _templateHeaderMatchings = {};
|
|
110
|
-
var fuse = new Fuse(uploadedDataHeaders, fusejsOptions);
|
|
111
107
|
templateHeaders.forEach(function (templateHeader, _index) {
|
|
112
|
-
var
|
|
113
|
-
|
|
114
|
-
|
|
108
|
+
var mappedHeader = headersMappings.find(function (headerMapping) {
|
|
109
|
+
var matchedColumn = Object.values(headerMapping)[0];
|
|
110
|
+
if (matchedColumn) {
|
|
111
|
+
return (matchedColumn.toLowerCase() === templateHeader.label.toLowerCase());
|
|
112
|
+
}
|
|
113
|
+
else {
|
|
114
|
+
return false;
|
|
115
|
+
}
|
|
116
|
+
});
|
|
117
|
+
if (mappedHeader) {
|
|
118
|
+
_templateHeaderMatchings[templateHeader.label] = Object.keys(mappedHeader)[0];
|
|
119
|
+
}
|
|
120
|
+
else {
|
|
121
|
+
_templateHeaderMatchings[templateHeader.label] = null;
|
|
122
|
+
}
|
|
115
123
|
});
|
|
116
124
|
setTemplateHeaderMatchings(_templateHeaderMatchings);
|
|
117
125
|
};
|
|
118
|
-
if (uploadedDataHeaders) {
|
|
126
|
+
if (uploadedDataHeaders && headersMappings) {
|
|
119
127
|
setHeadersFromDataset();
|
|
120
128
|
}
|
|
121
|
-
}, [uploadedDataHeaders]);
|
|
129
|
+
}, [uploadedDataHeaders, headersMappings]);
|
|
122
130
|
useEffect(function () {
|
|
123
131
|
if (!templateHeaderMatchings || !uploadedDataHeaders)
|
|
124
132
|
return;
|
|
@@ -145,7 +153,7 @@ export var ImporterContextProvider = function (_a) {
|
|
|
145
153
|
}, [templateHeaderMatchings, uploadedDataHeaders]);
|
|
146
154
|
useEffect(function () {
|
|
147
155
|
(function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
148
|
-
var _a, organization_1, columns_1, importer_style_preferences, integrations_1, preview_first_time, error_1, errorMsg;
|
|
156
|
+
var _a, organization_1, columns_1, importer_style_preferences, integrations_1, preview_first_time, column_mappings_attributes, error_1, errorMsg;
|
|
149
157
|
var _b, _c;
|
|
150
158
|
return __generator(this, function (_d) {
|
|
151
159
|
switch (_d.label) {
|
|
@@ -153,7 +161,7 @@ export var ImporterContextProvider = function (_a) {
|
|
|
153
161
|
_d.trys.push([0, 2, , 3]);
|
|
154
162
|
return [4 /*yield*/, fuseApi.get("/api/v1/importer/templates/".concat(templateSlug))];
|
|
155
163
|
case 1:
|
|
156
|
-
_a = (_d.sent()).data, organization_1 = _a.organization, columns_1 = _a.columns, importer_style_preferences = _a.importer_style_preferences, integrations_1 = _a.integrations, preview_first_time = _a.preview_first_time;
|
|
164
|
+
_a = (_d.sent()).data, organization_1 = _a.organization, columns_1 = _a.columns, importer_style_preferences = _a.importer_style_preferences, integrations_1 = _a.integrations, preview_first_time = _a.preview_first_time, column_mappings_attributes = _a.column_mappings_attributes;
|
|
157
165
|
setOrganization(organization_1);
|
|
158
166
|
setTemplateHeaders(function () {
|
|
159
167
|
// user has created dynamic columns
|
|
@@ -170,6 +178,7 @@ export var ImporterContextProvider = function (_a) {
|
|
|
170
178
|
});
|
|
171
179
|
setIntegrations(integrations_1);
|
|
172
180
|
setPreviewFirstTime(preview_first_time);
|
|
181
|
+
setColumnMappingsAttributes(column_mappings_attributes);
|
|
173
182
|
if (organization_1.plan && organization_1.plan.allow_style_customization) {
|
|
174
183
|
setStyle(getCustomTheme(importer_style_preferences));
|
|
175
184
|
}
|
|
@@ -222,10 +231,12 @@ export var ImporterContextProvider = function (_a) {
|
|
|
222
231
|
theme: style.theme,
|
|
223
232
|
logoURL: style.logoURL,
|
|
224
233
|
integrations: integrations,
|
|
234
|
+
columnMappingsAttributes: columnMappingsAttributes,
|
|
225
235
|
previewFirstTime: previewFirstTime,
|
|
226
236
|
headerRowIndex: headerRowIndex,
|
|
227
237
|
setHeaderRowIndex: setHeaderRowIndex,
|
|
228
238
|
setUploadedData: setUploadedData,
|
|
239
|
+
setHeadersMappings: setHeadersMappings,
|
|
229
240
|
formatRecord: formatRecord,
|
|
230
241
|
setCurrentStepIndex: setCurrentStepIndex,
|
|
231
242
|
setEnumFieldValueMatchings: setEnumFieldValueMatchings,
|
|
@@ -13,6 +13,42 @@ var __assign = (this && this.__assign) || function () {
|
|
|
13
13
|
};
|
|
14
14
|
return __assign.apply(this, arguments);
|
|
15
15
|
};
|
|
16
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
17
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
18
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
19
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
20
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
21
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
22
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
23
|
+
});
|
|
24
|
+
};
|
|
25
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
26
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
27
|
+
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
28
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
29
|
+
function step(op) {
|
|
30
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
31
|
+
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
32
|
+
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
33
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
34
|
+
switch (op[0]) {
|
|
35
|
+
case 0: case 1: t = op; break;
|
|
36
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
37
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
38
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
39
|
+
default:
|
|
40
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
41
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
42
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
43
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
44
|
+
if (t[2]) _.ops.pop();
|
|
45
|
+
_.trys.pop(); continue;
|
|
46
|
+
}
|
|
47
|
+
op = body.call(thisArg, _);
|
|
48
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
49
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
50
|
+
}
|
|
51
|
+
};
|
|
16
52
|
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
17
53
|
import { useMemo, useState } from "react";
|
|
18
54
|
import { ActionPlus } from "../icons";
|
|
@@ -34,39 +70,53 @@ export var CustomActions = function () {
|
|
|
34
70
|
var filteredOptions = useMemo(function () {
|
|
35
71
|
return customActions.map(function (action) { return action.name; });
|
|
36
72
|
}, [customActions]);
|
|
37
|
-
var handleCustomAction = function (actionKey) {
|
|
38
|
-
var recordsToRunAction
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
73
|
+
var handleCustomAction = function (actionKey) { return __awaiter(void 0, void 0, void 0, function () {
|
|
74
|
+
var recordsToRunAction, recordsAfterActions, action, i, currentRecord, newRecord, error_1;
|
|
75
|
+
return __generator(this, function (_a) {
|
|
76
|
+
switch (_a.label) {
|
|
77
|
+
case 0:
|
|
78
|
+
recordsToRunAction = data.filter(function (row) { var _a; return selectedRows.includes((_a = row === null || row === void 0 ? void 0 : row._meta) === null || _a === void 0 ? void 0 : _a.id); });
|
|
79
|
+
recordsAfterActions = [];
|
|
80
|
+
action = customActions.find(function (action) { return action.name === actionKey; });
|
|
81
|
+
if (!action || Object.keys(action).length === 0) {
|
|
82
|
+
addToast(t("table_actions.custom_actions.general_error_toast"), "error");
|
|
83
|
+
return [2 /*return*/];
|
|
84
|
+
}
|
|
85
|
+
i = 0;
|
|
86
|
+
_a.label = 1;
|
|
87
|
+
case 1:
|
|
88
|
+
if (!(i < recordsToRunAction.length)) return [3 /*break*/, 7];
|
|
89
|
+
currentRecord = recordsToRunAction[i];
|
|
90
|
+
_a.label = 2;
|
|
91
|
+
case 2:
|
|
92
|
+
_a.trys.push([2, 5, , 6]);
|
|
93
|
+
if (!(action.actionType === "record")) return [3 /*break*/, 4];
|
|
94
|
+
return [4 /*yield*/, action.handler(currentRecord)];
|
|
95
|
+
case 3:
|
|
96
|
+
newRecord = _a.sent();
|
|
52
97
|
recordsAfterActions.push(newRecord);
|
|
53
|
-
|
|
54
|
-
|
|
98
|
+
return [3 /*break*/, 6];
|
|
99
|
+
case 4: return [3 /*break*/, 6];
|
|
100
|
+
case 5:
|
|
101
|
+
error_1 = _a.sent();
|
|
102
|
+
addToast(t("table_actions.custom_actions.error_toast", {
|
|
103
|
+
actionName: action.name,
|
|
104
|
+
}), "error");
|
|
105
|
+
return [3 /*break*/, 7];
|
|
106
|
+
case 6:
|
|
107
|
+
i++;
|
|
108
|
+
return [3 /*break*/, 1];
|
|
109
|
+
case 7:
|
|
110
|
+
if (recordsAfterActions.length) {
|
|
111
|
+
addToast(t("table_actions.custom_actions.success_toast", {
|
|
112
|
+
actionName: action.name,
|
|
113
|
+
}), "success");
|
|
114
|
+
}
|
|
115
|
+
updateRecord(recordsAfterActions);
|
|
116
|
+
return [2 /*return*/];
|
|
55
117
|
}
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
actionName: action.name,
|
|
59
|
-
}), "error");
|
|
60
|
-
break;
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
if (recordsAfterActions.length) {
|
|
64
|
-
addToast(t("table_actions.custom_actions.success_toast", {
|
|
65
|
-
actionName: action.name,
|
|
66
|
-
}), "success");
|
|
67
|
-
}
|
|
68
|
-
updateRecord(recordsAfterActions);
|
|
69
|
-
};
|
|
118
|
+
});
|
|
119
|
+
}); };
|
|
70
120
|
var onSelect = function (value) {
|
|
71
121
|
setIsMenuOpen(false);
|
|
72
122
|
handleCustomAction(value);
|
|
@@ -23,11 +23,12 @@ import { DeleteIcon, ConfirmationDeleteIcon } from "./icons";
|
|
|
23
23
|
import { Div } from "../../../styled/utils";
|
|
24
24
|
import { ActionButton } from "./TableActions.styles";
|
|
25
25
|
import { useTranslation } from "react-i18next";
|
|
26
|
+
import { addToast } from "../../../common/Toast";
|
|
26
27
|
var StyledTooltipProvider = styled(TooltipProvider)(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n width: fit-content;\n"], ["\n width: fit-content;\n"])));
|
|
27
28
|
export var DeleteSelectedRows = function (_a) {
|
|
28
29
|
var _b = _a.testId, testId = _b === void 0 ? "ta-delete-rows" : _b;
|
|
29
30
|
var _c = useState(false), isConfirmationModalOpen = _c[0], setIsConfirmationModalOpen = _c[1];
|
|
30
|
-
var _d = useSpreadsheetContext(), deleteRecords = _d.deleteRecords, selectedRows = _d.selectedRows, setSelectedRows = _d.setSelectedRows, setFilteredInputValue = _d.setFilteredInputValue;
|
|
31
|
+
var _d = useSpreadsheetContext(), deleteRecords = _d.deleteRecords, selectedRows = _d.selectedRows, setSelectedRows = _d.setSelectedRows, setFilteredInputValue = _d.setFilteredInputValue, spreadsheetFilter = _d.spreadsheetFilter, duplicateRecords = _d.duplicateRecords, resetSpreadsheetFilter = _d.resetSpreadsheetFilter;
|
|
31
32
|
var t = useTranslation("review").t;
|
|
32
33
|
var toggleModalVisibility = function () {
|
|
33
34
|
setIsConfirmationModalOpen(function (oldValue) { return !oldValue; });
|
|
@@ -37,6 +38,13 @@ export var DeleteSelectedRows = function (_a) {
|
|
|
37
38
|
toggleModalVisibility();
|
|
38
39
|
setFilteredInputValue("");
|
|
39
40
|
deleteRecords(selectedRows);
|
|
41
|
+
if (spreadsheetFilter.byRow === "duplicates") {
|
|
42
|
+
var selectedDuplicatesCount = Object.keys(duplicateRecords.records).filter(function (key) { return selectedRows.includes(key); }).length;
|
|
43
|
+
addToast(t("table_actions.filters_by_rows.duplicates_deleted", {
|
|
44
|
+
count: selectedDuplicatesCount,
|
|
45
|
+
}), "success");
|
|
46
|
+
resetSpreadsheetFilter();
|
|
47
|
+
}
|
|
40
48
|
};
|
|
41
49
|
var DescriptionUI = function () { return (_jsx(_Fragment, { children: _jsxs(Div, { children: [t("table_actions.delete_rows.confirmation_modal", {
|
|
42
50
|
length: selectedRows.length,
|
|
@@ -21,8 +21,12 @@ import { useTranslation } from "react-i18next";
|
|
|
21
21
|
var FilterContainer = styled(Div)(templateObject_2 || (templateObject_2 = __makeTemplateObject(["\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n padding: 6px 12px;\n display: flex;\n align-items: center;\n justify-content: center;\n ", ";\n ", "\n"], ["\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n padding: 6px 12px;\n display: flex;\n align-items: center;\n justify-content: center;\n ", ";\n ", "\n"])), function (p) { return p.theme.css.body3; }, function (p) {
|
|
22
22
|
return p.isSelected && css(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n background: ", ";\n color: ", ";\n border-radius: 4px;\n "], ["\n background: ", ";\n color: ", ";\n border-radius: 4px;\n "])), function (p) { return p.theme.colors.black; }, function (p) { return p.theme.colors.white; });
|
|
23
23
|
});
|
|
24
|
-
var Container = styled(Div)(templateObject_3 || (templateObject_3 = __makeTemplateObject(["\n
|
|
25
|
-
var
|
|
24
|
+
var Container = styled(Div)(templateObject_3 || (templateObject_3 = __makeTemplateObject(["\n background-color: ", ";\n border-radius: 4px;\n display: flex;\n"], ["\n background-color: ", ";\n border-radius: 4px;\n display: flex;\n"])), function (p) { return p.theme.colors.backgroundInterface; });
|
|
25
|
+
var Wrapper = styled(Div)(templateObject_5 || (templateObject_5 = __makeTemplateObject(["\n ", "\n"], ["\n ", "\n"])), function (_a) {
|
|
26
|
+
var isDisabled = _a.isDisabled;
|
|
27
|
+
return isDisabled && css(templateObject_4 || (templateObject_4 = __makeTemplateObject(["\n cursor: not-allowed;\n\n > div:first-child {\n opacity: 0.7;\n pointer-events: none;\n }\n "], ["\n cursor: not-allowed;\n\n > div:first-child {\n opacity: 0.7;\n pointer-events: none;\n }\n "])));
|
|
28
|
+
});
|
|
29
|
+
var FilteredDataCount = styled(Div)(templateObject_6 || (templateObject_6 = __makeTemplateObject(["\n background: ", ";\n color: ", ";\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 6px 8px;\n margin-left: -3px;\n border-top-right-radius: 4px;\n border-bottom-right-radius: 4px;\n"], ["\n background: ", ";\n color: ", ";\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 6px 8px;\n margin-left: -3px;\n border-top-right-radius: 4px;\n border-bottom-right-radius: 4px;\n"])), function (p) { return p.theme.colors.highlight01; }, function (p) { return p.theme.colors.black; });
|
|
26
30
|
var Filter = function (_a) {
|
|
27
31
|
var label = _a.label, count = _a.count, isSelected = _a.isSelected, onClick = _a.onClick, isDisabled = _a.isDisabled;
|
|
28
32
|
var _b = useSpreadsheetContext(), filteredInputValue = _b.filteredInputValue, filteredDataCount = _b.filteredDataCount;
|
|
@@ -32,11 +36,11 @@ var Filter = function (_a) {
|
|
|
32
36
|
return (_jsxs(Div, __assign({ disabledWhen: isDisabled, dflex: true, clickable: true, onClick: function () { return !isDisabled && onClick(); }, "data-test-id": labelToId(label) }, { children: [_jsxs(FilterContainer, __assign({ isSelected: isSelected }, { children: [label, count >= 0 && _jsxs(_Fragment, { children: ["\u00A0(", count, ")"] })] })), isSelected && filteredInputValue !== "" && (_jsx(FilteredDataCount, { children: _jsx(Div, __assign({ minw: 14, centered: true }, { children: filteredDataCount })) }))] })));
|
|
33
37
|
};
|
|
34
38
|
export var RowFilters = function () {
|
|
35
|
-
var _a = useSpreadsheetContext(), spreadsheetFilter = _a.spreadsheetFilter, errors = _a.errors, filterRecordsByRowType = _a.filterRecordsByRowType, recordsWithValuesCount = _a.recordsWithValuesCount, isTransformTooltipOpened = _a.isTransformTooltipOpened;
|
|
39
|
+
var _a = useSpreadsheetContext(), spreadsheetFilter = _a.spreadsheetFilter, errors = _a.errors, filterRecordsByRowType = _a.filterRecordsByRowType, recordsWithValuesCount = _a.recordsWithValuesCount, isTransformTooltipOpened = _a.isTransformTooltipOpened, duplicateRecords = _a.duplicateRecords;
|
|
36
40
|
var t = useTranslation("review").t;
|
|
37
41
|
var all_rows = t("table_actions.filters_by_rows.all_rows");
|
|
38
|
-
var valid_rows = t("table_actions.filters_by_rows.valid_rows");
|
|
39
42
|
var invalid_rows = t("table_actions.filters_by_rows.invalid_rows");
|
|
40
|
-
|
|
43
|
+
var duplicates = t("table_actions.filters_by_rows.duplicates");
|
|
44
|
+
return (_jsx(Wrapper, __assign({ isDisabled: isTransformTooltipOpened }, { children: _jsxs(Container, { children: [_jsx(Filter, { isSelected: spreadsheetFilter.byRow === "all", label: all_rows, count: recordsWithValuesCount, onClick: function () { return filterRecordsByRowType("all"); } }), _jsx(Filter, { isSelected: spreadsheetFilter.byRow === "invalid", label: invalid_rows, count: Object.values(errors).length, onClick: function () { return filterRecordsByRowType("invalid"); } }), _jsx(Filter, { isSelected: spreadsheetFilter.byRow === "duplicates", label: duplicates, count: duplicateRecords.count, onClick: function () { return filterRecordsByRowType("duplicates"); } })] }) })));
|
|
41
45
|
};
|
|
42
|
-
var templateObject_1, templateObject_2, templateObject_3, templateObject_4;
|
|
46
|
+
var templateObject_1, templateObject_2, templateObject_3, templateObject_4, templateObject_5, templateObject_6;
|
|
@@ -67,18 +67,10 @@ var integerTransformations = [
|
|
|
67
67
|
label: "Ceiling (e.g. 3.01 -> 4)",
|
|
68
68
|
},
|
|
69
69
|
];
|
|
70
|
-
var enumTransformations = [
|
|
71
|
-
{
|
|
72
|
-
value: "autodetect",
|
|
73
|
-
label: "Autodetect (e.g. 0/1 -> true/false)",
|
|
74
|
-
isDefaultTransformation: true,
|
|
75
|
-
},
|
|
76
|
-
];
|
|
77
70
|
export var transformationsByColumnType = {
|
|
78
71
|
string: stringTransformations,
|
|
79
72
|
integer: integerTransformations,
|
|
80
73
|
float: floatTransformations,
|
|
81
|
-
enum: enumTransformations,
|
|
82
74
|
url: urlTransformations,
|
|
83
75
|
date: commonDateAndTimeTransformations,
|
|
84
76
|
datetime: commonDateAndTimeTransformations,
|