@tap-payments/os-micro-frontend-shared 0.1.372-test.1 → 0.1.372-test.2-test.3-test.4-test.5
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/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/CreateViewDialog.js +3 -1
- package/build/components/TableHeader/TableView/ViewSelector.d.ts +5 -0
- package/build/components/TableHeader/TableView/ViewSelector.js +43 -0
- package/build/components/TableHeader/TableView/ViewsDropdown.js +50 -21
- package/build/components/TableHeader/TableView/components/ColumnList.js +4 -11
- package/build/components/TableHeader/TableView/components/ViewsSubmenu.js +4 -11
- package/build/components/TableHeader/TableView/hooks/index.d.ts +6 -0
- package/build/components/TableHeader/TableView/hooks/index.js +6 -0
- package/build/components/TableHeader/TableView/hooks/useCreateViewDialog.js +1 -1
- package/build/components/TableHeader/TableView/hooks/useDialogPosition.d.ts +8 -0
- package/build/components/TableHeader/TableView/hooks/useDialogPosition.js +16 -0
- package/build/components/TableHeader/TableView/hooks/useOriginalColumns.d.ts +6 -0
- package/build/components/TableHeader/TableView/hooks/useOriginalColumns.js +18 -0
- package/build/components/TableHeader/TableView/hooks/useSubmenuHover.d.ts +8 -0
- package/build/components/TableHeader/TableView/hooks/useSubmenuHover.js +43 -0
- package/build/components/TableHeader/TableView/hooks/useViewSelector.d.ts +54 -0
- package/build/components/TableHeader/TableView/hooks/useViewSelector.js +110 -0
- package/build/components/TableHeader/TableView/hooks/useViewsManager.d.ts +1 -1
- package/build/components/TableHeader/TableView/hooks/useViewsManager.js +83 -15
- package/build/components/TableHeader/TableView/index.d.ts +4 -4
- package/build/components/TableHeader/TableView/index.js +5 -3
- package/build/components/TableHeader/TableView/types.d.ts +21 -16
- package/build/components/TableHeader/TableView/utils.d.ts +10 -2
- package/build/components/TableHeader/TableView/utils.js +27 -11
- package/build/components/TableHeader/type.d.ts +1 -2
- package/package.json +2 -2
- package/build/components/TableHeader/TableView/ViewsManager.d.ts +0 -5
- package/build/components/TableHeader/TableView/ViewsManager.js +0 -123
- package/build/components/TableHeader/TableView/hooks.d.ts +0 -28
- package/build/components/TableHeader/TableView/hooks.js +0 -81
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
2
|
import type { ColumnViewProps } from '../../../../types/index.js';
|
|
3
3
|
import type { UseViewsManagerProps, ViewMenuItem } from '../types';
|
|
4
|
-
export declare const useViewsManager: ({ mode,
|
|
4
|
+
export declare const useViewsManager: ({ mode, templates, lang }: UseViewsManagerProps) => {
|
|
5
5
|
defaultColumns: ColumnViewProps[];
|
|
6
6
|
setDefaultColumns: import("react").Dispatch<import("react").SetStateAction<ColumnViewProps[]>>;
|
|
7
7
|
internalTableViews: ColumnViewProps[];
|
|
@@ -1,33 +1,101 @@
|
|
|
1
1
|
import { useState, useEffect, useMemo } from 'react';
|
|
2
|
-
import {
|
|
3
|
-
export const useViewsManager = ({ mode,
|
|
4
|
-
// Transform templates internally
|
|
2
|
+
import { transformTemplatesToViewMenuItems, getLayoutDataFromTemplates, getColumnsByMode } from '../utils';
|
|
3
|
+
export const useViewsManager = ({ mode, templates, lang = 'en' }) => {
|
|
4
|
+
// Transform templates internally - this is the only source of data
|
|
5
5
|
const transformedTemplates = useMemo(() => {
|
|
6
6
|
if (!templates)
|
|
7
7
|
return null;
|
|
8
8
|
const templatesArray = Array.isArray(templates) ? templates : templates.templates;
|
|
9
|
+
const { customViews, defaultTemplateColumns } = transformTemplatesToViewMenuItems(templatesArray, mode, lang);
|
|
10
|
+
// Use default template columns if available, otherwise use layoutData from all templates
|
|
11
|
+
const effectiveLayoutData = defaultTemplateColumns
|
|
12
|
+
? [
|
|
13
|
+
{
|
|
14
|
+
code: mode === 'advanced' ? 'Advanced' : 'Sheet',
|
|
15
|
+
columns: defaultTemplateColumns.map((col, idx) => {
|
|
16
|
+
var _a, _b;
|
|
17
|
+
return ({
|
|
18
|
+
code: col.name,
|
|
19
|
+
name: [{ text: typeof col.label === 'string' ? col.label : col.name, lang }],
|
|
20
|
+
order: idx + 1,
|
|
21
|
+
default: (_a = col.selected) !== null && _a !== void 0 ? _a : false,
|
|
22
|
+
fields: (_b = col.menuItems) === null || _b === void 0 ? void 0 : _b.map((item) => {
|
|
23
|
+
var _a;
|
|
24
|
+
return ({
|
|
25
|
+
code: item.name,
|
|
26
|
+
name: [{ text: typeof item.label === 'string' ? item.label : item.name, lang: '' }],
|
|
27
|
+
default: (_a = item.selected) !== null && _a !== void 0 ? _a : false,
|
|
28
|
+
});
|
|
29
|
+
}),
|
|
30
|
+
});
|
|
31
|
+
}),
|
|
32
|
+
},
|
|
33
|
+
]
|
|
34
|
+
: getLayoutDataFromTemplates(templatesArray);
|
|
9
35
|
return {
|
|
10
|
-
customViews
|
|
11
|
-
layoutData:
|
|
36
|
+
customViews,
|
|
37
|
+
layoutData: effectiveLayoutData,
|
|
38
|
+
defaultTemplateColumns,
|
|
12
39
|
};
|
|
13
40
|
}, [templates, mode, lang]);
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
41
|
+
const [defaultColumns, setDefaultColumns] = useState(() => {
|
|
42
|
+
// Only use data from templates - no other sources
|
|
43
|
+
if (templates) {
|
|
44
|
+
const templatesArray = Array.isArray(templates) ? templates : templates.templates;
|
|
45
|
+
const { defaultTemplateColumns } = transformTemplatesToViewMenuItems(templatesArray, mode, lang);
|
|
46
|
+
if (defaultTemplateColumns) {
|
|
47
|
+
return defaultTemplateColumns;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
// Return empty array if no templates
|
|
51
|
+
return [];
|
|
52
|
+
});
|
|
53
|
+
const [internalTableViews, setInternalTableViews] = useState(() => {
|
|
54
|
+
// Initialize from templates only
|
|
55
|
+
if (templates) {
|
|
56
|
+
const templatesArray = Array.isArray(templates) ? templates : templates.templates;
|
|
57
|
+
const { defaultTemplateColumns } = transformTemplatesToViewMenuItems(templatesArray, mode, lang);
|
|
58
|
+
if (defaultTemplateColumns) {
|
|
59
|
+
return defaultTemplateColumns;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
return [];
|
|
63
|
+
});
|
|
64
|
+
const [internalCustomViews, setInternalCustomViews] = useState(() => {
|
|
65
|
+
// Initialize from templates only
|
|
66
|
+
if (templates) {
|
|
67
|
+
const templatesArray = Array.isArray(templates) ? templates : templates.templates;
|
|
68
|
+
const { customViews } = transformTemplatesToViewMenuItems(templatesArray, mode, lang);
|
|
69
|
+
return customViews || [];
|
|
70
|
+
}
|
|
71
|
+
return [];
|
|
72
|
+
});
|
|
20
73
|
useEffect(() => {
|
|
21
|
-
|
|
22
|
-
if (
|
|
23
|
-
|
|
74
|
+
// Only use data from templates
|
|
75
|
+
if (transformedTemplates === null || transformedTemplates === void 0 ? void 0 : transformedTemplates.defaultTemplateColumns) {
|
|
76
|
+
setDefaultColumns(transformedTemplates.defaultTemplateColumns);
|
|
77
|
+
setInternalTableViews(transformedTemplates.defaultTemplateColumns);
|
|
24
78
|
}
|
|
25
|
-
|
|
79
|
+
else if ((transformedTemplates === null || transformedTemplates === void 0 ? void 0 : transformedTemplates.layoutData) && transformedTemplates.layoutData.length > 0) {
|
|
80
|
+
// Use layoutData from templates
|
|
81
|
+
const columns = getColumnsByMode(mode, transformedTemplates.layoutData);
|
|
82
|
+
setDefaultColumns(columns);
|
|
83
|
+
setInternalTableViews(columns);
|
|
84
|
+
}
|
|
85
|
+
else {
|
|
86
|
+
// No templates - set empty arrays
|
|
87
|
+
setDefaultColumns([]);
|
|
88
|
+
setInternalTableViews([]);
|
|
89
|
+
}
|
|
90
|
+
}, [mode, transformedTemplates === null || transformedTemplates === void 0 ? void 0 : transformedTemplates.defaultTemplateColumns, transformedTemplates === null || transformedTemplates === void 0 ? void 0 : transformedTemplates.layoutData]);
|
|
26
91
|
// Update custom views when templates change
|
|
27
92
|
useEffect(() => {
|
|
28
93
|
if (transformedTemplates === null || transformedTemplates === void 0 ? void 0 : transformedTemplates.customViews) {
|
|
29
94
|
setInternalCustomViews(transformedTemplates.customViews);
|
|
30
95
|
}
|
|
96
|
+
else {
|
|
97
|
+
setInternalCustomViews([]);
|
|
98
|
+
}
|
|
31
99
|
}, [transformedTemplates === null || transformedTemplates === void 0 ? void 0 : transformedTemplates.customViews]);
|
|
32
100
|
return {
|
|
33
101
|
defaultColumns,
|
|
@@ -2,11 +2,11 @@ export { default } from './TableView';
|
|
|
2
2
|
export { default as TableView } from './TableView';
|
|
3
3
|
export { default as DefaultViews } from './DefaultViews';
|
|
4
4
|
export { default as CustomViews } from './CustomViews';
|
|
5
|
-
export { default as
|
|
5
|
+
export { default as ViewSelector } from './ViewSelector';
|
|
6
6
|
export { default as ViewsDropdown } from './ViewsDropdown';
|
|
7
7
|
export { default as CreateViewDialog } from './CreateViewDialog';
|
|
8
|
-
export type { ViewMenuItem, ViewMode, CreateCustomViewDialogProps, LayoutSection, ColumnItem, FieldItem, TemplateResponse, TemplatesListResponse } from './types';
|
|
9
|
-
export { transformLayoutToColumns, getColumnsByMode, createCustomViewMenuItem, setViewAsDefault, transformTemplatesToViewMenuItems, convertColumnsToLayoutSection, isDateColumn, getColumnCheckState } from './utils';
|
|
10
|
-
export { useSubmenuHover
|
|
8
|
+
export type { ViewMenuItem, ViewMode, CreateCustomViewDialogProps, LayoutSection, ColumnItem, FieldItem, TemplateResponse, TemplatesListResponse, } from './types';
|
|
9
|
+
export { transformLayoutToColumns, getColumnsByMode, createCustomViewMenuItem, setViewAsDefault, transformTemplatesToViewMenuItems, convertColumnsToLayoutSection, isDateColumn, getColumnCheckState, } from './utils';
|
|
10
|
+
export { useSubmenuHover } from './hooks';
|
|
11
11
|
export { DIALOG_WIDTH, DIALOG_HEIGHT, MAX_CUSTOM_VIEWS, TEMPLATE_NAME_MAX_LENGTH } from './constants';
|
|
12
12
|
export { defaultViewList, advancedColumns, sheetColumns } from './data';
|
|
@@ -2,10 +2,12 @@ export { default } from './TableView';
|
|
|
2
2
|
export { default as TableView } from './TableView';
|
|
3
3
|
export { default as DefaultViews } from './DefaultViews';
|
|
4
4
|
export { default as CustomViews } from './CustomViews';
|
|
5
|
-
export { default as
|
|
5
|
+
export { default as ViewSelector } from './ViewSelector';
|
|
6
6
|
export { default as ViewsDropdown } from './ViewsDropdown';
|
|
7
7
|
export { default as CreateViewDialog } from './CreateViewDialog';
|
|
8
|
-
export { transformLayoutToColumns, getColumnsByMode, createCustomViewMenuItem, setViewAsDefault, transformTemplatesToViewMenuItems, convertColumnsToLayoutSection, isDateColumn, getColumnCheckState } from './utils';
|
|
9
|
-
export { useSubmenuHover
|
|
8
|
+
export { transformLayoutToColumns, getColumnsByMode, createCustomViewMenuItem, setViewAsDefault, transformTemplatesToViewMenuItems, convertColumnsToLayoutSection, isDateColumn, getColumnCheckState, } from './utils';
|
|
9
|
+
export { useSubmenuHover } from './hooks';
|
|
10
10
|
export { DIALOG_WIDTH, DIALOG_HEIGHT, MAX_CUSTOM_VIEWS, TEMPLATE_NAME_MAX_LENGTH } from './constants';
|
|
11
|
+
// Note: defaultViewList, advancedColumns, sheetColumns are only exported for demo purposes
|
|
12
|
+
// They should not be used as defaults in production - all data should come from API
|
|
11
13
|
export { defaultViewList, advancedColumns, sheetColumns } from './data';
|
|
@@ -5,6 +5,7 @@ export type ViewMode = 'advanced' | 'sheet';
|
|
|
5
5
|
export interface ViewMenuItem {
|
|
6
6
|
label: string;
|
|
7
7
|
id: string;
|
|
8
|
+
templateId?: string;
|
|
8
9
|
columns?: string[];
|
|
9
10
|
submenu?: ColumnViewProps[];
|
|
10
11
|
isCustom?: boolean;
|
|
@@ -16,6 +17,7 @@ export interface FieldItem {
|
|
|
16
17
|
text: string;
|
|
17
18
|
lang: string;
|
|
18
19
|
}[];
|
|
20
|
+
order?: number | null;
|
|
19
21
|
default?: boolean;
|
|
20
22
|
}
|
|
21
23
|
export interface ColumnItem {
|
|
@@ -33,23 +35,28 @@ export interface LayoutSection {
|
|
|
33
35
|
columns: ColumnItem[];
|
|
34
36
|
}
|
|
35
37
|
export interface TemplateResponse {
|
|
36
|
-
|
|
37
|
-
object: string;
|
|
38
|
-
master: boolean;
|
|
39
|
-
live_mode: boolean;
|
|
40
|
-
api_version: string;
|
|
41
|
-
feature_version: string;
|
|
42
|
-
created: number;
|
|
43
|
-
updated: number;
|
|
38
|
+
templateId: string;
|
|
44
39
|
segment: string;
|
|
45
40
|
app: string;
|
|
46
41
|
service: string;
|
|
42
|
+
name: string;
|
|
43
|
+
layout: LayoutSection[];
|
|
44
|
+
id: {
|
|
45
|
+
timestamp: number;
|
|
46
|
+
date: string;
|
|
47
|
+
};
|
|
48
|
+
masterTemplateId: string;
|
|
47
49
|
user: {
|
|
48
50
|
id: string;
|
|
49
51
|
};
|
|
50
|
-
|
|
52
|
+
created: number;
|
|
53
|
+
updated: number;
|
|
51
54
|
default: boolean;
|
|
52
|
-
|
|
55
|
+
object?: string;
|
|
56
|
+
master?: boolean;
|
|
57
|
+
live_mode?: boolean;
|
|
58
|
+
api_version?: string;
|
|
59
|
+
feature_version?: string;
|
|
53
60
|
}
|
|
54
61
|
export interface TemplatesListResponse {
|
|
55
62
|
object: string;
|
|
@@ -74,6 +81,7 @@ export interface CreateCustomViewDialogProps {
|
|
|
74
81
|
editingView?: {
|
|
75
82
|
id: string;
|
|
76
83
|
label: string;
|
|
84
|
+
templateId?: string;
|
|
77
85
|
submenu?: ColumnViewProps[];
|
|
78
86
|
} | null;
|
|
79
87
|
onDelete?: (viewId: string) => Promise<void>;
|
|
@@ -84,7 +92,7 @@ export interface ColumnCheckState {
|
|
|
84
92
|
checked: boolean;
|
|
85
93
|
indeterminate: boolean;
|
|
86
94
|
}
|
|
87
|
-
export interface
|
|
95
|
+
export interface ViewSelectorProps {
|
|
88
96
|
onViewChange?: TableHeaderProps['onViewChange'];
|
|
89
97
|
setIsViewVisible: (visible: boolean) => void;
|
|
90
98
|
setTableViews?: TableHeaderProps['setTableViews'];
|
|
@@ -102,7 +110,7 @@ export interface ViewsManagerProps {
|
|
|
102
110
|
layout: LayoutSection;
|
|
103
111
|
}) => Promise<void>;
|
|
104
112
|
onDeleteCustomView?: (viewId: string) => Promise<void>;
|
|
105
|
-
|
|
113
|
+
tableMode?: import('../../../types/index.js').TableMode;
|
|
106
114
|
onTableViewsChange?: (tableViews: ColumnViewProps[]) => void;
|
|
107
115
|
initialTableViews?: ColumnViewProps[];
|
|
108
116
|
onCustomViewsChange?: (customViews: ViewMenuItem[]) => void;
|
|
@@ -115,7 +123,7 @@ export interface ViewsDropdownProps {
|
|
|
115
123
|
open: boolean;
|
|
116
124
|
selectedViewInfo: ViewOption;
|
|
117
125
|
setSelectedViewInfo: (selected: ViewOption) => void;
|
|
118
|
-
onSelect: (e: React.MouseEvent<HTMLDivElement
|
|
126
|
+
onSelect: (e: React.MouseEvent<HTMLDivElement>, templateId?: string) => void;
|
|
119
127
|
setViews?: (views: string[]) => void;
|
|
120
128
|
anchorEl: Element | null;
|
|
121
129
|
tableViews?: ColumnViewProps[];
|
|
@@ -167,9 +175,6 @@ export interface UseCreateViewDialogProps {
|
|
|
167
175
|
}
|
|
168
176
|
export interface UseViewsManagerProps {
|
|
169
177
|
mode: ViewMode;
|
|
170
|
-
layoutData?: LayoutSection[];
|
|
171
|
-
initialTableViews?: ColumnViewProps[];
|
|
172
|
-
initialCustomViews?: ViewMenuItem[];
|
|
173
178
|
templates?: TemplatesListResponse | TemplateResponse[];
|
|
174
179
|
lang?: string;
|
|
175
180
|
}
|
|
@@ -22,13 +22,21 @@ export declare const setViewAsDefault: (views: ViewMenuItem[], viewId: string) =
|
|
|
22
22
|
/**
|
|
23
23
|
* Transform API templates response to ViewMenuItem array
|
|
24
24
|
* Filters templates by mode and only shows the section matching the current mode
|
|
25
|
+
* Separates default templates (to be merged into built-in Default view) from custom views
|
|
25
26
|
*/
|
|
26
27
|
export declare const transformTemplatesToViewMenuItems: (templates: Array<{
|
|
27
|
-
id: string
|
|
28
|
+
id: string | {
|
|
29
|
+
timestamp: number;
|
|
30
|
+
date: string;
|
|
31
|
+
};
|
|
28
32
|
name: string;
|
|
29
33
|
default: boolean;
|
|
30
34
|
layout: LayoutSection[];
|
|
31
|
-
|
|
35
|
+
templateId: string;
|
|
36
|
+
}>, mode?: ViewMode, lang?: string) => {
|
|
37
|
+
customViews: ViewMenuItem[];
|
|
38
|
+
defaultTemplateColumns?: ColumnViewProps[] | undefined;
|
|
39
|
+
};
|
|
32
40
|
/**
|
|
33
41
|
* Convert ColumnViewProps back to LayoutSection format for API requests
|
|
34
42
|
*/
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
// Note: advancedColumns and sheetColumns are only used in demo - not imported here to avoid default data
|
|
2
2
|
/**
|
|
3
3
|
* Transform API layout response to internal ColumnViewProps format
|
|
4
4
|
*/
|
|
@@ -35,7 +35,8 @@ export const getColumnsByMode = (mode, layoutData) => {
|
|
|
35
35
|
return transformLayoutToColumns([section]);
|
|
36
36
|
}
|
|
37
37
|
}
|
|
38
|
-
|
|
38
|
+
// Return empty array - all data should come from API
|
|
39
|
+
return [];
|
|
39
40
|
};
|
|
40
41
|
export const isDateColumn = (name) => {
|
|
41
42
|
return name.toLowerCase() === 'date';
|
|
@@ -93,21 +94,36 @@ export const setViewAsDefault = (views, viewId) => {
|
|
|
93
94
|
/**
|
|
94
95
|
* Transform API templates response to ViewMenuItem array
|
|
95
96
|
* Filters templates by mode and only shows the section matching the current mode
|
|
97
|
+
* Separates default templates (to be merged into built-in Default view) from custom views
|
|
96
98
|
*/
|
|
97
99
|
export const transformTemplatesToViewMenuItems = (templates, mode = 'sheet', lang = 'en') => {
|
|
98
|
-
|
|
100
|
+
const customViews = [];
|
|
101
|
+
let defaultTemplateColumns;
|
|
102
|
+
templates.forEach((template) => {
|
|
99
103
|
// Get columns for the specified mode
|
|
100
104
|
const section = template.layout.find((s) => s.code.toLowerCase() === mode.toLowerCase());
|
|
101
105
|
const columns = section ? transformLayoutToColumns([section], lang) : [];
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
default
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
106
|
+
// Handle id as either string or object
|
|
107
|
+
const templateIdString = typeof template.id === 'string' ? template.id : template.templateId;
|
|
108
|
+
const viewId = typeof template.id === 'string' ? template.id : template.templateId;
|
|
109
|
+
if (template.default) {
|
|
110
|
+
// Store default template columns to merge into built-in Default view
|
|
111
|
+
defaultTemplateColumns = columns;
|
|
112
|
+
}
|
|
113
|
+
else {
|
|
114
|
+
// Add non-default templates as custom views
|
|
115
|
+
customViews.push({
|
|
116
|
+
id: viewId,
|
|
117
|
+
templateId: template.templateId,
|
|
118
|
+
label: template.name,
|
|
119
|
+
isCustom: true,
|
|
120
|
+
default: false,
|
|
121
|
+
columns: columns.map((col) => col.name),
|
|
122
|
+
submenu: columns,
|
|
123
|
+
});
|
|
124
|
+
}
|
|
110
125
|
});
|
|
126
|
+
return { customViews, defaultTemplateColumns };
|
|
111
127
|
};
|
|
112
128
|
/**
|
|
113
129
|
* Convert ColumnViewProps back to LayoutSection format for API requests
|
|
@@ -23,7 +23,7 @@ export interface TableHeaderProps<IStatus extends TableHeaderStatus | TableHeade
|
|
|
23
23
|
calendarMode?: CalenderMode;
|
|
24
24
|
onStatusChange?: <T extends IStatus>(status?: T) => void;
|
|
25
25
|
onSearch?: (search: string) => void;
|
|
26
|
-
onViewChange?: () => void;
|
|
26
|
+
onViewChange?: (templateId?: string) => void;
|
|
27
27
|
onDateChange?: (date: Date | [Date, Date]) => void;
|
|
28
28
|
tableReportsComponent?: React.ReactNode;
|
|
29
29
|
tableFilterComponent?: React.ReactNode;
|
|
@@ -57,7 +57,6 @@ export interface TableHeaderProps<IStatus extends TableHeaderStatus | TableHeade
|
|
|
57
57
|
layout: LayoutSection;
|
|
58
58
|
}) => Promise<void>;
|
|
59
59
|
onDeleteCustomView?: (viewId: string) => Promise<void>;
|
|
60
|
-
viewMode?: 'advanced' | 'sheet';
|
|
61
60
|
onTableViewsChange?: (tableViews: ColumnViewProps[]) => void;
|
|
62
61
|
initialTableViews?: ColumnViewProps[];
|
|
63
62
|
onCustomViewsChange?: (customViews: ViewMenuItem[]) => void;
|
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.372-test.
|
|
5
|
-
"testVersion":
|
|
4
|
+
"version": "0.1.372-test.2-test.3-test.4-test.5",
|
|
5
|
+
"testVersion": 5,
|
|
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 { ViewsManagerProps } from './types';
|
|
3
|
-
declare function ViewsManager({ onViewChange, setIsViewVisible, setTableViews, tableViews: externalTableViews, resetTableViews, customViews: externalCustomViews, onCreateCustomView, onEditCustomView, onDeleteCustomView, mode, onTableViewsChange, initialTableViews, onCustomViewsChange, initialCustomViews, layoutData, templates, lang, }: Readonly<ViewsManagerProps>): import("react/jsx-runtime").JSX.Element;
|
|
4
|
-
declare const _default: import("react").MemoExoticComponent<typeof ViewsManager>;
|
|
5
|
-
export default _default;
|
|
@@ -1,123 +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 { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
11
|
-
import { memo, useState, useEffect } from 'react';
|
|
12
|
-
import { useTranslation } from 'react-i18next';
|
|
13
|
-
import ClickAwayListener from '@mui/material/ClickAwayListener';
|
|
14
|
-
import { Icon, StyledButton } from '../../index.js';
|
|
15
|
-
import { viewIcon } from '../../../constants/index.js';
|
|
16
|
-
import ViewsDropdown from './ViewsDropdown';
|
|
17
|
-
import CreateViewDialog from './CreateViewDialog';
|
|
18
|
-
import { getColumnsByMode, createCustomViewMenuItem } from './utils';
|
|
19
|
-
import { ViewWrapper } from './styles';
|
|
20
|
-
import { useViewsManager } from './hooks';
|
|
21
|
-
function ViewsManager({ onViewChange, setIsViewVisible, setTableViews, tableViews: externalTableViews, resetTableViews, customViews: externalCustomViews, onCreateCustomView, onEditCustomView, onDeleteCustomView, mode = 'sheet', onTableViewsChange, initialTableViews, onCustomViewsChange, initialCustomViews, layoutData, templates, lang = 'en', }) {
|
|
22
|
-
const { t } = useTranslation();
|
|
23
|
-
const [anchorViewEl, setAnchorViewEl] = useState(null);
|
|
24
|
-
const [defaultViewEl, setDefaultViewElement] = useState(null);
|
|
25
|
-
const [isCreateDialogOpen, setIsCreateDialogOpen] = useState(false);
|
|
26
|
-
const [editingView, setEditingView] = useState(null);
|
|
27
|
-
const [selectedViewInfo, setSelectedViewInfo] = useState({ id: 'default', label: 'Default' });
|
|
28
|
-
const [shouldUseCurrentState, setShouldUseCurrentState] = useState(false);
|
|
29
|
-
const { defaultColumns, setDefaultColumns, internalTableViews, setInternalTableViews, internalCustomViews, setInternalCustomViews } = useViewsManager({
|
|
30
|
-
mode,
|
|
31
|
-
layoutData,
|
|
32
|
-
initialTableViews,
|
|
33
|
-
initialCustomViews,
|
|
34
|
-
templates,
|
|
35
|
-
lang,
|
|
36
|
-
});
|
|
37
|
-
const tableViews = externalTableViews !== null && externalTableViews !== void 0 ? externalTableViews : internalTableViews;
|
|
38
|
-
const setTableViewsState = setTableViews !== null && setTableViews !== void 0 ? setTableViews : setInternalTableViews;
|
|
39
|
-
const handleTableViewsChange = (newTableViews) => {
|
|
40
|
-
setTableViewsState(newTableViews);
|
|
41
|
-
onTableViewsChange === null || onTableViewsChange === void 0 ? void 0 : onTableViewsChange(newTableViews);
|
|
42
|
-
};
|
|
43
|
-
const customViews = externalCustomViews !== null && externalCustomViews !== void 0 ? externalCustomViews : internalCustomViews;
|
|
44
|
-
// Auto-select default template when custom views are loaded
|
|
45
|
-
useEffect(() => {
|
|
46
|
-
if (customViews.length > 0) {
|
|
47
|
-
const defaultView = customViews.find((view) => view.default);
|
|
48
|
-
if (defaultView && selectedViewInfo.id === 'default') {
|
|
49
|
-
setSelectedViewInfo(defaultView);
|
|
50
|
-
if (defaultView.submenu) {
|
|
51
|
-
handleTableViewsChange(defaultView.submenu);
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
56
|
-
}, [customViews]);
|
|
57
|
-
const handleCustomViewsChange = (newCustomViews) => {
|
|
58
|
-
setInternalCustomViews(newCustomViews);
|
|
59
|
-
onCustomViewsChange === null || onCustomViewsChange === void 0 ? void 0 : onCustomViewsChange(newCustomViews);
|
|
60
|
-
};
|
|
61
|
-
const handleViewButtonClick = (event) => {
|
|
62
|
-
onViewChange === null || onViewChange === void 0 ? void 0 : onViewChange();
|
|
63
|
-
setAnchorViewEl(event.currentTarget);
|
|
64
|
-
setDefaultViewElement(event.currentTarget);
|
|
65
|
-
};
|
|
66
|
-
const handleCloseViewDropdown = () => {
|
|
67
|
-
setDefaultViewElement(null);
|
|
68
|
-
};
|
|
69
|
-
const handleClose = () => {
|
|
70
|
-
setAnchorViewEl(null);
|
|
71
|
-
setDefaultViewElement(null);
|
|
72
|
-
setSelectedViewInfo({ label: 'Default', id: 'default' });
|
|
73
|
-
};
|
|
74
|
-
const handleSelectedViewInfo = (selected) => {
|
|
75
|
-
setSelectedViewInfo(selected);
|
|
76
|
-
handleCloseViewDropdown();
|
|
77
|
-
};
|
|
78
|
-
const handleOpenCreateDialog = (useCurrentState = false) => {
|
|
79
|
-
setEditingView(null);
|
|
80
|
-
setShouldUseCurrentState(useCurrentState);
|
|
81
|
-
setIsCreateDialogOpen(true);
|
|
82
|
-
setDefaultViewElement(null);
|
|
83
|
-
};
|
|
84
|
-
const handleOpenEditDialog = (view) => {
|
|
85
|
-
setEditingView(view);
|
|
86
|
-
setShouldUseCurrentState(true);
|
|
87
|
-
setIsCreateDialogOpen(true);
|
|
88
|
-
};
|
|
89
|
-
const handleCloseCreateDialog = () => {
|
|
90
|
-
setIsCreateDialogOpen(false);
|
|
91
|
-
setEditingView(null);
|
|
92
|
-
setShouldUseCurrentState(false);
|
|
93
|
-
};
|
|
94
|
-
const handleSaveView = (data) => __awaiter(this, void 0, void 0, function* () {
|
|
95
|
-
if (editingView) {
|
|
96
|
-
const updatedViews = customViews.map((view) => view.id === editingView.id
|
|
97
|
-
? Object.assign(Object.assign({}, view), { label: data.name, columns: data.selectedColumns.map((col) => col.name), submenu: data.selectedColumns }) : view);
|
|
98
|
-
handleCustomViewsChange(updatedViews);
|
|
99
|
-
yield (onEditCustomView === null || onEditCustomView === void 0 ? void 0 : onEditCustomView(editingView.id, data));
|
|
100
|
-
}
|
|
101
|
-
else {
|
|
102
|
-
const newView = createCustomViewMenuItem(data.name, data.selectedColumns);
|
|
103
|
-
const updatedViews = [...customViews, newView];
|
|
104
|
-
handleCustomViewsChange(updatedViews);
|
|
105
|
-
yield (onCreateCustomView === null || onCreateCustomView === void 0 ? void 0 : onCreateCustomView(data));
|
|
106
|
-
}
|
|
107
|
-
});
|
|
108
|
-
const handleDeleteView = (viewId) => __awaiter(this, void 0, void 0, function* () {
|
|
109
|
-
const updatedViews = customViews.filter((view) => view.id !== viewId);
|
|
110
|
-
handleCustomViewsChange(updatedViews);
|
|
111
|
-
yield (onDeleteCustomView === null || onDeleteCustomView === void 0 ? void 0 : onDeleteCustomView(viewId));
|
|
112
|
-
});
|
|
113
|
-
return (_jsxs(_Fragment, { children: [_jsx(ClickAwayListener, Object.assign({ onClickAway: handleCloseViewDropdown }, { children: _jsxs(ViewWrapper, Object.assign({ sx: { width: '32px' }, "data-testid": "ViewsManager" }, { children: [_jsx(StyledButton, Object.assign({ title: t('tableView'), "data-testid": "ViewsManager_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) => setDefaultViewElement(defaultViewEl ? null : e.currentTarget), setViews: (views) => {
|
|
114
|
-
if (resetTableViews) {
|
|
115
|
-
resetTableViews({ id: views[0], label: views[0] });
|
|
116
|
-
}
|
|
117
|
-
else {
|
|
118
|
-
const resetColumns = getColumnsByMode(mode, layoutData);
|
|
119
|
-
handleTableViewsChange(resetColumns);
|
|
120
|
-
}
|
|
121
|
-
}, tableViews: tableViews, setTableViews: handleTableViewsChange, onCreateCustomView: (useCurrentState) => handleOpenCreateDialog(useCurrentState), customViews: customViews, onEditCustomView: handleOpenEditDialog, defaultColumns: defaultColumns, setDefaultColumns: setDefaultColumns })] })) })), _jsx(CreateViewDialog, { open: isCreateDialogOpen, onClose: handleCloseCreateDialog, availableColumns: defaultColumns, defaultColumns: defaultColumns, onCreate: handleSaveView, editingView: editingView, onDelete: handleDeleteView, tableViews: shouldUseCurrentState ? defaultColumns : undefined, mode: mode })] }));
|
|
122
|
-
}
|
|
123
|
-
export default memo(ViewsManager);
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
import type { ColumnViewProps } from '../../../types/index.js';
|
|
2
|
-
export { useSubMenu } from './hooks/useSubMenu';
|
|
3
|
-
export { useViewColumns } from './hooks/useViewColumns';
|
|
4
|
-
export { useColumnItem } from './hooks/useColumnItem';
|
|
5
|
-
export { useCreateViewDialog } from './hooks/useCreateViewDialog';
|
|
6
|
-
export { useNestedSubmenu } from './hooks/useNestedSubmenu';
|
|
7
|
-
export { useViewsManager } from './hooks/useViewsManager';
|
|
8
|
-
export declare const useSubmenuHover: () => {
|
|
9
|
-
hoveredColumn: string | null;
|
|
10
|
-
anchorEl: HTMLElement | null;
|
|
11
|
-
openSubmenu: (columnName: string, element: HTMLElement) => void;
|
|
12
|
-
closeSubmenu: () => void;
|
|
13
|
-
cancelClose: () => void;
|
|
14
|
-
forceClose: () => void;
|
|
15
|
-
};
|
|
16
|
-
export declare const useDialogPosition: (dialogWidth: number, dialogHeight: number) => {
|
|
17
|
-
position: {
|
|
18
|
-
x: number;
|
|
19
|
-
y: number;
|
|
20
|
-
};
|
|
21
|
-
resetPosition: () => void;
|
|
22
|
-
updatePosition: (x: number, y: number) => void;
|
|
23
|
-
};
|
|
24
|
-
export declare const useOriginalColumns: (defaultColumns: ColumnViewProps[]) => {
|
|
25
|
-
originalColumns: ColumnViewProps[];
|
|
26
|
-
saveOriginalState: () => void;
|
|
27
|
-
clearOriginalState: () => void;
|
|
28
|
-
};
|
|
@@ -1,81 +0,0 @@
|
|
|
1
|
-
import { useState, useRef, useCallback } from 'react';
|
|
2
|
-
import { SUBMENU_CLOSE_DELAY } from './constants';
|
|
3
|
-
export { useSubMenu } from './hooks/useSubMenu';
|
|
4
|
-
export { useViewColumns } from './hooks/useViewColumns';
|
|
5
|
-
export { useColumnItem } from './hooks/useColumnItem';
|
|
6
|
-
export { useCreateViewDialog } from './hooks/useCreateViewDialog';
|
|
7
|
-
export { useNestedSubmenu } from './hooks/useNestedSubmenu';
|
|
8
|
-
export { useViewsManager } from './hooks/useViewsManager';
|
|
9
|
-
export const useSubmenuHover = () => {
|
|
10
|
-
const [hoveredColumn, setHoveredColumn] = useState(null);
|
|
11
|
-
const [anchorEl, setAnchorEl] = useState(null);
|
|
12
|
-
const closeTimeoutRef = useRef(null);
|
|
13
|
-
const openSubmenu = useCallback((columnName, element) => {
|
|
14
|
-
if (closeTimeoutRef.current) {
|
|
15
|
-
clearTimeout(closeTimeoutRef.current);
|
|
16
|
-
closeTimeoutRef.current = null;
|
|
17
|
-
}
|
|
18
|
-
setHoveredColumn(columnName);
|
|
19
|
-
setAnchorEl(element);
|
|
20
|
-
}, []);
|
|
21
|
-
const closeSubmenu = useCallback(() => {
|
|
22
|
-
closeTimeoutRef.current = setTimeout(() => {
|
|
23
|
-
setHoveredColumn(null);
|
|
24
|
-
setAnchorEl(null);
|
|
25
|
-
}, SUBMENU_CLOSE_DELAY);
|
|
26
|
-
}, []);
|
|
27
|
-
const cancelClose = useCallback(() => {
|
|
28
|
-
if (closeTimeoutRef.current) {
|
|
29
|
-
clearTimeout(closeTimeoutRef.current);
|
|
30
|
-
closeTimeoutRef.current = null;
|
|
31
|
-
}
|
|
32
|
-
}, []);
|
|
33
|
-
const forceClose = useCallback(() => {
|
|
34
|
-
if (closeTimeoutRef.current) {
|
|
35
|
-
clearTimeout(closeTimeoutRef.current);
|
|
36
|
-
closeTimeoutRef.current = null;
|
|
37
|
-
}
|
|
38
|
-
setHoveredColumn(null);
|
|
39
|
-
setAnchorEl(null);
|
|
40
|
-
}, []);
|
|
41
|
-
return {
|
|
42
|
-
hoveredColumn,
|
|
43
|
-
anchorEl,
|
|
44
|
-
openSubmenu,
|
|
45
|
-
closeSubmenu,
|
|
46
|
-
cancelClose,
|
|
47
|
-
forceClose,
|
|
48
|
-
};
|
|
49
|
-
};
|
|
50
|
-
export const useDialogPosition = (dialogWidth, dialogHeight) => {
|
|
51
|
-
const [position, setPosition] = useState({ x: 0, y: 0 });
|
|
52
|
-
const resetPosition = useCallback(() => {
|
|
53
|
-
const centerX = window.innerWidth / 2 - dialogWidth / 2;
|
|
54
|
-
const centerY = window.innerHeight / 2 - dialogHeight / 2;
|
|
55
|
-
setPosition({
|
|
56
|
-
x: Math.max(0, centerX),
|
|
57
|
-
y: Math.max(0, centerY),
|
|
58
|
-
});
|
|
59
|
-
}, [dialogWidth, dialogHeight]);
|
|
60
|
-
const updatePosition = useCallback((x, y) => {
|
|
61
|
-
setPosition({ x, y });
|
|
62
|
-
}, []);
|
|
63
|
-
return { position, resetPosition, updatePosition };
|
|
64
|
-
};
|
|
65
|
-
export const useOriginalColumns = (defaultColumns) => {
|
|
66
|
-
const [originalColumns, setOriginalColumns] = useState([]);
|
|
67
|
-
const saveOriginalState = useCallback(() => {
|
|
68
|
-
setOriginalColumns(defaultColumns.map((col) => {
|
|
69
|
-
var _a;
|
|
70
|
-
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 }))) }));
|
|
71
|
-
}));
|
|
72
|
-
}, [defaultColumns]);
|
|
73
|
-
const clearOriginalState = useCallback(() => {
|
|
74
|
-
setOriginalColumns([]);
|
|
75
|
-
}, []);
|
|
76
|
-
return {
|
|
77
|
-
originalColumns,
|
|
78
|
-
saveOriginalState,
|
|
79
|
-
clearOriginalState,
|
|
80
|
-
};
|
|
81
|
-
};
|