diff --git a/packages/react-core/src/components/Alert/Alert.tsx b/packages/react-core/src/components/Alert/Alert.tsx index 33292e63e40..c3b2c4799d9 100644 --- a/packages/react-core/src/components/Alert/Alert.tsx +++ b/packages/react-core/src/components/Alert/Alert.tsx @@ -21,8 +21,10 @@ export interface AlertProps extends Omit, 'actio isInline?: boolean; /** Title of the Alert */ title: React.ReactNode; - /** Action button to put in the Alert. Should be or */ - action?: React.ReactNode; + /** Close button; use the AlertActionCloseButton component */ + actionClose?: React.ReactNode; + /** Action links; use a single AlertActionLink component or multiple wrapped in an array or React.Fragment */ + actionLinks?: React.ReactNode; /** Content rendered inside the Alert */ children?: React.ReactNode; /** Additional classes added to the Alert */ @@ -41,7 +43,8 @@ export const Alert: React.FunctionComponent = ({ isLiveRegion = false, variantLabel = `${capitalize(variant)} alert:`, 'aria-label': ariaLabel = `${capitalize(variant)} Alert`, - action = null, + actionClose, + actionLinks, title, children = '', className = '', @@ -75,12 +78,13 @@ export const Alert: React.FunctionComponent = ({ >

{getHeadingContent}

+ {actionClose && ( + +
{actionClose}
+
+ )} {children &&
{children}
} - - {action && (typeof action === 'object' || typeof action === 'string') && ( -
{action}
- )} -
+ {actionLinks &&
{actionLinks}
} ); }; diff --git a/packages/react-core/src/components/Alert/AlertActionCloseButton.tsx b/packages/react-core/src/components/Alert/AlertActionCloseButton.tsx index 023edb31001..30352f52b60 100644 --- a/packages/react-core/src/components/Alert/AlertActionCloseButton.tsx +++ b/packages/react-core/src/components/Alert/AlertActionCloseButton.tsx @@ -3,7 +3,7 @@ import { Button, ButtonVariant, ButtonProps } from '../Button'; import TimesIcon from '@patternfly/react-icons/dist/js/icons/times-icon'; import { AlertContext } from './AlertContext'; -interface AlertActionCloseButtonProps extends ButtonProps { +export interface AlertActionCloseButtonProps extends ButtonProps { /** Additional classes added to the AlertActionCloseButton */ className?: string; /** A callback for when the close button is clicked */ diff --git a/packages/react-core/src/components/Alert/AlertActionLink.tsx b/packages/react-core/src/components/Alert/AlertActionLink.tsx index c947498786f..8f52e6ef055 100644 --- a/packages/react-core/src/components/Alert/AlertActionLink.tsx +++ b/packages/react-core/src/components/Alert/AlertActionLink.tsx @@ -13,7 +13,7 @@ export const AlertActionLink: React.FunctionComponent = ({ children, ...props }: AlertActionLinkProps) => ( - ); diff --git a/packages/react-core/src/components/Alert/__tests__/Alert.test.tsx b/packages/react-core/src/components/Alert/__tests__/Alert.test.tsx index d8e247385e2..b4c4ff3ba83 100644 --- a/packages/react-core/src/components/Alert/__tests__/Alert.test.tsx +++ b/packages/react-core/src/components/Alert/__tests__/Alert.test.tsx @@ -37,7 +37,7 @@ Object.values(AlertVariant).forEach(variant => { test('Action Link', () => { const view = mount( - test
} title=""> + test]} title=""> Some alert ); @@ -49,7 +49,7 @@ Object.values(AlertVariant).forEach(variant => { const view = mount( } + actionClose={} title={`Sample ${variant} alert`} > Some alert @@ -62,7 +62,7 @@ Object.values(AlertVariant).forEach(variant => { test('Action and Title', () => { const view = mount( - test} title="Some title"> + test]} title="Some title"> Some alert ); @@ -74,7 +74,7 @@ Object.values(AlertVariant).forEach(variant => { test} + actionLinks={[test]} title="Some title" > Some alert diff --git a/packages/react-core/src/components/Alert/__tests__/Generated/Alert.test.tsx b/packages/react-core/src/components/Alert/__tests__/Generated/Alert.test.tsx index 6f14fac4c3b..65d864cfb9c 100644 --- a/packages/react-core/src/components/Alert/__tests__/Generated/Alert.test.tsx +++ b/packages/react-core/src/components/Alert/__tests__/Generated/Alert.test.tsx @@ -13,7 +13,8 @@ it('Alert should match snapshot (auto-generated)', () => { variant={'success'} isInline={false} title={
ReactNode
} - action={null} + actionClose={undefined} + actionLinks={[]} children={''} className={"''"} aria-label={'string'} diff --git a/packages/react-core/src/components/Alert/__tests__/Generated/AlertActionCloseButton.test.tsx b/packages/react-core/src/components/Alert/__tests__/Generated/AlertActionCloseButton.test.tsx index c5746f35a17..5c0379a6353 100644 --- a/packages/react-core/src/components/Alert/__tests__/Generated/AlertActionCloseButton.test.tsx +++ b/packages/react-core/src/components/Alert/__tests__/Generated/AlertActionCloseButton.test.tsx @@ -9,7 +9,12 @@ import {} from '../..'; it('AlertActionCloseButton should match snapshot (auto-generated)', () => { const view = shallow( - undefined as any} aria-label={"''"} variantLabel={"''"} /> + undefined as any} + aria-label={"''"} + variantLabel={'string'} + /> ); expect(view).toMatchSnapshot(); }); diff --git a/packages/react-core/src/components/Alert/__tests__/Generated/AlertActionLink.test.tsx b/packages/react-core/src/components/Alert/__tests__/Generated/AlertActionLink.test.tsx index cb1265c845d..35ca1fd9f51 100644 --- a/packages/react-core/src/components/Alert/__tests__/Generated/AlertActionLink.test.tsx +++ b/packages/react-core/src/components/Alert/__tests__/Generated/AlertActionLink.test.tsx @@ -8,6 +8,6 @@ import { AlertActionLink } from '../../AlertActionLink'; import {} from '../..'; it('AlertActionLink should match snapshot (auto-generated)', () => { - const view = shallow(); + const view = shallow(); expect(view).toMatchSnapshot(); }); diff --git a/packages/react-core/src/components/Alert/__tests__/Generated/__snapshots__/Alert.test.tsx.snap b/packages/react-core/src/components/Alert/__tests__/Generated/__snapshots__/Alert.test.tsx.snap index ec0605b8725..6ed66580c87 100644 --- a/packages/react-core/src/components/Alert/__tests__/Generated/__snapshots__/Alert.test.tsx.snap +++ b/packages/react-core/src/components/Alert/__tests__/Generated/__snapshots__/Alert.test.tsx.snap @@ -23,15 +23,8 @@ exports[`Alert should match snapshot (auto-generated) 1`] = ` ReactNode - - ReactNode - , - "variantLabel": "string", - } - } +
`; diff --git a/packages/react-core/src/components/Alert/__tests__/Generated/__snapshots__/AlertActionLink.test.tsx.snap b/packages/react-core/src/components/Alert/__tests__/Generated/__snapshots__/AlertActionLink.test.tsx.snap index cf4b274ff48..99614afacf5 100644 --- a/packages/react-core/src/components/Alert/__tests__/Generated/__snapshots__/AlertActionLink.test.tsx.snap +++ b/packages/react-core/src/components/Alert/__tests__/Generated/__snapshots__/AlertActionLink.test.tsx.snap @@ -3,8 +3,9 @@ exports[`AlertActionLink should match snapshot (auto-generated) 1`] = ` `; diff --git a/packages/react-core/src/components/Alert/__tests__/__snapshots__/Alert.test.tsx.snap b/packages/react-core/src/components/Alert/__tests__/__snapshots__/Alert.test.tsx.snap index f7e88d5046e..3874720fc22 100644 --- a/packages/react-core/src/components/Alert/__tests__/__snapshots__/Alert.test.tsx.snap +++ b/packages/react-core/src/components/Alert/__tests__/__snapshots__/Alert.test.tsx.snap @@ -2,7 +2,7 @@ exports[`Alert - danger Action Close Button 1`] = ` Sample danger alert -
- Some alert -
@@ -119,16 +114,23 @@ exports[`Alert - danger Action Close Button 1`] = `
+
+ Some alert +
`; exports[`Alert - danger Action Link 1`] = ` - test -
+ actionLinks={ + Array [ + + test + , + ] } title="" variant="danger" @@ -188,17 +190,18 @@ exports[`Alert - danger Action Link 1`] = ` Some alert
+
+ Some alert +
`; exports[`Alert - default Action Link 1`] = ` - test - + actionLinks={ + Array [ + + test + , + ] } title="" variant="default" @@ -850,17 +861,18 @@ exports[`Alert - default Action Link 1`] = ` Some alert
+
+ Some alert +
`; exports[`Alert - info Action Link 1`] = ` - test - + actionLinks={ + Array [ + + test + , + ] } title="" variant="info" @@ -1512,17 +1532,18 @@ exports[`Alert - info Action Link 1`] = ` Some alert
+
+ Some alert +
`; exports[`Alert - success Action Link 1`] = ` - test - + actionLinks={ + Array [ + + test + , + ] } title="" variant="success" @@ -2174,17 +2203,18 @@ exports[`Alert - success Action Link 1`] = ` Some alert
+
+ Some alert +
`; exports[`Alert - warning Action Link 1`] = ` - test - + actionLinks={ + Array [ + + test + , + ] } title="" variant="warning" @@ -2836,17 +2874,18 @@ exports[`Alert - warning Action Link 1`] = ` Some alert
- - + + + {this.state.alerts.map(({ title, variant, isLiveRegion, ariaLive, ariaRelevant, ariaAtomic, key }) => ( + /> ))} ); @@ -405,13 +268,19 @@ class AsyncLiveRegionAlert extends React.Component { this.state = { alerts: [], timer: null - } - this.stopAsyncAlerts = () => { clearInterval(this.state.timer); } + }; + this.stopAsyncAlerts = () => { + clearInterval(this.state.timer); + }; + } + componentWillUnmount() { + this.stopAsyncAlerts(); } - componentWillUnmount() { this.stopAsyncAlerts(); } render() { - const addAlert = (incomingAlerts) => { this.setState({ alerts: [...this.state.alerts, incomingAlerts] }); }; - const getUniqueId = () => (new Date().getTime()); + const addAlert = incomingAlerts => { + this.setState({ alerts: [...this.state.alerts, incomingAlerts] }); + }; + const getUniqueId = () => new Date().getTime(); const startAsyncAlerts = () => { let timerValue = setInterval(() => { addAlert({ @@ -421,21 +290,21 @@ class AsyncLiveRegionAlert extends React.Component { key: getUniqueId() }); }, 1500); - this.setState({timer: timerValue}); + this.setState({ timer: timerValue }); }; const btnClasses = ['pf-c-button', 'pf-m-secondary'].join(' '); return ( - - + + {this.state.alerts.map(({ title, variant, isLiveRegion, key }) => ( - + ))} ); diff --git a/packages/react-core/src/components/AlertGroup/__tests__/AlertGroup.test.tsx b/packages/react-core/src/components/AlertGroup/__tests__/AlertGroup.test.tsx index f2737d89e0d..78b3b480a42 100644 --- a/packages/react-core/src/components/AlertGroup/__tests__/AlertGroup.test.tsx +++ b/packages/react-core/src/components/AlertGroup/__tests__/AlertGroup.test.tsx @@ -61,7 +61,7 @@ test('alertgroup closes when alerts are closed', () => { } + actionClose={} /> ); diff --git a/packages/react-core/src/components/AlertGroup/__tests__/__snapshots__/AlertGroup.test.tsx.snap b/packages/react-core/src/components/AlertGroup/__tests__/__snapshots__/AlertGroup.test.tsx.snap index 9ce005dbae9..5295b55fe57 100644 --- a/packages/react-core/src/components/AlertGroup/__tests__/__snapshots__/AlertGroup.test.tsx.snap +++ b/packages/react-core/src/components/AlertGroup/__tests__/__snapshots__/AlertGroup.test.tsx.snap @@ -296,7 +296,6 @@ exports[`alertgroup closes when alerts are closed 1`] = ` Test Alert -
@@ -323,6 +322,7 @@ exports[`alertgroup closes when alerts are closed 1`] = `
+
@@ -375,7 +375,6 @@ exports[`alertgroup closes when alerts are closed 1`] = ` Test Alert -
@@ -402,6 +401,7 @@ exports[`alertgroup closes when alerts are closed 1`] = `
+ @@ -418,7 +418,7 @@ exports[`alertgroup closes when alerts are closed 1`] = ` key="0" > - - + + ); @@ -63,7 +63,7 @@ class ToastAlertGroup extends React.Component { isLiveRegion variant={AlertVariant[variant]} title={title} - action={ + actionClose={ +class AvatarExample extends React.Component { + render() { + return ( + + ); + } +} ``` diff --git a/packages/react-integration/demo-app-ts/src/components/demos/AlertDemo/AlertDemo.tsx b/packages/react-integration/demo-app-ts/src/components/demos/AlertDemo/AlertDemo.tsx index 45eaf6a83b3..206eb70a372 100644 --- a/packages/react-integration/demo-app-ts/src/components/demos/AlertDemo/AlertDemo.tsx +++ b/packages/react-integration/demo-app-ts/src/components/demos/AlertDemo/AlertDemo.tsx @@ -28,7 +28,7 @@ export class AlertDemo extends React.Component<{}, AlertDemoState> { id="info-alert" variant="info" title="Info alert title" - action={} + actionClose={} > Info alert description. This is a link. @@ -39,7 +39,7 @@ export class AlertDemo extends React.Component<{}, AlertDemoState> { id="info-alert" variant="info" title="Info alert title" - action={} + actionClose={} > Info alert description. This is a link.
diff --git a/packages/react-integration/demo-app-ts/src/components/demos/AlertGroupDemo/AlertGroupDemo.tsx b/packages/react-integration/demo-app-ts/src/components/demos/AlertGroupDemo/AlertGroupDemo.tsx index b50cd9bf3e0..10a1c4bb25d 100644 --- a/packages/react-integration/demo-app-ts/src/components/demos/AlertGroupDemo/AlertGroupDemo.tsx +++ b/packages/react-integration/demo-app-ts/src/components/demos/AlertGroupDemo/AlertGroupDemo.tsx @@ -68,7 +68,7 @@ export class AlertGroupDemo extends React.Component<{}, AlertGroupDemoState> { variant={AlertVariant[variant]} title={title} key={key} - action={ this.removeAlert(key)} id="test-button" />} + actionClose={ this.removeAlert(key)} id="test-button" />} /> ))}