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.
@@ -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, _records, initialDataSet;
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
- fields = getTemplateFields({ templateHeaders: templateHeaders });
269
- _records = initialRecords ||
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: _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 = /^(http:\/\/www\.|https:\/\/www\.|http:\/\/|https:\/\/)?[a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,5}(:[0-9]{1,5})?(\/.*)?$/g;
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 * averageCharacterSize;
48
- var originalValueSize = isTransformTooltipOpened
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 right: 12px;\n text-decoration: line-through;\n visibility: hidden;\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 right: 12px;\n text-decoration: line-through;\n visibility: hidden;\n white-space: nowrap;\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)(templateObject_6 || (templateObject_6 = __makeTemplateObject(["\n height: calc(100% - 1px);\n width: 100%;\n\n &:focus-within {\n ", "\n }\n\n ", ";\n ", "\n ", "\n ", "\n ", "\n"], ["\n height: calc(100% - 1px);\n width: 100%;\n\n &:focus-within {\n ", "\n }\n\n ", ";\n ", "\n ", "\n ", "\n ", "\n"])), function (_a) {
86
- var isHighlighted = _a.isHighlighted, expandedFieldWidth = _a.expandedFieldWidth, theme = _a.theme, shouldExpandInput = _a.shouldExpandInput;
87
- return shouldExpandInput && css(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n box-shadow: 0px 0px 0px 2px ", " inset;\n width: ", ";\n position: absolute;\n z-index: 1;\n background: ", ";\n\n .suffix {\n visibility: visible;\n }\n "], ["\n box-shadow: 0px 0px 0px 2px ", " inset;\n width: ", ";\n position: absolute;\n z-index: 1;\n background: ", ";\n\n .suffix {\n visibility: visible;\n }\n "])), function (p) { return p.theme.colors.blue500; }, expandedFieldWidth || "auto", !isHighlighted
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(templateObject_2 || (templateObject_2 = __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; });
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(templateObject_3 || (templateObject_3 = __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; });
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(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.error; }, function (p) { return p.theme.colors.red100; }, function (p) { return p.theme.colors.error; });
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(templateObject_5 || (templateObject_5 = __makeTemplateObject(["\n pointer-events: none;\n "], ["\n pointer-events: none;\n "])));
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(templateObject_8 || (templateObject_8 = __makeTemplateObject(["\n ", "\n "], ["\n ", "\n "])), isLoading && css(templateObject_7 || (templateObject_7 = __makeTemplateObject(["\n pointer-events: none;\n "], ["\n pointer-events: none;\n "]))));
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 JSDate = isUnixTimestamp
88
- ? new Date(Number(normalizedFieldValue))
89
- : new Date(normalizedFieldValue);
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 || isNotANumber(JSDate.getTime())) {
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 === null || luxonDate === void 0 ? void 0 : luxonDate.toFormat(fieldOptions.pattern);
104
- return isTransformationNeeded(fieldValue, transformedValue);
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
- return formatRecord ? formatRecord(record) : record;
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: "$37.00" })), _jsx(Div, __assign({ body1: true, style: { textDecoration: "line-through" } }, { children: "$36.8" }))] })] }), _jsx(StyledButton, __assign({ buttonTextSmall: true, uppercase: true, onClick: onClose }, { children: "OK" }))] })));
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
- 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, { recordsCount: transformedRecordsCount, onClose: handleCloseTooltip }))] })) : null }));
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>;