@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.
- package/build/components/Sandbox/style.js +2 -3
- package/build/components/TableHeader/FiltersRow.d.ts +1 -1
- package/build/components/TableHeader/FiltersRow.js +3 -3
- package/build/components/TableHeader/TableHeader.d.ts +1 -1
- package/build/components/TableHeader/TableHeader.js +2 -2
- package/build/components/TableHeader/TableView/ViewsDropdown.d.ts +1 -1
- package/build/components/TableHeader/TableView/ViewsDropdown.js +116 -197
- package/build/components/TableHeader/TableView/ViewsMenu.d.ts +5 -0
- package/build/components/TableHeader/TableView/ViewsMenu.js +76 -0
- package/build/components/TableHeader/TableView/components/ColumnList.js +4 -4
- package/build/components/TableHeader/TableView/components/ViewsSubmenu.js +46 -30
- package/build/components/TableHeader/TableView/constants.d.ts +1 -0
- package/build/components/TableHeader/TableView/constants.js +1 -0
- package/build/components/TableHeader/TableView/hooks/index.d.ts +1 -1
- package/build/components/TableHeader/TableView/hooks/index.js +1 -1
- package/build/components/TableHeader/TableView/hooks/useCreateViewDialog.js +12 -12
- package/build/components/TableHeader/TableView/hooks/useNestedSubmenu.js +2 -9
- package/build/components/TableHeader/TableView/hooks/useSubmenuHover.js +1 -2
- package/build/components/TableHeader/TableView/hooks/useViewsManager.d.ts +6 -8
- package/build/components/TableHeader/TableView/hooks/useViewsManager.js +45 -94
- package/build/components/TableHeader/TableView/hooks/useViewsMenu.d.ts +44 -0
- package/build/components/TableHeader/TableView/hooks/useViewsMenu.js +182 -0
- package/build/components/TableHeader/TableView/index.d.ts +3 -3
- package/build/components/TableHeader/TableView/index.js +2 -4
- package/build/components/TableHeader/TableView/types.d.ts +18 -32
- package/build/components/TableHeader/TableView/utils.d.ts +5 -5
- package/build/components/TableHeader/TableView/utils.js +22 -13
- package/build/components/TableHeader/index.d.ts +1 -0
- package/build/components/TableHeader/type.d.ts +2 -9
- package/build/components/Toolbar/Toolbar.js +1 -1
- package/build/components/VirtualTables/VirtualTable/VirtualTable.d.ts +1 -1
- package/build/components/VirtualTables/VirtualTable/VirtualTable.js +4 -3
- package/build/constants/apps.js +2 -0
- package/build/constants/assets.d.ts +1 -0
- package/build/constants/assets.js +1 -0
- package/build/types/reports.d.ts +21 -0
- package/build/types/table.d.ts +1 -0
- package/build/utils/date.js +5 -3
- package/build/utils/index.d.ts +1 -0
- package/build/utils/index.js +1 -0
- package/build/utils/skeletonColumns.d.ts +4 -0
- package/build/utils/skeletonColumns.js +17 -0
- package/package.json +2 -2
- package/build/components/TableHeader/TableView/ViewSelector.d.ts +0 -5
- package/build/components/TableHeader/TableView/ViewSelector.js +0 -46
- package/build/components/TableHeader/TableView/hooks/useViewSelector.d.ts +0 -59
- package/build/components/TableHeader/TableView/hooks/useViewSelector.js +0 -193
|
@@ -0,0 +1,182 @@
|
|
|
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 { deepCloneColumns } from '../utils';
|
|
12
|
+
export const useViewsMenu = ({ mode, onViewChange, onCreateCustomView, onEditCustomView, onDeleteCustomView, defaultColumns, defaultTemplate, allTemplates, }) => {
|
|
13
|
+
const [anchorEl, setAnchorEl] = useState(null);
|
|
14
|
+
const [isCreateDialogOpen, setIsCreateDialogOpen] = useState(false);
|
|
15
|
+
const [editingView, setEditingView] = useState(null);
|
|
16
|
+
const [selectedViewInfo, setSelectedViewInfo] = useState({ id: 'default', label: 'Default' });
|
|
17
|
+
const [shouldUseCurrentState, setShouldUseCurrentState] = useState(false);
|
|
18
|
+
const [selectedView, setSelectedView] = useState(undefined);
|
|
19
|
+
const [currentViewColumns, setCurrentViewColumns] = useState([]);
|
|
20
|
+
const hasInitializedRef = useRef(false);
|
|
21
|
+
const getViewForParent = useCallback((view) => {
|
|
22
|
+
var _a;
|
|
23
|
+
const selectedColumns = ((_a = view.submenu) === null || _a === void 0 ? void 0 : _a.filter((col) => col.selected)) || [];
|
|
24
|
+
return Object.assign(Object.assign({}, view), { submenu: selectedColumns, columns: selectedColumns.map((col) => col.name) });
|
|
25
|
+
}, []);
|
|
26
|
+
useEffect(() => {
|
|
27
|
+
if (hasInitializedRef.current)
|
|
28
|
+
return;
|
|
29
|
+
if (!defaultTemplate)
|
|
30
|
+
return;
|
|
31
|
+
setSelectedView(defaultTemplate);
|
|
32
|
+
setCurrentViewColumns(deepCloneColumns(defaultColumns));
|
|
33
|
+
onViewChange === null || onViewChange === void 0 ? void 0 : onViewChange(getViewForParent(defaultTemplate));
|
|
34
|
+
hasInitializedRef.current = true;
|
|
35
|
+
}, [defaultTemplate, defaultColumns, onViewChange, getViewForParent]);
|
|
36
|
+
useEffect(() => {
|
|
37
|
+
if (!hasInitializedRef.current)
|
|
38
|
+
return;
|
|
39
|
+
if ((selectedView === null || selectedView === void 0 ? void 0 : selectedView.default) && defaultColumns.length > 0) {
|
|
40
|
+
setCurrentViewColumns(deepCloneColumns(defaultColumns));
|
|
41
|
+
}
|
|
42
|
+
}, [defaultColumns, selectedView === null || selectedView === void 0 ? void 0 : selectedView.default]);
|
|
43
|
+
const lastSyncedModeRef = useRef(null);
|
|
44
|
+
useEffect(() => {
|
|
45
|
+
if (!hasInitializedRef.current)
|
|
46
|
+
return;
|
|
47
|
+
if (!selectedView)
|
|
48
|
+
return;
|
|
49
|
+
const needsSync = lastSyncedModeRef.current !== mode;
|
|
50
|
+
if (!needsSync)
|
|
51
|
+
return;
|
|
52
|
+
if (selectedView.default) {
|
|
53
|
+
if (defaultColumns.length === 0)
|
|
54
|
+
return;
|
|
55
|
+
const newView = Object.assign(Object.assign({}, selectedView), { submenu: deepCloneColumns(defaultColumns), columns: defaultColumns.map((col) => col.name) });
|
|
56
|
+
setSelectedView(newView);
|
|
57
|
+
setCurrentViewColumns(deepCloneColumns(defaultColumns));
|
|
58
|
+
lastSyncedModeRef.current = mode;
|
|
59
|
+
onViewChange === null || onViewChange === void 0 ? void 0 : onViewChange(getViewForParent(newView));
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
const updatedTemplate = allTemplates.find((t) => t.templateId === selectedView.templateId || t.id === selectedView.id);
|
|
63
|
+
if (updatedTemplate && updatedTemplate.submenu && updatedTemplate.submenu.length > 0) {
|
|
64
|
+
const newView = Object.assign(Object.assign({}, updatedTemplate), { submenu: deepCloneColumns(updatedTemplate.submenu) });
|
|
65
|
+
setSelectedView(newView);
|
|
66
|
+
setCurrentViewColumns(deepCloneColumns(updatedTemplate.submenu));
|
|
67
|
+
lastSyncedModeRef.current = mode;
|
|
68
|
+
onViewChange === null || onViewChange === void 0 ? void 0 : onViewChange(getViewForParent(newView));
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
}, [mode, defaultColumns, selectedView, allTemplates, onViewChange]);
|
|
72
|
+
useEffect(() => {
|
|
73
|
+
if (!hasInitializedRef.current)
|
|
74
|
+
return;
|
|
75
|
+
if (!selectedView)
|
|
76
|
+
return;
|
|
77
|
+
const updatedTemplate = allTemplates.find((t) => {
|
|
78
|
+
const templateId = t.templateId || t.id;
|
|
79
|
+
const selectedId = selectedView.templateId || selectedView.id;
|
|
80
|
+
return templateId === selectedId;
|
|
81
|
+
});
|
|
82
|
+
if (!updatedTemplate)
|
|
83
|
+
return;
|
|
84
|
+
const currentSubmenu = selectedView.submenu || [];
|
|
85
|
+
const updatedSubmenu = updatedTemplate.submenu || [];
|
|
86
|
+
const hasChanged = currentSubmenu.length !== updatedSubmenu.length ||
|
|
87
|
+
currentSubmenu.some((col, idx) => {
|
|
88
|
+
const updatedCol = updatedSubmenu[idx];
|
|
89
|
+
if (!updatedCol)
|
|
90
|
+
return true;
|
|
91
|
+
return col.selected !== updatedCol.selected || col.name !== updatedCol.name;
|
|
92
|
+
});
|
|
93
|
+
if (hasChanged) {
|
|
94
|
+
const fullView = Object.assign(Object.assign({}, updatedTemplate), { submenu: deepCloneColumns(updatedTemplate.submenu || []) });
|
|
95
|
+
setSelectedView(fullView);
|
|
96
|
+
setCurrentViewColumns(deepCloneColumns(updatedTemplate.submenu || []));
|
|
97
|
+
const viewForParent = getViewForParent(fullView);
|
|
98
|
+
onViewChange === null || onViewChange === void 0 ? void 0 : onViewChange(viewForParent);
|
|
99
|
+
}
|
|
100
|
+
}, [allTemplates, selectedView, onViewChange]);
|
|
101
|
+
const handleViewButtonClick = useCallback((event) => {
|
|
102
|
+
setAnchorEl((current) => (current ? null : event.currentTarget));
|
|
103
|
+
}, []);
|
|
104
|
+
const handleCloseViewDropdown = useCallback(() => {
|
|
105
|
+
setAnchorEl(null);
|
|
106
|
+
}, []);
|
|
107
|
+
const handleSelectedViewInfo = useCallback((selected, viewMenuItem) => {
|
|
108
|
+
setSelectedViewInfo(selected);
|
|
109
|
+
const newSelectedView = viewMenuItem || undefined;
|
|
110
|
+
setSelectedView(newSelectedView);
|
|
111
|
+
setCurrentViewColumns(deepCloneColumns((newSelectedView === null || newSelectedView === void 0 ? void 0 : newSelectedView.submenu) || []));
|
|
112
|
+
onViewChange === null || onViewChange === void 0 ? void 0 : onViewChange(newSelectedView ? getViewForParent(newSelectedView) : undefined);
|
|
113
|
+
handleCloseViewDropdown();
|
|
114
|
+
}, [handleCloseViewDropdown, onViewChange, getViewForParent]);
|
|
115
|
+
const updateSelectedView = useCallback((updatedView) => {
|
|
116
|
+
const viewWithNewRefs = Object.assign(Object.assign({}, updatedView), { submenu: updatedView.submenu ? [...updatedView.submenu] : undefined, columns: updatedView.columns ? [...updatedView.columns] : undefined });
|
|
117
|
+
setSelectedView(viewWithNewRefs);
|
|
118
|
+
setCurrentViewColumns(deepCloneColumns(viewWithNewRefs.submenu || []));
|
|
119
|
+
setSelectedViewInfo({ id: viewWithNewRefs.id, label: viewWithNewRefs.label });
|
|
120
|
+
onViewChange === null || onViewChange === void 0 ? void 0 : onViewChange(getViewForParent(viewWithNewRefs));
|
|
121
|
+
}, [onViewChange, getViewForParent]);
|
|
122
|
+
const handleOpenCreateDialog = useCallback((useCurrentState = false) => {
|
|
123
|
+
setEditingView(null);
|
|
124
|
+
setShouldUseCurrentState(useCurrentState);
|
|
125
|
+
setIsCreateDialogOpen(true);
|
|
126
|
+
setAnchorEl(null);
|
|
127
|
+
}, []);
|
|
128
|
+
const handleOpenEditDialog = useCallback((view) => {
|
|
129
|
+
setEditingView(view);
|
|
130
|
+
setShouldUseCurrentState(true);
|
|
131
|
+
setIsCreateDialogOpen(true);
|
|
132
|
+
}, []);
|
|
133
|
+
const handleCloseCreateDialog = useCallback(() => {
|
|
134
|
+
setIsCreateDialogOpen(false);
|
|
135
|
+
setEditingView(null);
|
|
136
|
+
setShouldUseCurrentState(false);
|
|
137
|
+
}, []);
|
|
138
|
+
const handleSaveView = useCallback((data) => __awaiter(void 0, void 0, void 0, function* () {
|
|
139
|
+
if (editingView) {
|
|
140
|
+
const templateId = editingView.templateId || editingView.id;
|
|
141
|
+
yield (onEditCustomView === null || onEditCustomView === void 0 ? void 0 : onEditCustomView(templateId, data));
|
|
142
|
+
const updatedView = Object.assign(Object.assign({}, editingView), { label: data.name, submenu: deepCloneColumns(data.selectedColumns), columns: data.selectedColumns.map((c) => c.name) });
|
|
143
|
+
setSelectedView(updatedView);
|
|
144
|
+
setSelectedViewInfo({ id: updatedView.id, label: updatedView.label });
|
|
145
|
+
setCurrentViewColumns(deepCloneColumns(data.selectedColumns));
|
|
146
|
+
onViewChange === null || onViewChange === void 0 ? void 0 : onViewChange(getViewForParent(updatedView));
|
|
147
|
+
}
|
|
148
|
+
else {
|
|
149
|
+
yield (onCreateCustomView === null || onCreateCustomView === void 0 ? void 0 : onCreateCustomView(data));
|
|
150
|
+
}
|
|
151
|
+
}), [editingView, onEditCustomView, onCreateCustomView, onViewChange, getViewForParent]);
|
|
152
|
+
const handleDeleteView = useCallback((viewId) => __awaiter(void 0, void 0, void 0, function* () {
|
|
153
|
+
const viewToDelete = allTemplates.find((view) => view.id === viewId || view.templateId === viewId);
|
|
154
|
+
const templateId = (viewToDelete === null || viewToDelete === void 0 ? void 0 : viewToDelete.templateId) || viewId;
|
|
155
|
+
yield (onDeleteCustomView === null || onDeleteCustomView === void 0 ? void 0 : onDeleteCustomView(templateId));
|
|
156
|
+
if ((selectedView === null || selectedView === void 0 ? void 0 : selectedView.id) === viewId || (selectedView === null || selectedView === void 0 ? void 0 : selectedView.templateId) === viewId) {
|
|
157
|
+
setSelectedView(defaultTemplate);
|
|
158
|
+
setCurrentViewColumns(deepCloneColumns(defaultColumns));
|
|
159
|
+
if (defaultTemplate) {
|
|
160
|
+
onViewChange === null || onViewChange === void 0 ? void 0 : onViewChange(getViewForParent(defaultTemplate));
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
}), [allTemplates, onDeleteCustomView, selectedView, defaultTemplate, defaultColumns, onViewChange, getViewForParent]);
|
|
164
|
+
return {
|
|
165
|
+
anchorEl,
|
|
166
|
+
isCreateDialogOpen,
|
|
167
|
+
editingView,
|
|
168
|
+
selectedViewInfo,
|
|
169
|
+
shouldUseCurrentState,
|
|
170
|
+
selectedView,
|
|
171
|
+
currentViewColumns,
|
|
172
|
+
handleViewButtonClick,
|
|
173
|
+
handleCloseViewDropdown,
|
|
174
|
+
handleSelectedViewInfo,
|
|
175
|
+
handleOpenCreateDialog,
|
|
176
|
+
handleOpenEditDialog,
|
|
177
|
+
handleCloseCreateDialog,
|
|
178
|
+
handleSaveView,
|
|
179
|
+
handleDeleteView,
|
|
180
|
+
updateSelectedView,
|
|
181
|
+
};
|
|
182
|
+
};
|
|
@@ -2,11 +2,11 @@ export { default } from './TableView';
|
|
|
2
2
|
export { default as TableView } from './TableView';
|
|
3
3
|
export { default as DefaultViews } from './DefaultViews';
|
|
4
4
|
export { default as CustomViews } from './CustomViews';
|
|
5
|
-
export { default as
|
|
5
|
+
export { default as ViewsMenu } from './ViewsMenu';
|
|
6
6
|
export { default as ViewsDropdown } from './ViewsDropdown';
|
|
7
7
|
export { default as CreateViewDialog } from './CreateViewDialog';
|
|
8
|
-
export type { ViewMenuItem,
|
|
8
|
+
export type { ViewMenuItem, CreateCustomViewDialogProps, LayoutSection, ColumnItem, FieldItem, Template, CreateTemplatePayload, UpdateTemplatePayload, } from './types';
|
|
9
9
|
export { transformLayoutToColumns, getColumnsByMode, createCustomViewMenuItem, setViewAsDefault, transformTemplatesToViewMenuItems, convertColumnsToLayoutSection, isDateColumn, getColumnCheckState, } from './utils';
|
|
10
|
-
export { useSubmenuHover } from './hooks';
|
|
10
|
+
export { useSubmenuHover, useViewsManager, useViewsMenu } from './hooks';
|
|
11
11
|
export { DIALOG_WIDTH, DIALOG_HEIGHT, MAX_CUSTOM_VIEWS, TEMPLATE_NAME_MAX_LENGTH } from './constants';
|
|
12
12
|
export { defaultViewList, advancedColumns, sheetColumns } from './data';
|
|
@@ -2,12 +2,10 @@ export { default } from './TableView';
|
|
|
2
2
|
export { default as TableView } from './TableView';
|
|
3
3
|
export { default as DefaultViews } from './DefaultViews';
|
|
4
4
|
export { default as CustomViews } from './CustomViews';
|
|
5
|
-
export { default as
|
|
5
|
+
export { default as ViewsMenu } from './ViewsMenu';
|
|
6
6
|
export { default as ViewsDropdown } from './ViewsDropdown';
|
|
7
7
|
export { default as CreateViewDialog } from './CreateViewDialog';
|
|
8
8
|
export { transformLayoutToColumns, getColumnsByMode, createCustomViewMenuItem, setViewAsDefault, transformTemplatesToViewMenuItems, convertColumnsToLayoutSection, isDateColumn, getColumnCheckState, } from './utils';
|
|
9
|
-
export { useSubmenuHover } from './hooks';
|
|
9
|
+
export { useSubmenuHover, useViewsManager, useViewsMenu } from './hooks';
|
|
10
10
|
export { DIALOG_WIDTH, DIALOG_HEIGHT, MAX_CUSTOM_VIEWS, TEMPLATE_NAME_MAX_LENGTH } from './constants';
|
|
11
|
-
// Note: defaultViewList, advancedColumns, sheetColumns are only exported for demo purposes
|
|
12
|
-
// They should not be used as defaults in production - all data should come from API
|
|
13
11
|
export { defaultViewList, advancedColumns, sheetColumns } from './data';
|
|
@@ -1,7 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
import type { ColumnViewProps } from '../../../types/index.js';
|
|
1
|
+
import type { ColumnViewProps, TableMode } from '../../../types/index.js';
|
|
3
2
|
import type { TableHeaderProps, ViewOption } from '../type';
|
|
4
|
-
export type ViewMode = 'advanced' | 'sheet';
|
|
5
3
|
export interface ViewMenuItem {
|
|
6
4
|
label: string;
|
|
7
5
|
id: string;
|
|
@@ -51,7 +49,7 @@ export interface UpdateTemplatePayload extends TemplateAPIMetadata {
|
|
|
51
49
|
name: string;
|
|
52
50
|
layout: LayoutSection[];
|
|
53
51
|
}
|
|
54
|
-
export interface
|
|
52
|
+
export interface Template {
|
|
55
53
|
templateId: string;
|
|
56
54
|
segment: string;
|
|
57
55
|
app: string;
|
|
@@ -69,20 +67,15 @@ export interface TemplateResponse {
|
|
|
69
67
|
created: number;
|
|
70
68
|
updated: number;
|
|
71
69
|
default: boolean;
|
|
72
|
-
object?: string;
|
|
73
|
-
master?: boolean;
|
|
74
|
-
live_mode?: boolean;
|
|
75
|
-
api_version?: string;
|
|
76
|
-
feature_version?: string;
|
|
77
70
|
}
|
|
78
|
-
export interface
|
|
71
|
+
export interface TemplatesList {
|
|
79
72
|
object: string;
|
|
80
73
|
live_mode: boolean;
|
|
81
74
|
api_version: string;
|
|
82
75
|
feature_version: string;
|
|
83
76
|
count: number;
|
|
84
77
|
has_more: boolean;
|
|
85
|
-
templates:
|
|
78
|
+
templates: Template[];
|
|
86
79
|
}
|
|
87
80
|
export interface CreateCustomViewDialogProps {
|
|
88
81
|
open: boolean;
|
|
@@ -102,19 +95,14 @@ export interface CreateCustomViewDialogProps {
|
|
|
102
95
|
} | null;
|
|
103
96
|
onDelete?: (viewId: string) => Promise<void>;
|
|
104
97
|
tableViews?: ColumnViewProps[];
|
|
105
|
-
mode?:
|
|
98
|
+
mode?: TableMode;
|
|
106
99
|
}
|
|
107
100
|
export interface ColumnCheckState {
|
|
108
101
|
checked: boolean;
|
|
109
102
|
indeterminate: boolean;
|
|
110
103
|
}
|
|
111
|
-
export interface
|
|
104
|
+
export interface ViewsMenuProps {
|
|
112
105
|
onViewChange?: TableHeaderProps['onViewChange'];
|
|
113
|
-
setIsViewVisible: (visible: boolean) => void;
|
|
114
|
-
setTableViews?: TableHeaderProps['setTableViews'];
|
|
115
|
-
tableViews?: TableHeaderProps['tableViews'];
|
|
116
|
-
resetTableViews?: TableHeaderProps['resetTableViews'];
|
|
117
|
-
customViews?: ViewMenuItem[];
|
|
118
106
|
onCreateCustomView?: (data: {
|
|
119
107
|
name: string;
|
|
120
108
|
selectedColumns: ColumnViewProps[];
|
|
@@ -126,31 +114,28 @@ export interface ViewSelectorProps {
|
|
|
126
114
|
layout: LayoutSection;
|
|
127
115
|
}) => Promise<void>;
|
|
128
116
|
onDeleteCustomView?: (viewId: string) => Promise<void>;
|
|
129
|
-
tableMode?:
|
|
130
|
-
|
|
131
|
-
initialTableViews?: ColumnViewProps[];
|
|
132
|
-
onCustomViewsChange?: (customViews: ViewMenuItem[]) => void;
|
|
133
|
-
initialCustomViews?: ViewMenuItem[];
|
|
134
|
-
layoutData?: LayoutSection[];
|
|
135
|
-
templates?: TemplatesListResponse | TemplateResponse[];
|
|
117
|
+
tableMode?: TableMode;
|
|
118
|
+
templates: Template[];
|
|
136
119
|
lang?: string;
|
|
137
|
-
apiMetadata?: TemplateAPIMetadata;
|
|
138
120
|
}
|
|
139
121
|
export interface ViewsDropdownProps {
|
|
140
122
|
open: boolean;
|
|
141
123
|
selectedViewInfo: ViewOption;
|
|
142
124
|
setSelectedViewInfo: (selected: ViewOption, viewMenuItem?: ViewMenuItem) => void;
|
|
143
|
-
onSelect: (e: React.MouseEvent<HTMLDivElement>, selectedView?: ViewMenuItem) => void;
|
|
144
|
-
setViews?: (views: string[]) => void;
|
|
145
125
|
anchorEl: Element | null;
|
|
146
|
-
|
|
147
|
-
|
|
126
|
+
onClose?: () => void;
|
|
127
|
+
defaultModified?: boolean;
|
|
128
|
+
onMarkDefaultModified?: () => void;
|
|
148
129
|
onCreateCustomView?: (useCurrentState?: boolean) => void;
|
|
149
130
|
customViews?: ViewMenuItem[];
|
|
150
131
|
onEditCustomView?: (view: ViewMenuItem) => void;
|
|
132
|
+
onSaveDefaultColumns?: (columns: ColumnViewProps[]) => void;
|
|
151
133
|
defaultColumns?: ColumnViewProps[];
|
|
152
134
|
setDefaultColumns?: (columns: ColumnViewProps[]) => void;
|
|
153
135
|
updateSelectedView?: (view: ViewMenuItem) => void;
|
|
136
|
+
baseDefaultColumns?: ColumnViewProps[];
|
|
137
|
+
mode?: TableMode;
|
|
138
|
+
defaultTemplate?: ViewMenuItem;
|
|
154
139
|
}
|
|
155
140
|
export interface ColumnListProps {
|
|
156
141
|
selectedColumns: ColumnViewProps[];
|
|
@@ -177,6 +162,7 @@ export interface ViewsSubmenuProps {
|
|
|
177
162
|
onReset: () => void;
|
|
178
163
|
onColumnToggle: (columnName: string) => void;
|
|
179
164
|
onNestedItemToggle: (columnName: string, subItemName: string) => void;
|
|
165
|
+
onReorder: (reorderedColumnNames: string[]) => void;
|
|
180
166
|
anchorEl: HTMLElement | null;
|
|
181
167
|
isModified?: boolean;
|
|
182
168
|
}
|
|
@@ -192,7 +178,7 @@ export interface UseCreateViewDialogProps {
|
|
|
192
178
|
tableViews?: ColumnViewProps[];
|
|
193
179
|
}
|
|
194
180
|
export interface UseViewsManagerProps {
|
|
195
|
-
|
|
196
|
-
templates
|
|
181
|
+
tableMode: TableMode;
|
|
182
|
+
templates: Template[];
|
|
197
183
|
lang?: string;
|
|
198
184
|
}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import type { ColumnViewProps } from '../../../types/index.js';
|
|
2
|
-
import type { LayoutSection, ViewMenuItem, ColumnCheckState
|
|
1
|
+
import type { ColumnViewProps, TableMode } from '../../../types/index.js';
|
|
2
|
+
import type { LayoutSection, ViewMenuItem, ColumnCheckState } from './types';
|
|
3
3
|
/**
|
|
4
4
|
* Transform API layout response to internal ColumnViewProps format
|
|
5
5
|
*/
|
|
6
6
|
export declare const transformLayoutToColumns: (layout: LayoutSection[], lang?: string) => ColumnViewProps[];
|
|
7
|
-
export declare const getColumnsByMode: (mode:
|
|
7
|
+
export declare const getColumnsByMode: (mode: TableMode, layoutData?: LayoutSection[]) => ColumnViewProps[];
|
|
8
8
|
export declare const isDateColumn: (name: string) => boolean;
|
|
9
9
|
export declare const getColumnCheckState: (column: ColumnViewProps) => ColumnCheckState;
|
|
10
10
|
export declare const createCustomViewMenuItem: (name: string, selectedColumns: ColumnViewProps[], isDefault?: boolean) => ViewMenuItem;
|
|
@@ -33,7 +33,7 @@ export declare const transformTemplatesToViewMenuItems: (templates: Array<{
|
|
|
33
33
|
default: boolean;
|
|
34
34
|
layout: LayoutSection[];
|
|
35
35
|
templateId: string;
|
|
36
|
-
}>, mode?:
|
|
36
|
+
}>, mode?: TableMode, lang?: string) => {
|
|
37
37
|
customViews: ViewMenuItem[];
|
|
38
38
|
defaultTemplateColumns?: ColumnViewProps[] | undefined;
|
|
39
39
|
defaultTemplate?: ViewMenuItem | undefined;
|
|
@@ -41,7 +41,7 @@ export declare const transformTemplatesToViewMenuItems: (templates: Array<{
|
|
|
41
41
|
/**
|
|
42
42
|
* Convert ColumnViewProps back to LayoutSection format for API requests
|
|
43
43
|
*/
|
|
44
|
-
export declare const convertColumnsToLayoutSection: (columns: ColumnViewProps[], mode:
|
|
44
|
+
export declare const convertColumnsToLayoutSection: (columns: ColumnViewProps[], mode: TableMode, lang?: string) => LayoutSection;
|
|
45
45
|
/**
|
|
46
46
|
* Initialize columns for editing mode
|
|
47
47
|
*/
|
|
@@ -22,7 +22,7 @@ export const transformLayoutToColumns = (layout, lang = 'en') => {
|
|
|
22
22
|
columns.push({
|
|
23
23
|
name: col.code,
|
|
24
24
|
label,
|
|
25
|
-
selected: (_d = col.default) !== null && _d !== void 0 ? _d : false,
|
|
25
|
+
selected: isDateColumn(col.code) ? true : (_d = col.default) !== null && _d !== void 0 ? _d : false,
|
|
26
26
|
menuItems: (menuItems === null || menuItems === void 0 ? void 0 : menuItems.length) ? menuItems : undefined,
|
|
27
27
|
});
|
|
28
28
|
});
|
|
@@ -31,7 +31,9 @@ export const transformLayoutToColumns = (layout, lang = 'en') => {
|
|
|
31
31
|
};
|
|
32
32
|
export const getColumnsByMode = (mode, layoutData) => {
|
|
33
33
|
if (layoutData && layoutData.length > 0) {
|
|
34
|
-
|
|
34
|
+
// Map TableMode to layout section code: 'default' → 'Advanced', 'sheet' → 'Sheet'
|
|
35
|
+
const sectionCode = mode === 'sheet' ? 'sheet' : 'advanced';
|
|
36
|
+
const section = layoutData.find((s) => s.code.toLowerCase() === sectionCode);
|
|
35
37
|
if (section) {
|
|
36
38
|
return transformLayoutToColumns([section]);
|
|
37
39
|
}
|
|
@@ -103,7 +105,9 @@ export const transformTemplatesToViewMenuItems = (templates, mode = 'sheet', lan
|
|
|
103
105
|
let defaultTemplate;
|
|
104
106
|
templates.forEach((template) => {
|
|
105
107
|
// Get columns for the specified mode
|
|
106
|
-
|
|
108
|
+
// Map TableMode to layout section code: 'default' → 'Advanced', 'sheet' → 'Sheet'
|
|
109
|
+
const sectionCode = mode === 'sheet' ? 'sheet' : 'advanced';
|
|
110
|
+
const section = template.layout.find((s) => s.code.toLowerCase() === sectionCode);
|
|
107
111
|
const columns = section ? transformLayoutToColumns([section], lang) : [];
|
|
108
112
|
// Handle id as either string or object
|
|
109
113
|
const templateIdString = typeof template.id === 'string' ? template.id : template.templateId;
|
|
@@ -172,8 +176,10 @@ export const convertColumnsToLayoutSection = (columns, mode, lang = 'en') => {
|
|
|
172
176
|
},
|
|
173
177
|
], order: index + 1, default: (_b = col.selected) !== null && _b !== void 0 ? _b : false }, (fieldItems && fieldItems.length > 0 && { fields: fieldItems }));
|
|
174
178
|
});
|
|
179
|
+
// Map TableMode to layout section code: 'default' → 'Advanced', 'sheet' → 'Sheet'
|
|
180
|
+
const sectionCode = mode === 'sheet' ? 'Sheet' : 'Advanced';
|
|
175
181
|
return {
|
|
176
|
-
code:
|
|
182
|
+
code: sectionCode,
|
|
177
183
|
columns: columnItems,
|
|
178
184
|
};
|
|
179
185
|
};
|
|
@@ -323,6 +329,9 @@ export const toggleSingleColumn = (columns, columnName) => {
|
|
|
323
329
|
var _a;
|
|
324
330
|
if (col.name !== columnName)
|
|
325
331
|
return col;
|
|
332
|
+
if (isDateColumn(col.name)) {
|
|
333
|
+
return Object.assign(Object.assign({}, col), { selected: true });
|
|
334
|
+
}
|
|
326
335
|
const newSelected = !col.selected;
|
|
327
336
|
const updatedMenuItems = (_a = col.menuItems) === null || _a === void 0 ? void 0 : _a.map((item) => (Object.assign(Object.assign({}, item), { selected: newSelected })));
|
|
328
337
|
return Object.assign(Object.assign({}, col), { selected: newSelected, menuItems: updatedMenuItems });
|
|
@@ -344,24 +353,21 @@ export const getSubmenuItems = (item, defaultColumns) => {
|
|
|
344
353
|
else {
|
|
345
354
|
columns = item.submenu || [];
|
|
346
355
|
}
|
|
347
|
-
// Always include date column at the beginning if it's not already present
|
|
356
|
+
// Always include date column at the beginning if it's not already present (date column submenu disabled)
|
|
348
357
|
const hasDateColumn = columns.some((col) => col.name.toLowerCase() === 'date');
|
|
349
358
|
if (!hasDateColumn) {
|
|
350
|
-
const dateColumn = {
|
|
351
|
-
name: 'date',
|
|
352
|
-
label: 'Date',
|
|
353
|
-
selected: true,
|
|
354
|
-
};
|
|
359
|
+
const dateColumn = Object.assign(Object.assign({}, DATE_COLUMN_CONFIG), { menuItems: undefined });
|
|
355
360
|
return [dateColumn, ...columns];
|
|
356
361
|
}
|
|
357
|
-
// Ensure date column is first
|
|
362
|
+
// Ensure date column is first and strip submenu from date (date column submenu disabled)
|
|
358
363
|
const dateColumnIndex = columns.findIndex((col) => col.name.toLowerCase() === 'date');
|
|
359
364
|
if (dateColumnIndex > 0) {
|
|
360
|
-
const
|
|
365
|
+
const dateCol = columns[dateColumnIndex];
|
|
366
|
+
const dateColumn = Object.assign(Object.assign({}, dateCol), { menuItems: undefined });
|
|
361
367
|
const otherColumns = columns.filter((col) => col.name.toLowerCase() !== 'date');
|
|
362
368
|
return [dateColumn, ...otherColumns];
|
|
363
369
|
}
|
|
364
|
-
return columns;
|
|
370
|
+
return columns.map((col) => col.name.toLowerCase() === 'date' ? Object.assign(Object.assign({}, col), { menuItems: undefined }) : col);
|
|
365
371
|
};
|
|
366
372
|
/**
|
|
367
373
|
* Check if a view menu item has submenu
|
|
@@ -405,6 +411,9 @@ export const areSomeCurrentColumnsSelected = (columns, allSelected) => {
|
|
|
405
411
|
export const toggleAllCurrentColumns = (columns, shouldSelect) => {
|
|
406
412
|
return columns.map((col) => {
|
|
407
413
|
var _a;
|
|
414
|
+
if (isDateColumn(col.name)) {
|
|
415
|
+
return Object.assign(Object.assign({}, col), { selected: true });
|
|
416
|
+
}
|
|
408
417
|
const updatedMenuItems = (_a = col.menuItems) === null || _a === void 0 ? void 0 : _a.map((item) => (Object.assign(Object.assign({}, item), { selected: shouldSelect })));
|
|
409
418
|
return Object.assign(Object.assign({}, col), { selected: shouldSelect, menuItems: updatedMenuItems });
|
|
410
419
|
});
|
|
@@ -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,
|
|
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,14 +56,8 @@ export interface TableHeaderProps<IStatus extends TableHeaderStatus | TableHeade
|
|
|
57
56
|
layout: LayoutSection;
|
|
58
57
|
}) => Promise<void>;
|
|
59
58
|
onDeleteCustomView?: (viewId: string) => Promise<void>;
|
|
60
|
-
|
|
61
|
-
initialTableViews?: ColumnViewProps[];
|
|
62
|
-
onCustomViewsChange?: (customViews: ViewMenuItem[]) => void;
|
|
63
|
-
initialCustomViews?: ViewMenuItem[];
|
|
64
|
-
layoutData?: import('./TableView/types').LayoutSection[];
|
|
65
|
-
templates?: import('./TableView/types').TemplatesListResponse | import('./TableView/types').TemplateResponse[];
|
|
59
|
+
templates?: Template[];
|
|
66
60
|
lang?: string;
|
|
67
|
-
apiMetadata?: TemplateAPIMetadata;
|
|
68
61
|
onToggleTextButtonClick?: () => void;
|
|
69
62
|
children?: ReactNode;
|
|
70
63
|
calendarGroupBy?: string;
|
|
@@ -15,6 +15,6 @@ import { ToolbarStyled, StyledBox, ActionsBox } from './style';
|
|
|
15
15
|
import WindowAppIcon from '../WindowAppIcon';
|
|
16
16
|
function Toolbar(_a) {
|
|
17
17
|
var { onMouseEnter, onMouseLeave, isMaximized, isHovered, children, rightActions, leftActions, title, icon } = _a, props = __rest(_a, ["onMouseEnter", "onMouseLeave", "isMaximized", "isHovered", "children", "rightActions", "leftActions", "title", "icon"]);
|
|
18
|
-
return (_jsx(ToolbarStyled, Object.assign({ onMouseEnter: onMouseEnter, onMouseLeave: onMouseLeave, maximized: isMaximized, id: "toolbar", isHovered: isHovered }, props, { children: _jsxs(StyledBox, Object.assign({ className: "toolbar-wrapper" }, { children: [leftActions ? _jsx(ActionsBox, Object.assign({ className: "action-box" }, { children: leftActions })) : _jsx("div", {}), _jsx(WindowAppIcon, { title: title, icon: icon }), rightActions
|
|
18
|
+
return (_jsx(ToolbarStyled, Object.assign({ onMouseEnter: onMouseEnter, onMouseLeave: onMouseLeave, maximized: isMaximized, id: "toolbar", isHovered: isHovered }, props, { children: _jsxs(StyledBox, Object.assign({ className: "toolbar-wrapper" }, { children: [leftActions ? _jsx(ActionsBox, Object.assign({ className: "action-box" }, { children: leftActions })) : _jsx("div", {}), _jsx(WindowAppIcon, { title: title, icon: icon }), rightActions || _jsx("div", {})] })) })));
|
|
19
19
|
}
|
|
20
20
|
export default memo(Toolbar);
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
2
|
import type { IVirtualTable } from '../../../types/index.js';
|
|
3
|
-
declare function VirtualTable({ columns, rows, threshold, showHeader, headerProps, rowProps, footerProps, isLoading, error, columnsSorting, onColumnSort, loadMoreItems, isFetchingNextPage, triggerDataRefetch, scrollToIndex, areAllRowsLoaded, tableBodyStyles, tableMode, tableTitle, onStartDrag, isSheetView, isMinimized, footerComponent, customNoDataComponent, }: Readonly<IVirtualTable>): import("react/jsx-runtime").JSX.Element;
|
|
3
|
+
declare function VirtualTable({ columns, rows, threshold, showHeader, headerProps, rowProps, footerProps, isLoading, error, columnsSorting, onColumnSort, loadMoreItems, isFetchingNextPage, triggerDataRefetch, scrollToIndex, areAllRowsLoaded, tableBodyStyles, tableMode, tableTitle, onStartDrag, isSheetView, isMinimized, footerComponent, customNoDataComponent, defaultSkeleton, }: Readonly<IVirtualTable>): import("react/jsx-runtime").JSX.Element;
|
|
4
4
|
declare const _default: import("react").MemoExoticComponent<typeof VirtualTable>;
|
|
5
5
|
export default _default;
|
|
@@ -15,7 +15,7 @@ import AutoSizer from 'react-virtualized-auto-sizer';
|
|
|
15
15
|
import InfiniteLoader from 'react-window-infinite-loader';
|
|
16
16
|
import { TABLE_ROW_HEIGHT, TABLE_THRESHOLD, TABLE_LIST_OVER_SCAN, SHEET_VIEW_TABLE_ROW_HEIGHT } from '../../../constants/index.js';
|
|
17
17
|
import { useDelayToSetValue } from '../../../hooks/index.js';
|
|
18
|
-
import { isHeightNotFullyFilledByRows, isNotFoundError, isTimeoutError, hasError } from '../../../utils/index.js';
|
|
18
|
+
import { isHeightNotFullyFilledByRows, isNotFoundError, isTimeoutError, hasError, getProcessedColumns } from '../../../utils/index.js';
|
|
19
19
|
import TableFooter from '../components/TableFooter/TableFooter';
|
|
20
20
|
import TableHeader from '../components/TableHeader';
|
|
21
21
|
import TableLastItem from '../components/TableLastItem';
|
|
@@ -34,7 +34,7 @@ const createItemData = memoize((columns, isLoading, rows, rowProps, scrollToInde
|
|
|
34
34
|
areAllRowsLoaded,
|
|
35
35
|
isSheetView,
|
|
36
36
|
}));
|
|
37
|
-
function VirtualTable({ columns, rows, threshold = TABLE_THRESHOLD, showHeader, headerProps, rowProps, footerProps, isLoading, error, columnsSorting, onColumnSort, loadMoreItems, isFetchingNextPage, triggerDataRefetch, scrollToIndex, areAllRowsLoaded = false, tableBodyStyles, tableMode, tableTitle, onStartDrag, isSheetView = false, isMinimized, footerComponent, customNoDataComponent, }) {
|
|
37
|
+
function VirtualTable({ columns, rows, threshold = TABLE_THRESHOLD, showHeader, headerProps, rowProps, footerProps, isLoading, error, columnsSorting, onColumnSort, loadMoreItems, isFetchingNextPage, triggerDataRefetch, scrollToIndex, areAllRowsLoaded = false, tableBodyStyles, tableMode, tableTitle, onStartDrag, isSheetView = false, isMinimized, footerComponent, customNoDataComponent, defaultSkeleton = false, }) {
|
|
38
38
|
var _a;
|
|
39
39
|
const theme = useTheme();
|
|
40
40
|
const onPointerDown = (e) => {
|
|
@@ -58,7 +58,8 @@ function VirtualTable({ columns, rows, threshold = TABLE_THRESHOLD, showHeader,
|
|
|
58
58
|
const tableEmpty = !isLoading && rows.length === 0;
|
|
59
59
|
const hasTimeoutError = isTimeoutError(error);
|
|
60
60
|
const lastItemIndex = rows.length - 1;
|
|
61
|
-
const
|
|
61
|
+
const processedColumns = useMemo(() => getProcessedColumns(columns, isLoading !== null && isLoading !== void 0 ? isLoading : false, defaultSkeleton), [columns, isLoading, defaultSkeleton]);
|
|
62
|
+
const shownColumns = useMemo(() => processedColumns.filter((column) => !column.hidden), [processedColumns]);
|
|
62
63
|
const orderedColumns = useMemo(() => shownColumns.sort((a, b) => { var _a, _b; return ((_a = a === null || a === void 0 ? void 0 : a.order) !== null && _a !== void 0 ? _a : 1000000) - ((_b = b === null || b === void 0 ? void 0 : b.order) !== null && _b !== void 0 ? _b : 1000000); }), [shownColumns]);
|
|
63
64
|
const areTotalRowsNotFillingHeight = isHeightNotFullyFilledByRows(rows.length) && !tableLoading;
|
|
64
65
|
const itemsCount = isDelayedFetchingNextPage || (areAllRowsLoaded && !areTotalRowsNotFillingHeight) ? rows.length + 1 : rows.length;
|
package/build/constants/apps.js
CHANGED
|
@@ -7,6 +7,7 @@ export declare const getPaymentMethodsIcon: (source: string) => string;
|
|
|
7
7
|
export declare const getPaymentIssuersIcon: (source: string) => string;
|
|
8
8
|
export declare const getCountriesIcon: (source: string) => string;
|
|
9
9
|
export declare const getServiceFunctionIcon: (functionCode: string) => string;
|
|
10
|
+
export declare const getStatusIcon: (statusCode: string) => string;
|
|
10
11
|
export declare const getCurrenciesIcon: (currency: string) => string;
|
|
11
12
|
export declare const getAuthorityIcon: (authority: string) => string;
|
|
12
13
|
export declare const SARIconImage: string;
|
|
@@ -9,6 +9,7 @@ export const getPaymentMethodsIcon = (source) => `${lightUrl}/payment-method/v2/
|
|
|
9
9
|
export const getPaymentIssuersIcon = (source) => `${lightUrl}/payment-issuer/${source}.svg`;
|
|
10
10
|
export const getCountriesIcon = (source) => `${lightUrl}/country/v3/${source}.svg`;
|
|
11
11
|
export const getServiceFunctionIcon = (functionCode) => `${lightUrl}/function/${functionCode}.svg`;
|
|
12
|
+
export const getStatusIcon = (statusCode) => `${lightUrl}/statusIcons/${statusCode}.svg`;
|
|
12
13
|
export const getCurrenciesIcon = (currency) => `${cdnUrl}/currency/v3/light/${currency}.svg`;
|
|
13
14
|
export const getAuthorityIcon = (authority) => {
|
|
14
15
|
const authorityWithoutSpaces = authority.replace(/\s/g, '');
|
package/build/types/reports.d.ts
CHANGED
|
@@ -4,3 +4,24 @@ export declare enum ReportStatusEnum {
|
|
|
4
4
|
PROCESSING = "PROCESSING",
|
|
5
5
|
INITIATED = "INITIATED"
|
|
6
6
|
}
|
|
7
|
+
export interface Report {
|
|
8
|
+
id: string;
|
|
9
|
+
object: string;
|
|
10
|
+
live_mode: boolean;
|
|
11
|
+
api_version: string;
|
|
12
|
+
feature_version: string;
|
|
13
|
+
type: string;
|
|
14
|
+
status: string;
|
|
15
|
+
segment_id: string;
|
|
16
|
+
created_at: number;
|
|
17
|
+
started_at: number;
|
|
18
|
+
completed_at: number;
|
|
19
|
+
total_records: number;
|
|
20
|
+
result_file: string;
|
|
21
|
+
download_count: string;
|
|
22
|
+
last_downloaded_at: number;
|
|
23
|
+
response: {
|
|
24
|
+
code: string;
|
|
25
|
+
message: string;
|
|
26
|
+
};
|
|
27
|
+
}
|
package/build/types/table.d.ts
CHANGED
|
@@ -116,6 +116,7 @@ export interface IVirtualTable<R = any> {
|
|
|
116
116
|
headerProps?: TableHeadProps;
|
|
117
117
|
isLoading?: boolean;
|
|
118
118
|
isFetchingNextPage?: boolean;
|
|
119
|
+
defaultSkeleton?: boolean;
|
|
119
120
|
rowProps?: TableRowProps & {
|
|
120
121
|
onRowClick?: (row: R, index: number) => void;
|
|
121
122
|
};
|
package/build/utils/date.js
CHANGED
|
@@ -69,9 +69,11 @@ export const formatUTCOffset = (offset = 0) => {
|
|
|
69
69
|
* @returns - Array of two dates [startDate, endDate]
|
|
70
70
|
*/
|
|
71
71
|
export const getDefaultDateRange = (startDay = 6) => {
|
|
72
|
-
const
|
|
73
|
-
const
|
|
74
|
-
|
|
72
|
+
const safeDays = Number.isFinite(startDay) && startDay >= 0 ? startDay : 0;
|
|
73
|
+
const now = dayjs();
|
|
74
|
+
const start = now.subtract(safeDays, 'day').startOf('day');
|
|
75
|
+
const end = now.endOf('day');
|
|
76
|
+
return [start.toDate(), end.toDate()];
|
|
75
77
|
};
|
|
76
78
|
export const getUTCTimestamp = (date) => {
|
|
77
79
|
// Create a Date object with the local date string
|
package/build/utils/index.d.ts
CHANGED
package/build/utils/index.js
CHANGED