@patternfly/react-core 4.258.7 → 4.259.0
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 +22 -0
- package/dist/esm/components/ApplicationLauncher/ApplicationLauncher.d.ts +2 -0
- package/dist/esm/components/ApplicationLauncher/ApplicationLauncher.d.ts.map +1 -1
- package/dist/esm/components/ApplicationLauncher/ApplicationLauncher.js +2 -2
- package/dist/esm/components/ApplicationLauncher/ApplicationLauncher.js.map +1 -1
- package/dist/esm/components/ContextSelector/ContextSelector.d.ts +2 -0
- package/dist/esm/components/ContextSelector/ContextSelector.d.ts.map +1 -1
- package/dist/esm/components/ContextSelector/ContextSelector.js +4 -3
- package/dist/esm/components/ContextSelector/ContextSelector.js.map +1 -1
- package/dist/esm/components/Dropdown/Dropdown.d.ts +2 -0
- package/dist/esm/components/Dropdown/Dropdown.d.ts.map +1 -1
- package/dist/esm/components/Dropdown/Dropdown.js +2 -2
- package/dist/esm/components/Dropdown/Dropdown.js.map +1 -1
- package/dist/esm/components/Dropdown/DropdownWithContext.d.ts.map +1 -1
- package/dist/esm/components/Dropdown/DropdownWithContext.js +2 -2
- package/dist/esm/components/Dropdown/DropdownWithContext.js.map +1 -1
- package/dist/esm/components/Nav/NavItem.d.ts +2 -0
- package/dist/esm/components/Nav/NavItem.d.ts.map +1 -1
- package/dist/esm/components/Nav/NavItem.js +2 -2
- package/dist/esm/components/Nav/NavItem.js.map +1 -1
- package/dist/esm/components/OptionsMenu/OptionsMenu.d.ts +2 -0
- package/dist/esm/components/OptionsMenu/OptionsMenu.d.ts.map +1 -1
- package/dist/esm/components/OptionsMenu/OptionsMenu.js +2 -2
- package/dist/esm/components/OptionsMenu/OptionsMenu.js.map +1 -1
- package/dist/esm/components/SearchInput/SearchInput.d.ts +2 -0
- package/dist/esm/components/SearchInput/SearchInput.d.ts.map +1 -1
- package/dist/esm/components/SearchInput/SearchInput.js +2 -2
- package/dist/esm/components/SearchInput/SearchInput.js.map +1 -1
- package/dist/esm/components/Select/Select.d.ts +2 -0
- package/dist/esm/components/Select/Select.d.ts.map +1 -1
- package/dist/esm/components/Select/Select.js +4 -3
- package/dist/esm/components/Select/Select.js.map +1 -1
- package/dist/esm/components/Tabs/OverflowTab.d.ts +2 -0
- package/dist/esm/components/Tabs/OverflowTab.d.ts.map +1 -1
- package/dist/esm/components/Tabs/OverflowTab.js +2 -2
- package/dist/esm/components/Tabs/OverflowTab.js.map +1 -1
- package/dist/esm/components/TimePicker/TimePicker.d.ts +3 -0
- package/dist/esm/components/TimePicker/TimePicker.d.ts.map +1 -1
- package/dist/esm/components/TimePicker/TimePicker.js +4 -3
- package/dist/esm/components/TimePicker/TimePicker.js.map +1 -1
- package/dist/esm/next/components/Dropdown/Dropdown.d.ts +2 -0
- package/dist/esm/next/components/Dropdown/Dropdown.d.ts.map +1 -1
- package/dist/esm/next/components/Dropdown/Dropdown.js +2 -2
- package/dist/esm/next/components/Dropdown/Dropdown.js.map +1 -1
- package/dist/esm/next/components/Select/Select.d.ts +2 -0
- package/dist/esm/next/components/Select/Select.d.ts.map +1 -1
- package/dist/esm/next/components/Select/Select.js +2 -2
- package/dist/esm/next/components/Select/Select.js.map +1 -1
- package/dist/js/components/ApplicationLauncher/ApplicationLauncher.d.ts +2 -0
- package/dist/js/components/ApplicationLauncher/ApplicationLauncher.d.ts.map +1 -1
- package/dist/js/components/ApplicationLauncher/ApplicationLauncher.js +2 -2
- package/dist/js/components/ApplicationLauncher/ApplicationLauncher.js.map +1 -1
- package/dist/js/components/ContextSelector/ContextSelector.d.ts +2 -0
- package/dist/js/components/ContextSelector/ContextSelector.d.ts.map +1 -1
- package/dist/js/components/ContextSelector/ContextSelector.js +4 -3
- package/dist/js/components/ContextSelector/ContextSelector.js.map +1 -1
- package/dist/js/components/Dropdown/Dropdown.d.ts +2 -0
- package/dist/js/components/Dropdown/Dropdown.d.ts.map +1 -1
- package/dist/js/components/Dropdown/Dropdown.js +2 -2
- package/dist/js/components/Dropdown/Dropdown.js.map +1 -1
- package/dist/js/components/Dropdown/DropdownWithContext.d.ts.map +1 -1
- package/dist/js/components/Dropdown/DropdownWithContext.js +2 -2
- package/dist/js/components/Dropdown/DropdownWithContext.js.map +1 -1
- package/dist/js/components/Nav/NavItem.d.ts +2 -0
- package/dist/js/components/Nav/NavItem.d.ts.map +1 -1
- package/dist/js/components/Nav/NavItem.js +2 -2
- package/dist/js/components/Nav/NavItem.js.map +1 -1
- package/dist/js/components/OptionsMenu/OptionsMenu.d.ts +2 -0
- package/dist/js/components/OptionsMenu/OptionsMenu.d.ts.map +1 -1
- package/dist/js/components/OptionsMenu/OptionsMenu.js +2 -2
- package/dist/js/components/OptionsMenu/OptionsMenu.js.map +1 -1
- package/dist/js/components/SearchInput/SearchInput.d.ts +2 -0
- package/dist/js/components/SearchInput/SearchInput.d.ts.map +1 -1
- package/dist/js/components/SearchInput/SearchInput.js +2 -2
- package/dist/js/components/SearchInput/SearchInput.js.map +1 -1
- package/dist/js/components/Select/Select.d.ts +2 -0
- package/dist/js/components/Select/Select.d.ts.map +1 -1
- package/dist/js/components/Select/Select.js +4 -3
- package/dist/js/components/Select/Select.js.map +1 -1
- package/dist/js/components/Tabs/OverflowTab.d.ts +2 -0
- package/dist/js/components/Tabs/OverflowTab.d.ts.map +1 -1
- package/dist/js/components/Tabs/OverflowTab.js +2 -2
- package/dist/js/components/Tabs/OverflowTab.js.map +1 -1
- package/dist/js/components/TimePicker/TimePicker.d.ts +3 -0
- package/dist/js/components/TimePicker/TimePicker.d.ts.map +1 -1
- package/dist/js/components/TimePicker/TimePicker.js +4 -3
- package/dist/js/components/TimePicker/TimePicker.js.map +1 -1
- package/dist/js/next/components/Dropdown/Dropdown.d.ts +2 -0
- package/dist/js/next/components/Dropdown/Dropdown.d.ts.map +1 -1
- package/dist/js/next/components/Dropdown/Dropdown.js +2 -2
- package/dist/js/next/components/Dropdown/Dropdown.js.map +1 -1
- package/dist/js/next/components/Select/Select.d.ts +2 -0
- package/dist/js/next/components/Select/Select.d.ts.map +1 -1
- package/dist/js/next/components/Select/Select.js +2 -2
- package/dist/js/next/components/Select/Select.js.map +1 -1
- package/dist/umd/react-core.min.js +4 -4
- package/package.json +2 -2
- package/src/components/ApplicationLauncher/ApplicationLauncher.tsx +4 -0
- package/src/components/ContextSelector/ContextSelector.tsx +6 -1
- package/src/components/Dropdown/Dropdown.tsx +4 -0
- package/src/components/Dropdown/DropdownWithContext.tsx +2 -0
- package/src/components/Nav/NavItem.tsx +4 -0
- package/src/components/OptionsMenu/OptionsMenu.tsx +4 -0
- package/src/components/SearchInput/SearchInput.tsx +4 -0
- package/src/components/Select/Select.tsx +6 -1
- package/src/components/Tabs/OverflowTab.tsx +4 -0
- package/src/components/TextArea/examples/TextArea.md +12 -260
- package/src/components/TextArea/examples/TextAreaAutoResizing.tsx +14 -0
- package/src/components/TextArea/examples/TextAreaBasic.tsx +7 -0
- package/src/components/TextArea/examples/TextAreaDisabled.tsx +6 -0
- package/src/components/TextArea/examples/TextAreaHorizontallyResizable.tsx +14 -0
- package/src/components/TextArea/examples/TextAreaIconSprite.tsx +41 -0
- package/src/components/TextArea/examples/TextAreaInvalid.tsx +15 -0
- package/src/components/TextArea/examples/TextAreaReadOnly.tsx +25 -0
- package/src/components/TextArea/examples/TextAreaUncontrolled.tsx +6 -0
- package/src/components/TextArea/examples/TextAreaValidated.tsx +52 -0
- package/src/components/TextArea/examples/TextAreaVerticallyResizable.tsx +14 -0
- package/src/components/TimePicker/TimePicker.tsx +6 -1
- package/src/components/ToggleGroup/examples/ToggleGroup.md +5 -191
- package/src/components/ToggleGroup/examples/ToggleGroupCompact.tsx +30 -0
- package/src/components/ToggleGroup/examples/ToggleGroupDefaultMultiple.tsx +43 -0
- package/src/components/ToggleGroup/examples/ToggleGroupDefaultSingle.tsx +32 -0
- package/src/components/ToggleGroup/examples/ToggleGroupIcon.tsx +42 -0
- package/src/components/ToggleGroup/examples/ToggleGroupTextIcon.tsx +42 -0
- package/src/demos/Card/Card.md +3 -2
- package/src/demos/PrimaryDetail.md +4 -6
- package/src/next/components/Dropdown/Dropdown.tsx +4 -0
- package/src/next/components/Select/Select.tsx +4 -0
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { Checkbox, TextArea } from '@patternfly/react-core';
|
|
3
|
+
|
|
4
|
+
export const TextAreaReadOnly: React.FunctionComponent = () => {
|
|
5
|
+
const [isPlainChecked, setIsPlainChecked] = React.useState(false);
|
|
6
|
+
|
|
7
|
+
return (
|
|
8
|
+
<React.Fragment>
|
|
9
|
+
<div style={{ marginBottom: '12px' }}>
|
|
10
|
+
<Checkbox
|
|
11
|
+
id="isPlain"
|
|
12
|
+
key="isPlain"
|
|
13
|
+
label="Plain read only variant"
|
|
14
|
+
isChecked={isPlainChecked}
|
|
15
|
+
onChange={checked => setIsPlainChecked(checked)}
|
|
16
|
+
/>
|
|
17
|
+
</div>
|
|
18
|
+
<TextArea
|
|
19
|
+
aria-label="read only text area example"
|
|
20
|
+
value="read only text area example"
|
|
21
|
+
readOnlyVariant={isPlainChecked ? 'plain' : 'default'}
|
|
22
|
+
/>
|
|
23
|
+
</React.Fragment>
|
|
24
|
+
);
|
|
25
|
+
};
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { Form, FormGroup, TextArea } from '@patternfly/react-core';
|
|
3
|
+
|
|
4
|
+
export const TextAreaValidated: React.FunctionComponent = () => {
|
|
5
|
+
const [value, setValue] = React.useState('');
|
|
6
|
+
const [invalidText, setInvalidText] = React.useState('You must have something to say');
|
|
7
|
+
const [validated, setValidated] = React.useState<'default' | 'error' | 'warning' | 'success' | undefined>('default');
|
|
8
|
+
const [helperText, setHelperText] = React.useState('Share your thoughts.');
|
|
9
|
+
const simulateNetworkCall = (callback: Function) => {
|
|
10
|
+
setTimeout(callback, 2000);
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
const handleTextAreaChange = (value: string) => {
|
|
14
|
+
setValue(value);
|
|
15
|
+
setValidated('default');
|
|
16
|
+
setHelperText('Validating...');
|
|
17
|
+
simulateNetworkCall(() => {
|
|
18
|
+
if (value.length > 0) {
|
|
19
|
+
if (value.length >= 10) {
|
|
20
|
+
setValidated('success');
|
|
21
|
+
setHelperText('Thanks for your comments!');
|
|
22
|
+
} else {
|
|
23
|
+
setValidated('error');
|
|
24
|
+
setInvalidText("You're being too brief, please enter at least 10 characters.");
|
|
25
|
+
}
|
|
26
|
+
} else {
|
|
27
|
+
setValidated('warning');
|
|
28
|
+
setHelperText('You must have something to say');
|
|
29
|
+
}
|
|
30
|
+
});
|
|
31
|
+
};
|
|
32
|
+
return (
|
|
33
|
+
<Form>
|
|
34
|
+
<FormGroup
|
|
35
|
+
label="Comments:"
|
|
36
|
+
type="string"
|
|
37
|
+
helperText={helperText}
|
|
38
|
+
helperTextInvalid={invalidText}
|
|
39
|
+
fieldId="selection"
|
|
40
|
+
validated={validated}
|
|
41
|
+
>
|
|
42
|
+
<TextArea
|
|
43
|
+
value={value}
|
|
44
|
+
onChange={value => handleTextAreaChange(value)}
|
|
45
|
+
isRequired
|
|
46
|
+
validated={validated}
|
|
47
|
+
aria-label="invalid text area example"
|
|
48
|
+
/>
|
|
49
|
+
</FormGroup>
|
|
50
|
+
</Form>
|
|
51
|
+
);
|
|
52
|
+
};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { TextArea } from '@patternfly/react-core';
|
|
3
|
+
|
|
4
|
+
export const VerticalResizeTextArea: React.FunctionComponent = () => {
|
|
5
|
+
const [value, setValue] = React.useState('');
|
|
6
|
+
return (
|
|
7
|
+
<TextArea
|
|
8
|
+
value={value}
|
|
9
|
+
onChange={value => setValue(value)}
|
|
10
|
+
resizeOrientation="vertical"
|
|
11
|
+
aria-label="text area vertical resize example"
|
|
12
|
+
/>
|
|
13
|
+
);
|
|
14
|
+
};
|
|
@@ -73,6 +73,8 @@ export interface TimePickerProps
|
|
|
73
73
|
setIsOpen?: (isOpen?: boolean) => void;
|
|
74
74
|
/** @beta Opt-in for updated popper that does not use findDOMNode. */
|
|
75
75
|
removeFindDomNode?: boolean;
|
|
76
|
+
/** z-index of the time picker */
|
|
77
|
+
zIndex?: number;
|
|
76
78
|
}
|
|
77
79
|
|
|
78
80
|
interface TimePickerState {
|
|
@@ -111,7 +113,8 @@ export class TimePicker extends React.Component<TimePickerProps, TimePickerState
|
|
|
111
113
|
maxTime: '',
|
|
112
114
|
isOpen: false,
|
|
113
115
|
setIsOpen: () => {},
|
|
114
|
-
removeFindDomNode: false
|
|
116
|
+
removeFindDomNode: false,
|
|
117
|
+
zIndex: 9999
|
|
115
118
|
};
|
|
116
119
|
|
|
117
120
|
constructor(props: TimePickerProps) {
|
|
@@ -461,6 +464,7 @@ export class TimePicker extends React.Component<TimePickerProps, TimePickerState
|
|
|
461
464
|
includeSeconds,
|
|
462
465
|
/* eslint-enable @typescript-eslint/no-unused-vars */
|
|
463
466
|
removeFindDomNode,
|
|
467
|
+
zIndex,
|
|
464
468
|
...props
|
|
465
469
|
} = this.props;
|
|
466
470
|
const { timeState, isTimeOptionsOpen, isInvalid, minTimeState, maxTimeState } = this.state;
|
|
@@ -535,6 +539,7 @@ export class TimePicker extends React.Component<TimePickerProps, TimePickerState
|
|
|
535
539
|
popper={menuContainer}
|
|
536
540
|
isVisible={isTimeOptionsOpen}
|
|
537
541
|
removeFindDomNode={removeFindDomNode}
|
|
542
|
+
zIndex={zIndex}
|
|
538
543
|
/>
|
|
539
544
|
</div>
|
|
540
545
|
</div>
|
|
@@ -14,207 +14,21 @@ import ShareSquareIcon from '@patternfly/react-icons/dist/esm/icons/share-square
|
|
|
14
14
|
## Examples
|
|
15
15
|
|
|
16
16
|
### Default with multiple selectable
|
|
17
|
-
```
|
|
18
|
-
import React from 'react';
|
|
19
|
-
import { ToggleGroup, ToggleGroupItem, Button, Stack, StackItem } from '@patternfly/react-core';
|
|
20
|
-
|
|
21
|
-
class DefaultToggleGroupExample extends React.Component {
|
|
22
|
-
constructor(props) {
|
|
23
|
-
super(props);
|
|
24
|
-
this.state = {
|
|
25
|
-
isSelected: {
|
|
26
|
-
first: false,
|
|
27
|
-
second: false,
|
|
28
|
-
disableAll: false
|
|
29
|
-
}
|
|
30
|
-
};
|
|
31
|
-
this.handleItemClick = (isSelected, event) => {
|
|
32
|
-
const id = event.currentTarget.id;
|
|
33
|
-
this.setState(prevState => {
|
|
34
|
-
prevState.isSelected[id] = isSelected;
|
|
35
|
-
return {
|
|
36
|
-
isSelected: prevState.isSelected
|
|
37
|
-
};
|
|
38
|
-
});
|
|
39
|
-
};
|
|
40
|
-
this.disableAllClick = () => {
|
|
41
|
-
this.setState(prevState => ({ disableAll: !prevState.disableAll }));
|
|
42
|
-
};
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
render() {
|
|
46
|
-
const { isSelected } = this.state;
|
|
47
|
-
|
|
48
|
-
return (
|
|
49
|
-
<Stack hasGutter>
|
|
50
|
-
<StackItem>
|
|
51
|
-
<Button onClick={this.disableAllClick}>
|
|
52
|
-
{this.state.disableAll ? "Enable back" : "Disable all"}
|
|
53
|
-
</Button>
|
|
54
|
-
</StackItem>
|
|
55
|
-
<StackItem>
|
|
56
|
-
<ToggleGroup areAllGroupsDisabled={this.state.disableAll} aria-label="Default with multiple selectable">
|
|
57
|
-
<ToggleGroupItem text="Option 1" key={0} buttonId="first" isSelected={isSelected.first} onChange={this.handleItemClick} />
|
|
58
|
-
<ToggleGroupItem text="Option 2" key={1} buttonId="second" isSelected={isSelected.second} onChange={this.handleItemClick} />
|
|
59
|
-
<ToggleGroupItem text="Option 3" key={2} isDisabled/>
|
|
60
|
-
</ToggleGroup>
|
|
61
|
-
</StackItem>
|
|
62
|
-
</Stack>
|
|
63
|
-
);
|
|
64
|
-
}
|
|
65
|
-
}
|
|
17
|
+
```ts file="./ToggleGroupDefaultMultiple.tsx"
|
|
66
18
|
```
|
|
67
19
|
|
|
68
20
|
### Default with single selectable
|
|
69
|
-
```
|
|
70
|
-
import React from 'react';
|
|
71
|
-
import { ToggleGroup, ToggleGroupItem } from '@patternfly/react-core';
|
|
72
|
-
|
|
73
|
-
class DefaultAsRadioToggleGroupExample extends React.Component {
|
|
74
|
-
constructor(props) {
|
|
75
|
-
super(props);
|
|
76
|
-
this.state = {
|
|
77
|
-
isSelected: ""
|
|
78
|
-
};
|
|
79
|
-
this.handleItemClick = (isSelected, event) => {
|
|
80
|
-
const id = event.currentTarget.id;
|
|
81
|
-
this.setState({ isSelected: id });
|
|
82
|
-
};
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
render() {
|
|
86
|
-
const { isSelected } = this.state;
|
|
87
|
-
|
|
88
|
-
return (
|
|
89
|
-
<ToggleGroup aria-label="Default with single selectable">
|
|
90
|
-
<ToggleGroupItem text="Option 1" buttonId="firstRadio" isSelected={isSelected === "firstRadio"} onChange={this.handleItemClick} />
|
|
91
|
-
<ToggleGroupItem text="Option 2" buttonId="secondRadio" isSelected={isSelected === "secondRadio"} onChange={this.handleItemClick} />
|
|
92
|
-
<ToggleGroupItem text="Option 3" buttonId="thirdRadio" isSelected={isSelected === "thirdRadio"} onChange={this.handleItemClick} />
|
|
93
|
-
</ToggleGroup>
|
|
94
|
-
);
|
|
95
|
-
}
|
|
96
|
-
}
|
|
21
|
+
```ts file="./ToggleGroupDefaultSingle.tsx"
|
|
97
22
|
```
|
|
98
23
|
|
|
99
24
|
### Icons
|
|
100
|
-
```
|
|
101
|
-
import React from 'react';
|
|
102
|
-
import { ToggleGroup, ToggleGroupItem } from '@patternfly/react-core';
|
|
103
|
-
import UndoIcon from '@patternfly/react-icons/dist/esm/icons/undo-icon';
|
|
104
|
-
import CopyIcon from '@patternfly/react-icons/dist/esm/icons/copy-icon';
|
|
105
|
-
import ShareSquareIcon from '@patternfly/react-icons/dist/esm/icons/share-square-icon';
|
|
106
|
-
|
|
107
|
-
class IconToggleGroupExample extends React.Component {
|
|
108
|
-
constructor(props) {
|
|
109
|
-
super(props);
|
|
110
|
-
this.state = {
|
|
111
|
-
isSelected: {
|
|
112
|
-
"icons-1": false,
|
|
113
|
-
"icons-2": false,
|
|
114
|
-
"icons-3": true
|
|
115
|
-
}
|
|
116
|
-
};
|
|
117
|
-
this.handleItemClick = (isSelected, event) => {
|
|
118
|
-
const id = event.currentTarget.id;
|
|
119
|
-
this.setState(prevState => {
|
|
120
|
-
prevState.isSelected[id] = isSelected;
|
|
121
|
-
return {
|
|
122
|
-
isSelected: prevState.isSelected
|
|
123
|
-
};
|
|
124
|
-
});
|
|
125
|
-
};
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
render() {
|
|
129
|
-
const { isSelected } = this.state;
|
|
130
|
-
return (
|
|
131
|
-
<ToggleGroup aria-label="Icon variant toggle group">
|
|
132
|
-
<ToggleGroupItem icon={<CopyIcon />} aria-label="copy icon button" buttonId="icons-1" isSelected={isSelected["icons-1"]} onChange={this.handleItemClick} />
|
|
133
|
-
<ToggleGroupItem icon={<UndoIcon />} aria-label="undo icon button" buttonId="icons-2" isSelected={isSelected["icons-2"]} onChange={this.handleItemClick} />
|
|
134
|
-
<ToggleGroupItem icon={<ShareSquareIcon />} aria-label="share square icon button" buttonId="icons-3" isSelected={isSelected["icons-3"]} onChange={this.handleItemClick} />
|
|
135
|
-
</ToggleGroup>
|
|
136
|
-
);
|
|
137
|
-
}
|
|
138
|
-
}
|
|
25
|
+
```ts file="./ToggleGroupIcon.tsx"
|
|
139
26
|
```
|
|
140
27
|
|
|
141
28
|
### Text and icons
|
|
142
|
-
```
|
|
143
|
-
import React from 'react';
|
|
144
|
-
import { ToggleGroup, ToggleGroupItem } from '@patternfly/react-core';
|
|
145
|
-
import UndoIcon from '@patternfly/react-icons/dist/esm/icons/undo-icon';
|
|
146
|
-
import CopyIcon from '@patternfly/react-icons/dist/esm/icons/copy-icon';
|
|
147
|
-
import ShareSquareIcon from '@patternfly/react-icons/dist/esm/icons/share-square-icon';
|
|
148
|
-
|
|
149
|
-
class TextIconToggleGroupExample extends React.Component {
|
|
150
|
-
constructor(props) {
|
|
151
|
-
super(props);
|
|
152
|
-
this.state = {
|
|
153
|
-
isSelected: {
|
|
154
|
-
"text-icons-1": false,
|
|
155
|
-
"text-icons-2": false,
|
|
156
|
-
"text-icons-3": true
|
|
157
|
-
}
|
|
158
|
-
};
|
|
159
|
-
this.handleItemClick = (isSelected, event) => {
|
|
160
|
-
const id = event.currentTarget.id;
|
|
161
|
-
this.setState(prevState => {
|
|
162
|
-
prevState.isSelected[id] = isSelected;
|
|
163
|
-
return {
|
|
164
|
-
isSelected: prevState.isSelected
|
|
165
|
-
};
|
|
166
|
-
});
|
|
167
|
-
};
|
|
168
|
-
}
|
|
169
|
-
|
|
170
|
-
render() {
|
|
171
|
-
const { isSelected } = this.state;
|
|
172
|
-
return (
|
|
173
|
-
<ToggleGroup aria-label="Icon variant toggle group">
|
|
174
|
-
<ToggleGroupItem icon={<CopyIcon />} text="Copy" aria-label="copy icon button" buttonId="text-icons-1" isSelected={isSelected["text-icons-1"]} onChange={this.handleItemClick} />
|
|
175
|
-
<ToggleGroupItem icon={<UndoIcon />} text="Undo" aria-label="undo icon button" buttonId="text-icons-2" isSelected={isSelected["text-icons-2"]} onChange={this.handleItemClick} />
|
|
176
|
-
<ToggleGroupItem icon={<ShareSquareIcon />} text="Share" aria-label="share square icon button" buttonId="text-icons-3" isSelected={isSelected["text-icons-3"]} onChange={this.handleItemClick} />
|
|
177
|
-
</ToggleGroup>
|
|
178
|
-
);
|
|
179
|
-
}
|
|
180
|
-
}
|
|
29
|
+
```ts file="./ToggleGroupTextIcon.tsx"
|
|
181
30
|
```
|
|
182
31
|
|
|
183
32
|
### Compact variant
|
|
184
|
-
```
|
|
185
|
-
import React from 'react';
|
|
186
|
-
import { ToggleGroup, ToggleGroupItem, ToggleGroupVariant } from '@patternfly/react-core';
|
|
187
|
-
|
|
188
|
-
class CompactToggleGroupExample extends React.Component {
|
|
189
|
-
constructor(props) {
|
|
190
|
-
super(props);
|
|
191
|
-
this.state = {
|
|
192
|
-
isSelected: {
|
|
193
|
-
"compact-1": false,
|
|
194
|
-
"compact-2": false
|
|
195
|
-
}
|
|
196
|
-
};
|
|
197
|
-
this.handleItemClick = (isSelected, event) => {
|
|
198
|
-
const id = event.currentTarget.id;
|
|
199
|
-
this.setState(prevState => {
|
|
200
|
-
prevState.isSelected[id] = isSelected;
|
|
201
|
-
return {
|
|
202
|
-
isSelected: prevState.isSelected
|
|
203
|
-
};
|
|
204
|
-
});
|
|
205
|
-
};
|
|
206
|
-
}
|
|
207
|
-
|
|
208
|
-
render() {
|
|
209
|
-
const { isSelected } = this.state;
|
|
210
|
-
|
|
211
|
-
return (
|
|
212
|
-
<ToggleGroup isCompact aria-label="Compact variant toggle group">
|
|
213
|
-
<ToggleGroupItem text="Option 1" buttonId="compact-1" isSelected={isSelected["compact-1"]} onChange={this.handleItemClick} />
|
|
214
|
-
<ToggleGroupItem text="Option 2" buttonId="compact-2" isSelected={isSelected["compact-2"]} onChange={this.handleItemClick} />
|
|
215
|
-
<ToggleGroupItem text="Option 3" isDisabled />
|
|
216
|
-
</ToggleGroup>
|
|
217
|
-
);
|
|
218
|
-
}
|
|
219
|
-
}
|
|
33
|
+
```ts file="./ToggleGroupCompact.tsx"
|
|
220
34
|
```
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { ToggleGroup, ToggleGroupItem } from '@patternfly/react-core';
|
|
3
|
+
|
|
4
|
+
export const ToggleGroupCompact: React.FunctionComponent = () => {
|
|
5
|
+
const [isSelected, setIsSelected] = React.useState({
|
|
6
|
+
'toggle-group-compact-1': false,
|
|
7
|
+
'toggle-group-compact-2': false
|
|
8
|
+
});
|
|
9
|
+
const handleItemClick = (isSelected: boolean, event: React.MouseEvent<any> | React.KeyboardEvent | MouseEvent) => {
|
|
10
|
+
const id = event.currentTarget.id;
|
|
11
|
+
setIsSelected(prevIsSelected => ({ ...prevIsSelected, [id]: isSelected }));
|
|
12
|
+
};
|
|
13
|
+
return (
|
|
14
|
+
<ToggleGroup isCompact aria-label="Compact variant toggle group">
|
|
15
|
+
<ToggleGroupItem
|
|
16
|
+
text="Option 1"
|
|
17
|
+
buttonId="toggle-group-compact-1"
|
|
18
|
+
isSelected={isSelected['toggle-group-compact-1']}
|
|
19
|
+
onChange={handleItemClick}
|
|
20
|
+
/>
|
|
21
|
+
<ToggleGroupItem
|
|
22
|
+
text="Option 2"
|
|
23
|
+
buttonId="toggle-group-compact-2"
|
|
24
|
+
isSelected={isSelected['toggle-group-compact-2']}
|
|
25
|
+
onChange={handleItemClick}
|
|
26
|
+
/>
|
|
27
|
+
<ToggleGroupItem text="Option 3" isDisabled />
|
|
28
|
+
</ToggleGroup>
|
|
29
|
+
);
|
|
30
|
+
};
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { ToggleGroup, ToggleGroupItem, Button, Stack, StackItem } from '@patternfly/react-core';
|
|
3
|
+
|
|
4
|
+
export const ToggleGroupDefaultMultiple: React.FunctionComponent = () => {
|
|
5
|
+
const [isSelected, setIsSelected] = React.useState({
|
|
6
|
+
'toggle-group-multiple-1': false,
|
|
7
|
+
'toggle-group-multiple-2': false
|
|
8
|
+
});
|
|
9
|
+
const [disableAll, setDisableAll] = React.useState(false);
|
|
10
|
+
const handleItemClick = (isSelected: boolean, event: React.MouseEvent<any> | React.KeyboardEvent | MouseEvent) => {
|
|
11
|
+
const id = event.currentTarget.id;
|
|
12
|
+
setIsSelected(prevIsSelected => ({ ...prevIsSelected, [id]: isSelected }));
|
|
13
|
+
};
|
|
14
|
+
const disableAllClick = () => {
|
|
15
|
+
setDisableAll(!disableAll);
|
|
16
|
+
};
|
|
17
|
+
return (
|
|
18
|
+
<Stack hasGutter>
|
|
19
|
+
<StackItem>
|
|
20
|
+
<Button onClick={disableAllClick}>{disableAll ? 'Enable back' : 'Disable all'}</Button>
|
|
21
|
+
</StackItem>
|
|
22
|
+
<StackItem>
|
|
23
|
+
<ToggleGroup areAllGroupsDisabled={disableAll} aria-label="Default with multiple selectable">
|
|
24
|
+
<ToggleGroupItem
|
|
25
|
+
text="Option 1"
|
|
26
|
+
key={0}
|
|
27
|
+
buttonId="toggle-group-multiple-1"
|
|
28
|
+
isSelected={isSelected['toggle-group-multiple-1']}
|
|
29
|
+
onChange={handleItemClick}
|
|
30
|
+
/>
|
|
31
|
+
<ToggleGroupItem
|
|
32
|
+
text="Option 2"
|
|
33
|
+
key={1}
|
|
34
|
+
buttonId="toggle-group-multiple-2"
|
|
35
|
+
isSelected={isSelected['toggle-group-multiple-2']}
|
|
36
|
+
onChange={handleItemClick}
|
|
37
|
+
/>
|
|
38
|
+
<ToggleGroupItem text="Option 3" key={2} isDisabled />
|
|
39
|
+
</ToggleGroup>
|
|
40
|
+
</StackItem>
|
|
41
|
+
</Stack>
|
|
42
|
+
);
|
|
43
|
+
};
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { ToggleGroup, ToggleGroupItem } from '@patternfly/react-core';
|
|
3
|
+
|
|
4
|
+
export const ToggleGroupDefaultSingle: React.FunctionComponent = () => {
|
|
5
|
+
const [isSelected, setIsSelected] = React.useState('');
|
|
6
|
+
const handleItemClick = (isSelected: boolean, event: React.MouseEvent<any> | React.KeyboardEvent | MouseEvent) => {
|
|
7
|
+
const id = event.currentTarget.id;
|
|
8
|
+
setIsSelected(id);
|
|
9
|
+
};
|
|
10
|
+
return (
|
|
11
|
+
<ToggleGroup aria-label="Default with single selectable">
|
|
12
|
+
<ToggleGroupItem
|
|
13
|
+
text="Option 1"
|
|
14
|
+
buttonId="toggle-group-single-1"
|
|
15
|
+
isSelected={isSelected === 'toggle-group-single-1'}
|
|
16
|
+
onChange={handleItemClick}
|
|
17
|
+
/>
|
|
18
|
+
<ToggleGroupItem
|
|
19
|
+
text="Option 2"
|
|
20
|
+
buttonId="toggle-group-single-2"
|
|
21
|
+
isSelected={isSelected === 'toggle-group-single-2'}
|
|
22
|
+
onChange={handleItemClick}
|
|
23
|
+
/>
|
|
24
|
+
<ToggleGroupItem
|
|
25
|
+
text="Option 3"
|
|
26
|
+
buttonId="toggle-group-single-3"
|
|
27
|
+
isSelected={isSelected === 'toggle-group-single-3'}
|
|
28
|
+
onChange={handleItemClick}
|
|
29
|
+
/>
|
|
30
|
+
</ToggleGroup>
|
|
31
|
+
);
|
|
32
|
+
};
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { ToggleGroup, ToggleGroupItem } from '@patternfly/react-core';
|
|
3
|
+
import UndoIcon from '@patternfly/react-icons/dist/esm/icons/undo-icon';
|
|
4
|
+
import CopyIcon from '@patternfly/react-icons/dist/esm/icons/copy-icon';
|
|
5
|
+
import ShareSquareIcon from '@patternfly/react-icons/dist/esm/icons/share-square-icon';
|
|
6
|
+
|
|
7
|
+
export const ToggleGroupIcon: React.FunctionComponent = () => {
|
|
8
|
+
const [isSelected, setIsSelected] = React.useState({
|
|
9
|
+
'toggle-group-icons-1': false,
|
|
10
|
+
'toggle-group-icons-2': false,
|
|
11
|
+
'toggle-group-icons-3': true
|
|
12
|
+
});
|
|
13
|
+
const handleItemClick = (isSelected: boolean, event: React.MouseEvent<any> | React.KeyboardEvent | MouseEvent) => {
|
|
14
|
+
const id = event.currentTarget.id;
|
|
15
|
+
setIsSelected(prevIsSelected => ({ ...prevIsSelected, [id]: isSelected }));
|
|
16
|
+
};
|
|
17
|
+
return (
|
|
18
|
+
<ToggleGroup aria-label="Icon variant toggle group">
|
|
19
|
+
<ToggleGroupItem
|
|
20
|
+
icon={<CopyIcon />}
|
|
21
|
+
aria-label="copy"
|
|
22
|
+
buttonId="toggle-group-icons-1"
|
|
23
|
+
isSelected={isSelected['toggle-group-icons-1']}
|
|
24
|
+
onChange={handleItemClick}
|
|
25
|
+
/>
|
|
26
|
+
<ToggleGroupItem
|
|
27
|
+
icon={<UndoIcon />}
|
|
28
|
+
aria-label="undo"
|
|
29
|
+
buttonId="toggle-group-icons-2"
|
|
30
|
+
isSelected={isSelected['toggle-group-icons-2']}
|
|
31
|
+
onChange={handleItemClick}
|
|
32
|
+
/>
|
|
33
|
+
<ToggleGroupItem
|
|
34
|
+
icon={<ShareSquareIcon />}
|
|
35
|
+
aria-label="share square"
|
|
36
|
+
buttonId="toggle-group-icons-3"
|
|
37
|
+
isSelected={isSelected['toggle-group-icons-3']}
|
|
38
|
+
onChange={handleItemClick}
|
|
39
|
+
/>
|
|
40
|
+
</ToggleGroup>
|
|
41
|
+
);
|
|
42
|
+
};
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { ToggleGroup, ToggleGroupItem } from '@patternfly/react-core';
|
|
3
|
+
import UndoIcon from '@patternfly/react-icons/dist/esm/icons/undo-icon';
|
|
4
|
+
import CopyIcon from '@patternfly/react-icons/dist/esm/icons/copy-icon';
|
|
5
|
+
import ShareSquareIcon from '@patternfly/react-icons/dist/esm/icons/share-square-icon';
|
|
6
|
+
|
|
7
|
+
export const ToggleGroupIcon: React.FunctionComponent = () => {
|
|
8
|
+
const [isSelected, setIsSelected] = React.useState({
|
|
9
|
+
'text-icons-1': false,
|
|
10
|
+
'text-icons-2': false,
|
|
11
|
+
'text-icons-3': true
|
|
12
|
+
});
|
|
13
|
+
const handleItemClick = (isSelected: boolean, event: React.MouseEvent<any> | React.KeyboardEvent | MouseEvent) => {
|
|
14
|
+
const id = event.currentTarget.id;
|
|
15
|
+
setIsSelected(prevIsSelected => ({ ...prevIsSelected, [id]: isSelected }));
|
|
16
|
+
};
|
|
17
|
+
return (
|
|
18
|
+
<ToggleGroup aria-label="Text and icon toggle group">
|
|
19
|
+
<ToggleGroupItem
|
|
20
|
+
icon={<CopyIcon />}
|
|
21
|
+
text="Copy"
|
|
22
|
+
buttonId="toggle-group-text-icons-1"
|
|
23
|
+
isSelected={isSelected['toggle-group-text-icons-1']}
|
|
24
|
+
onChange={handleItemClick}
|
|
25
|
+
/>
|
|
26
|
+
<ToggleGroupItem
|
|
27
|
+
icon={<UndoIcon />}
|
|
28
|
+
text="Undo"
|
|
29
|
+
buttonId="toggle-group-text-icons-2"
|
|
30
|
+
isSelected={isSelected['toggle-group-text-icons-2']}
|
|
31
|
+
onChange={handleItemClick}
|
|
32
|
+
/>
|
|
33
|
+
<ToggleGroupItem
|
|
34
|
+
icon={<ShareSquareIcon />}
|
|
35
|
+
text="Share"
|
|
36
|
+
buttonId="toggle-group-text-icons-3"
|
|
37
|
+
isSelected={isSelected['toggle-group-text-icons-3']}
|
|
38
|
+
onChange={handleItemClick}
|
|
39
|
+
/>
|
|
40
|
+
</ToggleGroup>
|
|
41
|
+
);
|
|
42
|
+
};
|
package/src/demos/Card/Card.md
CHANGED
|
@@ -426,11 +426,12 @@ class CardViewBasic extends React.Component {
|
|
|
426
426
|
aria-label={anySelected ? 'Deselect all' : 'Select all'}
|
|
427
427
|
isChecked={areAllSelected}
|
|
428
428
|
onClick={this.splitCheckboxSelectAll.bind(this)}
|
|
429
|
-
|
|
429
|
+
>
|
|
430
|
+
{numSelected !== 0 && `${numSelected} selected`}
|
|
431
|
+
</DropdownToggleCheckbox>
|
|
430
432
|
]}
|
|
431
433
|
onToggle={this.onSplitButtonToggle}
|
|
432
434
|
>
|
|
433
|
-
{numSelected !== 0 && <React.Fragment>{numSelected} selected</React.Fragment>}
|
|
434
435
|
</DropdownToggle>
|
|
435
436
|
}
|
|
436
437
|
isOpen={splitButtonDropdownIsOpen}
|
|
@@ -1369,14 +1369,12 @@ class PrimaryDetailCardView extends React.Component {
|
|
|
1369
1369
|
aria-label={anySelected ? 'Deselect all' : 'Select all'}
|
|
1370
1370
|
isChecked={areAllSelected}
|
|
1371
1371
|
onClick={this.splitCheckboxSelectAll}
|
|
1372
|
-
|
|
1372
|
+
>
|
|
1373
|
+
{numSelected !== 0 && `${numSelected} selected`}
|
|
1374
|
+
</DropdownToggleCheckbox>
|
|
1373
1375
|
]}
|
|
1374
1376
|
onToggle={this.onSplitButtonToggle}
|
|
1375
|
-
>
|
|
1376
|
-
{numSelected !== 0 && (
|
|
1377
|
-
<React.Fragment>{allSelected ? this.state.totalItemCount : numSelected} selected</React.Fragment>
|
|
1378
|
-
)}
|
|
1379
|
-
</DropdownToggle>
|
|
1377
|
+
></DropdownToggle>
|
|
1380
1378
|
}
|
|
1381
1379
|
isOpen={splitButtonDropdownIsOpen}
|
|
1382
1380
|
dropdownItems={splitButtonDropdownItems}
|
|
@@ -30,6 +30,8 @@ export interface DropdownProps extends MenuProps, OUIAProps {
|
|
|
30
30
|
ouiaId?: number | string;
|
|
31
31
|
/** Set the value of data-ouia-safe. Only set to true when the component is in a static state, i.e. no animations are occurring. At all other times, this value must be false. */
|
|
32
32
|
ouiaSafe?: boolean;
|
|
33
|
+
/** z-index of the dropdown menu */
|
|
34
|
+
zIndex?: number;
|
|
33
35
|
}
|
|
34
36
|
|
|
35
37
|
const DropdownBase: React.FunctionComponent<DropdownProps> = ({
|
|
@@ -45,6 +47,7 @@ const DropdownBase: React.FunctionComponent<DropdownProps> = ({
|
|
|
45
47
|
innerRef,
|
|
46
48
|
ouiaId,
|
|
47
49
|
ouiaSafe = true,
|
|
50
|
+
zIndex = 9999,
|
|
48
51
|
...props
|
|
49
52
|
}: DropdownProps) => {
|
|
50
53
|
const localMenuRef = React.useRef<HTMLDivElement>();
|
|
@@ -119,6 +122,7 @@ const DropdownBase: React.FunctionComponent<DropdownProps> = ({
|
|
|
119
122
|
popper={menu}
|
|
120
123
|
appendTo={containerRef.current || undefined}
|
|
121
124
|
isVisible={isOpen}
|
|
125
|
+
zIndex={zIndex}
|
|
122
126
|
/>
|
|
123
127
|
</div>
|
|
124
128
|
);
|
|
@@ -26,6 +26,8 @@ export interface SelectProps extends MenuProps, OUIAProps {
|
|
|
26
26
|
minWidth?: string;
|
|
27
27
|
/** @hide Forwarded ref */
|
|
28
28
|
innerRef?: React.Ref<HTMLDivElement>;
|
|
29
|
+
/** z-index of the select menu */
|
|
30
|
+
zIndex?: number;
|
|
29
31
|
}
|
|
30
32
|
|
|
31
33
|
const SelectBase: React.FunctionComponent<SelectProps & OUIAProps> = ({
|
|
@@ -39,6 +41,7 @@ const SelectBase: React.FunctionComponent<SelectProps & OUIAProps> = ({
|
|
|
39
41
|
isPlain,
|
|
40
42
|
minWidth,
|
|
41
43
|
innerRef,
|
|
44
|
+
zIndex = 9999,
|
|
42
45
|
...props
|
|
43
46
|
}: SelectProps & OUIAProps) => {
|
|
44
47
|
const localMenuRef = React.useRef<HTMLDivElement>();
|
|
@@ -117,6 +120,7 @@ const SelectBase: React.FunctionComponent<SelectProps & OUIAProps> = ({
|
|
|
117
120
|
popper={menu}
|
|
118
121
|
appendTo={containerRef.current || undefined}
|
|
119
122
|
isVisible={isOpen}
|
|
123
|
+
zIndex={zIndex}
|
|
120
124
|
/>
|
|
121
125
|
</div>
|
|
122
126
|
);
|