fuse-importer 0.25.8 → 0.26.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (80) hide show
  1. package/lib/esm/Importer/Matcher/EnumFieldsMatchers/EnumFieldMatcher/index.js +11 -1
  2. package/lib/esm/Importer/Review/ReviewWithContext.js +4 -5
  3. package/lib/esm/Importer/Uploader/HeadersPreview.js +5 -6
  4. package/lib/esm/Importer/common/GlobalStyle.js +1 -1
  5. package/lib/esm/Importer/common/Spreadsheet/SpreadsheetContextProvider.d.ts +4 -3
  6. package/lib/esm/Importer/common/Spreadsheet/SpreadsheetContextProvider.js +33 -16
  7. package/lib/esm/Importer/common/Spreadsheet/common/index.d.ts +3 -3
  8. package/lib/esm/Importer/common/Spreadsheet/common/index.js +1 -1
  9. package/lib/esm/Importer/common/Spreadsheet/components/SpreadsheetData.js +29 -2
  10. package/lib/esm/Importer/common/Spreadsheet/components/SpreadsheetRowCheckboxes.d.ts +1 -2
  11. package/lib/esm/Importer/common/Spreadsheet/components/SpreadsheetRowCheckboxes.js +1 -1
  12. package/lib/esm/Importer/common/Spreadsheet/components/fields/SpeadsheetAutocomplete.js +1 -1
  13. package/lib/esm/Importer/common/Spreadsheet/components/fields/SpreadsheetInput.js +3 -3
  14. package/lib/esm/Importer/common/Spreadsheet/hooks.d.ts +4 -2
  15. package/lib/esm/Importer/common/Spreadsheet/hooks.js +3 -60
  16. package/lib/esm/Importer/common/Spreadsheet/index.d.ts +1 -2
  17. package/lib/esm/Importer/common/Spreadsheet/index.js +2 -2
  18. package/lib/esm/Importer/common/Spreadsheet/styles.d.ts +1 -1
  19. package/lib/esm/Importer/common/Spreadsheet/styles.js +2 -2
  20. package/lib/esm/Importer/common/utils.d.ts +0 -1
  21. package/lib/esm/Importer/common/utils.js +0 -4
  22. package/lib/esm/Importer/data/index.d.ts +7 -2
  23. package/lib/esm/Importer/data/index.js +18 -10
  24. package/lib/esm/Importer/index.js +0 -2
  25. package/lib/esm/common/Table/TableActions/DeleteSelectedRows.js +10 -4
  26. package/lib/esm/common/Table/TableActions/ExportData.js +3 -1
  27. package/lib/esm/common/Table/TableActions/FilterByErrors/FilterByErrors.d.ts +1 -0
  28. package/lib/esm/common/Table/TableActions/FilterByErrors/FilterByErrors.js +35 -0
  29. package/lib/esm/common/Table/TableActions/FilterByErrors/FilterByErrors.styles.d.ts +6 -0
  30. package/lib/esm/common/Table/TableActions/FilterByErrors/FilterByErrors.styles.js +24 -0
  31. package/lib/esm/common/Table/TableActions/FilterByErrors/functions.d.ts +11 -0
  32. package/lib/esm/common/Table/TableActions/FilterByErrors/functions.js +35 -0
  33. package/lib/esm/common/Table/TableActions/FilterByErrors/index.d.ts +1 -0
  34. package/lib/esm/common/Table/TableActions/FilterByErrors/index.js +1 -0
  35. package/lib/esm/common/Table/TableActions/SearchRows.js +4 -2
  36. package/lib/esm/common/Table/TableActions/TableActions.js +2 -1
  37. package/lib/esm/common/Table/TableActions/TableActions.styles.js +1 -1
  38. package/lib/esm/common/Table/TableActions/hooks.d.ts +21 -0
  39. package/lib/esm/common/Table/TableActions/hooks.js +84 -0
  40. package/lib/esm/common/Table/TableView/TableHeaders.d.ts +6 -8
  41. package/lib/esm/common/Table/TableView/TableHeaders.js +15 -17
  42. package/lib/esm/common/Table/TableView/{TableRow.d.ts → TableRows/TableRow.d.ts} +5 -5
  43. package/lib/esm/common/Table/TableView/{TableRow.js → TableRows/TableRow.js} +9 -6
  44. package/lib/esm/common/Table/TableView/TableRows/index.d.ts +4 -0
  45. package/lib/esm/common/Table/TableView/{TableCells.js → TableRows/index.js} +13 -11
  46. package/lib/esm/common/Table/TableView/common/index.d.ts +5 -0
  47. package/lib/esm/common/Table/TableView/common/index.js +37 -0
  48. package/lib/esm/common/Table/TableView/index.d.ts +4 -39
  49. package/lib/esm/common/Table/TableView/index.js +55 -44
  50. package/lib/esm/common/Table/TableView/types.d.ts +37 -0
  51. package/lib/esm/common/Table/TableView/types.js +1 -0
  52. package/lib/esm/common/Table/index.d.ts +2 -2
  53. package/lib/esm/common/Table/index.js +6 -6
  54. package/lib/esm/common/inputs/Autocomplete.d.ts +2 -1
  55. package/lib/esm/common/inputs/Autocomplete.js +2 -2
  56. package/lib/esm/common/inputs/TextInput.js +1 -1
  57. package/lib/esm/index.d.ts +7 -0
  58. package/lib/esm/index.js +90 -21
  59. package/lib/esm/locales/de.d.ts +21 -0
  60. package/lib/esm/locales/de.js +21 -0
  61. package/lib/esm/locales/en.d.ts +21 -0
  62. package/lib/esm/locales/en.js +21 -0
  63. package/lib/esm/locales/es.d.ts +21 -0
  64. package/lib/esm/locales/es.js +21 -0
  65. package/lib/esm/locales/fr.d.ts +21 -0
  66. package/lib/esm/locales/fr.js +21 -0
  67. package/lib/esm/styled/fontsURL.d.ts +9 -0
  68. package/lib/esm/styled/fontsURL.js +27 -0
  69. package/lib/esm/types.d.ts +1 -0
  70. package/lib/esm/utils/hooks/useWindowSize.d.ts +11 -0
  71. package/lib/esm/utils/hooks/useWindowSize.js +23 -0
  72. package/lib/esm/utils/hooks.d.ts +1 -0
  73. package/lib/esm/utils/hooks.js +1 -0
  74. package/lib/main.js +11 -11
  75. package/package.json +1 -1
  76. package/lib/esm/Importer/useFullscreenOverlay.d.ts +0 -1
  77. package/lib/esm/Importer/useFullscreenOverlay.js +0 -14
  78. package/lib/esm/common/Table/TableView/TableCells.d.ts +0 -4
  79. package/lib/esm/common/Table/TableView/common.d.ts +0 -9
  80. package/lib/esm/common/Table/TableView/common.js +0 -27
@@ -9,6 +9,15 @@ var __assign = (this && this.__assign) || function () {
9
9
  };
10
10
  return __assign.apply(this, arguments);
11
11
  };
12
+ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
13
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
14
+ if (ar || !(i in from)) {
15
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
16
+ ar[i] = from[i];
17
+ }
18
+ }
19
+ return to.concat(ar || Array.prototype.slice.call(from));
20
+ };
12
21
  import { FieldTypes, } from "../../types";
13
22
  import { parseValue } from "../common/Spreadsheet/common";
14
23
  var MINIMUM_ROW_COUNT = 20;
@@ -21,19 +30,18 @@ export var addEmptyRows = function (data, fields) {
21
30
  var _a;
22
31
  return (__assign(__assign({}, obj), (_a = {}, _a[f.name] = null, _a)));
23
32
  }, {});
24
- for (var i = data.length; i < MINIMUM_ROW_COUNT; i++) {
25
- data.push(__assign(__assign({}, emptyRecord), { _meta: {
26
- id: getRowId(i),
27
- rowIndex: i,
28
- } }));
29
- }
30
- return data;
33
+ var newData = Array.from({ length: MINIMUM_ROW_COUNT - data.length }, function (_, index) { return (__assign(__assign({}, emptyRecord), { _meta: {
34
+ id: getRowId(data.length + index),
35
+ rowIndex: data.length + index,
36
+ } })); });
37
+ return __spreadArray(__spreadArray([], data, true), newData, true);
31
38
  };
32
- export var addMeta = function (record, index) {
39
+ export var addMeta = function (record, index, uploadedRow) {
33
40
  var _a;
41
+ if (uploadedRow === void 0) { uploadedRow = null; }
34
42
  var rId = getRowId(index);
35
43
  var meta = (_a = record._meta) !== null && _a !== void 0 ? _a : {};
36
- return __assign(__assign({}, record), { _meta: __assign(__assign({}, meta), { id: rId, rowIndex: index, touched: false }) });
44
+ return __assign(__assign({}, record), { _meta: __assign(__assign({}, meta), { id: rId, rowIndex: index, touched: false, uploadedRow: uploadedRow }) });
37
45
  };
38
46
  export var recordListToDataSet = function (data, fields) {
39
47
  var initialData = data;
@@ -59,7 +67,7 @@ var transformToRecords = function (_a) {
59
67
  return (__assign(__assign({}, byLabel), (_a = {}, _a[header.label] = header, _a)));
60
68
  }, {});
61
69
  var getRecord = function (row, index) {
62
- var record = addMeta({}, index);
70
+ var record = addMeta({}, index, row);
63
71
  matchedColumnsLabels.forEach(function (_a) {
64
72
  var label = _a.label, index = _a.index;
65
73
  var enumSet = enumFieldValueMatchings
@@ -12,7 +12,6 @@ var __assign = (this && this.__assign) || function () {
12
12
  import { jsx as _jsx } from "react/jsx-runtime";
13
13
  import { ImporterContextProvider } from "./contexts/ImporterContextProvider";
14
14
  import { ImporterWithContext } from "./ImporterWithContext";
15
- import { useFullscreenOverlay } from "./useFullscreenOverlay";
16
15
  export var ACCOUNT_ROUTES = {
17
16
  TEMPLATES: "/importers",
18
17
  };
@@ -21,7 +20,6 @@ var p = function (path) { return "".concat(ACCOUNT_VIEW_PATH).concat(path); };
21
20
  export var TEMPLATES_ROUTE = p(ACCOUNT_ROUTES.TEMPLATES);
22
21
  var Importer = function (_a) {
23
22
  var templateSlug = _a.templateSlug, apiToken = _a.apiToken, options = _a.options, formatRecord = _a.formatRecord, onValidateRecord = _a.onValidateRecord, onSubmit = _a.onSubmit, onClose = _a.onClose;
24
- useFullscreenOverlay();
25
23
  return (_jsx(ImporterContextProvider, __assign({ options: options, templateSlug: templateSlug, apiToken: apiToken, formatRecord: formatRecord, onValidateRecord: onValidateRecord, onClose: onClose, onSubmit: onSubmit }, { children: _jsx(ImporterWithContext, {}) })));
26
24
  };
27
25
  export * from "./common/Spreadsheet";
@@ -24,6 +24,7 @@ import { DeleteIcon, ConfirmationDeleteIcon } from "./icons";
24
24
  import { addToast } from "../../../common/Toast";
25
25
  import { Div } from "../../../styled/utils";
26
26
  import { ActionButton } from "./TableActions.styles";
27
+ import { useTranslation } from "react-i18next";
27
28
  var StyledTooltipProvider = styled(TooltipProvider)(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n width: fit-content;\n"], ["\n width: fit-content;\n"])));
28
29
  var filterByRecordsThatContainsValues = function (mainObject) {
29
30
  return mainObject.filter(function (obj) {
@@ -40,6 +41,7 @@ export var DeleteSelectedRows = function (_a) {
40
41
  var _c = useState(false), isConfirmationModalOpen = _c[0], setIsConfirmationModalOpen = _c[1];
41
42
  var _d = useSpreadsheetContext(), data = _d.data, filteredInputValue = _d.filteredInputValue, deleteRecords = _d.deleteRecords, selectedRows = _d.selectedRows, setSelectedRows = _d.setSelectedRows, setFilteredInputValue = _d.setFilteredInputValue;
42
43
  var _e = useImporterContext(), setCurrentStepIndex = _e.setCurrentStepIndex, isUsingManualImport = _e.isUsingManualImport;
44
+ var t = useTranslation("review").t;
43
45
  var toggleModalVisibility = function () {
44
46
  setIsConfirmationModalOpen(function (oldValue) { return !oldValue; });
45
47
  };
@@ -53,13 +55,17 @@ export var DeleteSelectedRows = function (_a) {
53
55
  !filteredInputValue &&
54
56
  selectedRows.length === validData.length) {
55
57
  setCurrentStepIndex(0);
56
- return addToast("You have deleted all the rows. You will be redirect to the upload step.", "success");
58
+ return addToast(t("table_actions.delete_rows.delete_toast"), "success");
57
59
  }
58
60
  deleteRecords(selectedRows);
59
61
  };
60
- var DescriptionUI = function () { return (_jsx(_Fragment, { children: _jsxs(Div, { children: ["Are you sure you want to delete ", selectedRows.length, " row", selectedRows.length > 1 ? "s" : "", "?"] }) })); };
61
- var confirmationModalUI = (_jsx(ConfirmationModal, { isOpen: isConfirmationModalOpen, handleClose: toggleModalVisibility, title: "Delete Selected Row".concat(selectedRows.length > 1 ? "s" : ""), description: _jsx(DescriptionUI, {}), onSubmit: handleDeleteRecord, buttonText: "Yes, delete", icon: ConfirmationDeleteIcon }));
62
+ var DescriptionUI = function () { return (_jsx(_Fragment, { children: _jsxs(Div, { children: [t("table_actions.delete_rows.confirmation_modal", {
63
+ length: selectedRows.length,
64
+ }), selectedRows.length > 1 ? "s" : "", "?"] }) })); };
65
+ var confirmationModalUI = (_jsx(ConfirmationModal, { isOpen: isConfirmationModalOpen, handleClose: toggleModalVisibility, title: "".concat(t("table_actions.delete_rows.modal_title")).concat(selectedRows.length > 1 ? "s" : ""), description: _jsx(DescriptionUI, {}), onSubmit: handleDeleteRecord, buttonText: t("table_actions.delete_rows.yes_delete"), icon: ConfirmationDeleteIcon }));
62
66
  var isDeleteButtonDisabled = selectedRows.length <= 0;
63
- return (_jsxs(_Fragment, { children: [confirmationModalUI, _jsx(StyledTooltipProvider, __assign({ tooltip: isDeleteButtonDisabled ? "Select rows to delete" : "Delete Row", placement: "right", flip: false, centered: true, "data-testid": testId }, { children: _jsx(ActionButton, __assign({ onClick: toggleModalVisibility, disabled: isDeleteButtonDisabled }, { children: _jsx(DeleteIcon, {}) })) }))] }));
67
+ return (_jsxs(_Fragment, { children: [confirmationModalUI, _jsx(StyledTooltipProvider, __assign({ tooltip: isDeleteButtonDisabled
68
+ ? t("table_actions.delete_rows.select_rows")
69
+ : t("table_actions.delete_rows.delete_row"), placement: "right", flip: false, centered: true, "data-testid": testId }, { children: _jsx(ActionButton, __assign({ onClick: toggleModalVisibility, disabled: isDeleteButtonDisabled }, { children: _jsx(DeleteIcon, {}) })) }))] }));
64
70
  };
65
71
  var templateObject_1;
@@ -14,8 +14,10 @@ import { DownloadIcon } from "./icons";
14
14
  import { useReviewContext } from "../../../Importer";
15
15
  import { TooltipProvider } from "../../../common/TooltipProvider";
16
16
  import { ActionButton } from "./TableActions.styles";
17
+ import { useTranslation } from "react-i18next";
17
18
  export var ExportData = function (_a) {
18
19
  var _b = _a.testId, testId = _b === void 0 ? "ta-export-data" : _b;
19
20
  var onExport = useReviewContext().onExport;
20
- return (_jsx(TooltipProvider, __assign({ tooltip: "Export your data", placement: "right", flip: false, centered: true, "data-testid": testId }, { children: _jsx(ActionButton, __assign({ onClick: onExport }, { children: _jsx(DownloadIcon, {}) })) })));
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, {}) })) })));
21
23
  };
@@ -0,0 +1 @@
1
+ export declare const FilterByErrors: () => JSX.Element;
@@ -0,0 +1,35 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { useState } from "react";
3
+ import * as S from "./FilterByErrors.styles";
4
+ import { useSpreadsheetContext } from "../../../../Importer";
5
+ import { formatErrors, getUniqueErrors } from "./functions";
6
+ import { useTranslation } from "react-i18next";
7
+ import { addToast } from "../../../../common/Toast";
8
+ export var FilterByErrors = function () {
9
+ var _a = useSpreadsheetContext(), errors = _a.errors, fields = _a.fields, selectedErrorToFilter = _a.selectedErrorToFilter, setSelectedErrorToFilter = _a.setSelectedErrorToFilter;
10
+ var _b = useState(false), isMenuOpened = _b[0], setIsMenuOpened = _b[1];
11
+ var t = useTranslation("review").t;
12
+ var prefix = "Filter by errors: ";
13
+ var onToggle = function (isOpen) {
14
+ if (errorArray.length === 0)
15
+ return;
16
+ setIsMenuOpened(isOpen);
17
+ };
18
+ var onChange = function (selected) {
19
+ if (selected) {
20
+ addToast("Showing only the rows with error on the ".concat(selected, " column"), "success");
21
+ }
22
+ setSelectedErrorToFilter(selected || "");
23
+ };
24
+ var uniqueErrors = getUniqueErrors(fields, errors);
25
+ var errorArray = formatErrors(fields, uniqueErrors);
26
+ // the average size of each character in the input (in px)
27
+ var widthPerCharacter = 5.3;
28
+ var amountOfCharacters = prefix.length + (selectedErrorToFilter === null || selectedErrorToFilter === void 0 ? void 0 : selectedErrorToFilter.length) || 0;
29
+ // 24 + 24 -> padding right and left + 48px of the X icon area
30
+ var totalWidth = widthPerCharacter * amountOfCharacters + 24 + 48;
31
+ var inputWidth = selectedErrorToFilter ? "".concat(totalWidth, "px") : "fit-content";
32
+ var search_or_select = t("table_actions.filter_by_errors.search_or_select");
33
+ var filter_by_errors = t("table_actions.filter_by_errors.filter_by_errors");
34
+ return (_jsx(S.StyledAutocomplete, { placement: "bottom", placeholder: isMenuOpened ? search_or_select : filter_by_errors, onChange: onChange, value: selectedErrorToFilter, options: errorArray, isDisabled: errorArray.length === 0, isInputDisabled: errorArray.length === 0, onToggle: onToggle, inputWidth: inputWidth, "data-testid": "ta-filter-by-errors", prefix: prefix }));
35
+ };
@@ -0,0 +1,6 @@
1
+ type StyledAutocompleteProps = {
2
+ inputWidth: string;
3
+ isDisabled: boolean;
4
+ };
5
+ export declare const StyledAutocomplete: import("styled-components").StyledComponent<({ label, isDisabled, isInputDisabled, placeholder, value, icon, onChange, placement, options, onToggle, id, labelTooltip, prefix, ...props }: import("../../../../common/inputs/Autocomplete").Props) => JSX.Element, import("styled-components").DefaultTheme, StyledAutocompleteProps, never>;
6
+ export {};
@@ -0,0 +1,24 @@
1
+ var __makeTemplateObject = (this && this.__makeTemplateObject) || function (cooked, raw) {
2
+ if (Object.defineProperty) { Object.defineProperty(cooked, "raw", { value: raw }); } else { cooked.raw = raw; }
3
+ return cooked;
4
+ };
5
+ import styled, { css } from "styled-components";
6
+ import { Autocomplete } from "../../../../common/inputs/Autocomplete";
7
+ import { textStyles } from "../../../../styled/theme/textStyles";
8
+ export var StyledAutocomplete = styled(Autocomplete)(templateObject_3 || (templateObject_3 = __makeTemplateObject(["\n &,\n * {\n box-sizing: border-box !important;\n\n ", "\n }\n\n div[data-popper-placement=\"bottom\"] > div {\n display: flex;\n flex-direction: column;\n gap: 8px;\n outline: 1px solid red;\n padding: 8px;\n\n > div div {\n padding: 6px 12px;\n }\n\n ", "\n }\n\n input {\n ", ";\n background-color: ", ";\n border: 1px solid transparent;\n font-family: \"DM Sans\";\n font-size: 14px;\n font-weight: 400;\n height: 32px;\n padding: 6px 12px;\n width: ", ";\n\n ::placeholder {\n color: ", ";\n }\n\n :focus {\n border: none;\n box-shadow: none;\n }\n }\n"], ["\n &,\n * {\n box-sizing: border-box !important;\n\n ", "\n }\n\n div[data-popper-placement=\"bottom\"] > div {\n display: flex;\n flex-direction: column;\n gap: 8px;\n outline: 1px solid red;\n padding: 8px;\n\n > div div {\n padding: 6px 12px;\n }\n\n ", "\n }\n\n input {\n ", ";\n background-color: ", ";\n border: 1px solid transparent;\n font-family: \"DM Sans\";\n font-size: 14px;\n font-weight: 400;\n height: 32px;\n padding: 6px 12px;\n width: ", ";\n\n ::placeholder {\n color: ", ";\n }\n\n :focus {\n border: none;\n box-shadow: none;\n }\n }\n"])), function (_a) {
9
+ var isDisabled = _a.isDisabled;
10
+ return isDisabled && css(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n cursor: not-allowed !important;\n "], ["\n cursor: not-allowed !important;\n "])));
11
+ }, function (_a) {
12
+ var isDisabled = _a.isDisabled;
13
+ return isDisabled && css(templateObject_2 || (templateObject_2 = __makeTemplateObject(["\n cursor: not-allowed;\n "], ["\n cursor: not-allowed;\n "])));
14
+ }, textStyles.body3, function (_a) {
15
+ var theme = _a.theme;
16
+ return theme.colors.orange50;
17
+ }, function (_a) {
18
+ var inputWidth = _a.inputWidth;
19
+ return inputWidth;
20
+ }, function (_a) {
21
+ var theme = _a.theme;
22
+ return theme.colors.black;
23
+ });
24
+ var templateObject_1, templateObject_2, templateObject_3;
@@ -0,0 +1,11 @@
1
+ import { Field, BatchValidationErrors } from "../../../../types";
2
+ type UniqueError = {
3
+ fieldName: string;
4
+ };
5
+ type Error = {
6
+ value: string;
7
+ label: string;
8
+ };
9
+ export declare const getUniqueErrors: (fields: Field[], errors: BatchValidationErrors) => UniqueError[];
10
+ export declare const formatErrors: (fields: Field[], uniqueErrors: any) => Error[];
11
+ export {};
@@ -0,0 +1,35 @@
1
+ export var getUniqueErrors = function (fields, errors) {
2
+ var fieldKeys = new Set(fields.map(function (field) { return field.name; }));
3
+ var uniqueErrors = [];
4
+ for (var _i = 0, _a = Object.entries(errors); _i < _a.length; _i++) {
5
+ var _b = _a[_i], _1 = _b[0], errorObj = _b[1];
6
+ for (var _c = 0, _d = Object.entries(errorObj); _c < _d.length; _c++) {
7
+ var fieldName = _d[_c][0];
8
+ if (fieldKeys.has(fieldName)) {
9
+ uniqueErrors.push({ fieldName: fieldName });
10
+ }
11
+ }
12
+ }
13
+ return uniqueErrors;
14
+ };
15
+ export var formatErrors = function (fields, uniqueErrors) {
16
+ var errorMap = new Map();
17
+ var orderedErrorArray = [];
18
+ fields.forEach(function (field) {
19
+ errorMap.set(field.name, field);
20
+ });
21
+ fields.forEach(function (field) {
22
+ var name = field.name, label = field.label;
23
+ if (uniqueErrors.some(function (_a) {
24
+ var fieldName = _a.fieldName;
25
+ return fieldName === name;
26
+ }) &&
27
+ !orderedErrorArray.some(function (error) { return error.value === name; })) {
28
+ orderedErrorArray.push({
29
+ value: name,
30
+ label: label,
31
+ });
32
+ }
33
+ });
34
+ return orderedErrorArray;
35
+ };
@@ -0,0 +1 @@
1
+ export * from "./FilterByErrors";
@@ -0,0 +1 @@
1
+ export * from "./FilterByErrors";
@@ -22,6 +22,7 @@ import { useRef, useState } from "react";
22
22
  import { colors } from "../../../styled/theme/colorPalette";
23
23
  import { textStyles } from "../../../styled/theme/textStyles";
24
24
  import { TooltipProvider } from "../../../common/TooltipProvider";
25
+ import { useTranslation } from "react-i18next";
25
26
  var Wrapper = styled.div(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n background: ", ";\n border-radius: 4px;\n cursor: pointer;\n display: flex;\n gap: 8px;\n height: 24px;\n overflow: hidden;\n padding: 8px;\n position: relative;\n transition: width 0.25s ease-in-out;\n width: ", ";\n"], ["\n background: ", ";\n border-radius: 4px;\n cursor: pointer;\n display: flex;\n gap: 8px;\n height: 24px;\n overflow: hidden;\n padding: 8px;\n position: relative;\n transition: width 0.25s ease-in-out;\n width: ", ";\n"])), function (_a) {
26
27
  var isOpen = _a.isOpen;
27
28
  return (isOpen ? colors.orange50 : "none");
@@ -30,7 +31,7 @@ var Wrapper = styled.div(templateObject_1 || (templateObject_1 = __makeTemplateO
30
31
  return (isOpen ? "332px" : "24px");
31
32
  });
32
33
  var IconWrapper = styled.div(templateObject_2 || (templateObject_2 = __makeTemplateObject(["\n height: 24px;\n width: 24px;\n"], ["\n height: 24px;\n width: 24px;\n"])));
33
- var Input = styled.input(templateObject_4 || (templateObject_4 = __makeTemplateObject(["\n ", ";\n width: 100%;\n\n /* Using this styling to prevent CSS conflict from clients importers */\n /* TODO: remove !important's when we start rendering importer through iframe */\n background-color: none !important;\n background: none !important;\n border: none !important;\n box-shadow: none !important;\n color: ", " !important;\n height: 20px !important;\n line-height: 20px !important;\n outline: none !important;\n padding: 1px 2px !important;\n\n ", ";\n"], ["\n ", ";\n width: 100%;\n\n /* Using this styling to prevent CSS conflict from clients importers */\n /* TODO: remove !important's when we start rendering importer through iframe */\n background-color: none !important;\n background: none !important;\n border: none !important;\n box-shadow: none !important;\n color: ", " !important;\n height: 20px !important;\n line-height: 20px !important;\n outline: none !important;\n padding: 1px 2px !important;\n\n ", ";\n"])), textStyles.body3, colors.gray700, function (_a) {
34
+ var Input = styled.input(templateObject_4 || (templateObject_4 = __makeTemplateObject(["\n ", ";\n width: 100%;\n\n background-color: none;\n background: none;\n border: none;\n box-shadow: none;\n color: ", ";\n height: 20px;\n line-height: 20px;\n outline: none;\n padding: 1px 2px;\n\n ", ";\n"], ["\n ", ";\n width: 100%;\n\n background-color: none;\n background: none;\n border: none;\n box-shadow: none;\n color: ", ";\n height: 20px;\n line-height: 20px;\n outline: none;\n padding: 1px 2px;\n\n ", ";\n"])), textStyles.body3, colors.gray700, function (_a) {
34
35
  var isOpen = _a.isOpen;
35
36
  return !isOpen && css(templateObject_3 || (templateObject_3 = __makeTemplateObject(["\n position: absolute;\n top: -9999px;\n "], ["\n position: absolute;\n top: -9999px;\n "])));
36
37
  });
@@ -39,6 +40,7 @@ var SearchInput = function (_a) {
39
40
  var _b = useDebounce(value, onChange, 300), _value = _b._value, set_Value = _b.set_Value;
40
41
  var inputRef = useRef(null);
41
42
  var _c = useState(false), isOpen = _c[0], setIsOpen = _c[1];
43
+ var t = useTranslation("review").t;
42
44
  var handleInputChange = function (_a) {
43
45
  var target = _a.target;
44
46
  set_Value(target.value);
@@ -57,7 +59,7 @@ var SearchInput = function (_a) {
57
59
  }
58
60
  }
59
61
  };
60
- return (_jsx(TooltipProvider, __assign({ tooltip: !isOpen ? "Search something" : "", placement: "right", flip: false, centered: true, "data-testid": testId }, { children: _jsxs(Wrapper, __assign({ isOpen: isOpen, onClick: handleWrapperClick }, { children: [_jsx(IconWrapper, { children: _jsx(SearchIcon, {}) }), _jsx(Input, { isOpen: isOpen, ref: inputRef, value: _value, onChange: handleInputChange, onBlur: handleInputOnBlur, type: "text", placeholder: "Search something..." })] })) })));
62
+ return (_jsx(TooltipProvider, __assign({ tooltip: !isOpen ? t("table_actions.search_rows.tooltip") : "", placement: "right", flip: false, centered: true, w: "auto", "data-testid": testId }, { children: _jsxs(Wrapper, __assign({ isOpen: isOpen, onClick: handleWrapperClick }, { children: [_jsx(IconWrapper, { children: _jsx(SearchIcon, {}) }), _jsx(Input, { isOpen: isOpen, ref: inputRef, value: _value, onChange: handleInputChange, onBlur: handleInputOnBlur, type: "text", placeholder: t("table_actions.search_rows.placeholder") })] })) })));
61
63
  };
62
64
  export var SearchRows = function (_a) {
63
65
  var _b = _a.testId, testId = _b === void 0 ? "ta-search-rows" : _b;
@@ -26,7 +26,8 @@ import { DeleteSelectedRows } from "./DeleteSelectedRows";
26
26
  import { SearchRows } from "./SearchRows";
27
27
  import { ExportData } from "./ExportData";
28
28
  import { ButtonActionsContainer, TableActionsContainer, TableActionsContent, } from "./TableActions.styles";
29
+ import { FilterByErrors } from "./FilterByErrors/FilterByErrors";
29
30
  export var TableActions = function (_a) {
30
31
  var _b = _a.tableActionsHeight, tableActionsHeight = _b === void 0 ? defaultTableActionsHeightPx : _b, props = __rest(_a, ["tableActionsHeight"]);
31
- return (_jsx(TableActionsContainer, __assign({ height: tableActionsHeight }, props, { children: _jsxs(TableActionsContent, { children: [_jsx(SearchRows, {}), _jsxs(ButtonActionsContainer, { children: [_jsx(DeleteSelectedRows, {}), _jsx(ExportData, {})] })] }) })));
32
+ return (_jsx(TableActionsContainer, __assign({ height: tableActionsHeight }, props, { children: _jsxs(TableActionsContent, { children: [_jsx(SearchRows, {}), _jsx(FilterByErrors, {}), _jsxs(ButtonActionsContainer, { children: [_jsx(DeleteSelectedRows, {}), _jsx(ExportData, {})] })] }) })));
32
33
  };
@@ -4,7 +4,7 @@ var __makeTemplateObject = (this && this.__makeTemplateObject) || function (cook
4
4
  };
5
5
  import styled from "styled-components";
6
6
  import { Div } from "../../../styled/utils";
7
- export var TableActionsContainer = styled(Div)(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n align-items: center;\n background: ", ";\n border-top: 1px solid ", ";\n display: flex;\n overflow: hidden;\n padding: 8px 32px;\n width: 100%;\n\n * {\n box-sizing: content-box;\n }\n"], ["\n align-items: center;\n background: ", ";\n border-top: 1px solid ", ";\n display: flex;\n overflow: hidden;\n padding: 8px 32px;\n width: 100%;\n\n * {\n box-sizing: content-box;\n }\n"])), function (_a) {
7
+ export var TableActionsContainer = styled(Div)(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n align-items: center;\n background: ", ";\n border-top: 1px solid ", ";\n display: flex;\n padding: 8px 32px;\n width: 100%;\n\n * {\n box-sizing: content-box;\n }\n"], ["\n align-items: center;\n background: ", ";\n border-top: 1px solid ", ";\n display: flex;\n padding: 8px 32px;\n width: 100%;\n\n * {\n box-sizing: content-box;\n }\n"])), function (_a) {
8
8
  var theme = _a.theme;
9
9
  return theme.colors.white;
10
10
  }, function (_a) {
@@ -0,0 +1,21 @@
1
+ /// <reference types="react" />
2
+ import { BatchValidationErrors, Field, RecordDataSet } from "../../../types";
3
+ interface UseTableActionsProps {
4
+ setDataSet: React.Dispatch<React.SetStateAction<RecordDataSet>>;
5
+ setErrors: React.Dispatch<React.SetStateAction<BatchValidationErrors>>;
6
+ setWarnings: React.Dispatch<React.SetStateAction<BatchValidationErrors>>;
7
+ }
8
+ export type DeleteRecords = (dataSet: RecordDataSet, selectedRecords: string[], errors: BatchValidationErrors, warnings: BatchValidationErrors) => void;
9
+ export type FilterRecordsBySearchValue = (obj: RecordDataSet, value: string, fields: Field[]) => RecordDataSet;
10
+ export type FilterRecordsByError = (obj: RecordDataSet, keyToFilter: string, errors: BatchValidationErrors, fields: Field[]) => RecordDataSet;
11
+ interface UseTableActionsProps {
12
+ setDataSet: React.Dispatch<React.SetStateAction<RecordDataSet>>;
13
+ setErrors: React.Dispatch<React.SetStateAction<BatchValidationErrors>>;
14
+ setWarnings: React.Dispatch<React.SetStateAction<BatchValidationErrors>>;
15
+ }
16
+ export declare const useTableActions: ({ setDataSet, setErrors, setWarnings, }: UseTableActionsProps) => {
17
+ deleteRecords: (dataSet: RecordDataSet, selectedRecords: string[], errors: BatchValidationErrors, warnings: BatchValidationErrors) => void;
18
+ filterRecordsBySearchValue: (obj: RecordDataSet, value: string, fields: Field[]) => RecordDataSet;
19
+ filterRecordsByError: (obj: RecordDataSet, keyToFilter: string, errors: BatchValidationErrors, fields: Field[]) => {};
20
+ };
21
+ export {};
@@ -0,0 +1,84 @@
1
+ import { addEmptyRows, recordListToDataSet } from "../../../Importer/data";
2
+ var removeItemsFromObject = function (obj, idsToRemove) {
3
+ var _a;
4
+ var idSet = new Set(idsToRemove);
5
+ var newObj = {};
6
+ for (var key in obj) {
7
+ if (Object.prototype.hasOwnProperty.call(obj, key)) {
8
+ var meta = (_a = obj[key]) === null || _a === void 0 ? void 0 : _a._meta;
9
+ if (meta && (meta === null || meta === void 0 ? void 0 : meta.id) && !(idSet === null || idSet === void 0 ? void 0 : idSet.has(meta === null || meta === void 0 ? void 0 : meta.id))) {
10
+ newObj[key] = obj[key];
11
+ }
12
+ }
13
+ }
14
+ return newObj;
15
+ };
16
+ var removeErrorsOrWarningsFromObject = function (obj, keysToRemove) {
17
+ var keysSet = new Set(keysToRemove);
18
+ var newObj = {};
19
+ for (var key in obj) {
20
+ if (Object.prototype.hasOwnProperty.call(obj, key) && !(keysSet === null || keysSet === void 0 ? void 0 : keysSet.has(key))) {
21
+ newObj[key] = obj[key];
22
+ }
23
+ }
24
+ return newObj;
25
+ };
26
+ var isObject = function (value) {
27
+ return typeof value === "object" && value !== null && !Array.isArray(value);
28
+ };
29
+ var includesSearchValue = function (value, searchValue) {
30
+ if (typeof value === "string" || typeof value === "number") {
31
+ var stringValue = String(value).toLowerCase();
32
+ var searchValueLower = searchValue.toLowerCase();
33
+ return stringValue.includes(searchValueLower);
34
+ }
35
+ return false;
36
+ };
37
+ export var useTableActions = function (_a) {
38
+ var setDataSet = _a.setDataSet, setErrors = _a.setErrors, setWarnings = _a.setWarnings;
39
+ //Delete record from dataSet and from validations
40
+ var deleteRecords = function (dataSet, selectedRecords, errors, warnings) {
41
+ var newDataSet = removeItemsFromObject(dataSet, selectedRecords);
42
+ var newErrors = removeErrorsOrWarningsFromObject(errors, selectedRecords);
43
+ var newWarnings = removeErrorsOrWarningsFromObject(warnings, selectedRecords);
44
+ setDataSet(newDataSet);
45
+ setErrors(newErrors);
46
+ setWarnings(newWarnings);
47
+ };
48
+ //Filter records by search value
49
+ var filterRecordsBySearchValue = function (obj, value, fields) {
50
+ var filteredObj = {};
51
+ for (var _i = 0, _a = Object.entries(obj); _i < _a.length; _i++) {
52
+ var _b = _a[_i], key = _b[0], currentObj = _b[1];
53
+ if (!isObject(currentObj)) {
54
+ continue;
55
+ }
56
+ var matches = Object.values(currentObj).some(function (propertyValue) {
57
+ return includesSearchValue(propertyValue, value);
58
+ });
59
+ if (matches) {
60
+ filteredObj[key] = currentObj;
61
+ }
62
+ }
63
+ // To ensure that rows are always displayed, even when the search query is empty,
64
+ // we return an empty record list when the search yields no results.
65
+ if (Object.keys(filteredObj).length === 0) {
66
+ return recordListToDataSet(addEmptyRows([], fields), fields);
67
+ }
68
+ return filteredObj;
69
+ };
70
+ //Filter records by selected column error
71
+ var filterRecordsByError = function (obj, keyToFilter, errors, fields) {
72
+ var filteredObj = {};
73
+ var filteredKeys = Object.keys(errors).filter(function (key) { var _a, _b; return ((_b = (_a = obj[key]) === null || _a === void 0 ? void 0 : _a._meta) === null || _b === void 0 ? void 0 : _b.isInvalid) && errors[key][keyToFilter]; });
74
+ for (var i = 0; i < filteredKeys.length; i++) {
75
+ filteredObj[filteredKeys[i]] = obj[filteredKeys[i]];
76
+ }
77
+ return filteredObj;
78
+ };
79
+ return {
80
+ deleteRecords: deleteRecords,
81
+ filterRecordsBySearchValue: filterRecordsBySearchValue,
82
+ filterRecordsByError: filterRecordsByError,
83
+ };
84
+ };
@@ -1,25 +1,23 @@
1
1
  import React from "react";
2
- import { TableViewProps } from ".";
3
2
  import { DivCSSProps } from "../../../styled/utils";
4
3
  import { SortDirection } from "../TableDataProvider";
4
+ import { TableViewProps } from "./types";
5
5
  type TableViewHeaderProps = {
6
6
  isLast: boolean;
7
- isSpreadsheetTable?: boolean;
8
7
  };
9
- export declare const TableViewHeader: import("styled-components").StyledComponent<"div", import("styled-components").DefaultTheme, import("../../../styled/utils").CSSProps & {
10
- isSpreadsheetTable?: boolean;
11
- } & TableViewHeaderProps, never>;
8
+ export declare const TableViewHeader: import("styled-components").StyledComponent<"div", import("styled-components").DefaultTheme, import("../../../styled/utils").CSSProps & TableViewHeaderProps, never>;
12
9
  type SortIndicatorProps = {
13
10
  direction: SortDirection;
14
11
  };
15
12
  export declare const SortIndicator: import("styled-components").StyledComponent<"div", import("styled-components").DefaultTheme, import("../../../styled/utils").CSSProps & SortIndicatorProps, never>;
16
13
  export declare const TableHeadersContainer: import("styled-components").StyledComponent<"div", import("styled-components").DefaultTheme, import("../../../styled/utils").CSSProps, never>;
17
14
  export declare const TableHeadersContent: import("styled-components").StyledComponent<"div", import("styled-components").DefaultTheme, import("../../../styled/utils").CSSProps, never>;
18
- type TableHeadersProps = Pick<TableViewProps, "columns" | "sortBy" | "setSortBy" | "rowHeight" | "rowWidth"> & {
15
+ type TableHeadersProps = Pick<TableViewProps, "columns" | "sortBy" | "setSortBy" | "rowHeight" | "rowWidthScalingFactor"> & {
19
16
  scrollLeft: number;
20
17
  height: number;
21
18
  containerRef: React.MutableRefObject<HTMLDivElement>;
22
- isSpreadsheetTable?: boolean;
19
+ containerWidth: number;
20
+ rowWidth: number;
23
21
  } & DivCSSProps;
24
- export declare const TableHeaders: ({ scrollLeft, columns, sortBy, rowHeight, containerRef, setSortBy, rowWidth, height, isSpreadsheetTable, ...props }: TableHeadersProps) => JSX.Element;
22
+ export declare const TableHeaders: ({ scrollLeft, columns, sortBy, rowHeight, containerRef, setSortBy, height, containerWidth, rowWidth, ...props }: TableHeadersProps) => JSX.Element;
25
23
  export {};
@@ -25,27 +25,22 @@ var __rest = (this && this.__rest) || function (s, e) {
25
25
  return t;
26
26
  };
27
27
  import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
28
+ import { useTranslation } from "react-i18next";
28
29
  import styled, { css } from "styled-components";
29
30
  import { Div } from "../../../styled/utils";
30
- import { chevronDown as chevronDownIcon } from "../icons";
31
31
  import { SortDirection } from "../TableDataProvider";
32
- import { columnWidthPercentage, defaultTableHeaderHeightPx, TableViewCellContainer, } from "./common";
33
- import { useTranslation } from "react-i18next";
34
- export var TableViewHeader = styled(TableViewCellContainer)(templateObject_3 || (templateObject_3 = __makeTemplateObject(["\n border-bottom: none;\n box-shadow: inset 0 -1px 0 ", ";\n background-color: ", ";\n ", ";\n color: ", ";\n ", "\n ", "\n"], ["\n border-bottom: none;\n box-shadow: inset 0 -1px 0 ", ";\n background-color: ", ";\n ", ";\n color: ", ";\n ", "\n ", "\n"])), function (p) { return p.theme.colors.gray300; }, function (p) { return p.theme.colors.tableHeader; }, function (p) { return p.theme.css.body2; }, function (p) { return p.theme.colors.text; }, function (p) {
35
- return p.isLast && css(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n border-right: solid 1px transparent !important;\n "], ["\n border-right: solid 1px transparent !important;\n "])));
36
- }, function (_a) {
37
- var isSpreadsheetTable = _a.isSpreadsheetTable;
38
- return isSpreadsheetTable && css(templateObject_2 || (templateObject_2 = __makeTemplateObject(["\n min-width: 200px;\n "], ["\n min-width: 200px;\n "])));
39
- });
40
- export var SortIndicator = styled(Div)(templateObject_5 || (templateObject_5 = __makeTemplateObject(["\n margin-left: 10px;\n margin-top: -4px;\n ", "\n svg {\n path {\n fill: ", ";\n }\n }\n"], ["\n margin-left: 10px;\n margin-top: -4px;\n ", "\n svg {\n path {\n fill: ", ";\n }\n }\n"])), function (p) {
41
- return p.direction === SortDirection.asc && css(templateObject_4 || (templateObject_4 = __makeTemplateObject(["\n margin-top: 3px;\n transform: rotate(180deg);\n "], ["\n margin-top: 3px;\n transform: rotate(180deg);\n "])));
32
+ import { chevronDown as chevronDownIcon } from "../icons";
33
+ import { TableViewCellContainer, defaultTableHeaderHeightPx, getColumnWidthsPx, } from "./common";
34
+ export var TableViewHeader = styled(TableViewCellContainer)(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n border-bottom: none;\n box-shadow: inset 0 -1px 0 ", ";\n background-color: ", ";\n ", ";\n color: ", ";\n"], ["\n border-bottom: none;\n box-shadow: inset 0 -1px 0 ", ";\n background-color: ", ";\n ", ";\n color: ", ";\n"])), function (p) { return p.theme.colors.gray300; }, function (p) { return p.theme.colors.tableHeader; }, function (p) { return p.theme.css.body2; }, function (p) { return p.theme.colors.text; });
35
+ export var SortIndicator = styled(Div)(templateObject_3 || (templateObject_3 = __makeTemplateObject(["\n margin-left: 10px;\n margin-top: -4px;\n ", "\n svg {\n path {\n fill: ", ";\n }\n }\n"], ["\n margin-left: 10px;\n margin-top: -4px;\n ", "\n svg {\n path {\n fill: ", ";\n }\n }\n"])), function (p) {
36
+ return p.direction === SortDirection.asc && css(templateObject_2 || (templateObject_2 = __makeTemplateObject(["\n margin-top: 3px;\n transform: rotate(180deg);\n "], ["\n margin-top: 3px;\n transform: rotate(180deg);\n "])));
42
37
  }, function (p) { return p.theme.colors.gray300; });
43
- export var TableHeadersContainer = styled(Div)(templateObject_6 || (templateObject_6 = __makeTemplateObject(["\n overflow-x: hidden;\n"], ["\n overflow-x: hidden;\n"])));
44
- export var TableHeadersContent = styled(Div)(templateObject_7 || (templateObject_7 = __makeTemplateObject([""], [""])));
38
+ export var TableHeadersContainer = styled(Div)(templateObject_4 || (templateObject_4 = __makeTemplateObject(["\n overflow-x: hidden;\n background-color: ", ";\n"], ["\n overflow-x: hidden;\n background-color: ", ";\n"])), function (p) { return p.theme.colors.tableHeader; });
39
+ export var TableHeadersContent = styled(Div)(templateObject_5 || (templateObject_5 = __makeTemplateObject(["\n /* We may add some padding-right here \n since TableHeadersContainer has overflow-x: hidden */\n /* Table header scrolling is controlled by the table content,\n we need to add some padding to cover the width of the vertical scrollbars that may \n be present in the table content. Scrollbars can vary between browsers and OSes,\n Assuming scrollbars won't be wider than 100px: */\n box-shadow: inset 0 -1px 0 ", ";\n padding-right: 100px;\n"], ["\n /* We may add some padding-right here \n since TableHeadersContainer has overflow-x: hidden */\n /* Table header scrolling is controlled by the table content,\n we need to add some padding to cover the width of the vertical scrollbars that may \n be present in the table content. Scrollbars can vary between browsers and OSes,\n Assuming scrollbars won't be wider than 100px: */\n box-shadow: inset 0 -1px 0 ", ";\n padding-right: 100px;\n"])), function (p) { return p.theme.colors.gray300; });
45
40
  export var TableHeaders = function (_a) {
46
- var _b = _a.scrollLeft, scrollLeft = _b === void 0 ? 0 : _b, columns = _a.columns, sortBy = _a.sortBy, rowHeight = _a.rowHeight, containerRef = _a.containerRef, setSortBy = _a.setSortBy, _c = _a.rowWidth, rowWidth = _c === void 0 ? 1 : _c, _d = _a.height, height = _d === void 0 ? defaultTableHeaderHeightPx : _d, isSpreadsheetTable = _a.isSpreadsheetTable, props = __rest(_a, ["scrollLeft", "columns", "sortBy", "rowHeight", "containerRef", "setSortBy", "rowWidth", "height", "isSpreadsheetTable"]);
41
+ var _b = _a.scrollLeft, scrollLeft = _b === void 0 ? 0 : _b, columns = _a.columns, sortBy = _a.sortBy, rowHeight = _a.rowHeight, containerRef = _a.containerRef, setSortBy = _a.setSortBy, _c = _a.height, height = _c === void 0 ? defaultTableHeaderHeightPx : _c, containerWidth = _a.containerWidth, rowWidth = _a.rowWidth, props = __rest(_a, ["scrollLeft", "columns", "sortBy", "rowHeight", "containerRef", "setSortBy", "height", "containerWidth", "rowWidth"]);
47
42
  var t = useTranslation().t;
48
- return (_jsx(TableHeadersContainer, __assign({ ref: containerRef }, { children: _jsx(TableHeadersContent, __assign({ dflex: true, w: "".concat(100 * rowWidth, "%") }, { children: columns.map(function (column, index) {
43
+ return (_jsx(TableHeadersContainer, __assign({ ref: containerRef, w: containerWidth }, { children: _jsx(TableHeadersContent, __assign({ dflex: true, w: rowWidth }, { children: columns.map(function (column, index) {
49
44
  var header = column.header, Header = column.Header;
50
45
  var onHeaderClick = function () {
51
46
  if (!setSortBy || column.disableSort)
@@ -65,7 +60,10 @@ export var TableHeaders = function (_a) {
65
60
  });
66
61
  }
67
62
  };
68
- return (_jsxs(TableViewHeader, __assign({ isLast: index === columns.length - 1, w: columnWidthPercentage(column, columns), onClick: onHeaderClick, h: height, isSpreadsheetTable: isSpreadsheetTable }, props, { children: [_jsx(_Fragment, { children: Header ? _jsx(Header, {}) : t(header) }), (sortBy === null || sortBy === void 0 ? void 0 : sortBy.field) === column.dataAccessor && (_jsx(SortIndicator, __assign({ direction: sortBy === null || sortBy === void 0 ? void 0 : sortBy.direction }, { children: chevronDownIcon })))] }), index));
63
+ var columnWidthPercentages = getColumnWidthsPx(columns, rowWidth);
64
+ var columnWidthPercentage = columnWidthPercentages[index];
65
+ var isLast = index === columns.length - 1;
66
+ return (_jsxs(TableViewHeader, __assign({ isLast: isLast, className: isLast ? "last-column" : "", w: columnWidthPercentage, onClick: onHeaderClick, h: height }, props, { children: [_jsx(_Fragment, { children: Header ? _jsx(Header, {}) : _jsx(Div, __assign({ truncateText: true }, { children: t(header) })) }), (sortBy === null || sortBy === void 0 ? void 0 : sortBy.field) === column.dataAccessor && (_jsx(SortIndicator, __assign({ direction: sortBy === null || sortBy === void 0 ? void 0 : sortBy.direction }, { children: chevronDownIcon })))] }), index));
69
67
  }) })) })));
70
68
  };
71
- var templateObject_1, templateObject_2, templateObject_3, templateObject_4, templateObject_5, templateObject_6, templateObject_7;
69
+ var templateObject_1, templateObject_2, templateObject_3, templateObject_4, templateObject_5;
@@ -1,19 +1,19 @@
1
1
  import React from "react";
2
- import { TableViewProps } from ".";
3
- import { DivCSSProps } from "../../../styled/utils";
2
+ import { TableViewProps } from "../types";
3
+ import { DivCSSProps } from "../../../../styled/utils";
4
4
  export declare const Cell: React.MemoExoticComponent<(props: any) => JSX.Element>;
5
5
  type TableViewRowProps = {
6
6
  isHighlighted: boolean;
7
7
  isLast: boolean;
8
8
  };
9
- export declare const TableViewRow: import("styled-components").StyledComponent<"div", import("styled-components").DefaultTheme, import("../../../styled/utils").CSSProps & TableViewRowProps, never>;
9
+ export declare const TableViewRow: import("styled-components").StyledComponent<"div", import("styled-components").DefaultTheme, import("../../../../styled/utils").CSSProps & TableViewRowProps, never>;
10
10
  type Props = Pick<TableViewProps, "columns" | "onRowClick" | "highlightFirstRow"> & {
11
11
  row: any;
12
+ rowWidth: number;
12
13
  indexI: number;
13
14
  isLast?: boolean;
14
15
  getItemKey?: (row: any) => string;
15
16
  isRowSelected?: boolean;
16
- isSpreadsheetTable?: boolean;
17
17
  } & DivCSSProps;
18
- export declare const TableRow: ({ row, indexI, columns, isLast, highlightFirstRow, onRowClick, getItemKey, isRowSelected, isSpreadsheetTable, ...props }: Props) => JSX.Element;
18
+ export declare const TableRow: ({ row, indexI, columns, isLast, highlightFirstRow, onRowClick, getItemKey, rowWidth, isRowSelected, ...props }: Props) => JSX.Element;
19
19
  export {};
@@ -28,11 +28,11 @@ import { jsx as _jsx } from "react/jsx-runtime";
28
28
  import React from "react";
29
29
  import { areEqual } from "react-window";
30
30
  import styled, { css } from "styled-components";
31
- import { Div } from "../../../styled/utils";
32
- import { columnWidthPercentage, TableViewCellContainer } from "./common";
31
+ import { Div } from "../../../../styled/utils";
32
+ import { getColumnWidthsPx, TableViewCellContainer } from "../common";
33
33
  export var Cell = React.memo(function (props) {
34
- var children = props.children, isSpreadsheetTable = props.isSpreadsheetTable, cellProps = __rest(props, ["children", "isSpreadsheetTable"]);
35
- return (_jsx(TableViewCellContainer, __assign({ isSpreadsheetTable: isSpreadsheetTable }, cellProps, { children: children })));
34
+ var children = props.children, cellProps = __rest(props, ["children"]);
35
+ return (_jsx(TableViewCellContainer, __assign({}, cellProps, { children: children })));
36
36
  }, areEqual);
37
37
  export var TableViewRow = styled(Div)(templateObject_3 || (templateObject_3 = __makeTemplateObject(["\n background-color: white;\n ", "\n ", "\n"], ["\n background-color: white;\n ", "\n ", "\n"])), function (p) {
38
38
  return !p.isLast && css(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n box-shadow: inset 0 -1px 0 ", ";\n "], ["\n box-shadow: inset 0 -1px 0 ", ";\n "])), function (p) { return p.theme.colors.gray300; });
@@ -40,15 +40,18 @@ export var TableViewRow = styled(Div)(templateObject_3 || (templateObject_3 = __
40
40
  return p.isHighlighted && css(templateObject_2 || (templateObject_2 = __makeTemplateObject(["\n background: ", ";\n box-shadow: inset 0 0 0 3px ", ";\n\n .input-content {\n background: transparent;\n border: none;\n box-shadow: none;\n\n &,\n input {\n color: ", ";\n }\n }\n "], ["\n background: ", ";\n box-shadow: inset 0 0 0 3px ", ";\n\n .input-content {\n background: transparent;\n border: none;\n box-shadow: none;\n\n &,\n input {\n color: ", ";\n }\n }\n "])), p.theme.colors.blue100, p.theme.colors.blue500, p.theme.colors.gray1000);
41
41
  });
42
42
  export var TableRow = function (_a) {
43
- var row = _a.row, indexI = _a.indexI, columns = _a.columns, isLast = _a.isLast, highlightFirstRow = _a.highlightFirstRow, onRowClick = _a.onRowClick, getItemKey = _a.getItemKey, _b = _a.isRowSelected, isRowSelected = _b === void 0 ? false : _b, isSpreadsheetTable = _a.isSpreadsheetTable, props = __rest(_a, ["row", "indexI", "columns", "isLast", "highlightFirstRow", "onRowClick", "getItemKey", "isRowSelected", "isSpreadsheetTable"]);
43
+ var row = _a.row, indexI = _a.indexI, columns = _a.columns, isLast = _a.isLast, highlightFirstRow = _a.highlightFirstRow, onRowClick = _a.onRowClick, getItemKey = _a.getItemKey, rowWidth = _a.rowWidth, _b = _a.isRowSelected, isRowSelected = _b === void 0 ? false : _b, props = __rest(_a, ["row", "indexI", "columns", "isLast", "highlightFirstRow", "onRowClick", "getItemKey", "rowWidth", "isRowSelected"]);
44
44
  var isHighlighted = (indexI === 0 && highlightFirstRow) || isRowSelected;
45
45
  return (_jsx(TableViewRow, __assign({ "data-test-id": "row-".concat(indexI), dflex: true }, { isHighlighted: isHighlighted, isLast: isLast }, props, { children: columns.map(function (column, indexJ) {
46
46
  var Content = column.Content;
47
47
  var key = getItemKey ? getItemKey(row) : "".concat(indexI);
48
48
  var resolvedKey = "column-".concat(indexJ, "-row-").concat(key);
49
+ var columnWidthPercentages = getColumnWidthsPx(columns, rowWidth);
50
+ var columnWidthPercentage = columnWidthPercentages[indexJ];
51
+ var isLastColumn = indexJ === columns.length - 1;
49
52
  return (_jsx(Cell, __assign({ row: row, onClick: onRowClick && !column.preventRowClick
50
53
  ? function () { return onRowClick(row); }
51
- : null, isSpreadsheetTable: isSpreadsheetTable, w: columnWidthPercentage(column, columns) }, { children: Content ? (_jsx(Content, __assign({}, row, { rowIndex: indexI }))) : (_jsx(Div, __assign({ truncateText: true }, { children: row[column.dataAccessor] || "-" }))) }), resolvedKey));
54
+ : null, isLast: isLastColumn, className: isLastColumn ? "last-column" : "", w: columnWidthPercentage }, { children: Content ? (_jsx(Content, __assign({}, row, { rowIndex: indexI }))) : (_jsx(Div, __assign({ truncateText: true }, { children: row[column.dataAccessor] || "-" }))) }), resolvedKey));
52
55
  }) })));
53
56
  };
54
57
  var templateObject_1, templateObject_2, templateObject_3;
@@ -0,0 +1,4 @@
1
+ import React from "react";
2
+ declare const Row: React.MemoExoticComponent<any>;
3
+ declare const DraggableRow: React.MemoExoticComponent<any>;
4
+ export { Row, DraggableRow };