@itwin/itwinui-react
Version:
A react component library for iTwinUI
72 lines (71 loc) • 1.91 kB
JavaScript
import cx from 'classnames';
import * as React from 'react';
import { DropdownMenu } from '../DropdownMenu/DropdownMenu.js';
import {
SvgCaretDownSmall,
SvgCaretUpSmall,
Box,
ButtonBase,
} from '../../utils/index.js';
import { HeaderBasicButton } from './HeaderBasicButton.js';
export const HeaderSplitButton = React.forwardRef((props, forwardedRef) => {
let {
menuItems,
className,
menuPlacement = 'bottom-end',
children,
disabled,
...rest
} = props;
let [isMenuOpen, setIsMenuOpen] = React.useState(false);
let [menuWidth, setMenuWidth] = React.useState(0);
let ref = React.useRef(null);
React.useEffect(() => {
if (ref.current) setMenuWidth(ref.current.offsetWidth);
}, [children]);
return React.createElement(
Box,
{
className: cx('iui-header-breadcrumb-button-wrapper', className),
ref: ref,
},
React.createElement(
HeaderBasicButton,
{
ref: forwardedRef,
disabled: disabled,
...rest,
},
children,
),
React.createElement(
DropdownMenu,
{
placement: menuPlacement,
menuItems: menuItems,
style: {
minInlineSize: menuWidth,
},
onVisibleChange: (open) => setIsMenuOpen(open),
},
React.createElement(
ButtonBase,
{
'aria-label': 'More',
className:
'iui-header-breadcrumb-button iui-header-breadcrumb-button-split',
disabled: disabled,
},
isMenuOpen
? React.createElement(SvgCaretUpSmall, {
className: 'iui-header-breadcrumb-button-dropdown-icon',
'aria-hidden': true,
})
: React.createElement(SvgCaretDownSmall, {
className: 'iui-header-breadcrumb-button-dropdown-icon',
'aria-hidden': true,
}),
),
),
);
});