@tap-payments/os-micro-frontend-shared 0.0.273-test.9 → 0.0.275-test.1

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 (26) hide show
  1. package/build/components/ScrollLoader/ScrollLoader.d.ts +10 -0
  2. package/build/components/ScrollLoader/ScrollLoader.js +43 -0
  3. package/build/components/ScrollLoader/index.d.ts +3 -0
  4. package/build/components/ScrollLoader/index.js +3 -0
  5. package/build/components/TableCells/CustomCells/SalesChannelCell/SalesChannelCell.js +1 -0
  6. package/build/components/VirtualTable/SheetView/SheetViewTableHeader.js +1 -8
  7. package/build/components/VirtualTable/SheetView/style.js +0 -1
  8. package/build/components/VirtualTable/components/ColumnFilter/ColumnFilter.d.ts +2 -2
  9. package/build/components/VirtualTable/components/ColumnFilter/ColumnFilter.js +10 -11
  10. package/build/components/VirtualTable/components/ColumnFilter/Inputs/Inputs.d.ts +1 -2
  11. package/build/components/VirtualTable/components/ColumnFilter/Inputs/Inputs.js +4 -4
  12. package/build/components/VirtualTable/components/ColumnFilter/List/List.d.ts +2 -2
  13. package/build/components/VirtualTable/components/ColumnFilter/List/List.js +4 -4
  14. package/build/components/VirtualTable/components/TableError.d.ts +11 -0
  15. package/build/components/VirtualTable/components/TableError.js +22 -0
  16. package/build/components/VirtualTable/components/TableHeader.js +1 -5
  17. package/build/components/VirtualTable/components/TableNoData.d.ts +1 -1
  18. package/build/components/VirtualTable/components/TableNoData.js +3 -22
  19. package/build/components/VirtualTable/components/index.d.ts +1 -0
  20. package/build/components/VirtualTable/components/index.js +1 -0
  21. package/build/components/VirtualTable/style.js +1 -1
  22. package/build/components/index.d.ts +3 -1
  23. package/build/components/index.js +3 -1
  24. package/package.json +2 -2
  25. package/build/components/VirtualTable/components/ColumnFilter/type.d.ts +0 -7
  26. package/build/components/VirtualTable/components/ColumnFilter/type.js +0 -1
@@ -0,0 +1,10 @@
1
+ import React, { PropsWithChildren } from 'react';
2
+ import { StackProps } from '@mui/material/Stack';
3
+ export type ScrollLoaderProps<IRootProps extends object = StackProps> = PropsWithChildren<IRootProps & {
4
+ component?: React.FC<IRootProps> | React.ElementType;
5
+ loadMoreItems: () => Promise<unknown>;
6
+ loading?: boolean;
7
+ hasMore?: boolean;
8
+ }>;
9
+ declare const ScrollLoader: <IRootProps extends object = StackProps>(props: ScrollLoaderProps<IRootProps>) => import("react/jsx-runtime").JSX.Element;
10
+ export default ScrollLoader;
@@ -0,0 +1,43 @@
1
+ var __rest = (this && this.__rest) || function (s, e) {
2
+ var t = {};
3
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
4
+ t[p] = s[p];
5
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
6
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
7
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
8
+ t[p[i]] = s[p[i]];
9
+ }
10
+ return t;
11
+ };
12
+ import { jsx as _jsx } from "react/jsx-runtime";
13
+ import { useCallback, useEffect, useRef } from 'react';
14
+ import Stack from '@mui/material/Stack';
15
+ const OFFSET = 50;
16
+ const ScrollLoader = (props) => {
17
+ const { component = Stack, loadMoreItems, hasMore, loading, children } = props, rootProps = __rest(props, ["component", "loadMoreItems", "hasMore", "loading", "children"]);
18
+ const loadMoreItemsRef = useRef(loadMoreItems);
19
+ loadMoreItemsRef.current = loadMoreItems;
20
+ const Component = component;
21
+ const containerRef = useRef(null);
22
+ const handleScroll = useCallback(() => {
23
+ const el = containerRef.current;
24
+ if (!el || loading || !hasMore)
25
+ return;
26
+ const isBottom = el.scrollHeight - el.scrollTop <= el.clientHeight + OFFSET;
27
+ if (isBottom)
28
+ loadMoreItemsRef.current();
29
+ }, [loading, hasMore]);
30
+ useEffect(() => {
31
+ loadMoreItemsRef.current().then(() => {
32
+ setTimeout(() => {
33
+ handleScroll();
34
+ }, 100);
35
+ });
36
+ }, []);
37
+ return (_jsx(Component, Object.assign({ overflow: "auto", height: "100%", maxHeight: "calc(100vh - 321px)", ref: containerRef, onScroll: handleScroll, style: {
38
+ overflow: 'auto',
39
+ height: '100%',
40
+ maxHeight: 'calc(100vh - 321px)',
41
+ } }, rootProps, { children: children })));
42
+ };
43
+ export default ScrollLoader;
@@ -0,0 +1,3 @@
1
+ import ScrollLoader from './ScrollLoader';
2
+ export default ScrollLoader;
3
+ export * from './ScrollLoader';
@@ -0,0 +1,3 @@
1
+ import ScrollLoader from './ScrollLoader';
2
+ export default ScrollLoader;
3
+ export * from './ScrollLoader';
@@ -23,6 +23,7 @@ function SalesChannelCell(_a) {
23
23
  const channelCode = (_a = channel.code) === null || _a === void 0 ? void 0 : _a.replace(/_/g, '');
24
24
  return (_jsx(Tooltip, Object.assign({ title: sourceTooltip }, { children: _jsx(ImageWrapper, Object.assign({ order: index, variants: salesChannelAnimation(index, isTextShown ? 74 : 0), sx: {
25
25
  width: isTextShown ? '70px' : '36px',
26
+ cursor: 'pointer',
26
27
  }, onClick: () => {
27
28
  window.open(channel.address, '_blank');
28
29
  } }, { children: isTextShown ? (_jsx(ChannelTextWrapper, { children: _jsx(ChannelTextLabel, { children: channelCode }) })) : (_jsx(StyledSourceImage, { src: channel.logo, alt: channelCode })) })) }), `${channel}-${index}`));
@@ -8,11 +8,9 @@ import { StyledCell } from '../style';
8
8
  import { ActionIcon, ColumnIcon, PinIconContainer, StyledHeader, StyledMUITableRow, HeaderText } from './style';
9
9
  function SheetViewTableHeader({ columns, headerProps, showBackDrop, onColumnSort, columnsSorting, pinnedColumns = [], onColumnPin, isPinnable = false, lastColumnId, selectedColumn = null, onColumnClick, }) {
10
10
  const [anchorEl, setAnchorEl] = useState(null);
11
- const [columnFilterEl, setColumnFilterEl] = useState(null);
12
11
  const open = Boolean(anchorEl);
13
12
  const theme = useTheme();
14
13
  const handleClick = (event) => {
15
- event.stopPropagation();
16
14
  setAnchorEl(event.currentTarget);
17
15
  };
18
16
  const handleClose = () => {
@@ -47,12 +45,7 @@ function SheetViewTableHeader({ columns, headerProps, showBackDrop, onColumnSort
47
45
  const isPinned = pinnedColumns.includes(id);
48
46
  const isDefaultPinned = !!column.isDefaultPinned;
49
47
  const isSelected = selectedColumn === id;
50
- return (_jsxs(StyledCell, Object.assign({ "data-id": id, component: "div", "data-testid": "SheetViewVirtualTable_TableHeader_StyledCell", "data-column-id": column.id, "data-column-width": column.width, "data-column-width-used": column.width, "data-column-align": column.align, "data-column-order": column.order, "data-column-header": typeof column.header === 'string' ? column.header : 'component', "data-column-sortable": !!column.sortable, "data-column-filterable": !!column.filter, "data-column-pinned": isPinned, isFirst: isFirst, isLast: isLast, isSheetView: true, onClick: (event) => {
51
- onColumnClick === null || onColumnClick === void 0 ? void 0 : onColumnClick(id, event);
52
- setColumnFilterEl(event.currentTarget);
53
- }, sx: Object.assign({ display: 'flex', gap: theme.spacing(0.5), alignItems: 'center', justifyContent: align === 'right' ? 'flex-end' : 'flex-start', width: column.width, textAlign: align, overflow: 'unset', cursor: 'pointer', boxSizing: 'border-box', border: isSelected ? '2px solid #1F88D0' : '1px solid #F2F2F2', backgroundColor: isSelected ? '#F2F2F2' : '#FCFCFC', height: isSelected ? '100%' : 'auto', minHeight: isSelected ? '28px' : 'auto' }, headerStyle) }, { children: [typeof header === 'function' ? (header()) : (_jsx(Box, Object.assign({ "data-testid": "SheetViewTableHeader_columns_header", sx: { maxWidth: '100%', overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap' } }, { children: header && _jsx(HeaderText, Object.assign({ "data-testid": "SheetViewVirtualTable_TableHeader_StyledCell_header_text" }, { children: header })) }))), filter && (_jsx(ColumnFilter, Object.assign({}, filter, { anchorEl: columnFilterEl, setAnchorEl: setColumnFilterEl, onClose: (event) => {
54
- onColumnClick === null || onColumnClick === void 0 ? void 0 : onColumnClick(id, event);
55
- } }))), sortable && (_jsx(Box, Object.assign({ sx: { diplay: 'flex', alignItems: 'center' } }, { children: _jsx(ColumnIcon, { onClick: sortable ? handleClick : undefined, src: columnIcon, alt: "column-icon", "data-id": id }) }))), isPinnable && pinnable && !isDefaultPinned && !isLast && (_jsx(PinIconContainer, Object.assign({ onClick: (event) => {
48
+ return (_jsxs(StyledCell, Object.assign({ "data-id": id, component: "div", "data-testid": "SheetViewVirtualTable_TableHeader_StyledCell", "data-column-id": column.id, "data-column-width": column.width, "data-column-width-used": column.width, "data-column-align": column.align, "data-column-order": column.order, "data-column-header": typeof column.header === 'string' ? column.header : 'component', "data-column-sortable": !!column.sortable, "data-column-filterable": !!column.filter, "data-column-pinned": isPinned, isFirst: isFirst, isLast: isLast, isSheetView: true, onClick: (event) => onColumnClick === null || onColumnClick === void 0 ? void 0 : onColumnClick(id, event), sx: Object.assign({ display: 'flex', gap: theme.spacing(0.5), alignItems: 'center', justifyContent: align === 'right' ? 'flex-end' : 'flex-start', width: column.width, textAlign: align, overflow: 'unset', cursor: 'pointer', boxSizing: 'border-box', border: isSelected ? '2px solid #1F88D0' : '1px solid #F2F2F2', backgroundColor: isSelected ? '#F2F2F2' : '#FCFCFC', height: isSelected ? '100%' : 'auto', minHeight: isSelected ? '28px' : 'auto' }, headerStyle) }, { children: [typeof header === 'function' ? (header()) : (_jsx(Box, Object.assign({ "data-testid": "SheetViewTableHeader_columns_header", sx: { maxWidth: '100%', overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap' } }, { children: header && _jsx(HeaderText, Object.assign({ "data-testid": "SheetViewVirtualTable_TableHeader_StyledCell_header_text" }, { children: header })) }))), filter && _jsx(ColumnFilter, Object.assign({}, filter)), sortable && _jsx(ColumnIcon, { onClick: sortable ? handleClick : undefined, src: columnIcon, alt: "column-icon", "data-id": id }), isPinnable && pinnable && !isDefaultPinned && !isLast && (_jsx(PinIconContainer, Object.assign({ onClick: (event) => {
56
49
  event.stopPropagation();
57
50
  handlePinClick(id);
58
51
  }, title: isPinned ? 'Unpin column' : 'Pin column' }, { children: _jsx("img", { src: isPinned ? unpinIcon : pinIcon, alt: "pin-icon" }) })))] }), `${id}-${colIndex}`));
@@ -9,7 +9,6 @@ export const ColumnIcon = styled('img')(() => ({
9
9
  width: '8px',
10
10
  height: '6.4px',
11
11
  cursor: 'pointer',
12
- marginTop: '2px',
13
12
  }));
14
13
  export const HeaderText = styled('span')(({ theme }) => ({
15
14
  color: theme.palette.text.primary,
@@ -1,5 +1,5 @@
1
1
  /// <reference types="react" />
2
- import { ColumnFilterProps } from './type';
3
- declare function ColumnFilter(filter: ColumnFilterProps): import("react/jsx-runtime").JSX.Element;
2
+ import { IColumnFilter } from '../../../../types/index.js';
3
+ declare function ColumnFilter(filter: IColumnFilter): import("react/jsx-runtime").JSX.Element;
4
4
  declare const _default: import("react").MemoExoticComponent<typeof ColumnFilter>;
5
5
  export default _default;
@@ -1,6 +1,7 @@
1
- import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
- import { memo, useMemo } from 'react';
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { memo, useMemo, useState } from 'react';
3
3
  import Box from '@mui/material/Box';
4
+ import ClickAwayListener from '@mui/material/ClickAwayListener';
4
5
  import Popper from '@mui/material/Popper';
5
6
  import { closeIcon, columnIcon, whiteFilterIcon } from '../../../../constants/index.js';
6
7
  import Inputs from './Inputs';
@@ -8,14 +9,12 @@ import List from './List';
8
9
  import { FilterWrapper } from './style';
9
10
  import CustomBackdrop from '../../../CustomBackdrop';
10
11
  function ColumnFilter(filter) {
11
- const { anchorEl, setAnchorEl, onClose } = filter;
12
+ const [anchorEl, setAnchorEl] = useState(null);
12
13
  const openDropdown = (event) => {
13
14
  setAnchorEl(event.currentTarget);
14
15
  };
15
- const onCloseDropdown = (event) => {
16
- event.stopPropagation();
16
+ const onCloseDropdown = () => {
17
17
  setAnchorEl(null);
18
- onClose === null || onClose === void 0 ? void 0 : onClose(event);
19
18
  };
20
19
  const filterData = useMemo(() => { var _a; return ((_a = filter === null || filter === void 0 ? void 0 : filter.options) === null || _a === void 0 ? void 0 : _a.reduce((acc, { apiKey }) => { var _a; return (Object.assign(Object.assign({}, acc), { [apiKey]: (_a = filter === null || filter === void 0 ? void 0 : filter.data) === null || _a === void 0 ? void 0 : _a[apiKey] })); }, {})) || {}; }, [filter]);
21
20
  const listFilterData = useMemo(() => {
@@ -51,10 +50,10 @@ function ColumnFilter(filter) {
51
50
  }
52
51
  return null;
53
52
  }, [open, filter, anchorEl, setAnchorEl]);
54
- return (_jsxs(_Fragment, { children: [showClearIcon ? (_jsxs(FilterWrapper, { children: [_jsx(Box, { component: "img", "data-testid": "ColumnFilter_whiteFilterIcon", src: whiteFilterIcon, alt: "filter-icon", sx: { marginInlineEnd: '2px', height: 6 }, onClick: openDropdown }), _jsx(Box, { component: "img", "data-testid": "ColumnFilter_closeIcon", src: closeIcon, alt: "close-icon", onClick: () => {
55
- filter.onClear(filterApiKeys);
56
- } })] })) : (_jsx(Box, { component: "img", "data-testid": "ColumnFilter_columnIcon", src: columnIcon, alt: "column-icon", sx: { cursor: 'pointer', marginTop: '2px' }, onClick: openDropdown })), open && _jsx(CustomBackdrop, { onClick: onCloseDropdown }), _jsx(Popper, Object.assign({ open: open, anchorEl: anchorEl, placement: "bottom-start", sx: {
57
- zIndex: 9999,
58
- } }, { children: renderFilter }))] }));
53
+ return (_jsx(ClickAwayListener, Object.assign({ onClickAway: onCloseDropdown }, { children: _jsxs(Box, Object.assign({ component: "section", "data-testid": "ColumnFilter", sx: { position: 'relative', display: 'flex', alignItems: 'center' } }, { children: [showClearIcon ? (_jsxs(FilterWrapper, { children: [_jsx(Box, { component: "img", "data-testid": "ColumnFilter_whiteFilterIcon", src: whiteFilterIcon, alt: "filter-icon", sx: { marginInlineEnd: '2px', height: 6 }, onClick: openDropdown }), _jsx(Box, { component: "img", "data-testid": "ColumnFilter_closeIcon", src: closeIcon, alt: "close-icon", onClick: () => {
54
+ filter.onClear(filterApiKeys);
55
+ } })] })) : (_jsx(Box, { component: "img", "data-testid": "ColumnFilter_columnIcon", src: columnIcon, alt: "column-icon", sx: { cursor: 'pointer', marginTop: '2px' }, onClick: openDropdown })), open && _jsx(CustomBackdrop, { onClick: onCloseDropdown }), _jsx(Popper, Object.assign({ open: open, anchorEl: anchorEl, placement: "bottom-start", sx: {
56
+ zIndex: 9999,
57
+ } }, { children: renderFilter }))] })) })));
59
58
  }
60
59
  export default memo(ColumnFilter);
@@ -1,7 +1,6 @@
1
- import { MouseEvent } from 'react';
2
1
  import type { IColumnFilter, IColumnFilterInputs } from '../../../../../types/index.js';
3
2
  interface InputsI {
4
- onCloseDropdown: (e: MouseEvent<HTMLElement>) => void;
3
+ onCloseDropdown: () => void;
5
4
  filter: IColumnFilter & IColumnFilterInputs;
6
5
  }
7
6
  declare function Inputs({ onCloseDropdown, filter: { options, onConfirm, data, isOnlyOneFilter, onColumnFilterClearClick, wrapperSx } }: InputsI): import("react/jsx-runtime").JSX.Element;
@@ -13,12 +13,12 @@ function Inputs({ onCloseDropdown, filter: { options = [], onConfirm, data, isOn
13
13
  setValues((options || []).reduce((acc, { apiKey }) => { var _a; return (Object.assign(Object.assign({}, acc), { [apiKey]: (_a = data === null || data === void 0 ? void 0 : data[apiKey]) !== null && _a !== void 0 ? _a : '' })); }, {}));
14
14
  }, []);
15
15
  const { t } = useTranslation();
16
- const onClickOkay = (e) => {
16
+ const onClickOkay = () => {
17
17
  onConfirm === null || onConfirm === void 0 ? void 0 : onConfirm(values);
18
- onCloseDropdown(e);
18
+ onCloseDropdown();
19
19
  };
20
- const onClickCancel = (e) => {
21
- onCloseDropdown(e);
20
+ const onClickCancel = () => {
21
+ onCloseDropdown();
22
22
  };
23
23
  const onClickClear = () => {
24
24
  onColumnFilterClearClick === null || onColumnFilterClearClick === void 0 ? void 0 : onColumnFilterClearClick();
@@ -1,7 +1,7 @@
1
- import React, { MouseEvent } from 'react';
1
+ import React from 'react';
2
2
  import type { IColumnFilter, IColumnFilterList } from '../../../../../types/index.js';
3
3
  interface ListI {
4
- onCloseDropdown: (e: MouseEvent<HTMLElement>) => void;
4
+ onCloseDropdown: () => void;
5
5
  filter: IColumnFilter & IColumnFilterList;
6
6
  styles?: React.CSSProperties;
7
7
  }
@@ -25,10 +25,10 @@ function List({ onCloseDropdown, filter, styles }) {
25
25
  if (filter.options)
26
26
  setItemsList(renderItems(filter.options));
27
27
  }, [filter === null || filter === void 0 ? void 0 : filter.data]);
28
- const onClickCancel = (e) => {
29
- onCloseDropdown(e);
28
+ const onClickCancel = () => {
29
+ onCloseDropdown();
30
30
  };
31
- const onClickOkay = (e) => {
31
+ const onClickOkay = () => {
32
32
  var _a;
33
33
  const selectedValues = values.reduce((acc, { options, apiKey: parentKey, isSelected: isParentSelected }) => {
34
34
  if (options) {
@@ -45,7 +45,7 @@ function List({ onCloseDropdown, filter, styles }) {
45
45
  const selectedValueSet = new Set(selectedValues);
46
46
  if (Object.keys(values).length)
47
47
  (_a = filter === null || filter === void 0 ? void 0 : filter.onConfirm) === null || _a === void 0 ? void 0 : _a.call(filter, { [filter.apiKey]: [...selectedValueSet] });
48
- onCloseDropdown(e);
48
+ onCloseDropdown();
49
49
  };
50
50
  const onUpdateMenuItems = (latestMenuItems) => {
51
51
  const resetItems = (items) => items.map(({ name, selected, menuItems, label }) => (Object.assign(Object.assign(Object.assign({}, (label && { placeholder: label })), { apiKey: name, isSelected: selected }), ((menuItems === null || menuItems === void 0 ? void 0 : menuItems.length) && { options: resetItems(menuItems) }))));
@@ -0,0 +1,11 @@
1
+ /// <reference types="react" />
2
+ export type TableErrorProps = {
3
+ isTimeoutError?: boolean;
4
+ tableError?: boolean;
5
+ sandboxMode?: boolean;
6
+ tableEmpty?: boolean;
7
+ error: Error | null;
8
+ triggerDataRefetch: () => Promise<unknown>;
9
+ };
10
+ declare const _default: import("react").MemoExoticComponent<(props: TableErrorProps) => import("react/jsx-runtime").JSX.Element>;
11
+ export default _default;
@@ -0,0 +1,22 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { memo } from 'react';
3
+ import ErrorList from './ErrorList';
4
+ import { backendErrorHandler } from '../../../utils/index.js';
5
+ import EmptyList from './EmptyList';
6
+ const TableError = (props) => {
7
+ const { isTimeoutError, tableError, triggerDataRefetch, sandboxMode, tableEmpty, error } = props;
8
+ if (isTimeoutError) {
9
+ return (_jsx(ErrorList, { "data-testid": "VirtualTable_ErrorList_timeoutError", shouldMinimizeWidth: true, heading: "timeOut", message: "yourRequestOutPleaseTryAgain", triggerDataRefetch: triggerDataRefetch, sandboxMode: sandboxMode }));
10
+ }
11
+ const axiosErr = error;
12
+ if (tableError) {
13
+ const { formatted } = backendErrorHandler({ error: axiosErr, fallbackMessage: 'connectionErrorMsg' });
14
+ return (_jsx(ErrorList, { "data-testid": "VirtualTable_ErrorList_tableError", heading: "somethingWentWrong", message: formatted, triggerDataRefetch: triggerDataRefetch, sandboxMode: sandboxMode }));
15
+ }
16
+ if (tableEmpty) {
17
+ const { formatted } = backendErrorHandler({ error: axiosErr, fallbackMessage: 'tryAdjustingTheDateOrFilters' });
18
+ return _jsx(EmptyList, { sandboxMode: sandboxMode, heading: "nothingFound", message: formatted });
19
+ }
20
+ return (_jsx(ErrorList, { "data-testid": "VirtualTable_ErrorList_tableError", heading: "somethingWentWrong", message: "connectionErrorMsg", triggerDataRefetch: triggerDataRefetch, sandboxMode: sandboxMode }));
21
+ };
22
+ export default memo(TableError);
@@ -42,11 +42,9 @@ const StyledMUITableRow = styled(MUITableRow, {
42
42
  }))));
43
43
  function TableHeader({ columns, headerProps, showBackDrop, onColumnSort, columnsSorting, isSheetView }) {
44
44
  const [anchorEl, setAnchorEl] = useState(null);
45
- const [columnFilterEl, setColumnFilterEl] = useState(null);
46
45
  const open = Boolean(anchorEl);
47
46
  const theme = useTheme();
48
47
  const handleClick = (event) => {
49
- event.stopPropagation();
50
48
  setAnchorEl(event.currentTarget);
51
49
  };
52
50
  const handleClose = () => {
@@ -64,9 +62,7 @@ function TableHeader({ columns, headerProps, showBackDrop, onColumnSort, columns
64
62
  const { header, id, align, headerStyle, sortable, filter } = column;
65
63
  const isFirst = id === columns[0].id;
66
64
  const isLast = id === columns[columns.length - 1].id;
67
- return (_jsxs(StyledCell, Object.assign({ "data-id": id, component: "div", "data-testid": "VirtualTable_TableHeader_StyledCell", "data-column-id": column.id, "data-column-width": column.width, "data-column-width-used": column.width, "data-column-align": column.align, "data-column-order": column.order, "data-column-header": typeof column.header === 'string' ? column.header : 'component', "data-column-sortable": !!column.sortable, "data-column-filterable": !!column.filter, isFirst: isFirst, isLast: isLast, onClick: (event) => {
68
- setColumnFilterEl(event.currentTarget);
69
- }, sx: Object.assign({ paddingInline: '0.6875rem', paddingLeft: isFirst ? '0' : '0.6875rem', paddingRight: isLast ? '0' : '0.6875rem', display: 'flex', gap: theme.spacing(0.5), alignItems: 'center', justifyContent: align === 'right' ? 'flex-end' : 'flex-start', width: column.width, textAlign: align, overflow: 'unset', fontWeight: 600 }, headerStyle), isSheetView: isSheetView }, { children: [typeof header === 'function' ? (header()) : (_jsx(Box, Object.assign({ "data-testid": "TableHeader_columns_header", sx: { maxWidth: '100%', overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap' } }, { children: header && (_jsx("span", Object.assign({ style: { textOverflow: 'ellipsis', width: '80%', overflow: 'hidden' }, "data-testid": "VirtualTable_TableHeader_StyledCell_header_text" }, { children: header }))) }))), filter && _jsx(ColumnFilter, Object.assign({}, filter, { anchorEl: columnFilterEl, setAnchorEl: setColumnFilterEl })), sortable && (_jsx(Box, Object.assign({ sx: { diplay: 'flex', alignItems: 'center' } }, { children: _jsx(ColumnIcon, { onClick: sortable ? handleClick : undefined, src: columnIcon, alt: "column-icon", "data-id": id }) })))] }), `${id}-${colIndex}`));
65
+ return (_jsxs(StyledCell, Object.assign({ "data-id": id, component: "div", "data-testid": "VirtualTable_TableHeader_StyledCell", "data-column-id": column.id, "data-column-width": column.width, "data-column-width-used": column.width, "data-column-align": column.align, "data-column-order": column.order, "data-column-header": typeof column.header === 'string' ? column.header : 'component', "data-column-sortable": !!column.sortable, "data-column-filterable": !!column.filter, isFirst: isFirst, isLast: isLast, sx: Object.assign({ paddingInline: '0.6875rem', paddingLeft: isFirst ? '0' : '0.6875rem', paddingRight: isLast ? '0' : '0.6875rem', display: 'flex', gap: theme.spacing(0.5), alignItems: 'center', justifyContent: align === 'right' ? 'flex-end' : 'flex-start', width: column.width, textAlign: align, overflow: 'unset', fontWeight: 600 }, headerStyle), isSheetView: isSheetView }, { children: [typeof header === 'function' ? (header()) : (_jsx(Box, Object.assign({ "data-testid": "TableHeader_columns_header", sx: { maxWidth: '100%', overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap' } }, { children: header && (_jsx("span", Object.assign({ style: { textOverflow: 'ellipsis', width: '80%', overflow: 'hidden' }, "data-testid": "VirtualTable_TableHeader_StyledCell_header_text" }, { children: header }))) }))), filter && _jsx(ColumnFilter, Object.assign({}, filter)), sortable && _jsx(ColumnIcon, { onClick: sortable ? handleClick : undefined, src: columnIcon, alt: "column-icon", "data-id": id })] }), `${id}-${colIndex}`));
70
66
  }) })), _jsx(Dropdown, { open: open, onClose: handleClose, anchorEl: anchorEl, menuItems: [
71
67
  {
72
68
  label: 'Sort A-Z',
@@ -10,7 +10,7 @@ interface TableNoDataProps {
10
10
  triggerDataRefetch: () => Promise<unknown>;
11
11
  footerProps: IVirtualTable['footerProps'];
12
12
  }
13
- declare function TableNoData({ error, tableEmpty, isTimeoutError, tableError, tableLoading, orderedColumns, triggerDataRefetch, footerProps, }: TableNoDataProps): JSX.Element;
13
+ declare function TableNoData({ error, tableEmpty, isTimeoutError, tableError, tableLoading, orderedColumns, triggerDataRefetch, footerProps, }: TableNoDataProps): import("react/jsx-runtime").JSX.Element;
14
14
  declare namespace TableNoData {
15
15
  var displayName: string;
16
16
  }
@@ -1,32 +1,13 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
2
  import { memo } from 'react';
3
- import { backendErrorHandler } from '../../../utils/index.js';
4
- import EmptyList from './EmptyList/EmptyList';
5
- import ErrorList from './ErrorList/ErrorList';
6
3
  import TableLoading from './TableLoading';
7
4
  import { StyledSolidBackground } from '../style';
5
+ import TableError from './TableError';
8
6
  function TableNoData({ error, tableEmpty, isTimeoutError, tableError, tableLoading, orderedColumns, triggerDataRefetch, footerProps, }) {
9
- let content;
10
7
  if (tableLoading) {
11
- content = (_jsx(StyledSolidBackground, Object.assign({ "data-testid": "VirtualTable_SolidBackground" }, { children: _jsx(TableLoading, { "data-testid": "VirtualTable_TableLoading", columns: orderedColumns, isLoading: true }) })));
8
+ return (_jsx(StyledSolidBackground, Object.assign({ "data-testid": "VirtualTable_SolidBackground" }, { children: _jsx(TableLoading, { "data-testid": "VirtualTable_TableLoading", columns: orderedColumns, isLoading: true }) })));
12
9
  }
13
- else if (isTimeoutError) {
14
- content = (_jsx(ErrorList, { "data-testid": "VirtualTable_ErrorList_timeoutError", shouldMinimizeWidth: true, heading: "timeOut", message: "yourRequestOutPleaseTryAgain", triggerDataRefetch: triggerDataRefetch, sandboxMode: footerProps === null || footerProps === void 0 ? void 0 : footerProps.sandboxMode }));
15
- }
16
- else if (tableError) {
17
- const axiosErr = error;
18
- const { formatted } = backendErrorHandler({ error: axiosErr, fallbackMessage: 'connectionErrorMsg' });
19
- content = (_jsx(ErrorList, { "data-testid": "VirtualTable_ErrorList_tableError", heading: "somethingWentWrong", message: formatted, triggerDataRefetch: triggerDataRefetch, sandboxMode: footerProps === null || footerProps === void 0 ? void 0 : footerProps.sandboxMode }));
20
- }
21
- else if (tableEmpty) {
22
- const axiosErr = error;
23
- const { formatted } = backendErrorHandler({ error: axiosErr, fallbackMessage: 'tryAdjustingTheDateOrFilters' });
24
- content = _jsx(EmptyList, { sandboxMode: footerProps === null || footerProps === void 0 ? void 0 : footerProps.sandboxMode, heading: "nothingFound", message: formatted });
25
- }
26
- else {
27
- content = (_jsx(ErrorList, { "data-testid": "VirtualTable_ErrorList_tableError", heading: "somethingWentWrong", message: "connectionErrorMsg", triggerDataRefetch: triggerDataRefetch, sandboxMode: footerProps === null || footerProps === void 0 ? void 0 : footerProps.sandboxMode }));
28
- }
29
- return content;
10
+ return (_jsx(TableError, { isTimeoutError: isTimeoutError, tableEmpty: tableEmpty, tableError: tableError, sandboxMode: footerProps === null || footerProps === void 0 ? void 0 : footerProps.sandboxMode, error: error, triggerDataRefetch: triggerDataRefetch }));
30
11
  }
31
12
  TableNoData.displayName = 'TableNoData';
32
13
  export default memo(TableNoData);
@@ -3,6 +3,7 @@ export * from './EmptyList';
3
3
  export * from './ErrorList';
4
4
  export * from './TableFooter';
5
5
  export { default as TableFooter } from './TableFooter';
6
+ export { default as TableError } from './TableError';
6
7
  export * from './virtualScroll';
7
8
  export * from './RowErrorState';
8
9
  export { default as TableHeader } from './TableHeader';
@@ -3,6 +3,7 @@ export * from './EmptyList';
3
3
  export * from './ErrorList';
4
4
  export * from './TableFooter';
5
5
  export { default as TableFooter } from './TableFooter';
6
+ export { default as TableError } from './TableError';
6
7
  export * from './virtualScroll';
7
8
  export * from './RowErrorState';
8
9
  export { default as TableHeader } from './TableHeader';
@@ -29,7 +29,7 @@ export const StyledSolidBackground = styled(Box)(({ theme }) => ({
29
29
  backgroundColor: theme.palette.background.default,
30
30
  }));
31
31
  export const StyledCell = styled(TableCell, {
32
- shouldForwardProp: (prop) => !['isLast', 'isFirst', 'isSheetView', 'isSelected'].includes(prop),
32
+ shouldForwardProp: (prop) => !['isLast', 'isFirst', 'isSheetView'].includes(prop),
33
33
  })(({ theme, isLast, isFirst, isSheetView, isSelected }) => (Object.assign(Object.assign({ paddingBlock: '0', paddingInline: '0.3875rem !important', paddingLeft: isFirst ? '0 !important' : '0.3875rem !important', paddingRight: isLast ? '0 !important' : '0.3875rem !important', color: isSheetView ? theme.palette.text.primary : theme.palette.grey[700], fontSize: isSheetView ? theme.typography.subtitle1.fontSize : theme.typography.caption.fontSize, height: '100%', fontWeight: isSheetView ? 400 : theme.typography.fontWeightRegular, whiteSpace: 'nowrap', overflow: 'hidden', textOverflow: 'ellipsis', display: 'flex', alignItems: 'center' }, (isSheetView && {
34
34
  borderRight: isLast ? 'none' : `1px solid ${theme.palette.divider}`,
35
35
  paddingInline: '8px !important',
@@ -12,7 +12,7 @@ export { default as Checkbox } from './Checkbox';
12
12
  export { default as Dialog, DialogToolbar } from './Dialog';
13
13
  export { default as Tooltip } from './Tooltip';
14
14
  export * from './RFH';
15
- export { default as VirtualTable, TableRowLoading, TableHeader as VirtualTableHeader, TableLastItem, TableLoading, TableLoadingWithCard, TableNoData, TableNoDataWithCard, LastRowContent, ListItemWrapperWithCard, RowErrorState, StyledItemWrapper, TableRow, TableRowLoadingWithCard, TableRowWithCard, VirtualScrollInner, VirtualScrollList, VirtualScrollOuter, VirtualTableWithCard, Inputs, List, ColumnFilter, StyledCell, TableFooter, } from './VirtualTable';
15
+ export { default as VirtualTable, TableRowLoading, TableHeader as VirtualTableHeader, TableLastItem, TableLoading, TableLoadingWithCard, TableNoData, TableNoDataWithCard, LastRowContent, ListItemWrapperWithCard, RowErrorState, StyledItemWrapper, TableRow, TableRowLoadingWithCard, TableRowWithCard, VirtualScrollInner, VirtualScrollList, VirtualScrollOuter, VirtualTableWithCard, Inputs, List, ColumnFilter, StyledCell, TableFooter, TableError, } from './VirtualTable';
16
16
  export { default as SheetViewVirtualTable } from './VirtualTable/SheetView/SheetViewVirtualTable';
17
17
  export { default as Widget, ListItem, WidgetHeader, WidgetList } from './Widget';
18
18
  export { default as TapLogo } from './TapLogo';
@@ -95,3 +95,5 @@ export * from './TableHeader';
95
95
  export { default as RangeCalender } from './RangeCalender';
96
96
  export { default as AppServices } from './AppServices';
97
97
  export * from './SourceChips';
98
+ export { default as ScrollLoader } from './ScrollLoader';
99
+ export * from './ScrollLoader';
@@ -12,7 +12,7 @@ export { default as Checkbox } from './Checkbox';
12
12
  export { default as Dialog, DialogToolbar } from './Dialog';
13
13
  export { default as Tooltip } from './Tooltip';
14
14
  export * from './RFH';
15
- export { default as VirtualTable, TableRowLoading, TableHeader as VirtualTableHeader, TableLastItem, TableLoading, TableLoadingWithCard, TableNoData, TableNoDataWithCard, LastRowContent, ListItemWrapperWithCard, RowErrorState, StyledItemWrapper, TableRow, TableRowLoadingWithCard, TableRowWithCard, VirtualScrollInner, VirtualScrollList, VirtualScrollOuter, VirtualTableWithCard, Inputs, List, ColumnFilter, StyledCell, TableFooter, } from './VirtualTable';
15
+ export { default as VirtualTable, TableRowLoading, TableHeader as VirtualTableHeader, TableLastItem, TableLoading, TableLoadingWithCard, TableNoData, TableNoDataWithCard, LastRowContent, ListItemWrapperWithCard, RowErrorState, StyledItemWrapper, TableRow, TableRowLoadingWithCard, TableRowWithCard, VirtualScrollInner, VirtualScrollList, VirtualScrollOuter, VirtualTableWithCard, Inputs, List, ColumnFilter, StyledCell, TableFooter, TableError, } from './VirtualTable';
16
16
  export { default as SheetViewVirtualTable } from './VirtualTable/SheetView/SheetViewVirtualTable';
17
17
  export { default as Widget, ListItem, WidgetHeader, WidgetList } from './Widget';
18
18
  export { default as TapLogo } from './TapLogo';
@@ -95,3 +95,5 @@ export * from './TableHeader';
95
95
  export { default as RangeCalender } from './RangeCalender';
96
96
  export { default as AppServices } from './AppServices';
97
97
  export * from './SourceChips';
98
+ export { default as ScrollLoader } from './ScrollLoader';
99
+ export * from './ScrollLoader';
package/package.json CHANGED
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "name": "@tap-payments/os-micro-frontend-shared",
3
3
  "description": "Shared components and utilities for Tap Payments micro frontends",
4
- "version": "0.0.273-test.9",
5
- "testVersion": 9,
4
+ "version": "0.0.275-test.1",
5
+ "testVersion": 1,
6
6
  "type": "module",
7
7
  "main": "build/index.js",
8
8
  "module": "build/index.js",
@@ -1,7 +0,0 @@
1
- import { MouseEvent } from 'react';
2
- import { IColumnFilter } from '../../../../types/index.js';
3
- export type ColumnFilterProps = IColumnFilter & {
4
- anchorEl: HTMLElement | null;
5
- setAnchorEl: (el: HTMLElement | null) => void;
6
- onClose?: (e: MouseEvent<HTMLElement>) => void;
7
- };