Skip to content

Commit cb7a45c

Browse files
ryankshawjunyper
authored andcommitted
fix(List): ignore falsy children
See this for more details: facebook/react#2956 (comment) Test plan: * Try to render: <List> {someFalsyCondition && <ListItem>List item 1</ListItem> } {anotherFalsyCondition ? <ListItem>List item 2</ListItem> : null } <ListItem>List item 3</ListItem> </List> * it should not blow up Change-Id: Ib854a7fc207067ab24baf387496c954a9a6b5874 Reviewed-on: https://gerrit.instructure.com/136263 Tested-by: Jenkins Reviewed-by: Jennifer Stern <[email protected]> Product-Review: Jennifer Stern <[email protected]> QA-Review: Ryan Shaw <[email protected]>
1 parent 52ecc4c commit cb7a45c

File tree

2 files changed

+19
-0
lines changed

2 files changed

+19
-0
lines changed

packages/ui-core/src/components/List/__tests__/List.test.js

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,23 @@ describe('<List />', () => {
1818
expect(subject.find('li').length).to.equal(4)
1919
})
2020

21+
it('should filter out falsy/null children', () => {
22+
const testbed = new Testbed(
23+
<List>
24+
{null &&
25+
<ListItem>List item 1</ListItem>
26+
}
27+
{false &&
28+
<ListItem>List item 2</ListItem>
29+
}
30+
<ListItem>List item 3</ListItem>
31+
<ListItem>List item 4</ListItem>
32+
</List>
33+
)
34+
const subject = testbed.render()
35+
expect(subject.find('li').length).to.equal(2)
36+
})
37+
2138
it('should render an ordered list', () => {
2239
const subject = testbed.render({as: 'ol'})
2340
expect(subject.find('ol').length).to.equal(1)

packages/ui-core/src/components/List/index.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,8 @@ export default class List extends Component {
4949

5050
renderChildren () {
5151
return Children.map(this.props.children, (child) => {
52+
if (!child) return // ignore null, falsy children
53+
5254
return safeCloneElement(child, {
5355
variant: this.props.variant,
5456
delimiter: this.props.delimiter,

0 commit comments

Comments
 (0)