fuse-importer 0.25.8 → 0.25.9

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 (34) hide show
  1. package/lib/esm/Importer/Review/ReviewWithContext.js +4 -1
  2. package/lib/esm/Importer/Uploader/HeadersPreview.js +4 -1
  3. package/lib/esm/Importer/common/GlobalStyle.js +1 -1
  4. package/lib/esm/Importer/common/Spreadsheet/SpreadsheetContextProvider.d.ts +1 -0
  5. package/lib/esm/Importer/common/Spreadsheet/SpreadsheetContextProvider.js +4 -5
  6. package/lib/esm/Importer/common/Spreadsheet/common/index.d.ts +3 -3
  7. package/lib/esm/Importer/common/Spreadsheet/common/index.js +1 -1
  8. package/lib/esm/Importer/common/Spreadsheet/components/SpreadsheetData.js +3 -2
  9. package/lib/esm/Importer/common/Spreadsheet/components/fields/SpeadsheetAutocomplete.js +1 -1
  10. package/lib/esm/Importer/common/Spreadsheet/components/fields/SpreadsheetInput.js +3 -3
  11. package/lib/esm/Importer/common/Spreadsheet/hooks.js +6 -0
  12. package/lib/esm/Importer/common/Spreadsheet/styles.d.ts +1 -1
  13. package/lib/esm/Importer/common/utils.js +1 -1
  14. package/lib/esm/common/Table/TableActions/SearchRows.js +1 -1
  15. package/lib/esm/common/Table/TableView/TableCells.js +2 -2
  16. package/lib/esm/common/Table/TableView/TableHeaders.d.ts +4 -4
  17. package/lib/esm/common/Table/TableView/TableHeaders.js +8 -11
  18. package/lib/esm/common/Table/TableView/TableRow.d.ts +2 -2
  19. package/lib/esm/common/Table/TableView/TableRow.js +4 -4
  20. package/lib/esm/common/Table/TableView/common.d.ts +1 -1
  21. package/lib/esm/common/Table/TableView/common.js +2 -5
  22. package/lib/esm/common/Table/TableView/index.d.ts +3 -3
  23. package/lib/esm/common/Table/TableView/index.js +34 -6
  24. package/lib/esm/common/inputs/TextInput.js +1 -1
  25. package/lib/esm/index.d.ts +6 -0
  26. package/lib/esm/index.js +75 -21
  27. package/lib/esm/styled/fontsURL.d.ts +9 -0
  28. package/lib/esm/styled/fontsURL.js +27 -0
  29. package/lib/esm/utils/hooks/useWindowSize.d.ts +11 -0
  30. package/lib/esm/utils/hooks/useWindowSize.js +23 -0
  31. package/lib/esm/utils/hooks.d.ts +1 -0
  32. package/lib/esm/utils/hooks.js +1 -0
  33. package/lib/main.js +5 -5
  34. package/package.json +1 -1
@@ -22,12 +22,15 @@ import { AppResponseModal } from "./AppResponseModal";
22
22
  import { useReviewContext } from "./ReviewContextProvider";
23
23
  import styled from "styled-components";
24
24
  import { useTranslation } from "react-i18next";
25
+ import useWindowDimensions from "../../utils/hooks/useWindowSize";
25
26
  var TitleContainer = styled(Div)(templateObject_1 || (templateObject_1 = __makeTemplateObject([""], [""])));
26
27
  var ReviewWithContext = function () {
27
28
  var _a = useReviewContext(), fields = _a.reviewFields, initialDataSet = _a.reviewInitialDataSet, options = _a.options, onValidateRecord = _a.onValidateRecord, onDataSetChanged = _a.onDataSetChanged, onValidationStateChanged = _a.onValidationStateChanged;
29
+ var isOnSmallScreens = useWindowDimensions().isOnSmallScreens;
28
30
  var _b = useImporterContext(), selectedRows = _b.selectedRows, setSelectedRows = _b.setSelectedRows, isUsingManualImport = _b.isUsingManualImport;
29
31
  var t = useTranslation("review").t;
30
- var spreadsheetUI = initialDataSet && (_jsx(Spreadsheet, { options: __assign(__assign({}, options), { showCheckboxColumn: true }), selectedRows: selectedRows, setSelectedRows: setSelectedRows, initialDataSet: initialDataSet, fields: fields, rowWidth: getSpreadsheetRowWidth(fields, 6), onDataSetChanged: onDataSetChanged, onValidateRecord: onValidateRecord, onValidationStateChanged: onValidationStateChanged }));
32
+ var rowWidth = getSpreadsheetRowWidth(fields, isOnSmallScreens ? 3 : 6);
33
+ var spreadsheetUI = initialDataSet && (_jsx(Spreadsheet, { options: __assign(__assign({}, options), { showCheckboxColumn: true }), selectedRows: selectedRows, setSelectedRows: setSelectedRows, initialDataSet: initialDataSet, fields: fields, rowWidth: rowWidth, onDataSetChanged: onDataSetChanged, onValidateRecord: onValidateRecord, onValidationStateChanged: onValidationStateChanged }));
31
34
  return (_jsxs(Div, __assign({ centered: true, flexColumn: true, h100: true }, { children: [_jsx(AppResponseModal, {}), _jsxs(Div, __assign({ w100: true, h100: true, flexColumn: true }, { children: [_jsx(TitleContainer, __assign({ flexColumn: true, ml: 32 }, { children: _jsx(Div, __assign({ h2: true, mt: 40, mb: 40 }, { children: t(isUsingManualImport.current ? "manual_importer_title" : "title") })) })), _jsx(Div, __assign({ h100: true, w100: true, justifyCenter: true }, { children: spreadsheetUI }))] }))] })));
32
35
  };
33
36
  export default ReviewWithContext;
@@ -22,13 +22,16 @@ import { HeaderButtons } from "./HeaderButtons";
22
22
  import { useImporterContext } from "../contexts/ImporterContextProvider";
23
23
  import { useTranslation } from "react-i18next";
24
24
  import styled from "styled-components";
25
+ import useWindowDimensions from "../../utils/hooks/useWindowSize";
25
26
  var HeaderContainer = styled(Div)(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n margin-left: 32px;\n\n @media (max-width: 1050px) {\n margin-left: 0px;\n\n > div:first-of-type {\n text-align: center;\n }\n\n div:last-of-type {\n margin-left: 0px;\n }\n }\n"], ["\n margin-left: 32px;\n\n @media (max-width: 1050px) {\n margin-left: 0px;\n\n > div:first-of-type {\n text-align: center;\n }\n\n div:last-of-type {\n margin-left: 0px;\n }\n }\n"])));
26
27
  var DescriptionAndButtons = styled(Div)(templateObject_2 || (templateObject_2 = __makeTemplateObject(["\n @media (max-width: 1050px) {\n flex-direction: column;\n gap: 16px;\n }\n"], ["\n @media (max-width: 1050px) {\n flex-direction: column;\n gap: 16px;\n }\n"])));
27
28
  var HeadersPreview = function () {
28
29
  var _a = useReviewContext(), fields = _a.previewFields, initialDataSet = _a.previewInitialDataSet;
30
+ var isOnSmallScreens = useWindowDimensions().isOnSmallScreens;
29
31
  var t = useTranslation("upload").t;
30
32
  var _b = useImporterContext(), selectedRows = _b.selectedRows, setSelectedRows = _b.setSelectedRows;
31
- return (_jsxs(Div, __assign({ flexColumn: true, h100: true }, { children: [_jsxs(HeaderContainer, { children: [_jsx(Div, __assign({ h2: true, mt: 40, mb: 16 }, { children: t("headers_preview.title") })), _jsxs(DescriptionAndButtons, __assign({ body1: true, mb: 24, alignCenter: true }, { children: [t("headers_preview.description"), _jsx(HeaderButtons, {})] }))] }), _jsx(Div, __assign({ w100: true, h100: true, justifyCenter: true }, { children: initialDataSet && (_jsx(Spreadsheet, { rowWidth: getSpreadsheetRowWidth(fields, 6), isReadOnly: true, initialDataSet: initialDataSet, fields: fields, highlightFirstRow: true, options: {
33
+ var rowWidth = getSpreadsheetRowWidth(fields, isOnSmallScreens ? 3 : 6);
34
+ return (_jsxs(Div, __assign({ flexColumn: true, h100: true }, { children: [_jsxs(HeaderContainer, { children: [_jsx(Div, __assign({ h2: true, mt: 40, mb: 16 }, { children: t("headers_preview.title") })), _jsxs(DescriptionAndButtons, __assign({ body1: true, mb: 24, alignCenter: true }, { children: [t("headers_preview.description"), _jsx(HeaderButtons, {})] }))] }), _jsx(Div, __assign({ w100: true, h100: true, justifyCenter: true }, { children: initialDataSet && (_jsx(Spreadsheet, { rowWidth: rowWidth, isReadOnly: true, initialDataSet: initialDataSet, fields: fields, highlightFirstRow: true, options: {
32
35
  showCheckboxColumn: true,
33
36
  firstRowIsHeader: true,
34
37
  }, selectedRows: selectedRows, setSelectedRows: setSelectedRows })) }))] })));
@@ -3,5 +3,5 @@ var __makeTemplateObject = (this && this.__makeTemplateObject) || function (cook
3
3
  return cooked;
4
4
  };
5
5
  import { createGlobalStyle } from "styled-components";
6
- export var GlobalStyle = createGlobalStyle(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n #fuse-importer-root > * {\n font-size: 17px;\n margin: 0;\n padding: 0;\n top: 0;\n left: 0;\n font-family: DM Sans;\n color-scheme: normal;\n color: black;\n }\n"], ["\n #fuse-importer-root > * {\n font-size: 17px;\n margin: 0;\n padding: 0;\n top: 0;\n left: 0;\n font-family: DM Sans;\n color-scheme: normal;\n color: black;\n }\n"])));
6
+ export var GlobalStyle = createGlobalStyle(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n #fuse-importer-root > *,\n body > * {\n font-size: 17px;\n margin: 0;\n padding: 0;\n top: 0;\n left: 0;\n font-family: DM Sans;\n color-scheme: normal;\n color: black;\n }\n"], ["\n #fuse-importer-root > *,\n body > * {\n font-size: 17px;\n margin: 0;\n padding: 0;\n top: 0;\n left: 0;\n font-family: DM Sans;\n color-scheme: normal;\n color: black;\n }\n"])));
7
7
  var templateObject_1;
@@ -26,6 +26,7 @@ type State = {
26
26
  setFilteredInputValue: React.Dispatch<React.SetStateAction<string>>;
27
27
  addNewRowsToSpreadsheet: () => void;
28
28
  checkboxColumnWidth: number;
29
+ isFiltering: boolean;
29
30
  } & ValidationState;
30
31
  type Props = {
31
32
  initialDataSet: RecordDataSet;
@@ -24,7 +24,6 @@ import { jsx as _jsx } from "react/jsx-runtime";
24
24
  import { get } from "lodash";
25
25
  import { createContext, useCallback, useContext, useEffect, useMemo, useRef, useState, } from "react";
26
26
  import { useValidationState } from "./hooks";
27
- import { addEmptyRows } from "../../../Importer/data";
28
27
  import { addMeta } from "../../../Importer/data";
29
28
  var SpreadsheetContext = createContext({});
30
29
  export var SpreadsheetContextProvider = function (_a) {
@@ -46,14 +45,14 @@ export var SpreadsheetContextProvider = function (_a) {
46
45
  setIsLoading: setIsLoading,
47
46
  onValidateRecord: onValidateRecord,
48
47
  }), errorsRef = _h.errorsRef, warningsRef = _h.warningsRef, updateRecordAndRevalidate = _h.updateRecordAndRevalidate, deleteRecords = _h.deleteRecords, filterRecordsBySearchValue = _h.filterRecordsBySearchValue, validationState = __rest(_h, ["errorsRef", "warningsRef", "updateRecordAndRevalidate", "deleteRecords", "filterRecordsBySearchValue"]);
49
- var addNewRowsToSpreadsheet = function () {
48
+ var addNewRowsToSpreadsheet = useCallback(function () {
50
49
  var highestRowIndex = Math.max.apply(Math, Object.values(dataSet).map(function (obj) { return obj._meta.rowIndex; }));
51
50
  var newRow = addMeta({}, highestRowIndex + 1);
52
51
  setDataSet(function (oldValues) {
53
52
  var _a;
54
53
  return (__assign(__assign({}, oldValues), (_a = {}, _a[newRow._meta.id] = newRow, _a)));
55
54
  });
56
- };
55
+ }, [dataSet]);
57
56
  // sort data based on errors (errors group on top and not errors group at bottom)
58
57
  var data = useMemo(function () {
59
58
  var filteredObj = filterRecordsBySearchValue(dataSet, filteredInputValue);
@@ -71,7 +70,7 @@ export var SpreadsheetContextProvider = function (_a) {
71
70
  return bHasErrors ? 1 : -1;
72
71
  });
73
72
  }, [dataSet, filteredInputValue, sortByFieldErrors, sortByFieldWarnings]);
74
- addEmptyRows(data, fields);
73
+ var isFiltering = useMemo(function () { return !!filteredInputValue; }, [filteredInputValue]);
75
74
  useEffect(function () {
76
75
  onDataSetChanged && onDataSetChanged(dataSet);
77
76
  var dataSetKeys = Object.keys(dataSet);
@@ -113,7 +112,7 @@ export var SpreadsheetContextProvider = function (_a) {
113
112
  var baseCheckboxColumnWidth = lastRowIndexLength * singleLetterWidth + horizontalSpacing;
114
113
  return baseCheckboxColumnWidth < 40 ? 40 : baseCheckboxColumnWidth;
115
114
  }, [data]);
116
- var value = __assign(__assign({ data: data, fields: fields, isLoading: isLoading }, validationState), { isReadOnly: isReadOnly, rowWidth: rowWidth, sortByFieldErrors: sortByFieldErrors, sortByFieldWarnings: sortByFieldWarnings, highlightFirstRow: highlightFirstRow, options: options, setIsLoading: setIsLoading, setSortByFieldErrors: handleSortByFieldErrors, setSortByFieldWarnings: handleSortByFieldWarnings, onValidateRecord: onValidateRecord, updateRecord: updateRecordAndRevalidate, selectedRows: selectedRows, setSelectedRows: setSelectedRows, deleteRecords: deleteRecords, filteredInputValue: filteredInputValue, setFilteredInputValue: setFilteredInputValue, lastClickedIndexRef: lastClickedIndexRef, addNewRowsToSpreadsheet: addNewRowsToSpreadsheet, checkboxColumnWidth: checkboxColumnWidth });
115
+ var value = __assign(__assign({ data: data, fields: fields, isLoading: isLoading }, validationState), { isReadOnly: isReadOnly, rowWidth: rowWidth, sortByFieldErrors: sortByFieldErrors, sortByFieldWarnings: sortByFieldWarnings, highlightFirstRow: highlightFirstRow, options: options, setIsLoading: setIsLoading, setSortByFieldErrors: handleSortByFieldErrors, setSortByFieldWarnings: handleSortByFieldWarnings, onValidateRecord: onValidateRecord, updateRecord: updateRecordAndRevalidate, selectedRows: selectedRows, setSelectedRows: setSelectedRows, deleteRecords: deleteRecords, filteredInputValue: filteredInputValue, setFilteredInputValue: setFilteredInputValue, lastClickedIndexRef: lastClickedIndexRef, addNewRowsToSpreadsheet: addNewRowsToSpreadsheet, checkboxColumnWidth: checkboxColumnWidth, isFiltering: isFiltering });
117
116
  return (_jsx(SpreadsheetContext.Provider, __assign({ value: value }, { children: children })));
118
117
  };
119
118
  export var useSpreadsheetContext = function () { return useContext(SpreadsheetContext); };
@@ -2,9 +2,9 @@ import { Record, Field, FieldTypes } from "../../../../types";
2
2
  export declare const spreadsheetRowHeightPx = 40;
3
3
  export declare const spreadsheetHeaderHeightPx = 40;
4
4
  export declare const isNullOrUndefined: (value: any) => boolean;
5
- export declare const isEmpty: (value: any) => boolean;
6
- export declare const isEmail: (value: any) => boolean;
7
- export declare const isUrl: (value: any) => boolean;
5
+ export declare const isEmpty: (value: string) => boolean;
6
+ export declare const isEmail: (value: string) => boolean;
7
+ export declare const isUrl: (value: string) => boolean;
8
8
  export declare const isTrue: (value: string) => boolean;
9
9
  export declare const isFalse: (value: string) => boolean;
10
10
  export declare const isBoolean: (value: string) => boolean;
@@ -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 = /^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$/;
14
+ var emailRegex = /^[\w+.-]+@([\w-]+\.)+[\w-]{2,4}$/;
15
15
  return emailRegex.test(value);
16
16
  };
17
17
  export var isUrl = function (value) {
@@ -37,7 +37,7 @@ import { TableActions } from "../../../../common/Table/TableActions";
37
37
  import { useImporterContext } from "../../../../Importer/contexts/ImporterContextProvider";
38
38
  var getItemKey = function (record) { return record._meta.id; };
39
39
  var SpreadsheetData = function () {
40
- 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, setSortByFieldWarnings = _a.setSortByFieldWarnings, selectedRows = _a.selectedRows, checkboxColumnWidth = _a.checkboxColumnWidth;
40
+ 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, setSortByFieldWarnings = _a.setSortByFieldWarnings, selectedRows = _a.selectedRows, checkboxColumnWidth = _a.checkboxColumnWidth, isFiltering = _a.isFiltering;
41
41
  var currentStepIndex = useImporterContext().currentStepIndex;
42
42
  var canShowCheckboxOnCheckboxRowHover = currentStepIndex === 2;
43
43
  var rowNumbersGridRef = useRef();
@@ -83,6 +83,7 @@ var SpreadsheetData = function () {
83
83
  });
84
84
  }, [dataLength]);
85
85
  var showValidationProgress = !isReadOnly && validationPercentage < 100;
86
- return (_jsxs(S.SpreadSheetData, __assign({ h100: true, flexColumn: true }, { children: [_jsx(GlobalStyle, {}), showValidationProgress && (_jsx(Div, __assign({ h: 32 }, { children: _jsx(ValidationProgress, { totalErrors: totalErrors, validationPercentage: validationPercentage }) }))), _jsxs(S.SpreadSheetContainer, __assign({ flexColumn: true, w100: true, h100: true }, { children: [_jsx(Div, __assign({ w100: true, justifyCenter: true }, { children: currentStepIndex === 2 && _jsx(TableActions, {}) })), _jsxs(S.SpreadSheetWrapper, __assign({ canShowCheckboxOnHover: !showValidationProgress && canShowCheckboxOnCheckboxRowHover, shouldShowOnlyCheckbox: !showValidationProgress && selectedRows.length > 0, dflex: true, h100: true }, { children: [(options === null || options === void 0 ? void 0 : options.showCheckboxColumn) && (_jsx(SpreadsheetRowCheckboxes, { gridRef: rowCheckboxesGridRef, spreadsheetHasXScroll: rowWidth > 1, height: spreadsheetHeight, firstRowIsHeader: options === null || options === void 0 ? void 0 : options.firstRowIsHeader, isLoadingData: showValidationProgress })), _jsx(S.TableView, { tableHeadersHeight: spreadsheetHeaderHeightPx, highlightFirstRow: isReadOnly, rowHeight: spreadsheetRowHeightPx, h: spreadsheetHeight, rowWidth: rowWidth, data: data, columns: columns, isLoading: isLoading, onTableScroll: onTableScroll, getItemKey: getItemKey, isInsideImporter: true, checkboxColumnWidth: checkboxColumnWidth })] }))] }))] })));
86
+ var isReviewStep = currentStepIndex === 2;
87
+ return (_jsxs(S.SpreadSheetData, __assign({ h100: true, flexColumn: true }, { children: [_jsx(GlobalStyle, {}), showValidationProgress && (_jsx(Div, __assign({ h: 32 }, { children: _jsx(ValidationProgress, { totalErrors: totalErrors, validationPercentage: validationPercentage }) }))), _jsxs(S.SpreadSheetContainer, __assign({ flexColumn: true, w100: true, h100: true }, { children: [_jsx(Div, __assign({ w100: true, justifyCenter: true }, { children: isReviewStep && _jsx(TableActions, {}) })), _jsxs(S.SpreadSheetWrapper, __assign({ canShowCheckboxOnHover: !showValidationProgress && canShowCheckboxOnCheckboxRowHover, shouldShowOnlyCheckbox: !showValidationProgress && selectedRows.length > 0, dflex: true, h100: true }, { children: [(options === null || options === void 0 ? void 0 : options.showCheckboxColumn) && (_jsx(SpreadsheetRowCheckboxes, { gridRef: rowCheckboxesGridRef, spreadsheetHasXScroll: rowWidth > 1, height: spreadsheetHeight, firstRowIsHeader: options === null || options === void 0 ? void 0 : options.firstRowIsHeader, isLoadingData: showValidationProgress })), _jsx(S.TableView, { tableHeadersHeight: spreadsheetHeaderHeightPx, highlightFirstRow: isReadOnly, rowHeight: spreadsheetRowHeightPx, h: spreadsheetHeight, rowWidth: rowWidth, data: data, columns: columns, isLoading: isLoading, onTableScroll: onTableScroll, getItemKey: getItemKey, shouldHaveCustomScrollbar: true, checkboxColumnWidth: checkboxColumnWidth, isFiltering: isFiltering })] }))] }))] })));
87
88
  };
88
89
  export default React.memo(SpreadsheetData, areEqual);
@@ -20,7 +20,7 @@ import { Autocomplete as AutocompleteBase, } from "../../../../../common/inputs/
20
20
  import { SelectMenuDiv, SelectMenuScrollArea, } from "../../../../../common/inputs/SelectMenu";
21
21
  import { HTMLInput, TextInputIcon, } from "../../../../../common/inputs/TextInput";
22
22
  import { spreadsheetRowHeightPx } from "../../common";
23
- var Autocomplete = styled(AutocompleteBase)(templateObject_5 || (templateObject_5 = __makeTemplateObject(["\n ", " {\n border: none !important;\n border-radius: 0;\n margin: 0;\n background: transparent;\n /* TODO: remove !important's when we start rendering importer through iframe */\n height: ", "px !important;\n padding: 0 12px !important;\n\n ", "\n\n ::placeholder {\n ", "\n\n ", "\n\n ::placeholder {\n ", "\n }\n }\n\n /* TODO: remove !important's when we start rendering importer through iframe */\n :focus {\n border: none !important;\n box-shadow: none !important;\n }\n\n :hover {\n background: transparent !important;\n }\n }\n ", " {\n right: 6px;\n }\n ", " {\n border-radius: 7px;\n }\n ", " {\n padding: 4px;\n }\n"], ["\n ", " {\n border: none !important;\n border-radius: 0;\n margin: 0;\n background: transparent;\n /* TODO: remove !important's when we start rendering importer through iframe */\n height: ", "px !important;\n padding: 0 12px !important;\n\n ", "\n\n ::placeholder {\n ", "\n\n ", "\n\n ::placeholder {\n ", "\n }\n }\n\n /* TODO: remove !important's when we start rendering importer through iframe */\n :focus {\n border: none !important;\n box-shadow: none !important;\n }\n\n :hover {\n background: transparent !important;\n }\n }\n ", " {\n right: 6px;\n }\n ", " {\n border-radius: 7px;\n }\n ", " {\n padding: 4px;\n }\n"])), HTMLInput, spreadsheetRowHeightPx - 5, function (p) {
23
+ var Autocomplete = styled(AutocompleteBase)(templateObject_5 || (templateObject_5 = __makeTemplateObject(["\n ", " {\n border: none;\n border-radius: 0;\n margin: 0;\n background: transparent;\n height: ", "px;\n padding: 0 12px;\n\n ", "\n\n ::placeholder {\n ", "\n\n ", "\n\n ::placeholder {\n ", "\n }\n }\n\n :focus {\n border: none;\n box-shadow: none;\n }\n\n :hover {\n background: transparent;\n }\n }\n ", " {\n right: 6px;\n }\n ", " {\n border-radius: 7px;\n }\n ", " {\n padding: 4px;\n }\n"], ["\n ", " {\n border: none;\n border-radius: 0;\n margin: 0;\n background: transparent;\n height: ", "px;\n padding: 0 12px;\n\n ", "\n\n ::placeholder {\n ", "\n\n ", "\n\n ::placeholder {\n ", "\n }\n }\n\n :focus {\n border: none;\n box-shadow: none;\n }\n\n :hover {\n background: transparent;\n }\n }\n ", " {\n right: 6px;\n }\n ", " {\n border-radius: 7px;\n }\n ", " {\n padding: 4px;\n }\n"])), HTMLInput, spreadsheetRowHeightPx - 5, function (p) {
24
24
  return p.hasWarning && css(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n color: ", ";\n "], ["\n color: ", ";\n "])), function (p) { return p.theme.colors.orange1200; });
25
25
  }, function (p) {
26
26
  return p.hasWarning && css(templateObject_2 || (templateObject_2 = __makeTemplateObject(["\n color: ", ";\n "], ["\n color: ", ";\n "])), function (p) { return p.theme.colors.orange1200; });
@@ -35,9 +35,9 @@ export var SpreadsheetInput = function (_a) {
35
35
  return setValue(value);
36
36
  } }, props)) })));
37
37
  };
38
- export var Input = styled.input(templateObject_3 || (templateObject_3 = __makeTemplateObject(["\n /* Using this styling to prevent CSS conflict from clients importers */\n /* TODO: remove !important's when we start rendering importer through iframe */\n\n background: transparent !important;\n border: none !important;\n box-shadow: none !important;\n box-sizing: border-box !important;\n height: calc(100% - 2px) !important;\n margin: 0px !important;\n outline: none !important;\n width: 100% !important;\n\n ::-webkit-outer-spin-button,\n ::-webkit-inner-spin-button {\n -webkit-appearance: none;\n margin: 0;\n }\n /* Firefox */\n -moz-appearance: textfield;\n\n padding: 0 12px !important;\n ", ";\n color: ", " !important;\n ::placeholder {\n color: ", " !important;\n }\n\n ", "\n\n ", "\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\n background: transparent !important;\n border: none !important;\n box-shadow: none !important;\n box-sizing: border-box !important;\n height: calc(100% - 2px) !important;\n margin: 0px !important;\n outline: none !important;\n width: 100% !important;\n\n ::-webkit-outer-spin-button,\n ::-webkit-inner-spin-button {\n -webkit-appearance: none;\n margin: 0;\n }\n /* Firefox */\n -moz-appearance: textfield;\n\n padding: 0 12px !important;\n ", ";\n color: ", " !important;\n ::placeholder {\n color: ", " !important;\n }\n\n ", "\n\n ", "\n"])), function (props) { return props.theme.css.body1; }, function (props) { return props.theme.colors.gray1000; }, function (props) { return props.theme.colors.placeholder; }, function (p) {
39
- return p.hasWarning && css(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n color: ", " !important;\n "], ["\n color: ", " !important;\n "])), function (p) { return p.theme.colors.orange1200; });
38
+ export var Input = styled.input(templateObject_3 || (templateObject_3 = __makeTemplateObject(["\n background: transparent;\n border: none;\n box-shadow: none;\n box-sizing: border-box;\n height: calc(100% - 2px);\n margin: 0px;\n outline: none;\n width: 100%;\n\n ::-webkit-outer-spin-button,\n ::-webkit-inner-spin-button {\n -webkit-appearance: none;\n margin: 0;\n }\n /* Firefox */\n -moz-appearance: textfield;\n\n padding: 0 12px;\n ", ";\n color: ", ";\n ::placeholder {\n color: ", ";\n }\n\n ", "\n\n ", "\n"], ["\n background: transparent;\n border: none;\n box-shadow: none;\n box-sizing: border-box;\n height: calc(100% - 2px);\n margin: 0px;\n outline: none;\n width: 100%;\n\n ::-webkit-outer-spin-button,\n ::-webkit-inner-spin-button {\n -webkit-appearance: none;\n margin: 0;\n }\n /* Firefox */\n -moz-appearance: textfield;\n\n padding: 0 12px;\n ", ";\n color: ", ";\n ::placeholder {\n color: ", ";\n }\n\n ", "\n\n ", "\n"])), function (props) { return props.theme.css.body1; }, function (props) { return props.theme.colors.gray1000; }, function (props) { return props.theme.colors.placeholder; }, function (p) {
39
+ return p.hasWarning && css(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n color: ", ";\n "], ["\n color: ", ";\n "])), function (p) { return p.theme.colors.orange1200; });
40
40
  }, function (p) {
41
- return p.hasError && css(templateObject_2 || (templateObject_2 = __makeTemplateObject(["\n color: ", " !important;\n "], ["\n color: ", " !important;\n "])), function (p) { return p.theme.colors.error; });
41
+ return p.hasError && css(templateObject_2 || (templateObject_2 = __makeTemplateObject(["\n color: ", ";\n "], ["\n color: ", ";\n "])), function (p) { return p.theme.colors.error; });
42
42
  });
43
43
  var templateObject_1, templateObject_2, templateObject_3;
@@ -49,6 +49,7 @@ import { omit, set } from "lodash";
49
49
  import { useCallback, useEffect, useMemo, useRef, useState, } from "react";
50
50
  import { sleep } from "../../..";
51
51
  import { selectValidatorsFor, validateRecord } from "./validation";
52
+ import { addEmptyRows, recordListToDataSet } from "../../../Importer/data";
52
53
  var checkIfHasErrors = function (errors) {
53
54
  return errors && Object.keys(errors).length > 0;
54
55
  };
@@ -120,6 +121,11 @@ export var useValidationState = function (_a) {
120
121
  }
121
122
  }
122
123
  }
124
+ // To ensure that rows are always displayed, even when the search query is empty,
125
+ // we return an empty record list when the search yields no results.
126
+ if (Object.keys(filteredObj).length === 0) {
127
+ return recordListToDataSet(addEmptyRows([], fields), fields);
128
+ }
123
129
  return filteredObj;
124
130
  };
125
131
  //Validate record and update dataSet
@@ -6,5 +6,5 @@ interface SpreadSheetWrapperProps {
6
6
  export declare const SpreadSheetData: import("styled-components").StyledComponent<"div", import("styled-components").DefaultTheme, import("../../../styled/utils").CSSProps, never>;
7
7
  export declare const SpreadSheetWrapper: import("styled-components").StyledComponent<"div", import("styled-components").DefaultTheme, import("../../../styled/utils").CSSProps & SpreadSheetWrapperProps, never>;
8
8
  export declare const SpreadSheetContainer: import("styled-components").StyledComponent<"div", import("styled-components").DefaultTheme, import("../../../styled/utils").CSSProps, never>;
9
- export declare const TableView: import("styled-components").StyledComponent<import("react").MemoExoticComponent<({ data, columns, pageSize, onRowClick, sortBy, isLoading, highlightFirstRow, setSortBy, rowWidth, onSectionRendered, tableHeadersHeight, rowHeight, h, onTableScroll, getItemKey, shouldBeDraggable, isInsideImporter, checkboxColumnWidth, ...props }: import("../../../common/Table/TableView").TableViewProps) => JSX.Element>, import("styled-components").DefaultTheme, {}, never>;
9
+ export declare const TableView: import("styled-components").StyledComponent<import("react").MemoExoticComponent<({ data, columns, pageSize, onRowClick, sortBy, isLoading, highlightFirstRow, setSortBy, rowWidth, onSectionRendered, tableHeadersHeight, rowHeight, h, onTableScroll, getItemKey, shouldBeDraggable, shouldHaveCustomScrollbar, checkboxColumnWidth, isFiltering, ...props }: import("../../../common/Table/TableView").TableViewProps) => JSX.Element>, import("styled-components").DefaultTheme, {}, never>;
10
10
  export {};
@@ -36,7 +36,7 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
36
36
  };
37
37
  import axios from "axios";
38
38
  export var getSpreadsheetRowWidth = function (fields, visibleRowsOnTableViewport) {
39
- var res = fields.length / visibleRowsOnTableViewport;
39
+ var res = Math.ceil(fields.length / visibleRowsOnTableViewport);
40
40
  return res > 1 ? res : 1;
41
41
  };
42
42
  export var getColumnType = function (_a) {
@@ -30,7 +30,7 @@ var Wrapper = styled.div(templateObject_1 || (templateObject_1 = __makeTemplateO
30
30
  return (isOpen ? "332px" : "24px");
31
31
  });
32
32
  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) {
33
+ 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
34
  var isOpen = _a.isOpen;
35
35
  return !isOpen && css(templateObject_3 || (templateObject_3 = __makeTemplateObject(["\n position: absolute;\n top: -9999px;\n "], ["\n position: absolute;\n top: -9999px;\n "])));
36
36
  });
@@ -20,11 +20,11 @@ import { useSpreadsheetContext } from "../../../Importer";
20
20
  var Cell = React.memo(function (_a) {
21
21
  var _b;
22
22
  var data = _a.data, rowIndex = _a.rowIndex, style = _a.style;
23
- var items = data.items, onRowClick = data.onRowClick, columns = data.columns, highlightFirstRow = data.highlightFirstRow, rowHeight = data.rowHeight, getItemKey = data.getItemKey, isSpreadsheetTable = data.isSpreadsheetTable;
23
+ var items = data.items, onRowClick = data.onRowClick, columns = data.columns, highlightFirstRow = data.highlightFirstRow, rowHeight = data.rowHeight, getItemKey = data.getItemKey, shouldHaveCustomScrollbar = data.shouldHaveCustomScrollbar;
24
24
  var item = items[rowIndex];
25
25
  var selectedRows = useSpreadsheetContext().selectedRows;
26
26
  var isRowSelected = selectedRows === null || selectedRows === void 0 ? void 0 : selectedRows.includes((_b = item === null || item === void 0 ? void 0 : item._meta) === null || _b === void 0 ? void 0 : _b.id);
27
- return (_jsx(Div, __assign({ style: style }, { children: _jsx(TableRow, { columns: columns, onRowClick: onRowClick, highlightFirstRow: highlightFirstRow, h: rowHeight, row: item, indexI: rowIndex, isLast: rowIndex === items.length - 1, pRelative: true, getItemKey: getItemKey, isRowSelected: isRowSelected || false, isSpreadsheetTable: isSpreadsheetTable }) })));
27
+ return (_jsx(Div, __assign({ style: style }, { children: _jsx(TableRow, { columns: columns, onRowClick: onRowClick, highlightFirstRow: highlightFirstRow, h: rowHeight, row: item, indexI: rowIndex, isLast: rowIndex === items.length - 1, pRelative: true, getItemKey: getItemKey, isRowSelected: isRowSelected || false, shouldHaveCustomScrollbar: shouldHaveCustomScrollbar }) })));
28
28
  }, areEqual);
29
29
  var DraggableCell = React.memo(function (_a) {
30
30
  var data = _a.data, rowIndex = _a.rowIndex, baseStyle = _a.style;
@@ -4,10 +4,10 @@ import { DivCSSProps } from "../../../styled/utils";
4
4
  import { SortDirection } from "../TableDataProvider";
5
5
  type TableViewHeaderProps = {
6
6
  isLast: boolean;
7
- isSpreadsheetTable?: boolean;
7
+ shouldHaveCustomScrollbar?: boolean;
8
8
  };
9
9
  export declare const TableViewHeader: import("styled-components").StyledComponent<"div", import("styled-components").DefaultTheme, import("../../../styled/utils").CSSProps & {
10
- isSpreadsheetTable?: boolean;
10
+ shouldHaveCustomScrollbar?: boolean;
11
11
  } & TableViewHeaderProps, never>;
12
12
  type SortIndicatorProps = {
13
13
  direction: SortDirection;
@@ -19,7 +19,7 @@ type TableHeadersProps = Pick<TableViewProps, "columns" | "sortBy" | "setSortBy"
19
19
  scrollLeft: number;
20
20
  height: number;
21
21
  containerRef: React.MutableRefObject<HTMLDivElement>;
22
- isSpreadsheetTable?: boolean;
22
+ shouldHaveCustomScrollbar?: boolean;
23
23
  } & DivCSSProps;
24
- export declare const TableHeaders: ({ scrollLeft, columns, sortBy, rowHeight, containerRef, setSortBy, rowWidth, height, isSpreadsheetTable, ...props }: TableHeadersProps) => JSX.Element;
24
+ export declare const TableHeaders: ({ scrollLeft, columns, sortBy, rowHeight, containerRef, setSortBy, rowWidth, height, shouldHaveCustomScrollbar, ...props }: TableHeadersProps) => JSX.Element;
25
25
  export {};
@@ -31,19 +31,16 @@ import { chevronDown as chevronDownIcon } from "../icons";
31
31
  import { SortDirection } from "../TableDataProvider";
32
32
  import { columnWidthPercentage, defaultTableHeaderHeightPx, TableViewCellContainer, } from "./common";
33
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) {
34
+ export var TableViewHeader = styled(TableViewCellContainer)(templateObject_2 || (templateObject_2 = __makeTemplateObject(["\n border-bottom: none;\n box-shadow: inset 0 -1px 0 ", ";\n background-color: ", ";\n ", ";\n color: ", ";\n ", "\n"], ["\n border-bottom: none;\n box-shadow: inset 0 -1px 0 ", ";\n background-color: ", ";\n ", ";\n color: ", ";\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
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
36
  });
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 "])));
37
+ export var SortIndicator = styled(Div)(templateObject_4 || (templateObject_4 = __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) {
38
+ return p.direction === SortDirection.asc && css(templateObject_3 || (templateObject_3 = __makeTemplateObject(["\n margin-top: 3px;\n transform: rotate(180deg);\n "], ["\n margin-top: 3px;\n transform: rotate(180deg);\n "])));
42
39
  }, 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([""], [""])));
40
+ export var TableHeadersContainer = styled(Div)(templateObject_5 || (templateObject_5 = __makeTemplateObject(["\n overflow-x: hidden;\n"], ["\n overflow-x: hidden;\n"])));
41
+ export var TableHeadersContent = styled(Div)(templateObject_6 || (templateObject_6 = __makeTemplateObject([""], [""])));
45
42
  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"]);
43
+ 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, shouldHaveCustomScrollbar = _a.shouldHaveCustomScrollbar, props = __rest(_a, ["scrollLeft", "columns", "sortBy", "rowHeight", "containerRef", "setSortBy", "rowWidth", "height", "shouldHaveCustomScrollbar"]);
47
44
  var t = useTranslation().t;
48
45
  return (_jsx(TableHeadersContainer, __assign({ ref: containerRef }, { children: _jsx(TableHeadersContent, __assign({ dflex: true, w: "".concat(100 * rowWidth, "%") }, { children: columns.map(function (column, index) {
49
46
  var header = column.header, Header = column.Header;
@@ -65,7 +62,7 @@ export var TableHeaders = function (_a) {
65
62
  });
66
63
  }
67
64
  };
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));
65
+ return (_jsxs(TableViewHeader, __assign({ isLast: index === columns.length - 1, w: columnWidthPercentage(column, columns), onClick: onHeaderClick, h: height, shouldHaveCustomScrollbar: shouldHaveCustomScrollbar }, 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));
69
66
  }) })) })));
70
67
  };
71
- var templateObject_1, templateObject_2, templateObject_3, templateObject_4, templateObject_5, templateObject_6, templateObject_7;
68
+ var templateObject_1, templateObject_2, templateObject_3, templateObject_4, templateObject_5, templateObject_6;
@@ -13,7 +13,7 @@ type Props = Pick<TableViewProps, "columns" | "onRowClick" | "highlightFirstRow"
13
13
  isLast?: boolean;
14
14
  getItemKey?: (row: any) => string;
15
15
  isRowSelected?: boolean;
16
- isSpreadsheetTable?: boolean;
16
+ shouldHaveCustomScrollbar?: 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, isRowSelected, shouldHaveCustomScrollbar, ...props }: Props) => JSX.Element;
19
19
  export {};
@@ -31,8 +31,8 @@ import styled, { css } from "styled-components";
31
31
  import { Div } from "../../../styled/utils";
32
32
  import { columnWidthPercentage, 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, shouldHaveCustomScrollbar = props.shouldHaveCustomScrollbar, cellProps = __rest(props, ["children", "shouldHaveCustomScrollbar"]);
35
+ return (_jsx(TableViewCellContainer, __assign({ shouldHaveCustomScrollbar: shouldHaveCustomScrollbar }, 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,7 +40,7 @@ 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, _b = _a.isRowSelected, isRowSelected = _b === void 0 ? false : _b, shouldHaveCustomScrollbar = _a.shouldHaveCustomScrollbar, props = __rest(_a, ["row", "indexI", "columns", "isLast", "highlightFirstRow", "onRowClick", "getItemKey", "isRowSelected", "shouldHaveCustomScrollbar"]);
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;
@@ -48,7 +48,7 @@ export var TableRow = function (_a) {
48
48
  var resolvedKey = "column-".concat(indexJ, "-row-").concat(key);
49
49
  return (_jsx(Cell, __assign({ row: row, onClick: onRowClick && !column.preventRowClick
50
50
  ? 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));
51
+ : null, shouldHaveCustomScrollbar: shouldHaveCustomScrollbar, w: columnWidthPercentage(column, columns) }, { children: Content ? (_jsx(Content, __assign({}, row, { rowIndex: indexI }))) : (_jsx(Div, __assign({ truncateText: true }, { children: row[column.dataAccessor] || "-" }))) }), resolvedKey));
52
52
  }) })));
53
53
  };
54
54
  var templateObject_1, templateObject_2, templateObject_3;
@@ -2,7 +2,7 @@ import { TableViewColumn } from ".";
2
2
  export declare const defaultTableRowHeightPx = 60;
3
3
  export declare const defaultTableHeaderHeightPx = 60;
4
4
  type TableViewCellContainerProps = {
5
- isSpreadsheetTable?: boolean;
5
+ shouldHaveCustomScrollbar?: boolean;
6
6
  };
7
7
  export declare const columnWidthPercentage: (column: TableViewColumn, columns: TableViewColumn[]) => string;
8
8
  export declare const TableViewCellContainer: import("styled-components").StyledComponent<"div", import("styled-components").DefaultTheme, import("../../../styled/utils").CSSProps & TableViewCellContainerProps, never>;
@@ -14,14 +14,11 @@ export var columnWidthPercentage = function (column, columns) {
14
14
  ? "".concat((column.width || 1 / totalColumnWidthCount) * 100, "%")
15
15
  : "0%";
16
16
  };
17
- export var TableViewCellContainer = styled(Div)(templateObject_3 || (templateObject_3 = __makeTemplateObject(["\n display: flex;\n padding-left: 16px;\n align-items: center;\n color: ", ";\n\n ", "\n ", ";\n ", "\n"], ["\n display: flex;\n padding-left: 16px;\n align-items: center;\n color: ", ";\n\n ", "\n ", ";\n ", "\n"])), function (p) { return p.theme.colors.textPrim; }, function (_a) {
17
+ export var TableViewCellContainer = styled(Div)(templateObject_2 || (templateObject_2 = __makeTemplateObject(["\n display: flex;\n padding-left: 16px;\n align-items: center;\n color: ", ";\n\n ", "\n ", ";\n"], ["\n display: flex;\n padding-left: 16px;\n align-items: center;\n color: ", ";\n\n ", "\n ", ";\n"])), function (p) { return p.theme.colors.textPrim; }, function (_a) {
18
18
  var onClick = _a.onClick;
19
19
  return onClick && css(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n :hover {\n cursor: pointer;\n }\n "], ["\n :hover {\n cursor: pointer;\n }\n "])));
20
20
  }, function (_a) {
21
21
  var theme = _a.theme;
22
22
  return theme.css.body3;
23
- }, function (_a) {
24
- var isSpreadsheetTable = _a.isSpreadsheetTable;
25
- return isSpreadsheetTable && css(templateObject_2 || (templateObject_2 = __makeTemplateObject(["\n min-width: 200px;\n "], ["\n min-width: 200px;\n "])));
26
23
  });
27
- var templateObject_1, templateObject_2, templateObject_3;
24
+ var templateObject_1, templateObject_2;
@@ -39,8 +39,8 @@ export type TableViewProps = {
39
39
  onRowClick?: (row: any) => void;
40
40
  getItemKey?: (row: any) => string;
41
41
  shouldBeDraggable?: boolean;
42
- isInsideImporter?: boolean;
43
42
  checkboxColumnWidth?: number;
44
- isSpreadsheetTable?: boolean;
43
+ shouldHaveCustomScrollbar?: boolean;
44
+ isFiltering?: boolean;
45
45
  } & DivCSSProps;
46
- export declare const TableView: React.MemoExoticComponent<({ data, columns, pageSize, onRowClick, sortBy, isLoading, highlightFirstRow, setSortBy, rowWidth, onSectionRendered, tableHeadersHeight, rowHeight, h, onTableScroll, getItemKey, shouldBeDraggable, isInsideImporter, checkboxColumnWidth, ...props }: TableViewProps) => JSX.Element>;
46
+ export declare const TableView: React.MemoExoticComponent<({ data, columns, pageSize, onRowClick, sortBy, isLoading, highlightFirstRow, setSortBy, rowWidth, onSectionRendered, tableHeadersHeight, rowHeight, h, onTableScroll, getItemKey, shouldBeDraggable, shouldHaveCustomScrollbar, checkboxColumnWidth, isFiltering, ...props }: TableViewProps) => JSX.Element>;
@@ -63,7 +63,7 @@ var buildGridStyles = function (rowWidth) {
63
63
  return gridStyles;
64
64
  };
65
65
  export var TableView = React.memo(function (_a) {
66
- var data = _a.data, columns = _a.columns, pageSize = _a.pageSize, _b = _a.onRowClick, onRowClick = _b === void 0 ? null : _b, _c = _a.sortBy, sortBy = _c === void 0 ? { field: null, direction: null } : _c, _d = _a.isLoading, isLoading = _d === void 0 ? false : _d, _e = _a.highlightFirstRow, highlightFirstRow = _e === void 0 ? false : _e, _f = _a.setSortBy, setSortBy = _f === void 0 ? null : _f, _g = _a.rowWidth, rowWidth = _g === void 0 ? 1 : _g, onSectionRendered = _a.onSectionRendered, _h = _a.tableHeadersHeight, tableHeadersHeight = _h === void 0 ? defaultTableHeaderHeightPx : _h, _j = _a.rowHeight, rowHeight = _j === void 0 ? defaultTableRowHeightPx : _j, _k = _a.h, h = _k === void 0 ? 500 : _k, _l = _a.onTableScroll, onTableScroll = _l === void 0 ? null : _l, _m = _a.getItemKey, getItemKey = _m === void 0 ? null : _m, _o = _a.shouldBeDraggable, shouldBeDraggable = _o === void 0 ? false : _o, _p = _a.isInsideImporter, isInsideImporter = _p === void 0 ? false : _p, checkboxColumnWidth = _a.checkboxColumnWidth, props = __rest(_a, ["data", "columns", "pageSize", "onRowClick", "sortBy", "isLoading", "highlightFirstRow", "setSortBy", "rowWidth", "onSectionRendered", "tableHeadersHeight", "rowHeight", "h", "onTableScroll", "getItemKey", "shouldBeDraggable", "isInsideImporter", "checkboxColumnWidth"]);
66
+ var data = _a.data, columns = _a.columns, pageSize = _a.pageSize, _b = _a.onRowClick, onRowClick = _b === void 0 ? null : _b, _c = _a.sortBy, sortBy = _c === void 0 ? { field: null, direction: null } : _c, _d = _a.isLoading, isLoading = _d === void 0 ? false : _d, _e = _a.highlightFirstRow, highlightFirstRow = _e === void 0 ? false : _e, _f = _a.setSortBy, setSortBy = _f === void 0 ? null : _f, _g = _a.rowWidth, rowWidth = _g === void 0 ? 1 : _g, onSectionRendered = _a.onSectionRendered, _h = _a.tableHeadersHeight, tableHeadersHeight = _h === void 0 ? defaultTableHeaderHeightPx : _h, _j = _a.rowHeight, rowHeight = _j === void 0 ? defaultTableRowHeightPx : _j, _k = _a.h, h = _k === void 0 ? 500 : _k, _l = _a.onTableScroll, onTableScroll = _l === void 0 ? null : _l, _m = _a.getItemKey, getItemKey = _m === void 0 ? null : _m, _o = _a.shouldBeDraggable, shouldBeDraggable = _o === void 0 ? false : _o, _p = _a.shouldHaveCustomScrollbar, shouldHaveCustomScrollbar = _p === void 0 ? false : _p, checkboxColumnWidth = _a.checkboxColumnWidth, _q = _a.isFiltering, isFiltering = _q === void 0 ? false : _q, props = __rest(_a, ["data", "columns", "pageSize", "onRowClick", "sortBy", "isLoading", "highlightFirstRow", "setSortBy", "rowWidth", "onSectionRendered", "tableHeadersHeight", "rowHeight", "h", "onTableScroll", "getItemKey", "shouldBeDraggable", "shouldHaveCustomScrollbar", "checkboxColumnWidth", "isFiltering"]);
67
67
  /*
68
68
  multiply the rowWidth by 0.95 to let the user know they can scroll
69
69
  horizontally (will display partial column on the right)
@@ -71,7 +71,8 @@ export var TableView = React.memo(function (_a) {
71
71
  var _rowWidth = rowWidth > 1 ? rowWidth * 0.95 : rowWidth;
72
72
  var headerContainerRef = useRef();
73
73
  var listRef = useRef();
74
- var tableHeadersUI = data.length > 0 && (_jsx(TableHeaders, { id: tableHeaderId, containerRef: headerContainerRef, height: tableHeadersHeight, rowHeight: rowHeight, rowWidth: _rowWidth, scrollLeft: 0, columns: columns, sortBy: sortBy, setSortBy: setSortBy, isSpreadsheetTable: isInsideImporter }));
74
+ var canRenderTableHeaders = isFiltering ? true : data.length > 0;
75
+ var tableHeadersUI = canRenderTableHeaders && (_jsx(TableHeaders, { id: tableHeaderId, containerRef: headerContainerRef, height: tableHeadersHeight, rowHeight: rowHeight, rowWidth: _rowWidth, scrollLeft: 0, columns: columns, sortBy: sortBy, setSortBy: setSortBy, shouldHaveCustomScrollbar: shouldHaveCustomScrollbar }));
75
76
  var onScroll = function (_a) {
76
77
  var scrollTop = _a.scrollTop, scrollLeft = _a.scrollLeft;
77
78
  if (headerContainerRef.current && headerContainerRef.current.scrollTo) {
@@ -102,18 +103,45 @@ export var TableView = React.memo(function (_a) {
102
103
  highlightFirstRow: highlightFirstRow,
103
104
  rowHeight: rowHeight,
104
105
  getItemKey: getItemKey,
105
- isSpreadsheetTable: isInsideImporter,
106
+ shouldHaveCustomScrollbar: shouldHaveCustomScrollbar,
106
107
  }); }, [
107
108
  data,
108
109
  onRowClick,
109
110
  columns,
110
111
  highlightFirstRow,
111
112
  rowHeight,
112
- isInsideImporter,
113
+ shouldHaveCustomScrollbar,
113
114
  ]);
114
- return (_jsxs(TableViewWrapper, __assign({ "data-test-id": "table-view-wrapper", isLoading: isLoading, checkboxColumnWidth: checkboxColumnWidth }, (!isInsideImporter ? { h: tableHeight } : {}), props, { children: [tableHeadersUI, loadingUI, _jsx(AutoSizer, { children: function (_a) {
115
+ var buildGridProps = function (width, isDraggable, columnWidth, height) { return ({
116
+ style: buildGridStyles(_rowWidth),
117
+ width: width,
118
+ columnCount: 1,
119
+ itemData: itemData,
120
+ onItemsRendered: onItemsRendered,
121
+ onScroll: onScroll,
122
+ columnWidth: isDraggable ? Math.floor(width * _rowWidth) : columnWidth,
123
+ height: height - tableHeadersHeight,
124
+ rowHeight: rowHeight,
125
+ rowCount: data.length,
126
+ }); };
127
+ return (_jsxs(TableViewWrapper, __assign({ "data-test-id": "table-view-wrapper", isLoading: isLoading, checkboxColumnWidth: checkboxColumnWidth }, (!shouldHaveCustomScrollbar ? { h: tableHeight } : {}), props, { children: [tableHeadersUI, loadingUI, _jsx(AutoSizer, { children: function (_a) {
115
128
  var width = _a.width, height = _a.height;
116
- return (_jsxs(_Fragment, { children: [shouldBeDraggable && (_jsx(SortableContext, __assign({ items: data, strategy: verticalListSortingStrategy }, { children: _jsx(StyledGrid, __assign({ style: buildGridStyles(_rowWidth), width: width, columnCount: 1, itemData: itemData, onItemsRendered: onItemsRendered, onScroll: onScroll, columnWidth: Math.floor(width * _rowWidth), height: height - tableHeadersHeight, rowHeight: rowHeight, rowCount: data.length }, { children: DraggableCell })) }))), !shouldBeDraggable && (_jsx(StyledGrid, __assign({ style: buildGridStyles(_rowWidth), width: width, columnCount: 1, itemData: itemData, onItemsRendered: onItemsRendered, onScroll: onScroll, columnWidth: Math.floor(width * _rowWidth), height: height - tableHeadersHeight, rowHeight: rowHeight, rowCount: data.length, ref: listRef, outerElementType: isInsideImporter ? CustomScrollbarsVirtualList : undefined }, { children: Cell })))] }));
129
+ var canUseCustomScrollbar = shouldHaveCustomScrollbar && !shouldBeDraggable;
130
+ var gridProps = {
131
+ style: buildGridStyles(_rowWidth),
132
+ width: width,
133
+ columnCount: 1,
134
+ itemData: itemData,
135
+ onItemsRendered: onItemsRendered,
136
+ onScroll: onScroll,
137
+ columnWidth: Math.floor(width * _rowWidth),
138
+ height: height - tableHeadersHeight,
139
+ rowHeight: rowHeight,
140
+ rowCount: data.length,
141
+ };
142
+ return (_jsx(_Fragment, { children: shouldBeDraggable ? (_jsx(SortableContext, __assign({ items: data, strategy: verticalListSortingStrategy }, { children: _jsx(StyledGrid, __assign({}, gridProps, { children: DraggableCell })) }))) : (_jsx(StyledGrid, __assign({}, gridProps, { ref: canUseCustomScrollbar ? listRef : undefined, outerElementType: canUseCustomScrollbar
143
+ ? CustomScrollbarsVirtualList
144
+ : undefined }, { children: Cell }))) }));
117
145
  } })] })));
118
146
  }, areEqual);
119
147
  var templateObject_1, templateObject_2, templateObject_3, templateObject_4, templateObject_5;
@@ -31,7 +31,7 @@ import { FormInputLabel } from "..";
31
31
  import { useDebounce } from "../../hooks";
32
32
  import { Div } from "../../styled/utils";
33
33
  import Tooltip from "./tooltip";
34
- export var HTMLInput = styled.input(templateObject_3 || (templateObject_3 = __makeTemplateObject(["\n position: relative;\n\n /* TODO: remove !important's when we start rendering importer through iframe */\n padding: ", " !important;\n height: 68px !important;\n margin: 0px !important;\n box-shadow: none !important;\n\n outline: none;\n\n border: 1px solid ", " !important;\n box-sizing: border-box;\n border-radius: 8px;\n width: 100%;\n\n ::-webkit-outer-spin-button,\n ::-webkit-inner-spin-button {\n -webkit-appearance: none;\n margin: 0;\n }\n /* Firefox */\n -moz-appearance: textfield;\n\n ", ";\n\n ::placeholder {\n color: ", ";\n }\n\n :focus {\n border: 2px solid ", "!important;\n\n /* 3d at the end adds .24 opacity (using 8 digit hex)*/\n box-shadow: 0px 0px 8px ", "3d !important;\n }\n\n /* TODO: remove !important's when we start rendering importer through iframe */\n :hover {\n box-shadow: none !important;\n background: transparent !important;\n }\n\n ", "\n ", "\n"], ["\n position: relative;\n\n /* TODO: remove !important's when we start rendering importer through iframe */\n padding: ", " !important;\n height: 68px !important;\n margin: 0px !important;\n box-shadow: none !important;\n\n outline: none;\n\n border: 1px solid ", " !important;\n box-sizing: border-box;\n border-radius: 8px;\n width: 100%;\n\n ::-webkit-outer-spin-button,\n ::-webkit-inner-spin-button {\n -webkit-appearance: none;\n margin: 0;\n }\n /* Firefox */\n -moz-appearance: textfield;\n\n ", ";\n\n ::placeholder {\n color: ", ";\n }\n\n :focus {\n border: 2px solid ", "!important;\n\n /* 3d at the end adds .24 opacity (using 8 digit hex)*/\n box-shadow: 0px 0px 8px ", "3d !important;\n }\n\n /* TODO: remove !important's when we start rendering importer through iframe */\n :hover {\n box-shadow: none !important;\n background: transparent !important;\n }\n\n ", "\n ", "\n"])), function (_a) {
34
+ export var HTMLInput = styled.input(templateObject_3 || (templateObject_3 = __makeTemplateObject(["\n position: relative;\n\n padding: ", ";\n height: 68px;\n margin: 0px;\n box-shadow: none;\n\n outline: none;\n\n border: 1px solid ", ";\n box-sizing: border-box;\n border-radius: 8px;\n width: 100%;\n\n ::-webkit-outer-spin-button,\n ::-webkit-inner-spin-button {\n -webkit-appearance: none;\n margin: 0;\n }\n /* Firefox */\n -moz-appearance: textfield;\n\n ", ";\n\n ::placeholder {\n color: ", ";\n }\n\n :focus {\n border: 2px solid ", ";\n\n /* 3d at the end adds .24 opacity (using 8 digit hex)*/\n box-shadow: 0px 0px 8px ", "3d;\n }\n\n :hover {\n box-shadow: none;\n background: transparent;\n }\n\n ", "\n ", "\n"], ["\n position: relative;\n\n padding: ", ";\n height: 68px;\n margin: 0px;\n box-shadow: none;\n\n outline: none;\n\n border: 1px solid ", ";\n box-sizing: border-box;\n border-radius: 8px;\n width: 100%;\n\n ::-webkit-outer-spin-button,\n ::-webkit-inner-spin-button {\n -webkit-appearance: none;\n margin: 0;\n }\n /* Firefox */\n -moz-appearance: textfield;\n\n ", ";\n\n ::placeholder {\n color: ", ";\n }\n\n :focus {\n border: 2px solid ", ";\n\n /* 3d at the end adds .24 opacity (using 8 digit hex)*/\n box-shadow: 0px 0px 8px ", "3d;\n }\n\n :hover {\n box-shadow: none;\n background: transparent;\n }\n\n ", "\n ", "\n"])), function (_a) {
35
35
  var padding = _a.padding;
36
36
  return (padding ? padding : "20px 16px");
37
37
  }, function (props) { return props.theme.colors.gray300; }, function (props) { return props.theme.css.body1; }, function (props) { return props.theme.colors.placeholder; }, function (props) { return props.theme.colors.blue500; }, function (props) { return props.theme.colors.blue500; }, function (props) {
@@ -6,12 +6,18 @@ declare class FuseImporter {
6
6
  zIndex: number;
7
7
  options: ImporterOptions;
8
8
  constructor(apiToken: string, templateSlug: string, options?: ImporterOptions);
9
+ private cleanupIframe;
9
10
  formatRecord: FormatRecord;
10
11
  onValidateRecord: OnValidateRecord;
11
12
  onSubmit: OnSubmit;
12
13
  onClose: () => void;
13
14
  close(): void;
14
15
  show(): Promise<void>;
16
+ private renderImporterComponent;
17
+ private createDivComponent;
18
+ private createIframe;
19
+ private createImporterComponent;
20
+ private configureIframe;
15
21
  private configureI18n;
16
22
  }
17
23
  export default FuseImporter;