Skip to content

Commit 66b5cbb

Browse files
committed
Add support for React Fragments to CardList and FormLayout (#44)
Fragments are not traversed with `React.children.map()` [1][2] so we are using the `react-keyed-flatten-children` bundle to flatten the children to a one-dimensional array. This is necessary to be able to pass props to children of these layouts. [1] https://reactjs.org/docs/react-api.html#reactchildrenmap [2] reactjs/rfcs#61 (comment)
1 parent 8c8103c commit 66b5cbb

File tree

5 files changed

+60
-48
lines changed

5 files changed

+60
-48
lines changed

package-lock.json

Lines changed: 14 additions & 9 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,8 @@
1515
"normalize.css": "^8.0.1",
1616
"prop-types": "^15.7.2",
1717
"react": "^16.13.1",
18-
"react-dom": "^16.13.1"
18+
"react-dom": "^16.13.1",
19+
"react-keyed-flatten-children": "^1.2.0"
1920
},
2021
"devDependencies": {
2122
"@babel/cli": "^7.8.4",

src/demo/pages/DemoContainer.jsx

Lines changed: 40 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -422,49 +422,53 @@ class DemoContainer extends React.Component {
422422
name="Horizontal Form Layout"
423423
component={(
424424
<FormLayout fieldLayout="horizontal">
425-
<TextField
426-
id="formLayoutHorizontalFirstName"
427-
changeHandler={logger}
428-
label="First Name"
429-
/>
430-
<TextField
431-
id="formLayoutHorizontalLastName"
432-
changeHandler={logger}
433-
label="Last Name"
434-
/>
425+
<>
426+
<TextField
427+
id="formLayoutHorizontalFirstName"
428+
changeHandler={logger}
429+
label="First Name"
430+
/>
431+
<TextField
432+
id="formLayoutHorizontalLastName"
433+
changeHandler={logger}
434+
label="Last Name"
435+
/>
436+
</>
435437
<TextField
436438
id="formLayoutHorizontalEmail"
437439
changeHandler={logger}
438440
label="Email address"
439441
type="email"
440442
helperText="Optional"
441443
/>
442-
<TextField
443-
id="formLayoutHorizontalAddress1"
444-
changeHandler={logger}
445-
label="Address"
446-
placeholder="Address line 1"
447-
/>
448-
<TextField
449-
id="formLayoutHorizontalAddress2"
450-
changeHandler={logger}
451-
isLabelVisible={false}
452-
label="Address 2"
453-
placeholder="Address line 2"
454-
/>
455-
<TextField
456-
id="formLayoutHorizontalZip"
457-
changeHandler={logger}
458-
helperText="ZIP should be 5 to 6 digits long code."
459-
label="ZIP"
460-
inputSize={6}
461-
validationState="invalid"
462-
/>
463-
<TextField
464-
id="formLayoutHorizontalCountry"
465-
changeHandler={logger}
466-
label="Country"
467-
/>
444+
<>
445+
<TextField
446+
id="formLayoutHorizontalAddress1"
447+
changeHandler={logger}
448+
label="Address"
449+
placeholder="Address line 1"
450+
/>
451+
<TextField
452+
id="formLayoutHorizontalAddress2"
453+
changeHandler={logger}
454+
isLabelVisible={false}
455+
label="Address 2"
456+
placeholder="Address line 2"
457+
/>
458+
<TextField
459+
id="formLayoutHorizontalZip"
460+
changeHandler={logger}
461+
helperText="ZIP should be 5 to 6 digits long code."
462+
label="ZIP"
463+
inputSize={6}
464+
validationState="invalid"
465+
/>
466+
<TextField
467+
id="formLayoutHorizontalCountry"
468+
changeHandler={logger}
469+
label="Country"
470+
/>
471+
</>
468472
<SelectField
469473
id="formLayoutHorizontalFruit"
470474
changeHandler={logger}

src/lib/components/layout/CardList/CardList.jsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import flattenChildren from 'react-keyed-flatten-children';
12
import PropTypes from 'prop-types';
23
import React from 'react';
34
import styles from './CardList.scss';
@@ -19,7 +20,7 @@ const CardList = (props) => {
1920
className={styles.root}
2021
{...other}
2122
>
22-
{React.Children.map(children, (child) => {
23+
{flattenChildren(children).map((child) => {
2324
if (!React.isValidElement(child)) {
2425
return null;
2526
}

src/lib/components/layout/FormLayout/FormLayout.jsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import flattenChildren from 'react-keyed-flatten-children';
12
import PropTypes from 'prop-types';
23
import React from 'react';
34
import styles from './FormLayout.scss';
@@ -29,7 +30,7 @@ const FormLayout = (props) => {
2930
fieldLayoutClass(fieldLayout),
3031
].join(' ')}
3132
>
32-
{React.Children.map(children, (child) => {
33+
{flattenChildren(children).map((child) => {
3334
if (!React.isValidElement(child)) {
3435
return null;
3536
}

0 commit comments

Comments
 (0)