@tap-payments/os-micro-frontend-shared 0.1.373-test.2-test.3-test.4-test.5-test.6-test.7 → 0.1.373-test.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/components/Sandbox/style.js +2 -3
- package/build/components/TableHeader/FiltersRow.d.ts +1 -1
- package/build/components/TableHeader/FiltersRow.js +3 -3
- package/build/components/TableHeader/TableHeader.d.ts +1 -1
- package/build/components/TableHeader/TableHeader.js +2 -2
- package/build/components/TableHeader/TableView/ViewsDropdown.d.ts +1 -1
- package/build/components/TableHeader/TableView/ViewsDropdown.js +116 -197
- package/build/components/TableHeader/TableView/ViewsMenu.d.ts +5 -0
- package/build/components/TableHeader/TableView/ViewsMenu.js +76 -0
- package/build/components/TableHeader/TableView/components/ColumnList.js +4 -4
- package/build/components/TableHeader/TableView/components/ViewsSubmenu.js +46 -30
- package/build/components/TableHeader/TableView/constants.d.ts +1 -0
- package/build/components/TableHeader/TableView/constants.js +1 -0
- package/build/components/TableHeader/TableView/hooks/index.d.ts +1 -1
- package/build/components/TableHeader/TableView/hooks/index.js +1 -1
- package/build/components/TableHeader/TableView/hooks/useCreateViewDialog.js +12 -12
- package/build/components/TableHeader/TableView/hooks/useNestedSubmenu.js +2 -9
- package/build/components/TableHeader/TableView/hooks/useSubmenuHover.js +1 -2
- package/build/components/TableHeader/TableView/hooks/useViewsManager.d.ts +6 -8
- package/build/components/TableHeader/TableView/hooks/useViewsManager.js +45 -94
- package/build/components/TableHeader/TableView/hooks/useViewsMenu.d.ts +44 -0
- package/build/components/TableHeader/TableView/hooks/useViewsMenu.js +182 -0
- package/build/components/TableHeader/TableView/index.d.ts +3 -3
- package/build/components/TableHeader/TableView/index.js +2 -4
- package/build/components/TableHeader/TableView/types.d.ts +18 -32
- package/build/components/TableHeader/TableView/utils.d.ts +5 -5
- package/build/components/TableHeader/TableView/utils.js +22 -13
- package/build/components/TableHeader/index.d.ts +1 -0
- package/build/components/TableHeader/type.d.ts +2 -9
- package/build/components/Toolbar/Toolbar.js +1 -1
- package/build/components/VirtualTables/VirtualTable/VirtualTable.d.ts +1 -1
- package/build/components/VirtualTables/VirtualTable/VirtualTable.js +4 -3
- package/build/constants/apps.js +2 -0
- package/build/constants/assets.d.ts +1 -0
- package/build/constants/assets.js +1 -0
- package/build/types/reports.d.ts +21 -0
- package/build/types/table.d.ts +1 -0
- package/build/utils/date.js +5 -3
- package/build/utils/index.d.ts +1 -0
- package/build/utils/index.js +1 -0
- package/build/utils/skeletonColumns.d.ts +4 -0
- package/build/utils/skeletonColumns.js +17 -0
- package/package.json +2 -2
- package/build/components/TableHeader/TableView/ViewSelector.d.ts +0 -5
- package/build/components/TableHeader/TableView/ViewSelector.js +0 -46
- package/build/components/TableHeader/TableView/hooks/useViewSelector.d.ts +0 -59
- package/build/components/TableHeader/TableView/hooks/useViewSelector.js +0 -193
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { IColumnProps } from '../types/index.js';
|
|
2
|
+
export declare const DEFAULT_SKELETON_WIDTHS: string[];
|
|
3
|
+
export declare const generateSkeletonColumns: (staticWidths?: string[]) => IColumnProps[];
|
|
4
|
+
export declare const getProcessedColumns: <T = unknown>(columns: readonly IColumnProps<T>[], isLoading: boolean, defaultSkeleton: boolean) => IColumnProps<T>[];
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export const DEFAULT_SKELETON_WIDTHS = ['120px', '180px', '100px', '150px', '200px', '140px', '160px', '110px', '190px', '130px'];
|
|
2
|
+
export const generateSkeletonColumns = (staticWidths = DEFAULT_SKELETON_WIDTHS) => {
|
|
3
|
+
return staticWidths.map((width, index) => ({
|
|
4
|
+
id: `skeleton-col-${index}`,
|
|
5
|
+
header: '',
|
|
6
|
+
width,
|
|
7
|
+
order: index,
|
|
8
|
+
hidden: false,
|
|
9
|
+
sortable: false,
|
|
10
|
+
}));
|
|
11
|
+
};
|
|
12
|
+
export const getProcessedColumns = (columns, isLoading, defaultSkeleton) => {
|
|
13
|
+
if (defaultSkeleton && isLoading) {
|
|
14
|
+
return generateSkeletonColumns();
|
|
15
|
+
}
|
|
16
|
+
return [...columns];
|
|
17
|
+
};
|
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.373-test.2
|
|
5
|
-
"testVersion":
|
|
4
|
+
"version": "0.1.373-test.2",
|
|
5
|
+
"testVersion": 2,
|
|
6
6
|
"type": "module",
|
|
7
7
|
"main": "build/index.js",
|
|
8
8
|
"module": "build/index.js",
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
/// <reference types="react" />
|
|
2
|
-
import type { ViewSelectorProps } from './types';
|
|
3
|
-
declare function ViewSelector({ onViewChange, setIsViewVisible, setTableViews, tableViews: externalTableViews, resetTableViews, customViews: externalCustomViews, onCreateCustomView, onEditCustomView, onDeleteCustomView, tableMode, onTableViewsChange, onCustomViewsChange, templates, lang, apiMetadata, }: ViewSelectorProps): import("react/jsx-runtime").JSX.Element;
|
|
4
|
-
declare const _default: import("react").MemoExoticComponent<typeof ViewSelector>;
|
|
5
|
-
export default _default;
|
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
-
import { memo } from 'react';
|
|
3
|
-
import { useTranslation } from 'react-i18next';
|
|
4
|
-
import ClickAwayListener from '@mui/material/ClickAwayListener';
|
|
5
|
-
import { Icon, StyledButton } from '../../index.js';
|
|
6
|
-
import { viewIcon } from '../../../constants/index.js';
|
|
7
|
-
import ViewsDropdown from './ViewsDropdown';
|
|
8
|
-
import CreateViewDialog from './CreateViewDialog';
|
|
9
|
-
import { ViewWrapper } from './styles';
|
|
10
|
-
import { useViewsManager } from './hooks';
|
|
11
|
-
import { useViewSelector } from './hooks/useViewSelector';
|
|
12
|
-
function ViewSelector({ onViewChange, setIsViewVisible, setTableViews, tableViews: externalTableViews, resetTableViews, customViews: externalCustomViews, onCreateCustomView, onEditCustomView, onDeleteCustomView, tableMode = 'default', onTableViewsChange, onCustomViewsChange, templates, lang = 'en', apiMetadata, }) {
|
|
13
|
-
const { t } = useTranslation();
|
|
14
|
-
// Map tableMode to viewMode: 'sheet' → 'sheet', 'default' → 'advanced'
|
|
15
|
-
const mode = tableMode === 'sheet' ? 'sheet' : 'advanced';
|
|
16
|
-
const { defaultColumns, setDefaultColumns, internalTableViews, setInternalTableViews, internalCustomViews, setInternalCustomViews, defaultTemplate, } = useViewsManager({
|
|
17
|
-
mode,
|
|
18
|
-
templates,
|
|
19
|
-
lang,
|
|
20
|
-
});
|
|
21
|
-
const tableViews = externalTableViews !== null && externalTableViews !== void 0 ? externalTableViews : internalTableViews;
|
|
22
|
-
const customViews = externalCustomViews !== null && externalCustomViews !== void 0 ? externalCustomViews : internalCustomViews;
|
|
23
|
-
const { anchorViewEl, defaultViewEl, setDefaultViewElement, isCreateDialogOpen, editingView, selectedViewInfo, shouldUseCurrentState, handleViewButtonClick, handleCloseViewDropdown, handleSelectedViewInfo, handleOpenCreateDialog, handleOpenEditDialog, handleCloseCreateDialog, handleSaveView, handleDeleteView, handleResetViews, handleTableViewsChange, updateSelectedView, } = useViewSelector({
|
|
24
|
-
mode,
|
|
25
|
-
onViewChange,
|
|
26
|
-
onTableViewsChange,
|
|
27
|
-
onCustomViewsChange,
|
|
28
|
-
onCreateCustomView,
|
|
29
|
-
onEditCustomView,
|
|
30
|
-
onDeleteCustomView,
|
|
31
|
-
resetTableViews,
|
|
32
|
-
setTableViews,
|
|
33
|
-
tableViews,
|
|
34
|
-
customViews,
|
|
35
|
-
defaultColumns,
|
|
36
|
-
defaultTemplate,
|
|
37
|
-
setInternalCustomViews,
|
|
38
|
-
setInternalTableViews,
|
|
39
|
-
setDefaultColumns,
|
|
40
|
-
apiMetadata,
|
|
41
|
-
});
|
|
42
|
-
return (_jsxs(_Fragment, { children: [_jsx(ClickAwayListener, Object.assign({ onClickAway: handleCloseViewDropdown }, { children: _jsxs(ViewWrapper, Object.assign({ sx: { width: '32px' }, "data-testid": "ViewSelector" }, { children: [_jsx(StyledButton, Object.assign({ title: t('tableView'), "data-testid": "ViewSelector_button", onClick: handleViewButtonClick }, { children: _jsx(Icon, { src: viewIcon, alt: "view", sx: { width: 14, height: 14 } }) })), _jsx(ViewsDropdown, { open: Boolean(defaultViewEl), anchorEl: anchorViewEl, setSelectedViewInfo: handleSelectedViewInfo, selectedViewInfo: selectedViewInfo, onSelect: (e, selectedView) => {
|
|
43
|
-
setDefaultViewElement(defaultViewEl ? null : e.currentTarget);
|
|
44
|
-
}, setViews: handleResetViews, tableViews: tableViews, setTableViews: handleTableViewsChange, onCreateCustomView: handleOpenCreateDialog, customViews: customViews, onEditCustomView: handleOpenEditDialog, defaultColumns: defaultColumns, setDefaultColumns: setDefaultColumns, updateSelectedView: updateSelectedView })] })) })), _jsx(CreateViewDialog, { open: isCreateDialogOpen, onClose: handleCloseCreateDialog, availableColumns: defaultColumns, defaultColumns: defaultColumns, onCreate: handleSaveView, editingView: editingView, onDelete: handleDeleteView, tableViews: shouldUseCurrentState ? defaultColumns : undefined, mode: mode })] }));
|
|
45
|
-
}
|
|
46
|
-
export default memo(ViewSelector);
|
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
import { type MouseEvent } from 'react';
|
|
2
|
-
import type { ColumnViewProps } from '../../../../types/index.js';
|
|
3
|
-
import type { ViewMenuItem, LayoutSection, ViewMode, TemplateAPIMetadata } from '../types';
|
|
4
|
-
import type { ViewOption } from '../../type';
|
|
5
|
-
export interface UseViewSelectorProps {
|
|
6
|
-
mode: ViewMode;
|
|
7
|
-
onViewChange?: (selectedView?: ViewMenuItem) => void;
|
|
8
|
-
onTableViewsChange?: (tableViews: ColumnViewProps[]) => void;
|
|
9
|
-
onCustomViewsChange?: (customViews: ViewMenuItem[]) => void;
|
|
10
|
-
onCreateCustomView?: (data: {
|
|
11
|
-
name: string;
|
|
12
|
-
selectedColumns: ColumnViewProps[];
|
|
13
|
-
layout: LayoutSection;
|
|
14
|
-
}) => Promise<void>;
|
|
15
|
-
onEditCustomView?: (viewId: string, data: {
|
|
16
|
-
name: string;
|
|
17
|
-
selectedColumns: ColumnViewProps[];
|
|
18
|
-
layout: LayoutSection;
|
|
19
|
-
}) => Promise<void>;
|
|
20
|
-
onDeleteCustomView?: (viewId: string) => Promise<void>;
|
|
21
|
-
resetTableViews?: (view: {
|
|
22
|
-
id: string;
|
|
23
|
-
label: string;
|
|
24
|
-
}) => void;
|
|
25
|
-
setTableViews?: (columns: ColumnViewProps[]) => void;
|
|
26
|
-
tableViews: ColumnViewProps[];
|
|
27
|
-
customViews: ViewMenuItem[];
|
|
28
|
-
defaultColumns: ColumnViewProps[];
|
|
29
|
-
defaultTemplate?: ViewMenuItem;
|
|
30
|
-
setInternalCustomViews: (views: ViewMenuItem[]) => void;
|
|
31
|
-
setInternalTableViews: (views: ColumnViewProps[]) => void;
|
|
32
|
-
setDefaultColumns?: (columns: ColumnViewProps[]) => void;
|
|
33
|
-
apiMetadata?: TemplateAPIMetadata;
|
|
34
|
-
}
|
|
35
|
-
export declare const useViewSelector: ({ mode, onViewChange, onTableViewsChange, onCustomViewsChange, onCreateCustomView, onEditCustomView, onDeleteCustomView, resetTableViews, setTableViews, tableViews, customViews, defaultColumns, defaultTemplate, setInternalCustomViews, setInternalTableViews, setDefaultColumns, apiMetadata, }: UseViewSelectorProps) => {
|
|
36
|
-
anchorViewEl: HTMLDivElement | null;
|
|
37
|
-
defaultViewEl: HTMLDivElement | null;
|
|
38
|
-
setDefaultViewElement: import("react").Dispatch<import("react").SetStateAction<HTMLDivElement | null>>;
|
|
39
|
-
isCreateDialogOpen: boolean;
|
|
40
|
-
editingView: ViewMenuItem | null;
|
|
41
|
-
selectedViewInfo: ViewOption;
|
|
42
|
-
shouldUseCurrentState: boolean;
|
|
43
|
-
handleViewButtonClick: (event: MouseEvent<HTMLDivElement>) => void;
|
|
44
|
-
handleCloseViewDropdown: () => void;
|
|
45
|
-
handleClose: () => void;
|
|
46
|
-
handleSelectedViewInfo: (selected: ViewOption, viewMenuItem?: ViewMenuItem) => void;
|
|
47
|
-
handleOpenCreateDialog: (useCurrentState?: boolean) => void;
|
|
48
|
-
handleOpenEditDialog: (view: ViewMenuItem) => void;
|
|
49
|
-
handleCloseCreateDialog: () => void;
|
|
50
|
-
handleSaveView: (data: {
|
|
51
|
-
name: string;
|
|
52
|
-
selectedColumns: ColumnViewProps[];
|
|
53
|
-
layout: LayoutSection;
|
|
54
|
-
}) => Promise<void>;
|
|
55
|
-
handleDeleteView: (viewId: string) => Promise<void>;
|
|
56
|
-
handleResetViews: (views: string[]) => void;
|
|
57
|
-
handleTableViewsChange: (newTableViews: ColumnViewProps[]) => void;
|
|
58
|
-
updateSelectedView: (updatedView: ViewMenuItem) => void;
|
|
59
|
-
};
|
|
@@ -1,193 +0,0 @@
|
|
|
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
|
-
import { useState, useCallback, useEffect, useRef } from 'react';
|
|
11
|
-
import { createCustomViewMenuItem } from '../utils';
|
|
12
|
-
export const useViewSelector = ({ mode, onViewChange, onTableViewsChange, onCustomViewsChange, onCreateCustomView, onEditCustomView, onDeleteCustomView, resetTableViews, setTableViews, tableViews, customViews, defaultColumns, defaultTemplate, setInternalCustomViews, setInternalTableViews, setDefaultColumns, apiMetadata, }) => {
|
|
13
|
-
const [anchorViewEl, setAnchorViewEl] = useState(null);
|
|
14
|
-
const [defaultViewEl, setDefaultViewElement] = useState(null);
|
|
15
|
-
const [isCreateDialogOpen, setIsCreateDialogOpen] = useState(false);
|
|
16
|
-
const [editingView, setEditingView] = useState(null);
|
|
17
|
-
const [selectedViewInfo, setSelectedViewInfo] = useState({ id: 'default', label: 'Default' });
|
|
18
|
-
const [shouldUseCurrentState, setShouldUseCurrentState] = useState(false);
|
|
19
|
-
const [selectedView, setSelectedView] = useState(undefined);
|
|
20
|
-
const hasInitializedRef = useRef(false);
|
|
21
|
-
// Update editingView when customViews changes to ensure it reflects the latest saved state
|
|
22
|
-
useEffect(() => {
|
|
23
|
-
if (editingView && customViews.length > 0) {
|
|
24
|
-
const updatedView = customViews.find((view) => view.id === editingView.id);
|
|
25
|
-
if (updatedView && updatedView !== editingView) {
|
|
26
|
-
setEditingView(updatedView);
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
}, [customViews, editingView]);
|
|
30
|
-
// Update selectedView when customViews changes to ensure it reflects the latest saved state
|
|
31
|
-
useEffect(() => {
|
|
32
|
-
if (selectedView && selectedView.isCustom && customViews.length > 0) {
|
|
33
|
-
const updatedView = customViews.find((view) => view.id === selectedView.id);
|
|
34
|
-
if (updatedView) {
|
|
35
|
-
// Compare submenu to detect changes (deep comparison would be better, but this works for now)
|
|
36
|
-
const submenuChanged = JSON.stringify(updatedView.submenu) !== JSON.stringify(selectedView.submenu);
|
|
37
|
-
const labelChanged = updatedView.label !== selectedView.label;
|
|
38
|
-
if (submenuChanged || labelChanged) {
|
|
39
|
-
// Create a new object reference to ensure React detects the change
|
|
40
|
-
const newSelectedView = Object.assign(Object.assign({}, updatedView), { submenu: updatedView.submenu ? [...updatedView.submenu] : undefined });
|
|
41
|
-
setSelectedView(newSelectedView);
|
|
42
|
-
onViewChange === null || onViewChange === void 0 ? void 0 : onViewChange(newSelectedView);
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
}, [customViews, selectedView, onViewChange]);
|
|
47
|
-
// Notify parent of initial view on mount only
|
|
48
|
-
useEffect(() => {
|
|
49
|
-
// Only initialize once on mount, don't reset if user has already selected a view
|
|
50
|
-
if (hasInitializedRef.current)
|
|
51
|
-
return;
|
|
52
|
-
// Use defaultTemplate if available, otherwise undefined (built-in default view)
|
|
53
|
-
const initialView = defaultTemplate || undefined;
|
|
54
|
-
setSelectedView(initialView);
|
|
55
|
-
onViewChange === null || onViewChange === void 0 ? void 0 : onViewChange(initialView);
|
|
56
|
-
hasInitializedRef.current = true;
|
|
57
|
-
}, [defaultTemplate, onViewChange]);
|
|
58
|
-
const handleTableViewsChange = useCallback((newTableViews) => {
|
|
59
|
-
const setTableViewsState = setTableViews !== null && setTableViews !== void 0 ? setTableViews : setInternalTableViews;
|
|
60
|
-
setTableViewsState(newTableViews);
|
|
61
|
-
onTableViewsChange === null || onTableViewsChange === void 0 ? void 0 : onTableViewsChange(newTableViews);
|
|
62
|
-
}, [setTableViews, setInternalTableViews, onTableViewsChange]);
|
|
63
|
-
const handleCustomViewsChange = useCallback((newCustomViews) => {
|
|
64
|
-
setInternalCustomViews(newCustomViews);
|
|
65
|
-
onCustomViewsChange === null || onCustomViewsChange === void 0 ? void 0 : onCustomViewsChange(newCustomViews);
|
|
66
|
-
}, [setInternalCustomViews, onCustomViewsChange]);
|
|
67
|
-
const handleViewButtonClick = useCallback((event) => {
|
|
68
|
-
setAnchorViewEl(event.currentTarget);
|
|
69
|
-
setDefaultViewElement(event.currentTarget);
|
|
70
|
-
}, []);
|
|
71
|
-
const handleCloseViewDropdown = useCallback(() => {
|
|
72
|
-
setDefaultViewElement(null);
|
|
73
|
-
}, []);
|
|
74
|
-
const handleClose = useCallback(() => {
|
|
75
|
-
setAnchorViewEl(null);
|
|
76
|
-
setDefaultViewElement(null);
|
|
77
|
-
setSelectedViewInfo({ label: 'Default', id: 'default' });
|
|
78
|
-
}, []);
|
|
79
|
-
const handleSelectedViewInfo = useCallback((selected, viewMenuItem) => {
|
|
80
|
-
setSelectedViewInfo(selected);
|
|
81
|
-
// Update selected view and notify parent
|
|
82
|
-
const newSelectedView = viewMenuItem || undefined;
|
|
83
|
-
setSelectedView(newSelectedView);
|
|
84
|
-
onViewChange === null || onViewChange === void 0 ? void 0 : onViewChange(newSelectedView);
|
|
85
|
-
handleCloseViewDropdown();
|
|
86
|
-
}, [handleCloseViewDropdown, onViewChange]);
|
|
87
|
-
// Internal function to update selected view and notify parent
|
|
88
|
-
// Used when default columns change via "Okay" button
|
|
89
|
-
const updateSelectedView = useCallback((updatedView) => {
|
|
90
|
-
setSelectedView(updatedView);
|
|
91
|
-
setSelectedViewInfo({ id: updatedView.id, label: updatedView.label });
|
|
92
|
-
onViewChange === null || onViewChange === void 0 ? void 0 : onViewChange(updatedView);
|
|
93
|
-
}, [onViewChange, setSelectedViewInfo]);
|
|
94
|
-
const handleOpenCreateDialog = useCallback((useCurrentState = false) => {
|
|
95
|
-
setEditingView(null);
|
|
96
|
-
setShouldUseCurrentState(useCurrentState);
|
|
97
|
-
setIsCreateDialogOpen(true);
|
|
98
|
-
setDefaultViewElement(null);
|
|
99
|
-
}, []);
|
|
100
|
-
const handleOpenEditDialog = useCallback((view) => {
|
|
101
|
-
setEditingView(view);
|
|
102
|
-
setShouldUseCurrentState(true);
|
|
103
|
-
setIsCreateDialogOpen(true);
|
|
104
|
-
}, []);
|
|
105
|
-
const handleCloseCreateDialog = useCallback(() => {
|
|
106
|
-
setIsCreateDialogOpen(false);
|
|
107
|
-
setEditingView(null);
|
|
108
|
-
setShouldUseCurrentState(false);
|
|
109
|
-
}, []);
|
|
110
|
-
const handleSaveView = useCallback((data) => __awaiter(void 0, void 0, void 0, function* () {
|
|
111
|
-
try {
|
|
112
|
-
if (editingView) {
|
|
113
|
-
// Use templateId for API calls, not the internal view id
|
|
114
|
-
const templateId = editingView.templateId || editingView.id;
|
|
115
|
-
yield (onEditCustomView === null || onEditCustomView === void 0 ? void 0 : onEditCustomView(templateId, data));
|
|
116
|
-
// Update state after promise resolves successfully
|
|
117
|
-
const updatedView = Object.assign(Object.assign({}, editingView), { label: data.name, columns: data.selectedColumns.map((col) => col.name), submenu: data.selectedColumns });
|
|
118
|
-
const updatedViews = customViews.map((view) => (view.id === editingView.id ? updatedView : view));
|
|
119
|
-
handleCustomViewsChange(updatedViews);
|
|
120
|
-
// If the updated view is currently selected, update selectedView to reflect changes
|
|
121
|
-
// Create a new object reference to ensure React detects the change
|
|
122
|
-
if ((selectedView === null || selectedView === void 0 ? void 0 : selectedView.id) === editingView.id) {
|
|
123
|
-
const newSelectedView = Object.assign(Object.assign({}, updatedView), { submenu: [...updatedView.submenu] });
|
|
124
|
-
setSelectedView(newSelectedView);
|
|
125
|
-
onViewChange === null || onViewChange === void 0 ? void 0 : onViewChange(newSelectedView);
|
|
126
|
-
}
|
|
127
|
-
}
|
|
128
|
-
else {
|
|
129
|
-
yield (onCreateCustomView === null || onCreateCustomView === void 0 ? void 0 : onCreateCustomView(data));
|
|
130
|
-
// Update state after promise resolves successfully
|
|
131
|
-
const newView = createCustomViewMenuItem(data.name, data.selectedColumns);
|
|
132
|
-
const updatedViews = [...customViews, newView];
|
|
133
|
-
handleCustomViewsChange(updatedViews);
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
catch (error) {
|
|
137
|
-
// Error will be handled by the toast in CreateViewDialog
|
|
138
|
-
throw error;
|
|
139
|
-
}
|
|
140
|
-
}), [editingView, customViews, handleCustomViewsChange, onEditCustomView, onCreateCustomView, selectedView, onViewChange]);
|
|
141
|
-
const handleDeleteView = useCallback((viewId) => __awaiter(void 0, void 0, void 0, function* () {
|
|
142
|
-
try {
|
|
143
|
-
// Find the view to get its templateId
|
|
144
|
-
const viewToDelete = customViews.find((view) => view.id === viewId);
|
|
145
|
-
const templateId = (viewToDelete === null || viewToDelete === void 0 ? void 0 : viewToDelete.templateId) || viewId;
|
|
146
|
-
yield (onDeleteCustomView === null || onDeleteCustomView === void 0 ? void 0 : onDeleteCustomView(templateId));
|
|
147
|
-
// Update state after promise resolves successfully
|
|
148
|
-
const updatedViews = customViews.filter((view) => view.id !== viewId);
|
|
149
|
-
handleCustomViewsChange(updatedViews);
|
|
150
|
-
// If the deleted view was selected, reset to default
|
|
151
|
-
if ((selectedView === null || selectedView === void 0 ? void 0 : selectedView.id) === viewId) {
|
|
152
|
-
setSelectedView(undefined);
|
|
153
|
-
onViewChange === null || onViewChange === void 0 ? void 0 : onViewChange(undefined);
|
|
154
|
-
}
|
|
155
|
-
}
|
|
156
|
-
catch (error) {
|
|
157
|
-
// Error will be handled by the toast in CreateViewDialog
|
|
158
|
-
throw error;
|
|
159
|
-
}
|
|
160
|
-
}), [customViews, handleCustomViewsChange, onDeleteCustomView, selectedView, onViewChange]);
|
|
161
|
-
const handleResetViews = useCallback((views) => {
|
|
162
|
-
if (resetTableViews) {
|
|
163
|
-
resetTableViews({ id: views[0], label: views[0] });
|
|
164
|
-
}
|
|
165
|
-
else {
|
|
166
|
-
// Reset to default columns from templates
|
|
167
|
-
handleTableViewsChange([...defaultColumns]);
|
|
168
|
-
}
|
|
169
|
-
}, [resetTableViews, defaultColumns, handleTableViewsChange]);
|
|
170
|
-
return {
|
|
171
|
-
// State
|
|
172
|
-
anchorViewEl,
|
|
173
|
-
defaultViewEl,
|
|
174
|
-
setDefaultViewElement,
|
|
175
|
-
isCreateDialogOpen,
|
|
176
|
-
editingView,
|
|
177
|
-
selectedViewInfo,
|
|
178
|
-
shouldUseCurrentState,
|
|
179
|
-
// Handlers
|
|
180
|
-
handleViewButtonClick,
|
|
181
|
-
handleCloseViewDropdown,
|
|
182
|
-
handleClose,
|
|
183
|
-
handleSelectedViewInfo,
|
|
184
|
-
handleOpenCreateDialog,
|
|
185
|
-
handleOpenEditDialog,
|
|
186
|
-
handleCloseCreateDialog,
|
|
187
|
-
handleSaveView,
|
|
188
|
-
handleDeleteView,
|
|
189
|
-
handleResetViews,
|
|
190
|
-
handleTableViewsChange,
|
|
191
|
-
updateSelectedView,
|
|
192
|
-
};
|
|
193
|
-
};
|