fuse-importer 0.0.9-testing → 0.1.2-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 (50) hide show
  1. package/lib/esm/Importer/ImporterWithContext.js +1 -1
  2. package/lib/esm/Importer/Review/ReviewContextProvider.js +8 -5
  3. package/lib/esm/Importer/common/Spreadsheet/common/index.js +1 -1
  4. package/lib/esm/Importer/common/Spreadsheet/components/SpreadsheetRowCheckboxes.js +7 -1
  5. package/lib/esm/Importer/common/Spreadsheet/components/fields/SpreadsheetInput.js +16 -12
  6. package/lib/esm/Importer/common/Spreadsheet/components/fields/index.d.ts +2 -1
  7. package/lib/esm/Importer/common/Spreadsheet/components/fields/index.js +24 -13
  8. package/lib/esm/Importer/common/Spreadsheet/components/fields/utils.d.ts +11 -0
  9. package/lib/esm/Importer/common/Spreadsheet/components/fields/utils.js +29 -0
  10. package/lib/esm/Importer/common/Spreadsheet/hooks.js +47 -18
  11. package/lib/esm/Importer/common/Spreadsheet/transformation/transformators.js +39 -7
  12. package/lib/esm/Importer/contexts/ImporterContextProvider.d.ts +4 -2
  13. package/lib/esm/Importer/contexts/ImporterContextProvider.js +2 -1
  14. package/lib/esm/Importer/data/index.js +22 -2
  15. package/lib/esm/Importer/index.d.ts +4 -3
  16. package/lib/esm/Importer/index.js +2 -2
  17. package/lib/esm/common/Table/TableActions/CustomActions/CustomActions.d.ts +1 -0
  18. package/lib/esm/common/Table/TableActions/CustomActions/CustomActions.js +81 -0
  19. package/lib/esm/common/Table/TableActions/CustomActions/index.d.ts +1 -0
  20. package/lib/esm/common/Table/TableActions/CustomActions/index.js +1 -0
  21. package/lib/esm/common/Table/TableActions/FilterByErrors/FilterByErrors.js +2 -2
  22. package/lib/esm/common/Table/TableActions/RowFilters.js +4 -4
  23. package/lib/esm/common/Table/TableActions/SearchRows.js +6 -5
  24. package/lib/esm/common/Table/TableActions/TableActions.js +2 -1
  25. package/lib/esm/common/Table/TableActions/TransformedRecordsCount.js +15 -3
  26. package/lib/esm/common/Table/TableActions/icons.d.ts +1 -0
  27. package/lib/esm/common/Table/TableActions/icons.js +1 -0
  28. package/lib/esm/common/columnsValidations.d.ts +0 -26
  29. package/lib/esm/common/columnsValidations.js +1 -287
  30. package/lib/esm/common/datePatterns.d.ts +26 -0
  31. package/lib/esm/common/datePatterns.js +327 -0
  32. package/lib/esm/common/index.d.ts +1 -0
  33. package/lib/esm/common/index.js +1 -0
  34. package/lib/esm/common/inputs/SelectMenu.d.ts +2 -1
  35. package/lib/esm/common/inputs/SelectMenu.js +9 -2
  36. package/lib/esm/index.d.ts +3 -1
  37. package/lib/esm/index.js +9 -2
  38. package/lib/esm/locales/de.d.ts +6 -0
  39. package/lib/esm/locales/de.js +7 -1
  40. package/lib/esm/locales/en.d.ts +6 -0
  41. package/lib/esm/locales/en.js +7 -1
  42. package/lib/esm/locales/es.d.ts +6 -0
  43. package/lib/esm/locales/es.js +7 -1
  44. package/lib/esm/locales/fr.d.ts +6 -0
  45. package/lib/esm/locales/fr.js +7 -1
  46. package/lib/esm/types.d.ts +13 -4
  47. package/lib/esm/utils/index.d.ts +1 -0
  48. package/lib/esm/utils/index.js +4 -0
  49. package/lib/main.js +10 -10
  50. package/package.json +1 -1
@@ -42,7 +42,7 @@ var Content = styled(Div)(templateObject_3 || (templateObject_3 = __makeTemplate
42
42
  return css(templateObject_2 || (templateObject_2 = __makeTemplateObject(["\n background-color: ", ";\n flex: ", ";\n "], ["\n background-color: ", ";\n flex: ", ";\n "])), colors.backgroundInterface, inTrialMode ? "none" : 1);
43
43
  });
44
44
  export var ImporterWithContext = function () {
45
- var _a = useImporterContext(), inTrialMode = _a.inTrialMode, currentStepIndex = _a.currentStepIndex, matcherSubstep = _a.matcherSubstep, templateHeaders = _a.templateHeaders, theme = _a.theme, logoURL = _a.logoURL, previewFirstTime = _a.previewFirstTime, headerRowIndex = _a.headerRowIndex, initialRecords = _a.initialRecords, _b = _a.importerOptions, zIndex = _b.zIndex, previewMode = _b.previewMode;
45
+ var _a = useImporterContext(), inTrialMode = _a.inTrialMode, currentStepIndex = _a.currentStepIndex, matcherSubstep = _a.matcherSubstep, templateHeaders = _a.templateHeaders, theme = _a.theme, logoURL = _a.logoURL, previewFirstTime = _a.previewFirstTime, initialRecords = _a.initialRecords, _b = _a.importerOptions, zIndex = _b.zIndex, previewMode = _b.previewMode;
46
46
  var layoutRef = useRef(null);
47
47
  var t = useTranslation().t;
48
48
  useEffect(function () {
@@ -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) {
@@ -63,7 +63,7 @@ var rowIsEmpty = function (row) {
63
63
  };
64
64
  export var SpreadsheetRowCheckboxes = function (_a) {
65
65
  var height = _a.height, gridRef = _a.gridRef, isLoadingData = _a.isLoadingData, props = __rest(_a, ["height", "gridRef", "isLoadingData"]);
66
- var _b = useSpreadsheetContext(), data = _b.data, selectedRows = _b.selectedRows, options = _b.options, lastClickedIndexRef = _b.lastClickedIndexRef, setSelectedRows = _b.setSelectedRows, checkboxColumnWidth = _b.checkboxColumnWidth;
66
+ var _b = useSpreadsheetContext(), data = _b.data, selectedRows = _b.selectedRows, options = _b.options, lastClickedIndexRef = _b.lastClickedIndexRef, setSelectedRows = _b.setSelectedRows, checkboxColumnWidth = _b.checkboxColumnWidth, isTransformTooltipOpened = _b.isTransformTooltipOpened;
67
67
  var currentStepIndex = useImporterContext().currentStepIndex;
68
68
  var nonEmptyRows = useMemo(function () { return data.filter(function (row) { return !rowIsEmpty(row); }); }, [
69
69
  data,
@@ -71,6 +71,8 @@ export var SpreadsheetRowCheckboxes = function (_a) {
71
71
  var isIndeterminate = selectedRows.length > 0 && selectedRows.length < nonEmptyRows.length;
72
72
  var handleRowSelect = function (checked, rowIndex, rowMetaId) {
73
73
  var _a, _b;
74
+ if (isTransformTooltipOpened)
75
+ return;
74
76
  var lastRowMetaId = data[data.length - 1]._meta.id;
75
77
  var isLastRow = rowMetaId === lastRowMetaId;
76
78
  var isLastRowAndEmpty = isLastRow && rowIsEmpty(data[rowIndex]);
@@ -93,6 +95,8 @@ export var SpreadsheetRowCheckboxes = function (_a) {
93
95
  };
94
96
  var handleSelectMultipleRows = function (rowIndex) {
95
97
  var _a, _b;
98
+ if (isTransformTooltipOpened)
99
+ return;
96
100
  var clickedRowId = (_b = (_a = data[rowIndex]) === null || _a === void 0 ? void 0 : _a._meta) === null || _b === void 0 ? void 0 : _b.id;
97
101
  if (selectedRows.includes(clickedRowId)) {
98
102
  // The clicked row is already selected, so we have to remove it
@@ -129,6 +133,8 @@ export var SpreadsheetRowCheckboxes = function (_a) {
129
133
  }
130
134
  };
131
135
  var handleSelectAllRows = function (checked) {
136
+ if (isTransformTooltipOpened)
137
+ return;
132
138
  if (checked) {
133
139
  var allRows = data
134
140
  .filter(function (row) {
@@ -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 {};
@@ -51,7 +51,7 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
51
51
  };
52
52
  import { jsx as _jsx } from "react/jsx-runtime";
53
53
  import { debounce, get } from "lodash";
54
- import { useCallback, useState } from "react";
54
+ import { useCallback, useEffect, useState } from "react";
55
55
  import styled, { css } from "styled-components";
56
56
  import { TooltipProvider } from "../../../../../common/TooltipProvider";
57
57
  import { Div } from "../../../../../styled/utils";
@@ -62,6 +62,11 @@ export var useSpreadsheetField = function (name, record, fieldType) {
62
62
  var _b = useState(record[name]), value = _b[0], setValue = _b[1];
63
63
  var validationError = get(errors, "".concat(record._meta.id, ".").concat(name), null);
64
64
  var validationWarning = get(warnings, "".concat(record._meta.id, ".").concat(name), null);
65
+ useEffect(function () {
66
+ if (record[name] !== value) {
67
+ setValue(record[name]);
68
+ }
69
+ }, [record[name]]);
65
70
  var updateData = useCallback(debounce(function (value) { return __awaiter(void 0, void 0, void 0, function () {
66
71
  var newRecord;
67
72
  var _a;
@@ -82,27 +87,33 @@ export var useSpreadsheetField = function (name, record, fieldType) {
82
87
  validationWarning: validationWarning,
83
88
  };
84
89
  };
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
90
+ 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) {
91
+ var defaultFieldWidth = _a.defaultFieldWidth;
92
+ return defaultFieldWidth ? "".concat(defaultFieldWidth, "px") : "100%";
93
+ }, function (_a) {
94
+ var expandedFieldWidth = _a.expandedFieldWidth;
95
+ return expandedFieldWidth && css(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n position: absolute;\n "], ["\n position: absolute;\n "])));
96
+ }, function (_a) {
97
+ var expandedFieldWidth = _a.expandedFieldWidth, isHighlighted = _a.isHighlighted, theme = _a.theme, shouldExpandInput = _a.shouldExpandInput;
98
+ 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
99
  ? theme.colors.white
89
- : theme.colors.blue100);
100
+ : theme.colors.blue100, function (p) { return p.theme.colors.blue500; }, expandedFieldWidth || "auto");
90
101
  }, 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; });
102
+ 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
103
  }, 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; });
104
+ 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
105
  }, 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; });
106
+ 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
107
  }, function (p) {
97
- return p.isReadOnly && css(templateObject_5 || (templateObject_5 = __makeTemplateObject(["\n pointer-events: none;\n "], ["\n pointer-events: none;\n "])));
108
+ return p.isReadOnly && css(templateObject_6 || (templateObject_6 = __makeTemplateObject(["\n pointer-events: none;\n "], ["\n pointer-events: none;\n "])));
98
109
  });
99
110
  var Wrapper = styled(Div)(function (_a) {
100
111
  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 "]))));
112
+ return css(templateObject_9 || (templateObject_9 = __makeTemplateObject(["\n ", "\n "], ["\n ", "\n "])), isLoading && css(templateObject_8 || (templateObject_8 = __makeTemplateObject(["\n pointer-events: none;\n "], ["\n pointer-events: none;\n "]))));
102
113
  });
103
114
  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;
115
+ var validationError = _a.validationError, validationWarning = _a.validationWarning, children = _a.children, isHighlighted = _a.isHighlighted, expandedFieldWidth = _a.expandedFieldWidth, shouldExpandInput = _a.shouldExpandInput, defaultFieldWidth = _a.defaultFieldWidth;
105
116
  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 })) })) })) })));
117
+ 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
118
  };
108
- var templateObject_1, templateObject_2, templateObject_3, templateObject_4, templateObject_5, templateObject_6, templateObject_7, templateObject_8;
119
+ 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
+ };
@@ -68,14 +68,22 @@ export var useValidationState = function (_a) {
68
68
  setWarnings: setWarnings,
69
69
  }).deleteRecords;
70
70
  // Validate record and update dataSet
71
- var updateRecordAndRevalidate = useCallback(function (record) { return __awaiter(void 0, void 0, void 0, function () {
72
- var recordId, newDataSet, data, _a, recordErrors, recordWarnings, hasError, hasWarning;
73
- var _b;
74
- return __generator(this, function (_c) {
75
- switch (_c.label) {
71
+ var updateRecordAndRevalidate = useCallback(function (records) { return __awaiter(void 0, void 0, void 0, function () {
72
+ var recordsArray, newDataSet, errorUpdates, warningUpdates, i, record, recordId, data, _a, recordErrors, recordWarnings, hasError, hasWarning;
73
+ return __generator(this, function (_b) {
74
+ switch (_b.label) {
76
75
  case 0:
76
+ recordsArray = Array.isArray(records) ? records : [records];
77
+ newDataSet = __assign({}, dataSet);
78
+ errorUpdates = {};
79
+ warningUpdates = {};
80
+ i = 0;
81
+ _b.label = 1;
82
+ case 1:
83
+ if (!(i < recordsArray.length)) return [3 /*break*/, 4];
84
+ record = recordsArray[i];
77
85
  recordId = record._meta.id;
78
- newDataSet = __assign(__assign({}, dataSet), (_b = {}, _b[recordId] = __assign({}, record), _b));
86
+ newDataSet[recordId] = __assign({}, record);
79
87
  // 'touched' should be set before validation
80
88
  newDataSet[recordId]._meta.touched = true;
81
89
  data = Object.values(newDataSet);
@@ -86,25 +94,46 @@ export var useValidationState = function (_a) {
86
94
  fields: fields,
87
95
  record: record,
88
96
  })];
89
- case 1:
90
- _a = _c.sent(), recordErrors = _a.errors, recordWarnings = _a.warnings;
97
+ case 2:
98
+ _a = _b.sent(), recordErrors = _a.errors, recordWarnings = _a.warnings;
91
99
  hasError = checkIfHasErrors(recordErrors);
92
100
  hasWarning = checkIfHasErrors(recordWarnings);
93
101
  newDataSet[recordId]._meta.isInvalid = hasError;
94
102
  newDataSet[recordId]._meta.hasWarning = hasWarning;
103
+ errorUpdates = hasError
104
+ ? set(errorUpdates, recordId, recordErrors)
105
+ : omit(errorUpdates, recordId);
106
+ warningUpdates = hasWarning
107
+ ? set(warningUpdates, recordId, recordWarnings)
108
+ : omit(warningUpdates, recordId);
109
+ _b.label = 3;
110
+ case 3:
111
+ i++;
112
+ return [3 /*break*/, 1];
113
+ case 4:
95
114
  setErrors(function (errors) {
96
- var newErrors = __assign({}, errors);
97
- var newState = hasError
98
- ? set(newErrors, recordId, recordErrors)
99
- : omit(newErrors, recordId);
100
- return newState;
115
+ var currentErrors = __assign({}, errors);
116
+ var newErrors = {};
117
+ for (var errorId in errorUpdates) {
118
+ var updatedError = errorUpdates[errorId];
119
+ var hasUpdatedError = updatedError && Object.keys(updatedError).length > 0;
120
+ newErrors = hasUpdatedError
121
+ ? set(currentErrors, errorId, updatedError)
122
+ : omit(currentErrors, errorId);
123
+ }
124
+ return newErrors;
101
125
  });
102
126
  setWarnings(function (warnings) {
103
- var newWarnings = __assign({}, warnings);
104
- var newState = hasWarning
105
- ? set(newWarnings, recordId, recordWarnings)
106
- : omit(newWarnings, recordId);
107
- return newState;
127
+ var currentWarnings = __assign({}, warnings);
128
+ var newWarnings = {};
129
+ for (var warningId in warningUpdates) {
130
+ var updatedWarning = warningUpdates[warningId];
131
+ var hasUpdatedWarning = updatedWarning && Object.keys(updatedWarning).length > 0;
132
+ newWarnings = hasUpdatedWarning
133
+ ? set(currentWarnings, warningId, updatedWarning)
134
+ : omit(currentWarnings, warningId);
135
+ }
136
+ return newWarnings;
108
137
  });
109
138
  setDataSet(newDataSet); //Update the dataSet
110
139
  return [2 /*return*/];
@@ -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 = {
@@ -1,6 +1,6 @@
1
1
  import Fuse from "fuse.js";
2
2
  import React from "react";
3
- import { FormatRecord, ImporterOptions, Integration, OnSubmit, OnValidateRecord, Record, TemplateHeader } from "../../types";
3
+ import { CustomAction, FormatRecord, ImporterOptions, Integration, OnSubmit, OnValidateRecord, Record, TemplateHeader } from "../../types";
4
4
  import { FuseApi } from "../common/FuseApi";
5
5
  export declare const fusejsOptions: Fuse.IFuseOptions<string>;
6
6
  export type HeaderMatchings = {
@@ -56,6 +56,7 @@ export type State = {
56
56
  isUsingManualImport: React.MutableRefObject<boolean>;
57
57
  resetImporterWhenUsingManualImport: () => void;
58
58
  manualDataImportSelected: () => void;
59
+ customActions: CustomAction[];
59
60
  };
60
61
  export type Props = {
61
62
  templateSlug: string;
@@ -68,6 +69,7 @@ export type Props = {
68
69
  formatRecord: FormatRecord;
69
70
  onValidateRecord?: OnValidateRecord;
70
71
  dynamicColumns: TemplateHeader[] | null;
72
+ customActions: CustomAction[];
71
73
  };
72
- export declare const ImporterContextProvider: ({ templateSlug, initialRecords, apiToken, children, options, onSubmit, onClose, formatRecord, onValidateRecord, dynamicColumns, }: Props) => JSX.Element;
74
+ export declare const ImporterContextProvider: ({ templateSlug, initialRecords, apiToken, children, options, onSubmit, onClose, formatRecord, onValidateRecord, dynamicColumns, customActions, }: Props) => JSX.Element;
73
75
  export declare const useImporterContext: () => State;
@@ -67,7 +67,7 @@ export var fusejsOptions = {
67
67
  };
68
68
  var ImporterContext = createContext({});
69
69
  export var ImporterContextProvider = function (_a) {
70
- var templateSlug = _a.templateSlug, initialRecords = _a.initialRecords, apiToken = _a.apiToken, children = _a.children, options = _a.options, onSubmit = _a.onSubmit, onClose = _a.onClose, formatRecord = _a.formatRecord, onValidateRecord = _a.onValidateRecord, dynamicColumns = _a.dynamicColumns;
70
+ var templateSlug = _a.templateSlug, initialRecords = _a.initialRecords, apiToken = _a.apiToken, children = _a.children, options = _a.options, onSubmit = _a.onSubmit, onClose = _a.onClose, formatRecord = _a.formatRecord, onValidateRecord = _a.onValidateRecord, dynamicColumns = _a.dynamicColumns, customActions = _a.customActions;
71
71
  var _b = useState(initialRecords ? 2 : 0), currentStepIndex = _b[0], setCurrentStepIndex = _b[1];
72
72
  var _c = useState(0), matcherSubstep = _c[0], setMatcherSubstep = _c[1];
73
73
  var _d = useState(null), templateError = _d[0], setTemplateError = _d[1];
@@ -241,6 +241,7 @@ export var ImporterContextProvider = function (_a) {
241
241
  isUsingManualImport: isUsingManualImport,
242
242
  resetImporterWhenUsingManualImport: resetImporterWhenUsingManualImport,
243
243
  manualDataImportSelected: manualDataImportSelected,
244
+ customActions: customActions,
244
245
  };
245
246
  return (_jsx(ImporterContext.Provider, __assign({ value: value }, { children: children })));
246
247
  };
@@ -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
  };
@@ -1,4 +1,4 @@
1
- import { FormatRecord, ImporterOptions, OnSubmit, OnValidateRecord, TemplateHeader } from "../types";
1
+ import { CustomAction, FormatRecord, ImporterOptions, OnSubmit, OnValidateRecord, TemplateHeader } from "../types";
2
2
  export declare const ACCOUNT_ROUTES: {
3
3
  TEMPLATES: string;
4
4
  };
@@ -11,11 +11,12 @@ type ImporterProps = {
11
11
  previewMode?: boolean;
12
12
  formatRecord: FormatRecord;
13
13
  onValidateRecord?: OnValidateRecord;
14
+ dynamicColumns: TemplateHeader[];
15
+ customActions: CustomAction[];
14
16
  onSubmit?: OnSubmit;
15
17
  onClose: () => void;
16
- dynamicColumns: TemplateHeader[];
17
18
  };
18
- declare const Importer: ({ templateSlug, apiToken, options, formatRecord, onValidateRecord, onSubmit, onClose, dynamicColumns, }: ImporterProps) => JSX.Element;
19
+ declare const Importer: ({ templateSlug, apiToken, options, formatRecord, onValidateRecord, dynamicColumns, customActions, onSubmit, onClose, }: ImporterProps) => JSX.Element;
19
20
  export * from "./common/Spreadsheet";
20
21
  export * from "./common/utils";
21
22
  export * from "./Review/ReviewContextProvider";
@@ -19,8 +19,8 @@ export var ACCOUNT_VIEW_PATH = "/account";
19
19
  var p = function (path) { return "".concat(ACCOUNT_VIEW_PATH).concat(path); };
20
20
  export var TEMPLATES_ROUTE = p(ACCOUNT_ROUTES.TEMPLATES);
21
21
  var Importer = function (_a) {
22
- var templateSlug = _a.templateSlug, apiToken = _a.apiToken, options = _a.options, formatRecord = _a.formatRecord, onValidateRecord = _a.onValidateRecord, onSubmit = _a.onSubmit, onClose = _a.onClose, dynamicColumns = _a.dynamicColumns;
23
- return (_jsx(ImporterContextProvider, __assign({ initialRecords: options.records, options: options, templateSlug: templateSlug, apiToken: apiToken, formatRecord: formatRecord, onValidateRecord: onValidateRecord, onClose: onClose, onSubmit: onSubmit, dynamicColumns: dynamicColumns }, { children: _jsx(ImporterWithContext, {}) })));
22
+ var templateSlug = _a.templateSlug, apiToken = _a.apiToken, options = _a.options, formatRecord = _a.formatRecord, onValidateRecord = _a.onValidateRecord, dynamicColumns = _a.dynamicColumns, customActions = _a.customActions, onSubmit = _a.onSubmit, onClose = _a.onClose;
23
+ return (_jsx(ImporterContextProvider, __assign({ initialRecords: options.records, options: options, templateSlug: templateSlug, apiToken: apiToken, formatRecord: formatRecord, onValidateRecord: onValidateRecord, onClose: onClose, onSubmit: onSubmit, dynamicColumns: dynamicColumns, customActions: customActions }, { children: _jsx(ImporterWithContext, {}) })));
24
24
  };
25
25
  export * from "./common/Spreadsheet";
26
26
  export * from "./common/utils";
@@ -0,0 +1 @@
1
+ export declare const CustomActions: () => JSX.Element;