fuse-importer 0.1.4-testing → 0.1.5-testing
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/esm/Importer/ImporterWithContext.js +38 -7
- package/lib/esm/Importer/Matcher/EnumFieldsMatchers/EnumFieldMatcher/index.js +1 -1
- package/lib/esm/Importer/Matcher/EnumFieldsMatchers/index.js +4 -3
- package/lib/esm/Importer/Matcher/HeaderMatcher/index.js +14 -9
- package/lib/esm/Importer/PreviewFirstTime.js +1 -1
- package/lib/esm/Importer/Review/ReviewContextProvider.d.ts +6 -6
- package/lib/esm/Importer/Review/ReviewContextProvider.js +51 -223
- 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 +20 -69
- package/lib/esm/Importer/Uploader/DragAndDropImporter/ImporterDropzone.d.ts +2 -1
- package/lib/esm/Importer/Uploader/DragAndDropImporter/ImporterDropzone.js +14 -86
- 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 +18 -0
- package/lib/esm/Importer/common/Spreadsheet/DuplicateDataContextProvider/index.js +101 -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 +37 -37
- package/lib/esm/Importer/common/Spreadsheet/SpreadsheetContextProvider/hashCalculators.d.ts +6 -0
- package/lib/esm/Importer/common/Spreadsheet/SpreadsheetContextProvider/hashCalculators.js +138 -0
- package/lib/esm/Importer/common/Spreadsheet/SpreadsheetContextProvider/index.d.ts +7 -29
- package/lib/esm/Importer/common/Spreadsheet/SpreadsheetContextProvider/index.js +11 -193
- package/lib/esm/Importer/common/Spreadsheet/SpreadsheetContextProvider/useBatchProcessing.d.ts +5 -0
- package/lib/esm/Importer/common/Spreadsheet/SpreadsheetContextProvider/useBatchProcessing.js +72 -0
- package/lib/esm/Importer/common/Spreadsheet/SpreadsheetContextProvider/useDataSetManipulation.d.ts +4 -0
- package/lib/esm/Importer/common/Spreadsheet/SpreadsheetContextProvider/useDataSetManipulation.js +46 -0
- package/lib/esm/Importer/common/Spreadsheet/SpreadsheetContextProvider/utils.js +2 -1
- package/lib/esm/Importer/common/Spreadsheet/ValidationContextProvider/index.d.ts +31 -0
- package/lib/esm/Importer/common/Spreadsheet/ValidationContextProvider/index.js +304 -0
- package/lib/esm/Importer/common/Spreadsheet/common/index.js +5 -4
- 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/SpreadsheetData.js +21 -13
- package/lib/esm/Importer/common/Spreadsheet/components/SpreadsheetRowCheckboxes.js +35 -36
- package/lib/esm/Importer/common/Spreadsheet/components/SpreadsheetRowNumbers.js +3 -3
- package/lib/esm/Importer/common/Spreadsheet/components/fields/SpreadsheetInput.js +5 -1
- package/lib/esm/Importer/common/Spreadsheet/components/fields/index.js +43 -17
- 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/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 +16 -7
- package/lib/esm/Importer/contexts/ImporterContextProvider.d.ts +4 -2
- package/lib/esm/Importer/contexts/ImporterContextProvider.js +121 -13
- package/lib/esm/Importer/data/index.js +7 -5
- 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 +192 -0
- 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 +108 -0
- package/lib/esm/common/FileUploadDropzone/index.d.ts +1 -0
- package/lib/esm/common/FileUploadDropzone/index.js +1 -0
- package/lib/esm/common/Table/TableActions/CustomActions/CustomActions.js +55 -41
- package/lib/esm/common/Table/TableActions/DeleteSelectedRows.js +25 -16
- package/lib/esm/common/Table/TableActions/ExportData.js +5 -3
- package/lib/esm/common/Table/TableActions/FilterByErrors/FilterByErrors.js +36 -9
- package/lib/esm/common/Table/TableActions/RowFilters.js +53 -5
- package/lib/esm/common/Table/TableActions/SearchRows.js +3 -1
- package/lib/esm/common/Table/TableActions/TableActions.js +2 -1
- package/lib/esm/common/Table/TableActions/TransformedRecordsCount.js +16 -9
- 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/TableView/TableRows/TableRow.d.ts +1 -1
- package/lib/esm/common/Table/TableView/TableRows/TableRow.js +2 -2
- 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 +6 -15
- package/lib/esm/common/Table/TableView/types.d.ts +8 -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.js +3 -2
- 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 +13 -7
- package/lib/esm/common/columnsTransformations.js +1 -1
- package/lib/esm/common/icons/index.d.ts +1 -0
- package/lib/esm/common/icons/index.js +1 -0
- package/lib/esm/common/index.d.ts +1 -0
- package/lib/esm/common/index.js +1 -0
- package/lib/esm/common/inputs/Autocomplete.js +1 -1
- package/lib/esm/locales/de.d.ts +1 -1
- package/lib/esm/locales/de.js +1 -1
- package/lib/esm/locales/en.d.ts +1 -1
- package/lib/esm/locales/en.js +4 -4
- package/lib/esm/locales/es.d.ts +1 -1
- package/lib/esm/locales/es.js +1 -1
- package/lib/esm/locales/fr.d.ts +1 -1
- package/lib/esm/locales/fr.js +1 -1
- package/lib/esm/types.d.ts +20 -5
- package/lib/main.js +2 -2
- package/package.json +6 -4
- package/lib/esm/Importer/Stepper/common/getEnumFieldValueMatchingsInitialValue.d.ts +0 -8
- package/lib/esm/Importer/Stepper/common/getEnumFieldValueMatchingsInitialValue.js +0 -36
- 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 -33
- package/lib/esm/Importer/common/Spreadsheet/hooks.js +0 -256
- 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
|
@@ -0,0 +1,150 @@
|
|
|
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
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
13
|
+
import { createContext, useCallback, useContext, useEffect, useMemo, useRef, useState, } from "react";
|
|
14
|
+
import { useEventManagerContext } from "../../../../common/EventManagerContextProvider";
|
|
15
|
+
import { useDataSetContext } from "../DataSetContextProvider";
|
|
16
|
+
import { useDuplicateDataContext } from "../DuplicateDataContextProvider";
|
|
17
|
+
import { getFilterConditions } from "../SpreadsheetContextProvider/filterMethods";
|
|
18
|
+
import { useSpreadsheetFilter, } from "../SpreadsheetContextProvider/useSpreadsheetFilter";
|
|
19
|
+
import { useValidationContext } from "../ValidationContextProvider";
|
|
20
|
+
var getDefaultSortCompareFn = function (sortBy) {
|
|
21
|
+
return function (a, b) {
|
|
22
|
+
var aField = a[sortBy.field];
|
|
23
|
+
var bField = b[sortBy.field];
|
|
24
|
+
if (aField === bField)
|
|
25
|
+
return a._meta.rowIndex > b._meta.rowIndex ? 1 : -1;
|
|
26
|
+
if (!aField)
|
|
27
|
+
return 1;
|
|
28
|
+
if (!bField)
|
|
29
|
+
return -1;
|
|
30
|
+
if (sortBy.direction === "asc")
|
|
31
|
+
return aField > bField ? 1 : -1;
|
|
32
|
+
return aField < bField ? 1 : -1;
|
|
33
|
+
};
|
|
34
|
+
};
|
|
35
|
+
export var FilteredDataContext = createContext({});
|
|
36
|
+
export var FilteredDataContextProvider = function (_a) {
|
|
37
|
+
var _b = _a.getSortCompareFn, getSortCompareFn = _b === void 0 ? getDefaultSortCompareFn : _b, children = _a.children;
|
|
38
|
+
var _c = useSpreadsheetFilter(), spreadsheetFilter = _c.spreadsheetFilter, filterRecordsByRowType = _c.filterRecordsByRowType, filterRecordsByFieldErrors = _c.filterRecordsByFieldErrors, resetSpreadsheetFilter = _c.resetSpreadsheetFilter;
|
|
39
|
+
var _d = useState(""), filteredInputValue = _d[0], setFilteredInputValue = _d[1];
|
|
40
|
+
var _e = useState(null), sortByFieldErrors = _e[0], setSortByFieldErrors = _e[1];
|
|
41
|
+
var _f = useState(null), sortByFieldWarnings = _f[0], setSortByFieldWarnings = _f[1];
|
|
42
|
+
var _g = useState(null), sortBy = _g[0], setSortBy = _g[1];
|
|
43
|
+
var _h = useState(false), recalculateFilters = _h[0], setRecalculateFilters = _h[1];
|
|
44
|
+
var lastFilteredRecordId = useRef(null);
|
|
45
|
+
var _j = useEventManagerContext(), on = _j.on, off = _j.off, EVENTS = _j.EVENTS;
|
|
46
|
+
var _k = useDataSetContext(), getRecord = _k.getRecord, dataSet = _k.dataSet;
|
|
47
|
+
var duplicateRecordIds = useDuplicateDataContext().duplicateRecordIds;
|
|
48
|
+
var _l = useValidationContext(), errors = _l.errors, warnings = _l.warnings;
|
|
49
|
+
var reset = function () {
|
|
50
|
+
resetSpreadsheetFilter();
|
|
51
|
+
setFilteredInputValue("");
|
|
52
|
+
setSortByFieldErrors(null);
|
|
53
|
+
setSortBy(null);
|
|
54
|
+
};
|
|
55
|
+
var sortByFieldError = function (a, b, errors, warnings, sortByFieldErrors, sortByFieldWarnings) {
|
|
56
|
+
var _a, _b;
|
|
57
|
+
var aRecordId = a._meta.id;
|
|
58
|
+
var bRecordId = b._meta.id;
|
|
59
|
+
var aHasErrors = !!((_a = (sortByFieldErrors
|
|
60
|
+
? errors.current
|
|
61
|
+
: warnings.current)[aRecordId]) === null || _a === void 0 ? void 0 : _a[sortByFieldErrors || sortByFieldWarnings]);
|
|
62
|
+
var bHasErrors = !!((_b = (sortByFieldErrors
|
|
63
|
+
? errors.current
|
|
64
|
+
: warnings.current)[bRecordId]) === null || _b === void 0 ? void 0 : _b[sortByFieldErrors || sortByFieldWarnings]);
|
|
65
|
+
if (aHasErrors === bHasErrors) {
|
|
66
|
+
return a._meta.rowIndex > b._meta.rowIndex ? 1 : -1;
|
|
67
|
+
}
|
|
68
|
+
return bHasErrors ? 1 : -1;
|
|
69
|
+
};
|
|
70
|
+
var recalculateFilteredIds = function () {
|
|
71
|
+
var filterConditions = getFilterConditions(spreadsheetFilter, getRecord, errors, filteredInputValue, duplicateRecordIds);
|
|
72
|
+
var ids = [];
|
|
73
|
+
var lastRecordId;
|
|
74
|
+
var _loop_1 = function (key) {
|
|
75
|
+
if (filterConditions.every(function (condition) { return condition(key); })) {
|
|
76
|
+
lastRecordId = key;
|
|
77
|
+
ids.push(key);
|
|
78
|
+
}
|
|
79
|
+
};
|
|
80
|
+
for (var key in dataSet.current) {
|
|
81
|
+
_loop_1(key);
|
|
82
|
+
}
|
|
83
|
+
lastFilteredRecordId.current = lastRecordId;
|
|
84
|
+
if (sortBy) {
|
|
85
|
+
ids.sort(function (a, b) { return getSortCompareFn(sortBy)(getRecord(a), getRecord(b)); });
|
|
86
|
+
}
|
|
87
|
+
else if (!!sortByFieldErrors || !!sortByFieldWarnings) {
|
|
88
|
+
ids.sort(function (a, b) {
|
|
89
|
+
return sortByFieldError(getRecord(a), getRecord(b), errors, warnings, sortByFieldErrors, sortByFieldWarnings);
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
return ids;
|
|
93
|
+
};
|
|
94
|
+
var filteredDataIds = useMemo(function () {
|
|
95
|
+
return recalculateFilteredIds();
|
|
96
|
+
}, [
|
|
97
|
+
filteredInputValue,
|
|
98
|
+
spreadsheetFilter,
|
|
99
|
+
sortBy,
|
|
100
|
+
dataSet.current,
|
|
101
|
+
duplicateRecordIds.size,
|
|
102
|
+
sortByFieldErrors,
|
|
103
|
+
sortByFieldWarnings,
|
|
104
|
+
recalculateFilters,
|
|
105
|
+
]);
|
|
106
|
+
useEffect(function () {
|
|
107
|
+
reset();
|
|
108
|
+
setRecalculateFilters(function (prev) { return !prev; });
|
|
109
|
+
}, [dataSet.current]);
|
|
110
|
+
useEffect(function () {
|
|
111
|
+
var listener = function () {
|
|
112
|
+
setRecalculateFilters(function (prev) { return !prev; });
|
|
113
|
+
};
|
|
114
|
+
on(EVENTS.ON_LAST_ROW_CHANGED, listener);
|
|
115
|
+
return function () {
|
|
116
|
+
off(EVENTS.ON_LAST_ROW_CHANGED, listener);
|
|
117
|
+
};
|
|
118
|
+
}, []);
|
|
119
|
+
var isFiltering = useMemo(function () { return !!filteredInputValue; }, [filteredInputValue]);
|
|
120
|
+
var handleSortByFieldErrors = useCallback(function (field) {
|
|
121
|
+
setSortByFieldErrors(field === sortByFieldErrors ? null : field);
|
|
122
|
+
setSortByFieldWarnings(null);
|
|
123
|
+
setSortBy(null);
|
|
124
|
+
}, [sortByFieldErrors]);
|
|
125
|
+
var handleSortByFieldWarnings = useCallback(function (field) {
|
|
126
|
+
setSortByFieldWarnings(field === sortByFieldWarnings ? null : field);
|
|
127
|
+
setSortByFieldErrors(null);
|
|
128
|
+
setSortBy(null);
|
|
129
|
+
}, [sortByFieldWarnings]);
|
|
130
|
+
var value = {
|
|
131
|
+
filteredDataIds: filteredDataIds,
|
|
132
|
+
filteredInputValue: filteredInputValue,
|
|
133
|
+
setFilteredInputValue: setFilteredInputValue,
|
|
134
|
+
sortByFieldErrors: sortByFieldErrors,
|
|
135
|
+
sortByFieldWarnings: sortByFieldWarnings,
|
|
136
|
+
handleSortByFieldErrors: handleSortByFieldErrors,
|
|
137
|
+
handleSortByFieldWarnings: handleSortByFieldWarnings,
|
|
138
|
+
resetSpreadsheetFilter: resetSpreadsheetFilter,
|
|
139
|
+
filterRecordsByRowType: filterRecordsByRowType,
|
|
140
|
+
filterRecordsByFieldErrors: filterRecordsByFieldErrors,
|
|
141
|
+
sortBy: sortBy,
|
|
142
|
+
setSortBy: setSortBy,
|
|
143
|
+
spreadsheetFilter: spreadsheetFilter,
|
|
144
|
+
isFiltering: isFiltering,
|
|
145
|
+
lastFilteredRecordId: lastFilteredRecordId,
|
|
146
|
+
setRecalculateFilters: setRecalculateFilters,
|
|
147
|
+
};
|
|
148
|
+
return (_jsx(FilteredDataContext.Provider, __assign({ value: value }, { children: children })));
|
|
149
|
+
};
|
|
150
|
+
export var useFilteredDataContext = function () { return useContext(FilteredDataContext); };
|
|
@@ -1,5 +1,7 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { DuplicateRecordIds, Record } from "../../../../types";
|
|
2
2
|
import { SpreadsheetFilter } from "./useSpreadsheetFilter";
|
|
3
|
-
|
|
4
|
-
export declare const
|
|
5
|
-
|
|
3
|
+
type FilterCondition = (id: string) => boolean;
|
|
4
|
+
export declare const getFilterConditions: (spreadsheetFilter: SpreadsheetFilter, getRecord: (recordId: string) => Record, errors: {
|
|
5
|
+
current: Record;
|
|
6
|
+
}, filteredInputValue: string, duplicateRecordIds: DuplicateRecordIds) => FilterCondition[];
|
|
7
|
+
export {};
|
|
@@ -1,9 +1,30 @@
|
|
|
1
1
|
import { rowIsEmpty } from "./utils";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
2
|
+
export var getFilterConditions = function (spreadsheetFilter, getRecord, errors, filteredInputValue, duplicateRecordIds) {
|
|
3
|
+
var filterConditions = [];
|
|
4
|
+
switch (spreadsheetFilter.type) {
|
|
5
|
+
case "rowBased":
|
|
6
|
+
if (spreadsheetFilter.byRow === "all") {
|
|
7
|
+
filterConditions.push(function (key) { return true; });
|
|
8
|
+
}
|
|
9
|
+
if (spreadsheetFilter.byRow === "invalid") {
|
|
10
|
+
filterConditions.push(function (key) {
|
|
11
|
+
var _a, _b;
|
|
12
|
+
return (((_b = (_a = getRecord(key)) === null || _a === void 0 ? void 0 : _a._meta) === null || _b === void 0 ? void 0 : _b.isInvalid) && !rowIsEmpty(getRecord(key)));
|
|
13
|
+
});
|
|
14
|
+
}
|
|
15
|
+
if (spreadsheetFilter.byRow === "duplicates")
|
|
16
|
+
filterConditions.push(function (key) { return duplicateRecordIds.has(key); });
|
|
17
|
+
break;
|
|
18
|
+
case "columnBased":
|
|
19
|
+
if (spreadsheetFilter.byColumn.type === "fieldWithErrors") {
|
|
20
|
+
filterConditions.push(function (key) {
|
|
21
|
+
var _a, _b, _c;
|
|
22
|
+
return ((_b = (_a = getRecord(key)) === null || _a === void 0 ? void 0 : _a._meta) === null || _b === void 0 ? void 0 : _b.isInvalid) &&
|
|
23
|
+
((_c = errors.current[key]) === null || _c === void 0 ? void 0 : _c[spreadsheetFilter.byColumn.field]);
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
break;
|
|
27
|
+
}
|
|
7
28
|
var includesSearchValue = function (value, searchValue) {
|
|
8
29
|
if (typeof value === "string" || typeof value === "number") {
|
|
9
30
|
var stringValue = String(value).toLowerCase();
|
|
@@ -12,38 +33,17 @@ export var filterRecordsBySearchValue = function (obj, value) {
|
|
|
12
33
|
}
|
|
13
34
|
return false;
|
|
14
35
|
};
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
36
|
+
if (filteredInputValue) {
|
|
37
|
+
filterConditions.push(function (key) {
|
|
38
|
+
var record = getRecord(key);
|
|
39
|
+
// check if any of the values in the record contain the search input
|
|
40
|
+
for (var fieldName in record) {
|
|
41
|
+
if (includesSearchValue(record[fieldName], filteredInputValue)) {
|
|
42
|
+
return true;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
return false;
|
|
23
46
|
});
|
|
24
|
-
if (matches) {
|
|
25
|
-
filteredObj[key] = currentObj;
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
return filteredObj;
|
|
29
|
-
};
|
|
30
|
-
export var filterRecordsByType = function (obj, filterType) {
|
|
31
|
-
var _a, _b;
|
|
32
|
-
var filteredObj = {};
|
|
33
|
-
for (var key in obj) {
|
|
34
|
-
if (filterType === "all" ||
|
|
35
|
-
(((_b = (_a = obj[key]) === null || _a === void 0 ? void 0 : _a._meta) === null || _b === void 0 ? void 0 : _b.isInvalid) && !rowIsEmpty(obj[key]))) {
|
|
36
|
-
filteredObj[key] = obj[key];
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
return filteredObj;
|
|
40
|
-
};
|
|
41
|
-
//Filter records by selected column error
|
|
42
|
-
export var filterRecordsByError = function (obj, keyToFilter, errors) {
|
|
43
|
-
var filteredObj = {};
|
|
44
|
-
var filteredKeys = Object.keys(errors).filter(function (key) { var _a, _b; return ((_b = (_a = obj[key]) === null || _a === void 0 ? void 0 : _a._meta) === null || _b === void 0 ? void 0 : _b.isInvalid) && errors[key][keyToFilter]; });
|
|
45
|
-
for (var i = 0; i < filteredKeys.length; i++) {
|
|
46
|
-
filteredObj[filteredKeys[i]] = obj[filteredKeys[i]];
|
|
47
47
|
}
|
|
48
|
-
return
|
|
48
|
+
return filterConditions;
|
|
49
49
|
};
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export declare const RecordHashCalculator: () => {
|
|
2
|
+
computeHashesForRecords: (dataSet: any, fields: any, _onHashesComputed: any) => void;
|
|
3
|
+
};
|
|
4
|
+
export declare const RecordValueHashCalculator: () => {
|
|
5
|
+
computeDuplicateValueHashes: (dataSet: any, _field: any, _onDuplicateHashesComputed: any) => Promise<void>;
|
|
6
|
+
};
|
|
@@ -0,0 +1,138 @@
|
|
|
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) {
|
|
78
|
+
if (!dataSet || calculatingHashes) {
|
|
79
|
+
return;
|
|
80
|
+
}
|
|
81
|
+
var processInBatches = useBatchProcessing().processInBatches;
|
|
82
|
+
calculatingHashes = true;
|
|
83
|
+
var results = [];
|
|
84
|
+
processInBatches(dataSet, function (batch) {
|
|
85
|
+
results = results.concat(computeHashesForBatch(batch, fields));
|
|
86
|
+
});
|
|
87
|
+
results.sort(compareHashes);
|
|
88
|
+
var duplicateHashes = findDuplicateHashes(results);
|
|
89
|
+
_onHashesComputed(duplicateHashes);
|
|
90
|
+
calculatingHashes = false;
|
|
91
|
+
};
|
|
92
|
+
return {
|
|
93
|
+
computeHashesForRecords: computeHashesForRecords,
|
|
94
|
+
};
|
|
95
|
+
};
|
|
96
|
+
// generate hashes that can be used for comparing the values of a specific field
|
|
97
|
+
// for the sake of tracking uniqueness
|
|
98
|
+
export var RecordValueHashCalculator = function () {
|
|
99
|
+
var columnsBeingCalculated = [];
|
|
100
|
+
var computeHashesForBatch = function (dataSet, field) {
|
|
101
|
+
var hashMap = [];
|
|
102
|
+
var isCaseInsensitive = field.validations.find(function (v) {
|
|
103
|
+
return v.name === "unique_case_insensitive";
|
|
104
|
+
}) !== undefined;
|
|
105
|
+
for (var recordKey in dataSet) {
|
|
106
|
+
var record = dataSet[recordKey];
|
|
107
|
+
var key = record[field.name];
|
|
108
|
+
if (isCaseInsensitive) {
|
|
109
|
+
key = key.toLowerCase();
|
|
110
|
+
}
|
|
111
|
+
if (key) {
|
|
112
|
+
hashMap.push({ id: record._meta.id, hash: key });
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
return hashMap;
|
|
116
|
+
};
|
|
117
|
+
var computeDuplicateValueHashes = function (dataSet, _field, _onDuplicateHashesComputed) { return __awaiter(void 0, void 0, void 0, function () {
|
|
118
|
+
var processInBatches, results;
|
|
119
|
+
return __generator(this, function (_a) {
|
|
120
|
+
if (!dataSet || columnsBeingCalculated[_field.name]) {
|
|
121
|
+
return [2 /*return*/];
|
|
122
|
+
}
|
|
123
|
+
columnsBeingCalculated[_field.name] = true;
|
|
124
|
+
processInBatches = useBatchProcessing().processInBatches;
|
|
125
|
+
results = [];
|
|
126
|
+
processInBatches(dataSet, function (batch) {
|
|
127
|
+
results = results.concat(computeHashesForBatch(batch, _field));
|
|
128
|
+
});
|
|
129
|
+
results.sort(compareHashes);
|
|
130
|
+
_onDuplicateHashesComputed(results);
|
|
131
|
+
columnsBeingCalculated[_field.name] = false;
|
|
132
|
+
return [2 /*return*/];
|
|
133
|
+
});
|
|
134
|
+
}); };
|
|
135
|
+
return {
|
|
136
|
+
computeDuplicateValueHashes: computeDuplicateValueHashes,
|
|
137
|
+
};
|
|
138
|
+
};
|
|
@@ -1,47 +1,25 @@
|
|
|
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
9
|
isReadOnly?: boolean;
|
|
13
|
-
errors: BatchValidationErrors;
|
|
14
|
-
warnings: BatchValidationErrors;
|
|
15
10
|
options: SpreadsheetOptions;
|
|
16
|
-
sortByFieldErrors: string;
|
|
17
|
-
sortByFieldWarnings: string;
|
|
18
|
-
updateRecord: (record: Record) => void;
|
|
19
|
-
setSortByFieldErrors: React.Dispatch<React.SetStateAction<string>>;
|
|
20
11
|
selectedRows: string[];
|
|
21
12
|
setSelectedRows: React.Dispatch<React.SetStateAction<string[]>>;
|
|
22
|
-
setSortByFieldWarnings: React.Dispatch<React.SetStateAction<string>>;
|
|
23
|
-
deleteRecords: (selectedRecords: string[]) => void;
|
|
24
13
|
lastClickedIndexRef: React.MutableRefObject<number | null>;
|
|
25
|
-
filteredInputValue: string;
|
|
26
|
-
setFilteredInputValue: React.Dispatch<React.SetStateAction<string>>;
|
|
27
|
-
addNewRowsToSpreadsheet: () => void;
|
|
28
|
-
spreadsheetFilter: SpreadsheetFilter;
|
|
29
|
-
filterRecordsByRowType: (filterByRow: SpreadsheetFilter["byRow"]) => void;
|
|
30
|
-
filterRecordsByFieldErrors: (filterByColumn: string) => void;
|
|
31
|
-
resetSpreadsheetFilter: () => void;
|
|
32
|
-
recordsWithValuesCount: number;
|
|
33
|
-
filteredDataCount: number;
|
|
34
14
|
checkboxColumnWidth: number;
|
|
35
|
-
isFiltering: boolean;
|
|
36
|
-
sortBy: SortBy | null;
|
|
37
|
-
setSortBy: React.Dispatch<React.SetStateAction<SortBy>>;
|
|
38
15
|
setIsTransformTooltipOpened: React.Dispatch<React.SetStateAction<boolean>>;
|
|
39
16
|
isTransformTooltipOpened: boolean;
|
|
40
|
-
|
|
41
|
-
|
|
17
|
+
inefficientRerender: boolean;
|
|
18
|
+
setInefficientRerender: React.Dispatch<React.SetStateAction<boolean>>;
|
|
19
|
+
};
|
|
42
20
|
type Props = SpreadsheetProps & {
|
|
43
21
|
children: JSX.Element;
|
|
44
22
|
};
|
|
45
|
-
export declare const SpreadsheetContextProvider: ({
|
|
23
|
+
export declare const SpreadsheetContextProvider: ({ fields, options, isReadOnly, children, onValidateRecord, selectedRows, setSelectedRows, }: Props) => JSX.Element;
|
|
46
24
|
export declare const useSpreadsheetContext: () => State;
|
|
47
25
|
export {};
|