Skip to content

Commit 166edb5

Browse files
committed
chore(Header): use React.forwardRef() (#4237)
1 parent 0ef11e5 commit 166edb5

File tree

6 files changed

+18
-11
lines changed

6 files changed

+18
-11
lines changed

src/elements/Header/Header.js

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ import HeaderContent from './HeaderContent'
2323
/**
2424
* A header provides a short summary of content
2525
*/
26-
function Header(props) {
26+
const Header = React.forwardRef(function HeaderInner(props, ref) {
2727
const {
2828
attached,
2929
block,
@@ -65,7 +65,7 @@ function Header(props) {
6565

6666
if (!childrenUtils.isNil(children)) {
6767
return (
68-
<ElementType {...rest} className={classes}>
68+
<ElementType {...rest} className={classes} ref={ref}>
6969
{children}
7070
</ElementType>
7171
)
@@ -77,7 +77,7 @@ function Header(props) {
7777

7878
if (iconElement || imageElement) {
7979
return (
80-
<ElementType {...rest} className={classes}>
80+
<ElementType {...rest} className={classes} ref={ref}>
8181
{iconElement || imageElement}
8282
{(content || subheaderElement) && (
8383
<HeaderContent>
@@ -90,13 +90,14 @@ function Header(props) {
9090
}
9191

9292
return (
93-
<ElementType {...rest} className={classes}>
93+
<ElementType {...rest} className={classes} ref={ref}>
9494
{content}
9595
{subheaderElement}
9696
</ElementType>
9797
)
98-
}
98+
})
9999

100+
Header.displayName = 'Header'
100101
Header.propTypes = {
101102
/** An element type to render as (string or function). */
102103
as: PropTypes.elementType,

src/elements/Header/HeaderContent.js

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,19 +7,20 @@ import { childrenUtils, customPropTypes, getElementType, getUnhandledProps } fro
77
/**
88
* Header content wraps the main content when there is an adjacent Icon or Image.
99
*/
10-
function HeaderContent(props) {
10+
const HeaderContent = React.forwardRef(function HeaderContentInner(props, ref) {
1111
const { children, className, content } = props
1212
const classes = cx('content', className)
1313
const rest = getUnhandledProps(HeaderContent, props)
1414
const ElementType = getElementType(HeaderContent, props)
1515

1616
return (
17-
<ElementType {...rest} className={classes}>
17+
<ElementType {...rest} className={classes} ref={ref}>
1818
{childrenUtils.isNil(children) ? content : children}
1919
</ElementType>
2020
)
21-
}
21+
})
2222

23+
HeaderContent.displayName = 'HeaderContent'
2324
HeaderContent.propTypes = {
2425
/** An element type to render as (string or function). */
2526
as: PropTypes.elementType,

src/elements/Header/HeaderSubheader.js

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,19 +13,20 @@ import {
1313
/**
1414
* Headers may contain subheaders.
1515
*/
16-
function HeaderSubheader(props) {
16+
const HeaderSubheader = React.forwardRef(function HeaderSubheaderInner(props, ref) {
1717
const { children, className, content } = props
1818
const classes = cx('sub header', className)
1919
const rest = getUnhandledProps(HeaderSubheader, props)
2020
const ElementType = getElementType(HeaderSubheader, props)
2121

2222
return (
23-
<ElementType {...rest} className={classes}>
23+
<ElementType {...rest} className={classes} ref={ref}>
2424
{childrenUtils.isNil(children) ? content : children}
2525
</ElementType>
2626
)
27-
}
27+
})
2828

29+
HeaderSubheader.displayName = 'HeaderSubheader'
2930
HeaderSubheader.propTypes = {
3031
/** An element type to render as (string or function). */
3132
as: PropTypes.elementType,

test/specs/elements/Header/Header-test.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ import * as common from 'test/specs/commonTests'
1010

1111
describe('Header', () => {
1212
common.hasUIClassName(Header)
13+
common.forwardsRef(Header, { children: <span /> })
14+
common.forwardsRef(Header, { icon: 'book' })
1315
common.hasSubcomponents(Header, [HeaderContent, HeaderSubheader])
1416
common.rendersChildren(Header)
1517

test/specs/elements/Header/HeaderContent-test.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,5 +3,6 @@ import * as common from 'test/specs/commonTests'
33

44
describe('HeaderContent', () => {
55
common.isConformant(HeaderContent)
6+
common.forwardsRef(HeaderContent)
67
common.rendersChildren(HeaderContent)
78
})

test/specs/elements/Header/HeaderSubheader-test.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,5 +3,6 @@ import * as common from 'test/specs/commonTests'
33

44
describe('HeaderSubheader', () => {
55
common.isConformant(HeaderSubheader)
6+
common.forwardsRef(HeaderSubheader)
67
common.rendersChildren(HeaderSubheader)
78
})

0 commit comments

Comments
 (0)