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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) 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.d.ts +1 -1
  7. package/build/components/TableHeader/TableView/CreateViewDialog.js +42 -11
  8. package/build/components/TableHeader/TableView/ViewsDropdown.d.ts +1 -1
  9. package/build/components/TableHeader/TableView/ViewsDropdown.js +91 -93
  10. package/build/components/TableHeader/TableView/ViewsMenu.d.ts +5 -0
  11. package/build/components/TableHeader/TableView/ViewsMenu.js +76 -0
  12. package/build/components/TableHeader/TableView/components/ViewsSubmenu.js +46 -23
  13. package/build/components/TableHeader/TableView/constants.d.ts +1 -1
  14. package/build/components/TableHeader/TableView/constants.js +1 -1
  15. package/build/components/TableHeader/TableView/hooks/index.d.ts +1 -1
  16. package/build/components/TableHeader/TableView/hooks/index.js +1 -1
  17. package/build/components/TableHeader/TableView/hooks/useCreateViewDialog.js +15 -5
  18. package/build/components/TableHeader/TableView/hooks/useNestedSubmenu.js +2 -9
  19. package/build/components/TableHeader/TableView/hooks/useViewsManager.d.ts +5 -8
  20. package/build/components/TableHeader/TableView/hooks/useViewsManager.js +50 -94
  21. package/build/components/TableHeader/TableView/hooks/useViewsMenu.d.ts +44 -0
  22. package/build/components/TableHeader/TableView/hooks/useViewsMenu.js +177 -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/styles.js +11 -2
  26. package/build/components/TableHeader/TableView/types.d.ts +34 -32
  27. package/build/components/TableHeader/TableView/utils.d.ts +6 -5
  28. package/build/components/TableHeader/TableView/utils.js +56 -13
  29. package/build/components/TableHeader/index.d.ts +1 -0
  30. package/build/components/TableHeader/type.d.ts +2 -8
  31. package/build/components/Toolbar/Toolbar.js +1 -1
  32. package/build/components/VirtualTables/VirtualTable/VirtualTable.d.ts +1 -1
  33. package/build/components/VirtualTables/VirtualTable/VirtualTable.js +4 -3
  34. package/build/constants/apps.js +2 -0
  35. package/build/constants/assets.d.ts +1 -0
  36. package/build/constants/assets.js +1 -0
  37. package/build/types/reports.d.ts +21 -0
  38. package/build/types/table.d.ts +1 -0
  39. package/build/utils/date.js +5 -3
  40. package/build/utils/index.d.ts +1 -0
  41. package/build/utils/index.js +1 -0
  42. package/build/utils/skeletonColumns.d.ts +4 -0
  43. package/build/utils/skeletonColumns.js +17 -0
  44. package/package.json +2 -2
  45. package/build/components/TableHeader/TableView/ViewSelector.d.ts +0 -5
  46. package/build/components/TableHeader/TableView/ViewSelector.js +0 -44
  47. package/build/components/TableHeader/TableView/hooks/useViewSelector.d.ts +0 -56
  48. package/build/components/TableHeader/TableView/hooks/useViewSelector.js +0 -122
@@ -2,12 +2,10 @@ export { default } from './TableView';
2
2
  export { default as TableView } from './TableView';
3
3
  export { default as DefaultViews } from './DefaultViews';
4
4
  export { default as CustomViews } from './CustomViews';
5
- export { default as ViewSelector } from './ViewSelector';
5
+ export { default as ViewsMenu } from './ViewsMenu';
6
6
  export { default as ViewsDropdown } from './ViewsDropdown';
7
7
  export { default as CreateViewDialog } from './CreateViewDialog';
8
8
  export { transformLayoutToColumns, getColumnsByMode, createCustomViewMenuItem, setViewAsDefault, transformTemplatesToViewMenuItems, convertColumnsToLayoutSection, isDateColumn, getColumnCheckState, } from './utils';
9
- export { useSubmenuHover } from './hooks';
9
+ export { useSubmenuHover, useViewsManager, useViewsMenu } from './hooks';
10
10
  export { DIALOG_WIDTH, DIALOG_HEIGHT, MAX_CUSTOM_VIEWS, TEMPLATE_NAME_MAX_LENGTH } from './constants';
11
- // Note: defaultViewList, advancedColumns, sheetColumns are only exported for demo purposes
12
- // They should not be used as defaults in production - all data should come from API
13
11
  export { defaultViewList, advancedColumns, sheetColumns } from './data';
@@ -350,18 +350,24 @@ export const ResetCheckboxSx = {
350
350
  };
351
351
  export const SubmenuContainer = styled(Box)(() => ({
352
352
  minWidth: 200,
353
+ display: 'flex',
354
+ flexDirection: 'column',
355
+ maxHeight: '80vh',
356
+ overflow: 'hidden',
353
357
  }));
354
358
  export const ColumnItemsContainer = styled(Box)(() => ({
355
- maxHeight: 300,
359
+ flex: 1,
356
360
  overflowY: 'auto',
357
361
  paddingLeft: 6,
358
362
  paddingRight: 6,
363
+ minHeight: 0,
359
364
  }));
360
365
  export const SaveCustomViewBox = styled(Box)(() => ({
361
366
  paddingLeft: 8,
362
367
  paddingRight: 8,
363
368
  paddingTop: 8,
364
369
  paddingBottom: 8,
370
+ flexShrink: 0,
365
371
  }));
366
372
  export const SaveCustomViewInnerBox = styled(Box)(({ disabled }) => ({
367
373
  width: '100%',
@@ -376,7 +382,7 @@ export const SaveCustomViewInnerBox = styled(Box)(({ disabled }) => ({
376
382
  cursor: disabled ? 'not-allowed' : 'pointer',
377
383
  opacity: disabled ? 0.5 : 1,
378
384
  }));
379
- export const ButtonsContainer = styled(Box)(() => ({
385
+ export const ButtonsContainer = styled(Box)(({ theme }) => ({
380
386
  display: 'flex',
381
387
  justifyContent: 'flex-end',
382
388
  gap: 12,
@@ -384,6 +390,9 @@ export const ButtonsContainer = styled(Box)(() => ({
384
390
  paddingBottom: 8,
385
391
  paddingLeft: 12,
386
392
  paddingRight: 12,
393
+ flexShrink: 0,
394
+ borderTop: '1px solid',
395
+ borderColor: theme.palette.divider,
387
396
  }));
388
397
  export const CancelButtonSx = {
389
398
  fontSize: 11,
@@ -1,7 +1,5 @@
1
- /// <reference types="react" />
2
- import type { ColumnViewProps } from '../../../types/index.js';
1
+ import type { ColumnViewProps, TableMode } from '../../../types/index.js';
3
2
  import type { TableHeaderProps, ViewOption } from '../type';
4
- export type ViewMode = 'advanced' | 'sheet';
5
3
  export interface ViewMenuItem {
6
4
  label: string;
7
5
  id: string;
@@ -34,7 +32,24 @@ export interface LayoutSection {
34
32
  code: string;
35
33
  columns: ColumnItem[];
36
34
  }
37
- export interface TemplateResponse {
35
+ export interface TemplateAPIMetadata {
36
+ segment: string;
37
+ app: string;
38
+ service: string;
39
+ user: {
40
+ id: string;
41
+ };
42
+ master_template_id?: string;
43
+ }
44
+ export interface CreateTemplatePayload extends TemplateAPIMetadata {
45
+ name: string;
46
+ layout: LayoutSection[];
47
+ }
48
+ export interface UpdateTemplatePayload extends TemplateAPIMetadata {
49
+ name: string;
50
+ layout: LayoutSection[];
51
+ }
52
+ export interface Template {
38
53
  templateId: string;
39
54
  segment: string;
40
55
  app: string;
@@ -52,20 +67,15 @@ export interface TemplateResponse {
52
67
  created: number;
53
68
  updated: number;
54
69
  default: boolean;
55
- object?: string;
56
- master?: boolean;
57
- live_mode?: boolean;
58
- api_version?: string;
59
- feature_version?: string;
60
70
  }
61
- export interface TemplatesListResponse {
71
+ export interface TemplatesList {
62
72
  object: string;
63
73
  live_mode: boolean;
64
74
  api_version: string;
65
75
  feature_version: string;
66
76
  count: number;
67
77
  has_more: boolean;
68
- templates: TemplateResponse[];
78
+ templates: Template[];
69
79
  }
70
80
  export interface CreateCustomViewDialogProps {
71
81
  open: boolean;
@@ -76,7 +86,6 @@ export interface CreateCustomViewDialogProps {
76
86
  layout: LayoutSection;
77
87
  }) => Promise<void>;
78
88
  availableColumns?: ColumnViewProps[];
79
- isLoading?: boolean;
80
89
  defaultColumns?: ColumnViewProps[];
81
90
  editingView?: {
82
91
  id: string;
@@ -86,19 +95,14 @@ export interface CreateCustomViewDialogProps {
86
95
  } | null;
87
96
  onDelete?: (viewId: string) => Promise<void>;
88
97
  tableViews?: ColumnViewProps[];
89
- mode?: ViewMode;
98
+ mode?: TableMode;
90
99
  }
91
100
  export interface ColumnCheckState {
92
101
  checked: boolean;
93
102
  indeterminate: boolean;
94
103
  }
95
- export interface ViewSelectorProps {
104
+ export interface ViewsMenuProps {
96
105
  onViewChange?: TableHeaderProps['onViewChange'];
97
- setIsViewVisible: (visible: boolean) => void;
98
- setTableViews?: TableHeaderProps['setTableViews'];
99
- tableViews?: TableHeaderProps['tableViews'];
100
- resetTableViews?: TableHeaderProps['resetTableViews'];
101
- customViews?: ViewMenuItem[];
102
106
  onCreateCustomView?: (data: {
103
107
  name: string;
104
108
  selectedColumns: ColumnViewProps[];
@@ -110,29 +114,26 @@ export interface ViewSelectorProps {
110
114
  layout: LayoutSection;
111
115
  }) => Promise<void>;
112
116
  onDeleteCustomView?: (viewId: string) => Promise<void>;
113
- tableMode?: import('../../../types/index.js').TableMode;
114
- onTableViewsChange?: (tableViews: ColumnViewProps[]) => void;
115
- initialTableViews?: ColumnViewProps[];
116
- onCustomViewsChange?: (customViews: ViewMenuItem[]) => void;
117
- initialCustomViews?: ViewMenuItem[];
118
- layoutData?: LayoutSection[];
119
- templates?: TemplatesListResponse | TemplateResponse[];
117
+ tableMode?: TableMode;
118
+ templates: Template[];
120
119
  lang?: string;
121
120
  }
122
121
  export interface ViewsDropdownProps {
123
122
  open: boolean;
124
123
  selectedViewInfo: ViewOption;
125
124
  setSelectedViewInfo: (selected: ViewOption, viewMenuItem?: ViewMenuItem) => void;
126
- onSelect: (e: React.MouseEvent<HTMLDivElement>, selectedView?: ViewMenuItem) => void;
127
- setViews?: (views: string[]) => void;
128
125
  anchorEl: Element | null;
129
- tableViews?: ColumnViewProps[];
130
- setTableViews?: (columns: ColumnViewProps[]) => void;
126
+ defaultModified?: boolean;
127
+ onMarkDefaultModified?: () => void;
131
128
  onCreateCustomView?: (useCurrentState?: boolean) => void;
132
129
  customViews?: ViewMenuItem[];
133
130
  onEditCustomView?: (view: ViewMenuItem) => void;
131
+ onSaveDefaultColumns?: (columns: ColumnViewProps[]) => void;
134
132
  defaultColumns?: ColumnViewProps[];
135
133
  setDefaultColumns?: (columns: ColumnViewProps[]) => void;
134
+ updateSelectedView?: (view: ViewMenuItem) => void;
135
+ mode?: TableMode;
136
+ defaultTemplate?: ViewMenuItem;
136
137
  }
137
138
  export interface ColumnListProps {
138
139
  selectedColumns: ColumnViewProps[];
@@ -159,6 +160,7 @@ export interface ViewsSubmenuProps {
159
160
  onReset: () => void;
160
161
  onColumnToggle: (columnName: string) => void;
161
162
  onNestedItemToggle: (columnName: string, subItemName: string) => void;
163
+ onReorder: (reorderedColumnNames: string[]) => void;
162
164
  anchorEl: HTMLElement | null;
163
165
  isModified?: boolean;
164
166
  }
@@ -174,7 +176,7 @@ export interface UseCreateViewDialogProps {
174
176
  tableViews?: ColumnViewProps[];
175
177
  }
176
178
  export interface UseViewsManagerProps {
177
- mode: ViewMode;
178
- templates?: TemplatesListResponse | TemplateResponse[];
179
+ tableMode: TableMode;
180
+ templates: Template[];
179
181
  lang?: string;
180
182
  }
@@ -1,10 +1,10 @@
1
- import type { ColumnViewProps } from '../../../types/index.js';
2
- import type { LayoutSection, ViewMenuItem, ColumnCheckState, 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
  */
@@ -92,6 +92,7 @@ export declare const deepCloneColumns: (columns: ColumnViewProps[]) => ColumnVie
92
92
  export declare const toggleSingleColumn: (columns: ColumnViewProps[], columnName: string) => ColumnViewProps[];
93
93
  /**
94
94
  * Get submenu items for a view menu item
95
+ * Always includes the date column at the beginning
95
96
  */
96
97
  export declare const getSubmenuItems: (item: ViewMenuItem, defaultColumns: ColumnViewProps[]) => ColumnViewProps[];
97
98
  /**
@@ -1,3 +1,4 @@
1
+ import { DATE_COLUMN_CONFIG } from './constants';
1
2
  // Note: advancedColumns and sheetColumns are only used in demo - not imported here to avoid default data
2
3
  /**
3
4
  * Transform API layout response to internal ColumnViewProps format
@@ -21,7 +22,7 @@ export const transformLayoutToColumns = (layout, lang = 'en') => {
21
22
  columns.push({
22
23
  name: col.code,
23
24
  label,
24
- selected: (_d = col.default) !== null && _d !== void 0 ? _d : false,
25
+ selected: isDateColumn(col.code) ? true : (_d = col.default) !== null && _d !== void 0 ? _d : false,
25
26
  menuItems: (menuItems === null || menuItems === void 0 ? void 0 : menuItems.length) ? menuItems : undefined,
26
27
  });
27
28
  });
@@ -30,7 +31,9 @@ export const transformLayoutToColumns = (layout, lang = 'en') => {
30
31
  };
31
32
  export const getColumnsByMode = (mode, layoutData) => {
32
33
  if (layoutData && layoutData.length > 0) {
33
- 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);
34
37
  if (section) {
35
38
  return transformLayoutToColumns([section]);
36
39
  }
@@ -102,14 +105,24 @@ export const transformTemplatesToViewMenuItems = (templates, mode = 'sheet', lan
102
105
  let defaultTemplate;
103
106
  templates.forEach((template) => {
104
107
  // Get columns for the specified mode
105
- 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);
106
111
  const columns = section ? transformLayoutToColumns([section], lang) : [];
107
112
  // Handle id as either string or object
108
113
  const templateIdString = typeof template.id === 'string' ? template.id : template.templateId;
109
114
  const viewId = typeof template.id === 'string' ? template.id : template.templateId;
115
+ // Always include date column at the beginning
116
+ const dateColumn = DATE_COLUMN_CONFIG;
117
+ const columnsWithDate = columns.some((col) => col.name.toLowerCase() === 'date') ? columns : [dateColumn, ...columns];
118
+ // Ensure date column is first
119
+ const dateColumnIndex = columnsWithDate.findIndex((col) => col.name.toLowerCase() === 'date');
120
+ const finalColumns = dateColumnIndex > 0
121
+ ? [columnsWithDate[dateColumnIndex], ...columnsWithDate.filter((col) => col.name.toLowerCase() !== 'date')]
122
+ : columnsWithDate;
110
123
  if (template.default) {
111
124
  // Store default template columns to merge into built-in Default view
112
- defaultTemplateColumns = columns;
125
+ defaultTemplateColumns = finalColumns;
113
126
  // Also create a ViewMenuItem for the default template
114
127
  defaultTemplate = {
115
128
  id: 'default',
@@ -117,8 +130,8 @@ export const transformTemplatesToViewMenuItems = (templates, mode = 'sheet', lan
117
130
  label: template.name,
118
131
  isCustom: false,
119
132
  default: true,
120
- columns: columns.map((col) => col.name),
121
- submenu: columns,
133
+ columns: finalColumns.map((col) => col.name),
134
+ submenu: finalColumns,
122
135
  };
123
136
  }
124
137
  else {
@@ -129,8 +142,8 @@ export const transformTemplatesToViewMenuItems = (templates, mode = 'sheet', lan
129
142
  label: template.name,
130
143
  isCustom: true,
131
144
  default: false,
132
- columns: columns.map((col) => col.name),
133
- submenu: columns,
145
+ columns: finalColumns.map((col) => col.name),
146
+ submenu: finalColumns,
134
147
  });
135
148
  }
136
149
  });
@@ -163,8 +176,10 @@ export const convertColumnsToLayoutSection = (columns, mode, lang = 'en') => {
163
176
  },
164
177
  ], order: index + 1, default: (_b = col.selected) !== null && _b !== void 0 ? _b : false }, (fieldItems && fieldItems.length > 0 && { fields: fieldItems }));
165
178
  });
179
+ // Map TableMode to layout section code: 'default' → 'Advanced', 'sheet' → 'Sheet'
180
+ const sectionCode = mode === 'sheet' ? 'Sheet' : 'Advanced';
166
181
  return {
167
- code: mode === 'advanced' ? 'Advanced' : 'Sheet',
182
+ code: sectionCode,
168
183
  columns: columnItems,
169
184
  };
170
185
  };
@@ -314,6 +329,9 @@ export const toggleSingleColumn = (columns, columnName) => {
314
329
  var _a;
315
330
  if (col.name !== columnName)
316
331
  return col;
332
+ if (isDateColumn(col.name)) {
333
+ return Object.assign(Object.assign({}, col), { selected: true });
334
+ }
317
335
  const newSelected = !col.selected;
318
336
  const updatedMenuItems = (_a = col.menuItems) === null || _a === void 0 ? void 0 : _a.map((item) => (Object.assign(Object.assign({}, item), { selected: newSelected })));
319
337
  return Object.assign(Object.assign({}, col), { selected: newSelected, menuItems: updatedMenuItems });
@@ -321,16 +339,38 @@ export const toggleSingleColumn = (columns, columnName) => {
321
339
  };
322
340
  /**
323
341
  * Get submenu items for a view menu item
342
+ * Always includes the date column at the beginning
324
343
  */
325
344
  export const getSubmenuItems = (item, defaultColumns) => {
326
345
  var _a;
346
+ let columns = [];
327
347
  if (item.isCustom && ((_a = item.submenu) === null || _a === void 0 ? void 0 : _a.length)) {
328
- return item.submenu;
348
+ columns = item.submenu;
349
+ }
350
+ else if (item.id === 'default') {
351
+ columns = defaultColumns;
352
+ }
353
+ else {
354
+ columns = item.submenu || [];
329
355
  }
330
- if (item.id === 'default') {
331
- return defaultColumns;
356
+ // Always include date column at the beginning if it's not already present
357
+ const hasDateColumn = columns.some((col) => col.name.toLowerCase() === 'date');
358
+ if (!hasDateColumn) {
359
+ const dateColumn = {
360
+ name: 'date',
361
+ label: 'Date',
362
+ selected: true,
363
+ };
364
+ return [dateColumn, ...columns];
332
365
  }
333
- return item.submenu || [];
366
+ // Ensure date column is first
367
+ const dateColumnIndex = columns.findIndex((col) => col.name.toLowerCase() === 'date');
368
+ if (dateColumnIndex > 0) {
369
+ const dateColumn = columns[dateColumnIndex];
370
+ const otherColumns = columns.filter((col) => col.name.toLowerCase() !== 'date');
371
+ return [dateColumn, ...otherColumns];
372
+ }
373
+ return columns;
334
374
  };
335
375
  /**
336
376
  * Check if a view menu item has submenu
@@ -374,6 +414,9 @@ export const areSomeCurrentColumnsSelected = (columns, allSelected) => {
374
414
  export const toggleAllCurrentColumns = (columns, shouldSelect) => {
375
415
  return columns.map((col) => {
376
416
  var _a;
417
+ if (isDateColumn(col.name)) {
418
+ return Object.assign(Object.assign({}, col), { selected: true });
419
+ }
377
420
  const updatedMenuItems = (_a = col.menuItems) === null || _a === void 0 ? void 0 : _a.map((item) => (Object.assign(Object.assign({}, item), { selected: shouldSelect })));
378
421
  return Object.assign(Object.assign({}, col), { selected: shouldSelect, menuItems: updatedMenuItems });
379
422
  });
@@ -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",
5
- "testVersion": 6,
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;