@patternfly/react-core 6.0.0-alpha.84 → 6.0.0-alpha.86
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 +12 -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/Accordion/AccordionContent.d.ts +3 -0
- package/dist/esm/components/Accordion/AccordionContent.d.ts.map +1 -1
- package/dist/esm/components/Accordion/AccordionContent.js +2 -2
- package/dist/esm/components/Accordion/AccordionContent.js.map +1 -1
- package/dist/esm/components/Accordion/AccordionExpandableContentBody.d.ts +1 -1
- package/dist/esm/components/Accordion/AccordionExpandableContentBody.d.ts.map +1 -1
- package/dist/esm/components/Accordion/AccordionExpandableContentBody.js +5 -1
- package/dist/esm/components/Accordion/AccordionExpandableContentBody.js.map +1 -1
- package/dist/esm/components/Accordion/AccordionItem.d.ts +1 -1
- package/dist/esm/components/Accordion/AccordionItem.d.ts.map +1 -1
- package/dist/esm/components/Accordion/AccordionItem.js +8 -4
- package/dist/esm/components/Accordion/AccordionItem.js.map +1 -1
- package/dist/esm/components/Wizard/WizardNavItem.d.ts +1 -1
- package/dist/esm/components/Wizard/WizardNavItem.d.ts.map +1 -1
- package/dist/esm/components/Wizard/WizardNavItem.js +5 -3
- package/dist/esm/components/Wizard/WizardNavItem.js.map +1 -1
- package/dist/esm/components/Wizard/WizardStep.d.ts +1 -1
- package/dist/esm/components/Wizard/WizardStep.d.ts.map +1 -1
- package/dist/esm/components/Wizard/WizardToggle.d.ts.map +1 -1
- package/dist/esm/components/Wizard/WizardToggle.js +7 -3
- package/dist/esm/components/Wizard/WizardToggle.js.map +1 -1
- package/dist/esm/components/Wizard/types.d.ts +3 -2
- package/dist/esm/components/Wizard/types.d.ts.map +1 -1
- package/dist/esm/components/Wizard/types.js +1 -0
- package/dist/esm/components/Wizard/types.js.map +1 -1
- package/dist/js/components/Accordion/AccordionContent.d.ts +3 -0
- package/dist/js/components/Accordion/AccordionContent.d.ts.map +1 -1
- package/dist/js/components/Accordion/AccordionContent.js +2 -2
- package/dist/js/components/Accordion/AccordionContent.js.map +1 -1
- package/dist/js/components/Accordion/AccordionExpandableContentBody.d.ts +1 -1
- package/dist/js/components/Accordion/AccordionExpandableContentBody.d.ts.map +1 -1
- package/dist/js/components/Accordion/AccordionExpandableContentBody.js +4 -1
- package/dist/js/components/Accordion/AccordionExpandableContentBody.js.map +1 -1
- package/dist/js/components/Accordion/AccordionItem.d.ts +1 -1
- package/dist/js/components/Accordion/AccordionItem.d.ts.map +1 -1
- package/dist/js/components/Accordion/AccordionItem.js +7 -4
- package/dist/js/components/Accordion/AccordionItem.js.map +1 -1
- package/dist/js/components/Wizard/WizardNavItem.d.ts +1 -1
- package/dist/js/components/Wizard/WizardNavItem.d.ts.map +1 -1
- package/dist/js/components/Wizard/WizardNavItem.js +5 -3
- package/dist/js/components/Wizard/WizardNavItem.js.map +1 -1
- package/dist/js/components/Wizard/WizardStep.d.ts +1 -1
- package/dist/js/components/Wizard/WizardStep.d.ts.map +1 -1
- package/dist/js/components/Wizard/WizardToggle.d.ts.map +1 -1
- package/dist/js/components/Wizard/WizardToggle.js +7 -3
- package/dist/js/components/Wizard/WizardToggle.js.map +1 -1
- package/dist/js/components/Wizard/types.d.ts +3 -2
- package/dist/js/components/Wizard/types.d.ts.map +1 -1
- package/dist/js/components/Wizard/types.js +1 -0
- package/dist/js/components/Wizard/types.js.map +1 -1
- package/dist/umd/assets/{output-WegUSgI7.css → output-DncgfZci.css} +3331 -3331
- 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 +2 -2
- package/src/components/Accordion/AccordionContent.tsx +9 -2
- package/src/components/Accordion/AccordionExpandableContentBody.tsx +8 -3
- package/src/components/Accordion/AccordionItem.tsx +6 -3
- package/src/components/Accordion/__tests__/AccordionItem.test.tsx +6 -0
- package/src/components/Wizard/WizardNavItem.tsx +7 -4
- package/src/components/Wizard/WizardStep.tsx +1 -1
- package/src/components/Wizard/WizardToggle.tsx +16 -3
- package/src/components/Wizard/__tests__/WizardNavItem.test.tsx +6 -0
- package/src/components/Wizard/__tests__/WizardStep.test.tsx +2 -0
- package/src/components/Wizard/examples/Wizard.md +2 -2
- package/src/components/Wizard/examples/WizardStepStatus.tsx +82 -0
- package/src/components/Wizard/types.tsx +3 -2
- package/src/components/Wizard/examples/WizardStepErrorStatus.tsx +0 -54
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-alpha.
|
|
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-alpha.85","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-alpha.
|
|
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-alpha.85","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-alpha.
|
|
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-alpha.85","private":true}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@patternfly/react-core",
|
|
3
|
-
"version": "6.0.0-alpha.
|
|
3
|
+
"version": "6.0.0-alpha.86",
|
|
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",
|
|
@@ -64,5 +64,5 @@
|
|
|
64
64
|
"react": "^17 || ^18",
|
|
65
65
|
"react-dom": "^17 || ^18"
|
|
66
66
|
},
|
|
67
|
-
"gitHead": "
|
|
67
|
+
"gitHead": "25a8747bbb2bd86419ea3ee470535709f6e7fe26"
|
|
68
68
|
}
|
|
@@ -2,7 +2,7 @@ import * as React from 'react';
|
|
|
2
2
|
import { css } from '@patternfly/react-styles';
|
|
3
3
|
import styles from '@patternfly/react-styles/css/components/Accordion/accordion';
|
|
4
4
|
import { AccordionContext, AccordionItemContext } from './AccordionContext';
|
|
5
|
-
import { AccordionExpandableContentBody } from './AccordionExpandableContentBody';
|
|
5
|
+
import { AccordionExpandableContentBody, AccordionExpandableContentBodyProps } from './AccordionExpandableContentBody';
|
|
6
6
|
|
|
7
7
|
export interface AccordionContentProps extends React.HTMLProps<HTMLDivElement> {
|
|
8
8
|
/** Content rendered inside the Accordion */
|
|
@@ -21,6 +21,8 @@ export interface AccordionContentProps extends React.HTMLProps<HTMLDivElement> {
|
|
|
21
21
|
component?: React.ElementType;
|
|
22
22
|
/** Flag indicating content is custom. Expanded content Body wrapper will be removed from children. This allows multiple bodies to be rendered as content. */
|
|
23
23
|
isCustomContent?: React.ReactNode;
|
|
24
|
+
/** Props passed to the AccordionExpandableContentBody **/
|
|
25
|
+
contentBodyProps?: AccordionExpandableContentBodyProps;
|
|
24
26
|
}
|
|
25
27
|
|
|
26
28
|
export const AccordionContent: React.FunctionComponent<AccordionContentProps> = ({
|
|
@@ -32,6 +34,7 @@ export const AccordionContent: React.FunctionComponent<AccordionContentProps> =
|
|
|
32
34
|
'aria-label': ariaLabel = '',
|
|
33
35
|
'aria-labelledby': ariaLabelledby,
|
|
34
36
|
component,
|
|
37
|
+
contentBodyProps,
|
|
35
38
|
...props
|
|
36
39
|
}: AccordionContentProps) => {
|
|
37
40
|
const [hasScrollbar, setHasScrollbar] = React.useState(false);
|
|
@@ -64,7 +67,11 @@ export const AccordionContent: React.FunctionComponent<AccordionContentProps> =
|
|
|
64
67
|
{...(hasScrollbar && Container === 'div' && { role: 'region' })}
|
|
65
68
|
{...props}
|
|
66
69
|
>
|
|
67
|
-
{isCustomContent ?
|
|
70
|
+
{isCustomContent ? (
|
|
71
|
+
children
|
|
72
|
+
) : (
|
|
73
|
+
<AccordionExpandableContentBody {...contentBodyProps}>{children}</AccordionExpandableContentBody>
|
|
74
|
+
)}
|
|
68
75
|
</Container>
|
|
69
76
|
);
|
|
70
77
|
}}
|
|
@@ -2,12 +2,17 @@ import * as React from 'react';
|
|
|
2
2
|
import { css } from '@patternfly/react-styles';
|
|
3
3
|
import styles from '@patternfly/react-styles/css/components/Accordion/accordion';
|
|
4
4
|
|
|
5
|
-
export interface AccordionExpandableContentBodyProps {
|
|
5
|
+
export interface AccordionExpandableContentBodyProps extends React.HTMLProps<HTMLDivElement> {
|
|
6
6
|
/** Content rendered inside the accordion content body */
|
|
7
7
|
children?: React.ReactNode;
|
|
8
8
|
}
|
|
9
9
|
|
|
10
10
|
export const AccordionExpandableContentBody: React.FunctionComponent<AccordionExpandableContentBodyProps> = ({
|
|
11
|
-
children = null
|
|
12
|
-
|
|
11
|
+
children = null,
|
|
12
|
+
...props
|
|
13
|
+
}: AccordionExpandableContentBodyProps) => (
|
|
14
|
+
<div className={css(styles.accordionExpandableContentBody)} {...props}>
|
|
15
|
+
{children}
|
|
16
|
+
</div>
|
|
17
|
+
);
|
|
13
18
|
AccordionExpandableContentBody.displayName = 'AccordionExpandableContentBody';
|
|
@@ -3,7 +3,7 @@ import { css } from '@patternfly/react-styles';
|
|
|
3
3
|
import styles from '@patternfly/react-styles/css/components/Accordion/accordion';
|
|
4
4
|
import { AccordionItemContext } from './AccordionContext';
|
|
5
5
|
|
|
6
|
-
export interface AccordionItemProps {
|
|
6
|
+
export interface AccordionItemProps extends React.HTMLProps<HTMLDivElement> {
|
|
7
7
|
/** Content rendered inside the accordion item. */
|
|
8
8
|
children?: React.ReactNode;
|
|
9
9
|
/** Additional classes added to the accordion item. */
|
|
@@ -15,14 +15,17 @@ export interface AccordionItemProps {
|
|
|
15
15
|
export const AccordionItem: React.FunctionComponent<AccordionItemProps> = ({
|
|
16
16
|
children = null,
|
|
17
17
|
className,
|
|
18
|
-
isExpanded: isExpandedProp = false
|
|
18
|
+
isExpanded: isExpandedProp = false,
|
|
19
|
+
...props
|
|
19
20
|
}: AccordionItemProps) => (
|
|
20
21
|
<AccordionItemContext.Provider
|
|
21
22
|
value={{
|
|
22
23
|
isExpanded: isExpandedProp
|
|
23
24
|
}}
|
|
24
25
|
>
|
|
25
|
-
<div className={css(styles.accordionItem, isExpandedProp && styles.modifiers.expanded, className)}
|
|
26
|
+
<div className={css(styles.accordionItem, isExpandedProp && styles.modifiers.expanded, className)} {...props}>
|
|
27
|
+
{children}
|
|
28
|
+
</div>
|
|
26
29
|
</AccordionItemContext.Provider>
|
|
27
30
|
);
|
|
28
31
|
AccordionItem.displayName = 'AccordionItem';
|
|
@@ -28,6 +28,12 @@ test(`Renders with additional classes when className is passed`, () => {
|
|
|
28
28
|
expect(screen.getByText('Test')).toHaveClass('custom-class');
|
|
29
29
|
});
|
|
30
30
|
|
|
31
|
+
test(`Spreads props if others are passed`, () => {
|
|
32
|
+
render(<AccordionItem data-testId="testId">Test</AccordionItem>);
|
|
33
|
+
|
|
34
|
+
expect(screen.getByTestId('testId')).toBeInTheDocument();
|
|
35
|
+
});
|
|
36
|
+
|
|
31
37
|
test('Matches the snapshot', () => {
|
|
32
38
|
const { asFragment } = render(<AccordionItem>Test</AccordionItem>);
|
|
33
39
|
expect(asFragment()).toMatchSnapshot();
|
|
@@ -4,6 +4,7 @@ import { css } from '@patternfly/react-styles';
|
|
|
4
4
|
import styles from '@patternfly/react-styles/css/components/Wizard/wizard';
|
|
5
5
|
import AngleRightIcon from '@patternfly/react-icons/dist/esm/icons/angle-right-icon';
|
|
6
6
|
import ExclamationCircleIcon from '@patternfly/react-icons/dist/esm/icons/exclamation-circle-icon';
|
|
7
|
+
import CheckCircleIcon from '@patternfly/react-icons/dist/esm/icons/check-circle-icon';
|
|
7
8
|
|
|
8
9
|
import { OUIAProps, useOUIAProps } from '../../helpers';
|
|
9
10
|
import { WizardNavItemStatus } from './types';
|
|
@@ -38,7 +39,7 @@ export interface WizardNavItemProps
|
|
|
38
39
|
/** The id for the navigation item */
|
|
39
40
|
id?: string | number;
|
|
40
41
|
/** Used to determine the icon displayed next to content. Default has no icon. */
|
|
41
|
-
status?: 'default' | 'error';
|
|
42
|
+
status?: 'default' | 'error' | 'success';
|
|
42
43
|
}
|
|
43
44
|
|
|
44
45
|
export const WizardNavItem = ({
|
|
@@ -96,18 +97,20 @@ export const WizardNavItem = ({
|
|
|
96
97
|
styles.wizardNavLink,
|
|
97
98
|
isCurrent && styles.modifiers.current,
|
|
98
99
|
isDisabled && styles.modifiers.disabled,
|
|
99
|
-
status === WizardNavItemStatus.Error && styles.modifiers.danger
|
|
100
|
+
status === WizardNavItemStatus.Error && styles.modifiers.danger,
|
|
101
|
+
status === WizardNavItemStatus.Success && styles.modifiers.success
|
|
100
102
|
)}
|
|
101
103
|
aria-disabled={isDisabled ? true : null}
|
|
102
104
|
aria-current={isCurrent && !children ? 'step' : false}
|
|
103
105
|
{...(isExpandable && { 'aria-expanded': isExpanded })}
|
|
104
106
|
{...ouiaProps}
|
|
105
107
|
>
|
|
106
|
-
{status
|
|
108
|
+
{status !== WizardNavItemStatus.Default && (
|
|
107
109
|
<>
|
|
108
110
|
<span className="pf-v6-screen-reader">, {status}</span>
|
|
109
111
|
<span className={css(styles.wizardNavLinkStatusIcon)}>
|
|
110
|
-
<ExclamationCircleIcon />
|
|
112
|
+
{status === WizardNavItemStatus.Error && <ExclamationCircleIcon />}
|
|
113
|
+
{status === WizardNavItemStatus.Success && <CheckCircleIcon />}
|
|
111
114
|
</span>
|
|
112
115
|
</>
|
|
113
116
|
)}
|
|
@@ -29,7 +29,7 @@ export interface WizardStepProps {
|
|
|
29
29
|
/** Replaces the step's footer. The step's footer takes precedance over the wizard's footer. */
|
|
30
30
|
footer?: React.ReactElement | Partial<WizardFooterProps>;
|
|
31
31
|
/** Used to determine icon next to the step's navigation item */
|
|
32
|
-
status?: 'default' | 'error';
|
|
32
|
+
status?: 'default' | 'error' | 'success';
|
|
33
33
|
/** Flag to determine whether parent steps can expand or not. Defaults to false. */
|
|
34
34
|
isExpandable?: boolean;
|
|
35
35
|
}
|
|
@@ -5,6 +5,7 @@ import styles from '@patternfly/react-styles/css/components/Wizard/wizard';
|
|
|
5
5
|
import AngleRightIcon from '@patternfly/react-icons/dist/esm/icons/angle-right-icon';
|
|
6
6
|
import CaretDownIcon from '@patternfly/react-icons/dist/esm/icons/caret-down-icon';
|
|
7
7
|
import ExclamationCircleIcon from '@patternfly/react-icons/dist/esm/icons/exclamation-circle-icon';
|
|
8
|
+
import CheckCircleIcon from '@patternfly/react-icons/dist/esm/icons/check-circle-icon';
|
|
8
9
|
|
|
9
10
|
import { KeyTypes } from '../../helpers/constants';
|
|
10
11
|
import { WizardStepType, isWizardSubStep } from './types';
|
|
@@ -91,12 +92,24 @@ export const WizardToggle = ({
|
|
|
91
92
|
aria-expanded={isNavExpanded}
|
|
92
93
|
>
|
|
93
94
|
<span className={css(styles.wizardToggleList)}>
|
|
94
|
-
<span
|
|
95
|
-
{
|
|
95
|
+
<span
|
|
96
|
+
className={css(
|
|
97
|
+
styles.wizardToggleListItem,
|
|
98
|
+
isActiveStepStatus === 'error' && styles.modifiers.danger,
|
|
99
|
+
isActiveStepStatus === 'success' && styles.modifiers.success
|
|
100
|
+
)}
|
|
101
|
+
>
|
|
102
|
+
{isActiveStepStatus === 'error' && (
|
|
96
103
|
<span className={css(styles.wizardToggleStatusIcon)}>
|
|
97
104
|
<ExclamationCircleIcon />
|
|
98
105
|
</span>
|
|
99
|
-
)
|
|
106
|
+
)}
|
|
107
|
+
{isActiveStepStatus === 'success' && (
|
|
108
|
+
<span className={css(styles.wizardToggleStatusIcon)}>
|
|
109
|
+
<CheckCircleIcon />
|
|
110
|
+
</span>
|
|
111
|
+
)}
|
|
112
|
+
{isActiveStepStatus !== 'success' && isActiveStepStatus !== 'error' && (
|
|
100
113
|
<span className={css(styles.wizardToggleNum)}>{wizardToggleIndex}</span>
|
|
101
114
|
)}{' '}
|
|
102
115
|
{parentStep?.name || activeStep?.name}
|
|
@@ -59,3 +59,9 @@ test(`Renders screen reader text and danger icon when status is error`, () => {
|
|
|
59
59
|
expect(screen.getByRole('button')).toHaveClass(styles.modifiers.danger);
|
|
60
60
|
expect(screen.getByText(', error')).toBeInTheDocument();
|
|
61
61
|
});
|
|
62
|
+
|
|
63
|
+
test(`Renders screen reader text and success icon when status is success`, () => {
|
|
64
|
+
render(<WizardNavItem status="success" />);
|
|
65
|
+
expect(screen.getByRole('button')).toHaveClass(styles.modifiers.success);
|
|
66
|
+
expect(screen.getByText(', success')).toBeInTheDocument();
|
|
67
|
+
});
|
|
@@ -70,4 +70,6 @@ test('updates "navItem" in context when the value changes', () => {
|
|
|
70
70
|
test('updates "status" in context when the value changes', () => {
|
|
71
71
|
render(<WizardStep {...testStep} status="error" />);
|
|
72
72
|
expect(setStep).toHaveBeenCalledWith({ ...testStepProps, status: 'error', isVisited: true });
|
|
73
|
+
render(<WizardStep {...testStep} status="success" />);
|
|
74
|
+
expect(setStep).toHaveBeenCalledWith({ ...testStepProps, status: 'success', isVisited: true });
|
|
73
75
|
});
|
|
@@ -165,9 +165,9 @@ To focus the main content element of the `Wizard`, pass in the `shouldFocusConte
|
|
|
165
165
|
|
|
166
166
|
```
|
|
167
167
|
|
|
168
|
-
### Step
|
|
168
|
+
### Step status
|
|
169
169
|
|
|
170
|
-
```ts file="./
|
|
170
|
+
```ts file="./WizardStepStatus.tsx"
|
|
171
171
|
|
|
172
172
|
```
|
|
173
173
|
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
|
|
3
|
+
import { Radio, Wizard, WizardStep } from '@patternfly/react-core';
|
|
4
|
+
|
|
5
|
+
interface SomeContextProps {
|
|
6
|
+
errorMessage: string | undefined;
|
|
7
|
+
setErrorMessage(error: string | undefined): void;
|
|
8
|
+
successMessage: string | undefined;
|
|
9
|
+
setSuccessMessage(error: string | undefined): void;
|
|
10
|
+
}
|
|
11
|
+
type SomeContextRenderProps = Pick<SomeContextProps, 'successMessage', 'errorMessage'>;
|
|
12
|
+
interface SomeContextProviderProps {
|
|
13
|
+
children: (context: SomeContextRenderProps) => React.ReactElement;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
const SomeContext: React.Context<SomeContextProps> = React.createContext({} as SomeContextProps);
|
|
17
|
+
|
|
18
|
+
const SomeContextProvider = ({ children }: SomeContextProviderProps) => {
|
|
19
|
+
const [errorMessage, setErrorMessage] = React.useState<string>();
|
|
20
|
+
const [successMessage, setSuccessMessage] = React.useState<string>();
|
|
21
|
+
|
|
22
|
+
return (
|
|
23
|
+
<SomeContext.Provider value={{ errorMessage, setErrorMessage, successMessage, setSuccessMessage }}>
|
|
24
|
+
{children({ errorMessage, successMessage })}
|
|
25
|
+
</SomeContext.Provider>
|
|
26
|
+
);
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
const StepContentWithAction = () => {
|
|
30
|
+
const { errorMessage, setErrorMessage, successMessage, setSuccessMessage } = React.useContext(SomeContext);
|
|
31
|
+
|
|
32
|
+
return (
|
|
33
|
+
<>
|
|
34
|
+
<Radio
|
|
35
|
+
label="Give step 1 an error status"
|
|
36
|
+
isChecked={!!errorMessage}
|
|
37
|
+
onChange={(_event, checked) => {
|
|
38
|
+
setErrorMessage(checked ? 'Some error message' : undefined);
|
|
39
|
+
setSuccessMessage(!checked ? 'Some error message' : undefined);
|
|
40
|
+
}}
|
|
41
|
+
id="toggle-error-checkbox"
|
|
42
|
+
name="Toggle Status"
|
|
43
|
+
/>
|
|
44
|
+
<Radio
|
|
45
|
+
label="Give step 1 a success status"
|
|
46
|
+
isChecked={!!successMessage}
|
|
47
|
+
onChange={(_event, checked) => {
|
|
48
|
+
setSuccessMessage(checked ? 'Some success message' : undefined);
|
|
49
|
+
setErrorMessage(!checked ? 'Some success message' : undefined);
|
|
50
|
+
}}
|
|
51
|
+
id="toggle-success-checkbox"
|
|
52
|
+
name="Toggle Status"
|
|
53
|
+
/>
|
|
54
|
+
</>
|
|
55
|
+
);
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
export const WizardStepStatus: React.FunctionComponent = () => (
|
|
59
|
+
<SomeContextProvider>
|
|
60
|
+
{({ errorMessage, successMessage }) => {
|
|
61
|
+
let status = 'default';
|
|
62
|
+
if (errorMessage) {
|
|
63
|
+
status = 'error';
|
|
64
|
+
} else if (successMessage) {
|
|
65
|
+
status = 'success';
|
|
66
|
+
}
|
|
67
|
+
return (
|
|
68
|
+
<Wizard height={400} title="Step status wizard">
|
|
69
|
+
<WizardStep status={status} id="status-step-1" name="Step 1">
|
|
70
|
+
Step 1 content
|
|
71
|
+
</WizardStep>
|
|
72
|
+
<WizardStep name="Status step" id="error-status-step-2">
|
|
73
|
+
<StepContentWithAction />
|
|
74
|
+
</WizardStep>
|
|
75
|
+
<WizardStep name="Review" id="status-review-step" footer={{ nextButtonText: 'Finish' }}>
|
|
76
|
+
Review step content
|
|
77
|
+
</WizardStep>
|
|
78
|
+
</Wizard>
|
|
79
|
+
);
|
|
80
|
+
}}
|
|
81
|
+
</SomeContextProvider>
|
|
82
|
+
);
|
|
@@ -23,12 +23,13 @@ export interface WizardBasicStep {
|
|
|
23
23
|
/** Replaces the step's footer. The step's footer takes precedance over the wizard's footer. */
|
|
24
24
|
footer?: React.ReactElement | Partial<WizardFooterProps>;
|
|
25
25
|
/** Used to determine icon next to the step's navItem */
|
|
26
|
-
status?: 'default' | 'error';
|
|
26
|
+
status?: 'default' | 'error' | 'success';
|
|
27
27
|
}
|
|
28
28
|
|
|
29
29
|
export enum WizardNavItemStatus {
|
|
30
30
|
Default = 'default',
|
|
31
|
-
Error = 'error'
|
|
31
|
+
Error = 'error',
|
|
32
|
+
Success = 'success'
|
|
32
33
|
}
|
|
33
34
|
|
|
34
35
|
/** Type for customizing a button (next, back or cancel) in a Wizard footer. It omits some props which either have a default value or are passed directly via WizardFooterProps. */
|
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
|
|
3
|
-
import { Checkbox, Wizard, WizardStep } from '@patternfly/react-core';
|
|
4
|
-
|
|
5
|
-
interface SomeContextProps {
|
|
6
|
-
errorMessage: string | undefined;
|
|
7
|
-
setErrorMessage(error: string | undefined): void;
|
|
8
|
-
}
|
|
9
|
-
type SomeContextRenderProps = Pick<SomeContextProps, 'errorMessage'>;
|
|
10
|
-
interface SomeContextProviderProps {
|
|
11
|
-
children: (context: SomeContextRenderProps) => React.ReactElement;
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
const SomeContext: React.Context<SomeContextProps> = React.createContext({} as SomeContextProps);
|
|
15
|
-
|
|
16
|
-
const SomeContextProvider = ({ children }: SomeContextProviderProps) => {
|
|
17
|
-
const [errorMessage, setErrorMessage] = React.useState<string>();
|
|
18
|
-
|
|
19
|
-
return (
|
|
20
|
-
<SomeContext.Provider value={{ errorMessage, setErrorMessage }}>{children({ errorMessage })}</SomeContext.Provider>
|
|
21
|
-
);
|
|
22
|
-
};
|
|
23
|
-
|
|
24
|
-
const StepContentWithAction = () => {
|
|
25
|
-
const { errorMessage, setErrorMessage } = React.useContext(SomeContext);
|
|
26
|
-
|
|
27
|
-
return (
|
|
28
|
-
<Checkbox
|
|
29
|
-
label="Give step 1 an error status"
|
|
30
|
-
isChecked={!!errorMessage}
|
|
31
|
-
onChange={(_event, checked) => setErrorMessage(checked ? 'Some error message' : undefined)}
|
|
32
|
-
id="toggle-error-checkbox"
|
|
33
|
-
name="Toggle Error Checkbox"
|
|
34
|
-
/>
|
|
35
|
-
);
|
|
36
|
-
};
|
|
37
|
-
|
|
38
|
-
export const WizardStepErrorStatus: React.FunctionComponent = () => (
|
|
39
|
-
<SomeContextProvider>
|
|
40
|
-
{({ errorMessage }) => (
|
|
41
|
-
<Wizard height={400} title="Step error status wizard">
|
|
42
|
-
<WizardStep status={errorMessage ? 'error' : 'default'} id="error-status-step-1" name="Step 1">
|
|
43
|
-
Step 1 content
|
|
44
|
-
</WizardStep>
|
|
45
|
-
<WizardStep name="Error action step" id="error-status-step-2">
|
|
46
|
-
<StepContentWithAction />
|
|
47
|
-
</WizardStep>
|
|
48
|
-
<WizardStep name="Review" id="error-status-review-step" footer={{ nextButtonText: 'Finish' }}>
|
|
49
|
-
Review step content
|
|
50
|
-
</WizardStep>
|
|
51
|
-
</Wizard>
|
|
52
|
-
)}
|
|
53
|
-
</SomeContextProvider>
|
|
54
|
-
);
|