Skip to content

Commit d1989c7

Browse files
appf-mikeJeremyRH
authored andcommitted
feat: expose dismissable prop for feature banner
1 parent 751f809 commit d1989c7

File tree

3 files changed

+28
-4
lines changed

3 files changed

+28
-4
lines changed

src/components/FeatureBanner/FeatureBanner.spec.tsx

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { render } from '@testing-library/react';
1+
import { render, waitFor } from '@testing-library/react';
22
import React from 'react';
33
import FeatureBanner from './FeatureBanner';
44

@@ -38,4 +38,16 @@ describe('<FeatureBanner />', () => {
3838

3939
expect(queryByText('FeatureBannerChildElement')).not.toBeNull();
4040
});
41+
42+
describe('when dismissable', () => {
43+
it('can be closed', async () => {
44+
const { getByRole, queryByRole } = render(<FeatureBanner {...commonProps} dismissable />);
45+
const closeButton = getByRole('button');
46+
expect(queryByRole('alert')).not.toBeNull();
47+
closeButton.click();
48+
await waitFor(() => {
49+
expect(queryByRole('alert')).toBeNull();
50+
});
51+
});
52+
});
4153
});

src/components/FeatureBanner/FeatureBanner.stories.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ export const LiveExample: Story = {
2626
args: {
2727
alertText: 'New',
2828
color: 'info',
29+
dismissable: false,
2930
title: 'Company-Wide View of Text Messages',
3031
subtitle: 'View all text messages sent by your company from this page.',
3132
},

src/components/FeatureBanner/FeatureBanner.tsx

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,42 @@
1-
import React, { FC, ReactNode } from 'react';
1+
import React, { FC, ReactNode, useState } from 'react';
22
import { Alert } from 'reactstrap';
33

44
interface FeatureBannerProps {
55
alertText?: string;
66
children?: ReactNode;
77
color?: string;
8+
dismissable?: boolean;
89
subtitle: ReactNode;
910
title: string;
1011
}
1112

1213
const defaultProps = {
1314
alertText: 'new',
1415
color: 'info',
16+
dismissable: false,
1517
};
1618

1719
const FeatureBanner: FC<FeatureBannerProps> = ({
1820
alertText = defaultProps.alertText,
1921
color = defaultProps.color,
22+
dismissable = defaultProps.dismissable,
2023
title,
2124
subtitle,
2225
children,
2326
}) => {
2427
const alertStyle = 'fw-bold text-uppercase';
28+
const [visible, setVisible] = useState(true);
29+
const toggle = dismissable ? () => setVisible(!visible) : undefined;
2530
return (
26-
<Alert color={color} className="align-items-center d-flex p-0" fade={false}>
31+
<Alert
32+
color={color}
33+
className="align-items-center d-flex p-0"
34+
fade={false}
35+
toggle={toggle}
36+
isOpen={visible}
37+
>
2738
<h2 className={`${alertStyle} text-center m-0 px-3 d-none d-sm-block`}>{alertText}</h2>
28-
<div className="d-flex flex-row flex-wrap p-3 w-100">
39+
<div className={`d-flex flex-row flex-wrap p-3 w-100 ${dismissable ? 'pe-5' : ''}`}>
2940
<div className="flex-fill me-auto">
3041
<div className="d-inline-block m-0">
3142
<h2 className={`${alertStyle} d-inline d-sm-none me-2`}>{alertText}</h2>

0 commit comments

Comments
 (0)