Skip to content

Commit 960721e

Browse files
authored
feat(menu): add optional danger state for menu items (#8131)
* feat(menu): add optional danger state for menu items * docs(menu): add demo for danger state * chore: move example to match html
1 parent 69d5937 commit 960721e

File tree

3 files changed

+37
-0
lines changed

3 files changed

+37
-0
lines changed

packages/react-core/src/components/Menu/MenuItem.tsx

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,8 @@ export interface MenuItemProps extends Omit<React.HTMLProps<HTMLLIElement>, 'onC
5252
isSelected?: boolean;
5353
/** Flag indicating the item is focused */
5454
isFocused?: boolean;
55+
/** Flag indicating the item is in danger state */
56+
isDanger?: boolean;
5557
/** @beta Flyout menu */
5658
flyoutMenu?: React.ReactElement;
5759
/** @beta Callback function when mouse leaves trigger */
@@ -91,6 +93,7 @@ const MenuItemBase: React.FunctionComponent<MenuItemProps> = ({
9193
isExternalLink = false,
9294
isSelected = null,
9395
isFocused,
96+
isDanger = false,
9497
icon,
9598
actions,
9699
onShowFlyout,
@@ -295,6 +298,7 @@ const MenuItemBase: React.FunctionComponent<MenuItemProps> = ({
295298
isLoadButton && styles.modifiers.load,
296299
isLoading && styles.modifiers.loading,
297300
isFocused && styles.modifiers.focus,
301+
isDanger && styles.modifiers.danger,
298302
className
299303
)}
300304
onMouseOver={onMouseOver}

packages/react-core/src/components/Menu/examples/Menu.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,11 @@ import AngleLeftIcon from '@patternfly/react-icons/dist/esm/icons/angle-left-ico
2323
```ts file="MenuBasic.tsx"
2424
```
2525

26+
### Danger menu item
27+
28+
```ts file="MenuDangerMenuItem.tsx"
29+
```
30+
2631
### With icons
2732

2833
```ts file="MenuWithIcons.tsx"
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
import React from 'react';
2+
import { Divider, Menu, MenuContent, MenuItem, MenuList } from '@patternfly/react-core';
3+
4+
export const MenuDangerMenuItem: React.FunctionComponent = () => {
5+
const [activeItem, setActiveItem] = React.useState(0);
6+
7+
const onSelect = (_event: React.MouseEvent<Element, MouseEvent> | undefined, itemId: number | string | undefined) => {
8+
const item = itemId as number;
9+
// eslint-disable-next-line no-console
10+
console.log(`clicked ${itemId}`);
11+
setActiveItem(item);
12+
};
13+
14+
return (
15+
<Menu activeItemId={activeItem} onSelect={onSelect}>
16+
<MenuContent>
17+
<MenuList>
18+
<MenuItem itemId={0}>Action 1</MenuItem>
19+
<MenuItem itemId={1}>Action 2</MenuItem>
20+
<Divider component="li" />
21+
<MenuItem itemId={2} isDanger>
22+
Delete
23+
</MenuItem>
24+
</MenuList>
25+
</MenuContent>
26+
</Menu>
27+
);
28+
};

0 commit comments

Comments
 (0)