fuse-importer 0.0.5-testing → 0.0.6-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.
Files changed (42) hide show
  1. package/lib/esm/Importer/common/Spreadsheet/SpreadsheetContextProvider/index.d.ts +2 -0
  2. package/lib/esm/Importer/common/Spreadsheet/SpreadsheetContextProvider/index.js +5 -4
  3. package/lib/esm/Importer/common/Spreadsheet/components/SpreadsheetData.js +2 -2
  4. package/lib/esm/Importer/common/Spreadsheet/components/fields/SpeadsheetAutocomplete.d.ts +1 -0
  5. package/lib/esm/Importer/common/Spreadsheet/components/fields/SpeadsheetAutocomplete.js +8 -3
  6. package/lib/esm/Importer/common/Spreadsheet/components/fields/SpreadsheetInput.d.ts +3 -1
  7. package/lib/esm/Importer/common/Spreadsheet/components/fields/SpreadsheetInput.js +38 -11
  8. package/lib/esm/Importer/common/Spreadsheet/components/fields/index.d.ts +11 -5
  9. package/lib/esm/Importer/common/Spreadsheet/components/fields/index.js +21 -9
  10. package/lib/esm/Importer/common/Spreadsheet/hooks.js +1 -10
  11. package/lib/esm/Importer/common/Spreadsheet/transformation/index.d.ts +2 -2
  12. package/lib/esm/Importer/common/Spreadsheet/transformation/index.js +33 -11
  13. package/lib/esm/Importer/common/Spreadsheet/transformation/transformators.d.ts +7 -3
  14. package/lib/esm/Importer/common/Spreadsheet/transformation/transformators.js +130 -37
  15. package/lib/esm/Importer/data/index.d.ts +2 -2
  16. package/lib/esm/Importer/data/index.js +12 -10
  17. package/lib/esm/common/ConfirmationModal.js +1 -1
  18. package/lib/esm/common/Modal.js +2 -2
  19. package/lib/esm/common/Table/TableActions/FilterByErrors/FilterByErrors.js +2 -1
  20. package/lib/esm/common/Table/TableActions/TableActions.js +3 -2
  21. package/lib/esm/common/Table/TableActions/TableActions.styles.d.ts +1 -0
  22. package/lib/esm/common/Table/TableActions/TableActions.styles.js +4 -3
  23. package/lib/esm/common/Table/TableActions/TransformedRecordsCount.d.ts +1 -0
  24. package/lib/esm/common/Table/TableActions/TransformedRecordsCount.js +67 -0
  25. package/lib/esm/common/Table/TableActions/icons.d.ts +1 -0
  26. package/lib/esm/common/Table/TableActions/icons.js +1 -0
  27. package/lib/esm/common/Table/TableView/TableRows/TableRow.js +1 -1
  28. package/lib/esm/common/columnsTransformations.d.ts +1 -0
  29. package/lib/esm/common/columnsTransformations.js +12 -10
  30. package/lib/esm/locales/de.d.ts +5 -0
  31. package/lib/esm/locales/de.js +5 -0
  32. package/lib/esm/locales/en.d.ts +5 -0
  33. package/lib/esm/locales/en.js +5 -0
  34. package/lib/esm/locales/es.d.ts +5 -0
  35. package/lib/esm/locales/es.js +5 -0
  36. package/lib/esm/locales/fr.d.ts +5 -0
  37. package/lib/esm/locales/fr.js +5 -0
  38. package/lib/esm/types.d.ts +7 -0
  39. package/lib/main.js +3 -3
  40. package/package.json +2 -3
  41. package/lib/esm/common/Table/TableView/CustomScrollbar.d.ts +0 -2
  42. package/lib/esm/common/Table/TableView/CustomScrollbar.js +0 -34
@@ -37,6 +37,8 @@ type State = {
37
37
  isFiltering: boolean;
38
38
  sortBy: SortBy | null;
39
39
  setSortBy: React.Dispatch<React.SetStateAction<SortBy>>;
40
+ setIsTransformTooltipOpened: React.Dispatch<React.SetStateAction<boolean>>;
41
+ isTransformTooltipOpened: boolean;
40
42
  } & ValidationState;
41
43
  type Props = SpreadsheetProps & {
42
44
  children: JSX.Element;
@@ -53,8 +53,9 @@ export var SpreadsheetContextProvider = function (_a) {
53
53
  var _g = useState(""), filteredInputValue = _g[0], setFilteredInputValue = _g[1];
54
54
  var _h = useState(null), sortBy = _h[0], setSortBy = _h[1];
55
55
  var addRowTimeoutRef = useRef(null);
56
- var _j = useSpreadsheetFilter(), spreadsheetFilter = _j.spreadsheetFilter, filterRecordsByRowType = _j.filterRecordsByRowType, filterRecordsByFieldErrors = _j.filterRecordsByFieldErrors, resetSpreadsheetFilter = _j.resetSpreadsheetFilter;
57
- var _k = useValidationState({
56
+ var _j = useState(false), isTransformTooltipOpened = _j[0], setIsTransformTooltipOpened = _j[1];
57
+ var _k = useSpreadsheetFilter(), spreadsheetFilter = _k.spreadsheetFilter, filterRecordsByRowType = _k.filterRecordsByRowType, filterRecordsByFieldErrors = _k.filterRecordsByFieldErrors, resetSpreadsheetFilter = _k.resetSpreadsheetFilter;
58
+ var _l = useValidationState({
58
59
  dataSet: dataSet,
59
60
  initialDataSet: initialDataSet,
60
61
  fields: fields,
@@ -63,7 +64,7 @@ export var SpreadsheetContextProvider = function (_a) {
63
64
  setDataSet: setDataSet,
64
65
  setIsLoading: setIsLoading,
65
66
  onValidateRecord: onValidateRecord,
66
- }), updateRecordAndRevalidate = _k.updateRecordAndRevalidate, deleteRecords = _k.deleteRecords, warnings = _k.warnings, errors = _k.errors, validationState = __rest(_k, ["updateRecordAndRevalidate", "deleteRecords", "warnings", "errors"]);
67
+ }), updateRecordAndRevalidate = _l.updateRecordAndRevalidate, deleteRecords = _l.deleteRecords, warnings = _l.warnings, errors = _l.errors, validationState = __rest(_l, ["updateRecordAndRevalidate", "deleteRecords", "warnings", "errors"]);
67
68
  var addNewRowsToSpreadsheet = function () {
68
69
  addRowTimeoutRef.current = setTimeout(function () {
69
70
  var _a, _b;
@@ -169,7 +170,7 @@ export var SpreadsheetContextProvider = function (_a) {
169
170
  return updatedData;
170
171
  });
171
172
  }, [dataSet, dataSnapshot]);
172
- var value = __assign(__assign({ data: updatedDataSnapshot, fields: fields, isLoading: isLoading }, validationState), { isReadOnly: isReadOnly, sortByFieldErrors: sortByFieldErrors, sortByFieldWarnings: sortByFieldWarnings, options: options, recordsWithValuesCount: recordsWithValuesCount, filteredDataCount: filteredDataCount, sortBy: sortBy, warnings: warnings, errors: errors, setIsLoading: setIsLoading, setSortByFieldErrors: handleSortByFieldErrors, setSortByFieldWarnings: handleSortByFieldWarnings, onValidateRecord: onValidateRecord, updateRecord: updateRecordAndRevalidate, selectedRows: selectedRows, setSelectedRows: setSelectedRows, deleteRecords: handleDeleteErrors, filteredInputValue: filteredInputValue, setFilteredInputValue: setFilteredInputValue, lastClickedIndexRef: lastClickedIndexRef, addNewRowsToSpreadsheet: addNewRowsToSpreadsheet, spreadsheetFilter: spreadsheetFilter, resetSpreadsheetFilter: resetSpreadsheetFilter, filterRecordsByRowType: filterRecordsByRowType, filterRecordsByFieldErrors: filterRecordsByFieldErrors, checkboxColumnWidth: checkboxColumnWidth, setSortBy: setSortBy, isFiltering: isFiltering });
173
+ var value = __assign(__assign({ data: updatedDataSnapshot, fields: fields, isLoading: isLoading }, validationState), { isReadOnly: isReadOnly, sortByFieldErrors: sortByFieldErrors, sortByFieldWarnings: sortByFieldWarnings, options: options, recordsWithValuesCount: recordsWithValuesCount, filteredDataCount: filteredDataCount, sortBy: sortBy, warnings: warnings, errors: errors, setIsLoading: setIsLoading, setSortByFieldErrors: handleSortByFieldErrors, setSortByFieldWarnings: handleSortByFieldWarnings, onValidateRecord: onValidateRecord, updateRecord: updateRecordAndRevalidate, selectedRows: selectedRows, setSelectedRows: setSelectedRows, deleteRecords: handleDeleteErrors, filteredInputValue: filteredInputValue, setFilteredInputValue: setFilteredInputValue, lastClickedIndexRef: lastClickedIndexRef, addNewRowsToSpreadsheet: addNewRowsToSpreadsheet, spreadsheetFilter: spreadsheetFilter, resetSpreadsheetFilter: resetSpreadsheetFilter, filterRecordsByRowType: filterRecordsByRowType, filterRecordsByFieldErrors: filterRecordsByFieldErrors, checkboxColumnWidth: checkboxColumnWidth, setSortBy: setSortBy, isFiltering: isFiltering, setIsTransformTooltipOpened: setIsTransformTooltipOpened, isTransformTooltipOpened: isTransformTooltipOpened });
173
174
  return (_jsx(SpreadsheetContext.Provider, __assign({ value: value }, { children: children })));
174
175
  };
175
176
  export var useSpreadsheetContext = function () { return useContext(SpreadsheetContext); };
@@ -77,8 +77,8 @@ var SpreadsheetData = function (props) {
77
77
  Header: function () { return (_jsx(FieldHeader, { field: field, sortByFieldErrors: setSortByFieldErrors, sortByFieldWarnings: setSortByFieldWarnings })); },
78
78
  Content: function (record) {
79
79
  var Input = inputTypes[field.type];
80
- var rowIndex = record.rowIndex, recordProp = __rest(record, ["rowIndex"]);
81
- return (_jsx(Input, { id: "".concat(field.name, "-").concat(rowIndex), fieldType: field.type, name: field.name, options: field.options, record: recordProp }));
80
+ var rowIndex = record.rowIndex, columnWidth = record.columnWidth, recordProp = __rest(record, ["rowIndex", "columnWidth"]);
81
+ return (_jsx(Input, { id: "".concat(field.name, "-").concat(rowIndex), fieldType: field.type, name: field.name, options: field.options, record: recordProp, columnWidth: columnWidth }));
82
82
  },
83
83
  }); });
84
84
  }, [fields, setSortByFieldErrors]);
@@ -9,5 +9,6 @@ export type SpreadsheetAutocompleteProps = {
9
9
  isInputDisabled?: boolean;
10
10
  fieldType: FieldTypes;
11
11
  id?: string;
12
+ columnWidth?: string;
12
13
  };
13
14
  export declare const SpreadsheetAutocomplete: React.FC<SpreadsheetAutocompleteProps>;
@@ -20,6 +20,7 @@ import { Autocomplete as AutocompleteBase, } from "../../../../../common/inputs/
20
20
  import { SelectMenuDiv, SelectMenuScrollArea, } from "../../../../../common/inputs/SelectMenu";
21
21
  import { HTMLInput, TextInputIcon, } from "../../../../../common/inputs/TextInput";
22
22
  import { spreadsheetRowHeightPx } from "../../common";
23
+ import { useSpreadsheetContext } from "../../SpreadsheetContextProvider";
23
24
  var Autocomplete = styled(AutocompleteBase)(templateObject_5 || (templateObject_5 = __makeTemplateObject(["\n ", " {\n border: none;\n border-radius: 0;\n margin: 0;\n background: transparent;\n height: ", "px;\n padding: 0 12px;\n\n ", "\n\n ::placeholder {\n ", "\n\n ", "\n\n ::placeholder {\n ", "\n }\n }\n\n :focus {\n border: none;\n box-shadow: none;\n }\n\n :hover {\n background: transparent;\n }\n }\n ", " {\n right: 6px;\n }\n ", " {\n border-radius: 7px;\n }\n ", " {\n padding: 4px;\n }\n"], ["\n ", " {\n border: none;\n border-radius: 0;\n margin: 0;\n background: transparent;\n height: ", "px;\n padding: 0 12px;\n\n ", "\n\n ::placeholder {\n ", "\n\n ", "\n\n ::placeholder {\n ", "\n }\n }\n\n :focus {\n border: none;\n box-shadow: none;\n }\n\n :hover {\n background: transparent;\n }\n }\n ", " {\n right: 6px;\n }\n ", " {\n border-radius: 7px;\n }\n ", " {\n padding: 4px;\n }\n"])), HTMLInput, spreadsheetRowHeightPx - 5, function (p) {
24
25
  return p.hasWarning && css(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n color: ", ";\n "], ["\n color: ", ";\n "])), function (p) { return p.theme.colors.orange1200; });
25
26
  }, function (p) {
@@ -30,9 +31,13 @@ var Autocomplete = styled(AutocompleteBase)(templateObject_5 || (templateObject_
30
31
  return p.hasError && css(templateObject_4 || (templateObject_4 = __makeTemplateObject(["\n color: ", ";\n "], ["\n color: ", ";\n "])), function (p) { return p.theme.colors.error; });
31
32
  }, TextInputIcon, SelectMenuDiv, SelectMenuScrollArea);
32
33
  export var SpreadsheetAutocomplete = function (props) {
33
- var name = props.name, record = props.record, options = props.options, fieldType = props.fieldType, _a = props.isInputDisabled, isInputDisabled = _a === void 0 ? false : _a, id = props.id;
34
- var _b = useSpreadsheetField(name, record, fieldType), value = _b.value, setValue = _b.setValue, validationError = _b.validationError, validationWarning = _b.validationWarning;
35
- return (_jsx(SpreadsheetField, __assign({ validationError: validationError, validationWarning: validationWarning }, { children: _jsx(Autocomplete, { placement: "bottom", isInputDisabled: isInputDisabled, hasError: !!validationError, hasWarning: !!validationWarning, options: options, value: value, icon: chevronDownIcon, onChange: function (v) { return setValue(v); }, id: id }) })));
34
+ var _a, _b, _c;
35
+ var name = props.name, record = props.record, options = props.options, fieldType = props.fieldType, _d = props.isInputDisabled, isInputDisabled = _d === void 0 ? false : _d, id = props.id;
36
+ var _e = useSpreadsheetField(name, record, fieldType), value = _e.value, setValue = _e.setValue, validationError = _e.validationError, validationWarning = _e.validationWarning;
37
+ var isTransformTooltipOpened = useSpreadsheetContext().isTransformTooltipOpened;
38
+ var isHighlighted = isTransformTooltipOpened &&
39
+ ((_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.transformed);
40
+ return (_jsx(SpreadsheetField, __assign({ validationError: validationError, validationWarning: validationWarning, isHighlighted: isHighlighted }, { children: _jsx(Autocomplete, { placement: "bottom", isInputDisabled: isInputDisabled, hasError: !!validationError, hasWarning: !!validationWarning, options: options, value: value, icon: chevronDownIcon, onChange: function (v) { return !isTransformTooltipOpened && setValue(v); }, disabledWhen: isTransformTooltipOpened, id: id }) })));
36
41
  };
37
42
  var chevronDownIcon = (_jsx("svg", __assign({ width: "10", height: "6", viewBox: "0 0 10 6", fill: "none", xmlns: "http://www.w3.org/2000/svg" }, { children: _jsx("path", { d: "M8.46289 1L4.98131 4.48159L1.49972 1", stroke: "black", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }) })));
38
43
  var templateObject_1, templateObject_2, templateObject_3, templateObject_4, templateObject_5;
@@ -4,9 +4,11 @@ export type SpreadsheetTextInputArgs = {
4
4
  name: string;
5
5
  record: Record;
6
6
  fieldType: FieldTypes;
7
+ columnWidth?: string;
7
8
  } & HTMLInputCSSProps;
8
- export declare const SpreadsheetInput: ({ name, record, fieldType, ...props }: SpreadsheetTextInputArgs) => JSX.Element;
9
+ export declare const SpreadsheetInput: ({ name, record, fieldType, columnWidth, ...props }: SpreadsheetTextInputArgs) => JSX.Element;
9
10
  export declare const Input: import("styled-components").StyledComponent<"input", import("styled-components").DefaultTheme, {
10
11
  hasError: boolean;
11
12
  hasWarning?: boolean;
13
+ fitContent?: boolean;
12
14
  } & import("../../../../../styled/utils").HTMLInputProps & import("../../../../../styled/utils").CSSProps, never>;
@@ -24,20 +24,47 @@ var __rest = (this && this.__rest) || function (s, e) {
24
24
  }
25
25
  return t;
26
26
  };
27
- import { jsx as _jsx } from "react/jsx-runtime";
27
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
28
+ import { useMemo } from "react";
28
29
  import styled, { css } from "styled-components";
29
30
  import { SpreadsheetField, useSpreadsheetField } from ".";
31
+ import { Div } from "../../../../../styled/utils";
32
+ import { useSpreadsheetContext } from "../../SpreadsheetContextProvider";
30
33
  export var SpreadsheetInput = function (_a) {
31
- var name = _a.name, record = _a.record, fieldType = _a.fieldType, props = __rest(_a, ["name", "record", "fieldType"]);
32
- var _b = useSpreadsheetField(name, record, fieldType), value = _b.value, setValue = _b.setValue, validationError = _b.validationError, validationWarning = _b.validationWarning;
33
- return (_jsx(SpreadsheetField, __assign({ validationError: validationError, validationWarning: validationWarning }, { children: _jsx(Input, __assign({ hasError: !!validationError, hasWarning: !!validationWarning, value: value || "", onChange: function (_a) {
34
- var value = _a.target.value;
35
- return setValue(value);
36
- } }, props)) })));
34
+ var _b, _c, _d, _e, _f, _g;
35
+ var name = _a.name, record = _a.record, fieldType = _a.fieldType, columnWidth = _a.columnWidth, props = __rest(_a, ["name", "record", "fieldType", "columnWidth"]);
36
+ var _h = useSpreadsheetField(name, record, fieldType), value = _h.value, setValue = _h.setValue, validationError = _h.validationError, validationWarning = _h.validationWarning;
37
+ var isTransformTooltipOpened = useSpreadsheetContext().isTransformTooltipOpened;
38
+ var isHighlighted = isTransformTooltipOpened &&
39
+ ((_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
+ var expandedFieldWidth = useMemo(function () {
41
+ var _a, _b, _c, _d;
42
+ // if the value is falsy, returns the default width
43
+ if (!value)
44
+ return columnWidth;
45
+ var averageCharacterSize = 9;
46
+ 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", ""));
54
+ return totalInputSize > defaultWidthAsNumber
55
+ ? "".concat(totalInputSize, "px")
56
+ : "".concat(defaultWidthAsNumber, "px");
57
+ }, [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
+ var value = _a.target.value;
60
+ return !isTransformTooltipOpened && setValue(value);
61
+ }, 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 })))] })));
37
63
  };
38
- export var Input = styled.input(templateObject_3 || (templateObject_3 = __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) {
39
- return p.hasWarning && css(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n color: ", ";\n "], ["\n color: ", ";\n "])), function (p) { return p.theme.colors.orange1200; });
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
+ 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
+ return p.hasWarning && css(templateObject_2 || (templateObject_2 = __makeTemplateObject(["\n color: ", ";\n "], ["\n color: ", ";\n "])), function (p) { return p.theme.colors.orange1200; });
40
67
  }, function (p) {
41
- return p.hasError && css(templateObject_2 || (templateObject_2 = __makeTemplateObject(["\n color: ", ";\n "], ["\n color: ", ";\n "])), function (p) { return p.theme.colors.error; });
68
+ return p.hasError && css(templateObject_3 || (templateObject_3 = __makeTemplateObject(["\n color: ", ";\n "], ["\n color: ", ";\n "])), function (p) { return p.theme.colors.error; });
42
69
  });
43
- var templateObject_1, templateObject_2, templateObject_3;
70
+ var templateObject_1, templateObject_2, templateObject_3, templateObject_4;
@@ -1,3 +1,4 @@
1
+ /// <reference types="react" />
1
2
  import { FieldTypes, Record } from "../../../../../types";
2
3
  export declare const useSpreadsheetField: (name: string, record: Record, fieldType: FieldTypes) => {
3
4
  value: any;
@@ -5,8 +6,13 @@ export declare const useSpreadsheetField: (name: string, record: Record, fieldTy
5
6
  validationError: any;
6
7
  validationWarning: any;
7
8
  };
8
- export declare const SpreadsheetField: ({ validationError, validationWarning, children, }: {
9
- validationError: any;
10
- validationWarning: any;
11
- children: any;
12
- }) => JSX.Element;
9
+ type SpreadsheetFieldProps = {
10
+ validationError: string | JSX.Element;
11
+ validationWarning: string | JSX.Element;
12
+ children: React.ReactNode;
13
+ isHighlighted?: boolean;
14
+ expandedFieldWidth?: string;
15
+ shouldExpandInput?: boolean;
16
+ };
17
+ export declare const SpreadsheetField: ({ validationError, validationWarning, children, isHighlighted, expandedFieldWidth, shouldExpandInput, }: SpreadsheetFieldProps) => JSX.Element;
18
+ export {};
@@ -75,22 +75,34 @@ export var useSpreadsheetField = function (name, record, fieldType) {
75
75
  setValue(value);
76
76
  updateData(value);
77
77
  }, [record, updateData]);
78
- return { value: value, setValue: updateValue, validationError: validationError, validationWarning: validationWarning };
78
+ return {
79
+ value: value,
80
+ setValue: updateValue,
81
+ validationError: validationError,
82
+ validationWarning: validationWarning,
83
+ };
79
84
  };
80
- var ContentContainer = styled(Div)(templateObject_4 || (templateObject_4 = __makeTemplateObject(["\n height: calc(100% - 1px);\n width: 100%;\n ", ";\n ", "\n ", "\n ", "\n"], ["\n height: calc(100% - 1px);\n width: 100%;\n ", ";\n ", "\n ", "\n ", "\n"])), function (p) { return p.theme.css.alignCenter; }, function (p) {
81
- return p.hasWarning && css(templateObject_1 || (templateObject_1 = __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; });
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
88
+ ? theme.colors.white
89
+ : theme.colors.blue100);
90
+ }, 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; });
92
+ }, 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; });
82
94
  }, function (p) {
83
- return p.hasError && css(templateObject_2 || (templateObject_2 = __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; });
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; });
84
96
  }, function (p) {
85
- return p.isReadOnly && css(templateObject_3 || (templateObject_3 = __makeTemplateObject(["\n pointer-events: none;\n "], ["\n pointer-events: none;\n "])));
97
+ return p.isReadOnly && css(templateObject_5 || (templateObject_5 = __makeTemplateObject(["\n pointer-events: none;\n "], ["\n pointer-events: none;\n "])));
86
98
  });
87
99
  var Wrapper = styled(Div)(function (_a) {
88
100
  var isLoading = _a.isLoading;
89
- return css(templateObject_6 || (templateObject_6 = __makeTemplateObject(["\n ", "\n "], ["\n ", "\n "])), isLoading && css(templateObject_5 || (templateObject_5 = __makeTemplateObject(["\n pointer-events: none;\n "], ["\n pointer-events: none;\n "]))));
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 "]))));
90
102
  });
91
103
  export var SpreadsheetField = function (_a) {
92
- var validationError = _a.validationError, validationWarning = _a.validationWarning, children = _a.children;
104
+ var validationError = _a.validationError, validationWarning = _a.validationWarning, children = _a.children, isHighlighted = _a.isHighlighted, expandedFieldWidth = _a.expandedFieldWidth, shouldExpandInput = _a.shouldExpandInput;
93
105
  var _b = useSpreadsheetContext(), isReadOnly = _b.isReadOnly, isLoading = _b.isLoading;
94
- 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, isReadOnly: isReadOnly, className: "input-content" }, { children: children })) })) })) })));
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 })) })) })) })));
95
107
  };
96
- var templateObject_1, templateObject_2, templateObject_3, templateObject_4, templateObject_5, templateObject_6;
108
+ var templateObject_1, templateObject_2, templateObject_3, templateObject_4, templateObject_5, templateObject_6, templateObject_7, templateObject_8;
@@ -115,7 +115,6 @@ export var useValidationState = function (_a) {
115
115
  useEffect(function () {
116
116
  if (!initialDataSet || isReadOnly)
117
117
  return;
118
- var isCancelled = false;
119
118
  setIsLoading(true);
120
119
  var initialValidation = function () { return __awaiter(void 0, void 0, void 0, function () {
121
120
  var errors, warnings, initialData, length, _a, batchValidationDelayMs, _b, batchValidationSize, batchSize, batchCount, batchIdx, idx, batch, index, record, recordId, _c, recordErrors, recordWarnings, hasError, hasWarning, validationPercentage_1;
@@ -133,16 +132,12 @@ export var useValidationState = function (_a) {
133
132
  _d.label = 1;
134
133
  case 1:
135
134
  if (!(batchIdx < batchCount)) return [3 /*break*/, 8];
136
- if (isCancelled)
137
- return [2 /*return*/];
138
135
  idx = batchIdx * batchSize;
139
136
  batch = initialData.slice(idx, idx + batchSize);
140
137
  index = 0;
141
138
  _d.label = 2;
142
139
  case 2:
143
140
  if (!(index < batch.length)) return [3 /*break*/, 5];
144
- if (isCancelled)
145
- return [2 /*return*/];
146
141
  record = batch[index];
147
142
  recordId = record._meta.id;
148
143
  return [4 /*yield*/, validateRecord({
@@ -199,16 +194,12 @@ export var useValidationState = function (_a) {
199
194
  case 2: return [4 /*yield*/, initialValidation()];
200
195
  case 3:
201
196
  _a.sent();
202
- if (!isCancelled)
203
- setIsLoading(false);
197
+ setIsLoading(false);
204
198
  setIsLoadingApp(false);
205
199
  return [2 /*return*/];
206
200
  }
207
201
  });
208
202
  }); })();
209
- return function () {
210
- isCancelled = true;
211
- };
212
203
  }, [initialDataSet]);
213
204
  var columnErrorCounts = useMemo(function () {
214
205
  return Object.keys(errors).reduce(function (errorsByColumns, rowId) {
@@ -1,7 +1,7 @@
1
- import { Field, Record } from "../../../../types";
1
+ import { Field, Record, TransformedRecord } from "../../../../types";
2
2
  type TransformRecordArgs = {
3
3
  record: Record;
4
4
  fields: Field[];
5
5
  };
6
- export declare function transformRecord({ record, fields }: TransformRecordArgs): void;
6
+ export declare const transformRecord: ({ record, fields }: TransformRecordArgs) => TransformedRecord;
7
7
  export {};
@@ -4,22 +4,44 @@ var runTransformation = function (record, transformation, field) {
4
4
  var transformerFunction = fieldTransformations[transformationType];
5
5
  return transformerFunction(record, transformation, field);
6
6
  };
7
- export function transformRecord(_a) {
7
+ export var transformRecord = function (_a) {
8
8
  var record = _a.record, fields = _a.fields;
9
- for (var key in fields) {
10
- var currentField = fields[key];
11
- var fieldTransformations_1 = currentField === null || currentField === void 0 ? void 0 : currentField.transformations;
12
- var fieldToBeTransformed = record === null || record === void 0 ? void 0 : record[currentField === null || currentField === void 0 ? void 0 : currentField.name];
9
+ var transformedRecords = {};
10
+ for (var _i = 0, fields_1 = fields; _i < fields_1.length; _i++) {
11
+ var currentField = fields_1[_i];
12
+ var fieldTransformations_1 = currentField.transformations;
13
+ var fieldToBeTransformed = record[currentField.name];
13
14
  if (!fieldTransformations_1 ||
14
- (fieldTransformations_1 === null || fieldTransformations_1 === void 0 ? void 0 : fieldTransformations_1.length) === 0 ||
15
- !fieldToBeTransformed) {
15
+ fieldTransformations_1.length === 0 ||
16
+ fieldToBeTransformed === undefined) {
16
17
  continue;
17
18
  }
18
- var transformedField = fieldToBeTransformed;
19
+ var transformedField = {
20
+ original: fieldToBeTransformed,
21
+ transformed: fieldToBeTransformed,
22
+ };
23
+ var fieldWasTransformed = false;
19
24
  for (var i = 0; i < fieldTransformations_1.length; i++) {
20
25
  var currentTransformation = fieldTransformations_1[i];
21
- transformedField = runTransformation(transformedField, currentTransformation, currentField);
26
+ var transformed = runTransformation(transformedField.transformed, currentTransformation, currentField);
27
+ if (transformed.transformationWasNeeded) {
28
+ fieldWasTransformed = true;
29
+ transformedField = {
30
+ original: transformedField.original,
31
+ transformed: transformed.transformed,
32
+ };
33
+ }
22
34
  }
23
- record[currentField.name] = transformedField;
35
+ if (!fieldWasTransformed) {
36
+ continue;
37
+ }
38
+ // the data have changed
39
+ record[currentField.name] = transformedField.transformed;
40
+ transformedRecords[currentField.name] = {
41
+ original: transformedField.original,
42
+ transformed: transformedField.transformed,
43
+ };
24
44
  }
25
- }
45
+ var isTransformedRecordsEmpty = Object.keys(transformedRecords).length === 0;
46
+ return isTransformedRecordsEmpty ? null : transformedRecords;
47
+ };
@@ -1,8 +1,12 @@
1
1
  import { Field, FieldTransformation } from "../../../../types";
2
- export type FieldValidator = (fieldValue: any, transformation?: FieldTransformation, fieldOptions?: Field) => null | any;
2
+ export type FieldTransformator = (fieldValue: any, transformation?: FieldTransformation, fieldOptions?: Field) => {
3
+ transformationWasNeeded: boolean;
4
+ original: any;
5
+ transformed: any;
6
+ };
3
7
  export type FieldTransformations = Partial<{
4
- [key: string]: FieldValidator;
8
+ [key: string]: FieldTransformator;
5
9
  }>;
6
10
  export declare const fieldTransformations: {
7
- [x: string]: FieldValidator;
11
+ [x: string]: FieldTransformator;
8
12
  };
@@ -10,79 +10,166 @@ var __assign = (this && this.__assign) || function () {
10
10
  return __assign.apply(this, arguments);
11
11
  };
12
12
  import { DateTime } from "luxon";
13
+ var isTransformationNeeded = function (fieldValue, transformedValue) { return ({
14
+ transformationWasNeeded: fieldValue !== transformedValue,
15
+ original: fieldValue,
16
+ transformed: fieldValue === transformedValue ? null : transformedValue,
17
+ }); };
18
+ var isNotANumber = function (fieldValue) {
19
+ return fieldValue === null || fieldValue === undefined || isNaN(fieldValue);
20
+ };
21
+ var isNotAString = function (fieldValue) {
22
+ return !fieldValue || typeof fieldValue !== "string" || fieldValue.trim() === "";
23
+ };
13
24
  var stringFieldTransformations = {
14
25
  sentence_case: function (fieldValue) {
15
26
  var _a, _b;
16
- if (typeof fieldValue !== "string")
17
- return fieldValue;
18
- return (((_b = (_a = fieldValue === null || fieldValue === void 0 ? void 0 : fieldValue.toLowerCase()) === null || _a === void 0 ? void 0 : _a.charAt(0)) === null || _b === void 0 ? void 0 : _b.toUpperCase()) +
19
- (fieldValue === null || fieldValue === void 0 ? void 0 : fieldValue.slice(1).toLowerCase()));
27
+ if (isNotAString(fieldValue))
28
+ return {
29
+ transformationWasNeeded: false,
30
+ original: fieldValue,
31
+ transformed: null,
32
+ };
33
+ var transformedValue = ((_b = (_a = fieldValue === null || fieldValue === void 0 ? void 0 : fieldValue.toLowerCase()) === null || _a === void 0 ? void 0 : _a.charAt(0)) === null || _b === void 0 ? void 0 : _b.toUpperCase()) +
34
+ (fieldValue === null || fieldValue === void 0 ? void 0 : fieldValue.slice(1).toLowerCase());
35
+ return isTransformationNeeded(fieldValue, transformedValue);
20
36
  },
21
37
  capitalize: function (fieldValue) {
22
- var _a;
23
- if (typeof fieldValue !== "string")
24
- return fieldValue;
25
- return ((_a = fieldValue === null || fieldValue === void 0 ? void 0 : fieldValue.charAt(0)) === null || _a === void 0 ? void 0 : _a.toUpperCase()) + (fieldValue === null || fieldValue === void 0 ? void 0 : fieldValue.slice(1));
38
+ if (isNotAString(fieldValue)) {
39
+ return {
40
+ transformationWasNeeded: false,
41
+ original: fieldValue,
42
+ transformed: null,
43
+ };
44
+ }
45
+ var transformedValue = fieldValue
46
+ .split(" ")
47
+ .map(function (word) { return word.charAt(0).toUpperCase() + word.slice(1).toLowerCase(); })
48
+ .join(" ");
49
+ return isTransformationNeeded(fieldValue, transformedValue);
26
50
  },
27
51
  uppercase: function (fieldValue) {
28
- if (typeof fieldValue !== "string")
29
- return fieldValue;
30
- return fieldValue === null || fieldValue === void 0 ? void 0 : fieldValue.toUpperCase();
52
+ if (isNotAString(fieldValue))
53
+ return {
54
+ transformationWasNeeded: false,
55
+ original: fieldValue,
56
+ transformed: null,
57
+ };
58
+ var transformedValue = fieldValue === null || fieldValue === void 0 ? void 0 : fieldValue.toUpperCase();
59
+ return isTransformationNeeded(fieldValue, transformedValue);
31
60
  },
32
61
  lowercase: function (fieldValue) {
33
- if (typeof fieldValue !== "string")
34
- return fieldValue;
35
- return fieldValue === null || fieldValue === void 0 ? void 0 : fieldValue.toLowerCase();
62
+ if (isNotAString(fieldValue))
63
+ return {
64
+ transformationWasNeeded: false,
65
+ original: fieldValue,
66
+ transformed: null,
67
+ };
68
+ var transformedValue = fieldValue === null || fieldValue === void 0 ? void 0 : fieldValue.toLowerCase();
69
+ return isTransformationNeeded(fieldValue, transformedValue);
36
70
  },
37
71
  trim_whitespace: function (fieldValue) {
38
72
  if (typeof fieldValue !== "string")
39
- return fieldValue;
40
- return fieldValue === null || fieldValue === void 0 ? void 0 : fieldValue.trim();
73
+ return {
74
+ transformationWasNeeded: false,
75
+ original: fieldValue,
76
+ transformed: null,
77
+ };
78
+ var transformedValue = fieldValue === null || fieldValue === void 0 ? void 0 : fieldValue.trim();
79
+ return isTransformationNeeded(fieldValue, transformedValue);
41
80
  },
42
81
  };
43
82
  var datesDateTimesAndTimesTransformations = {
44
83
  autoformat: function (fieldValue, _, fieldOptions) {
45
84
  var JSDate = new Date(fieldValue);
46
- if (!fieldValue || isNaN(JSDate.getTime())) {
47
- return fieldValue;
85
+ var pattern = fieldOptions === null || fieldOptions === void 0 ? void 0 : fieldOptions.pattern;
86
+ var defaultObj = {
87
+ transformationWasNeeded: false,
88
+ original: fieldValue,
89
+ transformed: null,
90
+ };
91
+ if (!fieldValue || !pattern || isNotANumber(JSDate.getTime())) {
92
+ return defaultObj;
48
93
  }
49
94
  var luxonDate = DateTime.fromJSDate(JSDate);
50
- return luxonDate.toFormat(fieldOptions.pattern);
95
+ if (!luxonDate.isValid) {
96
+ return defaultObj;
97
+ }
98
+ var transformedValue = luxonDate === null || luxonDate === void 0 ? void 0 : luxonDate.toFormat(fieldOptions.pattern);
99
+ return isTransformationNeeded(fieldValue, transformedValue);
51
100
  },
52
101
  };
53
102
  var urlTransformations = {
54
103
  prefix: function (fieldValue, transformation) {
55
104
  var _a;
56
105
  var prefixValue = (_a = transformation === null || transformation === void 0 ? void 0 : transformation.options) === null || _a === void 0 ? void 0 : _a.prefix;
57
- if (!prefixValue)
58
- return fieldValue;
59
- return "".concat(prefixValue).concat(fieldValue);
106
+ var fieldValueHasPrefix = fieldValue === null || fieldValue === void 0 ? void 0 : fieldValue.startsWith(prefixValue);
107
+ if (isNotAString(prefixValue) ||
108
+ isNotAString(fieldValue) ||
109
+ fieldValueHasPrefix)
110
+ return {
111
+ transformationWasNeeded: false,
112
+ original: fieldValue,
113
+ transformed: null,
114
+ };
115
+ var transformedValue = "".concat(prefixValue).concat(fieldValue);
116
+ return isTransformationNeeded(fieldValue, transformedValue);
60
117
  },
61
118
  };
62
119
  var floatTransformations = {
63
120
  number_of_decimals: function (fieldValue, transformation) {
64
121
  var _a;
65
122
  var numberOfDecimalsValue = Number((_a = transformation === null || transformation === void 0 ? void 0 : transformation.options) === null || _a === void 0 ? void 0 : _a.number_of_decimals);
66
- if (isNaN(numberOfDecimalsValue) || isNaN(fieldValue))
67
- return fieldValue;
68
- return Number(fieldValue.toFixed(numberOfDecimalsValue));
123
+ if (isNotANumber(numberOfDecimalsValue) || isNotANumber(fieldValue)) {
124
+ return {
125
+ transformationWasNeeded: false,
126
+ original: fieldValue,
127
+ transformed: null,
128
+ };
129
+ }
130
+ var transformedValue = parseFloat(Number(fieldValue).toFixed(numberOfDecimalsValue));
131
+ return isTransformationNeeded(fieldValue, transformedValue);
69
132
  },
70
133
  };
71
134
  var integerTransformations = {
72
135
  round: function (fieldValue) {
73
- if (isNaN(fieldValue))
74
- return fieldValue;
75
- return Math.round(fieldValue);
136
+ if (fieldValue === "" || isNotANumber(fieldValue)) {
137
+ return {
138
+ transformationWasNeeded: false,
139
+ original: fieldValue,
140
+ transformed: null,
141
+ };
142
+ }
143
+ var typeofFieldValue = typeof fieldValue;
144
+ var roundedValue = Math.round(fieldValue);
145
+ var valueWithCorrectType = typeofFieldValue === "string" ? "".concat(roundedValue) : roundedValue;
146
+ return isTransformationNeeded(fieldValue, valueWithCorrectType);
76
147
  },
77
148
  floor: function (fieldValue) {
78
- if (isNaN(fieldValue))
79
- return fieldValue;
80
- return Math.floor(fieldValue);
149
+ if (fieldValue === "" || isNotANumber(fieldValue)) {
150
+ return {
151
+ transformationWasNeeded: false,
152
+ original: fieldValue,
153
+ transformed: null,
154
+ };
155
+ }
156
+ var typeofFieldValue = typeof fieldValue;
157
+ var flooredValue = Math.floor(fieldValue);
158
+ var valueWithCorrectType = typeofFieldValue === "string" ? "".concat(flooredValue) : flooredValue;
159
+ return isTransformationNeeded(fieldValue, valueWithCorrectType);
81
160
  },
82
161
  ceiling: function (fieldValue) {
83
- if (isNaN(fieldValue))
84
- return fieldValue;
85
- return Math.ceil(fieldValue);
162
+ if (fieldValue === "" || isNotANumber(fieldValue)) {
163
+ return {
164
+ transformationWasNeeded: false,
165
+ original: fieldValue,
166
+ transformed: null,
167
+ };
168
+ }
169
+ var typeofFieldValue = typeof fieldValue;
170
+ var ceilingValue = Math.ceil(fieldValue);
171
+ var valueWithCorrectType = typeofFieldValue === "string" ? "".concat(ceilingValue) : ceilingValue;
172
+ return isTransformationNeeded(fieldValue, valueWithCorrectType);
86
173
  },
87
174
  };
88
175
  var enumTransformations = {
@@ -91,16 +178,22 @@ var enumTransformations = {
91
178
  return option.toLowerCase();
92
179
  });
93
180
  if (!fieldValue || options.length === 0)
94
- return fieldValue;
181
+ return {
182
+ transformationWasNeeded: false,
183
+ original: fieldValue,
184
+ transformed: null,
185
+ };
95
186
  var parsedRecord = String(fieldValue).toLowerCase();
96
187
  var trueOptionIndex = options.findIndex(function (option) { return option === "true" || option === "1"; });
97
188
  var falseOptionIndex = options.findIndex(function (option) { return option === "false" || option === "0"; });
98
189
  if (trueOptionIndex !== -1 && falseOptionIndex !== -1) {
99
- return parsedRecord === options[trueOptionIndex]
190
+ var transformedValue_1 = parsedRecord === options[trueOptionIndex]
100
191
  ? fieldOptions.options[trueOptionIndex]
101
192
  : fieldOptions.options[falseOptionIndex];
193
+ return isTransformationNeeded(fieldValue, transformedValue_1);
102
194
  }
103
- return fieldOptions.options[0];
195
+ var transformedValue = fieldOptions.options[0];
196
+ return isTransformationNeeded(fieldValue, transformedValue);
104
197
  },
105
198
  };
106
199
  export var fieldTransformations = __assign(__assign(__assign(__assign(__assign(__assign({}, stringFieldTransformations), datesDateTimesAndTimesTransformations), urlTransformations), floatTransformations), integerTransformations), enumTransformations);