@tap-payments/os-micro-frontend-shared 0.1.372-test.2-test.3-test.4-test.5-test.6 → 0.1.372-test.2-test.3-test.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/components/Sandbox/style.js +2 -3
- package/build/components/TableHeader/FiltersRow.d.ts +1 -1
- package/build/components/TableHeader/FiltersRow.js +3 -3
- package/build/components/TableHeader/TableHeader.d.ts +1 -1
- package/build/components/TableHeader/TableHeader.js +2 -2
- package/build/components/TableHeader/TableView/CreateViewDialog.d.ts +1 -1
- package/build/components/TableHeader/TableView/CreateViewDialog.js +42 -11
- package/build/components/TableHeader/TableView/ViewsDropdown.d.ts +1 -1
- package/build/components/TableHeader/TableView/ViewsDropdown.js +91 -93
- package/build/components/TableHeader/TableView/ViewsMenu.d.ts +5 -0
- package/build/components/TableHeader/TableView/ViewsMenu.js +76 -0
- package/build/components/TableHeader/TableView/components/ViewsSubmenu.js +46 -23
- package/build/components/TableHeader/TableView/constants.d.ts +1 -1
- package/build/components/TableHeader/TableView/constants.js +1 -1
- package/build/components/TableHeader/TableView/hooks/index.d.ts +1 -1
- package/build/components/TableHeader/TableView/hooks/index.js +1 -1
- package/build/components/TableHeader/TableView/hooks/useCreateViewDialog.js +15 -5
- package/build/components/TableHeader/TableView/hooks/useNestedSubmenu.js +2 -9
- package/build/components/TableHeader/TableView/hooks/useViewsManager.d.ts +5 -8
- package/build/components/TableHeader/TableView/hooks/useViewsManager.js +50 -94
- package/build/components/TableHeader/TableView/hooks/useViewsMenu.d.ts +44 -0
- package/build/components/TableHeader/TableView/hooks/useViewsMenu.js +177 -0
- package/build/components/TableHeader/TableView/index.d.ts +3 -3
- package/build/components/TableHeader/TableView/index.js +2 -4
- package/build/components/TableHeader/TableView/styles.js +11 -2
- package/build/components/TableHeader/TableView/types.d.ts +34 -32
- package/build/components/TableHeader/TableView/utils.d.ts +6 -5
- package/build/components/TableHeader/TableView/utils.js +56 -13
- package/build/components/TableHeader/index.d.ts +1 -0
- package/build/components/TableHeader/type.d.ts +2 -8
- package/build/components/Toolbar/Toolbar.js +1 -1
- package/build/components/VirtualTables/VirtualTable/VirtualTable.d.ts +1 -1
- package/build/components/VirtualTables/VirtualTable/VirtualTable.js +4 -3
- package/build/constants/apps.js +2 -0
- package/build/constants/assets.d.ts +1 -0
- package/build/constants/assets.js +1 -0
- package/build/types/reports.d.ts +21 -0
- package/build/types/table.d.ts +1 -0
- package/build/utils/date.js +5 -3
- package/build/utils/index.d.ts +1 -0
- package/build/utils/index.js +1 -0
- package/build/utils/skeletonColumns.d.ts +4 -0
- package/build/utils/skeletonColumns.js +17 -0
- package/package.json +2 -2
- package/build/components/TableHeader/TableView/ViewSelector.d.ts +0 -5
- package/build/components/TableHeader/TableView/ViewSelector.js +0 -44
- package/build/components/TableHeader/TableView/hooks/useViewSelector.d.ts +0 -56
- package/build/components/TableHeader/TableView/hooks/useViewSelector.js +0 -122
|
@@ -2,12 +2,10 @@ 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 ViewsMenu } from './ViewsMenu';
|
|
6
6
|
export { default as ViewsDropdown } from './ViewsDropdown';
|
|
7
7
|
export { default as CreateViewDialog } from './CreateViewDialog';
|
|
8
8
|
export { transformLayoutToColumns, getColumnsByMode, createCustomViewMenuItem, setViewAsDefault, transformTemplatesToViewMenuItems, convertColumnsToLayoutSection, isDateColumn, getColumnCheckState, } from './utils';
|
|
9
|
-
export { useSubmenuHover } from './hooks';
|
|
9
|
+
export { useSubmenuHover, useViewsManager, useViewsMenu } 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
|
|
13
11
|
export { defaultViewList, advancedColumns, sheetColumns } from './data';
|
|
@@ -350,18 +350,24 @@ export const ResetCheckboxSx = {
|
|
|
350
350
|
};
|
|
351
351
|
export const SubmenuContainer = styled(Box)(() => ({
|
|
352
352
|
minWidth: 200,
|
|
353
|
+
display: 'flex',
|
|
354
|
+
flexDirection: 'column',
|
|
355
|
+
maxHeight: '80vh',
|
|
356
|
+
overflow: 'hidden',
|
|
353
357
|
}));
|
|
354
358
|
export const ColumnItemsContainer = styled(Box)(() => ({
|
|
355
|
-
|
|
359
|
+
flex: 1,
|
|
356
360
|
overflowY: 'auto',
|
|
357
361
|
paddingLeft: 6,
|
|
358
362
|
paddingRight: 6,
|
|
363
|
+
minHeight: 0,
|
|
359
364
|
}));
|
|
360
365
|
export const SaveCustomViewBox = styled(Box)(() => ({
|
|
361
366
|
paddingLeft: 8,
|
|
362
367
|
paddingRight: 8,
|
|
363
368
|
paddingTop: 8,
|
|
364
369
|
paddingBottom: 8,
|
|
370
|
+
flexShrink: 0,
|
|
365
371
|
}));
|
|
366
372
|
export const SaveCustomViewInnerBox = styled(Box)(({ disabled }) => ({
|
|
367
373
|
width: '100%',
|
|
@@ -376,7 +382,7 @@ export const SaveCustomViewInnerBox = styled(Box)(({ disabled }) => ({
|
|
|
376
382
|
cursor: disabled ? 'not-allowed' : 'pointer',
|
|
377
383
|
opacity: disabled ? 0.5 : 1,
|
|
378
384
|
}));
|
|
379
|
-
export const ButtonsContainer = styled(Box)(() => ({
|
|
385
|
+
export const ButtonsContainer = styled(Box)(({ theme }) => ({
|
|
380
386
|
display: 'flex',
|
|
381
387
|
justifyContent: 'flex-end',
|
|
382
388
|
gap: 12,
|
|
@@ -384,6 +390,9 @@ export const ButtonsContainer = styled(Box)(() => ({
|
|
|
384
390
|
paddingBottom: 8,
|
|
385
391
|
paddingLeft: 12,
|
|
386
392
|
paddingRight: 12,
|
|
393
|
+
flexShrink: 0,
|
|
394
|
+
borderTop: '1px solid',
|
|
395
|
+
borderColor: theme.palette.divider,
|
|
387
396
|
}));
|
|
388
397
|
export const CancelButtonSx = {
|
|
389
398
|
fontSize: 11,
|
|
@@ -1,7 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
import type { ColumnViewProps } from '../../../types/index.js';
|
|
1
|
+
import type { ColumnViewProps, TableMode } from '../../../types/index.js';
|
|
3
2
|
import type { TableHeaderProps, ViewOption } from '../type';
|
|
4
|
-
export type ViewMode = 'advanced' | 'sheet';
|
|
5
3
|
export interface ViewMenuItem {
|
|
6
4
|
label: string;
|
|
7
5
|
id: string;
|
|
@@ -34,7 +32,24 @@ export interface LayoutSection {
|
|
|
34
32
|
code: string;
|
|
35
33
|
columns: ColumnItem[];
|
|
36
34
|
}
|
|
37
|
-
export interface
|
|
35
|
+
export interface TemplateAPIMetadata {
|
|
36
|
+
segment: string;
|
|
37
|
+
app: string;
|
|
38
|
+
service: string;
|
|
39
|
+
user: {
|
|
40
|
+
id: string;
|
|
41
|
+
};
|
|
42
|
+
master_template_id?: string;
|
|
43
|
+
}
|
|
44
|
+
export interface CreateTemplatePayload extends TemplateAPIMetadata {
|
|
45
|
+
name: string;
|
|
46
|
+
layout: LayoutSection[];
|
|
47
|
+
}
|
|
48
|
+
export interface UpdateTemplatePayload extends TemplateAPIMetadata {
|
|
49
|
+
name: string;
|
|
50
|
+
layout: LayoutSection[];
|
|
51
|
+
}
|
|
52
|
+
export interface Template {
|
|
38
53
|
templateId: string;
|
|
39
54
|
segment: string;
|
|
40
55
|
app: string;
|
|
@@ -52,20 +67,15 @@ export interface TemplateResponse {
|
|
|
52
67
|
created: number;
|
|
53
68
|
updated: number;
|
|
54
69
|
default: boolean;
|
|
55
|
-
object?: string;
|
|
56
|
-
master?: boolean;
|
|
57
|
-
live_mode?: boolean;
|
|
58
|
-
api_version?: string;
|
|
59
|
-
feature_version?: string;
|
|
60
70
|
}
|
|
61
|
-
export interface
|
|
71
|
+
export interface TemplatesList {
|
|
62
72
|
object: string;
|
|
63
73
|
live_mode: boolean;
|
|
64
74
|
api_version: string;
|
|
65
75
|
feature_version: string;
|
|
66
76
|
count: number;
|
|
67
77
|
has_more: boolean;
|
|
68
|
-
templates:
|
|
78
|
+
templates: Template[];
|
|
69
79
|
}
|
|
70
80
|
export interface CreateCustomViewDialogProps {
|
|
71
81
|
open: boolean;
|
|
@@ -76,7 +86,6 @@ export interface CreateCustomViewDialogProps {
|
|
|
76
86
|
layout: LayoutSection;
|
|
77
87
|
}) => Promise<void>;
|
|
78
88
|
availableColumns?: ColumnViewProps[];
|
|
79
|
-
isLoading?: boolean;
|
|
80
89
|
defaultColumns?: ColumnViewProps[];
|
|
81
90
|
editingView?: {
|
|
82
91
|
id: string;
|
|
@@ -86,19 +95,14 @@ export interface CreateCustomViewDialogProps {
|
|
|
86
95
|
} | null;
|
|
87
96
|
onDelete?: (viewId: string) => Promise<void>;
|
|
88
97
|
tableViews?: ColumnViewProps[];
|
|
89
|
-
mode?:
|
|
98
|
+
mode?: TableMode;
|
|
90
99
|
}
|
|
91
100
|
export interface ColumnCheckState {
|
|
92
101
|
checked: boolean;
|
|
93
102
|
indeterminate: boolean;
|
|
94
103
|
}
|
|
95
|
-
export interface
|
|
104
|
+
export interface ViewsMenuProps {
|
|
96
105
|
onViewChange?: TableHeaderProps['onViewChange'];
|
|
97
|
-
setIsViewVisible: (visible: boolean) => void;
|
|
98
|
-
setTableViews?: TableHeaderProps['setTableViews'];
|
|
99
|
-
tableViews?: TableHeaderProps['tableViews'];
|
|
100
|
-
resetTableViews?: TableHeaderProps['resetTableViews'];
|
|
101
|
-
customViews?: ViewMenuItem[];
|
|
102
106
|
onCreateCustomView?: (data: {
|
|
103
107
|
name: string;
|
|
104
108
|
selectedColumns: ColumnViewProps[];
|
|
@@ -110,29 +114,26 @@ export interface ViewSelectorProps {
|
|
|
110
114
|
layout: LayoutSection;
|
|
111
115
|
}) => Promise<void>;
|
|
112
116
|
onDeleteCustomView?: (viewId: string) => Promise<void>;
|
|
113
|
-
tableMode?:
|
|
114
|
-
|
|
115
|
-
initialTableViews?: ColumnViewProps[];
|
|
116
|
-
onCustomViewsChange?: (customViews: ViewMenuItem[]) => void;
|
|
117
|
-
initialCustomViews?: ViewMenuItem[];
|
|
118
|
-
layoutData?: LayoutSection[];
|
|
119
|
-
templates?: TemplatesListResponse | TemplateResponse[];
|
|
117
|
+
tableMode?: TableMode;
|
|
118
|
+
templates: Template[];
|
|
120
119
|
lang?: string;
|
|
121
120
|
}
|
|
122
121
|
export interface ViewsDropdownProps {
|
|
123
122
|
open: boolean;
|
|
124
123
|
selectedViewInfo: ViewOption;
|
|
125
124
|
setSelectedViewInfo: (selected: ViewOption, viewMenuItem?: ViewMenuItem) => void;
|
|
126
|
-
onSelect: (e: React.MouseEvent<HTMLDivElement>, selectedView?: ViewMenuItem) => void;
|
|
127
|
-
setViews?: (views: string[]) => void;
|
|
128
125
|
anchorEl: Element | null;
|
|
129
|
-
|
|
130
|
-
|
|
126
|
+
defaultModified?: boolean;
|
|
127
|
+
onMarkDefaultModified?: () => void;
|
|
131
128
|
onCreateCustomView?: (useCurrentState?: boolean) => void;
|
|
132
129
|
customViews?: ViewMenuItem[];
|
|
133
130
|
onEditCustomView?: (view: ViewMenuItem) => void;
|
|
131
|
+
onSaveDefaultColumns?: (columns: ColumnViewProps[]) => void;
|
|
134
132
|
defaultColumns?: ColumnViewProps[];
|
|
135
133
|
setDefaultColumns?: (columns: ColumnViewProps[]) => void;
|
|
134
|
+
updateSelectedView?: (view: ViewMenuItem) => void;
|
|
135
|
+
mode?: TableMode;
|
|
136
|
+
defaultTemplate?: ViewMenuItem;
|
|
136
137
|
}
|
|
137
138
|
export interface ColumnListProps {
|
|
138
139
|
selectedColumns: ColumnViewProps[];
|
|
@@ -159,6 +160,7 @@ export interface ViewsSubmenuProps {
|
|
|
159
160
|
onReset: () => void;
|
|
160
161
|
onColumnToggle: (columnName: string) => void;
|
|
161
162
|
onNestedItemToggle: (columnName: string, subItemName: string) => void;
|
|
163
|
+
onReorder: (reorderedColumnNames: string[]) => void;
|
|
162
164
|
anchorEl: HTMLElement | null;
|
|
163
165
|
isModified?: boolean;
|
|
164
166
|
}
|
|
@@ -174,7 +176,7 @@ export interface UseCreateViewDialogProps {
|
|
|
174
176
|
tableViews?: ColumnViewProps[];
|
|
175
177
|
}
|
|
176
178
|
export interface UseViewsManagerProps {
|
|
177
|
-
|
|
178
|
-
templates
|
|
179
|
+
tableMode: TableMode;
|
|
180
|
+
templates: Template[];
|
|
179
181
|
lang?: string;
|
|
180
182
|
}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import type { ColumnViewProps } from '../../../types/index.js';
|
|
2
|
-
import type { LayoutSection, ViewMenuItem, ColumnCheckState
|
|
1
|
+
import type { ColumnViewProps, TableMode } from '../../../types/index.js';
|
|
2
|
+
import type { LayoutSection, ViewMenuItem, ColumnCheckState } from './types';
|
|
3
3
|
/**
|
|
4
4
|
* Transform API layout response to internal ColumnViewProps format
|
|
5
5
|
*/
|
|
6
6
|
export declare const transformLayoutToColumns: (layout: LayoutSection[], lang?: string) => ColumnViewProps[];
|
|
7
|
-
export declare const getColumnsByMode: (mode:
|
|
7
|
+
export declare const getColumnsByMode: (mode: TableMode, layoutData?: LayoutSection[]) => ColumnViewProps[];
|
|
8
8
|
export declare const isDateColumn: (name: string) => boolean;
|
|
9
9
|
export declare const getColumnCheckState: (column: ColumnViewProps) => ColumnCheckState;
|
|
10
10
|
export declare const createCustomViewMenuItem: (name: string, selectedColumns: ColumnViewProps[], isDefault?: boolean) => ViewMenuItem;
|
|
@@ -33,7 +33,7 @@ export declare const transformTemplatesToViewMenuItems: (templates: Array<{
|
|
|
33
33
|
default: boolean;
|
|
34
34
|
layout: LayoutSection[];
|
|
35
35
|
templateId: string;
|
|
36
|
-
}>, mode?:
|
|
36
|
+
}>, mode?: TableMode, lang?: string) => {
|
|
37
37
|
customViews: ViewMenuItem[];
|
|
38
38
|
defaultTemplateColumns?: ColumnViewProps[] | undefined;
|
|
39
39
|
defaultTemplate?: ViewMenuItem | undefined;
|
|
@@ -41,7 +41,7 @@ export declare const transformTemplatesToViewMenuItems: (templates: Array<{
|
|
|
41
41
|
/**
|
|
42
42
|
* Convert ColumnViewProps back to LayoutSection format for API requests
|
|
43
43
|
*/
|
|
44
|
-
export declare const convertColumnsToLayoutSection: (columns: ColumnViewProps[], mode:
|
|
44
|
+
export declare const convertColumnsToLayoutSection: (columns: ColumnViewProps[], mode: TableMode, lang?: string) => LayoutSection;
|
|
45
45
|
/**
|
|
46
46
|
* Initialize columns for editing mode
|
|
47
47
|
*/
|
|
@@ -92,6 +92,7 @@ export declare const deepCloneColumns: (columns: ColumnViewProps[]) => ColumnVie
|
|
|
92
92
|
export declare const toggleSingleColumn: (columns: ColumnViewProps[], columnName: string) => ColumnViewProps[];
|
|
93
93
|
/**
|
|
94
94
|
* Get submenu items for a view menu item
|
|
95
|
+
* Always includes the date column at the beginning
|
|
95
96
|
*/
|
|
96
97
|
export declare const getSubmenuItems: (item: ViewMenuItem, defaultColumns: ColumnViewProps[]) => ColumnViewProps[];
|
|
97
98
|
/**
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { DATE_COLUMN_CONFIG } from './constants';
|
|
1
2
|
// Note: advancedColumns and sheetColumns are only used in demo - not imported here to avoid default data
|
|
2
3
|
/**
|
|
3
4
|
* Transform API layout response to internal ColumnViewProps format
|
|
@@ -21,7 +22,7 @@ export const transformLayoutToColumns = (layout, lang = 'en') => {
|
|
|
21
22
|
columns.push({
|
|
22
23
|
name: col.code,
|
|
23
24
|
label,
|
|
24
|
-
selected: (_d = col.default) !== null && _d !== void 0 ? _d : false,
|
|
25
|
+
selected: isDateColumn(col.code) ? true : (_d = col.default) !== null && _d !== void 0 ? _d : false,
|
|
25
26
|
menuItems: (menuItems === null || menuItems === void 0 ? void 0 : menuItems.length) ? menuItems : undefined,
|
|
26
27
|
});
|
|
27
28
|
});
|
|
@@ -30,7 +31,9 @@ export const transformLayoutToColumns = (layout, lang = 'en') => {
|
|
|
30
31
|
};
|
|
31
32
|
export const getColumnsByMode = (mode, layoutData) => {
|
|
32
33
|
if (layoutData && layoutData.length > 0) {
|
|
33
|
-
|
|
34
|
+
// Map TableMode to layout section code: 'default' → 'Advanced', 'sheet' → 'Sheet'
|
|
35
|
+
const sectionCode = mode === 'sheet' ? 'sheet' : 'advanced';
|
|
36
|
+
const section = layoutData.find((s) => s.code.toLowerCase() === sectionCode);
|
|
34
37
|
if (section) {
|
|
35
38
|
return transformLayoutToColumns([section]);
|
|
36
39
|
}
|
|
@@ -102,14 +105,24 @@ export const transformTemplatesToViewMenuItems = (templates, mode = 'sheet', lan
|
|
|
102
105
|
let defaultTemplate;
|
|
103
106
|
templates.forEach((template) => {
|
|
104
107
|
// Get columns for the specified mode
|
|
105
|
-
|
|
108
|
+
// Map TableMode to layout section code: 'default' → 'Advanced', 'sheet' → 'Sheet'
|
|
109
|
+
const sectionCode = mode === 'sheet' ? 'sheet' : 'advanced';
|
|
110
|
+
const section = template.layout.find((s) => s.code.toLowerCase() === sectionCode);
|
|
106
111
|
const columns = section ? transformLayoutToColumns([section], lang) : [];
|
|
107
112
|
// Handle id as either string or object
|
|
108
113
|
const templateIdString = typeof template.id === 'string' ? template.id : template.templateId;
|
|
109
114
|
const viewId = typeof template.id === 'string' ? template.id : template.templateId;
|
|
115
|
+
// Always include date column at the beginning
|
|
116
|
+
const dateColumn = DATE_COLUMN_CONFIG;
|
|
117
|
+
const columnsWithDate = columns.some((col) => col.name.toLowerCase() === 'date') ? columns : [dateColumn, ...columns];
|
|
118
|
+
// Ensure date column is first
|
|
119
|
+
const dateColumnIndex = columnsWithDate.findIndex((col) => col.name.toLowerCase() === 'date');
|
|
120
|
+
const finalColumns = dateColumnIndex > 0
|
|
121
|
+
? [columnsWithDate[dateColumnIndex], ...columnsWithDate.filter((col) => col.name.toLowerCase() !== 'date')]
|
|
122
|
+
: columnsWithDate;
|
|
110
123
|
if (template.default) {
|
|
111
124
|
// Store default template columns to merge into built-in Default view
|
|
112
|
-
defaultTemplateColumns =
|
|
125
|
+
defaultTemplateColumns = finalColumns;
|
|
113
126
|
// Also create a ViewMenuItem for the default template
|
|
114
127
|
defaultTemplate = {
|
|
115
128
|
id: 'default',
|
|
@@ -117,8 +130,8 @@ export const transformTemplatesToViewMenuItems = (templates, mode = 'sheet', lan
|
|
|
117
130
|
label: template.name,
|
|
118
131
|
isCustom: false,
|
|
119
132
|
default: true,
|
|
120
|
-
columns:
|
|
121
|
-
submenu:
|
|
133
|
+
columns: finalColumns.map((col) => col.name),
|
|
134
|
+
submenu: finalColumns,
|
|
122
135
|
};
|
|
123
136
|
}
|
|
124
137
|
else {
|
|
@@ -129,8 +142,8 @@ export const transformTemplatesToViewMenuItems = (templates, mode = 'sheet', lan
|
|
|
129
142
|
label: template.name,
|
|
130
143
|
isCustom: true,
|
|
131
144
|
default: false,
|
|
132
|
-
columns:
|
|
133
|
-
submenu:
|
|
145
|
+
columns: finalColumns.map((col) => col.name),
|
|
146
|
+
submenu: finalColumns,
|
|
134
147
|
});
|
|
135
148
|
}
|
|
136
149
|
});
|
|
@@ -163,8 +176,10 @@ export const convertColumnsToLayoutSection = (columns, mode, lang = 'en') => {
|
|
|
163
176
|
},
|
|
164
177
|
], order: index + 1, default: (_b = col.selected) !== null && _b !== void 0 ? _b : false }, (fieldItems && fieldItems.length > 0 && { fields: fieldItems }));
|
|
165
178
|
});
|
|
179
|
+
// Map TableMode to layout section code: 'default' → 'Advanced', 'sheet' → 'Sheet'
|
|
180
|
+
const sectionCode = mode === 'sheet' ? 'Sheet' : 'Advanced';
|
|
166
181
|
return {
|
|
167
|
-
code:
|
|
182
|
+
code: sectionCode,
|
|
168
183
|
columns: columnItems,
|
|
169
184
|
};
|
|
170
185
|
};
|
|
@@ -314,6 +329,9 @@ export const toggleSingleColumn = (columns, columnName) => {
|
|
|
314
329
|
var _a;
|
|
315
330
|
if (col.name !== columnName)
|
|
316
331
|
return col;
|
|
332
|
+
if (isDateColumn(col.name)) {
|
|
333
|
+
return Object.assign(Object.assign({}, col), { selected: true });
|
|
334
|
+
}
|
|
317
335
|
const newSelected = !col.selected;
|
|
318
336
|
const updatedMenuItems = (_a = col.menuItems) === null || _a === void 0 ? void 0 : _a.map((item) => (Object.assign(Object.assign({}, item), { selected: newSelected })));
|
|
319
337
|
return Object.assign(Object.assign({}, col), { selected: newSelected, menuItems: updatedMenuItems });
|
|
@@ -321,16 +339,38 @@ export const toggleSingleColumn = (columns, columnName) => {
|
|
|
321
339
|
};
|
|
322
340
|
/**
|
|
323
341
|
* Get submenu items for a view menu item
|
|
342
|
+
* Always includes the date column at the beginning
|
|
324
343
|
*/
|
|
325
344
|
export const getSubmenuItems = (item, defaultColumns) => {
|
|
326
345
|
var _a;
|
|
346
|
+
let columns = [];
|
|
327
347
|
if (item.isCustom && ((_a = item.submenu) === null || _a === void 0 ? void 0 : _a.length)) {
|
|
328
|
-
|
|
348
|
+
columns = item.submenu;
|
|
349
|
+
}
|
|
350
|
+
else if (item.id === 'default') {
|
|
351
|
+
columns = defaultColumns;
|
|
352
|
+
}
|
|
353
|
+
else {
|
|
354
|
+
columns = item.submenu || [];
|
|
329
355
|
}
|
|
330
|
-
|
|
331
|
-
|
|
356
|
+
// Always include date column at the beginning if it's not already present
|
|
357
|
+
const hasDateColumn = columns.some((col) => col.name.toLowerCase() === 'date');
|
|
358
|
+
if (!hasDateColumn) {
|
|
359
|
+
const dateColumn = {
|
|
360
|
+
name: 'date',
|
|
361
|
+
label: 'Date',
|
|
362
|
+
selected: true,
|
|
363
|
+
};
|
|
364
|
+
return [dateColumn, ...columns];
|
|
332
365
|
}
|
|
333
|
-
|
|
366
|
+
// Ensure date column is first
|
|
367
|
+
const dateColumnIndex = columns.findIndex((col) => col.name.toLowerCase() === 'date');
|
|
368
|
+
if (dateColumnIndex > 0) {
|
|
369
|
+
const dateColumn = columns[dateColumnIndex];
|
|
370
|
+
const otherColumns = columns.filter((col) => col.name.toLowerCase() !== 'date');
|
|
371
|
+
return [dateColumn, ...otherColumns];
|
|
372
|
+
}
|
|
373
|
+
return columns;
|
|
334
374
|
};
|
|
335
375
|
/**
|
|
336
376
|
* Check if a view menu item has submenu
|
|
@@ -374,6 +414,9 @@ export const areSomeCurrentColumnsSelected = (columns, allSelected) => {
|
|
|
374
414
|
export const toggleAllCurrentColumns = (columns, shouldSelect) => {
|
|
375
415
|
return columns.map((col) => {
|
|
376
416
|
var _a;
|
|
417
|
+
if (isDateColumn(col.name)) {
|
|
418
|
+
return Object.assign(Object.assign({}, col), { selected: true });
|
|
419
|
+
}
|
|
377
420
|
const updatedMenuItems = (_a = col.menuItems) === null || _a === void 0 ? void 0 : _a.map((item) => (Object.assign(Object.assign({}, item), { selected: shouldSelect })));
|
|
378
421
|
return Object.assign(Object.assign({}, col), { selected: shouldSelect, menuItems: updatedMenuItems });
|
|
379
422
|
});
|
|
@@ -2,7 +2,7 @@ import React, { ReactNode } from 'react';
|
|
|
2
2
|
import type { CalenderMode, TableHeaderStatus, ColumnViewProps, TableMode, Timezone, SegmentCountry } from '../../types/index.js';
|
|
3
3
|
import { AvailableStatus } from '../StatusBar/type';
|
|
4
4
|
import { PartialExcept } from '../../types/index.js';
|
|
5
|
-
import type { ViewMenuItem, LayoutSection } from './TableView/types';
|
|
5
|
+
import type { ViewMenuItem, LayoutSection, Template } from './TableView/types';
|
|
6
6
|
type ViewsOptions = {
|
|
7
7
|
default: {};
|
|
8
8
|
developer: {};
|
|
@@ -45,7 +45,6 @@ export interface TableHeaderProps<IStatus extends TableHeaderStatus | TableHeade
|
|
|
45
45
|
id: string;
|
|
46
46
|
label: string;
|
|
47
47
|
}) => void;
|
|
48
|
-
customViews?: ViewMenuItem[];
|
|
49
48
|
onCreateCustomView?: (data: {
|
|
50
49
|
name: string;
|
|
51
50
|
selectedColumns: ColumnViewProps[];
|
|
@@ -57,12 +56,7 @@ export interface TableHeaderProps<IStatus extends TableHeaderStatus | TableHeade
|
|
|
57
56
|
layout: LayoutSection;
|
|
58
57
|
}) => Promise<void>;
|
|
59
58
|
onDeleteCustomView?: (viewId: string) => Promise<void>;
|
|
60
|
-
|
|
61
|
-
initialTableViews?: ColumnViewProps[];
|
|
62
|
-
onCustomViewsChange?: (customViews: ViewMenuItem[]) => void;
|
|
63
|
-
initialCustomViews?: ViewMenuItem[];
|
|
64
|
-
layoutData?: import('./TableView/types').LayoutSection[];
|
|
65
|
-
templates?: import('./TableView/types').TemplatesListResponse | import('./TableView/types').TemplateResponse[];
|
|
59
|
+
templates?: Template[];
|
|
66
60
|
lang?: string;
|
|
67
61
|
onToggleTextButtonClick?: () => void;
|
|
68
62
|
children?: ReactNode;
|
|
@@ -15,6 +15,6 @@ import { ToolbarStyled, StyledBox, ActionsBox } from './style';
|
|
|
15
15
|
import WindowAppIcon from '../WindowAppIcon';
|
|
16
16
|
function Toolbar(_a) {
|
|
17
17
|
var { onMouseEnter, onMouseLeave, isMaximized, isHovered, children, rightActions, leftActions, title, icon } = _a, props = __rest(_a, ["onMouseEnter", "onMouseLeave", "isMaximized", "isHovered", "children", "rightActions", "leftActions", "title", "icon"]);
|
|
18
|
-
return (_jsx(ToolbarStyled, Object.assign({ onMouseEnter: onMouseEnter, onMouseLeave: onMouseLeave, maximized: isMaximized, id: "toolbar", isHovered: isHovered }, props, { children: _jsxs(StyledBox, Object.assign({ className: "toolbar-wrapper" }, { children: [leftActions ? _jsx(ActionsBox, Object.assign({ className: "action-box" }, { children: leftActions })) : _jsx("div", {}), _jsx(WindowAppIcon, { title: title, icon: icon }), rightActions
|
|
18
|
+
return (_jsx(ToolbarStyled, Object.assign({ onMouseEnter: onMouseEnter, onMouseLeave: onMouseLeave, maximized: isMaximized, id: "toolbar", isHovered: isHovered }, props, { children: _jsxs(StyledBox, Object.assign({ className: "toolbar-wrapper" }, { children: [leftActions ? _jsx(ActionsBox, Object.assign({ className: "action-box" }, { children: leftActions })) : _jsx("div", {}), _jsx(WindowAppIcon, { title: title, icon: icon }), rightActions || _jsx("div", {})] })) })));
|
|
19
19
|
}
|
|
20
20
|
export default memo(Toolbar);
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
2
|
import type { IVirtualTable } from '../../../types/index.js';
|
|
3
|
-
declare function VirtualTable({ columns, rows, threshold, showHeader, headerProps, rowProps, footerProps, isLoading, error, columnsSorting, onColumnSort, loadMoreItems, isFetchingNextPage, triggerDataRefetch, scrollToIndex, areAllRowsLoaded, tableBodyStyles, tableMode, tableTitle, onStartDrag, isSheetView, isMinimized, footerComponent, customNoDataComponent, }: Readonly<IVirtualTable>): import("react/jsx-runtime").JSX.Element;
|
|
3
|
+
declare function VirtualTable({ columns, rows, threshold, showHeader, headerProps, rowProps, footerProps, isLoading, error, columnsSorting, onColumnSort, loadMoreItems, isFetchingNextPage, triggerDataRefetch, scrollToIndex, areAllRowsLoaded, tableBodyStyles, tableMode, tableTitle, onStartDrag, isSheetView, isMinimized, footerComponent, customNoDataComponent, defaultSkeleton, }: Readonly<IVirtualTable>): import("react/jsx-runtime").JSX.Element;
|
|
4
4
|
declare const _default: import("react").MemoExoticComponent<typeof VirtualTable>;
|
|
5
5
|
export default _default;
|
|
@@ -15,7 +15,7 @@ import AutoSizer from 'react-virtualized-auto-sizer';
|
|
|
15
15
|
import InfiniteLoader from 'react-window-infinite-loader';
|
|
16
16
|
import { TABLE_ROW_HEIGHT, TABLE_THRESHOLD, TABLE_LIST_OVER_SCAN, SHEET_VIEW_TABLE_ROW_HEIGHT } from '../../../constants/index.js';
|
|
17
17
|
import { useDelayToSetValue } from '../../../hooks/index.js';
|
|
18
|
-
import { isHeightNotFullyFilledByRows, isNotFoundError, isTimeoutError, hasError } from '../../../utils/index.js';
|
|
18
|
+
import { isHeightNotFullyFilledByRows, isNotFoundError, isTimeoutError, hasError, getProcessedColumns } from '../../../utils/index.js';
|
|
19
19
|
import TableFooter from '../components/TableFooter/TableFooter';
|
|
20
20
|
import TableHeader from '../components/TableHeader';
|
|
21
21
|
import TableLastItem from '../components/TableLastItem';
|
|
@@ -34,7 +34,7 @@ const createItemData = memoize((columns, isLoading, rows, rowProps, scrollToInde
|
|
|
34
34
|
areAllRowsLoaded,
|
|
35
35
|
isSheetView,
|
|
36
36
|
}));
|
|
37
|
-
function VirtualTable({ columns, rows, threshold = TABLE_THRESHOLD, showHeader, headerProps, rowProps, footerProps, isLoading, error, columnsSorting, onColumnSort, loadMoreItems, isFetchingNextPage, triggerDataRefetch, scrollToIndex, areAllRowsLoaded = false, tableBodyStyles, tableMode, tableTitle, onStartDrag, isSheetView = false, isMinimized, footerComponent, customNoDataComponent, }) {
|
|
37
|
+
function VirtualTable({ columns, rows, threshold = TABLE_THRESHOLD, showHeader, headerProps, rowProps, footerProps, isLoading, error, columnsSorting, onColumnSort, loadMoreItems, isFetchingNextPage, triggerDataRefetch, scrollToIndex, areAllRowsLoaded = false, tableBodyStyles, tableMode, tableTitle, onStartDrag, isSheetView = false, isMinimized, footerComponent, customNoDataComponent, defaultSkeleton = false, }) {
|
|
38
38
|
var _a;
|
|
39
39
|
const theme = useTheme();
|
|
40
40
|
const onPointerDown = (e) => {
|
|
@@ -58,7 +58,8 @@ function VirtualTable({ columns, rows, threshold = TABLE_THRESHOLD, showHeader,
|
|
|
58
58
|
const tableEmpty = !isLoading && rows.length === 0;
|
|
59
59
|
const hasTimeoutError = isTimeoutError(error);
|
|
60
60
|
const lastItemIndex = rows.length - 1;
|
|
61
|
-
const
|
|
61
|
+
const processedColumns = useMemo(() => getProcessedColumns(columns, isLoading !== null && isLoading !== void 0 ? isLoading : false, defaultSkeleton), [columns, isLoading, defaultSkeleton]);
|
|
62
|
+
const shownColumns = useMemo(() => processedColumns.filter((column) => !column.hidden), [processedColumns]);
|
|
62
63
|
const orderedColumns = useMemo(() => shownColumns.sort((a, b) => { var _a, _b; return ((_a = a === null || a === void 0 ? void 0 : a.order) !== null && _a !== void 0 ? _a : 1000000) - ((_b = b === null || b === void 0 ? void 0 : b.order) !== null && _b !== void 0 ? _b : 1000000); }), [shownColumns]);
|
|
63
64
|
const areTotalRowsNotFillingHeight = isHeightNotFullyFilledByRows(rows.length) && !tableLoading;
|
|
64
65
|
const itemsCount = isDelayedFetchingNextPage || (areAllRowsLoaded && !areTotalRowsNotFillingHeight) ? rows.length + 1 : rows.length;
|
package/build/constants/apps.js
CHANGED
|
@@ -7,6 +7,7 @@ export declare const getPaymentMethodsIcon: (source: string) => string;
|
|
|
7
7
|
export declare const getPaymentIssuersIcon: (source: string) => string;
|
|
8
8
|
export declare const getCountriesIcon: (source: string) => string;
|
|
9
9
|
export declare const getServiceFunctionIcon: (functionCode: string) => string;
|
|
10
|
+
export declare const getStatusIcon: (statusCode: string) => string;
|
|
10
11
|
export declare const getCurrenciesIcon: (currency: string) => string;
|
|
11
12
|
export declare const getAuthorityIcon: (authority: string) => string;
|
|
12
13
|
export declare const SARIconImage: string;
|
|
@@ -9,6 +9,7 @@ export const getPaymentMethodsIcon = (source) => `${lightUrl}/payment-method/v2/
|
|
|
9
9
|
export const getPaymentIssuersIcon = (source) => `${lightUrl}/payment-issuer/${source}.svg`;
|
|
10
10
|
export const getCountriesIcon = (source) => `${lightUrl}/country/v3/${source}.svg`;
|
|
11
11
|
export const getServiceFunctionIcon = (functionCode) => `${lightUrl}/function/${functionCode}.svg`;
|
|
12
|
+
export const getStatusIcon = (statusCode) => `${lightUrl}/statusIcons/${statusCode}.svg`;
|
|
12
13
|
export const getCurrenciesIcon = (currency) => `${cdnUrl}/currency/v3/light/${currency}.svg`;
|
|
13
14
|
export const getAuthorityIcon = (authority) => {
|
|
14
15
|
const authorityWithoutSpaces = authority.replace(/\s/g, '');
|
package/build/types/reports.d.ts
CHANGED
|
@@ -4,3 +4,24 @@ export declare enum ReportStatusEnum {
|
|
|
4
4
|
PROCESSING = "PROCESSING",
|
|
5
5
|
INITIATED = "INITIATED"
|
|
6
6
|
}
|
|
7
|
+
export interface Report {
|
|
8
|
+
id: string;
|
|
9
|
+
object: string;
|
|
10
|
+
live_mode: boolean;
|
|
11
|
+
api_version: string;
|
|
12
|
+
feature_version: string;
|
|
13
|
+
type: string;
|
|
14
|
+
status: string;
|
|
15
|
+
segment_id: string;
|
|
16
|
+
created_at: number;
|
|
17
|
+
started_at: number;
|
|
18
|
+
completed_at: number;
|
|
19
|
+
total_records: number;
|
|
20
|
+
result_file: string;
|
|
21
|
+
download_count: string;
|
|
22
|
+
last_downloaded_at: number;
|
|
23
|
+
response: {
|
|
24
|
+
code: string;
|
|
25
|
+
message: string;
|
|
26
|
+
};
|
|
27
|
+
}
|
package/build/types/table.d.ts
CHANGED
|
@@ -116,6 +116,7 @@ export interface IVirtualTable<R = any> {
|
|
|
116
116
|
headerProps?: TableHeadProps;
|
|
117
117
|
isLoading?: boolean;
|
|
118
118
|
isFetchingNextPage?: boolean;
|
|
119
|
+
defaultSkeleton?: boolean;
|
|
119
120
|
rowProps?: TableRowProps & {
|
|
120
121
|
onRowClick?: (row: R, index: number) => void;
|
|
121
122
|
};
|
package/build/utils/date.js
CHANGED
|
@@ -69,9 +69,11 @@ export const formatUTCOffset = (offset = 0) => {
|
|
|
69
69
|
* @returns - Array of two dates [startDate, endDate]
|
|
70
70
|
*/
|
|
71
71
|
export const getDefaultDateRange = (startDay = 6) => {
|
|
72
|
-
const
|
|
73
|
-
const
|
|
74
|
-
|
|
72
|
+
const safeDays = Number.isFinite(startDay) && startDay >= 0 ? startDay : 0;
|
|
73
|
+
const now = dayjs();
|
|
74
|
+
const start = now.subtract(safeDays, 'day').startOf('day');
|
|
75
|
+
const end = now.endOf('day');
|
|
76
|
+
return [start.toDate(), end.toDate()];
|
|
75
77
|
};
|
|
76
78
|
export const getUTCTimestamp = (date) => {
|
|
77
79
|
// Create a Date object with the local date string
|
package/build/utils/index.d.ts
CHANGED
package/build/utils/index.js
CHANGED
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { IColumnProps } from '../types/index.js';
|
|
2
|
+
export declare const DEFAULT_SKELETON_WIDTHS: string[];
|
|
3
|
+
export declare const generateSkeletonColumns: (staticWidths?: string[]) => IColumnProps[];
|
|
4
|
+
export declare const getProcessedColumns: <T = any>(columns: readonly IColumnProps<T>[], isLoading: boolean, defaultSkeleton: boolean) => IColumnProps<T>[];
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export const DEFAULT_SKELETON_WIDTHS = ['120px', '180px', '100px', '150px', '200px', '140px', '160px', '110px', '190px', '130px'];
|
|
2
|
+
export const generateSkeletonColumns = (staticWidths = DEFAULT_SKELETON_WIDTHS) => {
|
|
3
|
+
return staticWidths.map((width, index) => ({
|
|
4
|
+
id: `skeleton-col-${index}`,
|
|
5
|
+
header: '',
|
|
6
|
+
width,
|
|
7
|
+
order: index,
|
|
8
|
+
hidden: false,
|
|
9
|
+
sortable: false,
|
|
10
|
+
}));
|
|
11
|
+
};
|
|
12
|
+
export const getProcessedColumns = (columns, isLoading, defaultSkeleton) => {
|
|
13
|
+
if (defaultSkeleton && isLoading) {
|
|
14
|
+
return generateSkeletonColumns();
|
|
15
|
+
}
|
|
16
|
+
return [...columns];
|
|
17
|
+
};
|
package/package.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tap-payments/os-micro-frontend-shared",
|
|
3
3
|
"description": "Shared components and utilities for Tap Payments micro frontends",
|
|
4
|
-
"version": "0.1.372-test.2-test.3-test.4
|
|
5
|
-
"testVersion":
|
|
4
|
+
"version": "0.1.372-test.2-test.3-test.4",
|
|
5
|
+
"testVersion": 4,
|
|
6
6
|
"type": "module",
|
|
7
7
|
"main": "build/index.js",
|
|
8
8
|
"module": "build/index.js",
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
/// <reference types="react" />
|
|
2
|
-
import type { ViewSelectorProps } from './types';
|
|
3
|
-
declare function ViewSelector({ onViewChange, setIsViewVisible, setTableViews, tableViews: externalTableViews, resetTableViews, customViews: externalCustomViews, onCreateCustomView, onEditCustomView, onDeleteCustomView, tableMode, onTableViewsChange, onCustomViewsChange, templates, lang, }: ViewSelectorProps): import("react/jsx-runtime").JSX.Element;
|
|
4
|
-
declare const _default: import("react").MemoExoticComponent<typeof ViewSelector>;
|
|
5
|
-
export default _default;
|