@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.
Files changed (68) hide show
  1. package/build/components/FilterDropdown/FilterDropdown.d.ts +11 -4
  2. package/build/components/FilterDropdown/FilterDropdown.js +18 -4
  3. package/build/components/FilterDropdown/style.js +1 -1
  4. package/build/components/MultiDatakeyDonut/MultiDatakeyDonut.d.ts +12 -0
  5. package/build/components/MultiDatakeyDonut/MultiDatakeyDonut.js +19 -0
  6. package/build/components/MultiDatakeyDonut/index.d.ts +1 -0
  7. package/build/components/MultiDatakeyDonut/index.js +1 -0
  8. package/build/components/MultiDatakeyDonut/style.d.ts +10 -0
  9. package/build/components/MultiDatakeyDonut/style.js +23 -0
  10. package/build/components/RangeCalender/RangeCalender.js +4 -2
  11. package/build/components/TableHeader/FiltersRow.d.ts +1 -1
  12. package/build/components/TableHeader/FiltersRow.js +2 -4
  13. package/build/components/TableHeader/TableHeader.d.ts +1 -1
  14. package/build/components/TableHeader/TableHeader.js +2 -2
  15. package/build/components/TableHeader/TableView/CustomViews.js +1 -1
  16. package/build/components/TableHeader/TableView/TableView.js +1 -0
  17. package/build/components/TableHeader/TableView/hooks/index.d.ts +0 -6
  18. package/build/components/TableHeader/TableView/hooks/index.js +0 -6
  19. package/build/components/TableHeader/TableView/index.d.ts +3 -12
  20. package/build/components/TableHeader/TableView/index.js +3 -13
  21. package/build/components/TableHeader/index.d.ts +0 -1
  22. package/build/components/TableHeader/type.d.ts +1 -15
  23. package/build/components/index.d.ts +1 -0
  24. package/build/components/index.js +1 -0
  25. package/build/constants/assets.d.ts +3 -1
  26. package/build/constants/assets.js +3 -1
  27. package/build/types/index.d.ts +1 -0
  28. package/build/types/index.js +1 -0
  29. package/build/types/toggleOptions.d.ts +2 -0
  30. package/build/utils/date.d.ts +5 -0
  31. package/build/utils/date.js +37 -0
  32. package/package.json +1 -2
  33. package/build/components/TableHeader/TableView/CreateViewDialog.d.ts +0 -3
  34. package/build/components/TableHeader/TableView/CreateViewDialog.js +0 -91
  35. package/build/components/TableHeader/TableView/ViewSelector.d.ts +0 -5
  36. package/build/components/TableHeader/TableView/ViewSelector.js +0 -81
  37. package/build/components/TableHeader/TableView/ViewsDropdown.d.ts +0 -5
  38. package/build/components/TableHeader/TableView/ViewsDropdown.js +0 -198
  39. package/build/components/TableHeader/TableView/components/ColumnList.d.ts +0 -3
  40. package/build/components/TableHeader/TableView/components/ColumnList.js +0 -70
  41. package/build/components/TableHeader/TableView/components/ViewsSubmenu.d.ts +0 -3
  42. package/build/components/TableHeader/TableView/components/ViewsSubmenu.js +0 -71
  43. package/build/components/TableHeader/TableView/components/index.d.ts +0 -2
  44. package/build/components/TableHeader/TableView/components/index.js +0 -2
  45. package/build/components/TableHeader/TableView/constants.d.ts +0 -10
  46. package/build/components/TableHeader/TableView/constants.js +0 -10
  47. package/build/components/TableHeader/TableView/data.d.ts +0 -5
  48. package/build/components/TableHeader/TableView/data.js +0 -48
  49. package/build/components/TableHeader/TableView/hooks/useCreateViewDialog.d.ts +0 -22
  50. package/build/components/TableHeader/TableView/hooks/useCreateViewDialog.js +0 -86
  51. package/build/components/TableHeader/TableView/hooks/useDialogPosition.d.ts +0 -8
  52. package/build/components/TableHeader/TableView/hooks/useDialogPosition.js +0 -16
  53. package/build/components/TableHeader/TableView/hooks/useNestedSubmenu.d.ts +0 -7
  54. package/build/components/TableHeader/TableView/hooks/useNestedSubmenu.js +0 -34
  55. package/build/components/TableHeader/TableView/hooks/useOriginalColumns.d.ts +0 -6
  56. package/build/components/TableHeader/TableView/hooks/useOriginalColumns.js +0 -18
  57. package/build/components/TableHeader/TableView/hooks/useSubmenuHover.d.ts +0 -8
  58. package/build/components/TableHeader/TableView/hooks/useSubmenuHover.js +0 -43
  59. package/build/components/TableHeader/TableView/hooks/useViewSelector.d.ts +0 -50
  60. package/build/components/TableHeader/TableView/hooks/useViewSelector.js +0 -239
  61. package/build/components/TableHeader/TableView/hooks/useViewsManager.d.ts +0 -20
  62. package/build/components/TableHeader/TableView/hooks/useViewsManager.js +0 -96
  63. package/build/components/TableHeader/TableView/styles.d.ts +0 -127
  64. package/build/components/TableHeader/TableView/styles.js +0 -426
  65. package/build/components/TableHeader/TableView/types.d.ts +0 -183
  66. package/build/components/TableHeader/TableView/utils.d.ts +0 -121
  67. package/build/components/TableHeader/TableView/utils.js +0 -463
  68. /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,8 +0,0 @@
1
- export declare const useDialogPosition: (dialogWidth: number, dialogHeight: number) => {
2
- position: {
3
- x: number;
4
- y: number;
5
- };
6
- resetPosition: () => void;
7
- updatePosition: (x: number, y: number) => void;
8
- };
@@ -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,6 +0,0 @@
1
- import type { ColumnViewProps } from '../../../../types/index.js';
2
- export declare const useOriginalColumns: (defaultColumns: ColumnViewProps[]) => {
3
- originalColumns: ColumnViewProps[];
4
- saveOriginalState: () => void;
5
- clearOriginalState: () => void;
6
- };
@@ -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,8 +0,0 @@
1
- export declare const useSubmenuHover: () => {
2
- hoveredColumn: string | null;
3
- anchorEl: HTMLElement | null;
4
- openSubmenu: (columnName: string, element: HTMLElement) => void;
5
- closeSubmenu: () => void;
6
- cancelClose: () => void;
7
- forceClose: () => void;
8
- };
@@ -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
- };