@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.
- package/build/components/TableHeader/TableView/ViewSelector.js +2 -2
- package/build/components/TableHeader/TableView/ViewsDropdown.d.ts +1 -1
- package/build/components/TableHeader/TableView/ViewsDropdown.js +4 -4
- package/build/components/TableHeader/TableView/hooks/useViewSelector.d.ts +1 -0
- package/build/components/TableHeader/TableView/hooks/useViewSelector.js +16 -3
- package/build/components/TableHeader/TableView/styles.js +11 -2
- package/build/components/TableHeader/TableView/types.d.ts +1 -1
- package/package.json +2 -2
|
@@ -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,
|
|
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,
|
|
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,
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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":
|
|
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",
|