@tap-payments/os-micro-frontend-shared 0.1.376-test.1-test.2 → 0.1.376-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/FilterDropdown/FilterDropdown.d.ts +11 -4
- package/build/components/FilterDropdown/FilterDropdown.js +18 -4
- package/build/components/FilterDropdown/style.js +1 -1
- package/build/components/MultiDatakeyDonut/MultiDatakeyDonut.d.ts +12 -0
- package/build/components/MultiDatakeyDonut/MultiDatakeyDonut.js +19 -0
- package/build/components/MultiDatakeyDonut/index.d.ts +1 -0
- package/build/components/MultiDatakeyDonut/index.js +1 -0
- package/build/components/MultiDatakeyDonut/style.d.ts +10 -0
- package/build/components/MultiDatakeyDonut/style.js +23 -0
- package/build/components/RangeCalender/RangeCalender.js +4 -2
- package/build/components/TableHeader/FiltersRow.d.ts +1 -1
- package/build/components/TableHeader/FiltersRow.js +2 -4
- package/build/components/TableHeader/TableHeader.d.ts +1 -1
- package/build/components/TableHeader/TableHeader.js +2 -2
- package/build/components/TableHeader/TableView/CustomViews.js +1 -1
- package/build/components/TableHeader/TableView/TableView.js +1 -0
- package/build/components/TableHeader/TableView/hooks/index.d.ts +0 -6
- package/build/components/TableHeader/TableView/hooks/index.js +0 -6
- package/build/components/TableHeader/TableView/index.d.ts +3 -12
- package/build/components/TableHeader/TableView/index.js +3 -13
- package/build/components/TableHeader/index.d.ts +0 -1
- package/build/components/TableHeader/type.d.ts +1 -15
- package/build/components/index.d.ts +1 -0
- package/build/components/index.js +1 -0
- package/build/constants/assets.d.ts +3 -1
- package/build/constants/assets.js +3 -1
- package/build/types/index.d.ts +1 -0
- package/build/types/index.js +1 -0
- package/build/types/toggleOptions.d.ts +2 -0
- package/build/utils/date.d.ts +5 -0
- package/build/utils/date.js +37 -0
- package/package.json +1 -2
- package/build/components/TableHeader/TableView/CreateViewDialog.d.ts +0 -3
- package/build/components/TableHeader/TableView/CreateViewDialog.js +0 -91
- package/build/components/TableHeader/TableView/ViewSelector.d.ts +0 -5
- package/build/components/TableHeader/TableView/ViewSelector.js +0 -81
- package/build/components/TableHeader/TableView/ViewsDropdown.d.ts +0 -5
- package/build/components/TableHeader/TableView/ViewsDropdown.js +0 -198
- package/build/components/TableHeader/TableView/components/ColumnList.d.ts +0 -3
- package/build/components/TableHeader/TableView/components/ColumnList.js +0 -70
- package/build/components/TableHeader/TableView/components/ViewsSubmenu.d.ts +0 -3
- package/build/components/TableHeader/TableView/components/ViewsSubmenu.js +0 -71
- package/build/components/TableHeader/TableView/components/index.d.ts +0 -2
- package/build/components/TableHeader/TableView/components/index.js +0 -2
- package/build/components/TableHeader/TableView/constants.d.ts +0 -10
- package/build/components/TableHeader/TableView/constants.js +0 -10
- package/build/components/TableHeader/TableView/data.d.ts +0 -5
- package/build/components/TableHeader/TableView/data.js +0 -48
- package/build/components/TableHeader/TableView/hooks/useCreateViewDialog.d.ts +0 -22
- package/build/components/TableHeader/TableView/hooks/useCreateViewDialog.js +0 -86
- package/build/components/TableHeader/TableView/hooks/useDialogPosition.d.ts +0 -8
- package/build/components/TableHeader/TableView/hooks/useDialogPosition.js +0 -16
- package/build/components/TableHeader/TableView/hooks/useNestedSubmenu.d.ts +0 -7
- package/build/components/TableHeader/TableView/hooks/useNestedSubmenu.js +0 -34
- package/build/components/TableHeader/TableView/hooks/useOriginalColumns.d.ts +0 -6
- package/build/components/TableHeader/TableView/hooks/useOriginalColumns.js +0 -18
- package/build/components/TableHeader/TableView/hooks/useSubmenuHover.d.ts +0 -8
- package/build/components/TableHeader/TableView/hooks/useSubmenuHover.js +0 -43
- package/build/components/TableHeader/TableView/hooks/useViewSelector.d.ts +0 -50
- package/build/components/TableHeader/TableView/hooks/useViewSelector.js +0 -239
- package/build/components/TableHeader/TableView/hooks/useViewsManager.d.ts +0 -20
- package/build/components/TableHeader/TableView/hooks/useViewsManager.js +0 -96
- package/build/components/TableHeader/TableView/styles.d.ts +0 -127
- package/build/components/TableHeader/TableView/styles.js +0 -426
- package/build/components/TableHeader/TableView/types.d.ts +0 -183
- package/build/components/TableHeader/TableView/utils.d.ts +0 -121
- package/build/components/TableHeader/TableView/utils.js +0 -463
- /package/build/{components/TableHeader/TableView/types.js → types/toggleOptions.js} +0 -0
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
export const advancedColumns = [
|
|
2
|
-
{
|
|
3
|
-
name: 'customer',
|
|
4
|
-
label: 'Customer',
|
|
5
|
-
selected: true,
|
|
6
|
-
menuItems: [
|
|
7
|
-
{ name: 'customer_id', label: 'ID', selected: true },
|
|
8
|
-
{ name: 'customer_name', label: 'Name', selected: true },
|
|
9
|
-
{ name: 'customer_email', label: 'Email', selected: true },
|
|
10
|
-
{ name: 'customer_phone', label: 'Phone', selected: false },
|
|
11
|
-
],
|
|
12
|
-
},
|
|
13
|
-
{
|
|
14
|
-
name: 'transaction',
|
|
15
|
-
label: 'Transaction',
|
|
16
|
-
selected: true,
|
|
17
|
-
menuItems: [
|
|
18
|
-
{ name: 'transaction_id', label: 'Transaction ID', selected: true },
|
|
19
|
-
{ name: 'transaction_amount', label: 'Amount', selected: true },
|
|
20
|
-
{ name: 'transaction_status', label: 'Status', selected: false },
|
|
21
|
-
{ name: 'transaction_type', label: 'Type', selected: false },
|
|
22
|
-
],
|
|
23
|
-
},
|
|
24
|
-
{
|
|
25
|
-
name: 'payment',
|
|
26
|
-
label: 'Payment',
|
|
27
|
-
selected: false,
|
|
28
|
-
menuItems: [
|
|
29
|
-
{ name: 'payment_method', label: 'Method', selected: false },
|
|
30
|
-
{ name: 'payment_card', label: 'Card', selected: false },
|
|
31
|
-
{ name: 'payment_bank', label: 'Bank', selected: false },
|
|
32
|
-
],
|
|
33
|
-
},
|
|
34
|
-
];
|
|
35
|
-
export const sheetColumns = [
|
|
36
|
-
{ name: 'customerID', label: 'Customer ID', selected: true },
|
|
37
|
-
{ name: 'customerName', label: 'Customer Name', selected: true },
|
|
38
|
-
{ name: 'amount', label: 'Amount', selected: true },
|
|
39
|
-
{ name: 'status', label: 'Status', selected: false },
|
|
40
|
-
{ name: 'currency', label: 'Currency', selected: false },
|
|
41
|
-
{ name: 'reference', label: 'Reference', selected: true },
|
|
42
|
-
];
|
|
43
|
-
export const defaultViewList = [
|
|
44
|
-
{
|
|
45
|
-
label: 'Default',
|
|
46
|
-
id: 'default',
|
|
47
|
-
},
|
|
48
|
-
];
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
/// <reference types="react" />
|
|
2
|
-
import type { ColumnViewProps } from '../../../../types/index.js';
|
|
3
|
-
import type { UseCreateViewDialogProps } from '../types';
|
|
4
|
-
export declare const useCreateViewDialog: ({ open, availableColumns, defaultColumns, editingView, tableViews }: UseCreateViewDialogProps) => {
|
|
5
|
-
templateName: string;
|
|
6
|
-
setTemplateName: import("react").Dispatch<import("react").SetStateAction<string>>;
|
|
7
|
-
selectedColumns: ColumnViewProps[];
|
|
8
|
-
columnNames: string[];
|
|
9
|
-
allSelected: boolean;
|
|
10
|
-
someSelected: boolean;
|
|
11
|
-
isNameValid: boolean;
|
|
12
|
-
hoveredColumn: string | null;
|
|
13
|
-
anchorEl: HTMLElement | null;
|
|
14
|
-
openSubmenu: (columnName: string, element: HTMLElement) => void;
|
|
15
|
-
closeSubmenu: () => void;
|
|
16
|
-
cancelClose: () => void;
|
|
17
|
-
handleReorder: (reorderedNames: string[]) => void;
|
|
18
|
-
handleColumnToggle: (columnName: string) => void;
|
|
19
|
-
handleSubItemToggle: (columnName: string, subItemName: string) => void;
|
|
20
|
-
handleSelectAll: () => void;
|
|
21
|
-
handleResetToDefault: () => void;
|
|
22
|
-
};
|
|
@@ -1,86 +0,0 @@
|
|
|
1
|
-
import { useState, useEffect, useMemo, useRef } from 'react';
|
|
2
|
-
import { DATE_COLUMN_CONFIG, TEMPLATE_NAME_MAX_LENGTH } from '../constants';
|
|
3
|
-
import { initializeEditingColumns, initializeCreateColumns, initializeCreateColumnsWithCurrentState, resetColumnsToDefault, toggleColumn, toggleSubItem, toggleAllColumns, areAllColumnsSelected, areSomeColumnsSelected, isValidTemplateName, } from '../utils';
|
|
4
|
-
import { useSubmenuHover } from './useSubmenuHover';
|
|
5
|
-
export const useCreateViewDialog = ({ open, availableColumns, defaultColumns, editingView, tableViews = [] }) => {
|
|
6
|
-
const [templateName, setTemplateName] = useState(() => (editingView === null || editingView === void 0 ? void 0 : editingView.label) || '');
|
|
7
|
-
const [selectedColumns, setSelectedColumns] = useState([]);
|
|
8
|
-
const previousOpenRef = useRef(false);
|
|
9
|
-
const { hoveredColumn, anchorEl, openSubmenu, closeSubmenu, cancelClose } = useSubmenuHover();
|
|
10
|
-
const dateColumn = DATE_COLUMN_CONFIG;
|
|
11
|
-
useEffect(() => {
|
|
12
|
-
var _a, _b;
|
|
13
|
-
if (!open) {
|
|
14
|
-
previousOpenRef.current = false;
|
|
15
|
-
return;
|
|
16
|
-
}
|
|
17
|
-
const wasClosed = !previousOpenRef.current;
|
|
18
|
-
if (wasClosed && open) {
|
|
19
|
-
if (editingView) {
|
|
20
|
-
// Use the saved submenu from editingView if available, otherwise fall back to defaultColumns
|
|
21
|
-
const savedColumns = editingView.submenu && editingView.submenu.length > 0 ? editingView.submenu : defaultColumns;
|
|
22
|
-
const otherColumns = initializeEditingColumns(savedColumns, availableColumns);
|
|
23
|
-
setSelectedColumns([dateColumn, ...otherColumns]);
|
|
24
|
-
// Ensure templateName is set to editingView.label (fallback to empty string if undefined)
|
|
25
|
-
const nameToSet = ((_a = editingView.label) === null || _a === void 0 ? void 0 : _a.trim()) || '';
|
|
26
|
-
setTemplateName(nameToSet);
|
|
27
|
-
}
|
|
28
|
-
else {
|
|
29
|
-
const otherColumns = tableViews && tableViews.length > 0
|
|
30
|
-
? initializeCreateColumnsWithCurrentState(availableColumns, tableViews)
|
|
31
|
-
: initializeCreateColumns(availableColumns);
|
|
32
|
-
setSelectedColumns([dateColumn, ...otherColumns]);
|
|
33
|
-
setTemplateName('');
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
else if (open && editingView) {
|
|
37
|
-
// Update templateName when editingView changes while dialog is open
|
|
38
|
-
const nameToSet = ((_b = editingView.label) === null || _b === void 0 ? void 0 : _b.trim()) || '';
|
|
39
|
-
setTemplateName(nameToSet);
|
|
40
|
-
}
|
|
41
|
-
previousOpenRef.current = open;
|
|
42
|
-
}, [open, editingView === null || editingView === void 0 ? void 0 : editingView.id, editingView === null || editingView === void 0 ? void 0 : editingView.label, editingView === null || editingView === void 0 ? void 0 : editingView.submenu, availableColumns, defaultColumns, tableViews, dateColumn]);
|
|
43
|
-
const columnNames = useMemo(() => selectedColumns.map((col) => col.name), [selectedColumns]);
|
|
44
|
-
const allSelected = useMemo(() => areAllColumnsSelected(selectedColumns), [selectedColumns]);
|
|
45
|
-
const someSelected = useMemo(() => areSomeColumnsSelected(selectedColumns, allSelected), [selectedColumns, allSelected]);
|
|
46
|
-
const isNameValid = useMemo(() => isValidTemplateName(templateName, TEMPLATE_NAME_MAX_LENGTH), [templateName]);
|
|
47
|
-
const handleReorder = (reorderedNames) => {
|
|
48
|
-
const reorderedColumns = reorderedNames
|
|
49
|
-
.map((name) => selectedColumns.find((col) => col.name === name))
|
|
50
|
-
.filter((col) => Boolean(col));
|
|
51
|
-
setSelectedColumns(reorderedColumns);
|
|
52
|
-
};
|
|
53
|
-
const handleColumnToggle = (columnName) => {
|
|
54
|
-
setSelectedColumns((prev) => toggleColumn(prev, columnName));
|
|
55
|
-
};
|
|
56
|
-
const handleSubItemToggle = (columnName, subItemName) => {
|
|
57
|
-
setSelectedColumns((prev) => toggleSubItem(prev, columnName, subItemName));
|
|
58
|
-
};
|
|
59
|
-
const handleSelectAll = () => {
|
|
60
|
-
setSelectedColumns((prev) => toggleAllColumns(prev, !allSelected));
|
|
61
|
-
};
|
|
62
|
-
const handleResetToDefault = () => {
|
|
63
|
-
const columnsSource = defaultColumns.length > 0 ? defaultColumns : availableColumns;
|
|
64
|
-
const otherColumns = resetColumnsToDefault(columnsSource);
|
|
65
|
-
setSelectedColumns([dateColumn, ...otherColumns]);
|
|
66
|
-
};
|
|
67
|
-
return {
|
|
68
|
-
templateName,
|
|
69
|
-
setTemplateName,
|
|
70
|
-
selectedColumns,
|
|
71
|
-
columnNames,
|
|
72
|
-
allSelected,
|
|
73
|
-
someSelected,
|
|
74
|
-
isNameValid,
|
|
75
|
-
hoveredColumn,
|
|
76
|
-
anchorEl,
|
|
77
|
-
openSubmenu,
|
|
78
|
-
closeSubmenu,
|
|
79
|
-
cancelClose,
|
|
80
|
-
handleReorder,
|
|
81
|
-
handleColumnToggle,
|
|
82
|
-
handleSubItemToggle,
|
|
83
|
-
handleSelectAll,
|
|
84
|
-
handleResetToDefault,
|
|
85
|
-
};
|
|
86
|
-
};
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import { useState, useCallback } from 'react';
|
|
2
|
-
export const useDialogPosition = (dialogWidth, dialogHeight) => {
|
|
3
|
-
const [position, setPosition] = useState({ x: 0, y: 0 });
|
|
4
|
-
const resetPosition = useCallback(() => {
|
|
5
|
-
const centerX = window.innerWidth / 2 - dialogWidth / 2;
|
|
6
|
-
const centerY = window.innerHeight / 2 - dialogHeight / 2;
|
|
7
|
-
setPosition({
|
|
8
|
-
x: Math.max(0, centerX),
|
|
9
|
-
y: Math.max(0, centerY),
|
|
10
|
-
});
|
|
11
|
-
}, [dialogWidth, dialogHeight]);
|
|
12
|
-
const updatePosition = useCallback((x, y) => {
|
|
13
|
-
setPosition({ x, y });
|
|
14
|
-
}, []);
|
|
15
|
-
return { position, resetPosition, updatePosition };
|
|
16
|
-
};
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
export declare const useNestedSubmenu: () => {
|
|
2
|
-
hoveredNestedColumn: string | null;
|
|
3
|
-
nestedSubmenuAnchorEl: HTMLElement | null;
|
|
4
|
-
openNestedSubmenu: (columnName: string, element: HTMLElement) => void;
|
|
5
|
-
closeNestedSubmenu: () => void;
|
|
6
|
-
cancelNestedClose: () => void;
|
|
7
|
-
};
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
import { useState, useRef, useCallback } from 'react';
|
|
2
|
-
import { SUBMENU_CLOSE_DELAY } from '../constants';
|
|
3
|
-
export const useNestedSubmenu = () => {
|
|
4
|
-
const [hoveredNestedColumn, setHoveredNestedColumn] = useState(null);
|
|
5
|
-
const [nestedSubmenuAnchorEl, setNestedSubmenuAnchorEl] = useState(null);
|
|
6
|
-
const nestedCloseTimeoutRef = useRef(null);
|
|
7
|
-
const openNestedSubmenu = useCallback((columnName, element) => {
|
|
8
|
-
if (nestedCloseTimeoutRef.current) {
|
|
9
|
-
clearTimeout(nestedCloseTimeoutRef.current);
|
|
10
|
-
nestedCloseTimeoutRef.current = null;
|
|
11
|
-
}
|
|
12
|
-
setHoveredNestedColumn(columnName);
|
|
13
|
-
setNestedSubmenuAnchorEl(element);
|
|
14
|
-
}, []);
|
|
15
|
-
const closeNestedSubmenu = useCallback(() => {
|
|
16
|
-
nestedCloseTimeoutRef.current = setTimeout(() => {
|
|
17
|
-
setHoveredNestedColumn(null);
|
|
18
|
-
setNestedSubmenuAnchorEl(null);
|
|
19
|
-
}, SUBMENU_CLOSE_DELAY);
|
|
20
|
-
}, []);
|
|
21
|
-
const cancelNestedClose = useCallback(() => {
|
|
22
|
-
if (nestedCloseTimeoutRef.current) {
|
|
23
|
-
clearTimeout(nestedCloseTimeoutRef.current);
|
|
24
|
-
nestedCloseTimeoutRef.current = null;
|
|
25
|
-
}
|
|
26
|
-
}, []);
|
|
27
|
-
return {
|
|
28
|
-
hoveredNestedColumn,
|
|
29
|
-
nestedSubmenuAnchorEl,
|
|
30
|
-
openNestedSubmenu,
|
|
31
|
-
closeNestedSubmenu,
|
|
32
|
-
cancelNestedClose,
|
|
33
|
-
};
|
|
34
|
-
};
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import { useState, useCallback } from 'react';
|
|
2
|
-
export const useOriginalColumns = (defaultColumns) => {
|
|
3
|
-
const [originalColumns, setOriginalColumns] = useState([]);
|
|
4
|
-
const saveOriginalState = useCallback(() => {
|
|
5
|
-
setOriginalColumns(defaultColumns.map((col) => {
|
|
6
|
-
var _a;
|
|
7
|
-
return (Object.assign(Object.assign({}, col), { selected: col.selected, menuItems: (_a = col.menuItems) === null || _a === void 0 ? void 0 : _a.map((item) => (Object.assign(Object.assign({}, item), { selected: item.selected }))) }));
|
|
8
|
-
}));
|
|
9
|
-
}, [defaultColumns]);
|
|
10
|
-
const clearOriginalState = useCallback(() => {
|
|
11
|
-
setOriginalColumns([]);
|
|
12
|
-
}, []);
|
|
13
|
-
return {
|
|
14
|
-
originalColumns,
|
|
15
|
-
saveOriginalState,
|
|
16
|
-
clearOriginalState,
|
|
17
|
-
};
|
|
18
|
-
};
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
import { useState, useRef, useCallback } from 'react';
|
|
2
|
-
import { SUBMENU_CLOSE_DELAY } from '../constants';
|
|
3
|
-
export const useSubmenuHover = () => {
|
|
4
|
-
const [hoveredColumn, setHoveredColumn] = useState(null);
|
|
5
|
-
const [anchorEl, setAnchorEl] = useState(null);
|
|
6
|
-
const closeTimeoutRef = useRef(null);
|
|
7
|
-
const openSubmenu = useCallback((columnName, element) => {
|
|
8
|
-
if (closeTimeoutRef.current) {
|
|
9
|
-
clearTimeout(closeTimeoutRef.current);
|
|
10
|
-
closeTimeoutRef.current = null;
|
|
11
|
-
}
|
|
12
|
-
setHoveredColumn(columnName);
|
|
13
|
-
setAnchorEl(element);
|
|
14
|
-
}, []);
|
|
15
|
-
const closeSubmenu = useCallback(() => {
|
|
16
|
-
closeTimeoutRef.current = setTimeout(() => {
|
|
17
|
-
setHoveredColumn(null);
|
|
18
|
-
setAnchorEl(null);
|
|
19
|
-
}, SUBMENU_CLOSE_DELAY);
|
|
20
|
-
}, []);
|
|
21
|
-
const cancelClose = useCallback(() => {
|
|
22
|
-
if (closeTimeoutRef.current) {
|
|
23
|
-
clearTimeout(closeTimeoutRef.current);
|
|
24
|
-
closeTimeoutRef.current = null;
|
|
25
|
-
}
|
|
26
|
-
}, []);
|
|
27
|
-
const forceClose = useCallback(() => {
|
|
28
|
-
if (closeTimeoutRef.current) {
|
|
29
|
-
clearTimeout(closeTimeoutRef.current);
|
|
30
|
-
closeTimeoutRef.current = null;
|
|
31
|
-
}
|
|
32
|
-
setHoveredColumn(null);
|
|
33
|
-
setAnchorEl(null);
|
|
34
|
-
}, []);
|
|
35
|
-
return {
|
|
36
|
-
hoveredColumn,
|
|
37
|
-
anchorEl,
|
|
38
|
-
openSubmenu,
|
|
39
|
-
closeSubmenu,
|
|
40
|
-
cancelClose,
|
|
41
|
-
forceClose,
|
|
42
|
-
};
|
|
43
|
-
};
|
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
import { type MouseEvent } from 'react';
|
|
2
|
-
import type { ColumnViewProps, TableMode } from '../../../../types/index.js';
|
|
3
|
-
import type { ViewMenuItem, LayoutSection } from '../types';
|
|
4
|
-
import type { ViewOption } from '../../type';
|
|
5
|
-
export interface UseViewSelectorProps {
|
|
6
|
-
mode: TableMode;
|
|
7
|
-
onViewChange?: (selectedView?: ViewMenuItem) => void;
|
|
8
|
-
onCreateCustomView?: (data: {
|
|
9
|
-
name: string;
|
|
10
|
-
selectedColumns: ColumnViewProps[];
|
|
11
|
-
layout: LayoutSection;
|
|
12
|
-
}) => Promise<void>;
|
|
13
|
-
onEditCustomView?: (viewId: string, data: {
|
|
14
|
-
name: string;
|
|
15
|
-
selectedColumns: ColumnViewProps[];
|
|
16
|
-
layout: LayoutSection;
|
|
17
|
-
}) => Promise<void>;
|
|
18
|
-
onDeleteCustomView?: (viewId: string) => Promise<void>;
|
|
19
|
-
customViews: ViewMenuItem[];
|
|
20
|
-
defaultColumns: ColumnViewProps[];
|
|
21
|
-
defaultTemplate?: ViewMenuItem;
|
|
22
|
-
allTemplates: ViewMenuItem[];
|
|
23
|
-
setInternalCustomViews: (views: ViewMenuItem[]) => void;
|
|
24
|
-
}
|
|
25
|
-
export declare const useViewSelector: ({ mode, onViewChange, onCreateCustomView, onEditCustomView, onDeleteCustomView, customViews, defaultColumns, defaultTemplate, allTemplates, setInternalCustomViews, }: UseViewSelectorProps) => {
|
|
26
|
-
anchorViewEl: HTMLDivElement | null;
|
|
27
|
-
defaultViewEl: HTMLDivElement | null;
|
|
28
|
-
setDefaultViewElement: import("react").Dispatch<import("react").SetStateAction<HTMLDivElement | null>>;
|
|
29
|
-
isCreateDialogOpen: boolean;
|
|
30
|
-
editingView: ViewMenuItem | null;
|
|
31
|
-
selectedViewInfo: ViewOption;
|
|
32
|
-
shouldUseCurrentState: boolean;
|
|
33
|
-
selectedView: ViewMenuItem | undefined;
|
|
34
|
-
currentViewColumns: ColumnViewProps[];
|
|
35
|
-
handleViewButtonClick: (event: MouseEvent<HTMLDivElement>) => void;
|
|
36
|
-
handleCloseViewDropdown: () => void;
|
|
37
|
-
handleSelectedViewInfo: (selected: ViewOption, viewMenuItem?: ViewMenuItem) => void;
|
|
38
|
-
handleOpenCreateDialog: (useCurrentState?: boolean) => void;
|
|
39
|
-
handleOpenEditDialog: (view: ViewMenuItem) => void;
|
|
40
|
-
handleCloseCreateDialog: () => void;
|
|
41
|
-
handleSaveView: (data: {
|
|
42
|
-
name: string;
|
|
43
|
-
selectedColumns: ColumnViewProps[];
|
|
44
|
-
layout: LayoutSection;
|
|
45
|
-
}) => Promise<void>;
|
|
46
|
-
handleDeleteView: (viewId: string) => Promise<void>;
|
|
47
|
-
handleResetViews: () => void;
|
|
48
|
-
updateSelectedView: (updatedView: ViewMenuItem) => void;
|
|
49
|
-
updateCurrentViewColumns: (columns: ColumnViewProps[]) => void;
|
|
50
|
-
};
|
|
@@ -1,239 +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 { deepCloneColumns } from '../utils';
|
|
12
|
-
export const useViewSelector = ({ mode, onViewChange, onCreateCustomView, onEditCustomView, onDeleteCustomView, customViews, defaultColumns, defaultTemplate, allTemplates, setInternalCustomViews, }) => {
|
|
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
|
-
// Current view columns - this is what gets displayed and can be modified
|
|
21
|
-
const [currentViewColumns, setCurrentViewColumns] = useState([]);
|
|
22
|
-
const hasInitializedRef = useRef(false);
|
|
23
|
-
// Helper: Filter view to only include selected columns for parent
|
|
24
|
-
const getViewForParent = useCallback((view) => {
|
|
25
|
-
var _a;
|
|
26
|
-
const selectedColumns = ((_a = view.submenu) === null || _a === void 0 ? void 0 : _a.filter((col) => col.selected)) || [];
|
|
27
|
-
return Object.assign(Object.assign({}, view), { submenu: selectedColumns, columns: selectedColumns.map((col) => col.name) });
|
|
28
|
-
}, []);
|
|
29
|
-
// Initialize with default template on mount
|
|
30
|
-
useEffect(() => {
|
|
31
|
-
if (hasInitializedRef.current)
|
|
32
|
-
return;
|
|
33
|
-
if (!defaultTemplate)
|
|
34
|
-
return;
|
|
35
|
-
setSelectedView(defaultTemplate);
|
|
36
|
-
setCurrentViewColumns(deepCloneColumns(defaultColumns));
|
|
37
|
-
onViewChange === null || onViewChange === void 0 ? void 0 : onViewChange(getViewForParent(defaultTemplate));
|
|
38
|
-
hasInitializedRef.current = true;
|
|
39
|
-
}, [defaultTemplate, defaultColumns, onViewChange, getViewForParent]);
|
|
40
|
-
// Sync currentViewColumns with defaultColumns when they change (e.g., after save)
|
|
41
|
-
useEffect(() => {
|
|
42
|
-
if (!hasInitializedRef.current)
|
|
43
|
-
return;
|
|
44
|
-
if ((selectedView === null || selectedView === void 0 ? void 0 : selectedView.default) && defaultColumns.length > 0) {
|
|
45
|
-
setCurrentViewColumns(deepCloneColumns(defaultColumns));
|
|
46
|
-
}
|
|
47
|
-
}, [defaultColumns, selectedView === null || selectedView === void 0 ? void 0 : selectedView.default]);
|
|
48
|
-
// Track the last mode we successfully synced columns for
|
|
49
|
-
const lastSyncedModeRef = useRef(null);
|
|
50
|
-
// Handle mode changes - sync with allTemplates updates
|
|
51
|
-
// This effect needs to run whenever mode changes OR when defaultColumns/allTemplates update
|
|
52
|
-
useEffect(() => {
|
|
53
|
-
if (!hasInitializedRef.current)
|
|
54
|
-
return;
|
|
55
|
-
if (!selectedView)
|
|
56
|
-
return;
|
|
57
|
-
// Check if we need to sync: either mode changed, or we haven't synced for current mode yet
|
|
58
|
-
const needsSync = lastSyncedModeRef.current !== mode;
|
|
59
|
-
if (!needsSync)
|
|
60
|
-
return;
|
|
61
|
-
// For default template, wait until defaultColumns has data for the new mode
|
|
62
|
-
if (selectedView.default) {
|
|
63
|
-
if (defaultColumns.length === 0)
|
|
64
|
-
return; // Wait for columns to load
|
|
65
|
-
const newView = Object.assign(Object.assign({}, selectedView), { submenu: deepCloneColumns(defaultColumns), columns: defaultColumns.map((col) => col.name) });
|
|
66
|
-
setSelectedView(newView);
|
|
67
|
-
setCurrentViewColumns(deepCloneColumns(defaultColumns));
|
|
68
|
-
lastSyncedModeRef.current = mode; // Mark as synced only after successful update
|
|
69
|
-
onViewChange === null || onViewChange === void 0 ? void 0 : onViewChange(getViewForParent(newView));
|
|
70
|
-
}
|
|
71
|
-
else {
|
|
72
|
-
// Custom template: find it in allTemplates (which has new mode's columns)
|
|
73
|
-
const updatedTemplate = allTemplates.find((t) => t.templateId === selectedView.templateId || t.id === selectedView.id);
|
|
74
|
-
if (updatedTemplate && updatedTemplate.submenu && updatedTemplate.submenu.length > 0) {
|
|
75
|
-
const newView = Object.assign(Object.assign({}, updatedTemplate), { submenu: deepCloneColumns(updatedTemplate.submenu) });
|
|
76
|
-
setSelectedView(newView);
|
|
77
|
-
setCurrentViewColumns(deepCloneColumns(updatedTemplate.submenu));
|
|
78
|
-
lastSyncedModeRef.current = mode; // Mark as synced only after successful update
|
|
79
|
-
onViewChange === null || onViewChange === void 0 ? void 0 : onViewChange(getViewForParent(newView));
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
}, [mode, defaultColumns, selectedView, allTemplates, onViewChange]);
|
|
83
|
-
// Track template updates ref to detect external changes
|
|
84
|
-
const templatesUpdateRef = useRef(0);
|
|
85
|
-
// Sync selected view when templates change (for edits/updates)
|
|
86
|
-
// This ensures that template edits automatically reflect in the selected view
|
|
87
|
-
// ONLY when triggered by explicit save actions (Okay/Update buttons)
|
|
88
|
-
useEffect(() => {
|
|
89
|
-
var _a;
|
|
90
|
-
if (!hasInitializedRef.current)
|
|
91
|
-
return;
|
|
92
|
-
if (!selectedView)
|
|
93
|
-
return;
|
|
94
|
-
// Find the current selected view in updated allTemplates
|
|
95
|
-
const updatedTemplate = allTemplates.find((t) => {
|
|
96
|
-
const templateId = t.templateId || t.id;
|
|
97
|
-
const selectedId = selectedView.templateId || selectedView.id;
|
|
98
|
-
return templateId === selectedId;
|
|
99
|
-
});
|
|
100
|
-
if (!updatedTemplate)
|
|
101
|
-
return;
|
|
102
|
-
// Check if the template has actually changed by comparing submenu
|
|
103
|
-
const currentSubmenu = selectedView.submenu || [];
|
|
104
|
-
const updatedSubmenu = updatedTemplate.submenu || [];
|
|
105
|
-
// Simple check: if lengths differ or selected states differ, update
|
|
106
|
-
const hasChanged = currentSubmenu.length !== updatedSubmenu.length ||
|
|
107
|
-
currentSubmenu.some((col, idx) => {
|
|
108
|
-
const updatedCol = updatedSubmenu[idx];
|
|
109
|
-
if (!updatedCol)
|
|
110
|
-
return true;
|
|
111
|
-
return col.selected !== updatedCol.selected || col.name !== updatedCol.name;
|
|
112
|
-
});
|
|
113
|
-
if (hasChanged) {
|
|
114
|
-
console.log('🔄 Template updated, syncing selected view:', selectedView.label);
|
|
115
|
-
console.log(' Old columns count:', currentSubmenu.length, 'New columns count:', updatedSubmenu.length);
|
|
116
|
-
console.log(' Old selected:', currentSubmenu.filter((c) => c.selected).length, 'New selected:', updatedSubmenu.filter((c) => c.selected).length);
|
|
117
|
-
// Store the full view internally (with all columns)
|
|
118
|
-
const fullView = Object.assign(Object.assign({}, updatedTemplate), { submenu: deepCloneColumns(updatedTemplate.submenu || []) });
|
|
119
|
-
setSelectedView(fullView);
|
|
120
|
-
setCurrentViewColumns(deepCloneColumns(updatedTemplate.submenu || []));
|
|
121
|
-
// Pass only selected columns to parent
|
|
122
|
-
const viewForParent = getViewForParent(fullView);
|
|
123
|
-
console.log('✅ Calling onViewChange with', (_a = viewForParent.submenu) === null || _a === void 0 ? void 0 : _a.length, 'selected columns');
|
|
124
|
-
onViewChange === null || onViewChange === void 0 ? void 0 : onViewChange(viewForParent);
|
|
125
|
-
templatesUpdateRef.current++;
|
|
126
|
-
}
|
|
127
|
-
}, [allTemplates, selectedView, onViewChange]);
|
|
128
|
-
const handleViewButtonClick = useCallback((event) => {
|
|
129
|
-
setAnchorViewEl(event.currentTarget);
|
|
130
|
-
setDefaultViewElement(event.currentTarget);
|
|
131
|
-
}, []);
|
|
132
|
-
const handleCloseViewDropdown = useCallback(() => {
|
|
133
|
-
setDefaultViewElement(null);
|
|
134
|
-
}, []);
|
|
135
|
-
const handleSelectedViewInfo = useCallback((selected, viewMenuItem) => {
|
|
136
|
-
setSelectedViewInfo(selected);
|
|
137
|
-
const newSelectedView = viewMenuItem || undefined;
|
|
138
|
-
setSelectedView(newSelectedView);
|
|
139
|
-
setCurrentViewColumns(deepCloneColumns((newSelectedView === null || newSelectedView === void 0 ? void 0 : newSelectedView.submenu) || []));
|
|
140
|
-
if (newSelectedView) {
|
|
141
|
-
onViewChange === null || onViewChange === void 0 ? void 0 : onViewChange(getViewForParent(newSelectedView));
|
|
142
|
-
}
|
|
143
|
-
else {
|
|
144
|
-
onViewChange === null || onViewChange === void 0 ? void 0 : onViewChange(undefined);
|
|
145
|
-
}
|
|
146
|
-
handleCloseViewDropdown();
|
|
147
|
-
}, [handleCloseViewDropdown, onViewChange, getViewForParent]);
|
|
148
|
-
// Update selected view with modified columns
|
|
149
|
-
const updateSelectedView = useCallback((updatedView) => {
|
|
150
|
-
var _a, _b;
|
|
151
|
-
console.log('🔴 updateSelectedView called:', {
|
|
152
|
-
id: updatedView.id,
|
|
153
|
-
columnsCount: (_a = updatedView.submenu) === null || _a === void 0 ? void 0 : _a.length,
|
|
154
|
-
selectedColumns: (_b = updatedView.submenu) === null || _b === void 0 ? void 0 : _b.filter((c) => c.selected).length,
|
|
155
|
-
});
|
|
156
|
-
// CRITICAL: Force new object/array references to trigger React re-renders
|
|
157
|
-
const viewWithNewRefs = Object.assign(Object.assign({}, updatedView), { submenu: updatedView.submenu ? [...updatedView.submenu] : undefined, columns: updatedView.columns ? [...updatedView.columns] : undefined });
|
|
158
|
-
setSelectedView(viewWithNewRefs);
|
|
159
|
-
setCurrentViewColumns(deepCloneColumns(viewWithNewRefs.submenu || []));
|
|
160
|
-
setSelectedViewInfo({ id: viewWithNewRefs.id, label: viewWithNewRefs.label });
|
|
161
|
-
onViewChange === null || onViewChange === void 0 ? void 0 : onViewChange(getViewForParent(viewWithNewRefs));
|
|
162
|
-
}, [onViewChange, getViewForParent]);
|
|
163
|
-
// Update current view columns (for temporary modifications)
|
|
164
|
-
const updateCurrentViewColumns = useCallback((columns) => {
|
|
165
|
-
setCurrentViewColumns(columns);
|
|
166
|
-
}, []);
|
|
167
|
-
const handleOpenCreateDialog = useCallback((useCurrentState = false) => {
|
|
168
|
-
setEditingView(null);
|
|
169
|
-
setShouldUseCurrentState(useCurrentState);
|
|
170
|
-
setIsCreateDialogOpen(true);
|
|
171
|
-
setDefaultViewElement(null);
|
|
172
|
-
}, []);
|
|
173
|
-
const handleOpenEditDialog = useCallback((view) => {
|
|
174
|
-
setEditingView(view);
|
|
175
|
-
setShouldUseCurrentState(true);
|
|
176
|
-
setIsCreateDialogOpen(true);
|
|
177
|
-
}, []);
|
|
178
|
-
const handleCloseCreateDialog = useCallback(() => {
|
|
179
|
-
setIsCreateDialogOpen(false);
|
|
180
|
-
setEditingView(null);
|
|
181
|
-
setShouldUseCurrentState(false);
|
|
182
|
-
}, []);
|
|
183
|
-
const handleSaveView = useCallback((data) => __awaiter(void 0, void 0, void 0, function* () {
|
|
184
|
-
if (editingView) {
|
|
185
|
-
const templateId = editingView.templateId || editingView.id;
|
|
186
|
-
// Call the edit handler - parent will update templates
|
|
187
|
-
yield (onEditCustomView === null || onEditCustomView === void 0 ? void 0 : onEditCustomView(templateId, data));
|
|
188
|
-
// After edit completes successfully, the template will be updated externally via templates prop
|
|
189
|
-
// The useEffect watching allTemplates will automatically sync the view
|
|
190
|
-
console.log('✅ View saved - templates will update and trigger sync');
|
|
191
|
-
}
|
|
192
|
-
else {
|
|
193
|
-
// Call the create handler - parent will add new template
|
|
194
|
-
yield (onCreateCustomView === null || onCreateCustomView === void 0 ? void 0 : onCreateCustomView(data));
|
|
195
|
-
// After create completes successfully, the new template will be added externally via templates prop
|
|
196
|
-
// The new template will automatically appear in the dropdown
|
|
197
|
-
console.log('✅ View created - new template will appear in dropdown');
|
|
198
|
-
}
|
|
199
|
-
}), [editingView, onEditCustomView, onCreateCustomView]);
|
|
200
|
-
const handleDeleteView = useCallback((viewId) => __awaiter(void 0, void 0, void 0, function* () {
|
|
201
|
-
const viewToDelete = allTemplates.find((view) => view.id === viewId || view.templateId === viewId);
|
|
202
|
-
const templateId = (viewToDelete === null || viewToDelete === void 0 ? void 0 : viewToDelete.templateId) || viewId;
|
|
203
|
-
yield (onDeleteCustomView === null || onDeleteCustomView === void 0 ? void 0 : onDeleteCustomView(templateId));
|
|
204
|
-
// If deleted view was selected, reset to default
|
|
205
|
-
if ((selectedView === null || selectedView === void 0 ? void 0 : selectedView.id) === viewId || (selectedView === null || selectedView === void 0 ? void 0 : selectedView.templateId) === viewId) {
|
|
206
|
-
setSelectedView(defaultTemplate);
|
|
207
|
-
setCurrentViewColumns(deepCloneColumns(defaultColumns));
|
|
208
|
-
if (defaultTemplate) {
|
|
209
|
-
onViewChange === null || onViewChange === void 0 ? void 0 : onViewChange(getViewForParent(defaultTemplate));
|
|
210
|
-
}
|
|
211
|
-
}
|
|
212
|
-
}), [allTemplates, onDeleteCustomView, selectedView, defaultTemplate, defaultColumns, onViewChange, getViewForParent]);
|
|
213
|
-
// Reset views to default
|
|
214
|
-
const handleResetViews = useCallback(() => {
|
|
215
|
-
setCurrentViewColumns(deepCloneColumns(defaultColumns));
|
|
216
|
-
}, [defaultColumns]);
|
|
217
|
-
return {
|
|
218
|
-
anchorViewEl,
|
|
219
|
-
defaultViewEl,
|
|
220
|
-
setDefaultViewElement,
|
|
221
|
-
isCreateDialogOpen,
|
|
222
|
-
editingView,
|
|
223
|
-
selectedViewInfo,
|
|
224
|
-
shouldUseCurrentState,
|
|
225
|
-
selectedView,
|
|
226
|
-
currentViewColumns,
|
|
227
|
-
handleViewButtonClick,
|
|
228
|
-
handleCloseViewDropdown,
|
|
229
|
-
handleSelectedViewInfo,
|
|
230
|
-
handleOpenCreateDialog,
|
|
231
|
-
handleOpenEditDialog,
|
|
232
|
-
handleCloseCreateDialog,
|
|
233
|
-
handleSaveView,
|
|
234
|
-
handleDeleteView,
|
|
235
|
-
handleResetViews,
|
|
236
|
-
updateSelectedView,
|
|
237
|
-
updateCurrentViewColumns,
|
|
238
|
-
};
|
|
239
|
-
};
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
/// <reference types="react" />
|
|
2
|
-
import type { ColumnViewProps } from '../../../../types/index.js';
|
|
3
|
-
import type { UseViewsManagerProps, ViewMenuItem } from '../types';
|
|
4
|
-
/**
|
|
5
|
-
* Simplified hook for managing templates and views.
|
|
6
|
-
*
|
|
7
|
-
* Key principles:
|
|
8
|
-
* - Templates from parent are parsed into allTemplates
|
|
9
|
-
* - defaultColumns is the local working copy that can be modified
|
|
10
|
-
* - When user modifies default template, we keep changes locally
|
|
11
|
-
*/
|
|
12
|
-
export declare const useViewsManager: ({ tableMode, templates, lang }: UseViewsManagerProps) => {
|
|
13
|
-
defaultTemplate: ViewMenuItem | undefined;
|
|
14
|
-
customViews: ViewMenuItem[];
|
|
15
|
-
allTemplates: ViewMenuItem[];
|
|
16
|
-
defaultColumns: ColumnViewProps[];
|
|
17
|
-
updateDefaultColumns: (columns: ColumnViewProps[]) => void;
|
|
18
|
-
internalCustomViews: ViewMenuItem[];
|
|
19
|
-
setInternalCustomViews: import("react").Dispatch<import("react").SetStateAction<ViewMenuItem[]>>;
|
|
20
|
-
};
|