@tap-payments/os-micro-frontend-shared 0.1.415 → 0.1.417-test.1

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.
Files changed (69) hide show
  1. package/build/components/AnimatedSpinnerIcon/style.d.ts +0 -1
  2. package/build/components/Chip/style.d.ts +0 -1
  3. package/build/components/CountBadge/style.d.ts +0 -1
  4. package/build/components/Dialog/style.d.ts +0 -1
  5. package/build/components/FilterDropdown/components/MerchantsFilterItem/MerchantsFilterItem.d.ts +3 -0
  6. package/build/components/FilterDropdown/components/MerchantsFilterItem/MerchantsFilterItem.js +45 -0
  7. package/build/components/FilterDropdown/components/MerchantsFilterItem/index.d.ts +4 -0
  8. package/build/components/FilterDropdown/components/MerchantsFilterItem/index.js +4 -0
  9. package/build/components/FilterDropdown/components/MerchantsFilterItem/type.d.ts +20 -0
  10. package/build/components/FilterDropdown/components/MerchantsFilterItem/type.js +7 -0
  11. package/build/components/FilterDropdown/components/MerchantsFilterItem/utils.d.ts +5 -0
  12. package/build/components/FilterDropdown/components/MerchantsFilterItem/utils.js +55 -0
  13. package/build/components/FilterDropdown/components/index.d.ts +2 -0
  14. package/build/components/FilterDropdown/components/index.js +2 -0
  15. package/build/components/FlippingCard/style.d.ts +0 -1
  16. package/build/components/ImageWrapper/ImageWrapper.d.ts +0 -1
  17. package/build/components/JSONViewer/style.d.ts +0 -1
  18. package/build/components/LeftPeekRightExpandingChip/style.d.ts +0 -1
  19. package/build/components/RangeCalender/RangeCalender.js +7 -3
  20. package/build/components/RightLeftExpandingCenterChip/style.d.ts +0 -1
  21. package/build/components/SearchButton/styles.d.ts +0 -1
  22. package/build/components/StatusIcons/AuthIcons/style.d.ts +0 -1
  23. package/build/components/StatusIcons/AuthorizationAutoIcons/style.d.ts +0 -1
  24. package/build/components/StatusIcons/ChargeStatusIcon/style.d.ts +0 -1
  25. package/build/components/StatusIcons/SourceIcons/style.d.ts +0 -1
  26. package/build/components/TableCells/CustomCells/ActionCell/style.d.ts +0 -1
  27. package/build/components/TableCells/CustomCells/AgreementCell/style.d.ts +0 -1
  28. package/build/components/TableCells/CustomCells/ApplicationStatusCell/style.d.ts +0 -1
  29. package/build/components/TableCells/CustomCells/AuthenticationCell/style.d.ts +0 -1
  30. package/build/components/TableCells/CustomCells/AuthenticationStatusCell/style.d.ts +0 -1
  31. package/build/components/TableCells/CustomCells/AuthenticationTypeCell/style.d.ts +0 -1
  32. package/build/components/TableCells/CustomCells/BalanceCell/style.d.ts +0 -1
  33. package/build/components/TableCells/CustomCells/ChannelsCell/style.d.ts +0 -1
  34. package/build/components/TableCells/CustomCells/CheckoutStatusCell/style.d.ts +0 -1
  35. package/build/components/TableCells/CustomCells/DestinationStatusCell/style.d.ts +0 -1
  36. package/build/components/TableCells/CustomCells/DueDateCell/style.d.ts +0 -1
  37. package/build/components/TableCells/CustomCells/IDButton/style.d.ts +0 -1
  38. package/build/components/TableCells/CustomCells/IntentsStatusCell/style.d.ts +0 -1
  39. package/build/components/TableCells/CustomCells/InvoiceStatusCell/style.d.ts +0 -1
  40. package/build/components/TableCells/CustomCells/PayoutReportCell/style.d.ts +0 -1
  41. package/build/components/TableCells/CustomCells/PayoutStatusCell/style.d.ts +0 -1
  42. package/build/components/TableCells/CustomCells/ProductsCell/style.d.ts +0 -1
  43. package/build/components/TableCells/CustomCells/ReferenceCell/style.d.ts +0 -1
  44. package/build/components/TableCells/CustomCells/RefundChargeCell/style.d.ts +0 -1
  45. package/build/components/TableCells/CustomCells/RefundStatusCell/style.d.ts +0 -1
  46. package/build/components/TableCells/CustomCells/SalesChannelCell/style.d.ts +0 -1
  47. package/build/components/TableCells/CustomCells/SegmentsCell/style.d.ts +0 -1
  48. package/build/components/TableCells/CustomCells/StatusCell/style.d.ts +0 -1
  49. package/build/components/TableCells/CustomCells/TokenStatusCell/style.d.ts +0 -1
  50. package/build/components/TableCells/CustomCells/style.d.ts +0 -1
  51. package/build/components/TableHeader/FiltersRow.js +1 -6
  52. package/build/components/TableHeader/TableView/ViewsDropdown.js +4 -4
  53. package/build/components/TableHeader/TableView/ViewsMenu.d.ts +1 -1
  54. package/build/components/TableHeader/TableView/ViewsMenu.js +14 -27
  55. package/build/components/TableHeader/TableView/hooks/useViewsMenu.d.ts +15 -15
  56. package/build/components/TableHeader/TableView/hooks/useViewsMenu.js +93 -44
  57. package/build/components/TableHeader/TableView/types.d.ts +1 -1
  58. package/build/components/TableHeader/TableView/utils/columnState.js +2 -4
  59. package/build/components/TableHeader/TableView/utils/index.d.ts +1 -1
  60. package/build/components/TableHeader/TableView/utils/index.js +1 -1
  61. package/build/components/TableHeader/TableView/utils/templateToColumnsView.d.ts +9 -1
  62. package/build/components/TableHeader/TableView/utils/templateToColumnsView.js +31 -3
  63. package/build/components/TableHeader/TableView/utils/viewMenu.d.ts +2 -10
  64. package/build/components/TableHeader/TableView/utils/viewMenu.js +4 -4
  65. package/build/components/TableHeader/type.d.ts +9 -12
  66. package/build/components/TableReports/components/DownloadButton/style.d.ts +0 -1
  67. package/build/components/TableReports/style.d.ts +0 -1
  68. package/build/components/VirtualTables/components/style.d.ts +0 -1
  69. package/package.json +3 -3
@@ -1,12 +1,3 @@
1
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
- return new (P || (P = Promise))(function (resolve, reject) {
4
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
- step((generator = generator.apply(thisArg, _arguments || [])).next());
8
- });
9
- };
10
1
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
11
2
  import { memo, useCallback, useState } from 'react';
12
3
  import { useTranslation } from 'react-i18next';
@@ -18,8 +9,7 @@ import CreateViewDialog from './CreateViewDialog';
18
9
  import { ViewWrapper } from './styles';
19
10
  import { useViewsManager } from './hooks';
20
11
  import { useViewsMenu } from './hooks/useViewsMenu';
21
- import { mapColumnsToLayoutSection } from './utils';
22
- function ViewsMenu({ onViewChange, templates, onCreateCustomView, onEditCustomView, onDeleteCustomView, tableMode = 'default', lang = 'en', }) {
12
+ function ViewsMenu({ templates, setTemplates, createTemplate, updateTemplate, deleteTemplate, onSelectedTemplateIdChange, tableMode = 'default', lang = 'en', setTableViews, }) {
23
13
  var _a;
24
14
  const { t } = useTranslation();
25
15
  const [modifiedModes, setModifiedModes] = useState({});
@@ -28,29 +18,26 @@ function ViewsMenu({ onViewChange, templates, onCreateCustomView, onEditCustomVi
28
18
  templates,
29
19
  lang,
30
20
  });
31
- const { anchorEl, isCreateDialogOpen, editingView, selectedViewInfo, shouldUseCurrentState, currentViewColumns, initialColumnsForCreate, handleViewButtonClick, handleCloseViewDropdown, handleSelectedViewInfo, handleOpenCreateDialog, handleOpenEditDialog, handleCloseCreateDialog, handleSaveView, handleDeleteView, updateSelectedView, } = useViewsMenu({
21
+ const { anchorEl, isCreateDialogOpen, editingView, selectedViewInfo, shouldUseCurrentState, currentViewColumns, initialColumnsForCreate, handleViewButtonClick, handleCloseViewDropdown, handleSelectedViewInfo, handleOpenCreateDialog, handleOpenEditDialog, handleCloseCreateDialog, handleSaveView, handleDeleteView, updateSelectedView, saveDefaultColumns, } = useViewsMenu({
32
22
  mode: tableMode,
33
- onViewChange,
34
- onCreateCustomView,
35
- onEditCustomView,
36
- onDeleteCustomView,
23
+ lang,
24
+ templates,
25
+ setTemplates,
26
+ createTemplate,
27
+ updateTemplate,
28
+ deleteTemplate,
29
+ onSelectedTemplateIdChange,
30
+ setTableViews,
37
31
  defaultColumns,
38
32
  defaultTemplate,
39
33
  allTemplates,
40
34
  });
41
- const handleSaveDefaultColumns = useCallback((columns) => __awaiter(this, void 0, void 0, function* () {
42
- if (!(defaultTemplate === null || defaultTemplate === void 0 ? void 0 : defaultTemplate.templateId))
43
- return;
44
- const layout = mapColumnsToLayoutSection(columns, tableMode, lang);
45
- yield (onEditCustomView === null || onEditCustomView === void 0 ? void 0 : onEditCustomView(defaultTemplate.templateId, {
46
- name: defaultTemplate.label,
47
- selectedColumns: columns,
48
- layout,
49
- }));
35
+ const handleSaveDefaultColumns = useCallback((columns) => {
36
+ saveDefaultColumns(columns);
50
37
  setModifiedModes((current) => (Object.assign(Object.assign({}, current), { [tableMode]: true })));
51
- }), [defaultTemplate, tableMode, lang, onEditCustomView]);
38
+ }, [saveDefaultColumns, tableMode]);
52
39
  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: () => {
53
40
  setModifiedModes((current) => (Object.assign(Object.assign({}, current), { [tableMode]: true })));
54
- }, 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 })] }));
41
+ }, 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 })] }));
55
42
  }
56
43
  export default memo(ViewsMenu);
@@ -1,29 +1,28 @@
1
1
  import { type MouseEvent } from 'react';
2
2
  import type { ColumnViewProps, TableMode } from '../../../../types/index.js';
3
- import type { ViewMenuItem, LayoutSection } from '../types';
3
+ import type { ViewMenuItem, LayoutSection, Template } from '../types';
4
4
  import type { ViewOption } from '../../type';
5
5
  export interface UseViewsMenuProps {
6
6
  mode: TableMode;
7
- onViewChange?: (selectedView?: ViewMenuItem) => void;
8
- onCreateCustomView?: (data: {
7
+ lang?: string;
8
+ templates: Template[];
9
+ setTemplates: React.Dispatch<React.SetStateAction<Template[]>>;
10
+ createTemplate: (data: {
9
11
  name: string;
10
- selectedColumns: ColumnViewProps[];
11
- layout: LayoutSection;
12
- }) => Promise<{
13
- templateId: string;
14
- name: string;
15
- } | void>;
16
- onEditCustomView?: (viewId: string, data: {
12
+ layout: LayoutSection[];
13
+ }) => Promise<Template | undefined>;
14
+ updateTemplate: (templateId: string, data: {
17
15
  name: string;
18
- selectedColumns: ColumnViewProps[];
19
- layout: LayoutSection;
20
- }) => Promise<void>;
21
- onDeleteCustomView?: (viewId: string) => Promise<void>;
16
+ layout: LayoutSection[];
17
+ }) => Promise<Template | undefined>;
18
+ deleteTemplate: (templateId: string) => Promise<void>;
19
+ onSelectedTemplateIdChange?: (templateId: string | null) => void;
20
+ setTableViews?: (columns: ColumnViewProps[]) => void;
22
21
  defaultColumns: ColumnViewProps[];
23
22
  defaultTemplate?: ViewMenuItem;
24
23
  allTemplates: ViewMenuItem[];
25
24
  }
26
- export declare const useViewsMenu: ({ mode, onViewChange, onCreateCustomView, onEditCustomView, onDeleteCustomView, defaultColumns, defaultTemplate, allTemplates, }: UseViewsMenuProps) => {
25
+ export declare const useViewsMenu: ({ mode, lang, templates, setTemplates, createTemplate, updateTemplate, deleteTemplate, onSelectedTemplateIdChange, setTableViews, defaultColumns, defaultTemplate, allTemplates, }: UseViewsMenuProps) => {
27
26
  anchorEl: HTMLDivElement | null;
28
27
  isCreateDialogOpen: boolean;
29
28
  editingView: ViewMenuItem | null;
@@ -45,4 +44,5 @@ export declare const useViewsMenu: ({ mode, onViewChange, onCreateCustomView, on
45
44
  }) => Promise<void>;
46
45
  handleDeleteView: (viewId: string) => Promise<void>;
47
46
  updateSelectedView: (updatedView: ViewMenuItem) => void;
47
+ saveDefaultColumns: (columns: ColumnViewProps[]) => void;
48
48
  };
@@ -8,8 +8,8 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
8
8
  });
9
9
  };
10
10
  import { useState, useCallback, useEffect, useRef, useMemo } from 'react';
11
- import { deepCloneColumns } from '../utils';
12
- export const useViewsMenu = ({ mode, onViewChange, onCreateCustomView, onEditCustomView, onDeleteCustomView, defaultColumns, defaultTemplate, allTemplates, }) => {
11
+ import { deepCloneColumns, updateTemplate as normalizeTemplate, mergeTemplateEdit, mapColumnsToLayoutSection } from '../utils';
12
+ export const useViewsMenu = ({ mode, lang = 'en', templates, setTemplates, createTemplate, updateTemplate, deleteTemplate, onSelectedTemplateIdChange, setTableViews, defaultColumns, defaultTemplate, allTemplates, }) => {
13
13
  const [anchorEl, setAnchorEl] = useState(null);
14
14
  const [isCreateDialogOpen, setIsCreateDialogOpen] = useState(false);
15
15
  const [editingView, setEditingView] = useState(null);
@@ -18,35 +18,35 @@ export const useViewsMenu = ({ mode, onViewChange, onCreateCustomView, onEditCus
18
18
  const [selectedTemplateId, setSelectedTemplateId] = useState(null);
19
19
  const hasInitializedRef = useRef(false);
20
20
  const lastModeRef = useRef(null);
21
- const getViewForParent = useCallback((view) => {
22
- var _a;
23
- const selectedColumns = ((_a = view.submenu) === null || _a === void 0 ? void 0 : _a.filter((col) => col.selected)) || [];
24
- return Object.assign(Object.assign({}, view), { submenu: selectedColumns, columns: selectedColumns.map((col) => col.name) });
25
- }, []);
21
+ const notifySelection = useCallback((id) => {
22
+ setSelectedTemplateId(id);
23
+ onSelectedTemplateIdChange === null || onSelectedTemplateIdChange === void 0 ? void 0 : onSelectedTemplateIdChange(id);
24
+ }, [onSelectedTemplateIdChange]);
26
25
  const selectedView = useMemo(() => {
27
26
  if (!selectedTemplateId)
28
27
  return defaultTemplate;
29
- const found = allTemplates.find((t) => (t.templateId || t.id) === selectedTemplateId);
30
- return found || defaultTemplate;
28
+ const selectedTemplate = allTemplates.find((t) => t.id === selectedTemplateId);
29
+ return selectedTemplate || defaultTemplate;
31
30
  }, [allTemplates, selectedTemplateId, defaultTemplate]);
32
31
  const currentViewColumns = useMemo(() => {
33
32
  return deepCloneColumns((selectedView === null || selectedView === void 0 ? void 0 : selectedView.submenu) || defaultColumns);
34
33
  }, [selectedView, defaultColumns]);
35
34
  const selectedViewInfo = useMemo(() => {
35
+ var _a, _b, _c;
36
36
  return {
37
- id: (selectedView === null || selectedView === void 0 ? void 0 : selectedView.id) || 'default',
38
- label: (selectedView === null || selectedView === void 0 ? void 0 : selectedView.label) || 'Default',
37
+ id: (_b = (_a = selectedView === null || selectedView === void 0 ? void 0 : selectedView.id) !== null && _a !== void 0 ? _a : defaultTemplate === null || defaultTemplate === void 0 ? void 0 : defaultTemplate.id) !== null && _b !== void 0 ? _b : 'default',
38
+ label: (_c = selectedView === null || selectedView === void 0 ? void 0 : selectedView.label) !== null && _c !== void 0 ? _c : 'Default',
39
39
  };
40
- }, [selectedView]);
40
+ }, [selectedView, defaultTemplate]);
41
41
  useEffect(() => {
42
42
  if (hasInitializedRef.current)
43
43
  return;
44
44
  if (!defaultTemplate)
45
45
  return;
46
- setSelectedTemplateId(defaultTemplate.templateId || null);
46
+ notifySelection(defaultTemplate.id);
47
47
  hasInitializedRef.current = true;
48
48
  lastModeRef.current = mode;
49
- }, [defaultTemplate, mode]);
49
+ }, [defaultTemplate, mode, notifySelection]);
50
50
  useEffect(() => {
51
51
  if (!hasInitializedRef.current)
52
52
  return;
@@ -54,25 +54,20 @@ export const useViewsMenu = ({ mode, onViewChange, onCreateCustomView, onEditCus
54
54
  return;
55
55
  lastModeRef.current = mode;
56
56
  if (selectedTemplateId) {
57
- const matchingView = allTemplates.find((t) => (t.templateId || t.id) === selectedTemplateId);
57
+ const matchingView = allTemplates.find((t) => t.id === selectedTemplateId);
58
58
  if (matchingView)
59
59
  return;
60
60
  }
61
61
  if (defaultTemplate) {
62
- setSelectedTemplateId(defaultTemplate.templateId || null);
62
+ notifySelection(defaultTemplate.id);
63
63
  }
64
64
  else {
65
- setSelectedTemplateId(null);
65
+ notifySelection(null);
66
66
  }
67
- }, [mode, selectedTemplateId, allTemplates, defaultTemplate]);
67
+ }, [mode, selectedTemplateId, allTemplates, defaultTemplate, notifySelection]);
68
68
  useEffect(() => {
69
- if (selectedView) {
70
- onViewChange === null || onViewChange === void 0 ? void 0 : onViewChange(getViewForParent(selectedView));
71
- }
72
- else {
73
- onViewChange === null || onViewChange === void 0 ? void 0 : onViewChange(undefined);
74
- }
75
- }, [selectedView, onViewChange, getViewForParent]);
69
+ setTableViews === null || setTableViews === void 0 ? void 0 : setTableViews(currentViewColumns);
70
+ }, [currentViewColumns, setTableViews]);
76
71
  const handleViewButtonClick = useCallback((event) => {
77
72
  setAnchorEl((current) => (current ? null : event.currentTarget));
78
73
  }, []);
@@ -80,14 +75,49 @@ export const useViewsMenu = ({ mode, onViewChange, onCreateCustomView, onEditCus
80
75
  setAnchorEl(null);
81
76
  }, []);
82
77
  const handleSelectedViewInfo = useCallback((selected, viewMenuItem) => {
83
- const templateId = (viewMenuItem === null || viewMenuItem === void 0 ? void 0 : viewMenuItem.isCustom) ? viewMenuItem.templateId || viewMenuItem.id : (viewMenuItem === null || viewMenuItem === void 0 ? void 0 : viewMenuItem.templateId) || null;
84
- setSelectedTemplateId(templateId);
78
+ var _a, _b;
79
+ const id = (_a = viewMenuItem === null || viewMenuItem === void 0 ? void 0 : viewMenuItem.id) !== null && _a !== void 0 ? _a : null;
80
+ notifySelection(id);
81
+ const columns = ((_b = viewMenuItem === null || viewMenuItem === void 0 ? void 0 : viewMenuItem.submenu) === null || _b === void 0 ? void 0 : _b.length)
82
+ ? deepCloneColumns(viewMenuItem.submenu)
83
+ : defaultColumns;
84
+ setTableViews === null || setTableViews === void 0 ? void 0 : setTableViews(columns);
85
85
  handleCloseViewDropdown();
86
- }, [handleCloseViewDropdown]);
86
+ }, [handleCloseViewDropdown, notifySelection, setTableViews, defaultColumns]);
87
87
  const updateSelectedView = useCallback((updatedView) => {
88
- const templateId = updatedView.templateId || updatedView.id;
89
- setSelectedTemplateId((prev) => (prev !== templateId ? templateId : prev));
90
- }, []);
88
+ var _a, _b, _c, _d, _e;
89
+ setSelectedTemplateId((prev) => (prev !== updatedView.id ? updatedView.id : prev));
90
+ onSelectedTemplateIdChange === null || onSelectedTemplateIdChange === void 0 ? void 0 : onSelectedTemplateIdChange(updatedView.id);
91
+ if (((_b = (_a = updatedView.submenu) === null || _a === void 0 ? void 0 : _a.length) !== null && _b !== void 0 ? _b : 0) === 0)
92
+ return;
93
+ if (updatedView.default) {
94
+ const defaultT = templates.find((t) => t.default);
95
+ if (defaultT) {
96
+ const layout = mapColumnsToLayoutSection((_c = updatedView.submenu) !== null && _c !== void 0 ? _c : [], mode, lang);
97
+ const { layout: mergedLayout } = mergeTemplateEdit(defaultT, { layout: [layout] });
98
+ setTemplates((prev) => prev.map((t) => (t.default ? Object.assign(Object.assign({}, t), { layout: mergedLayout }) : t)));
99
+ }
100
+ }
101
+ else {
102
+ const template = templates.find((t) => t.id === updatedView.id);
103
+ if (template) {
104
+ const layout = mapColumnsToLayoutSection((_d = updatedView.submenu) !== null && _d !== void 0 ? _d : [], mode, lang);
105
+ const { layout: mergedLayout } = mergeTemplateEdit(template, { layout: [layout] });
106
+ setTemplates((prev) => prev.map((t) => (t.id === updatedView.id ? Object.assign(Object.assign({}, t), { layout: mergedLayout }) : t)));
107
+ }
108
+ }
109
+ setTableViews === null || setTableViews === void 0 ? void 0 : setTableViews((_e = updatedView.submenu) !== null && _e !== void 0 ? _e : []);
110
+ }, [onSelectedTemplateIdChange, setTableViews, mode, lang, templates, setTemplates]);
111
+ const saveDefaultColumns = useCallback((columns) => {
112
+ var _a;
113
+ const defaultT = templates.find((t) => t.default);
114
+ if (!defaultT)
115
+ return;
116
+ const layout = mapColumnsToLayoutSection(columns, mode, lang);
117
+ const { layout: mergedLayout } = mergeTemplateEdit(defaultT, { layout: [layout] });
118
+ setTemplates((prev) => prev.map((t) => (t.default ? Object.assign(Object.assign({}, t), { layout: mergedLayout }) : t)));
119
+ notifySelection((_a = defaultTemplate === null || defaultTemplate === void 0 ? void 0 : defaultTemplate.id) !== null && _a !== void 0 ? _a : null);
120
+ }, [mode, lang, templates, setTemplates, defaultTemplate, notifySelection]);
91
121
  const handleOpenCreateDialog = useCallback((useCurrentState = false, initialColumns) => {
92
122
  setEditingView(null);
93
123
  setShouldUseCurrentState(useCurrentState);
@@ -107,27 +137,45 @@ export const useViewsMenu = ({ mode, onViewChange, onCreateCustomView, onEditCus
107
137
  setInitialColumnsForCreate(null);
108
138
  }, []);
109
139
  const handleSaveView = useCallback((data) => __awaiter(void 0, void 0, void 0, function* () {
140
+ const layoutPayload = [data.layout];
110
141
  if (editingView) {
111
- const templateId = editingView.templateId || editingView.id;
112
- yield (onEditCustomView === null || onEditCustomView === void 0 ? void 0 : onEditCustomView(templateId, data));
113
- setSelectedTemplateId(templateId);
142
+ const isDefault = editingView.default === true;
143
+ if (isDefault) {
144
+ const defaultT = templates.find((t) => t.default);
145
+ const { name, layout } = mergeTemplateEdit(defaultT, { name: data.name, layout: data.layout });
146
+ setTemplates((prev) => prev.map((t) => (t.default ? Object.assign(Object.assign({}, t), { name, layout }) : t)));
147
+ notifySelection(editingView.id);
148
+ }
149
+ else {
150
+ const updated = yield updateTemplate(editingView.id, { name: data.name, layout: layoutPayload });
151
+ if (updated) {
152
+ const normalized = normalizeTemplate(updated);
153
+ setTemplates((prev) => prev.map((t) => (t.id === editingView.id ? normalized : t)));
154
+ notifySelection(editingView.id);
155
+ }
156
+ }
114
157
  handleCloseViewDropdown();
115
158
  }
116
159
  else {
117
- const created = yield (onCreateCustomView === null || onCreateCustomView === void 0 ? void 0 : onCreateCustomView(data));
118
- if (created === null || created === void 0 ? void 0 : created.templateId) {
119
- setSelectedTemplateId(created.templateId);
160
+ const created = yield createTemplate({ name: data.name, layout: layoutPayload });
161
+ if (created) {
162
+ const normalized = normalizeTemplate(created);
163
+ setTemplates((prev) => [...prev, normalized]);
164
+ notifySelection(created.id);
165
+ handleCloseViewDropdown();
120
166
  }
121
167
  }
122
- }), [editingView, onEditCustomView, onCreateCustomView, handleCloseViewDropdown]);
168
+ }), [editingView, templates, setTemplates, createTemplate, updateTemplate, notifySelection, handleCloseViewDropdown]);
123
169
  const handleDeleteView = useCallback((viewId) => __awaiter(void 0, void 0, void 0, function* () {
124
- const viewToDelete = allTemplates.find((view) => view.id === viewId || view.templateId === viewId);
125
- const templateId = (viewToDelete === null || viewToDelete === void 0 ? void 0 : viewToDelete.templateId) || viewId;
126
- yield (onDeleteCustomView === null || onDeleteCustomView === void 0 ? void 0 : onDeleteCustomView(templateId));
127
- if (selectedTemplateId === templateId) {
128
- setSelectedTemplateId((defaultTemplate === null || defaultTemplate === void 0 ? void 0 : defaultTemplate.templateId) || null);
170
+ var _a, _b;
171
+ const viewToDelete = allTemplates.find((view) => view.id === viewId);
172
+ const idToDelete = (_a = viewToDelete === null || viewToDelete === void 0 ? void 0 : viewToDelete.id) !== null && _a !== void 0 ? _a : viewId;
173
+ yield deleteTemplate(idToDelete);
174
+ setTemplates((prev) => prev.filter((t) => t.id !== idToDelete));
175
+ if (selectedTemplateId === idToDelete) {
176
+ notifySelection((_b = defaultTemplate === null || defaultTemplate === void 0 ? void 0 : defaultTemplate.id) !== null && _b !== void 0 ? _b : null);
129
177
  }
130
- }), [allTemplates, onDeleteCustomView, selectedTemplateId, defaultTemplate]);
178
+ }), [allTemplates, deleteTemplate, setTemplates, selectedTemplateId, defaultTemplate, notifySelection]);
131
179
  return {
132
180
  anchorEl,
133
181
  isCreateDialogOpen,
@@ -146,5 +194,6 @@ export const useViewsMenu = ({ mode, onViewChange, onCreateCustomView, onEditCus
146
194
  handleSaveView,
147
195
  handleDeleteView,
148
196
  updateSelectedView,
197
+ saveDefaultColumns,
149
198
  };
150
199
  };
@@ -59,7 +59,6 @@ export interface UpdateTemplatePayload extends TemplateAPIMetadata {
59
59
  layout: LayoutSection[];
60
60
  }
61
61
  export interface Template {
62
- templateId: string;
63
62
  segment: string;
64
63
  app: string;
65
64
  service: string;
@@ -121,6 +120,7 @@ export interface ViewsMenuProps extends CustomViewsConfig {
121
120
  onViewChange?: TableHeaderProps['onViewChange'];
122
121
  tableMode?: TableMode;
123
122
  lang?: string;
123
+ setTableViews?: TableHeaderProps['setTableViews'];
124
124
  }
125
125
  export interface ViewsDropdownProps {
126
126
  open: boolean;
@@ -1,3 +1,4 @@
1
+ import cloneDeep from 'lodash/cloneDeep';
1
2
  import { isDateColumn } from './layoutTransform';
2
3
  export const getColumnCheckState = (column) => {
3
4
  var _a, _b;
@@ -55,10 +56,7 @@ export const areSomeColumnsSelected = (columns, allSelected) => {
55
56
  return hasAny && !allSelected;
56
57
  };
57
58
  export const isValidTemplateName = (name, maxLength) => name.trim().length > 0 && name.length <= maxLength;
58
- export const deepCloneColumns = (columns) => columns.map((col) => {
59
- var _a, _b;
60
- return (Object.assign(Object.assign({}, col), { selected: (_a = col.selected) !== null && _a !== void 0 ? _a : false, menuItems: (_b = col.menuItems) === null || _b === void 0 ? void 0 : _b.map((item) => { var _a; return (Object.assign(Object.assign({}, item), { selected: (_a = item.selected) !== null && _a !== void 0 ? _a : false })); }) }));
61
- });
59
+ export const deepCloneColumns = (columns) => cloneDeep(columns);
62
60
  export const toggleSingleColumn = (columns, columnName) => columns.map((col) => {
63
61
  var _a;
64
62
  if (col.name !== columnName)
@@ -1,4 +1,4 @@
1
1
  export { isDateColumn, transformLayoutToColumns, getColumnsByMode, convertColumnsToLayoutSection, mapColumnsToLayoutSection, getLayoutDataFromTemplates, } from './layoutTransform';
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
- export { getSubmenuFromTemplateLayout, getColumnOrder, updateTemplate, templateToViewMenuItem, convertTemplateToColumnsView, convertTemplatesToColumnsView, } from './templateToColumnsView';
4
+ export { getSubmenuFromTemplateLayout, getColumnOrder, updateTemplate, mergeTemplateEdit, templateToViewMenuItem, convertTemplateToColumnsView, convertTemplatesToColumnsView, } from './templateToColumnsView';
@@ -1,4 +1,4 @@
1
1
  export { isDateColumn, transformLayoutToColumns, getColumnsByMode, convertColumnsToLayoutSection, mapColumnsToLayoutSection, getLayoutDataFromTemplates, } from './layoutTransform';
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
- export { getSubmenuFromTemplateLayout, getColumnOrder, updateTemplate, templateToViewMenuItem, convertTemplateToColumnsView, convertTemplatesToColumnsView, } from './templateToColumnsView';
4
+ export { getSubmenuFromTemplateLayout, getColumnOrder, updateTemplate, mergeTemplateEdit, templateToViewMenuItem, convertTemplateToColumnsView, convertTemplatesToColumnsView, } from './templateToColumnsView';
@@ -1,5 +1,5 @@
1
1
  import type { ColumnsView, TableMode, ColumnViewProps } from '../../../../types/index.js';
2
- import type { ViewMenuItem, Template } from '../types';
2
+ import type { ViewMenuItem, Template, LayoutSection } from '../types';
3
3
  export declare function getSubmenuFromTemplateLayout(template: Template, tableMode: TableMode, lang?: string): ColumnViewProps[];
4
4
  export declare const getColumnOrder: (col: {
5
5
  order?: number | string | null;
@@ -9,6 +9,14 @@ export declare function updateTemplate<T extends {
9
9
  columns?: unknown[];
10
10
  }>;
11
11
  }>(template: T): T;
12
+ /** Merge edit data (name + layout) into a template for local default updates. */
13
+ export declare function mergeTemplateEdit(template: Template | undefined, edit: {
14
+ name?: string;
15
+ layout?: LayoutSection | LayoutSection[];
16
+ }): {
17
+ name: string;
18
+ layout: LayoutSection[];
19
+ };
12
20
  export declare function templateToViewMenuItem(template: Template, tableMode: TableMode): ViewMenuItem & {
13
21
  layout?: Template['layout'];
14
22
  };
@@ -38,6 +38,25 @@ export function updateTemplate(template) {
38
38
  return (Object.assign(Object.assign({}, section), { columns: [...((_a = section.columns) !== null && _a !== void 0 ? _a : [])] }));
39
39
  })) !== null && _b !== void 0 ? _b : [] });
40
40
  }
41
+ /** Merge edit data (name + layout) into a template for local default updates. */
42
+ export function mergeTemplateEdit(template, edit) {
43
+ var _a, _b, _c, _d;
44
+ const name = (_b = (_a = edit === null || edit === void 0 ? void 0 : edit.name) !== null && _a !== void 0 ? _a : template === null || template === void 0 ? void 0 : template.name) !== null && _b !== void 0 ? _b : '';
45
+ const rawLayout = edit === null || edit === void 0 ? void 0 : edit.layout;
46
+ const editedSection = Array.isArray(rawLayout) ? rawLayout[0] : (rawLayout !== null && rawLayout !== void 0 ? rawLayout : null);
47
+ const mergedLayout = [...((_c = template === null || template === void 0 ? void 0 : template.layout) !== null && _c !== void 0 ? _c : [])];
48
+ if (editedSection) {
49
+ const sectionCode = (_d = editedSection.code) === null || _d === void 0 ? void 0 : _d.toLowerCase();
50
+ const existingIndex = mergedLayout.findIndex((s) => { var _a; return ((_a = s.code) === null || _a === void 0 ? void 0 : _a.toLowerCase()) === sectionCode; });
51
+ if (existingIndex >= 0) {
52
+ mergedLayout[existingIndex] = editedSection;
53
+ }
54
+ else {
55
+ mergedLayout.push(editedSection);
56
+ }
57
+ }
58
+ return { name, layout: mergedLayout };
59
+ }
41
60
  export function templateToViewMenuItem(template, tableMode) {
42
61
  var _a;
43
62
  const layout = (_a = template.layout) === null || _a === void 0 ? void 0 : _a.map((section) => {
@@ -45,10 +64,11 @@ export function templateToViewMenuItem(template, tableMode) {
45
64
  return (Object.assign(Object.assign({}, section), { columns: [...((_a = section.columns) !== null && _a !== void 0 ? _a : [])].sort((a, b) => getColumnOrder(a) - getColumnOrder(b)) }));
46
65
  });
47
66
  const submenu = getSubmenuFromTemplateLayout(template, tableMode);
67
+ const templateId = template.id;
48
68
  return {
49
- id: template.templateId,
69
+ id: templateId,
50
70
  label: template.name,
51
- templateId: template.templateId,
71
+ templateId,
52
72
  layout,
53
73
  submenu,
54
74
  columns: submenu.map((c) => c.name),
@@ -80,6 +100,13 @@ export const convertTemplateToColumnsView = (template, tableMode) => {
80
100
  });
81
101
  if (layoutForMode && layoutForMode.columns && layoutForMode.columns.length > 0) {
82
102
  const templateColumnsView = layoutForMode.columns
103
+ .filter((templateCol) => {
104
+ var _a;
105
+ const code = ((_a = templateCol.code) !== null && _a !== void 0 ? _a : '').toLowerCase();
106
+ if (code === 'date')
107
+ return true;
108
+ return templateCol.default === true;
109
+ })
83
110
  .map((templateCol) => {
84
111
  var _a, _b;
85
112
  return ({
@@ -104,7 +131,8 @@ export const convertTemplateToColumnsView = (template, tableMode) => {
104
131
  }
105
132
  }
106
133
  if (templateWithSubmenu.submenu && Array.isArray(templateWithSubmenu.submenu) && templateWithSubmenu.submenu.length > 0) {
107
- const templateColumnsView = templateWithSubmenu.submenu.map((submenuItem, index) => {
134
+ const selectedSubmenu = templateWithSubmenu.submenu.filter((submenuItem) => submenuItem.selected);
135
+ const templateColumnsView = selectedSubmenu.map((submenuItem, index) => {
108
136
  const columnCode = submenuItem.name.toLowerCase();
109
137
  let selectedMenuItems;
110
138
  if (submenuItem.menuItems && submenuItem.menuItems.length > 0) {
@@ -3,28 +3,20 @@ import type { LayoutSection, ViewMenuItem } from '../types';
3
3
  export declare const createCustomViewMenuItem: (name: string, selectedColumns: ColumnViewProps[], isDefault?: boolean) => ViewMenuItem;
4
4
  export declare const setViewAsDefault: (views: ViewMenuItem[], viewId: string) => ViewMenuItem[];
5
5
  export declare const transformTemplatesToViewMenuItems: (templates: Array<{
6
- id: string | {
7
- timestamp: number;
8
- date: string;
9
- };
6
+ id: string;
10
7
  name: string;
11
8
  default: boolean;
12
9
  layout: LayoutSection[];
13
- templateId: string;
14
10
  }>, mode?: TableMode, lang?: string) => {
15
11
  customViews: ViewMenuItem[];
16
12
  defaultTemplateColumns?: ColumnViewProps[] | undefined;
17
13
  defaultTemplate?: ViewMenuItem | undefined;
18
14
  };
19
15
  export declare const mapTemplatesToMenuItems: (templates: Array<{
20
- id: string | {
21
- timestamp: number;
22
- date: string;
23
- };
16
+ id: string;
24
17
  name: string;
25
18
  default: boolean;
26
19
  layout: LayoutSection[];
27
- templateId: string;
28
20
  }>, mode?: TableMode, lang?: string) => {
29
21
  menuItems: ViewMenuItem[];
30
22
  defaultItem?: ViewMenuItem | undefined;
@@ -17,7 +17,7 @@ export const transformTemplatesToViewMenuItems = (templates, mode = 'sheet', lan
17
17
  const sectionCode = mode === 'sheet' ? 'sheet' : 'advanced';
18
18
  const section = template.layout.find((s) => s.code.toLowerCase() === sectionCode);
19
19
  const columns = section ? transformLayoutToColumns([section], lang) : [];
20
- const viewId = typeof template.id === 'string' ? template.id : template.templateId;
20
+ const templateId = template.id;
21
21
  const indexColumn = INDEX_COLUMN_CONFIG;
22
22
  const dateColumn = DATE_COLUMN_CONFIG;
23
23
  const withDate = columns.some((c) => { var _a; return ((_a = c.name) !== null && _a !== void 0 ? _a : '').toLowerCase() === 'date'; }) ? columns : [dateColumn, ...columns];
@@ -25,8 +25,8 @@ export const transformTemplatesToViewMenuItems = (templates, mode = 'sheet', lan
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
26
  const finalColumns = [indexColumn, ...withDateFirst];
27
27
  const item = {
28
- id: template.default ? 'default' : viewId,
29
- templateId: template.templateId,
28
+ id: templateId,
29
+ templateId,
30
30
  label: template.name,
31
31
  isCustom: !template.default,
32
32
  default: !!template.default,
@@ -54,7 +54,7 @@ export const getSubmenuItems = (item, defaultColumns) => {
54
54
  if (item.isCustom && ((_a = item.submenu) === null || _a === void 0 ? void 0 : _a.length)) {
55
55
  columns = item.submenu;
56
56
  }
57
- else if (item.id === 'default') {
57
+ else if (item.default) {
58
58
  columns = defaultColumns;
59
59
  }
60
60
  else {
@@ -5,20 +5,17 @@ import { PartialExcept } from '../../types/index.js';
5
5
  import type { ViewMenuItem, LayoutSection, Template } from './TableView/types';
6
6
  export interface CustomViewsConfig {
7
7
  templates: Template[];
8
- onCreateCustomView: (data: {
8
+ setTemplates: React.Dispatch<React.SetStateAction<Template[]>>;
9
+ createTemplate: (data: {
9
10
  name: string;
10
- selectedColumns: ColumnViewProps[];
11
- layout: LayoutSection;
12
- }) => Promise<{
13
- templateId: string;
11
+ layout: LayoutSection[];
12
+ }) => Promise<Template | undefined>;
13
+ updateTemplate: (templateId: string, data: {
14
14
  name: string;
15
- } | void>;
16
- onEditCustomView: (viewId: string, data: {
17
- name: string;
18
- selectedColumns: ColumnViewProps[];
19
- layout: LayoutSection;
20
- }) => Promise<void>;
21
- onDeleteCustomView: (viewId: string) => Promise<void>;
15
+ layout: LayoutSection[];
16
+ }) => Promise<Template | undefined>;
17
+ deleteTemplate: (templateId: string) => Promise<void>;
18
+ onSelectedTemplateIdChange?: (templateId: string | null) => void;
22
19
  }
23
20
  type ViewsOptions = {
24
21
  default: {};
@@ -1,5 +1,4 @@
1
1
  /// <reference types="react" />
2
- /// <reference types="react" />
3
2
  export declare const Button: import("@emotion/styled").StyledComponent<{
4
3
  hidden?: boolean | undefined;
5
4
  color?: string | undefined;
@@ -1,5 +1,4 @@
1
1
  /// <reference types="react" />
2
- /// <reference types="react" />
3
2
  type ExportButtonProps = {
4
3
  notificationState?: {
5
4
  success: boolean;
@@ -1,5 +1,4 @@
1
1
  /// <reference types="react" />
2
- /// <reference types="react" />
3
2
  interface TableWrapperProps {
4
3
  showNoDataView?: boolean;
5
4
  }
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.415",
5
- "testVersion": 0,
4
+ "version": "0.1.417-test.1",
5
+ "testVersion": 1,
6
6
  "type": "module",
7
7
  "main": "build/index.js",
8
8
  "module": "build/index.js",
@@ -164,4 +164,4 @@
164
164
  "publishConfig": {
165
165
  "registry": "https://registry.npmjs.org/"
166
166
  }
167
- }
167
+ }