@tap-payments/os-micro-frontend-shared 0.1.373-test.2-test.3-test.4-test.5-test.6-test.7 → 0.1.373-test.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) 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/ViewsDropdown.d.ts +1 -1
  7. package/build/components/TableHeader/TableView/ViewsDropdown.js +116 -197
  8. package/build/components/TableHeader/TableView/ViewsMenu.d.ts +5 -0
  9. package/build/components/TableHeader/TableView/ViewsMenu.js +76 -0
  10. package/build/components/TableHeader/TableView/components/ColumnList.js +4 -4
  11. package/build/components/TableHeader/TableView/components/ViewsSubmenu.js +46 -30
  12. package/build/components/TableHeader/TableView/constants.d.ts +1 -0
  13. package/build/components/TableHeader/TableView/constants.js +1 -0
  14. package/build/components/TableHeader/TableView/hooks/index.d.ts +1 -1
  15. package/build/components/TableHeader/TableView/hooks/index.js +1 -1
  16. package/build/components/TableHeader/TableView/hooks/useCreateViewDialog.js +12 -12
  17. package/build/components/TableHeader/TableView/hooks/useNestedSubmenu.js +2 -9
  18. package/build/components/TableHeader/TableView/hooks/useSubmenuHover.js +1 -2
  19. package/build/components/TableHeader/TableView/hooks/useViewsManager.d.ts +6 -8
  20. package/build/components/TableHeader/TableView/hooks/useViewsManager.js +45 -94
  21. package/build/components/TableHeader/TableView/hooks/useViewsMenu.d.ts +44 -0
  22. package/build/components/TableHeader/TableView/hooks/useViewsMenu.js +182 -0
  23. package/build/components/TableHeader/TableView/index.d.ts +3 -3
  24. package/build/components/TableHeader/TableView/index.js +2 -4
  25. package/build/components/TableHeader/TableView/types.d.ts +18 -32
  26. package/build/components/TableHeader/TableView/utils.d.ts +5 -5
  27. package/build/components/TableHeader/TableView/utils.js +22 -13
  28. package/build/components/TableHeader/index.d.ts +1 -0
  29. package/build/components/TableHeader/type.d.ts +2 -9
  30. package/build/components/Toolbar/Toolbar.js +1 -1
  31. package/build/components/VirtualTables/VirtualTable/VirtualTable.d.ts +1 -1
  32. package/build/components/VirtualTables/VirtualTable/VirtualTable.js +4 -3
  33. package/build/constants/apps.js +2 -0
  34. package/build/constants/assets.d.ts +1 -0
  35. package/build/constants/assets.js +1 -0
  36. package/build/types/reports.d.ts +21 -0
  37. package/build/types/table.d.ts +1 -0
  38. package/build/utils/date.js +5 -3
  39. package/build/utils/index.d.ts +1 -0
  40. package/build/utils/index.js +1 -0
  41. package/build/utils/skeletonColumns.d.ts +4 -0
  42. package/build/utils/skeletonColumns.js +17 -0
  43. package/package.json +2 -2
  44. package/build/components/TableHeader/TableView/ViewSelector.d.ts +0 -5
  45. package/build/components/TableHeader/TableView/ViewSelector.js +0 -46
  46. package/build/components/TableHeader/TableView/hooks/useViewSelector.d.ts +0 -59
  47. package/build/components/TableHeader/TableView/hooks/useViewSelector.js +0 -193
@@ -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 = unknown>(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.373-test.2-test.3-test.4-test.5-test.6-test.7",
5
- "testVersion": 7,
4
+ "version": "0.1.373-test.2",
5
+ "testVersion": 2,
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, apiMetadata, }: ViewSelectorProps): import("react/jsx-runtime").JSX.Element;
4
- declare const _default: import("react").MemoExoticComponent<typeof ViewSelector>;
5
- export default _default;
@@ -1,46 +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', apiMetadata, }) {
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, updateSelectedView, } = 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
- setDefaultColumns,
40
- apiMetadata,
41
- });
42
- 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) => {
43
- setDefaultViewElement(defaultViewEl ? null : e.currentTarget);
44
- }, setViews: handleResetViews, tableViews: tableViews, setTableViews: handleTableViewsChange, onCreateCustomView: handleOpenCreateDialog, customViews: customViews, onEditCustomView: handleOpenEditDialog, defaultColumns: defaultColumns, setDefaultColumns: setDefaultColumns, updateSelectedView: updateSelectedView })] })) })), _jsx(CreateViewDialog, { open: isCreateDialogOpen, onClose: handleCloseCreateDialog, availableColumns: defaultColumns, defaultColumns: defaultColumns, onCreate: handleSaveView, editingView: editingView, onDelete: handleDeleteView, tableViews: shouldUseCurrentState ? defaultColumns : undefined, mode: mode })] }));
45
- }
46
- export default memo(ViewSelector);
@@ -1,59 +0,0 @@
1
- import { type MouseEvent } from 'react';
2
- import type { ColumnViewProps } from '../../../../types/index.js';
3
- import type { ViewMenuItem, LayoutSection, ViewMode, TemplateAPIMetadata } 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
- setDefaultColumns?: (columns: ColumnViewProps[]) => void;
33
- apiMetadata?: TemplateAPIMetadata;
34
- }
35
- export declare const useViewSelector: ({ mode, onViewChange, onTableViewsChange, onCustomViewsChange, onCreateCustomView, onEditCustomView, onDeleteCustomView, resetTableViews, setTableViews, tableViews, customViews, defaultColumns, defaultTemplate, setInternalCustomViews, setInternalTableViews, setDefaultColumns, apiMetadata, }: UseViewSelectorProps) => {
36
- anchorViewEl: HTMLDivElement | null;
37
- defaultViewEl: HTMLDivElement | null;
38
- setDefaultViewElement: import("react").Dispatch<import("react").SetStateAction<HTMLDivElement | null>>;
39
- isCreateDialogOpen: boolean;
40
- editingView: ViewMenuItem | null;
41
- selectedViewInfo: ViewOption;
42
- shouldUseCurrentState: boolean;
43
- handleViewButtonClick: (event: MouseEvent<HTMLDivElement>) => void;
44
- handleCloseViewDropdown: () => void;
45
- handleClose: () => void;
46
- handleSelectedViewInfo: (selected: ViewOption, viewMenuItem?: ViewMenuItem) => void;
47
- handleOpenCreateDialog: (useCurrentState?: boolean) => void;
48
- handleOpenEditDialog: (view: ViewMenuItem) => void;
49
- handleCloseCreateDialog: () => void;
50
- handleSaveView: (data: {
51
- name: string;
52
- selectedColumns: ColumnViewProps[];
53
- layout: LayoutSection;
54
- }) => Promise<void>;
55
- handleDeleteView: (viewId: string) => Promise<void>;
56
- handleResetViews: (views: string[]) => void;
57
- handleTableViewsChange: (newTableViews: ColumnViewProps[]) => void;
58
- updateSelectedView: (updatedView: ViewMenuItem) => void;
59
- };
@@ -1,193 +0,0 @@
1
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
- return new (P || (P = Promise))(function (resolve, reject) {
4
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
- step((generator = generator.apply(thisArg, _arguments || [])).next());
8
- });
9
- };
10
- import { useState, useCallback, useEffect, useRef } from 'react';
11
- import { createCustomViewMenuItem } from '../utils';
12
- export const useViewSelector = ({ mode, onViewChange, onTableViewsChange, onCustomViewsChange, onCreateCustomView, onEditCustomView, onDeleteCustomView, resetTableViews, setTableViews, tableViews, customViews, defaultColumns, defaultTemplate, setInternalCustomViews, setInternalTableViews, setDefaultColumns, apiMetadata, }) => {
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
- const hasInitializedRef = useRef(false);
21
- // Update editingView when customViews changes to ensure it reflects the latest saved state
22
- useEffect(() => {
23
- if (editingView && customViews.length > 0) {
24
- const updatedView = customViews.find((view) => view.id === editingView.id);
25
- if (updatedView && updatedView !== editingView) {
26
- setEditingView(updatedView);
27
- }
28
- }
29
- }, [customViews, editingView]);
30
- // Update selectedView when customViews changes to ensure it reflects the latest saved state
31
- useEffect(() => {
32
- if (selectedView && selectedView.isCustom && customViews.length > 0) {
33
- const updatedView = customViews.find((view) => view.id === selectedView.id);
34
- if (updatedView) {
35
- // Compare submenu to detect changes (deep comparison would be better, but this works for now)
36
- const submenuChanged = JSON.stringify(updatedView.submenu) !== JSON.stringify(selectedView.submenu);
37
- const labelChanged = updatedView.label !== selectedView.label;
38
- if (submenuChanged || labelChanged) {
39
- // Create a new object reference to ensure React detects the change
40
- const newSelectedView = Object.assign(Object.assign({}, updatedView), { submenu: updatedView.submenu ? [...updatedView.submenu] : undefined });
41
- setSelectedView(newSelectedView);
42
- onViewChange === null || onViewChange === void 0 ? void 0 : onViewChange(newSelectedView);
43
- }
44
- }
45
- }
46
- }, [customViews, selectedView, onViewChange]);
47
- // Notify parent of initial view on mount only
48
- useEffect(() => {
49
- // Only initialize once on mount, don't reset if user has already selected a view
50
- if (hasInitializedRef.current)
51
- return;
52
- // Use defaultTemplate if available, otherwise undefined (built-in default view)
53
- const initialView = defaultTemplate || undefined;
54
- setSelectedView(initialView);
55
- onViewChange === null || onViewChange === void 0 ? void 0 : onViewChange(initialView);
56
- hasInitializedRef.current = true;
57
- }, [defaultTemplate, onViewChange]);
58
- const handleTableViewsChange = useCallback((newTableViews) => {
59
- const setTableViewsState = setTableViews !== null && setTableViews !== void 0 ? setTableViews : setInternalTableViews;
60
- setTableViewsState(newTableViews);
61
- onTableViewsChange === null || onTableViewsChange === void 0 ? void 0 : onTableViewsChange(newTableViews);
62
- }, [setTableViews, setInternalTableViews, onTableViewsChange]);
63
- const handleCustomViewsChange = useCallback((newCustomViews) => {
64
- setInternalCustomViews(newCustomViews);
65
- onCustomViewsChange === null || onCustomViewsChange === void 0 ? void 0 : onCustomViewsChange(newCustomViews);
66
- }, [setInternalCustomViews, onCustomViewsChange]);
67
- const handleViewButtonClick = useCallback((event) => {
68
- setAnchorViewEl(event.currentTarget);
69
- setDefaultViewElement(event.currentTarget);
70
- }, []);
71
- const handleCloseViewDropdown = useCallback(() => {
72
- setDefaultViewElement(null);
73
- }, []);
74
- const handleClose = useCallback(() => {
75
- setAnchorViewEl(null);
76
- setDefaultViewElement(null);
77
- setSelectedViewInfo({ label: 'Default', id: 'default' });
78
- }, []);
79
- const handleSelectedViewInfo = useCallback((selected, viewMenuItem) => {
80
- setSelectedViewInfo(selected);
81
- // Update selected view and notify parent
82
- const newSelectedView = viewMenuItem || undefined;
83
- setSelectedView(newSelectedView);
84
- onViewChange === null || onViewChange === void 0 ? void 0 : onViewChange(newSelectedView);
85
- handleCloseViewDropdown();
86
- }, [handleCloseViewDropdown, onViewChange]);
87
- // Internal function to update selected view and notify parent
88
- // Used when default columns change via "Okay" button
89
- const updateSelectedView = useCallback((updatedView) => {
90
- setSelectedView(updatedView);
91
- setSelectedViewInfo({ id: updatedView.id, label: updatedView.label });
92
- onViewChange === null || onViewChange === void 0 ? void 0 : onViewChange(updatedView);
93
- }, [onViewChange, setSelectedViewInfo]);
94
- const handleOpenCreateDialog = useCallback((useCurrentState = false) => {
95
- setEditingView(null);
96
- setShouldUseCurrentState(useCurrentState);
97
- setIsCreateDialogOpen(true);
98
- setDefaultViewElement(null);
99
- }, []);
100
- const handleOpenEditDialog = useCallback((view) => {
101
- setEditingView(view);
102
- setShouldUseCurrentState(true);
103
- setIsCreateDialogOpen(true);
104
- }, []);
105
- const handleCloseCreateDialog = useCallback(() => {
106
- setIsCreateDialogOpen(false);
107
- setEditingView(null);
108
- setShouldUseCurrentState(false);
109
- }, []);
110
- const handleSaveView = useCallback((data) => __awaiter(void 0, void 0, void 0, function* () {
111
- try {
112
- if (editingView) {
113
- // Use templateId for API calls, not the internal view id
114
- const templateId = editingView.templateId || editingView.id;
115
- yield (onEditCustomView === null || onEditCustomView === void 0 ? void 0 : onEditCustomView(templateId, data));
116
- // Update state after promise resolves successfully
117
- const updatedView = Object.assign(Object.assign({}, editingView), { label: data.name, columns: data.selectedColumns.map((col) => col.name), submenu: data.selectedColumns });
118
- const updatedViews = customViews.map((view) => (view.id === editingView.id ? updatedView : view));
119
- handleCustomViewsChange(updatedViews);
120
- // If the updated view is currently selected, update selectedView to reflect changes
121
- // Create a new object reference to ensure React detects the change
122
- if ((selectedView === null || selectedView === void 0 ? void 0 : selectedView.id) === editingView.id) {
123
- const newSelectedView = Object.assign(Object.assign({}, updatedView), { submenu: [...updatedView.submenu] });
124
- setSelectedView(newSelectedView);
125
- onViewChange === null || onViewChange === void 0 ? void 0 : onViewChange(newSelectedView);
126
- }
127
- }
128
- else {
129
- yield (onCreateCustomView === null || onCreateCustomView === void 0 ? void 0 : onCreateCustomView(data));
130
- // Update state after promise resolves successfully
131
- const newView = createCustomViewMenuItem(data.name, data.selectedColumns);
132
- const updatedViews = [...customViews, newView];
133
- handleCustomViewsChange(updatedViews);
134
- }
135
- }
136
- catch (error) {
137
- // Error will be handled by the toast in CreateViewDialog
138
- throw error;
139
- }
140
- }), [editingView, customViews, handleCustomViewsChange, onEditCustomView, onCreateCustomView, selectedView, onViewChange]);
141
- const handleDeleteView = useCallback((viewId) => __awaiter(void 0, void 0, void 0, function* () {
142
- try {
143
- // Find the view to get its templateId
144
- const viewToDelete = customViews.find((view) => view.id === viewId);
145
- const templateId = (viewToDelete === null || viewToDelete === void 0 ? void 0 : viewToDelete.templateId) || viewId;
146
- yield (onDeleteCustomView === null || onDeleteCustomView === void 0 ? void 0 : onDeleteCustomView(templateId));
147
- // Update state after promise resolves successfully
148
- const updatedViews = customViews.filter((view) => view.id !== viewId);
149
- handleCustomViewsChange(updatedViews);
150
- // If the deleted view was selected, reset to default
151
- if ((selectedView === null || selectedView === void 0 ? void 0 : selectedView.id) === viewId) {
152
- setSelectedView(undefined);
153
- onViewChange === null || onViewChange === void 0 ? void 0 : onViewChange(undefined);
154
- }
155
- }
156
- catch (error) {
157
- // Error will be handled by the toast in CreateViewDialog
158
- throw error;
159
- }
160
- }), [customViews, handleCustomViewsChange, onDeleteCustomView, selectedView, onViewChange]);
161
- const handleResetViews = useCallback((views) => {
162
- if (resetTableViews) {
163
- resetTableViews({ id: views[0], label: views[0] });
164
- }
165
- else {
166
- // Reset to default columns from templates
167
- handleTableViewsChange([...defaultColumns]);
168
- }
169
- }, [resetTableViews, defaultColumns, handleTableViewsChange]);
170
- return {
171
- // State
172
- anchorViewEl,
173
- defaultViewEl,
174
- setDefaultViewElement,
175
- isCreateDialogOpen,
176
- editingView,
177
- selectedViewInfo,
178
- shouldUseCurrentState,
179
- // Handlers
180
- handleViewButtonClick,
181
- handleCloseViewDropdown,
182
- handleClose,
183
- handleSelectedViewInfo,
184
- handleOpenCreateDialog,
185
- handleOpenEditDialog,
186
- handleCloseCreateDialog,
187
- handleSaveView,
188
- handleDeleteView,
189
- handleResetViews,
190
- handleTableViewsChange,
191
- updateSelectedView,
192
- };
193
- };