fuse-importer 0.27.0 → 0.30.0
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.
- package/lib/esm/Importer/ImporterWithContext.d.ts +2 -0
- package/lib/esm/Importer/ImporterWithContext.js +51 -13
- package/lib/esm/Importer/Matcher/EnumFieldsMatchers/EnumFieldMatcher/index.js +2 -2
- package/lib/esm/Importer/Matcher/EnumFieldsMatchers/index.js +4 -3
- package/lib/esm/Importer/Matcher/HeaderMatcher/index.js +14 -9
- package/lib/esm/Importer/Matcher/index.js +0 -11
- package/lib/esm/Importer/PreviewFirstTime.js +1 -1
- package/lib/esm/Importer/Review/AppResponseModal.js +2 -2
- package/lib/esm/Importer/Review/ReviewContextProvider.d.ts +8 -6
- package/lib/esm/Importer/Review/ReviewContextProvider.js +72 -195
- package/lib/esm/Importer/Review/ReviewWithContext.js +2 -2
- package/lib/esm/Importer/Stepper/StepperSubmitModal.d.ts +2 -1
- package/lib/esm/Importer/Stepper/StepperSubmitModal.js +4 -2
- package/lib/esm/Importer/Stepper/UnmatchedHeadersModal.js +1 -1
- package/lib/esm/Importer/Stepper/index.js +36 -13
- package/lib/esm/Importer/Uploader/DragAndDropImporter/ImporterDropzone.d.ts +2 -1
- package/lib/esm/Importer/Uploader/DragAndDropImporter/ImporterDropzone.js +15 -64
- package/lib/esm/Importer/Uploader/DragAndDropImporter/ImporterSectionHeader/index.js +2 -2
- package/lib/esm/Importer/Uploader/DragAndDropImporter/index.js +11 -3
- package/lib/esm/Importer/Uploader/HeadersPreview.js +1 -1
- package/lib/esm/Importer/common/Spreadsheet/DataSetContextProvider/index.d.ts +16 -0
- package/lib/esm/Importer/common/Spreadsheet/DataSetContextProvider/index.js +63 -0
- package/lib/esm/Importer/common/Spreadsheet/DuplicateDataContextProvider/index.d.ts +19 -0
- package/lib/esm/Importer/common/Spreadsheet/DuplicateDataContextProvider/index.js +155 -0
- package/lib/esm/Importer/common/Spreadsheet/FilteredDataContextProvider/index.d.ts +29 -0
- package/lib/esm/Importer/common/Spreadsheet/FilteredDataContextProvider/index.js +150 -0
- package/lib/esm/Importer/common/Spreadsheet/SpreadsheetContextProvider/filterMethods.d.ts +6 -4
- package/lib/esm/Importer/common/Spreadsheet/SpreadsheetContextProvider/filterMethods.js +38 -45
- package/lib/esm/Importer/common/Spreadsheet/SpreadsheetContextProvider/hashCalculators.d.ts +7 -0
- package/lib/esm/Importer/common/Spreadsheet/SpreadsheetContextProvider/hashCalculators.js +152 -0
- package/lib/esm/Importer/common/Spreadsheet/SpreadsheetContextProvider/index.d.ts +7 -30
- package/lib/esm/Importer/common/Spreadsheet/SpreadsheetContextProvider/index.js +10 -141
- package/lib/esm/Importer/common/Spreadsheet/SpreadsheetContextProvider/useBatchProcessing.d.ts +5 -0
- package/lib/esm/Importer/common/Spreadsheet/SpreadsheetContextProvider/useBatchProcessing.js +81 -0
- package/lib/esm/Importer/common/Spreadsheet/SpreadsheetContextProvider/useDataSetManipulation.d.ts +5 -0
- package/lib/esm/Importer/common/Spreadsheet/SpreadsheetContextProvider/useDataSetManipulation.js +119 -0
- package/lib/esm/Importer/common/Spreadsheet/SpreadsheetContextProvider/useSpreadsheetFilter.d.ts +1 -1
- package/lib/esm/Importer/common/Spreadsheet/SpreadsheetContextProvider/utils.d.ts +1 -0
- package/lib/esm/Importer/common/Spreadsheet/SpreadsheetContextProvider/utils.js +8 -0
- package/lib/esm/Importer/common/Spreadsheet/ValidationContextProvider/index.d.ts +31 -0
- package/lib/esm/Importer/common/Spreadsheet/ValidationContextProvider/index.js +324 -0
- package/lib/esm/Importer/common/Spreadsheet/common/index.js +18 -9
- package/lib/esm/Importer/common/Spreadsheet/common/types.d.ts +2 -3
- package/lib/esm/Importer/common/Spreadsheet/components/FieldHeader.d.ts +0 -2
- package/lib/esm/Importer/common/Spreadsheet/components/FieldHeader.js +26 -11
- package/lib/esm/Importer/common/Spreadsheet/components/FindAndReplace/index.d.ts +6 -0
- package/lib/esm/Importer/common/Spreadsheet/components/FindAndReplace/index.js +88 -0
- package/lib/esm/Importer/common/Spreadsheet/components/SpreadsheetData.js +25 -17
- package/lib/esm/Importer/common/Spreadsheet/components/SpreadsheetRowCheckboxes.js +48 -47
- package/lib/esm/Importer/common/Spreadsheet/components/SpreadsheetRowNumbers.js +3 -3
- package/lib/esm/Importer/common/Spreadsheet/components/fields/SpeadsheetAutocomplete.d.ts +1 -0
- package/lib/esm/Importer/common/Spreadsheet/components/fields/SpeadsheetAutocomplete.js +7 -3
- package/lib/esm/Importer/common/Spreadsheet/components/fields/SpreadsheetInput.d.ts +3 -1
- package/lib/esm/Importer/common/Spreadsheet/components/fields/SpreadsheetInput.js +45 -11
- package/lib/esm/Importer/common/Spreadsheet/components/fields/index.d.ts +12 -5
- package/lib/esm/Importer/common/Spreadsheet/components/fields/index.js +81 -26
- package/lib/esm/Importer/common/Spreadsheet/components/fields/utils.d.ts +11 -0
- package/lib/esm/Importer/common/Spreadsheet/components/fields/utils.js +29 -0
- package/lib/esm/Importer/common/Spreadsheet/components/inputs/index.js +1 -2
- package/lib/esm/Importer/common/Spreadsheet/index.d.ts +0 -1
- package/lib/esm/Importer/common/Spreadsheet/index.js +1 -84
- package/lib/esm/Importer/common/Spreadsheet/styles.d.ts +1 -2
- package/lib/esm/Importer/common/Spreadsheet/styles.js +13 -1
- package/lib/esm/Importer/common/Spreadsheet/transformation/index.d.ts +2 -2
- package/lib/esm/Importer/common/Spreadsheet/transformation/index.js +35 -13
- package/lib/esm/Importer/common/Spreadsheet/transformation/transformators/dateTimeAutoformatUtils.d.ts +5 -0
- package/lib/esm/Importer/common/Spreadsheet/transformation/transformators/dateTimeAutoformatUtils.js +231 -0
- package/lib/esm/Importer/common/Spreadsheet/transformation/transformators/index.d.ts +18 -0
- package/lib/esm/Importer/common/Spreadsheet/transformation/transformators/index.js +179 -0
- package/lib/esm/Importer/common/Spreadsheet/useFieldSorting.d.ts +5 -0
- package/lib/esm/Importer/common/Spreadsheet/useFieldSorting.js +81 -0
- package/lib/esm/Importer/common/Spreadsheet/validation/index.d.ts +5 -3
- package/lib/esm/Importer/common/Spreadsheet/validation/index.js +13 -17
- package/lib/esm/Importer/common/Spreadsheet/validation/validators.d.ts +3 -2
- package/lib/esm/Importer/common/Spreadsheet/validation/validators.js +23 -7
- package/lib/esm/Importer/common/theme.d.ts +1 -0
- package/lib/esm/Importer/contexts/ImporterContextProvider.d.ts +13 -4
- package/lib/esm/Importer/contexts/ImporterContextProvider.js +150 -21
- package/lib/esm/Importer/data/index.d.ts +7 -3
- package/lib/esm/Importer/data/index.js +49 -20
- package/lib/esm/Importer/hooks/useExportDataToFile.d.ts +5 -0
- package/lib/esm/Importer/hooks/useExportDataToFile.js +54 -0
- package/lib/esm/Importer/hooks/useSubmitToServer.d.ts +7 -0
- package/lib/esm/Importer/hooks/useSubmitToServer.js +214 -0
- package/lib/esm/Importer/index.d.ts +4 -3
- package/lib/esm/Importer/index.js +2 -2
- package/lib/esm/common/CircleSpinner.d.ts +1 -0
- package/lib/esm/common/CircleSpinner.js +13 -0
- package/lib/esm/common/ConfirmationModal.js +1 -1
- package/lib/esm/common/EventManagerContextProvider/index.d.ts +22 -0
- package/lib/esm/common/EventManagerContextProvider/index.js +38 -0
- package/lib/esm/common/FileUploadDropzone/ImporterDropzone.d.ts +16 -0
- package/lib/esm/common/FileUploadDropzone/ImporterDropzone.js +143 -0
- package/lib/esm/common/FileUploadDropzone/index.d.ts +1 -0
- package/lib/esm/common/FileUploadDropzone/index.js +1 -0
- package/lib/esm/common/Modal.js +2 -2
- package/lib/esm/common/Table/TableActions/CustomActions/CustomActions.d.ts +1 -0
- package/lib/esm/common/Table/TableActions/CustomActions/CustomActions.js +150 -0
- package/lib/esm/common/Table/TableActions/CustomActions/index.d.ts +1 -0
- package/lib/esm/common/Table/TableActions/CustomActions/index.js +1 -0
- package/lib/esm/common/Table/TableActions/DeleteSelectedRows.js +25 -8
- package/lib/esm/common/Table/TableActions/ExportData.js +5 -3
- package/lib/esm/common/Table/TableActions/FilterByErrors/FilterByErrors.js +41 -10
- package/lib/esm/common/Table/TableActions/RowFilters.js +63 -11
- package/lib/esm/common/Table/TableActions/SearchRows.js +28 -17
- package/lib/esm/common/Table/TableActions/TableActions.js +15 -4
- package/lib/esm/common/Table/TableActions/TableActions.styles.d.ts +1 -0
- package/lib/esm/common/Table/TableActions/TableActions.styles.js +4 -3
- package/lib/esm/common/Table/TableActions/TransformedRecordsCount.d.ts +6 -0
- package/lib/esm/common/Table/TableActions/TransformedRecordsCount.js +71 -0
- package/lib/esm/common/Table/TableActions/ValidationProgress.d.ts +2 -0
- package/lib/esm/common/Table/TableActions/ValidationProgress.js +22 -0
- package/lib/esm/common/Table/TableActions/icons.d.ts +3 -0
- package/lib/esm/common/Table/TableActions/icons.js +3 -0
- package/lib/esm/common/Table/TableActions/useFindAndReplace.d.ts +5 -0
- package/lib/esm/common/Table/TableActions/useFindAndReplace.js +45 -0
- package/lib/esm/common/Table/TableView/TableRows/TableRow.d.ts +1 -1
- package/lib/esm/common/Table/TableView/TableRows/TableRow.js +3 -3
- package/lib/esm/common/Table/TableView/TableRows/index.js +21 -6
- package/lib/esm/common/Table/TableView/index.d.ts +1 -1
- package/lib/esm/common/Table/TableView/index.js +7 -16
- package/lib/esm/common/Table/TableView/types.d.ts +9 -9
- package/lib/esm/common/Table/index.d.ts +2 -1
- package/lib/esm/common/Table/index.js +2 -2
- package/lib/esm/common/Toast.d.ts +42 -3
- package/lib/esm/common/Toast.js +56 -18
- package/lib/esm/common/TooltipProvider.d.ts +2 -0
- package/lib/esm/common/TooltipProvider.js +12 -9
- package/lib/esm/common/buttons.d.ts +5 -1
- package/lib/esm/common/buttons.js +19 -13
- package/lib/esm/common/columnsTransformations.d.ts +1 -0
- package/lib/esm/common/columnsTransformations.js +10 -16
- package/lib/esm/common/columnsValidations.d.ts +0 -26
- package/lib/esm/common/columnsValidations.js +1 -31
- package/lib/esm/common/datePatterns.d.ts +26 -0
- package/lib/esm/common/datePatterns.js +327 -0
- package/lib/esm/common/icons/index.d.ts +4 -0
- package/lib/esm/common/icons/index.js +6 -2
- package/lib/esm/common/index.d.ts +2 -0
- package/lib/esm/common/index.js +2 -0
- package/lib/esm/common/inputs/Autocomplete.js +2 -2
- package/lib/esm/common/inputs/Checkbox.d.ts +2 -1
- package/lib/esm/common/inputs/Checkbox.js +9 -7
- package/lib/esm/common/inputs/SelectMenu.d.ts +2 -1
- package/lib/esm/common/inputs/SelectMenu.js +14 -3
- package/lib/esm/common/inputs/TextInput.js +1 -1
- package/lib/esm/index.d.ts +3 -1
- package/lib/esm/index.js +9 -2
- package/lib/esm/locales/de.d.ts +13 -1
- package/lib/esm/locales/de.js +14 -2
- package/lib/esm/locales/en.d.ts +26 -1
- package/lib/esm/locales/en.js +30 -5
- package/lib/esm/locales/es.d.ts +13 -1
- package/lib/esm/locales/es.js +14 -2
- package/lib/esm/locales/fr.d.ts +13 -1
- package/lib/esm/locales/fr.js +14 -2
- package/lib/esm/styled/theme/colorPalette.d.ts +2 -0
- package/lib/esm/styled/theme/colorPalette.js +1 -0
- package/lib/esm/styled/theme/index.d.ts +1 -0
- package/lib/esm/styled/theme/textCss.js +1 -1
- package/lib/esm/types.d.ts +48 -5
- package/lib/esm/types.js +0 -1
- package/lib/esm/utils/index.d.ts +1 -0
- package/lib/esm/utils/index.js +4 -0
- package/lib/main.js +24 -24
- package/lib/main.js.LICENSE.txt +2 -0
- package/package.json +8 -6
- package/lib/esm/Importer/Stepper/common/getEnumFieldValueMatchingsInitialValue.d.ts +0 -8
- package/lib/esm/Importer/Stepper/common/getEnumFieldValueMatchingsInitialValue.js +0 -33
- package/lib/esm/Importer/common/Spreadsheet/components/ValidationProgress.d.ts +0 -5
- package/lib/esm/Importer/common/Spreadsheet/components/ValidationProgress.js +0 -19
- package/lib/esm/Importer/common/Spreadsheet/components/inputs/EmailInput.d.ts +0 -3
- package/lib/esm/Importer/common/Spreadsheet/components/inputs/EmailInput.js +0 -14
- package/lib/esm/Importer/common/Spreadsheet/hooks.d.ts +0 -34
- package/lib/esm/Importer/common/Spreadsheet/hooks.js +0 -254
- package/lib/esm/Importer/common/Spreadsheet/transformation/transformators.d.ts +0 -8
- package/lib/esm/Importer/common/Spreadsheet/transformation/transformators.js +0 -106
- package/lib/esm/common/Table/TableActions/FilterByErrors/functions.d.ts +0 -11
- package/lib/esm/common/Table/TableActions/FilterByErrors/functions.js +0 -35
- package/lib/esm/common/Table/TableActions/hooks.d.ts +0 -18
- package/lib/esm/common/Table/TableActions/hooks.js +0 -41
- package/lib/esm/common/Table/TableView/CustomScrollbar.d.ts +0 -2
- package/lib/esm/common/Table/TableView/CustomScrollbar.js +0 -34
|
@@ -45,229 +45,79 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
|
45
45
|
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
46
46
|
}
|
|
47
47
|
};
|
|
48
|
-
var __rest = (this && this.__rest) || function (s, e) {
|
|
49
|
-
var t = {};
|
|
50
|
-
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
|
51
|
-
t[p] = s[p];
|
|
52
|
-
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
|
53
|
-
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
|
54
|
-
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
|
55
|
-
t[p[i]] = s[p[i]];
|
|
56
|
-
}
|
|
57
|
-
return t;
|
|
58
|
-
};
|
|
59
|
-
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
60
|
-
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
|
|
61
|
-
if (ar || !(i in from)) {
|
|
62
|
-
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
|
|
63
|
-
ar[i] = from[i];
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
return to.concat(ar || Array.prototype.slice.call(from));
|
|
67
|
-
};
|
|
68
48
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
69
49
|
import { createContext, useCallback, useContext, useEffect, useMemo, useRef, useState, } from "react";
|
|
70
|
-
import
|
|
50
|
+
import { useAppLoadingContext } from "../../common/AppLoadingContextProvider";
|
|
71
51
|
import { AppLoading } from "../common/AppLoading";
|
|
72
|
-
import { isRecordEmpty } from "../common/Spreadsheet/common";
|
|
73
|
-
import { sendRecordsToIntegrations } from "../common/utils";
|
|
74
52
|
import { useImporterContext } from "../contexts/ImporterContextProvider";
|
|
53
|
+
import { getPreviewDataSet, getReviewDataSet, getTemplateFields, } from "../data";
|
|
75
54
|
import { transformToRecords } from "../data/index";
|
|
76
|
-
import {
|
|
77
|
-
import { useAppLoadingContext } from "../../common/AppLoadingContextProvider";
|
|
55
|
+
import { useSubmitToServer } from "../hooks/useSubmitToServer";
|
|
78
56
|
var ReviewContext = createContext({});
|
|
79
|
-
var trackImportedRowsCount = function (fuseApi, templateSlug, rowCount) { return __awaiter(void 0, void 0, void 0, function () {
|
|
80
|
-
var error_1, errorMessage;
|
|
81
|
-
var _a, _b;
|
|
82
|
-
return __generator(this, function (_c) {
|
|
83
|
-
switch (_c.label) {
|
|
84
|
-
case 0:
|
|
85
|
-
_c.trys.push([0, 2, , 3]);
|
|
86
|
-
return [4 /*yield*/, fuseApi.post("/api/v1/importer/templates/".concat(templateSlug, "/imports"), {
|
|
87
|
-
row_count: rowCount,
|
|
88
|
-
})];
|
|
89
|
-
case 1:
|
|
90
|
-
_c.sent();
|
|
91
|
-
return [3 /*break*/, 3];
|
|
92
|
-
case 2:
|
|
93
|
-
error_1 = _c.sent();
|
|
94
|
-
errorMessage = ((_b = (_a = error_1 === null || error_1 === void 0 ? void 0 : error_1.response) === null || _a === void 0 ? void 0 : _a.data) === null || _b === void 0 ? void 0 : _b.error) ||
|
|
95
|
-
"There was an error submitting your dataset";
|
|
96
|
-
throw new Error(errorMessage);
|
|
97
|
-
case 3: return [2 /*return*/];
|
|
98
|
-
}
|
|
99
|
-
});
|
|
100
|
-
}); };
|
|
101
|
-
var getImportWasSuccessful = function (response) {
|
|
102
|
-
return !response.errors || !Object.keys(response.errors).length;
|
|
103
|
-
};
|
|
104
|
-
var filterAndMapWithBackendErrors = function (dataSet, errors) {
|
|
105
|
-
return Object.keys(errors).map(function (rId) {
|
|
106
|
-
var record = dataSet[rId];
|
|
107
|
-
var meta = record === null || record === void 0 ? void 0 : record._meta;
|
|
108
|
-
return __assign(__assign({}, record), { _meta: __assign(__assign({}, meta), { isInvalid: true, backendErrors: errors[rId] }) });
|
|
109
|
-
}, []);
|
|
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
|
-
}
|
|
120
|
-
function csvExport(data) {
|
|
121
|
-
var valuesWithQuotesWhenNecessary = data.map(function (obj) {
|
|
122
|
-
var newObj = {};
|
|
123
|
-
for (var key in obj) {
|
|
124
|
-
var value = obj[key];
|
|
125
|
-
newObj[key] =
|
|
126
|
-
typeof value === "string" && value.includes(",") ? "\"".concat(value, "\"") : value;
|
|
127
|
-
}
|
|
128
|
-
return newObj;
|
|
129
|
-
});
|
|
130
|
-
var csv = Papa.unparse(valuesWithQuotesWhenNecessary);
|
|
131
|
-
downloadCsv(csv, "export.csv");
|
|
132
|
-
}
|
|
133
57
|
export var ReviewContextProvider = function (_a) {
|
|
134
58
|
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,
|
|
59
|
+
var _b = useImporterContext(), templateHeaderMatchings = _b.templateHeaderMatchings, enumFieldValueMatchings = _b.enumFieldValueMatchings, templateHeaders = _b.templateHeaders, uploadedDataHeaders = _b.uploadedDataHeaders, headerRowIndex = _b.headerRowIndex, uploadedData = _b.uploadedData, currentStepIndex = _b.currentStepIndex, setSelectedRows = _b.setSelectedRows, _c = _b.importerOptions, disableSubmitIfInvalid = _c.disableSubmitIfInvalid, batchValidationDelayMs = _c.batchValidationDelayMs, batchValidationSize = _c.batchValidationSize, loadingComponent = _c.loadingComponent, onValidateRecord = _b.onValidateRecord, formatRecord = _b.formatRecord;
|
|
60
|
+
var _d = useState(false), hasTransformedRecords = _d[0], setHasTransformedRecords = _d[1];
|
|
61
|
+
var _e = useSubmitToServer(setHasTransformedRecords), appResponse = _e.appResponse, isSubmitting = _e.isSubmitting, importWasSuccessful = _e.importWasSuccessful, onSubmitToServer = _e.onSubmitToServer;
|
|
136
62
|
var setIsLoadingApp = useAppLoadingContext().setIsLoadingApp;
|
|
137
|
-
var
|
|
138
|
-
var
|
|
139
|
-
var
|
|
140
|
-
var
|
|
141
|
-
var
|
|
142
|
-
var
|
|
143
|
-
var
|
|
144
|
-
|
|
145
|
-
|
|
63
|
+
var _f = useState([]), previewFields = _f[0], setPreviewFields = _f[1];
|
|
64
|
+
var _g = useState(null), previewInitialDataSet = _g[0], setPreviewInitialDataSet = _g[1];
|
|
65
|
+
var _h = useState([]), reviewFields = _h[0], setReviewFields = _h[1];
|
|
66
|
+
var reviewInitialDataSet = useRef(null);
|
|
67
|
+
var _j = useState(null), initialDataSetUpdatedAt = _j[0], setInitialDataSetUpdatedAt = _j[1];
|
|
68
|
+
var _k = useState(false), _ = _k[0], setInefficientRerender = _k[1];
|
|
69
|
+
var setReviewInitialDataSetDeprecated = function (dataSet) {
|
|
70
|
+
reviewInitialDataSet.current = dataSet;
|
|
71
|
+
setInefficientRerender(function (prev) { return !prev; });
|
|
72
|
+
};
|
|
146
73
|
useEffect(function () {
|
|
147
74
|
if (currentStepIndex === 1)
|
|
148
|
-
|
|
75
|
+
setReviewInitialDataSetDeprecated(null);
|
|
149
76
|
}, [currentStepIndex]);
|
|
150
77
|
var reviewDataSetRef = useRef(null);
|
|
151
78
|
var options = useMemo(function () { return ({
|
|
152
79
|
batchValidationDelayMs: batchValidationDelayMs,
|
|
153
80
|
batchValidationSize: batchValidationSize,
|
|
154
81
|
}); }, [batchValidationDelayMs, batchValidationSize]);
|
|
155
|
-
var onExport = useCallback(function (dataType) {
|
|
156
|
-
if (!reviewDataSetRef.current)
|
|
157
|
-
return;
|
|
158
|
-
var dataSet = reviewDataSetRef.current;
|
|
159
|
-
var dataSetValues = Object.values(dataSet);
|
|
160
|
-
if (dataType === "csv") {
|
|
161
|
-
var valuesWithoutMeta = dataSetValues.map(function (_a) {
|
|
162
|
-
var _meta = _a._meta, rest = __rest(_a, ["_meta"]);
|
|
163
|
-
return rest;
|
|
164
|
-
});
|
|
165
|
-
csvExport(valuesWithoutMeta);
|
|
166
|
-
}
|
|
167
|
-
}, [reviewFields, selectedRows]);
|
|
168
|
-
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;
|
|
170
|
-
return __generator(this, function (_b) {
|
|
171
|
-
switch (_b.label) {
|
|
172
|
-
case 0:
|
|
173
|
-
_b.trys.push([0, 5, 6, 7]);
|
|
174
|
-
if (!reviewDataSetRef.current)
|
|
175
|
-
return [2 /*return*/];
|
|
176
|
-
setIsSubmitting(true);
|
|
177
|
-
dataSet = reviewDataSetRef.current;
|
|
178
|
-
dataSetValues = Object.values(dataSet);
|
|
179
|
-
validDataSetValues = dataSetValues.filter(function (record) {
|
|
180
|
-
return !record._meta.isInvalid && !isRecordEmpty(record, reviewFields);
|
|
181
|
-
});
|
|
182
|
-
validDataSetLength = validDataSetValues.length;
|
|
183
|
-
invalidRecords_1 = dataSetValues.filter(function (v) { return v._meta.isInvalid; });
|
|
184
|
-
return [4 /*yield*/, onSubmit(validDataSetValues)];
|
|
185
|
-
case 1:
|
|
186
|
-
applicationResponse = _b.sent();
|
|
187
|
-
isAppResponseSuccessful = getImportWasSuccessful(applicationResponse);
|
|
188
|
-
if (!isAppResponseSuccessful) {
|
|
189
|
-
_a = (applicationResponse !== null && applicationResponse !== void 0 ? applicationResponse : {}).errors, errors = _a === void 0 ? {} : _a;
|
|
190
|
-
invalidRecords_1 = __spreadArray(__spreadArray([], filterAndMapWithBackendErrors(dataSet, errors), true), invalidRecords_1, true);
|
|
191
|
-
}
|
|
192
|
-
isDataValid = invalidRecords_1.length === 0;
|
|
193
|
-
setImportWasSuccessful(isDataValid && isAppResponseSuccessful);
|
|
194
|
-
setAppResponse(applicationResponse);
|
|
195
|
-
if (applicationResponse.recordsToDisplay) {
|
|
196
|
-
recordsToDisplayFiltered = applicationResponse.recordsToDisplay.filter(function (record) {
|
|
197
|
-
var recordId = record._meta.id;
|
|
198
|
-
return !invalidRecords_1.some(function (invalidRecord) { return invalidRecord._meta.id === recordId; });
|
|
199
|
-
});
|
|
200
|
-
invalidRecords_1 = __spreadArray(__spreadArray([], invalidRecords_1, true), (recordsToDisplayFiltered || []), true);
|
|
201
|
-
}
|
|
202
|
-
invalidDataSet = recordListToDataSet(invalidRecords_1, reviewFields);
|
|
203
|
-
setReviewInitialDataSet(invalidDataSet);
|
|
204
|
-
if (!!previewMode) return [3 /*break*/, 4];
|
|
205
|
-
return [4 /*yield*/, trackImportedRowsCount(fuseApi, templateSlug, validDataSetLength)];
|
|
206
|
-
case 2:
|
|
207
|
-
_b.sent();
|
|
208
|
-
return [4 /*yield*/, sendRecordsToIntegrations(dataSetValues, integrations)];
|
|
209
|
-
case 3:
|
|
210
|
-
_b.sent();
|
|
211
|
-
_b.label = 4;
|
|
212
|
-
case 4: return [3 /*break*/, 7];
|
|
213
|
-
case 5:
|
|
214
|
-
error_2 = _b.sent();
|
|
215
|
-
console.error(error_2);
|
|
216
|
-
return [3 /*break*/, 7];
|
|
217
|
-
case 6:
|
|
218
|
-
setIsSubmitting(false);
|
|
219
|
-
return [7 /*endfinally*/];
|
|
220
|
-
case 7: return [2 /*return*/];
|
|
221
|
-
}
|
|
222
|
-
});
|
|
223
|
-
}); }, [reviewFields, onSubmit]);
|
|
224
82
|
var onDataSetChanged = useCallback(function (dataSet) {
|
|
225
83
|
reviewDataSetRef.current = dataSet;
|
|
226
84
|
}, []);
|
|
227
|
-
var onValidationStateChanged = useCallback(function (state) {
|
|
228
|
-
var isInvalid = !state.isValid;
|
|
229
|
-
var isValidating = !state.isValidationCompleted;
|
|
230
|
-
var disableSubmitIfInvalidFromOption = disableSubmitIfInvalid === undefined ? true : false;
|
|
231
|
-
var isDisabled = (disableSubmitIfInvalidFromOption && isInvalid) || isValidating;
|
|
232
|
-
setIsSubmitDisabled(isDisabled);
|
|
233
|
-
}, [disableSubmitIfInvalid]);
|
|
234
85
|
useEffect(function () {
|
|
235
86
|
if (!uploadedData && currentStepIndex === 0) {
|
|
236
87
|
//Reset data to clean the memory
|
|
237
88
|
setPreviewFields([]);
|
|
238
|
-
setPreviewInitialDataSet(null);
|
|
239
89
|
setReviewFields([]);
|
|
240
|
-
|
|
90
|
+
setReviewInitialDataSetDeprecated(null);
|
|
241
91
|
reviewDataSetRef.current = null;
|
|
242
92
|
return;
|
|
243
93
|
}
|
|
244
|
-
var sleep = function (n) {
|
|
94
|
+
var sleep = function (n) {
|
|
95
|
+
return new Promise(function (resolve) { return setTimeout(resolve, n); });
|
|
96
|
+
};
|
|
245
97
|
if (currentStepIndex === 0) {
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
}
|
|
98
|
+
//Uploader spreadsheet data
|
|
99
|
+
var _a = getPreviewDataSet({ uploadedData: uploadedData }), fields = _a.fields, initialDataSet = _a.initialDataSet;
|
|
100
|
+
setPreviewFields(fields);
|
|
101
|
+
setPreviewInitialDataSet(initialDataSet);
|
|
102
|
+
setInitialDataSetUpdatedAt(Date.now());
|
|
252
103
|
}
|
|
253
104
|
else if (currentStepIndex === 2) {
|
|
254
105
|
setIsLoadingApp(true);
|
|
255
106
|
(function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
256
|
-
var fields,
|
|
257
|
-
return __generator(this, function (
|
|
258
|
-
switch (
|
|
107
|
+
var generateRecords, fields, records, _a, isDatasetTransformed, initialDataSet;
|
|
108
|
+
return __generator(this, function (_b) {
|
|
109
|
+
switch (_b.label) {
|
|
259
110
|
case 0:
|
|
260
|
-
if (!(uploadedData.length >
|
|
111
|
+
if (!(uploadedData && uploadedData.length > 1000)) return [3 /*break*/, 2];
|
|
261
112
|
// wait for the first render to complete before blocking main thread with review step logic
|
|
262
113
|
return [4 /*yield*/, sleep(200)];
|
|
263
114
|
case 1:
|
|
264
115
|
// wait for the first render to complete before blocking main thread with review step logic
|
|
265
|
-
|
|
266
|
-
|
|
116
|
+
_b.sent();
|
|
117
|
+
_b.label = 2;
|
|
267
118
|
case 2:
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
transformToRecords({
|
|
119
|
+
generateRecords = function () {
|
|
120
|
+
return transformToRecords({
|
|
271
121
|
templateHeaderMatchings: templateHeaderMatchings,
|
|
272
122
|
enumFieldValueMatchings: enumFieldValueMatchings,
|
|
273
123
|
templateHeaders: templateHeaders,
|
|
@@ -275,37 +125,64 @@ export var ReviewContextProvider = function (_a) {
|
|
|
275
125
|
uploadedData: uploadedData.slice(headerRowIndex + 1),
|
|
276
126
|
formatRecord: formatRecord,
|
|
277
127
|
});
|
|
278
|
-
|
|
279
|
-
|
|
128
|
+
};
|
|
129
|
+
fields = getTemplateFields({ templateHeaders: templateHeaders });
|
|
130
|
+
records = initialRecords !== null && initialRecords !== void 0 ? initialRecords : generateRecords();
|
|
131
|
+
_a = getReviewDataSet({
|
|
132
|
+
records: records,
|
|
280
133
|
fields: fields,
|
|
281
|
-
}).initialDataSet;
|
|
134
|
+
}), isDatasetTransformed = _a.isDatasetTransformed, initialDataSet = _a.initialDataSet;
|
|
135
|
+
if (isDatasetTransformed)
|
|
136
|
+
setHasTransformedRecords(true);
|
|
282
137
|
setSelectedRows([]);
|
|
283
138
|
setReviewFields(fields);
|
|
284
|
-
|
|
139
|
+
setReviewInitialDataSetDeprecated(initialDataSet);
|
|
285
140
|
setInitialDataSetUpdatedAt(Date.now());
|
|
286
|
-
setIsLoadingApp(false);
|
|
287
141
|
return [2 /*return*/];
|
|
288
142
|
}
|
|
289
143
|
});
|
|
290
144
|
}); })();
|
|
291
145
|
}
|
|
292
|
-
}, [
|
|
146
|
+
}, [currentStepIndex, templateHeaders, uploadedData]);
|
|
147
|
+
var onSubmit = useCallback(function (dataSet) { return __awaiter(void 0, void 0, void 0, function () {
|
|
148
|
+
return __generator(this, function (_a) {
|
|
149
|
+
switch (_a.label) {
|
|
150
|
+
case 0:
|
|
151
|
+
// passing a callback to the onSubmit function (from hook) to get
|
|
152
|
+
// access to the functions declared inside the context provider
|
|
153
|
+
return [4 /*yield*/, onSubmitToServer(dataSet, function (invalidDataSet) {
|
|
154
|
+
setReviewInitialDataSetDeprecated(invalidDataSet);
|
|
155
|
+
setInitialDataSetUpdatedAt(Date.now());
|
|
156
|
+
})];
|
|
157
|
+
case 1:
|
|
158
|
+
// passing a callback to the onSubmit function (from hook) to get
|
|
159
|
+
// access to the functions declared inside the context provider
|
|
160
|
+
_a.sent();
|
|
161
|
+
return [2 /*return*/];
|
|
162
|
+
}
|
|
163
|
+
});
|
|
164
|
+
}); }, [
|
|
165
|
+
setReviewInitialDataSetDeprecated,
|
|
166
|
+
setInitialDataSetUpdatedAt,
|
|
167
|
+
onSubmitToServer,
|
|
168
|
+
]);
|
|
293
169
|
var value = {
|
|
294
170
|
previewInitialDataSet: previewInitialDataSet,
|
|
295
171
|
previewFields: previewFields,
|
|
296
|
-
reviewInitialDataSet: reviewInitialDataSet,
|
|
172
|
+
reviewInitialDataSet: reviewInitialDataSet.current,
|
|
297
173
|
reviewFields: reviewFields,
|
|
298
|
-
isSubmitDisabled: isSubmitDisabled,
|
|
299
174
|
importWasSuccessful: importWasSuccessful,
|
|
300
175
|
appResponse: appResponse,
|
|
301
176
|
isSubmitting: isSubmitting,
|
|
302
177
|
options: options,
|
|
303
178
|
initialDataSetUpdatedAt: initialDataSetUpdatedAt,
|
|
304
|
-
onSubmit:
|
|
305
|
-
onExport: onExport,
|
|
179
|
+
onSubmit: onSubmit,
|
|
306
180
|
onValidateRecord: onValidateRecord,
|
|
307
181
|
onDataSetChanged: onDataSetChanged,
|
|
308
|
-
|
|
182
|
+
setReviewInitialDataSetDeprecated: setReviewInitialDataSetDeprecated,
|
|
183
|
+
setInitialDataSetUpdatedAt: setInitialDataSetUpdatedAt,
|
|
184
|
+
hasTransformedRecords: hasTransformedRecords,
|
|
185
|
+
setHasTransformedRecords: setHasTransformedRecords,
|
|
309
186
|
};
|
|
310
187
|
function renderLoading() {
|
|
311
188
|
return isSubmitting ? (loadingComponent ? (loadingComponent()) : (_jsx(AppLoading, {}))) : null;
|
|
@@ -23,10 +23,10 @@ import { AppResponseModal } from "./AppResponseModal";
|
|
|
23
23
|
import { useReviewContext } from "./ReviewContextProvider";
|
|
24
24
|
var TitleContainer = styled(Div)(templateObject_1 || (templateObject_1 = __makeTemplateObject([""], [""])));
|
|
25
25
|
var ReviewWithContext = function () {
|
|
26
|
-
var _a = useReviewContext(), fields = _a.reviewFields, initialDataSet = _a.reviewInitialDataSet, options = _a.options, initialDataSetUpdatedAt = _a.initialDataSetUpdatedAt, onValidateRecord = _a.onValidateRecord, onDataSetChanged = _a.onDataSetChanged
|
|
26
|
+
var _a = useReviewContext(), fields = _a.reviewFields, initialDataSet = _a.reviewInitialDataSet, options = _a.options, initialDataSetUpdatedAt = _a.initialDataSetUpdatedAt, onValidateRecord = _a.onValidateRecord, onDataSetChanged = _a.onDataSetChanged;
|
|
27
27
|
var _b = useImporterContext(), selectedRows = _b.selectedRows, setSelectedRows = _b.setSelectedRows, isUsingManualImport = _b.isUsingManualImport;
|
|
28
28
|
var t = useTranslation("review").t;
|
|
29
|
-
var spreadsheetUI = initialDataSet && (_jsx(Spreadsheet, { initialDataSetUpdatedAt: initialDataSetUpdatedAt, options: __assign(__assign({}, options), { showCheckboxColumn: true }), selectedRows: selectedRows, setSelectedRows: setSelectedRows, initialDataSet: initialDataSet, fields: fields, onDataSetChanged: onDataSetChanged, onValidateRecord: onValidateRecord
|
|
29
|
+
var spreadsheetUI = initialDataSet && (_jsx(Spreadsheet, { initialDataSetUpdatedAt: initialDataSetUpdatedAt, options: __assign(__assign({}, options), { showCheckboxColumn: true }), selectedRows: selectedRows, setSelectedRows: setSelectedRows, initialDataSet: initialDataSet, fields: fields, onDataSetChanged: onDataSetChanged, onValidateRecord: onValidateRecord }));
|
|
30
30
|
return (_jsxs(Div, __assign({ centered: true, flexColumn: true, h100: true }, { children: [_jsx(AppResponseModal, {}), _jsxs(Div, __assign({ w100: true, h100: true, flexColumn: true }, { children: [_jsx(TitleContainer, __assign({ flexColumn: true, ml: 32 }, { children: _jsx(Div, __assign({ h2: true, mt: 40, mb: 40 }, { children: t(isUsingManualImport.current ? "manual_importer_title" : "title") })) })), _jsx(Div, __assign({ h100: true, w100: true, justifyCenter: true }, { children: spreadsheetUI }))] }))] })));
|
|
31
31
|
};
|
|
32
32
|
export default ReviewWithContext;
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
+
import { RecordDataSet } from "../../types";
|
|
1
2
|
type StepperSubmitModalProps = {
|
|
2
3
|
isSubmitModalOpen: boolean;
|
|
3
4
|
onCloseModal: () => void;
|
|
4
|
-
onSubmit: () => void;
|
|
5
|
+
onSubmit: (dataSet: RecordDataSet) => void;
|
|
5
6
|
};
|
|
6
7
|
export declare const StepperSubmitModal: ({ isSubmitModalOpen, onCloseModal, onSubmit, }: StepperSubmitModalProps) => JSX.Element;
|
|
7
8
|
export {};
|
|
@@ -14,11 +14,13 @@ import { Div } from "../../styled";
|
|
|
14
14
|
import { Button, Modal } from "../../common";
|
|
15
15
|
import { submitIcon } from "./common/icons";
|
|
16
16
|
import { useTranslation } from "react-i18next";
|
|
17
|
+
import { useDataSetContext } from "../../Importer/common/Spreadsheet/DataSetContextProvider";
|
|
17
18
|
export var StepperSubmitModal = function (_a) {
|
|
18
19
|
var isSubmitModalOpen = _a.isSubmitModalOpen, onCloseModal = _a.onCloseModal, onSubmit = _a.onSubmit;
|
|
19
20
|
var t = useTranslation("general").t;
|
|
20
|
-
|
|
21
|
-
|
|
21
|
+
var dataSet = useDataSetContext().dataSet;
|
|
22
|
+
return (_jsx(Modal, __assign({ isOpen: isSubmitModalOpen, onClose: function () { return onCloseModal(); } }, { children: _jsxs(Div, __assign({ centered: true, flexColumn: true, p: 60 }, { children: [_jsx(Div, { children: submitIcon }), _jsx(Div, __assign({ h5: true, mt: 20, "data-cy": "submit-modal-title" }, { children: t("submit_modal.title") })), _jsx(Div, __assign({ body1: true, mt: 12, w: 448, textAlignCenter: true, "data-cy": "submit-modal-description" }, { children: t("submit_modal.description") })), _jsxs(Div, __assign({ dflex: true, mt: 40, w100: true, centered: true }, { children: [_jsx(Button, __assign({ w: 115, variant: "secondary", mr: 10, onClick: function () { return onCloseModal(); }, "data-test-id": "submit-modal-go-back" }, { children: t("submit_modal.cancel") })), _jsx(Button, __assign({ "data-cy": "yes-submit", w: 140, ml: 10, onClick: function () {
|
|
23
|
+
onSubmit(dataSet === null || dataSet === void 0 ? void 0 : dataSet.current);
|
|
22
24
|
onCloseModal();
|
|
23
25
|
} }, { children: t("submit_modal.submit") }))] }))] })) })));
|
|
24
26
|
};
|
|
@@ -27,5 +27,5 @@ export var UnmatchedHeadersModal = function (_a) {
|
|
|
27
27
|
})
|
|
28
28
|
: t("unmatched_headers_modal.description_plural", {
|
|
29
29
|
count: unmatchedHeadersCount,
|
|
30
|
-
}) })), _jsxs(Div, __assign({ dflex: true, centered: true, mt: 40 }, { children: [_jsx(Button, __assign({ variant: "secondary", onClick: function () { return onCloseUnmatchedHeadersModal(); }, w: 160, mr: 16 }, { children: t("unmatched_headers_modal.assign_headers") })), _jsx(Button, __assign({ variant: "primary", onClick: skipStep }, { children: t("unmatched_headers_modal.skip") }))] }))] })) })));
|
|
30
|
+
}) })), _jsxs(Div, __assign({ dflex: true, centered: true, mt: 40 }, { children: [_jsx(Button, __assign({ variant: "secondary", onClick: function () { return onCloseUnmatchedHeadersModal(); }, w: 160, mr: 16 }, { children: t("unmatched_headers_modal.assign_headers") })), _jsx(Button, __assign({ "data-cy": "skip", variant: "primary", onClick: skipStep }, { children: t("unmatched_headers_modal.skip") }))] }))] })) })));
|
|
31
31
|
};
|
|
@@ -14,10 +14,12 @@ var __assign = (this && this.__assign) || function () {
|
|
|
14
14
|
return __assign.apply(this, arguments);
|
|
15
15
|
};
|
|
16
16
|
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
17
|
-
import { useState } from "react";
|
|
17
|
+
import { useEffect, useState } from "react";
|
|
18
18
|
import { useTranslation } from "react-i18next";
|
|
19
19
|
import styled, { css } from "styled-components";
|
|
20
|
+
import { useValidationContext } from "../../Importer/common/Spreadsheet/ValidationContextProvider";
|
|
20
21
|
import { Button, ChevronRightIcon, closeIconCondensed } from "../../common";
|
|
22
|
+
import { useEventManagerContext } from "../../common/EventManagerContextProvider";
|
|
21
23
|
import { Div } from "../../styled/utils";
|
|
22
24
|
import { ColumnType } from "../Matcher/common/types";
|
|
23
25
|
import { useReviewContext } from "../Review/ReviewContextProvider";
|
|
@@ -26,7 +28,7 @@ import { ConfirmCloseModal } from "./ConfirmCloseModal";
|
|
|
26
28
|
import { Step } from "./Step";
|
|
27
29
|
import { StepperSubmitModal } from "./StepperSubmitModal";
|
|
28
30
|
import { UnmatchedHeadersModal } from "./UnmatchedHeadersModal";
|
|
29
|
-
import {
|
|
31
|
+
import { useDataSetContext } from "../common/Spreadsheet/DataSetContextProvider";
|
|
30
32
|
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
33
|
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
34
|
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,21 +45,42 @@ export var Stepper = function (_a) {
|
|
|
43
45
|
var t = useTranslation("general").t;
|
|
44
46
|
var _c = useState(false), isSubmitModalOpen = _c[0], setIsSubmitModalOpen = _c[1];
|
|
45
47
|
var _d = useState(false), isConfirmCloseModalOpen = _d[0], setIsConfirmCloseModalOpen = _d[1];
|
|
46
|
-
var _e =
|
|
47
|
-
var _f =
|
|
48
|
+
var _e = useDataSetContext(), dataSetLength = _e.dataSetLength, emptyRecordIds = _e.emptyRecordIds;
|
|
49
|
+
var _f = useState(true), isSubmitDisabled = _f[0], setIsSubmitDisabled = _f[1];
|
|
50
|
+
var headerMappingsLoaded = useImporterContext().headerMappingsLoaded;
|
|
51
|
+
var _g = useReviewContext(), appResponse = _g.appResponse, onSubmit = _g.onSubmit;
|
|
52
|
+
var _h = useValidationContext(), totalErrorCount = _h.totalErrorCount, spreadsheetInitialized = _h.spreadsheetInitialized;
|
|
53
|
+
var _j = useEventManagerContext(), on = _j.on, off = _j.off, EVENTS = _j.EVENTS;
|
|
54
|
+
var updateSpreadsheetDisabled = function () {
|
|
55
|
+
var isSpreadsheetEmpty = dataSetLength.current === emptyRecordIds.current.size;
|
|
56
|
+
var isDisabled = totalErrorCount.current > 0 ||
|
|
57
|
+
!spreadsheetInitialized ||
|
|
58
|
+
isSpreadsheetEmpty;
|
|
59
|
+
setIsSubmitDisabled(isDisabled);
|
|
60
|
+
};
|
|
61
|
+
useEffect(function () {
|
|
62
|
+
on(EVENTS.UPDATE_TOTAL_ERROR_COUNT, updateSpreadsheetDisabled);
|
|
63
|
+
return function () {
|
|
64
|
+
off(EVENTS.UPDATE_TOTAL_ERROR_COUNT, updateSpreadsheetDisabled);
|
|
65
|
+
};
|
|
66
|
+
}, [appResponse, spreadsheetInitialized]);
|
|
67
|
+
useEffect(function () {
|
|
68
|
+
updateSpreadsheetDisabled();
|
|
69
|
+
}, [spreadsheetInitialized]);
|
|
70
|
+
var _k = useImporterContext(), initialRecords = _k.initialRecords, currentStepIndex = _k.currentStepIndex, templateHeaderMatchings = _k.templateHeaderMatchings, matcherSubstep = _k.matcherSubstep, templateHeaders = _k.templateHeaders, setMatcherSubstep = _k.setMatcherSubstep, setCurrentStepIndex = _k.setCurrentStepIndex, onClose = _k.onClose, isUsingManualImport = _k.isUsingManualImport, resetImporterWhenUsingManualImport = _k.resetImporterWhenUsingManualImport, uploadedData = _k.uploadedData;
|
|
71
|
+
var _l = useState(true), isContinueDisabled = _l[0], setIsContinueDisabled = _l[1];
|
|
48
72
|
var templateHeaderLabels = Object.keys(templateHeaderMatchings || []);
|
|
49
73
|
var unmatchedHeadersCount = templateHeaderLabels.filter(function (templateHeaderLabel) { return !templateHeaderMatchings[templateHeaderLabel]; }).length;
|
|
50
74
|
var isLastSubMatchStep = matcherSubstep === 1;
|
|
75
|
+
useEffect(function () {
|
|
76
|
+
setIsContinueDisabled(currentStepIndex === 1 && !headerMappingsLoaded);
|
|
77
|
+
}, [currentStepIndex, headerMappingsLoaded]);
|
|
51
78
|
var setStep = function () {
|
|
52
|
-
var
|
|
79
|
+
var templateEnumFields = templateHeaders === null || templateHeaders === void 0 ? void 0 : templateHeaders.filter(function (header) { return header.column_type === ColumnType.enum; });
|
|
80
|
+
var templateHasEnumFields = !!(templateEnumFields === null || templateEnumFields === void 0 ? void 0 : templateEnumFields.length);
|
|
53
81
|
if (templateHasEnumFields) {
|
|
54
|
-
var
|
|
55
|
-
|
|
56
|
-
templateHeaders: templateHeaders,
|
|
57
|
-
});
|
|
58
|
-
var anyTemplateEnumFieldsMatched = Object.keys(_enumFieldValueMatchings).length > 0;
|
|
59
|
-
if (anyTemplateEnumFieldsMatched) {
|
|
60
|
-
setEnumFieldValueMatchings(_enumFieldValueMatchings);
|
|
82
|
+
var templateEnumFieldsWithHeaderMatchings = templateEnumFields.filter(function (header) { return !!templateHeaderMatchings[header.label]; });
|
|
83
|
+
if (templateEnumFieldsWithHeaderMatchings.length > 0) {
|
|
61
84
|
setMatcherSubstep(1);
|
|
62
85
|
}
|
|
63
86
|
else {
|
|
@@ -110,7 +133,7 @@ export var Stepper = function (_a) {
|
|
|
110
133
|
return (_jsxs(Div, __assign({ centered: true }, { children: [_jsx(Step, { index: index, label: label, isCompleted: isCompleted, isSelected: index === currentStepIndex }), !isLast && (_jsx(Div, __assign({ ml: 18, mr: 18, dflex: true }, { children: _jsx(ChevronRightIcon, {}) })))] }), index));
|
|
111
134
|
}) })));
|
|
112
135
|
var leftButtonUI = (_jsx(Div, __assign({ style: { flex: 1 } }, { children: !initialRecords && (_jsxs(StepperButtonContainer, __assign({ align: "left" }, { children: [logoURL && (_jsx(Div, __assign({ forDesktop: true }, { children: _jsx(Logo, { src: logoURL, alt: "" }) }))), currentStepIndex > 0 && !appResponse && (_jsx(GoBackButtonWrapper, { children: _jsx(Button, __assign({ variant: "secondary", onClick: goBack }, { children: t("stepper.go_back") })) }))] }))) })));
|
|
113
|
-
var rightButtonUI = (_jsxs(StepperButtonContainer, __assign({ align: "right" }, { children: [(isMatchStep || isVerifyStep) && (_jsx(Button, __assign({ variant: "primary", onClick: continueToNextStep }, { children: t("stepper.continue") }))), isReviewStep && (_jsx(Button, __assign({ variant: "primary", isDisabled: isSubmitDisabled, onClick: function () { return setIsSubmitModalOpen(true); } }, { children: t("stepper.submit") }))), _jsx(CloseIcon, __assign({ "data-test-id": "close-importer", centered: true, clickable: true, onClick: handleOnClose }, { children: closeIconCondensed }))] })));
|
|
136
|
+
var rightButtonUI = (_jsxs(StepperButtonContainer, __assign({ align: "right" }, { children: [(isMatchStep || isVerifyStep) && (_jsx(Button, __assign({ "data-cy": "continue-button", isDisabled: isContinueDisabled, variant: "primary", onClick: continueToNextStep }, { children: t("stepper.continue") }))), isReviewStep && (_jsx(Button, __assign({ variant: "primary", isDisabled: isSubmitDisabled, "data-cy": "submit_disabled_" + isSubmitDisabled, onClick: function () { return setIsSubmitModalOpen(true); } }, { children: t("stepper.submit") }))), _jsx(CloseIcon, __assign({ "data-test-id": "close-importer", centered: true, clickable: true, onClick: handleOnClose }, { children: closeIconCondensed }))] })));
|
|
114
137
|
return (_jsxs(_Fragment, { children: [_jsx(StepperWrapper, __assign({ pRelative: true, alignCenter: true, w100: true, h: 72, centered: true }, { children: _jsxs(StepperContainer, { children: [leftButtonUI, _jsx(Steps, __assign({ alignCenter: true }, { children: stepsUI })), rightButtonUI] }) })), _jsx(UnmatchedHeadersModal, { isUnmatchedHeadersModalOpen: isUnmatchedHeadersModalOpen, unmatchedHeadersCount: unmatchedHeadersCount, onSetStep: function () { return setStep(); }, onCloseUnmatchedHeadersModal: function () {
|
|
115
138
|
return setIsUnmatchedHeadersModalOpen(false);
|
|
116
139
|
} }), _jsx(StepperSubmitModal, { isSubmitModalOpen: isSubmitModalOpen, onCloseModal: function () { return setIsSubmitModalOpen(false); }, onSubmit: onSubmit }), _jsx(ConfirmCloseModal, { isOpen: isConfirmCloseModalOpen, onClose: function () { return setIsConfirmCloseModalOpen(false); }, onCloseImporter: onClose })] }));
|
|
@@ -1,2 +1,3 @@
|
|
|
1
|
-
|
|
1
|
+
import { DropzoneProps as ImporterDropzoneProps } from "../../../common";
|
|
2
|
+
declare const ImporterDropzone: ({ onComplete, setIsLoading, saveFileName, }: ImporterDropzoneProps) => JSX.Element;
|
|
2
3
|
export { ImporterDropzone };
|
|
@@ -14,36 +14,31 @@ var __assign = (this && this.__assign) || function () {
|
|
|
14
14
|
return __assign.apply(this, arguments);
|
|
15
15
|
};
|
|
16
16
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
17
|
-
import { useDropzone } from "react-dropzone";
|
|
18
17
|
import styled, { css } from "styled-components";
|
|
19
|
-
import {
|
|
20
|
-
import { useImporterContext } from "../../contexts/ImporterContextProvider";
|
|
18
|
+
import { useImporterContext } from "../../../Importer/contexts/ImporterContextProvider";
|
|
21
19
|
import { Div } from "../../../styled/utils";
|
|
22
20
|
import { theme } from "../../../styled/theme";
|
|
23
|
-
import {
|
|
24
|
-
import { Button } from "../../../common/buttons";
|
|
25
|
-
import { DragAndDropSvg, UploadIndicatorSvg } from "./backgrounds";
|
|
21
|
+
import { DragAndDropSvg, UploadIndicatorSvg, } from "../../../Importer/Uploader/DragAndDropImporter/backgrounds";
|
|
26
22
|
import { useTranslation } from "react-i18next";
|
|
27
|
-
import
|
|
23
|
+
import { Button, addToast, useDragAndDrop, } from "../../../common";
|
|
28
24
|
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
25
|
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
26
|
});
|
|
31
27
|
var DropzoneUploadingContainer = styled(Div)(function (_a) {
|
|
32
|
-
var
|
|
33
|
-
return css(templateObject_3 || (templateObject_3 = __makeTemplateObject(["\n position: absolute;\n height: 100%;\n width: 100%;\n background: ", ";\n border: 1px solid ", ";\n "], ["\n position: absolute;\n height: 100%;\n width: 100%;\n background: ", ";\n border: 1px solid ", ";\n "])),
|
|
28
|
+
var colors = _a.theme.colors;
|
|
29
|
+
return css(templateObject_3 || (templateObject_3 = __makeTemplateObject(["\n position: absolute;\n height: 100%;\n width: 100%;\n background: ", ";\n border: 1px solid ", ";\n "], ["\n position: absolute;\n height: 100%;\n width: 100%;\n background: ", ";\n border: 1px solid ", ";\n "])), colors.blue100, colors.blue500);
|
|
34
30
|
});
|
|
35
31
|
var dropzoneUploadingUI = (_jsx(DropzoneUploadingContainer, __assign({ centered: true }, { children: _jsxs(Div, { children: [_jsx(Div, __assign({ centered: true, mb: 12 }, { children: UploadIndicatorSvg })), _jsx(Div, __assign({ h5: true }, { children: " Drop your file here to upload!" }))] }) })));
|
|
36
32
|
var DragAndDropComponent = function (_a) {
|
|
37
33
|
var openUploadFileDialog = _a.openUploadFileDialog;
|
|
38
34
|
var t = useTranslation("upload").t;
|
|
39
35
|
var manualDataImportSelected = useImporterContext().manualDataImportSelected;
|
|
40
|
-
return (_jsxs(Div, __assign({ centered: true, flexColumn: true }, { children: [_jsx(Div, __assign({ mb: 12 }, { children: DragAndDropSvg })), _jsx(Div, __assign({ h5: true }, { children: t("dropzone.title") })), _jsx(Button, __assign({ mt: 20, variant: "secondary", w: "fit-content", p: 12, isSmall: true, onClick: openUploadFileDialog }, { children: t("dropzone.button") })), _jsx(Div, __assign({ body1: true, textAlignCenter: true, m: 4, mt: 24 }, { children: t("dropzone.description") })), _jsx(Div, { children: _jsx(Button, __assign({ variant: "link", w: "fit-content", p: 12, isSmall: true, onClick: manualDataImportSelected }, { children: t("dropzone.enter_data_manually") })) })] })));
|
|
36
|
+
return (_jsxs(Div, __assign({ centered: true, flexColumn: true }, { children: [_jsx(Div, __assign({ mb: 12 }, { children: DragAndDropSvg })), _jsx(Div, __assign({ h5: true }, { children: t("dropzone.title") })), _jsx(Button, __assign({ mt: 20, variant: "secondary", w: "fit-content", p: 12, isSmall: true, onClick: openUploadFileDialog }, { children: t("dropzone.button") })), _jsx(Div, __assign({ body1: true, textAlignCenter: true, m: 4, mt: 24 }, { children: t("dropzone.description") })), _jsx(Div, { children: _jsx(Button, __assign({ "data-cy": "enter-manually", variant: "link", w: "fit-content", p: 12, isSmall: true, onClick: manualDataImportSelected }, { children: t("dropzone.enter_data_manually") })) })] })));
|
|
41
37
|
};
|
|
42
|
-
var ImporterDropzone = function () {
|
|
43
|
-
var
|
|
44
|
-
var setUploadedData = useImporterContext().setUploadedData;
|
|
38
|
+
var ImporterDropzone = function (_a) {
|
|
39
|
+
var onComplete = _a.onComplete, setIsLoading = _a.setIsLoading, saveFileName = _a.saveFileName;
|
|
45
40
|
var validHeadersCount = function (headersLength) {
|
|
46
|
-
var headersCountLimit =
|
|
41
|
+
var headersCountLimit = 70;
|
|
47
42
|
if (headersLength > headersCountLimit) {
|
|
48
43
|
addToast("File cannot contain more than ".concat(headersCountLimit, " columns"), "error");
|
|
49
44
|
return false;
|
|
@@ -52,56 +47,12 @@ var ImporterDropzone = function () {
|
|
|
52
47
|
return true;
|
|
53
48
|
}
|
|
54
49
|
};
|
|
55
|
-
var
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
reader.onerror = function () { return console.log("file reading has failed"); };
|
|
62
|
-
reader.onload = function (event) {
|
|
63
|
-
var _a;
|
|
64
|
-
var results = event.target.result;
|
|
65
|
-
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;
|
|
71
|
-
};
|
|
72
|
-
var fileData = getDataFromFile(results);
|
|
73
|
-
var headersCount = (_a = fileData[0]) === null || _a === void 0 ? void 0 : _a.length;
|
|
74
|
-
if (validHeadersCount(headersCount)) {
|
|
75
|
-
setUploadedData(fileData);
|
|
76
|
-
}
|
|
77
|
-
setIsUploading(false);
|
|
78
|
-
};
|
|
79
|
-
reader.readAsArrayBuffer(file);
|
|
80
|
-
});
|
|
81
|
-
};
|
|
82
|
-
var onDropRejected = function (rejectedFiles) {
|
|
83
|
-
var errorMessages = rejectedFiles.map(function (file) {
|
|
84
|
-
if (file.errors[0].code === "file-too-large") {
|
|
85
|
-
return "Maximum file size is 200MB";
|
|
86
|
-
}
|
|
87
|
-
else {
|
|
88
|
-
return file.errors[0].message;
|
|
89
|
-
}
|
|
90
|
-
});
|
|
91
|
-
var uniqueMessages = Array.from(new Set(errorMessages));
|
|
92
|
-
uniqueMessages.forEach(function (message) {
|
|
93
|
-
addToast(message, "error");
|
|
94
|
-
});
|
|
95
|
-
};
|
|
96
|
-
var _b = useDropzone({
|
|
97
|
-
onDrop: onDrop,
|
|
98
|
-
onDropRejected: onDropRejected,
|
|
99
|
-
noClick: true,
|
|
100
|
-
noKeyboard: true,
|
|
101
|
-
accept: ".csv",
|
|
102
|
-
maxFiles: 1,
|
|
103
|
-
maxSize: 200000000, // 200MB
|
|
104
|
-
}), getRootProps = _b.getRootProps, getInputProps = _b.getInputProps, open = _b.open, isDragActive = _b.isDragActive;
|
|
50
|
+
var _b = useDragAndDrop({
|
|
51
|
+
onComplete: onComplete,
|
|
52
|
+
saveFileName: saveFileName,
|
|
53
|
+
setIsLoading: setIsLoading,
|
|
54
|
+
validHeadersCount: validHeadersCount,
|
|
55
|
+
}), getInputProps = _b.getInputProps, getRootProps = _b.getRootProps, isDragActive = _b.isDragActive, open = _b.open;
|
|
105
56
|
return (_jsxs(DragAndDropCard, __assign({ isDragActive: isDragActive, centered: true, pRelative: true }, getRootProps(), { children: [_jsx("input", __assign({}, getInputProps())), isDragActive && dropzoneUploadingUI, _jsx(DragAndDropComponent, { openUploadFileDialog: open })] })));
|
|
106
57
|
};
|
|
107
58
|
export { ImporterDropzone };
|
|
@@ -28,7 +28,7 @@ var HeadersList = function (_a) {
|
|
|
28
28
|
var title = _a.title, headers = _a.headers, props = __rest(_a, ["title", "headers"]);
|
|
29
29
|
return (_jsxs(_Fragment, { children: [_jsx(Div, __assign({ label3: true }, props, { children: title })), headers.map(function (header, index) {
|
|
30
30
|
var isLast = index === headers.length - 1;
|
|
31
|
-
return (_jsx(S.HeaderListItem, __assign({ body1: true, isLast: isLast, mt: 16 }, { children: header }), index));
|
|
31
|
+
return (_jsx(S.HeaderListItem, __assign({ body1: true, "data-cy": header, isLast: isLast, mt: 16 }, { children: header }), index));
|
|
32
32
|
})] }));
|
|
33
33
|
};
|
|
34
34
|
export var HeaderCard = function (_a) {
|
|
@@ -40,5 +40,5 @@ export var HeaderCard = function (_a) {
|
|
|
40
40
|
.filter(function (h) { return !h.required; })
|
|
41
41
|
.map(function (h) { return h.label; });
|
|
42
42
|
var t = useTranslation("upload").t;
|
|
43
|
-
return (_jsx(S.HeaderCardWrapper, { children: _jsxs(S.HeaderCardContainer, __assign({}, props, { children: [_jsx(Div, __assign({ body3: true, mb: 24 }, { children: t("header.title") })), requiredHeaders.length > 0 && (_jsx(HeadersList, { title: t("header.required_headers"), headers: requiredHeaders })), optionalHeaders.length > 0 && (_jsx(HeadersList, { title: t("header.optional_headers"), headers: optionalHeaders, mt: 30 }))] })) }));
|
|
43
|
+
return (_jsx(S.HeaderCardWrapper, { children: _jsxs(S.HeaderCardContainer, __assign({}, props, { children: [_jsx(Div, __assign({ "data-cy": "header_title", body3: true, mb: 24 }, { children: t("header.title") })), requiredHeaders.length > 0 && (_jsx(HeadersList, { "data-cy": "required_header", title: t("header.required_headers"), headers: requiredHeaders })), optionalHeaders.length > 0 && (_jsx(HeadersList, { "data-cy": "optional_header", title: t("header.optional_headers"), headers: optionalHeaders, mt: 30 }))] })) }));
|
|
44
44
|
};
|