@tap-payments/os-micro-frontend-shared 0.1.366 → 0.1.367-test.1-test.2-test.3

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 (75) hide show
  1. package/build/components/AnimatedSpinnerIcon/style.d.ts +0 -1
  2. package/build/components/Chip/style.d.ts +0 -1
  3. package/build/components/CountBadge/style.d.ts +0 -1
  4. package/build/components/Dialog/style.d.ts +0 -1
  5. package/build/components/FlippingCard/style.d.ts +0 -1
  6. package/build/components/ImageWrapper/ImageWrapper.d.ts +0 -1
  7. package/build/components/JSONViewer/style.d.ts +0 -1
  8. package/build/components/LeftPeekRightExpandingChip/style.d.ts +0 -1
  9. package/build/components/RightLeftExpandingCenterChip/style.d.ts +0 -1
  10. package/build/components/SearchButton/styles.d.ts +0 -1
  11. package/build/components/StatusIcons/AuthIcons/style.d.ts +0 -1
  12. package/build/components/StatusIcons/AuthorizationAutoIcons/style.d.ts +0 -1
  13. package/build/components/StatusIcons/ChargeStatusIcon/style.d.ts +0 -1
  14. package/build/components/StatusIcons/SourceIcons/style.d.ts +0 -1
  15. package/build/components/TableCells/CustomCells/ActionCell/style.d.ts +0 -1
  16. package/build/components/TableCells/CustomCells/AgreementCell/style.d.ts +0 -1
  17. package/build/components/TableCells/CustomCells/ApplicationStatusCell/style.d.ts +0 -1
  18. package/build/components/TableCells/CustomCells/AuthenticationCell/style.d.ts +0 -1
  19. package/build/components/TableCells/CustomCells/AuthenticationStatusCell/style.d.ts +0 -1
  20. package/build/components/TableCells/CustomCells/AuthenticationTypeCell/style.d.ts +0 -1
  21. package/build/components/TableCells/CustomCells/BalanceCell/style.d.ts +0 -1
  22. package/build/components/TableCells/CustomCells/ChannelsCell/style.d.ts +0 -1
  23. package/build/components/TableCells/CustomCells/CheckoutStatusCell/style.d.ts +0 -1
  24. package/build/components/TableCells/CustomCells/DestinationStatusCell/style.d.ts +0 -1
  25. package/build/components/TableCells/CustomCells/DueDateCell/style.d.ts +0 -1
  26. package/build/components/TableCells/CustomCells/IDButton/style.d.ts +0 -1
  27. package/build/components/TableCells/CustomCells/IntentsStatusCell/style.d.ts +0 -1
  28. package/build/components/TableCells/CustomCells/InvoiceStatusCell/style.d.ts +0 -1
  29. package/build/components/TableCells/CustomCells/PayoutReportCell/style.d.ts +0 -1
  30. package/build/components/TableCells/CustomCells/PayoutStatusCell/style.d.ts +0 -1
  31. package/build/components/TableCells/CustomCells/ProductsCell/style.d.ts +0 -1
  32. package/build/components/TableCells/CustomCells/ReferenceCell/style.d.ts +0 -1
  33. package/build/components/TableCells/CustomCells/RefundChargeCell/style.d.ts +0 -1
  34. package/build/components/TableCells/CustomCells/RefundStatusCell/style.d.ts +0 -1
  35. package/build/components/TableCells/CustomCells/SalesChannelCell/style.d.ts +0 -1
  36. package/build/components/TableCells/CustomCells/SegmentsCell/style.d.ts +0 -1
  37. package/build/components/TableCells/CustomCells/StatusCell/style.d.ts +0 -1
  38. package/build/components/TableCells/CustomCells/TokenStatusCell/style.d.ts +0 -1
  39. package/build/components/TableCells/CustomCells/style.d.ts +0 -1
  40. package/build/components/TableHeader/FiltersRow.d.ts +1 -1
  41. package/build/components/TableHeader/FiltersRow.js +4 -2
  42. package/build/components/TableHeader/TableHeader.d.ts +1 -1
  43. package/build/components/TableHeader/TableHeader.js +2 -2
  44. package/build/components/TableHeader/TableView/CreateViewDialog.d.ts +3 -0
  45. package/build/components/TableHeader/TableView/CreateViewDialog.js +98 -0
  46. package/build/components/TableHeader/TableView/CustomViews.js +1 -1
  47. package/build/components/TableHeader/TableView/ViewsDropdown.d.ts +22 -0
  48. package/build/components/TableHeader/TableView/ViewsDropdown.js +137 -0
  49. package/build/components/TableHeader/TableView/ViewsManager.d.ts +29 -0
  50. package/build/components/TableHeader/TableView/ViewsManager.js +108 -0
  51. package/build/components/TableHeader/TableView/constants.d.ts +10 -0
  52. package/build/components/TableHeader/TableView/constants.js +10 -0
  53. package/build/components/TableHeader/TableView/data.d.ts +5 -0
  54. package/build/components/TableHeader/TableView/data.js +54 -0
  55. package/build/components/TableHeader/TableView/hooks.d.ts +25 -0
  56. package/build/components/TableHeader/TableView/hooks.js +79 -0
  57. package/build/components/TableHeader/TableView/index.d.ts +12 -3
  58. package/build/components/TableHeader/TableView/index.js +11 -3
  59. package/build/components/TableHeader/TableView/styles.d.ts +114 -0
  60. package/build/components/TableHeader/TableView/styles.js +399 -0
  61. package/build/components/TableHeader/TableView/types.d.ts +52 -0
  62. package/build/components/TableHeader/TableView/types.js +1 -0
  63. package/build/components/TableHeader/TableView/utils.d.ts +74 -0
  64. package/build/components/TableHeader/TableView/utils.js +234 -0
  65. package/build/components/TableHeader/type.d.ts +16 -0
  66. package/build/components/TableReports/components/DownloadButton/style.d.ts +0 -1
  67. package/build/components/TableReports/style.d.ts +0 -1
  68. package/build/components/VirtualTables/components/style.d.ts +0 -1
  69. package/build/constants/assets.d.ts +1 -0
  70. package/build/constants/assets.js +1 -0
  71. package/build/constants/reports.d.ts +18 -1
  72. package/build/constants/reports.js +77 -27
  73. package/build/types/apps.d.ts +9 -9
  74. package/build/utils/navigation.d.ts +1 -1
  75. package/package.json +3 -3
@@ -0,0 +1,137 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import React, { useMemo } from 'react';
3
+ import Popper from '@mui/material/Popper';
4
+ import Box from '@mui/material/Box';
5
+ import Typography from '@mui/material/Typography';
6
+ import Divider from '@mui/material/Divider';
7
+ import Button from '@mui/material/Button';
8
+ import { useTranslation } from 'react-i18next';
9
+ import { bluePlusIcon, editIcon, smallBlueCheckIcon, blackRightArrowIcon } from '../../../constants/index.js';
10
+ import { Menu, MenuItem as NestedMenuItem, Tooltip, Checkbox } from '../../index.js';
11
+ import { useSubmenuHover, useOriginalColumns } from './hooks';
12
+ import { MAX_CUSTOM_VIEWS } from './constants';
13
+ import { defaultViewList } from './data';
14
+ import { ListStyled, DropdownStyled, MenuItem, Space, SpaceAfter, ResetHeaderBox, ResetCheckboxSx, SubmenuContainer, ColumnItemsContainer, SaveCustomViewBox, SaveCustomViewInnerBox, ButtonsContainer, CancelButtonSx, OkayButtonSx, } from './styles';
15
+ import { deepCloneColumns, toggleSingleColumn, getSubmenuItems, hasSubmenu, areAllCurrentColumnsSelected, areSomeCurrentColumnsSelected, toggleAllCurrentColumns, } from './utils';
16
+ function ViewsDropdown({ open, selectedViewInfo, setSelectedViewInfo, onSelect, setViews, anchorEl, onCreateCustomView, customViews = [], onEditCustomView, defaultColumns = [], setDefaultColumns, }) {
17
+ const { t } = useTranslation();
18
+ const { hoveredColumn: hoveredItem, anchorEl: submenuAnchorEl, openSubmenu: handleMenuItemHover, closeSubmenu: handleMenuItemLeave, cancelClose: handleSubmenuEnter, forceClose: handleSubmenuLeave, } = useSubmenuHover();
19
+ const [hoveredCustomView, setHoveredCustomView] = React.useState(null);
20
+ const { originalColumns, saveOriginalState, clearOriginalState } = useOriginalColumns(defaultColumns);
21
+ const viewList = [...defaultViewList, ...customViews];
22
+ const toggleColumnSelection = (columnName) => {
23
+ if (!setDefaultColumns)
24
+ return;
25
+ const newColumns = toggleSingleColumn(defaultColumns, columnName);
26
+ setDefaultColumns(newColumns);
27
+ };
28
+ const getHoveredSubmenu = () => {
29
+ if (!hoveredItem)
30
+ return [];
31
+ const item = viewList.find((i) => i.id === hoveredItem);
32
+ return item ? getSubmenuItems(item, defaultColumns) : [];
33
+ };
34
+ const currentSubmenuColumns = useMemo(() => getHoveredSubmenu(), [hoveredItem, defaultColumns, viewList]);
35
+ const allCurrentSelected = useMemo(() => areAllCurrentColumnsSelected(currentSubmenuColumns), [currentSubmenuColumns]);
36
+ const someCurrentSelected = useMemo(() => areSomeCurrentColumnsSelected(currentSubmenuColumns, allCurrentSelected), [currentSubmenuColumns, allCurrentSelected]);
37
+ const handleSelectAll = () => {
38
+ if (!setDefaultColumns)
39
+ return;
40
+ const shouldSelectAll = !allCurrentSelected;
41
+ const newColumns = toggleAllCurrentColumns(defaultColumns, shouldSelectAll);
42
+ setDefaultColumns(newColumns);
43
+ };
44
+ const handleReset = () => {
45
+ if (!setDefaultColumns || originalColumns.length === 0)
46
+ return;
47
+ const restoredColumns = deepCloneColumns(originalColumns);
48
+ setDefaultColumns([...restoredColumns]);
49
+ };
50
+ const handleSaveAsCustomView = (e) => {
51
+ e.stopPropagation();
52
+ handleSubmenuLeave();
53
+ onCreateCustomView === null || onCreateCustomView === void 0 ? void 0 : onCreateCustomView();
54
+ };
55
+ const handleCancel = () => {
56
+ if (setDefaultColumns && originalColumns.length > 0) {
57
+ const restoredColumns = deepCloneColumns(originalColumns);
58
+ setDefaultColumns(restoredColumns);
59
+ }
60
+ clearOriginalState();
61
+ handleSubmenuLeave();
62
+ };
63
+ const handleOkay = () => {
64
+ clearOriginalState();
65
+ handleSubmenuLeave();
66
+ };
67
+ const handleOpenSubmenu = (itemId, element) => {
68
+ saveOriginalState();
69
+ handleMenuItemHover(itemId, element);
70
+ };
71
+ const shouldDimNewCustomView = customViews.length >= MAX_CUSTOM_VIEWS;
72
+ return (_jsxs(DropdownStyled, Object.assign({ "data-testid": "ViewsDropdown" }, { children: [_jsx(Popper, Object.assign({ open: open, anchorEl: anchorEl, placement: "bottom-start" }, { children: _jsxs(ListStyled, { children: [_jsx(Typography, Object.assign({ sx: {
73
+ paddingX: 1.25,
74
+ py: 1.1,
75
+ fontWeight: 500,
76
+ fontSize: 11,
77
+ color: '#8D8D94',
78
+ } }, { children: "View" })), _jsx(Divider, {}), viewList.map((item) => (_jsxs(MenuItem, Object.assign({ onMouseEnter: (e) => {
79
+ if (item.isCustom) {
80
+ setHoveredCustomView(item.id);
81
+ }
82
+ else if (hasSubmenu(item, defaultColumns)) {
83
+ handleOpenSubmenu(item.id, e.currentTarget);
84
+ }
85
+ }, onMouseLeave: () => {
86
+ if (item.isCustom) {
87
+ setHoveredCustomView(null);
88
+ }
89
+ else if (hasSubmenu(item, defaultColumns)) {
90
+ handleMenuItemLeave();
91
+ }
92
+ }, onClick: () => {
93
+ setSelectedViewInfo(item);
94
+ if (item.columns)
95
+ setViews === null || setViews === void 0 ? void 0 : setViews(item.columns);
96
+ }, sx: { position: 'relative', cursor: 'pointer', pr: 1.5 } }, { children: [item.id === selectedViewInfo.id ? (_jsx("img", { style: {
97
+ width: 15,
98
+ height: 15,
99
+ }, className: "check-icon", src: smallBlueCheckIcon, alt: "check" })) : (_jsx(Space, {})), _jsx("span", Object.assign({ style: { flex: 1 } }, { children: item.label })), item.isCustom && hoveredCustomView === item.id && (_jsx("img", { src: editIcon, alt: "edit", style: { width: 12, height: 12, cursor: 'pointer' }, onClick: (e) => {
100
+ e.stopPropagation();
101
+ onSelect(e);
102
+ onEditCustomView === null || onEditCustomView === void 0 ? void 0 : onEditCustomView(item);
103
+ } })), !item.isCustom && hasSubmenu(item, defaultColumns) && _jsx("img", { src: blackRightArrowIcon, alt: "arrow", style: { height: 12 } })] }), item.id))), _jsx(Tooltip, Object.assign({ title: "Limit reached. Delete a view to create a new one.", placement: "left", disableHoverListener: !shouldDimNewCustomView }, { children: _jsxs(MenuItem, Object.assign({ sx: {
104
+ border: 'none',
105
+ opacity: shouldDimNewCustomView ? 0.5 : 1,
106
+ cursor: shouldDimNewCustomView ? 'not-allowed' : 'pointer',
107
+ }, onClick: (e) => {
108
+ if (shouldDimNewCustomView) {
109
+ e.stopPropagation();
110
+ return;
111
+ }
112
+ e.stopPropagation();
113
+ handleSubmenuLeave();
114
+ onSelect(e);
115
+ onCreateCustomView === null || onCreateCustomView === void 0 ? void 0 : onCreateCustomView();
116
+ } }, { children: [_jsx(Space, {}), _jsxs(Box, Object.assign({ sx: { display: 'flex', alignItems: 'center', gap: 0.5 } }, { children: [_jsx("img", { src: bluePlusIcon, alt: "icon", style: { opacity: shouldDimNewCustomView ? 0.5 : 1, width: 10, height: 10 } }), _jsx("span", Object.assign({ style: { color: shouldDimNewCustomView ? '#999' : '#1F88D0', fontSize: 11, fontWeight: 500 } }, { children: t('New Custom View') }))] })), _jsx(SpaceAfter, {})] })) }))] }) })), hoveredItem && submenuAnchorEl && getHoveredSubmenu().length > 0 && (_jsx(Menu, Object.assign({ open: Boolean(hoveredItem), anchorEl: submenuAnchorEl, placement: "right-start", onMouseEnter: handleSubmenuEnter, onMouseLeave: handleSubmenuLeave }, { children: _jsxs(SubmenuContainer, { children: [_jsxs(ResetHeaderBox, { children: [_jsxs(Box, Object.assign({ sx: { display: 'flex', alignItems: 'center', gap: 1 } }, { children: [_jsx(Checkbox, { checked: allCurrentSelected, indeterminate: someCurrentSelected, onChange: (e) => {
117
+ e.stopPropagation();
118
+ handleSelectAll();
119
+ }, onClick: (e) => {
120
+ e.stopPropagation();
121
+ }, sx: ResetCheckboxSx }), _jsx(Typography, Object.assign({ sx: { fontSize: 12, fontWeight: 500, color: 'text.primary' } }, { children: "Select All" }))] })), _jsx(Typography, Object.assign({ component: "button", onClick: (e) => {
122
+ e.stopPropagation();
123
+ handleReset();
124
+ }, sx: {
125
+ fontSize: 11,
126
+ fontWeight: 500,
127
+ color: '#1F88D0',
128
+ background: 'none',
129
+ border: 'none',
130
+ cursor: 'pointer',
131
+ padding: 0,
132
+ '&:hover': {
133
+ textDecoration: 'underline',
134
+ },
135
+ } }, { children: "Reset" }))] }), _jsx(Divider, {}), _jsx(ColumnItemsContainer, { children: getHoveredSubmenu().map((column) => (_jsx(NestedMenuItem, Object.assign({ isSelected: column.selected, onClick: () => toggleColumnSelection(column.name) }, { children: column.label || column.name }), column.name))) }), _jsx(SaveCustomViewBox, { children: _jsx(Tooltip, Object.assign({ title: "Limit reached. Delete a view to create a new one.", placement: "left", disableHoverListener: !shouldDimNewCustomView }, { children: _jsxs(SaveCustomViewInnerBox, Object.assign({ disabled: shouldDimNewCustomView, onClick: shouldDimNewCustomView ? undefined : handleSaveAsCustomView }, { children: [_jsx(Typography, Object.assign({ sx: { fontSize: 11, color: 'text.secondary' } }, { children: "Save as a custom view" })), _jsxs(Box, Object.assign({ sx: { display: 'flex', alignItems: 'center', gap: 0.5 } }, { children: [_jsx("img", { src: bluePlusIcon, alt: "add", style: { width: 10, height: 10, opacity: shouldDimNewCustomView ? 0.5 : 1 } }), _jsx(Typography, Object.assign({ sx: { fontSize: 10, fontWeight: 600, color: shouldDimNewCustomView ? '#999' : '#1F88D0' } }, { children: "Custom View" }))] }))] })) })) }), _jsxs(ButtonsContainer, { children: [_jsx(Button, Object.assign({ variant: "text", onClick: handleCancel, sx: CancelButtonSx }, { children: "Cancel" })), _jsx(Button, Object.assign({ variant: "contained", onClick: handleOkay, sx: OkayButtonSx }, { children: "Okay" }))] })] }) })))] })));
136
+ }
137
+ export default React.memo(ViewsDropdown);
@@ -0,0 +1,29 @@
1
+ /// <reference types="react" />
2
+ import type { ColumnViewProps } from '../../../types/index.js';
3
+ import type { TableHeaderProps } from '../type';
4
+ import type { ViewMenuItem, ViewMode } from './types';
5
+ interface ViewsManagerProps {
6
+ onViewChange?: TableHeaderProps['onViewChange'];
7
+ setIsViewVisible: (visible: boolean) => void;
8
+ setTableViews?: TableHeaderProps['setTableViews'];
9
+ tableViews?: TableHeaderProps['tableViews'];
10
+ resetTableViews?: TableHeaderProps['resetTableViews'];
11
+ customViews?: ViewMenuItem[];
12
+ onCreateCustomView?: (data: {
13
+ name: string;
14
+ selectedColumns: ColumnViewProps[];
15
+ }) => Promise<void>;
16
+ onEditCustomView?: (viewId: string, data: {
17
+ name: string;
18
+ selectedColumns: ColumnViewProps[];
19
+ }) => Promise<void>;
20
+ onDeleteCustomView?: (viewId: string) => Promise<void>;
21
+ mode?: ViewMode;
22
+ onTableViewsChange?: (tableViews: ColumnViewProps[]) => void;
23
+ initialTableViews?: ColumnViewProps[];
24
+ onCustomViewsChange?: (customViews: ViewMenuItem[]) => void;
25
+ initialCustomViews?: ViewMenuItem[];
26
+ }
27
+ declare function ViewsManager({ onViewChange, setIsViewVisible, setTableViews, tableViews: externalTableViews, resetTableViews, customViews: externalCustomViews, onCreateCustomView, onEditCustomView, onDeleteCustomView, mode, onTableViewsChange, initialTableViews, onCustomViewsChange, initialCustomViews, }: Readonly<ViewsManagerProps>): import("react/jsx-runtime").JSX.Element;
28
+ declare const _default: import("react").MemoExoticComponent<typeof ViewsManager>;
29
+ export default _default;
@@ -0,0 +1,108 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
11
+ import { memo, useState } from 'react';
12
+ import { useTranslation } from 'react-i18next';
13
+ import ClickAwayListener from '@mui/material/ClickAwayListener';
14
+ import { Icon, StyledButton } from '../../index.js';
15
+ import { viewIcon } from '../../../constants/index.js';
16
+ import ViewsDropdown from './ViewsDropdown';
17
+ import CreateViewDialog from './CreateViewDialog';
18
+ import { getColumnsByMode, createCustomViewMenuItem } from './utils';
19
+ import { ViewWrapper } from './styles';
20
+ function ViewsManager({ onViewChange, setIsViewVisible, setTableViews, tableViews: externalTableViews, resetTableViews, customViews: externalCustomViews, onCreateCustomView, onEditCustomView, onDeleteCustomView, mode = 'sheet', onTableViewsChange, initialTableViews, onCustomViewsChange, initialCustomViews, }) {
21
+ const { t } = useTranslation();
22
+ const [anchorViewEl, setAnchorViewEl] = useState(null);
23
+ const [defaultViewEl, setDefaultViewElement] = useState(null);
24
+ const [isCreateDialogOpen, setIsCreateDialogOpen] = useState(false);
25
+ const [editingView, setEditingView] = useState(null);
26
+ const [selectedViewInfo, setSelectedViewInfo] = useState({ id: 'default', label: 'Default' });
27
+ const [defaultColumns, setDefaultColumns] = useState(() => getColumnsByMode(mode));
28
+ // Internal state for tableViews if not provided externally
29
+ const [internalTableViews, setInternalTableViews] = useState(initialTableViews || []);
30
+ // Use external tableViews if provided, otherwise use internal state
31
+ const tableViews = externalTableViews !== null && externalTableViews !== void 0 ? externalTableViews : internalTableViews;
32
+ const setTableViewsState = setTableViews !== null && setTableViews !== void 0 ? setTableViews : setInternalTableViews;
33
+ // Notify parent of changes if callback provided
34
+ const handleTableViewsChange = (newTableViews) => {
35
+ setTableViewsState(newTableViews);
36
+ onTableViewsChange === null || onTableViewsChange === void 0 ? void 0 : onTableViewsChange(newTableViews);
37
+ };
38
+ // Internal state for customViews if not provided externally
39
+ const [internalCustomViews, setInternalCustomViews] = useState(initialCustomViews || []);
40
+ // Use external customViews if provided, otherwise use internal state
41
+ const customViews = externalCustomViews !== null && externalCustomViews !== void 0 ? externalCustomViews : internalCustomViews;
42
+ // Notify parent of customViews changes if callback provided
43
+ const handleCustomViewsChange = (newCustomViews) => {
44
+ setInternalCustomViews(newCustomViews);
45
+ onCustomViewsChange === null || onCustomViewsChange === void 0 ? void 0 : onCustomViewsChange(newCustomViews);
46
+ };
47
+ const handleViewButtonClick = (event) => {
48
+ onViewChange === null || onViewChange === void 0 ? void 0 : onViewChange();
49
+ setAnchorViewEl(event.currentTarget);
50
+ setDefaultViewElement(event.currentTarget);
51
+ };
52
+ const handleCloseViewDropdown = () => {
53
+ setDefaultViewElement(null);
54
+ };
55
+ const handleClose = () => {
56
+ setAnchorViewEl(null);
57
+ setDefaultViewElement(null);
58
+ setSelectedViewInfo({ label: 'Default', id: 'default' });
59
+ };
60
+ const handleSelectedViewInfo = (selected) => {
61
+ setSelectedViewInfo(selected);
62
+ handleCloseViewDropdown();
63
+ };
64
+ const handleOpenCreateDialog = () => {
65
+ setEditingView(null);
66
+ setIsCreateDialogOpen(true);
67
+ };
68
+ const handleOpenEditDialog = (view) => {
69
+ setEditingView(view);
70
+ setIsCreateDialogOpen(true);
71
+ };
72
+ const handleCloseCreateDialog = () => {
73
+ setIsCreateDialogOpen(false);
74
+ setEditingView(null);
75
+ };
76
+ const handleSaveView = (data) => __awaiter(this, void 0, void 0, function* () {
77
+ if (editingView) {
78
+ // Update existing custom view
79
+ const updatedViews = customViews.map((view) => view.id === editingView.id
80
+ ? Object.assign(Object.assign({}, view), { label: data.name, columns: data.selectedColumns.map((col) => col.name), submenu: data.selectedColumns }) : view);
81
+ handleCustomViewsChange(updatedViews);
82
+ yield (onEditCustomView === null || onEditCustomView === void 0 ? void 0 : onEditCustomView(editingView.id, data));
83
+ }
84
+ else {
85
+ // Create new custom view
86
+ const newView = createCustomViewMenuItem(data.name, data.selectedColumns);
87
+ const updatedViews = [...customViews, newView];
88
+ handleCustomViewsChange(updatedViews);
89
+ yield (onCreateCustomView === null || onCreateCustomView === void 0 ? void 0 : onCreateCustomView(data));
90
+ }
91
+ });
92
+ const handleDeleteView = (viewId) => __awaiter(this, void 0, void 0, function* () {
93
+ const updatedViews = customViews.filter((view) => view.id !== viewId);
94
+ handleCustomViewsChange(updatedViews);
95
+ yield (onDeleteCustomView === null || onDeleteCustomView === void 0 ? void 0 : onDeleteCustomView(viewId));
96
+ });
97
+ return (_jsxs(_Fragment, { children: [_jsx(ClickAwayListener, Object.assign({ onClickAway: handleCloseViewDropdown }, { children: _jsxs(ViewWrapper, Object.assign({ "data-testid": "ViewsManager" }, { children: [_jsx(StyledButton, Object.assign({ title: t('tableView'), "data-testid": "ViewsManager_button", onClick: handleViewButtonClick }, { children: _jsx(Icon, { src: viewIcon, alt: "view", sx: { width: 14, height: 14 } }) })), _jsx(ViewsDropdown, { open: Boolean(defaultViewEl), anchorEl: anchorViewEl, setSelectedViewInfo: handleSelectedViewInfo, selectedViewInfo: selectedViewInfo, onSelect: (e) => setDefaultViewElement(defaultViewEl ? null : e.currentTarget), setViews: (views) => {
98
+ if (resetTableViews) {
99
+ resetTableViews({ id: views[0], label: views[0] });
100
+ }
101
+ else {
102
+ // If no resetTableViews provided, reset to initial or default columns
103
+ const resetColumns = initialTableViews || getColumnsByMode(mode);
104
+ handleTableViewsChange(resetColumns);
105
+ }
106
+ }, tableViews: tableViews, setTableViews: handleTableViewsChange, onCreateCustomView: handleOpenCreateDialog, customViews: customViews, onEditCustomView: handleOpenEditDialog, defaultColumns: defaultColumns, setDefaultColumns: setDefaultColumns })] })) })), _jsx(CreateViewDialog, { open: isCreateDialogOpen, onClose: handleCloseCreateDialog, availableColumns: defaultColumns, defaultColumns: defaultColumns, onCreate: handleSaveView, editingView: editingView, onDelete: handleDeleteView })] }));
107
+ }
108
+ export default memo(ViewsManager);
@@ -0,0 +1,10 @@
1
+ export declare const DIALOG_WIDTH = 450;
2
+ export declare const DIALOG_HEIGHT = 600;
3
+ export declare const SUBMENU_CLOSE_DELAY = 150;
4
+ export declare const MAX_CUSTOM_VIEWS = 3;
5
+ export declare const TEMPLATE_NAME_MAX_LENGTH = 20;
6
+ export declare const DATE_COLUMN_CONFIG: {
7
+ readonly name: "date";
8
+ readonly label: "Date & Time";
9
+ readonly selected: true;
10
+ };
@@ -0,0 +1,10 @@
1
+ export const DIALOG_WIDTH = 450;
2
+ export const DIALOG_HEIGHT = 600;
3
+ export const SUBMENU_CLOSE_DELAY = 150;
4
+ export const MAX_CUSTOM_VIEWS = 3;
5
+ export const TEMPLATE_NAME_MAX_LENGTH = 20;
6
+ export const DATE_COLUMN_CONFIG = {
7
+ name: 'date',
8
+ label: 'Date & Time',
9
+ selected: true,
10
+ };
@@ -0,0 +1,5 @@
1
+ import type { ColumnViewProps } from '../../../types/index.js';
2
+ import type { ViewMenuItem } from './types';
3
+ export declare const advancedColumns: ColumnViewProps[];
4
+ export declare const sheetColumns: ColumnViewProps[];
5
+ export declare const defaultViewList: ViewMenuItem[];
@@ -0,0 +1,54 @@
1
+ // ============================================
2
+ // Column Layouts (Mock Data)
3
+ // ============================================
4
+ export const advancedColumns = [
5
+ {
6
+ name: 'customer',
7
+ label: 'Customer',
8
+ selected: true,
9
+ menuItems: [
10
+ { name: 'customer_id', label: 'ID', selected: true },
11
+ { name: 'customer_name', label: 'Name', selected: true },
12
+ { name: 'customer_email', label: 'Email', selected: true },
13
+ { name: 'customer_phone', label: 'Phone', selected: false },
14
+ ],
15
+ },
16
+ {
17
+ name: 'transaction',
18
+ label: 'Transaction',
19
+ selected: true,
20
+ menuItems: [
21
+ { name: 'transaction_id', label: 'Transaction ID', selected: true },
22
+ { name: 'transaction_amount', label: 'Amount', selected: true },
23
+ { name: 'transaction_status', label: 'Status', selected: false },
24
+ { name: 'transaction_type', label: 'Type', selected: false },
25
+ ],
26
+ },
27
+ {
28
+ name: 'payment',
29
+ label: 'Payment',
30
+ selected: false,
31
+ menuItems: [
32
+ { name: 'payment_method', label: 'Method', selected: false },
33
+ { name: 'payment_card', label: 'Card', selected: false },
34
+ { name: 'payment_bank', label: 'Bank', selected: false },
35
+ ],
36
+ },
37
+ ];
38
+ export const sheetColumns = [
39
+ { name: 'customerID', label: 'Customer ID', selected: true },
40
+ { name: 'customerName', label: 'Customer Name', selected: true },
41
+ { name: 'amount', label: 'Amount', selected: true },
42
+ { name: 'status', label: 'Status', selected: false },
43
+ { name: 'currency', label: 'Currency', selected: false },
44
+ { name: 'reference', label: 'Reference', selected: true },
45
+ ];
46
+ // ============================================
47
+ // Default View List
48
+ // ============================================
49
+ export const defaultViewList = [
50
+ {
51
+ label: 'Default',
52
+ id: 'default',
53
+ },
54
+ ];
@@ -0,0 +1,25 @@
1
+ import type { ColumnViewProps } from '../../../types/index.js';
2
+ export { useSubMenu } from './hooks/useSubMenu';
3
+ export { useViewColumns } from './hooks/useViewColumns';
4
+ export { useColumnItem } from './hooks/useColumnItem';
5
+ export declare const useSubmenuHover: () => {
6
+ hoveredColumn: string | null;
7
+ anchorEl: HTMLElement | null;
8
+ openSubmenu: (columnName: string, element: HTMLElement) => void;
9
+ closeSubmenu: () => void;
10
+ cancelClose: () => void;
11
+ forceClose: () => void;
12
+ };
13
+ export declare const useDialogPosition: (width: number, height: number, dialogWidth: number, dialogHeight: number) => {
14
+ position: {
15
+ x: number;
16
+ y: number;
17
+ };
18
+ resetPosition: () => void;
19
+ updatePosition: (x: number, y: number) => void;
20
+ };
21
+ export declare const useOriginalColumns: (defaultColumns: ColumnViewProps[]) => {
22
+ originalColumns: ColumnViewProps[];
23
+ saveOriginalState: () => void;
24
+ clearOriginalState: () => void;
25
+ };
@@ -0,0 +1,79 @@
1
+ import { useState, useRef, useCallback } from 'react';
2
+ import { SUBMENU_CLOSE_DELAY } from './constants';
3
+ export { useSubMenu } from './hooks/useSubMenu';
4
+ export { useViewColumns } from './hooks/useViewColumns';
5
+ export { useColumnItem } from './hooks/useColumnItem';
6
+ export const useSubmenuHover = () => {
7
+ const [hoveredColumn, setHoveredColumn] = useState(null);
8
+ const [anchorEl, setAnchorEl] = useState(null);
9
+ const closeTimeoutRef = useRef(null);
10
+ const openSubmenu = useCallback((columnName, element) => {
11
+ if (closeTimeoutRef.current) {
12
+ clearTimeout(closeTimeoutRef.current);
13
+ closeTimeoutRef.current = null;
14
+ }
15
+ setHoveredColumn(columnName);
16
+ setAnchorEl(element);
17
+ }, []);
18
+ const closeSubmenu = useCallback(() => {
19
+ closeTimeoutRef.current = setTimeout(() => {
20
+ setHoveredColumn(null);
21
+ setAnchorEl(null);
22
+ }, SUBMENU_CLOSE_DELAY);
23
+ }, []);
24
+ const cancelClose = useCallback(() => {
25
+ if (closeTimeoutRef.current) {
26
+ clearTimeout(closeTimeoutRef.current);
27
+ closeTimeoutRef.current = null;
28
+ }
29
+ }, []);
30
+ const forceClose = useCallback(() => {
31
+ if (closeTimeoutRef.current) {
32
+ clearTimeout(closeTimeoutRef.current);
33
+ closeTimeoutRef.current = null;
34
+ }
35
+ setHoveredColumn(null);
36
+ setAnchorEl(null);
37
+ }, []);
38
+ return {
39
+ hoveredColumn,
40
+ anchorEl,
41
+ openSubmenu,
42
+ closeSubmenu,
43
+ cancelClose,
44
+ forceClose,
45
+ };
46
+ };
47
+ export const useDialogPosition = (width, height, dialogWidth, dialogHeight) => {
48
+ const [position, setPosition] = useState({
49
+ x: width / 2 - dialogWidth / 2,
50
+ y: height / 2 - dialogHeight / 2,
51
+ });
52
+ const resetPosition = useCallback(() => {
53
+ setPosition({
54
+ x: width / 2 - dialogWidth / 2,
55
+ y: height / 2 - dialogHeight / 2,
56
+ });
57
+ }, [width, height, dialogWidth, dialogHeight]);
58
+ const updatePosition = useCallback((x, y) => {
59
+ setPosition({ x, y });
60
+ }, []);
61
+ return { position, resetPosition, updatePosition };
62
+ };
63
+ export const useOriginalColumns = (defaultColumns) => {
64
+ const [originalColumns, setOriginalColumns] = useState([]);
65
+ const saveOriginalState = useCallback(() => {
66
+ setOriginalColumns(defaultColumns.map((col) => {
67
+ var _a;
68
+ return (Object.assign(Object.assign({}, col), { selected: col.selected, menuItems: (_a = col.menuItems) === null || _a === void 0 ? void 0 : _a.map((item) => (Object.assign(Object.assign({}, item), { selected: item.selected }))) }));
69
+ }));
70
+ }, [defaultColumns]);
71
+ const clearOriginalState = useCallback(() => {
72
+ setOriginalColumns([]);
73
+ }, []);
74
+ return {
75
+ originalColumns,
76
+ saveOriginalState,
77
+ clearOriginalState,
78
+ };
79
+ };
@@ -1,3 +1,12 @@
1
- import TableView from './TableView';
2
- export * from './TableView';
3
- export default TableView;
1
+ export { default } from './TableView';
2
+ export { default as TableView } from './TableView';
3
+ export { default as DefaultViews } from './DefaultViews';
4
+ export { default as CustomViews } from './CustomViews';
5
+ export { default as ViewsManager } from './ViewsManager';
6
+ export { default as ViewsDropdown } from './ViewsDropdown';
7
+ export { default as CreateViewDialog } from './CreateViewDialog';
8
+ export type { ViewMenuItem, ViewMode, CreateCustomViewDialogProps, LayoutSection, ColumnItem, FieldItem } from './types';
9
+ export { transformLayoutToColumns, getColumnsByMode, createCustomViewMenuItem, isDateColumn, getColumnCheckState } from './utils';
10
+ export { useSubmenuHover, useDialogPosition } from './hooks';
11
+ export { DIALOG_WIDTH, DIALOG_HEIGHT, MAX_CUSTOM_VIEWS, TEMPLATE_NAME_MAX_LENGTH } from './constants';
12
+ export { defaultViewList, advancedColumns, sheetColumns } from './data';
@@ -1,3 +1,11 @@
1
- import TableView from './TableView';
2
- export * from './TableView';
3
- export default TableView;
1
+ export { default } from './TableView';
2
+ export { default as TableView } from './TableView';
3
+ export { default as DefaultViews } from './DefaultViews';
4
+ export { default as CustomViews } from './CustomViews';
5
+ export { default as ViewsManager } from './ViewsManager';
6
+ export { default as ViewsDropdown } from './ViewsDropdown';
7
+ export { default as CreateViewDialog } from './CreateViewDialog';
8
+ export { transformLayoutToColumns, getColumnsByMode, createCustomViewMenuItem, isDateColumn, getColumnCheckState } from './utils';
9
+ export { useSubmenuHover, useDialogPosition } from './hooks';
10
+ export { DIALOG_WIDTH, DIALOG_HEIGHT, MAX_CUSTOM_VIEWS, TEMPLATE_NAME_MAX_LENGTH } from './constants';
11
+ export { defaultViewList, advancedColumns, sheetColumns } from './data';