@tap-payments/os-micro-frontend-shared 0.1.373-test.2-test.3 → 0.1.373-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.
@@ -20,7 +20,7 @@ function ViewSelector({ onViewChange, setIsViewVisible, setTableViews, tableView
20
20
  });
21
21
  const tableViews = externalTableViews !== null && externalTableViews !== void 0 ? externalTableViews : internalTableViews;
22
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({
23
+ const { anchorViewEl, defaultViewEl, setDefaultViewElement, isCreateDialogOpen, editingView, selectedViewInfo, shouldUseCurrentState, handleViewButtonClick, handleCloseViewDropdown, handleSelectedViewInfo, handleOpenCreateDialog, handleOpenEditDialog, handleCloseCreateDialog, handleSaveView, handleDeleteView, handleResetViews, handleTableViewsChange, updateSelectedView, } = useViewSelector({
24
24
  mode,
25
25
  onViewChange,
26
26
  onTableViewsChange,
@@ -40,6 +40,6 @@ function ViewSelector({ onViewChange, setIsViewVisible, setTableViews, tableView
40
40
  });
41
41
  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) => {
42
42
  setDefaultViewElement(defaultViewEl ? null : e.currentTarget);
43
- }, setViews: handleResetViews, tableViews: tableViews, setTableViews: handleTableViewsChange, onCreateCustomView: handleOpenCreateDialog, customViews: customViews, onEditCustomView: handleOpenEditDialog, defaultColumns: defaultColumns, setDefaultColumns: setDefaultColumns, onViewChange: onViewChange })] })) })), _jsx(CreateViewDialog, { open: isCreateDialogOpen, onClose: handleCloseCreateDialog, availableColumns: defaultColumns, defaultColumns: defaultColumns, onCreate: handleSaveView, editingView: editingView, onDelete: handleDeleteView, tableViews: shouldUseCurrentState ? defaultColumns : undefined, mode: mode })] }));
43
+ }, setViews: handleResetViews, tableViews: tableViews, setTableViews: handleTableViewsChange, onCreateCustomView: handleOpenCreateDialog, customViews: customViews, onEditCustomView: handleOpenEditDialog, defaultColumns: defaultColumns, setDefaultColumns: setDefaultColumns, updateSelectedView: updateSelectedView })] })) })), _jsx(CreateViewDialog, { open: isCreateDialogOpen, onClose: handleCloseCreateDialog, availableColumns: defaultColumns, defaultColumns: defaultColumns, onCreate: handleSaveView, editingView: editingView, onDelete: handleDeleteView, tableViews: shouldUseCurrentState ? defaultColumns : undefined, mode: mode })] }));
44
44
  }
45
45
  export default memo(ViewSelector);
@@ -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, defaultColumns, setDefaultColumns, onViewChange, }: Readonly<ViewsDropdownProps>): import("react/jsx-runtime").JSX.Element;
3
+ declare function ViewsDropdown({ open, selectedViewInfo, setSelectedViewInfo, onSelect, setViews, anchorEl, onCreateCustomView, customViews, onEditCustomView, defaultColumns, setDefaultColumns, updateSelectedView, }: Readonly<ViewsDropdownProps>): import("react/jsx-runtime").JSX.Element;
4
4
  declare const _default: React.MemoExoticComponent<typeof ViewsDropdown>;
5
5
  export default _default;
@@ -14,7 +14,7 @@ import { defaultViewList } from './data';
14
14
  import { ViewsSubmenu } from './components/ViewsSubmenu';
15
15
  import { ListStyled, DropdownStyled, MenuItem as StyledMenuItem, Space, SpaceAfter, SubmenuContainer, SaveCustomViewBox, SaveCustomViewInnerBox, ButtonsContainer, CancelButtonSx, OkayButtonSx, ModifiedTextSx, } from './styles';
16
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, onViewChange, }) {
17
+ function ViewsDropdown({ open, selectedViewInfo, setSelectedViewInfo, onSelect, setViews, anchorEl, onCreateCustomView, customViews = [], onEditCustomView, defaultColumns = [], setDefaultColumns, updateSelectedView, }) {
18
18
  const { t } = useTranslation();
19
19
  const { hoveredColumn: hoveredItem, anchorEl: submenuAnchorEl, openSubmenu: handleMenuItemHover, closeSubmenu: handleMenuItemLeave, cancelClose: handleSubmenuEnter, forceClose: forceCloseSubmenu, } = useSubmenuHover();
20
20
  const [hoveredCustomView, setHoveredCustomView] = React.useState(null);
@@ -123,15 +123,15 @@ function ViewsDropdown({ open, selectedViewInfo, setSelectedViewInfo, onSelect,
123
123
  setIsDefaultModified(hasChanges);
124
124
  if (hasChanges) {
125
125
  setBaselineColumns(deepCloneColumns(originalColumns));
126
- // Update table when default columns change and default view is selected
127
- if (selectedViewInfo.id === 'default' && defaultColumns.length > 0) {
126
+ // Update selected view internally and notify parent via callback
127
+ if (selectedViewInfo.id === 'default' && defaultColumns.length > 0 && updateSelectedView) {
128
128
  const defaultViewWithColumns = {
129
129
  id: 'default',
130
130
  label: 'Default',
131
131
  submenu: [...defaultColumns],
132
132
  columns: defaultColumns.map((col) => col.name),
133
133
  };
134
- onViewChange === null || onViewChange === void 0 ? void 0 : onViewChange(defaultViewWithColumns);
134
+ updateSelectedView(defaultViewWithColumns);
135
135
  }
136
136
  }
137
137
  else {
@@ -54,4 +54,5 @@ export declare const useViewSelector: ({ mode, onViewChange, onTableViewsChange,
54
54
  handleDeleteView: (viewId: string) => Promise<void>;
55
55
  handleResetViews: (views: string[]) => void;
56
56
  handleTableViewsChange: (newTableViews: ColumnViewProps[]) => void;
57
+ updateSelectedView: (updatedView: ViewMenuItem) => void;
57
58
  };
@@ -7,7 +7,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
7
7
  step((generator = generator.apply(thisArg, _arguments || [])).next());
8
8
  });
9
9
  };
10
- import { useState, useCallback, useEffect } from 'react';
10
+ import { useState, useCallback, useEffect, useRef } from 'react';
11
11
  import { createCustomViewMenuItem } from '../utils';
12
12
  export const useViewSelector = ({ mode, onViewChange, onTableViewsChange, onCustomViewsChange, onCreateCustomView, onEditCustomView, onDeleteCustomView, resetTableViews, setTableViews, tableViews, customViews, defaultColumns, defaultTemplate, setInternalCustomViews, setInternalTableViews, setDefaultColumns, }) => {
13
13
  const [anchorViewEl, setAnchorViewEl] = useState(null);
@@ -17,6 +17,7 @@ export const useViewSelector = ({ mode, onViewChange, onTableViewsChange, onCust
17
17
  const [selectedViewInfo, setSelectedViewInfo] = useState({ id: 'default', label: 'Default' });
18
18
  const [shouldUseCurrentState, setShouldUseCurrentState] = useState(false);
19
19
  const [selectedView, setSelectedView] = useState(undefined);
20
+ const hasInitializedRef = useRef(false);
20
21
  // Update editingView when customViews changes to ensure it reflects the latest saved state
21
22
  useEffect(() => {
22
23
  if (editingView && customViews.length > 0) {
@@ -43,14 +44,18 @@ export const useViewSelector = ({ mode, onViewChange, onTableViewsChange, onCust
43
44
  }
44
45
  }
45
46
  }, [customViews, selectedView, onViewChange]);
46
- // Notify parent of initial view on mount
47
+ // Notify parent of initial view on mount only
47
48
  useEffect(() => {
49
+ // Only initialize once on mount, don't reset if user has already selected a view
50
+ if (hasInitializedRef.current)
51
+ return;
48
52
  // Use defaultTemplate if available, otherwise undefined (built-in default view)
49
53
  const initialView = defaultTemplate || undefined;
50
54
  console.log('initialView', initialView);
51
55
  setSelectedView(initialView);
52
56
  onViewChange === null || onViewChange === void 0 ? void 0 : onViewChange(initialView);
53
- }, [onViewChange, defaultTemplate]);
57
+ hasInitializedRef.current = true;
58
+ }, [defaultTemplate, onViewChange]);
54
59
  const handleTableViewsChange = useCallback((newTableViews) => {
55
60
  const setTableViewsState = setTableViews !== null && setTableViews !== void 0 ? setTableViews : setInternalTableViews;
56
61
  setTableViewsState(newTableViews);
@@ -81,6 +86,13 @@ export const useViewSelector = ({ mode, onViewChange, onTableViewsChange, onCust
81
86
  onViewChange === null || onViewChange === void 0 ? void 0 : onViewChange(newSelectedView);
82
87
  handleCloseViewDropdown();
83
88
  }, [handleCloseViewDropdown, onViewChange]);
89
+ // Internal function to update selected view and notify parent
90
+ // Used when default columns change via "Okay" button
91
+ const updateSelectedView = useCallback((updatedView) => {
92
+ setSelectedView(updatedView);
93
+ setSelectedViewInfo({ id: updatedView.id, label: updatedView.label });
94
+ onViewChange === null || onViewChange === void 0 ? void 0 : onViewChange(updatedView);
95
+ }, [onViewChange, setSelectedViewInfo]);
84
96
  const handleOpenCreateDialog = useCallback((useCurrentState = false) => {
85
97
  setEditingView(null);
86
98
  setShouldUseCurrentState(useCurrentState);
@@ -173,5 +185,6 @@ export const useViewSelector = ({ mode, onViewChange, onTableViewsChange, onCust
173
185
  handleDeleteView,
174
186
  handleResetViews,
175
187
  handleTableViewsChange,
188
+ updateSelectedView,
176
189
  };
177
190
  };
@@ -350,18 +350,24 @@ export const ResetCheckboxSx = {
350
350
  };
351
351
  export const SubmenuContainer = styled(Box)(() => ({
352
352
  minWidth: 200,
353
+ display: 'flex',
354
+ flexDirection: 'column',
355
+ maxHeight: '80vh',
356
+ overflow: 'hidden',
353
357
  }));
354
358
  export const ColumnItemsContainer = styled(Box)(() => ({
355
- maxHeight: 300,
359
+ flex: 1,
356
360
  overflowY: 'auto',
357
361
  paddingLeft: 6,
358
362
  paddingRight: 6,
363
+ minHeight: 0,
359
364
  }));
360
365
  export const SaveCustomViewBox = styled(Box)(() => ({
361
366
  paddingLeft: 8,
362
367
  paddingRight: 8,
363
368
  paddingTop: 8,
364
369
  paddingBottom: 8,
370
+ flexShrink: 0,
365
371
  }));
366
372
  export const SaveCustomViewInnerBox = styled(Box)(({ disabled }) => ({
367
373
  width: '100%',
@@ -376,7 +382,7 @@ export const SaveCustomViewInnerBox = styled(Box)(({ disabled }) => ({
376
382
  cursor: disabled ? 'not-allowed' : 'pointer',
377
383
  opacity: disabled ? 0.5 : 1,
378
384
  }));
379
- export const ButtonsContainer = styled(Box)(() => ({
385
+ export const ButtonsContainer = styled(Box)(({ theme }) => ({
380
386
  display: 'flex',
381
387
  justifyContent: 'flex-end',
382
388
  gap: 12,
@@ -384,6 +390,9 @@ export const ButtonsContainer = styled(Box)(() => ({
384
390
  paddingBottom: 8,
385
391
  paddingLeft: 12,
386
392
  paddingRight: 12,
393
+ flexShrink: 0,
394
+ borderTop: '1px solid',
395
+ borderColor: theme.palette.divider,
387
396
  }));
388
397
  export const CancelButtonSx = {
389
398
  fontSize: 11,
@@ -132,7 +132,7 @@ export interface ViewsDropdownProps {
132
132
  onEditCustomView?: (view: ViewMenuItem) => void;
133
133
  defaultColumns?: ColumnViewProps[];
134
134
  setDefaultColumns?: (columns: ColumnViewProps[]) => void;
135
- onViewChange?: (selectedView?: ViewMenuItem) => void;
135
+ updateSelectedView?: (view: ViewMenuItem) => void;
136
136
  }
137
137
  export interface ColumnListProps {
138
138
  selectedColumns: ColumnViewProps[];
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.373-test.2-test.3",
5
- "testVersion": 3,
4
+ "version": "0.1.373-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",