fuse-importer 0.1.7-testing → 0.1.8-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 +1 -1
- package/lib/esm/Importer/Review/AppResponseModal.js +2 -2
- package/lib/esm/Importer/Stepper/index.js +26 -13
- package/lib/esm/Importer/common/Spreadsheet/SpreadsheetContextProvider/useDataSetManipulation.d.ts +1 -0
- package/lib/esm/Importer/common/Spreadsheet/SpreadsheetContextProvider/useDataSetManipulation.js +29 -0
- package/lib/esm/Importer/common/Spreadsheet/ValidationContextProvider/index.js +17 -8
- package/lib/esm/Importer/common/Spreadsheet/components/FindAndReplace/index.d.ts +6 -0
- package/lib/esm/Importer/common/Spreadsheet/components/FindAndReplace/index.js +44 -0
- package/lib/esm/Importer/common/Spreadsheet/components/SpreadsheetRowCheckboxes.js +1 -1
- package/lib/esm/Importer/common/Spreadsheet/transformation/index.d.ts +1 -2
- package/lib/esm/Importer/common/Spreadsheet/transformation/index.js +4 -8
- 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.d.ts → transformators/index.d.ts} +6 -6
- package/lib/esm/Importer/common/Spreadsheet/transformation/{transformators.js → transformators/index.js} +24 -45
- package/lib/esm/Importer/common/theme.d.ts +1 -0
- package/lib/esm/Importer/data/index.d.ts +0 -1
- package/lib/esm/Importer/data/index.js +0 -37
- package/lib/esm/common/Table/TableActions/RowFilters.js +1 -1
- package/lib/esm/common/Table/TableActions/SearchRows.js +22 -14
- package/lib/esm/common/Table/TableActions/TableActions.styles.js +1 -1
- package/lib/esm/common/Table/TableActions/icons.d.ts +1 -0
- package/lib/esm/common/Table/TableActions/icons.js +1 -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/Toast.d.ts +34 -3
- package/lib/esm/common/Toast.js +31 -15
- package/lib/esm/common/datePatterns.d.ts +0 -1
- package/lib/esm/common/datePatterns.js +0 -10
- package/lib/esm/common/icons/index.d.ts +3 -0
- package/lib/esm/common/icons/index.js +5 -2
- package/lib/esm/common/inputs/Checkbox.d.ts +2 -1
- package/lib/esm/common/inputs/Checkbox.js +9 -7
- package/lib/esm/locales/en.d.ts +13 -0
- package/lib/esm/locales/en.js +13 -0
- 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/main.js +6 -6
- package/package.json +1 -1
|
@@ -93,6 +93,6 @@ export var ImporterWithContext = function () {
|
|
|
93
93
|
currentStepIndex: currentStepIndex,
|
|
94
94
|
templateHeaders: templateHeaders,
|
|
95
95
|
};
|
|
96
|
-
return (_jsx(ThemeProvider, __assign({ theme: theme }, { children: _jsx(AppLoadingContextProvider, { children: _jsxs(EventManagerContextProvider, { children: [_jsx(Toast, {}), _jsx(GlobalStyle, {}), _jsx(ImporterFonts, {}), templateHeaders ? (_jsx(ReviewContextProvider, __assign({ initialRecords: initialRecords }, { children: _jsxs(_Fragment, { children: [isModal && _jsx(Backdrop, {}), _jsx(Layout, __assign({ zIndex: zIndex, ref: layoutRef, isModal: isModal }, { children: shouldShowPreviewFirstTime ? (_jsx(PreviewFirstTime, {})) : (_jsx(ContentRenderer, __assign({}, contentRendererProps))) }))] }) }))) : (_jsx(AppLoading, {}))] }) }) })));
|
|
96
|
+
return (_jsx(ThemeProvider, __assign({ theme: theme }, { children: _jsx(AppLoadingContextProvider, { children: _jsxs(EventManagerContextProvider, { children: [_jsx(Toast, { zIndex: zIndex + 1 }), _jsx(GlobalStyle, {}), _jsx(ImporterFonts, {}), templateHeaders ? (_jsx(ReviewContextProvider, __assign({ initialRecords: initialRecords }, { children: _jsxs(_Fragment, { children: [isModal && _jsx(Backdrop, {}), _jsx(Layout, __assign({ zIndex: zIndex, ref: layoutRef, isModal: isModal }, { children: shouldShowPreviewFirstTime ? (_jsx(PreviewFirstTime, {})) : (_jsx(ContentRenderer, __assign({}, contentRendererProps))) }))] }) }))) : (_jsx(AppLoading, {}))] }) }) })));
|
|
97
97
|
};
|
|
98
98
|
var templateObject_1, templateObject_2, templateObject_3, templateObject_4, templateObject_5, templateObject_6;
|
|
@@ -11,7 +11,7 @@ var __assign = (this && this.__assign) || function () {
|
|
|
11
11
|
};
|
|
12
12
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
13
13
|
import { useEffect, useState } from "react";
|
|
14
|
-
import {
|
|
14
|
+
import { Button, Modal } from "../..";
|
|
15
15
|
import { Div } from "../../styled/utils";
|
|
16
16
|
import { useImporterContext } from "../contexts/ImporterContextProvider";
|
|
17
17
|
import { useReviewContext } from "./ReviewContextProvider";
|
|
@@ -31,5 +31,5 @@ export var AppResponseModal = function () {
|
|
|
31
31
|
var defaultMessage = importWasSuccessful
|
|
32
32
|
? "Data imported successfully"
|
|
33
33
|
: "Some records could not be imported. Please review the errors and resubmit.";
|
|
34
|
-
return (_jsx(Modal, __assign({ isOpen: isAppResponseModalOpen, onClose: onCloseModal }, { children: _jsxs(Div, __assign({ centered: true, flexColumn: true, p: 40 }, { children: [_jsx(Div, __assign({ h6: true, w: 300, textAlignCenter: true, mt: 20 }, { children: (appResponse === null || appResponse === void 0 ? void 0 : appResponse.message) || defaultMessage })), _jsx(Div, __assign({ dflex: true, mt: 40, w100: true, centered: true }, { children: _jsx(Button, __assign({ ml: 10, onClick: onCloseModal }, { children: "OK" })) }))] })) })));
|
|
34
|
+
return (_jsx(Modal, __assign({ isOpen: isAppResponseModalOpen, onClose: onCloseModal }, { children: _jsxs(Div, __assign({ centered: true, flexColumn: true, p: 40 }, { children: [_jsx(Div, __assign({ h6: true, w: 300, textAlignCenter: true, mt: 20 }, { children: (appResponse === null || appResponse === void 0 ? void 0 : appResponse.message) || defaultMessage })), _jsx(Div, __assign({ dflex: true, mt: 40, w100: true, centered: true }, { children: _jsx(Button, __assign({ ml: 10, onClick: onCloseModal, "data-cy": "app-response-btn" }, { children: "OK" })) }))] })) })));
|
|
35
35
|
};
|
|
@@ -28,6 +28,7 @@ import { ConfirmCloseModal } from "./ConfirmCloseModal";
|
|
|
28
28
|
import { Step } from "./Step";
|
|
29
29
|
import { StepperSubmitModal } from "./StepperSubmitModal";
|
|
30
30
|
import { UnmatchedHeadersModal } from "./UnmatchedHeadersModal";
|
|
31
|
+
import { useDataSetContext } from "../common/Spreadsheet/DataSetContextProvider";
|
|
31
32
|
var StepperWrapper = styled(Div)(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n background-color: ", ";\n border-bottom: 1px solid ", ";\n user-select: none;\n"], ["\n background-color: ", ";\n border-bottom: 1px solid ", ";\n user-select: none;\n"])), function (p) { return p.theme.colors.white; }, function (p) { return p.theme.colors.gray300; });
|
|
32
33
|
var StepperContainer = styled(Div)(templateObject_2 || (templateObject_2 = __makeTemplateObject(["\n align-items: center;\n display: flex;\n gap: 16px;\n justify-content: space-between;\n padding-left: 32px;\n padding-right: 32px;\n width: 100%;\n"], ["\n align-items: center;\n display: flex;\n gap: 16px;\n justify-content: space-between;\n padding-left: 32px;\n padding-right: 32px;\n width: 100%;\n"])));
|
|
33
34
|
var Steps = styled(Div)(templateObject_3 || (templateObject_3 = __makeTemplateObject(["\n @media (max-width: 630px) {\n display: none;\n }\n"], ["\n @media (max-width: 630px) {\n display: none;\n }\n"])));
|
|
@@ -44,24 +45,36 @@ export var Stepper = function (_a) {
|
|
|
44
45
|
var t = useTranslation("general").t;
|
|
45
46
|
var _c = useState(false), isSubmitModalOpen = _c[0], setIsSubmitModalOpen = _c[1];
|
|
46
47
|
var _d = useState(false), isConfirmCloseModalOpen = _d[0], setIsConfirmCloseModalOpen = _d[1];
|
|
47
|
-
var _e =
|
|
48
|
-
var _f =
|
|
49
|
-
var
|
|
50
|
-
var _g =
|
|
48
|
+
var _e = useDataSetContext(), dataSetLength = _e.dataSetLength, emptyRecordIds = _e.emptyRecordIds;
|
|
49
|
+
var _f = useState(true), isSubmitDisabled = _f[0], setIsSubmitDisabled = _f[1];
|
|
50
|
+
var headerMappingsLoaded = useImporterContext().headerMappingsLoaded;
|
|
51
|
+
var _g = useReviewContext(), appResponse = _g.appResponse, onSubmit = _g.onSubmit;
|
|
52
|
+
var _h = useValidationContext(), totalErrorCount = _h.totalErrorCount, spreadsheetInitialized = _h.spreadsheetInitialized;
|
|
53
|
+
var _j = useEventManagerContext(), on = _j.on, off = _j.off, EVENTS = _j.EVENTS;
|
|
54
|
+
var updateSpreadsheetDisabled = function () {
|
|
55
|
+
var isSpreadsheetEmpty = dataSetLength.current === emptyRecordIds.current.size;
|
|
56
|
+
var isDisabled = totalErrorCount.current > 0 ||
|
|
57
|
+
!spreadsheetInitialized ||
|
|
58
|
+
isSpreadsheetEmpty;
|
|
59
|
+
setIsSubmitDisabled(isDisabled);
|
|
60
|
+
};
|
|
51
61
|
useEffect(function () {
|
|
52
|
-
|
|
53
|
-
var isDisabled = totalErrorCount.current > 0;
|
|
54
|
-
setIsSubmitDisabled(isDisabled);
|
|
55
|
-
};
|
|
56
|
-
on(EVENTS.UPDATE_TOTAL_ERROR_COUNT, listener);
|
|
62
|
+
on(EVENTS.UPDATE_TOTAL_ERROR_COUNT, updateSpreadsheetDisabled);
|
|
57
63
|
return function () {
|
|
58
|
-
off(EVENTS.UPDATE_TOTAL_ERROR_COUNT,
|
|
64
|
+
off(EVENTS.UPDATE_TOTAL_ERROR_COUNT, updateSpreadsheetDisabled);
|
|
59
65
|
};
|
|
60
|
-
}, [appResponse]);
|
|
61
|
-
|
|
66
|
+
}, [appResponse, spreadsheetInitialized]);
|
|
67
|
+
useEffect(function () {
|
|
68
|
+
updateSpreadsheetDisabled();
|
|
69
|
+
}, [spreadsheetInitialized]);
|
|
70
|
+
var _k = useImporterContext(), initialRecords = _k.initialRecords, currentStepIndex = _k.currentStepIndex, templateHeaderMatchings = _k.templateHeaderMatchings, matcherSubstep = _k.matcherSubstep, templateHeaders = _k.templateHeaders, enumFieldValueMatchings = _k.enumFieldValueMatchings, setMatcherSubstep = _k.setMatcherSubstep, setCurrentStepIndex = _k.setCurrentStepIndex, onClose = _k.onClose, isUsingManualImport = _k.isUsingManualImport, resetImporterWhenUsingManualImport = _k.resetImporterWhenUsingManualImport, uploadedData = _k.uploadedData;
|
|
71
|
+
var _l = useState(true), isContinueDisabled = _l[0], setIsContinueDisabled = _l[1];
|
|
62
72
|
var templateHeaderLabels = Object.keys(templateHeaderMatchings || []);
|
|
63
73
|
var unmatchedHeadersCount = templateHeaderLabels.filter(function (templateHeaderLabel) { return !templateHeaderMatchings[templateHeaderLabel]; }).length;
|
|
64
74
|
var isLastSubMatchStep = matcherSubstep === 1;
|
|
75
|
+
useEffect(function () {
|
|
76
|
+
setIsContinueDisabled(currentStepIndex === 1 && !headerMappingsLoaded);
|
|
77
|
+
}, [currentStepIndex, headerMappingsLoaded]);
|
|
65
78
|
var setStep = function () {
|
|
66
79
|
var templateHasEnumFields = !!(templateHeaders === null || templateHeaders === void 0 ? void 0 : templateHeaders.find(function (header) { return header.column_type === ColumnType.enum; }));
|
|
67
80
|
if (templateHasEnumFields) {
|
|
@@ -120,7 +133,7 @@ export var Stepper = function (_a) {
|
|
|
120
133
|
return (_jsxs(Div, __assign({ centered: true }, { children: [_jsx(Step, { index: index, label: label, isCompleted: isCompleted, isSelected: index === currentStepIndex }), !isLast && (_jsx(Div, __assign({ ml: 18, mr: 18, dflex: true }, { children: _jsx(ChevronRightIcon, {}) })))] }), index));
|
|
121
134
|
}) })));
|
|
122
135
|
var leftButtonUI = (_jsx(Div, __assign({ style: { flex: 1 } }, { children: !initialRecords && (_jsxs(StepperButtonContainer, __assign({ align: "left" }, { children: [logoURL && (_jsx(Div, __assign({ forDesktop: true }, { children: _jsx(Logo, { src: logoURL, alt: "" }) }))), currentStepIndex > 0 && !appResponse && (_jsx(GoBackButtonWrapper, { children: _jsx(Button, __assign({ variant: "secondary", onClick: goBack }, { children: t("stepper.go_back") })) }))] }))) })));
|
|
123
|
-
var rightButtonUI = (_jsxs(StepperButtonContainer, __assign({ align: "right" }, { children: [(isMatchStep || isVerifyStep) && (_jsx(Button, __assign({ "data-cy": "continue-button", variant: "primary", onClick: continueToNextStep }, { children: t("stepper.continue") }))), isReviewStep && (_jsx(Button, __assign({ variant: "primary", isDisabled: isSubmitDisabled, "data-cy": "submit_disabled_" + isSubmitDisabled, onClick: function () { return setIsSubmitModalOpen(true); } }, { children: t("stepper.submit") }))), _jsx(CloseIcon, __assign({ "data-test-id": "close-importer", centered: true, clickable: true, onClick: handleOnClose }, { children: closeIconCondensed }))] })));
|
|
136
|
+
var rightButtonUI = (_jsxs(StepperButtonContainer, __assign({ align: "right" }, { children: [(isMatchStep || isVerifyStep) && (_jsx(Button, __assign({ "data-cy": "continue-button", isDisabled: isContinueDisabled, variant: "primary", onClick: continueToNextStep }, { children: t("stepper.continue") }))), isReviewStep && (_jsx(Button, __assign({ variant: "primary", isDisabled: isSubmitDisabled, "data-cy": "submit_disabled_" + isSubmitDisabled, onClick: function () { return setIsSubmitModalOpen(true); } }, { children: t("stepper.submit") }))), _jsx(CloseIcon, __assign({ "data-test-id": "close-importer", centered: true, clickable: true, onClick: handleOnClose }, { children: closeIconCondensed }))] })));
|
|
124
137
|
return (_jsxs(_Fragment, { children: [_jsx(StepperWrapper, __assign({ pRelative: true, alignCenter: true, w100: true, h: 72, centered: true }, { children: _jsxs(StepperContainer, { children: [leftButtonUI, _jsx(Steps, __assign({ alignCenter: true }, { children: stepsUI })), rightButtonUI] }) })), _jsx(UnmatchedHeadersModal, { isUnmatchedHeadersModalOpen: isUnmatchedHeadersModalOpen, unmatchedHeadersCount: unmatchedHeadersCount, onSetStep: function () { return setStep(); }, onCloseUnmatchedHeadersModal: function () {
|
|
125
138
|
return setIsUnmatchedHeadersModalOpen(false);
|
|
126
139
|
} }), _jsx(StepperSubmitModal, { isSubmitModalOpen: isSubmitModalOpen, onCloseModal: function () { return setIsSubmitModalOpen(false); }, onSubmit: onSubmit }), _jsx(ConfirmCloseModal, { isOpen: isConfirmCloseModalOpen, onClose: function () { return setIsConfirmCloseModalOpen(false); }, onCloseImporter: onClose })] }));
|
package/lib/esm/Importer/common/Spreadsheet/SpreadsheetContextProvider/useDataSetManipulation.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
export declare const useDataSetManipulation: () => {
|
|
2
2
|
appendNewRecordToSpreadsheet: () => void;
|
|
3
3
|
deleteRecordsFromSpreadsheet: (recordIds: string[]) => void;
|
|
4
|
+
findAndReplaceInSpreadsheet: (searchText: string, replaceText: string, matchCase: boolean, useRegex: boolean) => any[];
|
|
4
5
|
};
|
package/lib/esm/Importer/common/Spreadsheet/SpreadsheetContextProvider/useDataSetManipulation.js
CHANGED
|
@@ -1,3 +1,14 @@
|
|
|
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
|
+
};
|
|
1
12
|
import { useFilteredDataContext } from "../FilteredDataContextProvider";
|
|
2
13
|
import { useDataSetContext } from "../DataSetContextProvider";
|
|
3
14
|
import { hasValueInAnyField } from "./utils";
|
|
@@ -5,6 +16,8 @@ import { addMeta } from "../../../../Importer/data";
|
|
|
5
16
|
import { useEventManagerContext } from "../../../../common/EventManagerContextProvider";
|
|
6
17
|
import { useValidationContext } from "../ValidationContextProvider";
|
|
7
18
|
import { useDuplicateDataContext } from "../DuplicateDataContextProvider";
|
|
19
|
+
import { useBatchProcessing } from "./useBatchProcessing";
|
|
20
|
+
import useFindAndReplace from "../../../../common/Table/TableActions/useFindAndReplace";
|
|
8
21
|
export var useDataSetManipulation = function () {
|
|
9
22
|
var _a = useFilteredDataContext(), lastFilteredRecordId = _a.lastFilteredRecordId, setRecalculateFilters = _a.setRecalculateFilters;
|
|
10
23
|
var _b = useDataSetContext(), getRecord = _b.getRecord, setRecord = _b.setRecord, dataSet = _b.dataSet, deleteRecord = _b.deleteRecord, emptyRecordIds = _b.emptyRecordIds;
|
|
@@ -12,6 +25,8 @@ export var useDataSetManipulation = function () {
|
|
|
12
25
|
var _d = useValidationContext(), errors = _d.errors, warnings = _d.warnings, calculateColumnErrorCounts = _d.calculateColumnErrorCounts, calculateColumnWarningCounts = _d.calculateColumnWarningCounts;
|
|
13
26
|
var updateDuplicateValues = useDuplicateDataContext().updateDuplicateValues;
|
|
14
27
|
var updateRecordAndRevalidate = useValidationContext().updateRecordAndRevalidate;
|
|
28
|
+
var processInBatches = useBatchProcessing().processInBatches;
|
|
29
|
+
var replaceInRecord = useFindAndReplace().replaceInRecord;
|
|
15
30
|
var appendNewRecordToSpreadsheet = function () {
|
|
16
31
|
var _a, _b;
|
|
17
32
|
var _record = getRecord(lastFilteredRecordId.current);
|
|
@@ -39,8 +54,22 @@ export var useDataSetManipulation = function () {
|
|
|
39
54
|
emit(EVENTS.UPDATE_TOTAL_ERROR_COUNT);
|
|
40
55
|
emit(EVENTS.UPDATE_TOTAL_ROW_COUNT);
|
|
41
56
|
};
|
|
57
|
+
var findAndReplaceInSpreadsheet = function (searchText, replaceText, matchCase, useRegex) {
|
|
58
|
+
var cellsWithText = [];
|
|
59
|
+
processInBatches(dataSet.current, function (batch) {
|
|
60
|
+
for (var recordKey in batch) {
|
|
61
|
+
var record = __assign({}, dataSet.current[recordKey]);
|
|
62
|
+
if (replaceInRecord(record, searchText, replaceText, matchCase, useRegex)) {
|
|
63
|
+
cellsWithText.push(record);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
});
|
|
67
|
+
updateRecordAndRevalidate(cellsWithText);
|
|
68
|
+
return cellsWithText;
|
|
69
|
+
};
|
|
42
70
|
return {
|
|
43
71
|
appendNewRecordToSpreadsheet: appendNewRecordToSpreadsheet,
|
|
44
72
|
deleteRecordsFromSpreadsheet: deleteRecordsFromSpreadsheet,
|
|
73
|
+
findAndReplaceInSpreadsheet: findAndReplaceInSpreadsheet,
|
|
45
74
|
};
|
|
46
75
|
};
|
|
@@ -58,6 +58,7 @@ import { jsx as _jsx } from "react/jsx-runtime";
|
|
|
58
58
|
import { createContext, useContext, useEffect, useMemo, useRef, useState, } from "react";
|
|
59
59
|
import { useAppLoadingContext } from "../../../../common/AppLoadingContextProvider";
|
|
60
60
|
import { useEventManagerContext } from "../../../../common/EventManagerContextProvider";
|
|
61
|
+
import { useImporterContext } from "../../../contexts/ImporterContextProvider";
|
|
61
62
|
import { useDataSetContext } from "../DataSetContextProvider";
|
|
62
63
|
import { useDuplicateDataContext } from "../DuplicateDataContextProvider";
|
|
63
64
|
import { useBatchProcessing } from "../SpreadsheetContextProvider/useBatchProcessing";
|
|
@@ -101,16 +102,22 @@ export var ValidationContextProvider = function (_a) {
|
|
|
101
102
|
var columnsWithWarningCounts = useRef({});
|
|
102
103
|
var totalErrorCount = useRef(0);
|
|
103
104
|
var invalidRowsCountRef = useRef(0);
|
|
104
|
-
var _c =
|
|
105
|
-
var _d =
|
|
106
|
-
var _e =
|
|
107
|
-
var _f = useDuplicateDataContext(), duplicateValues = _f.duplicateValues, updateDuplicateValues = _f.updateDuplicateValues;
|
|
105
|
+
var _c = useEventManagerContext(), emit = _c.emit, EVENTS = _c.EVENTS;
|
|
106
|
+
var _d = useDataSetContext(), getRecord = _d.getRecord, setRecord = _d.setRecord, dataSet = _d.dataSet;
|
|
107
|
+
var _e = useDuplicateDataContext(), duplicateValues = _e.duplicateValues, updateDuplicateValues = _e.updateDuplicateValues;
|
|
108
108
|
var processRecordsInBatches = useBatchProcessing(10000).processRecordsInBatches;
|
|
109
|
+
var _f = useState(false), spreadsheetInitialized = _f[0], setSpreadsheetInitialized = _f[1];
|
|
110
|
+
var currentStepIndex = useImporterContext().currentStepIndex;
|
|
111
|
+
var _g = useState(false), dataSetChanged = _g[0], setDataSetChanged = _g[1];
|
|
109
112
|
var reset = function () {
|
|
110
113
|
columnsWithErrorCounts.current = {};
|
|
111
114
|
columnsWithWarningCounts.current = {};
|
|
112
115
|
totalErrorCount.current = 0;
|
|
113
116
|
invalidRowsCountRef.current = 0;
|
|
117
|
+
errors.current = {};
|
|
118
|
+
warnings.current = {};
|
|
119
|
+
setSpreadsheetInitialized(false);
|
|
120
|
+
setDataSetChanged(function (prev) { return !prev; });
|
|
114
121
|
};
|
|
115
122
|
var calculateColumnErrorCounts = function (oldErrors, newErrors) {
|
|
116
123
|
if (oldErrors === void 0) { oldErrors = {}; }
|
|
@@ -177,7 +184,7 @@ export var ValidationContextProvider = function (_a) {
|
|
|
177
184
|
else {
|
|
178
185
|
delete warnings.current[recordId];
|
|
179
186
|
}
|
|
180
|
-
if (backendErrors) {
|
|
187
|
+
if (backendErrors && spreadsheetInitialized) {
|
|
181
188
|
record._meta.backendErrors = {};
|
|
182
189
|
}
|
|
183
190
|
emit(recordId, newRecord);
|
|
@@ -253,7 +260,9 @@ export var ValidationContextProvider = function (_a) {
|
|
|
253
260
|
// Initial data validation and update dataSet
|
|
254
261
|
useEffect(function () {
|
|
255
262
|
reset();
|
|
256
|
-
|
|
263
|
+
}, [dataSet.current]);
|
|
264
|
+
useEffect(function () {
|
|
265
|
+
if (!dataSet.current || isReadOnly || currentStepIndex !== 2)
|
|
257
266
|
return;
|
|
258
267
|
setIsLoadingApp(true);
|
|
259
268
|
var initialValidation = function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
@@ -265,7 +274,6 @@ export var ValidationContextProvider = function (_a) {
|
|
|
265
274
|
return [4 /*yield*/, updateRecordAndRevalidate(initialData, true)];
|
|
266
275
|
case 1:
|
|
267
276
|
_a.sent();
|
|
268
|
-
setSpreadsheetInitialized(true);
|
|
269
277
|
return [2 /*return*/];
|
|
270
278
|
}
|
|
271
279
|
});
|
|
@@ -277,11 +285,12 @@ export var ValidationContextProvider = function (_a) {
|
|
|
277
285
|
case 1:
|
|
278
286
|
_a.sent();
|
|
279
287
|
setIsLoadingApp(false);
|
|
288
|
+
setSpreadsheetInitialized(true);
|
|
280
289
|
return [2 /*return*/];
|
|
281
290
|
}
|
|
282
291
|
});
|
|
283
292
|
}); })();
|
|
284
|
-
}, [
|
|
293
|
+
}, [spreadsheetInitialized, currentStepIndex, dataSetChanged]);
|
|
285
294
|
var isValidationCompleted = validationPercentage === 100;
|
|
286
295
|
var isValid = isValidationCompleted && totalErrorCount.current === 0;
|
|
287
296
|
var value = {
|
|
@@ -0,0 +1,44 @@
|
|
|
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, jsxs as _jsxs } from "react/jsx-runtime";
|
|
13
|
+
import { Div } from "../../../../../styled";
|
|
14
|
+
import { Button, Modal, addToast } from "../../../../../common";
|
|
15
|
+
import { useTranslation } from "react-i18next";
|
|
16
|
+
import { TextInput } from "../../../../../common/inputs/TextInput";
|
|
17
|
+
import { Checkbox } from "../../../../../common";
|
|
18
|
+
import { useState } from "react";
|
|
19
|
+
import { useDataSetManipulation } from "../../SpreadsheetContextProvider/useDataSetManipulation";
|
|
20
|
+
import { useFilteredDataContext } from "../../FilteredDataContextProvider";
|
|
21
|
+
export var FindAndReplaceModal = function (_a) {
|
|
22
|
+
var initialText = _a.initialText, onClose = _a.onClose;
|
|
23
|
+
var t = useTranslation("general").t;
|
|
24
|
+
var _b = useState(initialText), searchText = _b[0], setSearchText = _b[1];
|
|
25
|
+
var _c = useState(""), replaceText = _c[0], setReplaceText = _c[1];
|
|
26
|
+
var findAndReplaceInSpreadsheet = useDataSetManipulation().findAndReplaceInSpreadsheet;
|
|
27
|
+
var _d = useState(false), useRegex = _d[0], setUseRegex = _d[1];
|
|
28
|
+
var _e = useState(true), matchCase = _e[0], setMatchCase = _e[1];
|
|
29
|
+
var setFilteredInputValue = useFilteredDataContext().setFilteredInputValue;
|
|
30
|
+
var findAndReplace = function () {
|
|
31
|
+
var records = findAndReplaceInSpreadsheet(searchText, replaceText, matchCase, useRegex);
|
|
32
|
+
if (records.length > 0) {
|
|
33
|
+
addToast(t("find_and_replace_modal.records_replaced", {
|
|
34
|
+
length: records.length,
|
|
35
|
+
}), "success");
|
|
36
|
+
onClose();
|
|
37
|
+
setFilteredInputValue("");
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
addToast(t("find_and_replace_modal.no_records_found"), "error");
|
|
41
|
+
}
|
|
42
|
+
};
|
|
43
|
+
return (_jsx(Modal, __assign({ isOpen: true, onClose: function () { return onClose(); } }, { children: _jsxs(Div, __assign({ p: "17px 20px", w: 500 }, { children: [_jsx(Div, __assign({ textAlignCenter: true, h5: true }, { children: t("find_and_replace_modal.title") })), _jsx(Div, __assign({ mt: 20, mb: 20, textAlignCenter: true, body1: true }, { children: t("find_and_replace_modal.description") })), _jsxs(Div, __assign({ mb: 20, w: 500, textAlignCenter: true, body1: true }, { children: [_jsx(TextInput, { "data-cy": "find-input", mb: 20, name: t("find_and_replace_modal.find"), label: t("find_and_replace_modal.find"), value: searchText, onChange: function (value) { return setSearchText(value); } }), _jsx(TextInput, { "data-cy": "replace-input", label: t("find_and_replace_modal.replace_with"), value: replaceText, onChange: function (value) { return setReplaceText(value); } })] })), _jsx(Div, __assign({ mb: 12 }, { children: _jsx(Checkbox, { "data-cy": "use-regex", label: t("find_and_replace_modal.use_regex"), isChecked: useRegex, onChange: function (v) { return setUseRegex(v); } }) })), _jsx(Div, __assign({ mb: 12 }, { children: _jsx(Checkbox, { "data-cy": "case-sensitive", label: t("find_and_replace_modal.use_case_sensitive"), isChecked: matchCase, onChange: function (v) { return setMatchCase(v); } }) })), _jsxs(Div, __assign({ dflex: true, centered: true, mt: 40 }, { children: [_jsx(Button, __assign({ variant: "secondary", onClick: function () { return onClose(); }, w: 160, mr: 16 }, { children: t("find_and_replace_modal.cancel") })), _jsx(Button, __assign({ "data-cy": "find-replace-submit", variant: "primary", onClick: function () { return findAndReplace(); } }, { children: t("find_and_replace_modal.submit") }))] }))] })) })));
|
|
44
|
+
};
|
|
@@ -44,9 +44,9 @@ import { useImporterContext } from "../../../contexts/ImporterContextProvider";
|
|
|
44
44
|
import { useReviewContext } from "../../../Review/ReviewContextProvider";
|
|
45
45
|
import { spreadsheetRowHeightPx } from "../common";
|
|
46
46
|
import { spreadsheetHeaderHeightPx } from "../common/index";
|
|
47
|
-
import { useDataSetContext } from "../DataSetContextProvider";
|
|
48
47
|
import { useSpreadsheetContext } from "../SpreadsheetContextProvider";
|
|
49
48
|
import { rowIsEmpty } from "../SpreadsheetContextProvider/utils";
|
|
49
|
+
import { useDataSetContext } from "../DataSetContextProvider";
|
|
50
50
|
var StyledGrid = styled(Grid)(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n background: ", ";\n overflow-y: scroll;\n"], ["\n background: ", ";\n overflow-y: scroll;\n"])), function (_a) {
|
|
51
51
|
var theme = _a.theme;
|
|
52
52
|
return theme.colors.white50;
|
|
@@ -2,7 +2,6 @@ import { Field, Record, TransformedRecord } from "../../../../types";
|
|
|
2
2
|
type TransformRecordArgs = {
|
|
3
3
|
record: Record;
|
|
4
4
|
fields: Field[];
|
|
5
|
-
possibleDateFormats?: string[];
|
|
6
5
|
};
|
|
7
|
-
export declare const transformRecord: ({ record, fields
|
|
6
|
+
export declare const transformRecord: ({ record, fields }: TransformRecordArgs) => TransformedRecord;
|
|
8
7
|
export {};
|
|
@@ -1,15 +1,11 @@
|
|
|
1
|
-
import {
|
|
2
|
-
var runTransformation = function (fieldValue, transformation, field
|
|
1
|
+
import { fieldTransformations } from "./transformators";
|
|
2
|
+
var runTransformation = function (fieldValue, transformation, field) {
|
|
3
3
|
var transformationType = transformation.transformation_type;
|
|
4
4
|
var transformerFunction = fieldTransformations[transformationType];
|
|
5
|
-
if (Object.keys(datesDateTimesAndTimesTransformations).includes(transformationType)) {
|
|
6
|
-
var dateTimeTransformFunction = transformerFunction;
|
|
7
|
-
return dateTimeTransformFunction(fieldValue, transformation, field, possibleDateFormats);
|
|
8
|
-
}
|
|
9
5
|
return transformerFunction(fieldValue, transformation, field);
|
|
10
6
|
};
|
|
11
7
|
export var transformRecord = function (_a) {
|
|
12
|
-
var record = _a.record, fields = _a.fields
|
|
8
|
+
var record = _a.record, fields = _a.fields;
|
|
13
9
|
var transformedRecords = {};
|
|
14
10
|
for (var _i = 0, fields_1 = fields; _i < fields_1.length; _i++) {
|
|
15
11
|
var currentField = fields_1[_i];
|
|
@@ -27,7 +23,7 @@ export var transformRecord = function (_a) {
|
|
|
27
23
|
var fieldWasTransformed = false;
|
|
28
24
|
for (var i = 0; i < fieldTransformations_1.length; i++) {
|
|
29
25
|
var currentTransformation = fieldTransformations_1[i];
|
|
30
|
-
var transformed = runTransformation(transformedField.transformed, currentTransformation, currentField
|
|
26
|
+
var transformed = runTransformation(transformedField.transformed, currentTransformation, currentField);
|
|
31
27
|
if (transformed.transformationWasNeeded) {
|
|
32
28
|
fieldWasTransformed = true;
|
|
33
29
|
transformedField = {
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { DateTime } from "luxon";
|
|
2
|
+
export declare const parseDateFromUserInput: (userInput: string) => DateTime | null;
|
|
3
|
+
export declare const parseTimeFromUserInput: (input: any) => DateTime;
|
|
4
|
+
export declare const parseTimeFromDateTimeorTimeInput: (userInput: any) => DateTime;
|
|
5
|
+
export declare const parseDateTimeFromUserInput: (userInput: any) => DateTime;
|
package/lib/esm/Importer/common/Spreadsheet/transformation/transformators/dateTimeAutoformatUtils.js
ADDED
|
@@ -0,0 +1,231 @@
|
|
|
1
|
+
import { DateTime } from "luxon";
|
|
2
|
+
var MONTH_NAMES = [
|
|
3
|
+
"january",
|
|
4
|
+
"february",
|
|
5
|
+
"march",
|
|
6
|
+
"april",
|
|
7
|
+
"may",
|
|
8
|
+
"june",
|
|
9
|
+
"july",
|
|
10
|
+
"august",
|
|
11
|
+
"september",
|
|
12
|
+
"october",
|
|
13
|
+
"november",
|
|
14
|
+
"december",
|
|
15
|
+
];
|
|
16
|
+
var MONTH_ABBREVIATIONS = [
|
|
17
|
+
"jan",
|
|
18
|
+
"feb",
|
|
19
|
+
"mar",
|
|
20
|
+
"apr",
|
|
21
|
+
"may",
|
|
22
|
+
"jun",
|
|
23
|
+
"jul",
|
|
24
|
+
"aug",
|
|
25
|
+
"sep",
|
|
26
|
+
"oct",
|
|
27
|
+
"nov",
|
|
28
|
+
"dec",
|
|
29
|
+
];
|
|
30
|
+
var DAY_NAMES = [
|
|
31
|
+
"sunday",
|
|
32
|
+
"monday",
|
|
33
|
+
"tuesday",
|
|
34
|
+
"wednesday",
|
|
35
|
+
"thursday",
|
|
36
|
+
"friday",
|
|
37
|
+
"saturday",
|
|
38
|
+
];
|
|
39
|
+
var DAY_ABBREVIATIONS = ["sun", "mon", "tue", "wed", "thu", "fri", "sat"];
|
|
40
|
+
var tryParseCommonDateFormats = function (input) {
|
|
41
|
+
var _a, _b, _c;
|
|
42
|
+
var trimmedInput = input.trim();
|
|
43
|
+
var len = trimmedInput.length;
|
|
44
|
+
if (len < 6 || len > 10)
|
|
45
|
+
return null;
|
|
46
|
+
var parts = input.split(/[-/.]/);
|
|
47
|
+
if (parts.length !== 3)
|
|
48
|
+
return null;
|
|
49
|
+
var _d = parts.map(Number), first = _d[0], second = _d[1], third = _d[2];
|
|
50
|
+
var year, month, day;
|
|
51
|
+
if (parts[2].length === 4) {
|
|
52
|
+
_a = [first, second, third], month = _a[0], day = _a[1], year = _a[2];
|
|
53
|
+
}
|
|
54
|
+
else if (parts[0].length === 4) {
|
|
55
|
+
_b = [first, second, third], year = _b[0], month = _b[1], day = _b[2];
|
|
56
|
+
}
|
|
57
|
+
else if (parts[2].length === 2) {
|
|
58
|
+
// Handles the case where year is two digits
|
|
59
|
+
_c = [first, second, third], month = _c[0], day = _c[1], year = _c[2];
|
|
60
|
+
year += year < 50 ? 2000 : 1900; // Convert to 4 digits
|
|
61
|
+
}
|
|
62
|
+
else {
|
|
63
|
+
return null; // Unknown format
|
|
64
|
+
}
|
|
65
|
+
if (year >= 0 && month >= 1 && month <= 12 && day >= 1 && day <= 31) {
|
|
66
|
+
var dt = DateTime.fromObject({ day: day, month: month, year: year });
|
|
67
|
+
return dt.isValid ? dt : null;
|
|
68
|
+
}
|
|
69
|
+
return null;
|
|
70
|
+
};
|
|
71
|
+
export var parseDateFromUserInput = function (userInput) {
|
|
72
|
+
var datePart = userInput;
|
|
73
|
+
var hasTimePart = userInput.indexOf(":") !== -1 && userInput.split(":").length > 1;
|
|
74
|
+
if (hasTimePart) {
|
|
75
|
+
var parts = userInput.trim().split(" ");
|
|
76
|
+
datePart =
|
|
77
|
+
parts.length === 2
|
|
78
|
+
? parts[0].indexOf(":") !== -1
|
|
79
|
+
? parts[1]
|
|
80
|
+
: parts[0]
|
|
81
|
+
: userInput;
|
|
82
|
+
}
|
|
83
|
+
var commonFormatResult = tryParseCommonDateFormats(datePart);
|
|
84
|
+
if (commonFormatResult)
|
|
85
|
+
return commonFormatResult;
|
|
86
|
+
var cleanedInput = datePart
|
|
87
|
+
.trim()
|
|
88
|
+
.split(/[\s;|:.\/-]+/)
|
|
89
|
+
.filter(Boolean)
|
|
90
|
+
.map(function (word) { return word.toLowerCase(); });
|
|
91
|
+
var possibleDay = null, possibleMonth = null, possibleYear = null;
|
|
92
|
+
for (var _i = 0, cleanedInput_1 = cleanedInput; _i < cleanedInput_1.length; _i++) {
|
|
93
|
+
var word = cleanedInput_1[_i];
|
|
94
|
+
if (DAY_NAMES.includes(word) || DAY_ABBREVIATIONS.includes(word))
|
|
95
|
+
continue;
|
|
96
|
+
var num = parseInt(word, 10);
|
|
97
|
+
if (!possibleDay && num > 0 && num <= 31) {
|
|
98
|
+
possibleDay = num;
|
|
99
|
+
continue;
|
|
100
|
+
}
|
|
101
|
+
if (!possibleMonth) {
|
|
102
|
+
var monthIndex = MONTH_NAMES.indexOf(word);
|
|
103
|
+
if (monthIndex === -1)
|
|
104
|
+
monthIndex = MONTH_ABBREVIATIONS.indexOf(word);
|
|
105
|
+
if (monthIndex !== -1) {
|
|
106
|
+
possibleMonth = monthIndex + 1;
|
|
107
|
+
continue;
|
|
108
|
+
}
|
|
109
|
+
else if (num > 0 && num <= 12) {
|
|
110
|
+
possibleMonth = num;
|
|
111
|
+
continue;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
if (!possibleYear && num >= 0) {
|
|
115
|
+
possibleYear = num < 100 ? num + (num < 50 ? 2000 : 1900) : num;
|
|
116
|
+
continue;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
if (possibleDay && possibleMonth && possibleYear) {
|
|
120
|
+
return DateTime.fromObject({
|
|
121
|
+
day: possibleDay,
|
|
122
|
+
month: possibleMonth,
|
|
123
|
+
year: possibleYear,
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
return null;
|
|
127
|
+
};
|
|
128
|
+
export var parseTimeFromUserInput = function (input) {
|
|
129
|
+
var cleanedInput = input
|
|
130
|
+
.trim()
|
|
131
|
+
.replace(/\s*:\s*/g, ":")
|
|
132
|
+
.replace(/\s+(AM|PM|am|pm)\s*$/, " $1");
|
|
133
|
+
var len = cleanedInput.length;
|
|
134
|
+
if (len < 4 || len > 16)
|
|
135
|
+
return null;
|
|
136
|
+
var hour = 0, minute = 0, second = 0, millisecond = 0;
|
|
137
|
+
var meridiem = null;
|
|
138
|
+
var parts = cleanedInput.split(" ");
|
|
139
|
+
if (parts.length > 2)
|
|
140
|
+
return null;
|
|
141
|
+
if (parts.length === 2) {
|
|
142
|
+
meridiem = parts[1].toUpperCase();
|
|
143
|
+
if (meridiem !== "AM" && meridiem !== "PM")
|
|
144
|
+
return null;
|
|
145
|
+
}
|
|
146
|
+
var timeParts = parts[0].split(":");
|
|
147
|
+
if (timeParts.length < 2 || timeParts.length > 3)
|
|
148
|
+
return null;
|
|
149
|
+
hour = parseInt(timeParts[0], 10);
|
|
150
|
+
minute = parseInt(timeParts[1], 10);
|
|
151
|
+
if (isNaN(hour) || isNaN(minute))
|
|
152
|
+
return null;
|
|
153
|
+
if (timeParts.length === 3) {
|
|
154
|
+
var secondParts = timeParts[2].split("."); // Split to consider milliseconds
|
|
155
|
+
second = parseInt(secondParts[0], 10);
|
|
156
|
+
if (secondParts.length === 2) {
|
|
157
|
+
millisecond = parseInt(secondParts[1], 10);
|
|
158
|
+
}
|
|
159
|
+
if (isNaN(second) || isNaN(millisecond))
|
|
160
|
+
return null;
|
|
161
|
+
}
|
|
162
|
+
if (hour < 0 ||
|
|
163
|
+
hour > 23 ||
|
|
164
|
+
minute < 0 ||
|
|
165
|
+
minute > 59 ||
|
|
166
|
+
second < 0 ||
|
|
167
|
+
second > 59 ||
|
|
168
|
+
millisecond < 0 ||
|
|
169
|
+
millisecond > 999)
|
|
170
|
+
return null;
|
|
171
|
+
if (meridiem === "PM" && hour < 12) {
|
|
172
|
+
hour += 12;
|
|
173
|
+
}
|
|
174
|
+
else if (meridiem === "AM" && hour === 12) {
|
|
175
|
+
hour = 0;
|
|
176
|
+
}
|
|
177
|
+
var dateTime = DateTime.fromObject({ hour: hour, minute: minute, second: second, millisecond: millisecond });
|
|
178
|
+
return dateTime.isValid ? dateTime : null;
|
|
179
|
+
};
|
|
180
|
+
export var parseTimeFromDateTimeorTimeInput = function (userInput) {
|
|
181
|
+
var res1 = parseTimeFromUserInput(userInput);
|
|
182
|
+
if (res1)
|
|
183
|
+
return res1;
|
|
184
|
+
var res2 = parseDateTimeFromUserInput(userInput);
|
|
185
|
+
if (res2)
|
|
186
|
+
return res2;
|
|
187
|
+
return null;
|
|
188
|
+
};
|
|
189
|
+
export var parseDateTimeFromUserInput = function (userInput) {
|
|
190
|
+
var fromISO = DateTime.fromISO(userInput);
|
|
191
|
+
if (fromISO.isValid && userInput.includes("T"))
|
|
192
|
+
return fromISO;
|
|
193
|
+
var cleanedInput = userInput.trim().replace(/\s+/g, " ").toLowerCase();
|
|
194
|
+
var words = cleanedInput.split(" ");
|
|
195
|
+
var datePart = "";
|
|
196
|
+
var timePart = "";
|
|
197
|
+
var meridiem = "";
|
|
198
|
+
for (var _i = 0, words_1 = words; _i < words_1.length; _i++) {
|
|
199
|
+
var word = words_1[_i];
|
|
200
|
+
if (word === "am" || word === "pm") {
|
|
201
|
+
meridiem = word.toUpperCase();
|
|
202
|
+
continue;
|
|
203
|
+
}
|
|
204
|
+
if (word.includes(":")) {
|
|
205
|
+
timePart = word;
|
|
206
|
+
continue;
|
|
207
|
+
}
|
|
208
|
+
datePart = "".concat(datePart, " ").concat(word);
|
|
209
|
+
}
|
|
210
|
+
if (meridiem) {
|
|
211
|
+
timePart = "".concat(timePart, " ").concat(meridiem);
|
|
212
|
+
}
|
|
213
|
+
var dateObject = parseDateFromUserInput(datePart.trim());
|
|
214
|
+
if (!dateObject || !dateObject.isValid)
|
|
215
|
+
return null;
|
|
216
|
+
var timeObject = parseTimeFromUserInput(timePart.trim());
|
|
217
|
+
if (!timeObject || !timeObject.isValid)
|
|
218
|
+
return null;
|
|
219
|
+
if (!timeObject || !timeObject.isValid)
|
|
220
|
+
return null;
|
|
221
|
+
var combinedDateTime = DateTime.fromObject({
|
|
222
|
+
year: dateObject.year,
|
|
223
|
+
month: dateObject.month,
|
|
224
|
+
day: dateObject.day,
|
|
225
|
+
hour: timeObject.hour,
|
|
226
|
+
minute: timeObject.minute,
|
|
227
|
+
second: timeObject.second,
|
|
228
|
+
millisecond: timeObject.millisecond,
|
|
229
|
+
});
|
|
230
|
+
return combinedDateTime.isValid ? combinedDateTime : null;
|
|
231
|
+
};
|
|
@@ -1,18 +1,18 @@
|
|
|
1
|
-
import { Field, FieldTransformation } from "
|
|
1
|
+
import { Field, FieldTransformation } from "../../../../../types";
|
|
2
2
|
export type FieldTransformator = (fieldValue: any, transformation?: FieldTransformation, fieldOptions?: Field) => {
|
|
3
3
|
transformationWasNeeded: boolean;
|
|
4
4
|
original: any;
|
|
5
5
|
transformed: any;
|
|
6
6
|
};
|
|
7
|
-
export type
|
|
7
|
+
export type FieldTransformations = Partial<{
|
|
8
|
+
[key: string]: FieldTransformator;
|
|
9
|
+
}>;
|
|
10
|
+
export declare const isTransformationNeeded: (fieldValue: any, transformedValue: any) => {
|
|
8
11
|
transformationWasNeeded: boolean;
|
|
9
12
|
original: any;
|
|
10
13
|
transformed: any;
|
|
11
14
|
};
|
|
12
|
-
export type FieldTransformations = Partial<{
|
|
13
|
-
[key: string]: FieldTransformator | DateTimeTransformator;
|
|
14
|
-
}>;
|
|
15
15
|
export declare const datesDateTimesAndTimesTransformations: FieldTransformations;
|
|
16
16
|
export declare const fieldTransformations: {
|
|
17
|
-
[x: string]: FieldTransformator
|
|
17
|
+
[x: string]: FieldTransformator;
|
|
18
18
|
};
|