fuse-importer 0.24.0 → 0.24.4
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/README.md +5 -5
- package/lib/esm/Importer/ImporterWithContext.d.ts +1 -2
- package/lib/esm/Importer/ImporterWithContext.js +7 -10
- package/lib/esm/Importer/Matcher/EnumFieldsMatchers/EnumFieldMatcher/index.d.ts +0 -1
- package/lib/esm/Importer/Matcher/EnumFieldsMatchers/EnumFieldMatcher/index.js +5 -1
- package/lib/esm/Importer/Matcher/EnumFieldsMatchers/EnumFieldMatcher/tableColumns.d.ts +0 -1
- package/lib/esm/Importer/Matcher/EnumFieldsMatchers/EnumFieldMatcher/tableColumns.js +8 -8
- package/lib/esm/Importer/Matcher/EnumFieldsMatchers/EnumFieldMatcherContext.d.ts +2 -3
- package/lib/esm/Importer/Matcher/EnumFieldsMatchers/index.d.ts +0 -1
- package/lib/esm/Importer/Matcher/EnumFieldsMatchers/index.js +3 -1
- package/lib/esm/Importer/Matcher/HeaderMatcher/index.d.ts +0 -1
- package/lib/esm/Importer/Matcher/HeaderMatcher/index.js +6 -1
- package/lib/esm/Importer/Matcher/HeaderMatcher/tableColumns.d.ts +0 -1
- package/lib/esm/Importer/Matcher/HeaderMatcher/tableColumns.js +5 -7
- package/lib/esm/Importer/Matcher/common/icons/index.d.ts +0 -1
- package/lib/esm/Importer/Matcher/common/index.d.ts +2 -3
- package/lib/esm/Importer/Matcher/common/index.js +9 -2
- package/lib/esm/Importer/PreviewFirstTime.d.ts +0 -1
- package/lib/esm/Importer/PreviewFirstTime.js +9 -8
- package/lib/esm/Importer/PreviewModeBanner.d.ts +0 -1
- package/lib/esm/Importer/PreviewModeBanner.js +5 -1
- package/lib/esm/Importer/Review/AppResponseModal.d.ts +0 -1
- package/lib/esm/Importer/Review/AppResponseModal.js +1 -1
- package/lib/esm/Importer/Review/ReviewContextProvider.d.ts +3 -3
- package/lib/esm/Importer/Review/ReviewContextProvider.js +37 -4
- package/lib/esm/Importer/Review/ReviewWithContext.d.ts +0 -1
- package/lib/esm/Importer/Review/ReviewWithContext.js +18 -3
- package/lib/esm/Importer/Stepper/ConfirmCloseModal.d.ts +7 -0
- package/lib/esm/Importer/Stepper/ConfirmCloseModal.js +24 -0
- package/lib/esm/Importer/Stepper/Step.d.ts +0 -1
- package/lib/esm/Importer/Stepper/StepIndex.d.ts +0 -1
- package/lib/esm/Importer/Stepper/StepperSubmitModal.d.ts +1 -2
- package/lib/esm/Importer/Stepper/StepperSubmitModal.js +4 -2
- package/lib/esm/Importer/Stepper/UnmatchedHeadersModal.d.ts +1 -2
- package/lib/esm/Importer/Stepper/UnmatchedHeadersModal.js +9 -1
- package/lib/esm/Importer/Stepper/common/getEnumFieldValueMatchingsInitialValue.d.ts +1 -1
- package/lib/esm/Importer/Stepper/common/icons.d.ts +0 -1
- package/lib/esm/Importer/Stepper/index.d.ts +1 -2
- package/lib/esm/Importer/Stepper/index.js +13 -6
- package/lib/esm/Importer/TrialModeBanner.d.ts +0 -1
- package/lib/esm/Importer/Uploader/DragAndDropImporter/ImporterDropzone.d.ts +0 -1
- package/lib/esm/Importer/Uploader/DragAndDropImporter/ImporterDropzone.js +10 -9
- package/lib/esm/Importer/Uploader/DragAndDropImporter/backgrounds.d.ts +0 -1
- package/lib/esm/Importer/Uploader/DragAndDropImporter/index.d.ts +0 -1
- package/lib/esm/Importer/Uploader/DragAndDropImporter/index.js +9 -4
- package/lib/esm/Importer/Uploader/HeaderButtons.d.ts +0 -1
- package/lib/esm/Importer/Uploader/HeaderButtons.js +3 -1
- package/lib/esm/Importer/Uploader/HeadersPreview.d.ts +0 -1
- package/lib/esm/Importer/Uploader/HeadersPreview.js +8 -1
- package/lib/esm/Importer/Uploader/UploaderContextProvider.d.ts +2 -2
- package/lib/esm/Importer/common/AppLoading.d.ts +0 -1
- package/lib/esm/Importer/common/Footer.d.ts +0 -1
- package/lib/esm/Importer/common/ImporterFonts.d.ts +0 -1
- package/lib/esm/Importer/common/Spreadsheet/SpreadsheetContextProvider.d.ts +10 -5
- package/lib/esm/Importer/common/Spreadsheet/SpreadsheetContextProvider.js +2 -2
- package/lib/esm/Importer/common/Spreadsheet/common/index.js +1 -1
- package/lib/esm/Importer/common/Spreadsheet/components/FieldHeader.d.ts +1 -1
- package/lib/esm/Importer/common/Spreadsheet/components/SpreadsheetData.js +8 -2
- package/lib/esm/Importer/common/Spreadsheet/components/SpreadsheetRowCheckboxes.d.ts +10 -0
- package/lib/esm/Importer/common/Spreadsheet/components/SpreadsheetRowCheckboxes.js +106 -0
- package/lib/esm/Importer/common/Spreadsheet/components/SpreadsheetRowNumbers.d.ts +1 -1
- package/lib/esm/Importer/common/Spreadsheet/components/ValidationProgress.d.ts +0 -1
- package/lib/esm/Importer/common/Spreadsheet/components/fields/SpeadsheetAutocomplete.d.ts +2 -2
- package/lib/esm/Importer/common/Spreadsheet/components/fields/SpreadsheetInput.d.ts +1 -2
- package/lib/esm/Importer/common/Spreadsheet/components/fields/index.d.ts +0 -1
- package/lib/esm/Importer/common/Spreadsheet/components/fields/index.js +1 -1
- package/lib/esm/Importer/common/Spreadsheet/components/inputs/EnumInput.d.ts +1 -1
- package/lib/esm/Importer/common/Spreadsheet/hooks.d.ts +3 -3
- package/lib/esm/Importer/common/Spreadsheet/hooks.js +2 -2
- package/lib/esm/Importer/common/Spreadsheet/index.d.ts +4 -2
- package/lib/esm/Importer/common/Spreadsheet/index.js +2 -2
- package/lib/esm/Importer/common/Spreadsheet/styles.d.ts +1 -0
- package/lib/esm/Importer/common/Spreadsheet/styles.js +4 -3
- package/lib/esm/Importer/common/Spreadsheet/validation/index.d.ts +3 -3
- package/lib/esm/Importer/common/Spreadsheet/validation/index.js +2 -2
- package/lib/esm/Importer/common/Spreadsheet/validation/validators.d.ts +2 -2
- package/lib/esm/Importer/common/icons/index.d.ts +0 -1
- package/lib/esm/Importer/common/index.d.ts +2 -2
- package/lib/esm/Importer/common/theme.d.ts +2 -2
- package/lib/esm/Importer/common/theme.js +2 -1
- package/lib/esm/Importer/common/utils.d.ts +1 -1
- package/lib/esm/Importer/common/utils.js +1 -1
- package/lib/esm/Importer/contexts/ImporterContextProvider.d.ts +7 -5
- package/lib/esm/Importer/contexts/ImporterContextProvider.js +10 -2
- package/lib/esm/Importer/data/index.d.ts +1 -1
- package/lib/esm/Importer/index.d.ts +1 -2
- package/lib/esm/api/index.d.ts +1 -1
- package/lib/esm/api/responseHandlers.d.ts +1 -1
- package/lib/esm/common/Modal.d.ts +1 -1
- package/lib/esm/common/Spinner.d.ts +0 -1
- package/lib/esm/common/Table/Pagination/icons.d.ts +1 -2
- package/lib/esm/common/Table/Pagination/index.d.ts +0 -1
- package/lib/esm/common/Table/TableDataProvider.d.ts +2 -2
- package/lib/esm/common/Table/TableDataProvider.js +1 -1
- package/lib/esm/common/Table/TableView/TableHeaders.d.ts +3 -3
- package/lib/esm/common/Table/TableView/TableHeaders.js +3 -1
- package/lib/esm/common/Table/TableView/TableRow.d.ts +2 -2
- package/lib/esm/common/Table/TableView/index.d.ts +4 -4
- package/lib/esm/common/Table/icons.d.ts +0 -1
- package/lib/esm/common/Table/index.d.ts +1 -2
- package/lib/esm/common/Toast.d.ts +0 -1
- package/lib/esm/common/TooltipProvider.d.ts +3 -2
- package/lib/esm/common/TooltipProvider.js +9 -5
- package/lib/esm/common/buttons.d.ts +20 -3
- package/lib/esm/common/buttons.js +25 -8
- package/lib/esm/common/icons/index.d.ts +0 -1
- package/lib/esm/common/index.d.ts +2 -3
- package/lib/esm/common/inputs/Autocomplete.d.ts +4 -4
- package/lib/esm/common/inputs/Autocomplete.js +5 -3
- package/lib/esm/common/inputs/Checkbox.d.ts +9 -0
- package/lib/esm/common/inputs/Checkbox.js +50 -0
- package/lib/esm/common/inputs/SelectMenu.d.ts +1 -2
- package/lib/esm/common/inputs/TextInput.d.ts +2 -2
- package/lib/esm/common/inputs/index.d.ts +1 -0
- package/lib/esm/common/inputs/index.js +1 -0
- package/lib/esm/common/inputs/tooltip.d.ts +0 -1
- package/lib/esm/common/logo.d.ts +0 -1
- package/lib/esm/index.d.ts +2 -1
- package/lib/esm/index.js +86 -15
- package/lib/esm/locales/de.d.ts +94 -0
- package/lib/esm/locales/de.js +94 -0
- package/lib/esm/locales/en.d.ts +94 -0
- package/lib/esm/locales/en.js +94 -0
- package/lib/esm/locales/es.d.ts +94 -0
- package/lib/esm/locales/es.js +94 -0
- package/lib/esm/locales/fr.d.ts +94 -0
- package/lib/esm/locales/fr.js +94 -0
- package/lib/esm/locales/index.d.ts +4 -0
- package/lib/esm/locales/index.js +4 -0
- package/lib/esm/styled/theme/index.d.ts +1 -1
- package/lib/esm/styled/utils.d.ts +9 -9
- package/lib/esm/types.d.ts +24 -22
- package/lib/main.js +171 -1
- package/lib/main.js.LICENSE.txt +1 -3
- package/package.json +12 -4
|
@@ -0,0 +1,24 @@
|
|
|
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 } from "../../common";
|
|
15
|
+
import { errorIcon } from "./common/icons";
|
|
16
|
+
import { useTranslation } from "react-i18next";
|
|
17
|
+
export var ConfirmCloseModal = function (_a) {
|
|
18
|
+
var isOpen = _a.isOpen, onClose = _a.onClose, onCloseImporter = _a.onCloseImporter;
|
|
19
|
+
var t = useTranslation("general").t;
|
|
20
|
+
return (_jsx(Modal, __assign({ isOpen: isOpen, onClose: onClose }, { children: _jsxs(Div, __assign({ centered: true, flexColumn: true, p: 60 }, { children: [_jsx(Div, __assign({ textAlignCenter: true, mb: 10, mt: 5 }, { children: errorIcon })), _jsx(Div, __assign({ h5: true, mt: 10 }, { children: t("confirm_close_modal.title") })), _jsx(Div, __assign({ body1: true, mt: 12, w: 448, textAlignCenter: true }, { children: t("confirm_close_modal.description") })), _jsxs(Div, __assign({ dflex: true, mt: 40, w100: true, centered: true }, { children: [_jsx(Button, __assign({ w: 115, variant: "secondary", mr: 10, onClick: onClose, "data-test-id": "confirm-close-modal-cancel" }, { children: t("confirm_close_modal.cancel") })), _jsx(Button, __assign({ w: 140, ml: 10, onClick: function () {
|
|
21
|
+
onCloseImporter();
|
|
22
|
+
onClose();
|
|
23
|
+
} }, { children: t("confirm_close_modal.close") }))] }))] })) })));
|
|
24
|
+
};
|
|
@@ -13,10 +13,12 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
13
13
|
import { Div } from "../../styled";
|
|
14
14
|
import { Button, Modal } from "../../common";
|
|
15
15
|
import { submitIcon } from "./common/icons";
|
|
16
|
+
import { useTranslation } from "react-i18next";
|
|
16
17
|
export var StepperSubmitModal = function (_a) {
|
|
17
18
|
var isSubmitModalOpen = _a.isSubmitModalOpen, onCloseModal = _a.onCloseModal, onSubmit = _a.onSubmit;
|
|
18
|
-
|
|
19
|
+
var t = useTranslation("general").t;
|
|
20
|
+
return (_jsx(Modal, __assign({ isOpen: isSubmitModalOpen, onClose: function () { return onCloseModal(); } }, { children: _jsxs(Div, __assign({ centered: true, flexColumn: true, p: 60 }, { children: [_jsx(Div, { children: submitIcon }), _jsx(Div, __assign({ h5: true, mt: 20 }, { children: t("submit_modal.title") })), _jsx(Div, __assign({ body1: true, mt: 12, w: 448, textAlignCenter: true }, { children: t("submit_modal.description") })), _jsxs(Div, __assign({ dflex: true, mt: 40, w100: true, centered: true }, { children: [_jsx(Button, __assign({ w: 115, variant: "secondary", mr: 10, onClick: function () { return onCloseModal(); }, "data-test-id": "submit-modal-go-back" }, { children: t("submit_modal.cancel") })), _jsx(Button, __assign({ w: 140, ml: 10, onClick: function () {
|
|
19
21
|
onSubmit();
|
|
20
22
|
onCloseModal();
|
|
21
|
-
} }, { children: "
|
|
23
|
+
} }, { children: t("submit_modal.submit") }))] }))] })) })));
|
|
22
24
|
};
|
|
@@ -13,11 +13,19 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
13
13
|
import { Div } from "../../styled";
|
|
14
14
|
import { Button, Modal } from "../../common";
|
|
15
15
|
import { errorIcon } from "./common/icons";
|
|
16
|
+
import { useTranslation } from "react-i18next";
|
|
16
17
|
export var UnmatchedHeadersModal = function (_a) {
|
|
17
18
|
var isUnmatchedHeadersModalOpen = _a.isUnmatchedHeadersModalOpen, unmatchedHeadersCount = _a.unmatchedHeadersCount, onSetStep = _a.onSetStep, onCloseUnmatchedHeadersModal = _a.onCloseUnmatchedHeadersModal;
|
|
18
19
|
var skipStep = function () {
|
|
19
20
|
onSetStep();
|
|
20
21
|
onCloseUnmatchedHeadersModal();
|
|
21
22
|
};
|
|
22
|
-
|
|
23
|
+
var t = useTranslation("general").t;
|
|
24
|
+
return (_jsx(Modal, __assign({ isOpen: isUnmatchedHeadersModalOpen, onClose: function () { return onCloseUnmatchedHeadersModal(); } }, { children: _jsxs(Div, __assign({ p: "17px 20px" }, { children: [_jsx(Div, __assign({ textAlignCenter: true, mb: 24, mt: 5 }, { children: errorIcon })), _jsx(Div, __assign({ textAlignCenter: true, h5: true }, { children: t("unmatched_headers_modal.title") })), _jsx(Div, __assign({ w: 448, mt: 12, textAlignCenter: true, body1: true }, { children: unmatchedHeadersCount === 1
|
|
25
|
+
? t("unmatched_headers_modal.description_singular", {
|
|
26
|
+
count: unmatchedHeadersCount,
|
|
27
|
+
})
|
|
28
|
+
: t("unmatched_headers_modal.description_plural", {
|
|
29
|
+
count: unmatchedHeadersCount,
|
|
30
|
+
}) })), _jsxs(Div, __assign({ dflex: true, centered: true, mt: 40 }, { children: [_jsx(Button, __assign({ variant: "secondary", onClick: function () { return onCloseUnmatchedHeadersModal(); }, w: 160, mr: 16 }, { children: t("unmatched_headers_modal.assign_headers") })), _jsx(Button, __assign({ variant: "primary", onClick: skipStep }, { children: t("unmatched_headers_modal.skip") }))] }))] })) })));
|
|
23
31
|
};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { TemplateHeader } from "../../../types";
|
|
2
2
|
import { EnumFieldValueMatchings, UploadedDataEnumFieldValues } from "../../contexts/ImporterContextProvider";
|
|
3
|
-
|
|
3
|
+
type GetEnumFieldValueMatchingsInitialValueArgs = {
|
|
4
4
|
uploadedDataEnumFieldValues: UploadedDataEnumFieldValues;
|
|
5
5
|
templateHeaders: TemplateHeader[];
|
|
6
6
|
};
|
|
@@ -26,15 +26,19 @@ import { getEnumFieldValueMatchingsInitialValue } from "./common/getEnumFieldVal
|
|
|
26
26
|
import { Step } from "./Step";
|
|
27
27
|
import { StepperSubmitModal } from "./StepperSubmitModal";
|
|
28
28
|
import { UnmatchedHeadersModal } from "./UnmatchedHeadersModal";
|
|
29
|
+
import { ConfirmCloseModal } from "./ConfirmCloseModal";
|
|
30
|
+
import { useTranslation } from "react-i18next";
|
|
29
31
|
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; });
|
|
30
32
|
var Logo = styled.img(templateObject_2 || (templateObject_2 = __makeTemplateObject(["\n max-height: 70px;\n max-width: 300px;\n position: absolute;\n left: 41px;\n"], ["\n max-height: 70px;\n max-width: 300px;\n position: absolute;\n left: 41px;\n"])));
|
|
31
33
|
var CloseIcon = styled(Div)(function () { return css(templateObject_3 || (templateObject_3 = __makeTemplateObject(["\n position: absolute;\n right: 41px;\n "], ["\n position: absolute;\n right: 41px;\n "]))); });
|
|
32
34
|
export var Stepper = function (_a) {
|
|
33
35
|
var stepLabels = _a.stepLabels, logoURL = _a.logoURL;
|
|
34
36
|
var _b = useState(false), isUnmatchedHeadersModalOpen = _b[0], setIsUnmatchedHeadersModalOpen = _b[1];
|
|
37
|
+
var t = useTranslation("general").t;
|
|
35
38
|
var _c = useState(false), isSubmitModalOpen = _c[0], setIsSubmitModalOpen = _c[1];
|
|
36
|
-
var _d =
|
|
37
|
-
var _e =
|
|
39
|
+
var _d = useState(false), isConfirmCloseModalOpen = _d[0], setIsConfirmCloseModalOpen = _d[1];
|
|
40
|
+
var _e = useReviewContext(), appResponse = _e.appResponse, isSubmitDisabled = _e.isSubmitDisabled, onSubmit = _e.onSubmit;
|
|
41
|
+
var _f = useImporterContext(), currentStepIndex = _f.currentStepIndex, templateHeaderMatchings = _f.templateHeaderMatchings, matcherSubstep = _f.matcherSubstep, templateHeaders = _f.templateHeaders, uploadedDataEnumFieldValues = _f.uploadedDataEnumFieldValues, setEnumFieldValueMatchings = _f.setEnumFieldValueMatchings, setMatcherSubstep = _f.setMatcherSubstep, setCurrentStepIndex = _f.setCurrentStepIndex, onClose = _f.onClose;
|
|
38
42
|
var templateHeaderLabels = Object.keys(templateHeaderMatchings || []);
|
|
39
43
|
var unmatchedHeadersCount = templateHeaderLabels.filter(function (templateHeaderLabel) { return !templateHeaderMatchings[templateHeaderLabel]; }).length;
|
|
40
44
|
var isLastSubMatchStep = matcherSubstep === 1;
|
|
@@ -88,10 +92,13 @@ export var Stepper = function (_a) {
|
|
|
88
92
|
var isCompleted = index < currentStepIndex;
|
|
89
93
|
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));
|
|
90
94
|
}) })));
|
|
91
|
-
var leftButtonUI = (_jsx(Div,
|
|
92
|
-
var rightButtonUI = (_jsxs(Div, __assign({ w: 100 }, { children: [isMatchStep && (_jsx(Button, __assign({ variant: "primary", onClick: continueToNextStep }, { children: "
|
|
93
|
-
|
|
95
|
+
var leftButtonUI = (_jsx(Div, { children: currentStepIndex > 0 && !appResponse && (_jsx(Button, __assign({ variant: "secondary", onClick: goBack }, { children: t("stepper.go_back") }))) }));
|
|
96
|
+
var rightButtonUI = (_jsxs(Div, __assign({ w: 100 }, { children: [isMatchStep && (_jsx(Button, __assign({ variant: "primary", onClick: continueToNextStep }, { children: t("stepper.continue") }))), isReviewStep && (_jsx(Button, __assign({ variant: "primary", isDisabled: isSubmitDisabled, onClick: function () { return setIsSubmitModalOpen(true); } }, { children: t("stepper.submit") })))] })));
|
|
97
|
+
var handleOnClose = function () {
|
|
98
|
+
setIsConfirmCloseModalOpen(true);
|
|
99
|
+
};
|
|
100
|
+
return (_jsxs(_Fragment, { children: [_jsxs(StepperWrapper, __assign({ pRelative: true, alignCenter: true, w100: true, h: 96, centered: true }, { children: [logoURL && _jsx(Logo, { src: logoURL, alt: "" }), _jsxs(Div, __assign({ spaceBetween: true, w: contentWidth }, { children: [leftButtonUI, _jsx(Div, __assign({ alignCenter: true }, { children: stepsUI })), rightButtonUI] })), _jsx(CloseIcon, __assign({ "data-test-id": "close-importer", centered: true, clickable: true, onClick: handleOnClose }, { children: closeIconCondensed }))] })), _jsx(UnmatchedHeadersModal, { isUnmatchedHeadersModalOpen: isUnmatchedHeadersModalOpen, unmatchedHeadersCount: unmatchedHeadersCount, onSetStep: function () { return setStep(); }, onCloseUnmatchedHeadersModal: function () {
|
|
94
101
|
return setIsUnmatchedHeadersModalOpen(false);
|
|
95
|
-
} }), _jsx(StepperSubmitModal, { isSubmitModalOpen: isSubmitModalOpen, onCloseModal: function () { return setIsSubmitModalOpen(false); }, onSubmit: onSubmit })] }));
|
|
102
|
+
} }), _jsx(StepperSubmitModal, { isSubmitModalOpen: isSubmitModalOpen, onCloseModal: function () { return setIsSubmitModalOpen(false); }, onSubmit: onSubmit }), _jsx(ConfirmCloseModal, { isOpen: isConfirmCloseModalOpen, onClose: function () { return setIsConfirmCloseModalOpen(false); }, onCloseImporter: onClose })] }));
|
|
96
103
|
};
|
|
97
104
|
var templateObject_1, templateObject_2, templateObject_3;
|
|
@@ -16,7 +16,7 @@ var __assign = (this && this.__assign) || function () {
|
|
|
16
16
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
17
17
|
import { useDropzone } from "react-dropzone";
|
|
18
18
|
import styled, { css } from "styled-components";
|
|
19
|
-
import XLSX from "xlsx";
|
|
19
|
+
import * as XLSX from "xlsx";
|
|
20
20
|
import { useUploaderContext } from "../UploaderContextProvider";
|
|
21
21
|
import { useImporterContext } from "../../contexts/ImporterContextProvider";
|
|
22
22
|
import { Div } from "../../../styled/utils";
|
|
@@ -24,19 +24,19 @@ import { theme } from "../../../styled/theme";
|
|
|
24
24
|
import { addToast } from "../../../common/Toast";
|
|
25
25
|
import { Button } from "../../../common/buttons";
|
|
26
26
|
import { DragAndDropSvg, UploadIndicatorSvg } from "./backgrounds";
|
|
27
|
+
import { useTranslation } from "react-i18next";
|
|
27
28
|
var DragAndDropCard = styled(Div)(templateObject_2 || (templateObject_2 = __makeTemplateObject(["\n border-radius: 8px;\n margin-right: ", ";\n width: 832px;\n height: 530px;\n display: flex;\n background: ", ";\n border: 1px dashed ", ";\n ", "\n"], ["\n border-radius: 8px;\n margin-right: ", ";\n width: 832px;\n height: 530px;\n display: flex;\n background: ", ";\n border: 1px dashed ", ";\n ", "\n"])), function (props) { return (props.isDragActive ? "-10px" : "revert"); }, theme.colors.white, theme.colors.red50, function (props) {
|
|
28
29
|
return props.isDragActive && css(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n background: ", ";\n border: 1px solid ", ";\n justify-content: center;\n "], ["\n background: ", ";\n border: 1px solid ", ";\n justify-content: center;\n "])), function (p) { return p.theme.colors.blue100; }, function (p) { return p.theme.colors.blue500; });
|
|
29
30
|
});
|
|
30
|
-
var UploadingBg = styled(Div)(templateObject_3 || (templateObject_3 = __makeTemplateObject(["\n background-image: url(", ");\n background-position: 100% 100%;\n background-size: cover;\n max-width: 40px;\n min-width: 40px;\n max-height: 40px;\n min-height: 40px;\n height: 2.9vw;\n width: 2.9vw;\n position: relative;\n"], ["\n background-image: url(", ");\n background-position: 100% 100%;\n background-size: cover;\n max-width: 40px;\n min-width: 40px;\n max-height: 40px;\n min-height: 40px;\n height: 2.9vw;\n width: 2.9vw;\n position: relative;\n"])), function (props) { return props.src; });
|
|
31
|
-
var DragAndDropBg = styled(Div)(templateObject_4 || (templateObject_4 = __makeTemplateObject(["\n background-image: url(", ");\n background-position: 100% 100%;\n background-size: cover;\n max-width: 118px;\n min-width: 118px;\n max-height: 68px;\n min-height: 68px;\n height: 5vw;\n width: 8.2vw;\n position: relative;\n"], ["\n background-image: url(", ");\n background-position: 100% 100%;\n background-size: cover;\n max-width: 118px;\n min-width: 118px;\n max-height: 68px;\n min-height: 68px;\n height: 5vw;\n width: 8.2vw;\n position: relative;\n"])), function (props) { return props.src; });
|
|
32
31
|
var DropzoneUploadingContainer = styled(Div)(function (_a) {
|
|
33
32
|
var _b = _a.theme, colors = _b.colors, c = _b.css;
|
|
34
|
-
return css(
|
|
33
|
+
return css(templateObject_3 || (templateObject_3 = __makeTemplateObject(["\n position: absolute;\n height: 100%;\n width: 100%;\n background: ", ";\n border: 1px solid ", ";\n "], ["\n position: absolute;\n height: 100%;\n width: 100%;\n background: ", ";\n border: 1px solid ", ";\n "])), theme.colors.blue100, theme.colors.blue500);
|
|
35
34
|
});
|
|
36
35
|
var dropzoneUploadingUI = (_jsx(DropzoneUploadingContainer, __assign({ centered: true }, { children: _jsxs(Div, { children: [_jsx(Div, __assign({ centered: true, mb: 12 }, { children: UploadIndicatorSvg })), _jsx(Div, __assign({ h5: true }, { children: " Drop your file here to upload!" }))] }) })));
|
|
37
36
|
var DragAndDropComponent = function (_a) {
|
|
38
37
|
var openUploadFileDialog = _a.openUploadFileDialog;
|
|
39
|
-
|
|
38
|
+
var t = useTranslation("upload").t;
|
|
39
|
+
return (_jsxs(Div, __assign({ centered: true, flexColumn: true }, { children: [_jsx(Div, __assign({ mb: 12 }, { children: DragAndDropSvg })), _jsx(Div, __assign({ h4: true }, { children: t("dropzone.title") })), _jsx(Div, __assign({ body1: true, textAlignCenter: true, m: 20 }, { children: t("dropzone.description") })), _jsx(Button, __assign({ variant: "secondary", w: "fit-content", p: 12, isSmall: true, onClick: openUploadFileDialog }, { children: t("dropzone.button") }))] })));
|
|
40
40
|
};
|
|
41
41
|
var ImporterDropzone = function () {
|
|
42
42
|
var _a = useUploaderContext(), setIsUploading = _a.setIsUploading, setFileName = _a.setFileName;
|
|
@@ -63,11 +63,12 @@ var ImporterDropzone = function () {
|
|
|
63
63
|
var getDataFromFile = function (fileResults) {
|
|
64
64
|
var workBook = XLSX.read(fileResults, {
|
|
65
65
|
type: "array",
|
|
66
|
+
codepage: 65001,
|
|
66
67
|
raw: true,
|
|
67
68
|
});
|
|
68
69
|
var workBookName = workBook.SheetNames[0];
|
|
69
70
|
var sheet = workBook.Sheets[workBookName];
|
|
70
|
-
return XLSX.utils.sheet_to_json(sheet, { header: 1 });
|
|
71
|
+
return XLSX.utils.sheet_to_json(sheet, { header: 1, raw: false });
|
|
71
72
|
};
|
|
72
73
|
var fileData = getDataFromFile(results);
|
|
73
74
|
var headersCount = fileData[0].length;
|
|
@@ -98,11 +99,11 @@ var ImporterDropzone = function () {
|
|
|
98
99
|
onDropRejected: onDropRejected,
|
|
99
100
|
noClick: true,
|
|
100
101
|
noKeyboard: true,
|
|
101
|
-
accept: ".csv
|
|
102
|
+
accept: ".csv, .tsv, .xls, .xlsx",
|
|
102
103
|
maxFiles: 1,
|
|
103
104
|
maxSize: 10000000,
|
|
104
105
|
}), getRootProps = _b.getRootProps, getInputProps = _b.getInputProps, open = _b.open, isDragActive = _b.isDragActive;
|
|
105
|
-
return (_jsxs(DragAndDropCard, __assign({ centered: true, pRelative: true }, getRootProps(), { children: [_jsx("input", __assign({}, getInputProps())), isDragActive && dropzoneUploadingUI, _jsx(DragAndDropComponent, { openUploadFileDialog: open })] })));
|
|
106
|
+
return (_jsxs(DragAndDropCard, __assign({ isDragActive: isDragActive, centered: true, pRelative: true }, getRootProps(), { children: [_jsx("input", __assign({}, getInputProps())), isDragActive && dropzoneUploadingUI, _jsx(DragAndDropComponent, { openUploadFileDialog: open })] })));
|
|
106
107
|
};
|
|
107
108
|
export { ImporterDropzone };
|
|
108
|
-
var templateObject_1, templateObject_2, templateObject_3
|
|
109
|
+
var templateObject_1, templateObject_2, templateObject_3;
|
|
@@ -33,11 +33,13 @@ import { closeIconWithCircle, errorIcon, fileExtensionIcon, } from "../../common
|
|
|
33
33
|
import { useImporterContext } from "../../contexts/ImporterContextProvider";
|
|
34
34
|
import { useUploaderContext } from "../UploaderContextProvider";
|
|
35
35
|
import { ImporterDropzone } from "./ImporterDropzone";
|
|
36
|
+
import { useTranslation } from "react-i18next";
|
|
36
37
|
var HeaderCardWrapper = styled(Div)(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n border: 1px solid ", ";\n border-radius: 8px;\n padding: 24px;\n box-sizing: border-box;\n width: 256px;\n overflow-y: auto;\n ", ";\n background: ", ";\n max-height: 530px;\n"], ["\n border: 1px solid ", ";\n border-radius: 8px;\n padding: 24px;\n box-sizing: border-box;\n width: 256px;\n overflow-y: auto;\n ", ";\n background: ", ";\n max-height: 530px;\n"])), theme.colors.gray200, function (p) { return p.theme.css.scrollbarDark; }, function (p) { return p.theme.colors.white; });
|
|
37
38
|
var ErrorCardContainer = styled(Div)(templateObject_2 || (templateObject_2 = __makeTemplateObject(["\n border-radius: 8px;\n width: 1120px;\n height: 550px;\n display: flex;\n flex-direction: column;\n align-items: center;\n background: ", ";\n border: 1px dashed ", ";\n justify-content: center;\n"], ["\n border-radius: 8px;\n width: 1120px;\n height: 550px;\n display: flex;\n flex-direction: column;\n align-items: center;\n background: ", ";\n border: 1px dashed ", ";\n justify-content: center;\n"])), theme.colors.blue100, theme.colors.blue500);
|
|
38
39
|
export var ErrorCard = function () {
|
|
39
40
|
var templateError = useImporterContext().templateError;
|
|
40
|
-
|
|
41
|
+
var t = useTranslation("upload").t;
|
|
42
|
+
return (_jsxs(ErrorCardContainer, { children: [_jsx(Div, __assign({ mb: 28 }, { children: errorIcon })), _jsx(Div, __assign({ h3: true, mb: 16 }, { children: t("error.title") })), _jsx(Div, __assign({ body1: true }, { children: templateError }))] }));
|
|
41
43
|
};
|
|
42
44
|
var HeaderListItem = styled(Div)(templateObject_3 || (templateObject_3 = __makeTemplateObject(["\n margin-bottom: ", "px;\n"], ["\n margin-bottom: ", "px;\n"])), function (p) { return (p.isLast ? 0 : 8); });
|
|
43
45
|
var HeadersList = function (_a) {
|
|
@@ -55,15 +57,17 @@ var HeaderCard = function (_a) {
|
|
|
55
57
|
var optionalHeaders = templateHeaders
|
|
56
58
|
.filter(function (h) { return !h.required; })
|
|
57
59
|
.map(function (h) { return h.label; });
|
|
58
|
-
|
|
60
|
+
var t = useTranslation("upload").t;
|
|
61
|
+
return (_jsx(Div, { children: _jsxs(HeaderCardWrapper, __assign({}, props, { children: [_jsx(Div, __assign({ body3: true, mb: 24 }, { children: t("header.title") })), requiredHeaders.length > 0 && (_jsx(HeadersList, { title: t("header.required_headers"), headers: requiredHeaders })), optionalHeaders.length > 0 && (_jsx(HeadersList, { title: t("header.optional_headers"), headers: optionalHeaders, mt: 30 }))] })) }));
|
|
59
62
|
};
|
|
60
63
|
var LoadingCardWrapper = styled(Div)(templateObject_4 || (templateObject_4 = __makeTemplateObject(["\n box-shadow: 0px 0px 12px rgba(33, 75, 167, 0.24);\n border-radius: 8px;\n max-width: 544px;\n height: 102px;\n padding-left: 30px;\n padding-right: 30px;\n background: ", ";\n"], ["\n box-shadow: 0px 0px 12px rgba(33, 75, 167, 0.24);\n border-radius: 8px;\n max-width: 544px;\n height: 102px;\n padding-left: 30px;\n padding-right: 30px;\n background: ", ";\n"])), function (p) { return p.theme.colors.white; });
|
|
61
64
|
var LoadingCard = function () {
|
|
62
65
|
var fileName = useUploaderContext().fileName;
|
|
63
66
|
var resetImport = useImporterContext().resetImport;
|
|
67
|
+
var t = useTranslation("upload").t;
|
|
64
68
|
var fileExtension = fileName && fileName.slice(fileName.lastIndexOf("."));
|
|
65
69
|
var fileExtensionUI = (_jsxs(Div, { children: [fileExtensionIcon, _jsx(Div, __assign({ c: colors.gray900, helperText: true, mt: -26, ml: 7 }, { children: fileExtension }))] }));
|
|
66
|
-
return (_jsxs(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: "
|
|
70
|
+
return (_jsxs(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 }))] })));
|
|
67
71
|
};
|
|
68
72
|
var ImporterSection = function () {
|
|
69
73
|
var _a = useImporterContext(), templateHeaders = _a.templateHeaders, templateError = _a.templateError;
|
|
@@ -71,7 +75,8 @@ var ImporterSection = function () {
|
|
|
71
75
|
};
|
|
72
76
|
var DragAndDropImporter = function () {
|
|
73
77
|
var isUploading = useUploaderContext().isUploading;
|
|
74
|
-
var
|
|
78
|
+
var t = useTranslation("upload").t;
|
|
79
|
+
var headerUI = (_jsxs(_Fragment, { children: [_jsx(Div, __assign({ textAlignCenter: true, dflex: true, centered: true }, { children: _jsx(Div, __assign({ h2: true, mb: 16, mt: 64 }, { children: t("title") })) })), _jsx(Div, __assign({ body1: true, mb: 24, textAlignCenter: true }, { children: t("description") }))] }));
|
|
75
80
|
return (_jsxs(Div, __assign({ flexColumn: true, centered: true }, { children: [headerUI, isUploading ? (_jsx(Div, __assign({ mt: 40 }, { children: _jsx(LoadingCard, {}) }))) : (_jsx(ImporterSection, {}))] })));
|
|
76
81
|
};
|
|
77
82
|
export { DragAndDropImporter };
|
|
@@ -18,12 +18,14 @@ import styled from "styled-components";
|
|
|
18
18
|
import { Button } from "../../common/buttons";
|
|
19
19
|
import { Div } from "../../styled/utils";
|
|
20
20
|
import { useImporterContext } from "../contexts/ImporterContextProvider";
|
|
21
|
+
import { useTranslation } from "react-i18next";
|
|
21
22
|
var HeaderButtonsWrapper = styled(Div)(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n > div {\n margin-left: 8px;\n margin-right: 8px;\n }\n"], ["\n > div {\n margin-left: 8px;\n margin-right: 8px;\n }\n"])));
|
|
22
23
|
export var HeaderButtons = function () {
|
|
24
|
+
var t = useTranslation("upload").t;
|
|
23
25
|
var _a = useImporterContext(), setCurrentStepIndex = _a.setCurrentStepIndex, resetImport = _a.resetImport;
|
|
24
26
|
var onClick = function () {
|
|
25
27
|
setCurrentStepIndex(1);
|
|
26
28
|
};
|
|
27
|
-
return (_jsxs(HeaderButtonsWrapper, __assign({ dflex: true, spaceBetween: true, mb: 12 }, { children: [_jsx(Button, __assign({
|
|
29
|
+
return (_jsxs(HeaderButtonsWrapper, __assign({ dflex: true, spaceBetween: true, mb: 12 }, { children: [_jsx(Button, __assign({ isSmall: true, variant: "secondary", onClick: resetImport }, { children: t("headers_preview.cancel") })), _jsx(Button, __assign({ isSmall: true, onClick: onClick }, { children: t("headers_preview.continue") }))] })));
|
|
28
30
|
};
|
|
29
31
|
var templateObject_1;
|
|
@@ -15,8 +15,15 @@ import Spreadsheet from "../common/Spreadsheet";
|
|
|
15
15
|
import { getSpreadsheetRowWidth } from "../common/utils";
|
|
16
16
|
import { useReviewContext } from "../Review/ReviewContextProvider";
|
|
17
17
|
import { HeaderButtons } from "./HeaderButtons";
|
|
18
|
+
import { useImporterContext } from "../contexts/ImporterContextProvider";
|
|
19
|
+
import { useTranslation } from "react-i18next";
|
|
18
20
|
var HeadersPreview = function () {
|
|
19
21
|
var _a = useReviewContext(), fields = _a.previewFields, initialDataSet = _a.previewInitialDataSet;
|
|
20
|
-
|
|
22
|
+
var t = useTranslation("upload").t;
|
|
23
|
+
var _b = useImporterContext(), selectedRows = _b.selectedRows, setSelectedRows = _b.setSelectedRows;
|
|
24
|
+
return (_jsxs(Div, __assign({ flexColumn: true, centered: true, pt: 40 }, { children: [_jsx(Div, __assign({ h2: true, mb: 16 }, { children: t("headers_preview.title") })), _jsx(Div, __assign({ body1: true, mb: 24, textAlignCenter: true }, { children: t("headers_preview.description") })), _jsx(HeaderButtons, {}), _jsx(Div, __assign({ w100: true, centered: true, mb: 36 }, { children: initialDataSet && (_jsx(Spreadsheet, { rowWidth: getSpreadsheetRowWidth(fields, 6), isReadOnly: true, initialDataSet: initialDataSet, fields: fields, highlightFirstRow: true, options: {
|
|
25
|
+
showCheckboxColumn: true,
|
|
26
|
+
firstRowIsHeader: true,
|
|
27
|
+
}, selectedRows: selectedRows, setSelectedRows: setSelectedRows })) }))] })));
|
|
21
28
|
};
|
|
22
29
|
export default HeadersPreview;
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import React from "react";
|
|
2
|
-
|
|
2
|
+
type State = {
|
|
3
3
|
isUploading: boolean;
|
|
4
4
|
setIsUploading: React.Dispatch<boolean>;
|
|
5
5
|
fileName: string;
|
|
6
6
|
setFileName: React.Dispatch<string>;
|
|
7
7
|
};
|
|
8
|
-
|
|
8
|
+
type UploaderContextProviderProps = {
|
|
9
9
|
children: JSX.Element;
|
|
10
10
|
};
|
|
11
11
|
export declare const UploaderContextProvider: ({ children, }: UploaderContextProviderProps) => JSX.Element;
|
|
@@ -2,21 +2,24 @@ import React from "react";
|
|
|
2
2
|
import { SpreadsheetOptions } from "../../..";
|
|
3
3
|
import { Field, OnValidateRecord, Record, RecordDataSet } from "../../../types";
|
|
4
4
|
import { ValidationState } from "./hooks";
|
|
5
|
-
export
|
|
6
|
-
export
|
|
7
|
-
|
|
5
|
+
export type OnDataSetChanged = (dataSet: RecordDataSet) => void;
|
|
6
|
+
export type OnValidationStateChanged = (state: ValidationState) => void;
|
|
7
|
+
type State = {
|
|
8
8
|
rowWidth?: number;
|
|
9
9
|
data: Record[];
|
|
10
10
|
fields: Field[];
|
|
11
11
|
isLoading: boolean;
|
|
12
12
|
isReadOnly?: boolean;
|
|
13
13
|
highlightFirstRow: boolean;
|
|
14
|
+
options: SpreadsheetOptions;
|
|
14
15
|
sortByFieldErrors: string;
|
|
15
16
|
updateRecord: (record: Record) => void;
|
|
16
17
|
setIsLoading: React.Dispatch<React.SetStateAction<boolean>>;
|
|
17
18
|
setSortByFieldErrors: React.Dispatch<React.SetStateAction<string>>;
|
|
19
|
+
selectedRows: number[];
|
|
20
|
+
setSelectedRows: React.Dispatch<React.SetStateAction<number[]>>;
|
|
18
21
|
} & ValidationState;
|
|
19
|
-
|
|
22
|
+
type Props = {
|
|
20
23
|
initialDataSet: RecordDataSet;
|
|
21
24
|
rowWidth?: number;
|
|
22
25
|
isReadOnly?: boolean;
|
|
@@ -27,7 +30,9 @@ declare type Props = {
|
|
|
27
30
|
onValidationStateChanged?: OnValidationStateChanged;
|
|
28
31
|
onValidateRecord?: OnValidateRecord;
|
|
29
32
|
onDataSetChanged?: OnDataSetChanged;
|
|
33
|
+
selectedRows: number[];
|
|
34
|
+
setSelectedRows: React.Dispatch<React.SetStateAction<number[]>>;
|
|
30
35
|
};
|
|
31
|
-
export declare const SpreadsheetContextProvider: ({ initialDataSet, rowWidth, fields, options, isReadOnly, highlightFirstRow, children, onValidateRecord, onDataSetChanged, onValidationStateChanged, }: Props) => JSX.Element;
|
|
36
|
+
export declare const SpreadsheetContextProvider: ({ initialDataSet, rowWidth, fields, options, isReadOnly, highlightFirstRow, children, onValidateRecord, onDataSetChanged, onValidationStateChanged, selectedRows, setSelectedRows, }: Props) => JSX.Element;
|
|
32
37
|
export declare const useSpreadsheetContext: () => State;
|
|
33
38
|
export {};
|
|
@@ -26,7 +26,7 @@ import { createContext, useCallback, useContext, useEffect, useMemo, useRef, use
|
|
|
26
26
|
import { useValidationState } from "./hooks";
|
|
27
27
|
var SpreadsheetContext = createContext({});
|
|
28
28
|
export var SpreadsheetContextProvider = function (_a) {
|
|
29
|
-
var initialDataSet = _a.initialDataSet, _b = _a.rowWidth, rowWidth = _b === void 0 ? 1 : _b, fields = _a.fields, options = _a.options, isReadOnly = _a.isReadOnly, highlightFirstRow = _a.highlightFirstRow, children = _a.children, onValidateRecord = _a.onValidateRecord, onDataSetChanged = _a.onDataSetChanged, onValidationStateChanged = _a.onValidationStateChanged;
|
|
29
|
+
var initialDataSet = _a.initialDataSet, _b = _a.rowWidth, rowWidth = _b === void 0 ? 1 : _b, fields = _a.fields, options = _a.options, isReadOnly = _a.isReadOnly, highlightFirstRow = _a.highlightFirstRow, children = _a.children, onValidateRecord = _a.onValidateRecord, onDataSetChanged = _a.onDataSetChanged, onValidationStateChanged = _a.onValidationStateChanged, selectedRows = _a.selectedRows, setSelectedRows = _a.setSelectedRows;
|
|
30
30
|
var _c = useState(initialDataSet), dataSet = _c[0], setDataSet = _c[1];
|
|
31
31
|
var _d = useState(false), isLoading = _d[0], setIsLoading = _d[1];
|
|
32
32
|
var _e = useState(null), sortByFieldErrors = _e[0], setSortByFieldErrors = _e[1];
|
|
@@ -70,7 +70,7 @@ export var SpreadsheetContextProvider = function (_a) {
|
|
|
70
70
|
sortByCurrentErrorsRef.current = __assign({}, errorsRef.current);
|
|
71
71
|
setSortByFieldErrors(value);
|
|
72
72
|
}, []);
|
|
73
|
-
var value = __assign(__assign({ data: data, fields: fields, isLoading: isLoading }, validationState), { isReadOnly: isReadOnly, rowWidth: rowWidth, sortByFieldErrors: sortByFieldErrors, highlightFirstRow: highlightFirstRow, setIsLoading: setIsLoading, setSortByFieldErrors: handleSortByFieldErrors, onValidateRecord: onValidateRecord, updateRecord: updateRecordAndRevalidate });
|
|
73
|
+
var value = __assign(__assign({ data: data, fields: fields, isLoading: isLoading }, validationState), { isReadOnly: isReadOnly, rowWidth: rowWidth, sortByFieldErrors: sortByFieldErrors, highlightFirstRow: highlightFirstRow, options: options, setIsLoading: setIsLoading, setSortByFieldErrors: handleSortByFieldErrors, onValidateRecord: onValidateRecord, updateRecord: updateRecordAndRevalidate, selectedRows: selectedRows, setSelectedRows: setSelectedRows });
|
|
74
74
|
return (_jsx(SpreadsheetContext.Provider, __assign({ value: value }, { children: children })));
|
|
75
75
|
};
|
|
76
76
|
export var useSpreadsheetContext = function () { return useContext(SpreadsheetContext); };
|
|
@@ -11,7 +11,7 @@ export var isEmpty = function (value) {
|
|
|
11
11
|
(typeof value === "string" && value.trim().length === 0));
|
|
12
12
|
};
|
|
13
13
|
export var isEmail = function (value) {
|
|
14
|
-
var emailRegex = /^
|
|
14
|
+
var emailRegex = /^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$/;
|
|
15
15
|
return emailRegex.test(value);
|
|
16
16
|
};
|
|
17
17
|
export var isUrl = function (value) {
|
|
@@ -32,11 +32,13 @@ import { FieldHeader } from "./FieldHeader";
|
|
|
32
32
|
import GlobalStyle from "./GlobalStyle";
|
|
33
33
|
import { inputTypes } from "./inputs";
|
|
34
34
|
import { SpreadsheetRowNumbers } from "./SpreadsheetRowNumbers";
|
|
35
|
+
import { SpreadsheetRowCheckboxes } from "./SpreadsheetRowCheckboxes";
|
|
35
36
|
import ValidationProgress from "./ValidationProgress";
|
|
36
37
|
var getItemKey = function (record) { return record._meta.id; };
|
|
37
38
|
var SpreadsheetData = function () {
|
|
38
|
-
var _a = useSpreadsheetContext(), fields = _a.fields, data = _a.data, isLoading = _a.isLoading, isReadOnly = _a.isReadOnly, rowWidth = _a.rowWidth, totalErrors = _a.totalErrors, validationPercentage = _a.validationPercentage, setSortByFieldErrors = _a.setSortByFieldErrors;
|
|
39
|
+
var _a = useSpreadsheetContext(), fields = _a.fields, data = _a.data, isLoading = _a.isLoading, isReadOnly = _a.isReadOnly, rowWidth = _a.rowWidth, totalErrors = _a.totalErrors, validationPercentage = _a.validationPercentage, setSortByFieldErrors = _a.setSortByFieldErrors, options = _a.options;
|
|
39
40
|
var rowNumbersGridRef = useRef();
|
|
41
|
+
var rowCheckboxesGridRef = useRef();
|
|
40
42
|
var sortByErrors = useCallback(function (field) {
|
|
41
43
|
return setSortByFieldErrors(function (sortByFieldErrors) {
|
|
42
44
|
return sortByFieldErrors === field ? null : field;
|
|
@@ -57,6 +59,10 @@ var SpreadsheetData = function () {
|
|
|
57
59
|
var grid = rowNumbersGridRef.current;
|
|
58
60
|
grid.scrollTo({ scrollTop: scrollTop });
|
|
59
61
|
}
|
|
62
|
+
if (rowCheckboxesGridRef.current) {
|
|
63
|
+
var grid = rowCheckboxesGridRef.current;
|
|
64
|
+
grid.scrollTo({ scrollTop: scrollTop });
|
|
65
|
+
}
|
|
60
66
|
}, []);
|
|
61
67
|
var dataLength = data === null || data === void 0 ? void 0 : data.length;
|
|
62
68
|
var spreadsheetHeight = useMemo(function () {
|
|
@@ -69,6 +75,6 @@ var SpreadsheetData = function () {
|
|
|
69
75
|
});
|
|
70
76
|
}, [dataLength]);
|
|
71
77
|
var showValidationProgress = !isReadOnly && validationPercentage < 100;
|
|
72
|
-
return (_jsxs(
|
|
78
|
+
return (_jsxs(S.SpreadSheetData, { children: [_jsx(GlobalStyle, {}), _jsx(Div, __assign({ h: 32 }, { children: showValidationProgress && (_jsx(ValidationProgress, { totalErrors: totalErrors, validationPercentage: validationPercentage })) })), _jsxs(S.SpreadSheetWrapper, __assign({ h: spreadsheetHeight, dflex: true }, { children: [options.showCheckboxColumn && (_jsx(SpreadsheetRowCheckboxes, { gridRef: rowCheckboxesGridRef, spreadsheetHasXScroll: rowWidth > 1, height: spreadsheetHeight, firstRowIsHeader: options.firstRowIsHeader })), _jsx(SpreadsheetRowNumbers, { gridRef: rowNumbersGridRef, spreadsheetHasXScroll: rowWidth > 1, height: spreadsheetHeight }), _jsx(S.TableView, { tableHeadersHeight: spreadsheetHeaderHeightPx, highlightFirstRow: isReadOnly, rowHeight: spreadsheetRowHeightPx, h: spreadsheetHeight, rowWidth: rowWidth, data: data, columns: columns, isLoading: isLoading, onTableScroll: onTableScroll, getItemKey: getItemKey })] }))] }));
|
|
73
79
|
};
|
|
74
80
|
export default React.memo(SpreadsheetData, areEqual);
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { DivCSSProps } from "../../../../styled/utils";
|
|
3
|
+
type Props = {
|
|
4
|
+
height?: number;
|
|
5
|
+
spreadsheetHasXScroll?: boolean;
|
|
6
|
+
gridRef: React.MutableRefObject<any>;
|
|
7
|
+
firstRowIsHeader?: boolean;
|
|
8
|
+
} & DivCSSProps;
|
|
9
|
+
export declare const SpreadsheetRowCheckboxes: ({ height, spreadsheetHasXScroll, gridRef, firstRowIsHeader, ...props }: Props) => JSX.Element;
|
|
10
|
+
export {};
|