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;