@tap-payments/os-micro-frontend-shared 0.1.439 → 0.1.440

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.
@@ -18,7 +18,6 @@ function ViewsDropdown({ open, selectedViewInfo, setSelectedViewInfo, anchorEl,
18
18
  const { t } = useTranslation();
19
19
  const { hoveredColumn: hoveredViewId, anchorEl: submenuAnchorEl, openSubmenu, closeSubmenu, cancelClose, forceClose } = useSubmenuHover();
20
20
  const [hoveredCustomId, setHoveredCustomId] = React.useState(null);
21
- const [showModifiedBadge, setShowModifiedBadge] = React.useState(false);
22
21
  const [draftColumns, setDraftColumns] = React.useState(null);
23
22
  const { originalColumns, saveOriginalState, clearOriginalState } = useOriginalColumns(defaultColumns);
24
23
  const views = useMemo(() => {
@@ -82,7 +81,6 @@ function ViewsDropdown({ open, selectedViewInfo, setSelectedViewInfo, anchorEl,
82
81
  if (isDefaultView && defaultTemplate && colsToApply.length) {
83
82
  if (draftHasChanges) {
84
83
  onSaveDefaultColumns === null || onSaveDefaultColumns === void 0 ? void 0 : onSaveDefaultColumns(colsToApply);
85
- setShowModifiedBadge(true);
86
84
  }
87
85
  updateSelectedView === null || updateSelectedView === void 0 ? void 0 : updateSelectedView(Object.assign(Object.assign({}, defaultTemplate), { id: String(defaultTemplate.id), submenu: deepCloneColumns(colsToApply), columns: colsToApply.map((c) => c.name) }));
88
86
  }
@@ -136,7 +134,7 @@ function ViewsDropdown({ open, selectedViewInfo, setSelectedViewInfo, anchorEl,
136
134
  setHoveredCustomId(null);
137
135
  else if (hasSubmenu(item, defaultColumns))
138
136
  closeSubmenu();
139
- }, onClick: () => selectView(item), sx: { position: 'relative', cursor: 'pointer', pr: 1.5 } }, { children: [item.id === selectedViewInfo.id ? _jsx("img", { style: { width: 15, height: 15 }, src: smallBlueCheckIcon, alt: "check" }) : _jsx(Space, {}), _jsxs("span", Object.assign({ style: { flex: 1, fontSize: 11 } }, { children: [item.label, item.default && item.id === selectedViewInfo.id && showModifiedBadge && _jsx("span", Object.assign({ style: ModifiedTextSx }, { children: "(Modified)" }))] })), item.isCustom && hoveredCustomId === item.id && (_jsx("img", { src: editIcon, alt: "edit", style: { width: 12, height: 12, cursor: 'pointer' }, onClick: (e) => {
137
+ }, onClick: () => selectView(item), sx: { position: 'relative', cursor: 'pointer', pr: 1.5 } }, { children: [item.id === selectedViewInfo.id ? _jsx("img", { style: { width: 15, height: 15 }, src: smallBlueCheckIcon, alt: "check" }) : _jsx(Space, {}), _jsxs("span", Object.assign({ style: { flex: 1, fontSize: 11 } }, { children: [item.label, item.default && item.id === selectedViewInfo.id && modifiedFromBase && _jsx("span", Object.assign({ style: ModifiedTextSx }, { children: "(Modified)" }))] })), item.isCustom && hoveredCustomId === item.id && (_jsx("img", { src: editIcon, alt: "edit", style: { width: 12, height: 12, cursor: 'pointer' }, onClick: (e) => {
140
138
  e.stopPropagation();
141
139
  onClose === null || onClose === void 0 ? void 0 : onClose();
142
140
  onEditCustomView === null || onEditCustomView === void 0 ? void 0 : onEditCustomView(item);
@@ -1,5 +1,5 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
- import { memo, useCallback, useState } from 'react';
2
+ import { memo, useCallback } from 'react';
3
3
  import { useTranslation } from 'react-i18next';
4
4
  import ClickAwayListener from '@mui/material/ClickAwayListener';
5
5
  import { Icon, StyledButton } from '../../index.js';
@@ -10,9 +10,7 @@ import { ViewWrapper } from './styles';
10
10
  import { useViewsManager } from './hooks';
11
11
  import { useViewsMenu } from './hooks/useViewsMenu';
12
12
  function ViewsMenu({ onViewChange, templates, onCreateCustomView, onEditCustomView, onDeleteCustomView, onUpdateDefaultView, tableMode = 'default', lang = 'en', }) {
13
- var _a;
14
13
  const { t } = useTranslation();
15
- const [modifiedModes, setModifiedModes] = useState({});
16
14
  const { defaultColumns, defaultTemplate, customViews, allTemplates, baseDefaultColumns } = useViewsManager({
17
15
  tableMode,
18
16
  templates,
@@ -32,10 +30,7 @@ function ViewsMenu({ onViewChange, templates, onCreateCustomView, onEditCustomVi
32
30
  if (!(defaultTemplate === null || defaultTemplate === void 0 ? void 0 : defaultTemplate.id))
33
31
  return;
34
32
  onUpdateDefaultView === null || onUpdateDefaultView === void 0 ? void 0 : onUpdateDefaultView(columns);
35
- setModifiedModes((current) => (Object.assign(Object.assign({}, current), { [tableMode]: true })));
36
- }, [defaultTemplate, tableMode, onUpdateDefaultView]);
37
- return (_jsxs(_Fragment, { children: [_jsx(ClickAwayListener, Object.assign({ onClickAway: handleCloseViewDropdown }, { children: _jsxs(ViewWrapper, Object.assign({ sx: { width: '32px' }, "data-testid": "ViewsMenu" }, { children: [_jsx(StyledButton, Object.assign({ title: t('tableView'), "data-testid": "ViewsMenu_button", onClick: handleViewButtonClick }, { children: _jsx(Icon, { src: viewIcon, alt: "view", sx: { width: 14, height: 14 } }) })), _jsx(ViewsDropdown, { open: Boolean(anchorEl), anchorEl: anchorEl, onClose: handleCloseViewDropdown, defaultModified: (_a = modifiedModes[tableMode]) !== null && _a !== void 0 ? _a : false, onMarkDefaultModified: () => {
38
- setModifiedModes((current) => (Object.assign(Object.assign({}, current), { [tableMode]: true })));
39
- }, setSelectedViewInfo: handleSelectedViewInfo, selectedViewInfo: selectedViewInfo, onCreateCustomView: handleOpenCreateDialog, customViews: customViews, onEditCustomView: handleOpenEditDialog, onSaveDefaultColumns: handleSaveDefaultColumns, defaultColumns: defaultColumns, updateSelectedView: updateSelectedView, baseDefaultColumns: baseDefaultColumns, mode: tableMode, defaultTemplate: defaultTemplate })] })) })), _jsx(CreateViewDialog, { open: isCreateDialogOpen, onClose: handleCloseCreateDialog, availableColumns: defaultColumns, defaultColumns: defaultColumns, onCreate: handleSaveView, editingView: editingView, onDelete: handleDeleteView, tableViews: shouldUseCurrentState ? initialColumnsForCreate !== null && initialColumnsForCreate !== void 0 ? initialColumnsForCreate : currentViewColumns : undefined, mode: tableMode })] }));
33
+ }, [defaultTemplate, onUpdateDefaultView]);
34
+ return (_jsxs(_Fragment, { children: [_jsx(ClickAwayListener, Object.assign({ onClickAway: handleCloseViewDropdown }, { children: _jsxs(ViewWrapper, Object.assign({ sx: { width: '32px' }, "data-testid": "ViewsMenu" }, { children: [_jsx(StyledButton, Object.assign({ title: t('tableView'), "data-testid": "ViewsMenu_button", onClick: handleViewButtonClick }, { children: _jsx(Icon, { src: viewIcon, alt: "view", sx: { width: 14, height: 14 } }) })), _jsx(ViewsDropdown, { open: Boolean(anchorEl), anchorEl: anchorEl, onClose: handleCloseViewDropdown, setSelectedViewInfo: handleSelectedViewInfo, selectedViewInfo: selectedViewInfo, onCreateCustomView: handleOpenCreateDialog, customViews: customViews, onEditCustomView: handleOpenEditDialog, onSaveDefaultColumns: handleSaveDefaultColumns, defaultColumns: defaultColumns, updateSelectedView: updateSelectedView, baseDefaultColumns: baseDefaultColumns, mode: tableMode, defaultTemplate: defaultTemplate })] })) })), _jsx(CreateViewDialog, { open: isCreateDialogOpen, onClose: handleCloseCreateDialog, availableColumns: defaultColumns, defaultColumns: defaultColumns, onCreate: handleSaveView, editingView: editingView, onDelete: handleDeleteView, tableViews: shouldUseCurrentState ? initialColumnsForCreate !== null && initialColumnsForCreate !== void 0 ? initialColumnsForCreate : currentViewColumns : undefined, mode: tableMode })] }));
40
35
  }
41
36
  export default memo(ViewsMenu);
@@ -64,7 +64,10 @@ export const ColumnList = ({ selectedColumns, columnNames, allSelected, someSele
64
64
  },
65
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) => {
66
66
  var _a, _b;
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));
67
+ return (_jsxs(React.Fragment, { children: [_jsx(MenuItem, Object.assign({ isSelected: subItem.selected, isDisabled: isDate, onClick: () => {
68
+ if (!isDate)
69
+ onSubItemToggle(column.name, subItem.name);
70
+ } }, { 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));
68
71
  }) })] })) })))] }), column.name));
69
72
  }) })) }))] }));
70
73
  };
@@ -62,7 +62,10 @@ export const ViewsSubmenu = ({ columns, allCurrentSelected, someCurrentSelected,
62
62
  }
63
63
  }, 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) => {
64
64
  var _a, _b;
65
- 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));
65
+ return (_jsxs(React.Fragment, { children: [_jsx(MenuItem, Object.assign({ isSelected: subItem.selected, isDisabled: isDate, onClick: () => {
66
+ if (!isDate)
67
+ onNestedItemToggle(column.name, subItem.name);
68
+ } }, { 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));
66
69
  }) })] })) })))] })), columnIndex < columns.length - 1 && _jsx(Divider, {})] }), column.name));
67
70
  }) })) })] }));
68
71
  };
@@ -23,3 +23,17 @@ export declare const DATE_COLUMN_CONFIG: {
23
23
  readonly isDefaultPinned: true;
24
24
  readonly pinnable: true;
25
25
  };
26
+ export declare const CUSTOM_TABLE_REQUIRED_COLUMN_LABELS: {
27
+ readonly date: "Date";
28
+ readonly index: "Index";
29
+ };
30
+ export declare const CUSTOM_TABLE_MODE_ALIASES: {
31
+ sheet: string[];
32
+ default: string[];
33
+ text: string[];
34
+ };
35
+ export declare const OTHER_SECTION_CODE: {
36
+ readonly sheet: "Advanced";
37
+ readonly default: "Sheet";
38
+ readonly text: "text";
39
+ };
@@ -23,3 +23,17 @@ export const DATE_COLUMN_CONFIG = {
23
23
  isDefaultPinned: true,
24
24
  pinnable: true,
25
25
  };
26
+ export const CUSTOM_TABLE_REQUIRED_COLUMN_LABELS = {
27
+ date: 'Date',
28
+ index: 'Index',
29
+ };
30
+ export const CUSTOM_TABLE_MODE_ALIASES = {
31
+ sheet: ['sheet'],
32
+ default: ['advanced', 'default'],
33
+ text: ['text'],
34
+ };
35
+ export const OTHER_SECTION_CODE = {
36
+ sheet: 'Advanced',
37
+ default: 'Sheet',
38
+ text: 'text',
39
+ };
@@ -8,25 +8,32 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
8
8
  });
9
9
  };
10
10
  import { useCallback, useMemo, useState } from 'react';
11
+ import { OTHER_SECTION_CODE } from '../constants';
12
+ import { handleTemplateUpdate, mapColumnsToLayoutSection, convertTemplateToColumnsView, replaceTemplateInList, updateCurrentTemplate, addRequiredColumns, } from '../utils';
11
13
  import { updateColumnSelection } from '../../../../utils/index.js';
12
- import { handleTemplateUpdate, templateToViewMenuItem, mapColumnsToLayoutSection, convertTemplateToColumnsView, convertTemplatesToColumnsView, isTemplateMatchingId, replaceTemplateInList, updateCurrentTemplate, } from '../utils';
13
14
  export function useCustomTableViews({ templates, setTemplates, createTemplate, updateTemplate, deleteTemplate, tableMode, lang = 'en', columnModifiers, }) {
14
- const [selectedView, setSelectedView] = useState(undefined);
15
+ const defaultTemplate = useMemo(() => templates.find((t) => t.default), [templates]);
16
+ const [selectedTemplateId, setSelectedTemplateId] = useState(() => defaultTemplate === null || defaultTemplate === void 0 ? void 0 : defaultTemplate.id);
15
17
  const onCreateCustomView = useCallback(({ name, layout }) => __awaiter(this, void 0, void 0, function* () {
16
- var _a;
18
+ var _a, _b, _c, _d;
17
19
  const created = yield createTemplate({ name, layout: [layout] });
18
20
  if (created) {
19
- const normalized = handleTemplateUpdate(created);
21
+ const otherCode = (_a = OTHER_SECTION_CODE[tableMode]) !== null && _a !== void 0 ? _a : OTHER_SECTION_CODE.default;
22
+ const hasOtherSection = (_b = created.layout) === null || _b === void 0 ? void 0 : _b.some((s) => { var _a; return ((_a = s.code) === null || _a === void 0 ? void 0 : _a.toLowerCase()) === otherCode.toLowerCase(); });
23
+ const templateWithOtherLayout = hasOtherSection
24
+ ? created
25
+ : Object.assign(Object.assign({}, created), { layout: [...((_c = created.layout) !== null && _c !== void 0 ? _c : []), { code: otherCode, columns: [] }] });
26
+ const normalized = handleTemplateUpdate(templateWithOtherLayout);
20
27
  setTemplates((prev) => [...prev, normalized]);
21
- setSelectedView(templateToViewMenuItem(normalized, tableMode));
22
- return { id: created.id, name: (_a = created.name) !== null && _a !== void 0 ? _a : '' };
28
+ setSelectedTemplateId(normalized.id);
29
+ return { id: created.id, name: (_d = created.name) !== null && _d !== void 0 ? _d : '' };
23
30
  }
24
31
  }), [createTemplate, setTemplates, tableMode]);
25
32
  const onDeleteCustomView = useCallback((templateId) => __awaiter(this, void 0, void 0, function* () {
26
33
  yield deleteTemplate(templateId);
27
- setTemplates((prev) => prev.filter((t) => !isTemplateMatchingId(t, templateId)));
28
- setSelectedView((current) => ((current === null || current === void 0 ? void 0 : current.id) === templateId ? undefined : current));
29
- }), [deleteTemplate, setTemplates]);
34
+ setTemplates((prev) => prev.filter((t) => t.id !== templateId));
35
+ setSelectedTemplateId((current) => (current === templateId ? defaultTemplate === null || defaultTemplate === void 0 ? void 0 : defaultTemplate.id : current));
36
+ }), [deleteTemplate, setTemplates, defaultTemplate]);
30
37
  const onUpdateDefaultView = useCallback((columns) => {
31
38
  const defaultTemplate = templates.find((t) => t.default);
32
39
  if (!defaultTemplate)
@@ -37,15 +44,15 @@ export function useCustomTableViews({ templates, setTemplates, createTemplate, u
37
44
  setTemplates((prev) => replaceTemplateInList(prev, (t) => t.default, updatedDefault));
38
45
  }, [templates, tableMode, lang, setTemplates]);
39
46
  const onEditCustomView = useCallback((viewId, data) => __awaiter(this, void 0, void 0, function* () {
40
- const template = templates.find((t) => isTemplateMatchingId(t, viewId));
47
+ const template = templates.find((t) => t.id === viewId);
41
48
  const { name, layout } = updateCurrentTemplate(template, data);
42
49
  const updated = yield updateTemplate(viewId, { name, layout });
43
50
  if (updated) {
44
51
  const normalized = handleTemplateUpdate(updated);
45
- setTemplates((prev) => replaceTemplateInList(prev, (t) => isTemplateMatchingId(t, viewId), normalized));
46
- setSelectedView(templateToViewMenuItem(normalized, tableMode));
52
+ setTemplates((prev) => replaceTemplateInList(prev, (t) => t.id === viewId, normalized));
53
+ setSelectedTemplateId(normalized.id);
47
54
  }
48
- }), [templates, tableMode, updateTemplate, setTemplates]);
55
+ }), [templates, updateTemplate, setTemplates]);
49
56
  const customViews = useMemo(() => ({
50
57
  templates,
51
58
  onCreateCustomView,
@@ -54,52 +61,24 @@ export function useCustomTableViews({ templates, setTemplates, createTemplate, u
54
61
  onUpdateDefaultView,
55
62
  }), [templates, onCreateCustomView, onEditCustomView, onDeleteCustomView, onUpdateDefaultView]);
56
63
  const onViewChange = useCallback((view) => {
57
- setSelectedView(view);
58
- }, []);
59
- const selectedViewSignature = useMemo(() => {
60
- var _a, _b, _c;
61
- if (!selectedView)
62
- return '';
63
- const submenuSignature = ((_a = selectedView.submenu) !== null && _a !== void 0 ? _a : []).map((item) => {
64
- var _a;
65
- return ({
66
- name: item.name,
67
- selected: item.selected,
68
- menuItems: ((_a = item.menuItems) !== null && _a !== void 0 ? _a : []).map((menuItem) => ({
69
- name: menuItem.name,
70
- selected: menuItem.selected,
71
- })),
72
- });
73
- });
74
- const columnsSignature = (_b = selectedView.columns) !== null && _b !== void 0 ? _b : [];
75
- const viewWithLayout = selectedView;
76
- const layoutSignature = ((_c = viewWithLayout.layout) !== null && _c !== void 0 ? _c : []).map((layout) => {
77
- var _a;
78
- return ({
79
- code: layout.code,
80
- columns: ((_a = layout.columns) !== null && _a !== void 0 ? _a : []).map((col) => col.code),
81
- });
82
- });
83
- return JSON.stringify({
84
- id: selectedView.id,
85
- columns: columnsSignature,
86
- submenu: submenuSignature,
87
- layout: layoutSignature,
88
- });
89
- }, [selectedView]);
64
+ var _a;
65
+ if (!defaultTemplate) {
66
+ setSelectedTemplateId(undefined);
67
+ return;
68
+ }
69
+ if (!(view === null || view === void 0 ? void 0 : view.id) || view.id === 'default') {
70
+ setSelectedTemplateId(defaultTemplate.id);
71
+ return;
72
+ }
73
+ const matchingTemplate = templates.find((t) => t.id === view.id);
74
+ setSelectedTemplateId((_a = matchingTemplate === null || matchingTemplate === void 0 ? void 0 : matchingTemplate.id) !== null && _a !== void 0 ? _a : defaultTemplate.id);
75
+ }, [templates, defaultTemplate]);
90
76
  const columnsViewData = useMemo(() => {
91
- const currentSelectedView = selectedView;
77
+ var _a;
78
+ const selectedTemplate = (_a = templates.find((t) => (selectedTemplateId ? t.id === selectedTemplateId : false))) !== null && _a !== void 0 ? _a : defaultTemplate;
92
79
  let templateColumnsView = [];
93
- if (currentSelectedView) {
94
- const viewWithLayout = currentSelectedView;
95
- const hasLayout = !!viewWithLayout.layout;
96
- templateColumnsView = convertTemplateToColumnsView(viewWithLayout, tableMode);
97
- if (templateColumnsView.length === 0 && !hasLayout && (templates === null || templates === void 0 ? void 0 : templates.length) > 0) {
98
- templateColumnsView = convertTemplatesToColumnsView(templates, tableMode);
99
- }
100
- }
101
- if (templateColumnsView.length === 0 && !currentSelectedView && (templates === null || templates === void 0 ? void 0 : templates.length) > 0) {
102
- templateColumnsView = convertTemplatesToColumnsView(templates, tableMode);
80
+ if (selectedTemplate) {
81
+ templateColumnsView = convertTemplateToColumnsView(selectedTemplate, tableMode);
103
82
  }
104
83
  if (templateColumnsView.length === 0) {
105
84
  return [];
@@ -113,14 +92,14 @@ export function useCustomTableViews({ templates, setTemplates, createTemplate, u
113
92
  selected: mod.selected,
114
93
  });
115
94
  }
116
- return result;
95
+ return addRequiredColumns(result, tableMode);
117
96
  }
118
- return templateColumnsView;
119
- }, [tableMode, templates, selectedView === null || selectedView === void 0 ? void 0 : selectedView.id, selectedViewSignature, columnModifiers]);
97
+ return addRequiredColumns(templateColumnsView, tableMode);
98
+ }, [tableMode, templates, selectedTemplateId, defaultTemplate, columnModifiers]);
120
99
  return {
121
100
  customViews,
122
101
  onViewChange,
123
102
  columnsViewData,
124
- selectedViewId: selectedView === null || selectedView === void 0 ? void 0 : selectedView.id,
103
+ selectedViewId: selectedTemplateId,
125
104
  };
126
105
  }
@@ -1,6 +1,8 @@
1
- import { useMemo } from 'react';
1
+ import { useMemo, useRef } from 'react';
2
2
  import { mapTemplatesToMenuItems, deepCloneColumns } from '../utils';
3
3
  export const useViewsManager = ({ tableMode, templates, lang = 'en' }) => {
4
+ var _a;
5
+ const initialDefaultColumnsRef = useRef({});
4
6
  const parsedData = useMemo(() => {
5
7
  if (!templates || templates.length === 0) {
6
8
  return {
@@ -19,6 +21,9 @@ export const useViewsManager = ({ tableMode, templates, lang = 'en' }) => {
19
21
  defaultColumns,
20
22
  };
21
23
  }, [templates, tableMode, lang]);
24
+ if (!initialDefaultColumnsRef.current[tableMode] && parsedData.defaultColumns.length > 0) {
25
+ initialDefaultColumnsRef.current[tableMode] = parsedData.defaultColumns;
26
+ }
22
27
  return {
23
28
  menuItems: parsedData.menuItems,
24
29
  defaultItem: parsedData.defaultItem,
@@ -27,6 +32,6 @@ export const useViewsManager = ({ tableMode, templates, lang = 'en' }) => {
27
32
  customViews: parsedData.menuItems,
28
33
  defaultTemplate: parsedData.defaultItem,
29
34
  allTemplates: parsedData.allItems,
30
- baseDefaultColumns: parsedData.defaultColumns,
35
+ baseDefaultColumns: (_a = initialDefaultColumnsRef.current[tableMode]) !== null && _a !== void 0 ? _a : parsedData.defaultColumns,
31
36
  };
32
37
  };
@@ -98,16 +98,26 @@ export const useViewsMenu = ({ mode, onViewChange, onCreateCustomView, onEditCus
98
98
  setAnchorEl(null);
99
99
  }, []);
100
100
  const handleOpenEditDialog = useCallback((view) => {
101
- setEditingView(view);
101
+ var _a;
102
+ const latestView = (_a = allTemplates.find((templateView) => templateView.id === view.id)) !== null && _a !== void 0 ? _a : view;
103
+ setEditingView(latestView);
102
104
  setShouldUseCurrentState(true);
103
105
  setIsCreateDialogOpen(true);
104
- }, []);
106
+ }, [allTemplates]);
105
107
  const handleCloseCreateDialog = useCallback(() => {
106
108
  setIsCreateDialogOpen(false);
107
109
  setEditingView(null);
108
110
  setShouldUseCurrentState(false);
109
111
  setInitialColumnsForCreate(null);
110
112
  }, []);
113
+ useEffect(() => {
114
+ if (!isCreateDialogOpen || !(editingView === null || editingView === void 0 ? void 0 : editingView.id))
115
+ return;
116
+ const latestEditingView = allTemplates.find((view) => view.id === editingView.id);
117
+ if (latestEditingView) {
118
+ setEditingView(latestEditingView);
119
+ }
120
+ }, [isCreateDialogOpen, editingView === null || editingView === void 0 ? void 0 : editingView.id, allTemplates]);
111
121
  const handleSaveView = useCallback((data) => __awaiter(void 0, void 0, void 0, function* () {
112
122
  if (editingView) {
113
123
  const viewId = editingView.id;
@@ -125,8 +125,6 @@ export interface ViewsDropdownProps {
125
125
  setSelectedViewInfo: (selected: ViewOption, viewMenuItem?: ViewMenuItem) => void;
126
126
  anchorEl: Element | null;
127
127
  onClose?: () => void;
128
- defaultModified?: boolean;
129
- onMarkDefaultModified?: () => void;
130
128
  onCreateCustomView?: (useCurrentState?: boolean, initialColumns?: ColumnViewProps[]) => void;
131
129
  customViews?: ViewMenuItem[];
132
130
  onEditCustomView?: (view: ViewMenuItem) => void;
@@ -0,0 +1,17 @@
1
+ import type { ColumnsView, TableMode } from '../../../../types/index.js';
2
+ import type { Template } from '../types';
3
+ import { updateColumnSelection } from '../../../../utils/index.js';
4
+ export { updateColumnSelection };
5
+ export declare const getLayoutCodesForMode: (mode: TableMode) => string[];
6
+ export declare const getOtherModeSectionCode: (mode: TableMode) => string;
7
+ export declare const buildRequiredColumnView: (code: 'date' | 'index', sortOrder: number) => {
8
+ code: "date" | "index";
9
+ name: {
10
+ text: "Date" | "Index";
11
+ lang: string;
12
+ }[];
13
+ selected: boolean;
14
+ sort_order: number;
15
+ };
16
+ export declare const addRequiredColumns: (columns: ColumnsView[], mode: TableMode) => ColumnsView[];
17
+ export declare const hasLayoutSectionForMode: (template: Template | undefined, mode: TableMode) => boolean;
@@ -0,0 +1,30 @@
1
+ import { CUSTOM_TABLE_MODE_ALIASES, OTHER_SECTION_CODE, CUSTOM_TABLE_REQUIRED_COLUMN_LABELS } from '../constants';
2
+ import { isTableSheetMode, updateColumnSelection } from '../../../../utils/index.js';
3
+ export { updateColumnSelection };
4
+ const getColumnKey = (column) => { var _a, _b, _c, _d; return (_d = ((_a = column.code) !== null && _a !== void 0 ? _a : (_c = (_b = column.name) === null || _b === void 0 ? void 0 : _b[0]) === null || _c === void 0 ? void 0 : _c.text)) === null || _d === void 0 ? void 0 : _d.toLowerCase(); };
5
+ export const getLayoutCodesForMode = (mode) => { var _a; return [...((_a = CUSTOM_TABLE_MODE_ALIASES[mode]) !== null && _a !== void 0 ? _a : CUSTOM_TABLE_MODE_ALIASES.default)]; };
6
+ export const getOtherModeSectionCode = (mode) => { var _a; return (_a = OTHER_SECTION_CODE[mode]) !== null && _a !== void 0 ? _a : OTHER_SECTION_CODE.default; };
7
+ export const buildRequiredColumnView = (code, sortOrder) => ({
8
+ code,
9
+ name: [{ text: CUSTOM_TABLE_REQUIRED_COLUMN_LABELS[code], lang: 'en' }],
10
+ selected: true,
11
+ sort_order: sortOrder,
12
+ });
13
+ export const addRequiredColumns = (columns, mode) => {
14
+ var _a, _b;
15
+ const updatedColumns = [...columns];
16
+ const existingDate = updatedColumns.find((column) => getColumnKey(column) === 'date');
17
+ const dateColumn = existingDate ? Object.assign(Object.assign({}, existingDate), { code: (_a = existingDate.code) !== null && _a !== void 0 ? _a : 'date', selected: true }) : buildRequiredColumnView('date', 1);
18
+ const existingIndex = updatedColumns.find((column) => getColumnKey(column) === 'index');
19
+ const indexColumn = isTableSheetMode(mode)
20
+ ? existingIndex
21
+ ? Object.assign(Object.assign({}, existingIndex), { code: (_b = existingIndex.code) !== null && _b !== void 0 ? _b : 'index', selected: true }) : buildRequiredColumnView('index', 0)
22
+ : undefined;
23
+ const restColumns = updatedColumns.filter((column) => {
24
+ const key = getColumnKey(column);
25
+ return key !== 'index' && key !== 'date';
26
+ });
27
+ const orderedColumns = isTableSheetMode(mode) ? [indexColumn, dateColumn, ...restColumns] : [dateColumn, ...restColumns];
28
+ return orderedColumns.filter((column) => Boolean(column));
29
+ };
30
+ export const hasLayoutSectionForMode = (template, mode) => { var _a, _b; return (_b = (_a = template === null || template === void 0 ? void 0 : template.layout) === null || _a === void 0 ? void 0 : _a.some((section) => { var _a, _b; return getLayoutCodesForMode(mode).includes((_b = (_a = section.code) === null || _a === void 0 ? void 0 : _a.toLowerCase()) !== null && _b !== void 0 ? _b : ''); })) !== null && _b !== void 0 ? _b : false; };
@@ -2,5 +2,5 @@ export { isDateColumn, transformLayoutToColumns, getColumnsByMode, convertColumn
2
2
  export { createCustomViewMenuItem, setViewAsDefault, transformTemplatesToViewMenuItems, mapTemplatesToMenuItems, getSubmenuItems, getSubmenuItemsForDisplay, hasSubmenu, } from './viewMenu';
3
3
  export { getColumnCheckState, toggleColumn, toggleSubItem, toggleAllColumns, areAllColumnsSelected, areSomeColumnsSelected, isValidTemplateName, deepCloneColumns, toggleSingleColumn, toggleAllCurrentColumns, areAllCurrentColumnsSelected, areSomeCurrentColumnsSelected, normalizeColumnsSelected, areColumnsEqual, resetColumnsToDefault, initializeEditingColumns, initializeCreateColumns, initializeCreateColumnsWithCurrentState, } from './columnState';
4
4
  export { getSubmenuFromTemplateLayout, getColumnOrder, handleTemplateUpdate, templateToViewMenuItem, convertTemplateToColumnsView, convertTemplatesToColumnsView, } from './templateToColumnsView';
5
- export { isTemplateMatchingId, replaceTemplateInList, updateCurrentTemplate } from './templateState';
6
- export type { TemplateLike } from './templateState';
5
+ export { replaceTemplateInList, updateCurrentTemplate } from './templateState';
6
+ export { getLayoutCodesForMode, getOtherModeSectionCode, buildRequiredColumnView, addRequiredColumns, hasLayoutSectionForMode, updateColumnSelection, } from './customTableViews';
@@ -2,4 +2,5 @@ export { isDateColumn, transformLayoutToColumns, getColumnsByMode, convertColumn
2
2
  export { createCustomViewMenuItem, setViewAsDefault, transformTemplatesToViewMenuItems, mapTemplatesToMenuItems, getSubmenuItems, getSubmenuItemsForDisplay, hasSubmenu, } from './viewMenu';
3
3
  export { getColumnCheckState, toggleColumn, toggleSubItem, toggleAllColumns, areAllColumnsSelected, areSomeColumnsSelected, isValidTemplateName, deepCloneColumns, toggleSingleColumn, toggleAllCurrentColumns, areAllCurrentColumnsSelected, areSomeCurrentColumnsSelected, normalizeColumnsSelected, areColumnsEqual, resetColumnsToDefault, initializeEditingColumns, initializeCreateColumns, initializeCreateColumnsWithCurrentState, } from './columnState';
4
4
  export { getSubmenuFromTemplateLayout, getColumnOrder, handleTemplateUpdate, templateToViewMenuItem, convertTemplateToColumnsView, convertTemplatesToColumnsView, } from './templateToColumnsView';
5
- export { isTemplateMatchingId, replaceTemplateInList, updateCurrentTemplate } from './templateState';
5
+ export { replaceTemplateInList, updateCurrentTemplate } from './templateState';
6
+ export { getLayoutCodesForMode, getOtherModeSectionCode, buildRequiredColumnView, addRequiredColumns, hasLayoutSectionForMode, updateColumnSelection, } from './customTableViews';
@@ -1,9 +1,6 @@
1
1
  import type { LayoutSection, Template } from '../types';
2
- /** Minimal template shape for state helpers (id required for matching) */
3
- export type TemplateLike = Pick<Template, 'id'> & Partial<Pick<Template, 'name' | 'default' | 'layout'>>;
4
- export declare function isTemplateMatchingId(template: TemplateLike, id: string): boolean;
5
2
  export declare function replaceTemplateInList<T>(prev: T[], match: (t: T) => boolean, replacement: T): T[];
6
- export declare function updateCurrentTemplate(template: TemplateLike | undefined, editData: {
3
+ export declare function updateCurrentTemplate(template: Template | undefined, editData: {
7
4
  name?: string;
8
5
  layout?: LayoutSection | LayoutSection[];
9
6
  }): {
@@ -1,6 +1,3 @@
1
- export function isTemplateMatchingId(template, id) {
2
- return template.id === id;
3
- }
4
1
  export function replaceTemplateInList(prev, match, replacement) {
5
2
  const idx = prev.findIndex(match);
6
3
  if (idx === -1)
@@ -23,7 +23,8 @@ export const transformTemplatesToViewMenuItems = (templates, mode = 'sheet', lan
23
23
  const withDate = columns.some((c) => { var _a; return ((_a = c.name) !== null && _a !== void 0 ? _a : '').toLowerCase() === 'date'; }) ? columns : [dateColumn, ...columns];
24
24
  const dateIndex = withDate.findIndex((c) => { var _a; return ((_a = c.name) !== null && _a !== void 0 ? _a : '').toLowerCase() === 'date'; });
25
25
  const withDateFirst = dateIndex > 0 ? [withDate[dateIndex], ...withDate.filter((c) => { var _a; return ((_a = c.name) !== null && _a !== void 0 ? _a : '').toLowerCase() !== 'date'; })] : withDate;
26
- const finalColumns = [indexColumn, ...withDateFirst];
26
+ const withoutIndex = withDateFirst.filter((c) => { var _a; return ((_a = c.name) !== null && _a !== void 0 ? _a : '').toLowerCase() !== 'index'; });
27
+ const finalColumns = [indexColumn, ...withoutIndex];
27
28
  const item = {
28
29
  id: template.default ? 'default' : viewId,
29
30
  label: template.name,
@@ -1,11 +1,5 @@
1
1
  import type { IColumnProps, ColumnViewProps, ColumnsView } from '../types/index.js';
2
- export declare function filterShownColumns<T>(columns: Array<IColumnProps<T & {
3
- actions: string;
4
- action_icon?: string;
5
- }>>, tableViews: ColumnViewProps[]): IColumnProps<T & {
6
- actions: string;
7
- action_icon?: string | undefined;
8
- }>[];
2
+ export declare function filterShownColumns(columns: IColumnProps[], tableViews: ColumnViewProps[], isCustomView?: boolean): IColumnProps<any>[];
9
3
  export declare function isParameterSelected(columns: ColumnViewProps[], columnId: string, parameter: string): boolean;
10
4
  export declare function mapDataToViews(columnData?: ColumnsView[], language?: string): ColumnViewProps[];
11
5
  export declare function mapViewsToData(columns: ColumnViewProps[]): ColumnsView[];
@@ -1,6 +1,6 @@
1
1
  import startCase from 'lodash/startCase';
2
2
  import { getNameText } from './index.js';
3
- export function filterShownColumns(columns, tableViews) {
3
+ export function filterShownColumns(columns, tableViews, isCustomView) {
4
4
  return columns.filter((column) => {
5
5
  var _a, _b, _c, _d, _e;
6
6
  const columnId = (_a = column === null || column === void 0 ? void 0 : column.id) === null || _a === void 0 ? void 0 : _a.toString();
@@ -13,7 +13,8 @@ export function filterShownColumns(columns, tableViews) {
13
13
  const isColumnWithMenuItems = !!column.tableViewId && (((_b = selectedColumn === null || selectedColumn === void 0 ? void 0 : selectedColumn.menuItems) === null || _b === void 0 ? void 0 : _b.length) || 0) > 0;
14
14
  const isMenuItemSelected = (_d = (_c = selectedColumn === null || selectedColumn === void 0 ? void 0 : selectedColumn.menuItems) === null || _c === void 0 ? void 0 : _c.find((item) => { var _a, _b, _c; return ((_a = item.name) === null || _a === void 0 ? void 0 : _a.toLowerCase()) === ((_c = (_b = column.tableViewId) === null || _b === void 0 ? void 0 : _b.toString()) === null || _c === void 0 ? void 0 : _c.toLowerCase()); })) === null || _d === void 0 ? void 0 : _d.selected;
15
15
  const isColumnSelected = !!selectedColumn && (isMenuItemSelected || !isColumnWithMenuItems);
16
- const isBasicColumn = ['actions', 'action_icon'].includes((_e = columnId === null || columnId === void 0 ? void 0 : columnId.toLowerCase()) !== null && _e !== void 0 ? _e : '');
16
+ const customViewFixedColumns = isCustomView ? ['index', 'date'] : [];
17
+ const isBasicColumn = ['actions', 'action_icon', ...customViewFixedColumns].includes((_e = columnId === null || columnId === void 0 ? void 0 : columnId.toLowerCase()) !== null && _e !== void 0 ? _e : '');
17
18
  if (isColumnSelected || isBasicColumn) {
18
19
  return true;
19
20
  }
@@ -32,14 +33,13 @@ export function isParameterSelected(columns, columnId, parameter) {
32
33
  export function mapDataToViews(columnData, language) {
33
34
  var _a;
34
35
  return (((_a = columnData === null || columnData === void 0 ? void 0 : columnData.filter((c) => { var _a, _b; return !!((_b = (_a = c.name) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.text); })) === null || _a === void 0 ? void 0 : _a.map((column) => {
35
- var _a;
36
+ var _a, _b, _c;
36
37
  return ({
37
38
  code: column.code,
38
39
  label: getNameText(column.name, language),
39
40
  name: getNameText(column.name, language) || '',
40
41
  selected: (column === null || column === void 0 ? void 0 : column.selected) !== false,
41
- menuItems: (_a = column.fields
42
- .map((field) => {
42
+ menuItems: (_c = (_b = (_a = column.fields) === null || _a === void 0 ? void 0 : _a.map((field) => {
43
43
  var _a, _b;
44
44
  return (_b = (_a = field.parameters) === null || _a === void 0 ? void 0 : _a.filter((p) => !!p.code)) === null || _b === void 0 ? void 0 : _b.map((param) => {
45
45
  return {
@@ -48,8 +48,7 @@ export function mapDataToViews(columnData, language) {
48
48
  selected: (param === null || param === void 0 ? void 0 : param.selected) !== false,
49
49
  };
50
50
  });
51
- })
52
- .flat()) === null || _a === void 0 ? void 0 : _a.filter((item) => !!item.name),
51
+ })) === null || _b === void 0 ? void 0 : _b.flat()) === null || _c === void 0 ? void 0 : _c.filter((item) => !!item.name),
53
52
  });
54
53
  })) || []);
55
54
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
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.439",
4
+ "version": "0.1.440",
5
5
  "testVersion": 0,
6
6
  "type": "module",
7
7
  "main": "build/index.js",