fuse-importer 0.0.9-testing → 0.1.1-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/Review/ReviewContextProvider.js +8 -5
- package/lib/esm/Importer/common/Spreadsheet/common/index.js +1 -1
- package/lib/esm/Importer/common/Spreadsheet/components/fields/SpreadsheetInput.js +16 -12
- package/lib/esm/Importer/common/Spreadsheet/components/fields/index.d.ts +2 -1
- package/lib/esm/Importer/common/Spreadsheet/components/fields/index.js +18 -12
- package/lib/esm/Importer/common/Spreadsheet/components/fields/utils.d.ts +11 -0
- package/lib/esm/Importer/common/Spreadsheet/components/fields/utils.js +29 -0
- package/lib/esm/Importer/common/Spreadsheet/transformation/transformators.js +39 -7
- package/lib/esm/Importer/data/index.js +22 -2
- package/lib/esm/common/Table/TableActions/TransformedRecordsCount.js +15 -3
- package/lib/esm/common/columnsValidations.d.ts +0 -26
- package/lib/esm/common/columnsValidations.js +1 -287
- package/lib/esm/common/datePatterns.d.ts +26 -0
- package/lib/esm/common/datePatterns.js +327 -0
- package/lib/esm/common/index.d.ts +1 -0
- package/lib/esm/common/index.js +1 -0
- package/lib/esm/common/inputs/SelectMenu.js +7 -0
- package/lib/esm/locales/de.js +1 -1
- package/lib/esm/locales/en.js +1 -1
- package/lib/esm/locales/es.js +1 -1
- package/lib/esm/locales/fr.js +1 -1
- package/lib/esm/types.d.ts +5 -4
- package/lib/esm/utils/index.d.ts +1 -0
- package/lib/esm/utils/index.js +4 -0
- package/lib/main.js +6 -6
- package/package.json +1 -1
|
@@ -201,6 +201,7 @@ export var ReviewContextProvider = function (_a) {
|
|
|
201
201
|
}
|
|
202
202
|
invalidDataSet = recordListToDataSet(invalidRecords_1, reviewFields);
|
|
203
203
|
setReviewInitialDataSet(invalidDataSet);
|
|
204
|
+
setInitialDataSetUpdatedAt(Date.now());
|
|
204
205
|
if (!!previewMode) return [3 /*break*/, 4];
|
|
205
206
|
return [4 /*yield*/, trackImportedRowsCount(fuseApi, templateSlug, validDataSetLength)];
|
|
206
207
|
case 2:
|
|
@@ -253,7 +254,7 @@ export var ReviewContextProvider = function (_a) {
|
|
|
253
254
|
else if (currentStepIndex === 2) {
|
|
254
255
|
setIsLoadingApp(true);
|
|
255
256
|
(function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
256
|
-
var fields,
|
|
257
|
+
var generateRecords, fields, records, initialDataSet;
|
|
257
258
|
return __generator(this, function (_a) {
|
|
258
259
|
switch (_a.label) {
|
|
259
260
|
case 0:
|
|
@@ -265,9 +266,8 @@ export var ReviewContextProvider = function (_a) {
|
|
|
265
266
|
_a.sent();
|
|
266
267
|
_a.label = 2;
|
|
267
268
|
case 2:
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
transformToRecords({
|
|
269
|
+
generateRecords = function () {
|
|
270
|
+
return transformToRecords({
|
|
271
271
|
templateHeaderMatchings: templateHeaderMatchings,
|
|
272
272
|
enumFieldValueMatchings: enumFieldValueMatchings,
|
|
273
273
|
templateHeaders: templateHeaders,
|
|
@@ -275,8 +275,11 @@ export var ReviewContextProvider = function (_a) {
|
|
|
275
275
|
uploadedData: uploadedData.slice(headerRowIndex + 1),
|
|
276
276
|
formatRecord: formatRecord,
|
|
277
277
|
});
|
|
278
|
+
};
|
|
279
|
+
fields = getTemplateFields({ templateHeaders: templateHeaders });
|
|
280
|
+
records = initialRecords !== null && initialRecords !== void 0 ? initialRecords : generateRecords();
|
|
278
281
|
initialDataSet = getReviewDataSet({
|
|
279
|
-
records:
|
|
282
|
+
records: records,
|
|
280
283
|
fields: fields,
|
|
281
284
|
}).initialDataSet;
|
|
282
285
|
setSelectedRows([]);
|
|
@@ -15,7 +15,7 @@ export var isEmail = function (value) {
|
|
|
15
15
|
return emailRegex.test(value);
|
|
16
16
|
};
|
|
17
17
|
export var isUrl = function (value) {
|
|
18
|
-
var urlRegex = /^(
|
|
18
|
+
var urlRegex = /^(?:(?:https?|ftp|file|tcp|mailto|tel|data|ssh|irc|gopher|ws|wss):\/\/|www\.)[A-Za-z0-9]+([\-\.]{1}[A-Za-z0-9]+)*\.[A-Za-z]{2,16}(:[0-9]{1,5})?(\/.*)?$/g;
|
|
19
19
|
return urlRegex.test(value);
|
|
20
20
|
};
|
|
21
21
|
export var isTrue = function (value) {
|
|
@@ -30,38 +30,42 @@ import styled, { css } from "styled-components";
|
|
|
30
30
|
import { SpreadsheetField, useSpreadsheetField } from ".";
|
|
31
31
|
import { Div } from "../../../../../styled/utils";
|
|
32
32
|
import { useSpreadsheetContext } from "../../SpreadsheetContextProvider";
|
|
33
|
+
import { AVERAGE_CHAR_SIZE, getFieldContentWidth } from "./utils";
|
|
33
34
|
export var SpreadsheetInput = function (_a) {
|
|
34
35
|
var _b, _c, _d, _e, _f, _g;
|
|
35
36
|
var name = _a.name, record = _a.record, fieldType = _a.fieldType, columnWidth = _a.columnWidth, props = __rest(_a, ["name", "record", "fieldType", "columnWidth"]);
|
|
36
37
|
var _h = useSpreadsheetField(name, record, fieldType), value = _h.value, setValue = _h.setValue, validationError = _h.validationError, validationWarning = _h.validationWarning;
|
|
37
38
|
var isTransformTooltipOpened = useSpreadsheetContext().isTransformTooltipOpened;
|
|
39
|
+
var defaultWidthAsNumber = Number.parseInt(columnWidth.replace("px", ""));
|
|
40
|
+
var _fieldContentWidth = getFieldContentWidth({
|
|
41
|
+
record: record,
|
|
42
|
+
fieldType: fieldType,
|
|
43
|
+
isTooltipOpened: isTransformTooltipOpened,
|
|
44
|
+
name: name,
|
|
45
|
+
});
|
|
38
46
|
var isHighlighted = isTransformTooltipOpened &&
|
|
39
47
|
((_d = (_c = (_b = record._meta) === null || _b === void 0 ? void 0 : _b.transformedRow) === null || _c === void 0 ? void 0 : _c[name]) === null || _d === void 0 ? void 0 : _d.transformed);
|
|
40
48
|
var expandedFieldWidth = useMemo(function () {
|
|
41
|
-
var _a, _b, _c, _d;
|
|
42
49
|
// if the value is falsy, returns the default width
|
|
43
50
|
if (!value)
|
|
44
51
|
return columnWidth;
|
|
45
|
-
var averageCharacterSize = 9;
|
|
46
52
|
var inputPadding = 24; // 12 left + 12 right
|
|
47
|
-
var transformedValueSize = value.length *
|
|
48
|
-
var
|
|
49
|
-
? ((_d = (_c = (_b = (_a = record._meta) === null || _a === void 0 ? void 0 : _a.transformedRow) === null || _b === void 0 ? void 0 : _b[name]) === null || _c === void 0 ? void 0 : _c.original) === null || _d === void 0 ? void 0 : _d.length) *
|
|
50
|
-
averageCharacterSize
|
|
51
|
-
: 0 || 0;
|
|
52
|
-
var totalInputSize = transformedValueSize + originalValueSize + inputPadding + 50;
|
|
53
|
-
var defaultWidthAsNumber = Number.parseInt(columnWidth.replace("px", ""));
|
|
53
|
+
var transformedValueSize = value.length * AVERAGE_CHAR_SIZE;
|
|
54
|
+
var totalInputSize = transformedValueSize + _fieldContentWidth + inputPadding;
|
|
54
55
|
return totalInputSize > defaultWidthAsNumber
|
|
55
56
|
? "".concat(totalInputSize, "px")
|
|
56
57
|
: "".concat(defaultWidthAsNumber, "px");
|
|
57
58
|
}, [value, record, columnWidth]);
|
|
58
|
-
return (_jsxs(SpreadsheetField, __assign({ validationError: validationError, validationWarning: validationWarning, isHighlighted: isHighlighted, 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({ hasError: !!validationError, hasWarning: !!validationWarning, value: value || "", onChange: function (_a) {
|
|
59
60
|
var value = _a.target.value;
|
|
60
61
|
return !isTransformTooltipOpened && setValue(value);
|
|
61
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) &&
|
|
62
|
-
isTransformTooltipOpened && (_jsx(SuffixText, __assign({ className: "suffix" }, { children: record._meta.transformedRow[name].original })))] })));
|
|
63
|
+
isTransformTooltipOpened && (_jsx(SuffixText, __assign({ className: "suffix", fieldWidth: _fieldContentWidth }, { children: record._meta.transformedRow[name].original })))] })));
|
|
63
64
|
};
|
|
64
|
-
var SuffixText = styled(Div)(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n color: #1c1c1c;\n font-family: DM Sans;\n font-size: 16px;\n font-style: normal;\n font-weight: 400;\n position: absolute;\n
|
|
65
|
+
var SuffixText = styled(Div)(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n color: #1c1c1c;\n font-family: DM Sans;\n font-size: 16px;\n font-style: normal;\n font-weight: 400;\n position: absolute;\n left: ", "px;\n text-decoration: line-through;\n white-space: nowrap;\n"], ["\n color: #1c1c1c;\n font-family: DM Sans;\n font-size: 16px;\n font-style: normal;\n font-weight: 400;\n position: absolute;\n left: ", "px;\n text-decoration: line-through;\n white-space: nowrap;\n"])), function (_a) {
|
|
66
|
+
var fieldWidth = _a.fieldWidth;
|
|
67
|
+
return fieldWidth;
|
|
68
|
+
});
|
|
65
69
|
export var Input = styled.input(templateObject_4 || (templateObject_4 = __makeTemplateObject(["\n background: transparent;\n border: none;\n box-shadow: none;\n box-sizing: border-box;\n height: calc(100% - 2px);\n margin: 0px;\n outline: none;\n width: 100%;\n\n ::-webkit-outer-spin-button,\n ::-webkit-inner-spin-button {\n -webkit-appearance: none;\n margin: 0;\n }\n /* Firefox */\n -moz-appearance: textfield;\n\n padding: 0 12px;\n ", ";\n color: ", ";\n ::placeholder {\n color: ", ";\n }\n\n ", "\n\n ", "\n"], ["\n background: transparent;\n border: none;\n box-shadow: none;\n box-sizing: border-box;\n height: calc(100% - 2px);\n margin: 0px;\n outline: none;\n width: 100%;\n\n ::-webkit-outer-spin-button,\n ::-webkit-inner-spin-button {\n -webkit-appearance: none;\n margin: 0;\n }\n /* Firefox */\n -moz-appearance: textfield;\n\n padding: 0 12px;\n ", ";\n color: ", ";\n ::placeholder {\n color: ", ";\n }\n\n ", "\n\n ", "\n"])), function (props) { return props.theme.css.body1; }, function (props) { return props.theme.colors.gray1000; }, function (props) { return props.theme.colors.placeholder; }, function (p) {
|
|
66
70
|
return p.hasWarning && css(templateObject_2 || (templateObject_2 = __makeTemplateObject(["\n color: ", ";\n "], ["\n color: ", ";\n "])), function (p) { return p.theme.colors.orange1200; });
|
|
67
71
|
}, function (p) {
|
|
@@ -13,6 +13,7 @@ type SpreadsheetFieldProps = {
|
|
|
13
13
|
isHighlighted?: boolean;
|
|
14
14
|
expandedFieldWidth?: string;
|
|
15
15
|
shouldExpandInput?: boolean;
|
|
16
|
+
defaultFieldWidth?: number;
|
|
16
17
|
};
|
|
17
|
-
export declare const SpreadsheetField: ({ validationError, validationWarning, children, isHighlighted, expandedFieldWidth, shouldExpandInput, }: SpreadsheetFieldProps) => JSX.Element;
|
|
18
|
+
export declare const SpreadsheetField: ({ validationError, validationWarning, children, isHighlighted, expandedFieldWidth, shouldExpandInput, defaultFieldWidth, }: SpreadsheetFieldProps) => JSX.Element;
|
|
18
19
|
export {};
|
|
@@ -82,27 +82,33 @@ export var useSpreadsheetField = function (name, record, fieldType) {
|
|
|
82
82
|
validationWarning: validationWarning,
|
|
83
83
|
};
|
|
84
84
|
};
|
|
85
|
-
var ContentContainer = styled(Div)(
|
|
86
|
-
var
|
|
87
|
-
return
|
|
85
|
+
var ContentContainer = styled(Div)(templateObject_7 || (templateObject_7 = __makeTemplateObject(["\n height: calc(100% - 1px);\n width: ", ";\n overflow: hidden;\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 ", ";\n ", "\n ", "\n ", "\n ", "\n"])), function (_a) {
|
|
86
|
+
var defaultFieldWidth = _a.defaultFieldWidth;
|
|
87
|
+
return defaultFieldWidth ? "".concat(defaultFieldWidth, "px") : "100%";
|
|
88
|
+
}, function (_a) {
|
|
89
|
+
var expandedFieldWidth = _a.expandedFieldWidth;
|
|
90
|
+
return expandedFieldWidth && css(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n position: absolute;\n "], ["\n position: absolute;\n "])));
|
|
91
|
+
}, function (_a) {
|
|
92
|
+
var expandedFieldWidth = _a.expandedFieldWidth, isHighlighted = _a.isHighlighted, theme = _a.theme, shouldExpandInput = _a.shouldExpandInput;
|
|
93
|
+
return shouldExpandInput && css(templateObject_2 || (templateObject_2 = __makeTemplateObject(["\n background: ", ";\n box-shadow: 0px 0px 0px 2px ", " inset;\n width: ", ";\n z-index: 1;\n\n .suffix {\n right: 12px;\n }\n "], ["\n background: ", ";\n box-shadow: 0px 0px 0px 2px ", " inset;\n width: ", ";\n z-index: 1;\n\n .suffix {\n right: 12px;\n }\n "])), !isHighlighted
|
|
88
94
|
? theme.colors.white
|
|
89
|
-
: theme.colors.blue100);
|
|
95
|
+
: theme.colors.blue100, function (p) { return p.theme.colors.blue500; }, expandedFieldWidth || "auto");
|
|
90
96
|
}, function (p) { return p.theme.css.alignCenter; }, function (p) {
|
|
91
|
-
return p.isHighlighted && css(
|
|
97
|
+
return p.isHighlighted && css(templateObject_3 || (templateObject_3 = __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; });
|
|
92
98
|
}, function (p) {
|
|
93
|
-
return p.hasWarning && css(
|
|
99
|
+
return p.hasWarning && css(templateObject_4 || (templateObject_4 = __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; });
|
|
94
100
|
}, function (p) {
|
|
95
|
-
return p.hasError && css(
|
|
101
|
+
return p.hasError && 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.error; }, function (p) { return p.theme.colors.red100; }, function (p) { return p.theme.colors.error; });
|
|
96
102
|
}, function (p) {
|
|
97
|
-
return p.isReadOnly && css(
|
|
103
|
+
return p.isReadOnly && css(templateObject_6 || (templateObject_6 = __makeTemplateObject(["\n pointer-events: none;\n "], ["\n pointer-events: none;\n "])));
|
|
98
104
|
});
|
|
99
105
|
var Wrapper = styled(Div)(function (_a) {
|
|
100
106
|
var isLoading = _a.isLoading;
|
|
101
|
-
return css(
|
|
107
|
+
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 "]))));
|
|
102
108
|
});
|
|
103
109
|
export var SpreadsheetField = function (_a) {
|
|
104
|
-
var validationError = _a.validationError, validationWarning = _a.validationWarning, children = _a.children, isHighlighted = _a.isHighlighted, expandedFieldWidth = _a.expandedFieldWidth, shouldExpandInput = _a.shouldExpandInput;
|
|
110
|
+
var validationError = _a.validationError, validationWarning = _a.validationWarning, children = _a.children, isHighlighted = _a.isHighlighted, expandedFieldWidth = _a.expandedFieldWidth, shouldExpandInput = _a.shouldExpandInput, defaultFieldWidth = _a.defaultFieldWidth;
|
|
105
111
|
var _b = useSpreadsheetContext(), isReadOnly = _b.isReadOnly, isLoading = _b.isLoading;
|
|
106
|
-
return (_jsx(Wrapper, __assign({ dim: "100%", isLoading: isLoading }, { 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, shouldExpandInput: shouldExpandInput, isReadOnly: isReadOnly, className: "input-content" }, { children: children })) })) })) })));
|
|
112
|
+
return (_jsx(Wrapper, __assign({ dim: "100%", isLoading: isLoading }, { 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 })) })) })) })));
|
|
107
113
|
};
|
|
108
|
-
var templateObject_1, templateObject_2, templateObject_3, templateObject_4, templateObject_5, templateObject_6, templateObject_7, templateObject_8;
|
|
114
|
+
var templateObject_1, templateObject_2, templateObject_3, templateObject_4, templateObject_5, templateObject_6, templateObject_7, templateObject_8, templateObject_9;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { FieldTypes, Record } from "../../../../../types";
|
|
2
|
+
export declare const AVERAGE_CHAR_SIZE = 11;
|
|
3
|
+
interface FieldProps {
|
|
4
|
+
record: Record;
|
|
5
|
+
name: string;
|
|
6
|
+
fieldType: FieldTypes;
|
|
7
|
+
isTooltipOpened: boolean;
|
|
8
|
+
avgCharSize?: number;
|
|
9
|
+
}
|
|
10
|
+
export declare const getFieldContentWidth: ({ record, fieldType, isTooltipOpened, name, avgCharSize, }: FieldProps) => number;
|
|
11
|
+
export {};
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { FieldTypes } from "../../../../../types";
|
|
2
|
+
export var AVERAGE_CHAR_SIZE = 11;
|
|
3
|
+
var isFullUppercase = /^[A-Z]*$/;
|
|
4
|
+
export var getFieldContentWidth = function (_a) {
|
|
5
|
+
var _b, _c, _d, _e;
|
|
6
|
+
var record = _a.record, fieldType = _a.fieldType, isTooltipOpened = _a.isTooltipOpened, name = _a.name, _f = _a.avgCharSize, avgCharSize = _f === void 0 ? AVERAGE_CHAR_SIZE : _f;
|
|
7
|
+
var additionalWidth = 5;
|
|
8
|
+
if (fieldType === FieldTypes.url) {
|
|
9
|
+
// assuming 90px as an average size of the url prefix
|
|
10
|
+
// 'https://' have around 50px, but assuming more to prevent some issues
|
|
11
|
+
additionalWidth += 90;
|
|
12
|
+
}
|
|
13
|
+
var transformedRow = (_c = (_b = record._meta) === null || _b === void 0 ? void 0 : _b.transformedRow) === null || _c === void 0 ? void 0 : _c[name];
|
|
14
|
+
var transformedLength = (_d = String(transformedRow === null || transformedRow === void 0 ? void 0 : transformedRow.transformed)) === null || _d === void 0 ? void 0 : _d.length;
|
|
15
|
+
var originalLength = (_e = String(transformedRow === null || transformedRow === void 0 ? void 0 : transformedRow.original)) === null || _e === void 0 ? void 0 : _e.length;
|
|
16
|
+
var transformedHasHigherLength = transformedLength >= originalLength;
|
|
17
|
+
var transformedIsUppercase = isFullUppercase.test(transformedRow === null || transformedRow === void 0 ? void 0 : transformedRow.transformed);
|
|
18
|
+
var originalIsUppercase = isFullUppercase.test(transformedRow === null || transformedRow === void 0 ? void 0 : transformedRow.original);
|
|
19
|
+
if (transformedHasHigherLength) {
|
|
20
|
+
additionalWidth += transformedIsUppercase ? transformedLength : 0;
|
|
21
|
+
}
|
|
22
|
+
else {
|
|
23
|
+
additionalWidth += originalIsUppercase ? originalLength : 0;
|
|
24
|
+
}
|
|
25
|
+
return isTooltipOpened
|
|
26
|
+
? Math.max(transformedLength, originalLength) * avgCharSize +
|
|
27
|
+
additionalWidth
|
|
28
|
+
: 0 || 0;
|
|
29
|
+
};
|
|
@@ -9,7 +9,17 @@ var __assign = (this && this.__assign) || function () {
|
|
|
9
9
|
};
|
|
10
10
|
return __assign.apply(this, arguments);
|
|
11
11
|
};
|
|
12
|
+
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
13
|
+
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
|
|
14
|
+
if (ar || !(i in from)) {
|
|
15
|
+
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
|
|
16
|
+
ar[i] = from[i];
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
return to.concat(ar || Array.prototype.slice.call(from));
|
|
20
|
+
};
|
|
12
21
|
import { DateTime } from "luxon";
|
|
22
|
+
import { datePatterns, dateTimePatterns, timePatterns, } from "../../../../common/datePatterns";
|
|
13
23
|
var isTransformationNeeded = function (fieldValue, transformedValue) { return ({
|
|
14
24
|
transformationWasNeeded: fieldValue !== transformedValue,
|
|
15
25
|
original: fieldValue,
|
|
@@ -79,29 +89,51 @@ var stringFieldTransformations = {
|
|
|
79
89
|
return isTransformationNeeded(fieldValue, transformedValue);
|
|
80
90
|
},
|
|
81
91
|
};
|
|
92
|
+
var parseDate = function (date) {
|
|
93
|
+
if (!date)
|
|
94
|
+
return null;
|
|
95
|
+
var allPatterns = __spreadArray(__spreadArray(__spreadArray([], datePatterns, true), dateTimePatterns, true), timePatterns, true);
|
|
96
|
+
var possibleFormats = allPatterns.map(function (date) { return date.value; });
|
|
97
|
+
for (var i = 0; i < possibleFormats.length; i++) {
|
|
98
|
+
var format = possibleFormats[i];
|
|
99
|
+
try {
|
|
100
|
+
var currentDate = DateTime.fromFormat(date, format, { zone: "utc" });
|
|
101
|
+
if (currentDate.isValid) {
|
|
102
|
+
return currentDate;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
catch (error) {
|
|
106
|
+
return null;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
return null;
|
|
110
|
+
};
|
|
82
111
|
var datesDateTimesAndTimesTransformations = {
|
|
83
112
|
autoformat: function (fieldValue, _, fieldOptions) {
|
|
84
113
|
var cleanFieldValue = fieldValue === null || fieldValue === void 0 ? void 0 : fieldValue.replace(/"/g, "");
|
|
85
114
|
var normalizedFieldValue = cleanFieldValue === null || cleanFieldValue === void 0 ? void 0 : cleanFieldValue.replace(/-/g, "/");
|
|
86
115
|
var isUnixTimestamp = /^\d+$/.test(normalizedFieldValue);
|
|
87
|
-
var
|
|
88
|
-
?
|
|
89
|
-
:
|
|
116
|
+
var luxonDate = isUnixTimestamp
|
|
117
|
+
? DateTime.fromSeconds(Number(normalizedFieldValue))
|
|
118
|
+
: parseDate(normalizedFieldValue);
|
|
90
119
|
var pattern = fieldOptions === null || fieldOptions === void 0 ? void 0 : fieldOptions.pattern;
|
|
91
120
|
var defaultObj = {
|
|
92
121
|
transformationWasNeeded: false,
|
|
93
122
|
original: fieldValue,
|
|
94
123
|
transformed: null,
|
|
95
124
|
};
|
|
96
|
-
if (!fieldValue || !pattern ||
|
|
125
|
+
if (!fieldValue || !pattern || !luxonDate || isNaN(luxonDate.toSeconds())) {
|
|
97
126
|
return defaultObj;
|
|
98
127
|
}
|
|
99
|
-
var luxonDate = DateTime.fromJSDate(JSDate);
|
|
100
128
|
if (!luxonDate.isValid) {
|
|
101
129
|
return defaultObj;
|
|
102
130
|
}
|
|
103
|
-
var transformedValue = luxonDate
|
|
104
|
-
return
|
|
131
|
+
var transformedValue = luxonDate.toFormat(pattern);
|
|
132
|
+
return {
|
|
133
|
+
transformationWasNeeded: fieldValue !== transformedValue,
|
|
134
|
+
original: fieldValue,
|
|
135
|
+
transformed: transformedValue,
|
|
136
|
+
};
|
|
105
137
|
},
|
|
106
138
|
};
|
|
107
139
|
var urlTransformations = {
|
|
@@ -43,7 +43,7 @@ export var addMeta = function (record, index, uploadedRow, transformedRow) {
|
|
|
43
43
|
if (transformedRow === void 0) { transformedRow = null; }
|
|
44
44
|
var rId = getRowId(index);
|
|
45
45
|
var meta = (_a = record._meta) !== null && _a !== void 0 ? _a : {};
|
|
46
|
-
return __assign(__assign({}, record), { _meta: __assign(__assign({}, meta), { id: rId, rowIndex: index, touched: false, uploadedRow: uploadedRow, transformedRow: transformedRow }) });
|
|
46
|
+
return __assign(__assign({}, record), { _meta: __assign(__assign({}, meta), { id: rId, rowIndex: index, touched: false, uploadedRow: uploadedRow, transformedRow: __assign(__assign({}, meta.transformedRow), transformedRow) }) });
|
|
47
47
|
};
|
|
48
48
|
export var recordListToDataSet = function (data, fields) {
|
|
49
49
|
var fieldWithTransformations = fields.filter(function (field) { var _a; return ((_a = field === null || field === void 0 ? void 0 : field.transformations) === null || _a === void 0 ? void 0 : _a.length) > 0; });
|
|
@@ -64,6 +64,20 @@ export var recordListToDataSet = function (data, fields) {
|
|
|
64
64
|
return dataSet;
|
|
65
65
|
}, {});
|
|
66
66
|
};
|
|
67
|
+
var compareFormattedRecord = function (originalRecord, formattedRecord) {
|
|
68
|
+
var comparisonResult = {};
|
|
69
|
+
for (var key in formattedRecord) {
|
|
70
|
+
if (formattedRecord.hasOwnProperty(key)) {
|
|
71
|
+
if (formattedRecord[key] !== originalRecord[key]) {
|
|
72
|
+
comparisonResult[key] = {
|
|
73
|
+
original: originalRecord[key],
|
|
74
|
+
transformed: formattedRecord[key],
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
return comparisonResult;
|
|
80
|
+
};
|
|
67
81
|
export var transformToRecords = function (_a) {
|
|
68
82
|
var templateHeaderMatchings = _a.templateHeaderMatchings, enumFieldValueMatchings = _a.enumFieldValueMatchings, templateHeaders = _a.templateHeaders, uploadedDataHeaders = _a.uploadedDataHeaders, uploadedData = _a.uploadedData, formatRecord = _a.formatRecord;
|
|
69
83
|
var matchedColumnsLabels = Object.keys(templateHeaderMatchings)
|
|
@@ -92,7 +106,13 @@ export var transformToRecords = function (_a) {
|
|
|
92
106
|
return;
|
|
93
107
|
record[key] = parseValue(FieldTypes[header.column_type], value, enumSet);
|
|
94
108
|
});
|
|
95
|
-
|
|
109
|
+
if (formatRecord) {
|
|
110
|
+
var formattedRecord = formatRecord(record);
|
|
111
|
+
var comparisonResult = compareFormattedRecord(record, formattedRecord);
|
|
112
|
+
record._meta.transformedRow = comparisonResult;
|
|
113
|
+
return formattedRecord;
|
|
114
|
+
}
|
|
115
|
+
return record;
|
|
96
116
|
};
|
|
97
117
|
return uploadedData.map(getRecord);
|
|
98
118
|
};
|
|
@@ -21,6 +21,7 @@ import { useSpreadsheetContext } from "../../../Importer";
|
|
|
21
21
|
import { Div, colors } from "../../../styled";
|
|
22
22
|
import { CheckIcon } from "./icons";
|
|
23
23
|
import { Button } from "../../../common/buttons";
|
|
24
|
+
import { truncateString } from "../../../utils";
|
|
24
25
|
var formatToLocaleString = function (number) {
|
|
25
26
|
return number.toLocaleString(undefined, {
|
|
26
27
|
minimumFractionDigits: 0,
|
|
@@ -33,11 +34,11 @@ var TooltipContainer = styled(Div)(templateObject_3 || (templateObject_3 = __mak
|
|
|
33
34
|
var ExampleCode = styled(Div)(templateObject_4 || (templateObject_4 = __makeTemplateObject(["\n align-items: center;\n background: ", ";\n border-radius: 4px;\n display: flex;\n justify-content: space-between;\n padding: 4px;\n"], ["\n align-items: center;\n background: ", ";\n border-radius: 4px;\n display: flex;\n justify-content: space-between;\n padding: 4px;\n"])), colors.blue100);
|
|
34
35
|
var StyledButton = styled(Button)(templateObject_5 || (templateObject_5 = __makeTemplateObject(["\n align-self: flex-end;\n height: 36px;\n padding: 0px;\n width: 61px;\n"], ["\n align-self: flex-end;\n height: 36px;\n padding: 0px;\n width: 61px;\n"])));
|
|
35
36
|
var Tooltip = function (_a) {
|
|
36
|
-
var recordsCount = _a.recordsCount, onClose = _a.onClose;
|
|
37
|
+
var recordsCount = _a.recordsCount, onClose = _a.onClose, transformedRowData = _a.transformedRowData;
|
|
37
38
|
var t = useTranslation("review").t;
|
|
38
39
|
return (_jsxs(TooltipContainer, __assign({ "data-cy": "transformations-tooltip" }, { children: [_jsx(Div, { children: _jsx(CheckIcon, {}) }), _jsx(Div, __assign({ subtitle: true }, { children: t("table_actions.transformed_records.auto_corrections_amount", {
|
|
39
40
|
amount: formatToLocaleString(recordsCount),
|
|
40
|
-
}) })), _jsxs(Div, { children: [_jsx(Div, __assign({ mb: 5, label1: true, style: { color: colors.gray700 } }, { children: t("table_actions.transformed_records.example") })), _jsxs(ExampleCode, { children: [_jsx(Div, __assign({ body1: true }, { children:
|
|
41
|
+
}) })), transformedRowData && (_jsxs(Div, { children: [_jsx(Div, __assign({ mb: 5, label1: true, style: { color: colors.gray700 } }, { children: t("table_actions.transformed_records.example") })), _jsxs(ExampleCode, { children: [_jsx(Div, __assign({ body1: true }, { children: truncateString(transformedRowData === null || transformedRowData === void 0 ? void 0 : transformedRowData.transformed, 15) })), _jsx(Div, __assign({ body1: true, style: { textDecoration: "line-through" } }, { children: truncateString(transformedRowData === null || transformedRowData === void 0 ? void 0 : transformedRowData.original, 15) }))] })] })), _jsx(StyledButton, __assign({ buttonTextSmall: true, uppercase: true, onClick: onClose }, { children: "OK" }))] })));
|
|
41
42
|
};
|
|
42
43
|
export var TransformedRecordsCount = function () {
|
|
43
44
|
var _a = useSpreadsheetContext(), data = _a.data, isTransformTooltipOpened = _a.isTransformTooltipOpened, setIsTransformTooltipOpened = _a.setIsTransformTooltipOpened;
|
|
@@ -66,6 +67,17 @@ export var TransformedRecordsCount = function () {
|
|
|
66
67
|
var handleCloseTooltip = function () {
|
|
67
68
|
setIsTransformTooltipOpened(false);
|
|
68
69
|
};
|
|
69
|
-
|
|
70
|
+
var firstTransformedRow = useMemo(function () {
|
|
71
|
+
var _a;
|
|
72
|
+
for (var _i = 0, data_1 = data; _i < data_1.length; _i++) {
|
|
73
|
+
var obj = data_1[_i];
|
|
74
|
+
var transformedRow = (_a = obj === null || obj === void 0 ? void 0 : obj._meta) === null || _a === void 0 ? void 0 : _a.transformedRow;
|
|
75
|
+
if (transformedRow && Object.keys(transformedRow).length > 0) {
|
|
76
|
+
return Object.values(transformedRow)[0];
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
return null;
|
|
80
|
+
}, []);
|
|
81
|
+
return (_jsx(_Fragment, { children: isTransformTooltipOpened && transformedRecordsCount ? (_jsxs(RecordsCountContainer, { children: [_jsxs(Counter, __assign({ body1: true }, { children: [_jsxs(Div, __assign({ bold: true, mr: 4, "data-cy": "transformations-counter" }, { children: [formatToLocaleString(transformedRecordsCount), " "] })), t("table_actions.transformed_records.auto_corrections_done")] })), isTransformTooltipOpened && (_jsx(Tooltip, { transformedRowData: firstTransformedRow, recordsCount: transformedRecordsCount, onClose: handleCloseTooltip }))] })) : null }));
|
|
70
82
|
};
|
|
71
83
|
var templateObject_1, templateObject_2, templateObject_3, templateObject_4, templateObject_5;
|
|
@@ -15,31 +15,5 @@ export declare const validationsByColumnType: {
|
|
|
15
15
|
};
|
|
16
16
|
export declare const validationsByType: {};
|
|
17
17
|
export declare const availableColumnTypes: string[];
|
|
18
|
-
export declare const datePatterns: {
|
|
19
|
-
value: string;
|
|
20
|
-
label: string;
|
|
21
|
-
}[];
|
|
22
|
-
export declare const dateTimePatterns: {
|
|
23
|
-
value: string;
|
|
24
|
-
label: string;
|
|
25
|
-
}[];
|
|
26
|
-
export declare const timePatterns: {
|
|
27
|
-
value: string;
|
|
28
|
-
label: string;
|
|
29
|
-
}[];
|
|
30
|
-
export declare const allowedPatterns: {
|
|
31
|
-
date: {
|
|
32
|
-
value: string;
|
|
33
|
-
label: string;
|
|
34
|
-
}[];
|
|
35
|
-
datetime: {
|
|
36
|
-
value: string;
|
|
37
|
-
label: string;
|
|
38
|
-
}[];
|
|
39
|
-
time: {
|
|
40
|
-
value: string;
|
|
41
|
-
label: string;
|
|
42
|
-
}[];
|
|
43
|
-
};
|
|
44
18
|
export declare const patternsColumnTypes: string[];
|
|
45
19
|
export declare const validateColumn: <T extends "string" | "boolean" | "time" | "integer" | "float" | "email" | "url" | "enum" | "date" | "datetime">(columnData: ColumnRequiredProps<T>) => Promise<void>;
|