@patternfly/react-core 4.227.2 → 4.227.5
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/CHANGELOG.md +24 -0
- package/dist/esm/components/DataList/DataList.d.ts +0 -2
- package/dist/esm/components/DataList/DataList.d.ts.map +1 -1
- package/dist/esm/components/DataList/DataList.js.map +1 -1
- package/dist/esm/components/DataList/DataListItem.d.ts.map +1 -1
- package/dist/esm/components/DataList/DataListItem.js +1 -2
- package/dist/esm/components/DataList/DataListItem.js.map +1 -1
- package/dist/js/components/DataList/DataList.d.ts +0 -2
- package/dist/js/components/DataList/DataList.d.ts.map +1 -1
- package/dist/js/components/DataList/DataList.js.map +1 -1
- package/dist/js/components/DataList/DataListItem.d.ts.map +1 -1
- package/dist/js/components/DataList/DataListItem.js +1 -2
- package/dist/js/components/DataList/DataListItem.js.map +1 -1
- package/dist/umd/react-core.js +1 -2
- package/dist/umd/react-core.min.css +3339 -3339
- package/dist/umd/react-core.min.js +1 -1
- package/package.json +5 -5
- package/src/components/DataList/DataList.tsx +0 -2
- package/src/components/DataList/DataListItem.tsx +1 -3
- package/src/components/DataList/__tests__/DataList.test.tsx +14 -32
- package/src/components/DataList/examples/DataListSelectableRows.tsx +1 -1
- package/src/components/Menu/examples/Menu.md +19 -1290
- package/src/components/Menu/examples/MenuBasic.tsx +51 -0
- package/src/components/Menu/examples/MenuFilteringWithTextInput.tsx +52 -0
- package/src/components/Menu/examples/MenuOptionMultiSelect.tsx +30 -0
- package/src/components/Menu/examples/MenuOptionSingleSelect.tsx +27 -0
- package/src/components/Menu/examples/MenuScrollable.tsx +48 -0
- package/src/components/Menu/examples/MenuScrollableCustomMenuHeight.tsx +48 -0
- package/src/components/Menu/examples/MenuWithActions.tsx +75 -0
- package/src/components/Menu/examples/MenuWithCheckbox.tsx +2 -2
- package/src/components/Menu/examples/MenuWithDescription.tsx +35 -0
- package/src/components/Menu/examples/{MenuDrilldown.tsx → MenuWithDrilldown.tsx} +1 -1
- package/src/components/Menu/examples/MenuWithDrilldownBreadcrumbs.tsx +331 -0
- package/src/components/Menu/examples/{MenuDrilldownInitialState.tsx → MenuWithDrilldownInitialState.tsx} +0 -0
- package/src/components/Menu/examples/{MenuDrilldownSubmenuFunctions.tsx → MenuWithDrilldownSubmenuFunctions.tsx} +1 -1
- package/src/components/Menu/examples/MenuWithFavorites.tsx +104 -0
- package/src/components/Menu/examples/MenuWithFooter.tsx +40 -0
- package/src/components/Menu/examples/MenuWithIcons.tsx +33 -0
- package/src/components/Menu/examples/MenuWithLinks.tsx +30 -0
- package/src/components/Menu/examples/MenuWithSeparators.tsx +26 -0
- package/src/components/Menu/examples/MenuWithTitledGroups.tsx +46 -0
- package/src/components/Menu/examples/MenuWithViewMore.tsx +118 -0
- package/src/components/Radio/examples/Radio.md +12 -68
- package/src/components/Radio/examples/RadioControlled.tsx +21 -0
- package/src/components/Radio/examples/RadioDisabled.tsx +15 -0
- package/src/components/Radio/examples/RadioLabelWraps.tsx +6 -0
- package/src/components/Radio/examples/RadioReversed.tsx +6 -0
- package/src/components/Radio/examples/RadioStandaloneInput.tsx +6 -0
- package/src/components/Radio/examples/RadioUncontrolled.tsx +6 -0
- package/src/components/Radio/examples/RadioWithBody.tsx +6 -0
- package/src/components/Radio/examples/RadioWithDescription.tsx +11 -0
- package/src/components/Radio/examples/RadioWithDescriptionAndBody.tsx +12 -0
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { Menu, MenuContent, MenuList, MenuItem, Checkbox } from '@patternfly/react-core';
|
|
3
|
+
|
|
4
|
+
export const MenuBasic: React.FunctionComponent = () => {
|
|
5
|
+
const [activeItem, setActiveItem] = React.useState(0);
|
|
6
|
+
const [isPlain, setIsPlain] = React.useState(false);
|
|
7
|
+
|
|
8
|
+
const onSelect = (_event: React.MouseEvent<Element, MouseEvent> | undefined, itemId: number | string | undefined) => {
|
|
9
|
+
const item = itemId as number; // eslint-disable-next-line no-console
|
|
10
|
+
console.log(`clicked ${itemId}`);
|
|
11
|
+
setActiveItem(item);
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
const togglePlain = (checked: boolean) => {
|
|
15
|
+
setIsPlain(checked);
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
return (
|
|
19
|
+
<React.Fragment>
|
|
20
|
+
<Menu activeItemId={activeItem} onSelect={onSelect} isPlain={isPlain}>
|
|
21
|
+
<MenuContent>
|
|
22
|
+
<MenuList>
|
|
23
|
+
<MenuItem itemId={0}>Action</MenuItem>
|
|
24
|
+
<MenuItem
|
|
25
|
+
itemId={1}
|
|
26
|
+
to="#default-link2"
|
|
27
|
+
// just for demo so that navigation is not triggered
|
|
28
|
+
onClick={event => event.preventDefault()}
|
|
29
|
+
>
|
|
30
|
+
Link
|
|
31
|
+
</MenuItem>
|
|
32
|
+
<MenuItem isDisabled>Disabled action</MenuItem>
|
|
33
|
+
<MenuItem isDisabled to="#default-link4">
|
|
34
|
+
Disabled link
|
|
35
|
+
</MenuItem>
|
|
36
|
+
</MenuList>
|
|
37
|
+
</MenuContent>
|
|
38
|
+
</Menu>
|
|
39
|
+
<div style={{ marginTop: 20 }}>
|
|
40
|
+
<Checkbox
|
|
41
|
+
label="Plain menu"
|
|
42
|
+
isChecked={isPlain}
|
|
43
|
+
onChange={togglePlain}
|
|
44
|
+
aria-label="plain menu checkbox"
|
|
45
|
+
id="toggle-plain"
|
|
46
|
+
name="toggle-plain"
|
|
47
|
+
/>
|
|
48
|
+
</div>
|
|
49
|
+
</React.Fragment>
|
|
50
|
+
);
|
|
51
|
+
};
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { Menu, MenuList, MenuItem, MenuContent, MenuInput, TextInput, Divider } from '@patternfly/react-core';
|
|
3
|
+
|
|
4
|
+
export const MenuFilteringWithTextInput: React.FunctionComponent = () => {
|
|
5
|
+
const [activeItem, setActiveItem] = React.useState(0);
|
|
6
|
+
const [input, setInput] = React.useState('');
|
|
7
|
+
|
|
8
|
+
const onSelect = (_event: React.MouseEvent<Element, MouseEvent> | undefined, itemId: number | string | undefined) => {
|
|
9
|
+
const item = itemId as number; // eslint-disable-next-line no-console
|
|
10
|
+
console.log(`clicked ${itemId}`);
|
|
11
|
+
setActiveItem(item);
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
const handleTextInputChange = (value: string) => {
|
|
15
|
+
setInput(value);
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
const menuListItemsText = ['Action 1', 'Action 2', 'Action 3'];
|
|
19
|
+
|
|
20
|
+
const menuListItems = menuListItemsText
|
|
21
|
+
.filter(item => !input || item.toLowerCase().includes(input.toString().toLowerCase()))
|
|
22
|
+
.map((currentValue, index) => (
|
|
23
|
+
<MenuItem key={currentValue} itemId={index}>
|
|
24
|
+
{currentValue}
|
|
25
|
+
</MenuItem>
|
|
26
|
+
));
|
|
27
|
+
if (input && menuListItems.length === 0) {
|
|
28
|
+
menuListItems.push(
|
|
29
|
+
<MenuItem isDisabled key="no result">
|
|
30
|
+
No results found
|
|
31
|
+
</MenuItem>
|
|
32
|
+
);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
return (
|
|
36
|
+
<Menu onSelect={onSelect} activeItemId={activeItem}>
|
|
37
|
+
<MenuInput>
|
|
38
|
+
<TextInput
|
|
39
|
+
value={input}
|
|
40
|
+
aria-label="Filter menu items"
|
|
41
|
+
iconVariant="search"
|
|
42
|
+
type="search"
|
|
43
|
+
onChange={value => handleTextInputChange(value)}
|
|
44
|
+
/>
|
|
45
|
+
</MenuInput>
|
|
46
|
+
<Divider />
|
|
47
|
+
<MenuContent>
|
|
48
|
+
<MenuList>{menuListItems}</MenuList>
|
|
49
|
+
</MenuContent>
|
|
50
|
+
</Menu>
|
|
51
|
+
);
|
|
52
|
+
};
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { Menu, MenuContent, MenuList, MenuItem } from '@patternfly/react-core';
|
|
3
|
+
import TableIcon from '@patternfly/react-icons/dist/esm/icons/table-icon';
|
|
4
|
+
|
|
5
|
+
export const MenuOptionMultiSelect: React.FunctionComponent = () => {
|
|
6
|
+
const [selectedItems, setSelectedItems] = React.useState<number[]>([]);
|
|
7
|
+
|
|
8
|
+
const onSelect = (_event: React.MouseEvent<Element, MouseEvent> | undefined, itemId: number | string | undefined) => {
|
|
9
|
+
const item = itemId as number;
|
|
10
|
+
if (selectedItems.indexOf(item) !== -1) {
|
|
11
|
+
setSelectedItems(selectedItems.filter(id => id !== item));
|
|
12
|
+
} else {
|
|
13
|
+
setSelectedItems([...selectedItems, item]);
|
|
14
|
+
}
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
return (
|
|
18
|
+
<Menu onSelect={onSelect} activeItemId={0} selected={selectedItems}>
|
|
19
|
+
<MenuContent>
|
|
20
|
+
<MenuList>
|
|
21
|
+
<MenuItem itemId={0}>Option 1</MenuItem>
|
|
22
|
+
<MenuItem itemId={1}>Option 2</MenuItem>
|
|
23
|
+
<MenuItem icon={<TableIcon aria-hidden />} itemId={2}>
|
|
24
|
+
Option 3
|
|
25
|
+
</MenuItem>
|
|
26
|
+
</MenuList>
|
|
27
|
+
</MenuContent>
|
|
28
|
+
</Menu>
|
|
29
|
+
);
|
|
30
|
+
};
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { Menu, MenuContent, MenuList, MenuItem } from '@patternfly/react-core';
|
|
3
|
+
import TableIcon from '@patternfly/react-icons/dist/esm/icons/table-icon';
|
|
4
|
+
|
|
5
|
+
export const MenuOptionSingleSelect: React.FunctionComponent = () => {
|
|
6
|
+
const [activeItem, setActiveItem] = React.useState(0);
|
|
7
|
+
const [selectedItem, setSelectedItem] = React.useState(0);
|
|
8
|
+
|
|
9
|
+
const onSelect = (_event, itemId) => {
|
|
10
|
+
setActiveItem(itemId);
|
|
11
|
+
setSelectedItem(itemId);
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
return (
|
|
15
|
+
<Menu onSelect={onSelect} activeItemId={activeItem} selected={selectedItem}>
|
|
16
|
+
<MenuContent>
|
|
17
|
+
<MenuList>
|
|
18
|
+
<MenuItem itemId={0}>Option 1</MenuItem>
|
|
19
|
+
<MenuItem itemId={1}>Option 2</MenuItem>
|
|
20
|
+
<MenuItem icon={<TableIcon aria-hidden />} itemId={2}>
|
|
21
|
+
Option 3
|
|
22
|
+
</MenuItem>
|
|
23
|
+
</MenuList>
|
|
24
|
+
</MenuContent>
|
|
25
|
+
</Menu>
|
|
26
|
+
);
|
|
27
|
+
};
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { Menu, MenuContent, MenuList, MenuItem } from '@patternfly/react-core';
|
|
3
|
+
|
|
4
|
+
export const MenuScrollable: React.FunctionComponent = () => {
|
|
5
|
+
const [activeItem, setActiveItem] = React.useState(0);
|
|
6
|
+
|
|
7
|
+
const onSelect = (_event, itemId) => {
|
|
8
|
+
// eslint-disable-next-line no-console
|
|
9
|
+
console.log(`clicked ${itemId}`);
|
|
10
|
+
setActiveItem(itemId);
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
return (
|
|
14
|
+
<Menu activeItemId={activeItem} onSelect={onSelect} isScrollable>
|
|
15
|
+
<MenuContent>
|
|
16
|
+
<MenuList>
|
|
17
|
+
<MenuItem itemId={0}>Action 1</MenuItem>
|
|
18
|
+
<MenuItem itemId={1}>Action 2</MenuItem>
|
|
19
|
+
<MenuItem itemId={2}>Action 3</MenuItem>
|
|
20
|
+
<MenuItem itemId={3}>Action 4</MenuItem>
|
|
21
|
+
<MenuItem itemId={4}>Action 5</MenuItem>
|
|
22
|
+
<MenuItem itemId={5}>Action 6</MenuItem>
|
|
23
|
+
<MenuItem itemId={6}>Action 7</MenuItem>
|
|
24
|
+
<MenuItem itemId={7}>Action 8</MenuItem>
|
|
25
|
+
<MenuItem itemId={8}>Action 9</MenuItem>
|
|
26
|
+
<MenuItem itemId={9}>Action 10</MenuItem>
|
|
27
|
+
<MenuItem itemId={10}>Action 11</MenuItem>
|
|
28
|
+
<MenuItem itemId={11}>Action 12</MenuItem>
|
|
29
|
+
<MenuItem itemId={12}>Action 13</MenuItem>
|
|
30
|
+
<MenuItem itemId={13}>Action 14</MenuItem>
|
|
31
|
+
<MenuItem itemId={14}>Action 15</MenuItem>
|
|
32
|
+
<MenuItem
|
|
33
|
+
itemId={15}
|
|
34
|
+
to="#default-link2"
|
|
35
|
+
// just for demo so that navigation is not triggered
|
|
36
|
+
onClick={event => event.preventDefault()}
|
|
37
|
+
>
|
|
38
|
+
Link
|
|
39
|
+
</MenuItem>
|
|
40
|
+
<MenuItem isDisabled>Disabled action</MenuItem>
|
|
41
|
+
<MenuItem isDisabled to="#default-link4">
|
|
42
|
+
Disabled link
|
|
43
|
+
</MenuItem>
|
|
44
|
+
</MenuList>
|
|
45
|
+
</MenuContent>
|
|
46
|
+
</Menu>
|
|
47
|
+
);
|
|
48
|
+
};
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { Menu, MenuContent, MenuList, MenuItem } from '@patternfly/react-core';
|
|
3
|
+
|
|
4
|
+
export const MenuScrollableCustomMenuHeight: React.FunctionComponent = () => {
|
|
5
|
+
const [activeItem, setActiveItem] = React.useState(0);
|
|
6
|
+
|
|
7
|
+
const onSelect = (_event, itemId) => {
|
|
8
|
+
// eslint-disable-next-line no-console
|
|
9
|
+
console.log(`clicked ${itemId}`);
|
|
10
|
+
setActiveItem(itemId);
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
return (
|
|
14
|
+
<Menu activeItemId={activeItem} onSelect={onSelect} isScrollable>
|
|
15
|
+
<MenuContent menuHeight="200px">
|
|
16
|
+
<MenuList>
|
|
17
|
+
<MenuItem itemId={0}>Action 1</MenuItem>
|
|
18
|
+
<MenuItem itemId={1}>Action 2</MenuItem>
|
|
19
|
+
<MenuItem itemId={2}>Action 3</MenuItem>
|
|
20
|
+
<MenuItem itemId={3}>Action 4</MenuItem>
|
|
21
|
+
<MenuItem itemId={4}>Action 5</MenuItem>
|
|
22
|
+
<MenuItem itemId={5}>Action 6</MenuItem>
|
|
23
|
+
<MenuItem itemId={6}>Action 7</MenuItem>
|
|
24
|
+
<MenuItem itemId={7}>Action 8</MenuItem>
|
|
25
|
+
<MenuItem itemId={8}>Action 9</MenuItem>
|
|
26
|
+
<MenuItem itemId={9}>Action 10</MenuItem>
|
|
27
|
+
<MenuItem itemId={10}>Action 11</MenuItem>
|
|
28
|
+
<MenuItem itemId={11}>Action 12</MenuItem>
|
|
29
|
+
<MenuItem itemId={12}>Action 13</MenuItem>
|
|
30
|
+
<MenuItem itemId={13}>Action 14</MenuItem>
|
|
31
|
+
<MenuItem itemId={14}>Action 15</MenuItem>
|
|
32
|
+
<MenuItem
|
|
33
|
+
itemId={15}
|
|
34
|
+
to="#default-link2"
|
|
35
|
+
// just for demo so that navigation is not triggered
|
|
36
|
+
onClick={event => event.preventDefault()}
|
|
37
|
+
>
|
|
38
|
+
Link
|
|
39
|
+
</MenuItem>
|
|
40
|
+
<MenuItem isDisabled>Disabled action</MenuItem>
|
|
41
|
+
<MenuItem isDisabled to="#default-link4">
|
|
42
|
+
Disabled link
|
|
43
|
+
</MenuItem>
|
|
44
|
+
</MenuList>
|
|
45
|
+
</MenuContent>
|
|
46
|
+
</Menu>
|
|
47
|
+
);
|
|
48
|
+
};
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { Menu, MenuContent, MenuGroup, MenuList, MenuItem, MenuItemAction } from '@patternfly/react-core';
|
|
3
|
+
import BarsIcon from '@patternfly/react-icons/dist/esm/icons/bars-icon';
|
|
4
|
+
import ClipboardIcon from '@patternfly/react-icons/dist/esm/icons/clipboard-icon';
|
|
5
|
+
import CodeBranchIcon from '@patternfly/react-icons/dist/esm/icons/code-branch-icon';
|
|
6
|
+
import BellIcon from '@patternfly/react-icons/dist/esm/icons/bell-icon';
|
|
7
|
+
|
|
8
|
+
export const MenuWithActions: React.FunctionComponent = () => {
|
|
9
|
+
const [selectedItems, setSelectedItems] = React.useState<number[]>([0, 2, 3]);
|
|
10
|
+
|
|
11
|
+
const onSelect = (_event: React.MouseEvent<Element, MouseEvent> | undefined, itemId: number | string | undefined) => {
|
|
12
|
+
const item = itemId as number;
|
|
13
|
+
if (selectedItems.indexOf(item) !== -1) {
|
|
14
|
+
setSelectedItems(selectedItems.filter(id => id !== item));
|
|
15
|
+
} else {
|
|
16
|
+
setSelectedItems([...selectedItems, item]);
|
|
17
|
+
}
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
return (
|
|
21
|
+
<Menu
|
|
22
|
+
onSelect={onSelect}
|
|
23
|
+
// eslint-disable-next-line no-console
|
|
24
|
+
onActionClick={(_event, itemId, actionId) => console.log(`clicked on ${itemId} - ${actionId}`)}
|
|
25
|
+
activeItemId={0}
|
|
26
|
+
>
|
|
27
|
+
<MenuContent>
|
|
28
|
+
<MenuGroup label="Actions" labelHeadingLevel="h3">
|
|
29
|
+
<MenuList>
|
|
30
|
+
<MenuItem
|
|
31
|
+
isSelected={selectedItems.indexOf(0) !== -1}
|
|
32
|
+
actions={
|
|
33
|
+
<MenuItemAction
|
|
34
|
+
icon={<CodeBranchIcon aria-hidden />}
|
|
35
|
+
actionId="code"
|
|
36
|
+
// eslint-disable-next-line no-console
|
|
37
|
+
onClick={() => console.log('clicked on code icon')}
|
|
38
|
+
aria-label="Code"
|
|
39
|
+
/>
|
|
40
|
+
}
|
|
41
|
+
description="This is a description"
|
|
42
|
+
itemId={0}
|
|
43
|
+
>
|
|
44
|
+
Item 1
|
|
45
|
+
</MenuItem>
|
|
46
|
+
<MenuItem
|
|
47
|
+
isDisabled
|
|
48
|
+
isSelected={selectedItems.indexOf(1) !== -1}
|
|
49
|
+
actions={<MenuItemAction icon={<BellIcon aria-hidden />} actionId="alert" aria-label="Alert" />}
|
|
50
|
+
description="This is a description"
|
|
51
|
+
itemId={1}
|
|
52
|
+
>
|
|
53
|
+
Item 2
|
|
54
|
+
</MenuItem>
|
|
55
|
+
<MenuItem
|
|
56
|
+
isSelected={selectedItems.indexOf(2) !== -1}
|
|
57
|
+
actions={<MenuItemAction icon={<ClipboardIcon aria-hidden />} actionId="copy" aria-label="Copy" />}
|
|
58
|
+
itemId={2}
|
|
59
|
+
>
|
|
60
|
+
Item 3
|
|
61
|
+
</MenuItem>
|
|
62
|
+
<MenuItem
|
|
63
|
+
isSelected={selectedItems.indexOf(3) !== -1}
|
|
64
|
+
actions={<MenuItemAction icon={<BarsIcon aria-hidden />} actionId="expand" aria-label="Expand" />}
|
|
65
|
+
description="This is a description"
|
|
66
|
+
itemId={3}
|
|
67
|
+
>
|
|
68
|
+
Item 4
|
|
69
|
+
</MenuItem>
|
|
70
|
+
</MenuList>
|
|
71
|
+
</MenuGroup>
|
|
72
|
+
</MenuContent>
|
|
73
|
+
</Menu>
|
|
74
|
+
);
|
|
75
|
+
};
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import { Menu, MenuContent, MenuList, MenuItem } from '@patternfly/react-core';
|
|
3
3
|
|
|
4
|
-
export const
|
|
4
|
+
export const MenuWithCheckbox: React.FunctionComponent = () => {
|
|
5
5
|
const [selectedItems, setSelectedItems] = React.useState<number[]>([]);
|
|
6
6
|
|
|
7
7
|
/* eslint no-unused-vars: ["error", {"args": "after-used"}] */
|
|
8
|
-
const onSelect = (
|
|
8
|
+
const onSelect = (_event: React.MouseEvent<Element, MouseEvent> | undefined, itemId: number | string | undefined) => {
|
|
9
9
|
const item = itemId as number;
|
|
10
10
|
if (selectedItems.includes(item)) {
|
|
11
11
|
setSelectedItems(selectedItems.filter(id => id !== item));
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { Menu, MenuContent, MenuList, MenuItem } from '@patternfly/react-core';
|
|
3
|
+
import CodeBranchIcon from '@patternfly/react-icons/dist/esm/icons/code-branch-icon';
|
|
4
|
+
|
|
5
|
+
export const MenuWithDescription: React.FunctionComponent = () => {
|
|
6
|
+
const [activeItem, setActiveItem] = React.useState(0);
|
|
7
|
+
|
|
8
|
+
const onSelect = (_event: React.MouseEvent<Element, MouseEvent> | undefined, itemId: number | string | undefined) => {
|
|
9
|
+
const item = itemId as number; // eslint-disable-next-line no-console
|
|
10
|
+
console.log(`clicked ${item}`);
|
|
11
|
+
setActiveItem(item);
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
return (
|
|
15
|
+
<Menu onSelect={onSelect} activeItemId={activeItem}>
|
|
16
|
+
<MenuContent>
|
|
17
|
+
<MenuList>
|
|
18
|
+
<MenuItem icon={<CodeBranchIcon aria-hidden />} description="Description" itemId={0}>
|
|
19
|
+
Action 1
|
|
20
|
+
</MenuItem>
|
|
21
|
+
<MenuItem isDisabled icon={<CodeBranchIcon aria-hidden />} description="Description" itemId={1}>
|
|
22
|
+
Action 2 disabled
|
|
23
|
+
</MenuItem>
|
|
24
|
+
<MenuItem
|
|
25
|
+
icon={<CodeBranchIcon aria-hidden />}
|
|
26
|
+
description="Nunc non ornare ex, et pretium dui. Duis nec augue at urna elementum blandit tincidunt eget metus. Aenean sed metus id urna dignissim interdum. Aenean vel nisl vitae arcu vehicula pulvinar eget nec turpis. Cras sit amet est est."
|
|
27
|
+
itemId={2}
|
|
28
|
+
>
|
|
29
|
+
Action 3
|
|
30
|
+
</MenuItem>
|
|
31
|
+
</MenuList>
|
|
32
|
+
</MenuContent>
|
|
33
|
+
</Menu>
|
|
34
|
+
);
|
|
35
|
+
};
|
|
@@ -5,7 +5,7 @@ import CodeBranchIcon from '@patternfly/react-icons/dist/esm/icons/code-branch-i
|
|
|
5
5
|
import LayerGroupIcon from '@patternfly/react-icons/dist/esm/icons/layer-group-icon';
|
|
6
6
|
import CubeIcon from '@patternfly/react-icons/dist/esm/icons/cube-icon';
|
|
7
7
|
|
|
8
|
-
export const
|
|
8
|
+
export const MenuWithDrilldown: React.FunctionComponent = () => {
|
|
9
9
|
const [menuDrilledIn, setMenuDrilledIn] = React.useState<string[]>([]);
|
|
10
10
|
const [drilldownPath, setDrilldownPath] = React.useState<string[]>([]);
|
|
11
11
|
const [menuHeights, setMenuHeights] = React.useState<any>({});
|