@tap-payments/os-micro-frontend-shared 0.1.372-test.2-test.3-test.4-test.5-test.6-test.7 → 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.js +1 -2
- package/build/components/TableHeader/TableView/ViewsDropdown.d.ts +1 -1
- package/build/components/TableHeader/TableView/ViewsDropdown.js +91 -108
- 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/hooks/index.d.ts +1 -1
- package/build/components/TableHeader/TableView/hooks/index.js +1 -1
- package/build/components/TableHeader/TableView/hooks/useCreateViewDialog.js +1 -3
- 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 -31
- package/build/components/TableHeader/TableView/utils.d.ts +5 -5
- package/build/components/TableHeader/TableView/utils.js +16 -4
- 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 -177
|
@@ -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
|
*/
|
|
@@ -22,7 +22,7 @@ export const transformLayoutToColumns = (layout, lang = 'en') => {
|
|
|
22
22
|
columns.push({
|
|
23
23
|
name: col.code,
|
|
24
24
|
label,
|
|
25
|
-
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,
|
|
26
26
|
menuItems: (menuItems === null || menuItems === void 0 ? void 0 : menuItems.length) ? menuItems : undefined,
|
|
27
27
|
});
|
|
28
28
|
});
|
|
@@ -31,7 +31,9 @@ export const transformLayoutToColumns = (layout, lang = 'en') => {
|
|
|
31
31
|
};
|
|
32
32
|
export const getColumnsByMode = (mode, layoutData) => {
|
|
33
33
|
if (layoutData && layoutData.length > 0) {
|
|
34
|
-
|
|
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);
|
|
35
37
|
if (section) {
|
|
36
38
|
return transformLayoutToColumns([section]);
|
|
37
39
|
}
|
|
@@ -103,7 +105,9 @@ export const transformTemplatesToViewMenuItems = (templates, mode = 'sheet', lan
|
|
|
103
105
|
let defaultTemplate;
|
|
104
106
|
templates.forEach((template) => {
|
|
105
107
|
// Get columns for the specified mode
|
|
106
|
-
|
|
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);
|
|
107
111
|
const columns = section ? transformLayoutToColumns([section], lang) : [];
|
|
108
112
|
// Handle id as either string or object
|
|
109
113
|
const templateIdString = typeof template.id === 'string' ? template.id : template.templateId;
|
|
@@ -172,8 +176,10 @@ export const convertColumnsToLayoutSection = (columns, mode, lang = 'en') => {
|
|
|
172
176
|
},
|
|
173
177
|
], order: index + 1, default: (_b = col.selected) !== null && _b !== void 0 ? _b : false }, (fieldItems && fieldItems.length > 0 && { fields: fieldItems }));
|
|
174
178
|
});
|
|
179
|
+
// Map TableMode to layout section code: 'default' → 'Advanced', 'sheet' → 'Sheet'
|
|
180
|
+
const sectionCode = mode === 'sheet' ? 'Sheet' : 'Advanced';
|
|
175
181
|
return {
|
|
176
|
-
code:
|
|
182
|
+
code: sectionCode,
|
|
177
183
|
columns: columnItems,
|
|
178
184
|
};
|
|
179
185
|
};
|
|
@@ -323,6 +329,9 @@ export const toggleSingleColumn = (columns, columnName) => {
|
|
|
323
329
|
var _a;
|
|
324
330
|
if (col.name !== columnName)
|
|
325
331
|
return col;
|
|
332
|
+
if (isDateColumn(col.name)) {
|
|
333
|
+
return Object.assign(Object.assign({}, col), { selected: true });
|
|
334
|
+
}
|
|
326
335
|
const newSelected = !col.selected;
|
|
327
336
|
const updatedMenuItems = (_a = col.menuItems) === null || _a === void 0 ? void 0 : _a.map((item) => (Object.assign(Object.assign({}, item), { selected: newSelected })));
|
|
328
337
|
return Object.assign(Object.assign({}, col), { selected: newSelected, menuItems: updatedMenuItems });
|
|
@@ -405,6 +414,9 @@ export const areSomeCurrentColumnsSelected = (columns, allSelected) => {
|
|
|
405
414
|
export const toggleAllCurrentColumns = (columns, shouldSelect) => {
|
|
406
415
|
return columns.map((col) => {
|
|
407
416
|
var _a;
|
|
417
|
+
if (isDateColumn(col.name)) {
|
|
418
|
+
return Object.assign(Object.assign({}, col), { selected: true });
|
|
419
|
+
}
|
|
408
420
|
const updatedMenuItems = (_a = col.menuItems) === null || _a === void 0 ? void 0 : _a.map((item) => (Object.assign(Object.assign({}, item), { selected: shouldSelect })));
|
|
409
421
|
return Object.assign(Object.assign({}, col), { selected: shouldSelect, menuItems: updatedMenuItems });
|
|
410
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;
|
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
-
import { memo } from 'react';
|
|
3
|
-
import { useTranslation } from 'react-i18next';
|
|
4
|
-
import ClickAwayListener from '@mui/material/ClickAwayListener';
|
|
5
|
-
import { Icon, StyledButton } from '../../index.js';
|
|
6
|
-
import { viewIcon } from '../../../constants/index.js';
|
|
7
|
-
import ViewsDropdown from './ViewsDropdown';
|
|
8
|
-
import CreateViewDialog from './CreateViewDialog';
|
|
9
|
-
import { ViewWrapper } from './styles';
|
|
10
|
-
import { useViewsManager } from './hooks';
|
|
11
|
-
import { useViewSelector } from './hooks/useViewSelector';
|
|
12
|
-
function ViewSelector({ onViewChange, setIsViewVisible, setTableViews, tableViews: externalTableViews, resetTableViews, customViews: externalCustomViews, onCreateCustomView, onEditCustomView, onDeleteCustomView, tableMode = 'default', onTableViewsChange, onCustomViewsChange, templates, lang = 'en', }) {
|
|
13
|
-
const { t } = useTranslation();
|
|
14
|
-
// Map tableMode to viewMode: 'sheet' → 'sheet', 'default' → 'advanced'
|
|
15
|
-
const mode = tableMode === 'sheet' ? 'sheet' : 'advanced';
|
|
16
|
-
const { defaultColumns, setDefaultColumns, internalTableViews, setInternalTableViews, internalCustomViews, setInternalCustomViews, defaultTemplate, } = useViewsManager({
|
|
17
|
-
mode,
|
|
18
|
-
templates,
|
|
19
|
-
lang,
|
|
20
|
-
});
|
|
21
|
-
const tableViews = externalTableViews !== null && externalTableViews !== void 0 ? externalTableViews : internalTableViews;
|
|
22
|
-
const customViews = externalCustomViews !== null && externalCustomViews !== void 0 ? externalCustomViews : internalCustomViews;
|
|
23
|
-
const { anchorViewEl, defaultViewEl, setDefaultViewElement, isCreateDialogOpen, editingView, selectedViewInfo, shouldUseCurrentState, handleViewButtonClick, handleCloseViewDropdown, handleSelectedViewInfo, handleOpenCreateDialog, handleOpenEditDialog, handleCloseCreateDialog, handleSaveView, handleDeleteView, handleResetViews, handleTableViewsChange, } = useViewSelector({
|
|
24
|
-
mode,
|
|
25
|
-
onViewChange,
|
|
26
|
-
onTableViewsChange,
|
|
27
|
-
onCustomViewsChange,
|
|
28
|
-
onCreateCustomView,
|
|
29
|
-
onEditCustomView,
|
|
30
|
-
onDeleteCustomView,
|
|
31
|
-
resetTableViews,
|
|
32
|
-
setTableViews,
|
|
33
|
-
tableViews,
|
|
34
|
-
customViews,
|
|
35
|
-
defaultColumns,
|
|
36
|
-
defaultTemplate,
|
|
37
|
-
setInternalCustomViews,
|
|
38
|
-
setInternalTableViews,
|
|
39
|
-
});
|
|
40
|
-
return (_jsxs(_Fragment, { children: [_jsx(ClickAwayListener, Object.assign({ onClickAway: handleCloseViewDropdown }, { children: _jsxs(ViewWrapper, Object.assign({ sx: { width: '32px' }, "data-testid": "ViewSelector" }, { children: [_jsx(StyledButton, Object.assign({ title: t('tableView'), "data-testid": "ViewSelector_button", onClick: handleViewButtonClick }, { children: _jsx(Icon, { src: viewIcon, alt: "view", sx: { width: 14, height: 14 } }) })), _jsx(ViewsDropdown, { open: Boolean(defaultViewEl), anchorEl: anchorViewEl, setSelectedViewInfo: handleSelectedViewInfo, selectedViewInfo: selectedViewInfo, onSelect: (e, selectedView) => {
|
|
41
|
-
setDefaultViewElement(defaultViewEl ? null : e.currentTarget);
|
|
42
|
-
}, setViews: handleResetViews, tableViews: tableViews, setTableViews: handleTableViewsChange, onCreateCustomView: handleOpenCreateDialog, 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 })] }));
|
|
43
|
-
}
|
|
44
|
-
export default memo(ViewSelector);
|
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
import { type MouseEvent } from 'react';
|
|
2
|
-
import type { ColumnViewProps } from '../../../../types/index.js';
|
|
3
|
-
import type { ViewMenuItem, LayoutSection, ViewMode } from '../types';
|
|
4
|
-
import type { ViewOption } from '../../type';
|
|
5
|
-
export interface UseViewSelectorProps {
|
|
6
|
-
mode: ViewMode;
|
|
7
|
-
onViewChange?: (selectedView?: ViewMenuItem) => void;
|
|
8
|
-
onTableViewsChange?: (tableViews: ColumnViewProps[]) => void;
|
|
9
|
-
onCustomViewsChange?: (customViews: ViewMenuItem[]) => void;
|
|
10
|
-
onCreateCustomView?: (data: {
|
|
11
|
-
name: string;
|
|
12
|
-
selectedColumns: ColumnViewProps[];
|
|
13
|
-
layout: LayoutSection;
|
|
14
|
-
}) => Promise<void>;
|
|
15
|
-
onEditCustomView?: (viewId: string, data: {
|
|
16
|
-
name: string;
|
|
17
|
-
selectedColumns: ColumnViewProps[];
|
|
18
|
-
layout: LayoutSection;
|
|
19
|
-
}) => Promise<void>;
|
|
20
|
-
onDeleteCustomView?: (viewId: string) => Promise<void>;
|
|
21
|
-
resetTableViews?: (view: {
|
|
22
|
-
id: string;
|
|
23
|
-
label: string;
|
|
24
|
-
}) => void;
|
|
25
|
-
setTableViews?: (columns: ColumnViewProps[]) => void;
|
|
26
|
-
tableViews: ColumnViewProps[];
|
|
27
|
-
customViews: ViewMenuItem[];
|
|
28
|
-
defaultColumns: ColumnViewProps[];
|
|
29
|
-
defaultTemplate?: ViewMenuItem;
|
|
30
|
-
setInternalCustomViews: (views: ViewMenuItem[]) => void;
|
|
31
|
-
setInternalTableViews: (views: ColumnViewProps[]) => void;
|
|
32
|
-
}
|
|
33
|
-
export declare const useViewSelector: ({ mode, onViewChange, onTableViewsChange, onCustomViewsChange, onCreateCustomView, onEditCustomView, onDeleteCustomView, resetTableViews, setTableViews, tableViews, customViews, defaultColumns, defaultTemplate, setInternalCustomViews, setInternalTableViews, }: UseViewSelectorProps) => {
|
|
34
|
-
anchorViewEl: HTMLDivElement | null;
|
|
35
|
-
defaultViewEl: HTMLDivElement | null;
|
|
36
|
-
setDefaultViewElement: import("react").Dispatch<import("react").SetStateAction<HTMLDivElement | null>>;
|
|
37
|
-
isCreateDialogOpen: boolean;
|
|
38
|
-
editingView: ViewMenuItem | null;
|
|
39
|
-
selectedViewInfo: ViewOption;
|
|
40
|
-
shouldUseCurrentState: boolean;
|
|
41
|
-
handleViewButtonClick: (event: MouseEvent<HTMLDivElement>) => void;
|
|
42
|
-
handleCloseViewDropdown: () => void;
|
|
43
|
-
handleClose: () => void;
|
|
44
|
-
handleSelectedViewInfo: (selected: ViewOption, viewMenuItem?: ViewMenuItem) => void;
|
|
45
|
-
handleOpenCreateDialog: (useCurrentState?: boolean) => void;
|
|
46
|
-
handleOpenEditDialog: (view: ViewMenuItem) => void;
|
|
47
|
-
handleCloseCreateDialog: () => void;
|
|
48
|
-
handleSaveView: (data: {
|
|
49
|
-
name: string;
|
|
50
|
-
selectedColumns: ColumnViewProps[];
|
|
51
|
-
layout: LayoutSection;
|
|
52
|
-
}) => Promise<void>;
|
|
53
|
-
handleDeleteView: (viewId: string) => Promise<void>;
|
|
54
|
-
handleResetViews: (views: string[]) => void;
|
|
55
|
-
handleTableViewsChange: (newTableViews: ColumnViewProps[]) => void;
|
|
56
|
-
};
|
|
@@ -1,177 +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 } from 'react';
|
|
11
|
-
import { createCustomViewMenuItem } from '../utils';
|
|
12
|
-
export const useViewSelector = ({ mode, onViewChange, onTableViewsChange, onCustomViewsChange, onCreateCustomView, onEditCustomView, onDeleteCustomView, resetTableViews, setTableViews, tableViews, customViews, defaultColumns, defaultTemplate, setInternalCustomViews, setInternalTableViews, }) => {
|
|
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
|
-
// Update editingView when customViews changes to ensure it reflects the latest saved state
|
|
21
|
-
useEffect(() => {
|
|
22
|
-
if (editingView && customViews.length > 0) {
|
|
23
|
-
const updatedView = customViews.find((view) => view.id === editingView.id);
|
|
24
|
-
if (updatedView && updatedView !== editingView) {
|
|
25
|
-
setEditingView(updatedView);
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
}, [customViews, editingView]);
|
|
29
|
-
// Update selectedView when customViews changes to ensure it reflects the latest saved state
|
|
30
|
-
useEffect(() => {
|
|
31
|
-
if (selectedView && selectedView.isCustom && customViews.length > 0) {
|
|
32
|
-
const updatedView = customViews.find((view) => view.id === selectedView.id);
|
|
33
|
-
if (updatedView) {
|
|
34
|
-
// Compare submenu to detect changes (deep comparison would be better, but this works for now)
|
|
35
|
-
const submenuChanged = JSON.stringify(updatedView.submenu) !== JSON.stringify(selectedView.submenu);
|
|
36
|
-
const labelChanged = updatedView.label !== selectedView.label;
|
|
37
|
-
if (submenuChanged || labelChanged) {
|
|
38
|
-
// Create a new object reference to ensure React detects the change
|
|
39
|
-
const newSelectedView = Object.assign(Object.assign({}, updatedView), { submenu: updatedView.submenu ? [...updatedView.submenu] : undefined });
|
|
40
|
-
setSelectedView(newSelectedView);
|
|
41
|
-
onViewChange === null || onViewChange === void 0 ? void 0 : onViewChange(newSelectedView);
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
}, [customViews, selectedView, onViewChange]);
|
|
46
|
-
// Notify parent of initial view on mount
|
|
47
|
-
useEffect(() => {
|
|
48
|
-
// Use defaultTemplate if available, otherwise undefined (built-in default view)
|
|
49
|
-
const initialView = defaultTemplate || undefined;
|
|
50
|
-
console.log('initialView', initialView);
|
|
51
|
-
setSelectedView(initialView);
|
|
52
|
-
onViewChange === null || onViewChange === void 0 ? void 0 : onViewChange(initialView);
|
|
53
|
-
}, [onViewChange, defaultTemplate]);
|
|
54
|
-
const handleTableViewsChange = useCallback((newTableViews) => {
|
|
55
|
-
const setTableViewsState = setTableViews !== null && setTableViews !== void 0 ? setTableViews : setInternalTableViews;
|
|
56
|
-
setTableViewsState(newTableViews);
|
|
57
|
-
onTableViewsChange === null || onTableViewsChange === void 0 ? void 0 : onTableViewsChange(newTableViews);
|
|
58
|
-
}, [setTableViews, setInternalTableViews, onTableViewsChange]);
|
|
59
|
-
const handleCustomViewsChange = useCallback((newCustomViews) => {
|
|
60
|
-
setInternalCustomViews(newCustomViews);
|
|
61
|
-
onCustomViewsChange === null || onCustomViewsChange === void 0 ? void 0 : onCustomViewsChange(newCustomViews);
|
|
62
|
-
}, [setInternalCustomViews, onCustomViewsChange]);
|
|
63
|
-
const handleViewButtonClick = useCallback((event) => {
|
|
64
|
-
setAnchorViewEl(event.currentTarget);
|
|
65
|
-
setDefaultViewElement(event.currentTarget);
|
|
66
|
-
}, []);
|
|
67
|
-
const handleCloseViewDropdown = useCallback(() => {
|
|
68
|
-
setDefaultViewElement(null);
|
|
69
|
-
}, []);
|
|
70
|
-
const handleClose = useCallback(() => {
|
|
71
|
-
setAnchorViewEl(null);
|
|
72
|
-
setDefaultViewElement(null);
|
|
73
|
-
setSelectedViewInfo({ label: 'Default', id: 'default' });
|
|
74
|
-
}, []);
|
|
75
|
-
const handleSelectedViewInfo = useCallback((selected, viewMenuItem) => {
|
|
76
|
-
setSelectedViewInfo(selected);
|
|
77
|
-
// Update selected view and notify parent
|
|
78
|
-
const newSelectedView = viewMenuItem || undefined;
|
|
79
|
-
console.log('newSelectedView', newSelectedView);
|
|
80
|
-
setSelectedView(newSelectedView);
|
|
81
|
-
onViewChange === null || onViewChange === void 0 ? void 0 : onViewChange(newSelectedView);
|
|
82
|
-
handleCloseViewDropdown();
|
|
83
|
-
}, [handleCloseViewDropdown, onViewChange]);
|
|
84
|
-
const handleOpenCreateDialog = useCallback((useCurrentState = false) => {
|
|
85
|
-
setEditingView(null);
|
|
86
|
-
setShouldUseCurrentState(useCurrentState);
|
|
87
|
-
setIsCreateDialogOpen(true);
|
|
88
|
-
setDefaultViewElement(null);
|
|
89
|
-
}, []);
|
|
90
|
-
const handleOpenEditDialog = useCallback((view) => {
|
|
91
|
-
setEditingView(view);
|
|
92
|
-
setShouldUseCurrentState(true);
|
|
93
|
-
setIsCreateDialogOpen(true);
|
|
94
|
-
}, []);
|
|
95
|
-
const handleCloseCreateDialog = useCallback(() => {
|
|
96
|
-
setIsCreateDialogOpen(false);
|
|
97
|
-
setEditingView(null);
|
|
98
|
-
setShouldUseCurrentState(false);
|
|
99
|
-
}, []);
|
|
100
|
-
const handleSaveView = useCallback((data) => __awaiter(void 0, void 0, void 0, function* () {
|
|
101
|
-
try {
|
|
102
|
-
if (editingView) {
|
|
103
|
-
yield (onEditCustomView === null || onEditCustomView === void 0 ? void 0 : onEditCustomView(editingView.id, data));
|
|
104
|
-
// Update state after promise resolves successfully
|
|
105
|
-
const updatedView = Object.assign(Object.assign({}, editingView), { label: data.name, columns: data.selectedColumns.map((col) => col.name), submenu: data.selectedColumns });
|
|
106
|
-
const updatedViews = customViews.map((view) => (view.id === editingView.id ? updatedView : view));
|
|
107
|
-
handleCustomViewsChange(updatedViews);
|
|
108
|
-
// If the updated view is currently selected, update selectedView to reflect changes
|
|
109
|
-
// Create a new object reference to ensure React detects the change
|
|
110
|
-
if ((selectedView === null || selectedView === void 0 ? void 0 : selectedView.id) === editingView.id) {
|
|
111
|
-
const newSelectedView = Object.assign(Object.assign({}, updatedView), { submenu: [...updatedView.submenu] });
|
|
112
|
-
setSelectedView(newSelectedView);
|
|
113
|
-
onViewChange === null || onViewChange === void 0 ? void 0 : onViewChange(newSelectedView);
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
else {
|
|
117
|
-
yield (onCreateCustomView === null || onCreateCustomView === void 0 ? void 0 : onCreateCustomView(data));
|
|
118
|
-
// Update state after promise resolves successfully
|
|
119
|
-
const newView = createCustomViewMenuItem(data.name, data.selectedColumns);
|
|
120
|
-
const updatedViews = [...customViews, newView];
|
|
121
|
-
handleCustomViewsChange(updatedViews);
|
|
122
|
-
}
|
|
123
|
-
}
|
|
124
|
-
catch (error) {
|
|
125
|
-
// Error will be handled by the toast in CreateViewDialog
|
|
126
|
-
throw error;
|
|
127
|
-
}
|
|
128
|
-
}), [editingView, customViews, handleCustomViewsChange, onEditCustomView, onCreateCustomView, selectedView, onViewChange]);
|
|
129
|
-
const handleDeleteView = useCallback((viewId) => __awaiter(void 0, void 0, void 0, function* () {
|
|
130
|
-
try {
|
|
131
|
-
yield (onDeleteCustomView === null || onDeleteCustomView === void 0 ? void 0 : onDeleteCustomView(viewId));
|
|
132
|
-
// Update state after promise resolves successfully
|
|
133
|
-
const updatedViews = customViews.filter((view) => view.id !== viewId);
|
|
134
|
-
handleCustomViewsChange(updatedViews);
|
|
135
|
-
// If the deleted view was selected, reset to default
|
|
136
|
-
if ((selectedView === null || selectedView === void 0 ? void 0 : selectedView.id) === viewId) {
|
|
137
|
-
setSelectedView(undefined);
|
|
138
|
-
onViewChange === null || onViewChange === void 0 ? void 0 : onViewChange(undefined);
|
|
139
|
-
}
|
|
140
|
-
}
|
|
141
|
-
catch (error) {
|
|
142
|
-
// Error will be handled by the toast in CreateViewDialog
|
|
143
|
-
throw error;
|
|
144
|
-
}
|
|
145
|
-
}), [customViews, handleCustomViewsChange, onDeleteCustomView, selectedView, onViewChange]);
|
|
146
|
-
const handleResetViews = useCallback((views) => {
|
|
147
|
-
if (resetTableViews) {
|
|
148
|
-
resetTableViews({ id: views[0], label: views[0] });
|
|
149
|
-
}
|
|
150
|
-
else {
|
|
151
|
-
// Reset to default columns from templates
|
|
152
|
-
handleTableViewsChange([...defaultColumns]);
|
|
153
|
-
}
|
|
154
|
-
}, [resetTableViews, defaultColumns, handleTableViewsChange]);
|
|
155
|
-
return {
|
|
156
|
-
// State
|
|
157
|
-
anchorViewEl,
|
|
158
|
-
defaultViewEl,
|
|
159
|
-
setDefaultViewElement,
|
|
160
|
-
isCreateDialogOpen,
|
|
161
|
-
editingView,
|
|
162
|
-
selectedViewInfo,
|
|
163
|
-
shouldUseCurrentState,
|
|
164
|
-
// Handlers
|
|
165
|
-
handleViewButtonClick,
|
|
166
|
-
handleCloseViewDropdown,
|
|
167
|
-
handleClose,
|
|
168
|
-
handleSelectedViewInfo,
|
|
169
|
-
handleOpenCreateDialog,
|
|
170
|
-
handleOpenEditDialog,
|
|
171
|
-
handleCloseCreateDialog,
|
|
172
|
-
handleSaveView,
|
|
173
|
-
handleDeleteView,
|
|
174
|
-
handleResetViews,
|
|
175
|
-
handleTableViewsChange,
|
|
176
|
-
};
|
|
177
|
-
};
|