@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.
@@ -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, templateId) => {
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 templateId for custom views
46
- if (item.isCustom && item.templateId) {
47
- // Create a synthetic event-like object for onSelect
48
- const syntheticEvent = {
49
- currentTarget: anchorEl || document.createElement('div'),
50
- };
51
- onSelect(syntheticEvent, item.templateId);
52
- }
53
- else {
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)' }, style: { listStyle: 'none', margin: 0, padding: 0, position: 'relative', zIndex: 1, backgroundColor: '#fff' }, onDragStart: (e) => {
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 } }, { 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) => {
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 } }, { 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) => {
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, getLayoutDataFromTemplates, getColumnsByMode } from '../utils';
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
- // Use default template columns if available, otherwise use layoutData from all templates
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
- : getLayoutDataFromTemplates(templatesArray);
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 data from templates
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 templates - set empty arrays
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, transformedTemplates === null || transformedTemplates === void 0 ? void 0 : transformedTemplates.layoutData]);
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>, templateId?: string) => void;
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?: (templateId?: string) => 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-test.4-test.5",
5
- "testVersion": 5,
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",