Skip to content

Commit fa43b3b

Browse files
committed
Do not render header actions when the panel is closed
1 parent 92f2336 commit fa43b3b

File tree

2 files changed

+63
-25
lines changed

2 files changed

+63
-25
lines changed

src/split-panel/__tests__/header.test.tsx

Lines changed: 60 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -19,36 +19,74 @@ describe('Split panel: Header slots', () => {
1919
});
2020

2121
describeEachAppLayout({ sizes: ['desktop', 'mobile'] }, () => {
22-
test('renders headerActions', () => {
23-
const { wrapper } = renderSplitPanel({
24-
props: { headerActions: <button>Action</button> },
22+
describe('with the panel open', () => {
23+
test('renders headerBefore', () => {
24+
const { wrapper } = renderSplitPanel({
25+
props: { headerBefore: <span>Before</span> },
26+
});
27+
expect(wrapper!.findHeaderBefore()).not.toBeNull();
28+
expect(wrapper!.findHeaderBefore()!.getElement()).toHaveTextContent('Before');
2529
});
26-
expect(wrapper!.findHeaderActions()).not.toBeNull();
27-
expect(wrapper!.findHeaderActions()!.getElement()).toHaveTextContent('Action');
28-
});
2930

30-
test('renders headerBefore', () => {
31-
const { wrapper } = renderSplitPanel({
32-
props: { headerBefore: <span>Before</span> },
31+
test('renders headerInfo', () => {
32+
const { wrapper } = renderSplitPanel({
33+
props: { headerInfo: <span>Info</span> },
34+
});
35+
expect(wrapper!.findHeaderInfo()).not.toBeNull();
36+
expect(wrapper!.findHeaderInfo()!.getElement()).toHaveTextContent('Info');
3337
});
34-
expect(wrapper!.findHeaderBefore()).not.toBeNull();
35-
expect(wrapper!.findHeaderBefore()!.getElement()).toHaveTextContent('Before');
36-
});
3738

38-
test('renders headerDescription', () => {
39-
const { wrapper } = renderSplitPanel({
40-
props: { headerDescription: 'Header description' },
39+
test('renders headerActions', () => {
40+
const { wrapper } = renderSplitPanel({
41+
props: { headerActions: <button>Action</button> },
42+
});
43+
expect(wrapper!.findHeaderActions()).not.toBeNull();
44+
expect(wrapper!.findHeaderActions()!.getElement()).toHaveTextContent('Action');
45+
});
46+
47+
test('renders headerDescription', () => {
48+
const { wrapper } = renderSplitPanel({
49+
props: { headerDescription: 'Header description' },
50+
});
51+
expect(wrapper!.findHeaderDescription()).not.toBeNull();
52+
expect(wrapper!.findHeaderDescription()!.getElement()).toHaveTextContent('Header description');
4153
});
42-
expect(wrapper!.findHeaderDescription()).not.toBeNull();
43-
expect(wrapper!.findHeaderDescription()!.getElement()).toHaveTextContent('Header description');
4454
});
4555

46-
test('renders headerInfo', () => {
47-
const { wrapper } = renderSplitPanel({
48-
props: { headerInfo: <span>Info</span> },
56+
describe('with the panel closed', () => {
57+
test('renders headerBefore', () => {
58+
const { wrapper } = renderSplitPanel({
59+
props: { headerBefore: <span>Before</span> },
60+
contextProps: { isOpen: false },
61+
});
62+
expect(wrapper!.findHeaderBefore()).not.toBeNull();
63+
expect(wrapper!.findHeaderBefore()!.getElement()).toHaveTextContent('Before');
64+
});
65+
66+
test('renders headerInfo', () => {
67+
const { wrapper } = renderSplitPanel({
68+
props: { headerInfo: <span>Info</span> },
69+
contextProps: { isOpen: false },
70+
});
71+
expect(wrapper!.findHeaderInfo()).not.toBeNull();
72+
expect(wrapper!.findHeaderInfo()!.getElement()).toHaveTextContent('Info');
73+
});
74+
75+
test('does not render headerActions', () => {
76+
const { wrapper } = renderSplitPanel({
77+
props: { headerActions: <button>Action</button> },
78+
contextProps: { isOpen: false },
79+
});
80+
expect(wrapper!.findHeaderActions()).toBeNull();
81+
});
82+
83+
test('does not render headerDescription', () => {
84+
const { wrapper } = renderSplitPanel({
85+
props: { headerDescription: 'Header description' },
86+
contextProps: { isOpen: false },
87+
});
88+
expect(wrapper!.findHeaderDescription()).toBeNull();
4989
});
50-
expect(wrapper!.findHeaderInfo()).not.toBeNull();
51-
expect(wrapper!.findHeaderInfo()!.getElement()).toHaveTextContent('Info');
5290
});
5391

5492
test('does not render header properties when not provided', () => {

src/split-panel/implementation.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -100,9 +100,9 @@ export function SplitPanelImplementation({
100100
const panelHeaderUniqueId = useUniqueId('split-panel-header');
101101
const panelHeaderId = ariaLabel ? undefined : panelHeaderUniqueId;
102102

103-
const hasCustomElements = !!headerActions || !!headerBefore || !!headerInfo;
104-
103+
const showActions = headerActions && isOpen;
105104
const showDescription = headerDescription && isOpen;
105+
const hasCustomElements = !!headerActions || !!headerBefore || !!headerInfo;
106106

107107
const wrappedHeader = (
108108
<div className={clsx(styles.header, isToolbar && styles['with-toolbar'])} style={appLayoutMaxWidth}>
@@ -127,7 +127,7 @@ export function SplitPanelImplementation({
127127
<span className={clsx(styles['header-info-slot'], testUtilStyles['header-info'])}>{headerInfo}</span>
128128
)}
129129
</div>
130-
{headerActions && (
130+
{showActions && (
131131
<div className={clsx(styles['header-actions-slot'], testUtilStyles['header-actions'])}>{headerActions}</div>
132132
)}
133133
</div>

0 commit comments

Comments
 (0)