@tap-payments/os-micro-frontend-shared 0.1.373-test.3-test.4-test.5-test.6-test.7 → 0.1.373-test.3-test.4-test.5-test.6-test.7-test.8-test.9
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/TableHeader/TableView/ViewsDropdown.js +5 -3
- package/build/components/TableHeader/TableView/ViewsMenu.js +2 -2
- package/build/components/TableHeader/TableView/hooks/useViewsMenu.d.ts +2 -1
- package/build/components/TableHeader/TableView/hooks/useViewsMenu.js +6 -1
- package/build/components/TableHeader/TableView/types.d.ts +1 -1
- package/build/components/TableHeader/TableView/utils.d.ts +4 -2
- package/build/components/TableHeader/TableView/utils.js +45 -19
- package/package.json +2 -2
|
@@ -117,10 +117,11 @@ function ViewsDropdown({ open, selectedViewInfo, setSelectedViewInfo, anchorEl,
|
|
|
117
117
|
}
|
|
118
118
|
function goToCreateCustomView(e) {
|
|
119
119
|
e.stopPropagation();
|
|
120
|
+
const colsToUse = (draftColumns === null || draftColumns === void 0 ? void 0 : draftColumns.length) ? draftColumns : defaultColumns;
|
|
121
|
+
onCreateCustomView === null || onCreateCustomView === void 0 ? void 0 : onCreateCustomView(true, colsToUse);
|
|
120
122
|
setDraftColumns(null);
|
|
121
123
|
clearOriginalState();
|
|
122
124
|
forceClose();
|
|
123
|
-
onCreateCustomView === null || onCreateCustomView === void 0 ? void 0 : onCreateCustomView(true);
|
|
124
125
|
}
|
|
125
126
|
return (_jsxs(DropdownStyled, Object.assign({ "data-testid": "ViewsDropdown" }, { children: [_jsx(Popper, Object.assign({ open: open, anchorEl: anchorEl, placement: "bottom-start" }, { children: _jsxs(ListStyled, { children: [_jsx(Typography, Object.assign({ sx: { paddingX: 1.25, py: 1.1, fontWeight: 500, fontSize: 11, color: '#8D8D94' } }, { children: "View" })), _jsx(Divider, {}), views.map((item) => (_jsxs(StyledMenuItem, Object.assign({ onMouseEnter: (e) => {
|
|
126
127
|
if (item.isCustom)
|
|
@@ -144,8 +145,9 @@ function ViewsDropdown({ open, selectedViewInfo, setSelectedViewInfo, anchorEl,
|
|
|
144
145
|
e.stopPropagation();
|
|
145
146
|
if (atCustomViewLimit)
|
|
146
147
|
return;
|
|
147
|
-
|
|
148
|
-
onCreateCustomView === null || onCreateCustomView === void 0 ? void 0 : onCreateCustomView(
|
|
148
|
+
const colsToUse = (draftColumns === null || draftColumns === void 0 ? void 0 : draftColumns.length) ? draftColumns : defaultColumns;
|
|
149
|
+
onCreateCustomView === null || onCreateCustomView === void 0 ? void 0 : onCreateCustomView(true, colsToUse);
|
|
150
|
+
forceClose();
|
|
149
151
|
} }, { children: [_jsx(Space, {}), _jsxs(Box, Object.assign({ sx: { display: 'flex', alignItems: 'center', gap: 0.5 } }, { children: [_jsx("img", { src: bluePlusIcon, alt: "", style: { opacity: atCustomViewLimit ? 0.5 : 1, width: 10, height: 10 } }), _jsx("span", Object.assign({ style: { color: atCustomViewLimit ? '#999' : '#1F88D0', fontSize: 11, fontWeight: 500 } }, { children: t('New Custom View') }))] })), _jsx(SpaceAfter, {})] })) }))] }) })), hoveredViewId && submenuAnchorEl && submenuColumns.length > 0 && (_jsx(Menu, Object.assign({ open: true, anchorEl: submenuAnchorEl, placement: "auto-end", onMouseEnter: cancelClose, onMouseLeave: discardAndClose }, { children: _jsxs(SubmenuContainer, { children: [_jsx(ViewsSubmenu, { columns: submenuColumns, allCurrentSelected: allSelected, someCurrentSelected: someSelected, onSelectAll: selectAllColumns, onReset: resetToBaseDefault, onColumnToggle: toggleColumn, onNestedItemToggle: toggleNested, onReorder: reorderColumns, anchorEl: submenuAnchorEl, isModified: modifiedFromBase }), _jsx(SaveCustomViewBox, { children: _jsx(Tooltip, Object.assign({ title: "Limit reached. Delete a view to create a new one.", placement: "left", disableHoverListener: !atCustomViewLimit }, { children: _jsxs(SaveCustomViewInnerBox, Object.assign({ disabled: atCustomViewLimit, onClick: atCustomViewLimit ? undefined : goToCreateCustomView }, { children: [_jsx(Typography, Object.assign({ sx: { fontSize: 11, color: 'text.secondary' } }, { children: "Save as a custom view" })), _jsxs(Box, Object.assign({ sx: { display: 'flex', alignItems: 'center', gap: 0.5 } }, { children: [_jsx("img", { src: bluePlusIcon, alt: "", style: { width: 10, height: 10, opacity: atCustomViewLimit ? 0.5 : 1 } }), _jsx(Typography, Object.assign({ sx: { fontSize: 10, fontWeight: 600, color: atCustomViewLimit ? '#999' : '#1F88D0' } }, { children: "Custom View" }))] }))] })) })) }), _jsxs(ButtonsContainer, { children: [_jsx(Button, Object.assign({ variant: "text", onClick: discardAndClose, sx: CancelButtonSx }, { children: "Cancel" })), _jsx(Button, Object.assign({ variant: "contained", onClick: applyAndClose, sx: OkayButtonSx }, { children: "Okay" }))] })] }) })))] })));
|
|
150
152
|
}
|
|
151
153
|
export default React.memo(ViewsDropdown);
|
|
@@ -59,7 +59,7 @@ function ViewsMenu({ onViewChange, onCreateCustomView, onEditCustomView, onDelet
|
|
|
59
59
|
}));
|
|
60
60
|
setModifiedModes((current) => (Object.assign(Object.assign({}, current), { [tableMode]: true })));
|
|
61
61
|
}), [defaultTemplate, tableMode, lang, onEditCustomView, updateDefaultColumns]);
|
|
62
|
-
const { anchorEl, isCreateDialogOpen, editingView, selectedViewInfo, shouldUseCurrentState, currentViewColumns, handleViewButtonClick, handleCloseViewDropdown, handleSelectedViewInfo, handleOpenCreateDialog, handleOpenEditDialog, handleCloseCreateDialog, handleSaveView, handleDeleteView, updateSelectedView, } = useViewsMenu({
|
|
62
|
+
const { anchorEl, isCreateDialogOpen, editingView, selectedViewInfo, shouldUseCurrentState, currentViewColumns, initialColumnsForCreate, handleViewButtonClick, handleCloseViewDropdown, handleSelectedViewInfo, handleOpenCreateDialog, handleOpenEditDialog, handleCloseCreateDialog, handleSaveView, handleDeleteView, updateSelectedView, } = useViewsMenu({
|
|
63
63
|
mode: tableMode,
|
|
64
64
|
onViewChange,
|
|
65
65
|
onCreateCustomView,
|
|
@@ -71,6 +71,6 @@ function ViewsMenu({ onViewChange, onCreateCustomView, onEditCustomView, onDelet
|
|
|
71
71
|
});
|
|
72
72
|
return (_jsxs(_Fragment, { children: [_jsx(ClickAwayListener, Object.assign({ onClickAway: handleCloseViewDropdown }, { children: _jsxs(ViewWrapper, Object.assign({ sx: { width: '32px' }, "data-testid": "ViewsMenu" }, { children: [_jsx(StyledButton, Object.assign({ title: t('tableView'), "data-testid": "ViewsMenu_button", onClick: handleViewButtonClick }, { children: _jsx(Icon, { src: viewIcon, alt: "view", sx: { width: 14, height: 14 } }) })), _jsx(ViewsDropdown, { open: Boolean(anchorEl), anchorEl: anchorEl, onClose: handleCloseViewDropdown, defaultModified: (_a = modifiedModes[tableMode]) !== null && _a !== void 0 ? _a : false, onMarkDefaultModified: () => {
|
|
73
73
|
setModifiedModes((current) => (Object.assign(Object.assign({}, current), { [tableMode]: true })));
|
|
74
|
-
}, setSelectedViewInfo: handleSelectedViewInfo, selectedViewInfo: selectedViewInfo, onCreateCustomView: handleOpenCreateDialog, customViews: customViews, onEditCustomView: handleOpenEditDialog, onSaveDefaultColumns: handleSaveDefaultColumns, defaultColumns: defaultColumns, setDefaultColumns: updateDefaultColumns, updateSelectedView: updateSelectedView, baseDefaultColumns: baseDefaultColumns, mode: tableMode, defaultTemplate: defaultTemplate })] })) })), _jsx(CreateViewDialog, { open: isCreateDialogOpen, onClose: handleCloseCreateDialog, availableColumns: defaultColumns, defaultColumns: defaultColumns, onCreate: handleSaveView, editingView: editingView, onDelete: handleDeleteView, tableViews: shouldUseCurrentState ? currentViewColumns : undefined, mode: tableMode })] }));
|
|
74
|
+
}, setSelectedViewInfo: handleSelectedViewInfo, selectedViewInfo: selectedViewInfo, onCreateCustomView: handleOpenCreateDialog, customViews: customViews, onEditCustomView: handleOpenEditDialog, onSaveDefaultColumns: handleSaveDefaultColumns, defaultColumns: defaultColumns, setDefaultColumns: updateDefaultColumns, updateSelectedView: updateSelectedView, baseDefaultColumns: baseDefaultColumns, mode: tableMode, defaultTemplate: defaultTemplate })] })) })), _jsx(CreateViewDialog, { open: isCreateDialogOpen, onClose: handleCloseCreateDialog, availableColumns: defaultColumns, defaultColumns: defaultColumns, onCreate: handleSaveView, editingView: editingView, onDelete: handleDeleteView, tableViews: shouldUseCurrentState ? (initialColumnsForCreate !== null && initialColumnsForCreate !== void 0 ? initialColumnsForCreate : currentViewColumns) : undefined, mode: tableMode })] }));
|
|
75
75
|
}
|
|
76
76
|
export default memo(ViewsMenu);
|
|
@@ -31,10 +31,11 @@ export declare const useViewsMenu: ({ mode, onViewChange, onCreateCustomView, on
|
|
|
31
31
|
shouldUseCurrentState: boolean;
|
|
32
32
|
selectedView: ViewMenuItem | undefined;
|
|
33
33
|
currentViewColumns: ColumnViewProps[];
|
|
34
|
+
initialColumnsForCreate: ColumnViewProps[] | null;
|
|
34
35
|
handleViewButtonClick: (event: MouseEvent<HTMLDivElement>) => void;
|
|
35
36
|
handleCloseViewDropdown: () => void;
|
|
36
37
|
handleSelectedViewInfo: (selected: ViewOption, viewMenuItem?: ViewMenuItem) => void;
|
|
37
|
-
handleOpenCreateDialog: (useCurrentState?: boolean) => void;
|
|
38
|
+
handleOpenCreateDialog: (useCurrentState?: boolean, initialColumns?: ColumnViewProps[]) => void;
|
|
38
39
|
handleOpenEditDialog: (view: ViewMenuItem) => void;
|
|
39
40
|
handleCloseCreateDialog: () => void;
|
|
40
41
|
handleSaveView: (data: {
|
|
@@ -20,6 +20,8 @@ export const useViewsMenu = ({ mode, onViewChange, onCreateCustomView, onEditCus
|
|
|
20
20
|
const [selectedTemplateId, setSelectedTemplateId] = useState(null);
|
|
21
21
|
/** After create, we may receive templateId from parent; once allTemplates includes it, select that view. */
|
|
22
22
|
const [pendingSelectedTemplateId, setPendingSelectedTemplateId] = useState(null);
|
|
23
|
+
/** When opening create dialog with "current state", dropdown can pass exact columns (e.g. unsaved draft) to use. */
|
|
24
|
+
const [initialColumnsForCreate, setInitialColumnsForCreate] = useState(null);
|
|
23
25
|
const [currentViewColumns, setCurrentViewColumns] = useState([]);
|
|
24
26
|
const hasInitializedRef = useRef(false);
|
|
25
27
|
const getViewForParent = useCallback((view) => {
|
|
@@ -147,9 +149,10 @@ export const useViewsMenu = ({ mode, onViewChange, onCreateCustomView, onEditCus
|
|
|
147
149
|
setSelectedViewInfo({ id: viewWithNewRefs.id, label: viewWithNewRefs.label });
|
|
148
150
|
onViewChange === null || onViewChange === void 0 ? void 0 : onViewChange(getViewForParent(viewWithNewRefs));
|
|
149
151
|
}, [onViewChange, getViewForParent]);
|
|
150
|
-
const handleOpenCreateDialog = useCallback((useCurrentState = false) => {
|
|
152
|
+
const handleOpenCreateDialog = useCallback((useCurrentState = false, initialColumns) => {
|
|
151
153
|
setEditingView(null);
|
|
152
154
|
setShouldUseCurrentState(useCurrentState);
|
|
155
|
+
setInitialColumnsForCreate(initialColumns !== null && initialColumns !== void 0 ? initialColumns : null);
|
|
153
156
|
setIsCreateDialogOpen(true);
|
|
154
157
|
setAnchorEl(null);
|
|
155
158
|
}, []);
|
|
@@ -162,6 +165,7 @@ export const useViewsMenu = ({ mode, onViewChange, onCreateCustomView, onEditCus
|
|
|
162
165
|
setIsCreateDialogOpen(false);
|
|
163
166
|
setEditingView(null);
|
|
164
167
|
setShouldUseCurrentState(false);
|
|
168
|
+
setInitialColumnsForCreate(null);
|
|
165
169
|
}, []);
|
|
166
170
|
const handleSaveView = useCallback((data) => __awaiter(void 0, void 0, void 0, function* () {
|
|
167
171
|
if (editingView) {
|
|
@@ -205,6 +209,7 @@ export const useViewsMenu = ({ mode, onViewChange, onCreateCustomView, onEditCus
|
|
|
205
209
|
shouldUseCurrentState,
|
|
206
210
|
selectedView,
|
|
207
211
|
currentViewColumns,
|
|
212
|
+
initialColumnsForCreate,
|
|
208
213
|
handleViewButtonClick,
|
|
209
214
|
handleCloseViewDropdown,
|
|
210
215
|
handleSelectedViewInfo,
|
|
@@ -137,7 +137,7 @@ export interface ViewsDropdownProps {
|
|
|
137
137
|
onClose?: () => void;
|
|
138
138
|
defaultModified?: boolean;
|
|
139
139
|
onMarkDefaultModified?: () => void;
|
|
140
|
-
onCreateCustomView?: (useCurrentState?: boolean) => void;
|
|
140
|
+
onCreateCustomView?: (useCurrentState?: boolean, initialColumns?: ColumnViewProps[]) => void;
|
|
141
141
|
customViews?: ViewMenuItem[];
|
|
142
142
|
onEditCustomView?: (view: ViewMenuItem) => void;
|
|
143
143
|
onSaveDefaultColumns?: (columns: ColumnViewProps[]) => void;
|
|
@@ -43,7 +43,8 @@ export declare const transformTemplatesToViewMenuItems: (templates: Array<{
|
|
|
43
43
|
*/
|
|
44
44
|
export declare const convertColumnsToLayoutSection: (columns: ColumnViewProps[], mode: TableMode, lang?: string) => LayoutSection;
|
|
45
45
|
/**
|
|
46
|
-
* Initialize columns for editing mode
|
|
46
|
+
* Initialize columns for editing mode.
|
|
47
|
+
* Preserves the order from editingColumns (saved view), then appends any columns from availableColumns not in the saved view.
|
|
47
48
|
*/
|
|
48
49
|
export declare const initializeEditingColumns: (editingColumns: ColumnViewProps[], availableColumns: ColumnViewProps[]) => ColumnViewProps[];
|
|
49
50
|
/**
|
|
@@ -51,7 +52,8 @@ export declare const initializeEditingColumns: (editingColumns: ColumnViewProps[
|
|
|
51
52
|
*/
|
|
52
53
|
export declare const initializeCreateColumns: (availableColumns: ColumnViewProps[]) => ColumnViewProps[];
|
|
53
54
|
/**
|
|
54
|
-
* Initialize columns for create mode with current tableViews state (preserves checked/unchecked values)
|
|
55
|
+
* Initialize columns for create mode with current tableViews state (preserves checked/unchecked values).
|
|
56
|
+
* Preserves the order from currentTableViews (current table columns), then appends any columns from availableColumns not in the table.
|
|
55
57
|
*/
|
|
56
58
|
export declare const initializeCreateColumnsWithCurrentState: (availableColumns: ColumnViewProps[], currentTableViews: ColumnViewProps[]) => ColumnViewProps[];
|
|
57
59
|
/**
|
|
@@ -183,16 +183,31 @@ export const convertColumnsToLayoutSection = (columns, mode, lang = 'en') => {
|
|
|
183
183
|
};
|
|
184
184
|
};
|
|
185
185
|
/**
|
|
186
|
-
* Initialize columns for editing mode
|
|
186
|
+
* Initialize columns for editing mode.
|
|
187
|
+
* Preserves the order from editingColumns (saved view), then appends any columns from availableColumns not in the saved view.
|
|
187
188
|
*/
|
|
188
189
|
export const initializeEditingColumns = (editingColumns, availableColumns) => {
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
190
|
+
var _a, _b;
|
|
191
|
+
const editingOrder = editingColumns.filter((col) => !isDateColumn(col.name)).map((col) => col.name);
|
|
192
|
+
const availableByName = new Map(availableColumns.filter((c) => !isDateColumn(c.name)).map((c) => [c.name, c]));
|
|
193
|
+
const result = [];
|
|
194
|
+
for (const name of editingOrder) {
|
|
195
|
+
const savedCol = editingColumns.find((ec) => ec.name === name);
|
|
196
|
+
const availCol = availableByName.get(name);
|
|
197
|
+
if (availCol) {
|
|
198
|
+
result.push(savedCol !== null && savedCol !== void 0 ? savedCol : Object.assign(Object.assign({}, availCol), { selected: false, menuItems: (_a = availCol.menuItems) === null || _a === void 0 ? void 0 : _a.map((item) => (Object.assign(Object.assign({}, item), { selected: false }))) }));
|
|
199
|
+
}
|
|
200
|
+
else if (savedCol) {
|
|
201
|
+
result.push(savedCol);
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
for (const [, availCol] of availableByName) {
|
|
205
|
+
if (!editingOrder.includes(availCol.name)) {
|
|
206
|
+
const savedCol = editingColumns.find((ec) => ec.name === availCol.name);
|
|
207
|
+
result.push(savedCol !== null && savedCol !== void 0 ? savedCol : Object.assign(Object.assign({}, availCol), { selected: false, menuItems: (_b = availCol.menuItems) === null || _b === void 0 ? void 0 : _b.map((item) => (Object.assign(Object.assign({}, item), { selected: false }))) }));
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
return result;
|
|
196
211
|
};
|
|
197
212
|
/**
|
|
198
213
|
* Initialize columns for create mode (all unchecked except date)
|
|
@@ -206,23 +221,34 @@ export const initializeCreateColumns = (availableColumns) => {
|
|
|
206
221
|
});
|
|
207
222
|
};
|
|
208
223
|
/**
|
|
209
|
-
* Initialize columns for create mode with current tableViews state (preserves checked/unchecked values)
|
|
224
|
+
* Initialize columns for create mode with current tableViews state (preserves checked/unchecked values).
|
|
225
|
+
* Preserves the order from currentTableViews (current table columns), then appends any columns from availableColumns not in the table.
|
|
210
226
|
*/
|
|
211
227
|
export const initializeCreateColumnsWithCurrentState = (availableColumns, currentTableViews) => {
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
228
|
+
var _a, _b, _c, _d;
|
|
229
|
+
const availableByName = new Map(availableColumns.filter((c) => !isDateColumn(c.name)).map((c) => [c.name, c]));
|
|
230
|
+
const currentOrder = currentTableViews.filter((c) => !isDateColumn(c.name)).map((c) => c.name);
|
|
231
|
+
const result = [];
|
|
232
|
+
for (const name of currentOrder) {
|
|
233
|
+
const currentCol = currentTableViews.find((tc) => tc.name === name);
|
|
234
|
+
const availCol = availableByName.get(name);
|
|
235
|
+
if (availCol && currentCol) {
|
|
236
|
+
result.push(Object.assign(Object.assign({}, availCol), { selected: (_a = currentCol.selected) !== null && _a !== void 0 ? _a : false, menuItems: (_b = availCol.menuItems) === null || _b === void 0 ? void 0 : _b.map((item) => {
|
|
219
237
|
var _a, _b;
|
|
220
238
|
const currentMenuItem = (_a = currentCol.menuItems) === null || _a === void 0 ? void 0 : _a.find((mi) => mi.name === item.name);
|
|
221
239
|
return Object.assign(Object.assign({}, item), { selected: (_b = currentMenuItem === null || currentMenuItem === void 0 ? void 0 : currentMenuItem.selected) !== null && _b !== void 0 ? _b : false });
|
|
222
|
-
}) });
|
|
240
|
+
}) }));
|
|
223
241
|
}
|
|
224
|
-
|
|
225
|
-
|
|
242
|
+
else if (availCol) {
|
|
243
|
+
result.push(Object.assign(Object.assign({}, availCol), { selected: false, menuItems: (_c = availCol.menuItems) === null || _c === void 0 ? void 0 : _c.map((item) => (Object.assign(Object.assign({}, item), { selected: false }))) }));
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
for (const [, availCol] of availableByName) {
|
|
247
|
+
if (!currentOrder.includes(availCol.name)) {
|
|
248
|
+
result.push(Object.assign(Object.assign({}, availCol), { selected: false, menuItems: (_d = availCol.menuItems) === null || _d === void 0 ? void 0 : _d.map((item) => (Object.assign(Object.assign({}, item), { selected: false }))) }));
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
return result;
|
|
226
252
|
};
|
|
227
253
|
/**
|
|
228
254
|
* Reset columns to their default selection state
|
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.3-test.4-test.5-test.6-test.7",
|
|
5
|
-
"testVersion":
|
|
4
|
+
"version": "0.1.373-test.3-test.4-test.5-test.6-test.7-test.8-test.9",
|
|
5
|
+
"testVersion": 9,
|
|
6
6
|
"type": "module",
|
|
7
7
|
"main": "build/index.js",
|
|
8
8
|
"module": "build/index.js",
|