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
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
11
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
12
|
+
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
13
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
14
|
+
function step(op) {
|
|
15
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
16
|
+
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
17
|
+
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;
|
|
18
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
19
|
+
switch (op[0]) {
|
|
20
|
+
case 0: case 1: t = op; break;
|
|
21
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
22
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
23
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
24
|
+
default:
|
|
25
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
26
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
27
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
28
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
29
|
+
if (t[2]) _.ops.pop();
|
|
30
|
+
_.trys.pop(); continue;
|
|
31
|
+
}
|
|
32
|
+
op = body.call(thisArg, _);
|
|
33
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
34
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
import { useBatchProcessing } from "./useBatchProcessing";
|
|
38
|
+
import { rowIsEmpty } from "./utils";
|
|
39
|
+
var findDuplicateHashes = function (sortedHashes) {
|
|
40
|
+
var _a;
|
|
41
|
+
var results = [];
|
|
42
|
+
for (var i = 0; i < sortedHashes.length - 1; i++) {
|
|
43
|
+
if (sortedHashes[i + 1].hash == sortedHashes[i].hash ||
|
|
44
|
+
((_a = sortedHashes[i - 1]) === null || _a === void 0 ? void 0 : _a.hash) == sortedHashes[i].hash) {
|
|
45
|
+
results.push(sortedHashes[i]);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
return results;
|
|
49
|
+
};
|
|
50
|
+
function compareHashes(a, b) {
|
|
51
|
+
if (a.hash < b.hash)
|
|
52
|
+
return -1;
|
|
53
|
+
if (a.hash > b.hash)
|
|
54
|
+
return 1;
|
|
55
|
+
return 0;
|
|
56
|
+
}
|
|
57
|
+
// generate hashes that can be used for comparing two records
|
|
58
|
+
// for the sake of tracking duplicates
|
|
59
|
+
// if the hash for one record equals the hash for another,
|
|
60
|
+
// the two records are duplicates
|
|
61
|
+
export var RecordHashCalculator = function () {
|
|
62
|
+
var computeHashesForBatch = function (dataSet, fields) {
|
|
63
|
+
var hashMap = [];
|
|
64
|
+
var _loop_1 = function (recordKey) {
|
|
65
|
+
var record = dataSet[recordKey];
|
|
66
|
+
var key = fields.map(function (field) { return record[field.name]; }).join("|");
|
|
67
|
+
if (!rowIsEmpty(record)) {
|
|
68
|
+
hashMap.push({ id: record._meta.id, hash: key });
|
|
69
|
+
}
|
|
70
|
+
};
|
|
71
|
+
for (var recordKey in dataSet) {
|
|
72
|
+
_loop_1(recordKey);
|
|
73
|
+
}
|
|
74
|
+
return hashMap;
|
|
75
|
+
};
|
|
76
|
+
var calculatingHashes = false;
|
|
77
|
+
var computeHashesForRecords = function (dataSet, fields, _onHashesComputed) { return __awaiter(void 0, void 0, void 0, function () {
|
|
78
|
+
var processInBatches, results, duplicateHashes;
|
|
79
|
+
return __generator(this, function (_a) {
|
|
80
|
+
switch (_a.label) {
|
|
81
|
+
case 0:
|
|
82
|
+
if (!dataSet || calculatingHashes) {
|
|
83
|
+
return [2 /*return*/];
|
|
84
|
+
}
|
|
85
|
+
processInBatches = useBatchProcessing().processInBatches;
|
|
86
|
+
calculatingHashes = true;
|
|
87
|
+
results = [];
|
|
88
|
+
return [4 /*yield*/, processInBatches(dataSet, function (batch) {
|
|
89
|
+
results = results.concat(computeHashesForBatch(batch, fields));
|
|
90
|
+
})];
|
|
91
|
+
case 1:
|
|
92
|
+
_a.sent();
|
|
93
|
+
results.sort(compareHashes);
|
|
94
|
+
duplicateHashes = findDuplicateHashes(results);
|
|
95
|
+
_onHashesComputed(duplicateHashes);
|
|
96
|
+
calculatingHashes = false;
|
|
97
|
+
return [2 /*return*/];
|
|
98
|
+
}
|
|
99
|
+
});
|
|
100
|
+
}); };
|
|
101
|
+
return {
|
|
102
|
+
computeHashesForRecords: computeHashesForRecords,
|
|
103
|
+
};
|
|
104
|
+
};
|
|
105
|
+
// generate hashes that can be used for comparing the values of a specific field
|
|
106
|
+
// for the sake of tracking uniqueness
|
|
107
|
+
export var RecordValueHashCalculator = function () {
|
|
108
|
+
var columnsBeingCalculated = [];
|
|
109
|
+
var computeHashesForBatch = function (dataSet, field) {
|
|
110
|
+
var hashMap = [];
|
|
111
|
+
var isCaseInsensitive = field.validations.find(function (v) {
|
|
112
|
+
return v.name === "unique_case_insensitive";
|
|
113
|
+
}) !== undefined;
|
|
114
|
+
for (var recordKey in dataSet) {
|
|
115
|
+
var record = dataSet[recordKey];
|
|
116
|
+
var key = record[field.name];
|
|
117
|
+
if (isCaseInsensitive) {
|
|
118
|
+
key = key.toLowerCase();
|
|
119
|
+
}
|
|
120
|
+
if (key) {
|
|
121
|
+
hashMap.push({ id: record._meta.id, hash: key });
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
return hashMap;
|
|
125
|
+
};
|
|
126
|
+
var computeDuplicateValueHashes = function (dataSet, _field, _onDuplicateHashesComputed) { return __awaiter(void 0, void 0, void 0, function () {
|
|
127
|
+
var processInBatches, results;
|
|
128
|
+
return __generator(this, function (_a) {
|
|
129
|
+
switch (_a.label) {
|
|
130
|
+
case 0:
|
|
131
|
+
if (!dataSet || columnsBeingCalculated[_field.name]) {
|
|
132
|
+
return [2 /*return*/];
|
|
133
|
+
}
|
|
134
|
+
columnsBeingCalculated[_field.name] = true;
|
|
135
|
+
processInBatches = useBatchProcessing().processInBatches;
|
|
136
|
+
results = [];
|
|
137
|
+
return [4 /*yield*/, processInBatches(dataSet, function (batch) {
|
|
138
|
+
results = results.concat(computeHashesForBatch(batch, _field));
|
|
139
|
+
})];
|
|
140
|
+
case 1:
|
|
141
|
+
_a.sent();
|
|
142
|
+
results.sort(compareHashes);
|
|
143
|
+
_onDuplicateHashesComputed(results);
|
|
144
|
+
columnsBeingCalculated[_field.name] = false;
|
|
145
|
+
return [2 /*return*/];
|
|
146
|
+
}
|
|
147
|
+
});
|
|
148
|
+
}); };
|
|
149
|
+
return {
|
|
150
|
+
computeDuplicateValueHashes: computeDuplicateValueHashes,
|
|
151
|
+
};
|
|
152
|
+
};
|
|
@@ -1,46 +1,23 @@
|
|
|
1
1
|
import React from "react";
|
|
2
2
|
import { SpreadsheetOptions } from "../../../..";
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import { ValidationState } from "../hooks";
|
|
6
|
-
import { SpreadsheetFilter } from "./useSpreadsheetFilter";
|
|
3
|
+
import { Field, RecordDataSet } from "../../../../types";
|
|
4
|
+
import { SpreadsheetProps } from "../common/types";
|
|
7
5
|
export type OnDataSetChanged = (dataSet: RecordDataSet) => void;
|
|
8
|
-
export type OnValidationStateChanged = (state: ValidationState) => void;
|
|
9
6
|
type State = {
|
|
10
|
-
|
|
7
|
+
filteredDataIds: string[];
|
|
11
8
|
fields: Field[];
|
|
12
|
-
isLoading: boolean;
|
|
13
9
|
isReadOnly?: boolean;
|
|
14
|
-
errors: BatchValidationErrors;
|
|
15
|
-
warnings: BatchValidationErrors;
|
|
16
10
|
options: SpreadsheetOptions;
|
|
17
|
-
sortByFieldErrors: string;
|
|
18
|
-
sortByFieldWarnings: string;
|
|
19
|
-
updateRecord: (record: Record) => void;
|
|
20
|
-
setIsLoading: React.Dispatch<React.SetStateAction<boolean>>;
|
|
21
|
-
setSortByFieldErrors: React.Dispatch<React.SetStateAction<string>>;
|
|
22
11
|
selectedRows: string[];
|
|
23
12
|
setSelectedRows: React.Dispatch<React.SetStateAction<string[]>>;
|
|
24
|
-
setSortByFieldWarnings: React.Dispatch<React.SetStateAction<string>>;
|
|
25
|
-
deleteRecords: (selectedRecords: string[]) => void;
|
|
26
13
|
lastClickedIndexRef: React.MutableRefObject<number | null>;
|
|
27
|
-
filteredInputValue: string;
|
|
28
|
-
setFilteredInputValue: React.Dispatch<React.SetStateAction<string>>;
|
|
29
|
-
addNewRowsToSpreadsheet: () => void;
|
|
30
|
-
spreadsheetFilter: SpreadsheetFilter;
|
|
31
|
-
filterRecordsByRowType: (filterByRow: SpreadsheetFilter["byRow"]) => void;
|
|
32
|
-
filterRecordsByFieldErrors: (filterByColumn: string) => void;
|
|
33
|
-
resetSpreadsheetFilter: () => void;
|
|
34
|
-
recordsWithValuesCount: number;
|
|
35
|
-
filteredDataCount: number;
|
|
36
14
|
checkboxColumnWidth: number;
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
} & ValidationState;
|
|
15
|
+
inefficientRerender: boolean;
|
|
16
|
+
setInefficientRerender: React.Dispatch<React.SetStateAction<boolean>>;
|
|
17
|
+
};
|
|
41
18
|
type Props = SpreadsheetProps & {
|
|
42
19
|
children: JSX.Element;
|
|
43
20
|
};
|
|
44
|
-
export declare const SpreadsheetContextProvider: ({
|
|
21
|
+
export declare const SpreadsheetContextProvider: ({ fields, options, isReadOnly, children, onValidateRecord, selectedRows, setSelectedRows, }: Props) => JSX.Element;
|
|
45
22
|
export declare const useSpreadsheetContext: () => State;
|
|
46
23
|
export {};
|
|
@@ -21,155 +21,24 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
|
21
21
|
return t;
|
|
22
22
|
};
|
|
23
23
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
24
|
-
import {
|
|
25
|
-
import {
|
|
26
|
-
import {
|
|
27
|
-
import { useValidationState } from "../hooks";
|
|
28
|
-
import { useSpreadsheetFilter, } from "./useSpreadsheetFilter";
|
|
29
|
-
import { filterRecordsByType, filterRecordsByError, filterRecordsBySearchValue, } from "./filterMethods";
|
|
30
|
-
import { hasValueInAnyField } from "./utils";
|
|
31
|
-
var getDefaultSortCompareFn = function (sortBy) {
|
|
32
|
-
return function (a, b) {
|
|
33
|
-
var aField = get(a, sortBy.field);
|
|
34
|
-
var bField = get(b, sortBy.field);
|
|
35
|
-
if (aField === bField)
|
|
36
|
-
return a._meta.rowIndex > b._meta.rowIndex ? 1 : -1;
|
|
37
|
-
if (!aField)
|
|
38
|
-
return 1;
|
|
39
|
-
if (!bField)
|
|
40
|
-
return -1;
|
|
41
|
-
if (sortBy.direction === "asc")
|
|
42
|
-
return aField > bField ? 1 : -1;
|
|
43
|
-
return aField < bField ? 1 : -1;
|
|
44
|
-
};
|
|
45
|
-
};
|
|
24
|
+
import { createContext, useContext, useMemo, useRef, useState, } from "react";
|
|
25
|
+
import { useFilteredDataContext } from "../FilteredDataContextProvider";
|
|
26
|
+
import { useValidationContext } from "../ValidationContextProvider";
|
|
46
27
|
var SpreadsheetContext = createContext({});
|
|
47
28
|
export var SpreadsheetContextProvider = function (_a) {
|
|
48
|
-
var
|
|
49
|
-
var
|
|
50
|
-
var
|
|
51
|
-
var
|
|
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];
|
|
55
|
-
var addRowTimeoutRef = useRef(null);
|
|
56
|
-
var _j = useSpreadsheetFilter(), spreadsheetFilter = _j.spreadsheetFilter, filterRecordsByRowType = _j.filterRecordsByRowType, filterRecordsByFieldErrors = _j.filterRecordsByFieldErrors, resetSpreadsheetFilter = _j.resetSpreadsheetFilter;
|
|
57
|
-
var _k = useValidationState({
|
|
58
|
-
dataSet: dataSet,
|
|
59
|
-
initialDataSet: initialDataSet,
|
|
60
|
-
fields: fields,
|
|
61
|
-
options: options,
|
|
62
|
-
isReadOnly: isReadOnly,
|
|
63
|
-
setDataSet: setDataSet,
|
|
64
|
-
setIsLoading: setIsLoading,
|
|
65
|
-
onValidateRecord: onValidateRecord,
|
|
66
|
-
}), updateRecordAndRevalidate = _k.updateRecordAndRevalidate, deleteRecords = _k.deleteRecords, warnings = _k.warnings, errors = _k.errors, validationState = __rest(_k, ["updateRecordAndRevalidate", "deleteRecords", "warnings", "errors"]);
|
|
67
|
-
var addNewRowsToSpreadsheet = function () {
|
|
68
|
-
addRowTimeoutRef.current = setTimeout(function () {
|
|
69
|
-
var _a, _b;
|
|
70
|
-
var highestRowIndex = -1;
|
|
71
|
-
for (var key in dataSet)
|
|
72
|
-
if (((_b = (_a = dataSet[key]) === null || _a === void 0 ? void 0 : _a._meta) === null || _b === void 0 ? void 0 : _b.rowIndex) > highestRowIndex)
|
|
73
|
-
highestRowIndex = dataSet[key]._meta.rowIndex;
|
|
74
|
-
var newRow = addMeta({}, highestRowIndex + 1);
|
|
75
|
-
setDataSet(function (oldValues) {
|
|
76
|
-
var _a;
|
|
77
|
-
return (__assign(__assign({}, oldValues), (_a = {}, _a[newRow._meta.id] = newRow, _a)));
|
|
78
|
-
});
|
|
79
|
-
addRowTimeoutRef.current = null;
|
|
80
|
-
}, 300);
|
|
81
|
-
};
|
|
82
|
-
var handleDeleteErrors = function (selectedRows) {
|
|
83
|
-
deleteRecords(selectedRows, errors, warnings);
|
|
84
|
-
};
|
|
85
|
-
var dataSnapshot = useMemo(function () {
|
|
86
|
-
var filteredData = spreadsheetFilter.type === "rowBased"
|
|
87
|
-
? filterRecordsByType(dataSet, spreadsheetFilter.byRow)
|
|
88
|
-
: filterRecordsByError(dataSet, spreadsheetFilter.byColumn.field, errors);
|
|
89
|
-
var filteredDatasetByString = filteredInputValue
|
|
90
|
-
? filterRecordsBySearchValue(filteredData, filteredInputValue)
|
|
91
|
-
: filteredData;
|
|
92
|
-
var dataSetValues = Object.values(filteredDatasetByString);
|
|
93
|
-
if (sortBy) {
|
|
94
|
-
return dataSetValues.sort(getSortCompareFn(sortBy));
|
|
95
|
-
}
|
|
96
|
-
else if (!!sortByFieldErrors || !!sortByFieldWarnings)
|
|
97
|
-
return dataSetValues.sort(function (a, b) {
|
|
98
|
-
var aHasErrors = !!get(sortByFieldErrors ? errors : warnings, "".concat(get(a, "_meta.id"), ".").concat(sortByFieldErrors || sortByFieldWarnings), false);
|
|
99
|
-
var bHasErrors = !!get(sortByFieldErrors ? errors : warnings, "".concat(get(b, "_meta.id"), ".").concat(sortByFieldErrors || sortByFieldWarnings), false);
|
|
100
|
-
if (aHasErrors === bHasErrors) {
|
|
101
|
-
return a._meta.rowIndex > b._meta.rowIndex ? 1 : -1;
|
|
102
|
-
}
|
|
103
|
-
return bHasErrors ? 1 : -1;
|
|
104
|
-
});
|
|
105
|
-
return dataSetValues;
|
|
106
|
-
}, [
|
|
107
|
-
filteredInputValue,
|
|
108
|
-
spreadsheetFilter,
|
|
109
|
-
sortBy,
|
|
110
|
-
Object.keys(dataSet).length,
|
|
111
|
-
sortByFieldErrors,
|
|
112
|
-
sortByFieldWarnings,
|
|
113
|
-
]);
|
|
114
|
-
var recordsWithValuesCount = useMemo(function () {
|
|
115
|
-
return Object.values(dataSet).filter(hasValueInAnyField).length;
|
|
116
|
-
}, [dataSet]);
|
|
117
|
-
var filteredDataCount = useMemo(function () {
|
|
118
|
-
return Object.values(dataSnapshot).filter(hasValueInAnyField).length;
|
|
119
|
-
}, [dataSnapshot]);
|
|
120
|
-
var isFiltering = useMemo(function () { return !!filteredInputValue; }, [filteredInputValue]);
|
|
121
|
-
useEffect(function () {
|
|
122
|
-
onDataSetChanged && onDataSetChanged(dataSet);
|
|
123
|
-
if (addRowTimeoutRef.current) {
|
|
124
|
-
// avoid adding new rows when the user is typing
|
|
125
|
-
clearTimeout(addRowTimeoutRef.current);
|
|
126
|
-
}
|
|
127
|
-
var dataSetKeys = Object.keys(dataSet);
|
|
128
|
-
var latestDataSet = dataSet[dataSetKeys[dataSetKeys.length - 1]];
|
|
129
|
-
var latestDataSetValuesWithoutMeta = Object.values(latestDataSet).filter(function (key) { return key !== "_meta"; });
|
|
130
|
-
var hasValueInTheLastObject = latestDataSetValuesWithoutMeta
|
|
131
|
-
.filter(function (value) {
|
|
132
|
-
return value !== null && value !== undefined && typeof value !== "object";
|
|
133
|
-
})
|
|
134
|
-
.some(function (value) { return value !== "null" && value !== "undefined"; });
|
|
135
|
-
if (hasValueInTheLastObject) {
|
|
136
|
-
addNewRowsToSpreadsheet();
|
|
137
|
-
}
|
|
138
|
-
}, [dataSet]);
|
|
139
|
-
// Review this later, this probably isn't the best approach
|
|
140
|
-
useEffect(function () {
|
|
141
|
-
setDataSet(initialDataSet);
|
|
142
|
-
}, [initialDataSet]);
|
|
143
|
-
useEffect(function () {
|
|
144
|
-
onValidationStateChanged &&
|
|
145
|
-
onValidationStateChanged(__assign(__assign({}, validationState), { errors: errors, warnings: warnings }));
|
|
146
|
-
}, [validationState, onValidationStateChanged]);
|
|
147
|
-
var handleSortByFieldErrors = useCallback(function (field) {
|
|
148
|
-
setSortByFieldErrors(field === sortByFieldErrors ? null : field);
|
|
149
|
-
setSortByFieldWarnings(null);
|
|
150
|
-
setSortBy(null);
|
|
151
|
-
}, [sortByFieldErrors]);
|
|
152
|
-
var handleSortByFieldWarnings = useCallback(function (field) {
|
|
153
|
-
setSortByFieldWarnings(field === sortByFieldWarnings ? null : field);
|
|
154
|
-
setSortByFieldErrors(null);
|
|
155
|
-
setSortBy(null);
|
|
156
|
-
}, [sortByFieldWarnings]);
|
|
29
|
+
var fields = _a.fields, options = _a.options, isReadOnly = _a.isReadOnly, children = _a.children, onValidateRecord = _a.onValidateRecord, selectedRows = _a.selectedRows, setSelectedRows = _a.setSelectedRows;
|
|
30
|
+
var _b = useState(false), inefficientRerender = _b[0], setInefficientRerender = _b[1];
|
|
31
|
+
var filteredDataIds = useFilteredDataContext().filteredDataIds;
|
|
32
|
+
var _c = useValidationContext(), calculateColumnErrorCounts = _c.calculateColumnErrorCounts, calculateColumnWarningCounts = _c.calculateColumnWarningCounts, warnings = _c.warnings, errors = _c.errors, validationState = __rest(_c, ["calculateColumnErrorCounts", "calculateColumnWarningCounts", "warnings", "errors"]);
|
|
157
33
|
var lastClickedIndexRef = useRef(null);
|
|
158
34
|
var checkboxColumnWidth = useMemo(function () {
|
|
159
|
-
var lastRowIndexLength =
|
|
35
|
+
var lastRowIndexLength = filteredDataIds.length.toString().length;
|
|
160
36
|
var singleLetterWidth = 15;
|
|
161
37
|
var horizontalSpacing = 8;
|
|
162
38
|
var baseCheckboxColumnWidth = lastRowIndexLength * singleLetterWidth + horizontalSpacing;
|
|
163
39
|
return baseCheckboxColumnWidth < 40 ? 40 : baseCheckboxColumnWidth;
|
|
164
|
-
}, [
|
|
165
|
-
var
|
|
166
|
-
return dataSnapshot.map(function (data) {
|
|
167
|
-
var _a;
|
|
168
|
-
var updatedData = dataSet[(_a = data._meta) === null || _a === void 0 ? void 0 : _a.id];
|
|
169
|
-
return updatedData;
|
|
170
|
-
});
|
|
171
|
-
}, [dataSet, dataSnapshot]);
|
|
172
|
-
var value = __assign(__assign({ data: updatedDataSnapshot, fields: fields, isLoading: isLoading }, validationState), { isReadOnly: isReadOnly, sortByFieldErrors: sortByFieldErrors, sortByFieldWarnings: sortByFieldWarnings, options: options, recordsWithValuesCount: recordsWithValuesCount, filteredDataCount: filteredDataCount, sortBy: sortBy, warnings: warnings, errors: errors, setIsLoading: setIsLoading, setSortByFieldErrors: handleSortByFieldErrors, setSortByFieldWarnings: handleSortByFieldWarnings, onValidateRecord: onValidateRecord, updateRecord: updateRecordAndRevalidate, selectedRows: selectedRows, setSelectedRows: setSelectedRows, deleteRecords: handleDeleteErrors, filteredInputValue: filteredInputValue, setFilteredInputValue: setFilteredInputValue, lastClickedIndexRef: lastClickedIndexRef, addNewRowsToSpreadsheet: addNewRowsToSpreadsheet, spreadsheetFilter: spreadsheetFilter, resetSpreadsheetFilter: resetSpreadsheetFilter, filterRecordsByRowType: filterRecordsByRowType, filterRecordsByFieldErrors: filterRecordsByFieldErrors, checkboxColumnWidth: checkboxColumnWidth, setSortBy: setSortBy, isFiltering: isFiltering });
|
|
40
|
+
}, [filteredDataIds.length]);
|
|
41
|
+
var value = __assign(__assign({ filteredDataIds: filteredDataIds, fields: fields }, validationState), { isReadOnly: isReadOnly, options: options, onValidateRecord: onValidateRecord, selectedRows: selectedRows, setSelectedRows: setSelectedRows, lastClickedIndexRef: lastClickedIndexRef, checkboxColumnWidth: checkboxColumnWidth, inefficientRerender: inefficientRerender, setInefficientRerender: setInefficientRerender });
|
|
173
42
|
return (_jsx(SpreadsheetContext.Provider, __assign({ value: value }, { children: children })));
|
|
174
43
|
};
|
|
175
44
|
export var useSpreadsheetContext = function () { return useContext(SpreadsheetContext); };
|
package/lib/esm/Importer/common/Spreadsheet/SpreadsheetContextProvider/useBatchProcessing.d.ts
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { Record, RecordDataSet } from "../../../../types";
|
|
2
|
+
export declare const useBatchProcessing: (batchPageSize?: number) => {
|
|
3
|
+
processRecordsInBatches: (records: Record[], handleBatch: (x: any) => void) => Promise<void>;
|
|
4
|
+
processInBatches: (dataSet: RecordDataSet, handleBatch: (x: any) => void) => Promise<void>;
|
|
5
|
+
};
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
11
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
12
|
+
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
13
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
14
|
+
function step(op) {
|
|
15
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
16
|
+
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
17
|
+
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;
|
|
18
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
19
|
+
switch (op[0]) {
|
|
20
|
+
case 0: case 1: t = op; break;
|
|
21
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
22
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
23
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
24
|
+
default:
|
|
25
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
26
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
27
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
28
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
29
|
+
if (t[2]) _.ops.pop();
|
|
30
|
+
_.trys.pop(); continue;
|
|
31
|
+
}
|
|
32
|
+
op = body.call(thisArg, _);
|
|
33
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
34
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
export var useBatchProcessing = function (batchPageSize) {
|
|
38
|
+
if (batchPageSize === void 0) { batchPageSize = 10000; }
|
|
39
|
+
var processRecordsInBatches = function (records, handleBatch) { return __awaiter(void 0, void 0, void 0, function () {
|
|
40
|
+
var dataSetLength, batchSize, batchCount, i, idx, batch;
|
|
41
|
+
return __generator(this, function (_a) {
|
|
42
|
+
switch (_a.label) {
|
|
43
|
+
case 0:
|
|
44
|
+
dataSetLength = records.length;
|
|
45
|
+
batchSize = Math.min(Math.floor(batchPageSize), dataSetLength) || dataSetLength;
|
|
46
|
+
batchCount = Math.ceil(dataSetLength / batchSize);
|
|
47
|
+
i = 0;
|
|
48
|
+
_a.label = 1;
|
|
49
|
+
case 1:
|
|
50
|
+
if (!(i < batchCount)) return [3 /*break*/, 4];
|
|
51
|
+
idx = i * batchSize;
|
|
52
|
+
batch = records.slice(idx, idx + batchSize);
|
|
53
|
+
return [4 /*yield*/, handleBatch(batch)];
|
|
54
|
+
case 2:
|
|
55
|
+
_a.sent();
|
|
56
|
+
_a.label = 3;
|
|
57
|
+
case 3:
|
|
58
|
+
i++;
|
|
59
|
+
return [3 /*break*/, 1];
|
|
60
|
+
case 4: return [2 /*return*/];
|
|
61
|
+
}
|
|
62
|
+
});
|
|
63
|
+
}); };
|
|
64
|
+
var processInBatches = function (dataSet, handleBatch) { return __awaiter(void 0, void 0, void 0, function () {
|
|
65
|
+
var records;
|
|
66
|
+
return __generator(this, function (_a) {
|
|
67
|
+
switch (_a.label) {
|
|
68
|
+
case 0:
|
|
69
|
+
records = Object.values(dataSet);
|
|
70
|
+
return [4 /*yield*/, processRecordsInBatches(records, handleBatch)];
|
|
71
|
+
case 1:
|
|
72
|
+
_a.sent();
|
|
73
|
+
return [2 /*return*/];
|
|
74
|
+
}
|
|
75
|
+
});
|
|
76
|
+
}); };
|
|
77
|
+
return {
|
|
78
|
+
processRecordsInBatches: processRecordsInBatches,
|
|
79
|
+
processInBatches: processInBatches,
|
|
80
|
+
};
|
|
81
|
+
};
|
package/lib/esm/Importer/common/Spreadsheet/SpreadsheetContextProvider/useDataSetManipulation.d.ts
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export declare const useDataSetManipulation: () => {
|
|
2
|
+
appendNewRecordToSpreadsheet: () => void;
|
|
3
|
+
deleteRecordsFromSpreadsheet: (recordIds: string[]) => void;
|
|
4
|
+
findAndReplaceInSpreadsheet: (searchText: string, replaceText: string, matchCase: boolean, useRegex: boolean) => Promise<any[]>;
|
|
5
|
+
};
|
package/lib/esm/Importer/common/Spreadsheet/SpreadsheetContextProvider/useDataSetManipulation.js
ADDED
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
var __assign = (this && this.__assign) || function () {
|
|
2
|
+
__assign = Object.assign || function(t) {
|
|
3
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
4
|
+
s = arguments[i];
|
|
5
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
6
|
+
t[p] = s[p];
|
|
7
|
+
}
|
|
8
|
+
return t;
|
|
9
|
+
};
|
|
10
|
+
return __assign.apply(this, arguments);
|
|
11
|
+
};
|
|
12
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
13
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
14
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
15
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
16
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
17
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
18
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
19
|
+
});
|
|
20
|
+
};
|
|
21
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
22
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
23
|
+
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
24
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
25
|
+
function step(op) {
|
|
26
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
27
|
+
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
28
|
+
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;
|
|
29
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
30
|
+
switch (op[0]) {
|
|
31
|
+
case 0: case 1: t = op; break;
|
|
32
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
33
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
34
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
35
|
+
default:
|
|
36
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
37
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
38
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
39
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
40
|
+
if (t[2]) _.ops.pop();
|
|
41
|
+
_.trys.pop(); continue;
|
|
42
|
+
}
|
|
43
|
+
op = body.call(thisArg, _);
|
|
44
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
45
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
46
|
+
}
|
|
47
|
+
};
|
|
48
|
+
import { useFilteredDataContext } from "../FilteredDataContextProvider";
|
|
49
|
+
import { useDataSetContext } from "../DataSetContextProvider";
|
|
50
|
+
import { hasValueInAnyField } from "./utils";
|
|
51
|
+
import { addMeta } from "../../../../Importer/data";
|
|
52
|
+
import { useEventManagerContext } from "../../../../common/EventManagerContextProvider";
|
|
53
|
+
import { useValidationContext } from "../ValidationContextProvider";
|
|
54
|
+
import { useDuplicateDataContext } from "../DuplicateDataContextProvider";
|
|
55
|
+
import { useBatchProcessing } from "./useBatchProcessing";
|
|
56
|
+
import useFindAndReplace from "../../../../common/Table/TableActions/useFindAndReplace";
|
|
57
|
+
export var useDataSetManipulation = function () {
|
|
58
|
+
var _a = useFilteredDataContext(), lastFilteredRecordId = _a.lastFilteredRecordId, setRecalculateFilters = _a.setRecalculateFilters;
|
|
59
|
+
var _b = useDataSetContext(), getRecord = _b.getRecord, setRecord = _b.setRecord, dataSet = _b.dataSet, deleteRecord = _b.deleteRecord, emptyRecordIds = _b.emptyRecordIds;
|
|
60
|
+
var _c = useEventManagerContext(), emit = _c.emit, EVENTS = _c.EVENTS;
|
|
61
|
+
var _d = useValidationContext(), errors = _d.errors, warnings = _d.warnings, calculateColumnErrorCounts = _d.calculateColumnErrorCounts, calculateColumnWarningCounts = _d.calculateColumnWarningCounts;
|
|
62
|
+
var updateDuplicateValues = useDuplicateDataContext().updateDuplicateValues;
|
|
63
|
+
var updateRecordAndRevalidate = useValidationContext().updateRecordAndRevalidate;
|
|
64
|
+
var processInBatches = useBatchProcessing().processInBatches;
|
|
65
|
+
var replaceInRecord = useFindAndReplace().replaceInRecord;
|
|
66
|
+
var appendNewRecordToSpreadsheet = function () {
|
|
67
|
+
var _a, _b;
|
|
68
|
+
var _record = getRecord(lastFilteredRecordId.current);
|
|
69
|
+
if (!hasValueInAnyField(_record)) {
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
var highestRowIndex = -1;
|
|
73
|
+
for (var recordId in dataSet.current)
|
|
74
|
+
if (((_b = (_a = getRecord(recordId)) === null || _a === void 0 ? void 0 : _a._meta) === null || _b === void 0 ? void 0 : _b.rowIndex) > highestRowIndex)
|
|
75
|
+
highestRowIndex = getRecord(recordId)._meta.rowIndex;
|
|
76
|
+
var newRow = addMeta({}, highestRowIndex + 1);
|
|
77
|
+
setRecord(newRow._meta.id, newRow);
|
|
78
|
+
emit(EVENTS.ON_LAST_ROW_CHANGED);
|
|
79
|
+
};
|
|
80
|
+
var deleteRecordsFromSpreadsheet = function (recordIds) {
|
|
81
|
+
recordIds.forEach(function (recordId) {
|
|
82
|
+
updateDuplicateValues(getRecord(recordId), {}, false, updateRecordAndRevalidate);
|
|
83
|
+
deleteRecord(recordId);
|
|
84
|
+
calculateColumnErrorCounts(errors.current[recordId], {});
|
|
85
|
+
calculateColumnWarningCounts(warnings.current[recordId], {});
|
|
86
|
+
emptyRecordIds.current.delete(recordId);
|
|
87
|
+
});
|
|
88
|
+
setRecalculateFilters(function (prev) { return !prev; });
|
|
89
|
+
emit(EVENTS.UPDATE_COLUMN_ERROR_COUNT);
|
|
90
|
+
emit(EVENTS.UPDATE_TOTAL_ERROR_COUNT);
|
|
91
|
+
emit(EVENTS.UPDATE_TOTAL_ROW_COUNT);
|
|
92
|
+
};
|
|
93
|
+
var findAndReplaceInSpreadsheet = function (searchText, replaceText, matchCase, useRegex) { return __awaiter(void 0, void 0, void 0, function () {
|
|
94
|
+
var cellsWithText;
|
|
95
|
+
return __generator(this, function (_a) {
|
|
96
|
+
switch (_a.label) {
|
|
97
|
+
case 0:
|
|
98
|
+
cellsWithText = [];
|
|
99
|
+
return [4 /*yield*/, processInBatches(dataSet.current, function (batch) {
|
|
100
|
+
for (var recordKey in batch) {
|
|
101
|
+
var record = __assign({}, batch[recordKey]);
|
|
102
|
+
if (replaceInRecord(record, searchText, replaceText, matchCase, useRegex)) {
|
|
103
|
+
cellsWithText.push(record);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
})];
|
|
107
|
+
case 1:
|
|
108
|
+
_a.sent();
|
|
109
|
+
updateRecordAndRevalidate(cellsWithText);
|
|
110
|
+
return [2 /*return*/, cellsWithText];
|
|
111
|
+
}
|
|
112
|
+
});
|
|
113
|
+
}); };
|
|
114
|
+
return {
|
|
115
|
+
appendNewRecordToSpreadsheet: appendNewRecordToSpreadsheet,
|
|
116
|
+
deleteRecordsFromSpreadsheet: deleteRecordsFromSpreadsheet,
|
|
117
|
+
findAndReplaceInSpreadsheet: findAndReplaceInSpreadsheet,
|
|
118
|
+
};
|
|
119
|
+
};
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { isEmpty } from "../common";
|
|
1
2
|
export var hasValueInAnyField = function (record) {
|
|
2
3
|
return Object.entries(record)
|
|
3
4
|
.filter(function (_a) {
|
|
@@ -12,3 +13,10 @@ export var hasValueInAnyField = function (record) {
|
|
|
12
13
|
return value !== null && value !== undefined;
|
|
13
14
|
});
|
|
14
15
|
};
|
|
16
|
+
export var rowIsEmpty = function (row) {
|
|
17
|
+
return Object.keys(row).every(function (key) {
|
|
18
|
+
if (key === "_meta")
|
|
19
|
+
return true;
|
|
20
|
+
return isEmpty(row[key]);
|
|
21
|
+
});
|
|
22
|
+
};
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { MutableRefObject } from "react";
|
|
2
|
+
import { SpreadsheetOptions } from "../../../..";
|
|
3
|
+
import { BatchValidationErrors, CalculateColumnCount, ColumnWithCount, Field, OnValidateRecord, Record } from "../../../../types";
|
|
4
|
+
type UseValidationStateArgs = {
|
|
5
|
+
onValidateRecord?: OnValidateRecord;
|
|
6
|
+
fields: Field[];
|
|
7
|
+
options: SpreadsheetOptions;
|
|
8
|
+
isReadOnly: boolean;
|
|
9
|
+
children: any;
|
|
10
|
+
};
|
|
11
|
+
export type ValidationState = {
|
|
12
|
+
isValid: boolean;
|
|
13
|
+
isValidationCompleted: boolean;
|
|
14
|
+
validationPercentage: number;
|
|
15
|
+
errors: MutableRefObject<BatchValidationErrors>;
|
|
16
|
+
warnings: MutableRefObject<BatchValidationErrors>;
|
|
17
|
+
totalErrorCount: MutableRefObject<number>;
|
|
18
|
+
invalidRowsCountRef: MutableRefObject<number>;
|
|
19
|
+
columnsWithErrorCounts: MutableRefObject<ColumnWithCount>;
|
|
20
|
+
columnsWithWarningCounts: MutableRefObject<ColumnWithCount>;
|
|
21
|
+
calculateColumnErrorCounts?: CalculateColumnCount;
|
|
22
|
+
calculateColumnWarningCounts?: CalculateColumnCount;
|
|
23
|
+
};
|
|
24
|
+
type UseValidationStateReturnValue = ValidationState & {
|
|
25
|
+
updateRecordAndRevalidate: (record: Record | Record[], initialValidation?: boolean, loadingIndicator?: boolean) => Promise<void>;
|
|
26
|
+
spreadsheetInitialized: boolean;
|
|
27
|
+
};
|
|
28
|
+
export declare const ValidationContext: import("react").Context<UseValidationStateReturnValue>;
|
|
29
|
+
export declare const ValidationContextProvider: ({ fields, isReadOnly, onValidateRecord, children, }: UseValidationStateArgs) => JSX.Element;
|
|
30
|
+
export declare const useValidationContext: () => UseValidationStateReturnValue;
|
|
31
|
+
export {};
|