customize unregister entity menuitem
Signed-off-by: sjeyaraman <sjeyaraman@expedia.com>
This commit is contained in:
@@ -165,9 +165,22 @@ const EntityLayoutWrapper = (props: { children?: ReactNode }) => {
|
||||
];
|
||||
}, []);
|
||||
|
||||
type VisibleType = 'visible' | 'hidden' | 'disabled';
|
||||
|
||||
type contextMenuOptions = {
|
||||
disableUnregister: boolean | VisibleType;
|
||||
};
|
||||
|
||||
const options: contextMenuOptions = {
|
||||
disableUnregister: false,
|
||||
};
|
||||
|
||||
return (
|
||||
<>
|
||||
<EntityLayout UNSTABLE_extraContextMenuItems={extraMenuItems}>
|
||||
<EntityLayout
|
||||
UNSTABLE_extraContextMenuItems={extraMenuItems}
|
||||
UNSTABLE_contextMenuOptions={options}
|
||||
>
|
||||
{props.children}
|
||||
</EntityLayout>
|
||||
<EntityBadgesDialog
|
||||
|
||||
@@ -42,7 +42,6 @@ function render(children: React.ReactNode) {
|
||||
describe('ComponentContextMenu', () => {
|
||||
it('should call onUnregisterEntity on button click', async () => {
|
||||
const mockCallback = jest.fn();
|
||||
|
||||
await render(
|
||||
<EntityContextMenu
|
||||
onUnregisterEntity={mockCallback}
|
||||
@@ -61,6 +60,30 @@ describe('ComponentContextMenu', () => {
|
||||
expect(mockCallback).toBeCalled();
|
||||
});
|
||||
|
||||
it('check Unregister entity button is disabled', async () => {
|
||||
const mockCallback = jest.fn();
|
||||
|
||||
const { getByText } = await render(
|
||||
<EntityContextMenu
|
||||
UNSTABLE_contextMenuOptions={{ disableUnregister: 'disabled' }}
|
||||
onUnregisterEntity={mockCallback}
|
||||
onInspectEntity={() => {}}
|
||||
/>,
|
||||
);
|
||||
|
||||
const button = await screen.findByTestId('menu-button');
|
||||
expect(button).toBeInTheDocument();
|
||||
fireEvent.click(button);
|
||||
|
||||
const unregister = await screen.getByText('Unregister entity');
|
||||
expect(unregister).toBeInTheDocument();
|
||||
|
||||
const unregisterSpanItem = getByText(/Unregister entity/);
|
||||
const unregisterMenuListItem =
|
||||
unregisterSpanItem?.parentElement?.parentElement;
|
||||
expect(unregisterMenuListItem).toHaveAttribute('aria-disabled');
|
||||
});
|
||||
|
||||
it('should call onInspectEntity on button click', async () => {
|
||||
const mockCallback = jest.fn();
|
||||
|
||||
|
||||
@@ -55,9 +55,11 @@ interface ExtraContextMenuItem {
|
||||
onClick: () => void;
|
||||
}
|
||||
|
||||
type VisibleType = 'visible' | 'hidden' | 'disabled';
|
||||
|
||||
// unstable context menu option, eg: disable the unregister entity menu
|
||||
interface contextMenuOptions {
|
||||
disableUnregister: boolean;
|
||||
disableUnregister: boolean | VisibleType;
|
||||
}
|
||||
|
||||
interface EntityContextMenuProps {
|
||||
@@ -106,11 +108,35 @@ export function EntityContextMenu(props: EntityContextMenuProps) {
|
||||
<Divider key="the divider is here!" />,
|
||||
];
|
||||
|
||||
const isBoolean =
|
||||
typeof UNSTABLE_contextMenuOptions?.disableUnregister === 'boolean';
|
||||
|
||||
const disableUnregister =
|
||||
(!unregisterPermission.allowed ||
|
||||
UNSTABLE_contextMenuOptions?.disableUnregister) ??
|
||||
(isBoolean
|
||||
? UNSTABLE_contextMenuOptions?.disableUnregister
|
||||
: UNSTABLE_contextMenuOptions?.disableUnregister === 'disabled')) ??
|
||||
false;
|
||||
|
||||
let unregisterButton = <></>;
|
||||
|
||||
if (UNSTABLE_contextMenuOptions?.disableUnregister !== 'hidden') {
|
||||
unregisterButton = (
|
||||
<MenuItem
|
||||
onClick={() => {
|
||||
onClose();
|
||||
onUnregisterEntity();
|
||||
}}
|
||||
disabled={disableUnregister}
|
||||
>
|
||||
<ListItemIcon>
|
||||
<CancelIcon fontSize="small" />
|
||||
</ListItemIcon>
|
||||
<ListItemText primary="Unregister entity" />
|
||||
</MenuItem>
|
||||
);
|
||||
}
|
||||
|
||||
return (
|
||||
<>
|
||||
<IconButton
|
||||
@@ -136,18 +162,7 @@ export function EntityContextMenu(props: EntityContextMenuProps) {
|
||||
>
|
||||
<MenuList>
|
||||
{extraItems}
|
||||
<MenuItem
|
||||
onClick={() => {
|
||||
onClose();
|
||||
onUnregisterEntity();
|
||||
}}
|
||||
disabled={disableUnregister}
|
||||
>
|
||||
<ListItemIcon>
|
||||
<CancelIcon fontSize="small" />
|
||||
</ListItemIcon>
|
||||
<ListItemText primary="Unregister entity" />
|
||||
</MenuItem>
|
||||
{unregisterButton}
|
||||
<MenuItem
|
||||
onClick={() => {
|
||||
onClose();
|
||||
|
||||
@@ -142,9 +142,11 @@ interface ExtraContextMenuItem {
|
||||
onClick: () => void;
|
||||
}
|
||||
|
||||
type VisibleType = 'visible' | 'hidden' | 'disabled';
|
||||
|
||||
// unstable context menu option, eg: disable the unregister entity menu
|
||||
interface contextMenuOptions {
|
||||
disableUnregister: boolean;
|
||||
disableUnregister: boolean | VisibleType;
|
||||
}
|
||||
|
||||
/** @public */
|
||||
|
||||
Reference in New Issue
Block a user