@tap-payments/os-micro-frontend-shared 0.1.376-test.1-test.2 → 0.1.376-test.1-test.2-test.3-test.4-test.5

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.
@@ -4,7 +4,7 @@ import { SearchButton, StyledButton, Icon, RangeCalender } from '../index.js';
4
4
  import { viewIcon } from '../../constants/index.js';
5
5
  import FiltersRowWrapper from './FiltersRowWrapper';
6
6
  import TableView from './TableView';
7
- import { ViewSelector } from './TableView';
7
+ import { ViewsMenu } from './TableView';
8
8
  import TableModeButton from './TableModeButton';
9
9
  export default function FiltersRow({ date, calendarMode, onDateChange, onCalendarModeSwitch, tableReportsComponent, tableFilterComponent, isReportsButtonVisible, onViewChange, onSearchChange, onToggleViewButtonClick, rightActions, leftActions, setTableViews, tableViews, resetTableViews, onToggleTextButtonClick, calendarGroupBy, onCalendarGroupChange, maxDateRange = 31, searchPlaceholder, isAcceptance, tableMode = 'default', timezone, browserTimezone, defaultCountryTimezone, onChangeTimezone, segmentCountries, onCreateCustomView, onEditCustomView, onDeleteCustomView, templates, lang, }) {
10
10
  const [isViewVisible, setIsViewVisible] = useState(false);
@@ -16,5 +16,5 @@ export default function FiltersRow({ date, calendarMode, onDateChange, onCalenda
16
16
  onDateChange === null || onDateChange === void 0 ? void 0 : onDateChange([startDate, endDate]);
17
17
  }
18
18
  }, mode: calendarMode, onCalendarModeSwitch: onCalendarModeSwitch, maxDateRange: maxDateRange, groupBy: calendarGroupBy, onCalendarGroupChange: onCalendarGroupChange, browserTimezone: browserTimezone, defaultCountryTimezone: defaultCountryTimezone, timezone: timezone, onChangeTimezone: onChangeTimezone, timezoneCountriesCodes: timezoneCountriesCodes })), isReportsButtonVisible && tableReportsComponent, onToggleTextButtonClick && isAcceptance && tableModeButton] })), onToggleViewButtonClick && (_jsx(StyledButton, { children: _jsx(Icon, { src: viewIcon, alt: "view", sx: { width: 14, height: 14 } }) })), onViewChange &&
19
- (templates ? (_jsx(ViewSelector, { onViewChange: onViewChange, onCreateCustomView: onCreateCustomView, onEditCustomView: onEditCustomView, onDeleteCustomView: onDeleteCustomView, tableMode: tableMode, templates: templates, lang: lang })) : (_jsx(TableView, { onViewChange: onViewChange, setIsViewVisible: setIsViewVisible, tableViews: tableViews, setTableViews: setTableViews, resetTableViews: resetTableViews }))), rightActions && !isViewVisible && rightActions] }));
19
+ (templates ? (_jsx(ViewsMenu, { onViewChange: onViewChange, onCreateCustomView: onCreateCustomView, onEditCustomView: onEditCustomView, onDeleteCustomView: onDeleteCustomView, tableMode: tableMode, templates: templates, lang: lang })) : (_jsx(TableView, { onViewChange: onViewChange, setIsViewVisible: setIsViewVisible, tableViews: tableViews, setTableViews: setTableViews, resetTableViews: resetTableViews }))), rightActions && !isViewVisible && rightActions] }));
20
20
  }
@@ -1,5 +1,5 @@
1
1
  import React from 'react';
2
2
  import type { ViewsDropdownProps } from './types';
3
- declare function ViewsDropdown({ open, selectedViewInfo, setSelectedViewInfo, onSelect, setViews, anchorEl, onCreateCustomView, customViews, onEditCustomView, onSaveDefaultColumns, defaultColumns, setDefaultColumns, updateSelectedView, mode, defaultTemplate, }: Readonly<ViewsDropdownProps>): import("react/jsx-runtime").JSX.Element;
3
+ declare function ViewsDropdown({ open, selectedViewInfo, setSelectedViewInfo, anchorEl, defaultModified, onMarkDefaultModified, onCreateCustomView, customViews, onEditCustomView, onSaveDefaultColumns, defaultColumns, setDefaultColumns, updateSelectedView, mode, defaultTemplate, }: Readonly<ViewsDropdownProps>): import("react/jsx-runtime").JSX.Element;
4
4
  declare const _default: React.MemoExoticComponent<typeof ViewsDropdown>;
5
5
  export default _default;
@@ -13,23 +13,14 @@ import { MAX_CUSTOM_VIEWS } from './constants';
13
13
  import { ViewsSubmenu } from './components/ViewsSubmenu';
14
14
  import { ListStyled, DropdownStyled, MenuItem as StyledMenuItem, Space, SpaceAfter, SubmenuContainer, SaveCustomViewBox, SaveCustomViewInnerBox, ButtonsContainer, CancelButtonSx, OkayButtonSx, ModifiedTextSx, } from './styles';
15
15
  import { deepCloneColumns, toggleSingleColumn, toggleSubItem, getSubmenuItems, hasSubmenu, areAllCurrentColumnsSelected, areSomeCurrentColumnsSelected, toggleAllCurrentColumns, areColumnsEqual, } from './utils';
16
- function ViewsDropdown({ open, selectedViewInfo, setSelectedViewInfo, onSelect, setViews, anchorEl, onCreateCustomView, customViews = [], onEditCustomView, onSaveDefaultColumns, defaultColumns = [], setDefaultColumns, updateSelectedView, mode = 'default', defaultTemplate, }) {
16
+ function ViewsDropdown({ open, selectedViewInfo, setSelectedViewInfo, anchorEl, defaultModified = false, onMarkDefaultModified, onCreateCustomView, customViews = [], onEditCustomView, onSaveDefaultColumns, defaultColumns = [], setDefaultColumns, updateSelectedView, mode = 'default', defaultTemplate, }) {
17
17
  const { t } = useTranslation();
18
18
  const { hoveredColumn: hoveredItem, anchorEl: submenuAnchorEl, openSubmenu: handleMenuItemHover, closeSubmenu: handleMenuItemLeave, cancelClose: handleSubmenuEnter, forceClose: forceCloseSubmenu, } = useSubmenuHover();
19
19
  const [hoveredCustomView, setHoveredCustomView] = React.useState(null);
20
- const [isModified, setIsModified] = React.useState(false);
21
- // Track original columns when submenu opens
22
20
  const { originalColumns, saveOriginalState, clearOriginalState } = useOriginalColumns(defaultColumns);
23
- // Build the view list (default template + custom views)
24
- // Use actual defaultTemplate from props instead of static defaultViewList
25
21
  const viewList = useMemo(() => {
26
- const list = [];
27
- if (defaultTemplate) {
28
- list.push(defaultTemplate);
29
- }
30
- return [...list, ...customViews];
22
+ return defaultTemplate ? [defaultTemplate, ...customViews] : customViews;
31
23
  }, [defaultTemplate, customViews]);
32
- // Get columns for hovered submenu
33
24
  const currentSubmenuColumns = useMemo(() => {
34
25
  if (!hoveredItem)
35
26
  return [];
@@ -38,13 +29,11 @@ function ViewsDropdown({ open, selectedViewInfo, setSelectedViewInfo, onSelect,
38
29
  }, [hoveredItem, defaultColumns, viewList]);
39
30
  const allCurrentSelected = useMemo(() => areAllCurrentColumnsSelected(currentSubmenuColumns), [currentSubmenuColumns]);
40
31
  const someCurrentSelected = useMemo(() => areSomeCurrentColumnsSelected(currentSubmenuColumns, allCurrentSelected), [currentSubmenuColumns, allCurrentSelected]);
41
- // Check if columns have been modified from original
42
32
  const hasChanges = useMemo(() => {
43
33
  if (originalColumns.length === 0)
44
34
  return false;
45
35
  return !areColumnsEqual(defaultColumns, originalColumns);
46
36
  }, [defaultColumns, originalColumns]);
47
- // Handle clicking on a view item
48
37
  const handleViewClick = (item) => {
49
38
  forceCloseSubmenu();
50
39
  clearOriginalState();
@@ -59,21 +48,18 @@ function ViewsDropdown({ open, selectedViewInfo, setSelectedViewInfo, onSelect,
59
48
  }
60
49
  setSelectedViewInfo(item, viewToPass);
61
50
  };
62
- // Toggle column selection
63
51
  const toggleColumnSelection = (columnName) => {
64
52
  if (!setDefaultColumns)
65
53
  return;
66
54
  const newColumns = toggleSingleColumn(defaultColumns, columnName);
67
55
  setDefaultColumns(newColumns);
68
56
  };
69
- // Toggle nested item
70
57
  const toggleNestedItem = (columnName, subItemName) => {
71
58
  if (!setDefaultColumns)
72
59
  return;
73
60
  const newColumns = toggleSubItem(defaultColumns, columnName, subItemName);
74
61
  setDefaultColumns(newColumns);
75
62
  };
76
- // Reorder columns
77
63
  const handleReorder = (reorderedColumnNames) => {
78
64
  if (!setDefaultColumns)
79
65
  return;
@@ -82,71 +68,49 @@ function ViewsDropdown({ open, selectedViewInfo, setSelectedViewInfo, onSelect,
82
68
  .filter((column) => Boolean(column));
83
69
  setDefaultColumns(reorderedColumns);
84
70
  };
85
- // Select all columns
86
71
  const handleSelectAll = () => {
87
72
  if (!setDefaultColumns)
88
73
  return;
89
74
  const newColumns = toggleAllCurrentColumns(defaultColumns, !allCurrentSelected);
90
75
  setDefaultColumns(newColumns);
91
76
  };
92
- // Reset to original
93
77
  const handleReset = () => {
94
78
  if (!setDefaultColumns || originalColumns.length === 0)
95
79
  return;
96
80
  setDefaultColumns(deepCloneColumns(originalColumns));
97
81
  };
98
- // Open submenu
99
82
  const handleOpenSubmenu = (itemId, element) => {
100
83
  saveOriginalState();
101
84
  handleMenuItemHover(itemId, element);
102
85
  };
103
- // Close submenu and restore if no changes saved
104
- const handleSubmenuLeave = () => {
105
- // Restore original columns if not saved
106
- if (originalColumns.length > 0 && setDefaultColumns) {
86
+ const restoreSubmenu = () => {
87
+ if (setDefaultColumns && originalColumns.length > 0) {
107
88
  setDefaultColumns(deepCloneColumns(originalColumns));
108
89
  }
109
90
  clearOriginalState();
110
91
  forceCloseSubmenu();
111
92
  };
112
- // Cancel changes
93
+ const handleSubmenuLeave = () => {
94
+ restoreSubmenu();
95
+ };
113
96
  const handleCancel = () => {
114
- if (setDefaultColumns && originalColumns.length > 0) {
115
- setDefaultColumns(deepCloneColumns(originalColumns));
116
- }
117
- clearOriginalState();
118
- forceCloseSubmenu();
97
+ restoreSubmenu();
119
98
  };
120
- // Save changes
121
99
  const handleOkay = () => {
122
- var _a;
123
- // Check if we're viewing the default template
124
100
  const isViewingDefault = selectedViewInfo.id === (defaultTemplate === null || defaultTemplate === void 0 ? void 0 : defaultTemplate.id) || selectedViewInfo.id === 'default' || (defaultTemplate === null || defaultTemplate === void 0 ? void 0 : defaultTemplate.default) === true;
125
- console.log('🔵 handleOkay:', {
126
- isViewingDefault,
127
- hasChanges,
128
- selectedViewInfoId: selectedViewInfo.id,
129
- defaultTemplateId: defaultTemplate === null || defaultTemplate === void 0 ? void 0 : defaultTemplate.id,
130
- columnsCount: defaultColumns.length,
131
- });
132
101
  if (isViewingDefault && defaultTemplate && defaultColumns.length > 0) {
133
- // Save changes if any
134
102
  if (hasChanges) {
103
+ onMarkDefaultModified === null || onMarkDefaultModified === void 0 ? void 0 : onMarkDefaultModified();
135
104
  onSaveDefaultColumns === null || onSaveDefaultColumns === void 0 ? void 0 : onSaveDefaultColumns(defaultColumns);
136
- setIsModified(true);
137
105
  }
138
- // ALWAYS update the selected view to reflect current column state
139
- // CRITICAL: Create a NEW object with NEW array references to trigger re-renders
140
106
  if (updateSelectedView) {
141
107
  const updatedView = Object.assign(Object.assign({}, defaultTemplate), { id: defaultTemplate.id + '', submenu: [...deepCloneColumns(defaultColumns)], columns: [...defaultColumns.map((col) => col.name)] });
142
- console.log('🟢 Calling updateSelectedView with:', (_a = updatedView.submenu) === null || _a === void 0 ? void 0 : _a.length, 'columns');
143
108
  updateSelectedView(updatedView);
144
109
  }
145
110
  }
146
111
  clearOriginalState();
147
112
  forceCloseSubmenu();
148
113
  };
149
- // Save as custom view
150
114
  const handleSaveAsCustomView = (e) => {
151
115
  e.stopPropagation();
152
116
  clearOriginalState();
@@ -174,7 +138,7 @@ function ViewsDropdown({ open, selectedViewInfo, setSelectedViewInfo, onSelect,
174
138
  else if (hasSubmenu(item, defaultColumns)) {
175
139
  handleMenuItemLeave();
176
140
  }
177
- }, onClick: () => handleViewClick(item), sx: { position: 'relative', cursor: 'pointer', pr: 1.5 } }, { children: [item.id === selectedViewInfo.id ? _jsx("img", { style: { width: 15, height: 15 }, src: smallBlueCheckIcon, alt: "check" }) : _jsx(Space, {}), _jsxs("span", Object.assign({ style: { flex: 1, fontSize: 11 } }, { children: [item.label, item.default && item.id === selectedViewInfo.id && isModified && _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) => {
141
+ }, onClick: () => handleViewClick(item), sx: { position: 'relative', cursor: 'pointer', pr: 1.5 } }, { children: [item.id === selectedViewInfo.id ? _jsx("img", { style: { width: 15, height: 15 }, src: smallBlueCheckIcon, alt: "check" }) : _jsx(Space, {}), _jsxs("span", Object.assign({ style: { flex: 1, fontSize: 11 } }, { children: [item.label, item.default && defaultModified && _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) => {
178
142
  e.stopPropagation();
179
143
  onEditCustomView === null || onEditCustomView === void 0 ? void 0 : onEditCustomView(item);
180
144
  } })), !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: {
@@ -0,0 +1,5 @@
1
+ /// <reference types="react" />
2
+ import type { ViewsMenuProps } from './types';
3
+ declare function ViewsMenu({ onViewChange, onCreateCustomView, onEditCustomView, onDeleteCustomView, tableMode, templates, lang, }: ViewsMenuProps): import("react/jsx-runtime").JSX.Element;
4
+ declare const _default: import("react").MemoExoticComponent<typeof ViewsMenu>;
5
+ export default _default;
@@ -8,7 +8,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
8
8
  });
9
9
  };
10
10
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
11
- import { memo, useCallback } from 'react';
11
+ import { memo, useCallback, useState } from 'react';
12
12
  import { useTranslation } from 'react-i18next';
13
13
  import ClickAwayListener from '@mui/material/ClickAwayListener';
14
14
  import { Icon, StyledButton } from '../../index.js';
@@ -17,23 +17,20 @@ import ViewsDropdown from './ViewsDropdown';
17
17
  import CreateViewDialog from './CreateViewDialog';
18
18
  import { ViewWrapper } from './styles';
19
19
  import { useViewsManager } from './hooks';
20
- import { useViewSelector } from './hooks/useViewSelector';
21
- function ViewSelector({ onViewChange, onCreateCustomView, onEditCustomView, onDeleteCustomView, tableMode = 'default', templates, lang = 'en', }) {
20
+ import { useViewsMenu } from './hooks/useViewsMenu';
21
+ function ViewsMenu({ onViewChange, onCreateCustomView, onEditCustomView, onDeleteCustomView, tableMode = 'default', templates, lang = 'en', }) {
22
+ var _a;
22
23
  const { t } = useTranslation();
23
- // Use tableMode directly - no conversion needed
24
- const { defaultColumns, updateDefaultColumns, defaultTemplate, customViews, allTemplates, setInternalCustomViews } = useViewsManager({
24
+ const [modifiedModes, setModifiedModes] = useState({});
25
+ const { defaultColumns, updateDefaultColumns, defaultTemplate, customViews, allTemplates } = useViewsManager({
25
26
  tableMode,
26
27
  templates,
27
28
  lang,
28
29
  });
29
- // Callback when default template is modified and saved
30
30
  const handleSaveDefaultColumns = useCallback((columns) => __awaiter(this, void 0, void 0, function* () {
31
31
  if (!(defaultTemplate === null || defaultTemplate === void 0 ? void 0 : defaultTemplate.templateId))
32
32
  return;
33
- // Update local state first
34
33
  updateDefaultColumns(columns);
35
- // Build layout for API
36
- // Map TableMode to layout section code: 'default' → 'Advanced', 'sheet' → 'Sheet'
37
34
  const layout = {
38
35
  code: tableMode === 'sheet' ? 'Sheet' : 'Advanced',
39
36
  columns: columns.map((col, idx) => {
@@ -55,27 +52,25 @@ function ViewSelector({ onViewChange, onCreateCustomView, onEditCustomView, onDe
55
52
  });
56
53
  }),
57
54
  };
58
- // Call parent to persist
59
55
  yield (onEditCustomView === null || onEditCustomView === void 0 ? void 0 : onEditCustomView(defaultTemplate.templateId, {
60
56
  name: defaultTemplate.label,
61
57
  selectedColumns: columns,
62
58
  layout,
63
59
  }));
60
+ setModifiedModes((current) => (Object.assign(Object.assign({}, current), { [tableMode]: true })));
64
61
  }), [defaultTemplate, tableMode, lang, onEditCustomView, updateDefaultColumns]);
65
- const { anchorViewEl, defaultViewEl, setDefaultViewElement, isCreateDialogOpen, editingView, selectedViewInfo, shouldUseCurrentState, currentViewColumns, handleViewButtonClick, handleCloseViewDropdown, handleSelectedViewInfo, handleOpenCreateDialog, handleOpenEditDialog, handleCloseCreateDialog, handleSaveView, handleDeleteView, handleResetViews, updateSelectedView, updateCurrentViewColumns, } = useViewSelector({
62
+ const { anchorEl, isCreateDialogOpen, editingView, selectedViewInfo, shouldUseCurrentState, currentViewColumns, handleViewButtonClick, handleCloseViewDropdown, handleSelectedViewInfo, handleOpenCreateDialog, handleOpenEditDialog, handleCloseCreateDialog, handleSaveView, handleDeleteView, updateSelectedView, } = useViewsMenu({
66
63
  mode: tableMode,
67
64
  onViewChange,
68
65
  onCreateCustomView,
69
66
  onEditCustomView,
70
67
  onDeleteCustomView,
71
- customViews,
72
68
  defaultColumns,
73
69
  defaultTemplate,
74
70
  allTemplates,
75
- setInternalCustomViews,
76
71
  });
77
- 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) => {
78
- setDefaultViewElement(defaultViewEl ? null : e.currentTarget);
79
- }, setViews: handleResetViews, onCreateCustomView: handleOpenCreateDialog, customViews: customViews, onEditCustomView: handleOpenEditDialog, onSaveDefaultColumns: handleSaveDefaultColumns, defaultColumns: defaultColumns, setDefaultColumns: updateDefaultColumns, updateSelectedView: updateSelectedView, mode: tableMode, defaultTemplate: defaultTemplate })] })) })), _jsx(CreateViewDialog, { open: isCreateDialogOpen, onClose: handleCloseCreateDialog, availableColumns: defaultColumns, defaultColumns: defaultColumns, onCreate: handleSaveView, editingView: editingView, onDelete: handleDeleteView, tableViews: shouldUseCurrentState ? currentViewColumns : undefined, mode: tableMode })] }));
72
+ return (_jsxs(_Fragment, { children: [_jsx(ClickAwayListener, Object.assign({ onClickAway: handleCloseViewDropdown }, { children: _jsxs(ViewWrapper, Object.assign({ sx: { width: '32px' }, "data-testid": "ViewsMenu" }, { children: [_jsx(StyledButton, Object.assign({ title: t('tableView'), "data-testid": "ViewsMenu_button", onClick: handleViewButtonClick }, { children: _jsx(Icon, { src: viewIcon, alt: "view", sx: { width: 14, height: 14 } }) })), _jsx(ViewsDropdown, { open: Boolean(anchorEl), anchorEl: anchorEl, defaultModified: (_a = modifiedModes[tableMode]) !== null && _a !== void 0 ? _a : false, onMarkDefaultModified: () => {
73
+ setModifiedModes((current) => (Object.assign(Object.assign({}, current), { [tableMode]: true })));
74
+ }, setSelectedViewInfo: handleSelectedViewInfo, selectedViewInfo: selectedViewInfo, onCreateCustomView: handleOpenCreateDialog, customViews: customViews, onEditCustomView: handleOpenEditDialog, onSaveDefaultColumns: handleSaveDefaultColumns, defaultColumns: defaultColumns, setDefaultColumns: updateDefaultColumns, updateSelectedView: updateSelectedView, mode: tableMode, defaultTemplate: defaultTemplate })] })) })), _jsx(CreateViewDialog, { open: isCreateDialogOpen, onClose: handleCloseCreateDialog, availableColumns: defaultColumns, defaultColumns: defaultColumns, onCreate: handleSaveView, editingView: editingView, onDelete: handleDeleteView, tableViews: shouldUseCurrentState ? currentViewColumns : undefined, mode: tableMode })] }));
80
75
  }
81
- export default memo(ViewSelector);
76
+ export default memo(ViewsMenu);
@@ -56,7 +56,11 @@ export const ViewsSubmenu = ({ columns, allCurrentSelected, someCurrentSelected,
56
56
  alignItems: 'center',
57
57
  justifyContent: 'space-between',
58
58
  width: '100%',
59
- } }, { 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: [
59
+ } }, { children: [_jsx(MenuItem, Object.assign({ isSelected: hasNestedSubmenu ? checked : column.selected, isIndeterminate: hasNestedSubmenu ? indeterminate : false, isDisabled: isDate, onClick: () => {
60
+ if (!isDate) {
61
+ onColumnToggle(column.name);
62
+ }
63
+ }, 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: [
60
64
  {
61
65
  name: 'offset',
62
66
  options: {
@@ -2,7 +2,7 @@ export { useSubMenu } from './useSubMenu';
2
2
  export { useViewColumns } from './useViewColumns';
3
3
  export { useColumnItem } from './useColumnItem';
4
4
  export { useViewsManager } from './useViewsManager';
5
- export { useViewSelector } from './useViewSelector';
5
+ export { useViewsMenu } from './useViewsMenu';
6
6
  export { useSubmenuHover } from './useSubmenuHover';
7
7
  export { useOriginalColumns } from './useOriginalColumns';
8
8
  export { useNestedSubmenu } from './useNestedSubmenu';
@@ -2,7 +2,7 @@ export { useSubMenu } from './useSubMenu';
2
2
  export { useViewColumns } from './useViewColumns';
3
3
  export { useColumnItem } from './useColumnItem';
4
4
  export { useViewsManager } from './useViewsManager';
5
- export { useViewSelector } from './useViewSelector';
5
+ export { useViewsMenu } from './useViewsMenu';
6
6
  export { useSubmenuHover } from './useSubmenuHover';
7
7
  export { useOriginalColumns } from './useOriginalColumns';
8
8
  export { useNestedSubmenu } from './useNestedSubmenu';
@@ -1,20 +1,9 @@
1
- /// <reference types="react" />
2
1
  import type { ColumnViewProps } from '../../../../types/index.js';
3
2
  import type { UseViewsManagerProps, ViewMenuItem } from '../types';
4
- /**
5
- * Simplified hook for managing templates and views.
6
- *
7
- * Key principles:
8
- * - Templates from parent are parsed into allTemplates
9
- * - defaultColumns is the local working copy that can be modified
10
- * - When user modifies default template, we keep changes locally
11
- */
12
3
  export declare const useViewsManager: ({ tableMode, templates, lang }: UseViewsManagerProps) => {
13
4
  defaultTemplate: ViewMenuItem | undefined;
14
5
  customViews: ViewMenuItem[];
15
6
  allTemplates: ViewMenuItem[];
16
7
  defaultColumns: ColumnViewProps[];
17
8
  updateDefaultColumns: (columns: ColumnViewProps[]) => void;
18
- internalCustomViews: ViewMenuItem[];
19
- setInternalCustomViews: import("react").Dispatch<import("react").SetStateAction<ViewMenuItem[]>>;
20
9
  };
@@ -1,15 +1,6 @@
1
1
  import { useState, useEffect, useMemo, useCallback } from 'react';
2
2
  import { transformTemplatesToViewMenuItems, deepCloneColumns } from '../utils';
3
- /**
4
- * Simplified hook for managing templates and views.
5
- *
6
- * Key principles:
7
- * - Templates from parent are parsed into allTemplates
8
- * - defaultColumns is the local working copy that can be modified
9
- * - When user modifies default template, we keep changes locally
10
- */
11
3
  export const useViewsManager = ({ tableMode, templates, lang = 'en' }) => {
12
- // Parse templates (this just transforms the data, doesn't manage modifications)
13
4
  const parsedTemplates = useMemo(() => {
14
5
  if (!templates || templates.length === 0) {
15
6
  return {
@@ -20,7 +11,6 @@ export const useViewsManager = ({ tableMode, templates, lang = 'en' }) => {
20
11
  };
21
12
  }
22
13
  const { customViews, defaultTemplate } = transformTemplatesToViewMenuItems(templates, tableMode, lang);
23
- // Combine all templates for easy access
24
14
  const allTemplates = defaultTemplate ? [defaultTemplate, ...customViews] : customViews;
25
15
  return {
26
16
  customViews,
@@ -29,68 +19,44 @@ export const useViewsManager = ({ tableMode, templates, lang = 'en' }) => {
29
19
  allTemplates,
30
20
  };
31
21
  }, [templates, tableMode, lang]);
32
- // Local state for default columns - this is the working copy that can be modified
33
22
  const [defaultColumns, setDefaultColumns] = useState([]);
34
- // Track if we've initialized for this mode (to avoid resetting user modifications)
35
23
  const [initializedMode, setInitializedMode] = useState(null);
36
- // Initialize defaultColumns when templates load or mode changes
37
24
  useEffect(() => {
38
- // Only initialize if mode changed or we haven't initialized yet
39
25
  if (initializedMode !== tableMode && parsedTemplates.templateDefaultColumns.length > 0) {
40
26
  setDefaultColumns(deepCloneColumns(parsedTemplates.templateDefaultColumns));
41
27
  setInitializedMode(tableMode);
42
28
  }
43
29
  }, [tableMode, parsedTemplates.templateDefaultColumns, initializedMode]);
44
- // Custom views state
45
- const [internalCustomViews, setInternalCustomViews] = useState([]);
46
- useEffect(() => {
47
- setInternalCustomViews([...parsedTemplates.customViews]);
48
- }, [parsedTemplates.customViews]);
49
- // Function to update default columns (called when user modifies and clicks Okay)
50
30
  const updateDefaultColumns = useCallback((columns) => {
51
31
  setDefaultColumns(deepCloneColumns(columns));
52
32
  }, []);
53
- // Create an updated default template with current defaultColumns
54
- // IMPORTANT: When mode just changed (initializedMode !== tableMode), use parsedTemplates
55
- // directly because defaultColumns state hasn't updated yet
56
33
  const updatedDefaultTemplate = useMemo(() => {
57
34
  if (!parsedTemplates.defaultTemplate) {
58
35
  return parsedTemplates.defaultTemplate;
59
36
  }
60
- // If mode just changed, use the fresh parsed columns, not the stale state
61
37
  const columnsToUse = initializedMode !== tableMode ? parsedTemplates.templateDefaultColumns : defaultColumns;
62
38
  if (columnsToUse.length === 0) {
63
39
  return parsedTemplates.defaultTemplate;
64
40
  }
65
41
  return Object.assign(Object.assign({}, parsedTemplates.defaultTemplate), { submenu: columnsToUse, columns: columnsToUse.map((col) => col.name) });
66
42
  }, [parsedTemplates.defaultTemplate, parsedTemplates.templateDefaultColumns, defaultColumns, initializedMode, tableMode]);
67
- // Build allTemplates with the updated default template
68
43
  const updatedAllTemplates = useMemo(() => {
69
44
  if (!updatedDefaultTemplate) {
70
45
  return parsedTemplates.customViews;
71
46
  }
72
47
  return [updatedDefaultTemplate, ...parsedTemplates.customViews];
73
48
  }, [updatedDefaultTemplate, parsedTemplates.customViews]);
74
- // For mode changes, provide the correct columns
75
- // Key: ALWAYS prefer state columns if they exist (preserves user modifications)
76
49
  const effectiveDefaultColumns = useMemo(() => {
77
- // If mode just changed AND we have no initialized state, use parsed columns
78
50
  if (initializedMode !== tableMode && defaultColumns.length === 0) {
79
51
  return parsedTemplates.templateDefaultColumns;
80
52
  }
81
- // Otherwise use state columns (which may include user edits)
82
53
  return defaultColumns.length > 0 ? defaultColumns : parsedTemplates.templateDefaultColumns;
83
54
  }, [initializedMode, tableMode, defaultColumns, parsedTemplates.templateDefaultColumns]);
84
55
  return {
85
- // Template data (with updated default template including modifications)
86
56
  defaultTemplate: updatedDefaultTemplate,
87
57
  customViews: parsedTemplates.customViews,
88
58
  allTemplates: updatedAllTemplates,
89
- // Default columns - preserves user edits
90
59
  defaultColumns: effectiveDefaultColumns,
91
60
  updateDefaultColumns,
92
- // Internal state
93
- internalCustomViews,
94
- setInternalCustomViews,
95
61
  };
96
62
  };
@@ -2,7 +2,7 @@ import { type MouseEvent } from 'react';
2
2
  import type { ColumnViewProps, TableMode } from '../../../../types/index.js';
3
3
  import type { ViewMenuItem, LayoutSection } from '../types';
4
4
  import type { ViewOption } from '../../type';
5
- export interface UseViewSelectorProps {
5
+ export interface UseViewsMenuProps {
6
6
  mode: TableMode;
7
7
  onViewChange?: (selectedView?: ViewMenuItem) => void;
8
8
  onCreateCustomView?: (data: {
@@ -16,16 +16,12 @@ export interface UseViewSelectorProps {
16
16
  layout: LayoutSection;
17
17
  }) => Promise<void>;
18
18
  onDeleteCustomView?: (viewId: string) => Promise<void>;
19
- customViews: ViewMenuItem[];
20
19
  defaultColumns: ColumnViewProps[];
21
20
  defaultTemplate?: ViewMenuItem;
22
21
  allTemplates: ViewMenuItem[];
23
- setInternalCustomViews: (views: ViewMenuItem[]) => void;
24
22
  }
25
- export declare const useViewSelector: ({ mode, onViewChange, onCreateCustomView, onEditCustomView, onDeleteCustomView, customViews, defaultColumns, defaultTemplate, allTemplates, setInternalCustomViews, }: UseViewSelectorProps) => {
26
- anchorViewEl: HTMLDivElement | null;
27
- defaultViewEl: HTMLDivElement | null;
28
- setDefaultViewElement: import("react").Dispatch<import("react").SetStateAction<HTMLDivElement | null>>;
23
+ export declare const useViewsMenu: ({ mode, onViewChange, onCreateCustomView, onEditCustomView, onDeleteCustomView, defaultColumns, defaultTemplate, allTemplates, }: UseViewsMenuProps) => {
24
+ anchorEl: HTMLDivElement | null;
29
25
  isCreateDialogOpen: boolean;
30
26
  editingView: ViewMenuItem | null;
31
27
  selectedViewInfo: ViewOption;
@@ -44,7 +40,5 @@ export declare const useViewSelector: ({ mode, onViewChange, onCreateCustomView,
44
40
  layout: LayoutSection;
45
41
  }) => Promise<void>;
46
42
  handleDeleteView: (viewId: string) => Promise<void>;
47
- handleResetViews: () => void;
48
43
  updateSelectedView: (updatedView: ViewMenuItem) => void;
49
- updateCurrentViewColumns: (columns: ColumnViewProps[]) => void;
50
44
  };
@@ -9,24 +9,20 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
9
9
  };
10
10
  import { useState, useCallback, useEffect, useRef } from 'react';
11
11
  import { deepCloneColumns } from '../utils';
12
- export const useViewSelector = ({ mode, onViewChange, onCreateCustomView, onEditCustomView, onDeleteCustomView, customViews, defaultColumns, defaultTemplate, allTemplates, setInternalCustomViews, }) => {
13
- const [anchorViewEl, setAnchorViewEl] = useState(null);
14
- const [defaultViewEl, setDefaultViewElement] = useState(null);
12
+ export const useViewsMenu = ({ mode, onViewChange, onCreateCustomView, onEditCustomView, onDeleteCustomView, defaultColumns, defaultTemplate, allTemplates, }) => {
13
+ const [anchorEl, setAnchorEl] = useState(null);
15
14
  const [isCreateDialogOpen, setIsCreateDialogOpen] = useState(false);
16
15
  const [editingView, setEditingView] = useState(null);
17
16
  const [selectedViewInfo, setSelectedViewInfo] = useState({ id: 'default', label: 'Default' });
18
17
  const [shouldUseCurrentState, setShouldUseCurrentState] = useState(false);
19
18
  const [selectedView, setSelectedView] = useState(undefined);
20
- // Current view columns - this is what gets displayed and can be modified
21
19
  const [currentViewColumns, setCurrentViewColumns] = useState([]);
22
20
  const hasInitializedRef = useRef(false);
23
- // Helper: Filter view to only include selected columns for parent
24
21
  const getViewForParent = useCallback((view) => {
25
22
  var _a;
26
23
  const selectedColumns = ((_a = view.submenu) === null || _a === void 0 ? void 0 : _a.filter((col) => col.selected)) || [];
27
24
  return Object.assign(Object.assign({}, view), { submenu: selectedColumns, columns: selectedColumns.map((col) => col.name) });
28
25
  }, []);
29
- // Initialize with default template on mount
30
26
  useEffect(() => {
31
27
  if (hasInitializedRef.current)
32
28
  return;
@@ -37,7 +33,6 @@ export const useViewSelector = ({ mode, onViewChange, onCreateCustomView, onEdit
37
33
  onViewChange === null || onViewChange === void 0 ? void 0 : onViewChange(getViewForParent(defaultTemplate));
38
34
  hasInitializedRef.current = true;
39
35
  }, [defaultTemplate, defaultColumns, onViewChange, getViewForParent]);
40
- // Sync currentViewColumns with defaultColumns when they change (e.g., after save)
41
36
  useEffect(() => {
42
37
  if (!hasInitializedRef.current)
43
38
  return;
@@ -45,53 +40,40 @@ export const useViewSelector = ({ mode, onViewChange, onCreateCustomView, onEdit
45
40
  setCurrentViewColumns(deepCloneColumns(defaultColumns));
46
41
  }
47
42
  }, [defaultColumns, selectedView === null || selectedView === void 0 ? void 0 : selectedView.default]);
48
- // Track the last mode we successfully synced columns for
49
43
  const lastSyncedModeRef = useRef(null);
50
- // Handle mode changes - sync with allTemplates updates
51
- // This effect needs to run whenever mode changes OR when defaultColumns/allTemplates update
52
44
  useEffect(() => {
53
45
  if (!hasInitializedRef.current)
54
46
  return;
55
47
  if (!selectedView)
56
48
  return;
57
- // Check if we need to sync: either mode changed, or we haven't synced for current mode yet
58
49
  const needsSync = lastSyncedModeRef.current !== mode;
59
50
  if (!needsSync)
60
51
  return;
61
- // For default template, wait until defaultColumns has data for the new mode
62
52
  if (selectedView.default) {
63
53
  if (defaultColumns.length === 0)
64
- return; // Wait for columns to load
54
+ return;
65
55
  const newView = Object.assign(Object.assign({}, selectedView), { submenu: deepCloneColumns(defaultColumns), columns: defaultColumns.map((col) => col.name) });
66
56
  setSelectedView(newView);
67
57
  setCurrentViewColumns(deepCloneColumns(defaultColumns));
68
- lastSyncedModeRef.current = mode; // Mark as synced only after successful update
58
+ lastSyncedModeRef.current = mode;
69
59
  onViewChange === null || onViewChange === void 0 ? void 0 : onViewChange(getViewForParent(newView));
70
60
  }
71
61
  else {
72
- // Custom template: find it in allTemplates (which has new mode's columns)
73
62
  const updatedTemplate = allTemplates.find((t) => t.templateId === selectedView.templateId || t.id === selectedView.id);
74
63
  if (updatedTemplate && updatedTemplate.submenu && updatedTemplate.submenu.length > 0) {
75
64
  const newView = Object.assign(Object.assign({}, updatedTemplate), { submenu: deepCloneColumns(updatedTemplate.submenu) });
76
65
  setSelectedView(newView);
77
66
  setCurrentViewColumns(deepCloneColumns(updatedTemplate.submenu));
78
- lastSyncedModeRef.current = mode; // Mark as synced only after successful update
67
+ lastSyncedModeRef.current = mode;
79
68
  onViewChange === null || onViewChange === void 0 ? void 0 : onViewChange(getViewForParent(newView));
80
69
  }
81
70
  }
82
71
  }, [mode, defaultColumns, selectedView, allTemplates, onViewChange]);
83
- // Track template updates ref to detect external changes
84
- const templatesUpdateRef = useRef(0);
85
- // Sync selected view when templates change (for edits/updates)
86
- // This ensures that template edits automatically reflect in the selected view
87
- // ONLY when triggered by explicit save actions (Okay/Update buttons)
88
72
  useEffect(() => {
89
- var _a;
90
73
  if (!hasInitializedRef.current)
91
74
  return;
92
75
  if (!selectedView)
93
76
  return;
94
- // Find the current selected view in updated allTemplates
95
77
  const updatedTemplate = allTemplates.find((t) => {
96
78
  const templateId = t.templateId || t.id;
97
79
  const selectedId = selectedView.templateId || selectedView.id;
@@ -99,10 +81,8 @@ export const useViewSelector = ({ mode, onViewChange, onCreateCustomView, onEdit
99
81
  });
100
82
  if (!updatedTemplate)
101
83
  return;
102
- // Check if the template has actually changed by comparing submenu
103
84
  const currentSubmenu = selectedView.submenu || [];
104
85
  const updatedSubmenu = updatedTemplate.submenu || [];
105
- // Simple check: if lengths differ or selected states differ, update
106
86
  const hasChanged = currentSubmenu.length !== updatedSubmenu.length ||
107
87
  currentSubmenu.some((col, idx) => {
108
88
  const updatedCol = updatedSubmenu[idx];
@@ -111,64 +91,39 @@ export const useViewSelector = ({ mode, onViewChange, onCreateCustomView, onEdit
111
91
  return col.selected !== updatedCol.selected || col.name !== updatedCol.name;
112
92
  });
113
93
  if (hasChanged) {
114
- console.log('🔄 Template updated, syncing selected view:', selectedView.label);
115
- console.log(' Old columns count:', currentSubmenu.length, 'New columns count:', updatedSubmenu.length);
116
- console.log(' Old selected:', currentSubmenu.filter((c) => c.selected).length, 'New selected:', updatedSubmenu.filter((c) => c.selected).length);
117
- // Store the full view internally (with all columns)
118
94
  const fullView = Object.assign(Object.assign({}, updatedTemplate), { submenu: deepCloneColumns(updatedTemplate.submenu || []) });
119
95
  setSelectedView(fullView);
120
96
  setCurrentViewColumns(deepCloneColumns(updatedTemplate.submenu || []));
121
- // Pass only selected columns to parent
122
97
  const viewForParent = getViewForParent(fullView);
123
- console.log('✅ Calling onViewChange with', (_a = viewForParent.submenu) === null || _a === void 0 ? void 0 : _a.length, 'selected columns');
124
98
  onViewChange === null || onViewChange === void 0 ? void 0 : onViewChange(viewForParent);
125
- templatesUpdateRef.current++;
126
99
  }
127
100
  }, [allTemplates, selectedView, onViewChange]);
128
101
  const handleViewButtonClick = useCallback((event) => {
129
- setAnchorViewEl(event.currentTarget);
130
- setDefaultViewElement(event.currentTarget);
102
+ setAnchorEl((current) => (current ? null : event.currentTarget));
131
103
  }, []);
132
104
  const handleCloseViewDropdown = useCallback(() => {
133
- setDefaultViewElement(null);
105
+ setAnchorEl(null);
134
106
  }, []);
135
107
  const handleSelectedViewInfo = useCallback((selected, viewMenuItem) => {
136
108
  setSelectedViewInfo(selected);
137
109
  const newSelectedView = viewMenuItem || undefined;
138
110
  setSelectedView(newSelectedView);
139
111
  setCurrentViewColumns(deepCloneColumns((newSelectedView === null || newSelectedView === void 0 ? void 0 : newSelectedView.submenu) || []));
140
- if (newSelectedView) {
141
- onViewChange === null || onViewChange === void 0 ? void 0 : onViewChange(getViewForParent(newSelectedView));
142
- }
143
- else {
144
- onViewChange === null || onViewChange === void 0 ? void 0 : onViewChange(undefined);
145
- }
112
+ onViewChange === null || onViewChange === void 0 ? void 0 : onViewChange(newSelectedView ? getViewForParent(newSelectedView) : undefined);
146
113
  handleCloseViewDropdown();
147
114
  }, [handleCloseViewDropdown, onViewChange, getViewForParent]);
148
- // Update selected view with modified columns
149
115
  const updateSelectedView = useCallback((updatedView) => {
150
- var _a, _b;
151
- console.log('🔴 updateSelectedView called:', {
152
- id: updatedView.id,
153
- columnsCount: (_a = updatedView.submenu) === null || _a === void 0 ? void 0 : _a.length,
154
- selectedColumns: (_b = updatedView.submenu) === null || _b === void 0 ? void 0 : _b.filter((c) => c.selected).length,
155
- });
156
- // CRITICAL: Force new object/array references to trigger React re-renders
157
116
  const viewWithNewRefs = Object.assign(Object.assign({}, updatedView), { submenu: updatedView.submenu ? [...updatedView.submenu] : undefined, columns: updatedView.columns ? [...updatedView.columns] : undefined });
158
117
  setSelectedView(viewWithNewRefs);
159
118
  setCurrentViewColumns(deepCloneColumns(viewWithNewRefs.submenu || []));
160
119
  setSelectedViewInfo({ id: viewWithNewRefs.id, label: viewWithNewRefs.label });
161
120
  onViewChange === null || onViewChange === void 0 ? void 0 : onViewChange(getViewForParent(viewWithNewRefs));
162
121
  }, [onViewChange, getViewForParent]);
163
- // Update current view columns (for temporary modifications)
164
- const updateCurrentViewColumns = useCallback((columns) => {
165
- setCurrentViewColumns(columns);
166
- }, []);
167
122
  const handleOpenCreateDialog = useCallback((useCurrentState = false) => {
168
123
  setEditingView(null);
169
124
  setShouldUseCurrentState(useCurrentState);
170
125
  setIsCreateDialogOpen(true);
171
- setDefaultViewElement(null);
126
+ setAnchorEl(null);
172
127
  }, []);
173
128
  const handleOpenEditDialog = useCallback((view) => {
174
129
  setEditingView(view);
@@ -183,25 +138,16 @@ export const useViewSelector = ({ mode, onViewChange, onCreateCustomView, onEdit
183
138
  const handleSaveView = useCallback((data) => __awaiter(void 0, void 0, void 0, function* () {
184
139
  if (editingView) {
185
140
  const templateId = editingView.templateId || editingView.id;
186
- // Call the edit handler - parent will update templates
187
141
  yield (onEditCustomView === null || onEditCustomView === void 0 ? void 0 : onEditCustomView(templateId, data));
188
- // After edit completes successfully, the template will be updated externally via templates prop
189
- // The useEffect watching allTemplates will automatically sync the view
190
- console.log('✅ View saved - templates will update and trigger sync');
191
142
  }
192
143
  else {
193
- // Call the create handler - parent will add new template
194
144
  yield (onCreateCustomView === null || onCreateCustomView === void 0 ? void 0 : onCreateCustomView(data));
195
- // After create completes successfully, the new template will be added externally via templates prop
196
- // The new template will automatically appear in the dropdown
197
- console.log('✅ View created - new template will appear in dropdown');
198
145
  }
199
146
  }), [editingView, onEditCustomView, onCreateCustomView]);
200
147
  const handleDeleteView = useCallback((viewId) => __awaiter(void 0, void 0, void 0, function* () {
201
148
  const viewToDelete = allTemplates.find((view) => view.id === viewId || view.templateId === viewId);
202
149
  const templateId = (viewToDelete === null || viewToDelete === void 0 ? void 0 : viewToDelete.templateId) || viewId;
203
150
  yield (onDeleteCustomView === null || onDeleteCustomView === void 0 ? void 0 : onDeleteCustomView(templateId));
204
- // If deleted view was selected, reset to default
205
151
  if ((selectedView === null || selectedView === void 0 ? void 0 : selectedView.id) === viewId || (selectedView === null || selectedView === void 0 ? void 0 : selectedView.templateId) === viewId) {
206
152
  setSelectedView(defaultTemplate);
207
153
  setCurrentViewColumns(deepCloneColumns(defaultColumns));
@@ -210,14 +156,8 @@ export const useViewSelector = ({ mode, onViewChange, onCreateCustomView, onEdit
210
156
  }
211
157
  }
212
158
  }), [allTemplates, onDeleteCustomView, selectedView, defaultTemplate, defaultColumns, onViewChange, getViewForParent]);
213
- // Reset views to default
214
- const handleResetViews = useCallback(() => {
215
- setCurrentViewColumns(deepCloneColumns(defaultColumns));
216
- }, [defaultColumns]);
217
159
  return {
218
- anchorViewEl,
219
- defaultViewEl,
220
- setDefaultViewElement,
160
+ anchorEl,
221
161
  isCreateDialogOpen,
222
162
  editingView,
223
163
  selectedViewInfo,
@@ -232,8 +172,6 @@ export const useViewSelector = ({ mode, onViewChange, onCreateCustomView, onEdit
232
172
  handleCloseCreateDialog,
233
173
  handleSaveView,
234
174
  handleDeleteView,
235
- handleResetViews,
236
175
  updateSelectedView,
237
- updateCurrentViewColumns,
238
176
  };
239
177
  };
@@ -2,11 +2,11 @@ export { default } from './TableView';
2
2
  export { default as TableView } from './TableView';
3
3
  export { default as DefaultViews } from './DefaultViews';
4
4
  export { default as CustomViews } from './CustomViews';
5
- export { default as ViewSelector } from './ViewSelector';
5
+ export { default as ViewsMenu } from './ViewsMenu';
6
6
  export { default as ViewsDropdown } from './ViewsDropdown';
7
7
  export { default as CreateViewDialog } from './CreateViewDialog';
8
8
  export type { ViewMenuItem, CreateCustomViewDialogProps, LayoutSection, ColumnItem, FieldItem, Template, CreateTemplatePayload, UpdateTemplatePayload, } from './types';
9
9
  export { transformLayoutToColumns, getColumnsByMode, createCustomViewMenuItem, setViewAsDefault, transformTemplatesToViewMenuItems, convertColumnsToLayoutSection, isDateColumn, getColumnCheckState, } from './utils';
10
- export { useSubmenuHover, useViewsManager, useViewSelector } from './hooks';
10
+ export { useSubmenuHover, useViewsManager, useViewsMenu } from './hooks';
11
11
  export { DIALOG_WIDTH, DIALOG_HEIGHT, MAX_CUSTOM_VIEWS, TEMPLATE_NAME_MAX_LENGTH } from './constants';
12
12
  export { defaultViewList, advancedColumns, sheetColumns } from './data';
@@ -2,12 +2,10 @@ export { default } from './TableView';
2
2
  export { default as TableView } from './TableView';
3
3
  export { default as DefaultViews } from './DefaultViews';
4
4
  export { default as CustomViews } from './CustomViews';
5
- export { default as ViewSelector } from './ViewSelector';
5
+ export { default as ViewsMenu } from './ViewsMenu';
6
6
  export { default as ViewsDropdown } from './ViewsDropdown';
7
7
  export { default as CreateViewDialog } from './CreateViewDialog';
8
8
  export { transformLayoutToColumns, getColumnsByMode, createCustomViewMenuItem, setViewAsDefault, transformTemplatesToViewMenuItems, convertColumnsToLayoutSection, isDateColumn, getColumnCheckState, } from './utils';
9
- export { useSubmenuHover, useViewsManager, useViewSelector } from './hooks';
9
+ export { useSubmenuHover, useViewsManager, useViewsMenu } from './hooks';
10
10
  export { DIALOG_WIDTH, DIALOG_HEIGHT, MAX_CUSTOM_VIEWS, TEMPLATE_NAME_MAX_LENGTH } from './constants';
11
- // Note: defaultViewList, advancedColumns, sheetColumns are only exported for demo purposes
12
- // They should not be used as defaults in production - all data should come from API
13
11
  export { defaultViewList, advancedColumns, sheetColumns } from './data';
@@ -1,4 +1,3 @@
1
- /// <reference types="react" />
2
1
  import type { ColumnViewProps, TableMode } from '../../../types/index.js';
3
2
  import type { TableHeaderProps, ViewOption } from '../type';
4
3
  export interface ViewMenuItem {
@@ -102,7 +101,7 @@ export interface ColumnCheckState {
102
101
  checked: boolean;
103
102
  indeterminate: boolean;
104
103
  }
105
- export interface ViewSelectorProps {
104
+ export interface ViewsMenuProps {
106
105
  onViewChange?: TableHeaderProps['onViewChange'];
107
106
  onCreateCustomView?: (data: {
108
107
  name: string;
@@ -123,9 +122,9 @@ export interface ViewsDropdownProps {
123
122
  open: boolean;
124
123
  selectedViewInfo: ViewOption;
125
124
  setSelectedViewInfo: (selected: ViewOption, viewMenuItem?: ViewMenuItem) => void;
126
- onSelect: (e: React.MouseEvent<HTMLDivElement>) => void;
127
- setViews?: (views: string[]) => void;
128
125
  anchorEl: Element | null;
126
+ defaultModified?: boolean;
127
+ onMarkDefaultModified?: () => void;
129
128
  onCreateCustomView?: (useCurrentState?: boolean) => void;
130
129
  customViews?: ViewMenuItem[];
131
130
  onEditCustomView?: (view: ViewMenuItem) => void;
@@ -22,7 +22,7 @@ export const transformLayoutToColumns = (layout, lang = 'en') => {
22
22
  columns.push({
23
23
  name: col.code,
24
24
  label,
25
- selected: (_d = col.default) !== null && _d !== void 0 ? _d : false,
25
+ selected: isDateColumn(col.code) ? true : (_d = col.default) !== null && _d !== void 0 ? _d : false,
26
26
  menuItems: (menuItems === null || menuItems === void 0 ? void 0 : menuItems.length) ? menuItems : undefined,
27
27
  });
28
28
  });
@@ -329,6 +329,9 @@ export const toggleSingleColumn = (columns, columnName) => {
329
329
  var _a;
330
330
  if (col.name !== columnName)
331
331
  return col;
332
+ if (isDateColumn(col.name)) {
333
+ return Object.assign(Object.assign({}, col), { selected: true });
334
+ }
332
335
  const newSelected = !col.selected;
333
336
  const updatedMenuItems = (_a = col.menuItems) === null || _a === void 0 ? void 0 : _a.map((item) => (Object.assign(Object.assign({}, item), { selected: newSelected })));
334
337
  return Object.assign(Object.assign({}, col), { selected: newSelected, menuItems: updatedMenuItems });
@@ -411,6 +414,9 @@ export const areSomeCurrentColumnsSelected = (columns, allSelected) => {
411
414
  export const toggleAllCurrentColumns = (columns, shouldSelect) => {
412
415
  return columns.map((col) => {
413
416
  var _a;
417
+ if (isDateColumn(col.name)) {
418
+ return Object.assign(Object.assign({}, col), { selected: true });
419
+ }
414
420
  const updatedMenuItems = (_a = col.menuItems) === null || _a === void 0 ? void 0 : _a.map((item) => (Object.assign(Object.assign({}, item), { selected: shouldSelect })));
415
421
  return Object.assign(Object.assign({}, col), { selected: shouldSelect, menuItems: updatedMenuItems });
416
422
  });
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.1.376-test.1-test.2",
5
- "testVersion": 2,
4
+ "version": "0.1.376-test.1-test.2-test.3-test.4-test.5",
5
+ "testVersion": 5,
6
6
  "type": "module",
7
7
  "main": "build/index.js",
8
8
  "module": "build/index.js",
@@ -1,5 +0,0 @@
1
- /// <reference types="react" />
2
- import type { ViewSelectorProps } from './types';
3
- declare function ViewSelector({ onViewChange, onCreateCustomView, onEditCustomView, onDeleteCustomView, tableMode, templates, lang, }: ViewSelectorProps): import("react/jsx-runtime").JSX.Element;
4
- declare const _default: import("react").MemoExoticComponent<typeof ViewSelector>;
5
- export default _default;