@patternfly/react-core 6.0.0-prerelease.3 → 6.0.0-prerelease.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 +10 -0
- package/components/package.json +1 -1
- package/deprecated/package.json +1 -1
- package/dist/dynamic/components/AboutModal/package.json +1 -1
- package/dist/dynamic/components/Accordion/package.json +1 -1
- package/dist/dynamic/components/ActionList/package.json +1 -1
- package/dist/dynamic/components/Alert/package.json +1 -1
- package/dist/dynamic/components/Avatar/package.json +1 -1
- package/dist/dynamic/components/BackToTop/package.json +1 -1
- package/dist/dynamic/components/Backdrop/package.json +1 -1
- package/dist/dynamic/components/BackgroundImage/package.json +1 -1
- package/dist/dynamic/components/Badge/package.json +1 -1
- package/dist/dynamic/components/Banner/package.json +1 -1
- package/dist/dynamic/components/Brand/package.json +1 -1
- package/dist/dynamic/components/Breadcrumb/package.json +1 -1
- package/dist/dynamic/components/Button/package.json +1 -1
- package/dist/dynamic/components/CalendarMonth/package.json +1 -1
- package/dist/dynamic/components/Card/package.json +1 -1
- package/dist/dynamic/components/Checkbox/package.json +1 -1
- package/dist/dynamic/components/ClipboardCopy/package.json +1 -1
- package/dist/dynamic/components/CodeBlock/package.json +1 -1
- package/dist/dynamic/components/Content/package.json +1 -1
- package/dist/dynamic/components/DataList/package.json +1 -1
- package/dist/dynamic/components/DatePicker/package.json +1 -1
- package/dist/dynamic/components/DescriptionList/package.json +1 -1
- package/dist/dynamic/components/Divider/package.json +1 -1
- package/dist/dynamic/components/Drawer/package.json +1 -1
- package/dist/dynamic/components/Dropdown/package.json +1 -1
- package/dist/dynamic/components/DualListSelector/package.json +1 -1
- package/dist/dynamic/components/EmptyState/package.json +1 -1
- package/dist/dynamic/components/ExpandableSection/package.json +1 -1
- package/dist/dynamic/components/FileUpload/package.json +1 -1
- package/dist/dynamic/components/Form/package.json +1 -1
- package/dist/dynamic/components/FormSelect/package.json +1 -1
- package/dist/dynamic/components/HelperText/package.json +1 -1
- package/dist/dynamic/components/Hint/package.json +1 -1
- package/dist/dynamic/components/Icon/package.json +1 -1
- package/dist/dynamic/components/InputGroup/package.json +1 -1
- package/dist/dynamic/components/JumpLinks/package.json +1 -1
- package/dist/dynamic/components/Label/package.json +1 -1
- package/dist/dynamic/components/List/package.json +1 -1
- package/dist/dynamic/components/LoginPage/package.json +1 -1
- package/dist/dynamic/components/Masthead/package.json +1 -1
- package/dist/dynamic/components/Menu/package.json +1 -1
- package/dist/dynamic/components/MenuToggle/package.json +1 -1
- package/dist/dynamic/components/Modal/package.json +1 -1
- package/dist/dynamic/components/MultipleFileUpload/package.json +1 -1
- package/dist/dynamic/components/Nav/package.json +1 -1
- package/dist/dynamic/components/NotificationBadge/package.json +1 -1
- package/dist/dynamic/components/NotificationDrawer/package.json +1 -1
- package/dist/dynamic/components/NumberInput/package.json +1 -1
- package/dist/dynamic/components/OverflowMenu/package.json +1 -1
- package/dist/dynamic/components/Page/package.json +1 -1
- package/dist/dynamic/components/Pagination/package.json +1 -1
- package/dist/dynamic/components/Panel/package.json +1 -1
- package/dist/dynamic/components/Popover/package.json +1 -1
- package/dist/dynamic/components/Progress/package.json +1 -1
- package/dist/dynamic/components/ProgressStepper/package.json +1 -1
- package/dist/dynamic/components/Radio/package.json +1 -1
- package/dist/dynamic/components/SearchInput/package.json +1 -1
- package/dist/dynamic/components/Select/package.json +1 -1
- package/dist/dynamic/components/Sidebar/package.json +1 -1
- package/dist/dynamic/components/SimpleList/package.json +1 -1
- package/dist/dynamic/components/Skeleton/package.json +1 -1
- package/dist/dynamic/components/SkipToContent/package.json +1 -1
- package/dist/dynamic/components/Slider/package.json +1 -1
- package/dist/dynamic/components/Spinner/package.json +1 -1
- package/dist/dynamic/components/Switch/package.json +1 -1
- package/dist/dynamic/components/Tabs/package.json +1 -1
- package/dist/dynamic/components/TextArea/package.json +1 -1
- package/dist/dynamic/components/TextInput/package.json +1 -1
- package/dist/dynamic/components/TextInputGroup/package.json +1 -1
- package/dist/dynamic/components/Tile/package.json +1 -1
- package/dist/dynamic/components/TimePicker/package.json +1 -1
- package/dist/dynamic/components/Timestamp/package.json +1 -1
- package/dist/dynamic/components/Title/package.json +1 -1
- package/dist/dynamic/components/ToggleGroup/package.json +1 -1
- package/dist/dynamic/components/Toolbar/package.json +1 -1
- package/dist/dynamic/components/Tooltip/package.json +1 -1
- package/dist/dynamic/components/TreeView/package.json +1 -1
- package/dist/dynamic/components/Truncate/package.json +1 -1
- package/dist/dynamic/components/Wizard/hooks/package.json +1 -1
- package/dist/dynamic/components/Wizard/package.json +1 -1
- package/dist/dynamic/deprecated/components/Chip/package.json +1 -1
- package/dist/dynamic/deprecated/components/DragDrop/package.json +1 -1
- package/dist/dynamic/deprecated/components/DualListSelector/package.json +1 -1
- package/dist/dynamic/deprecated/components/Modal/package.json +1 -1
- package/dist/dynamic/deprecated/components/Wizard/package.json +1 -1
- package/dist/dynamic/deprecated/components/package.json +1 -1
- package/dist/dynamic/helpers/FocusTrap/FocusTrap/package.json +1 -1
- package/dist/dynamic/helpers/GenerateId/GenerateId/package.json +1 -1
- package/dist/dynamic/helpers/KeyboardHandler/package.json +1 -1
- package/dist/dynamic/helpers/OUIA/ouia/package.json +1 -1
- package/dist/dynamic/helpers/Popper/Popper/package.json +1 -1
- package/dist/dynamic/helpers/constants/package.json +1 -1
- package/dist/dynamic/helpers/datetimeUtils/package.json +1 -1
- package/dist/dynamic/helpers/fileUtils/package.json +1 -1
- package/dist/dynamic/helpers/htmlConstants/package.json +1 -1
- package/dist/dynamic/helpers/package.json +1 -1
- package/dist/dynamic/helpers/resizeObserver/package.json +1 -1
- package/dist/dynamic/helpers/typeUtils/package.json +1 -1
- package/dist/dynamic/helpers/useInterval/package.json +1 -1
- package/dist/dynamic/helpers/useIsomorphicLayout/package.json +1 -1
- package/dist/dynamic/helpers/useUnmountEffect/package.json +1 -1
- package/dist/dynamic/helpers/util/package.json +1 -1
- package/dist/dynamic/layouts/Bullseye/package.json +1 -1
- package/dist/dynamic/layouts/Flex/package.json +1 -1
- package/dist/dynamic/layouts/Gallery/package.json +1 -1
- package/dist/dynamic/layouts/Grid/package.json +1 -1
- package/dist/dynamic/layouts/Level/package.json +1 -1
- package/dist/dynamic/layouts/Split/package.json +1 -1
- package/dist/dynamic/layouts/Stack/package.json +1 -1
- package/dist/dynamic/styles/package.json +1 -1
- package/dist/esm/components/TextInputGroup/TextInputGroup.d.ts +2 -0
- package/dist/esm/components/TextInputGroup/TextInputGroup.d.ts.map +1 -1
- package/dist/esm/components/TextInputGroup/TextInputGroup.js +3 -3
- package/dist/esm/components/TextInputGroup/TextInputGroup.js.map +1 -1
- package/dist/esm/components/TextInputGroup/TextInputGroupIcon.d.ts +11 -0
- package/dist/esm/components/TextInputGroup/TextInputGroupIcon.d.ts.map +1 -0
- package/dist/esm/components/TextInputGroup/TextInputGroupIcon.js +10 -0
- package/dist/esm/components/TextInputGroup/TextInputGroupIcon.js.map +1 -0
- package/dist/esm/components/TextInputGroup/TextInputGroupMain.d.ts.map +1 -1
- package/dist/esm/components/TextInputGroup/TextInputGroupMain.js +7 -3
- package/dist/esm/components/TextInputGroup/TextInputGroupMain.js.map +1 -1
- package/dist/js/components/TextInputGroup/TextInputGroup.d.ts +2 -0
- package/dist/js/components/TextInputGroup/TextInputGroup.d.ts.map +1 -1
- package/dist/js/components/TextInputGroup/TextInputGroup.js +3 -3
- package/dist/js/components/TextInputGroup/TextInputGroup.js.map +1 -1
- package/dist/js/components/TextInputGroup/TextInputGroupIcon.d.ts +11 -0
- package/dist/js/components/TextInputGroup/TextInputGroupIcon.d.ts.map +1 -0
- package/dist/js/components/TextInputGroup/TextInputGroupIcon.js +14 -0
- package/dist/js/components/TextInputGroup/TextInputGroupIcon.js.map +1 -0
- package/dist/js/components/TextInputGroup/TextInputGroupMain.d.ts.map +1 -1
- package/dist/js/components/TextInputGroup/TextInputGroupMain.js +7 -3
- package/dist/js/components/TextInputGroup/TextInputGroupMain.js.map +1 -1
- package/dist/styles/base-no-reset.css +5 -5
- package/dist/styles/base.css +5 -5
- package/dist/umd/assets/{output-CDQqwJov.css → output-BmQm3XtB.css} +19011 -18902
- package/dist/umd/react-core.min.js +1 -1
- package/helpers/package.json +1 -1
- package/layouts/package.json +1 -1
- package/next/package.json +1 -1
- package/package.json +6 -6
- package/src/components/TextInputGroup/TextInputGroup.tsx +5 -1
- package/src/components/TextInputGroup/TextInputGroupIcon.tsx +25 -0
- package/src/components/TextInputGroup/TextInputGroupMain.tsx +6 -2
- package/src/components/TextInputGroup/__tests__/TextInputGroup.test.tsx +26 -4
- package/src/components/TextInputGroup/__tests__/TextInputGroupMain.test.tsx +10 -0
- package/src/components/TextInputGroup/examples/TextInputGroup.md +12 -0
- package/src/components/TextInputGroup/examples/TextInputGroupWithStatus.tsx +66 -0
package/helpers/package.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"name":"@patternfly/react-core-helpers","main":"../dist/js/helpers/index.js","module":"../dist/esm/helpers/index.js","typings":"../dist/esm/helpers/index.d.ts","version":"6.0.0-prerelease.
|
|
1
|
+
{"name":"@patternfly/react-core-helpers","main":"../dist/js/helpers/index.js","module":"../dist/esm/helpers/index.js","typings":"../dist/esm/helpers/index.d.ts","version":"6.0.0-prerelease.4","private":true}
|
package/layouts/package.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"name":"@patternfly/react-core-layouts","main":"../dist/js/layouts/index.js","module":"../dist/esm/layouts/index.js","typings":"../dist/esm/layouts/index.d.ts","version":"6.0.0-prerelease.
|
|
1
|
+
{"name":"@patternfly/react-core-layouts","main":"../dist/js/layouts/index.js","module":"../dist/esm/layouts/index.js","typings":"../dist/esm/layouts/index.d.ts","version":"6.0.0-prerelease.4","private":true}
|
package/next/package.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"name":"@patternfly/react-core-next","main":"../dist/js/next/index.js","module":"../dist/esm/next/index.js","typings":"../dist/esm/next/index.d.ts","version":"6.0.0-prerelease.
|
|
1
|
+
{"name":"@patternfly/react-core-next","main":"../dist/js/next/index.js","module":"../dist/esm/next/index.js","typings":"../dist/esm/next/index.d.ts","version":"6.0.0-prerelease.4","private":true}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@patternfly/react-core",
|
|
3
|
-
"version": "6.0.0-prerelease.
|
|
3
|
+
"version": "6.0.0-prerelease.5",
|
|
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",
|
|
@@ -46,15 +46,15 @@
|
|
|
46
46
|
"subpaths": "node ../../scripts/exportSubpaths.mjs --config subpaths.config.json"
|
|
47
47
|
},
|
|
48
48
|
"dependencies": {
|
|
49
|
-
"@patternfly/react-icons": "^6.0.0-prerelease.
|
|
50
|
-
"@patternfly/react-styles": "^6.0.0-prerelease.
|
|
51
|
-
"@patternfly/react-tokens": "^6.0.0-prerelease.
|
|
49
|
+
"@patternfly/react-icons": "^6.0.0-prerelease.4",
|
|
50
|
+
"@patternfly/react-styles": "^6.0.0-prerelease.3",
|
|
51
|
+
"@patternfly/react-tokens": "^6.0.0-prerelease.3",
|
|
52
52
|
"focus-trap": "7.5.4",
|
|
53
53
|
"react-dropzone": "^14.2.3",
|
|
54
54
|
"tslib": "^2.7.0"
|
|
55
55
|
},
|
|
56
56
|
"devDependencies": {
|
|
57
|
-
"@patternfly/patternfly": "6.0.0-
|
|
57
|
+
"@patternfly/patternfly": "6.0.0-prerelease.5",
|
|
58
58
|
"case-anything": "^2.1.13",
|
|
59
59
|
"css": "^3.0.0",
|
|
60
60
|
"fs-extra": "^11.2.0"
|
|
@@ -63,5 +63,5 @@
|
|
|
63
63
|
"react": "^17 || ^18",
|
|
64
64
|
"react-dom": "^17 || ^18"
|
|
65
65
|
},
|
|
66
|
-
"gitHead": "
|
|
66
|
+
"gitHead": "6596740214197dac0874222e5d6e91d3bda2b459"
|
|
67
67
|
}
|
|
@@ -11,6 +11,8 @@ export interface TextInputGroupProps extends React.HTMLProps<HTMLDivElement> {
|
|
|
11
11
|
isDisabled?: boolean;
|
|
12
12
|
/** Flag to indicate the toggle has no border or background */
|
|
13
13
|
isPlain?: boolean;
|
|
14
|
+
/** Status variant of the text input group. */
|
|
15
|
+
validated?: 'success' | 'warning' | 'error';
|
|
14
16
|
/** @hide A reference object to attach to the input box */
|
|
15
17
|
innerRef?: React.RefObject<any>;
|
|
16
18
|
}
|
|
@@ -24,6 +26,7 @@ export const TextInputGroup: React.FunctionComponent<TextInputGroupProps> = ({
|
|
|
24
26
|
className,
|
|
25
27
|
isDisabled,
|
|
26
28
|
isPlain,
|
|
29
|
+
validated,
|
|
27
30
|
innerRef,
|
|
28
31
|
...props
|
|
29
32
|
}: TextInputGroupProps) => {
|
|
@@ -31,13 +34,14 @@ export const TextInputGroup: React.FunctionComponent<TextInputGroupProps> = ({
|
|
|
31
34
|
const textInputGroupRef = innerRef || ref;
|
|
32
35
|
|
|
33
36
|
return (
|
|
34
|
-
<TextInputGroupContext.Provider value={{ isDisabled }}>
|
|
37
|
+
<TextInputGroupContext.Provider value={{ isDisabled, validated }}>
|
|
35
38
|
<div
|
|
36
39
|
ref={textInputGroupRef}
|
|
37
40
|
className={css(
|
|
38
41
|
styles.textInputGroup,
|
|
39
42
|
isDisabled && styles.modifiers.disabled,
|
|
40
43
|
isPlain && styles.modifiers.plain,
|
|
44
|
+
validated && styles.modifiers[validated],
|
|
41
45
|
className
|
|
42
46
|
)}
|
|
43
47
|
{...props}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import styles from '@patternfly/react-styles/css/components/TextInputGroup/text-input-group';
|
|
3
|
+
import { css } from '@patternfly/react-styles';
|
|
4
|
+
|
|
5
|
+
export interface TextInputGroupIconProps extends React.HTMLProps<HTMLSpanElement> {
|
|
6
|
+
/** Content rendered inside the text input group utilities div */
|
|
7
|
+
children?: React.ReactNode;
|
|
8
|
+
/** Additional classes applied to the text input group utilities container */
|
|
9
|
+
className?: string;
|
|
10
|
+
/** Flag indicating if the icon is a status icon and should inherit status styling. */
|
|
11
|
+
isStatus?: boolean;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export const TextInputGroupIcon: React.FunctionComponent<TextInputGroupIconProps> = ({
|
|
15
|
+
children,
|
|
16
|
+
className,
|
|
17
|
+
isStatus,
|
|
18
|
+
...props
|
|
19
|
+
}: TextInputGroupIconProps) => (
|
|
20
|
+
<span className={css(styles.textInputGroupIcon, isStatus && styles.modifiers.status, className)} {...props}>
|
|
21
|
+
{children}
|
|
22
|
+
</span>
|
|
23
|
+
);
|
|
24
|
+
|
|
25
|
+
TextInputGroupIcon.displayName = 'TextInputGroupIcon';
|
|
@@ -2,6 +2,8 @@ import * as React from 'react';
|
|
|
2
2
|
import styles from '@patternfly/react-styles/css/components/TextInputGroup/text-input-group';
|
|
3
3
|
import { css } from '@patternfly/react-styles';
|
|
4
4
|
import { TextInputGroupContext } from './TextInputGroup';
|
|
5
|
+
import { TextInputGroupIcon } from './TextInputGroupIcon';
|
|
6
|
+
import { statusIcons, ValidatedOptions } from '../../helpers';
|
|
5
7
|
|
|
6
8
|
export interface TextInputGroupMainProps extends Omit<React.HTMLProps<HTMLDivElement>, 'onChange'> {
|
|
7
9
|
/** Content rendered inside the text input group main div */
|
|
@@ -78,9 +80,10 @@ const TextInputGroupMainBase: React.FunctionComponent<TextInputGroupMainProps> =
|
|
|
78
80
|
inputId,
|
|
79
81
|
...props
|
|
80
82
|
}: TextInputGroupMainProps) => {
|
|
81
|
-
const { isDisabled } = React.useContext(TextInputGroupContext);
|
|
83
|
+
const { isDisabled, validated } = React.useContext(TextInputGroupContext);
|
|
82
84
|
const ref = React.useRef(null);
|
|
83
85
|
const textInputGroupInputInputRef = innerRef || ref;
|
|
86
|
+
const StatusIcon = statusIcons[validated === ValidatedOptions.error ? 'danger' : validated];
|
|
84
87
|
|
|
85
88
|
const handleChange = (event: React.FormEvent<HTMLInputElement>) => {
|
|
86
89
|
onChange(event, event.currentTarget.value);
|
|
@@ -100,7 +103,7 @@ const TextInputGroupMainBase: React.FunctionComponent<TextInputGroupMainProps> =
|
|
|
100
103
|
id={inputId}
|
|
101
104
|
/>
|
|
102
105
|
)}
|
|
103
|
-
{icon && <
|
|
106
|
+
{icon && <TextInputGroupIcon>{icon}</TextInputGroupIcon>}
|
|
104
107
|
<input
|
|
105
108
|
ref={textInputGroupInputInputRef}
|
|
106
109
|
type={type}
|
|
@@ -119,6 +122,7 @@ const TextInputGroupMainBase: React.FunctionComponent<TextInputGroupMainProps> =
|
|
|
119
122
|
{...(isExpanded !== undefined && { 'aria-expanded': isExpanded })}
|
|
120
123
|
{...(ariaControls && { 'aria-controls': ariaControls })}
|
|
121
124
|
/>
|
|
125
|
+
{validated && <TextInputGroupIcon isStatus>{<StatusIcon aria-hidden="true" />}</TextInputGroupIcon>}
|
|
122
126
|
</span>
|
|
123
127
|
</div>
|
|
124
128
|
);
|
|
@@ -34,20 +34,42 @@ describe('TextInputGroup', () => {
|
|
|
34
34
|
expect(inputGroup).toHaveClass('custom-class');
|
|
35
35
|
});
|
|
36
36
|
|
|
37
|
-
it(
|
|
37
|
+
it(`does not render with the ${styles.modifiers.disabled} class when not disabled`, () => {
|
|
38
38
|
render(<TextInputGroup>Test</TextInputGroup>);
|
|
39
39
|
|
|
40
40
|
const inputGroup = screen.getByText('Test');
|
|
41
41
|
|
|
42
|
-
expect(inputGroup).not.toHaveClass(
|
|
42
|
+
expect(inputGroup).not.toHaveClass(styles.modifiers.disabled);
|
|
43
43
|
});
|
|
44
44
|
|
|
45
|
-
it(
|
|
45
|
+
it(`renders with the ${styles.modifiers.disabled} class when disabled`, () => {
|
|
46
46
|
render(<TextInputGroup isDisabled>Test</TextInputGroup>);
|
|
47
47
|
|
|
48
48
|
const inputGroup = screen.getByText('Test');
|
|
49
49
|
|
|
50
|
-
expect(inputGroup).toHaveClass(
|
|
50
|
+
expect(inputGroup).toHaveClass(styles.modifiers.disabled);
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
it(`renders with class ${styles.modifiers.success} when validated="success"`, () => {
|
|
54
|
+
render(<TextInputGroup validated="success">Test</TextInputGroup>);
|
|
55
|
+
|
|
56
|
+
const inputGroup = screen.getByText('Test');
|
|
57
|
+
|
|
58
|
+
expect(inputGroup).toHaveClass(styles.modifiers.success);
|
|
59
|
+
});
|
|
60
|
+
it(`renders with class ${styles.modifiers.warning} when validated="warning"`, () => {
|
|
61
|
+
render(<TextInputGroup validated="warning">Test</TextInputGroup>);
|
|
62
|
+
|
|
63
|
+
const inputGroup = screen.getByText('Test');
|
|
64
|
+
|
|
65
|
+
expect(inputGroup).toHaveClass(styles.modifiers.warning);
|
|
66
|
+
});
|
|
67
|
+
it(`renders with class ${styles.modifiers.error} when validated="error"`, () => {
|
|
68
|
+
render(<TextInputGroup validated="error">Test</TextInputGroup>);
|
|
69
|
+
|
|
70
|
+
const inputGroup = screen.getByText('Test');
|
|
71
|
+
|
|
72
|
+
expect(inputGroup).toHaveClass(styles.modifiers.error);
|
|
51
73
|
});
|
|
52
74
|
|
|
53
75
|
it('passes isDisabled=false to children via a context when isDisabled prop is not passed', () => {
|
|
@@ -242,6 +242,16 @@ describe('TextInputGroupMain', () => {
|
|
|
242
242
|
expect(hintInput).toBeVisible();
|
|
243
243
|
});
|
|
244
244
|
|
|
245
|
+
it(`Renders status icon with class ${styles.modifiers.status} when a validated prop is passed`, () => {
|
|
246
|
+
render(
|
|
247
|
+
<TextInputGroupContext.Provider value={{ validated: 'success' }}>
|
|
248
|
+
<TextInputGroupMain />
|
|
249
|
+
</TextInputGroupContext.Provider>
|
|
250
|
+
);
|
|
251
|
+
|
|
252
|
+
expect(screen.getByRole('textbox').nextElementSibling).toHaveClass(styles.modifiers.status);
|
|
253
|
+
});
|
|
254
|
+
|
|
245
255
|
it('does not call onChange callback when the input does not change', () => {
|
|
246
256
|
const onChangeMock = jest.fn();
|
|
247
257
|
|
|
@@ -13,19 +13,31 @@ import TimesIcon from '@patternfly/react-icons/dist/esm/icons/times-icon';
|
|
|
13
13
|
### Basic
|
|
14
14
|
|
|
15
15
|
```ts file="./TextInputGroupBasic.tsx"
|
|
16
|
+
|
|
16
17
|
```
|
|
17
18
|
|
|
18
19
|
### Disabled
|
|
19
20
|
|
|
20
21
|
```ts file="./TextInputGroupDisabled.tsx"
|
|
22
|
+
|
|
21
23
|
```
|
|
22
24
|
|
|
23
25
|
### Utilities and icon
|
|
24
26
|
|
|
25
27
|
```ts file="./TextInputGroupUtilitiesAndIcon.tsx"
|
|
28
|
+
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
### With validation
|
|
32
|
+
|
|
33
|
+
You can add a validation status to a `<TextInputGroup>` by passing the `validated` property with a value of either "success", "warning", or "error".
|
|
34
|
+
|
|
35
|
+
```ts file="./TextInputGroupWithStatus.tsx"
|
|
36
|
+
|
|
26
37
|
```
|
|
27
38
|
|
|
28
39
|
### Filters
|
|
29
40
|
|
|
30
41
|
```ts file="./TextInputGroupFilters.tsx"
|
|
42
|
+
|
|
31
43
|
```
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import {
|
|
3
|
+
TextInputGroup,
|
|
4
|
+
TextInputGroupMain,
|
|
5
|
+
TextInputGroupUtilities,
|
|
6
|
+
Button,
|
|
7
|
+
ValidatedOptions,
|
|
8
|
+
Flex,
|
|
9
|
+
FlexItem
|
|
10
|
+
} from '@patternfly/react-core';
|
|
11
|
+
import SearchIcon from '@patternfly/react-icons/dist/esm/icons/search-icon';
|
|
12
|
+
import TimesIcon from '@patternfly/react-icons/dist/esm/icons/times-icon';
|
|
13
|
+
|
|
14
|
+
export const TextInputGroupWithStatus: React.FunctionComponent = () => {
|
|
15
|
+
const [successValue, setSuccessValue] = React.useState('Success validation');
|
|
16
|
+
const [warningValue, setWarningValue] = React.useState('Warning validation with custom non-status icon at start');
|
|
17
|
+
const [errorValue, setErrorValue] = React.useState(
|
|
18
|
+
'Error validation with custom non-status icon at start and utilities'
|
|
19
|
+
);
|
|
20
|
+
|
|
21
|
+
/** show the input clearing button only when the input is not empty */
|
|
22
|
+
const showClearButton = !!errorValue;
|
|
23
|
+
|
|
24
|
+
/** render the utilities component only when a component it contains is being rendered */
|
|
25
|
+
const showUtilities = showClearButton;
|
|
26
|
+
|
|
27
|
+
/** callback for clearing the text input */
|
|
28
|
+
const clearInput = () => {
|
|
29
|
+
setErrorValue('');
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
return (
|
|
33
|
+
<Flex direction={{ default: 'column' }} rowGap={{ default: 'rowGapSm' }}>
|
|
34
|
+
<FlexItem>
|
|
35
|
+
<TextInputGroup validated={ValidatedOptions.success}>
|
|
36
|
+
<TextInputGroupMain value={successValue} onChange={(_event, value) => setSuccessValue(value)} />
|
|
37
|
+
</TextInputGroup>
|
|
38
|
+
</FlexItem>
|
|
39
|
+
<FlexItem>
|
|
40
|
+
<TextInputGroup validated={ValidatedOptions.warning}>
|
|
41
|
+
<TextInputGroupMain
|
|
42
|
+
icon={<SearchIcon />}
|
|
43
|
+
value={warningValue}
|
|
44
|
+
onChange={(_event, value) => setWarningValue(value)}
|
|
45
|
+
/>
|
|
46
|
+
</TextInputGroup>
|
|
47
|
+
</FlexItem>
|
|
48
|
+
<FlexItem>
|
|
49
|
+
<TextInputGroup validated={ValidatedOptions.error}>
|
|
50
|
+
<TextInputGroupMain
|
|
51
|
+
icon={<SearchIcon />}
|
|
52
|
+
value={errorValue}
|
|
53
|
+
onChange={(_event, value) => setErrorValue(value)}
|
|
54
|
+
/>
|
|
55
|
+
{showUtilities && (
|
|
56
|
+
<TextInputGroupUtilities>
|
|
57
|
+
{showClearButton && (
|
|
58
|
+
<Button variant="plain" onClick={clearInput} aria-label="Clear button and input" icon={<TimesIcon />} />
|
|
59
|
+
)}
|
|
60
|
+
</TextInputGroupUtilities>
|
|
61
|
+
)}
|
|
62
|
+
</TextInputGroup>
|
|
63
|
+
</FlexItem>
|
|
64
|
+
</Flex>
|
|
65
|
+
);
|
|
66
|
+
};
|