Skip to content

Commit c10445c

Browse files
committed
Added inert attr to tree children
1 parent 9495704 commit c10445c

File tree

2 files changed

+34
-5
lines changed

2 files changed

+34
-5
lines changed

packages/react-core/src/components/DualListSelector/DualListSelectorTreeItem.tsx

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { memo, useContext, useEffect, useRef, useState } from 'react';
1+
import { memo, useContext, useEffect, useRef, useState, cloneElement, Children, isValidElement } from 'react';
22
import styles from '@patternfly/react-styles/css/components/DualListSelector/dual-list-selector';
33
import { css } from '@patternfly/react-styles';
44
import { DualListSelectorTreeItemData } from './DualListSelectorTree';
@@ -71,6 +71,15 @@ const DualListSelectorTreeItemBase: React.FunctionComponent<DualListSelectorTree
7171
setIsExpanded(defaultExpanded);
7272
}, [defaultExpanded]);
7373

74+
const clonedChildren = Children.map(
75+
children,
76+
(child) =>
77+
isValidElement(child) &&
78+
cloneElement(child as React.ReactElement<any>, {
79+
inert: isExpanded ? undefined : ''
80+
})
81+
);
82+
7483
return (
7584
<li
7685
className={css(
@@ -162,7 +171,7 @@ const DualListSelectorTreeItemBase: React.FunctionComponent<DualListSelectorTree
162171
</span>
163172
</div>
164173
</div>
165-
{(isExpanded || hasAnimations) && children}
174+
{(isExpanded || hasAnimations) && clonedChildren}
166175
</li>
167176
);
168177
};

packages/react-core/src/components/DualListSelector/__tests__/DualListSelectorTreeItem.test.tsx

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import { DualListSelectorTreeItem } from '../DualListSelectorTreeItem';
77
test('Does not render children by default', () => {
88
render(
99
<DualListSelectorTreeItem id="item-id" text="Test text">
10-
Children content
10+
<div>Children content</div>
1111
</DualListSelectorTreeItem>
1212
);
1313

@@ -17,7 +17,7 @@ test('Does not render children by default', () => {
1717
test('Renders children when defaultExpanded is true', () => {
1818
render(
1919
<DualListSelectorTreeItem defaultExpanded id="item-id" text="Test text">
20-
Children content
20+
<div>Children content</div>
2121
</DualListSelectorTreeItem>
2222
);
2323

@@ -27,9 +27,29 @@ test('Renders children when defaultExpanded is true', () => {
2727
test('Renders children when hasAnimations is true', () => {
2828
render(
2929
<DualListSelectorTreeItem hasAnimations id="item-id" text="Test text">
30-
Children content
30+
<div>Children content</div>
3131
</DualListSelectorTreeItem>
3232
);
3333

3434
expect(screen.getByText('Children content')).toBeVisible();
3535
});
36+
37+
test('Renders children with inert attribute by default when hasAnimations is true', () => {
38+
render(
39+
<DualListSelectorTreeItem hasAnimations id="item-id" text="Test text">
40+
<div>Children content</div>
41+
</DualListSelectorTreeItem>
42+
);
43+
44+
expect(screen.getByText('Children content')).toHaveAttribute('inert', '');
45+
});
46+
47+
test('Does not render children with inert attribute when hasAnimations and defaultExpanded are true', () => {
48+
render(
49+
<DualListSelectorTreeItem hasAnimations defaultExpanded id="item-id" text="Test text">
50+
<div>Children content</div>
51+
</DualListSelectorTreeItem>
52+
);
53+
54+
expect(screen.getByText('Children content')).not.toHaveAttribute('inert');
55+
});

0 commit comments

Comments
 (0)