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
|
@@ -15,10 +15,10 @@ import { Div } from "../../../styled/utils";
|
|
|
15
15
|
import { closeIconWithCircle, errorIcon, fileExtensionIcon, } from "../../common/icons";
|
|
16
16
|
import { useImporterContext } from "../../contexts/ImporterContextProvider";
|
|
17
17
|
import { useUploaderContext } from "../UploaderContextProvider";
|
|
18
|
-
import { ImporterDropzone } from "./ImporterDropzone";
|
|
19
18
|
import { useTranslation } from "react-i18next";
|
|
20
19
|
import { HeaderCard } from "./ImporterSectionHeader";
|
|
21
20
|
import * as S from "./DragAndDropImporter.styles";
|
|
21
|
+
import { ImporterDropzone } from "./ImporterDropzone";
|
|
22
22
|
export var ErrorCard = function () {
|
|
23
23
|
var templateError = useImporterContext().templateError;
|
|
24
24
|
var t = useTranslation("upload").t;
|
|
@@ -33,8 +33,16 @@ var LoadingCard = function () {
|
|
|
33
33
|
return (_jsxs(S.LoadingCardWrapper, __assign({ spaceBetween: true, centered: true }, { children: [fileExtensionUI, _jsxs(Div, __assign({ mr: 30, ml: 30 }, { children: [_jsx(Div, __assign({ label2: true }, { children: fileName })), _jsx(Div, __assign({ helperText: true, c: colors.gray500 }, { children: t("loading.title") }))] })), _jsx(Div, __assign({ clickable: true, onClick: resetImport }, { children: closeIconWithCircle }))] })));
|
|
34
34
|
};
|
|
35
35
|
var ImporterSection = function () {
|
|
36
|
-
var _a = useImporterContext(), templateHeaders = _a.templateHeaders, templateError = _a.templateError;
|
|
37
|
-
|
|
36
|
+
var _a = useImporterContext(), templateHeaders = _a.templateHeaders, templateError = _a.templateError, setUploadedData = _a.setUploadedData;
|
|
37
|
+
var _b = useUploaderContext(), setIsUploading = _b.setIsUploading, setFileName = _b.setFileName;
|
|
38
|
+
var onComplete = function (data) {
|
|
39
|
+
setUploadedData(data);
|
|
40
|
+
setIsUploading(false);
|
|
41
|
+
};
|
|
42
|
+
var saveFileName = function (fileName) {
|
|
43
|
+
setFileName(fileName);
|
|
44
|
+
};
|
|
45
|
+
return templateError ? (_jsx(ErrorCard, {})) : (_jsx(_Fragment, { children: templateHeaders && (_jsxs(S.ImporterSectionContainer, { children: [_jsx(ImporterDropzone, { onComplete: onComplete, saveFileName: saveFileName, setIsLoading: setIsUploading }), _jsx(HeaderCard, { templateHeaders: templateHeaders })] })) }));
|
|
38
46
|
};
|
|
39
47
|
var DragAndDropImporter = function () {
|
|
40
48
|
var isUploading = useUploaderContext().isUploading;
|
|
@@ -14,6 +14,7 @@ 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 { useEffect } from "react";
|
|
17
18
|
import { useTranslation } from "react-i18next";
|
|
18
19
|
import styled, { css } from "styled-components";
|
|
19
20
|
import { Div } from "../../styled/utils";
|
|
@@ -21,7 +22,6 @@ import { useReviewContext } from "../Review/ReviewContextProvider";
|
|
|
21
22
|
import SpreadsheetBase from "../common/Spreadsheet";
|
|
22
23
|
import { useImporterContext } from "../contexts/ImporterContextProvider";
|
|
23
24
|
import { HeaderButtons } from "./HeaderButtons";
|
|
24
|
-
import { useEffect } from "react";
|
|
25
25
|
var Spreadsheet = styled(SpreadsheetBase)(function () { return css(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n /* rows will be removed for match and review steps */\n .before-selected-row {\n opacity: 0.2;\n }\n "], ["\n /* rows will be removed for match and review steps */\n .before-selected-row {\n opacity: 0.2;\n }\n "]))); });
|
|
26
26
|
var HeaderContainer = styled(Div)(templateObject_2 || (templateObject_2 = __makeTemplateObject(["\n margin-left: 32px;\n\n @media (max-width: 1050px) {\n margin-left: 0px;\n\n > div:first-of-type {\n text-align: center;\n }\n\n div:last-of-type {\n margin-left: 0px;\n }\n }\n"], ["\n margin-left: 32px;\n\n @media (max-width: 1050px) {\n margin-left: 0px;\n\n > div:first-of-type {\n text-align: center;\n }\n\n div:last-of-type {\n margin-left: 0px;\n }\n }\n"])));
|
|
27
27
|
var DescriptionAndButtons = styled(Div)(templateObject_3 || (templateObject_3 = __makeTemplateObject(["\n @media (max-width: 1050px) {\n flex-direction: column;\n gap: 16px;\n }\n"], ["\n @media (max-width: 1050px) {\n flex-direction: column;\n gap: 16px;\n }\n"])));
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import React, { MutableRefObject } from "react";
|
|
2
|
+
import { Record, RecordDataSet } from "../../../../types";
|
|
3
|
+
export type State = {
|
|
4
|
+
getRecord: (recordId: string) => Record;
|
|
5
|
+
setRecord: (recordId: string, record: Record) => Record;
|
|
6
|
+
deleteRecord: (recordId: string) => void;
|
|
7
|
+
dataSet: MutableRefObject<RecordDataSet>;
|
|
8
|
+
dataSetLength: MutableRefObject<number>;
|
|
9
|
+
emptyRecordIds: MutableRefObject<Set<string>>;
|
|
10
|
+
};
|
|
11
|
+
export declare const DataSetContext: React.Context<State>;
|
|
12
|
+
export declare const DataSetContextProvider: ({ initialDataSet, children }: {
|
|
13
|
+
initialDataSet: any;
|
|
14
|
+
children: any;
|
|
15
|
+
}) => JSX.Element;
|
|
16
|
+
export declare const useDataSetContext: () => State;
|
|
@@ -0,0 +1,63 @@
|
|
|
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, useContext, useEffect, useRef, } from "react";
|
|
14
|
+
import { rowIsEmpty } from "../SpreadsheetContextProvider/utils";
|
|
15
|
+
export var DataSetContext = createContext({});
|
|
16
|
+
export var DataSetContextProvider = function (_a) {
|
|
17
|
+
var initialDataSet = _a.initialDataSet, children = _a.children;
|
|
18
|
+
var dataSet = useRef(initialDataSet);
|
|
19
|
+
var dataSetLength = useRef(Object.keys(dataSet.current).length);
|
|
20
|
+
var emptyRecordIds = useRef(new Set());
|
|
21
|
+
var reset = function () {
|
|
22
|
+
emptyRecordIds.current = new Set();
|
|
23
|
+
};
|
|
24
|
+
useEffect(function () {
|
|
25
|
+
reset();
|
|
26
|
+
// without the hook, with the changes on where the context would
|
|
27
|
+
// live, the dataSet was not being correctly updated for the Match step
|
|
28
|
+
dataSet.current = initialDataSet;
|
|
29
|
+
dataSetLength.current = Object.keys(initialDataSet).length;
|
|
30
|
+
}, [initialDataSet]);
|
|
31
|
+
var getRecord = function (recordId) {
|
|
32
|
+
return dataSet.current[recordId];
|
|
33
|
+
};
|
|
34
|
+
var deleteRecord = function (recordId) {
|
|
35
|
+
if (dataSet.current[recordId]) {
|
|
36
|
+
dataSetLength.current -= 1;
|
|
37
|
+
}
|
|
38
|
+
delete dataSet.current[recordId];
|
|
39
|
+
};
|
|
40
|
+
var setRecord = function (recordId, record) {
|
|
41
|
+
if (!dataSet.current[recordId]) {
|
|
42
|
+
dataSetLength.current += 1;
|
|
43
|
+
}
|
|
44
|
+
if (rowIsEmpty(record)) {
|
|
45
|
+
emptyRecordIds.current.add(recordId);
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
emptyRecordIds.current.delete(recordId);
|
|
49
|
+
}
|
|
50
|
+
dataSet.current[recordId] = record;
|
|
51
|
+
return getRecord(recordId);
|
|
52
|
+
};
|
|
53
|
+
var value = {
|
|
54
|
+
getRecord: getRecord,
|
|
55
|
+
setRecord: setRecord,
|
|
56
|
+
deleteRecord: deleteRecord,
|
|
57
|
+
dataSet: dataSet,
|
|
58
|
+
dataSetLength: dataSetLength,
|
|
59
|
+
emptyRecordIds: emptyRecordIds,
|
|
60
|
+
};
|
|
61
|
+
return (_jsx(DataSetContext.Provider, __assign({ value: value }, { children: children })));
|
|
62
|
+
};
|
|
63
|
+
export var useDataSetContext = function () { return useContext(DataSetContext); };
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { MutableRefObject } from "react";
|
|
2
|
+
import { DuplicateValuesCollection, Field, Record, RecordDataSet } from "../../../../types";
|
|
3
|
+
type DuplicateDataProps = {
|
|
4
|
+
fields: Field[];
|
|
5
|
+
isReadOnly: boolean;
|
|
6
|
+
children: any;
|
|
7
|
+
};
|
|
8
|
+
export type State = {
|
|
9
|
+
duplicateRecordIds: Set<string>;
|
|
10
|
+
duplicateValues: MutableRefObject<DuplicateValuesCollection>;
|
|
11
|
+
fieldsWithUniquenessConstraints: MutableRefObject<Field[]>;
|
|
12
|
+
calculateDuplicateRecords: () => void;
|
|
13
|
+
updateDuplicateValues: (oldRecord: RecordDataSet, newRecord: RecordDataSet, initialValidation: boolean, updateRecordAndRevalidate: (record: Record | Record[], initialValidation: boolean, loadingIndicator: boolean) => void) => void;
|
|
14
|
+
resetDuplicateProvider: () => void;
|
|
15
|
+
};
|
|
16
|
+
export declare const DuplicateDataContext: import("react").Context<State>;
|
|
17
|
+
export declare const DuplicateDataContextProvider: ({ fields, isReadOnly, children, }: DuplicateDataProps) => JSX.Element;
|
|
18
|
+
export declare const useDuplicateDataContext: () => State;
|
|
19
|
+
export {};
|
|
@@ -0,0 +1,155 @@
|
|
|
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 { jsx as _jsx } from "react/jsx-runtime";
|
|
49
|
+
import { createContext, useContext, useRef, useState, } from "react";
|
|
50
|
+
import { useDataSetContext } from "../DataSetContextProvider";
|
|
51
|
+
import { RecordHashCalculator } from "../SpreadsheetContextProvider/hashCalculators";
|
|
52
|
+
export var DuplicateDataContext = createContext({});
|
|
53
|
+
export var DuplicateDataContextProvider = function (_a) {
|
|
54
|
+
var fields = _a.fields, isReadOnly = _a.isReadOnly, children = _a.children;
|
|
55
|
+
var _b = useState(new Set()), duplicateRecordIds = _b[0], setDuplicateRecordIds = _b[1];
|
|
56
|
+
var _c = useDataSetContext(), dataSet = _c.dataSet, getRecord = _c.getRecord;
|
|
57
|
+
var duplicateValues = useRef({});
|
|
58
|
+
var fieldsWithUniquenessConstraints = useRef([]);
|
|
59
|
+
var reset = function () {
|
|
60
|
+
fieldsWithUniquenessConstraints.current = [];
|
|
61
|
+
duplicateValues.current = {};
|
|
62
|
+
setDuplicateRecordIds(new Set());
|
|
63
|
+
};
|
|
64
|
+
var resetDuplicateProvider = function () {
|
|
65
|
+
reset();
|
|
66
|
+
calculateDuplicateRecords();
|
|
67
|
+
calculateFieldsWithUniquenessConstraints();
|
|
68
|
+
};
|
|
69
|
+
var calculateFieldsWithUniquenessConstraints = function () {
|
|
70
|
+
var uniqueFields = fields.filter(function (f) {
|
|
71
|
+
if (!f.validations)
|
|
72
|
+
return;
|
|
73
|
+
return (f.validations.find(function (v) {
|
|
74
|
+
return (["unique_case_sensitive", "unique_case_insensitive"].indexOf(v.validation_type) >= 0);
|
|
75
|
+
}) !== undefined);
|
|
76
|
+
});
|
|
77
|
+
fieldsWithUniquenessConstraints.current = uniqueFields;
|
|
78
|
+
};
|
|
79
|
+
var updateDuplicateValues = function (oldRecord, newRecord, initialValidation, updateRecordAndRevalidate) {
|
|
80
|
+
var recordsToUpdate = [];
|
|
81
|
+
fieldsWithUniquenessConstraints.current.forEach(function (f) { return __awaiter(void 0, void 0, void 0, function () {
|
|
82
|
+
var duplicatesForField, isCaseInsensitive, recordId, oldValue, newValue, oldValueAccessor, oldIndex, remainingRecordId, newValueAccessor, firstRecordIdToHaveValue;
|
|
83
|
+
return __generator(this, function (_a) {
|
|
84
|
+
duplicateValues.current[f.name] = duplicateValues.current[f.name] || {};
|
|
85
|
+
duplicatesForField = duplicateValues.current[f.name];
|
|
86
|
+
isCaseInsensitive = f.validations.find(function (v) { return v.validation_type === "unique_case_insensitive"; }) !== undefined;
|
|
87
|
+
recordId = oldRecord._meta.id;
|
|
88
|
+
oldValue = oldRecord[f.name];
|
|
89
|
+
newValue = newRecord[f.name];
|
|
90
|
+
if (newValue === oldValue && !initialValidation) {
|
|
91
|
+
return [2 /*return*/];
|
|
92
|
+
}
|
|
93
|
+
if (oldValue && !initialValidation) {
|
|
94
|
+
oldValueAccessor = isCaseInsensitive
|
|
95
|
+
? String(oldValue).toLowerCase()
|
|
96
|
+
: oldValue;
|
|
97
|
+
if (duplicatesForField[oldValueAccessor]) {
|
|
98
|
+
oldIndex = duplicatesForField[oldValueAccessor].indexOf(recordId);
|
|
99
|
+
if (oldIndex >= 0) {
|
|
100
|
+
duplicatesForField[oldValueAccessor].splice(oldIndex, 1);
|
|
101
|
+
}
|
|
102
|
+
if (duplicatesForField[oldValueAccessor].length === 1) {
|
|
103
|
+
remainingRecordId = duplicatesForField[oldValueAccessor][0];
|
|
104
|
+
recordsToUpdate.push(getRecord(remainingRecordId));
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
if (newValue) {
|
|
109
|
+
newValueAccessor = isCaseInsensitive
|
|
110
|
+
? String(newValue).toLowerCase()
|
|
111
|
+
: newValue;
|
|
112
|
+
duplicatesForField[newValueAccessor] =
|
|
113
|
+
duplicatesForField[newValueAccessor] || [];
|
|
114
|
+
if (!duplicatesForField[newValueAccessor].includes(recordId)) {
|
|
115
|
+
duplicatesForField[newValueAccessor].push(recordId);
|
|
116
|
+
}
|
|
117
|
+
if (duplicatesForField[newValueAccessor].length === 2) {
|
|
118
|
+
firstRecordIdToHaveValue = duplicatesForField[newValueAccessor][0];
|
|
119
|
+
recordsToUpdate.push(getRecord(firstRecordIdToHaveValue));
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
return [2 /*return*/];
|
|
123
|
+
});
|
|
124
|
+
}); });
|
|
125
|
+
if (recordsToUpdate.length > 0) {
|
|
126
|
+
updateRecordAndRevalidate(recordsToUpdate, false, false);
|
|
127
|
+
}
|
|
128
|
+
};
|
|
129
|
+
var calculateDuplicateRecords = function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
130
|
+
var computeHashesForRecords;
|
|
131
|
+
return __generator(this, function (_a) {
|
|
132
|
+
switch (_a.label) {
|
|
133
|
+
case 0:
|
|
134
|
+
computeHashesForRecords = RecordHashCalculator().computeHashesForRecords;
|
|
135
|
+
return [4 /*yield*/, computeHashesForRecords(dataSet.current, fields, function (hashes) {
|
|
136
|
+
var duplicateIds = hashes.map(function (hash) { return hash["id"]; });
|
|
137
|
+
setDuplicateRecordIds(new Set(duplicateIds));
|
|
138
|
+
})];
|
|
139
|
+
case 1:
|
|
140
|
+
_a.sent();
|
|
141
|
+
return [2 /*return*/];
|
|
142
|
+
}
|
|
143
|
+
});
|
|
144
|
+
}); };
|
|
145
|
+
var value = {
|
|
146
|
+
duplicateRecordIds: duplicateRecordIds,
|
|
147
|
+
duplicateValues: duplicateValues,
|
|
148
|
+
fieldsWithUniquenessConstraints: fieldsWithUniquenessConstraints,
|
|
149
|
+
calculateDuplicateRecords: calculateDuplicateRecords,
|
|
150
|
+
updateDuplicateValues: updateDuplicateValues,
|
|
151
|
+
resetDuplicateProvider: resetDuplicateProvider,
|
|
152
|
+
};
|
|
153
|
+
return (_jsx(DuplicateDataContext.Provider, __assign({ value: value }, { children: children })));
|
|
154
|
+
};
|
|
155
|
+
export var useDuplicateDataContext = function () { return useContext(DuplicateDataContext); };
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import React, { MutableRefObject } from "react";
|
|
2
|
+
import { SpreadsheetFilter } from "../SpreadsheetContextProvider/useSpreadsheetFilter";
|
|
3
|
+
import { SortBy } from "../common/types";
|
|
4
|
+
export type State = {
|
|
5
|
+
filteredDataIds: string[];
|
|
6
|
+
filteredInputValue: string;
|
|
7
|
+
setFilteredInputValue: (value: string) => void;
|
|
8
|
+
sortByFieldErrors: string;
|
|
9
|
+
sortByFieldWarnings: string;
|
|
10
|
+
handleSortByFieldErrors: (field: string) => void;
|
|
11
|
+
handleSortByFieldWarnings: (field: string) => void;
|
|
12
|
+
resetSpreadsheetFilter: () => void;
|
|
13
|
+
filterRecordsByRowType: (filterByRow: string) => void;
|
|
14
|
+
filterRecordsByFieldErrors: (filterByColumn: string) => void;
|
|
15
|
+
sortBy: SortBy;
|
|
16
|
+
setSortBy: React.Dispatch<React.SetStateAction<SortBy>>;
|
|
17
|
+
spreadsheetFilter: SpreadsheetFilter;
|
|
18
|
+
isFiltering: boolean;
|
|
19
|
+
lastFilteredRecordId: MutableRefObject<string>;
|
|
20
|
+
setRecalculateFilters: React.Dispatch<React.SetStateAction<boolean>>;
|
|
21
|
+
};
|
|
22
|
+
type ContextArgs = {
|
|
23
|
+
getSortCompareFn: any;
|
|
24
|
+
children: any;
|
|
25
|
+
};
|
|
26
|
+
export declare const FilteredDataContext: React.Context<State>;
|
|
27
|
+
export declare const FilteredDataContextProvider: ({ getSortCompareFn, children, }: ContextArgs) => JSX.Element;
|
|
28
|
+
export declare const useFilteredDataContext: () => State;
|
|
29
|
+
export {};
|
|
@@ -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,8 +1,30 @@
|
|
|
1
|
-
|
|
2
|
-
export var
|
|
3
|
-
var
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
import { rowIsEmpty } from "./utils";
|
|
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
|
+
}
|
|
6
28
|
var includesSearchValue = function (value, searchValue) {
|
|
7
29
|
if (typeof value === "string" || typeof value === "number") {
|
|
8
30
|
var stringValue = String(value).toLowerCase();
|
|
@@ -11,46 +33,17 @@ export var filterRecordsBySearchValue = function (obj, value) {
|
|
|
11
33
|
}
|
|
12
34
|
return false;
|
|
13
35
|
};
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
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;
|
|
22
46
|
});
|
|
23
|
-
if (matches) {
|
|
24
|
-
filteredObj[key] = currentObj;
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
return filteredObj;
|
|
28
|
-
};
|
|
29
|
-
export var filterRecordsByType = function (obj, filterType) {
|
|
30
|
-
var _a, _b;
|
|
31
|
-
var rowIsEmpty = function (row) {
|
|
32
|
-
return Object.keys(row).every(function (key) {
|
|
33
|
-
if (key === "_meta")
|
|
34
|
-
return true;
|
|
35
|
-
return !row[key];
|
|
36
|
-
});
|
|
37
|
-
};
|
|
38
|
-
var filteredObj = {};
|
|
39
|
-
for (var key in obj) {
|
|
40
|
-
if (filterType === "all" ||
|
|
41
|
-
(((_b = (_a = obj[key]) === null || _a === void 0 ? void 0 : _a._meta) === null || _b === void 0 ? void 0 : _b.isInvalid) !== (filterType === "valid") &&
|
|
42
|
-
!rowIsEmpty(obj[key]))) {
|
|
43
|
-
filteredObj[key] = obj[key];
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
return filteredObj;
|
|
47
|
-
};
|
|
48
|
-
//Filter records by selected column error
|
|
49
|
-
export var filterRecordsByError = function (obj, keyToFilter, errors) {
|
|
50
|
-
var filteredObj = {};
|
|
51
|
-
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]; });
|
|
52
|
-
for (var i = 0; i < filteredKeys.length; i++) {
|
|
53
|
-
filteredObj[filteredKeys[i]] = obj[filteredKeys[i]];
|
|
54
47
|
}
|
|
55
|
-
return
|
|
48
|
+
return filterConditions;
|
|
56
49
|
};
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { Field, RecordDataSet } from "../../../../types";
|
|
2
|
+
export declare const RecordHashCalculator: () => {
|
|
3
|
+
computeHashesForRecords: (dataSet: RecordDataSet, fields: Field[], _onHashesComputed: (x: any) => void) => Promise<void>;
|
|
4
|
+
};
|
|
5
|
+
export declare const RecordValueHashCalculator: () => {
|
|
6
|
+
computeDuplicateValueHashes: (dataSet: RecordDataSet, _field: Field, _onDuplicateHashesComputed: (x: any[]) => void) => Promise<void>;
|
|
7
|
+
};
|