@tap-payments/os-micro-frontend-shared 0.1.373-test.1 → 0.1.374-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 (71) hide show
  1. package/build/components/FilterDropdown/FilterDropdown.d.ts +11 -4
  2. package/build/components/FilterDropdown/FilterDropdown.js +18 -4
  3. package/build/components/FilterDropdown/style.js +1 -1
  4. package/build/components/MultiDatakeyDonut/MultiDatakeyDonut.d.ts +12 -0
  5. package/build/components/MultiDatakeyDonut/MultiDatakeyDonut.js +19 -0
  6. package/build/components/MultiDatakeyDonut/index.d.ts +1 -0
  7. package/build/components/MultiDatakeyDonut/index.js +1 -0
  8. package/build/components/MultiDatakeyDonut/style.d.ts +10 -0
  9. package/build/components/MultiDatakeyDonut/style.js +23 -0
  10. package/build/components/RangeCalender/RangeCalender.js +4 -2
  11. package/build/components/Sandbox/style.js +2 -3
  12. package/build/components/TableHeader/FiltersRow.d.ts +1 -1
  13. package/build/components/TableHeader/FiltersRow.js +2 -4
  14. package/build/components/TableHeader/TableHeader.d.ts +1 -1
  15. package/build/components/TableHeader/TableHeader.js +2 -2
  16. package/build/components/TableHeader/TableView/CustomViews.js +1 -1
  17. package/build/components/TableHeader/TableView/TableView.js +1 -0
  18. package/build/components/TableHeader/TableView/hooks/index.d.ts +0 -6
  19. package/build/components/TableHeader/TableView/hooks/index.js +0 -6
  20. package/build/components/TableHeader/TableView/index.d.ts +3 -12
  21. package/build/components/TableHeader/TableView/index.js +3 -13
  22. package/build/components/TableHeader/type.d.ts +1 -21
  23. package/build/components/Toolbar/Toolbar.js +1 -1
  24. package/build/components/index.d.ts +1 -0
  25. package/build/components/index.js +1 -0
  26. package/build/constants/apps.js +2 -0
  27. package/build/constants/assets.d.ts +2 -1
  28. package/build/constants/assets.js +2 -1
  29. package/build/types/index.d.ts +1 -0
  30. package/build/types/index.js +1 -0
  31. package/build/types/reports.d.ts +21 -0
  32. package/build/types/toggleOptions.d.ts +2 -0
  33. package/build/utils/date.d.ts +5 -0
  34. package/build/utils/date.js +37 -0
  35. package/package.json +1 -1
  36. package/build/components/TableHeader/TableView/CreateViewDialog.d.ts +0 -3
  37. package/build/components/TableHeader/TableView/CreateViewDialog.js +0 -92
  38. package/build/components/TableHeader/TableView/ViewSelector.d.ts +0 -5
  39. package/build/components/TableHeader/TableView/ViewSelector.js +0 -44
  40. package/build/components/TableHeader/TableView/ViewsDropdown.d.ts +0 -5
  41. package/build/components/TableHeader/TableView/ViewsDropdown.js +0 -206
  42. package/build/components/TableHeader/TableView/components/ColumnList.d.ts +0 -3
  43. package/build/components/TableHeader/TableView/components/ColumnList.js +0 -70
  44. package/build/components/TableHeader/TableView/components/ViewsSubmenu.d.ts +0 -3
  45. package/build/components/TableHeader/TableView/components/ViewsSubmenu.js +0 -52
  46. package/build/components/TableHeader/TableView/components/index.d.ts +0 -2
  47. package/build/components/TableHeader/TableView/components/index.js +0 -2
  48. package/build/components/TableHeader/TableView/constants.d.ts +0 -10
  49. package/build/components/TableHeader/TableView/constants.js +0 -10
  50. package/build/components/TableHeader/TableView/data.d.ts +0 -5
  51. package/build/components/TableHeader/TableView/data.js +0 -48
  52. package/build/components/TableHeader/TableView/hooks/useCreateViewDialog.d.ts +0 -22
  53. package/build/components/TableHeader/TableView/hooks/useCreateViewDialog.js +0 -88
  54. package/build/components/TableHeader/TableView/hooks/useDialogPosition.d.ts +0 -8
  55. package/build/components/TableHeader/TableView/hooks/useDialogPosition.js +0 -16
  56. package/build/components/TableHeader/TableView/hooks/useNestedSubmenu.d.ts +0 -7
  57. package/build/components/TableHeader/TableView/hooks/useNestedSubmenu.js +0 -34
  58. package/build/components/TableHeader/TableView/hooks/useOriginalColumns.d.ts +0 -6
  59. package/build/components/TableHeader/TableView/hooks/useOriginalColumns.js +0 -18
  60. package/build/components/TableHeader/TableView/hooks/useSubmenuHover.d.ts +0 -8
  61. package/build/components/TableHeader/TableView/hooks/useSubmenuHover.js +0 -43
  62. package/build/components/TableHeader/TableView/hooks/useViewSelector.d.ts +0 -56
  63. package/build/components/TableHeader/TableView/hooks/useViewSelector.js +0 -177
  64. package/build/components/TableHeader/TableView/hooks/useViewsManager.d.ts +0 -12
  65. package/build/components/TableHeader/TableView/hooks/useViewsManager.js +0 -106
  66. package/build/components/TableHeader/TableView/styles.d.ts +0 -127
  67. package/build/components/TableHeader/TableView/styles.js +0 -417
  68. package/build/components/TableHeader/TableView/types.d.ts +0 -179
  69. package/build/components/TableHeader/TableView/utils.d.ts +0 -121
  70. package/build/components/TableHeader/TableView/utils.js +0 -457
  71. /package/build/{components/TableHeader/TableView/types.js → types/toggleOptions.js} +0 -0
@@ -1,92 +0,0 @@
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 } from "react/jsx-runtime";
11
- import React, { useState } from 'react';
12
- import { Box, Typography, CircularProgress, Dialog } from '@mui/material';
13
- import { useTranslation } from 'react-i18next';
14
- import Draggable from 'react-draggable';
15
- import { InputBase } from '../../index.js';
16
- import { useToast } from '../../../hooks/index.js';
17
- import Toolbar, { StyledHeaderWrapperStyled } from '../../Toolbar';
18
- import { CloseIcon } from '../../ToolbarIcon';
19
- import { TEMPLATE_NAME_MAX_LENGTH } from './constants';
20
- import { DialogContentWrapper, ScrollableContent, TitleSection, FooterBar, CreateButtonWrapper, DeleteButton, CreateButton, getDialogPaperStyle, dialogSx, } from './styles';
21
- import { DIALOG_WIDTH, DIALOG_HEIGHT } from './constants';
22
- import { useCreateViewDialog } from './hooks';
23
- import { ColumnList } from './components/ColumnList';
24
- import { convertColumnsToLayoutSection } from './utils';
25
- function CreateViewDialog({ open, onClose, onCreate, availableColumns = [], defaultColumns = [], editingView, onDelete, tableViews = [], mode = 'sheet', }) {
26
- const { t } = useTranslation();
27
- const toast = useToast();
28
- const [isDeleting, setIsDeleting] = useState(false);
29
- const [isLoading, setIsLoading] = useState(false);
30
- // Reset loading state when dialog closes
31
- React.useEffect(() => {
32
- if (!open) {
33
- setIsDeleting(false);
34
- setIsLoading(false);
35
- }
36
- }, [open]);
37
- const { templateName, setTemplateName, selectedColumns, columnNames, allSelected, someSelected, isNameValid, hoveredColumn, anchorEl, openSubmenu, closeSubmenu, cancelClose, handleReorder, handleColumnToggle, handleSubItemToggle, handleSelectAll, handleResetToDefault, } = useCreateViewDialog({
38
- open,
39
- availableColumns,
40
- defaultColumns,
41
- editingView,
42
- tableViews,
43
- });
44
- const handleCreate = () => __awaiter(this, void 0, void 0, function* () {
45
- if (!isNameValid || isLoading || isDeleting)
46
- return;
47
- setIsLoading(true);
48
- try {
49
- const columnsToCreate = selectedColumns.filter((col) => col.selected);
50
- const layout = convertColumnsToLayoutSection(columnsToCreate, mode);
51
- yield (onCreate === null || onCreate === void 0 ? void 0 : onCreate({ name: templateName, selectedColumns: columnsToCreate, layout }));
52
- onClose();
53
- }
54
- catch (error) {
55
- const errorMessage = error instanceof Error ? error.message : 'Failed to save view. Please try again.';
56
- toast.error(errorMessage);
57
- }
58
- finally {
59
- setIsLoading(false);
60
- }
61
- });
62
- const handleDelete = () => __awaiter(this, void 0, void 0, function* () {
63
- if (!editingView || isDeleting || isLoading)
64
- return;
65
- const templateId = editingView.templateId || editingView.id;
66
- console.log({ templateId });
67
- setIsDeleting(true);
68
- try {
69
- yield (onDelete === null || onDelete === void 0 ? void 0 : onDelete(templateId));
70
- onClose();
71
- }
72
- catch (error) {
73
- const errorMessage = error instanceof Error ? error.message : 'Failed to delete view. Please try again.';
74
- toast.error(errorMessage);
75
- }
76
- finally {
77
- setIsDeleting(false);
78
- }
79
- });
80
- if (!open)
81
- return null;
82
- return (_jsx(Draggable, Object.assign({ handle: "#draggable-dialog-title", cancel: '[class*="MuiDialogContent-root"]' }, { children: _jsxs(Dialog, Object.assign({ disableEnforceFocus: true, open: open, onClose: onClose, hideBackdrop: true, PaperProps: { style: getDialogPaperStyle(DIALOG_WIDTH, DIALOG_HEIGHT) }, sx: dialogSx, TransitionProps: {
83
- timeout: 0,
84
- }, slotProps: {
85
- backdrop: {
86
- sx: {
87
- transition: 'none',
88
- },
89
- },
90
- } }, { children: [_jsx(StyledHeaderWrapperStyled, Object.assign({ id: "draggable-dialog-title", style: { cursor: 'move' } }, { children: _jsx(Toolbar, { isHovered: true, title: editingView ? 'Edit Custom View' : t('createCustomView') || 'Create Custom View', leftActions: _jsx(CloseIcon, { onClick: onClose }) }) })), _jsxs(DialogContentWrapper, { children: [_jsxs(ScrollableContent, { children: [_jsxs(TitleSection, { children: [_jsxs(Box, { children: [_jsx(Typography, Object.assign({ sx: { fontSize: 24, fontWeight: 700, color: '#9F9F9F', lineHeight: '0.7' } }, { children: "Custom" })), _jsx(Typography, Object.assign({ sx: { fontSize: 24, fontWeight: 700, color: '#20232B', lineHeight: 1.2 } }, { children: "View" }))] }), editingView && (_jsx(DeleteButton, Object.assign({ onClick: handleDelete, disabled: isDeleting || isLoading }, { children: isDeleting ? (_jsxs(Box, Object.assign({ sx: { display: 'flex', alignItems: 'center', gap: 1 } }, { children: [_jsx(CircularProgress, { size: 14, color: "inherit" }), _jsx("span", { children: "Deleting..." })] }))) : ('Delete View') })))] }), _jsx(Box, Object.assign({ sx: { mb: 3 } }, { children: _jsx(InputBase, { name: "templateName", label: "Name", value: templateName, onChange: (value) => setTemplateName(value), hasError: false, inputProps: { maxLength: TEMPLATE_NAME_MAX_LENGTH }, required: true }) })), _jsx(ColumnList, { selectedColumns: selectedColumns, columnNames: columnNames, allSelected: allSelected, someSelected: someSelected, hoveredColumn: hoveredColumn, anchorEl: anchorEl, onReorder: handleReorder, onColumnToggle: handleColumnToggle, onSubItemToggle: handleSubItemToggle, onSelectAll: handleSelectAll, onResetToDefault: handleResetToDefault, onSubmenuEnter: openSubmenu, onSubmenuLeave: closeSubmenu, onCancelClose: cancelClose })] }), _jsx(FooterBar, {}), _jsx(CreateButtonWrapper, { children: _jsx(CreateButton, Object.assign({ variant: "contained", onClick: handleCreate, disabled: !isNameValid || isLoading || isDeleting, title: !isNameValid ? `Name is required. Current: "${templateName}"` : undefined }, { children: isLoading ? (_jsxs(Box, Object.assign({ sx: { display: 'flex', alignItems: 'center', gap: 1 } }, { children: [_jsx(CircularProgress, { size: 14, color: "inherit" }), _jsx("span", { children: editingView ? 'Saving...' : 'Creating...' })] }))) : editingView ? ('Update View') : ('Create View') })) })] })] })) })));
91
- }
92
- export default CreateViewDialog;
@@ -1,5 +0,0 @@
1
- /// <reference types="react" />
2
- import type { ViewSelectorProps } from './types';
3
- declare function ViewSelector({ onViewChange, setIsViewVisible, setTableViews, tableViews: externalTableViews, resetTableViews, customViews: externalCustomViews, onCreateCustomView, onEditCustomView, onDeleteCustomView, tableMode, onTableViewsChange, onCustomViewsChange, templates, lang, }: ViewSelectorProps): import("react/jsx-runtime").JSX.Element;
4
- declare const _default: import("react").MemoExoticComponent<typeof ViewSelector>;
5
- export default _default;
@@ -1,44 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
- import { memo } from 'react';
3
- import { useTranslation } from 'react-i18next';
4
- import ClickAwayListener from '@mui/material/ClickAwayListener';
5
- import { Icon, StyledButton } from '../../index.js';
6
- import { viewIcon } from '../../../constants/index.js';
7
- import ViewsDropdown from './ViewsDropdown';
8
- import CreateViewDialog from './CreateViewDialog';
9
- import { ViewWrapper } from './styles';
10
- import { useViewsManager } from './hooks';
11
- import { useViewSelector } from './hooks/useViewSelector';
12
- function ViewSelector({ onViewChange, setIsViewVisible, setTableViews, tableViews: externalTableViews, resetTableViews, customViews: externalCustomViews, onCreateCustomView, onEditCustomView, onDeleteCustomView, tableMode = 'default', onTableViewsChange, onCustomViewsChange, templates, lang = 'en', }) {
13
- const { t } = useTranslation();
14
- // Map tableMode to viewMode: 'sheet' → 'sheet', 'default' → 'advanced'
15
- const mode = tableMode === 'sheet' ? 'sheet' : 'advanced';
16
- const { defaultColumns, setDefaultColumns, internalTableViews, setInternalTableViews, internalCustomViews, setInternalCustomViews, defaultTemplate, } = useViewsManager({
17
- mode,
18
- templates,
19
- lang,
20
- });
21
- const tableViews = externalTableViews !== null && externalTableViews !== void 0 ? externalTableViews : internalTableViews;
22
- const customViews = externalCustomViews !== null && externalCustomViews !== void 0 ? externalCustomViews : internalCustomViews;
23
- const { anchorViewEl, defaultViewEl, setDefaultViewElement, isCreateDialogOpen, editingView, selectedViewInfo, shouldUseCurrentState, handleViewButtonClick, handleCloseViewDropdown, handleSelectedViewInfo, handleOpenCreateDialog, handleOpenEditDialog, handleCloseCreateDialog, handleSaveView, handleDeleteView, handleResetViews, handleTableViewsChange, } = useViewSelector({
24
- mode,
25
- onViewChange,
26
- onTableViewsChange,
27
- onCustomViewsChange,
28
- onCreateCustomView,
29
- onEditCustomView,
30
- onDeleteCustomView,
31
- resetTableViews,
32
- setTableViews,
33
- tableViews,
34
- customViews,
35
- defaultColumns,
36
- defaultTemplate,
37
- setInternalCustomViews,
38
- setInternalTableViews,
39
- });
40
- return (_jsxs(_Fragment, { children: [_jsx(ClickAwayListener, Object.assign({ onClickAway: handleCloseViewDropdown }, { children: _jsxs(ViewWrapper, Object.assign({ sx: { width: '32px' }, "data-testid": "ViewSelector" }, { children: [_jsx(StyledButton, Object.assign({ title: t('tableView'), "data-testid": "ViewSelector_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, selectedView) => {
41
- setDefaultViewElement(defaultViewEl ? null : e.currentTarget);
42
- }, setViews: handleResetViews, 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, tableViews: shouldUseCurrentState ? defaultColumns : undefined, mode: mode })] }));
43
- }
44
- export default memo(ViewSelector);
@@ -1,5 +0,0 @@
1
- import React from 'react';
2
- import type { ViewsDropdownProps } from './types';
3
- declare function ViewsDropdown({ open, selectedViewInfo, setSelectedViewInfo, onSelect, setViews, anchorEl, onCreateCustomView, customViews, onEditCustomView, defaultColumns, setDefaultColumns, }: Readonly<ViewsDropdownProps>): import("react/jsx-runtime").JSX.Element;
4
- declare const _default: React.MemoExoticComponent<typeof ViewsDropdown>;
5
- export default _default;
@@ -1,206 +0,0 @@
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, Tooltip } from '../../index.js';
11
- import { useSubmenuHover, useOriginalColumns, useNestedSubmenu } from './hooks';
12
- import { MAX_CUSTOM_VIEWS } from './constants';
13
- import { defaultViewList } from './data';
14
- import { ViewsSubmenu } from './components/ViewsSubmenu';
15
- import { ListStyled, DropdownStyled, MenuItem as StyledMenuItem, Space, SpaceAfter, SubmenuContainer, SaveCustomViewBox, SaveCustomViewInnerBox, ButtonsContainer, CancelButtonSx, OkayButtonSx, ModifiedTextSx, } from './styles';
16
- import { deepCloneColumns, toggleSingleColumn, toggleSubItem, getSubmenuItems, hasSubmenu, areAllCurrentColumnsSelected, areSomeCurrentColumnsSelected, toggleAllCurrentColumns, areColumnsEqual, } from './utils';
17
- function ViewsDropdown({ open, selectedViewInfo, setSelectedViewInfo, onSelect, setViews, anchorEl, onCreateCustomView, customViews = [], onEditCustomView, defaultColumns = [], setDefaultColumns, }) {
18
- const { t } = useTranslation();
19
- const { hoveredColumn: hoveredItem, anchorEl: submenuAnchorEl, openSubmenu: handleMenuItemHover, closeSubmenu: handleMenuItemLeave, cancelClose: handleSubmenuEnter, forceClose: forceCloseSubmenu, } = useSubmenuHover();
20
- const [hoveredCustomView, setHoveredCustomView] = React.useState(null);
21
- const [isDefaultModified, setIsDefaultModified] = React.useState(false);
22
- const [baselineColumns, setBaselineColumns] = React.useState([]);
23
- const [isOkayClicked, setIsOkayClicked] = React.useState(false);
24
- const { originalColumns, saveOriginalState, clearOriginalState } = useOriginalColumns(defaultColumns);
25
- // Wrapper to restore state when submenu closes without clicking Okay
26
- const handleSubmenuLeave = () => {
27
- // If submenu closes without clicking Okay, restore original state
28
- if (!isOkayClicked && originalColumns.length > 0 && setDefaultColumns) {
29
- const restoredColumns = deepCloneColumns(originalColumns);
30
- setDefaultColumns(restoredColumns);
31
- setIsDefaultModified(false);
32
- setBaselineColumns([]);
33
- clearOriginalState();
34
- }
35
- setIsOkayClicked(false);
36
- forceCloseSubmenu();
37
- };
38
- const { hoveredNestedColumn, nestedSubmenuAnchorEl, openNestedSubmenu, closeNestedSubmenu, cancelNestedClose } = useNestedSubmenu();
39
- // Default templates are merged into built-in Default view, so no need to sort
40
- const viewList = [...defaultViewList, ...customViews];
41
- const handleViewClick = (item) => {
42
- if (item.columns)
43
- setViews === null || setViews === void 0 ? void 0 : setViews(item.columns);
44
- // Call onSelect with the full view object
45
- const syntheticEvent = {
46
- currentTarget: anchorEl || document.createElement('div'),
47
- };
48
- // Pass the full view object for custom views, undefined for default view
49
- const viewToPass = item.isCustom ? item : undefined;
50
- onSelect(syntheticEvent, viewToPass);
51
- // Update selected view info with the view object
52
- setSelectedViewInfo(item, viewToPass);
53
- };
54
- const toggleColumnSelection = (columnName) => {
55
- if (!setDefaultColumns)
56
- return;
57
- const newColumns = toggleSingleColumn(defaultColumns, columnName);
58
- setDefaultColumns(newColumns);
59
- };
60
- const toggleNestedItem = (columnName, subItemName) => {
61
- if (!setDefaultColumns)
62
- return;
63
- const newColumns = toggleSubItem(defaultColumns, columnName, subItemName);
64
- setDefaultColumns(newColumns);
65
- };
66
- const getHoveredSubmenu = () => {
67
- if (!hoveredItem)
68
- return [];
69
- const item = viewList.find((i) => i.id === hoveredItem);
70
- return item ? getSubmenuItems(item, defaultColumns) : [];
71
- };
72
- const currentSubmenuColumns = useMemo(() => getHoveredSubmenu(), [hoveredItem, defaultColumns, viewList]);
73
- const originalSubmenuColumns = useMemo(() => {
74
- if (!hoveredItem || originalColumns.length === 0)
75
- return [];
76
- const item = viewList.find((i) => i.id === hoveredItem);
77
- return item ? getSubmenuItems(item, originalColumns) : [];
78
- }, [hoveredItem, originalColumns, viewList]);
79
- const isSubmenuModified = useMemo(() => {
80
- if (originalSubmenuColumns.length === 0)
81
- return true;
82
- return !areColumnsEqual(currentSubmenuColumns, originalSubmenuColumns);
83
- }, [currentSubmenuColumns, originalSubmenuColumns]);
84
- const allCurrentSelected = useMemo(() => areAllCurrentColumnsSelected(currentSubmenuColumns), [currentSubmenuColumns]);
85
- const someCurrentSelected = useMemo(() => areSomeCurrentColumnsSelected(currentSubmenuColumns, allCurrentSelected), [currentSubmenuColumns, allCurrentSelected]);
86
- const handleSelectAll = () => {
87
- if (!setDefaultColumns)
88
- return;
89
- const shouldSelectAll = !allCurrentSelected;
90
- const newColumns = toggleAllCurrentColumns(defaultColumns, shouldSelectAll);
91
- setDefaultColumns(newColumns);
92
- };
93
- const handleReset = () => {
94
- if (!setDefaultColumns || originalColumns.length === 0)
95
- return;
96
- const restoredColumns = deepCloneColumns(originalColumns);
97
- setDefaultColumns([...restoredColumns]);
98
- setIsDefaultModified(false);
99
- setBaselineColumns([]);
100
- };
101
- const handleSaveAsCustomView = (e) => {
102
- e.stopPropagation();
103
- setIsOkayClicked(true); // Mark that a valid action was taken, don't restore on close
104
- clearOriginalState();
105
- forceCloseSubmenu();
106
- onCreateCustomView === null || onCreateCustomView === void 0 ? void 0 : onCreateCustomView(true); // Use current state when saving from submenu
107
- };
108
- const handleCancel = () => {
109
- if (setDefaultColumns && originalColumns.length > 0) {
110
- const restoredColumns = deepCloneColumns(originalColumns);
111
- setDefaultColumns(restoredColumns);
112
- // Reset modified state when canceling
113
- setIsDefaultModified(false);
114
- setBaselineColumns([]);
115
- }
116
- clearOriginalState();
117
- setIsOkayClicked(false);
118
- forceCloseSubmenu();
119
- };
120
- const handleOkay = () => {
121
- if (originalColumns.length > 0) {
122
- const hasChanges = !areColumnsEqual(defaultColumns, originalColumns);
123
- setIsDefaultModified(hasChanges);
124
- if (hasChanges) {
125
- setBaselineColumns(deepCloneColumns(originalColumns));
126
- }
127
- else {
128
- setBaselineColumns([]);
129
- }
130
- }
131
- setIsOkayClicked(true); // Mark that Okay was clicked so we don't restore on close
132
- clearOriginalState();
133
- forceCloseSubmenu();
134
- };
135
- const handleOpenSubmenu = (itemId, element) => {
136
- saveOriginalState();
137
- setIsOkayClicked(false); // Reset flag when opening submenu
138
- if (itemId === 'default' && baselineColumns.length > 0) {
139
- const hasChanges = !areColumnsEqual(defaultColumns, baselineColumns);
140
- setIsDefaultModified(hasChanges);
141
- }
142
- handleMenuItemHover(itemId, element);
143
- };
144
- const shouldDimNewCustomView = customViews.length >= MAX_CUSTOM_VIEWS;
145
- 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: {
146
- paddingX: 1.25,
147
- py: 1.1,
148
- fontWeight: 500,
149
- fontSize: 11,
150
- color: '#8D8D94',
151
- } }, { children: "View" })), _jsx(Divider, {}), viewList.map((item) => (_jsxs(StyledMenuItem, Object.assign({ onMouseEnter: (e) => {
152
- if (item.isCustom) {
153
- setHoveredCustomView(item.id);
154
- }
155
- else if (hasSubmenu(item, defaultColumns)) {
156
- handleOpenSubmenu(item.id, e.currentTarget);
157
- }
158
- }, onMouseLeave: () => {
159
- if (item.isCustom) {
160
- setHoveredCustomView(null);
161
- }
162
- else if (hasSubmenu(item, defaultColumns)) {
163
- handleMenuItemLeave();
164
- }
165
- }, onClick: () => handleViewClick(item), sx: {
166
- position: 'relative',
167
- cursor: 'pointer',
168
- pr: 1.5,
169
- } }, { children: [item.id === selectedViewInfo.id ? (_jsx("img", { style: {
170
- width: 15,
171
- height: 15,
172
- }, className: "check-icon", src: smallBlueCheckIcon, alt: "check" })) : (_jsx(Space, {})), _jsxs("span", Object.assign({ style: { flex: 1, fontSize: 11 } }, { children: [item.label, item.id === 'default' && isDefaultModified && _jsx("span", Object.assign({ style: ModifiedTextSx }, { children: "(Modified)" }))] })), item.isCustom && hoveredCustomView === item.id && (_jsx("img", { src: editIcon, alt: "edit", style: { width: 12, height: 12, cursor: 'pointer' }, onClick: (e) => {
173
- e.stopPropagation();
174
- onSelect(e);
175
- onEditCustomView === null || onEditCustomView === void 0 ? void 0 : onEditCustomView(item);
176
- } })), !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(StyledMenuItem, Object.assign({ sx: {
177
- border: 'none',
178
- opacity: shouldDimNewCustomView ? 0.5 : 1,
179
- cursor: shouldDimNewCustomView ? 'not-allowed' : 'pointer',
180
- }, onClick: (e) => {
181
- if (shouldDimNewCustomView) {
182
- e.stopPropagation();
183
- return;
184
- }
185
- e.stopPropagation();
186
- handleSubmenuLeave();
187
- onSelect(e);
188
- onCreateCustomView === null || onCreateCustomView === void 0 ? void 0 : onCreateCustomView(false); // Don't use current state for "New Custom View"
189
- } }, { 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: "auto-end", onMouseEnter: handleSubmenuEnter, onMouseLeave: handleSubmenuLeave, modifiers: [
190
- {
191
- name: 'offset',
192
- options: {
193
- offset: [-4, 0],
194
- },
195
- },
196
- {
197
- name: 'preventOverflow',
198
- enabled: true,
199
- },
200
- {
201
- name: 'flip',
202
- enabled: true,
203
- },
204
- ] }, { children: _jsxs(SubmenuContainer, { children: [_jsx(ViewsSubmenu, { columns: getHoveredSubmenu(), allCurrentSelected: allCurrentSelected, someCurrentSelected: someCurrentSelected, onSelectAll: handleSelectAll, onReset: handleReset, onColumnToggle: toggleColumnSelection, onNestedItemToggle: toggleNestedItem, anchorEl: submenuAnchorEl, isModified: isSubmenuModified }), _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" }))] })] }) })))] })));
205
- }
206
- export default React.memo(ViewsDropdown);
@@ -1,3 +0,0 @@
1
- import React from 'react';
2
- import type { ColumnListProps } from '../types';
3
- export declare const ColumnList: React.FC<ColumnListProps>;
@@ -1,70 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import React from 'react';
3
- import { Box, Typography, Link, Popper, Divider } from '@mui/material';
4
- import { Reorder } from 'framer-motion';
5
- import { dragIcon, rightArrow, viewIcon } from '../../../../constants/index.js';
6
- import { Checkbox, MenuItem } from '../../../index.js';
7
- import { isDateColumn, getColumnCheckState } from '../utils';
8
- import { ColumnListContainer, SelectAllHeader, ColumnItemRow, DragIconWrapper, CheckboxWrapper, SubmenuPaper, checkboxSx } from '../styles';
9
- export const ColumnList = ({ selectedColumns, columnNames, allSelected, someSelected, hoveredColumn, anchorEl, onReorder, onColumnToggle, onSubItemToggle, onSelectAll, onResetToDefault, onSubmenuEnter, onSubmenuLeave, onCancelClose, }) => {
10
- return (_jsxs(ColumnListContainer, { children: [_jsxs(SelectAllHeader, { children: [_jsx(DragIconWrapper, { children: _jsx("img", { src: viewIcon, alt: "drag", style: { width: 16, height: 16, opacity: 0.5 } }) }), _jsx(CheckboxWrapper, Object.assign({ onClick: (e) => {
11
- e.stopPropagation();
12
- onSelectAll();
13
- } }, { children: _jsx(Checkbox, { checked: allSelected, indeterminate: someSelected, size: "small", sx: checkboxSx, onChange: (e) => {
14
- e.stopPropagation();
15
- onSelectAll();
16
- }, onClick: (e) => {
17
- e.stopPropagation();
18
- } }) })), _jsx(Typography, Object.assign({ onClick: (e) => {
19
- e.stopPropagation();
20
- onSelectAll();
21
- }, sx: { flex: 1, fontSize: 13, fontWeight: 500, color: 'text.primary', ml: 0.75, cursor: 'pointer' } }, { children: "Select All" })), _jsx(Link, Object.assign({ component: "button", type: "button", onClick: (e) => {
22
- e.stopPropagation();
23
- onResetToDefault();
24
- }, underline: "none", sx: { fontSize: 13, fontWeight: 500, cursor: 'pointer', color: 'common.blue' } }, { children: "Reset to default" }))] }), _jsx(Box, Object.assign({ sx: { flex: 1, overflowY: 'auto', minHeight: 0 } }, { children: _jsx(Reorder.Group, Object.assign({ axis: "y", onReorder: onReorder, values: columnNames, style: { listStyle: 'none', padding: 0, margin: 0 } }, { children: selectedColumns.map((column) => {
25
- var _a;
26
- const isDate = isDateColumn(column.name);
27
- const hasSubmenu = column.menuItems && column.menuItems.length > 0;
28
- const { checked, indeterminate } = getColumnCheckState(column);
29
- return (_jsxs(Reorder.Item, Object.assign({ value: column.name, drag: !isDate, dragListener: !isDate, transition: { duration: 0 }, whileDrag: { zIndex: 9999, boxShadow: '0 4px 12px rgba(0,0,0,0.15)', scale: 1 }, style: {
30
- listStyle: 'none',
31
- margin: 0,
32
- padding: 0,
33
- position: 'relative',
34
- zIndex: 1,
35
- backgroundColor: '#fff',
36
- width: '100%',
37
- willChange: 'transform',
38
- }, onDragStart: (e) => {
39
- const target = e.target;
40
- if (target.closest('[role="checkbox"]') ||
41
- target.closest('input[type="checkbox"]') ||
42
- target.closest('[class*="CheckboxWrapper"]')) {
43
- e.preventDefault();
44
- }
45
- } }, { children: [_jsxs(ColumnItemRow, Object.assign({ isHovered: hoveredColumn === column.name, isDate: isDate, onMouseEnter: (e) => hasSubmenu && onSubmenuEnter(column.name, e.currentTarget), onMouseLeave: () => hasSubmenu && onSubmenuLeave(), onClick: (e) => {
46
- if (e.target.closest('[role="checkbox"]') || e.target.closest('input[type="checkbox"]')) {
47
- e.stopPropagation();
48
- }
49
- }, sx: { width: '100%', position: 'relative' } }, { children: [_jsx(DragIconWrapper, { children: _jsx("img", { src: dragIcon, alt: "drag", draggable: false, style: { width: 16, height: 16, cursor: isDate ? 'default' : 'grab', pointerEvents: 'none' } }) }), _jsx(CheckboxWrapper, Object.assign({ onMouseDown: (e) => {
50
- e.stopPropagation();
51
- }, onPointerDown: (e) => {
52
- e.stopPropagation();
53
- } }, { children: _jsx(Checkbox, { checked: checked, indeterminate: indeterminate, onChange: (e) => {
54
- e.stopPropagation();
55
- onColumnToggle(column.name);
56
- }, onClick: (e) => {
57
- e.stopPropagation();
58
- }, disabled: isDate, size: "small", sx: checkboxSx }) })), _jsx(Typography, Object.assign({ sx: { flex: 1, fontSize: 13, fontWeight: 400, color: 'text.primary', ml: 1 } }, { children: column.label || column.name })), hasSubmenu && (_jsx(Box, Object.assign({ sx: { display: 'flex', alignItems: 'center', ml: 1, flexShrink: 0 } }, { children: _jsx("img", { src: rightArrow, alt: "arrow", style: { width: 12, height: 12 } }) })))] })), hasSubmenu && (_jsx(Popper, Object.assign({ open: hoveredColumn === column.name, anchorEl: anchorEl, placement: "right-start", sx: { zIndex: 10000 }, modifiers: [
59
- {
60
- name: 'offset',
61
- options: {
62
- offset: [0, 0],
63
- },
64
- },
65
- ] }, { children: _jsxs(Box, Object.assign({ onMouseEnter: onCancelClose, onMouseLeave: onSubmenuLeave, sx: { display: 'flex', pl: 0.5 } }, { children: [_jsx(Box, { sx: { width: 8, height: '100%', position: 'absolute', left: -8, top: 0, bottom: 0 } }), _jsx(SubmenuPaper, { children: (_a = column.menuItems) === null || _a === void 0 ? void 0 : _a.map((subItem, subItemIndex) => {
66
- var _a, _b;
67
- return (_jsxs(React.Fragment, { children: [_jsx(MenuItem, Object.assign({ isSelected: subItem.selected, onClick: () => onSubItemToggle(column.name, subItem.name) }, { children: subItem.label || subItem.name })), subItemIndex < ((_b = (_a = column.menuItems) === null || _a === void 0 ? void 0 : _a.length) !== null && _b !== void 0 ? _b : 0) - 1 && _jsx(Divider, {})] }, subItem.name));
68
- }) })] })) })))] }), column.name));
69
- }) })) }))] }));
70
- };
@@ -1,3 +0,0 @@
1
- import React from 'react';
2
- import type { ViewsSubmenuProps } from '../types';
3
- export declare const ViewsSubmenu: React.FC<ViewsSubmenuProps>;
@@ -1,52 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
- import React from 'react';
3
- import { Box, Typography, Divider, Popper } from '@mui/material';
4
- import { Checkbox, MenuItem } from '../../../index.js';
5
- import { blackRightArrowIcon } from '../../../../constants/index.js';
6
- import { getColumnCheckState } from '../utils';
7
- import { ResetHeaderBox, ResetCheckboxSx, ColumnItemsContainer, SubmenuPaper } from '../styles';
8
- import { useNestedSubmenu } from '../hooks/useNestedSubmenu';
9
- export const ViewsSubmenu = ({ columns, allCurrentSelected, someCurrentSelected, onSelectAll, onReset, onColumnToggle, onNestedItemToggle, anchorEl, isModified = false, }) => {
10
- const { hoveredNestedColumn, nestedSubmenuAnchorEl, openNestedSubmenu, closeNestedSubmenu, cancelNestedClose } = useNestedSubmenu();
11
- return (_jsxs(_Fragment, { children: [_jsxs(ResetHeaderBox, { children: [_jsx(Box, Object.assign({ sx: { display: 'flex', alignItems: 'center', gap: 1 } }, { children: _jsx(Checkbox, { checked: allCurrentSelected, indeterminate: someCurrentSelected, onChange: (e) => {
12
- e.stopPropagation();
13
- onSelectAll();
14
- }, onClick: (e) => {
15
- e.stopPropagation();
16
- }, sx: ResetCheckboxSx }) })), _jsx(Typography, Object.assign({ component: "button", onClick: (e) => {
17
- e.stopPropagation();
18
- onReset();
19
- }, sx: {
20
- fontSize: 11,
21
- fontWeight: 500,
22
- color: '#1F88D0',
23
- background: 'none',
24
- border: 'none',
25
- cursor: 'pointer',
26
- padding: 0,
27
- opacity: isModified ? 1 : 0.5,
28
- '&:hover': {
29
- textDecoration: 'underline',
30
- },
31
- } }, { children: "Reset" }))] }), _jsx(Divider, {}), _jsx(ColumnItemsContainer, { children: columns.map((column, columnIndex) => {
32
- var _a;
33
- const hasNestedSubmenu = column.menuItems && column.menuItems.length > 0;
34
- const { checked, indeterminate } = getColumnCheckState(column);
35
- return (_jsxs(React.Fragment, { children: [_jsxs(Box, Object.assign({ sx: { position: 'relative' }, onMouseEnter: (e) => hasNestedSubmenu && openNestedSubmenu(column.name, e.currentTarget), onMouseLeave: () => hasNestedSubmenu && closeNestedSubmenu() }, { children: [_jsxs(Box, Object.assign({ sx: {
36
- display: 'flex',
37
- alignItems: 'center',
38
- justifyContent: 'space-between',
39
- width: '100%',
40
- } }, { children: [_jsx(MenuItem, Object.assign({ isSelected: hasNestedSubmenu ? checked : column.selected, isIndeterminate: hasNestedSubmenu ? indeterminate : false, onClick: () => onColumnToggle(column.name), sx: { flex: 1, display: 'flex', alignItems: 'center' } }, { children: _jsx("span", { children: column.label || column.name }) })), hasNestedSubmenu && (_jsx(Box, Object.assign({ sx: { display: 'flex', alignItems: 'center', pr: 1, pointerEvents: 'none' } }, { children: _jsx("img", { src: blackRightArrowIcon, alt: "arrow", style: { height: 12 } }) })))] })), hasNestedSubmenu && (_jsx(Popper, Object.assign({ open: hoveredNestedColumn === column.name, anchorEl: nestedSubmenuAnchorEl, placement: "right-start", sx: { zIndex: 10000 }, modifiers: [
41
- {
42
- name: 'offset',
43
- options: {
44
- offset: [0, 0],
45
- },
46
- },
47
- ] }, { children: _jsxs(Box, Object.assign({ onMouseEnter: cancelNestedClose, onMouseLeave: closeNestedSubmenu, sx: { display: 'flex', pl: 0.5 } }, { children: [_jsx(Box, { sx: { width: 8, height: '100%', position: 'absolute', left: -8, top: 0, bottom: 0 } }), _jsx(SubmenuPaper, { children: (_a = column.menuItems) === null || _a === void 0 ? void 0 : _a.map((subItem, subItemIndex) => {
48
- var _a, _b;
49
- return (_jsxs(React.Fragment, { children: [_jsx(MenuItem, Object.assign({ isSelected: subItem.selected, onClick: () => onNestedItemToggle(column.name, subItem.name) }, { children: subItem.label || subItem.name })), subItemIndex < ((_b = (_a = column.menuItems) === null || _a === void 0 ? void 0 : _a.length) !== null && _b !== void 0 ? _b : 0) - 1 && _jsx(Divider, {})] }, subItem.name));
50
- }) })] })) })))] })), columnIndex < columns.length - 1 && _jsx(Divider, {})] }, column.name));
51
- }) })] }));
52
- };
@@ -1,2 +0,0 @@
1
- export { ColumnList } from './ColumnList';
2
- export { ViewsSubmenu } from './ViewsSubmenu';
@@ -1,2 +0,0 @@
1
- export { ColumnList } from './ColumnList';
2
- export { ViewsSubmenu } from './ViewsSubmenu';
@@ -1,10 +0,0 @@
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";
9
- readonly selected: true;
10
- };
@@ -1,10 +0,0 @@
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',
9
- selected: true,
10
- };
@@ -1,5 +0,0 @@
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[];
@@ -1,48 +0,0 @@
1
- export const advancedColumns = [
2
- {
3
- name: 'customer',
4
- label: 'Customer',
5
- selected: true,
6
- menuItems: [
7
- { name: 'customer_id', label: 'ID', selected: true },
8
- { name: 'customer_name', label: 'Name', selected: true },
9
- { name: 'customer_email', label: 'Email', selected: true },
10
- { name: 'customer_phone', label: 'Phone', selected: false },
11
- ],
12
- },
13
- {
14
- name: 'transaction',
15
- label: 'Transaction',
16
- selected: true,
17
- menuItems: [
18
- { name: 'transaction_id', label: 'Transaction ID', selected: true },
19
- { name: 'transaction_amount', label: 'Amount', selected: true },
20
- { name: 'transaction_status', label: 'Status', selected: false },
21
- { name: 'transaction_type', label: 'Type', selected: false },
22
- ],
23
- },
24
- {
25
- name: 'payment',
26
- label: 'Payment',
27
- selected: false,
28
- menuItems: [
29
- { name: 'payment_method', label: 'Method', selected: false },
30
- { name: 'payment_card', label: 'Card', selected: false },
31
- { name: 'payment_bank', label: 'Bank', selected: false },
32
- ],
33
- },
34
- ];
35
- export const sheetColumns = [
36
- { name: 'customerID', label: 'Customer ID', selected: true },
37
- { name: 'customerName', label: 'Customer Name', selected: true },
38
- { name: 'amount', label: 'Amount', selected: true },
39
- { name: 'status', label: 'Status', selected: false },
40
- { name: 'currency', label: 'Currency', selected: false },
41
- { name: 'reference', label: 'Reference', selected: true },
42
- ];
43
- export const defaultViewList = [
44
- {
45
- label: 'Default',
46
- id: 'default',
47
- },
48
- ];
@@ -1,22 +0,0 @@
1
- /// <reference types="react" />
2
- import type { ColumnViewProps } from '../../../../types/index.js';
3
- import type { UseCreateViewDialogProps } from '../types';
4
- export declare const useCreateViewDialog: ({ open, availableColumns, defaultColumns, editingView, tableViews }: UseCreateViewDialogProps) => {
5
- templateName: string;
6
- setTemplateName: import("react").Dispatch<import("react").SetStateAction<string>>;
7
- selectedColumns: ColumnViewProps[];
8
- columnNames: string[];
9
- allSelected: boolean;
10
- someSelected: boolean;
11
- isNameValid: boolean;
12
- hoveredColumn: string | null;
13
- anchorEl: HTMLElement | null;
14
- openSubmenu: (columnName: string, element: HTMLElement) => void;
15
- closeSubmenu: () => void;
16
- cancelClose: () => void;
17
- handleReorder: (reorderedNames: string[]) => void;
18
- handleColumnToggle: (columnName: string) => void;
19
- handleSubItemToggle: (columnName: string, subItemName: string) => void;
20
- handleSelectAll: () => void;
21
- handleResetToDefault: () => void;
22
- };