@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.
Files changed (45) hide show
  1. package/build/components/Sandbox/style.js +2 -3
  2. package/build/components/TableHeader/FiltersRow.d.ts +1 -1
  3. package/build/components/TableHeader/FiltersRow.js +3 -3
  4. package/build/components/TableHeader/TableHeader.d.ts +1 -1
  5. package/build/components/TableHeader/TableHeader.js +2 -2
  6. package/build/components/TableHeader/TableView/CreateViewDialog.js +1 -2
  7. package/build/components/TableHeader/TableView/ViewsDropdown.d.ts +1 -1
  8. package/build/components/TableHeader/TableView/ViewsDropdown.js +91 -108
  9. package/build/components/TableHeader/TableView/ViewsMenu.d.ts +5 -0
  10. package/build/components/TableHeader/TableView/ViewsMenu.js +76 -0
  11. package/build/components/TableHeader/TableView/components/ViewsSubmenu.js +46 -23
  12. package/build/components/TableHeader/TableView/hooks/index.d.ts +1 -1
  13. package/build/components/TableHeader/TableView/hooks/index.js +1 -1
  14. package/build/components/TableHeader/TableView/hooks/useCreateViewDialog.js +1 -3
  15. package/build/components/TableHeader/TableView/hooks/useNestedSubmenu.js +2 -9
  16. package/build/components/TableHeader/TableView/hooks/useViewsManager.d.ts +5 -8
  17. package/build/components/TableHeader/TableView/hooks/useViewsManager.js +50 -94
  18. package/build/components/TableHeader/TableView/hooks/useViewsMenu.d.ts +44 -0
  19. package/build/components/TableHeader/TableView/hooks/useViewsMenu.js +177 -0
  20. package/build/components/TableHeader/TableView/index.d.ts +3 -3
  21. package/build/components/TableHeader/TableView/index.js +2 -4
  22. package/build/components/TableHeader/TableView/styles.js +11 -2
  23. package/build/components/TableHeader/TableView/types.d.ts +34 -31
  24. package/build/components/TableHeader/TableView/utils.d.ts +5 -5
  25. package/build/components/TableHeader/TableView/utils.js +16 -4
  26. package/build/components/TableHeader/index.d.ts +1 -0
  27. package/build/components/TableHeader/type.d.ts +2 -8
  28. package/build/components/Toolbar/Toolbar.js +1 -1
  29. package/build/components/VirtualTables/VirtualTable/VirtualTable.d.ts +1 -1
  30. package/build/components/VirtualTables/VirtualTable/VirtualTable.js +4 -3
  31. package/build/constants/apps.js +2 -0
  32. package/build/constants/assets.d.ts +1 -0
  33. package/build/constants/assets.js +1 -0
  34. package/build/types/reports.d.ts +21 -0
  35. package/build/types/table.d.ts +1 -0
  36. package/build/utils/date.js +5 -3
  37. package/build/utils/index.d.ts +1 -0
  38. package/build/utils/index.js +1 -0
  39. package/build/utils/skeletonColumns.d.ts +4 -0
  40. package/build/utils/skeletonColumns.js +17 -0
  41. package/package.json +2 -2
  42. package/build/components/TableHeader/TableView/ViewSelector.d.ts +0 -5
  43. package/build/components/TableHeader/TableView/ViewSelector.js +0 -44
  44. package/build/components/TableHeader/TableView/hooks/useViewSelector.d.ts +0 -56
  45. 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, ViewMode } from './types';
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: ViewMode, layoutData?: LayoutSection[]) => ColumnViewProps[];
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?: ViewMode, lang?: string) => {
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: ViewMode, lang?: string) => LayoutSection;
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
- const section = layoutData.find((s) => s.code.toLowerCase() === mode.toLowerCase());
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
- const section = template.layout.find((s) => s.code.toLowerCase() === mode.toLowerCase());
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: mode === 'advanced' ? 'Advanced' : 'Sheet',
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
  });
@@ -6,3 +6,4 @@ export { default as FiltersRowWrapper } from './FiltersRowWrapper';
6
6
  export { default as FiltersRow } from './FiltersRow';
7
7
  export * from './style';
8
8
  export * from './type';
9
+ export type { Template, LayoutSection, ViewMenuItem } from './TableView/types';
@@ -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
- onTableViewsChange?: (tableViews: ColumnViewProps[]) => void;
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 ? (_jsx(ActionsBox, Object.assign({ sx: { justifyContent: 'flex-end' }, className: "action-box" }, { children: rightActions }))) : (_jsx("div", {}))] })) })));
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 shownColumns = useMemo(() => columns.filter((column) => !column.hidden), [columns]);
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;
@@ -492,4 +492,6 @@ export const MF_APPS_MAPPER = new Set([
492
492
  APP_CODES.payouts.code,
493
493
  APP_CODES.reports.code,
494
494
  APP_CODES.leads.code,
495
+ APP_CODES.wallet.code,
496
+ APP_CODES.authentication.code,
495
497
  ]);
@@ -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, '');
@@ -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
+ }
@@ -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
  };
@@ -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 monthDaysMinus = dayjs().subtract(startDay, 'day').hour(0).minute(0).second(0).toDate();
73
- const today = dayjs(new Date()).hour(23).minute(59).second(59).toDate();
74
- return [monthDaysMinus, today];
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
@@ -45,3 +45,4 @@ export * from './boolean';
45
45
  export * from './columnResizeStorage';
46
46
  export * from './timezone';
47
47
  export * from './merchantSource';
48
+ export * from './skeletonColumns';
@@ -45,3 +45,4 @@ export * from './boolean';
45
45
  export * from './columnResizeStorage';
46
46
  export * from './timezone';
47
47
  export * from './merchantSource';
48
+ export * from './skeletonColumns';
@@ -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-test.5-test.6-test.7",
5
- "testVersion": 7,
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
- };