fuse-importer 0.1.2-testing → 0.1.4-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 (41) hide show
  1. package/lib/esm/Importer/ImporterWithContext.d.ts +2 -0
  2. package/lib/esm/Importer/ImporterWithContext.js +12 -8
  3. package/lib/esm/Importer/Matcher/index.js +0 -11
  4. package/lib/esm/Importer/Review/ReviewContextProvider.js +55 -14
  5. package/lib/esm/Importer/Stepper/common/getEnumFieldValueMatchingsInitialValue.js +7 -4
  6. package/lib/esm/Importer/Stepper/index.js +61 -2
  7. package/lib/esm/Importer/Uploader/DragAndDropImporter/ImporterDropzone.js +19 -11
  8. package/lib/esm/Importer/common/Spreadsheet/SpreadsheetContextProvider/filterMethods.js +2 -9
  9. package/lib/esm/Importer/common/Spreadsheet/SpreadsheetContextProvider/index.d.ts +2 -3
  10. package/lib/esm/Importer/common/Spreadsheet/SpreadsheetContextProvider/index.js +66 -15
  11. package/lib/esm/Importer/common/Spreadsheet/SpreadsheetContextProvider/useSpreadsheetFilter.d.ts +1 -1
  12. package/lib/esm/Importer/common/Spreadsheet/SpreadsheetContextProvider/utils.d.ts +1 -0
  13. package/lib/esm/Importer/common/Spreadsheet/SpreadsheetContextProvider/utils.js +7 -0
  14. package/lib/esm/Importer/common/Spreadsheet/components/SpreadsheetData.js +2 -2
  15. package/lib/esm/Importer/common/Spreadsheet/components/SpreadsheetRowCheckboxes.js +1 -7
  16. package/lib/esm/Importer/common/Spreadsheet/components/fields/SpreadsheetInput.js +1 -1
  17. package/lib/esm/Importer/common/Spreadsheet/components/fields/index.js +16 -15
  18. package/lib/esm/Importer/common/Spreadsheet/hooks.d.ts +1 -2
  19. package/lib/esm/Importer/common/Spreadsheet/hooks.js +21 -39
  20. package/lib/esm/Importer/common/Spreadsheet/transformation/transformators.js +1 -25
  21. package/lib/esm/Importer/contexts/ImporterContextProvider.d.ts +3 -3
  22. package/lib/esm/Importer/contexts/ImporterContextProvider.js +31 -20
  23. package/lib/esm/common/Table/TableActions/CustomActions/CustomActions.js +81 -31
  24. package/lib/esm/common/Table/TableActions/DeleteSelectedRows.js +9 -1
  25. package/lib/esm/common/Table/TableActions/RowFilters.js +10 -6
  26. package/lib/esm/common/columnsTransformations.js +0 -8
  27. package/lib/esm/common/datePatterns.js +10 -10
  28. package/lib/esm/common/inputs/SelectMenu.js +6 -2
  29. package/lib/esm/common/inputs/TextInput.js +1 -1
  30. package/lib/esm/locales/de.d.ts +2 -1
  31. package/lib/esm/locales/de.js +2 -1
  32. package/lib/esm/locales/en.d.ts +2 -1
  33. package/lib/esm/locales/en.js +2 -1
  34. package/lib/esm/locales/es.d.ts +2 -1
  35. package/lib/esm/locales/es.js +2 -1
  36. package/lib/esm/locales/fr.d.ts +2 -1
  37. package/lib/esm/locales/fr.js +2 -1
  38. package/lib/esm/types.d.ts +17 -5
  39. package/lib/esm/types.js +0 -1
  40. package/lib/main.js +24 -24
  41. package/package.json +1 -1
@@ -1,6 +1,8 @@
1
1
  type LayoutProps = {
2
2
  zIndex: number;
3
+ isModal?: boolean;
3
4
  };
4
5
  export declare const Layout: import("styled-components").StyledComponent<"div", import("styled-components").DefaultTheme, import("../styled").CSSProps & LayoutProps, never>;
6
+ export declare const Backdrop: import("styled-components").StyledComponent<"div", import("styled-components").DefaultTheme, {}, never>;
5
7
  export declare const ImporterWithContext: () => JSX.Element;
6
8
  export {};
@@ -32,17 +32,21 @@ import { Footer } from "./common/Footer";
32
32
  import { GlobalStyle } from "./common/GlobalStyle";
33
33
  import { ImporterFonts } from "./common/ImporterFonts";
34
34
  import { useImporterContext } from "./contexts/ImporterContextProvider";
35
- import { AppLoadingContextProvider } from "../common/AppLoadingContextProvider";
36
- export var Layout = styled(Div)(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n background: ", ";\n display: flex;\n flex-direction: column;\n height: 100vh;\n left: 0;\n overflow-y: auto;\n position: fixed;\n top: 0;\n width: 100vw;\n z-index: ", ";\n ", ";\n"], ["\n background: ", ";\n display: flex;\n flex-direction: column;\n height: 100vh;\n left: 0;\n overflow-y: auto;\n position: fixed;\n top: 0;\n width: 100vw;\n z-index: ", ";\n ", ";\n"])), function (_a) {
35
+ import { AppLoadingContextProvider, } from "../common/AppLoadingContextProvider";
36
+ export var Layout = styled(Div)(templateObject_3 || (templateObject_3 = __makeTemplateObject(["\n background: ", ";\n display: flex;\n flex-direction: column;\n position: fixed;\n z-index: ", ";\n ", ";\n ", "\n"], ["\n background: ", ";\n display: flex;\n flex-direction: column;\n position: fixed;\n z-index: ", ";\n ", ";\n ", "\n"])), function (_a) {
37
37
  var theme = _a.theme;
38
38
  return theme.colors.backgroundInterface;
39
- }, function (p) { return p.zIndex; }, function (p) { return p.theme.css.scrollbarDark; });
40
- var Content = styled(Div)(templateObject_3 || (templateObject_3 = __makeTemplateObject(["\n ", "\n"], ["\n ", "\n"])), function (_a) {
39
+ }, function (p) { return p.zIndex; }, function (p) { return p.theme.css.scrollbarDark; }, function (p) {
40
+ return p.isModal
41
+ ? css(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n top: 27px;\n bottom: 27px;\n left: 29px;\n right: 29px;\n border-radius: 4px;\n overflow: hidden;\n "], ["\n top: 27px;\n bottom: 27px;\n left: 29px;\n right: 29px;\n border-radius: 4px;\n overflow: hidden;\n "]))) : css(templateObject_2 || (templateObject_2 = __makeTemplateObject(["\n height: 100vh;\n width: 100vw;\n top: 0;\n left: 0;\n overflow-y: auto;\n "], ["\n height: 100vh;\n width: 100vw;\n top: 0;\n left: 0;\n overflow-y: auto;\n "])));
42
+ });
43
+ export var Backdrop = styled.div(templateObject_4 || (templateObject_4 = __makeTemplateObject(["\n background: rgba(0, 0, 0, 0.75); // Opaque black\n position: fixed;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n z-index: -1;\n"], ["\n background: rgba(0, 0, 0, 0.75); // Opaque black\n position: fixed;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n z-index: -1;\n"])));
44
+ var Content = styled(Div)(templateObject_6 || (templateObject_6 = __makeTemplateObject(["\n ", "\n"], ["\n ", "\n"])), function (_a) {
41
45
  var colors = _a.theme.colors, inTrialMode = _a.inTrialMode;
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);
46
+ return css(templateObject_5 || (templateObject_5 = __makeTemplateObject(["\n background-color: ", ";\n flex: ", ";\n "], ["\n background-color: ", ";\n flex: ", ";\n "])), colors.backgroundInterface, inTrialMode ? "none" : 1);
43
47
  });
44
48
  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, initialRecords = _a.initialRecords, _b = _a.importerOptions, zIndex = _b.zIndex, previewMode = _b.previewMode;
49
+ 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, isModal = _b.modal;
46
50
  var layoutRef = useRef(null);
47
51
  var t = useTranslation().t;
48
52
  useEffect(function () {
@@ -58,6 +62,6 @@ export var ImporterWithContext = function () {
58
62
  return (_jsxs(_Fragment, { children: [_jsxs(Div, { children: [previewMode && _jsx(PreviewModeBanner, {}), !previewMode && _jsx(TrialModeBanner, {}), _jsx(Stepper, { stepLabels: stepLabels, logoURL: logoURL })] }), _jsxs(Content, { children: [currentStepIndex === 0 && _jsx(Uploader, {}), currentStepIndex === 1 && _jsx(Matcher, {}), currentStepIndex === 2 && templateHeaders && _jsx(Review, {})] }), inTrialMode && (_jsx(Content, __assign({ inTrialMode: inTrialMode }, { children: _jsx(Footer, {}) })))] }));
59
63
  }
60
64
  var shouldShowPreviewFirstTime = previewFirstTime && previewMode;
61
- return (_jsx(ThemeProvider, __assign({ theme: theme }, { children: _jsxs(AppLoadingContextProvider, { children: [_jsx(Toast, {}), _jsx(GlobalStyle, {}), _jsx(ImporterFonts, {}), templateHeaders ? (_jsx(ReviewContextProvider, __assign({ initialRecords: initialRecords }, { children: _jsx(Layout, __assign({ zIndex: zIndex, ref: layoutRef }, { children: shouldShowPreviewFirstTime ? (_jsx(PreviewFirstTime, {})) : (renderContent()) })) }))) : (_jsx(AppLoading, {}))] }) })));
65
+ return (_jsx(ThemeProvider, __assign({ theme: theme }, { children: _jsxs(AppLoadingContextProvider, { children: [_jsx(Toast, {}), _jsx(GlobalStyle, {}), _jsx(ImporterFonts, {}), templateHeaders ? (_jsx(ReviewContextProvider, __assign({ initialRecords: initialRecords }, { children: _jsxs(_Fragment, { children: [isModal && _jsx(Backdrop, {}), _jsx(Layout, __assign({ zIndex: zIndex, ref: layoutRef, isModal: isModal }, { children: shouldShowPreviewFirstTime ? (_jsx(PreviewFirstTime, {})) : (renderContent()) }))] }) }))) : (_jsx(AppLoading, {}))] }) })));
62
66
  };
63
- var templateObject_1, templateObject_2, templateObject_3;
67
+ var templateObject_1, templateObject_2, templateObject_3, templateObject_4, templateObject_5, templateObject_6;
@@ -1,22 +1,11 @@
1
- var __makeTemplateObject = (this && this.__makeTemplateObject) || function (cooked, raw) {
2
- if (Object.defineProperty) { Object.defineProperty(cooked, "raw", { value: raw }); } else { cooked.raw = raw; }
3
- return cooked;
4
- };
5
1
  import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
6
2
  import React from "react";
7
- import styled, { css } from "styled-components";
8
- import { Div } from "../../styled/utils";
9
3
  import { useImporterContext } from "../contexts/ImporterContextProvider";
10
4
  import { HeaderMatcher } from "./HeaderMatcher";
11
5
  import { EnumFieldsMatchers } from "./EnumFieldsMatchers";
12
6
  import { areEqual } from "react-window";
13
- var Dot = styled(Div)(function (_a) {
14
- var colors = _a.theme.colors, isSelected = _a.isSelected;
15
- return css(templateObject_2 || (templateObject_2 = __makeTemplateObject(["\n height: 8px;\n width: 8px;\n border-radius: 100%;\n background: ", ";\n ", "\n "], ["\n height: 8px;\n width: 8px;\n border-radius: 100%;\n background: ", ";\n ", "\n "])), colors.outlineInputs, isSelected && css(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n height: 12px;\n width: 12px;\n background: ", ";\n "], ["\n height: 12px;\n width: 12px;\n background: ", ";\n "])), colors.highlight01));
16
- });
17
7
  var Matcher = function () {
18
8
  var matcherSubstep = useImporterContext().matcherSubstep;
19
9
  return (_jsxs(_Fragment, { children: [matcherSubstep === 0 && _jsx(HeaderMatcher, {}), matcherSubstep === 1 && _jsx(EnumFieldsMatchers, {})] }));
20
10
  };
21
11
  export default React.memo(Matcher, areEqual);
22
- var templateObject_1, templateObject_2;
@@ -71,7 +71,7 @@ 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";
74
- import { useImporterContext } from "../contexts/ImporterContextProvider";
74
+ import { useImporterContext, } from "../contexts/ImporterContextProvider";
75
75
  import { transformToRecords } from "../data/index";
76
76
  import { getPreviewDataSet, getReviewDataSet, getTemplateFields, recordListToDataSet, } from "../data";
77
77
  import { useAppLoadingContext } from "../../common/AppLoadingContextProvider";
@@ -98,6 +98,41 @@ var trackImportedRowsCount = function (fuseApi, templateSlug, rowCount) { return
98
98
  }
99
99
  });
100
100
  }); };
101
+ var buildColumnMappingsFromHeaderMatchings = function (templateHeaders, templateHeaderMatchings, columnMappingsAttributes) {
102
+ return templateHeaders.map(function (column) {
103
+ var existingMatching = columnMappingsAttributes.find(function (matching) {
104
+ return matching.template_column_name === column.label &&
105
+ matching.matched_column_name === templateHeaderMatchings[column.label];
106
+ });
107
+ var mappedColumn = {
108
+ matched_column_name: templateHeaderMatchings[column.label],
109
+ template_column_name: column.label,
110
+ };
111
+ if (existingMatching) {
112
+ mappedColumn.id = existingMatching.id;
113
+ }
114
+ return mappedColumn;
115
+ });
116
+ };
117
+ var saveMappedColumns = function (columnMappings, fuseApi, templateSlug) { return __awaiter(void 0, void 0, void 0, function () {
118
+ var error_2;
119
+ return __generator(this, function (_a) {
120
+ switch (_a.label) {
121
+ case 0:
122
+ _a.trys.push([0, 2, , 3]);
123
+ return [4 /*yield*/, fuseApi.patch("/api/v1/templates/".concat(templateSlug), {
124
+ column_mappings_attributes: columnMappings,
125
+ })];
126
+ case 1:
127
+ _a.sent();
128
+ return [3 /*break*/, 3];
129
+ case 2:
130
+ error_2 = _a.sent();
131
+ throw new Error("There was an error trying to save column mappings");
132
+ case 3: return [2 /*return*/];
133
+ }
134
+ });
135
+ }); };
101
136
  var getImportWasSuccessful = function (response) {
102
137
  return !response.errors || !Object.keys(response.errors).length;
103
138
  };
@@ -132,7 +167,7 @@ function csvExport(data) {
132
167
  }
133
168
  export var ReviewContextProvider = function (_a) {
134
169
  var initialRecords = _a.initialRecords, children = _a.children;
135
- var _b = useImporterContext(), templateHeaderMatchings = _b.templateHeaderMatchings, enumFieldValueMatchings = _b.enumFieldValueMatchings, templateHeaders = _b.templateHeaders, uploadedDataHeaders = _b.uploadedDataHeaders, headerRowIndex = _b.headerRowIndex, uploadedData = _b.uploadedData, currentStepIndex = _b.currentStepIndex, integrations = _b.integrations, templateSlug = _b.templateSlug, fuseApi = _b.fuseApi, setSelectedRows = _b.setSelectedRows, _c = _b.importerOptions, disableSubmitIfInvalid = _c.disableSubmitIfInvalid, batchValidationDelayMs = _c.batchValidationDelayMs, batchValidationSize = _c.batchValidationSize, previewMode = _c.previewMode, loadingComponent = _c.loadingComponent, onSubmit = _b.onSubmit, onValidateRecord = _b.onValidateRecord, formatRecord = _b.formatRecord, selectedRows = _b.selectedRows;
170
+ var _b = useImporterContext(), templateHeaderMatchings = _b.templateHeaderMatchings, enumFieldValueMatchings = _b.enumFieldValueMatchings, templateHeaders = _b.templateHeaders, uploadedDataHeaders = _b.uploadedDataHeaders, headerRowIndex = _b.headerRowIndex, uploadedData = _b.uploadedData, currentStepIndex = _b.currentStepIndex, integrations = _b.integrations, templateSlug = _b.templateSlug, fuseApi = _b.fuseApi, setSelectedRows = _b.setSelectedRows, _c = _b.importerOptions, disableSubmitIfInvalid = _c.disableSubmitIfInvalid, batchValidationDelayMs = _c.batchValidationDelayMs, batchValidationSize = _c.batchValidationSize, previewMode = _c.previewMode, loadingComponent = _c.loadingComponent, onSubmit = _b.onSubmit, onValidateRecord = _b.onValidateRecord, formatRecord = _b.formatRecord, selectedRows = _b.selectedRows, columnMappingsAttributes = _b.columnMappingsAttributes;
136
171
  var setIsLoadingApp = useAppLoadingContext().setIsLoadingApp;
137
172
  var _d = useState(false), isSubmitting = _d[0], setIsSubmitting = _d[1];
138
173
  var _e = useState(false), isSubmitDisabled = _e[0], setIsSubmitDisabled = _e[1];
@@ -166,11 +201,11 @@ export var ReviewContextProvider = function (_a) {
166
201
  }
167
202
  }, [reviewFields, selectedRows]);
168
203
  var onSubmitData = useCallback(function () { return __awaiter(void 0, void 0, void 0, function () {
169
- var dataSet, dataSetValues, validDataSetValues, validDataSetLength, invalidRecords_1, applicationResponse, isAppResponseSuccessful, _a, errors, isDataValid, recordsToDisplayFiltered, invalidDataSet, error_2;
204
+ var dataSet, dataSetValues, validDataSetValues, validDataSetLength, invalidRecords_1, applicationResponse, isAppResponseSuccessful, _a, errors, isDataValid, recordsToDisplayFiltered, invalidDataSet, columnMappings, error_3;
170
205
  return __generator(this, function (_b) {
171
206
  switch (_b.label) {
172
207
  case 0:
173
- _b.trys.push([0, 5, 6, 7]);
208
+ _b.trys.push([0, 6, 7, 8]);
174
209
  if (!reviewDataSetRef.current)
175
210
  return [2 /*return*/];
176
211
  setIsSubmitting(true);
@@ -202,23 +237,27 @@ export var ReviewContextProvider = function (_a) {
202
237
  invalidDataSet = recordListToDataSet(invalidRecords_1, reviewFields);
203
238
  setReviewInitialDataSet(invalidDataSet);
204
239
  setInitialDataSetUpdatedAt(Date.now());
205
- if (!!previewMode) return [3 /*break*/, 4];
240
+ if (!!previewMode) return [3 /*break*/, 5];
206
241
  return [4 /*yield*/, trackImportedRowsCount(fuseApi, templateSlug, validDataSetLength)];
207
242
  case 2:
208
243
  _b.sent();
209
244
  return [4 /*yield*/, sendRecordsToIntegrations(dataSetValues, integrations)];
210
245
  case 3:
211
246
  _b.sent();
212
- _b.label = 4;
213
- case 4: return [3 /*break*/, 7];
214
- case 5:
215
- error_2 = _b.sent();
216
- console.error(error_2);
217
- return [3 /*break*/, 7];
247
+ columnMappings = buildColumnMappingsFromHeaderMatchings(templateHeaders, templateHeaderMatchings, columnMappingsAttributes);
248
+ return [4 /*yield*/, saveMappedColumns(columnMappings, fuseApi, templateSlug)];
249
+ case 4:
250
+ _b.sent();
251
+ _b.label = 5;
252
+ case 5: return [3 /*break*/, 8];
218
253
  case 6:
254
+ error_3 = _b.sent();
255
+ console.error(error_3);
256
+ return [3 /*break*/, 8];
257
+ case 7:
219
258
  setIsSubmitting(false);
220
259
  return [7 /*endfinally*/];
221
- case 7: return [2 /*return*/];
260
+ case 8: return [2 /*return*/];
222
261
  }
223
262
  });
224
263
  }); }, [reviewFields, onSubmit]);
@@ -242,7 +281,9 @@ export var ReviewContextProvider = function (_a) {
242
281
  reviewDataSetRef.current = null;
243
282
  return;
244
283
  }
245
- var sleep = function (n) { return new Promise(function (resolve) { return setTimeout(resolve, n); }); };
284
+ var sleep = function (n) {
285
+ return new Promise(function (resolve) { return setTimeout(resolve, n); });
286
+ };
246
287
  if (currentStepIndex === 0) {
247
288
  if (!previewInitialDataSet) {
248
289
  //Uploader spreadsheet data
@@ -292,7 +333,7 @@ export var ReviewContextProvider = function (_a) {
292
333
  });
293
334
  }); })();
294
335
  }
295
- }, [uploadedData, currentStepIndex, templateHeaders, uploadedData]);
336
+ }, [currentStepIndex, templateHeaders, uploadedData]);
296
337
  var value = {
297
338
  previewInitialDataSet: previewInitialDataSet,
298
339
  previewFields: previewFields,
@@ -10,7 +10,10 @@ var __assign = (this && this.__assign) || function () {
10
10
  return __assign.apply(this, arguments);
11
11
  };
12
12
  import Fuse from "fuse.js";
13
- import { fusejsOptions, } from "../../contexts/ImporterContextProvider";
13
+ var fusejsOptions = {
14
+ includeScore: true,
15
+ threshold: 0.35,
16
+ };
14
17
  export var getEnumFieldValueMatchingsInitialValue = function (_a) {
15
18
  var uploadedDataEnumFieldValues = _a.uploadedDataEnumFieldValues, templateHeaders = _a.templateHeaders;
16
19
  var res = {};
@@ -18,11 +21,11 @@ export var getEnumFieldValueMatchingsInitialValue = function (_a) {
18
21
  uploadedDataEnumFieldValues[templateLabel].forEach(function (uploadedValue, _index) {
19
22
  var _a, _b;
20
23
  var templateOptions = (_a = templateHeaders.find(function (th) { return th.label === templateLabel; })) === null || _a === void 0 ? void 0 : _a.values;
21
- var fuse = new Fuse(templateOptions, fusejsOptions);
22
- var fuseResults = fuse.search(uploadedValue);
24
+ var fuzzySearch = new Fuse(templateOptions, fusejsOptions);
25
+ var fuzzySearchResults = fuzzySearch.search(uploadedValue);
23
26
  var previousRes = __assign({}, (res[templateLabel] || {}));
24
27
  res[templateLabel] = previousRes;
25
- res[templateLabel][uploadedValue] = (_b = fuseResults[0]) === null || _b === void 0 ? void 0 : _b.item;
28
+ res[templateLabel][uploadedValue] = (_b = fuzzySearchResults[0]) === null || _b === void 0 ? void 0 : _b.item;
26
29
  });
27
30
  };
28
31
  var templateLabels = Object.keys(uploadedDataEnumFieldValues);
@@ -13,8 +13,44 @@ var __assign = (this && this.__assign) || function () {
13
13
  };
14
14
  return __assign.apply(this, arguments);
15
15
  };
16
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
17
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
18
+ return new (P || (P = Promise))(function (resolve, reject) {
19
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
20
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
21
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
22
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
23
+ });
24
+ };
25
+ var __generator = (this && this.__generator) || function (thisArg, body) {
26
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
27
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
28
+ function verb(n) { return function (v) { return step([n, v]); }; }
29
+ function step(op) {
30
+ if (f) throw new TypeError("Generator is already executing.");
31
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
32
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
33
+ if (y = 0, t) op = [op[0] & 2, t.value];
34
+ switch (op[0]) {
35
+ case 0: case 1: t = op; break;
36
+ case 4: _.label++; return { value: op[1], done: false };
37
+ case 5: _.label++; y = op[1]; op = [0]; continue;
38
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
39
+ default:
40
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
41
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
42
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
43
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
44
+ if (t[2]) _.ops.pop();
45
+ _.trys.pop(); continue;
46
+ }
47
+ op = body.call(thisArg, _);
48
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
49
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
50
+ }
51
+ };
16
52
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
17
- import { useState } from "react";
53
+ import { useState, useEffect } from "react";
18
54
  import { useTranslation } from "react-i18next";
19
55
  import styled, { css } from "styled-components";
20
56
  import { Button, ChevronRightIcon, closeIconCondensed } from "../../common";
@@ -27,6 +63,7 @@ import { Step } from "./Step";
27
63
  import { StepperSubmitModal } from "./StepperSubmitModal";
28
64
  import { UnmatchedHeadersModal } from "./UnmatchedHeadersModal";
29
65
  import { getEnumFieldValueMatchingsInitialValue } from "./common/getEnumFieldValueMatchingsInitialValue";
66
+ import { useAppLoadingContext } from "../../common/AppLoadingContextProvider";
30
67
  var StepperWrapper = styled(Div)(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n background-color: ", ";\n border-bottom: 1px solid ", ";\n user-select: none;\n"], ["\n background-color: ", ";\n border-bottom: 1px solid ", ";\n user-select: none;\n"])), function (p) { return p.theme.colors.white; }, function (p) { return p.theme.colors.gray300; });
31
68
  var StepperContainer = styled(Div)(templateObject_2 || (templateObject_2 = __makeTemplateObject(["\n align-items: center;\n display: flex;\n gap: 16px;\n justify-content: space-between;\n padding-left: 32px;\n padding-right: 32px;\n width: 100%;\n"], ["\n align-items: center;\n display: flex;\n gap: 16px;\n justify-content: space-between;\n padding-left: 32px;\n padding-right: 32px;\n width: 100%;\n"])));
32
69
  var Steps = styled(Div)(templateObject_3 || (templateObject_3 = __makeTemplateObject(["\n @media (max-width: 630px) {\n display: none;\n }\n"], ["\n @media (max-width: 630px) {\n display: none;\n }\n"])));
@@ -43,8 +80,30 @@ export var Stepper = function (_a) {
43
80
  var t = useTranslation("general").t;
44
81
  var _c = useState(false), isSubmitModalOpen = _c[0], setIsSubmitModalOpen = _c[1];
45
82
  var _d = useState(false), isConfirmCloseModalOpen = _d[0], setIsConfirmCloseModalOpen = _d[1];
83
+ var setIsLoadingApp = useAppLoadingContext().setIsLoadingApp;
46
84
  var _e = useReviewContext(), appResponse = _e.appResponse, isSubmitDisabled = _e.isSubmitDisabled, onSubmit = _e.onSubmit;
47
- var _f = useImporterContext(), initialRecords = _f.initialRecords, currentStepIndex = _f.currentStepIndex, templateHeaderMatchings = _f.templateHeaderMatchings, matcherSubstep = _f.matcherSubstep, templateHeaders = _f.templateHeaders, uploadedDataEnumFieldValues = _f.uploadedDataEnumFieldValues, setEnumFieldValueMatchings = _f.setEnumFieldValueMatchings, setMatcherSubstep = _f.setMatcherSubstep, setCurrentStepIndex = _f.setCurrentStepIndex, onClose = _f.onClose, isUsingManualImport = _f.isUsingManualImport, resetImporterWhenUsingManualImport = _f.resetImporterWhenUsingManualImport, uploadedData = _f.uploadedData;
85
+ var _f = useImporterContext(), initialRecords = _f.initialRecords, currentStepIndex = _f.currentStepIndex, templateHeaderMatchings = _f.templateHeaderMatchings, matcherSubstep = _f.matcherSubstep, templateHeaders = _f.templateHeaders, uploadedDataEnumFieldValues = _f.uploadedDataEnumFieldValues, setEnumFieldValueMatchings = _f.setEnumFieldValueMatchings, setMatcherSubstep = _f.setMatcherSubstep, setCurrentStepIndex = _f.setCurrentStepIndex, onClose = _f.onClose, isUsingManualImport = _f.isUsingManualImport, resetImporterWhenUsingManualImport = _f.resetImporterWhenUsingManualImport, uploadedData = _f.uploadedData, setHeadersMappings = _f.setHeadersMappings, uploadedDataHeaders = _f.uploadedDataHeaders, fuseApi = _f.fuseApi, templateSlug = _f.templateSlug;
86
+ useEffect(function () {
87
+ (function () { return __awaiter(void 0, void 0, void 0, function () {
88
+ var mappings;
89
+ return __generator(this, function (_a) {
90
+ switch (_a.label) {
91
+ case 0:
92
+ if (!uploadedDataHeaders) return [3 /*break*/, 2];
93
+ setIsLoadingApp(true);
94
+ return [4 /*yield*/, fuseApi.post("/api/v1/importer/templates/".concat(templateSlug, "/mappings"), {
95
+ file_headers: uploadedDataHeaders,
96
+ })];
97
+ case 1:
98
+ mappings = (_a.sent()).data.mappings;
99
+ setIsLoadingApp(false);
100
+ setHeadersMappings(mappings);
101
+ _a.label = 2;
102
+ case 2: return [2 /*return*/];
103
+ }
104
+ });
105
+ }); })();
106
+ }, [uploadedDataHeaders]);
48
107
  var templateHeaderLabels = Object.keys(templateHeaderMatchings || []);
49
108
  var unmatchedHeadersCount = templateHeaderLabels.filter(function (templateHeaderLabel) { return !templateHeaderMatchings[templateHeaderLabel]; }).length;
50
109
  var isLastSubMatchStep = matcherSubstep === 1;
@@ -58,22 +58,25 @@ var ImporterDropzone = function () {
58
58
  setIsUploading(true);
59
59
  setFileName(file.name);
60
60
  var reader = new FileReader();
61
+ var isCsvFile = file.type === "text/csv";
61
62
  reader.onabort = function () { return console.log("file reading was aborted"); };
62
63
  reader.onerror = function () { return console.log("file reading has failed"); };
63
64
  reader.onload = function (event) {
64
65
  var _a;
65
66
  var results = event.target.result;
66
- var isCsvFile = file.type === "text/csv";
67
- // rounded value to 20MB
68
- var isLargeFile = file.size > 20000000;
67
+ if (isCsvFile) {
68
+ Papa.parse(results, {
69
+ worker: true,
70
+ complete: function (parserResults) {
71
+ setUploadedData(parserResults.data);
72
+ setIsUploading(false);
73
+ },
74
+ });
75
+ return;
76
+ }
69
77
  var getDataFromFile = function (fileResults) {
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
- }
78
+ // rounded value to 20MB
79
+ var isLargeFile = file.size > 20000000;
77
80
  var workBook = XLSX.read(fileResults, {
78
81
  type: "array",
79
82
  codepage: 65001,
@@ -91,7 +94,12 @@ var ImporterDropzone = function () {
91
94
  }
92
95
  setIsUploading(false);
93
96
  };
94
- reader.readAsArrayBuffer(file);
97
+ if (isCsvFile) {
98
+ reader.readAsText(file);
99
+ }
100
+ else {
101
+ reader.readAsArrayBuffer(file);
102
+ }
95
103
  });
96
104
  };
97
105
  var onDropRejected = function (rejectedFiles) {
@@ -1,3 +1,4 @@
1
+ import { rowIsEmpty } from "./utils";
1
2
  //Filter records by search value
2
3
  export var filterRecordsBySearchValue = function (obj, value) {
3
4
  var isObject = function (value) {
@@ -28,18 +29,10 @@ export var filterRecordsBySearchValue = function (obj, value) {
28
29
  };
29
30
  export var filterRecordsByType = function (obj, filterType) {
30
31
  var _a, _b;
31
- var rowIsEmpty = function (row) {
32
- return Object.keys(row).every(function (key) {
33
- if (key === "_meta")
34
- return true;
35
- return !row[key];
36
- });
37
- };
38
32
  var filteredObj = {};
39
33
  for (var key in obj) {
40
34
  if (filterType === "all" ||
41
- (((_b = (_a = obj[key]) === null || _a === void 0 ? void 0 : _a._meta) === null || _b === void 0 ? void 0 : _b.isInvalid) !== (filterType === "valid") &&
42
- !rowIsEmpty(obj[key]))) {
35
+ (((_b = (_a = obj[key]) === null || _a === void 0 ? void 0 : _a._meta) === null || _b === void 0 ? void 0 : _b.isInvalid) && !rowIsEmpty(obj[key]))) {
43
36
  filteredObj[key] = obj[key];
44
37
  }
45
38
  }
@@ -1,6 +1,6 @@
1
1
  import React from "react";
2
2
  import { SpreadsheetOptions } from "../../../..";
3
- import { BatchValidationErrors, Field, Record, RecordDataSet } from "../../../../types";
3
+ import { BatchValidationErrors, DuplicateRecords, Field, Record, RecordDataSet } from "../../../../types";
4
4
  import { SortBy, SpreadsheetProps } from "../common/types";
5
5
  import { ValidationState } from "../hooks";
6
6
  import { SpreadsheetFilter } from "./useSpreadsheetFilter";
@@ -9,7 +9,6 @@ export type OnValidationStateChanged = (state: ValidationState) => void;
9
9
  type State = {
10
10
  data: Record[];
11
11
  fields: Field[];
12
- isLoading: boolean;
13
12
  isReadOnly?: boolean;
14
13
  errors: BatchValidationErrors;
15
14
  warnings: BatchValidationErrors;
@@ -17,7 +16,6 @@ type State = {
17
16
  sortByFieldErrors: string;
18
17
  sortByFieldWarnings: string;
19
18
  updateRecord: (record: Record) => void;
20
- setIsLoading: React.Dispatch<React.SetStateAction<boolean>>;
21
19
  setSortByFieldErrors: React.Dispatch<React.SetStateAction<string>>;
22
20
  selectedRows: string[];
23
21
  setSelectedRows: React.Dispatch<React.SetStateAction<string[]>>;
@@ -39,6 +37,7 @@ type State = {
39
37
  setSortBy: React.Dispatch<React.SetStateAction<SortBy>>;
40
38
  setIsTransformTooltipOpened: React.Dispatch<React.SetStateAction<boolean>>;
41
39
  isTransformTooltipOpened: boolean;
40
+ duplicateRecords: DuplicateRecords;
42
41
  } & ValidationState;
43
42
  type Props = SpreadsheetProps & {
44
43
  children: JSX.Element;
@@ -27,7 +27,7 @@ import { addMeta } from "../../../data";
27
27
  import { useValidationState } from "../hooks";
28
28
  import { useSpreadsheetFilter, } from "./useSpreadsheetFilter";
29
29
  import { filterRecordsByType, filterRecordsByError, filterRecordsBySearchValue, } from "./filterMethods";
30
- import { hasValueInAnyField } from "./utils";
30
+ import { hasValueInAnyField, rowIsEmpty } from "./utils";
31
31
  var getDefaultSortCompareFn = function (sortBy) {
32
32
  return function (a, b) {
33
33
  var aField = get(a, sortBy.field);
@@ -47,24 +47,22 @@ var SpreadsheetContext = createContext({});
47
47
  export var SpreadsheetContextProvider = function (_a) {
48
48
  var initialDataSet = _a.initialDataSet, fields = _a.fields, options = _a.options, isReadOnly = _a.isReadOnly, children = _a.children, onValidateRecord = _a.onValidateRecord, onDataSetChanged = _a.onDataSetChanged, onValidationStateChanged = _a.onValidationStateChanged, selectedRows = _a.selectedRows, setSelectedRows = _a.setSelectedRows, _b = _a.getSortCompareFn, getSortCompareFn = _b === void 0 ? getDefaultSortCompareFn : _b;
49
49
  var _c = useState(initialDataSet), dataSet = _c[0], setDataSet = _c[1];
50
- var _d = useState(false), isLoading = _d[0], setIsLoading = _d[1];
51
- var _e = useState(null), sortByFieldErrors = _e[0], setSortByFieldErrors = _e[1];
52
- var _f = useState(null), sortByFieldWarnings = _f[0], setSortByFieldWarnings = _f[1];
53
- var _g = useState(""), filteredInputValue = _g[0], setFilteredInputValue = _g[1];
54
- var _h = useState(null), sortBy = _h[0], setSortBy = _h[1];
50
+ var _d = useState(null), sortByFieldErrors = _d[0], setSortByFieldErrors = _d[1];
51
+ var _e = useState(null), sortByFieldWarnings = _e[0], setSortByFieldWarnings = _e[1];
52
+ var _f = useState(""), filteredInputValue = _f[0], setFilteredInputValue = _f[1];
53
+ var _g = useState(null), sortBy = _g[0], setSortBy = _g[1];
55
54
  var addRowTimeoutRef = useRef(null);
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({
55
+ var _h = useState(false), isTransformTooltipOpened = _h[0], setIsTransformTooltipOpened = _h[1];
56
+ var _j = useSpreadsheetFilter(), spreadsheetFilter = _j.spreadsheetFilter, filterRecordsByRowType = _j.filterRecordsByRowType, filterRecordsByFieldErrors = _j.filterRecordsByFieldErrors, resetSpreadsheetFilter = _j.resetSpreadsheetFilter;
57
+ var _k = useValidationState({
59
58
  dataSet: dataSet,
60
59
  initialDataSet: initialDataSet,
61
60
  fields: fields,
62
61
  options: options,
63
62
  isReadOnly: isReadOnly,
64
63
  setDataSet: setDataSet,
65
- setIsLoading: setIsLoading,
66
64
  onValidateRecord: onValidateRecord,
67
- }), updateRecordAndRevalidate = _l.updateRecordAndRevalidate, deleteRecords = _l.deleteRecords, warnings = _l.warnings, errors = _l.errors, validationState = __rest(_l, ["updateRecordAndRevalidate", "deleteRecords", "warnings", "errors"]);
65
+ }), updateRecordAndRevalidate = _k.updateRecordAndRevalidate, deleteRecords = _k.deleteRecords, warnings = _k.warnings, errors = _k.errors, validationState = __rest(_k, ["updateRecordAndRevalidate", "deleteRecords", "warnings", "errors"]);
68
66
  var addNewRowsToSpreadsheet = function () {
69
67
  addRowTimeoutRef.current = setTimeout(function () {
70
68
  var _a, _b;
@@ -83,10 +81,62 @@ export var SpreadsheetContextProvider = function (_a) {
83
81
  var handleDeleteErrors = function (selectedRows) {
84
82
  deleteRecords(selectedRows, errors, warnings);
85
83
  };
84
+ var duplicateRecords = useMemo(function () {
85
+ if (isReadOnly)
86
+ return { records: {}, count: 0 };
87
+ var uniqueRecords = new Map();
88
+ var duplicateGroups = [];
89
+ var _loop_1 = function (recordKey) {
90
+ if (Object.prototype.hasOwnProperty.call(dataSet, recordKey)) {
91
+ var record_1 = dataSet[recordKey];
92
+ if (rowIsEmpty(record_1))
93
+ return "continue";
94
+ var key = fields.map(function (field) { return record_1[field.name]; }).join("|");
95
+ if (uniqueRecords.has(key)) {
96
+ var saved_1 = uniqueRecords.get(key);
97
+ var existingGroup = duplicateGroups.find(function (group) {
98
+ return group.some(function (item) { return item._meta.id === saved_1._meta.id; });
99
+ });
100
+ if (existingGroup) {
101
+ existingGroup.push(record_1);
102
+ }
103
+ else {
104
+ duplicateGroups.push([saved_1, record_1]);
105
+ }
106
+ }
107
+ else {
108
+ uniqueRecords.set(key, record_1);
109
+ }
110
+ }
111
+ };
112
+ for (var recordKey in dataSet) {
113
+ _loop_1(recordKey);
114
+ }
115
+ var count = duplicateGroups.length;
116
+ var records = {};
117
+ for (var i = 0; i < duplicateGroups.length; i++) {
118
+ var group = duplicateGroups[i];
119
+ for (var j = 0; j < group.length; j++) {
120
+ var record = group[j];
121
+ records[record._meta.id] = __assign({}, record);
122
+ }
123
+ }
124
+ return { records: records, count: count };
125
+ }, [dataSet]);
86
126
  var dataSnapshot = useMemo(function () {
87
- var filteredData = spreadsheetFilter.type === "rowBased"
88
- ? filterRecordsByType(dataSet, spreadsheetFilter.byRow)
89
- : filterRecordsByError(dataSet, spreadsheetFilter.byColumn.field, errors);
127
+ var filteredData = dataSet;
128
+ switch (spreadsheetFilter.type) {
129
+ case "rowBased":
130
+ if (spreadsheetFilter.byRow === "duplicates") {
131
+ filteredData = duplicateRecords.records;
132
+ break;
133
+ }
134
+ filteredData = filterRecordsByType(dataSet, spreadsheetFilter.byRow);
135
+ break;
136
+ case "columnBased":
137
+ filteredData = filterRecordsByError(dataSet, spreadsheetFilter.byColumn.field, errors);
138
+ break;
139
+ }
90
140
  var filteredDatasetByString = filteredInputValue
91
141
  ? filterRecordsBySearchValue(filteredData, filteredInputValue)
92
142
  : filteredData;
@@ -109,6 +159,7 @@ export var SpreadsheetContextProvider = function (_a) {
109
159
  spreadsheetFilter,
110
160
  sortBy,
111
161
  Object.keys(dataSet).length,
162
+ duplicateRecords.count,
112
163
  sortByFieldErrors,
113
164
  sortByFieldWarnings,
114
165
  ]);
@@ -170,7 +221,7 @@ export var SpreadsheetContextProvider = function (_a) {
170
221
  return updatedData;
171
222
  });
172
223
  }, [dataSet, dataSnapshot]);
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 });
224
+ var value = __assign(__assign({ data: updatedDataSnapshot, fields: fields }, validationState), { isReadOnly: isReadOnly, sortByFieldErrors: sortByFieldErrors, sortByFieldWarnings: sortByFieldWarnings, options: options, recordsWithValuesCount: recordsWithValuesCount, filteredDataCount: filteredDataCount, sortBy: sortBy, warnings: warnings, errors: errors, 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, duplicateRecords: duplicateRecords });
174
225
  return (_jsx(SpreadsheetContext.Provider, __assign({ value: value }, { children: children })));
175
226
  };
176
227
  export var useSpreadsheetContext = function () { return useContext(SpreadsheetContext); };
@@ -1,6 +1,6 @@
1
1
  export type SpreadsheetFilter = {
2
2
  type: "rowBased" | "columnBased";
3
- byRow?: "all" | "invalid" | "valid";
3
+ byRow?: "all" | "invalid" | "duplicates";
4
4
  byColumn?: {
5
5
  type: "fieldWithErrors";
6
6
  field: string;
@@ -1,2 +1,3 @@
1
1
  import { Record } from "../../../../types";
2
2
  export declare const hasValueInAnyField: (record: Record) => boolean;
3
+ export declare const rowIsEmpty: (row: Record) => boolean;
@@ -12,3 +12,10 @@ export var hasValueInAnyField = function (record) {
12
12
  return value !== null && value !== undefined;
13
13
  });
14
14
  };
15
+ export var rowIsEmpty = function (row) {
16
+ return Object.keys(row).every(function (key) {
17
+ if (key === "_meta")
18
+ return true;
19
+ return !row[key];
20
+ });
21
+ };
@@ -38,7 +38,7 @@ import { useImporterContext } from "../../../../Importer/contexts/ImporterContex
38
38
  import useWindowDimensions from "../../../../utils/hooks/useWindowSize";
39
39
  var getItemKey = function (record) { return record._meta.id; };
40
40
  var SpreadsheetData = function (props) {
41
- var _a = useSpreadsheetContext(), fields = _a.fields, data = _a.data, isLoading = _a.isLoading, isReadOnly = _a.isReadOnly, totalErrors = _a.totalErrors, validationPercentage = _a.validationPercentage, setSortByFieldErrors = _a.setSortByFieldErrors, options = _a.options, setSortByFieldWarnings = _a.setSortByFieldWarnings, selectedRows = _a.selectedRows, setSelectedRows = _a.setSelectedRows, checkboxColumnWidth = _a.checkboxColumnWidth, isFiltering = _a.isFiltering;
41
+ var _a = useSpreadsheetContext(), fields = _a.fields, data = _a.data, isReadOnly = _a.isReadOnly, totalErrors = _a.totalErrors, validationPercentage = _a.validationPercentage, setSortByFieldErrors = _a.setSortByFieldErrors, options = _a.options, setSortByFieldWarnings = _a.setSortByFieldWarnings, selectedRows = _a.selectedRows, setSelectedRows = _a.setSelectedRows, checkboxColumnWidth = _a.checkboxColumnWidth, isFiltering = _a.isFiltering;
42
42
  var currentStepIndex = useImporterContext().currentStepIndex;
43
43
  var isOnSmallScreens = useWindowDimensions().isOnSmallScreens;
44
44
  var canShowCheckboxOnCheckboxRowHover = currentStepIndex === 2;
@@ -105,6 +105,6 @@ var SpreadsheetData = function (props) {
105
105
  var showValidationProgress = !isReadOnly && validationPercentage < 100;
106
106
  var isReviewStep = currentStepIndex === 2;
107
107
  return (_jsxs(S.SpreadSheetData, __assign({ h100: true, flexColumn: true, className: props.className }, { children: [_jsx(GlobalStyle, {}), showValidationProgress && (_jsx(Div, __assign({ h: 32 }, { children: _jsx(ValidationProgress, { totalErrors: totalErrors, validationPercentage: validationPercentage }) }))), _jsxs(S.SpreadSheetContainer, __assign({ flexColumn: true, w100: true, h100: true }, { children: [_jsx(Div, __assign({ w100: true, justifyCenter: true }, { children: isReviewStep && _jsx(TableActions, {}) })), _jsxs(S.SpreadSheetWrapper, __assign({ canShowCheckboxOnHover: !showValidationProgress && canShowCheckboxOnCheckboxRowHover, shouldShowOnlyCheckbox: (!showValidationProgress && selectedRows.length > 0) ||
108
- currentStepIndex === 0, dflex: true, h100: true }, { children: [(options === null || options === void 0 ? void 0 : options.showCheckboxColumn) && (_jsx(SpreadsheetRowCheckboxes, { gridRef: rowCheckboxesGridRef, height: spreadsheetHeight, isLoadingData: showValidationProgress })), _jsx(S.TableView, { tableHeadersHeight: spreadsheetHeaderHeightPx, rowHeight: spreadsheetRowHeightPx, h: null, rowWidthScalingFactor: rowWidthScalingFactor, data: data, columns: columns, isLoading: isLoading, onTableScroll: onTableScroll, getItemKey: getItemKey, checkboxColumnWidth: checkboxColumnWidth, isFiltering: isFiltering })] }))] }))] })));
108
+ currentStepIndex === 0, dflex: true, h100: true }, { children: [(options === null || options === void 0 ? void 0 : options.showCheckboxColumn) && (_jsx(SpreadsheetRowCheckboxes, { gridRef: rowCheckboxesGridRef, height: spreadsheetHeight, isLoadingData: showValidationProgress })), _jsx(S.TableView, { tableHeadersHeight: spreadsheetHeaderHeightPx, rowHeight: spreadsheetRowHeightPx, h: null, rowWidthScalingFactor: rowWidthScalingFactor, data: data, columns: columns, onTableScroll: onTableScroll, getItemKey: getItemKey, checkboxColumnWidth: checkboxColumnWidth, isFiltering: isFiltering })] }))] }))] })));
109
109
  };
110
110
  export default React.memo(SpreadsheetData, areEqual);