diff --git a/packages/core/src/layout/HeaderLabel/HeaderLabel.test.js b/packages/core/src/layout/HeaderLabel/HeaderLabel.test.tsx similarity index 83% rename from packages/core/src/layout/HeaderLabel/HeaderLabel.test.js rename to packages/core/src/layout/HeaderLabel/HeaderLabel.test.tsx index 2d9e97bb51..727c890e35 100644 --- a/packages/core/src/layout/HeaderLabel/HeaderLabel.test.js +++ b/packages/core/src/layout/HeaderLabel/HeaderLabel.test.tsx @@ -30,6 +30,13 @@ describe('', () => { expect(rendered.getByText('')).toBeInTheDocument(); }); + it('should say unknown when passing null as value prop', () => { + const rendered = render( + wrapInThemedTestApp(), + ); + expect(rendered.getByText('')).toBeInTheDocument(); + }); + it('should have value', () => { const rendered = render( wrapInThemedTestApp(), @@ -43,7 +50,7 @@ describe('', () => { , ), ); - const anchor = rendered.container.querySelector('a'); + const anchor = rendered.container.querySelector('a') as HTMLAnchorElement; expect(rendered.getByText('Value')).toBeInTheDocument(); expect(anchor.href).toBe('http://localhost/test'); }); diff --git a/packages/core/src/layout/HeaderLabel/HeaderLabel.js b/packages/core/src/layout/HeaderLabel/HeaderLabel.tsx similarity index 50% rename from packages/core/src/layout/HeaderLabel/HeaderLabel.js rename to packages/core/src/layout/HeaderLabel/HeaderLabel.tsx index 23c3f9507a..4349399194 100644 --- a/packages/core/src/layout/HeaderLabel/HeaderLabel.js +++ b/packages/core/src/layout/HeaderLabel/HeaderLabel.tsx @@ -14,12 +14,12 @@ * limitations under the License. */ -import React, { Component } from 'react'; -import PropTypes from 'prop-types'; -import { Typography, withStyles } from '@material-ui/core'; +import React, { FC } from 'react'; +import { Typography, makeStyles } from '@material-ui/core'; import { Link } from '@material-ui/core'; +import { BackstageTheme } from '../../theme/theme'; -const style = theme => ({ +const useStyles = makeStyles(theme => ({ root: { textAlign: 'left', margin: theme.spacing(2), @@ -40,27 +40,38 @@ const style = theme => ({ fontSize: 14, height: '16px', }, -}); +})); -class HeaderLabel extends Component { - static propTypes = { - label: PropTypes.string.isRequired, - value: PropTypes.node, - url: PropTypes.string, - }; +type HeaderLabelContentProps = { + value: React.ReactNode; + className: string; +}; - render() { - const { label, value, url, classes } = this.props; - const content = ( - {value || ''} - ); - return ( - - {label} - {url ? {content} : content} - - ); - } -} +const HeaderLabelContent: FC = ({ + value, + className, +}) => {value}; -export default withStyles(style)(HeaderLabel); +type HeaderLabelProps = { + label: string; + value?: HeaderLabelContentProps['value']; + url?: string; +}; + +const HeaderLabel: FC = ({ label, value, url }) => { + const classes = useStyles(); + const content = ( + '} + /> + ); + return ( + + {label} + {url ? {content} : content} + + ); +}; + +export default HeaderLabel;