fuse-importer 0.0.4-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 (45) hide show
  1. package/lib/esm/Importer/Review/ReviewContextProvider.js +12 -6
  2. package/lib/esm/Importer/Uploader/DragAndDropImporter/ImporterDropzone.js +21 -6
  3. package/lib/esm/Importer/common/Spreadsheet/SpreadsheetContextProvider/index.d.ts +2 -0
  4. package/lib/esm/Importer/common/Spreadsheet/SpreadsheetContextProvider/index.js +5 -4
  5. package/lib/esm/Importer/common/Spreadsheet/components/SpreadsheetData.js +2 -2
  6. package/lib/esm/Importer/common/Spreadsheet/components/fields/SpeadsheetAutocomplete.d.ts +1 -0
  7. package/lib/esm/Importer/common/Spreadsheet/components/fields/SpeadsheetAutocomplete.js +8 -3
  8. package/lib/esm/Importer/common/Spreadsheet/components/fields/SpreadsheetInput.d.ts +3 -1
  9. package/lib/esm/Importer/common/Spreadsheet/components/fields/SpreadsheetInput.js +38 -11
  10. package/lib/esm/Importer/common/Spreadsheet/components/fields/index.d.ts +11 -5
  11. package/lib/esm/Importer/common/Spreadsheet/components/fields/index.js +21 -9
  12. package/lib/esm/Importer/common/Spreadsheet/hooks.js +1 -10
  13. package/lib/esm/Importer/common/Spreadsheet/transformation/index.d.ts +2 -2
  14. package/lib/esm/Importer/common/Spreadsheet/transformation/index.js +33 -11
  15. package/lib/esm/Importer/common/Spreadsheet/transformation/transformators.d.ts +7 -3
  16. package/lib/esm/Importer/common/Spreadsheet/transformation/transformators.js +130 -37
  17. package/lib/esm/Importer/common/Spreadsheet/validation/index.js +2 -3
  18. package/lib/esm/Importer/data/index.d.ts +2 -2
  19. package/lib/esm/Importer/data/index.js +12 -10
  20. package/lib/esm/common/ConfirmationModal.js +1 -1
  21. package/lib/esm/common/Modal.js +2 -2
  22. package/lib/esm/common/Table/TableActions/FilterByErrors/FilterByErrors.js +2 -1
  23. package/lib/esm/common/Table/TableActions/TableActions.js +3 -2
  24. package/lib/esm/common/Table/TableActions/TableActions.styles.d.ts +1 -0
  25. package/lib/esm/common/Table/TableActions/TableActions.styles.js +4 -3
  26. package/lib/esm/common/Table/TableActions/TransformedRecordsCount.d.ts +1 -0
  27. package/lib/esm/common/Table/TableActions/TransformedRecordsCount.js +67 -0
  28. package/lib/esm/common/Table/TableActions/icons.d.ts +1 -0
  29. package/lib/esm/common/Table/TableActions/icons.js +1 -0
  30. package/lib/esm/common/Table/TableView/TableRows/TableRow.js +1 -1
  31. package/lib/esm/common/columnsTransformations.d.ts +1 -0
  32. package/lib/esm/common/columnsTransformations.js +12 -10
  33. package/lib/esm/locales/de.d.ts +5 -0
  34. package/lib/esm/locales/de.js +6 -1
  35. package/lib/esm/locales/en.d.ts +5 -0
  36. package/lib/esm/locales/en.js +6 -1
  37. package/lib/esm/locales/es.d.ts +5 -0
  38. package/lib/esm/locales/es.js +6 -1
  39. package/lib/esm/locales/fr.d.ts +5 -0
  40. package/lib/esm/locales/fr.js +6 -1
  41. package/lib/esm/types.d.ts +7 -0
  42. package/lib/main.js +16 -16
  43. package/package.json +5 -6
  44. package/lib/esm/common/Table/TableView/CustomScrollbar.d.ts +0 -2
  45. package/lib/esm/common/Table/TableView/CustomScrollbar.js +0 -34
@@ -67,7 +67,7 @@ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
67
67
  };
68
68
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
69
69
  import { createContext, useCallback, useContext, useEffect, useMemo, useRef, useState, } from "react";
70
- import { utils, writeFile } from "xlsx";
70
+ import Papa from "papaparse";
71
71
  import { AppLoading } from "../common/AppLoading";
72
72
  import { isRecordEmpty } from "../common/Spreadsheet/common";
73
73
  import { sendRecordsToIntegrations } from "../common/utils";
@@ -108,6 +108,15 @@ var filterAndMapWithBackendErrors = function (dataSet, errors) {
108
108
  return __assign(__assign({}, record), { _meta: __assign(__assign({}, meta), { isInvalid: true, backendErrors: errors[rId] }) });
109
109
  }, []);
110
110
  };
111
+ function downloadCsv(data, fileName) {
112
+ var blob = new Blob([data], { type: "text/csv;charset=utf-8;" });
113
+ var link = document.createElement("a");
114
+ link.href = URL.createObjectURL(blob);
115
+ link.download = fileName;
116
+ document.body.appendChild(link);
117
+ link.click();
118
+ document.body.removeChild(link);
119
+ }
111
120
  function csvExport(data) {
112
121
  var valuesWithQuotesWhenNecessary = data.map(function (obj) {
113
122
  var newObj = {};
@@ -118,11 +127,8 @@ function csvExport(data) {
118
127
  }
119
128
  return newObj;
120
129
  });
121
- var worksheet = utils.json_to_sheet(valuesWithQuotesWhenNecessary);
122
- var workbook = utils.book_new();
123
- utils.book_append_sheet(workbook, worksheet, "Data");
124
- utils.sheet_to_csv(worksheet);
125
- writeFile(workbook, "export.csv");
130
+ var csv = Papa.unparse(valuesWithQuotesWhenNecessary);
131
+ downloadCsv(csv, "export.csv");
126
132
  }
127
133
  export var ReviewContextProvider = function (_a) {
128
134
  var initialRecords = _a.initialRecords, children = _a.children;
@@ -25,6 +25,7 @@ import { Button } from "../../../common/buttons";
25
25
  import { DragAndDropSvg, UploadIndicatorSvg } from "./backgrounds";
26
26
  import { useTranslation } from "react-i18next";
27
27
  import Papa from "papaparse";
28
+ import * as XLSX from "xlsx";
28
29
  var DragAndDropCard = styled(Div)(templateObject_2 || (templateObject_2 = __makeTemplateObject(["\n border-radius: 8px;\n margin-right: ", ";\n width: 100%;\n height: 100%;\n display: flex;\n background: ", ";\n border: 1px dashed ", ";\n\n @media (max-width: 1050px) {\n padding: 24px;\n width: auto;\n }\n\n ", "\n"], ["\n border-radius: 8px;\n margin-right: ", ";\n width: 100%;\n height: 100%;\n display: flex;\n background: ", ";\n border: 1px dashed ", ";\n\n @media (max-width: 1050px) {\n padding: 24px;\n width: auto;\n }\n\n ", "\n"])), function (props) { return (props.isDragActive ? "-10px" : "revert"); }, theme.colors.white, theme.colors.red50, function (props) {
29
30
  return props.isDragActive && css(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n background: ", ";\n border: 1px solid ", ";\n justify-content: center;\n "], ["\n background: ", ";\n border: 1px solid ", ";\n justify-content: center;\n "])), function (p) { return p.theme.colors.blue100; }, function (p) { return p.theme.colors.blue500; });
30
31
  });
@@ -62,12 +63,26 @@ var ImporterDropzone = function () {
62
63
  reader.onload = function (event) {
63
64
  var _a;
64
65
  var results = event.target.result;
66
+ var isCsvFile = file.type === "text/csv";
67
+ // rounded value to 20MB
68
+ var isLargeFile = file.size > 20000000;
65
69
  var getDataFromFile = function (fileResults) {
66
- var csvString = new TextDecoder().decode(fileResults instanceof ArrayBuffer
67
- ? fileResults
68
- : new TextEncoder().encode(fileResults));
69
- var data = Papa.parse(csvString).data;
70
- return data;
70
+ if (isCsvFile) {
71
+ var csvString = new TextDecoder().decode(fileResults instanceof ArrayBuffer
72
+ ? fileResults
73
+ : new TextEncoder().encode(fileResults));
74
+ var data = Papa.parse(csvString).data;
75
+ return data;
76
+ }
77
+ var workBook = XLSX.read(fileResults, {
78
+ type: "array",
79
+ codepage: 65001,
80
+ raw: true,
81
+ dense: isLargeFile,
82
+ });
83
+ var workBookName = workBook.SheetNames[0];
84
+ var sheet = workBook.Sheets[workBookName];
85
+ return XLSX.utils.sheet_to_json(sheet, { header: 1, raw: false });
71
86
  };
72
87
  var fileData = getDataFromFile(results);
73
88
  var headersCount = (_a = fileData[0]) === null || _a === void 0 ? void 0 : _a.length;
@@ -98,7 +113,7 @@ var ImporterDropzone = function () {
98
113
  onDropRejected: onDropRejected,
99
114
  noClick: true,
100
115
  noKeyboard: true,
101
- accept: ".csv, .tsv, .xls, .xlsx",
116
+ accept: ".csv, .xls, .xlsx",
102
117
  maxFiles: 1,
103
118
  maxSize: 200000000, // 200MB
104
119
  }), getRootProps = _b.getRootProps, getInputProps = _b.getInputProps, open = _b.open, isDragActive = _b.isDragActive;
@@ -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
  };