@patternfly/react-core 5.0.0-alpha.37 → 5.0.0-alpha.38
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 +6 -0
- package/components/OverflowMenu/OverflowMenuDropdownItem.d.ts +4 -4
- package/components/OverflowMenu/OverflowMenuDropdownItem.d.ts.map +1 -1
- package/components/OverflowMenu/OverflowMenuDropdownItem.js +3 -3
- package/components/OverflowMenu/OverflowMenuDropdownItem.js.map +1 -1
- package/dist/esm/components/OverflowMenu/OverflowMenuDropdownItem.d.ts +4 -4
- package/dist/esm/components/OverflowMenu/OverflowMenuDropdownItem.d.ts.map +1 -1
- package/dist/esm/components/OverflowMenu/OverflowMenuDropdownItem.js +3 -3
- package/dist/esm/components/OverflowMenu/OverflowMenuDropdownItem.js.map +1 -1
- package/dist/js/components/OverflowMenu/OverflowMenuDropdownItem.d.ts +4 -4
- package/dist/js/components/OverflowMenu/OverflowMenuDropdownItem.d.ts.map +1 -1
- package/dist/js/components/OverflowMenu/OverflowMenuDropdownItem.js +3 -3
- package/dist/js/components/OverflowMenu/OverflowMenuDropdownItem.js.map +1 -1
- package/dist/umd/react-core.min.js +1 -1
- package/package.json +2 -2
- package/src/components/OverflowMenu/OverflowMenuDropdownItem.tsx +6 -6
- package/src/components/OverflowMenu/__tests__/Generated/OverflowMenuDropdownItem.test.tsx +1 -4
- package/src/components/OverflowMenu/__tests__/Generated/__snapshots__/OverflowMenuDropdownItem.test.tsx.snap +14 -6
- package/src/components/OverflowMenu/examples/OverflowMenu.md +146 -73
- package/src/components/OverflowMenu/examples/OverflowMenuBreakpointOnContainer.tsx +26 -16
- package/src/components/Toolbar/examples/Toolbar.md +2 -0
- package/src/components/Toolbar/examples/ToolbarStacked.tsx +34 -25
- package/src/demos/Card/Card.md +30 -16
- package/src/demos/Tabs.md +3 -0
- package/src/demos/examples/Tabs/TabsAndTable.tsx +18 -6
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@patternfly/react-core",
|
|
3
|
-
"version": "5.0.0-alpha.
|
|
3
|
+
"version": "5.0.0-alpha.38",
|
|
4
4
|
"description": "This library provides a set of common React components for use with the PatternFly reference implementation.",
|
|
5
5
|
"main": "dist/js/index.js",
|
|
6
6
|
"module": "dist/esm/index.js",
|
|
@@ -70,5 +70,5 @@
|
|
|
70
70
|
"react": "^17 || ^18",
|
|
71
71
|
"react-dom": "^17 || ^18"
|
|
72
72
|
},
|
|
73
|
-
"gitHead": "
|
|
73
|
+
"gitHead": "084195b009f7c1a02b1dde8918218ac3b0e0d6fb"
|
|
74
74
|
}
|
|
@@ -1,24 +1,24 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
|
-
import { DropdownItem, DropdownItemProps } from '
|
|
2
|
+
import { DropdownItem, DropdownItemProps } from '../../next/components/Dropdown';
|
|
3
3
|
import { OverflowMenuContext } from './OverflowMenuContext';
|
|
4
4
|
|
|
5
|
-
export interface OverflowMenuDropdownItemProps extends DropdownItemProps {
|
|
5
|
+
export interface OverflowMenuDropdownItemProps extends Omit<DropdownItemProps, 'ref'> {
|
|
6
6
|
/** Indicates when a dropdown item shows and hides the corresponding list item */
|
|
7
7
|
isShared?: boolean;
|
|
8
|
-
/**
|
|
9
|
-
|
|
8
|
+
/** Identifies the component in the dropdown onSelect callback */
|
|
9
|
+
itemId?: string | number;
|
|
10
10
|
}
|
|
11
11
|
|
|
12
12
|
export const OverflowMenuDropdownItem: React.FunctionComponent<OverflowMenuDropdownItemProps> = ({
|
|
13
13
|
children,
|
|
14
14
|
isShared = false,
|
|
15
|
-
|
|
15
|
+
itemId,
|
|
16
16
|
...additionalProps
|
|
17
17
|
}: OverflowMenuDropdownItemProps) => (
|
|
18
18
|
<OverflowMenuContext.Consumer>
|
|
19
19
|
{value =>
|
|
20
20
|
(!isShared || value.isBelowBreakpoint) && (
|
|
21
|
-
<DropdownItem component="button"
|
|
21
|
+
<DropdownItem component="button" itemId={itemId} {...additionalProps}>
|
|
22
22
|
{children}
|
|
23
23
|
</DropdownItem>
|
|
24
24
|
)
|
|
@@ -3,14 +3,11 @@ import React from 'react';
|
|
|
3
3
|
import { render } from '@testing-library/react';
|
|
4
4
|
|
|
5
5
|
import { OverflowMenuDropdownItem } from '../../OverflowMenuDropdownItem';
|
|
6
|
-
import { DropdownArrowContext } from '../../../Dropdown';
|
|
7
6
|
|
|
8
7
|
describe('OverflowMenuDropdownItem', () => {
|
|
9
8
|
it('should match snapshot', () => {
|
|
10
9
|
const { asFragment } = render(
|
|
11
|
-
|
|
12
|
-
<OverflowMenuDropdownItem children={'any'} isShared={false} />
|
|
13
|
-
</DropdownArrowContext.Provider>
|
|
10
|
+
<OverflowMenuDropdownItem itemId="id" children={'any'} isShared={false} />
|
|
14
11
|
);
|
|
15
12
|
expect(asFragment()).toMatchSnapshot();
|
|
16
13
|
});
|
|
@@ -3,19 +3,27 @@
|
|
|
3
3
|
exports[`OverflowMenuDropdownItem should match snapshot 1`] = `
|
|
4
4
|
<DocumentFragment>
|
|
5
5
|
<li
|
|
6
|
+
class="pf-c-menu__list-item"
|
|
7
|
+
data-ouia-component-id="OUIA-Generated-DropdownItem-1"
|
|
8
|
+
data-ouia-component-type="PF4/DropdownItem"
|
|
9
|
+
data-ouia-safe="true"
|
|
6
10
|
role="none"
|
|
7
11
|
>
|
|
8
12
|
<button
|
|
9
|
-
|
|
10
|
-
class=""
|
|
11
|
-
data-ouia-component-id="OUIA-Generated-DropdownItem-1"
|
|
12
|
-
data-ouia-component-type="PF4/DropdownItem"
|
|
13
|
-
data-ouia-safe="true"
|
|
13
|
+
class="pf-c-menu__item"
|
|
14
14
|
role="menuitem"
|
|
15
15
|
tabindex="-1"
|
|
16
16
|
type="button"
|
|
17
17
|
>
|
|
18
|
-
|
|
18
|
+
<span
|
|
19
|
+
class="pf-c-menu__item-main"
|
|
20
|
+
>
|
|
21
|
+
<span
|
|
22
|
+
class="pf-c-menu__item-text"
|
|
23
|
+
>
|
|
24
|
+
any
|
|
25
|
+
</span>
|
|
26
|
+
</span>
|
|
19
27
|
</button>
|
|
20
28
|
</li>
|
|
21
29
|
</DocumentFragment>
|
|
@@ -9,13 +9,15 @@ propComponents:
|
|
|
9
9
|
'OverflowMenuControl',
|
|
10
10
|
'OverflowMenuDropdownItem',
|
|
11
11
|
'OverflowMenuGroup',
|
|
12
|
-
'OverflowMenuItem'
|
|
12
|
+
'OverflowMenuItem'
|
|
13
13
|
]
|
|
14
14
|
---
|
|
15
15
|
|
|
16
16
|
import AlignLeftIcon from '@patternfly/react-icons/dist/esm/icons/align-left-icon';
|
|
17
17
|
import AlignCenterIcon from '@patternfly/react-icons/dist/esm/icons/align-center-icon';
|
|
18
18
|
import AlignRightIcon from '@patternfly/react-icons/dist/esm/icons/align-right-icon';
|
|
19
|
+
import EllipsisVIcon from '@patternfly/react-icons/dist/esm/icons/ellipsis-v-icon';
|
|
20
|
+
import { Dropdown as DropdownNext, DropdownList } from '@patternfly/react-core/next';
|
|
19
21
|
|
|
20
22
|
## Examples
|
|
21
23
|
|
|
@@ -29,9 +31,11 @@ import {
|
|
|
29
31
|
OverflowMenuContent,
|
|
30
32
|
OverflowMenuGroup,
|
|
31
33
|
OverflowMenuItem,
|
|
32
|
-
OverflowMenuDropdownItem
|
|
34
|
+
OverflowMenuDropdownItem,
|
|
35
|
+
MenuToggle
|
|
33
36
|
} from '@patternfly/react-core';
|
|
34
|
-
import { Dropdown,
|
|
37
|
+
import { Dropdown as DropdownNext, DropdownList } from '@patternfly/react-core/next';
|
|
38
|
+
import EllipsisVIcon from '@patternfly/react-icons/dist/esm/icons/ellipsis-v-icon';
|
|
35
39
|
|
|
36
40
|
class SimpleOverflowMenu extends React.Component {
|
|
37
41
|
constructor(props) {
|
|
@@ -39,12 +43,12 @@ class SimpleOverflowMenu extends React.Component {
|
|
|
39
43
|
this.state = {
|
|
40
44
|
isOpen: false
|
|
41
45
|
};
|
|
42
|
-
this.onToggle = (
|
|
46
|
+
this.onToggle = () => {
|
|
43
47
|
this.setState({
|
|
44
|
-
isOpen
|
|
48
|
+
isOpen: !this.state.isOpen
|
|
45
49
|
});
|
|
46
50
|
};
|
|
47
|
-
this.onSelect = event => {
|
|
51
|
+
this.onSelect = (event) => {
|
|
48
52
|
this.setState({
|
|
49
53
|
isOpen: !this.state.isOpen
|
|
50
54
|
});
|
|
@@ -54,19 +58,19 @@ class SimpleOverflowMenu extends React.Component {
|
|
|
54
58
|
render() {
|
|
55
59
|
const { isOpen } = this.state;
|
|
56
60
|
const dropdownItems = [
|
|
57
|
-
<OverflowMenuDropdownItem key="item1" isShared>
|
|
61
|
+
<OverflowMenuDropdownItem itemId={0} key="item1" isShared>
|
|
58
62
|
Item 1
|
|
59
63
|
</OverflowMenuDropdownItem>,
|
|
60
|
-
<OverflowMenuDropdownItem key="item2" isShared>
|
|
64
|
+
<OverflowMenuDropdownItem itemId={1} key="item2" isShared>
|
|
61
65
|
Item 2
|
|
62
66
|
</OverflowMenuDropdownItem>,
|
|
63
|
-
<OverflowMenuDropdownItem key="item3" isShared>
|
|
67
|
+
<OverflowMenuDropdownItem itemId={2} key="item3" isShared>
|
|
64
68
|
Item 3
|
|
65
69
|
</OverflowMenuDropdownItem>,
|
|
66
|
-
<OverflowMenuDropdownItem key="item4" isShared>
|
|
70
|
+
<OverflowMenuDropdownItem itemId={3} key="item4" isShared>
|
|
67
71
|
Item 4
|
|
68
72
|
</OverflowMenuDropdownItem>,
|
|
69
|
-
<OverflowMenuDropdownItem key="item5" isShared>
|
|
73
|
+
<OverflowMenuDropdownItem itemId={5} key="item5" isShared>
|
|
70
74
|
Item 5
|
|
71
75
|
</OverflowMenuDropdownItem>
|
|
72
76
|
];
|
|
@@ -82,15 +86,28 @@ class SimpleOverflowMenu extends React.Component {
|
|
|
82
86
|
</OverflowMenuGroup>
|
|
83
87
|
</OverflowMenuContent>
|
|
84
88
|
<OverflowMenuControl>
|
|
85
|
-
<
|
|
89
|
+
<DropdownNext
|
|
86
90
|
onSelect={this.onSelect}
|
|
87
|
-
toggle={
|
|
91
|
+
toggle={(toggleRef) => (
|
|
92
|
+
<MenuToggle
|
|
93
|
+
ref={toggleRef}
|
|
94
|
+
aria-label="Simple example overflow menu"
|
|
95
|
+
variant="plain"
|
|
96
|
+
onClick={this.onToggle}
|
|
97
|
+
isExpanded={isOpen}
|
|
98
|
+
>
|
|
99
|
+
<EllipsisVIcon />
|
|
100
|
+
</MenuToggle>
|
|
101
|
+
)}
|
|
88
102
|
isOpen={isOpen}
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
103
|
+
onOpenChange={(isOpen) =>
|
|
104
|
+
this.setState({
|
|
105
|
+
isOpen
|
|
106
|
+
})
|
|
107
|
+
}
|
|
108
|
+
>
|
|
109
|
+
<DropdownList>{dropdownItems}</DropdownList>
|
|
110
|
+
</DropdownNext>
|
|
94
111
|
</OverflowMenuControl>
|
|
95
112
|
</OverflowMenu>
|
|
96
113
|
);
|
|
@@ -108,9 +125,13 @@ import {
|
|
|
108
125
|
OverflowMenuContent,
|
|
109
126
|
OverflowMenuGroup,
|
|
110
127
|
OverflowMenuItem,
|
|
111
|
-
OverflowMenuDropdownItem
|
|
128
|
+
OverflowMenuDropdownItem,
|
|
129
|
+
MenuToggle,
|
|
130
|
+
Button,
|
|
131
|
+
ButtonVariant
|
|
112
132
|
} from '@patternfly/react-core';
|
|
113
|
-
import { Dropdown
|
|
133
|
+
import { Dropdown as DropdownNext, DropdownList } from '@patternfly/react-core/next';
|
|
134
|
+
import EllipsisVIcon from '@patternfly/react-icons/dist/esm/icons/ellipsis-v-icon';
|
|
114
135
|
import AlignLeftIcon from '@patternfly/react-icons/dist/esm/icons/align-left-icon';
|
|
115
136
|
import AlignCenterIcon from '@patternfly/react-icons/dist/esm/icons/align-center-icon';
|
|
116
137
|
import AlignRightIcon from '@patternfly/react-icons/dist/esm/icons/align-right-icon';
|
|
@@ -121,12 +142,12 @@ class OverflowMenuGroupTypes extends React.Component {
|
|
|
121
142
|
this.state = {
|
|
122
143
|
isOpen: false
|
|
123
144
|
};
|
|
124
|
-
this.onToggle = (
|
|
145
|
+
this.onToggle = () => {
|
|
125
146
|
this.setState({
|
|
126
|
-
isOpen
|
|
147
|
+
isOpen: !this.state.isOpen
|
|
127
148
|
});
|
|
128
149
|
};
|
|
129
|
-
this.onSelect = event => {
|
|
150
|
+
this.onSelect = (event) => {
|
|
130
151
|
this.setState({
|
|
131
152
|
isOpen: !this.state.isOpen
|
|
132
153
|
});
|
|
@@ -136,31 +157,31 @@ class OverflowMenuGroupTypes extends React.Component {
|
|
|
136
157
|
render() {
|
|
137
158
|
const { isOpen } = this.state;
|
|
138
159
|
const dropdownItems = [
|
|
139
|
-
<OverflowMenuDropdownItem key="item1" isShared>
|
|
160
|
+
<OverflowMenuDropdownItem itemId={0} key="item1" isShared>
|
|
140
161
|
Item 1
|
|
141
162
|
</OverflowMenuDropdownItem>,
|
|
142
|
-
<OverflowMenuDropdownItem key="item2" isShared>
|
|
163
|
+
<OverflowMenuDropdownItem itemId={1} key="item2" isShared>
|
|
143
164
|
Item 2
|
|
144
165
|
</OverflowMenuDropdownItem>,
|
|
145
|
-
<OverflowMenuDropdownItem key="item3" isShared>
|
|
166
|
+
<OverflowMenuDropdownItem itemId={2} key="item3" isShared>
|
|
146
167
|
Item 3
|
|
147
168
|
</OverflowMenuDropdownItem>,
|
|
148
|
-
<OverflowMenuDropdownItem key="primary" isShared>
|
|
169
|
+
<OverflowMenuDropdownItem itemId={3} key="primary" isShared>
|
|
149
170
|
Primary
|
|
150
171
|
</OverflowMenuDropdownItem>,
|
|
151
|
-
<OverflowMenuDropdownItem key="secondary" isShared>
|
|
172
|
+
<OverflowMenuDropdownItem itemId={4} key="secondary" isShared>
|
|
152
173
|
Secondary
|
|
153
174
|
</OverflowMenuDropdownItem>,
|
|
154
|
-
<OverflowMenuDropdownItem key="tertiary" isShared>
|
|
175
|
+
<OverflowMenuDropdownItem itemId={5} key="tertiary" isShared>
|
|
155
176
|
Tertiary
|
|
156
177
|
</OverflowMenuDropdownItem>,
|
|
157
|
-
<OverflowMenuDropdownItem key="action1" isShared>
|
|
178
|
+
<OverflowMenuDropdownItem itemId={6} key="action1" isShared>
|
|
158
179
|
Action 1
|
|
159
180
|
</OverflowMenuDropdownItem>,
|
|
160
|
-
<OverflowMenuDropdownItem key="action2" isShared>
|
|
181
|
+
<OverflowMenuDropdownItem itemId={7} key="action2" isShared>
|
|
161
182
|
Action 2
|
|
162
183
|
</OverflowMenuDropdownItem>,
|
|
163
|
-
<OverflowMenuDropdownItem key="action3" isShared>
|
|
184
|
+
<OverflowMenuDropdownItem itemId={8} key="action3" isShared>
|
|
164
185
|
Action 3
|
|
165
186
|
</OverflowMenuDropdownItem>
|
|
166
187
|
];
|
|
@@ -202,15 +223,28 @@ class OverflowMenuGroupTypes extends React.Component {
|
|
|
202
223
|
</OverflowMenuGroup>
|
|
203
224
|
</OverflowMenuContent>
|
|
204
225
|
<OverflowMenuControl>
|
|
205
|
-
<
|
|
226
|
+
<DropdownNext
|
|
206
227
|
onSelect={this.onSelect}
|
|
207
|
-
toggle={
|
|
228
|
+
toggle={(toggleRef) => (
|
|
229
|
+
<MenuToggle
|
|
230
|
+
ref={toggleRef}
|
|
231
|
+
aria-label="Group example overflow menu"
|
|
232
|
+
variant="plain"
|
|
233
|
+
onClick={this.onToggle}
|
|
234
|
+
isExpanded={isOpen}
|
|
235
|
+
>
|
|
236
|
+
<EllipsisVIcon />
|
|
237
|
+
</MenuToggle>
|
|
238
|
+
)}
|
|
208
239
|
isOpen={isOpen}
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
240
|
+
onOpenChange={(isOpen) =>
|
|
241
|
+
this.setState({
|
|
242
|
+
isOpen
|
|
243
|
+
})
|
|
244
|
+
}
|
|
245
|
+
>
|
|
246
|
+
<DropdownList>{dropdownItems}</DropdownList>
|
|
247
|
+
</DropdownNext>
|
|
214
248
|
</OverflowMenuControl>
|
|
215
249
|
</OverflowMenu>
|
|
216
250
|
);
|
|
@@ -228,9 +262,13 @@ import {
|
|
|
228
262
|
OverflowMenuContent,
|
|
229
263
|
OverflowMenuGroup,
|
|
230
264
|
OverflowMenuItem,
|
|
231
|
-
OverflowMenuDropdownItem
|
|
265
|
+
OverflowMenuDropdownItem,
|
|
266
|
+
MenuToggle,
|
|
267
|
+
Button,
|
|
268
|
+
ButtonVariant
|
|
232
269
|
} from '@patternfly/react-core';
|
|
233
|
-
import { Dropdown
|
|
270
|
+
import { Dropdown as DropdownNext, DropdownList } from '@patternfly/react-core/next';
|
|
271
|
+
import EllipsisVIcon from '@patternfly/react-icons/dist/esm/icons/ellipsis-v-icon';
|
|
234
272
|
import AlignLeftIcon from '@patternfly/react-icons/dist/esm/icons/align-left-icon';
|
|
235
273
|
import AlignCenterIcon from '@patternfly/react-icons/dist/esm/icons/align-center-icon';
|
|
236
274
|
import AlignRightIcon from '@patternfly/react-icons/dist/esm/icons/align-right-icon';
|
|
@@ -241,12 +279,12 @@ class OverflowMenuAdditionalOptions extends React.Component {
|
|
|
241
279
|
this.state = {
|
|
242
280
|
isOpen: false
|
|
243
281
|
};
|
|
244
|
-
this.onToggle = (
|
|
282
|
+
this.onToggle = () => {
|
|
245
283
|
this.setState({
|
|
246
|
-
isOpen
|
|
284
|
+
isOpen: !this.state.isOpen
|
|
247
285
|
});
|
|
248
286
|
};
|
|
249
|
-
this.onSelect = event => {
|
|
287
|
+
this.onSelect = (event) => {
|
|
250
288
|
this.setState({
|
|
251
289
|
isOpen: !this.state.isOpen
|
|
252
290
|
});
|
|
@@ -256,25 +294,27 @@ class OverflowMenuAdditionalOptions extends React.Component {
|
|
|
256
294
|
render() {
|
|
257
295
|
const { isOpen } = this.state;
|
|
258
296
|
const dropdownItems = [
|
|
259
|
-
<OverflowMenuDropdownItem key="1" isShared>
|
|
297
|
+
<OverflowMenuDropdownItem itemId={0} key="1" isShared>
|
|
260
298
|
Primary
|
|
261
299
|
</OverflowMenuDropdownItem>,
|
|
262
|
-
<OverflowMenuDropdownItem key="2" isShared>
|
|
300
|
+
<OverflowMenuDropdownItem itemId={1} key="2" isShared>
|
|
263
301
|
Secondary
|
|
264
302
|
</OverflowMenuDropdownItem>,
|
|
265
|
-
<OverflowMenuDropdownItem key="3" isShared>
|
|
303
|
+
<OverflowMenuDropdownItem itemId={2} key="3" isShared>
|
|
266
304
|
Tertiary
|
|
267
305
|
</OverflowMenuDropdownItem>,
|
|
268
|
-
<OverflowMenuDropdownItem key="4" isShared>
|
|
306
|
+
<OverflowMenuDropdownItem itemId={3} key="4" isShared>
|
|
269
307
|
Action 4
|
|
270
308
|
</OverflowMenuDropdownItem>,
|
|
271
|
-
<OverflowMenuDropdownItem key="5" isShared>
|
|
309
|
+
<OverflowMenuDropdownItem itemId={4} key="5" isShared>
|
|
272
310
|
Action 5
|
|
273
311
|
</OverflowMenuDropdownItem>,
|
|
274
|
-
<OverflowMenuDropdownItem key="6" isShared>
|
|
312
|
+
<OverflowMenuDropdownItem itemId={5} key="6" isShared>
|
|
275
313
|
Action 6
|
|
276
314
|
</OverflowMenuDropdownItem>,
|
|
277
|
-
<OverflowMenuDropdownItem key="7">
|
|
315
|
+
<OverflowMenuDropdownItem itemId={6} key="7">
|
|
316
|
+
Action 7
|
|
317
|
+
</OverflowMenuDropdownItem>
|
|
278
318
|
];
|
|
279
319
|
return (
|
|
280
320
|
<OverflowMenu breakpoint="lg">
|
|
@@ -309,15 +349,28 @@ class OverflowMenuAdditionalOptions extends React.Component {
|
|
|
309
349
|
</OverflowMenuGroup>
|
|
310
350
|
</OverflowMenuContent>
|
|
311
351
|
<OverflowMenuControl hasAdditionalOptions>
|
|
312
|
-
<
|
|
352
|
+
<DropdownNext
|
|
313
353
|
onSelect={this.onSelect}
|
|
314
|
-
toggle={
|
|
354
|
+
toggle={(toggleRef) => (
|
|
355
|
+
<MenuToggle
|
|
356
|
+
ref={toggleRef}
|
|
357
|
+
aria-label="Multiple group example overflow menu"
|
|
358
|
+
variant="plain"
|
|
359
|
+
onClick={this.onToggle}
|
|
360
|
+
isExpanded={isOpen}
|
|
361
|
+
>
|
|
362
|
+
<EllipsisVIcon />
|
|
363
|
+
</MenuToggle>
|
|
364
|
+
)}
|
|
315
365
|
isOpen={isOpen}
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
366
|
+
onOpenChange={(isOpen) =>
|
|
367
|
+
this.setState({
|
|
368
|
+
isOpen
|
|
369
|
+
})
|
|
370
|
+
}
|
|
371
|
+
>
|
|
372
|
+
<DropdownList>{dropdownItems}</DropdownList>
|
|
373
|
+
</DropdownNext>
|
|
321
374
|
</OverflowMenuControl>
|
|
322
375
|
</OverflowMenu>
|
|
323
376
|
);
|
|
@@ -335,9 +388,13 @@ import {
|
|
|
335
388
|
OverflowMenuContent,
|
|
336
389
|
OverflowMenuGroup,
|
|
337
390
|
OverflowMenuItem,
|
|
338
|
-
OverflowMenuDropdownItem
|
|
391
|
+
OverflowMenuDropdownItem,
|
|
392
|
+
MenuToggle,
|
|
393
|
+
Button,
|
|
394
|
+
ButtonVariant
|
|
339
395
|
} from '@patternfly/react-core';
|
|
340
|
-
import { Dropdown
|
|
396
|
+
import { Dropdown as DropdownNext, DropdownList } from '@patternfly/react-core/next';
|
|
397
|
+
import EllipsisVIcon from '@patternfly/react-icons/dist/esm/icons/ellipsis-v-icon';
|
|
341
398
|
|
|
342
399
|
class OverflowMenuPersist extends React.Component {
|
|
343
400
|
constructor(props) {
|
|
@@ -345,12 +402,12 @@ class OverflowMenuPersist extends React.Component {
|
|
|
345
402
|
this.state = {
|
|
346
403
|
isOpen: false
|
|
347
404
|
};
|
|
348
|
-
this.onToggle = (
|
|
405
|
+
this.onToggle = () => {
|
|
349
406
|
this.setState({
|
|
350
|
-
isOpen
|
|
407
|
+
isOpen: !this.state.isOpen
|
|
351
408
|
});
|
|
352
409
|
};
|
|
353
|
-
this.onSelect = event => {
|
|
410
|
+
this.onSelect = (event, itemId) => {
|
|
354
411
|
this.setState({
|
|
355
412
|
isOpen: !this.state.isOpen
|
|
356
413
|
});
|
|
@@ -360,13 +417,15 @@ class OverflowMenuPersist extends React.Component {
|
|
|
360
417
|
render() {
|
|
361
418
|
const { isOpen } = this.state;
|
|
362
419
|
const dropdownItems = [
|
|
363
|
-
<OverflowMenuDropdownItem key="secondary" isShared>
|
|
420
|
+
<OverflowMenuDropdownItem itemId={0} key="secondary" isShared>
|
|
364
421
|
Secondary
|
|
365
422
|
</OverflowMenuDropdownItem>,
|
|
366
|
-
<OverflowMenuDropdownItem key="tertiary" isShared>
|
|
423
|
+
<OverflowMenuDropdownItem itemId={1} key="tertiary" isShared>
|
|
367
424
|
Tertiary
|
|
368
425
|
</OverflowMenuDropdownItem>,
|
|
369
|
-
<OverflowMenuDropdownItem key="action">
|
|
426
|
+
<OverflowMenuDropdownItem itemId={2} key="action">
|
|
427
|
+
Action 4
|
|
428
|
+
</OverflowMenuDropdownItem>
|
|
370
429
|
];
|
|
371
430
|
return (
|
|
372
431
|
<OverflowMenu breakpoint="lg">
|
|
@@ -384,15 +443,28 @@ class OverflowMenuPersist extends React.Component {
|
|
|
384
443
|
</OverflowMenuGroup>
|
|
385
444
|
</OverflowMenuContent>
|
|
386
445
|
<OverflowMenuControl hasAdditionalOptions>
|
|
387
|
-
<
|
|
446
|
+
<DropdownNext
|
|
388
447
|
onSelect={this.onSelect}
|
|
389
|
-
toggle={
|
|
448
|
+
toggle={(toggleRef) => (
|
|
449
|
+
<MenuToggle
|
|
450
|
+
ref={toggleRef}
|
|
451
|
+
aria-label="Persistent example overflow menu"
|
|
452
|
+
variant="plain"
|
|
453
|
+
onClick={this.onToggle}
|
|
454
|
+
isExpanded={isOpen}
|
|
455
|
+
>
|
|
456
|
+
<EllipsisVIcon />
|
|
457
|
+
</MenuToggle>
|
|
458
|
+
)}
|
|
390
459
|
isOpen={isOpen}
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
460
|
+
onOpenChange={(isOpen) =>
|
|
461
|
+
this.setState({
|
|
462
|
+
isOpen
|
|
463
|
+
})
|
|
464
|
+
}
|
|
465
|
+
>
|
|
466
|
+
<DropdownList>{dropdownItems}</DropdownList>
|
|
467
|
+
</DropdownNext>
|
|
396
468
|
</OverflowMenuControl>
|
|
397
469
|
</OverflowMenu>
|
|
398
470
|
);
|
|
@@ -407,4 +479,5 @@ By passing in the `breakpointReference` property, the overflow menu's breakpoint
|
|
|
407
479
|
You can change the container width in this example by adjusting the slider. As the container width changes, the overflow menu will change between a horizontal menu and a vertical dropdown despite the viewport width not changing.
|
|
408
480
|
|
|
409
481
|
```ts file="./OverflowMenuBreakpointOnContainer.tsx"
|
|
482
|
+
|
|
410
483
|
```
|
|
@@ -6,18 +6,19 @@ import {
|
|
|
6
6
|
OverflowMenuGroup,
|
|
7
7
|
OverflowMenuItem,
|
|
8
8
|
OverflowMenuDropdownItem,
|
|
9
|
-
|
|
10
|
-
KebabToggle,
|
|
9
|
+
MenuToggle,
|
|
11
10
|
Slider
|
|
12
11
|
} from '@patternfly/react-core';
|
|
12
|
+
import { Dropdown as DropdownNext, DropdownList } from '@patternfly/react-core/next';
|
|
13
|
+
import EllipsisVIcon from '@patternfly/react-icons/dist/esm/icons/ellipsis-v-icon';
|
|
13
14
|
|
|
14
15
|
export const OverflowMenuBreakpointOnContainer: React.FunctionComponent = () => {
|
|
15
16
|
const [isOpen, setIsOpen] = React.useState(false);
|
|
16
17
|
const [containerWidth, setContainerWidth] = React.useState(100);
|
|
17
18
|
const containerRef = React.useRef<HTMLDivElement>(null);
|
|
18
19
|
|
|
19
|
-
const onToggle = (
|
|
20
|
-
setIsOpen(isOpen);
|
|
20
|
+
const onToggle = () => {
|
|
21
|
+
setIsOpen(!isOpen);
|
|
21
22
|
};
|
|
22
23
|
|
|
23
24
|
const onSelect = () => {
|
|
@@ -36,19 +37,19 @@ export const OverflowMenuBreakpointOnContainer: React.FunctionComponent = () =>
|
|
|
36
37
|
};
|
|
37
38
|
|
|
38
39
|
const dropdownItems = [
|
|
39
|
-
<OverflowMenuDropdownItem key="item1" isShared>
|
|
40
|
+
<OverflowMenuDropdownItem itemId={0} key="item1" isShared>
|
|
40
41
|
Item 1
|
|
41
42
|
</OverflowMenuDropdownItem>,
|
|
42
|
-
<OverflowMenuDropdownItem key="item2" isShared>
|
|
43
|
+
<OverflowMenuDropdownItem itemId={1} key="item2" isShared>
|
|
43
44
|
Item 2
|
|
44
45
|
</OverflowMenuDropdownItem>,
|
|
45
|
-
<OverflowMenuDropdownItem key="item3" isShared>
|
|
46
|
+
<OverflowMenuDropdownItem itemId={2} key="item3" isShared>
|
|
46
47
|
Item 3
|
|
47
48
|
</OverflowMenuDropdownItem>,
|
|
48
|
-
<OverflowMenuDropdownItem key="item4" isShared>
|
|
49
|
+
<OverflowMenuDropdownItem itemId={3} key="item4" isShared>
|
|
49
50
|
Item 4
|
|
50
51
|
</OverflowMenuDropdownItem>,
|
|
51
|
-
<OverflowMenuDropdownItem key="item5" isShared>
|
|
52
|
+
<OverflowMenuDropdownItem itemId={4} key="item5" isShared>
|
|
52
53
|
Item 5
|
|
53
54
|
</OverflowMenuDropdownItem>
|
|
54
55
|
];
|
|
@@ -83,15 +84,24 @@ export const OverflowMenuBreakpointOnContainer: React.FunctionComponent = () =>
|
|
|
83
84
|
</OverflowMenuGroup>
|
|
84
85
|
</OverflowMenuContent>
|
|
85
86
|
<OverflowMenuControl>
|
|
86
|
-
<
|
|
87
|
+
<DropdownNext
|
|
87
88
|
onSelect={onSelect}
|
|
88
|
-
toggle={
|
|
89
|
+
toggle={toggleRef => (
|
|
90
|
+
<MenuToggle
|
|
91
|
+
ref={toggleRef}
|
|
92
|
+
aria-label="Breakpoint on container example overflow menu"
|
|
93
|
+
variant="plain"
|
|
94
|
+
onClick={onToggle}
|
|
95
|
+
isExpanded={isOpen}
|
|
96
|
+
>
|
|
97
|
+
<EllipsisVIcon />
|
|
98
|
+
</MenuToggle>
|
|
99
|
+
)}
|
|
89
100
|
isOpen={isOpen}
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
/>
|
|
101
|
+
onOpenChange={isOpen => setIsOpen(isOpen)}
|
|
102
|
+
>
|
|
103
|
+
<DropdownList>{dropdownItems}</DropdownList>
|
|
104
|
+
</DropdownNext>
|
|
95
105
|
</OverflowMenuControl>
|
|
96
106
|
</OverflowMenu>
|
|
97
107
|
</div>
|
|
@@ -10,6 +10,8 @@ import CloneIcon from '@patternfly/react-icons/dist/esm/icons/clone-icon';
|
|
|
10
10
|
import SyncIcon from '@patternfly/react-icons/dist/esm/icons/sync-icon';
|
|
11
11
|
import FilterIcon from '@patternfly/react-icons/dist/esm/icons/filter-icon';
|
|
12
12
|
import SearchIcon from '@patternfly/react-icons/dist/esm/icons/search-icon';
|
|
13
|
+
import EllipsisVIcon from '@patternfly/react-icons/dist/esm/icons/ellipsis-v-icon';
|
|
14
|
+
import { Dropdown as DropdownNext, DropdownItem as DropdownItemNext, DropdownList } from '@patternfly/react-core/next';
|
|
13
15
|
|
|
14
16
|
## Examples
|
|
15
17
|
|