@tap-payments/os-micro-frontend-shared 0.1.372-test.2-test.3 → 0.1.372-test.2-test.3-test.4-test.5-test.6
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/CreateViewDialog.js +3 -1
- package/build/components/TableHeader/TableView/ViewSelector.d.ts +1 -1
- package/build/components/TableHeader/TableView/ViewSelector.js +6 -8
- package/build/components/TableHeader/TableView/ViewsDropdown.js +14 -5
- package/build/components/TableHeader/TableView/components/ColumnList.js +19 -3
- package/build/components/TableHeader/TableView/components/ViewsSubmenu.js +8 -1
- package/build/components/TableHeader/TableView/hooks/useViewSelector.d.ts +5 -3
- package/build/components/TableHeader/TableView/hooks/useViewSelector.js +20 -8
- package/build/components/TableHeader/TableView/hooks/useViewsManager.d.ts +2 -1
- package/build/components/TableHeader/TableView/hooks/useViewsManager.js +42 -23
- package/build/components/TableHeader/TableView/index.js +2 -0
- package/build/components/TableHeader/TableView/types.d.ts +20 -15
- package/build/components/TableHeader/TableView/utils.d.ts +6 -1
- package/build/components/TableHeader/TableView/utils.js +20 -4
- package/build/components/TableHeader/type.d.ts +1 -1
- package/package.json +2 -2
|
@@ -40,7 +40,9 @@ function CreateViewDialog({ open, onClose, onCreate, availableColumns = [], isLo
|
|
|
40
40
|
const handleDelete = () => __awaiter(this, void 0, void 0, function* () {
|
|
41
41
|
if (!editingView)
|
|
42
42
|
return;
|
|
43
|
-
|
|
43
|
+
const templateId = editingView.templateId || editingView.id;
|
|
44
|
+
console.log({ templateId });
|
|
45
|
+
yield (onDelete === null || onDelete === void 0 ? void 0 : onDelete(templateId));
|
|
44
46
|
onClose();
|
|
45
47
|
});
|
|
46
48
|
if (!open)
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
2
|
import type { ViewSelectorProps } from './types';
|
|
3
|
-
declare function ViewSelector({ onViewChange, setIsViewVisible, setTableViews, tableViews: externalTableViews, resetTableViews, customViews: externalCustomViews, onCreateCustomView, onEditCustomView, onDeleteCustomView, tableMode, onTableViewsChange,
|
|
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
4
|
declare const _default: import("react").MemoExoticComponent<typeof ViewSelector>;
|
|
5
5
|
export default _default;
|
|
@@ -9,15 +9,12 @@ import CreateViewDialog from './CreateViewDialog';
|
|
|
9
9
|
import { ViewWrapper } from './styles';
|
|
10
10
|
import { useViewsManager } from './hooks';
|
|
11
11
|
import { useViewSelector } from './hooks/useViewSelector';
|
|
12
|
-
function ViewSelector({ onViewChange, setIsViewVisible, setTableViews, tableViews: externalTableViews, resetTableViews, customViews: externalCustomViews, onCreateCustomView, onEditCustomView, onDeleteCustomView, tableMode = 'default', onTableViewsChange,
|
|
12
|
+
function ViewSelector({ onViewChange, setIsViewVisible, setTableViews, tableViews: externalTableViews, resetTableViews, customViews: externalCustomViews, onCreateCustomView, onEditCustomView, onDeleteCustomView, tableMode = 'default', onTableViewsChange, onCustomViewsChange, templates, lang = 'en', }) {
|
|
13
13
|
const { t } = useTranslation();
|
|
14
14
|
// Map tableMode to viewMode: 'sheet' → 'sheet', 'default' → 'advanced'
|
|
15
15
|
const mode = tableMode === 'sheet' ? 'sheet' : 'advanced';
|
|
16
|
-
const { defaultColumns, setDefaultColumns, internalTableViews, setInternalTableViews, internalCustomViews, setInternalCustomViews } = useViewsManager({
|
|
16
|
+
const { defaultColumns, setDefaultColumns, internalTableViews, setInternalTableViews, internalCustomViews, setInternalCustomViews, defaultTemplate, } = useViewsManager({
|
|
17
17
|
mode,
|
|
18
|
-
layoutData,
|
|
19
|
-
initialTableViews,
|
|
20
|
-
initialCustomViews,
|
|
21
18
|
templates,
|
|
22
19
|
lang,
|
|
23
20
|
});
|
|
@@ -25,7 +22,7 @@ function ViewSelector({ onViewChange, setIsViewVisible, setTableViews, tableView
|
|
|
25
22
|
const customViews = externalCustomViews !== null && externalCustomViews !== void 0 ? externalCustomViews : internalCustomViews;
|
|
26
23
|
const { anchorViewEl, defaultViewEl, setDefaultViewElement, isCreateDialogOpen, editingView, selectedViewInfo, shouldUseCurrentState, handleViewButtonClick, handleCloseViewDropdown, handleSelectedViewInfo, handleOpenCreateDialog, handleOpenEditDialog, handleCloseCreateDialog, handleSaveView, handleDeleteView, handleResetViews, handleTableViewsChange, } = useViewSelector({
|
|
27
24
|
mode,
|
|
28
|
-
|
|
25
|
+
onViewChange,
|
|
29
26
|
onTableViewsChange,
|
|
30
27
|
onCustomViewsChange,
|
|
31
28
|
onCreateCustomView,
|
|
@@ -35,11 +32,12 @@ function ViewSelector({ onViewChange, setIsViewVisible, setTableViews, tableView
|
|
|
35
32
|
setTableViews,
|
|
36
33
|
tableViews,
|
|
37
34
|
customViews,
|
|
35
|
+
defaultColumns,
|
|
36
|
+
defaultTemplate,
|
|
38
37
|
setInternalCustomViews,
|
|
39
38
|
setInternalTableViews,
|
|
40
39
|
});
|
|
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) => {
|
|
42
|
-
onViewChange === null || onViewChange === void 0 ? void 0 : onViewChange();
|
|
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) => {
|
|
43
41
|
setDefaultViewElement(defaultViewEl ? null : e.currentTarget);
|
|
44
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 })] }));
|
|
45
43
|
}
|
|
@@ -38,6 +38,19 @@ function ViewsDropdown({ open, selectedViewInfo, setSelectedViewInfo, onSelect,
|
|
|
38
38
|
const { hoveredNestedColumn, nestedSubmenuAnchorEl, openNestedSubmenu, closeNestedSubmenu, cancelNestedClose } = useNestedSubmenu();
|
|
39
39
|
// Default templates are merged into built-in Default view, so no need to sort
|
|
40
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
|
+
};
|
|
41
54
|
const toggleColumnSelection = (columnName) => {
|
|
42
55
|
if (!setDefaultColumns)
|
|
43
56
|
return;
|
|
@@ -149,11 +162,7 @@ function ViewsDropdown({ open, selectedViewInfo, setSelectedViewInfo, onSelect,
|
|
|
149
162
|
else if (hasSubmenu(item, defaultColumns)) {
|
|
150
163
|
handleMenuItemLeave();
|
|
151
164
|
}
|
|
152
|
-
}, onClick: () => {
|
|
153
|
-
setSelectedViewInfo(item);
|
|
154
|
-
if (item.columns)
|
|
155
|
-
setViews === null || setViews === void 0 ? void 0 : setViews(item.columns);
|
|
156
|
-
}, sx: {
|
|
165
|
+
}, onClick: () => handleViewClick(item), sx: {
|
|
157
166
|
position: 'relative',
|
|
158
167
|
cursor: 'pointer',
|
|
159
168
|
pr: 1.5,
|
|
@@ -26,7 +26,16 @@ export const ColumnList = ({ selectedColumns, columnNames, allSelected, someSele
|
|
|
26
26
|
const isDate = isDateColumn(column.name);
|
|
27
27
|
const hasSubmenu = column.menuItems && column.menuItems.length > 0;
|
|
28
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)'
|
|
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) => {
|
|
30
39
|
const target = e.target;
|
|
31
40
|
if (target.closest('[role="checkbox"]') ||
|
|
32
41
|
target.closest('input[type="checkbox"]') ||
|
|
@@ -37,7 +46,7 @@ export const ColumnList = ({ selectedColumns, columnNames, allSelected, someSele
|
|
|
37
46
|
if (e.target.closest('[role="checkbox"]') || e.target.closest('input[type="checkbox"]')) {
|
|
38
47
|
e.stopPropagation();
|
|
39
48
|
}
|
|
40
|
-
} }, { 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) => {
|
|
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) => {
|
|
41
50
|
e.stopPropagation();
|
|
42
51
|
}, onPointerDown: (e) => {
|
|
43
52
|
e.stopPropagation();
|
|
@@ -46,7 +55,14 @@ export const ColumnList = ({ selectedColumns, columnNames, allSelected, someSele
|
|
|
46
55
|
onColumnToggle(column.name);
|
|
47
56
|
}, onClick: (e) => {
|
|
48
57
|
e.stopPropagation();
|
|
49
|
-
}, 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 }
|
|
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) => {
|
|
50
66
|
var _a, _b;
|
|
51
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));
|
|
52
68
|
}) })] })) })))] }), column.name));
|
|
@@ -37,7 +37,14 @@ export const ViewsSubmenu = ({ columns, allCurrentSelected, someCurrentSelected,
|
|
|
37
37
|
alignItems: 'center',
|
|
38
38
|
justifyContent: 'space-between',
|
|
39
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 }
|
|
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) => {
|
|
41
48
|
var _a, _b;
|
|
42
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));
|
|
43
50
|
}) })] })) })))] })), columnIndex < columns.length - 1 && _jsx(Divider, {})] }, column.name));
|
|
@@ -4,7 +4,7 @@ import type { ViewMenuItem, LayoutSection, ViewMode } from '../types';
|
|
|
4
4
|
import type { ViewOption } from '../../type';
|
|
5
5
|
export interface UseViewSelectorProps {
|
|
6
6
|
mode: ViewMode;
|
|
7
|
-
|
|
7
|
+
onViewChange?: (selectedView?: ViewMenuItem) => void;
|
|
8
8
|
onTableViewsChange?: (tableViews: ColumnViewProps[]) => void;
|
|
9
9
|
onCustomViewsChange?: (customViews: ViewMenuItem[]) => void;
|
|
10
10
|
onCreateCustomView?: (data: {
|
|
@@ -25,10 +25,12 @@ export interface UseViewSelectorProps {
|
|
|
25
25
|
setTableViews?: (columns: ColumnViewProps[]) => void;
|
|
26
26
|
tableViews: ColumnViewProps[];
|
|
27
27
|
customViews: ViewMenuItem[];
|
|
28
|
+
defaultColumns: ColumnViewProps[];
|
|
29
|
+
defaultTemplate?: ViewMenuItem;
|
|
28
30
|
setInternalCustomViews: (views: ViewMenuItem[]) => void;
|
|
29
31
|
setInternalTableViews: (views: ColumnViewProps[]) => void;
|
|
30
32
|
}
|
|
31
|
-
export declare const useViewSelector: ({ mode,
|
|
33
|
+
export declare const useViewSelector: ({ mode, onViewChange, onTableViewsChange, onCustomViewsChange, onCreateCustomView, onEditCustomView, onDeleteCustomView, resetTableViews, setTableViews, tableViews, customViews, defaultColumns, defaultTemplate, setInternalCustomViews, setInternalTableViews, }: UseViewSelectorProps) => {
|
|
32
34
|
anchorViewEl: HTMLDivElement | null;
|
|
33
35
|
defaultViewEl: HTMLDivElement | null;
|
|
34
36
|
setDefaultViewElement: import("react").Dispatch<import("react").SetStateAction<HTMLDivElement | null>>;
|
|
@@ -39,7 +41,7 @@ export declare const useViewSelector: ({ mode, layoutData, onTableViewsChange, o
|
|
|
39
41
|
handleViewButtonClick: (event: MouseEvent<HTMLDivElement>) => void;
|
|
40
42
|
handleCloseViewDropdown: () => void;
|
|
41
43
|
handleClose: () => void;
|
|
42
|
-
handleSelectedViewInfo: (selected: ViewOption) => void;
|
|
44
|
+
handleSelectedViewInfo: (selected: ViewOption, viewMenuItem?: ViewMenuItem) => void;
|
|
43
45
|
handleOpenCreateDialog: (useCurrentState?: boolean) => void;
|
|
44
46
|
handleOpenEditDialog: (view: ViewMenuItem) => void;
|
|
45
47
|
handleCloseCreateDialog: () => void;
|
|
@@ -7,15 +7,23 @@ 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 } from 'react';
|
|
11
|
-
import {
|
|
12
|
-
export const useViewSelector = ({ mode,
|
|
10
|
+
import { useState, useCallback, useEffect } from 'react';
|
|
11
|
+
import { createCustomViewMenuItem } from '../utils';
|
|
12
|
+
export const useViewSelector = ({ mode, onViewChange, onTableViewsChange, onCustomViewsChange, onCreateCustomView, onEditCustomView, onDeleteCustomView, resetTableViews, setTableViews, tableViews, customViews, defaultColumns, defaultTemplate, setInternalCustomViews, setInternalTableViews, }) => {
|
|
13
13
|
const [anchorViewEl, setAnchorViewEl] = useState(null);
|
|
14
14
|
const [defaultViewEl, setDefaultViewElement] = useState(null);
|
|
15
15
|
const [isCreateDialogOpen, setIsCreateDialogOpen] = useState(false);
|
|
16
16
|
const [editingView, setEditingView] = useState(null);
|
|
17
17
|
const [selectedViewInfo, setSelectedViewInfo] = useState({ id: 'default', label: 'Default' });
|
|
18
18
|
const [shouldUseCurrentState, setShouldUseCurrentState] = useState(false);
|
|
19
|
+
const [selectedView, setSelectedView] = useState(undefined);
|
|
20
|
+
// Notify parent of initial view on mount
|
|
21
|
+
useEffect(() => {
|
|
22
|
+
// Use defaultTemplate if available, otherwise undefined (built-in default view)
|
|
23
|
+
const initialView = defaultTemplate || undefined;
|
|
24
|
+
setSelectedView(initialView);
|
|
25
|
+
onViewChange === null || onViewChange === void 0 ? void 0 : onViewChange(initialView);
|
|
26
|
+
}, [onViewChange, defaultTemplate]);
|
|
19
27
|
const handleTableViewsChange = useCallback((newTableViews) => {
|
|
20
28
|
const setTableViewsState = setTableViews !== null && setTableViews !== void 0 ? setTableViews : setInternalTableViews;
|
|
21
29
|
setTableViewsState(newTableViews);
|
|
@@ -37,10 +45,14 @@ export const useViewSelector = ({ mode, layoutData, onTableViewsChange, onCustom
|
|
|
37
45
|
setDefaultViewElement(null);
|
|
38
46
|
setSelectedViewInfo({ label: 'Default', id: 'default' });
|
|
39
47
|
}, []);
|
|
40
|
-
const handleSelectedViewInfo = useCallback((selected) => {
|
|
48
|
+
const handleSelectedViewInfo = useCallback((selected, viewMenuItem) => {
|
|
41
49
|
setSelectedViewInfo(selected);
|
|
50
|
+
// Update selected view and notify parent
|
|
51
|
+
const newSelectedView = viewMenuItem || undefined;
|
|
52
|
+
setSelectedView(newSelectedView);
|
|
53
|
+
onViewChange === null || onViewChange === void 0 ? void 0 : onViewChange(newSelectedView);
|
|
42
54
|
handleCloseViewDropdown();
|
|
43
|
-
}, [handleCloseViewDropdown]);
|
|
55
|
+
}, [handleCloseViewDropdown, onViewChange]);
|
|
44
56
|
const handleOpenCreateDialog = useCallback((useCurrentState = false) => {
|
|
45
57
|
setEditingView(null);
|
|
46
58
|
setShouldUseCurrentState(useCurrentState);
|
|
@@ -81,10 +93,10 @@ export const useViewSelector = ({ mode, layoutData, onTableViewsChange, onCustom
|
|
|
81
93
|
resetTableViews({ id: views[0], label: views[0] });
|
|
82
94
|
}
|
|
83
95
|
else {
|
|
84
|
-
|
|
85
|
-
handleTableViewsChange(
|
|
96
|
+
// Reset to default columns from templates
|
|
97
|
+
handleTableViewsChange([...defaultColumns]);
|
|
86
98
|
}
|
|
87
|
-
}, [resetTableViews,
|
|
99
|
+
}, [resetTableViews, defaultColumns, handleTableViewsChange]);
|
|
88
100
|
return {
|
|
89
101
|
// State
|
|
90
102
|
anchorViewEl,
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
2
|
import type { ColumnViewProps } from '../../../../types/index.js';
|
|
3
3
|
import type { UseViewsManagerProps, ViewMenuItem } from '../types';
|
|
4
|
-
export declare const useViewsManager: ({ mode,
|
|
4
|
+
export declare const useViewsManager: ({ mode, templates, lang }: UseViewsManagerProps) => {
|
|
5
5
|
defaultColumns: ColumnViewProps[];
|
|
6
6
|
setDefaultColumns: import("react").Dispatch<import("react").SetStateAction<ColumnViewProps[]>>;
|
|
7
7
|
internalTableViews: ColumnViewProps[];
|
|
8
8
|
setInternalTableViews: import("react").Dispatch<import("react").SetStateAction<ColumnViewProps[]>>;
|
|
9
9
|
internalCustomViews: ViewMenuItem[];
|
|
10
10
|
setInternalCustomViews: import("react").Dispatch<import("react").SetStateAction<ViewMenuItem[]>>;
|
|
11
|
+
defaultTemplate: ViewMenuItem | undefined;
|
|
11
12
|
};
|
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
import { useState, useEffect, useMemo } from 'react';
|
|
2
|
-
import {
|
|
3
|
-
export const useViewsManager = ({ mode,
|
|
4
|
-
// Transform templates internally
|
|
2
|
+
import { transformTemplatesToViewMenuItems } from '../utils';
|
|
3
|
+
export const useViewsManager = ({ mode, templates, lang = 'en' }) => {
|
|
4
|
+
// Transform templates internally - this is the only source of data
|
|
5
5
|
const transformedTemplates = useMemo(() => {
|
|
6
6
|
if (!templates)
|
|
7
7
|
return null;
|
|
8
8
|
const templatesArray = Array.isArray(templates) ? templates : templates.templates;
|
|
9
|
-
const { customViews, defaultTemplateColumns } = transformTemplatesToViewMenuItems(templatesArray, mode, lang);
|
|
10
|
-
//
|
|
9
|
+
const { customViews, defaultTemplateColumns, defaultTemplate } = transformTemplatesToViewMenuItems(templatesArray, mode, lang);
|
|
10
|
+
// Only use default template columns - no fallback to layout data
|
|
11
|
+
// The default view must come from a template with default: true
|
|
11
12
|
const effectiveLayoutData = defaultTemplateColumns
|
|
12
13
|
? [
|
|
13
14
|
{
|
|
@@ -31,18 +32,16 @@ export const useViewsManager = ({ mode, layoutData, initialTableViews, initialCu
|
|
|
31
32
|
}),
|
|
32
33
|
},
|
|
33
34
|
]
|
|
34
|
-
:
|
|
35
|
+
: [];
|
|
35
36
|
return {
|
|
36
37
|
customViews,
|
|
37
38
|
layoutData: effectiveLayoutData,
|
|
38
39
|
defaultTemplateColumns,
|
|
40
|
+
defaultTemplate,
|
|
39
41
|
};
|
|
40
42
|
}, [templates, mode, lang]);
|
|
41
|
-
// Use transformed templates or provided props
|
|
42
|
-
const effectiveLayoutData = (transformedTemplates === null || transformedTemplates === void 0 ? void 0 : transformedTemplates.layoutData) || layoutData;
|
|
43
|
-
const effectiveCustomViews = (transformedTemplates === null || transformedTemplates === void 0 ? void 0 : transformedTemplates.customViews) || initialCustomViews;
|
|
44
43
|
const [defaultColumns, setDefaultColumns] = useState(() => {
|
|
45
|
-
//
|
|
44
|
+
// Only use data from templates - no other sources
|
|
46
45
|
if (templates) {
|
|
47
46
|
const templatesArray = Array.isArray(templates) ? templates : templates.templates;
|
|
48
47
|
const { defaultTemplateColumns } = transformTemplatesToViewMenuItems(templatesArray, mode, lang);
|
|
@@ -50,31 +49,50 @@ export const useViewsManager = ({ mode, layoutData, initialTableViews, initialCu
|
|
|
50
49
|
return defaultTemplateColumns;
|
|
51
50
|
}
|
|
52
51
|
}
|
|
53
|
-
|
|
52
|
+
// Return empty array if no templates
|
|
53
|
+
return [];
|
|
54
|
+
});
|
|
55
|
+
const [internalTableViews, setInternalTableViews] = useState(() => {
|
|
56
|
+
// Initialize from templates only
|
|
57
|
+
if (templates) {
|
|
58
|
+
const templatesArray = Array.isArray(templates) ? templates : templates.templates;
|
|
59
|
+
const { defaultTemplateColumns } = transformTemplatesToViewMenuItems(templatesArray, mode, lang);
|
|
60
|
+
if (defaultTemplateColumns) {
|
|
61
|
+
return defaultTemplateColumns;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
return [];
|
|
65
|
+
});
|
|
66
|
+
const [internalCustomViews, setInternalCustomViews] = useState(() => {
|
|
67
|
+
// Initialize from templates only
|
|
68
|
+
if (templates) {
|
|
69
|
+
const templatesArray = Array.isArray(templates) ? templates : templates.templates;
|
|
70
|
+
const { customViews } = transformTemplatesToViewMenuItems(templatesArray, mode, lang);
|
|
71
|
+
return customViews || [];
|
|
72
|
+
}
|
|
73
|
+
return [];
|
|
54
74
|
});
|
|
55
|
-
const [internalTableViews, setInternalTableViews] = useState(initialTableViews || defaultColumns || []);
|
|
56
|
-
const [internalCustomViews, setInternalCustomViews] = useState(effectiveCustomViews || []);
|
|
57
75
|
useEffect(() => {
|
|
58
|
-
//
|
|
76
|
+
// Only use default template columns from template with default: true
|
|
77
|
+
// No fallback to layout data - default must come from templates array
|
|
59
78
|
if (transformedTemplates === null || transformedTemplates === void 0 ? void 0 : transformedTemplates.defaultTemplateColumns) {
|
|
60
79
|
setDefaultColumns(transformedTemplates.defaultTemplateColumns);
|
|
61
|
-
|
|
62
|
-
setInternalTableViews(transformedTemplates.defaultTemplateColumns);
|
|
63
|
-
}
|
|
80
|
+
setInternalTableViews(transformedTemplates.defaultTemplateColumns);
|
|
64
81
|
}
|
|
65
82
|
else {
|
|
66
|
-
|
|
67
|
-
setDefaultColumns(
|
|
68
|
-
|
|
69
|
-
setInternalTableViews(columns);
|
|
70
|
-
}
|
|
83
|
+
// No default template found - set empty arrays
|
|
84
|
+
setDefaultColumns([]);
|
|
85
|
+
setInternalTableViews([]);
|
|
71
86
|
}
|
|
72
|
-
}, [mode,
|
|
87
|
+
}, [mode, transformedTemplates === null || transformedTemplates === void 0 ? void 0 : transformedTemplates.defaultTemplateColumns]);
|
|
73
88
|
// Update custom views when templates change
|
|
74
89
|
useEffect(() => {
|
|
75
90
|
if (transformedTemplates === null || transformedTemplates === void 0 ? void 0 : transformedTemplates.customViews) {
|
|
76
91
|
setInternalCustomViews(transformedTemplates.customViews);
|
|
77
92
|
}
|
|
93
|
+
else {
|
|
94
|
+
setInternalCustomViews([]);
|
|
95
|
+
}
|
|
78
96
|
}, [transformedTemplates === null || transformedTemplates === void 0 ? void 0 : transformedTemplates.customViews]);
|
|
79
97
|
return {
|
|
80
98
|
defaultColumns,
|
|
@@ -83,5 +101,6 @@ export const useViewsManager = ({ mode, layoutData, initialTableViews, initialCu
|
|
|
83
101
|
setInternalTableViews,
|
|
84
102
|
internalCustomViews,
|
|
85
103
|
setInternalCustomViews,
|
|
104
|
+
defaultTemplate: transformedTemplates === null || transformedTemplates === void 0 ? void 0 : transformedTemplates.defaultTemplate,
|
|
86
105
|
};
|
|
87
106
|
};
|
|
@@ -8,4 +8,6 @@ export { default as CreateViewDialog } from './CreateViewDialog';
|
|
|
8
8
|
export { transformLayoutToColumns, getColumnsByMode, createCustomViewMenuItem, setViewAsDefault, transformTemplatesToViewMenuItems, convertColumnsToLayoutSection, isDateColumn, getColumnCheckState, } from './utils';
|
|
9
9
|
export { useSubmenuHover } 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
|
|
11
13
|
export { defaultViewList, advancedColumns, sheetColumns } from './data';
|
|
@@ -5,6 +5,7 @@ export type ViewMode = 'advanced' | 'sheet';
|
|
|
5
5
|
export interface ViewMenuItem {
|
|
6
6
|
label: string;
|
|
7
7
|
id: string;
|
|
8
|
+
templateId?: string;
|
|
8
9
|
columns?: string[];
|
|
9
10
|
submenu?: ColumnViewProps[];
|
|
10
11
|
isCustom?: boolean;
|
|
@@ -16,6 +17,7 @@ export interface FieldItem {
|
|
|
16
17
|
text: string;
|
|
17
18
|
lang: string;
|
|
18
19
|
}[];
|
|
20
|
+
order?: number | null;
|
|
19
21
|
default?: boolean;
|
|
20
22
|
}
|
|
21
23
|
export interface ColumnItem {
|
|
@@ -33,23 +35,28 @@ export interface LayoutSection {
|
|
|
33
35
|
columns: ColumnItem[];
|
|
34
36
|
}
|
|
35
37
|
export interface TemplateResponse {
|
|
36
|
-
|
|
37
|
-
object: string;
|
|
38
|
-
master: boolean;
|
|
39
|
-
live_mode: boolean;
|
|
40
|
-
api_version: string;
|
|
41
|
-
feature_version: string;
|
|
42
|
-
created: number;
|
|
43
|
-
updated: number;
|
|
38
|
+
templateId: string;
|
|
44
39
|
segment: string;
|
|
45
40
|
app: string;
|
|
46
41
|
service: string;
|
|
42
|
+
name: string;
|
|
43
|
+
layout: LayoutSection[];
|
|
44
|
+
id: {
|
|
45
|
+
timestamp: number;
|
|
46
|
+
date: string;
|
|
47
|
+
};
|
|
48
|
+
masterTemplateId: string;
|
|
47
49
|
user: {
|
|
48
50
|
id: string;
|
|
49
51
|
};
|
|
50
|
-
|
|
52
|
+
created: number;
|
|
53
|
+
updated: number;
|
|
51
54
|
default: boolean;
|
|
52
|
-
|
|
55
|
+
object?: string;
|
|
56
|
+
master?: boolean;
|
|
57
|
+
live_mode?: boolean;
|
|
58
|
+
api_version?: string;
|
|
59
|
+
feature_version?: string;
|
|
53
60
|
}
|
|
54
61
|
export interface TemplatesListResponse {
|
|
55
62
|
object: string;
|
|
@@ -74,6 +81,7 @@ export interface CreateCustomViewDialogProps {
|
|
|
74
81
|
editingView?: {
|
|
75
82
|
id: string;
|
|
76
83
|
label: string;
|
|
84
|
+
templateId?: string;
|
|
77
85
|
submenu?: ColumnViewProps[];
|
|
78
86
|
} | null;
|
|
79
87
|
onDelete?: (viewId: string) => Promise<void>;
|
|
@@ -114,8 +122,8 @@ export interface ViewSelectorProps {
|
|
|
114
122
|
export interface ViewsDropdownProps {
|
|
115
123
|
open: boolean;
|
|
116
124
|
selectedViewInfo: ViewOption;
|
|
117
|
-
setSelectedViewInfo: (selected: ViewOption) => void;
|
|
118
|
-
onSelect: (e: React.MouseEvent<HTMLDivElement
|
|
125
|
+
setSelectedViewInfo: (selected: ViewOption, viewMenuItem?: ViewMenuItem) => void;
|
|
126
|
+
onSelect: (e: React.MouseEvent<HTMLDivElement>, selectedView?: ViewMenuItem) => void;
|
|
119
127
|
setViews?: (views: string[]) => void;
|
|
120
128
|
anchorEl: Element | null;
|
|
121
129
|
tableViews?: ColumnViewProps[];
|
|
@@ -167,9 +175,6 @@ export interface UseCreateViewDialogProps {
|
|
|
167
175
|
}
|
|
168
176
|
export interface UseViewsManagerProps {
|
|
169
177
|
mode: ViewMode;
|
|
170
|
-
layoutData?: LayoutSection[];
|
|
171
|
-
initialTableViews?: ColumnViewProps[];
|
|
172
|
-
initialCustomViews?: ViewMenuItem[];
|
|
173
178
|
templates?: TemplatesListResponse | TemplateResponse[];
|
|
174
179
|
lang?: string;
|
|
175
180
|
}
|
|
@@ -25,13 +25,18 @@ export declare const setViewAsDefault: (views: ViewMenuItem[], viewId: string) =
|
|
|
25
25
|
* Separates default templates (to be merged into built-in Default view) from custom views
|
|
26
26
|
*/
|
|
27
27
|
export declare const transformTemplatesToViewMenuItems: (templates: Array<{
|
|
28
|
-
id: string
|
|
28
|
+
id: string | {
|
|
29
|
+
timestamp: number;
|
|
30
|
+
date: string;
|
|
31
|
+
};
|
|
29
32
|
name: string;
|
|
30
33
|
default: boolean;
|
|
31
34
|
layout: LayoutSection[];
|
|
35
|
+
templateId: string;
|
|
32
36
|
}>, mode?: ViewMode, lang?: string) => {
|
|
33
37
|
customViews: ViewMenuItem[];
|
|
34
38
|
defaultTemplateColumns?: ColumnViewProps[] | undefined;
|
|
39
|
+
defaultTemplate?: ViewMenuItem | undefined;
|
|
35
40
|
};
|
|
36
41
|
/**
|
|
37
42
|
* Convert ColumnViewProps back to LayoutSection format for API requests
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
// Note: advancedColumns and sheetColumns are only used in demo - not imported here to avoid default data
|
|
2
2
|
/**
|
|
3
3
|
* Transform API layout response to internal ColumnViewProps format
|
|
4
4
|
*/
|
|
@@ -35,7 +35,8 @@ export const getColumnsByMode = (mode, layoutData) => {
|
|
|
35
35
|
return transformLayoutToColumns([section]);
|
|
36
36
|
}
|
|
37
37
|
}
|
|
38
|
-
|
|
38
|
+
// Return empty array - all data should come from API
|
|
39
|
+
return [];
|
|
39
40
|
};
|
|
40
41
|
export const isDateColumn = (name) => {
|
|
41
42
|
return name.toLowerCase() === 'date';
|
|
@@ -98,18 +99,33 @@ export const setViewAsDefault = (views, viewId) => {
|
|
|
98
99
|
export const transformTemplatesToViewMenuItems = (templates, mode = 'sheet', lang = 'en') => {
|
|
99
100
|
const customViews = [];
|
|
100
101
|
let defaultTemplateColumns;
|
|
102
|
+
let defaultTemplate;
|
|
101
103
|
templates.forEach((template) => {
|
|
102
104
|
// Get columns for the specified mode
|
|
103
105
|
const section = template.layout.find((s) => s.code.toLowerCase() === mode.toLowerCase());
|
|
104
106
|
const columns = section ? transformLayoutToColumns([section], lang) : [];
|
|
107
|
+
// Handle id as either string or object
|
|
108
|
+
const templateIdString = typeof template.id === 'string' ? template.id : template.templateId;
|
|
109
|
+
const viewId = typeof template.id === 'string' ? template.id : template.templateId;
|
|
105
110
|
if (template.default) {
|
|
106
111
|
// Store default template columns to merge into built-in Default view
|
|
107
112
|
defaultTemplateColumns = columns;
|
|
113
|
+
// Also create a ViewMenuItem for the default template
|
|
114
|
+
defaultTemplate = {
|
|
115
|
+
id: 'default',
|
|
116
|
+
templateId: template.templateId,
|
|
117
|
+
label: template.name,
|
|
118
|
+
isCustom: false,
|
|
119
|
+
default: true,
|
|
120
|
+
columns: columns.map((col) => col.name),
|
|
121
|
+
submenu: columns,
|
|
122
|
+
};
|
|
108
123
|
}
|
|
109
124
|
else {
|
|
110
125
|
// Add non-default templates as custom views
|
|
111
126
|
customViews.push({
|
|
112
|
-
id:
|
|
127
|
+
id: viewId,
|
|
128
|
+
templateId: template.templateId,
|
|
113
129
|
label: template.name,
|
|
114
130
|
isCustom: true,
|
|
115
131
|
default: false,
|
|
@@ -118,7 +134,7 @@ export const transformTemplatesToViewMenuItems = (templates, mode = 'sheet', lan
|
|
|
118
134
|
});
|
|
119
135
|
}
|
|
120
136
|
});
|
|
121
|
-
return { customViews, defaultTemplateColumns };
|
|
137
|
+
return { customViews, defaultTemplateColumns, defaultTemplate };
|
|
122
138
|
};
|
|
123
139
|
/**
|
|
124
140
|
* Convert ColumnViewProps back to LayoutSection format for API requests
|
|
@@ -23,7 +23,7 @@ export interface TableHeaderProps<IStatus extends TableHeaderStatus | TableHeade
|
|
|
23
23
|
calendarMode?: CalenderMode;
|
|
24
24
|
onStatusChange?: <T extends IStatus>(status?: T) => void;
|
|
25
25
|
onSearch?: (search: string) => void;
|
|
26
|
-
onViewChange?: () => void;
|
|
26
|
+
onViewChange?: (selectedView?: ViewMenuItem) => void;
|
|
27
27
|
onDateChange?: (date: Date | [Date, Date]) => void;
|
|
28
28
|
tableReportsComponent?: React.ReactNode;
|
|
29
29
|
tableFilterComponent?: React.ReactNode;
|
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.372-test.2-test.3",
|
|
5
|
-
"testVersion":
|
|
4
|
+
"version": "0.1.372-test.2-test.3-test.4-test.5-test.6",
|
|
5
|
+
"testVersion": 6,
|
|
6
6
|
"type": "module",
|
|
7
7
|
"main": "build/index.js",
|
|
8
8
|
"module": "build/index.js",
|