fuse-importer 0.26.5 → 0.26.7
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/Review/ReviewContextProvider.d.ts +2 -1
- package/lib/esm/Importer/Review/ReviewContextProvider.js +34 -19
- package/lib/esm/common/Table/TableActions/ExportData.js +1 -1
- package/lib/esm/common/Table/TableActions/FilterByErrors/FilterByErrors.js +22 -17
- package/lib/esm/common/inputs/Autocomplete.js +11 -1
- package/lib/main.js +23 -23
- package/lib/main.js.LICENSE.txt +0 -2
- package/package.json +2 -2
|
@@ -17,8 +17,9 @@ type State = {
|
|
|
17
17
|
onDataSetChanged: OnDataSetChanged;
|
|
18
18
|
onValidationStateChanged: OnValidationStateChanged;
|
|
19
19
|
onSubmit: () => void;
|
|
20
|
-
onExport: () => void;
|
|
20
|
+
onExport: (dataType: ExportDataType) => void;
|
|
21
21
|
};
|
|
22
|
+
type ExportDataType = "csv" | "excel";
|
|
22
23
|
type Props = {
|
|
23
24
|
children: JSX.Element;
|
|
24
25
|
};
|
|
@@ -45,6 +45,17 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
|
45
45
|
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
46
46
|
}
|
|
47
47
|
};
|
|
48
|
+
var __rest = (this && this.__rest) || function (s, e) {
|
|
49
|
+
var t = {};
|
|
50
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
|
51
|
+
t[p] = s[p];
|
|
52
|
+
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
|
53
|
+
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
|
54
|
+
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
|
55
|
+
t[p[i]] = s[p[i]];
|
|
56
|
+
}
|
|
57
|
+
return t;
|
|
58
|
+
};
|
|
48
59
|
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
49
60
|
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
|
|
50
61
|
if (ar || !(i in from)) {
|
|
@@ -56,6 +67,7 @@ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
|
56
67
|
};
|
|
57
68
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
58
69
|
import { createContext, useCallback, useContext, useEffect, useMemo, useRef, useState, } from "react";
|
|
70
|
+
import { utils, writeFile } from "xlsx";
|
|
59
71
|
import { AppLoading } from "../common/AppLoading";
|
|
60
72
|
import { isRecordEmpty } from "../common/Spreadsheet/common";
|
|
61
73
|
import { sendRecordsToIntegrations } from "../common/utils";
|
|
@@ -94,18 +106,21 @@ var filterAndMapWithBackendErrors = function (dataSet, errors) {
|
|
|
94
106
|
return __assign(__assign({}, record), { _meta: __assign(__assign({}, meta), { isInvalid: true, backendErrors: errors[rId] }) });
|
|
95
107
|
}, []);
|
|
96
108
|
};
|
|
97
|
-
function
|
|
98
|
-
var
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
csvRows.push(row.join(","));
|
|
109
|
+
function csvExport(data) {
|
|
110
|
+
var valuesWithQuotesWhenNecessary = data.map(function (obj) {
|
|
111
|
+
var newObj = {};
|
|
112
|
+
for (var key in obj) {
|
|
113
|
+
var value = obj[key];
|
|
114
|
+
newObj[key] =
|
|
115
|
+
typeof value === "string" && value.includes(",") ? "\"".concat(value, "\"") : value;
|
|
116
|
+
}
|
|
117
|
+
return newObj;
|
|
107
118
|
});
|
|
108
|
-
|
|
119
|
+
var worksheet = utils.json_to_sheet(valuesWithQuotesWhenNecessary);
|
|
120
|
+
var workbook = utils.book_new();
|
|
121
|
+
utils.book_append_sheet(workbook, worksheet, "Data");
|
|
122
|
+
utils.sheet_to_csv(worksheet);
|
|
123
|
+
writeFile(workbook, "export.csv");
|
|
109
124
|
}
|
|
110
125
|
export var ReviewContextProvider = function (_a) {
|
|
111
126
|
var children = _a.children;
|
|
@@ -127,18 +142,18 @@ export var ReviewContextProvider = function (_a) {
|
|
|
127
142
|
batchValidationDelayMs: batchValidationDelayMs,
|
|
128
143
|
batchValidationSize: batchValidationSize,
|
|
129
144
|
}); }, [batchValidationDelayMs, batchValidationSize]);
|
|
130
|
-
var onExport = useCallback(function () {
|
|
145
|
+
var onExport = useCallback(function (dataType) {
|
|
131
146
|
if (!reviewDataSetRef.current)
|
|
132
147
|
return;
|
|
133
148
|
var dataSet = reviewDataSetRef.current;
|
|
134
149
|
var dataSetValues = Object.values(dataSet);
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
150
|
+
if (dataType === "csv") {
|
|
151
|
+
var valuesWithoutMeta = dataSetValues.map(function (_a) {
|
|
152
|
+
var _meta = _a._meta, rest = __rest(_a, ["_meta"]);
|
|
153
|
+
return rest;
|
|
154
|
+
});
|
|
155
|
+
csvExport(valuesWithoutMeta);
|
|
156
|
+
}
|
|
142
157
|
}, [reviewFields, selectedRows]);
|
|
143
158
|
var onSubmitData = useCallback(function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
144
159
|
var dataSet, dataSetValues, validDataSetValues, validDataSetLength, invalidRecords_1, applicationResponse, isAppResponseSuccessful, _a, errors, isDataValid, recordsToDisplayFiltered, invalidDataSet, error_2;
|
|
@@ -19,5 +19,5 @@ export var ExportData = function (_a) {
|
|
|
19
19
|
var _b = _a.testId, testId = _b === void 0 ? "ta-export-data" : _b;
|
|
20
20
|
var onExport = useReviewContext().onExport;
|
|
21
21
|
var t = useTranslation("review").t;
|
|
22
|
-
return (_jsx(TooltipProvider, __assign({ tooltip: t("table_actions.export_your_data.tooltip"), placement: "right", flip: false, centered: true, "data-testid": testId }, { children: _jsx(ActionButton, __assign({ onClick: onExport }, { children: _jsx(DownloadIcon, {}) })) })));
|
|
22
|
+
return (_jsx(TooltipProvider, __assign({ tooltip: t("table_actions.export_your_data.tooltip"), placement: "right", flip: false, centered: true, "data-testid": testId }, { children: _jsx(ActionButton, __assign({ onClick: function () { return onExport("csv"); } }, { children: _jsx(DownloadIcon, {}) })) })));
|
|
23
23
|
};
|
|
@@ -1,24 +1,26 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
-
import { useState } from "react";
|
|
3
2
|
import * as S from "./FilterByErrors.styles";
|
|
4
3
|
import { useSpreadsheetContext } from "../../../../Importer";
|
|
5
4
|
import { formatErrors, getUniqueErrors } from "./functions";
|
|
6
5
|
import { useTranslation } from "react-i18next";
|
|
7
6
|
import { addToast } from "../../../../common/Toast";
|
|
7
|
+
import { useState } from "react";
|
|
8
8
|
export var FilterByErrors = function () {
|
|
9
|
-
var _a
|
|
10
|
-
var _b =
|
|
9
|
+
var _a;
|
|
10
|
+
var _b = useSpreadsheetContext(), errors = _b.errors, fields = _b.fields, selectedErrorToFilter = _b.selectedErrorToFilter, setSelectedErrorToFilter = _b.setSelectedErrorToFilter;
|
|
11
11
|
var t = useTranslation("review").t;
|
|
12
|
-
var
|
|
13
|
-
var
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
12
|
+
var _c = useState(false), isMenuOpened = _c[0], setIsMenuOpened = _c[1];
|
|
13
|
+
var prefix = t("table_actions.filter_by_errors.filter_by_errors");
|
|
14
|
+
var search_or_select = t("table_actions.filter_by_errors.search_or_select");
|
|
15
|
+
var getSelectedErrorLabel = function (selectedFieldName) {
|
|
16
|
+
var _a;
|
|
17
|
+
var selectedField = fields.filter(function (field) { return (field === null || field === void 0 ? void 0 : field.name) === selectedFieldName; });
|
|
18
|
+
var label = ((_a = selectedField === null || selectedField === void 0 ? void 0 : selectedField[0]) === null || _a === void 0 ? void 0 : _a.label) || selectedFieldName;
|
|
19
|
+
return label;
|
|
17
20
|
};
|
|
18
21
|
var onChange = function (selected) {
|
|
19
22
|
if (selected) {
|
|
20
|
-
var
|
|
21
|
-
var label = selectedField[0].label || selected;
|
|
23
|
+
var label = getSelectedErrorLabel(selected);
|
|
22
24
|
addToast("Showing only the rows with error on the ".concat(label, " column"), "success");
|
|
23
25
|
}
|
|
24
26
|
setSelectedErrorToFilter(selected || "");
|
|
@@ -26,12 +28,15 @@ export var FilterByErrors = function () {
|
|
|
26
28
|
var uniqueErrors = getUniqueErrors(fields, errors);
|
|
27
29
|
var errorArray = formatErrors(fields, uniqueErrors);
|
|
28
30
|
// the average size of each character in the input (in px)
|
|
29
|
-
var widthPerCharacter = 5.
|
|
30
|
-
var amountOfCharacters = prefix.length + (selectedErrorToFilter === null ||
|
|
31
|
-
// 24
|
|
32
|
-
var totalWidth = widthPerCharacter * amountOfCharacters + 24 +
|
|
31
|
+
var widthPerCharacter = 5.8;
|
|
32
|
+
var amountOfCharacters = prefix.length + ((_a = getSelectedErrorLabel(selectedErrorToFilter)) === null || _a === void 0 ? void 0 : _a.length);
|
|
33
|
+
// 24 -> padding + 64px of the X icon area
|
|
34
|
+
var totalWidth = widthPerCharacter * amountOfCharacters + 24 + 64;
|
|
33
35
|
var inputWidth = selectedErrorToFilter ? "".concat(totalWidth, "px") : "fit-content";
|
|
34
|
-
var
|
|
35
|
-
|
|
36
|
-
|
|
36
|
+
var inputText = selectedErrorToFilter
|
|
37
|
+
? "".concat(prefix, ": ")
|
|
38
|
+
: isMenuOpened
|
|
39
|
+
? search_or_select
|
|
40
|
+
: prefix;
|
|
41
|
+
return (_jsx(S.StyledAutocomplete, { placement: "bottom", placeholder: inputText, onToggle: function (v) { return setIsMenuOpened(v); }, onChange: onChange, value: selectedErrorToFilter, options: errorArray, isDisabled: errorArray.length === 0, isInputDisabled: errorArray.length === 0, inputWidth: inputWidth, "data-testid": "ta-filter-by-errors", prefix: inputText }));
|
|
37
42
|
};
|
|
@@ -53,6 +53,7 @@ var Autocomplete = function (_a) {
|
|
|
53
53
|
var _g = useState(selectedLabel), text = _g[0], setText = _g[1];
|
|
54
54
|
var _h = useState(false), isMenuOpen = _h[0], setIsMenuOpen = _h[1];
|
|
55
55
|
var _j = useState(null), referenceElement = _j[0], setReferenceElement = _j[1];
|
|
56
|
+
var _k = useState(false), isTyping = _k[0], setIsTyping = _k[1];
|
|
56
57
|
var t = useTranslation().t;
|
|
57
58
|
useEffect(function () {
|
|
58
59
|
if (value)
|
|
@@ -87,12 +88,21 @@ var Autocomplete = function (_a) {
|
|
|
87
88
|
evt.stopPropagation();
|
|
88
89
|
onChange(undefined);
|
|
89
90
|
} }, { children: clearIcon }))) : (_jsx(Div, __assign({ centered: true, dim: 24 }, { children: icon || chevronDownIcon })));
|
|
91
|
+
var textWithPrefix = "".concat(prefix).concat(text);
|
|
92
|
+
var shouldShowPrefix = prefix && !isTyping && !isMenuOpen;
|
|
93
|
+
var inputValue = shouldShowPrefix ? textWithPrefix : text;
|
|
90
94
|
return (_jsxs(Div, __assign({ w100: true }, props, { children: [_jsx(ClickableArea, __assign({ isInputDisabled: isDisabled || isInputDisabled, onClick: function () { return setIsMenuOpen(true); } }, { children: _jsx(TextInput, { setInputRef: setReferenceElement, id: id, onBlur: function () {
|
|
95
|
+
if (isTyping && prefix)
|
|
96
|
+
setIsTyping(false);
|
|
91
97
|
if (filteredOptions.length === 0) {
|
|
92
98
|
setText(selectedLabel);
|
|
93
99
|
setIsMenuOpen(false);
|
|
94
100
|
}
|
|
95
|
-
}, label: label, isDisabled: isDisabled || isInputDisabled, placeholder: t(placeholder), value:
|
|
101
|
+
}, label: label, isDisabled: isDisabled || isInputDisabled, placeholder: t(placeholder), value: inputValue, onChange: function (v) {
|
|
102
|
+
if (!isTyping && prefix)
|
|
103
|
+
setIsTyping(true);
|
|
104
|
+
setText(v);
|
|
105
|
+
}, icon: isDisabled ? null : inputIconUI, labelTooltip: labelTooltip }) })), !isDisabled && filteredOptions.length > 0 && (_jsx(SelectMenu, __assign({ referenceElement: referenceElement, placement: placement, isOpen: isMenuOpen, onClose: function () { return setIsMenuOpen(false); } }, { children: filteredOptions.map(function (o, index) { return (_jsx(Div, { children: _jsx(MenuItem, __assign({ id: id ? "".concat(id, "-option-").concat(o.label) : null, isSelected: value === (o === null || o === void 0 ? void 0 : o.value), onClick: function () { return onSelect(o === null || o === void 0 ? void 0 : o.value); } }, { children: o.label })) }, index)); }) })))] })));
|
|
96
106
|
};
|
|
97
107
|
var chevronDownIcon = (_jsx("svg", __assign({ width: "16", height: "9", viewBox: "0 0 16 9", fill: "none", xmlns: "http://www.w3.org/2000/svg" }, { children: _jsx("path", { d: "M14.9263 1L7.9631 7.96317L0.999928 1", stroke: "black", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }) })));
|
|
98
108
|
var clearIcon = (_jsxs("svg", __assign({ width: "16", height: "16", viewBox: "0 0 16 16", fill: "none", xmlns: "http://www.w3.org/2000/svg" }, { children: [_jsx("path", { d: "M4 4L12.5161 12.5161", stroke: "#333333", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }), _jsx("path", { d: "M4 12.5161L12.5161 3.99998", stroke: "#333333", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" })] })));
|