@tap-payments/os-micro-frontend-shared 0.1.372-test.2-test.3-test.4-test.5 → 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/ViewSelector.js +4 -3
- package/build/components/TableHeader/TableView/ViewsDropdown.js +9 -16
- 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 +4 -2
- package/build/components/TableHeader/TableView/hooks/useViewSelector.js +16 -4
- package/build/components/TableHeader/TableView/hooks/useViewsManager.d.ts +1 -0
- package/build/components/TableHeader/TableView/hooks/useViewsManager.js +11 -13
- package/build/components/TableHeader/TableView/types.d.ts +2 -2
- package/build/components/TableHeader/TableView/utils.d.ts +1 -0
- package/build/components/TableHeader/TableView/utils.js +12 -1
- package/build/components/TableHeader/type.d.ts +1 -1
- package/package.json +2 -2
|
@@ -13,7 +13,7 @@ function ViewSelector({ onViewChange, setIsViewVisible, setTableViews, tableView
|
|
|
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
18
|
templates,
|
|
19
19
|
lang,
|
|
@@ -22,6 +22,7 @@ function ViewSelector({ onViewChange, setIsViewVisible, setTableViews, tableView
|
|
|
22
22
|
const customViews = externalCustomViews !== null && externalCustomViews !== void 0 ? externalCustomViews : internalCustomViews;
|
|
23
23
|
const { anchorViewEl, defaultViewEl, setDefaultViewElement, isCreateDialogOpen, editingView, selectedViewInfo, shouldUseCurrentState, handleViewButtonClick, handleCloseViewDropdown, handleSelectedViewInfo, handleOpenCreateDialog, handleOpenEditDialog, handleCloseCreateDialog, handleSaveView, handleDeleteView, handleResetViews, handleTableViewsChange, } = useViewSelector({
|
|
24
24
|
mode,
|
|
25
|
+
onViewChange,
|
|
25
26
|
onTableViewsChange,
|
|
26
27
|
onCustomViewsChange,
|
|
27
28
|
onCreateCustomView,
|
|
@@ -32,11 +33,11 @@ function ViewSelector({ onViewChange, setIsViewVisible, setTableViews, tableView
|
|
|
32
33
|
tableViews,
|
|
33
34
|
customViews,
|
|
34
35
|
defaultColumns,
|
|
36
|
+
defaultTemplate,
|
|
35
37
|
setInternalCustomViews,
|
|
36
38
|
setInternalTableViews,
|
|
37
39
|
});
|
|
38
|
-
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,
|
|
39
|
-
onViewChange === null || onViewChange === void 0 ? void 0 : onViewChange(templateId);
|
|
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) => {
|
|
40
41
|
setDefaultViewElement(defaultViewEl ? null : e.currentTarget);
|
|
41
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 })] }));
|
|
42
43
|
}
|
|
@@ -39,24 +39,17 @@ function ViewsDropdown({ open, selectedViewInfo, setSelectedViewInfo, onSelect,
|
|
|
39
39
|
// Default templates are merged into built-in Default view, so no need to sort
|
|
40
40
|
const viewList = [...defaultViewList, ...customViews];
|
|
41
41
|
const handleViewClick = (item) => {
|
|
42
|
-
setSelectedViewInfo(item);
|
|
43
42
|
if (item.columns)
|
|
44
43
|
setViews === null || setViews === void 0 ? void 0 : setViews(item.columns);
|
|
45
|
-
// Call onSelect with
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
// For default view, call onSelect without templateId
|
|
55
|
-
const syntheticEvent = {
|
|
56
|
-
currentTarget: anchorEl || document.createElement('div'),
|
|
57
|
-
};
|
|
58
|
-
onSelect(syntheticEvent);
|
|
59
|
-
}
|
|
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);
|
|
60
53
|
};
|
|
61
54
|
const toggleColumnSelection = (columnName) => {
|
|
62
55
|
if (!setDefaultColumns)
|
|
@@ -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,6 +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
|
+
onViewChange?: (selectedView?: ViewMenuItem) => void;
|
|
7
8
|
onTableViewsChange?: (tableViews: ColumnViewProps[]) => void;
|
|
8
9
|
onCustomViewsChange?: (customViews: ViewMenuItem[]) => void;
|
|
9
10
|
onCreateCustomView?: (data: {
|
|
@@ -25,10 +26,11 @@ export interface UseViewSelectorProps {
|
|
|
25
26
|
tableViews: ColumnViewProps[];
|
|
26
27
|
customViews: ViewMenuItem[];
|
|
27
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, onTableViewsChange, onCustomViewsChange, onCreateCustomView, onEditCustomView, onDeleteCustomView, resetTableViews, setTableViews, tableViews, customViews, defaultColumns, setInternalCustomViews, setInternalTableViews, }: UseViewSelectorProps) => {
|
|
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, onTableViewsChange, onCustomViews
|
|
|
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';
|
|
10
|
+
import { useState, useCallback, useEffect } from 'react';
|
|
11
11
|
import { createCustomViewMenuItem } from '../utils';
|
|
12
|
-
export const useViewSelector = ({ mode, onTableViewsChange, onCustomViewsChange, onCreateCustomView, onEditCustomView, onDeleteCustomView, resetTableViews, setTableViews, tableViews, customViews, defaultColumns, setInternalCustomViews, setInternalTableViews, }) => {
|
|
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, onTableViewsChange, onCustomViewsChange,
|
|
|
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);
|
|
@@ -8,4 +8,5 @@ export declare const useViewsManager: ({ mode, templates, lang }: UseViewsManage
|
|
|
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 { transformTemplatesToViewMenuItems
|
|
2
|
+
import { transformTemplatesToViewMenuItems } from '../utils';
|
|
3
3
|
export const useViewsManager = ({ mode, templates, lang = 'en' }) => {
|
|
4
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,11 +32,12 @@ export const useViewsManager = ({ mode, templates, lang = 'en' }) => {
|
|
|
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
43
|
const [defaultColumns, setDefaultColumns] = useState(() => {
|
|
@@ -71,23 +73,18 @@ export const useViewsManager = ({ mode, templates, lang = 'en' }) => {
|
|
|
71
73
|
return [];
|
|
72
74
|
});
|
|
73
75
|
useEffect(() => {
|
|
74
|
-
// Only use
|
|
76
|
+
// Only use default template columns from template with default: true
|
|
77
|
+
// No fallback to layout data - default must come from templates array
|
|
75
78
|
if (transformedTemplates === null || transformedTemplates === void 0 ? void 0 : transformedTemplates.defaultTemplateColumns) {
|
|
76
79
|
setDefaultColumns(transformedTemplates.defaultTemplateColumns);
|
|
77
80
|
setInternalTableViews(transformedTemplates.defaultTemplateColumns);
|
|
78
81
|
}
|
|
79
|
-
else if ((transformedTemplates === null || transformedTemplates === void 0 ? void 0 : transformedTemplates.layoutData) && transformedTemplates.layoutData.length > 0) {
|
|
80
|
-
// Use layoutData from templates
|
|
81
|
-
const columns = getColumnsByMode(mode, transformedTemplates.layoutData);
|
|
82
|
-
setDefaultColumns(columns);
|
|
83
|
-
setInternalTableViews(columns);
|
|
84
|
-
}
|
|
85
82
|
else {
|
|
86
|
-
// No
|
|
83
|
+
// No default template found - set empty arrays
|
|
87
84
|
setDefaultColumns([]);
|
|
88
85
|
setInternalTableViews([]);
|
|
89
86
|
}
|
|
90
|
-
}, [mode, transformedTemplates === null || transformedTemplates === void 0 ? void 0 : transformedTemplates.defaultTemplateColumns
|
|
87
|
+
}, [mode, transformedTemplates === null || transformedTemplates === void 0 ? void 0 : transformedTemplates.defaultTemplateColumns]);
|
|
91
88
|
// Update custom views when templates change
|
|
92
89
|
useEffect(() => {
|
|
93
90
|
if (transformedTemplates === null || transformedTemplates === void 0 ? void 0 : transformedTemplates.customViews) {
|
|
@@ -104,5 +101,6 @@ export const useViewsManager = ({ mode, templates, lang = 'en' }) => {
|
|
|
104
101
|
setInternalTableViews,
|
|
105
102
|
internalCustomViews,
|
|
106
103
|
setInternalCustomViews,
|
|
104
|
+
defaultTemplate: transformedTemplates === null || transformedTemplates === void 0 ? void 0 : transformedTemplates.defaultTemplate,
|
|
107
105
|
};
|
|
108
106
|
};
|
|
@@ -122,8 +122,8 @@ export interface ViewSelectorProps {
|
|
|
122
122
|
export interface ViewsDropdownProps {
|
|
123
123
|
open: boolean;
|
|
124
124
|
selectedViewInfo: ViewOption;
|
|
125
|
-
setSelectedViewInfo: (selected: ViewOption) => void;
|
|
126
|
-
onSelect: (e: React.MouseEvent<HTMLDivElement>,
|
|
125
|
+
setSelectedViewInfo: (selected: ViewOption, viewMenuItem?: ViewMenuItem) => void;
|
|
126
|
+
onSelect: (e: React.MouseEvent<HTMLDivElement>, selectedView?: ViewMenuItem) => void;
|
|
127
127
|
setViews?: (views: string[]) => void;
|
|
128
128
|
anchorEl: Element | null;
|
|
129
129
|
tableViews?: ColumnViewProps[];
|
|
@@ -36,6 +36,7 @@ export declare const transformTemplatesToViewMenuItems: (templates: Array<{
|
|
|
36
36
|
}>, mode?: ViewMode, lang?: string) => {
|
|
37
37
|
customViews: ViewMenuItem[];
|
|
38
38
|
defaultTemplateColumns?: ColumnViewProps[] | undefined;
|
|
39
|
+
defaultTemplate?: ViewMenuItem | undefined;
|
|
39
40
|
};
|
|
40
41
|
/**
|
|
41
42
|
* Convert ColumnViewProps back to LayoutSection format for API requests
|
|
@@ -99,6 +99,7 @@ export const setViewAsDefault = (views, viewId) => {
|
|
|
99
99
|
export const transformTemplatesToViewMenuItems = (templates, mode = 'sheet', lang = 'en') => {
|
|
100
100
|
const customViews = [];
|
|
101
101
|
let defaultTemplateColumns;
|
|
102
|
+
let defaultTemplate;
|
|
102
103
|
templates.forEach((template) => {
|
|
103
104
|
// Get columns for the specified mode
|
|
104
105
|
const section = template.layout.find((s) => s.code.toLowerCase() === mode.toLowerCase());
|
|
@@ -109,6 +110,16 @@ export const transformTemplatesToViewMenuItems = (templates, mode = 'sheet', lan
|
|
|
109
110
|
if (template.default) {
|
|
110
111
|
// Store default template columns to merge into built-in Default view
|
|
111
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
|
+
};
|
|
112
123
|
}
|
|
113
124
|
else {
|
|
114
125
|
// Add non-default templates as custom views
|
|
@@ -123,7 +134,7 @@ export const transformTemplatesToViewMenuItems = (templates, mode = 'sheet', lan
|
|
|
123
134
|
});
|
|
124
135
|
}
|
|
125
136
|
});
|
|
126
|
-
return { customViews, defaultTemplateColumns };
|
|
137
|
+
return { customViews, defaultTemplateColumns, defaultTemplate };
|
|
127
138
|
};
|
|
128
139
|
/**
|
|
129
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?: (
|
|
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-test.4-test.5",
|
|
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",
|