Skip to content

Commit 074469f

Browse files
authored
feat: convert HeaderMenuButton.js to HeaderMenuButton.tsx and add types (#13739)
1 parent 22c699a commit 074469f

File tree

1 file changed

+24
-14
lines changed

1 file changed

+24
-14
lines changed

packages/react/src/components/UIShell/HeaderMenuButton.js renamed to packages/react/src/components/UIShell/HeaderMenuButton.tsx

Lines changed: 24 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -8,46 +8,58 @@
88
import { Close, Menu } from '@carbon/icons-react';
99

1010
import cx from 'classnames';
11-
import React from 'react';
11+
import React, { type ComponentProps } from 'react';
1212
import PropTypes from 'prop-types';
1313
import { AriaLabelPropType } from '../../prop-types/AriaPropTypes';
1414
import { usePrefix } from '../../internal/usePrefix';
1515

16-
function HeaderMenuButton({
16+
type HeaderMenuButtonBaseProps = Omit<
17+
ComponentProps<'button'>,
18+
'title' | 'type'
19+
>;
20+
21+
interface HeaderMenuButtonProps extends HeaderMenuButtonBaseProps {
22+
'aria-label'?: string;
23+
'aria-labelledby'?: string;
24+
className?: string;
25+
renderMenuIcon?: JSX.Element;
26+
renderCloseIcon?: JSX.Element;
27+
isActive?: boolean;
28+
isCollapsible?: boolean;
29+
}
30+
31+
export default function HeaderMenuButton({
1732
'aria-label': ariaLabel,
1833
'aria-labelledby': ariaLabelledBy,
1934
className: customClassName,
2035
renderMenuIcon,
2136
renderCloseIcon,
22-
onClick,
2337
isActive,
2438
isCollapsible,
2539
...rest
26-
}) {
40+
}: HeaderMenuButtonProps) {
2741
const prefix = usePrefix();
2842
const className = cx({
29-
[customClassName]: !!customClassName,
43+
...(typeof customClassName === 'string' && {
44+
[customClassName]: !!customClassName,
45+
}),
3046
[`${prefix}--header__action`]: true,
3147
[`${prefix}--header__menu-trigger`]: true,
3248
[`${prefix}--header__action--active`]: isActive,
3349
[`${prefix}--header__menu-toggle`]: true,
3450
[`${prefix}--header__menu-toggle__hidden`]: !isCollapsible,
3551
});
36-
const accessibilityLabel = {
37-
'aria-label': ariaLabel,
38-
'aria-labelledby': ariaLabelledBy,
39-
};
4052
const menuIcon = renderMenuIcon ? renderMenuIcon : <Menu size={20} />;
4153
const closeIcon = renderCloseIcon ? renderCloseIcon : <Close size={20} />;
4254

4355
return (
4456
<button
4557
{...rest}
46-
{...accessibilityLabel}
58+
aria-label={ariaLabel}
59+
aria-labelledby={ariaLabelledBy}
4760
className={className}
4861
title={ariaLabel}
49-
type="button"
50-
onClick={onClick}>
62+
type="button">
5163
{isActive ? closeIcon : menuIcon}
5264
</button>
5365
);
@@ -76,5 +88,3 @@ HeaderMenuButton.propTypes = {
7688
*/
7789
onClick: PropTypes.func,
7890
};
79-
80-
export default HeaderMenuButton;

0 commit comments

Comments
 (0)