Skip to content

Commit 8f3ad6e

Browse files
feat(header-flyout): optionally allow header actions (#4164)
* feat(header-flyout): optionally allow header actions * feat(header-flyout): update specs * feat(header-flyout): add default value to prop * feat(header-flyout): update snapshot * feat(header-flyout): update spec message * feat(header-flyout): update spec * feat(flyout): rerun pipeline * feat(flyout): rerun pipeline --------- Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com>
1 parent 12c9a3a commit 8f3ad6e

File tree

4 files changed

+56
-8
lines changed

4 files changed

+56
-8
lines changed

src/components/flyout/OverlayHeader.tsx

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,16 @@ export interface OverlayHeaderProps {
1212
children?: React.ReactNode;
1313
/** Set className to the overlay header */
1414
className?: string;
15+
/** Are OverlayHeader actions enabled */
16+
isOverlayHeaderActionEnabled?: boolean;
1517
}
1618

17-
const OverlayHeader = ({ children, className }: OverlayHeaderProps) => {
19+
const OverlayHeader = ({ children, className, isOverlayHeaderActionEnabled = false }: OverlayHeaderProps) => {
1820
const handleClick = (event: React.SyntheticEvent<HTMLDivElement>): void => {
19-
event.preventDefault();
20-
event.stopPropagation();
21+
if (!isOverlayHeaderActionEnabled) {
22+
event.preventDefault();
23+
event.stopPropagation();
24+
}
2125
};
2226
// @ts-ignore TODO: figure out why this is giving a TS error
2327
const { closeOverlay } = React.useContext(FlyoutContext);

src/components/flyout/__tests__/OverlayHeader.test.js

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,5 +52,30 @@ describe('components/flyout/OverlayHeader', () => {
5252
fireEvent.click(screen.getByRole('button'));
5353
expect(overlayClick).toHaveBeenCalledTimes(0);
5454
});
55+
56+
test.each([
57+
{
58+
isOverlayHeaderActionEnabled: false,
59+
expectedCallCount: 0,
60+
behavior: 'prevent default and stop propagation',
61+
},
62+
{ isOverlayHeaderActionEnabled: true, expectedCallCount: 1, behavior: 'allow default and propagation' },
63+
])(
64+
'should $behavior when isOverlayHeaderActionEnabled is $isOverlayHeaderActionEnabled',
65+
({ isOverlayHeaderActionEnabled, expectedCallCount }) => {
66+
const overlayClick = jest.fn();
67+
68+
render(
69+
<div role="presentation" onClick={overlayClick}>
70+
<OverlayHeader isOverlayHeaderActionEnabled={isOverlayHeaderActionEnabled}>
71+
<p>Hi</p>
72+
</OverlayHeader>
73+
</div>,
74+
);
75+
76+
fireEvent.click(screen.getByRole('button'));
77+
expect(overlayClick).toHaveBeenCalledTimes(expectedCallCount);
78+
},
79+
);
5580
});
5681
});

src/features/header-flyout/HeaderFlyout.js

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@ type Props = FlyoutProps & {
2020
header?: React.Element<any>,
2121
/** Optional function to get the scrollRef in parent components */
2222
scrollRefFn?: any => any,
23+
/** Are OverlayHeader actions enabled */
24+
isOverlayHeaderActionEnabled?: boolean,
2325
};
2426

2527
class HeaderFlyout extends React.Component<Props> {
@@ -30,7 +32,16 @@ class HeaderFlyout extends React.Component<Props> {
3032
};
3133

3234
render() {
33-
const { header, footer, flyoutButton, children, scrollRefFn, className, ...rest } = this.props;
35+
const {
36+
header,
37+
footer,
38+
flyoutButton,
39+
children,
40+
scrollRefFn,
41+
className,
42+
isOverlayHeaderActionEnabled = false,
43+
...rest
44+
} = this.props;
3445

3546
return (
3647
<Flyout
@@ -42,7 +53,9 @@ class HeaderFlyout extends React.Component<Props> {
4253
>
4354
{flyoutButton}
4455
<Overlay className="header-flyout-overlay">
45-
<OverlayHeader>{header && <h4 className="header-flyout-title">{header}</h4>}</OverlayHeader>
56+
<OverlayHeader isOverlayHeaderActionEnabled={isOverlayHeaderActionEnabled}>
57+
{header && <h4 className="header-flyout-title">{header}</h4>}
58+
</OverlayHeader>
4659
<div className="header-flyout-list-container">
4760
<div
4861
className={classNames('flyout-list-container-body', {

src/features/header-flyout/__tests__/__snapshots__/HeaderFlyout.test.js.snap

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,9 @@ exports[`components/core/header/components/HeaderFlyout render() should include
2121
<Overlay
2222
className="header-flyout-overlay"
2323
>
24-
<OverlayHeader>
24+
<OverlayHeader
25+
isOverlayHeaderActionEnabled={false}
26+
>
2527
<h4
2628
className="header-flyout-title"
2729
>
@@ -78,7 +80,9 @@ exports[`components/core/header/components/HeaderFlyout render() should render d
7880
<Overlay
7981
className="header-flyout-overlay"
8082
>
81-
<OverlayHeader />
83+
<OverlayHeader
84+
isOverlayHeaderActionEnabled={false}
85+
/>
8286
<div
8387
className="header-flyout-list-container"
8488
>
@@ -123,7 +127,9 @@ exports[`components/core/header/components/HeaderFlyout render() should render t
123127
<Overlay
124128
className="header-flyout-overlay"
125129
>
126-
<OverlayHeader />
130+
<OverlayHeader
131+
isOverlayHeaderActionEnabled={false}
132+
/>
127133
<div
128134
className="header-flyout-list-container"
129135
>

0 commit comments

Comments
 (0)